From b54df0ddd0c6a0372327c5aa3668e5a6458fcd64 Mon Sep 17 00:00:00 2001 From: st782s Date: Thu, 4 May 2017 07:48:42 -0400 Subject: [PORTAL-7] Rebase This rebasing includes common libraries and common overlays projects abstraction of components Change-Id: I9a24a338665c7cd058978e8636bc412d9e2fdce8 Signed-off-by: st782s --- .../client/bower_components/jqTree/.bower.json | 28 - .../client/bower_components/jqTree/.editorconfig | 12 - .../client/bower_components/jqTree/.gitignore | 2 - .../client/bower_components/jqTree/.travis.yml | 12 - .../client/bower_components/jqTree/LICENSE | 202 - .../client/bower_components/jqTree/README.md | 63 - .../client/bower_components/jqTree/_config.yml | 18 - .../bower_components/jqTree/_entries/01_general.md | 7 - .../jqTree/_entries/02_introduction.md | 9 - .../jqTree/_entries/03_features.md | 15 - .../bower_components/jqTree/_entries/04_demo.html | 34 - .../jqTree/_entries/05_requirements.md | 6 - .../jqTree/_entries/06_downloads.md | 9 - .../jqTree/_entries/07_tutorial.md | 77 - .../jqTree/_entries/08_examples.md | 8 - .../jqTree/_entries/09_usecases.md | 17 - .../jqTree/_entries/10_changelog.md | 233 - .../bower_components/jqTree/_entries/11_options.md | 6 - .../jqTree/_entries/12_autoescape.md | 6 - .../jqTree/_entries/13_autoopen.md | 28 - .../jqTree/_entries/14_buttonleft.md | 12 - .../jqTree/_entries/15_closedicon.md | 12 - .../bower_components/jqTree/_entries/16_data.md | 46 - .../jqTree/_entries/17_datafilter.md | 17 - .../jqTree/_entries/18_data-url.md | 45 - .../jqTree/_entries/19_draganddrop.md | 18 - .../jqTree/_entries/20_keyboardsupport.md | 14 - .../jqTree/_entries/21_oncanmove.md | 22 - .../jqTree/_entries/22_oncanmoveto.md | 22 - .../jqTree/_entries/23_oncanselectnode.md | 26 - .../jqTree/_entries/24_oncreateli.md | 16 - .../jqTree/_entries/25_onismovehandle.md | 17 - .../jqTree/_entries/26_onloadfailed.md | 15 - .../jqTree/_entries/27_onloading.md | 22 - .../jqTree/_entries/28_openedicon.md | 12 - .../jqTree/_entries/29_openfolderdelay.md | 13 - .../bower_components/jqTree/_entries/30_rtl.md | 18 - .../jqTree/_entries/31_savestate.md | 42 - .../jqTree/_entries/32_selectable.md | 18 - .../bower_components/jqTree/_entries/33_slide.md | 12 - .../jqTree/_entries/34_usecontextmenu.md | 14 - .../jqTree/_entries/35_functions.md | 6 - .../jqTree/_entries/36_addnodeafter.md | 20 - .../jqTree/_entries/36a_addparentnode.md | 20 - .../jqTree/_entries/37_addnodebefore.md | 8 - .../jqTree/_entries/38_appendnode.md | 50 - .../jqTree/_entries/39_closenode.md | 23 - .../bower_components/jqTree/_entries/40_destroy.md | 12 - .../jqTree/_entries/41_getnodebycallback.md | 24 - .../jqTree/_entries/42_getnodebyid.md | 21 - .../jqTree/_entries/43_getnodebyhtmlelement.md | 29 - .../jqTree/_entries/44_getselectednode.md | 10 - .../jqTree/_entries/45_getstate.md | 19 - .../bower_components/jqTree/_entries/46_gettree.md | 12 - .../jqTree/_entries/47_loaddata.md | 46 - .../jqTree/_entries/48_loaddatafromurl.md | 55 - .../jqTree/_entries/49_movedown.md | 8 - .../jqTree/_entries/50_movenode.md | 15 - .../bower_components/jqTree/_entries/51_moveup.md | 8 - .../jqTree/_entries/52_opennode.md | 44 - .../bower_components/jqTree/_entries/53_reload.md | 22 - .../jqTree/_entries/54_removenode.md | 12 - .../jqTree/_entries/55_selectnode.md | 24 - .../jqTree/_entries/56_scrolltonode.md | 13 - .../jqTree/_entries/57_setoption.md | 12 - .../jqTree/_entries/58_setstate.md | 8 - .../bower_components/jqTree/_entries/59_toggle.md | 8 - .../bower_components/jqTree/_entries/60_tojson.md | 13 - .../jqTree/_entries/61_updatenode.md | 50 - .../bower_components/jqTree/_entries/62_events.md | 6 - .../jqTree/_entries/63_tree-click.md | 37 - .../jqTree/_entries/64_tree-close.md | 15 - .../jqTree/_entries/65_tree-contextmenu.md | 21 - .../jqTree/_entries/66_tree-dblclick.md | 19 - .../jqTree/_entries/67_tree-init.md | 15 - .../jqTree/_entries/68_tree-move.md | 73 - .../jqTree/_entries/69_tree-open.md | 15 - .../jqTree/_entries/70_tree-select.md | 28 - .../jqTree/_entries/71_multiple-selection.md | 9 - .../jqTree/_entries/72_add-to-selection.md | 11 - .../jqTree/_entries/73_get-selected-nodes.md | 10 - .../jqTree/_entries/74_is-node-selected.md | 11 - .../jqTree/_entries/75_remove-from-selection.md | 11 - .../jqTree/_entries/76_node-functions.md | 13 - .../jqTree/_entries/77_children.md | 12 - .../bower_components/jqTree/_entries/78_getdata.md | 17 - .../jqTree/_entries/79_getlevel.md | 13 - .../jqTree/_entries/80_getnextnode.md | 12 - .../jqTree/_entries/81_getnextsibling.md | 10 - .../jqTree/_entries/82_getpreviousnode.md | 12 - .../jqTree/_entries/83_getprevioussibling.md | 10 - .../bower_components/jqTree/_entries/84_parent.md | 10 - .../bower_components/jqTree/_entries/insert.py | 46 - .../bower_components/jqTree/_entries/renumber.py | 38 - .../jqTree/_examples/01_load_json_data.html | 47 - .../_examples/02_load_json_data_from_server.html | 31 - .../jqTree/_examples/03_drag_and_drop.html | 44 - .../jqTree/_examples/04_save_state.html | 52 - .../jqTree/_examples/05_load_on_demand.html | 70 - .../jqTree/_examples/06_autoescape.html | 47 - .../jqTree/_examples/07_autoscroll.html | 49 - .../jqTree/_examples/08_multiple_select.html | 72 - .../jqTree/_examples/09_custom_html.html | 68 - .../jqTree/_examples/10_icon_buttons.html | 28 - .../jqTree/_examples/11_right-to-left.html | 27 - .../jqTree/_examples/12_button_on_right.html | 27 - .../bower_components/jqTree/_layouts/base.html | 49 - .../jqTree/_layouts/frontpage.html | 20 - .../bower_components/jqTree/_layouts/page.html | 7 - .../client/bower_components/jqTree/bower.json | 18 - .../client/bower_components/jqTree/coffeelint.json | 122 - .../client/bower_components/jqTree/gulpfile.coffee | 57 - .../client/bower_components/jqTree/gulpfile.js | 2 - .../client/bower_components/jqTree/index.html | 48 - .../bower_components/jqTree/jqtree-circle.png | Bin 239 -> 0 bytes .../client/bower_components/jqTree/jqtree.css | 132 - .../bower_components/jqTree/jqtree.jquery.json | 23 - .../client/bower_components/jqTree/jqtree.scss | 197 - .../client/bower_components/jqTree/karma.conf.js | 59 - .../jqTree/lib/drag_and_drop_handler.js | 489 - .../jqTree/lib/elements_renderer.js | 220 - .../bower_components/jqTree/lib/key_handler.js | 120 - .../bower_components/jqTree/lib/mouse.widget.js | 191 - .../client/bower_components/jqTree/lib/node.js | 588 - .../bower_components/jqTree/lib/node_element.js | 226 - .../jqTree/lib/save_state_handler.js | 238 - .../bower_components/jqTree/lib/scroll_handler.js | 137 - .../jqTree/lib/select_node_handler.js | 111 - .../bower_components/jqTree/lib/simple.widget.js | 125 - .../bower_components/jqTree/lib/tree.jquery.js | 1101 -- .../client/bower_components/jqTree/lib/util.js | 49 - .../client/bower_components/jqTree/lib/version.js | 1 - .../client/bower_components/jqTree/package.json | 51 - .../bower_components/jqTree/phantomjs/runner.js | 193 - .../bower_components/jqTree/phantomjs/server.js | 14 - .../client/bower_components/jqTree/screenshot.png | Bin 31319 -> 0 bytes .../client/bower_components/jqTree/sitemap.txt | 13 - .../jqTree/src/drag_and_drop_handler.coffee | 491 - .../jqTree/src/elements_renderer.coffee | 237 - .../client/bower_components/jqTree/src/header.txt | 17 - .../bower_components/jqTree/src/key_handler.coffee | 107 - .../jqTree/src/mouse.widget.coffee | 184 - .../client/bower_components/jqTree/src/node.coffee | 490 - .../jqTree/src/node_element.coffee | 170 - .../jqTree/src/save_state_handler.coffee | 208 - .../jqTree/src/scroll_handler.coffee | 114 - .../jqTree/src/select_node_handler.coffee | 84 - .../jqTree/src/simple.widget.coffee | 107 - .../bower_components/jqTree/src/tree.jquery.coffee | 918 -- .../client/bower_components/jqTree/src/util.coffee | 48 - .../bower_components/jqTree/src/version.coffee | 1 - .../bower_components/jqTree/src_test/karma-test.js | 17 - .../bower_components/jqTree/src_test/test.js | 5 - .../jqTree/src_test/test_jqtree.js | 1390 --- .../bower_components/jqTree/src_test/test_tree.js | 726 -- .../bower_components/jqTree/src_test/test_util.js | 34 - .../jqTree/src_test/utils_for_test.js | 107 - .../bower_components/jqTree/static/bower.json | 16 - .../bower_components/blanket/dist/qunit/blanket.js | 5299 --------- .../bootstrap/dist/css/bootstrap-theme.min.css | 6 - .../bootstrap/dist/css/bootstrap.min.css | 6 - .../dist/fonts/glyphicons-halflings-regular.eot | Bin 20127 -> 0 bytes .../dist/fonts/glyphicons-halflings-regular.svg | 288 - .../dist/fonts/glyphicons-halflings-regular.ttf | Bin 45404 -> 0 bytes .../dist/fonts/glyphicons-halflings-regular.woff | Bin 23424 -> 0 bytes .../dist/fonts/glyphicons-halflings-regular.woff2 | Bin 18028 -> 0 bytes .../bootstrap/dist/js/bootstrap.min.js | 7 - .../fontawesome/css/font-awesome.min.css | 4 - .../fontawesome/fonts/FontAwesome.otf | Bin 134808 -> 0 bytes .../fontawesome/fonts/fontawesome-webfont.eot | Bin 165742 -> 0 bytes .../fontawesome/fonts/fontawesome-webfont.svg | 2671 ----- .../fontawesome/fonts/fontawesome-webfont.ttf | Bin 165548 -> 0 bytes .../fontawesome/fonts/fontawesome-webfont.woff | Bin 98024 -> 0 bytes .../fontawesome/fonts/fontawesome-webfont.woff2 | Bin 77160 -> 0 bytes .../bower_components/jquery-1/dist/jquery.js | 11008 ------------------- .../bower_components/jquery-1/dist/jquery.min.js | 5 - .../bower_components/jquery-2/dist/jquery.js | 9814 ----------------- .../bower_components/jquery-2/dist/jquery.min.js | 4 - .../jquery-cookie/jquery.cookie.js | 117 - .../jquery-mockjax/dist/jquery.mockjax.js | 1003 -- .../static/bower_components/jquery/dist/jquery.js | 10220 ----------------- .../bower_components/jquery/dist/jquery.min.js | 4 - .../static/bower_components/json3/lib/json3.js | 902 -- .../bower_components/pygments/css/monokai.css | 65 - .../static/bower_components/qunit/qunit/qunit.css | 431 - .../static/bower_components/qunit/qunit/qunit.js | 4366 -------- .../jqTree/static/documentation.css | 171 - .../jqTree/static/documentation.js | 51 - .../bower_components/jqTree/static/example.css | 60 - .../bower_components/jqTree/static/example.scss | 86 - .../bower_components/jqTree/static/example_data.js | 128 - .../jqTree/static/examples/autoescape.js | 19 - .../jqTree/static/examples/autoscroll.js | 8 - .../jqTree/static/examples/button-on-right.js | 15 - .../jqTree/static/examples/custom_html.js | 32 - .../jqTree/static/examples/drag_and_drop.js | 15 - .../jqTree/static/examples/icon_buttons.js | 14 - .../jqTree/static/examples/load_json_data.js | 21 - .../static/examples/load_json_data_from_server.js | 11 - .../jqTree/static/examples/load_on_demand.js | 20 - .../jqTree/static/examples/multiple_select.js | 27 - .../jqTree/static/examples/right-to-left.js | 13 - .../jqTree/static/examples/save_state.js | 13 - .../bower_components/jqTree/static/spinner.gif | Bin 673 -> 0 bytes .../client/bower_components/jqTree/test/test.html | 24 - .../bower_components/jqTree/test/test_build.js | 3267 ------ .../jqTree/test/test_jquery_1.html | 16 - .../jqTree/test/test_jquery_2.html | 16 - .../client/bower_components/jqTree/tree.jquery.js | 3640 ------ 209 files changed, 66812 deletions(-) delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/.bower.json delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/.editorconfig delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/.gitignore delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/.travis.yml delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/LICENSE delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/README.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_config.yml delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/01_general.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/02_introduction.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/03_features.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/04_demo.html delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/05_requirements.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/06_downloads.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/07_tutorial.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/08_examples.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/09_usecases.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/10_changelog.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/11_options.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/12_autoescape.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/13_autoopen.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/14_buttonleft.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/15_closedicon.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/16_data.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/17_datafilter.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/18_data-url.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/19_draganddrop.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/20_keyboardsupport.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/21_oncanmove.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/22_oncanmoveto.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/23_oncanselectnode.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/24_oncreateli.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/25_onismovehandle.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/26_onloadfailed.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/27_onloading.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/28_openedicon.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/29_openfolderdelay.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/30_rtl.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/31_savestate.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/32_selectable.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/33_slide.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/34_usecontextmenu.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/35_functions.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/36_addnodeafter.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/36a_addparentnode.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/37_addnodebefore.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/38_appendnode.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/39_closenode.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/40_destroy.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/41_getnodebycallback.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/42_getnodebyid.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/43_getnodebyhtmlelement.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/44_getselectednode.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/45_getstate.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/46_gettree.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/47_loaddata.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/48_loaddatafromurl.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/49_movedown.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/50_movenode.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/51_moveup.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/52_opennode.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/53_reload.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/54_removenode.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/55_selectnode.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/56_scrolltonode.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/57_setoption.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/58_setstate.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/59_toggle.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/60_tojson.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/61_updatenode.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/62_events.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/63_tree-click.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/64_tree-close.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/65_tree-contextmenu.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/66_tree-dblclick.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/67_tree-init.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/68_tree-move.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/69_tree-open.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/70_tree-select.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/71_multiple-selection.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/72_add-to-selection.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/73_get-selected-nodes.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/74_is-node-selected.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/75_remove-from-selection.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/76_node-functions.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/77_children.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/78_getdata.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/79_getlevel.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/80_getnextnode.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/81_getnextsibling.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/82_getpreviousnode.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/83_getprevioussibling.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/84_parent.md delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/insert.py delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_entries/renumber.py delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_examples/01_load_json_data.html delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_examples/02_load_json_data_from_server.html delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_examples/03_drag_and_drop.html delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_examples/04_save_state.html delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_examples/05_load_on_demand.html delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_examples/06_autoescape.html delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_examples/07_autoscroll.html delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_examples/08_multiple_select.html delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_examples/09_custom_html.html delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_examples/10_icon_buttons.html delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_examples/11_right-to-left.html delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_examples/12_button_on_right.html delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_layouts/base.html delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_layouts/frontpage.html delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/_layouts/page.html delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/bower.json delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/coffeelint.json delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/gulpfile.coffee delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/gulpfile.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/index.html delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/jqtree-circle.png delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/jqtree.css delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/jqtree.jquery.json delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/jqtree.scss delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/karma.conf.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/lib/drag_and_drop_handler.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/lib/elements_renderer.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/lib/key_handler.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/lib/mouse.widget.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/lib/node.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/lib/node_element.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/lib/save_state_handler.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/lib/scroll_handler.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/lib/select_node_handler.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/lib/simple.widget.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/lib/tree.jquery.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/lib/util.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/lib/version.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/package.json delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/phantomjs/runner.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/phantomjs/server.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/screenshot.png delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/sitemap.txt delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/src/drag_and_drop_handler.coffee delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/src/elements_renderer.coffee delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/src/header.txt delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/src/key_handler.coffee delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/src/mouse.widget.coffee delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/src/node.coffee delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/src/node_element.coffee delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/src/save_state_handler.coffee delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/src/scroll_handler.coffee delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/src/select_node_handler.coffee delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/src/simple.widget.coffee delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/src/tree.jquery.coffee delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/src/util.coffee delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/src/version.coffee delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/src_test/karma-test.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/src_test/test.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/src_test/test_jqtree.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/src_test/test_tree.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/src_test/test_util.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/src_test/utils_for_test.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/bower.json delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/blanket/dist/qunit/blanket.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/bootstrap/dist/css/bootstrap-theme.min.css delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/bootstrap/dist/css/bootstrap.min.css delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.eot delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.svg delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2 delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/bootstrap/dist/js/bootstrap.min.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/fontawesome/css/font-awesome.min.css delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/fontawesome/fonts/FontAwesome.otf delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/fontawesome/fonts/fontawesome-webfont.eot delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/fontawesome/fonts/fontawesome-webfont.svg delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/fontawesome/fonts/fontawesome-webfont.ttf delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/fontawesome/fonts/fontawesome-webfont.woff delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/fontawesome/fonts/fontawesome-webfont.woff2 delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/jquery-1/dist/jquery.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/jquery-1/dist/jquery.min.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/jquery-2/dist/jquery.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/jquery-2/dist/jquery.min.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/jquery-cookie/jquery.cookie.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/jquery-mockjax/dist/jquery.mockjax.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/jquery/dist/jquery.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/jquery/dist/jquery.min.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/json3/lib/json3.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/pygments/css/monokai.css delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/qunit/qunit/qunit.css delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/qunit/qunit/qunit.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/documentation.css delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/documentation.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/example.css delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/example.scss delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/example_data.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/examples/autoescape.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/examples/autoscroll.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/examples/button-on-right.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/examples/custom_html.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/examples/drag_and_drop.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/examples/icon_buttons.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/examples/load_json_data.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/examples/load_json_data_from_server.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/examples/load_on_demand.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/examples/multiple_select.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/examples/right-to-left.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/examples/save_state.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/static/spinner.gif delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/test/test.html delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/test/test_build.js delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/test/test_jquery_1.html delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/test/test_jquery_2.html delete mode 100644 ecomp-portal-FE/client/bower_components/jqTree/tree.jquery.js (limited to 'ecomp-portal-FE/client/bower_components/jqTree') diff --git a/ecomp-portal-FE/client/bower_components/jqTree/.bower.json b/ecomp-portal-FE/client/bower_components/jqTree/.bower.json deleted file mode 100644 index b75c9d88..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/.bower.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "jqTree", - "version": "1.3.7", - "main": [ - "jqtree.css", - "jqtree-circle.png", - "tree.jquery.js" - ], - "dependencies": { - "jquery": ">=1.9" - }, - "license": "Apache-2.0", - "ignore": [], - "keywords": [ - "jquery-plugin", - "tree" - ], - "homepage": "https://github.com/mbraak/jqTree", - "_release": "1.3.7", - "_resolution": { - "type": "version", - "tag": "1.3.7", - "commit": "88c58de867ed846ffdf7713af28f19e5aa3234f0" - }, - "_source": "https://github.com/mbraak/jqTree.git", - "_target": "^1.3.3", - "_originalSource": "jqtree" -} \ No newline at end of file diff --git a/ecomp-portal-FE/client/bower_components/jqTree/.editorconfig b/ecomp-portal-FE/client/bower_components/jqTree/.editorconfig deleted file mode 100644 index b7a840f1..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/.editorconfig +++ /dev/null @@ -1,12 +0,0 @@ -# EditorConfig helps developers define and maintain -# consistent coding styles between different editors and IDEs. - -root = true - -[*] -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true -indent_style = space -indent_size = 4 diff --git a/ecomp-portal-FE/client/bower_components/jqTree/.gitignore b/ecomp-portal-FE/client/bower_components/jqTree/.gitignore deleted file mode 100644 index 6a44007a..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules/ -data.lcov diff --git a/ecomp-portal-FE/client/bower_components/jqTree/.travis.yml b/ecomp-portal-FE/client/bower_components/jqTree/.travis.yml deleted file mode 100644 index 66eba51d..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/.travis.yml +++ /dev/null @@ -1,12 +0,0 @@ -language: node_js -node_js: - - "6.3.1" -sudo: false -before_script: - - npm install - - node phantomjs/server.js & - - sleep 5 -script: - - rm -f data.lcov - - phantomjs phantomjs/runner.js "http://localhost:8000/test/test.html?gruntReport&coverage" - - node node_modules/coveralls/bin/coveralls.js < data.lcov diff --git a/ecomp-portal-FE/client/bower_components/jqTree/LICENSE b/ecomp-portal-FE/client/bower_components/jqTree/LICENSE deleted file mode 100644 index d09301f1..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2011 Marco Braak - - 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. diff --git a/ecomp-portal-FE/client/bower_components/jqTree/README.md b/ecomp-portal-FE/client/bower_components/jqTree/README.md deleted file mode 100644 index 352afcbf..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/README.md +++ /dev/null @@ -1,63 +0,0 @@ -[![Travis Status](https://api.travis-ci.org/mbraak/jqTree.svg)](http://travis-ci.org/mbraak/jqTree) [![Coverage Status](https://img.shields.io/coveralls/mbraak/jqTree.svg)](https://coveralls.io/r/mbraak/jqTree) - -[![Bower version](https://img.shields.io/bower/v/jqtree.svg)](https://mbraak.github.io/jqTree/) [![NPM version](https://img.shields.io/npm/v/jqtree.svg)](https://www.npmjs.com/package/jqtree) - -# jqTree - -JqTree is a tree widget. Read more in the [documentation](https://mbraak.github.io/jqTree/). - -![screenshot](https://raw.github.com/mbraak/jqTree/master/screenshot.png) - -## Features - -* Create a tree from JSON data -* Drag and drop -* Works on ie8+, firefox, chrome and safari -* Written in Coffeescript - -The project is hosted on [github](https://github.com/mbraak/jqTree), has a [test suite](http://mbraak.github.io/jqTree/test/test.html). - -## Examples - -Example with ajax data: - -```html -
-``` - -```js -$('#tree1').tree(); -``` - -Example with static data: - -```js -var data = [ - { - label: 'node1', id: 1, - children: [ - { label: 'child1', id: 2 }, - { label: 'child2', id: 3 } - ] - }, - { - label: 'node2', id: 4, - children: [ - { label: 'child3', id: 5 } - ] - } -]; -$('#tree1').tree({ - data: data, - autoOpen: true, - dragAndDrop: true -}); -``` - -## Documentation - -The documentation is on http://mbraak.github.io/jqTree/. - -## Thanks - -The code for the mouse widget is heavily inspired by the mouse widget from jquery ui. diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_config.yml b/ecomp-portal-FE/client/bower_components/jqTree/_config.yml deleted file mode 100644 index 39f03c1b..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_config.yml +++ /dev/null @@ -1,18 +0,0 @@ -# Site settings -title: jqTree -email: your-email@domain.com -description: "JqTree docs" -baseurl: "/jqTree" -url: "http://mbraak.github.io/jqTree/" - -collections: - entries: - output: false - examples: - output: true - -jqtree_version: 1.3.7 - -# Build settings -markdown: kramdown -permalink: pretty diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/01_general.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/01_general.md deleted file mode 100644 index c25dfcc9..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/01_general.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: General -name: general -section: true -hide_title: true ---- - diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/02_introduction.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/02_introduction.md deleted file mode 100644 index be5205ca..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/02_introduction.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Introduction -name: introduction ---- - -JqTree is a jQuery widget for displaying a **tree structure** in html. It supports **json data**, loading via -**ajax** and **drag-and-drop**. - -[![Bower version](https://img.shields.io/bower/v/jqtree.svg)](https://mbraak.github.io/jqTree/) [![NPM version](https://img.shields.io/npm/v/jqtree.svg)](https://www.npmjs.com/package/jqtree) diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/03_features.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/03_features.md deleted file mode 100644 index 9c31e019..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/03_features.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Features -name: features ---- - -* Create a tree from JSON data -* Load data using ajax -* Drag and drop -* Saves the state -* Keyboard support -* Lazy loading -* Works on ie8+, firefox, chrome and safari -* Written in Coffeescript - -The project is [hosted on github](https://github.com/mbraak/jqTree), has a [test suite](test/test.html). There is also a [test suite for ie8 and older](test/test_jquery_1.html) and a [test suite for jquery 2](test/test_jquery_2.html). diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/04_demo.html b/ecomp-portal-FE/client/bower_components/jqTree/_entries/04_demo.html deleted file mode 100644 index d2b81b6e..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/04_demo.html +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: Demo -name: demo ---- - -
-
-{% highlight js %} -var data = [ - { - name: 'node1', id: 1, - children: [ - { name: 'child1', id: 2 }, - { name: 'child2', id: 3 } - ] - }, - { - name: 'node2', id: 4, - children: [ - { name: 'child3', id: 5 } - ] - } -]; -$('#tree1').tree({ - data: data, - autoOpen: true, - dragAndDrop: true -}); -{% endhighlight %} -
-
-
-
-
diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/05_requirements.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/05_requirements.md deleted file mode 100644 index d5890de4..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/05_requirements.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Requirements -name: requirements ---- - -* [jQuery](http://jquery.com) 1.9+, 2.x or 3.x diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/06_downloads.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/06_downloads.md deleted file mode 100644 index 77485b2e..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/06_downloads.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Downloads -name: downloads ---- - -* All (version {{ site.jqtree_version }}): [jqTree.tar.gz](https://github.com/mbraak/jqTree/tarball/master) -* Javascript: [tree.jquery.js](tree.jquery.js) -* Css: [jqtree.css](jqtree.css) -* Image: [jqtree-circle.png](jqtree-circle.png) diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/07_tutorial.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/07_tutorial.md deleted file mode 100644 index 55fe21e0..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/07_tutorial.md +++ /dev/null @@ -1,77 +0,0 @@ ---- -title: Tutorial -name: Tutorial ---- - -Include [jQuery](http://code.jquery.com/jquery.min.js) - -{% highlight html %} - -{% endhighlight %} - -Include tree.jquery.js: - -{% highlight html %} - -{% endhighlight %} - -Include jqtree.css: - -{% highlight html %} - -{% endhighlight %} - -Optionally, for saveState include [jquery-cookie](https://github.com/carhartl/jquery-cookie): - -{% highlight html %} - -{% endhighlight %} - -Create a div. - -{% highlight html %} -
-{% endhighlight %} - -Create tree data. - -{% highlight js %} -var data = [ - { - name: 'node1', - children: [ - { name: 'child1' }, - { name: 'child2' } - ] - }, - { - name: 'node2', - children: [ - { name: 'child3' } - ] - } -]; -{% endhighlight %} - -Create tree widget. - -{% highlight js %} -$(function() { - $('#tree1').tree({ - data: data - }); -}); -{% endhighlight %} - -Alternatively, get the data from the server. - -{% highlight js %} -$.getJSON( - '/some_url/', - function(data) { - $('#tree1').tree({ - data: data - }); - } -); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/08_examples.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/08_examples.md deleted file mode 100644 index 7911c85f..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/08_examples.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Examples -name: examples ---- - -{% for e in site.examples %} -* [{{ e.title }}]({{ site.baseurl }}{{ e.url }}) -{% endfor %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/09_usecases.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/09_usecases.md deleted file mode 100644 index f01ea2ef..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/09_usecases.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Use cases -name: usecases ---- - -Use cases or implementations of JqTree - -##### With AngularJS and FireBase -* [https://github.com/romelgomez/jqtree-angularjs-firebase-example](https://github.com/romelgomez/jqtree-angularjs-firebase-example) - -##### With CakePHP and OpenShift -* Code: [https://github.com/romelgomez/jqtree-cakephp-openshift-example](https://github.com/romelgomez/jqtree-cakephp-openshift-example) -* Demo: [http://jqtreecakephpexample-theteacher.rhcloud.com/](http://jqtreecakephpexample-theteacher.rhcloud.com/) - -##### With Spring MVC and Google App Engine -* Code: [https://github.com/romelgomez/jqtree-spring-mvc-gae-example](https://github.com/romelgomez/jqtree-spring-mvc-gae-example) -* Demo: [http://jqtree-spring-mvc-gae-example.appspot.com/](http://jqtree-spring-mvc-gae-example.appspot.com/) diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/10_changelog.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/10_changelog.md deleted file mode 100644 index 9c69467e..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/10_changelog.md +++ /dev/null @@ -1,233 +0,0 @@ ---- -title: Changelog -name: changelog ---- - -##### 1.3.7 (january 11 2017) - -* Issue 462: add on_finished parameter to openNode function -* Issue 467: fix autoscroll when tree position changes after tree init (thanks to Themre) - -##### 1.3.6 (november 5 2016) - -* Issue 453: make it possible to initialize the tree without data -* Issue 455: isNodeSelected must return boolean (thanks to Joshua Harrison) - -##### 1.3.5 (september 15 2016) - -* Issue 437: autoEscape option applies to dragged elements -* Issue 448: calling updateNode with an empty children array should remove the children - -##### 1.3.4 (july 18 2016) - -* Issue 433: Added getNodeByHtmlElement function -* Issue 435: Added getNodeByCallback function -* Issue 437: Fix XSS issue in drag and drop - -##### 1.3.3 (may 30 2016) - -* Issue 420: Set the correct aria-level after updating a node (thanks to Fermin Gallego) -* Issue 426 and 427: Make it possible to append a subtree using appendNode - * also works for addNodeAfter, addNodeBefore, prependNode and updateNode - -##### 1.3.2 (march 3 2016) - -* Issue 412: Set ajax parameters in dataUrl option (thanks to Atul Bajpai) -* Issue 415: Add onLoading callback parameter - -##### 1.3.0 (november 8 2015) - -* Issue 234: Added onDragMove and onDragStop callbacks -* Issue 394: Label displays 'null' in UI when the label key is null (thanks to Carlos Ponce) -* Issue 396: Trigger init.tree correctly for load on demand (thanks to jmashore) -* Issue 397: Aria accessibility support (thanks to Rich Caloggero) -* Issue 398: Functions should return the `jquery` element -* Issue 400: Added on_finished parameter to reload function -* Issue 402: Fix autoscroll when tree element is created outside the dom (thanks to hbaptiste) - -##### 1.2.1 (july 14 2015) - -* Issue 48: Added right-to-left support (thanks to Mohamed Ouederni, Ashraf Fayad and Udi Oron) -* Issue 371: Added include_parent parameter to getData function -* Issue 375: Fix conflict with prototype.js (thanks to Henry de Guzman) - -##### 1.1.0 (april 6 2015) - -* Issue 348: Circle for drag-and-drop is not positioned correctly for content box-sizing -* Issue 356: Fixed drag-and-drop after nodeUpdate (thanks to Iker Vázquez) -* Issue 360: Add a trailing semicolon to tree.jquery.js (thanks to David Thenon) - -##### 1.0.0 (january 11 2015) - -* Issues 273 and 304: autoOpen and saveState now works for nodes that are loaded on demand -* Issue 283: Added getNodesByProperty function (thanks to Neeraj) -* Issue 332: openNode should open parent nodes (thanks to Kitano Yoshitomo) -* Issue 335: Add cloneNode missing argument for Gecko <13.0 (thanks to Tvinky) -* Issue 337: Added functions for moving up and down -* Issue 341: Fixed drag-and-drop border when nodes have padding (thanks to Alex Musayev) - -##### 0.22 (september 25 2014) - -* Issue 291: Dragging Item - do not open node if you don't stay over it (thanks to Roman Klos) -* Issue 300: Toggle function should get default slide value from options (thanks to Tazle) -* Issue 303: Correctly set selected_node parameter in query string -* Issue 315: Fix for issue when moving node over closed folder (thanks to terrybr) -* Issue 320: Fixed error in drag and drop (thanks to Jerry Wu) - -##### 0.21 (june 7 2014) - -* Issue 263: Improve styling of toggle button -* Issue 266: Make it possible to use html for toggle buttons -* Issue 262: updateNode on first level makes node disappear (thanks to Miloš Đekić) -* Issue 260: Exempt 'select' elements from keyboard navigation (thanks to Eli Flanagan) -* Issue 270: Fixed error 'selected_single_node is not defined' (thanks to Bryan Smith) -* Issue 279: .jqtree-moving removed when loading subtree (thanks to Marc-Stefan Cassola) -* Issue 280: CSS3 Circle and style optimization (thanks to Marc-Stefan Cassola) -* Issue 283: Added function getNodesByProperty (thanks to Cedrik Vanderhaegen) -* Issue 292: Save state if multiple nodes are selected (thanks to MykhailoP) -* Issue 294: Handle click on input element in tree (thanks to Naeco33) - -##### 0.20 (march 9 2014) - -* Issue 235: Added setOption function -* Issue 241: Prevent duplicate event call after re-initalization -* Issue 246: Check if folder must be opened while moving node (thanks to Dave Gardner) -* Issue 247: Improve performance of updateNode (thanks to Gordon Woodhull) -* Issue 250: Improve performance of creating dom elements (thanks to Carlos Scheidegger) -* Issue 252: BorderDropHint has wrong height for border-box box-sizing (thanks to simshaun) -* Issue 253: Added reload function -* Issue 256: Toggler button is underlined -* Issue 257: Make it possible to open a lazily loaded folder using the keyboard -* Issue 258: Correctly unselect children if a node is reloaded - -##### 0.19 (december 8 2013) - -* Issue 225: Fixes TypeError when removing nodes without ids that aren't selected (thanks to Marcus McCurdy) -* Issue 222: scrollToNode does not consider direct parent -* Issue 228: add property click_event to tree.click and tree.dblclick events (thanks to Gordon Woodhull) -* Issue 78: Added option openFolderDelay: the delay for opening a folder during drag-and-drop (thanks to Jason Diamond) - -##### 0.18 (september 17 2013) - -* Issue 132: Skip keyboard handling if focus is on input element (thanks to Bingeling) -* Issue 179 and 180: Added dataFilter option to filter the returned data from jQuery.ajax (thanks to Cheton Wu and Tony Dilger) -* Issue 184: If the node id is 0, the id mapping is incorrect (thanks to Ika Wu) -* Issue 190: The function selectNode should not toggle (thanks to Gordon Woodhull) -* Issue 192: Added keyboardSupport option (thanks to Ika Wu) -* Issue 181: Added tree.dblclick event (thanks to eskaigualker) -* Issue 196: localStorage doesn't work in Safari private browsing (thanks to thebagg) -* Issue 203: Adding deselected_node attribute to event object of tree.select event (thanks to tedtoer) - -##### 0.17 (july 14 2013) - -* Issue 132: Added keyboard support -* Issue 154: Calling loadDataFromUrl should not trigger tree.init event (thanks to Davide Bellini) -* Issue 158: Index not updated on updateNode (thanks to Sam Mousa) -* Issue 159: Cannot reselect node after unselecting it (thanks to Comanche) -* Issue 162: Added getPreviousSibling and getNextSibling functions (thanks to Dimaninc) -* Issue 169: Added touch support (thanks to Comanche) -* Issue 171: Added functions getState and setState -* Issue 175: Make it possible to install jqTree using bower (thanks to Adam Miskiewicz) - -##### 0.16 (may 17 2013) - -* Issue 62: Added functions for multiple select -* Issue 125: Add option for overriding TRIANGLE_RIGHT and TRIANGLE_DOWN (thanks to Sam D) -* Issue 126: Event tree.open event fires after first tree.select on top level node -* Issue 129: Allow native context menu to be display (thanks to Charles Bourasseau) -* Issue 130: Selectable not implemented (thanks to Sam D) -* Issue 133: loadDataFromUrl doesn't work when only parent_node and callback are passed in (thanks to Simone Deponti) -* Issue 134: selectNode from inside tree.init breaks on loadData (thanks to Sam D) -* Issue 145: Auto-open nodes with drag n drop when drag not enabled for that node (thanks to Daniel Powell) -* Issue 146: Added function scrollToNode (thanks to Davide Bellini) - -##### 0.15 (march 16 2013) - -* Issue 100: Clicking on the jqtree-element element will trigger click event -* Issue 102: Add original event to tree.move event -* Issue 103: Added getLevel function to Node class -* Issue 104: The addNodeBefore method must return the new node -* Issue 105: Added nodeClass option -* Issue 112: Fix call to iterate in removeNode (thanks to Ingemar Ådahl) -* Issue 113: Added onLoadFailed option (thanks to Shuhei Kondo) -* Issue 118: Deselect a node when click and already selected -* Issue 119: Make it easier to reload a subtree -* Issue 121: Unselect node if it's reloaded by loadDataFromUrl - -##### 0.14 (december 2 2012) - -###### Api changes - -* Removed parameter **must_open_parents** from function **selectNode**. -* Changed **slide** parameter in functions **openNode** and **closeNode**. - -###### Issues - -* Issue 80: Support more options for loading data from the server. E.g. the 'post' method (thanks to Rodrigo Rosenfeld Rosas) -* Issue 81: getSelectedNode must return false if node is removed -* Issue 82: Autoscroll for drag-and-drop -* Issue 84: Fix correct type param in $.ajax() (thanks to Rodrigo Rosenfeld Rosas) -* Issue 85: Option to turn slide animation on or off -* Issue 86: The openNode function must automatically open parents -* Issue 87: Remove the must_open_parents parameter from the selectNode function -* Issue 88: selectNode must also work if selectable option is false -* Issue 89: Clicking in title with img or em does not work -* Issue 96: Added jqtree_common class to avoid css clashes (thanks to Yaniv Iny) - -##### 0.13 (october 10 2012) - -* Issue 54: Added tree.select event -* Issue 63: Fixed contextmenu event -* Issue 67: Use unicode characters for triangle buttons (thanks to Younès) -* Issue 70: Load data from the server using the loadData function -* Issue 78: Drag and drop is trigger happy - -##### 0.12 (august 14 2012) - -* Issue 46: Added tree.refresh event -* Issue 47: Function 'selectNode' must properly open the parent nodes -* Issue 49: Make sure that widget functions can be called in the 'tree.init' event -* Issue 50: Add namespace to css classes -* Issue 51: closeNode to collapse tree doesn't work -* Issue 55: Load-on-demand from the server -* Issue 58: Added updateNode function -* Issue 59: Added moveNode function -* Issue 60: Use native JSON.stringify function - -##### 0.11 (july 8 2012) - -* Autoescape text -* Added autoEscape option -* Issue 33: appendNode does not correctly refresh the tree -* Issue 34: unset internal pointer to previously selected node on DOM deselect -* Issue 38: Correctly check if browser has support for localstorage -* Issue 41: Open nodes are not displayed correctly in ie7 - -##### 0.10 (june 10 2012) - -* Optimized getNodeById -* Issue #18 and #26: Made comparison in getNodeById less strict -* Added function prependNode -* Added 'data-url' option -* Added removeNode function -* Issue #24: Tree with jquery ui Dialog: expand causes resize and move problem -* Added Travis ci support -* Added addNodeAfter, addNodeBefore and addParentNode -* Renamed icons.png to jqtree-icons.png -* selectNode with empty node deselects the current node - -##### 0.9 (may 9 2012) - -* Issue 15: 'tree.open' event is not triggered when dragging nodes -* Issue 18: Allow moveNode to be canceled through ev.preventDefault() -* Use sprite for images -* Added function closeNode -* Added support for localstorage -* Implemented alternative data format - -##### 0.8 (april 18 2012) - -* Replace jquery.ui widget with SimpleWidget -* Added 'previous_parent' to 'tree.move' event -* Add posibility to load subtree -* Added 'tree.open' and 'tree.close' events diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/11_options.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/11_options.md deleted file mode 100644 index 5f017c70..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/11_options.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Tree options -name: tree-options -section: true ---- - diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/12_autoescape.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/12_autoescape.md deleted file mode 100644 index dd959e4f..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/12_autoescape.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: autoEscape -name: options-autoescape ---- - -Determine if text is autoescaped. The default is true. diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/13_autoopen.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/13_autoopen.md deleted file mode 100644 index c140d1bf..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/13_autoopen.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: autoOpen -name: options-autoopen ---- - -Open nodes initially. - -* **true**: open all nodes. -* **false (default)**: do nothing -* **n**: open n levels - -Open all nodes initially: - -{% highlight js %} -$('#tree1').tree({ - data: data, - autoOpen: true -}); -{% endhighlight %} - -Open first level nodes: - -{% highlight js %} -$('#tree1').tree({ - data: data, - autoOpen: 0 -}); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/14_buttonleft.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/14_buttonleft.md deleted file mode 100644 index c5186c2d..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/14_buttonleft.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: buttonLeft -name: options-buttonleft ---- - -Set the position of the toggle button; can be `true` (left) or `false` (right). The default is `true`. - -{% highlight js %} -$('#tree1').tree({ - buttonLeft: false -}); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/15_closedicon.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/15_closedicon.md deleted file mode 100644 index 668abbdb..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/15_closedicon.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: closedIcon -name: options-closedicon ---- - -A character or symbol to display on closed nodes. The default is '&#x25ba;' (►) - -{% highlight js %} -$('#tree1').tree({ - closedIcon: '+' -}); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/16_data.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/16_data.md deleted file mode 100644 index 12588779..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/16_data.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: data -name: options-data ---- - -Define the contents of the tree. The data is a nested array of objects. This option is required. - -It looks like this: - -{% highlight js %} -var data = [ - { - name: 'node1', - children: [ - { name: 'child1' }, - { name: 'child2' } - ] - }, - { - name: 'node2', - children: [ - { name: 'child3' } - ] - } -]; -$('#tree1').tree({data: data}); -{% endhighlight %} - -* **name**: name of a node (required) - * Note that you can also use `label` instead of `name` -* **children**: array of child nodes (optional) -* **id**: int or string (optional) - * Must be an int or a string - * Must be unique in the tree - * The `id` property is required if you use the multiple selection feature - -You can also include other data in the objects. You can later access this data. - -For example, to add an id: - -{% highlight js %} -{ - name: 'node1', - id: 1 -} -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/17_datafilter.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/17_datafilter.md deleted file mode 100644 index 90316af2..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/17_datafilter.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: dataFilter -name: options-datafilter ---- - -Process the tree data from the server. - -{% highlight js %} -$('#tree1').tree({ - dataUrl: '/my/data/', - dataFilter: function(data) { - // Example: - // the server puts the tree data in 'my_tree_data' - return data['my_tree_data']; - } -}); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/18_data-url.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/18_data-url.md deleted file mode 100644 index 063c1514..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/18_data-url.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: dataUrl -name: options-data-url ---- - -Load the node data from this url. - -{% highlight js %} -$('#tree1').tree({ - dataUrl: '/example_data.json' -}); -{% endhighlight %} - -You can also set the **data-url** attribute on the dom element: - -{% highlight html %} -
- -{% endhighlight %} - -You can set additional [jquery ajax options](http://api.jquery.com/jQuery.ajax/) in an object: - -{% highlight js %} -$('#tree1').tree({ - dataUrl: { - url: '/example_data.json', - headers: {'abc': 'def'} - } -}); -{% endhighlight %} - -Or you can use a function: - -{% highlight js %} -$('#tree1').tree({ - dataUrl: function(node) { - return { - url: '/example_data.json', - headers: {'abc': 'def'} - }; - } -}); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/19_draganddrop.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/19_draganddrop.md deleted file mode 100644 index 01d80c15..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/19_draganddrop.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: dragAndDrop -name: options-draganddrop ---- - -Turn on dragging and dropping of nodes. - -* **true**: turn on drag and drop -* **false (default)**: do not allow drag and drop - -Example: turn on drag and drop. - -{% highlight js %} -$('#tree1').tree({ - data: data, - dragAndDrop: true -}); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/20_keyboardsupport.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/20_keyboardsupport.md deleted file mode 100644 index 46bd004e..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/20_keyboardsupport.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: keyboardSupport -name: options-keyboardsupport ---- - -Enable or disable keyboard support. Default is enabled. - -Example: disable keyboard support. - -{% highlight js %} -$('#tree1').tree({ - keyboardSupport: false -}); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/21_oncanmove.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/21_oncanmove.md deleted file mode 100644 index ee19cf06..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/21_oncanmove.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: onCanMove -name: options-oncanmove ---- - -You can override this function to determine if a node can be moved. - -{% highlight js %} -$('#tree1').tree({ - data: data, - dragAndDrop: true, - onCanMove: function(node) { - if (! node.parent.parent) { - // Example: Cannot move root node - return false; - } - else { - return true; - } - } -}); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/22_oncanmoveto.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/22_oncanmoveto.md deleted file mode 100644 index abd68c1e..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/22_oncanmoveto.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: onCanMoveTo -name: options-oncanmoveto ---- - -You can override this function to determine if a node can be moved to a certain position. - -{% highlight js %} -$('#tree1').tree({ - data: data, - dragAndDrop: true, - onCanMoveTo: function(moved_node, target_node, position) { - if (target_node.is_menu) { - // Example: can move inside menu, not before or after - return (position == 'inside'); - } - else { - return true; - } - } -}); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/23_oncanselectnode.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/23_oncanselectnode.md deleted file mode 100644 index 5bf15a25..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/23_oncanselectnode.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: onCanSelectNode -name: options-oncanselectnode ---- - -You can set a function to override if a node can be selected. The function gets a node as parameter, and must return true or false. - -For this to work, the option 'selectable' must be 'true'. - -{% highlight js %} -// Example: nodes with children cannot be selected -$('#tree1').tree({ - data: data, - selectable: true - onCanSelectNode: function(node) { - if (node.children.length == 0) { - // Nodes without children can be selected - return true; - } - else { - // Nodes with children cannot be selected - return false; - } - } -}); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/24_oncreateli.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/24_oncreateli.md deleted file mode 100644 index 3008f9d8..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/24_oncreateli.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: onCreateLi -name: options-oncreateli ---- - -The function is called for each created node. You can use this to define extra html. - -{% highlight js %} -$('#tree1').tree({ - data: data, - onCreateLi: function(node, $li) { - // Add 'icon' span before title - $li.find('.jqtree-title').before(''); - } -}); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/25_onismovehandle.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/25_onismovehandle.md deleted file mode 100644 index fc904d6f..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/25_onismovehandle.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: onIsMoveHandle -name: options-onismovehandle ---- - -You can override this function to determine if a dom element can be used to move a node. - -{% highlight js %} -$('#tree1').tree({ - data: data, - onIsMoveHandle: function($element) { - // Only dom elements with 'jqtree-title' class can be used - // as move handle. - return ($element.is('.jqtree-title')); - } -}); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/26_onloadfailed.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/26_onloadfailed.md deleted file mode 100644 index 42fe248d..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/26_onloadfailed.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: onLoadFailed -name: options-onloadfailed ---- - -When loading the data by ajax fails, then the option **onLoadFailed** is called. - -{% highlight js %} -$('#tree1').tree({ - dataUrl: '/my/data/', - onLoadFailed: function(response) { - // - } -}); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/27_onloading.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/27_onloading.md deleted file mode 100644 index db954f8c..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/27_onloading.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: onLoading -name: options-onloading ---- - -The onLoading parameter is called when the tree data is loading. This gives us the opportunity to display a loading signal. - -Callback looks like this: - -```js -function (is_loading, node, $el) -``` - -* **is_loading**: boolean - * true: data is loading - * false: data is loaded -* **node**: - * Node: if a node is loading - * null: if the tree is loading -* **$el**: - * if a node is loading this is the `li` element - * if the tree is loading is the `ul` element of the whole tree diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/28_openedicon.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/28_openedicon.md deleted file mode 100644 index f3e8c7a9..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/28_openedicon.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: openedIcon -name: options-openedicon ---- - -A character or symbol to display on opened nodes. The default is '&#x25bc;' (▼) - -{% highlight js %} -$('#tree1').tree({ - openedIcon: '-' -}); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/29_openfolderdelay.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/29_openfolderdelay.md deleted file mode 100644 index c47ad958..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/29_openfolderdelay.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: openFolderDelay -name: options-openfolderdelay ---- - -Set the delay for opening a folder during drag-and-drop. The delay is in milliseconds. The default is 500 ms. - -{% highlight js %} -$('#tree1').tree({ - dataUrl: '/my/data/', - openFolderDelay: 1000 -}); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/30_rtl.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/30_rtl.md deleted file mode 100644 index f9b20df1..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/30_rtl.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: rtl -name: options-rtl ---- - -Set right-to-left support (true / false). Default is false. - -{% highlight js %} -$('#tree1').tree({ - rtl: true -}); -{% endhighlight %} - -You can also set the option using ``data-rtl``. - -{% highlight html %} -
-{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/31_savestate.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/31_savestate.md deleted file mode 100644 index 3667129e..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/31_savestate.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: saveState -name: options-savestate ---- - -Save and restore the state of the tree automatically. Saves in a cookie which nodes are opened and selected. - -The state is saved in localstorage. In browsers that do not support localstorage, the state is saved in a cookie. -For this to work, please include [jquery-cookie](https://github.com/carhartl/jquery-cookie). - -For this to work, you should give each node in the tree data an id field: - -{% highlight js %} -{ - name: 'node1', - id: 123, - childen: [ - name: 'child1', - id: 124 - ] -} -{% endhighlight %} - -* **true**: save and restore state in a cookie -* **false (default)**: do nothing -* **string**: save state and use this name to store in a cookie - -{% highlight js %} -$('#tree1').tree({ - data: data, - saveState: true -}); -{% endhighlight %} - -Example: save state in key 'tree1': - -{% highlight js %} -$('#tree1').tree({ - data: data, - saveState: 'tree1' -}); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/32_selectable.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/32_selectable.md deleted file mode 100644 index 18dd4d31..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/32_selectable.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: selectable -name: options-selectable ---- - -Turn on selection of nodes. - -* **true (default)**: turn on selection of nodes -* **false**: turn off selection of nodes - -Example: turn off selection of nodes. - -{% highlight js %} -$('#tree1').tree({ - data: data, - selectable: false -}); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/33_slide.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/33_slide.md deleted file mode 100644 index 94a1b381..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/33_slide.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: slide -name: options-slide ---- - -Turn slide animation on or off. Default is true. - -{% highlight js %} -$('#tree1').tree({ - slide: false -}); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/34_usecontextmenu.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/34_usecontextmenu.md deleted file mode 100644 index 71137b03..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/34_usecontextmenu.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: useContextMenu -name: usecontextmenu ---- - -Bind the context menu event (true/false). - -**true** (default) - -A right mouse-click will trigger a [tree.contextmenu](#event-tree-contextmenu) event. This overrides the native contextmenu of the browser. - -**false** - -A right mouse-click will trigger the native contextmenu of the browser. diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/35_functions.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/35_functions.md deleted file mode 100644 index 6ee8428d..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/35_functions.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Functions -name: functions -section: true ---- - diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/36_addnodeafter.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/36_addnodeafter.md deleted file mode 100644 index a5abd263..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/36_addnodeafter.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: addNodeAfter -name: functions-addnodeafter ---- - -**function addNodeAfter(new_node_info, existing_node);** - -Add a new node after this existing node. - -{% highlight js %} -var node1 = $('#tree1', 'getNodeByName', 'node1'); -$('#tree1').tree( - 'addNodeAfter', - { - name: 'new_node', - id: 456 - }, - node1 -); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/36a_addparentnode.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/36a_addparentnode.md deleted file mode 100644 index 541af68c..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/36a_addparentnode.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: addParentNode -name: functions-addparentnode ---- - -**function addParentNode(new_node_info, existing_node);** - -Add a new node as parent of this existing node. - -{% highlight js %} -var node1 = $('#tree1', 'getNodeByName', 'node1'); -$('#tree1').tree( - 'addParentNode', - { - name: 'new_parent', - id: 456 - }, - node1 -); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/37_addnodebefore.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/37_addnodebefore.md deleted file mode 100644 index 1451754d..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/37_addnodebefore.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: addNodeBefore -name: functions-addnodebefore ---- - -**function addNodeBefore(new_node_info, existing_node);** - -Add a new node before this existing node. diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/38_appendnode.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/38_appendnode.md deleted file mode 100644 index 2eeea284..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/38_appendnode.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: appendNode -name: functions-appendnode ---- - -**function appendNode(new_node_info, parent_node);** - -Add a node to this parent node. If **parent_node** is empty, then the new node becomes a root node. - -{% highlight js %} -var parent_node = $tree.tree('getNodeById', 123); - -$tree.tree( - 'appendNode', - { - name: 'new_node', - id: 456 - }, - parent_node -); -{% endhighlight %} - -To add a root node, leave *parent_node* empty: - -{% highlight js %} -$tree.tree( - 'appendNode', - { - name: 'new_node', - id: 456 - } -); -{% endhighlight %} - -It's also possible to append a subtree: - -{% highlight js %} -$tree.tree( - 'appendNode', - { - name: 'new_node', - id: 456, - children: [ - { name: 'child1', id: 457 }, - { name: 'child2', id: 458 } - ] - }, - parent_node -); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/39_closenode.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/39_closenode.md deleted file mode 100644 index 0e90ae5d..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/39_closenode.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: closeNode -name: functions-closenode ---- - -**function closeNode(node);** - -**function closeNode(node, slide);** - -Close this node. The node must have child nodes. - -Parameter **slide**: close the node using a slide animation (default is true). - -{% highlight js %} -var node = $tree.tree('getNodeById', 123); -$tree.tree('closeNode', node); -{% endhighlight %} - -To close the node without the slide animation, call with **slide** parameter is false. - -{% highlight js %} -$tree.tree('closeNode', node, false); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/40_destroy.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/40_destroy.md deleted file mode 100644 index 54c12d21..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/40_destroy.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: destroy -name: functions-destroy ---- - -**function destroy();** - -Destroy the tree. This removes the dom elements and event bindings. - -{% highlight js %} -$('#tree1').tree('destroy'); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/41_getnodebycallback.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/41_getnodebycallback.md deleted file mode 100644 index e6519192..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/41_getnodebycallback.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: getNodeByCallback -name: functions-getnodebycallback ---- - -**function getNodeByCallback(callback);** - -Get a tree node using a callback. The callback should return true if the node is found. - -{% highlight js %} -var node = $('#tree1').tree( - 'getNodeByCallback', - function(node) { - if (node.name == 'abc') { - // Node is found; return true - return true; - } - else { - // Node not found; continue searching - return false; - } - } -); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/42_getnodebyid.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/42_getnodebyid.md deleted file mode 100644 index 8cc4b444..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/42_getnodebyid.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: getNodeById -name: functions-getnodebyid ---- - -**function getNodeById(id);** - -Get a tree node by node-id. This assumes that you have given the nodes in the data a unique id. - -{% highlight js %} -var $tree = $('#tree1'); -var data = [ - { id: 10, name: 'n1' }, - { id: 11, name: 'n2' } -]; - -$tree.tree({ - data: data -}); -var node = $tree.tree('getNodeById', 10); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/43_getnodebyhtmlelement.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/43_getnodebyhtmlelement.md deleted file mode 100644 index 926f90a5..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/43_getnodebyhtmlelement.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: getNodeByHtmlElement -name: functions-getnodebyhtmlelement ---- - -**function getNodeByHtmlElement(html_element);** - -Get a tree node by an html element. The html element should be: - -* The `li` element for the node -* Or, an element inside the `li`. For example the `span` for the title. - -{% highlight js %} -var element = document.querySelector('#tree1 .jqtree-title'); - -var node = $('#tree1').tree('getNodeByHtmlElement', element); - -console.log(node); -{% endhighlight %} - -The element can also be a jquery element: - -{% highlight js %} -var $element = $('#tree1 .jqtree-title'); - -var node = $('#tree1').tree('getNodeByHtmlElement', $element); - -console.log(node); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/44_getselectednode.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/44_getselectednode.md deleted file mode 100644 index d63bd9d4..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/44_getselectednode.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: getSelectedNode -name: functions-getselectednode ---- - -Get the selected node. Returns the row data or false. - -{% highlight js %} -var node = $tree.tree('getSelectedNode'); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/45_getstate.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/45_getstate.md deleted file mode 100644 index 04e0684c..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/45_getstate.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: getState -name: functions-getstate ---- - -Get the state of tree: which nodes are open and which one is selected? - -Returns a javascript object that contains the ids of open nodes and selected nodes: - -{% highlight js %} -{ - open_nodes: [1, 2, 3], - selected_node: [4, 5, 6] -} -{% endhighlight %} - -If you want to use this function, then your tree data should include an **id** property for each node. - -You can use this function in combination with [setState](#functions-setstate) to save and restore the tree state. diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/46_gettree.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/46_gettree.md deleted file mode 100644 index db898b0e..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/46_gettree.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: getTree -name: functions-gettree ---- - -**function getTree();** - -Get the root node of the tree. - -{% highlight js %} -var tree_data = $('#tree1').tree('getTree'); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/47_loaddata.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/47_loaddata.md deleted file mode 100644 index fb010961..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/47_loaddata.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: loadData -name: functions-loaddata ---- - -**function loadData(data);** - -**function loadData(data, parent_node);** - -Load data in the tree. The data is array of nodes. - -You can **replace the whole tree** or you can **load a subtree**. - -{% highlight js %} -// Assuming the tree exists -var new_data = [ - { - name: 'node1', - children: [ - { name: 'child1' }, - { name: 'child2' } - ] - }, - { - name: 'node2', - children: [ - { name: 'child3' } - ] - } -]; -$('#tree1').tree('loadData', new_data); -{% endhighlight %} - -Load a subtree: - -{% highlight js %} -// Get node by id (this assumes that the nodes have an id) -var node = $('#tree1').tree('getNodeById', 100); - -// Add new nodes -var data = [ - { name: 'new node' }, - { name: 'another new node' } -]; -$('#tree1').tree('loadData', data, node); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/48_loaddatafromurl.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/48_loaddatafromurl.md deleted file mode 100644 index 3a005f31..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/48_loaddatafromurl.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: loadDataFromUrl -name: functions-loaddatafromurl ---- - -**function loadDataFromUrl(url);** - -**function loadDataFromUrl(url, parent_node);** - -**function loadDataFromUrl(parent_node);** - -Load data in the tree from an url using ajax. You can **replace the whole tree** or you can **load a subtree**. - -{% highlight js %} -$('#tree1').tree('loadDataFromUrl', '/category/tree/'); -{% endhighlight %} - -Load a subtree: - -{% highlight js %} -var node = $('#tree1').tree('getNodeById', 123); -$('#tree1').tree('loadDataFromUrl', '/category/tree/123', node); -{% endhighlight %} - -You can also omit the url. In this case jqTree will generate a url for you. This is very useful if you use the load-on-demand feature: - -{% highlight js %} -var $tree = $('#tree1'); - -$tree.tree({ - dataUrl: '/my_data/' -}); - -var node = $tree.tree('getNodeById', 456); - -// jqTree will load data from /my_data/?node=456 -$tree.tree('loadDataFromUrl', node); -{% endhighlight %} - -You can also add an **on_finished** callback parameter that will be called when the data is loaded: - -**function loadDataFromUrl(url, parent_node, on_finished);** - -**function loadDataFromUrl(parent_node, on_finished);** - -{% highlight js %} -$('#tree1').tree( - 'loadDataFromUrl', - '/category/tree/123', - null, - function() { - alert('data is loaded'); - } -); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/49_movedown.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/49_movedown.md deleted file mode 100644 index 41cd3121..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/49_movedown.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: moveDown -name: functions-movedown ---- - -**function moveDown()** - -Select the next node. This does the same as the *down* key. \ No newline at end of file diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/50_movenode.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/50_movenode.md deleted file mode 100644 index c4697ec2..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/50_movenode.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: moveNode -name: functions-movenode ---- - -**function moveNode(node, target_node, position);** - -Move a node. Position can be 'before', 'after' or 'inside'. - -{% highlight js %} -var node = $tree.tree('getNodeById', 1); -var target_node = $tree.tree('getNodeById', 2); - -$tree.tree('moveNode', node, target_node, 'after'); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/51_moveup.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/51_moveup.md deleted file mode 100644 index d20cfa9a..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/51_moveup.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: moveUp -name: functions-moveup ---- - -**function moveUp()** - -Select the previous node. This does the same as the *up* key. \ No newline at end of file diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/52_opennode.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/52_opennode.md deleted file mode 100644 index 5c9a6c19..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/52_opennode.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: openNode -name: functions-opennode ---- - -**function openNode(node);** - -**function openNode(node, slide);** - -**function openNode(node, on_finished);** - -**function openNode(node, slide, on_finished);** - -Open this node. The node must have child nodes. - -Parameter **slide (optional)**: open the node using a slide animation (default is true). -Parameter **on_finished (optional)**: callback when the node is opened; this also works for nodes that are loaded lazily - -{% highlight js %} -// create tree -var $tree = $('#tree1'); -$tree.tree({ - data: data -}); - -var node = $tree.tree('getNodeById', 123); -$tree.tree('openNode', node); -{% endhighlight %} - -To open the node without the slide animation, call with **slide** parameter is false. - -{% highlight js %} -$tree.tree('openNode', node, false); -{% endhighlight %} - -Example with `on_finished` callback: - -{% highlight js %} -function handleOpened(node) { - console.log('openende node', node.name); -} - -$tree.tree('openNode', node, handleOpened); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/53_reload.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/53_reload.md deleted file mode 100644 index 7be6e8ac..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/53_reload.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: reload -name: functions-reload ---- - -**function reload();** - -**function reload(on_finished);** - -Reload data from the server. - -* Call `on_finished` when the data is loaded. - -{% highlight js %} -$('#tree1').tree('reload'); -{% endhighlight %} - -{% highlight js %} -$('#tree1').tree('reload', function() { - console.log('data is loaded'); -}); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/54_removenode.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/54_removenode.md deleted file mode 100644 index 8bfe8fd1..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/54_removenode.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: removeNode -name: functions-removenode ---- - -**function removeNode(node);** - -Remove node from the tree. - -{% highlight js %} -$('#tree1').tree('removeNode', node); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/55_selectnode.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/55_selectnode.md deleted file mode 100644 index a3ab45e7..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/55_selectnode.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: selectNode -name: functions-selectnode ---- - -**function selectNode(node);** - -**function selectNode(null);** - -Select this node. - -You can deselect the current node by calling **selectNode(null)**. - -{% highlight js %} -// create tree -var $tree = $('#tree1'); -$tree.tree({ - data: data, - selectable: true -}); - -var node = $tree.tree('getNodeById', 123); -$tree.tree('selectNode', node); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/56_scrolltonode.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/56_scrolltonode.md deleted file mode 100644 index e9ac2dcc..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/56_scrolltonode.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: scrollToNode -name: functions-scrolltonode ---- - -**function scrollToNode(node);** - -Scroll to this node. This is useful if the tree is in a container div and is scrollable. - -{% highlight js %} -var node = $tree.tree('getNodeById', 1); -$tree.tree('scrollToNode', node); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/57_setoption.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/57_setoption.md deleted file mode 100644 index f49608c0..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/57_setoption.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: setOption -name: functions-setoption ---- - -**function setOption(option, value);** - -Set a tree option. These are the same options that you can set when creating the tree. - -{% highlight js %} -$('#tree1').tree('setOption', 'keyboardSupport', false); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/58_setstate.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/58_setstate.md deleted file mode 100644 index 9c68cfa6..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/58_setstate.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: setState -name: functions-setstate ---- - -Set the state of the tree: which nodes are open and which one is selected? - -See [getState](#functions-getstate) for more information. diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/59_toggle.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/59_toggle.md deleted file mode 100644 index 3cf38939..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/59_toggle.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: toggle -name: functions-toggle ---- - -**function toggle(node);** - -Open or close the tree node. diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/60_tojson.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/60_tojson.md deleted file mode 100644 index 55da1d7b..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/60_tojson.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: toJson -name: functions-tojson ---- - -**function toJson();** - -Get the tree data as json. - -{% highlight js %} -// Assuming the tree exists -$('#tree1').tree('toJson'); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/61_updatenode.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/61_updatenode.md deleted file mode 100644 index 49005ed8..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/61_updatenode.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: updateNode -name: functions-updatenode ---- - -**function updateNode(node, name);** - -**function updateNode(node, data);** - -Update the title of a node. You can also update the data. - -Update the name: - -{% highlight js %} -var node = $tree.tree('getNodeById', 123); - -$tree.tree('updateNode', node, 'new name'); -{% endhighlight %} - -Update the data (including the name) - -{% highlight js %} -var node = $tree.tree('getNodeById', 123); - -$tree.tree( - 'updateNode', - node, - { - name: 'new name', - id: 1, - other_property: 'abc' - } -); -{% endhighlight %} - -It is also possible to update the children. Note that this removes the existing children: - -{% highlight js %} -$tree.tree( - 'updateNode', - node, - { - name: 'new name', - id: 1, - children: [ - { name: 'child1', id: 2 } - ] - } -); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/62_events.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/62_events.md deleted file mode 100644 index 065e4cd5..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/62_events.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Events -name: events -section: true ---- - diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/63_tree-click.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/63_tree-click.md deleted file mode 100644 index acd430dc..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/63_tree-click.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: tree.click -name: event-tree-click ---- - -Triggered when a tree node is clicked. The event contains the following properties: - -* **node**: the node that is clicked on -* **click_event**: the original click event - -{% highlight js %} -// create tree -$('#tree1').tree({ - data: data -}); - -// bind 'tree.click' event -$('#tree1').bind( - 'tree.click', - function(event) { - // The clicked node is 'event.node' - var node = event.node; - alert(node.name); - } -); -{% endhighlight %} - -The default action is to select the node. You can prevent the selection by calling **preventDefault**: - -{% highlight js %} -$('#tree1').bind( - 'tree.click', - function(event) { - event.preventDefault(); - } -); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/64_tree-close.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/64_tree-close.md deleted file mode 100644 index 1dd599cf..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/64_tree-close.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: tree.close -name: event-tree-close ---- - -Called when a node is closed. - -{% highlight js %} -$('#tree1').bind( - 'tree.close', - function(e) { - console.log(e.node); - } -); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/65_tree-contextmenu.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/65_tree-contextmenu.md deleted file mode 100644 index 9535c6cb..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/65_tree-contextmenu.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: tree.contextmenu -name: event-tree-contextmenu ---- - -Triggered when the user right-clicks a tree node. The event contains the following properties: - -* **node**: the node that is clicked on -* **click_event**: the original click event - -{% highlight js %} -// bind 'tree.contextmenu' event -$('#tree1').bind( - 'tree.contextmenu', - function(event) { - // The clicked node is 'event.node' - var node = event.node; - alert(node.name); - } -); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/66_tree-dblclick.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/66_tree-dblclick.md deleted file mode 100644 index 97768a38..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/66_tree-dblclick.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: tree.dblclick -name: event-tree-dblclick ---- - -The **tree.dblclick** is fired when a tree node is double-clicked. The event contains the following properties: - -* **node**: the node that is clicked on -* **click_event**: the original click event - -{% highlight js %} -$('#tree1').bind( - 'tree.dblclick', - function(event) { - // event.node is the clicked node - console.log(event.node); - } -); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/67_tree-init.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/67_tree-init.md deleted file mode 100644 index ca1acc53..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/67_tree-init.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: tree.init -name: event-tree-init ---- - -Called when the tree is initialized. This is particularly useful when the data is loaded from the server. - -{% highlight js %} -$('#tree1').bind( - 'tree.init', - function() { - // initializing code - } -); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/68_tree-move.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/68_tree-move.md deleted file mode 100644 index 897d65be..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/68_tree-move.md +++ /dev/null @@ -1,73 +0,0 @@ ---- -title: tree.move -name: event-tree-move ---- - -Triggered when the user moves a node. - -Note that this event is called **before** the node is moved. See note about `do_move` below. - -Event.move_info contains: - -* moved_node -* target_node -* position: (before, after or inside) -* previous_parent - -{% highlight js %} -$('#tree1').tree({ - data: data, - dragAndDrop: true -}); - -$('#tree1').bind( - 'tree.move', - function(event) { - console.log('moved_node', event.move_info.moved_node); - console.log('target_node', event.move_info.target_node); - console.log('position', event.move_info.position); - console.log('previous_parent', event.move_info.previous_parent); - } -); -{% endhighlight %} - -You can prevent the move by calling **event.preventDefault()** - -{% highlight js %} -$('#tree1').bind( - 'tree.move', - function(event) { - event.preventDefault(); - } -); -{% endhighlight %} - -You can later call **event.move_info.move_info.do_move()** to move the node. This way you can ask the user before moving the node: - -{% highlight js %} -$('#tree1').bind( - 'tree.move', - function(event) { - event.preventDefault(); - - if (confirm('Really move?')) { - event.move_info.do_move(); - } - } -); -{% endhighlight %} - -Note that if you want to serialise the tree, for example to POST back to a server, you need to let tree complete the move first: - -{% highlight js %} -$('#tree1').bind( - 'tree.move', - function(event) - { - event.preventDefault(); - // do the move first, and _then_ POST back. - event.move_info.do_move(); - $.post('your_url', {tree: $(this).tree('toJson')}); - } -); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/69_tree-open.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/69_tree-open.md deleted file mode 100644 index 2489510e..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/69_tree-open.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: tree.open -name: event-tree-open ---- - -Called when a node is opened. - -{% highlight js %} -$('#tree1').bind( - 'tree.open', - function(e) { - console.log(e.node); - } -); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/70_tree-select.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/70_tree-select.md deleted file mode 100644 index 4d62828a..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/70_tree-select.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: tree.select -name: event-tree-select ---- - -Triggered when a tree node is selected or deselected. - -If a node is selected, then **event.node** contains the selected node. - -If a node is deselected, then the **event.node** property is null. - -{% highlight js %} -$('#tree1').bind( - 'tree.select', - function(event) { - if (event.node) { - // node was selected - var node = event.node; - alert(node.name); - } - else { - // event.node is null - // a node was deselected - // e.previous_node contains the deselected node - } - } -); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/71_multiple-selection.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/71_multiple-selection.md deleted file mode 100644 index 15221640..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/71_multiple-selection.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Multiple selection -name: multiple-selection -section: true ---- - -Jqtree has some functions that can help you to implement multiple selection. See [Example 8 - multiple select](examples/08_multiple_select). - -In order for multiple selection to work, you must give the nodes an id. diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/72_add-to-selection.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/72_add-to-selection.md deleted file mode 100644 index 646fba1a..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/72_add-to-selection.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: addToSelection -name: multiple-selection-add-to-selection ---- - -Add this node to the selection - -{% highlight js %} -var node = $('#tree1').tree('getNodeById', 123); -$('#tree1').tree('addToSelection', node); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/73_get-selected-nodes.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/73_get-selected-nodes.md deleted file mode 100644 index 563d0683..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/73_get-selected-nodes.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: getSelectedNodes -name: multiple-selection-get-selected-nodes ---- - -Return a list of selected nodes. - -{% highlight js %} -var nodes = $('#tree1').tree('getSelectedNodes'); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/74_is-node-selected.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/74_is-node-selected.md deleted file mode 100644 index 7c0d9a32..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/74_is-node-selected.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: isNodeSelected -name: multiple-selection-is-node-selected ---- - -Return if this node is selected. - -{% highlight js %} -var node = $('#tree1').tree('getNodeById', 123); -var is_selected = $('#tree1').tree('isNodeSelected', node); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/75_remove-from-selection.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/75_remove-from-selection.md deleted file mode 100644 index 8b311074..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/75_remove-from-selection.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: removeFromSelection -name: multiple-selection-remove-from-selection ---- - -Remove this node from the selection. - -{% highlight js %} -var node = $('#tree1').tree('getNodeById', 123); -$('#tree1').tree('removeFromSelection', node); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/76_node-functions.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/76_node-functions.md deleted file mode 100644 index e4ebf7c9..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/76_node-functions.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Node functions -name: node-functions -section: true ---- - -You can access a node using for example [getNodeById](#functions-getnodebyid) function: - -{% highlight js %} -var node = $('#tree1').tree('getNodeById', 123); -{% endhighlight %} - -The Node object has the following properties and functions: diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/77_children.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/77_children.md deleted file mode 100644 index f04b357b..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/77_children.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: children -name: node-functions-children ---- - -You can access the children of a node using the **children** property. - -{% highlight js %} -for (var i=0; i < node.children.length; i++) { - var child = node.children[i]; -} -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/78_getdata.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/78_getdata.md deleted file mode 100644 index dff9020c..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/78_getdata.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: getData -name: node-functions-getdata ---- - -**function getData(include_parent = false);** - -Get the subtree of this node. - -**include_parent** - -* **true**: include node and children -* **false**: only include children (default) - -{% highlight js %} -var data = node.getData(); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/79_getlevel.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/79_getlevel.md deleted file mode 100644 index 183e63ca..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/79_getlevel.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: getLevel -name: node-functions-getlevel ---- - -Get the level of a node. The level is distance of a node to the root node. - -{% highlight js %} -var node = $('#tree1').tree('getNodeById', 123); - -// result is e.g. 2 -var level = node.getLevel(); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/80_getnextnode.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/80_getnextnode.md deleted file mode 100644 index 4364ad93..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/80_getnextnode.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: getNextNode -name: node-functions-getnextnode ---- - -Get the next node in the tree. Does the same as using the *down* key. - -Returns a node or null. - -{% highlight js %} -var node = node.getNextNode(); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/81_getnextsibling.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/81_getnextsibling.md deleted file mode 100644 index 03ff2e26..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/81_getnextsibling.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: getNextSibling -name: node-functions-getnextsibling ---- - -Get the next sibling of this node. Returns a node or null. - -{% highlight js %} -var node = node.getNextSibling(); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/82_getpreviousnode.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/82_getpreviousnode.md deleted file mode 100644 index 3560ff9b..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/82_getpreviousnode.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: getPreviousNode -name: node-functions-getpreviousnode ---- - -Get the previous node in the tree. Does the same as using the *up* key. - -Returns a node or null. - -{% highlight js %} -var node = node.getPreviousNode(); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/83_getprevioussibling.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/83_getprevioussibling.md deleted file mode 100644 index 4b417344..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/83_getprevioussibling.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: getPreviousSibling -name: node-functions-getprevioussibling ---- - -Get the previous sibling of this node. Returns a node or null. - -{% highlight js %} -var node = node.getPreviousSibling(); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/84_parent.md b/ecomp-portal-FE/client/bower_components/jqTree/_entries/84_parent.md deleted file mode 100644 index 83c635c1..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/84_parent.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: parent -name: node-functions-parent ---- - -You can access the parent of a node using the **parent** property. - -{% highlight js %} -var parent_node = node.parent; -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/insert.py b/ecomp-portal-FE/client/bower_components/jqTree/_entries/insert.py deleted file mode 100644 index d72ef4b9..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/insert.py +++ /dev/null @@ -1,46 +0,0 @@ -import os -import argparse -import re - - -parser = argparse.ArgumentParser() -parser.add_argument('index', type=int) - -args = parser.parse_args() - -insert_index = args.index - -filenames = os.listdir('.') - -file_tuples = [] - -re_file = re.compile(r'^(\d\d)_(.*)$') - -for filename in filenames: - m = re_file.match(filename) - - if m: - i = int(m.groups()[0]) - - t = i, filename - - file_tuples.append(t) - -file_tuples = sorted(file_tuples, key=lambda t: t[0]) - -for i, t in enumerate(file_tuples): - if i + 1 != t[0]: - raise Exception('Expected index %s for %s' % (i, t[1])) - -for i in range(insert_index - 1, len(file_tuples)): - old_filename = file_tuples[i][1] - - m = re_file.match(old_filename) - - filepart = m.groups()[1] - - new_filename = '%02d_%s' % (i + 2, filepart) - - print 'rename %s to %s' % (old_filename, new_filename) - - os.rename(old_filename, new_filename) diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_entries/renumber.py b/ecomp-portal-FE/client/bower_components/jqTree/_entries/renumber.py deleted file mode 100644 index 8efb0b6e..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_entries/renumber.py +++ /dev/null @@ -1,38 +0,0 @@ -import os -import re - - -filenames = os.listdir('.') - -file_tuples = [] - -re_file = re.compile(r'^(\d\d)_(.*)$') - -for filename in filenames: - m = re_file.match(filename) - - if m: - i = int(m.groups()[0]) - - t = i, filename - - file_tuples.append(t) - -file_tuples = sorted(file_tuples, key=lambda t: t[0]) - -for i, t in enumerate(file_tuples): - old_filename = file_tuples[i][1] - - m = re_file.match(old_filename) - - file_index = int(m.groups()[0]) - filepart = m.groups()[1] - - expected_index = i + 1 - - if file_index != expected_index: - new_filename = '%02d_%s' % (expected_index, filepart) - - print 'rename %s to %s' % (old_filename, new_filename) - - os.rename(old_filename, new_filename) diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_examples/01_load_json_data.html b/ecomp-portal-FE/client/bower_components/jqTree/_examples/01_load_json_data.html deleted file mode 100644 index c68461c7..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_examples/01_load_json_data.html +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: Load json data in javascript tree -layout: page -js: examples/load_json_data.js -css: example.css ---- - - - -

Example 1 - load json data

- -
- -

- In this example we load the data using the data option. - As you can see, the data is an array of objects. -

- - -{% highlight js %} -var data = [ - { - name: 'node1', id: 1, - children: [ - { name: 'child1', id: 2 }, - { name: 'child2', id: 3 } - ] - }, - { - name: 'node2', id: 4, - children: [ - { name: 'child3', id: 5 } - ] - } -]; - -$('#tree1').tree({ - data: data -}); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_examples/02_load_json_data_from_server.html b/ecomp-portal-FE/client/bower_components/jqTree/_examples/02_load_json_data_from_server.html deleted file mode 100644 index 266aad7a..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_examples/02_load_json_data_from_server.html +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: Load json data from the server in javascript tree -layout: page -js: examples/load_json_data_from_server.js -css: example.css ---- - - - -

Example 2 - load json data from the server

- -
- -

- In this example we load the data from the server using the data-url property on the dom element. -

- -

html

- -{% highlight html %} -
-{% endhighlight %} - -

javascript

- -{% highlight js %} -$('#tree1').tree(); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_examples/03_drag_and_drop.html b/ecomp-portal-FE/client/bower_components/jqTree/_examples/03_drag_and_drop.html deleted file mode 100644 index f000b285..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_examples/03_drag_and_drop.html +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Javascript tree with drag and drop -layout: page -js: examples/drag_and_drop.js -css: example.css ---- - - - -

Example 3 - Drag and drop

- -
- -

- Let's add drag-and-drop support by setting the option dragAndDrop to true. - You can now drag tree nodes to another position. -

- -

- Other options: -

- - - -

html

- -{% highlight html %} -
-{% endhighlight %} - -

javascript

- -{% highlight js %} -var $tree = $('#tree1'); -$tree.tree({ - dragAndDrop: true, - autoOpen: 0 -}); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_examples/04_save_state.html b/ecomp-portal-FE/client/bower_components/jqTree/_examples/04_save_state.html deleted file mode 100644 index 51962f6b..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_examples/04_save_state.html +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: Save the state in javascript tree -layout: page -js: examples/save_state.js -css: example.css ---- - - - -

Example 4 - Save the state

- -
- -

- If you set the option saveState to true, then jqtree remembers the tree state after a page reload. -

- - -

html

- -{% highlight html %} -
-{% endhighlight %} - -

javascript

- -{% highlight js %} -$('#tree1').tree({ - saveState: true -}); -{% endhighlight %} - -

- Giving the saveState a string value sets the storage key. The default key is 'tree'. -

- -{% highlight js %} -$('#tree1').tree({ - saveState: 'my-tree' -}); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_examples/05_load_on_demand.html b/ecomp-portal-FE/client/bower_components/jqTree/_examples/05_load_on_demand.html deleted file mode 100644 index 135036fa..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_examples/05_load_on_demand.html +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: Load nodes on demand from the server in javascript tree -layout: page -js: examples/load_on_demand.js -css: example.css ---- - - - -

Example 5 - Load nodes on demand from the server

- - -
- -

- In this example, the data is loaded on demand from the server. -
- To use load on demand, you must do the following: -

- - - -

first level of data

- -{% highlight js %} -[ - { - "label": "Saurischia", - "id": 1, - "load_on_demand": true - }, - { - "label": "Ornithischians", - "id": 23, - "load_on_demand": true - } -] -{% endhighlight %} - -

html

- -{% highlight html %} -
-{% endhighlight %} - -

javascript

- -{% highlight js %} -$('#tree1').tree({ - dragAndDrop: true -}); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_examples/06_autoescape.html b/ecomp-portal-FE/client/bower_components/jqTree/_examples/06_autoescape.html deleted file mode 100644 index 308d56a0..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_examples/06_autoescape.html +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: Javascript tree with autoescape -layout: page -js: examples/autoescape.js -css: example.css ---- - - - -

Example 6 - autoEscape

- -

- You can put html in the node titles setting the autoEscape option to false. -

- -
- -

html

- -{% highlight html %} -
-{% endhighlight %} - -

javascript

- -{% highlight js %} -var data = [ - { - label: 'examples', - children: [ - { name: 'Example 1' }, - { name: 'Example 2' }, - 'Example ' - ] - } -]; - -// set autoEscape to false -$('#tree1').tree({ - data: data, - autoEscape: false, - autoOpen: true -}); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_examples/07_autoscroll.html b/ecomp-portal-FE/client/bower_components/jqTree/_examples/07_autoscroll.html deleted file mode 100644 index 1f3aff07..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_examples/07_autoscroll.html +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: Javascript tree with autoscroll -layout: page -js: examples/autoscroll.js -css: example.css ---- - - - -

Example 7 - autoscroll

- -
-
-
- -

- This is an example of autoscroll. The tree will scroll automatically if you drag an item outside of the tree. -
- Autoscroll will work automatically. There is no option for it. -

- -

html

- -{% highlight html %} -
-
-
-{% endhighlight %} - -

css

- -{% highlight css %} -#scroll-container { - height: 200px; - overflow-y: scroll; - user-select: none; -} -{% endhighlight %} - -

js

- -{% highlight js %} -$('#tree1').tree({ - data: ExampleData.example_data -}); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_examples/08_multiple_select.html b/ecomp-portal-FE/client/bower_components/jqTree/_examples/08_multiple_select.html deleted file mode 100644 index 5331acf3..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_examples/08_multiple_select.html +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: Javascript tree with multiple select -layout: page -js: examples/multiple_select.js -css: example.css ---- - - - -

Example 8 - multiple select

- - -

- This example implements multiple select using the following functions and events: -

- - -
- -

html

- -{% highlight html %} -
-{% endhighlight %} - -

javascript

- -{% highlight js %} -$(function() { - var $tree = $('#tree1'); - $tree.tree({ - data: ExampleData.example_data, - autoOpen: true - }); - $tree.bind( - 'tree.click', - function(e) { - // Disable single selection - e.preventDefault(); - - var selected_node = e.node; - - if (selected_node.id == undefined) { - console.log('The multiple selection functions require that nodes have an id'); - } - - if ($tree.tree('isNodeSelected', selected_node)) { - $tree.tree('removeFromSelection', selected_node); - } - else { - $tree.tree('addToSelection', selected_node); - } - } - ); -}); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_examples/09_custom_html.html b/ecomp-portal-FE/client/bower_components/jqTree/_examples/09_custom_html.html deleted file mode 100644 index 4a0cebec..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_examples/09_custom_html.html +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: Javascript tree with custom html -layout: page -js: examples/custom_html.js -css: example.css ---- - - - -

Example 9 - custom html

- - -

- This example uses the onCreateLi option to create an edit link next to the tree node. -

-
- -

html

- -{% highlight html %} -
-{% endhighlight %} - -

javascript

- -{% highlight js %} -$(function() { - var $tree = $('#tree1'); - - $tree.tree({ - data: ExampleData.example_data, - autoOpen: 1, - onCreateLi: function(node, $li) { - // Append a link to the jqtree-element div. - // The link has an url '#node-[id]' and a data property 'node-id'. - $li.find('.jqtree-element').append( - 'edit' - ); - } - }); - - // Handle a click on the edit link - $tree.on( - 'click', '.edit', - function(e) { - // Get the id from the 'node-id' data property - var node_id = $(e.target).data('node-id'); - - // Get the node from the tree - var node = $tree.tree('getNodeById', node_id); - - if (node) { - // Display the node name - alert(node.name); - } - } - ); -}); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_examples/10_icon_buttons.html b/ecomp-portal-FE/client/bower_components/jqTree/_examples/10_icon_buttons.html deleted file mode 100644 index a4b23e3f..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_examples/10_icon_buttons.html +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Use icon toggle buttons -layout: page -js: examples/icon_buttons.js -css: example.css ---- - - - -

Example 10 - use icon toggle buttons

- -

- You can use the openedIcon and closedIcon options to use html for - the toggle buttons. You can for example use Fontawesome icons. -

-
- -

javascript

- -{% highlight js %} -$('#tree1').tree({ - closedIcon: $('<i class="fa fa-arrow-circle-right"></i>'), - openedIcon: $('<i class="fa fa-arrow-circle-down"></i>') -}); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_examples/11_right-to-left.html b/ecomp-portal-FE/client/bower_components/jqTree/_examples/11_right-to-left.html deleted file mode 100644 index f70d6117..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_examples/11_right-to-left.html +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: Right-to-left support -layout: page -js: examples/right-to-left.js -css: example.css ---- - - - -

Example 11 - right-to-left support

- -

- You can display the tree from right to left with the rtl option. -

- -
- -

javascript

- -{% highlight js %} -$('#tree1').tree({ - rtl: true -}); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_examples/12_button_on_right.html b/ecomp-portal-FE/client/bower_components/jqTree/_examples/12_button_on_right.html deleted file mode 100644 index 9e1bbc84..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_examples/12_button_on_right.html +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: Button on right -layout: page -js: examples/button-on-right.js -css: example.css ---- - - - -

Example 12 - button on right

- -

- You can put the toggle button on the right by setting the buttonLeft option to false. -

- -
- -

javascript

- -{% highlight js %} -$('#tree1').tree({ - buttonLeft: false, - autoOpen: 0 -}); -{% endhighlight %} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_layouts/base.html b/ecomp-portal-FE/client/bower_components/jqTree/_layouts/base.html deleted file mode 100644 index 08ec47d0..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_layouts/base.html +++ /dev/null @@ -1,49 +0,0 @@ - - - - - {% if page.title %}{{ page.title }}{% else %}{{ site.title }}{% endif %} - - - - - - - - - - - {% if page.css %} - - {% endif %} - - -{{ content }} - - - - - - - - - - - -{% if page.js %} - -{% endif %} - - diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_layouts/frontpage.html b/ecomp-portal-FE/client/bower_components/jqTree/_layouts/frontpage.html deleted file mode 100644 index 1bf0f0cc..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_layouts/frontpage.html +++ /dev/null @@ -1,20 +0,0 @@ ---- -layout: base ---- - -
-
-

jqTree

-

- JqTree is a jQuery widget for displaying a tree structure in html -
- It supports json data, loading via ajax and drag-and-drop. -

-

- Download jqTree -

-
-
-
- {{ content }} -
diff --git a/ecomp-portal-FE/client/bower_components/jqTree/_layouts/page.html b/ecomp-portal-FE/client/bower_components/jqTree/_layouts/page.html deleted file mode 100644 index c0d3f2af..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/_layouts/page.html +++ /dev/null @@ -1,7 +0,0 @@ ---- -layout: base ---- - -
-{{ content }} -
diff --git a/ecomp-portal-FE/client/bower_components/jqTree/bower.json b/ecomp-portal-FE/client/bower_components/jqTree/bower.json deleted file mode 100644 index b20991aa..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/bower.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "jqTree", - "version": "1.3.7", - "main": [ - "jqtree.css", - "jqtree-circle.png", - "tree.jquery.js" - ], - "dependencies": { - "jquery": ">=1.9" - }, - "license": "Apache-2.0", - "ignore": [], - "keywords": [ - "jquery-plugin", - "tree" - ] -} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/coffeelint.json b/ecomp-portal-FE/client/bower_components/jqTree/coffeelint.json deleted file mode 100644 index ea02bd1d..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/coffeelint.json +++ /dev/null @@ -1,122 +0,0 @@ -{ - "arrow_spacing": { - "level": "ignore" - }, - "braces_spacing": { - "level": "ignore", - "spaces": 0, - "empty_object_spaces": 0 - }, - "camel_case_classes": { - "level": "error" - }, - "coffeescript_error": { - "level": "error" - }, - "colon_assignment_spacing": { - "level": "ignore", - "spacing": { - "left": 0, - "right": 0 - } - }, - "cyclomatic_complexity": { - "value": 10, - "level": "ignore" - }, - "duplicate_key": { - "level": "error" - }, - "empty_constructor_needs_parens": { - "level": "ignore" - }, - "ensure_comprehensions": { - "level": "warn" - }, - "indentation": { - "value": 4, - "level": "error" - }, - "line_endings": { - "level": "ignore", - "value": "unix" - }, - "max_line_length": { - "value": 200, - "level": "error", - "limitComments": true - }, - "missing_fat_arrows": { - "level": "ignore", - "is_strict": false - }, - "newlines_after_classes": { - "value": 3, - "level": "ignore" - }, - "no_backticks": { - "level": "error" - }, - "no_debugger": { - "level": "warn" - }, - "no_empty_functions": { - "level": "ignore" - }, - "no_empty_param_list": { - "level": "ignore" - }, - "no_implicit_braces": { - "level": "ignore", - "strict": true - }, - "no_implicit_parens": { - "strict": true, - "level": "ignore" - }, - "no_interpolation_in_single_quotes": { - "level": "ignore" - }, - "no_plusplus": { - "level": "ignore" - }, - "no_stand_alone_at": { - "level": "ignore" - }, - "no_tabs": { - "level": "error" - }, - "no_throwing_strings": { - "level": "error" - }, - "no_trailing_semicolons": { - "level": "error" - }, - "no_trailing_whitespace": { - "level": "error", - "allowed_in_comments": false, - "allowed_in_empty_lines": true - }, - "no_unnecessary_double_quotes": { - "level": "ignore" - }, - "no_unnecessary_fat_arrows": { - "level": "warn" - }, - "non_empty_constructor_needs_parens": { - "level": "ignore" - }, - "prefer_english_operator": { - "level": "ignore", - "doubleNotLevel": "ignore" - }, - "space_operators": { - "level": "ignore" - }, - "spacing_after_comma": { - "level": "ignore" - }, - "transform_messes_up_line_numbers": { - "level": "warn" - } -} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/gulpfile.coffee b/ecomp-portal-FE/client/bower_components/jqTree/gulpfile.coffee deleted file mode 100644 index df5ff580..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/gulpfile.coffee +++ /dev/null @@ -1,57 +0,0 @@ -gulp = require 'gulp' -coffee = require 'gulp-coffee' -coffeeify = require 'gulp-coffeeify' -coffeelint = require 'gulp-coffeelint' -exec = require('child_process').exec -fs = require 'fs' -header = require 'gulp-header' -rename = require 'gulp-rename' -sass = require 'gulp-sass' - -pkg = require './package.json' - - -gulp.task 'jqtree', -> - banner = fs.readFileSync('src/header.txt') - - gulp.src './src/tree.jquery.coffee' - .pipe coffeeify() - .pipe header(banner, pkg: pkg) - .pipe gulp.dest('./') - -gulp.task 'lib', -> - gulp.src './src/*.coffee' - .pipe coffee(bare: true) - .pipe gulp.dest('./lib') - -gulp.task 'build_test', -> - gulp.src './src_test/test.js' - .pipe coffeeify() - .pipe rename('test_build.js') - .pipe gulp.dest('./test') - -gulp.task 'jekyll', (cb) -> - exec 'jekyll build', (err, stdout, stderr) -> - console.log(stdout) - console.log(stderr) - cb(err) - -gulp.task 'sass', -> - gulp.src './jqtree.scss' - .pipe sass(errLogToConsole: true) - .pipe gulp.dest('./') - -gulp.task 'example_sass', -> - gulp.src './static/example.scss' - .pipe sass(errLogToConsole: true) - .pipe gulp.dest('./static') - -gulp.task 'lint', -> - gulp.src './src/*.coffee' - .pipe coffeelint() - .pipe coffeelint.reporter() - -gulp.task 'watch', ['default'], -> - gulp.watch ['./src/*.coffee', './src/test.js', './jqtree.scss', './static/example.scss'], ['default'] - -gulp.task 'default', ['jqtree', 'build_test', 'lib', 'sass', 'example_sass'] diff --git a/ecomp-portal-FE/client/bower_components/jqTree/gulpfile.js b/ecomp-portal-FE/client/bower_components/jqTree/gulpfile.js deleted file mode 100644 index c7f2b8b8..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/gulpfile.js +++ /dev/null @@ -1,2 +0,0 @@ -require('coffee-script/register'); -require('./gulpfile.coffee'); diff --git a/ecomp-portal-FE/client/bower_components/jqTree/index.html b/ecomp-portal-FE/client/bower_components/jqTree/index.html deleted file mode 100644 index 67bf600b..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/index.html +++ /dev/null @@ -1,48 +0,0 @@ ---- -layout: frontpage -js: documentation.js -css: documentation.css ---- - -
-
- -
-
- {% for entry in site.entries %} - {% if entry.hide_title %} -
- {% elsif entry.section %} -

{{ entry.title }}

- {% else %} -

{{ entry.title }}

- {% endif %} - {{ entry.output }} - {% endfor %} -
-
diff --git a/ecomp-portal-FE/client/bower_components/jqTree/jqtree-circle.png b/ecomp-portal-FE/client/bower_components/jqTree/jqtree-circle.png deleted file mode 100644 index ba0e1dd6..00000000 Binary files a/ecomp-portal-FE/client/bower_components/jqTree/jqtree-circle.png and /dev/null differ diff --git a/ecomp-portal-FE/client/bower_components/jqTree/jqtree.css b/ecomp-portal-FE/client/bower_components/jqTree/jqtree.css deleted file mode 100644 index 6d07f164..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/jqtree.css +++ /dev/null @@ -1,132 +0,0 @@ -ul.jqtree-tree { - list-style: none outside; - margin-left: 0; - margin-bottom: 0; - padding: 0; } - ul.jqtree-tree ul.jqtree_common { - list-style: none outside; - margin-left: 12px; - margin-right: 0; - margin-bottom: 0; - padding: 0; - display: block; } - ul.jqtree-tree li.jqtree-closed > ul.jqtree_common { - display: none; } - ul.jqtree-tree li.jqtree_common { - clear: both; - list-style-type: none; } - ul.jqtree-tree .jqtree-toggler { - border-bottom: none; - color: #333; - text-decoration: none; - vertical-align: middle; } - ul.jqtree-tree .jqtree-toggler:hover { - color: #000; - text-decoration: none; } - ul.jqtree-tree .jqtree-toggler.jqtree-closed { - background-position: 0 0; } - ul.jqtree-tree .jqtree-toggler.jqtree-toggler-left { - margin-right: 0.5em; } - ul.jqtree-tree .jqtree-toggler.jqtree-toggler-right { - margin-left: 0.5em; } - ul.jqtree-tree .jqtree-element { - cursor: pointer; - position: relative; } - ul.jqtree-tree .jqtree-title { - color: #1C4257; - vertical-align: middle; - margin-left: 1.5em; } - ul.jqtree-tree .jqtree-title.jqtree-title-folder { - margin-left: 0; } - ul.jqtree-tree li.jqtree-folder { - margin-bottom: 4px; } - ul.jqtree-tree li.jqtree-folder.jqtree-closed { - margin-bottom: 1px; } - ul.jqtree-tree li.jqtree-ghost { - position: relative; - z-index: 10; - margin-right: 10px; - /* todo: add classes to span? */ } - ul.jqtree-tree li.jqtree-ghost span { - display: block; } - ul.jqtree-tree li.jqtree-ghost span.jqtree-circle { - border: solid 2px #0000ff; - -webkit-border-radius: 100px; - -moz-border-radius: 100px; - border-radius: 100px; - height: 8px; - width: 8px; - position: absolute; - top: -4px; - left: -6px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; } - ul.jqtree-tree li.jqtree-ghost span.jqtree-line { - background-color: #0000ff; - height: 2px; - padding: 0; - position: absolute; - top: -1px; - left: 2px; - width: 100%; } - ul.jqtree-tree li.jqtree-ghost.jqtree-inside { - margin-left: 48px; } - ul.jqtree-tree span.jqtree-border { - position: absolute; - display: block; - left: -2px; - top: 0; - border: solid 2px #0000ff; - border-radius: 6px; - margin: 0; - box-sizing: content-box; } - ul.jqtree-tree li.jqtree-selected > .jqtree-element, - ul.jqtree-tree li.jqtree-selected > .jqtree-element:hover { - background-color: #97BDD6; - background: -webkit-gradient(linear, left top, left bottom, from(#BEE0F5), to(#89AFCA)); - background: -moz-linear-gradient(top, #BEE0F5, #89AFCA); - background: -ms-linear-gradient(top, #BEE0F5, #89AFCA); - background: -o-linear-gradient(top, #BEE0F5, #89AFCA); - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.7); } - ul.jqtree-tree .jqtree-moving > .jqtree-element .jqtree-title { - outline: dashed 1px #0000ff; } - -ul.jqtree-tree.jqtree-rtl { - direction: rtl; } - ul.jqtree-tree.jqtree-rtl ul.jqtree_common { - margin-left: 0; - margin-right: 12px; } - ul.jqtree-tree.jqtree-rtl .jqtree-toggler { - margin-left: 0.5em; - margin-right: 0; } - ul.jqtree-tree.jqtree-rtl .jqtree-title { - margin-left: 0; - margin-right: 1.5em; } - ul.jqtree-tree.jqtree-rtl .jqtree-title.jqtree-title-folder { - margin-right: 0; } - ul.jqtree-tree.jqtree-rtl li.jqtree-ghost { - margin-right: 0; - margin-left: 10px; } - ul.jqtree-tree.jqtree-rtl li.jqtree-ghost span.jqtree-circle { - right: -6px; } - ul.jqtree-tree.jqtree-rtl li.jqtree-ghost span.jqtree-line { - right: 2px; } - ul.jqtree-tree.jqtree-rtl li.jqtree-ghost.jqtree-inside { - margin-left: 0; - margin-right: 48px; } - ul.jqtree-tree.jqtree-rtl span.jqtree-border { - right: -2px; } - -span.jqtree-dragging { - color: #fff; - background: #000; - opacity: 0.6; - cursor: pointer; - padding: 2px 8px; } - -/* IE 6, 7, 8 */ -@media \0screen\,screen\9 { - ul.jqtree-tree li.jqtree-ghost span.jqtree-circle { - background: url(jqtree-circle.png) no-repeat; - border: 0 none; } } diff --git a/ecomp-portal-FE/client/bower_components/jqTree/jqtree.jquery.json b/ecomp-portal-FE/client/bower_components/jqTree/jqtree.jquery.json deleted file mode 100644 index 1f348b8c..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/jqtree.jquery.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "jqtree", - "version": "1.3.7", - "title": "jqTree", - "description": "JqTree is a jQuery widget for displaying a tree structure in html. It supports json data, loading via ajax and drag-and-drop", - "keywords": [ - "tree" - ], - "author": { - "name": "Marco Braak" - }, - "homepage": "http://mbraak.github.io/jqTree/", - "download": "https://github.com/mbraak/jqTree/tarball/master", - "licenses": [ - { - "type": "Apache-2.0", - "url": "http://www.apache.org/licenses/LICENSE-2.0" - } - ], - "dependencies": { - "jquery": ">=1.5" - } -} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/jqtree.scss b/ecomp-portal-FE/client/bower_components/jqTree/jqtree.scss deleted file mode 100644 index d646bc68..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/jqtree.scss +++ /dev/null @@ -1,197 +0,0 @@ -ul.jqtree-tree { - list-style: none outside; - margin-left: 0; - margin-bottom: 0; - padding: 0; - - ul.jqtree_common { - list-style: none outside; - margin-left: 12px; - margin-right: 0; - margin-bottom: 0; - padding: 0; - display: block; - } - - li.jqtree-closed > ul.jqtree_common { - display: none; - } - - li.jqtree_common { - clear: both; - list-style-type: none; - } - - .jqtree-toggler { - border-bottom: none; - color: #333; - text-decoration: none; - vertical-align: middle; - - &:hover { - color: #000; - text-decoration: none; - } - - &.jqtree-closed { - background-position: 0 0; - } - - &.jqtree-toggler-left { - margin-right: 0.5em; - } - - &.jqtree-toggler-right { - margin-left: 0.5em; - } - } - - .jqtree-element { - cursor: pointer; - position: relative; - } - - .jqtree-title { - color: #1C4257; - vertical-align: middle; - margin-left: 1.5em; - - &.jqtree-title-folder { - margin-left: 0; - } - } - - li.jqtree-folder { - margin-bottom: 4px; - - &.jqtree-closed { - margin-bottom: 1px; - } - } - - li.jqtree-ghost { - position: relative; - z-index: 10; - margin-right: 10px; - - /* todo: add classes to span? */ - span { - display: block; - } - - span.jqtree-circle { - border: solid 2px #0000ff; - -webkit-border-radius: 100px; - -moz-border-radius: 100px; - border-radius: 100px; - height: 8px; - width: 8px; - position: absolute; - top: -4px; - left: -6px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - - span.jqtree-line { - background-color: #0000ff; - height: 2px; - padding: 0; - position: absolute; - top: -1px; - left: 2px; - width: 100%; - } - - &.jqtree-inside { - margin-left: 48px; - } - } - - span.jqtree-border { - position: absolute; - display: block; - left: -2px; - top: 0; - border: solid 2px #0000ff; - border-radius: 6px; - margin: 0; - box-sizing: content-box; - } - - li.jqtree-selected > .jqtree-element, - li.jqtree-selected > .jqtree-element:hover { - background-color: #97BDD6; - background: -webkit-gradient(linear, left top, left bottom, from(#BEE0F5), to(#89AFCA)); - background: -moz-linear-gradient(top, #BEE0F5, #89AFCA); - background: -ms-linear-gradient(top, #BEE0F5, #89AFCA); - background: -o-linear-gradient(top, #BEE0F5, #89AFCA); - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.7); - } - - .jqtree-moving > .jqtree-element .jqtree-title { - outline: dashed 1px #0000ff; - } -} - -ul.jqtree-tree.jqtree-rtl { - direction: rtl; - - ul.jqtree_common { - margin-left: 0; - margin-right: 12px; - } - - .jqtree-toggler { - margin-left: 0.5em; - margin-right: 0; - } - - .jqtree-title { - margin-left: 0; - margin-right: 1.5em; - - &.jqtree-title-folder { - margin-right: 0; - } - } - - li.jqtree-ghost { - margin-right: 0; - margin-left: 10px; - - span.jqtree-circle { - right: -6px; - } - - span.jqtree-line { - right: 2px; - } - - &.jqtree-inside { - margin-left: 0; - margin-right: 48px; - } - } - - span.jqtree-border { - right: -2px; - } -} - -span.jqtree-dragging { - color: #fff; - background: #000; - opacity: 0.6; - cursor: pointer; - padding: 2px 8px; -} - -/* IE 6, 7, 8 */ -@media \0screen\,screen\9 { - ul.jqtree-tree li.jqtree-ghost span.jqtree-circle { - background: url(jqtree-circle.png) no-repeat; - border: 0 none; - } -} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/karma.conf.js b/ecomp-portal-FE/client/bower_components/jqTree/karma.conf.js deleted file mode 100644 index 1356b737..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/karma.conf.js +++ /dev/null @@ -1,59 +0,0 @@ -// Karma configuration -// Generated on Mon Nov 24 2014 14:20:45 GMT+0100 (CET) - -module.exports = function(config) { - config.set({ - - // base path that will be used to resolve all patterns (eg. files, exclude) - basePath: '', - - // frameworks to use - // available frameworks: https://npmjs.org/browse/keyword/karma-adapter - frameworks: ['browserify', 'qunit'], - - // list of files / patterns to load in the browser - files: [ - 'src_test/karma-test.js', - 'static/bower_components/json3/lib/json3.js' - ], - - // list of files to exclude - exclude: [ - ], - - preprocessors: { - 'src_test/karma-test.js': ['browserify'] - }, - - browserify: { - transform: ['coffeeify'], - extensions: ['.js', '.coffee'] - }, - - // test results reporter to use - // possible values: 'dots', 'progress' - // available reporters: https://npmjs.org/browse/keyword/karma-reporter - reporters: ['progress'], - - // web server port - port: 9876, - - // enable / disable colors in the output (reporters and logs) - colors: true, - - // level of logging - // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG - logLevel: config.LOG_INFO, - - // enable / disable watching file and executing tests whenever any file changes - autoWatch: true, - - // start these browsers - // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher - browsers: ['Chrome', 'Firefox', 'PhantomJS', 'IE8 - WinXP'], - - // Continuous Integration mode - // if true, Karma captures browsers, runs the tests and exits - singleRun: false - }); -}; diff --git a/ecomp-portal-FE/client/bower_components/jqTree/lib/drag_and_drop_handler.js b/ecomp-portal-FE/client/bower_components/jqTree/lib/drag_and_drop_handler.js deleted file mode 100644 index 4fb0b307..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/lib/drag_and_drop_handler.js +++ /dev/null @@ -1,489 +0,0 @@ -var $, DragAndDropHandler, DragElement, HitAreasGenerator, Position, VisibleNodeIterator, node_module, util, - extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, - hasProp = {}.hasOwnProperty; - -node_module = require('./node'); - -util = require('./util'); - -Position = node_module.Position; - -$ = jQuery; - -DragAndDropHandler = (function() { - function DragAndDropHandler(tree_widget) { - this.tree_widget = tree_widget; - this.hovered_area = null; - this.$ghost = null; - this.hit_areas = []; - this.is_dragging = false; - this.current_item = null; - } - - DragAndDropHandler.prototype.mouseCapture = function(position_info) { - var $element, node_element; - $element = $(position_info.target); - if (!this.mustCaptureElement($element)) { - return null; - } - if (this.tree_widget.options.onIsMoveHandle && !this.tree_widget.options.onIsMoveHandle($element)) { - return null; - } - node_element = this.tree_widget._getNodeElement($element); - if (node_element && this.tree_widget.options.onCanMove) { - if (!this.tree_widget.options.onCanMove(node_element.node)) { - node_element = null; - } - } - this.current_item = node_element; - return this.current_item !== null; - }; - - DragAndDropHandler.prototype.mouseStart = function(position_info) { - var node, node_name, offset; - this.refresh(); - offset = $(position_info.target).offset(); - node = this.current_item.node; - if (this.tree_widget.options.autoEscape) { - node_name = util.html_escape(node.name); - } else { - node_name = node.name; - } - this.drag_element = new DragElement(node_name, position_info.page_x - offset.left, position_info.page_y - offset.top, this.tree_widget.element); - this.is_dragging = true; - this.current_item.$element.addClass('jqtree-moving'); - return true; - }; - - DragAndDropHandler.prototype.mouseDrag = function(position_info) { - var area, can_move_to; - this.drag_element.move(position_info.page_x, position_info.page_y); - area = this.findHoveredArea(position_info.page_x, position_info.page_y); - can_move_to = this.canMoveToArea(area); - if (can_move_to && area) { - if (!area.node.isFolder()) { - this.stopOpenFolderTimer(); - } - if (this.hovered_area !== area) { - this.hovered_area = area; - if (this.mustOpenFolderTimer(area)) { - this.startOpenFolderTimer(area.node); - } else { - this.stopOpenFolderTimer(); - } - this.updateDropHint(); - } - } else { - this.removeHover(); - this.removeDropHint(); - this.stopOpenFolderTimer(); - } - if (!area) { - if (this.tree_widget.options.onDragMove != null) { - this.tree_widget.options.onDragMove(this.current_item.node, position_info.original_event); - } - } - return true; - }; - - DragAndDropHandler.prototype.mustCaptureElement = function($element) { - return !$element.is('input,select,textarea'); - }; - - DragAndDropHandler.prototype.canMoveToArea = function(area) { - var position_name; - if (!area) { - return false; - } else if (this.tree_widget.options.onCanMoveTo) { - position_name = Position.getName(area.position); - return this.tree_widget.options.onCanMoveTo(this.current_item.node, area.node, position_name); - } else { - return true; - } - }; - - DragAndDropHandler.prototype.mouseStop = function(position_info) { - var current_item; - this.moveItem(position_info); - this.clear(); - this.removeHover(); - this.removeDropHint(); - this.removeHitAreas(); - current_item = this.current_item; - if (this.current_item) { - this.current_item.$element.removeClass('jqtree-moving'); - this.current_item = null; - } - this.is_dragging = false; - if (!this.hovered_area && current_item) { - if (this.tree_widget.options.onDragStop != null) { - this.tree_widget.options.onDragStop(current_item.node, position_info.original_event); - } - } - return false; - }; - - DragAndDropHandler.prototype.refresh = function() { - this.removeHitAreas(); - if (this.current_item) { - this.generateHitAreas(); - this.current_item = this.tree_widget._getNodeElementForNode(this.current_item.node); - if (this.is_dragging) { - return this.current_item.$element.addClass('jqtree-moving'); - } - } - }; - - DragAndDropHandler.prototype.removeHitAreas = function() { - return this.hit_areas = []; - }; - - DragAndDropHandler.prototype.clear = function() { - this.drag_element.remove(); - return this.drag_element = null; - }; - - DragAndDropHandler.prototype.removeDropHint = function() { - if (this.previous_ghost) { - return this.previous_ghost.remove(); - } - }; - - DragAndDropHandler.prototype.removeHover = function() { - return this.hovered_area = null; - }; - - DragAndDropHandler.prototype.generateHitAreas = function() { - var hit_areas_generator; - hit_areas_generator = new HitAreasGenerator(this.tree_widget.tree, this.current_item.node, this.getTreeDimensions().bottom); - return this.hit_areas = hit_areas_generator.generate(); - }; - - DragAndDropHandler.prototype.findHoveredArea = function(x, y) { - var area, dimensions, high, low, mid; - dimensions = this.getTreeDimensions(); - if (x < dimensions.left || y < dimensions.top || x > dimensions.right || y > dimensions.bottom) { - return null; - } - low = 0; - high = this.hit_areas.length; - while (low < high) { - mid = (low + high) >> 1; - area = this.hit_areas[mid]; - if (y < area.top) { - high = mid; - } else if (y > area.bottom) { - low = mid + 1; - } else { - return area; - } - } - return null; - }; - - DragAndDropHandler.prototype.mustOpenFolderTimer = function(area) { - var node; - node = area.node; - return node.isFolder() && !node.is_open && area.position === Position.INSIDE; - }; - - DragAndDropHandler.prototype.updateDropHint = function() { - var node_element; - if (!this.hovered_area) { - return; - } - this.removeDropHint(); - node_element = this.tree_widget._getNodeElementForNode(this.hovered_area.node); - return this.previous_ghost = node_element.addDropHint(this.hovered_area.position); - }; - - DragAndDropHandler.prototype.startOpenFolderTimer = function(folder) { - var openFolder; - openFolder = (function(_this) { - return function() { - return _this.tree_widget._openNode(folder, _this.tree_widget.options.slide, function() { - _this.refresh(); - return _this.updateDropHint(); - }); - }; - })(this); - this.stopOpenFolderTimer(); - return this.open_folder_timer = setTimeout(openFolder, this.tree_widget.options.openFolderDelay); - }; - - DragAndDropHandler.prototype.stopOpenFolderTimer = function() { - if (this.open_folder_timer) { - clearTimeout(this.open_folder_timer); - return this.open_folder_timer = null; - } - }; - - DragAndDropHandler.prototype.moveItem = function(position_info) { - var doMove, event, moved_node, position, previous_parent, target_node; - if (this.hovered_area && this.hovered_area.position !== Position.NONE && this.canMoveToArea(this.hovered_area)) { - moved_node = this.current_item.node; - target_node = this.hovered_area.node; - position = this.hovered_area.position; - previous_parent = moved_node.parent; - if (position === Position.INSIDE) { - this.hovered_area.node.is_open = true; - } - doMove = (function(_this) { - return function() { - _this.tree_widget.tree.moveNode(moved_node, target_node, position); - _this.tree_widget.element.empty(); - return _this.tree_widget._refreshElements(); - }; - })(this); - event = this.tree_widget._triggerEvent('tree.move', { - move_info: { - moved_node: moved_node, - target_node: target_node, - position: Position.getName(position), - previous_parent: previous_parent, - do_move: doMove, - original_event: position_info.original_event - } - }); - if (!event.isDefaultPrevented()) { - return doMove(); - } - } - }; - - DragAndDropHandler.prototype.getTreeDimensions = function() { - var offset; - offset = this.tree_widget.element.offset(); - return { - left: offset.left, - top: offset.top, - right: offset.left + this.tree_widget.element.width(), - bottom: offset.top + this.tree_widget.element.height() + 16 - }; - }; - - return DragAndDropHandler; - -})(); - -VisibleNodeIterator = (function() { - function VisibleNodeIterator(tree) { - this.tree = tree; - } - - VisibleNodeIterator.prototype.iterate = function() { - var _iterateNode, is_first_node; - is_first_node = true; - _iterateNode = (function(_this) { - return function(node, next_node) { - var $element, child, children_length, i, j, len, must_iterate_inside, ref; - must_iterate_inside = (node.is_open || !node.element) && node.hasChildren(); - if (node.element) { - $element = $(node.element); - if (!$element.is(':visible')) { - return; - } - if (is_first_node) { - _this.handleFirstNode(node, $element); - is_first_node = false; - } - if (!node.hasChildren()) { - _this.handleNode(node, next_node, $element); - } else if (node.is_open) { - if (!_this.handleOpenFolder(node, $element)) { - must_iterate_inside = false; - } - } else { - _this.handleClosedFolder(node, next_node, $element); - } - } - if (must_iterate_inside) { - children_length = node.children.length; - ref = node.children; - for (i = j = 0, len = ref.length; j < len; i = ++j) { - child = ref[i]; - if (i === (children_length - 1)) { - _iterateNode(node.children[i], null); - } else { - _iterateNode(node.children[i], node.children[i + 1]); - } - } - if (node.is_open) { - return _this.handleAfterOpenFolder(node, next_node, $element); - } - } - }; - })(this); - return _iterateNode(this.tree, null); - }; - - VisibleNodeIterator.prototype.handleNode = function(node, next_node, $element) {}; - - VisibleNodeIterator.prototype.handleOpenFolder = function(node, $element) {}; - - VisibleNodeIterator.prototype.handleClosedFolder = function(node, next_node, $element) {}; - - VisibleNodeIterator.prototype.handleAfterOpenFolder = function(node, next_node, $element) {}; - - VisibleNodeIterator.prototype.handleFirstNode = function(node, $element) {}; - - return VisibleNodeIterator; - -})(); - -HitAreasGenerator = (function(superClass) { - extend(HitAreasGenerator, superClass); - - function HitAreasGenerator(tree, current_node, tree_bottom) { - HitAreasGenerator.__super__.constructor.call(this, tree); - this.current_node = current_node; - this.tree_bottom = tree_bottom; - } - - HitAreasGenerator.prototype.generate = function() { - this.positions = []; - this.last_top = 0; - this.iterate(); - return this.generateHitAreas(this.positions); - }; - - HitAreasGenerator.prototype.getTop = function($element) { - return $element.offset().top; - }; - - HitAreasGenerator.prototype.addPosition = function(node, position, top) { - var area; - area = { - top: top, - node: node, - position: position - }; - this.positions.push(area); - return this.last_top = top; - }; - - HitAreasGenerator.prototype.handleNode = function(node, next_node, $element) { - var top; - top = this.getTop($element); - if (node === this.current_node) { - this.addPosition(node, Position.NONE, top); - } else { - this.addPosition(node, Position.INSIDE, top); - } - if (next_node === this.current_node || node === this.current_node) { - return this.addPosition(node, Position.NONE, top); - } else { - return this.addPosition(node, Position.AFTER, top); - } - }; - - HitAreasGenerator.prototype.handleOpenFolder = function(node, $element) { - if (node === this.current_node) { - return false; - } - if (node.children[0] !== this.current_node) { - this.addPosition(node, Position.INSIDE, this.getTop($element)); - } - return true; - }; - - HitAreasGenerator.prototype.handleClosedFolder = function(node, next_node, $element) { - var top; - top = this.getTop($element); - if (node === this.current_node) { - return this.addPosition(node, Position.NONE, top); - } else { - this.addPosition(node, Position.INSIDE, top); - if (next_node !== this.current_node) { - return this.addPosition(node, Position.AFTER, top); - } - } - }; - - HitAreasGenerator.prototype.handleFirstNode = function(node, $element) { - if (node !== this.current_node) { - return this.addPosition(node, Position.BEFORE, this.getTop($(node.element))); - } - }; - - HitAreasGenerator.prototype.handleAfterOpenFolder = function(node, next_node, $element) { - if (node === this.current_node.node || next_node === this.current_node.node) { - return this.addPosition(node, Position.NONE, this.last_top); - } else { - return this.addPosition(node, Position.AFTER, this.last_top); - } - }; - - HitAreasGenerator.prototype.generateHitAreas = function(positions) { - var group, hit_areas, j, len, position, previous_top; - previous_top = -1; - group = []; - hit_areas = []; - for (j = 0, len = positions.length; j < len; j++) { - position = positions[j]; - if (position.top !== previous_top && group.length) { - if (group.length) { - this.generateHitAreasForGroup(hit_areas, group, previous_top, position.top); - } - previous_top = position.top; - group = []; - } - group.push(position); - } - this.generateHitAreasForGroup(hit_areas, group, previous_top, this.tree_bottom); - return hit_areas; - }; - - HitAreasGenerator.prototype.generateHitAreasForGroup = function(hit_areas, positions_in_group, top, bottom) { - var area_height, area_top, i, position, position_count; - position_count = Math.min(positions_in_group.length, 4); - area_height = Math.round((bottom - top) / position_count); - area_top = top; - i = 0; - while (i < position_count) { - position = positions_in_group[i]; - hit_areas.push({ - top: area_top, - bottom: area_top + area_height, - node: position.node, - position: position.position - }); - area_top += area_height; - i += 1; - } - return null; - }; - - return HitAreasGenerator; - -})(VisibleNodeIterator); - -DragElement = (function() { - function DragElement(node_name, offset_x, offset_y, $tree) { - this.offset_x = offset_x; - this.offset_y = offset_y; - this.$element = $("" + node_name + ""); - this.$element.css("position", "absolute"); - $tree.append(this.$element); - } - - DragElement.prototype.move = function(page_x, page_y) { - return this.$element.offset({ - left: page_x - this.offset_x, - top: page_y - this.offset_y - }); - }; - - DragElement.prototype.remove = function() { - return this.$element.remove(); - }; - - return DragElement; - -})(); - -module.exports = { - DragAndDropHandler: DragAndDropHandler, - DragElement: DragElement, - HitAreasGenerator: HitAreasGenerator -}; diff --git a/ecomp-portal-FE/client/bower_components/jqTree/lib/elements_renderer.js b/ecomp-portal-FE/client/bower_components/jqTree/lib/elements_renderer.js deleted file mode 100644 index 59ba39ef..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/lib/elements_renderer.js +++ /dev/null @@ -1,220 +0,0 @@ -var $, ElementsRenderer, NodeElement, html_escape, node_element, util; - -node_element = require('./node_element'); - -NodeElement = node_element.NodeElement; - -util = require('./util'); - -html_escape = util.html_escape; - -$ = jQuery; - -ElementsRenderer = (function() { - function ElementsRenderer(tree_widget) { - this.tree_widget = tree_widget; - this.opened_icon_element = this.createButtonElement(tree_widget.options.openedIcon); - this.closed_icon_element = this.createButtonElement(tree_widget.options.closedIcon); - } - - ElementsRenderer.prototype.render = function(from_node) { - if (from_node && from_node.parent) { - return this.renderFromNode(from_node); - } else { - return this.renderFromRoot(); - } - }; - - ElementsRenderer.prototype.renderFromRoot = function() { - var $element; - $element = this.tree_widget.element; - $element.empty(); - return this.createDomElements($element[0], this.tree_widget.tree.children, true, true, 1); - }; - - ElementsRenderer.prototype.renderFromNode = function(node) { - var $previous_li, li; - $previous_li = $(node.element); - li = this.createLi(node, node.getLevel()); - this.attachNodeData(node, li); - $previous_li.after(li); - $previous_li.remove(); - if (node.children) { - return this.createDomElements(li, node.children, false, false, node.getLevel() + 1); - } - }; - - ElementsRenderer.prototype.createDomElements = function(element, children, is_root_node, is_open, level) { - var child, i, len, li, ul; - ul = this.createUl(is_root_node); - element.appendChild(ul); - for (i = 0, len = children.length; i < len; i++) { - child = children[i]; - li = this.createLi(child, level); - ul.appendChild(li); - this.attachNodeData(child, li); - if (child.hasChildren()) { - this.createDomElements(li, child.children, false, child.is_open, level + 1); - } - } - return null; - }; - - ElementsRenderer.prototype.attachNodeData = function(node, li) { - node.element = li; - return $(li).data('node', node); - }; - - ElementsRenderer.prototype.createUl = function(is_root_node) { - var class_string, role, ul; - if (!is_root_node) { - class_string = ''; - role = 'group'; - } else { - class_string = 'jqtree-tree'; - role = 'tree'; - if (this.tree_widget.options.rtl) { - class_string += ' jqtree-rtl'; - } - } - ul = document.createElement('ul'); - ul.className = "jqtree_common " + class_string; - ul.setAttribute('role', role); - return ul; - }; - - ElementsRenderer.prototype.createLi = function(node, level) { - var is_selected, li; - is_selected = this.tree_widget.select_node_handler && this.tree_widget.select_node_handler.isNodeSelected(node); - if (node.isFolder()) { - li = this.createFolderLi(node, level, is_selected); - } else { - li = this.createNodeLi(node, level, is_selected); - } - if (this.tree_widget.options.onCreateLi) { - this.tree_widget.options.onCreateLi(node, $(li)); - } - return li; - }; - - ElementsRenderer.prototype.createFolderLi = function(node, level, is_selected) { - var button_classes, button_link, div, folder_classes, icon_element, is_folder, li; - button_classes = this.getButtonClasses(node); - folder_classes = this.getFolderClasses(node, is_selected); - if (node.is_open) { - icon_element = this.opened_icon_element; - } else { - icon_element = this.closed_icon_element; - } - li = document.createElement('li'); - li.className = "jqtree_common " + folder_classes; - li.setAttribute('role', 'presentation'); - div = document.createElement('div'); - div.className = "jqtree-element jqtree_common"; - div.setAttribute('role', 'presentation'); - li.appendChild(div); - button_link = document.createElement('a'); - button_link.className = button_classes; - button_link.appendChild(icon_element.cloneNode(false)); - button_link.setAttribute('role', 'presentation'); - button_link.setAttribute('aria-hidden', 'true'); - if (this.tree_widget.options.buttonLeft) { - div.appendChild(button_link); - } - div.appendChild(this.createTitleSpan(node.name, level, is_selected, node.is_open, is_folder = true)); - if (!this.tree_widget.options.buttonLeft) { - div.appendChild(button_link); - } - return li; - }; - - ElementsRenderer.prototype.createNodeLi = function(node, level, is_selected) { - var class_string, div, is_folder, li, li_classes; - li_classes = ['jqtree_common']; - if (is_selected) { - li_classes.push('jqtree-selected'); - } - class_string = li_classes.join(' '); - li = document.createElement('li'); - li.className = class_string; - li.setAttribute('role', 'presentation'); - div = document.createElement('div'); - div.className = "jqtree-element jqtree_common"; - div.setAttribute('role', 'presentation'); - li.appendChild(div); - div.appendChild(this.createTitleSpan(node.name, level, is_selected, node.is_open, is_folder = false)); - return li; - }; - - ElementsRenderer.prototype.createTitleSpan = function(node_name, level, is_selected, is_open, is_folder) { - var classes, title_span; - title_span = document.createElement('span'); - classes = "jqtree-title jqtree_common"; - if (is_folder) { - classes += " jqtree-title-folder"; - } - title_span.className = classes; - title_span.setAttribute('role', 'treeitem'); - title_span.setAttribute('aria-level', level); - title_span.setAttribute('aria-selected', util.getBoolString(is_selected)); - title_span.setAttribute('aria-expanded', util.getBoolString(is_open)); - if (is_selected) { - title_span.setAttribute('tabindex', 0); - } - title_span.innerHTML = this.escapeIfNecessary(node_name); - return title_span; - }; - - ElementsRenderer.prototype.getButtonClasses = function(node) { - var classes; - classes = ['jqtree-toggler', 'jqtree_common']; - if (!node.is_open) { - classes.push('jqtree-closed'); - } - if (this.tree_widget.options.buttonLeft) { - classes.push('jqtree-toggler-left'); - } else { - classes.push('jqtree-toggler-right'); - } - return classes.join(' '); - }; - - ElementsRenderer.prototype.getFolderClasses = function(node, is_selected) { - var classes; - classes = ['jqtree-folder']; - if (!node.is_open) { - classes.push('jqtree-closed'); - } - if (is_selected) { - classes.push('jqtree-selected'); - } - if (node.is_loading) { - classes.push('jqtree-loading'); - } - return classes.join(' '); - }; - - ElementsRenderer.prototype.escapeIfNecessary = function(value) { - if (this.tree_widget.options.autoEscape) { - return html_escape(value); - } else { - return value; - } - }; - - ElementsRenderer.prototype.createButtonElement = function(value) { - var div; - if (typeof value === 'string') { - div = document.createElement('div'); - div.innerHTML = value; - return document.createTextNode(div.innerHTML); - } else { - return $(value)[0]; - } - }; - - return ElementsRenderer; - -})(); - -module.exports = ElementsRenderer; diff --git a/ecomp-portal-FE/client/bower_components/jqTree/lib/key_handler.js b/ecomp-portal-FE/client/bower_components/jqTree/lib/key_handler.js deleted file mode 100644 index 9c050aca..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/lib/key_handler.js +++ /dev/null @@ -1,120 +0,0 @@ -var $, KeyHandler, - bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; - -$ = jQuery; - -KeyHandler = (function() { - var DOWN, LEFT, RIGHT, UP; - - LEFT = 37; - - UP = 38; - - RIGHT = 39; - - DOWN = 40; - - function KeyHandler(tree_widget) { - this.selectNode = bind(this.selectNode, this); - this.tree_widget = tree_widget; - if (tree_widget.options.keyboardSupport) { - $(document).bind('keydown.jqtree', $.proxy(this.handleKeyDown, this)); - } - } - - KeyHandler.prototype.deinit = function() { - return $(document).unbind('keydown.jqtree'); - }; - - KeyHandler.prototype.moveDown = function() { - var node; - node = this.tree_widget.getSelectedNode(); - if (node) { - return this.selectNode(node.getNextNode()); - } else { - return false; - } - }; - - KeyHandler.prototype.moveUp = function() { - var node; - node = this.tree_widget.getSelectedNode(); - if (node) { - return this.selectNode(node.getPreviousNode()); - } else { - return false; - } - }; - - KeyHandler.prototype.moveRight = function() { - var node; - node = this.tree_widget.getSelectedNode(); - if (!node) { - return true; - } else if (!node.isFolder()) { - return true; - } else { - if (node.is_open) { - return this.selectNode(node.getNextNode()); - } else { - this.tree_widget.openNode(node); - return false; - } - } - }; - - KeyHandler.prototype.moveLeft = function() { - var node; - node = this.tree_widget.getSelectedNode(); - if (!node) { - return true; - } else if (node.isFolder() && node.is_open) { - this.tree_widget.closeNode(node); - return false; - } else { - return this.selectNode(node.getParent()); - } - }; - - KeyHandler.prototype.handleKeyDown = function(e) { - var key; - if (!this.tree_widget.options.keyboardSupport) { - return true; - } - if ($(document.activeElement).is('textarea,input,select')) { - return true; - } - if (!this.tree_widget.getSelectedNode()) { - return true; - } - key = e.which; - switch (key) { - case DOWN: - return this.moveDown(); - case UP: - return this.moveUp(); - case RIGHT: - return this.moveRight(); - case LEFT: - return this.moveLeft(); - } - return true; - }; - - KeyHandler.prototype.selectNode = function(node) { - if (!node) { - return true; - } else { - this.tree_widget.selectNode(node); - if (this.tree_widget.scroll_handler && (!this.tree_widget.scroll_handler.isScrolledIntoView($(node.element).find('.jqtree-element')))) { - this.tree_widget.scrollToNode(node); - } - return false; - } - }; - - return KeyHandler; - -})(); - -module.exports = KeyHandler; diff --git a/ecomp-portal-FE/client/bower_components/jqTree/lib/mouse.widget.js b/ecomp-portal-FE/client/bower_components/jqTree/lib/mouse.widget.js deleted file mode 100644 index 93bdb576..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/lib/mouse.widget.js +++ /dev/null @@ -1,191 +0,0 @@ - -/* -This widget does the same a the mouse widget in jqueryui. - */ -var $, MouseWidget, SimpleWidget, - extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, - hasProp = {}.hasOwnProperty; - -SimpleWidget = require('./simple.widget'); - -$ = jQuery; - -MouseWidget = (function(superClass) { - extend(MouseWidget, superClass); - - function MouseWidget() { - return MouseWidget.__super__.constructor.apply(this, arguments); - } - - MouseWidget.is_mouse_handled = false; - - MouseWidget.prototype._init = function() { - this.$el.bind('mousedown.mousewidget', $.proxy(this._mouseDown, this)); - this.$el.bind('touchstart.mousewidget', $.proxy(this._touchStart, this)); - this.is_mouse_started = false; - this.mouse_delay = 0; - this._mouse_delay_timer = null; - this._is_mouse_delay_met = true; - return this.mouse_down_info = null; - }; - - MouseWidget.prototype._deinit = function() { - var $document; - this.$el.unbind('mousedown.mousewidget'); - this.$el.unbind('touchstart.mousewidget'); - $document = $(document); - $document.unbind('mousemove.mousewidget'); - return $document.unbind('mouseup.mousewidget'); - }; - - MouseWidget.prototype._mouseDown = function(e) { - var result; - if (e.which !== 1) { - return; - } - result = this._handleMouseDown(e, this._getPositionInfo(e)); - if (result) { - e.preventDefault(); - } - return result; - }; - - MouseWidget.prototype._handleMouseDown = function(e, position_info) { - if (MouseWidget.is_mouse_handled) { - return; - } - if (this.is_mouse_started) { - this._handleMouseUp(position_info); - } - this.mouse_down_info = position_info; - if (!this._mouseCapture(position_info)) { - return; - } - this._handleStartMouse(); - this.is_mouse_handled = true; - return true; - }; - - MouseWidget.prototype._handleStartMouse = function() { - var $document; - $document = $(document); - $document.bind('mousemove.mousewidget', $.proxy(this._mouseMove, this)); - $document.bind('touchmove.mousewidget', $.proxy(this._touchMove, this)); - $document.bind('mouseup.mousewidget', $.proxy(this._mouseUp, this)); - $document.bind('touchend.mousewidget', $.proxy(this._touchEnd, this)); - if (this.mouse_delay) { - return this._startMouseDelayTimer(); - } - }; - - MouseWidget.prototype._startMouseDelayTimer = function() { - if (this._mouse_delay_timer) { - clearTimeout(this._mouse_delay_timer); - } - this._mouse_delay_timer = setTimeout((function(_this) { - return function() { - return _this._is_mouse_delay_met = true; - }; - })(this), this.mouse_delay); - return this._is_mouse_delay_met = false; - }; - - MouseWidget.prototype._mouseMove = function(e) { - return this._handleMouseMove(e, this._getPositionInfo(e)); - }; - - MouseWidget.prototype._handleMouseMove = function(e, position_info) { - if (this.is_mouse_started) { - this._mouseDrag(position_info); - return e.preventDefault(); - } - if (this.mouse_delay && !this._is_mouse_delay_met) { - return true; - } - this.is_mouse_started = this._mouseStart(this.mouse_down_info) !== false; - if (this.is_mouse_started) { - this._mouseDrag(position_info); - } else { - this._handleMouseUp(position_info); - } - return !this.is_mouse_started; - }; - - MouseWidget.prototype._getPositionInfo = function(e) { - return { - page_x: e.pageX, - page_y: e.pageY, - target: e.target, - original_event: e - }; - }; - - MouseWidget.prototype._mouseUp = function(e) { - return this._handleMouseUp(this._getPositionInfo(e)); - }; - - MouseWidget.prototype._handleMouseUp = function(position_info) { - var $document; - $document = $(document); - $document.unbind('mousemove.mousewidget'); - $document.unbind('touchmove.mousewidget'); - $document.unbind('mouseup.mousewidget'); - $document.unbind('touchend.mousewidget'); - if (this.is_mouse_started) { - this.is_mouse_started = false; - this._mouseStop(position_info); - } - }; - - MouseWidget.prototype._mouseCapture = function(position_info) { - return true; - }; - - MouseWidget.prototype._mouseStart = function(position_info) { - return null; - }; - - MouseWidget.prototype._mouseDrag = function(position_info) { - return null; - }; - - MouseWidget.prototype._mouseStop = function(position_info) { - return null; - }; - - MouseWidget.prototype.setMouseDelay = function(mouse_delay) { - return this.mouse_delay = mouse_delay; - }; - - MouseWidget.prototype._touchStart = function(e) { - var touch; - if (e.originalEvent.touches.length > 1) { - return; - } - touch = e.originalEvent.changedTouches[0]; - return this._handleMouseDown(e, this._getPositionInfo(touch)); - }; - - MouseWidget.prototype._touchMove = function(e) { - var touch; - if (e.originalEvent.touches.length > 1) { - return; - } - touch = e.originalEvent.changedTouches[0]; - return this._handleMouseMove(e, this._getPositionInfo(touch)); - }; - - MouseWidget.prototype._touchEnd = function(e) { - var touch; - if (e.originalEvent.touches.length > 1) { - return; - } - touch = e.originalEvent.changedTouches[0]; - return this._handleMouseUp(this._getPositionInfo(touch)); - }; - - return MouseWidget; - -})(SimpleWidget); - -module.exports = MouseWidget; diff --git a/ecomp-portal-FE/client/bower_components/jqTree/lib/node.js b/ecomp-portal-FE/client/bower_components/jqTree/lib/node.js deleted file mode 100644 index e92e8f74..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/lib/node.js +++ /dev/null @@ -1,588 +0,0 @@ -var $, Node, Position; - -$ = jQuery; - -Position = { - getName: function(position) { - return Position.strings[position - 1]; - }, - nameToIndex: function(name) { - var i, j, ref; - for (i = j = 1, ref = Position.strings.length; 1 <= ref ? j <= ref : j >= ref; i = 1 <= ref ? ++j : --j) { - if (Position.strings[i - 1] === name) { - return i; - } - } - return 0; - } -}; - -Position.BEFORE = 1; - -Position.AFTER = 2; - -Position.INSIDE = 3; - -Position.NONE = 4; - -Position.strings = ['before', 'after', 'inside', 'none']; - -Node = (function() { - function Node(o, is_root, node_class) { - if (is_root == null) { - is_root = false; - } - if (node_class == null) { - node_class = Node; - } - this.name = ''; - this.setData(o); - this.children = []; - this.parent = null; - if (is_root) { - this.id_mapping = {}; - this.tree = this; - this.node_class = node_class; - } - } - - Node.prototype.setData = function(o) { - - /* - Set the data of this node. - - setData(string): set the name of the node - setdata(object): set attributes of the node - - Examples: - setdata('node1') - - setData({ name: 'node1', id: 1}); - - setData({ name: 'node2', id: 2, color: 'green'}); - - * This is an internal function; it is not in the docs - * Does not remove existing node values - */ - var key, setName, value; - setName = (function(_this) { - return function(name) { - if (name !== null) { - return _this.name = name; - } - }; - })(this); - if (typeof o !== 'object') { - setName(o); - } else { - for (key in o) { - value = o[key]; - if (key === 'label') { - setName(value); - } else if (key !== 'children') { - this[key] = value; - } - } - } - return null; - }; - - Node.prototype.initFromData = function(data) { - var addChildren, addNode; - addNode = (function(_this) { - return function(node_data) { - _this.setData(node_data); - if (node_data.children) { - return addChildren(node_data.children); - } - }; - })(this); - addChildren = (function(_this) { - return function(children_data) { - var child, j, len, node; - for (j = 0, len = children_data.length; j < len; j++) { - child = children_data[j]; - node = new _this.tree.node_class(''); - node.initFromData(child); - _this.addChild(node); - } - return null; - }; - })(this); - addNode(data); - return null; - }; - - - /* - Create tree from data. - - Structure of data is: - [ - { - label: 'node1', - children: [ - { label: 'child1' }, - { label: 'child2' } - ] - }, - { - label: 'node2' - } - ] - */ - - Node.prototype.loadFromData = function(data) { - var j, len, node, o; - this.removeChildren(); - for (j = 0, len = data.length; j < len; j++) { - o = data[j]; - node = new this.tree.node_class(o); - this.addChild(node); - if (typeof o === 'object' && o.children) { - node.loadFromData(o.children); - } - } - return null; - }; - - - /* - Add child. - - tree.addChild( - new Node('child1') - ); - */ - - Node.prototype.addChild = function(node) { - this.children.push(node); - return node._setParent(this); - }; - - - /* - Add child at position. Index starts at 0. - - tree.addChildAtPosition( - new Node('abc'), - 1 - ); - */ - - Node.prototype.addChildAtPosition = function(node, index) { - this.children.splice(index, 0, node); - return node._setParent(this); - }; - - Node.prototype._setParent = function(parent) { - this.parent = parent; - this.tree = parent.tree; - return this.tree.addNodeToIndex(this); - }; - - - /* - Remove child. This also removes the children of the node. - - tree.removeChild(tree.children[0]); - */ - - Node.prototype.removeChild = function(node) { - node.removeChildren(); - return this._removeChild(node); - }; - - Node.prototype._removeChild = function(node) { - this.children.splice(this.getChildIndex(node), 1); - return this.tree.removeNodeFromIndex(node); - }; - - - /* - Get child index. - - var index = getChildIndex(node); - */ - - Node.prototype.getChildIndex = function(node) { - return $.inArray(node, this.children); - }; - - - /* - Does the tree have children? - - if (tree.hasChildren()) { - // - } - */ - - Node.prototype.hasChildren = function() { - return this.children.length !== 0; - }; - - Node.prototype.isFolder = function() { - return this.hasChildren() || this.load_on_demand; - }; - - - /* - Iterate over all the nodes in the tree. - - Calls callback with (node, level). - - The callback must return true to continue the iteration on current node. - - tree.iterate( - function(node, level) { - console.log(node.name); - - // stop iteration after level 2 - return (level <= 2); - } - ); - */ - - Node.prototype.iterate = function(callback) { - var _iterate; - _iterate = function(node, level) { - var child, j, len, ref, result; - if (node.children) { - ref = node.children; - for (j = 0, len = ref.length; j < len; j++) { - child = ref[j]; - result = callback(child, level); - if (result && child.hasChildren()) { - _iterate(child, level + 1); - } - } - return null; - } - }; - _iterate(this, 0); - return null; - }; - - - /* - Move node relative to another node. - - Argument position: Position.BEFORE, Position.AFTER or Position.Inside - - // move node1 after node2 - tree.moveNode(node1, node2, Position.AFTER); - */ - - Node.prototype.moveNode = function(moved_node, target_node, position) { - if (moved_node.isParentOf(target_node)) { - return; - } - moved_node.parent._removeChild(moved_node); - if (position === Position.AFTER) { - return target_node.parent.addChildAtPosition(moved_node, target_node.parent.getChildIndex(target_node) + 1); - } else if (position === Position.BEFORE) { - return target_node.parent.addChildAtPosition(moved_node, target_node.parent.getChildIndex(target_node)); - } else if (position === Position.INSIDE) { - return target_node.addChildAtPosition(moved_node, 0); - } - }; - - - /* - Get the tree as data. - */ - - Node.prototype.getData = function(include_parent) { - var getDataFromNodes; - if (include_parent == null) { - include_parent = false; - } - getDataFromNodes = function(nodes) { - var data, j, k, len, node, tmp_node, v; - data = []; - for (j = 0, len = nodes.length; j < len; j++) { - node = nodes[j]; - tmp_node = {}; - for (k in node) { - v = node[k]; - if ((k !== 'parent' && k !== 'children' && k !== 'element' && k !== 'tree') && Object.prototype.hasOwnProperty.call(node, k)) { - tmp_node[k] = v; - } - } - if (node.hasChildren()) { - tmp_node.children = getDataFromNodes(node.children); - } - data.push(tmp_node); - } - return data; - }; - if (include_parent) { - return getDataFromNodes([this]); - } else { - return getDataFromNodes(this.children); - } - }; - - Node.prototype.getNodeByName = function(name) { - return this.getNodeByCallback(function(node) { - return node.name === name; - }); - }; - - Node.prototype.getNodeByCallback = function(callback) { - var result; - result = null; - this.iterate(function(node) { - if (callback(node)) { - result = node; - return false; - } else { - return true; - } - }); - return result; - }; - - Node.prototype.addAfter = function(node_info) { - var child_index, node; - if (!this.parent) { - return null; - } else { - node = new this.tree.node_class(node_info); - child_index = this.parent.getChildIndex(this); - this.parent.addChildAtPosition(node, child_index + 1); - if (typeof node_info === 'object' && node_info.children && node_info.children.length) { - node.loadFromData(node_info.children); - } - return node; - } - }; - - Node.prototype.addBefore = function(node_info) { - var child_index, node; - if (!this.parent) { - return null; - } else { - node = new this.tree.node_class(node_info); - child_index = this.parent.getChildIndex(this); - this.parent.addChildAtPosition(node, child_index); - if (typeof node_info === 'object' && node_info.children && node_info.children.length) { - node.loadFromData(node_info.children); - } - return node; - } - }; - - Node.prototype.addParent = function(node_info) { - var child, j, len, new_parent, original_parent, ref; - if (!this.parent) { - return null; - } else { - new_parent = new this.tree.node_class(node_info); - new_parent._setParent(this.tree); - original_parent = this.parent; - ref = original_parent.children; - for (j = 0, len = ref.length; j < len; j++) { - child = ref[j]; - new_parent.addChild(child); - } - original_parent.children = []; - original_parent.addChild(new_parent); - return new_parent; - } - }; - - Node.prototype.remove = function() { - if (this.parent) { - this.parent.removeChild(this); - return this.parent = null; - } - }; - - Node.prototype.append = function(node_info) { - var node; - node = new this.tree.node_class(node_info); - this.addChild(node); - if (typeof node_info === 'object' && node_info.children && node_info.children.length) { - node.loadFromData(node_info.children); - } - return node; - }; - - Node.prototype.prepend = function(node_info) { - var node; - node = new this.tree.node_class(node_info); - this.addChildAtPosition(node, 0); - if (typeof node_info === 'object' && node_info.children && node_info.children.length) { - node.loadFromData(node_info.children); - } - return node; - }; - - Node.prototype.isParentOf = function(node) { - var parent; - parent = node.parent; - while (parent) { - if (parent === this) { - return true; - } - parent = parent.parent; - } - return false; - }; - - Node.prototype.getLevel = function() { - var level, node; - level = 0; - node = this; - while (node.parent) { - level += 1; - node = node.parent; - } - return level; - }; - - Node.prototype.getNodeById = function(node_id) { - return this.id_mapping[node_id]; - }; - - Node.prototype.addNodeToIndex = function(node) { - if (node.id != null) { - return this.id_mapping[node.id] = node; - } - }; - - Node.prototype.removeNodeFromIndex = function(node) { - if (node.id != null) { - return delete this.id_mapping[node.id]; - } - }; - - Node.prototype.removeChildren = function() { - this.iterate((function(_this) { - return function(child) { - _this.tree.removeNodeFromIndex(child); - return true; - }; - })(this)); - return this.children = []; - }; - - Node.prototype.getPreviousSibling = function() { - var previous_index; - if (!this.parent) { - return null; - } else { - previous_index = this.parent.getChildIndex(this) - 1; - if (previous_index >= 0) { - return this.parent.children[previous_index]; - } else { - return null; - } - } - }; - - Node.prototype.getNextSibling = function() { - var next_index; - if (!this.parent) { - return null; - } else { - next_index = this.parent.getChildIndex(this) + 1; - if (next_index < this.parent.children.length) { - return this.parent.children[next_index]; - } else { - return null; - } - } - }; - - Node.prototype.getNodesByProperty = function(key, value) { - return this.filter(function(node) { - return node[key] === value; - }); - }; - - Node.prototype.filter = function(f) { - var result; - result = []; - this.iterate(function(node) { - if (f(node)) { - result.push(node); - } - return true; - }); - return result; - }; - - Node.prototype.getNextNode = function(include_children) { - var next_sibling; - if (include_children == null) { - include_children = true; - } - if (include_children && this.hasChildren() && this.is_open) { - return this.children[0]; - } else { - if (!this.parent) { - return null; - } else { - next_sibling = this.getNextSibling(); - if (next_sibling) { - return next_sibling; - } else { - return this.parent.getNextNode(false); - } - } - } - }; - - Node.prototype.getPreviousNode = function() { - var previous_sibling; - if (!this.parent) { - return null; - } else { - previous_sibling = this.getPreviousSibling(); - if (previous_sibling) { - if (!previous_sibling.hasChildren() || !previous_sibling.is_open) { - return previous_sibling; - } else { - return previous_sibling.getLastChild(); - } - } else { - return this.getParent(); - } - } - }; - - Node.prototype.getParent = function() { - if (!this.parent) { - return null; - } else if (!this.parent.parent) { - return null; - } else { - return this.parent; - } - }; - - Node.prototype.getLastChild = function() { - var last_child; - if (!this.hasChildren()) { - return null; - } else { - last_child = this.children[this.children.length - 1]; - if (!last_child.hasChildren() || !last_child.is_open) { - return last_child; - } else { - return last_child.getLastChild(); - } - } - }; - - return Node; - -})(); - -module.exports = { - Node: Node, - Position: Position -}; diff --git a/ecomp-portal-FE/client/bower_components/jqTree/lib/node_element.js b/ecomp-portal-FE/client/bower_components/jqTree/lib/node_element.js deleted file mode 100644 index 734a8793..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/lib/node_element.js +++ /dev/null @@ -1,226 +0,0 @@ -var $, BorderDropHint, FolderElement, GhostDropHint, NodeElement, Position, node, - extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, - hasProp = {}.hasOwnProperty; - -node = require('./node'); - -Position = node.Position; - -$ = jQuery; - -NodeElement = (function() { - function NodeElement(node, tree_widget) { - this.init(node, tree_widget); - } - - NodeElement.prototype.init = function(node, tree_widget) { - this.node = node; - this.tree_widget = tree_widget; - if (!node.element) { - node.element = this.tree_widget.element; - } - return this.$element = $(node.element); - }; - - NodeElement.prototype.getUl = function() { - return this.$element.children('ul:first'); - }; - - NodeElement.prototype.getSpan = function() { - return this.$element.children('.jqtree-element').find('span.jqtree-title'); - }; - - NodeElement.prototype.getLi = function() { - return this.$element; - }; - - NodeElement.prototype.addDropHint = function(position) { - if (position === Position.INSIDE) { - return new BorderDropHint(this.$element); - } else { - return new GhostDropHint(this.node, this.$element, position); - } - }; - - NodeElement.prototype.select = function() { - var $li, $span; - $li = this.getLi(); - $li.addClass('jqtree-selected'); - $li.attr('aria-selected', 'true'); - $span = this.getSpan(); - return $span.attr('tabindex', 0); - }; - - NodeElement.prototype.deselect = function() { - var $li, $span; - $li = this.getLi(); - $li.removeClass('jqtree-selected'); - $li.attr('aria-selected', 'false'); - $span = this.getSpan(); - return $span.attr('tabindex', -1); - }; - - return NodeElement; - -})(); - -FolderElement = (function(superClass) { - extend(FolderElement, superClass); - - function FolderElement() { - return FolderElement.__super__.constructor.apply(this, arguments); - } - - FolderElement.prototype.open = function(on_finished, slide) { - var $button, doOpen; - if (slide == null) { - slide = true; - } - if (!this.node.is_open) { - this.node.is_open = true; - $button = this.getButton(); - $button.removeClass('jqtree-closed'); - $button.html(''); - $button.append(this.tree_widget.renderer.opened_icon_element.cloneNode(false)); - doOpen = (function(_this) { - return function() { - var $li, $span; - $li = _this.getLi(); - $li.removeClass('jqtree-closed'); - $span = _this.getSpan(); - $span.attr('aria-expanded', 'true'); - if (on_finished) { - on_finished(_this.node); - } - return _this.tree_widget._triggerEvent('tree.open', { - node: _this.node - }); - }; - })(this); - if (slide) { - return this.getUl().slideDown('fast', doOpen); - } else { - this.getUl().show(); - return doOpen(); - } - } - }; - - FolderElement.prototype.close = function(slide) { - var $button, doClose; - if (slide == null) { - slide = true; - } - if (this.node.is_open) { - this.node.is_open = false; - $button = this.getButton(); - $button.addClass('jqtree-closed'); - $button.html(''); - $button.append(this.tree_widget.renderer.closed_icon_element.cloneNode(false)); - doClose = (function(_this) { - return function() { - var $li, $span; - $li = _this.getLi(); - $li.addClass('jqtree-closed'); - $span = _this.getSpan(); - $span.attr('aria-expanded', 'false'); - return _this.tree_widget._triggerEvent('tree.close', { - node: _this.node - }); - }; - })(this); - if (slide) { - return this.getUl().slideUp('fast', doClose); - } else { - this.getUl().hide(); - return doClose(); - } - } - }; - - FolderElement.prototype.getButton = function() { - return this.$element.children('.jqtree-element').find('a.jqtree-toggler'); - }; - - FolderElement.prototype.addDropHint = function(position) { - if (!this.node.is_open && position === Position.INSIDE) { - return new BorderDropHint(this.$element); - } else { - return new GhostDropHint(this.node, this.$element, position); - } - }; - - return FolderElement; - -})(NodeElement); - -BorderDropHint = (function() { - function BorderDropHint($element) { - var $div, width; - $div = $element.children('.jqtree-element'); - width = $element.width() - 4; - this.$hint = $(''); - $div.append(this.$hint); - this.$hint.css({ - width: width, - height: $div.outerHeight() - 4 - }); - } - - BorderDropHint.prototype.remove = function() { - return this.$hint.remove(); - }; - - return BorderDropHint; - -})(); - -GhostDropHint = (function() { - function GhostDropHint(node, $element, position) { - this.$element = $element; - this.node = node; - this.$ghost = $('
  • '); - if (position === Position.AFTER) { - this.moveAfter(); - } else if (position === Position.BEFORE) { - this.moveBefore(); - } else if (position === Position.INSIDE) { - if (node.isFolder() && node.is_open) { - this.moveInsideOpenFolder(); - } else { - this.moveInside(); - } - } - } - - GhostDropHint.prototype.remove = function() { - return this.$ghost.remove(); - }; - - GhostDropHint.prototype.moveAfter = function() { - return this.$element.after(this.$ghost); - }; - - GhostDropHint.prototype.moveBefore = function() { - return this.$element.before(this.$ghost); - }; - - GhostDropHint.prototype.moveInsideOpenFolder = function() { - return $(this.node.children[0].element).before(this.$ghost); - }; - - GhostDropHint.prototype.moveInside = function() { - this.$element.after(this.$ghost); - return this.$ghost.addClass('jqtree-inside'); - }; - - return GhostDropHint; - -})(); - -module.exports = { - BorderDropHint: BorderDropHint, - FolderElement: FolderElement, - GhostDropHint: GhostDropHint, - NodeElement: NodeElement -}; diff --git a/ecomp-portal-FE/client/bower_components/jqTree/lib/save_state_handler.js b/ecomp-portal-FE/client/bower_components/jqTree/lib/save_state_handler.js deleted file mode 100644 index 1e137a7d..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/lib/save_state_handler.js +++ /dev/null @@ -1,238 +0,0 @@ -var $, SaveStateHandler, indexOf, isInt, util; - -util = require('./util'); - -indexOf = util.indexOf; - -isInt = util.isInt; - -$ = jQuery; - -SaveStateHandler = (function() { - function SaveStateHandler(tree_widget) { - this.tree_widget = tree_widget; - } - - SaveStateHandler.prototype.saveState = function() { - var state; - state = JSON.stringify(this.getState()); - if (this.tree_widget.options.onSetStateFromStorage) { - return this.tree_widget.options.onSetStateFromStorage(state); - } else if (this.supportsLocalStorage()) { - return localStorage.setItem(this.getCookieName(), state); - } else if ($.cookie) { - $.cookie.raw = true; - return $.cookie(this.getCookieName(), state, { - path: '/' - }); - } - }; - - SaveStateHandler.prototype.getStateFromStorage = function() { - var json_data; - json_data = this._loadFromStorage(); - if (json_data) { - return this._parseState(json_data); - } else { - return null; - } - }; - - SaveStateHandler.prototype._parseState = function(json_data) { - var state; - state = $.parseJSON(json_data); - if (state && state.selected_node && isInt(state.selected_node)) { - state.selected_node = [state.selected_node]; - } - return state; - }; - - SaveStateHandler.prototype._loadFromStorage = function() { - if (this.tree_widget.options.onGetStateFromStorage) { - return this.tree_widget.options.onGetStateFromStorage(); - } else if (this.supportsLocalStorage()) { - return localStorage.getItem(this.getCookieName()); - } else if ($.cookie) { - $.cookie.raw = true; - return $.cookie(this.getCookieName()); - } else { - return null; - } - }; - - SaveStateHandler.prototype.getState = function() { - var getOpenNodeIds, getSelectedNodeIds; - getOpenNodeIds = (function(_this) { - return function() { - var open_nodes; - open_nodes = []; - _this.tree_widget.tree.iterate(function(node) { - if (node.is_open && node.id && node.hasChildren()) { - open_nodes.push(node.id); - } - return true; - }); - return open_nodes; - }; - })(this); - getSelectedNodeIds = (function(_this) { - return function() { - var n; - return (function() { - var i, len, ref, results; - ref = this.tree_widget.getSelectedNodes(); - results = []; - for (i = 0, len = ref.length; i < len; i++) { - n = ref[i]; - results.push(n.id); - } - return results; - }).call(_this); - }; - })(this); - return { - open_nodes: getOpenNodeIds(), - selected_node: getSelectedNodeIds() - }; - }; - - SaveStateHandler.prototype.setInitialState = function(state) { - var must_load_on_demand; - if (!state) { - return false; - } else { - must_load_on_demand = this._openInitialNodes(state.open_nodes); - this._selectInitialNodes(state.selected_node); - return must_load_on_demand; - } - }; - - SaveStateHandler.prototype._openInitialNodes = function(node_ids) { - var i, len, must_load_on_demand, node, node_id; - must_load_on_demand = false; - for (i = 0, len = node_ids.length; i < len; i++) { - node_id = node_ids[i]; - node = this.tree_widget.getNodeById(node_id); - if (node) { - if (!node.load_on_demand) { - node.is_open = true; - } else { - must_load_on_demand = true; - } - } - } - return must_load_on_demand; - }; - - SaveStateHandler.prototype._selectInitialNodes = function(node_ids) { - var i, len, node, node_id, select_count; - select_count = 0; - for (i = 0, len = node_ids.length; i < len; i++) { - node_id = node_ids[i]; - node = this.tree_widget.getNodeById(node_id); - if (node) { - select_count += 1; - this.tree_widget.select_node_handler.addToSelection(node); - } - } - return select_count !== 0; - }; - - SaveStateHandler.prototype.setInitialStateOnDemand = function(state, cb_finished) { - if (state) { - return this._setInitialStateOnDemand(state.open_nodes, state.selected_node, cb_finished); - } else { - return cb_finished(); - } - }; - - SaveStateHandler.prototype._setInitialStateOnDemand = function(node_ids, selected_nodes, cb_finished) { - var loadAndOpenNode, loading_count, openNodes; - loading_count = 0; - openNodes = (function(_this) { - return function() { - var i, len, new_nodes_ids, node, node_id; - new_nodes_ids = []; - for (i = 0, len = node_ids.length; i < len; i++) { - node_id = node_ids[i]; - node = _this.tree_widget.getNodeById(node_id); - if (!node) { - new_nodes_ids.push(node_id); - } else { - if (!node.is_loading) { - if (node.load_on_demand) { - loadAndOpenNode(node); - } else { - _this.tree_widget._openNode(node, false); - } - } - } - } - node_ids = new_nodes_ids; - if (_this._selectInitialNodes(selected_nodes)) { - _this.tree_widget._refreshElements(); - } - if (loading_count === 0) { - return cb_finished(); - } - }; - })(this); - loadAndOpenNode = (function(_this) { - return function(node) { - loading_count += 1; - return _this.tree_widget._openNode(node, false, function() { - loading_count -= 1; - return openNodes(); - }); - }; - })(this); - return openNodes(); - }; - - SaveStateHandler.prototype.getCookieName = function() { - if (typeof this.tree_widget.options.saveState === 'string') { - return this.tree_widget.options.saveState; - } else { - return 'tree'; - } - }; - - SaveStateHandler.prototype.supportsLocalStorage = function() { - var testSupport; - testSupport = function() { - var error, key; - if (typeof localStorage === "undefined" || localStorage === null) { - return false; - } else { - try { - key = '_storage_test'; - sessionStorage.setItem(key, true); - sessionStorage.removeItem(key); - } catch (error1) { - error = error1; - return false; - } - return true; - } - }; - if (this._supportsLocalStorage == null) { - this._supportsLocalStorage = testSupport(); - } - return this._supportsLocalStorage; - }; - - SaveStateHandler.prototype.getNodeIdToBeSelected = function() { - var state; - state = this.getStateFromStorage(); - if (state && state.selected_node) { - return state.selected_node[0]; - } else { - return null; - } - }; - - return SaveStateHandler; - -})(); - -module.exports = SaveStateHandler; diff --git a/ecomp-portal-FE/client/bower_components/jqTree/lib/scroll_handler.js b/ecomp-portal-FE/client/bower_components/jqTree/lib/scroll_handler.js deleted file mode 100644 index 2b8e7070..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/lib/scroll_handler.js +++ /dev/null @@ -1,137 +0,0 @@ -var $, ScrollHandler; - -$ = jQuery; - -ScrollHandler = (function() { - function ScrollHandler(tree_widget) { - this.tree_widget = tree_widget; - this.previous_top = -1; - this.is_initialized = false; - } - - ScrollHandler.prototype._initScrollParent = function() { - var $scroll_parent, getParentWithOverflow, setDocumentAsScrollParent; - getParentWithOverflow = (function(_this) { - return function() { - var css_values, el, hasOverFlow, i, len, ref; - css_values = ['overflow', 'overflow-y']; - hasOverFlow = function(el) { - var css_value, i, len, ref; - for (i = 0, len = css_values.length; i < len; i++) { - css_value = css_values[i]; - if ((ref = $.css(el, css_value)) === 'auto' || ref === 'scroll') { - return true; - } - } - return false; - }; - if (hasOverFlow(_this.tree_widget.$el[0])) { - return _this.tree_widget.$el; - } - ref = _this.tree_widget.$el.parents(); - for (i = 0, len = ref.length; i < len; i++) { - el = ref[i]; - if (hasOverFlow(el)) { - return $(el); - } - } - return null; - }; - })(this); - setDocumentAsScrollParent = (function(_this) { - return function() { - _this.scroll_parent_top = 0; - return _this.$scroll_parent = null; - }; - })(this); - if (this.tree_widget.$el.css('position') === 'fixed') { - setDocumentAsScrollParent(); - } - $scroll_parent = getParentWithOverflow(); - if ($scroll_parent && $scroll_parent.length && $scroll_parent[0].tagName !== 'HTML') { - this.$scroll_parent = $scroll_parent; - this.scroll_parent_top = this.$scroll_parent.offset().top; - } else { - setDocumentAsScrollParent(); - } - return this.is_initialized = true; - }; - - ScrollHandler.prototype._ensureInit = function() { - if (!this.is_initialized) { - return this._initScrollParent(); - } - }; - - ScrollHandler.prototype.checkScrolling = function() { - var hovered_area; - this._ensureInit(); - hovered_area = this.tree_widget.dnd_handler.hovered_area; - if (hovered_area && hovered_area.top !== this.previous_top) { - this.previous_top = hovered_area.top; - if (this.$scroll_parent) { - return this._handleScrollingWithScrollParent(hovered_area); - } else { - return this._handleScrollingWithDocument(hovered_area); - } - } - }; - - ScrollHandler.prototype._handleScrollingWithScrollParent = function(area) { - var distance_bottom; - distance_bottom = this.scroll_parent_top + this.$scroll_parent[0].offsetHeight - area.bottom; - if (distance_bottom < 20) { - this.$scroll_parent[0].scrollTop += 20; - this.tree_widget.refreshHitAreas(); - return this.previous_top = -1; - } else if ((area.top - this.scroll_parent_top) < 20) { - this.$scroll_parent[0].scrollTop -= 20; - this.tree_widget.refreshHitAreas(); - return this.previous_top = -1; - } - }; - - ScrollHandler.prototype._handleScrollingWithDocument = function(area) { - var distance_top; - distance_top = area.top - $(document).scrollTop(); - if (distance_top < 20) { - return $(document).scrollTop($(document).scrollTop() - 20); - } else if ($(window).height() - (area.bottom - $(document).scrollTop()) < 20) { - return $(document).scrollTop($(document).scrollTop() + 20); - } - }; - - ScrollHandler.prototype.scrollTo = function(top) { - var tree_top; - this._ensureInit(); - if (this.$scroll_parent) { - return this.$scroll_parent[0].scrollTop = top; - } else { - tree_top = this.tree_widget.$el.offset().top; - return $(document).scrollTop(top + tree_top); - } - }; - - ScrollHandler.prototype.isScrolledIntoView = function(element) { - var $element, element_bottom, element_top, view_bottom, view_top; - this._ensureInit(); - $element = $(element); - if (this.$scroll_parent) { - view_top = 0; - view_bottom = this.$scroll_parent.height(); - element_top = $element.offset().top - this.scroll_parent_top; - element_bottom = element_top + $element.height(); - } else { - view_top = $(window).scrollTop(); - view_bottom = view_top + $(window).height(); - element_top = $element.offset().top; - element_bottom = element_top + $element.height(); - } - return (element_bottom <= view_bottom) && (element_top >= view_top); - }; - - return ScrollHandler; - -})(); - -module.exports = ScrollHandler; diff --git a/ecomp-portal-FE/client/bower_components/jqTree/lib/select_node_handler.js b/ecomp-portal-FE/client/bower_components/jqTree/lib/select_node_handler.js deleted file mode 100644 index a3274221..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/lib/select_node_handler.js +++ /dev/null @@ -1,111 +0,0 @@ -var $, SelectNodeHandler; - -$ = jQuery; - -SelectNodeHandler = (function() { - function SelectNodeHandler(tree_widget) { - this.tree_widget = tree_widget; - this.clear(); - } - - SelectNodeHandler.prototype.getSelectedNode = function() { - var selected_nodes; - selected_nodes = this.getSelectedNodes(); - if (selected_nodes.length) { - return selected_nodes[0]; - } else { - return false; - } - }; - - SelectNodeHandler.prototype.getSelectedNodes = function() { - var id, node, selected_nodes; - if (this.selected_single_node) { - return [this.selected_single_node]; - } else { - selected_nodes = []; - for (id in this.selected_nodes) { - node = this.tree_widget.getNodeById(id); - if (node) { - selected_nodes.push(node); - } - } - return selected_nodes; - } - }; - - SelectNodeHandler.prototype.getSelectedNodesUnder = function(parent) { - var id, node, selected_nodes; - if (this.selected_single_node) { - if (parent.isParentOf(this.selected_single_node)) { - return [this.selected_single_node]; - } else { - return []; - } - } else { - selected_nodes = []; - for (id in this.selected_nodes) { - node = this.tree_widget.getNodeById(id); - if (node && parent.isParentOf(node)) { - selected_nodes.push(node); - } - } - return selected_nodes; - } - }; - - SelectNodeHandler.prototype.isNodeSelected = function(node) { - if (!node) { - return false; - } else if (node.id) { - if (this.selected_nodes[node.id]) { - return true; - } else { - return false; - } - } else if (this.selected_single_node) { - return this.selected_single_node.element === node.element; - } else { - return false; - } - }; - - SelectNodeHandler.prototype.clear = function() { - this.selected_nodes = {}; - return this.selected_single_node = null; - }; - - SelectNodeHandler.prototype.removeFromSelection = function(node, include_children) { - if (include_children == null) { - include_children = false; - } - if (!node.id) { - if (this.selected_single_node && node.element === this.selected_single_node.element) { - return this.selected_single_node = null; - } - } else { - delete this.selected_nodes[node.id]; - if (include_children) { - return node.iterate((function(_this) { - return function(n) { - delete _this.selected_nodes[node.id]; - return true; - }; - })(this)); - } - } - }; - - SelectNodeHandler.prototype.addToSelection = function(node) { - if (node.id) { - return this.selected_nodes[node.id] = true; - } else { - return this.selected_single_node = node; - } - }; - - return SelectNodeHandler; - -})(); - -module.exports = SelectNodeHandler; diff --git a/ecomp-portal-FE/client/bower_components/jqTree/lib/simple.widget.js b/ecomp-portal-FE/client/bower_components/jqTree/lib/simple.widget.js deleted file mode 100644 index 60341a16..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/lib/simple.widget.js +++ /dev/null @@ -1,125 +0,0 @@ - -/* -Copyright 2013 Marco Braak - -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. - */ -var $, SimpleWidget, - slice = [].slice; - -$ = jQuery; - -SimpleWidget = (function() { - SimpleWidget.prototype.defaults = {}; - - function SimpleWidget(el, options) { - this.$el = $(el); - this.options = $.extend({}, this.defaults, options); - } - - SimpleWidget.prototype.destroy = function() { - return this._deinit(); - }; - - SimpleWidget.prototype._init = function() { - return null; - }; - - SimpleWidget.prototype._deinit = function() { - return null; - }; - - SimpleWidget.register = function(widget_class, widget_name) { - var callFunction, createWidget, destroyWidget, getDataKey, getWidgetData; - getDataKey = function() { - return "simple_widget_" + widget_name; - }; - getWidgetData = function(el, data_key) { - var widget; - widget = $.data(el, data_key); - if (widget && (widget instanceof SimpleWidget)) { - return widget; - } else { - return null; - } - }; - createWidget = function($el, options) { - var data_key, el, existing_widget, i, len, widget; - data_key = getDataKey(); - for (i = 0, len = $el.length; i < len; i++) { - el = $el[i]; - existing_widget = getWidgetData(el, data_key); - if (!existing_widget) { - widget = new widget_class(el, options); - if (!$.data(el, data_key)) { - $.data(el, data_key, widget); - } - widget._init(); - } - } - return $el; - }; - destroyWidget = function($el) { - var data_key, el, i, len, results, widget; - data_key = getDataKey(); - results = []; - for (i = 0, len = $el.length; i < len; i++) { - el = $el[i]; - widget = getWidgetData(el, data_key); - if (widget) { - widget.destroy(); - } - results.push($.removeData(el, data_key)); - } - return results; - }; - callFunction = function($el, function_name, args) { - var el, i, len, result, widget, widget_function; - result = null; - for (i = 0, len = $el.length; i < len; i++) { - el = $el[i]; - widget = $.data(el, getDataKey()); - if (widget && (widget instanceof SimpleWidget)) { - widget_function = widget[function_name]; - if (widget_function && (typeof widget_function === 'function')) { - result = widget_function.apply(widget, args); - } - } - } - return result; - }; - return $.fn[widget_name] = function() { - var $el, args, argument1, function_name, options; - argument1 = arguments[0], args = 2 <= arguments.length ? slice.call(arguments, 1) : []; - $el = this; - if (argument1 === void 0 || typeof argument1 === 'object') { - options = argument1; - return createWidget($el, options); - } else if (typeof argument1 === 'string' && argument1[0] !== '_') { - function_name = argument1; - if (function_name === 'destroy') { - return destroyWidget($el); - } else if (function_name === 'get_widget_class') { - return widget_class; - } else { - return callFunction($el, function_name, args); - } - } - }; - }; - - return SimpleWidget; - -})(); - -module.exports = SimpleWidget; diff --git a/ecomp-portal-FE/client/bower_components/jqTree/lib/tree.jquery.js b/ecomp-portal-FE/client/bower_components/jqTree/lib/tree.jquery.js deleted file mode 100644 index c7ac2f08..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/lib/tree.jquery.js +++ /dev/null @@ -1,1101 +0,0 @@ -var $, BorderDropHint, DragAndDropHandler, DragElement, ElementsRenderer, FolderElement, GhostDropHint, HitAreasGenerator, JqTreeWidget, KeyHandler, MouseWidget, Node, NodeElement, Position, SaveStateHandler, ScrollHandler, SelectNodeHandler, SimpleWidget, __version__, drag_and_drop_handler, isFunction, node_module, ref, util_module, - extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, - hasProp = {}.hasOwnProperty; - -__version__ = require('./version'); - -drag_and_drop_handler = require('./drag_and_drop_handler'); - -ElementsRenderer = require('./elements_renderer'); - -KeyHandler = require('./key_handler'); - -MouseWidget = require('./mouse.widget'); - -SaveStateHandler = require('./save_state_handler'); - -ScrollHandler = require('./scroll_handler'); - -SelectNodeHandler = require('./select_node_handler'); - -SimpleWidget = require('./simple.widget'); - -node_module = require('./node'); - -Node = node_module.Node; - -Position = node_module.Position; - -util_module = require('./util'); - -isFunction = util_module.isFunction; - -ref = require('./node_element'), BorderDropHint = ref.BorderDropHint, FolderElement = ref.FolderElement, GhostDropHint = ref.GhostDropHint, NodeElement = ref.NodeElement; - -DragAndDropHandler = drag_and_drop_handler.DragAndDropHandler, DragElement = drag_and_drop_handler.DragElement, HitAreasGenerator = drag_and_drop_handler.HitAreasGenerator; - -$ = jQuery; - -JqTreeWidget = (function(superClass) { - extend(JqTreeWidget, superClass); - - function JqTreeWidget() { - return JqTreeWidget.__super__.constructor.apply(this, arguments); - } - - JqTreeWidget.prototype.BorderDropHint = BorderDropHint; - - JqTreeWidget.prototype.DragElement = DragElement; - - JqTreeWidget.prototype.DragAndDropHandler = DragAndDropHandler; - - JqTreeWidget.prototype.ElementsRenderer = ElementsRenderer; - - JqTreeWidget.prototype.GhostDropHint = GhostDropHint; - - JqTreeWidget.prototype.HitAreasGenerator = HitAreasGenerator; - - JqTreeWidget.prototype.Node = Node; - - JqTreeWidget.prototype.SaveStateHandler = SaveStateHandler; - - JqTreeWidget.prototype.ScrollHandler = ScrollHandler; - - JqTreeWidget.prototype.SelectNodeHandler = SelectNodeHandler; - - JqTreeWidget.prototype.defaults = { - autoOpen: false, - saveState: false, - dragAndDrop: false, - selectable: true, - useContextMenu: true, - onCanSelectNode: null, - onSetStateFromStorage: null, - onGetStateFromStorage: null, - onCreateLi: null, - onIsMoveHandle: null, - onCanMove: null, - onCanMoveTo: null, - onLoadFailed: null, - autoEscape: true, - dataUrl: null, - closedIcon: null, - openedIcon: '▼', - slide: true, - nodeClass: Node, - dataFilter: null, - keyboardSupport: true, - openFolderDelay: 500, - rtl: null, - onDragMove: null, - onDragStop: null, - buttonLeft: true, - onLoading: null - }; - - JqTreeWidget.prototype.toggle = function(node, slide) { - if (slide == null) { - slide = null; - } - if (slide === null) { - slide = this.options.slide; - } - if (node.is_open) { - this.closeNode(node, slide); - } else { - this.openNode(node, slide); - } - return this.element; - }; - - JqTreeWidget.prototype.getTree = function() { - return this.tree; - }; - - JqTreeWidget.prototype.selectNode = function(node) { - this._selectNode(node, false); - return this.element; - }; - - JqTreeWidget.prototype._selectNode = function(node, must_toggle) { - var canSelect, deselected_node, openParents, saveState; - if (must_toggle == null) { - must_toggle = false; - } - if (!this.select_node_handler) { - return; - } - canSelect = (function(_this) { - return function() { - if (_this.options.onCanSelectNode) { - return _this.options.selectable && _this.options.onCanSelectNode(node); - } else { - return _this.options.selectable; - } - }; - })(this); - openParents = (function(_this) { - return function() { - var parent; - parent = node.parent; - if (parent && parent.parent && !parent.is_open) { - return _this.openNode(parent, false); - } - }; - })(this); - saveState = (function(_this) { - return function() { - if (_this.options.saveState) { - return _this.save_state_handler.saveState(); - } - }; - })(this); - if (!node) { - this._deselectCurrentNode(); - saveState(); - return; - } - if (!canSelect()) { - return; - } - if (this.select_node_handler.isNodeSelected(node)) { - if (must_toggle) { - this._deselectCurrentNode(); - this._triggerEvent('tree.select', { - node: null, - previous_node: node - }); - } - } else { - deselected_node = this.getSelectedNode(); - this._deselectCurrentNode(); - this.addToSelection(node); - this._triggerEvent('tree.select', { - node: node, - deselected_node: deselected_node - }); - openParents(); - } - return saveState(); - }; - - JqTreeWidget.prototype.getSelectedNode = function() { - if (this.select_node_handler) { - return this.select_node_handler.getSelectedNode(); - } else { - return null; - } - }; - - JqTreeWidget.prototype.toJson = function() { - return JSON.stringify(this.tree.getData()); - }; - - JqTreeWidget.prototype.loadData = function(data, parent_node) { - this._loadData(data, parent_node); - return this.element; - }; - - - /* - signatures: - - loadDataFromUrl(url, parent_node=null, on_finished=null) - loadDataFromUrl('/my_data'); - loadDataFromUrl('/my_data', node1); - loadDataFromUrl('/my_data', node1, function() { console.log('finished'); }); - loadDataFromUrl('/my_data', null, function() { console.log('finished'); }); - - - loadDataFromUrl(parent_node=null, on_finished=null) - loadDataFromUrl(); - loadDataFromUrl(node1); - loadDataFromUrl(null, function() { console.log('finished'); }); - loadDataFromUrl(node1, function() { console.log('finished'); }); - */ - - JqTreeWidget.prototype.loadDataFromUrl = function(param1, param2, param3) { - if ($.type(param1) === 'string') { - this._loadDataFromUrl(param1, param2, param3); - } else { - this._loadDataFromUrl(null, param1, param2); - } - return this.element; - }; - - JqTreeWidget.prototype.reload = function(on_finished) { - this._loadDataFromUrl(null, null, on_finished); - return this.element; - }; - - JqTreeWidget.prototype._loadDataFromUrl = function(url_info, parent_node, on_finished) { - var $el, addLoadingClass, handeLoadData, handleError, handleSuccess, loadDataFromUrlInfo, parseUrlInfo, removeLoadingClass; - $el = null; - addLoadingClass = (function(_this) { - return function() { - if (parent_node) { - $el = $(parent_node.element); - } else { - $el = _this.element; - } - $el.addClass('jqtree-loading'); - return _this._notifyLoading(true, parent_node, $el); - }; - })(this); - removeLoadingClass = (function(_this) { - return function() { - if ($el) { - $el.removeClass('jqtree-loading'); - return _this._notifyLoading(false, parent_node, $el); - } - }; - })(this); - parseUrlInfo = function() { - if ($.type(url_info) === 'string') { - return { - url: url_info - }; - } - if (!url_info.method) { - url_info.method = 'get'; - } - return url_info; - }; - handeLoadData = (function(_this) { - return function(data) { - removeLoadingClass(); - _this._loadData(data, parent_node); - if (on_finished && $.isFunction(on_finished)) { - return on_finished(); - } - }; - })(this); - handleSuccess = (function(_this) { - return function(response) { - var data; - if ($.isArray(response) || typeof response === 'object') { - data = response; - } else if (data != null) { - data = $.parseJSON(response); - } else { - data = []; - } - if (_this.options.dataFilter) { - data = _this.options.dataFilter(data); - } - return handeLoadData(data); - }; - })(this); - handleError = (function(_this) { - return function(response) { - removeLoadingClass(); - if (_this.options.onLoadFailed) { - return _this.options.onLoadFailed(response); - } - }; - })(this); - loadDataFromUrlInfo = function() { - url_info = parseUrlInfo(); - return $.ajax($.extend({}, url_info, { - method: url_info.method != null ? url_info.method.toUpperCase() : 'GET', - cache: false, - dataType: 'json', - success: handleSuccess, - error: handleError - })); - }; - if (!url_info) { - url_info = this._getDataUrlInfo(parent_node); - } - addLoadingClass(); - if (!url_info) { - removeLoadingClass(); - } else if ($.isArray(url_info)) { - handeLoadData(url_info); - } else { - loadDataFromUrlInfo(); - } - }; - - JqTreeWidget.prototype._loadData = function(data, parent_node) { - var deselectNodes, loadSubtree; - if (parent_node == null) { - parent_node = null; - } - deselectNodes = (function(_this) { - return function() { - var i, len, n, selected_nodes_under_parent; - if (_this.select_node_handler) { - selected_nodes_under_parent = _this.select_node_handler.getSelectedNodesUnder(parent_node); - for (i = 0, len = selected_nodes_under_parent.length; i < len; i++) { - n = selected_nodes_under_parent[i]; - _this.select_node_handler.removeFromSelection(n); - } - } - return null; - }; - })(this); - loadSubtree = (function(_this) { - return function() { - parent_node.loadFromData(data); - parent_node.load_on_demand = false; - parent_node.is_loading = false; - return _this._refreshElements(parent_node); - }; - })(this); - if (!data) { - return; - } - this._triggerEvent('tree.load_data', { - tree_data: data - }); - if (!parent_node) { - this._initTree(data); - } else { - deselectNodes(); - loadSubtree(); - } - if (this.isDragging()) { - return this.dnd_handler.refresh(); - } - }; - - JqTreeWidget.prototype.getNodeById = function(node_id) { - return this.tree.getNodeById(node_id); - }; - - JqTreeWidget.prototype.getNodeByName = function(name) { - return this.tree.getNodeByName(name); - }; - - JqTreeWidget.prototype.getNodesByProperty = function(key, value) { - return this.tree.getNodesByProperty(key, value); - }; - - JqTreeWidget.prototype.getNodeByHtmlElement = function(element) { - return this._getNode($(element)); - }; - - JqTreeWidget.prototype.getNodeByCallback = function(callback) { - return this.tree.getNodeByCallback(callback); - }; - - JqTreeWidget.prototype.openNode = function(node, slide_param, on_finished_param) { - var on_finished, parseParams, ref1, slide; - if (slide_param == null) { - slide_param = null; - } - if (on_finished_param == null) { - on_finished_param = null; - } - parseParams = (function(_this) { - return function() { - var on_finished, slide; - if (isFunction(slide_param)) { - on_finished = slide_param; - slide = null; - } else { - slide = slide_param; - on_finished = on_finished_param; - } - if (slide === null) { - slide = _this.options.slide; - } - return [slide, on_finished]; - }; - })(this); - ref1 = parseParams(), slide = ref1[0], on_finished = ref1[1]; - if (node) { - this._openNode(node, slide, on_finished); - } - return this.element; - }; - - JqTreeWidget.prototype._openNode = function(node, slide, on_finished) { - var doOpenNode, parent; - if (slide == null) { - slide = true; - } - doOpenNode = (function(_this) { - return function(_node, _slide, _on_finished) { - var folder_element; - folder_element = new FolderElement(_node, _this); - return folder_element.open(_on_finished, _slide); - }; - })(this); - if (node.isFolder()) { - if (node.load_on_demand) { - return this._loadFolderOnDemand(node, slide, on_finished); - } else { - parent = node.parent; - while (parent) { - if (parent.parent) { - doOpenNode(parent, false, null); - } - parent = parent.parent; - } - doOpenNode(node, slide, on_finished); - return this._saveState(); - } - } - }; - - JqTreeWidget.prototype._loadFolderOnDemand = function(node, slide, on_finished) { - if (slide == null) { - slide = true; - } - node.is_loading = true; - return this._loadDataFromUrl(null, node, (function(_this) { - return function() { - return _this._openNode(node, slide, on_finished); - }; - })(this)); - }; - - JqTreeWidget.prototype.closeNode = function(node, slide) { - if (slide == null) { - slide = null; - } - if (slide === null) { - slide = this.options.slide; - } - if (node.isFolder()) { - new FolderElement(node, this).close(slide); - this._saveState(); - } - return this.element; - }; - - JqTreeWidget.prototype.isDragging = function() { - if (this.dnd_handler) { - return this.dnd_handler.is_dragging; - } else { - return false; - } - }; - - JqTreeWidget.prototype.refreshHitAreas = function() { - this.dnd_handler.refresh(); - return this.element; - }; - - JqTreeWidget.prototype.addNodeAfter = function(new_node_info, existing_node) { - var new_node; - new_node = existing_node.addAfter(new_node_info); - this._refreshElements(existing_node.parent); - return new_node; - }; - - JqTreeWidget.prototype.addNodeBefore = function(new_node_info, existing_node) { - var new_node; - new_node = existing_node.addBefore(new_node_info); - this._refreshElements(existing_node.parent); - return new_node; - }; - - JqTreeWidget.prototype.addParentNode = function(new_node_info, existing_node) { - var new_node; - new_node = existing_node.addParent(new_node_info); - this._refreshElements(new_node.parent); - return new_node; - }; - - JqTreeWidget.prototype.removeNode = function(node) { - var parent; - parent = node.parent; - if (parent) { - this.select_node_handler.removeFromSelection(node, true); - node.remove(); - this._refreshElements(parent); - } - return this.element; - }; - - JqTreeWidget.prototype.appendNode = function(new_node_info, parent_node) { - var node; - parent_node = parent_node || this.tree; - node = parent_node.append(new_node_info); - this._refreshElements(parent_node); - return node; - }; - - JqTreeWidget.prototype.prependNode = function(new_node_info, parent_node) { - var node; - if (!parent_node) { - parent_node = this.tree; - } - node = parent_node.prepend(new_node_info); - this._refreshElements(parent_node); - return node; - }; - - JqTreeWidget.prototype.updateNode = function(node, data) { - var id_is_changed; - id_is_changed = data.id && data.id !== node.id; - if (id_is_changed) { - this.tree.removeNodeFromIndex(node); - } - node.setData(data); - if (id_is_changed) { - this.tree.addNodeToIndex(node); - } - if (typeof data === 'object' && data.children) { - node.removeChildren(); - if (data.children.length) { - node.loadFromData(data.children); - } - } - this.renderer.renderFromNode(node); - this._selectCurrentNode(); - return this.element; - }; - - JqTreeWidget.prototype.moveNode = function(node, target_node, position) { - var position_index; - position_index = Position.nameToIndex(position); - this.tree.moveNode(node, target_node, position_index); - this._refreshElements(); - return this.element; - }; - - JqTreeWidget.prototype.getStateFromStorage = function() { - return this.save_state_handler.getStateFromStorage(); - }; - - JqTreeWidget.prototype.addToSelection = function(node) { - if (node) { - this.select_node_handler.addToSelection(node); - this._getNodeElementForNode(node).select(); - this._saveState(); - } - return this.element; - }; - - JqTreeWidget.prototype.getSelectedNodes = function() { - return this.select_node_handler.getSelectedNodes(); - }; - - JqTreeWidget.prototype.isNodeSelected = function(node) { - return this.select_node_handler.isNodeSelected(node); - }; - - JqTreeWidget.prototype.removeFromSelection = function(node) { - this.select_node_handler.removeFromSelection(node); - this._getNodeElementForNode(node).deselect(); - this._saveState(); - return this.element; - }; - - JqTreeWidget.prototype.scrollToNode = function(node) { - var $element, top; - $element = $(node.element); - top = $element.offset().top - this.$el.offset().top; - this.scroll_handler.scrollTo(top); - return this.element; - }; - - JqTreeWidget.prototype.getState = function() { - return this.save_state_handler.getState(); - }; - - JqTreeWidget.prototype.setState = function(state) { - this.save_state_handler.setInitialState(state); - this._refreshElements(); - return this.element; - }; - - JqTreeWidget.prototype.setOption = function(option, value) { - this.options[option] = value; - return this.element; - }; - - JqTreeWidget.prototype.moveDown = function() { - if (this.key_handler) { - this.key_handler.moveDown(); - } - return this.element; - }; - - JqTreeWidget.prototype.moveUp = function() { - if (this.key_handler) { - this.key_handler.moveUp(); - } - return this.element; - }; - - JqTreeWidget.prototype.getVersion = function() { - return __version__; - }; - - JqTreeWidget.prototype._init = function() { - JqTreeWidget.__super__._init.call(this); - this.element = this.$el; - this.mouse_delay = 300; - this.is_initialized = false; - this.options.rtl = this._getRtlOption(); - if (!this.options.closedIcon) { - this.options.closedIcon = this._getDefaultClosedIcon(); - } - this.renderer = new ElementsRenderer(this); - if (SaveStateHandler != null) { - this.save_state_handler = new SaveStateHandler(this); - } else { - this.options.saveState = false; - } - if (SelectNodeHandler != null) { - this.select_node_handler = new SelectNodeHandler(this); - } - if (DragAndDropHandler != null) { - this.dnd_handler = new DragAndDropHandler(this); - } else { - this.options.dragAndDrop = false; - } - if (ScrollHandler != null) { - this.scroll_handler = new ScrollHandler(this); - } - if ((KeyHandler != null) && (SelectNodeHandler != null)) { - this.key_handler = new KeyHandler(this); - } - this._initData(); - this.element.click($.proxy(this._click, this)); - this.element.dblclick($.proxy(this._dblclick, this)); - if (this.options.useContextMenu) { - return this.element.bind('contextmenu', $.proxy(this._contextmenu, this)); - } - }; - - JqTreeWidget.prototype._deinit = function() { - this.element.empty(); - this.element.unbind(); - if (this.key_handler) { - this.key_handler.deinit(); - } - this.tree = null; - return JqTreeWidget.__super__._deinit.call(this); - }; - - JqTreeWidget.prototype._initData = function() { - var data_url; - if (this.options.data) { - return this._loadData(this.options.data); - } else { - data_url = this._getDataUrlInfo(); - if (data_url) { - return this._loadDataFromUrl(); - } else { - return this._loadData([]); - } - } - }; - - JqTreeWidget.prototype._getDataUrlInfo = function(node) { - var data_url, getUrlFromString; - data_url = this.options.dataUrl || this.element.data('url'); - getUrlFromString = (function(_this) { - return function() { - var data, selected_node_id, url_info; - url_info = { - url: data_url - }; - if (node && node.id) { - data = { - node: node.id - }; - url_info['data'] = data; - } else { - selected_node_id = _this._getNodeIdToBeSelected(); - if (selected_node_id) { - data = { - selected_node: selected_node_id - }; - url_info['data'] = data; - } - } - return url_info; - }; - })(this); - if ($.isFunction(data_url)) { - return data_url(node); - } else if ($.type(data_url) === 'string') { - return getUrlFromString(); - } else { - return data_url; - } - }; - - JqTreeWidget.prototype._getNodeIdToBeSelected = function() { - if (this.options.saveState) { - return this.save_state_handler.getNodeIdToBeSelected(); - } else { - return null; - } - }; - - JqTreeWidget.prototype._initTree = function(data) { - var doInit, must_load_on_demand; - doInit = (function(_this) { - return function() { - if (!_this.is_initialized) { - _this.is_initialized = true; - return _this._triggerEvent('tree.init'); - } - }; - })(this); - this.tree = new this.options.nodeClass(null, true, this.options.nodeClass); - if (this.select_node_handler) { - this.select_node_handler.clear(); - } - this.tree.loadFromData(data); - must_load_on_demand = this._setInitialState(); - this._refreshElements(); - if (!must_load_on_demand) { - return doInit(); - } else { - return this._setInitialStateOnDemand(doInit); - } - }; - - JqTreeWidget.prototype._setInitialState = function() { - var autoOpenNodes, is_restored, must_load_on_demand, ref1, restoreState; - restoreState = (function(_this) { - return function() { - var must_load_on_demand, state; - if (!(_this.options.saveState && _this.save_state_handler)) { - return [false, false]; - } else { - state = _this.save_state_handler.getStateFromStorage(); - if (!state) { - return [false, false]; - } else { - must_load_on_demand = _this.save_state_handler.setInitialState(state); - return [true, must_load_on_demand]; - } - } - }; - })(this); - autoOpenNodes = (function(_this) { - return function() { - var max_level, must_load_on_demand; - if (_this.options.autoOpen === false) { - return false; - } - max_level = _this._getAutoOpenMaxLevel(); - must_load_on_demand = false; - _this.tree.iterate(function(node, level) { - if (node.load_on_demand) { - must_load_on_demand = true; - return false; - } else if (!node.hasChildren()) { - return false; - } else { - node.is_open = true; - return level !== max_level; - } - }); - return must_load_on_demand; - }; - })(this); - ref1 = restoreState(), is_restored = ref1[0], must_load_on_demand = ref1[1]; - if (!is_restored) { - must_load_on_demand = autoOpenNodes(); - } - return must_load_on_demand; - }; - - JqTreeWidget.prototype._setInitialStateOnDemand = function(cb_finished) { - var autoOpenNodes, restoreState; - restoreState = (function(_this) { - return function() { - var state; - if (!(_this.options.saveState && _this.save_state_handler)) { - return false; - } else { - state = _this.save_state_handler.getStateFromStorage(); - if (!state) { - return false; - } else { - _this.save_state_handler.setInitialStateOnDemand(state, cb_finished); - return true; - } - } - }; - })(this); - autoOpenNodes = (function(_this) { - return function() { - var loadAndOpenNode, loading_count, max_level, openNodes; - max_level = _this._getAutoOpenMaxLevel(); - loading_count = 0; - loadAndOpenNode = function(node) { - loading_count += 1; - return _this._openNode(node, false, function() { - loading_count -= 1; - return openNodes(); - }); - }; - openNodes = function() { - _this.tree.iterate(function(node, level) { - if (node.load_on_demand) { - if (!node.is_loading) { - loadAndOpenNode(node); - } - return false; - } else { - _this._openNode(node, false); - return level !== max_level; - } - }); - if (loading_count === 0) { - return cb_finished(); - } - }; - return openNodes(); - }; - })(this); - if (!restoreState()) { - return autoOpenNodes(); - } - }; - - JqTreeWidget.prototype._getAutoOpenMaxLevel = function() { - if (this.options.autoOpen === true) { - return -1; - } else { - return parseInt(this.options.autoOpen); - } - }; - - - /* - Redraw the tree or part of the tree. - * from_node: redraw this subtree - */ - - JqTreeWidget.prototype._refreshElements = function(from_node) { - if (from_node == null) { - from_node = null; - } - this.renderer.render(from_node); - return this._triggerEvent('tree.refresh'); - }; - - JqTreeWidget.prototype._click = function(e) { - var click_target, event, node; - click_target = this._getClickTarget(e.target); - if (click_target) { - if (click_target.type === 'button') { - this.toggle(click_target.node, this.options.slide); - e.preventDefault(); - return e.stopPropagation(); - } else if (click_target.type === 'label') { - node = click_target.node; - event = this._triggerEvent('tree.click', { - node: node, - click_event: e - }); - if (!event.isDefaultPrevented()) { - return this._selectNode(node, true); - } - } - } - }; - - JqTreeWidget.prototype._dblclick = function(e) { - var click_target; - click_target = this._getClickTarget(e.target); - if (click_target && click_target.type === 'label') { - return this._triggerEvent('tree.dblclick', { - node: click_target.node, - click_event: e - }); - } - }; - - JqTreeWidget.prototype._getClickTarget = function(element) { - var $button, $el, $target, node; - $target = $(element); - $button = $target.closest('.jqtree-toggler'); - if ($button.length) { - node = this._getNode($button); - if (node) { - return { - type: 'button', - node: node - }; - } - } else { - $el = $target.closest('.jqtree-element'); - if ($el.length) { - node = this._getNode($el); - if (node) { - return { - type: 'label', - node: node - }; - } - } - } - return null; - }; - - JqTreeWidget.prototype._getNode = function($element) { - var $li; - $li = $element.closest('li.jqtree_common'); - if ($li.length === 0) { - return null; - } else { - return $li.data('node'); - } - }; - - JqTreeWidget.prototype._getNodeElementForNode = function(node) { - if (node.isFolder()) { - return new FolderElement(node, this); - } else { - return new NodeElement(node, this); - } - }; - - JqTreeWidget.prototype._getNodeElement = function($element) { - var node; - node = this._getNode($element); - if (node) { - return this._getNodeElementForNode(node); - } else { - return null; - } - }; - - JqTreeWidget.prototype._contextmenu = function(e) { - var $div, node; - $div = $(e.target).closest('ul.jqtree-tree .jqtree-element'); - if ($div.length) { - node = this._getNode($div); - if (node) { - e.preventDefault(); - e.stopPropagation(); - this._triggerEvent('tree.contextmenu', { - node: node, - click_event: e - }); - return false; - } - } - }; - - JqTreeWidget.prototype._saveState = function() { - if (this.options.saveState) { - return this.save_state_handler.saveState(); - } - }; - - JqTreeWidget.prototype._mouseCapture = function(position_info) { - if (this.options.dragAndDrop) { - return this.dnd_handler.mouseCapture(position_info); - } else { - return false; - } - }; - - JqTreeWidget.prototype._mouseStart = function(position_info) { - if (this.options.dragAndDrop) { - return this.dnd_handler.mouseStart(position_info); - } else { - return false; - } - }; - - JqTreeWidget.prototype._mouseDrag = function(position_info) { - var result; - if (this.options.dragAndDrop) { - result = this.dnd_handler.mouseDrag(position_info); - if (this.scroll_handler) { - this.scroll_handler.checkScrolling(); - } - return result; - } else { - return false; - } - }; - - JqTreeWidget.prototype._mouseStop = function(position_info) { - if (this.options.dragAndDrop) { - return this.dnd_handler.mouseStop(position_info); - } else { - return false; - } - }; - - JqTreeWidget.prototype._triggerEvent = function(event_name, values) { - var event; - event = $.Event(event_name); - $.extend(event, values); - this.element.trigger(event); - return event; - }; - - JqTreeWidget.prototype.testGenerateHitAreas = function(moving_node) { - this.dnd_handler.current_item = this._getNodeElementForNode(moving_node); - this.dnd_handler.generateHitAreas(); - return this.dnd_handler.hit_areas; - }; - - JqTreeWidget.prototype._selectCurrentNode = function() { - var node, node_element; - node = this.getSelectedNode(); - if (node) { - node_element = this._getNodeElementForNode(node); - if (node_element) { - return node_element.select(); - } - } - }; - - JqTreeWidget.prototype._deselectCurrentNode = function() { - var node; - node = this.getSelectedNode(); - if (node) { - return this.removeFromSelection(node); - } - }; - - JqTreeWidget.prototype._getDefaultClosedIcon = function() { - if (this.options.rtl) { - return '◀'; - } else { - return '►'; - } - }; - - JqTreeWidget.prototype._getRtlOption = function() { - var data_rtl; - if (this.options.rtl !== null) { - return this.options.rtl; - } else { - data_rtl = this.element.data('rtl'); - if ((data_rtl != null) && data_rtl !== false) { - return true; - } else { - return false; - } - } - }; - - JqTreeWidget.prototype._notifyLoading = function(is_loading, node, $el) { - if (this.options.onLoading) { - return this.options.onLoading(is_loading, node, $el); - } - }; - - return JqTreeWidget; - -})(MouseWidget); - -JqTreeWidget.getModule = function(name) { - var modules; - modules = { - 'node': node_module, - 'util': util_module, - 'drag_and_drop_handler': drag_and_drop_handler - }; - return modules[name]; -}; - -SimpleWidget.register(JqTreeWidget, 'tree'); diff --git a/ecomp-portal-FE/client/bower_components/jqTree/lib/util.js b/ecomp-portal-FE/client/bower_components/jqTree/lib/util.js deleted file mode 100644 index c214e59b..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/lib/util.js +++ /dev/null @@ -1,49 +0,0 @@ -var _indexOf, getBoolString, html_escape, indexOf, isFunction, isInt; - -_indexOf = function(array, item) { - var i, j, len, value; - for (i = j = 0, len = array.length; j < len; i = ++j) { - value = array[i]; - if (value === item) { - return i; - } - } - return -1; -}; - -indexOf = function(array, item) { - if (array.indexOf) { - return array.indexOf(item); - } else { - return _indexOf(array, item); - } -}; - -isInt = function(n) { - return typeof n === 'number' && n % 1 === 0; -}; - -isFunction = function(v) { - return typeof v === 'function'; -}; - -html_escape = function(string) { - return ('' + string).replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"').replace(/'/g, ''').replace(/\//g, '/'); -}; - -getBoolString = function(value) { - if (value) { - return 'true'; - } else { - return 'false'; - } -}; - -module.exports = { - _indexOf: _indexOf, - getBoolString: getBoolString, - html_escape: html_escape, - indexOf: indexOf, - isInt: isInt, - isFunction: isFunction -}; diff --git a/ecomp-portal-FE/client/bower_components/jqTree/lib/version.js b/ecomp-portal-FE/client/bower_components/jqTree/lib/version.js deleted file mode 100644 index 90f6eb95..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/lib/version.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = '1.3.7'; diff --git a/ecomp-portal-FE/client/bower_components/jqTree/package.json b/ecomp-portal-FE/client/bower_components/jqTree/package.json deleted file mode 100644 index ebdd6457..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/package.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "name": "jqtree", - "version": "1.3.7", - "description": "Tree widget for jQuery", - "keywords": [ - "jquery-plugin", - "tree" - ], - "license": "Apache-2.0", - "main": "lib/tree.jquery.js", - "repository": { - "type": "git", - "url": "https://github.com/mbraak/jqtree" - }, - "scripts": { - "test": "karma start --browsers Chrome --single-run && coffeelint src", - "build": "gulp", - "watch": "gulp watch", - "karma": "karma start --browsers Chrome" - }, - "dependencies": { - "jquery": ">=1.9" - }, - "devDependencies": { - "browserify": "^13.3.0", - "coffee-script": "^1.12.2", - "coffeeify": "^2.1.0", - "connect": "^3.5.0", - "coveralls": "^2.11.15", - "gulp": "^3.9.1", - "gulp-coffee": "^2.3.3", - "gulp-coffeeify": "0.1.8", - "gulp-coffeelint": "^0.6.0", - "gulp-header": "^1.8.8", - "gulp-rename": "^1.2.2", - "gulp-sass": "^3.1.0", - "ie-version": "^0.1.0", - "jquery-mockjax": "^2.2.1", - "karma": "^1.3.0", - "karma-browserify": "^5.1.0", - "karma-chrome-launcher": "^2.0.0", - "karma-cli": "^1.0.1", - "karma-firefox-launcher": "^1.0.0", - "karma-phantomjs-launcher": "^1.0.2", - "karma-qunit": "^1.2.1", - "phantomjs-prebuilt": "^2.1.14", - "qunitjs": "^2.1.1", - "serve-static": "^1.11.1", - "watchify": "^3.8.0" - } -} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/phantomjs/runner.js b/ecomp-portal-FE/client/bower_components/jqTree/phantomjs/runner.js deleted file mode 100644 index 156ab40e..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/phantomjs/runner.js +++ /dev/null @@ -1,193 +0,0 @@ -/* - * QtWebKit-powered headless test runner using PhantomJS - * - * PhantomJS binaries: http://phantomjs.org/download.html - * Requires PhantomJS 1.6+ (1.7+ recommended) - * - * Run with: - * phantomjs runner.js [url-of-your-qunit-testsuite] - * - * e.g. - * phantomjs runner.js http://localhost/qunit/test/index.html - */ - -/*global phantom:false, require:false, console:false, window:false, QUnit:false */ - -(function() { - 'use strict'; - - var url, page, timeout, - args = require('system').args; - - // arg[0]: scriptName, args[1...]: arguments - if (args.length < 2 || args.length > 3) { - console.error('Usage:\n phantomjs runner.js [url-of-your-qunit-testsuite] [timeout-in-seconds]'); - phantom.exit(1); - } - - url = args[1]; - page = require('webpage').create(); - if (args[2] !== undefined) { - timeout = parseInt(args[2], 10); - } - - // Route `console.log()` calls from within the Page context to the main Phantom context (i.e. current `this`) - page.onConsoleMessage = function(msg) { - console.log(msg); - }; - - page.onInitialized = function() { - page.evaluate(addLogging); - }; - - page.onCallback = function(message) { - var result, - failed; - - if (message) { - if (message.name === 'QUnit.done') { - result = message.data; - failed = !result || !result.total || result.failed; - - if (!result.total) { - console.error('No tests were executed. Are you loading tests asynchronously?'); - } - - // Work-around to avoid "Unsafe JavaScript attempt to access frame" warning in PhantomJS 1.9.8. - // See: https://github.com/ariya/phantomjs/issues/12697 - page.close(); - setTimeout(function () { phantom.exit(failed ? 1 : 0) }, 0); - } - else if (message.name == 'Blanket.done') { - console.log('Saving coverage data to data.lcov.'); - - var fs = require('fs'); - var f = fs.open('data.lcov', 'w'); - f.write(message.data); - f.close(); - } - - } - }; - - page.open(url, function(status) { - if (status !== 'success') { - console.error('Unable to access network: ' + status); - phantom.exit(1); - } else { - // Cannot do this verification with the 'DOMContentLoaded' handler because it - // will be too late to attach it if a page does not have any script tags. - var qunitMissing = page.evaluate(function() { return (typeof QUnit === 'undefined' || !QUnit); }); - if (qunitMissing) { - console.error('The `QUnit` object is not present on this page.'); - phantom.exit(1); - } - - // Set a timeout on the test running, otherwise tests with async problems will hang forever - if (typeof timeout === 'number') { - setTimeout(function() { - console.error('The specified timeout of ' + timeout + ' seconds has expired. Aborting...'); - phantom.exit(1); - }, timeout * 1000); - } - - // Do nothing... the callback mechanism will handle everything! - } - }); - - function addLogging() { - window.document.addEventListener('DOMContentLoaded', function() { - var currentTestAssertions = []; - - QUnit.log(function(details) { - var response; - - // Ignore passing assertions - if (details.result) { - return; - } - - response = details.message || ''; - - if (typeof details.expected !== 'undefined') { - if (response) { - response += ', '; - } - - response += 'expected: ' + details.expected + ', but was: ' + details.actual; - } - - if (details.source) { - response += "\n" + details.source; - } - - currentTestAssertions.push('Failed assertion: ' + response); - }); - - QUnit.testDone(function(result) { - var i, - len, - name = result.module + ': ' + result.name; - - if (result.failed) { - console.log('Test failed: ' + name); - - for (i = 0, len = currentTestAssertions.length; i < len; i++) { - console.log(' ' + currentTestAssertions[i]); - } - } - - currentTestAssertions.length = 0; - }); - - QUnit.done(function(result) { - console.log('Took ' + result.runtime + 'ms to run ' + result.total + ' tests. ' + result.passed + ' passed, ' + result.failed + ' failed.'); - - if (typeof window.callPhantom === 'function') { - window.callPhantom({ - 'name': 'QUnit.done', - 'data': result - }); - } - }); - - blanket.options( - 'reporter', - function(coverage) { - var result = ''; - - function addLine() { - for (var i=0; i - @tree_widget = tree_widget - - @hovered_area = null - @$ghost = null - @hit_areas = [] - @is_dragging = false - @current_item = null - - mouseCapture: (position_info) -> - $element = $(position_info.target) - - if not @mustCaptureElement($element) - return null - - if @tree_widget.options.onIsMoveHandle and not @tree_widget.options.onIsMoveHandle($element) - return null - - node_element = @tree_widget._getNodeElement($element) - - if node_element and @tree_widget.options.onCanMove - if not @tree_widget.options.onCanMove(node_element.node) - node_element = null - - @current_item = node_element - return (@current_item != null) - - mouseStart: (position_info) -> - @refresh() - - offset = $(position_info.target).offset() - - node = @current_item.node - - if @tree_widget.options.autoEscape - node_name = util.html_escape(node.name) - else - node_name = node.name - - @drag_element = new DragElement( - node_name, - position_info.page_x - offset.left, - position_info.page_y - offset.top, - @tree_widget.element - ) - - @is_dragging = true - @current_item.$element.addClass('jqtree-moving') - return true - - mouseDrag: (position_info) -> - @drag_element.move(position_info.page_x, position_info.page_y) - - area = @findHoveredArea(position_info.page_x, position_info.page_y) - can_move_to = @canMoveToArea(area) - - if can_move_to and area - if !area.node.isFolder() - @stopOpenFolderTimer() - - if @hovered_area != area - @hovered_area = area - - # If this is a closed folder, start timer to open it - if @mustOpenFolderTimer(area) - @startOpenFolderTimer(area.node) - else - @stopOpenFolderTimer() - - @updateDropHint() - else - @removeHover() - @removeDropHint() - @stopOpenFolderTimer() - - if not area - if @tree_widget.options.onDragMove? - @tree_widget.options.onDragMove(@current_item.node, position_info.original_event) - - return true - - mustCaptureElement: ($element) -> - return not $element.is('input,select,textarea') - - canMoveToArea: (area) -> - if not area - return false - else if @tree_widget.options.onCanMoveTo - position_name = Position.getName(area.position) - - return @tree_widget.options.onCanMoveTo(@current_item.node, area.node, position_name) - else - return true - - mouseStop: (position_info) -> - @moveItem(position_info) - @clear() - @removeHover() - @removeDropHint() - @removeHitAreas() - - current_item = @current_item - - if @current_item - @current_item.$element.removeClass('jqtree-moving') - @current_item = null - - @is_dragging = false - - if not @hovered_area and current_item - if @tree_widget.options.onDragStop? - @tree_widget.options.onDragStop(current_item.node, position_info.original_event) - - return false - - refresh: -> - @removeHitAreas() - - if @current_item - @generateHitAreas() - - @current_item = @tree_widget._getNodeElementForNode(@current_item.node) - - if @is_dragging - @current_item.$element.addClass('jqtree-moving') - - removeHitAreas: -> - @hit_areas = [] - - clear: -> - @drag_element.remove() - @drag_element = null - - removeDropHint: -> - if @previous_ghost - @previous_ghost.remove() - - removeHover: -> - @hovered_area = null - - generateHitAreas: -> - hit_areas_generator = new HitAreasGenerator( - @tree_widget.tree, - @current_item.node, - @getTreeDimensions().bottom - ) - @hit_areas = hit_areas_generator.generate() - - findHoveredArea: (x, y) -> - dimensions = @getTreeDimensions() - - if ( - x < dimensions.left or - y < dimensions.top or - x > dimensions.right or - y > dimensions.bottom - ) - return null - - low = 0 - high = @hit_areas.length - while (low < high) - mid = (low + high) >> 1 - area = @hit_areas[mid] - - if y < area.top - high = mid - else if y > area.bottom - low = mid + 1 - else - return area - - return null - - mustOpenFolderTimer: (area) -> - node = area.node - - return ( - node.isFolder() and - not node.is_open and - area.position == Position.INSIDE - ) - - updateDropHint: -> - if not @hovered_area - return - - # remove previous drop hint - @removeDropHint() - - # add new drop hint - node_element = @tree_widget._getNodeElementForNode(@hovered_area.node) - @previous_ghost = node_element.addDropHint(@hovered_area.position) - - startOpenFolderTimer: (folder) -> - openFolder = => - @tree_widget._openNode( - folder, - @tree_widget.options.slide, - => - @refresh() - @updateDropHint() - ) - - @stopOpenFolderTimer() - - @open_folder_timer = setTimeout(openFolder, @tree_widget.options.openFolderDelay) - - stopOpenFolderTimer: -> - if @open_folder_timer - clearTimeout(@open_folder_timer) - @open_folder_timer = null - - moveItem: (position_info) -> - if ( - @hovered_area and - @hovered_area.position != Position.NONE and - @canMoveToArea(@hovered_area) - ) - moved_node = @current_item.node - target_node = @hovered_area.node - position = @hovered_area.position - previous_parent = moved_node.parent - - if position == Position.INSIDE - @hovered_area.node.is_open = true - - doMove = => - @tree_widget.tree.moveNode(moved_node, target_node, position) - @tree_widget.element.empty() - @tree_widget._refreshElements() - - event = @tree_widget._triggerEvent( - 'tree.move', - move_info: - moved_node: moved_node - target_node: target_node - position: Position.getName(position) - previous_parent: previous_parent - do_move: doMove - original_event: position_info.original_event - ) - - doMove() unless event.isDefaultPrevented() - - getTreeDimensions: -> - # Return the dimensions of the tree. Add a margin to the bottom to allow - # for some to drag-and-drop the last element. - offset = @tree_widget.element.offset() - - return { - left: offset.left, - top: offset.top, - right: offset.left + @tree_widget.element.width(), - bottom: offset.top + @tree_widget.element.height() + 16 - } - - -class VisibleNodeIterator - constructor: (tree) -> - @tree = tree - - iterate: -> - is_first_node = true - - _iterateNode = (node, next_node) => - must_iterate_inside = ( - (node.is_open or not node.element) and node.hasChildren() - ) - - if node.element - $element = $(node.element) - - if not $element.is(':visible') - return - - if is_first_node - @handleFirstNode(node, $element) - is_first_node = false - - if not node.hasChildren() - @handleNode(node, next_node, $element) - else if node.is_open - if not @handleOpenFolder(node, $element) - must_iterate_inside = false - else - @handleClosedFolder(node, next_node, $element) - - if must_iterate_inside - children_length = node.children.length - for child, i in node.children - if i == (children_length - 1) - _iterateNode(node.children[i], null) - else - _iterateNode(node.children[i], node.children[i+1]) - - if node.is_open - @handleAfterOpenFolder(node, next_node, $element) - - _iterateNode(@tree, null) - - handleNode: (node, next_node, $element) -> - # override - - handleOpenFolder: (node, $element) -> - # override - # return - # - true: continue iterating - # - false: stop iterating - - handleClosedFolder: (node, next_node, $element) -> - # override - - handleAfterOpenFolder: (node, next_node, $element) -> - # override - - handleFirstNode: (node, $element) -> - # override - - -class HitAreasGenerator extends VisibleNodeIterator - constructor: (tree, current_node, tree_bottom) -> - super(tree) - - @current_node = current_node - @tree_bottom = tree_bottom - - generate: -> - @positions = [] - @last_top = 0 - - @iterate() - - return @generateHitAreas(@positions) - - getTop: ($element) -> - return $element.offset().top - - addPosition: (node, position, top) -> - area = { - top: top - node: node - position: position - } - - @positions.push(area) - @last_top = top - - handleNode: (node, next_node, $element) -> - top = @getTop($element) - - if node == @current_node - # Cannot move inside current item - @addPosition(node, Position.NONE, top) - else - @addPosition(node, Position.INSIDE, top) - - if ( - next_node == @current_node or - node == @current_node - ) - # Cannot move before or after current item - @addPosition(node, Position.NONE, top) - else - @addPosition(node, Position.AFTER, top) - - handleOpenFolder: (node, $element) -> - if node == @current_node - # Cannot move inside current item - # Stop iterating - return false - - # Cannot move before current item - if node.children[0] != @current_node - @addPosition(node, Position.INSIDE, @getTop($element)) - - # Continue iterating - return true - - handleClosedFolder: (node, next_node, $element) -> - top = @getTop($element) - - if node == @current_node - # Cannot move after current item - @addPosition(node, Position.NONE, top) - else - @addPosition(node, Position.INSIDE, top) - - # Cannot move before current item - if next_node != @current_node - @addPosition(node, Position.AFTER, top) - - handleFirstNode: (node, $element) -> - if node != @current_node - @addPosition(node, Position.BEFORE, @getTop($(node.element))) - - handleAfterOpenFolder: (node, next_node, $element) -> - if ( - node == @current_node.node or - next_node == @current_node.node - ) - # Cannot move before or after current item - @addPosition(node, Position.NONE, @last_top) - else - @addPosition(node, Position.AFTER, @last_top) - - generateHitAreas: (positions) -> - previous_top = -1 - group = [] - hit_areas = [] - - for position in positions - if position.top != previous_top and group.length - if group.length - @generateHitAreasForGroup( - hit_areas, - group, - previous_top, - position.top - ) - - previous_top = position.top - group = [] - - group.push(position) - - @generateHitAreasForGroup( - hit_areas, - group, - previous_top, - @tree_bottom - ) - - return hit_areas - - generateHitAreasForGroup: (hit_areas, positions_in_group, top, bottom) -> - # limit positions in group - position_count = Math.min(positions_in_group.length, 4) - - area_height = Math.round((bottom - top) / position_count) - area_top = top - - i = 0 - while (i < position_count) - position = positions_in_group[i] - - hit_areas.push( - top: area_top, - bottom: area_top + area_height, - node: position.node, - position: position.position - ) - - area_top += area_height - i += 1 - - return null - - -class DragElement - constructor: (node_name, offset_x, offset_y, $tree) -> - @offset_x = offset_x - @offset_y = offset_y - - @$element = $("#{ node_name }") - @$element.css("position", "absolute") - $tree.append(@$element) - - move: (page_x, page_y) -> - @$element.offset( - left: page_x - @offset_x, - top: page_y - @offset_y - ) - - remove: -> - @$element.remove() - - -module.exports = - DragAndDropHandler: DragAndDropHandler - DragElement: DragElement - HitAreasGenerator: HitAreasGenerator diff --git a/ecomp-portal-FE/client/bower_components/jqTree/src/elements_renderer.coffee b/ecomp-portal-FE/client/bower_components/jqTree/src/elements_renderer.coffee deleted file mode 100644 index b68cf917..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/src/elements_renderer.coffee +++ /dev/null @@ -1,237 +0,0 @@ -node_element = require './node_element' -NodeElement = node_element.NodeElement - -util = require './util' -html_escape = util.html_escape - - -$ = jQuery - - -class ElementsRenderer - constructor: (tree_widget) -> - @tree_widget = tree_widget - - @opened_icon_element = @createButtonElement(tree_widget.options.openedIcon) - @closed_icon_element = @createButtonElement(tree_widget.options.closedIcon) - - render: (from_node) -> - if from_node and from_node.parent - @renderFromNode(from_node) - else - @renderFromRoot() - - renderFromRoot: -> - $element = @tree_widget.element - $element.empty() - - @createDomElements($element[0], @tree_widget.tree.children, true, true, 1) - - renderFromNode: (node) -> - # remember current li - $previous_li = $(node.element) - - # create element - li = @createLi(node, node.getLevel()) - @attachNodeData(node, li) - - # add element to dom - $previous_li.after(li) - - # remove previous li - $previous_li.remove() - - # create children - if node.children - @createDomElements(li, node.children, false, false, node.getLevel() + 1) - - createDomElements: (element, children, is_root_node, is_open, level) -> - ul = @createUl(is_root_node) - element.appendChild(ul) - - for child in children - li = @createLi(child, level) - ul.appendChild(li) - - @attachNodeData(child, li) - - if child.hasChildren() - @createDomElements(li, child.children, false, child.is_open, level + 1) - - return null - - attachNodeData: (node, li) -> - node.element = li - $(li).data('node', node) - - createUl: (is_root_node) -> - if !is_root_node - class_string = '' - role = 'group' - else - class_string = 'jqtree-tree' - role = 'tree' - - if @tree_widget.options.rtl - class_string += ' jqtree-rtl' - - ul = document.createElement('ul') - ul.className = "jqtree_common #{ class_string }" - - ul.setAttribute('role', role) - - return ul - - createLi: (node, level) -> - is_selected = @tree_widget.select_node_handler and @tree_widget.select_node_handler.isNodeSelected(node) - - if node.isFolder() - li = @createFolderLi(node, level, is_selected) - else - li = @createNodeLi(node, level, is_selected) - - if @tree_widget.options.onCreateLi - @tree_widget.options.onCreateLi(node, $(li)) - - return li - - createFolderLi: (node, level, is_selected) -> - button_classes = @getButtonClasses(node) - folder_classes = @getFolderClasses(node, is_selected) - - if node.is_open - icon_element = @opened_icon_element - else - icon_element = @closed_icon_element - - # li - li = document.createElement('li') - li.className = "jqtree_common #{ folder_classes }" - li.setAttribute('role', 'presentation') - - # div - div = document.createElement('div') - div.className = "jqtree-element jqtree_common" - div.setAttribute('role', 'presentation') - - li.appendChild(div) - - # button link - button_link = document.createElement('a') - button_link.className = button_classes - - button_link.appendChild( - icon_element.cloneNode(false) - ) - - button_link.setAttribute('role', 'presentation') - button_link.setAttribute('aria-hidden', 'true') - - if @tree_widget.options.buttonLeft - div.appendChild(button_link) - - # title span - div.appendChild( - @createTitleSpan(node.name, level, is_selected, node.is_open, is_folder=true) - ) - - if not @tree_widget.options.buttonLeft - div.appendChild(button_link) - - return li - - createNodeLi: (node, level, is_selected) -> - li_classes = ['jqtree_common'] - - if is_selected - li_classes.push('jqtree-selected') - - class_string = li_classes.join(' ') - - # li - li = document.createElement('li') - li.className = class_string - li.setAttribute('role', 'presentation') - - # div - div = document.createElement('div') - div.className = "jqtree-element jqtree_common" - div.setAttribute('role', 'presentation') - - li.appendChild(div) - - # title span - div.appendChild( - @createTitleSpan(node.name, level, is_selected, node.is_open, is_folder=false) - ) - - return li - - createTitleSpan: (node_name, level, is_selected, is_open, is_folder) -> - title_span = document.createElement('span') - - classes = "jqtree-title jqtree_common" - - if is_folder - classes += " jqtree-title-folder" - - title_span.className = classes - - title_span.setAttribute('role', 'treeitem') - title_span.setAttribute('aria-level', level) - - title_span.setAttribute('aria-selected', util.getBoolString(is_selected)) - title_span.setAttribute('aria-expanded', util.getBoolString(is_open)) - - if is_selected - title_span.setAttribute('tabindex', 0) - - title_span.innerHTML = @escapeIfNecessary(node_name) - - return title_span - - getButtonClasses: (node) -> - classes = ['jqtree-toggler', 'jqtree_common'] - - if not node.is_open - classes.push('jqtree-closed') - - if @tree_widget.options.buttonLeft - classes.push('jqtree-toggler-left') - else - classes.push('jqtree-toggler-right') - - return classes.join(' ') - - getFolderClasses: (node, is_selected) -> - classes = ['jqtree-folder'] - - if not node.is_open - classes.push('jqtree-closed') - - if is_selected - classes.push('jqtree-selected') - - if node.is_loading - classes.push('jqtree-loading') - - return classes.join(' ') - - escapeIfNecessary: (value) -> - if @tree_widget.options.autoEscape - return html_escape(value) - else - return value - - createButtonElement: (value) -> - if typeof value == 'string' - # convert value to html - div = document.createElement('div') - div.innerHTML = value - - return document.createTextNode(div.innerHTML) - else - return $(value)[0] - - -module.exports = ElementsRenderer diff --git a/ecomp-portal-FE/client/bower_components/jqTree/src/header.txt b/ecomp-portal-FE/client/bower_components/jqTree/src/header.txt deleted file mode 100644 index bb10525a..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/src/header.txt +++ /dev/null @@ -1,17 +0,0 @@ -/* -JqTree <%= pkg.version %> - -Copyright 2015 Marco Braak - -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. -*/ diff --git a/ecomp-portal-FE/client/bower_components/jqTree/src/key_handler.coffee b/ecomp-portal-FE/client/bower_components/jqTree/src/key_handler.coffee deleted file mode 100644 index c8c17e7c..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/src/key_handler.coffee +++ /dev/null @@ -1,107 +0,0 @@ -$ = jQuery - - -class KeyHandler - LEFT = 37 - UP = 38 - RIGHT = 39 - DOWN = 40 - - constructor: (tree_widget) -> - @tree_widget = tree_widget - - if tree_widget.options.keyboardSupport - $(document).bind('keydown.jqtree', $.proxy(@handleKeyDown, this)) - - deinit: -> - $(document).unbind('keydown.jqtree') - - moveDown: -> - node = @tree_widget.getSelectedNode() - - if node - return @selectNode(node.getNextNode()) - else - return false - - moveUp: -> - node = @tree_widget.getSelectedNode() - - if node - return @selectNode(node.getPreviousNode()) - else - return false - - moveRight: -> - node = @tree_widget.getSelectedNode() - - if not node - return true - else if not node.isFolder() - return true - else - # folder node - if node.is_open - # Right moves to the first child of an open node - return @selectNode(node.getNextNode()) - else - # Right expands a closed node - @tree_widget.openNode(node) - return false - - moveLeft: -> - node = @tree_widget.getSelectedNode() - - if not node - return true - else if node.isFolder() and node.is_open - # Left on an open node closes the node - @tree_widget.closeNode(node) - return false - else - # Left on a closed or end node moves focus to the node's parent - return @selectNode(node.getParent()) - - handleKeyDown: (e) -> - if not @tree_widget.options.keyboardSupport - return true - - if $(document.activeElement).is('textarea,input,select') - return true - - if not @tree_widget.getSelectedNode() - return true - - key = e.which - - switch key - when DOWN - return @moveDown() - - when UP - return @moveUp() - - when RIGHT - return @moveRight() - - when LEFT - return @moveLeft() - - return true - - selectNode: (node) => - if not node - return true - else - @tree_widget.selectNode(node) - - if ( - @tree_widget.scroll_handler and - (not @tree_widget.scroll_handler.isScrolledIntoView($(node.element).find('.jqtree-element'))) - ) - @tree_widget.scrollToNode(node) - - return false - - -module.exports = KeyHandler diff --git a/ecomp-portal-FE/client/bower_components/jqTree/src/mouse.widget.coffee b/ecomp-portal-FE/client/bower_components/jqTree/src/mouse.widget.coffee deleted file mode 100644 index f76ff7e6..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/src/mouse.widget.coffee +++ /dev/null @@ -1,184 +0,0 @@ -### -This widget does the same a the mouse widget in jqueryui. -### - -SimpleWidget = require './simple.widget' - - -$ = jQuery - - -class MouseWidget extends SimpleWidget - @is_mouse_handled = false - - _init: -> - @$el.bind('mousedown.mousewidget', $.proxy(@_mouseDown, this)) - @$el.bind('touchstart.mousewidget', $.proxy(@_touchStart, this)) - - @is_mouse_started = false - @mouse_delay = 0 - @_mouse_delay_timer = null - @_is_mouse_delay_met = true - @mouse_down_info = null - - _deinit: -> - @$el.unbind('mousedown.mousewidget') - @$el.unbind('touchstart.mousewidget') - - $document = $(document) - $document.unbind('mousemove.mousewidget') - $document.unbind('mouseup.mousewidget') - - _mouseDown: (e) -> - # Is left mouse button? - if e.which != 1 - return - - result = @_handleMouseDown( - e, - @_getPositionInfo(e) - ) - - if result - e.preventDefault() - - return result - - _handleMouseDown: (e, position_info) -> - # Don't let more than one widget handle mouseStart - if MouseWidget.is_mouse_handled - return - - # We may have missed mouseup (out of window) - if @is_mouse_started - @_handleMouseUp(position_info) - - @mouse_down_info = position_info - - if not @_mouseCapture(position_info) - return - - @_handleStartMouse() - - @is_mouse_handled = true - return true - - _handleStartMouse: -> - $document = $(document) - $document.bind('mousemove.mousewidget', $.proxy(@_mouseMove, this)) - $document.bind('touchmove.mousewidget', $.proxy(@_touchMove, this)) - $document.bind('mouseup.mousewidget', $.proxy(@_mouseUp, this)) - $document.bind('touchend.mousewidget', $.proxy(@_touchEnd, this)) - - if @mouse_delay - @_startMouseDelayTimer() - - _startMouseDelayTimer: -> - if @_mouse_delay_timer - clearTimeout(@_mouse_delay_timer) - - @_mouse_delay_timer = setTimeout( - => - @_is_mouse_delay_met = true - , @mouse_delay - ) - - @_is_mouse_delay_met = false - - _mouseMove: (e) -> - return @_handleMouseMove( - e, - @_getPositionInfo(e) - ) - - _handleMouseMove: (e, position_info) -> - if @is_mouse_started - @_mouseDrag(position_info) - return e.preventDefault() - - if @mouse_delay and not @_is_mouse_delay_met - return true - - @is_mouse_started = @_mouseStart(@mouse_down_info) != false - - if @is_mouse_started - @_mouseDrag(position_info) - else - @_handleMouseUp(position_info) - - return not @is_mouse_started - - _getPositionInfo: (e) -> - return { - page_x: e.pageX, - page_y: e.pageY, - target: e.target, - original_event: e - } - - _mouseUp: (e) -> - return @_handleMouseUp( - @_getPositionInfo(e) - ) - - _handleMouseUp: (position_info) -> - $document = $(document) - $document.unbind('mousemove.mousewidget') - $document.unbind('touchmove.mousewidget') - $document.unbind('mouseup.mousewidget') - $document.unbind('touchend.mousewidget') - - if @is_mouse_started - @is_mouse_started = false - @_mouseStop(position_info) - - return - - _mouseCapture: (position_info) -> - return true - - _mouseStart: (position_info) -> - null - - _mouseDrag: (position_info) -> - null - - _mouseStop: (position_info) -> - null - - setMouseDelay: (mouse_delay) -> - @mouse_delay = mouse_delay - - _touchStart: (e) -> - if e.originalEvent.touches.length > 1 - return - - touch = e.originalEvent.changedTouches[0] - - return @_handleMouseDown( - e, - @_getPositionInfo(touch) - ) - - _touchMove: (e) -> - if e.originalEvent.touches.length > 1 - return - - touch = e.originalEvent.changedTouches[0] - - return @_handleMouseMove( - e, - @_getPositionInfo(touch) - ) - - _touchEnd: (e) -> - if e.originalEvent.touches.length > 1 - return - - touch = e.originalEvent.changedTouches[0] - - return @_handleMouseUp( - @_getPositionInfo(touch) - ) - -module.exports = MouseWidget diff --git a/ecomp-portal-FE/client/bower_components/jqTree/src/node.coffee b/ecomp-portal-FE/client/bower_components/jqTree/src/node.coffee deleted file mode 100644 index 5af050ac..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/src/node.coffee +++ /dev/null @@ -1,490 +0,0 @@ -$ = jQuery - - -Position = - getName: (position) -> - return Position.strings[position - 1] - - nameToIndex: (name) -> - for i in [1..Position.strings.length] - if Position.strings[i - 1] == name - return i - return 0 - -Position.BEFORE = 1 -Position.AFTER = 2 -Position.INSIDE = 3 -Position.NONE = 4 - -Position.strings = ['before', 'after', 'inside', 'none'] - -class Node - constructor: (o, is_root=false, node_class=Node) -> - @name = '' - - @setData(o) - - @children = [] - @parent = null - - if is_root - @id_mapping = {} - @tree = this - @node_class = node_class - - setData: (o) -> - ### - Set the data of this node. - - setData(string): set the name of the node - setdata(object): set attributes of the node - - Examples: - setdata('node1') - - setData({ name: 'node1', id: 1}); - - setData({ name: 'node2', id: 2, color: 'green'}); - - * This is an internal function; it is not in the docs - * Does not remove existing node values - ### - setName = (name) => - if name != null - @name = name - - if typeof o != 'object' - setName(o) - else - for key, value of o - if key == 'label' - # You can use the 'label' key instead of 'name'; this is a legacy feature - setName(value) - else if key != 'children' - # You can't update the children using this function - @[key] = value - - return null - - # Init Node from data without making it the root of the tree - initFromData: (data) -> - addNode = (node_data) => - @setData(node_data) - - if node_data.children - addChildren(node_data.children) - - addChildren = (children_data) => - for child in children_data - node = new @tree.node_class('') - node.initFromData(child) - @addChild(node) - return null - - addNode(data) - return null - - ### - Create tree from data. - - Structure of data is: - [ - { - label: 'node1', - children: [ - { label: 'child1' }, - { label: 'child2' } - ] - }, - { - label: 'node2' - } - ] - ### - loadFromData: (data) -> - @removeChildren() - - for o in data - node = new @tree.node_class(o) - @addChild(node) - - if typeof o == 'object' and o.children - node.loadFromData(o.children) - - return null - - ### - Add child. - - tree.addChild( - new Node('child1') - ); - ### - addChild: (node) -> - @children.push(node) - node._setParent(this) - - ### - Add child at position. Index starts at 0. - - tree.addChildAtPosition( - new Node('abc'), - 1 - ); - ### - addChildAtPosition: (node, index) -> - @children.splice(index, 0, node) - node._setParent(this) - - _setParent: (parent) -> - @parent = parent - @tree = parent.tree - @tree.addNodeToIndex(this) - - ### - Remove child. This also removes the children of the node. - - tree.removeChild(tree.children[0]); - ### - removeChild: (node) -> - # remove children from the index - node.removeChildren() - - @_removeChild(node) - - _removeChild: (node) -> - @children.splice( - @getChildIndex(node), - 1 - ) - @tree.removeNodeFromIndex(node) - - ### - Get child index. - - var index = getChildIndex(node); - ### - getChildIndex: (node) -> - return $.inArray(node, @children) - - ### - Does the tree have children? - - if (tree.hasChildren()) { - // - } - ### - hasChildren: -> - return @children.length != 0 - - isFolder: -> - return @hasChildren() or @load_on_demand - - ### - Iterate over all the nodes in the tree. - - Calls callback with (node, level). - - The callback must return true to continue the iteration on current node. - - tree.iterate( - function(node, level) { - console.log(node.name); - - // stop iteration after level 2 - return (level <= 2); - } - ); - - ### - iterate: (callback) -> - _iterate = (node, level) -> - if node.children - for child in node.children - result = callback(child, level) - - if result and child.hasChildren() - _iterate(child, level + 1) - return null - - _iterate(this, 0) - return null - - ### - Move node relative to another node. - - Argument position: Position.BEFORE, Position.AFTER or Position.Inside - - // move node1 after node2 - tree.moveNode(node1, node2, Position.AFTER); - ### - moveNode: (moved_node, target_node, position) -> - if moved_node.isParentOf(target_node) - # Node is parent of target node. This is an illegal move - return - - moved_node.parent._removeChild(moved_node) - if position == Position.AFTER - target_node.parent.addChildAtPosition( - moved_node, - target_node.parent.getChildIndex(target_node) + 1 - ) - else if position == Position.BEFORE - target_node.parent.addChildAtPosition( - moved_node, - target_node.parent.getChildIndex(target_node) - ) - else if position == Position.INSIDE - # move inside as first child - target_node.addChildAtPosition(moved_node, 0) - - ### - Get the tree as data. - ### - getData: (include_parent=false) -> - getDataFromNodes = (nodes) -> - data = [] - - for node in nodes - tmp_node = {} - - for k, v of node - if ( - k not in ['parent', 'children', 'element', 'tree'] and - Object.prototype.hasOwnProperty.call(node, k) - ) - tmp_node[k] = v - - if node.hasChildren() - tmp_node.children = getDataFromNodes(node.children) - - data.push(tmp_node) - - return data - - if include_parent - return getDataFromNodes([this]) - else - return getDataFromNodes(@children) - - getNodeByName: (name) -> - return @getNodeByCallback( - (node) -> (node.name == name) - ) - - getNodeByCallback: (callback) -> - result = null - - @iterate( - (node) -> - if callback(node) - result = node - return false - else - return true - ) - - return result - - - addAfter: (node_info) -> - if not @parent - return null - else - node = new @tree.node_class(node_info) - - child_index = @parent.getChildIndex(this) - @parent.addChildAtPosition(node, child_index + 1) - - if typeof node_info == 'object' and node_info.children and node_info.children.length - node.loadFromData(node_info.children) - - return node - - addBefore: (node_info) -> - if not @parent - return null - else - node = new @tree.node_class(node_info) - - child_index = @parent.getChildIndex(this) - @parent.addChildAtPosition(node, child_index) - - if typeof node_info == 'object' and node_info.children and node_info.children.length - node.loadFromData(node_info.children) - - return node - - addParent: (node_info) -> - if not @parent - return null - else - new_parent = new @tree.node_class(node_info) - new_parent._setParent(@tree) - original_parent = @parent - - for child in original_parent.children - new_parent.addChild(child) - - original_parent.children = [] - original_parent.addChild(new_parent) - return new_parent - - remove: -> - if @parent - @parent.removeChild(this) - @parent = null - - append: (node_info) -> - node = new @tree.node_class(node_info) - @addChild(node) - - if typeof node_info == 'object' and node_info.children and node_info.children.length - node.loadFromData(node_info.children) - - return node - - prepend: (node_info) -> - node = new @tree.node_class(node_info) - @addChildAtPosition(node, 0) - - if typeof node_info == 'object' and node_info.children and node_info.children.length - node.loadFromData(node_info.children) - - return node - - isParentOf: (node) -> - parent = node.parent - - while parent - if parent == this - return true - - parent = parent.parent - - return false - - getLevel: -> - level = 0 - node = this - - while node.parent - level += 1 - node = node.parent - - return level - - getNodeById: (node_id) -> - return @id_mapping[node_id] - - addNodeToIndex: (node) -> - if node.id? - @id_mapping[node.id] = node - - removeNodeFromIndex: (node) -> - if node.id? - delete @id_mapping[node.id] - - removeChildren: -> - @iterate( - (child) => - @tree.removeNodeFromIndex(child) - return true - ) - - @children = [] - - getPreviousSibling: -> - if not @parent - return null - else - previous_index = @parent.getChildIndex(this) - 1 - if previous_index >= 0 - return @parent.children[previous_index] - else - return null - - getNextSibling: -> - if not @parent - return null - else - next_index = @parent.getChildIndex(this) + 1 - if next_index < @parent.children.length - return @parent.children[next_index] - else - return null - - getNodesByProperty: (key, value) -> - return @filter( - (node) -> - return node[key] == value - ) - - filter: (f) -> - result = [] - - @iterate( - (node) -> - if f(node) - result.push(node) - - return true - ) - - return result - - getNextNode: (include_children=true) -> - if include_children and @hasChildren() and @is_open - # First child - return @children[0] - else - if not @parent - return null - else - next_sibling = @getNextSibling() - if next_sibling - # Next sibling - return next_sibling - else - # Next node of parent - return @parent.getNextNode(false) - - getPreviousNode: -> - if not @parent - return null - else - previous_sibling = @getPreviousSibling() - if previous_sibling - if not previous_sibling.hasChildren() or not previous_sibling.is_open - # Previous sibling - return previous_sibling - else - # Last child of previous sibling - return previous_sibling.getLastChild() - else - return @getParent() - - getParent: -> - # Return parent except if it is the root node - if not @parent - return null - else if not @parent.parent - # Root node -> null - return null - else - return @parent - - getLastChild: -> - if not @hasChildren() - return null - else - last_child = @children[@children.length - 1] - if not last_child.hasChildren() or not last_child.is_open - return last_child - else - return last_child.getLastChild() - - -module.exports = - Node: Node - Position: Position diff --git a/ecomp-portal-FE/client/bower_components/jqTree/src/node_element.coffee b/ecomp-portal-FE/client/bower_components/jqTree/src/node_element.coffee deleted file mode 100644 index 57c06a30..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/src/node_element.coffee +++ /dev/null @@ -1,170 +0,0 @@ -node = require './node' -Position = node.Position - - -$ = jQuery - - -class NodeElement - constructor: (node, tree_widget) -> - @init(node, tree_widget) - - init: (node, tree_widget) -> - @node = node - @tree_widget = tree_widget - - if not node.element - node.element = @tree_widget.element - - @$element = $(node.element) - - getUl: -> - return @$element.children('ul:first') - - getSpan: -> - return @$element.children('.jqtree-element').find('span.jqtree-title') - - getLi: -> - return @$element - - addDropHint: (position) -> - if position == Position.INSIDE - return new BorderDropHint(@$element) - else - return new GhostDropHint(@node, @$element, position) - - select: -> - $li = @getLi() - - $li.addClass('jqtree-selected') - $li.attr('aria-selected', 'true') - - $span = @getSpan() - $span.attr('tabindex', 0) - - deselect: -> - $li = @getLi() - - $li.removeClass('jqtree-selected') - $li.attr('aria-selected', 'false') - - $span = @getSpan() - $span.attr('tabindex', -1) - - -class FolderElement extends NodeElement - open: (on_finished, slide=true) -> - if not @node.is_open - @node.is_open = true - $button = @getButton() - $button.removeClass('jqtree-closed') - $button.html('') - $button.append(@tree_widget.renderer.opened_icon_element.cloneNode(false)) - - doOpen = => - $li = @getLi() - $li.removeClass('jqtree-closed') - - $span = @getSpan() - $span.attr('aria-expanded', 'true') - - if on_finished - on_finished(@node) - - @tree_widget._triggerEvent('tree.open', node: @node) - - if slide - @getUl().slideDown('fast', doOpen) - else - @getUl().show() - doOpen() - - close: (slide=true) -> - if @node.is_open - @node.is_open = false - $button = @getButton() - $button.addClass('jqtree-closed') - $button.html('') - $button.append(@tree_widget.renderer.closed_icon_element.cloneNode(false)) - - doClose = => - $li = @getLi() - $li.addClass('jqtree-closed') - - $span = @getSpan() - $span.attr('aria-expanded', 'false') - - @tree_widget._triggerEvent('tree.close', node: @node) - - if slide - @getUl().slideUp('fast', doClose) - else - @getUl().hide() - doClose() - - getButton: -> - return @$element.children('.jqtree-element').find('a.jqtree-toggler') - - addDropHint: (position) -> - if not @node.is_open and position == Position.INSIDE - return new BorderDropHint(@$element) - else - return new GhostDropHint(@node, @$element, position) - - -class BorderDropHint - constructor: ($element) -> - $div = $element.children('.jqtree-element') - width = $element.width() - 4 - - @$hint = $('') - $div.append(@$hint) - - @$hint.css( - width: width - height: $div.outerHeight() - 4 - ) - - remove: -> - @$hint.remove() - - -class GhostDropHint - constructor: (node, $element, position) -> - @$element = $element - - @node = node - @$ghost = $('
  • ') - - if position == Position.AFTER - @moveAfter() - else if position == Position.BEFORE - @moveBefore() - else if position == Position.INSIDE - if node.isFolder() and node.is_open - @moveInsideOpenFolder() - else - @moveInside() - - remove: -> - @$ghost.remove() - - moveAfter: -> - @$element.after(@$ghost) - - moveBefore: -> - @$element.before(@$ghost) - - moveInsideOpenFolder: -> - $(@node.children[0].element).before(@$ghost) - - moveInside: -> - @$element.after(@$ghost) - @$ghost.addClass('jqtree-inside') - - -module.exports = - BorderDropHint: BorderDropHint - FolderElement: FolderElement - GhostDropHint: GhostDropHint - NodeElement: NodeElement diff --git a/ecomp-portal-FE/client/bower_components/jqTree/src/save_state_handler.coffee b/ecomp-portal-FE/client/bower_components/jqTree/src/save_state_handler.coffee deleted file mode 100644 index 65810357..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/src/save_state_handler.coffee +++ /dev/null @@ -1,208 +0,0 @@ -util = require './util' - -indexOf = util.indexOf -isInt = util.isInt - - -$ = jQuery - - -class SaveStateHandler - constructor: (tree_widget) -> - @tree_widget = tree_widget - - saveState: -> - state = JSON.stringify(@getState()) - - if @tree_widget.options.onSetStateFromStorage - @tree_widget.options.onSetStateFromStorage(state) - else if @supportsLocalStorage() - localStorage.setItem( - @getCookieName(), - state - ) - else if $.cookie - $.cookie.raw = true - $.cookie( - @getCookieName(), - state, - {path: '/'} - ) - - getStateFromStorage: -> - json_data = @_loadFromStorage() - - if json_data - return @_parseState(json_data) - else - return null - - _parseState: (json_data) -> - state = $.parseJSON(json_data) - - # Check if selected_node is an int (instead of an array) - if state and state.selected_node and isInt(state.selected_node) - # Convert to array - state.selected_node = [state.selected_node] - - return state - - _loadFromStorage: -> - if @tree_widget.options.onGetStateFromStorage - return @tree_widget.options.onGetStateFromStorage() - else if @supportsLocalStorage() - return localStorage.getItem( - @getCookieName() - ) - else if $.cookie - $.cookie.raw = true - return $.cookie(@getCookieName()) - else - return null - - getState: -> - getOpenNodeIds = => - open_nodes = [] - - @tree_widget.tree.iterate((node) -> - if ( - node.is_open and - node.id and - node.hasChildren() - ) - open_nodes.push(node.id) - return true - ) - - return open_nodes - - getSelectedNodeIds = => - return (n.id for n in @tree_widget.getSelectedNodes()) - - return { - open_nodes: getOpenNodeIds(), - selected_node: getSelectedNodeIds() - } - - # Set initial state - # Don't handle nodes that are loaded on demand - # - # result: must load on demand - setInitialState: (state) -> - if not state - return false - else - must_load_on_demand = @_openInitialNodes(state.open_nodes) - - @_selectInitialNodes(state.selected_node) - - return must_load_on_demand - - _openInitialNodes: (node_ids) -> - must_load_on_demand = false - - for node_id in node_ids - node = @tree_widget.getNodeById(node_id) - - if node - if not node.load_on_demand - node.is_open = true - else - must_load_on_demand = true - - return must_load_on_demand - - _selectInitialNodes: (node_ids) -> - select_count = 0 - - for node_id in node_ids - node = @tree_widget.getNodeById(node_id) - - if node - select_count += 1 - - @tree_widget.select_node_handler.addToSelection(node) - - return select_count != 0 - - setInitialStateOnDemand: (state, cb_finished) -> - if state - @_setInitialStateOnDemand(state.open_nodes, state.selected_node, cb_finished) - else - cb_finished() - - _setInitialStateOnDemand: (node_ids, selected_nodes, cb_finished) -> - loading_count = 0 - - openNodes = => - new_nodes_ids = [] - - for node_id in node_ids - node = @tree_widget.getNodeById(node_id) - - if not node - new_nodes_ids.push(node_id) - else - if not node.is_loading - if node.load_on_demand - loadAndOpenNode(node) - else - @tree_widget._openNode(node, false) - - node_ids = new_nodes_ids - - if @_selectInitialNodes(selected_nodes) - @tree_widget._refreshElements() - - if loading_count == 0 - cb_finished() - - loadAndOpenNode = (node) => - loading_count += 1 - @tree_widget._openNode( - node, - false, - -> - loading_count -= 1 - openNodes() - ) - - openNodes() - - getCookieName: -> - if typeof @tree_widget.options.saveState is 'string' - return @tree_widget.options.saveState - else - return 'tree' - - supportsLocalStorage: -> - testSupport = -> - # Is local storage supported? - if not localStorage? - return false - else - # Check if it's possible to store an item. Safari does not allow this in private browsing mode. - try - key = '_storage_test' - sessionStorage.setItem(key, true) - sessionStorage.removeItem(key) - catch error - return false - - return true - - if not @_supportsLocalStorage? - @_supportsLocalStorage = testSupport() - - return @_supportsLocalStorage - - getNodeIdToBeSelected: -> - state = @getStateFromStorage() - - if state and state.selected_node - return state.selected_node[0] - else - return null - - -module.exports = SaveStateHandler diff --git a/ecomp-portal-FE/client/bower_components/jqTree/src/scroll_handler.coffee b/ecomp-portal-FE/client/bower_components/jqTree/src/scroll_handler.coffee deleted file mode 100644 index 3456dec5..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/src/scroll_handler.coffee +++ /dev/null @@ -1,114 +0,0 @@ -$ = jQuery - - -class ScrollHandler - constructor: (tree_widget) -> - @tree_widget = tree_widget - @previous_top = -1 - @is_initialized = false - - _initScrollParent: -> - getParentWithOverflow = => - css_values = ['overflow', 'overflow-y'] - - hasOverFlow = (el) -> - for css_value in css_values - if $.css(el, css_value) in ['auto', 'scroll'] - return true - - return false - - if hasOverFlow(@tree_widget.$el[0]) - return @tree_widget.$el - - for el in @tree_widget.$el.parents() - if hasOverFlow(el) - return $(el) - - return null - - setDocumentAsScrollParent = => - @scroll_parent_top = 0 - @$scroll_parent = null - - if @tree_widget.$el.css('position') == 'fixed' - setDocumentAsScrollParent() - - $scroll_parent = getParentWithOverflow() - - if $scroll_parent and $scroll_parent.length and $scroll_parent[0].tagName != 'HTML' - @$scroll_parent = $scroll_parent - @scroll_parent_top = @$scroll_parent.offset().top - else - setDocumentAsScrollParent() - - @is_initialized = true - - _ensureInit: -> - if not @is_initialized - @_initScrollParent() - - checkScrolling: -> - @_ensureInit() - - hovered_area = @tree_widget.dnd_handler.hovered_area - - if hovered_area and hovered_area.top != @previous_top - @previous_top = hovered_area.top - - if @$scroll_parent - @_handleScrollingWithScrollParent(hovered_area) - else - @_handleScrollingWithDocument(hovered_area) - - _handleScrollingWithScrollParent: (area) -> - distance_bottom = @scroll_parent_top + @$scroll_parent[0].offsetHeight - area.bottom - - if distance_bottom < 20 - @$scroll_parent[0].scrollTop += 20 - @tree_widget.refreshHitAreas() - @previous_top = -1 - else if (area.top - @scroll_parent_top) < 20 - @$scroll_parent[0].scrollTop -= 20 - @tree_widget.refreshHitAreas() - @previous_top = -1 - - _handleScrollingWithDocument: (area) -> - distance_top = area.top - $(document).scrollTop() - - if distance_top < 20 - $(document).scrollTop($(document).scrollTop() - 20) - else if $(window).height() - (area.bottom - $(document).scrollTop()) < 20 - $(document).scrollTop($(document).scrollTop() + 20) - - scrollTo: (top) -> - @_ensureInit() - - if @$scroll_parent - @$scroll_parent[0].scrollTop = top - else - tree_top = @tree_widget.$el.offset().top - $(document).scrollTop(top + tree_top) - - isScrolledIntoView: (element) -> - @_ensureInit() - - $element = $(element) - - if @$scroll_parent - view_top = 0 - view_bottom = @$scroll_parent.height() - - element_top = $element.offset().top - @scroll_parent_top - element_bottom = element_top + $element.height() - else - view_top = $(window).scrollTop() - view_bottom = view_top + $(window).height() - - element_top = $element.offset().top - element_bottom = element_top + $element.height() - - return (element_bottom <= view_bottom) and (element_top >= view_top) - - -module.exports = ScrollHandler diff --git a/ecomp-portal-FE/client/bower_components/jqTree/src/select_node_handler.coffee b/ecomp-portal-FE/client/bower_components/jqTree/src/select_node_handler.coffee deleted file mode 100644 index 1c1fe582..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/src/select_node_handler.coffee +++ /dev/null @@ -1,84 +0,0 @@ -$ = jQuery - - -class SelectNodeHandler - constructor: (tree_widget) -> - @tree_widget = tree_widget - @clear() - - getSelectedNode: -> - selected_nodes = @getSelectedNodes() - - if selected_nodes.length - return selected_nodes[0] - else - return false - - getSelectedNodes: -> - if @selected_single_node - return [@selected_single_node] - else - selected_nodes = [] - - for id of @selected_nodes - node = @tree_widget.getNodeById(id) - if node - selected_nodes.push(node) - - return selected_nodes - - getSelectedNodesUnder: (parent) -> - if @selected_single_node - if parent.isParentOf(@selected_single_node) - return [@selected_single_node] - else - return [] - else - selected_nodes = [] - - for id of @selected_nodes - node = @tree_widget.getNodeById(id) - if node and parent.isParentOf(node) - selected_nodes.push(node) - - return selected_nodes - - isNodeSelected: (node) -> - if not node - return false - else if node.id - if @selected_nodes[node.id] - return true - else - return false - else if @selected_single_node - return @selected_single_node.element == node.element - else - return false - - clear: -> - @selected_nodes = {} - @selected_single_node = null - - removeFromSelection: (node, include_children=false) -> - if not node.id - if @selected_single_node && node.element == @selected_single_node.element - @selected_single_node = null - else - delete @selected_nodes[node.id] - - if include_children - node.iterate( - (n) => - delete @selected_nodes[node.id] - return true - ) - - addToSelection: (node) -> - if node.id - @selected_nodes[node.id] = true - else - @selected_single_node = node - - -module.exports = SelectNodeHandler diff --git a/ecomp-portal-FE/client/bower_components/jqTree/src/simple.widget.coffee b/ecomp-portal-FE/client/bower_components/jqTree/src/simple.widget.coffee deleted file mode 100644 index a3ca6e3e..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/src/simple.widget.coffee +++ /dev/null @@ -1,107 +0,0 @@ -### -Copyright 2013 Marco Braak - -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. -### - -$ = jQuery - - -class SimpleWidget - defaults: {} - - constructor: (el, options) -> - @$el = $(el) - @options = $.extend({}, @defaults, options) - - destroy: -> - @_deinit() - - _init: -> - null - - _deinit: -> - null - - @register = (widget_class, widget_name) -> - getDataKey = -> - return "simple_widget_#{widget_name}" - - getWidgetData = (el, data_key) -> - widget = $.data(el, data_key) - - if widget and (widget instanceof SimpleWidget) - return widget - else - return null - - createWidget = ($el, options) -> - data_key = getDataKey() - - for el in $el - existing_widget = getWidgetData(el, data_key) - - if not existing_widget - widget = new widget_class(el, options) - - if not $.data(el, data_key) - $.data(el, data_key, widget) - - # Call init after setting data, so we can call methods - widget._init() - - return $el - - destroyWidget = ($el) -> - data_key = getDataKey() - - for el in $el - widget = getWidgetData(el, data_key) - - if widget - widget.destroy() - - $.removeData(el, data_key) - - callFunction = ($el, function_name, args) -> - result = null - - for el in $el - widget = $.data(el, getDataKey()) - - if widget and (widget instanceof SimpleWidget) - widget_function = widget[function_name] - - if widget_function and (typeof widget_function == 'function') - result = widget_function.apply(widget, args) - - return result - - $.fn[widget_name] = (argument1, args...) -> - $el = this - - if argument1 is undefined or typeof argument1 == 'object' - options = argument1 - return createWidget($el, options) - else if typeof argument1 == 'string' and argument1[0] != '_' - function_name = argument1 - - if function_name == 'destroy' - return destroyWidget($el) - else if function_name == 'get_widget_class' - return widget_class - else - return callFunction($el, function_name, args) - - -module.exports = SimpleWidget diff --git a/ecomp-portal-FE/client/bower_components/jqTree/src/tree.jquery.coffee b/ecomp-portal-FE/client/bower_components/jqTree/src/tree.jquery.coffee deleted file mode 100644 index 15e13e1b..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/src/tree.jquery.coffee +++ /dev/null @@ -1,918 +0,0 @@ -__version__ = require './version' -drag_and_drop_handler = require './drag_and_drop_handler' -ElementsRenderer = require './elements_renderer' -KeyHandler = require './key_handler' -MouseWidget = require './mouse.widget' -SaveStateHandler = require './save_state_handler' -ScrollHandler = require './scroll_handler' -SelectNodeHandler = require './select_node_handler' -SimpleWidget = require './simple.widget' - -node_module = require './node' -Node = node_module.Node -Position = node_module.Position - -util_module = require './util' - -{isFunction} = util_module - -{BorderDropHint,FolderElement,GhostDropHint,NodeElement} = require './node_element' - -{DragAndDropHandler, DragElement, HitAreasGenerator} = drag_and_drop_handler - - -$ = jQuery - - -class JqTreeWidget extends MouseWidget - BorderDropHint: BorderDropHint - DragElement: DragElement - DragAndDropHandler: DragAndDropHandler - ElementsRenderer: ElementsRenderer - GhostDropHint: GhostDropHint - HitAreasGenerator: HitAreasGenerator - Node: Node - SaveStateHandler: SaveStateHandler - ScrollHandler: ScrollHandler - SelectNodeHandler: SelectNodeHandler - - defaults: - autoOpen: false # true / false / int (open n levels starting at 0) - saveState: false # true / false / string (cookie name) - dragAndDrop: false - selectable: true - useContextMenu: true - onCanSelectNode: null - onSetStateFromStorage: null - onGetStateFromStorage: null - onCreateLi: null - onIsMoveHandle: null - onCanMove: null # Can this node be moved? function(node) - onCanMoveTo: null # Can this node be moved to this position? function(moved_node, target_node, position) - onLoadFailed: null - autoEscape: true - dataUrl: null - closedIcon: null # The symbol to use for a closed node - ► BLACK RIGHT-POINTING POINTER http://www.fileformat.info/info/unicode/char/25ba/index.htm - openedIcon: '▼' # The symbol to use for an open node - ▼ BLACK DOWN-POINTING TRIANGLE http://www.fileformat.info/info/unicode/char/25bc/index.htm - slide: true # must display slide animation? - nodeClass: Node - dataFilter: null - keyboardSupport: true - openFolderDelay: 500 # The delay for opening a folder during drag and drop; the value is in milliseconds - rtl: null # right-to-left support; true / false (default) - onDragMove: null - onDragStop: null - buttonLeft: true - onLoading: null - - toggle: (node, slide=null) -> - if slide == null - slide = @options.slide - - if node.is_open - @closeNode(node, slide) - else - @openNode(node, slide) - - return @element - - getTree: -> - return @tree - - selectNode: (node) -> - @_selectNode(node, false) - return @element - - _selectNode: (node, must_toggle=false) -> - if not @select_node_handler - return - - canSelect = => - if @options.onCanSelectNode - return @options.selectable and @options.onCanSelectNode(node) - else - return @options.selectable - - openParents = => - parent = node.parent - - if parent and parent.parent and not parent.is_open - @openNode(parent, false) - - saveState = => - if @options.saveState - @save_state_handler.saveState() - - if not node - # Called with empty node -> deselect current node - @_deselectCurrentNode() - saveState() - return - - if not canSelect() - return - - if @select_node_handler.isNodeSelected(node) - if must_toggle - @_deselectCurrentNode() - @_triggerEvent( - 'tree.select', - node: null, - previous_node: node - ) - else - deselected_node = @getSelectedNode() - @_deselectCurrentNode() - @addToSelection(node) - @_triggerEvent('tree.select', node: node, deselected_node: deselected_node) - openParents() - - saveState() - - getSelectedNode: -> - if @select_node_handler - return @select_node_handler.getSelectedNode() - else - return null - - toJson: -> - return JSON.stringify( - @tree.getData() - ) - - loadData: (data, parent_node) -> - @_loadData(data, parent_node) - return @element - - ### - signatures: - - loadDataFromUrl(url, parent_node=null, on_finished=null) - loadDataFromUrl('/my_data'); - loadDataFromUrl('/my_data', node1); - loadDataFromUrl('/my_data', node1, function() { console.log('finished'); }); - loadDataFromUrl('/my_data', null, function() { console.log('finished'); }); - - - loadDataFromUrl(parent_node=null, on_finished=null) - loadDataFromUrl(); - loadDataFromUrl(node1); - loadDataFromUrl(null, function() { console.log('finished'); }); - loadDataFromUrl(node1, function() { console.log('finished'); }); - ### - loadDataFromUrl: (param1, param2, param3) -> - if $.type(param1) == 'string' - # first parameter is url - @_loadDataFromUrl(param1, param2, param3) - else - # first parameter is not url - @_loadDataFromUrl(null, param1, param2) - - return @element - - reload: (on_finished) -> - @_loadDataFromUrl(null, null, on_finished) - return @element - - _loadDataFromUrl: (url_info, parent_node, on_finished) -> - $el = null - - addLoadingClass = => - if parent_node - $el = $(parent_node.element) - else - $el = @element - - $el.addClass('jqtree-loading') - @_notifyLoading(true, parent_node, $el) - - removeLoadingClass = => - if $el - $el.removeClass('jqtree-loading') - - @_notifyLoading(false, parent_node, $el) - - parseUrlInfo = -> - if $.type(url_info) == 'string' - return url: url_info - - if not url_info.method - url_info.method = 'get' - - return url_info - - handeLoadData = (data) => - removeLoadingClass() - @_loadData(data, parent_node) - - if on_finished and $.isFunction(on_finished) - on_finished() - - handleSuccess = (response) => - if $.isArray(response) or typeof response == 'object' - data = response - else if data? - data = $.parseJSON(response) - else - data = [] - - if @options.dataFilter - data = @options.dataFilter(data) - - handeLoadData(data) - - handleError = (response) => - removeLoadingClass() - - if @options.onLoadFailed - @options.onLoadFailed(response) - - loadDataFromUrlInfo = -> - url_info = parseUrlInfo() - - $.ajax( - $.extend( - {}, - url_info, - { - method: if url_info.method? then url_info.method.toUpperCase() else 'GET', - cache: false, - dataType: 'json', - success: handleSuccess, - error: handleError - } - ) - ) - - if not url_info - # Generate url for node - url_info = @_getDataUrlInfo(parent_node) - - addLoadingClass() - - if not url_info - removeLoadingClass() - return - else if $.isArray(url_info) - handeLoadData(url_info) - return - else - loadDataFromUrlInfo() - return - - _loadData: (data, parent_node=null) -> - deselectNodes = => - if @select_node_handler - selected_nodes_under_parent = @select_node_handler.getSelectedNodesUnder(parent_node) - for n in selected_nodes_under_parent - @select_node_handler.removeFromSelection(n) - - return null - - loadSubtree = => - parent_node.loadFromData(data) - - parent_node.load_on_demand = false - parent_node.is_loading = false - - @_refreshElements(parent_node) - - if not data - return - - @_triggerEvent('tree.load_data', tree_data: data) - - if not parent_node - @_initTree(data) - else - deselectNodes() - loadSubtree() - - if @isDragging() - @dnd_handler.refresh() - - getNodeById: (node_id) -> - return @tree.getNodeById(node_id) - - getNodeByName: (name) -> - return @tree.getNodeByName(name) - - getNodesByProperty: (key, value) -> - return @tree.getNodesByProperty(key, value) - - getNodeByHtmlElement: (element) -> - return @_getNode($(element)) - - getNodeByCallback: (callback) -> - return @tree.getNodeByCallback(callback) - - openNode: (node, slide_param=null, on_finished_param=null) -> - parseParams = => - if isFunction(slide_param) - on_finished = slide_param - slide = null - else - slide = slide_param - on_finished = on_finished_param - - if slide == null - slide = @options.slide - - return [slide, on_finished] - - [slide, on_finished] = parseParams() - - if node - @_openNode(node, slide, on_finished) - - return @element - - _openNode: (node, slide=true, on_finished) -> - doOpenNode = (_node, _slide, _on_finished) => - folder_element = new FolderElement(_node, this) - folder_element.open(_on_finished, _slide) - - if node.isFolder() - if node.load_on_demand - @_loadFolderOnDemand(node, slide, on_finished) - else - parent = node.parent - - while parent - # nb: do not open root element - if parent.parent - doOpenNode(parent, false, null) - parent = parent.parent - - doOpenNode(node, slide, on_finished) - @_saveState() - - _loadFolderOnDemand: (node, slide=true, on_finished) -> - node.is_loading = true - - @_loadDataFromUrl( - null, - node, - => - @_openNode(node, slide, on_finished) - ) - - closeNode: (node, slide=null) -> - if slide == null - slide = @options.slide - - if node.isFolder() - new FolderElement(node, this).close(slide) - - @_saveState() - - return @element - - isDragging: -> - if @dnd_handler - return @dnd_handler.is_dragging - else - return false - - refreshHitAreas: -> - @dnd_handler.refresh() - return @element - - addNodeAfter: (new_node_info, existing_node) -> - new_node = existing_node.addAfter(new_node_info) - @_refreshElements(existing_node.parent) - return new_node - - addNodeBefore: (new_node_info, existing_node) -> - new_node = existing_node.addBefore(new_node_info) - @_refreshElements(existing_node.parent) - return new_node - - addParentNode: (new_node_info, existing_node) -> - new_node = existing_node.addParent(new_node_info) - @_refreshElements(new_node.parent) - return new_node - - removeNode: (node) -> - parent = node.parent - if parent - @select_node_handler.removeFromSelection(node, true) # including children - - node.remove() - @_refreshElements(parent) - - return @element - - appendNode: (new_node_info, parent_node) -> - parent_node = parent_node or @tree - - node = parent_node.append(new_node_info) - - @_refreshElements(parent_node) - - return node - - prependNode: (new_node_info, parent_node) -> - if not parent_node - parent_node = @tree - - node = parent_node.prepend(new_node_info) - - @_refreshElements(parent_node) - - return node - - updateNode: (node, data) -> - id_is_changed = data.id and data.id != node.id - - if id_is_changed - @tree.removeNodeFromIndex(node) - - node.setData(data) - - if id_is_changed - @tree.addNodeToIndex(node) - - if typeof data == 'object' and data.children - node.removeChildren() - - if data.children.length - node.loadFromData(data.children) - - @renderer.renderFromNode(node) - @_selectCurrentNode() - - return @element - - moveNode: (node, target_node, position) -> - position_index = Position.nameToIndex(position) - - @tree.moveNode(node, target_node, position_index) - @_refreshElements() - return @element - - getStateFromStorage: -> - return @save_state_handler.getStateFromStorage() - - addToSelection: (node) -> - if node - @select_node_handler.addToSelection(node) - - @_getNodeElementForNode(node).select() - @_saveState() - - return @element - - getSelectedNodes: -> - return @select_node_handler.getSelectedNodes() - - isNodeSelected: (node) -> - return @select_node_handler.isNodeSelected(node) - - removeFromSelection: (node) -> - @select_node_handler.removeFromSelection(node) - - @_getNodeElementForNode(node).deselect() - @_saveState() - return @element - - scrollToNode: (node) -> - $element = $(node.element) - top = $element.offset().top - @$el.offset().top - - @scroll_handler.scrollTo(top) - return @element - - getState: -> - return @save_state_handler.getState() - - setState: (state) -> - @save_state_handler.setInitialState(state) - @_refreshElements() - return @element - - setOption: (option, value) -> - @options[option] = value - return @element - - moveDown: -> - if @key_handler - @key_handler.moveDown() - - return @element - - moveUp: -> - if @key_handler - @key_handler.moveUp() - - return @element - - getVersion: -> - return __version__ - - _init: -> - super() - - @element = @$el - @mouse_delay = 300 - @is_initialized = false - - @options.rtl = @_getRtlOption() - - if !@options.closedIcon - @options.closedIcon = @_getDefaultClosedIcon() - - @renderer = new ElementsRenderer(this) - - if SaveStateHandler? - @save_state_handler = new SaveStateHandler(this) - else - @options.saveState = false - - if SelectNodeHandler? - @select_node_handler = new SelectNodeHandler(this) - - if DragAndDropHandler? - @dnd_handler = new DragAndDropHandler(this) - else - @options.dragAndDrop = false - - if ScrollHandler? - @scroll_handler = new ScrollHandler(this) - - if KeyHandler? and SelectNodeHandler? - @key_handler = new KeyHandler(this) - - @_initData() - - @element.click($.proxy(@_click, this)) - @element.dblclick($.proxy(@_dblclick, this)) - - if @options.useContextMenu - @element.bind('contextmenu', $.proxy(@_contextmenu, this)) - - _deinit: -> - @element.empty() - @element.unbind() - - if @key_handler - @key_handler.deinit() - - @tree = null - - super() - - _initData: -> - if @options.data - @_loadData(@options.data) - else - data_url = @_getDataUrlInfo() - - if data_url - @_loadDataFromUrl() - else - @_loadData([]) - - _getDataUrlInfo: (node) -> - data_url = @options.dataUrl or @element.data('url') - - getUrlFromString = => - url_info = url: data_url - - if node and node.id - # Load on demand of a subtree; add node parameter - data = node: node.id - url_info['data'] = data - else - # Add selected_node parameter - selected_node_id = @_getNodeIdToBeSelected() - if selected_node_id - data = selected_node: selected_node_id - url_info['data'] = data - - return url_info - - if $.isFunction(data_url) - return data_url(node) - else if $.type(data_url) == 'string' - return getUrlFromString() - else - return data_url - - _getNodeIdToBeSelected: -> - if @options.saveState - return @save_state_handler.getNodeIdToBeSelected() - else - return null - - _initTree: (data) -> - doInit = => - if not @is_initialized - @is_initialized = true - @_triggerEvent('tree.init') - - @tree = new @options.nodeClass(null, true, @options.nodeClass) - - if @select_node_handler - @select_node_handler.clear() - - @tree.loadFromData(data) - - must_load_on_demand = @_setInitialState() - - @_refreshElements() - - if not must_load_on_demand - doInit() - else - # Load data on demand and then init the tree - @_setInitialStateOnDemand(doInit) - - # Set initial state, either by restoring the state or auto-opening nodes - # result: must load nodes on demand? - _setInitialState: -> - restoreState = => - # result: is state restored, must load on demand? - if not (@options.saveState and @save_state_handler) - return [false, false] - else - state = @save_state_handler.getStateFromStorage() - - if not state - return [false, false] - else - must_load_on_demand = @save_state_handler.setInitialState(state) - - # return true: the state is restored - return [true, must_load_on_demand] - - autoOpenNodes = => - # result: must load on demand? - if @options.autoOpen is false - return false - - max_level = @_getAutoOpenMaxLevel() - must_load_on_demand = false - - @tree.iterate (node, level) -> - if node.load_on_demand - must_load_on_demand = true - return false - else if not node.hasChildren() - return false - else - node.is_open = true - return (level != max_level) - - return must_load_on_demand - - [is_restored, must_load_on_demand] = restoreState() - - if not is_restored - must_load_on_demand = autoOpenNodes() - - return must_load_on_demand - - # Set the initial state for nodes that are loaded on demand - # Call cb_finished when done - _setInitialStateOnDemand: (cb_finished) -> - restoreState = => - if not (@options.saveState and @save_state_handler) - return false - else - state = @save_state_handler.getStateFromStorage() - - if not state - return false - else - @save_state_handler.setInitialStateOnDemand(state, cb_finished) - - return true - - autoOpenNodes = => - max_level = @_getAutoOpenMaxLevel() - loading_count = 0 - - loadAndOpenNode = (node) => - loading_count += 1 - @_openNode( - node, - false, - -> - loading_count -= 1 - openNodes() - ) - - openNodes = => - @tree.iterate (node, level) => - if node.load_on_demand - if not node.is_loading - loadAndOpenNode(node) - - return false - else - @_openNode(node, false) - - return (level != max_level) - - if loading_count == 0 - cb_finished() - - openNodes() - - if not restoreState() - autoOpenNodes() - - _getAutoOpenMaxLevel: -> - if @options.autoOpen is true - return -1 - else - return parseInt(@options.autoOpen) - - ### - Redraw the tree or part of the tree. - # from_node: redraw this subtree - ### - _refreshElements: (from_node=null) -> - @renderer.render(from_node) - - @_triggerEvent('tree.refresh') - - _click: (e) -> - click_target = @_getClickTarget(e.target) - - if click_target - if click_target.type == 'button' - @toggle(click_target.node, @options.slide) - - e.preventDefault() - e.stopPropagation() - else if click_target.type == 'label' - node = click_target.node - event = @_triggerEvent( - 'tree.click', - node: node - click_event: e - ) - - if not event.isDefaultPrevented() - @_selectNode(node, true) - - _dblclick: (e) -> - click_target = @_getClickTarget(e.target) - - if click_target and click_target.type == 'label' - @_triggerEvent( - 'tree.dblclick', - node: click_target.node - click_event: e - ) - - _getClickTarget: (element) -> - $target = $(element) - - $button = $target.closest('.jqtree-toggler') - - if $button.length - node = @_getNode($button) - - if node - return { - type: 'button', - node: node - } - else - $el = $target.closest('.jqtree-element') - if $el.length - node = @_getNode($el) - if node - return { - type: 'label', - node: node - } - - return null - - _getNode: ($element) -> - $li = $element.closest('li.jqtree_common') - if $li.length == 0 - return null - else - return $li.data('node') - - _getNodeElementForNode: (node) -> - if node.isFolder() - return new FolderElement(node, this) - else - return new NodeElement(node, this) - - _getNodeElement: ($element) -> - node = @_getNode($element) - if node - return @_getNodeElementForNode(node) - else - return null - - _contextmenu: (e) -> - $div = $(e.target).closest('ul.jqtree-tree .jqtree-element') - if $div.length - node = @_getNode($div) - if node - e.preventDefault() - e.stopPropagation() - - @_triggerEvent( - 'tree.contextmenu', - node: node - click_event: e - ) - return false - - _saveState: -> - if @options.saveState - @save_state_handler.saveState() - - _mouseCapture: (position_info) -> - if @options.dragAndDrop - return @dnd_handler.mouseCapture(position_info) - else - return false - - _mouseStart: (position_info) -> - if @options.dragAndDrop - return @dnd_handler.mouseStart(position_info) - else - return false - - _mouseDrag: (position_info) -> - if @options.dragAndDrop - result = @dnd_handler.mouseDrag(position_info) - - if @scroll_handler - @scroll_handler.checkScrolling() - return result - else - return false - - _mouseStop: (position_info) -> - if @options.dragAndDrop - return @dnd_handler.mouseStop(position_info) - else - return false - - _triggerEvent: (event_name, values) -> - event = $.Event(event_name) - $.extend(event, values) - - @element.trigger(event) - return event - - testGenerateHitAreas: (moving_node) -> - @dnd_handler.current_item = @_getNodeElementForNode(moving_node) - @dnd_handler.generateHitAreas() - return @dnd_handler.hit_areas - - _selectCurrentNode: -> - node = @getSelectedNode() - if node - node_element = @_getNodeElementForNode(node) - if node_element - node_element.select() - - _deselectCurrentNode: -> - node = @getSelectedNode() - if node - @removeFromSelection(node) - - _getDefaultClosedIcon: -> - if @options.rtl - # triangle to the left - return '◀' - else - # triangle to the right - return '►' - - _getRtlOption: -> - if @options.rtl != null - return @options.rtl - else - data_rtl = @element.data('rtl') - - if data_rtl? and data_rtl != false - return true - else - return false - - _notifyLoading: (is_loading, node, $el) -> - if @options.onLoading - @options.onLoading(is_loading, node, $el) - - -JqTreeWidget.getModule = (name) -> - modules = - 'node': node_module - 'util': util_module - 'drag_and_drop_handler': drag_and_drop_handler - - return modules[name] - - -SimpleWidget.register(JqTreeWidget, 'tree') diff --git a/ecomp-portal-FE/client/bower_components/jqTree/src/util.coffee b/ecomp-portal-FE/client/bower_components/jqTree/src/util.coffee deleted file mode 100644 index 2375b14e..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/src/util.coffee +++ /dev/null @@ -1,48 +0,0 @@ -# Standard javascript indexOf. Implemented here because not all browsers support it. -_indexOf = (array, item) -> - for value, i in array - if value == item - return i - return -1 - -indexOf = (array, item) -> - if array.indexOf - # The browser supports indexOf - return array.indexOf(item) - else - # Do our own indexOf - return _indexOf(array, item) - -isInt = (n) -> - return typeof n is 'number' and n % 1 == 0 - - -isFunction = (v) -> - return typeof v == 'function' - - -# Escape a string for HTML interpolation; copied from underscore js -html_escape = (string) -> - return (''+string) - .replace(/&/g, '&') - .replace(//g, '>') - .replace(/"/g, '"') - .replace(/'/g, ''') - .replace(/\//g,'/') - - -getBoolString = (value) -> - if value - return 'true' - else - return 'false' - - -module.exports = - _indexOf: _indexOf - getBoolString: getBoolString - html_escape: html_escape - indexOf: indexOf - isInt: isInt - isFunction: isFunction diff --git a/ecomp-portal-FE/client/bower_components/jqTree/src/version.coffee b/ecomp-portal-FE/client/bower_components/jqTree/src/version.coffee deleted file mode 100644 index ccaef948..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/src/version.coffee +++ /dev/null @@ -1 +0,0 @@ -module.exports = '1.3.7' diff --git a/ecomp-portal-FE/client/bower_components/jqTree/src_test/karma-test.js b/ecomp-portal-FE/client/bower_components/jqTree/src_test/karma-test.js deleted file mode 100644 index f6fcb89b..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/src_test/karma-test.js +++ /dev/null @@ -1,17 +0,0 @@ -// Load jquery 1.x for ie <= 8 and jquery 3.x for other browsers -var ie_version = require('ie-version'); - -var $; - -if (ie_version.version && ie_version.version <= 8) { - $ = require('../static/bower_components/jquery-1/dist/jquery.js'); -} -else { - $ = require('../static/bower_components/jquery/dist/jquery.js'); -} - -window.$ = $; -window.jQuery = $; - -require('../src/tree.jquery'); -require('./test'); diff --git a/ecomp-portal-FE/client/bower_components/jqTree/src_test/test.js b/ecomp-portal-FE/client/bower_components/jqTree/src_test/test.js deleted file mode 100644 index f0f7ffcf..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/src_test/test.js +++ /dev/null @@ -1,5 +0,0 @@ -require('./test_util'); -require('./test_tree'); -require('./test_jqtree'); - -QUnit.config.testTimeout = 5000; diff --git a/ecomp-portal-FE/client/bower_components/jqTree/src_test/test_jqtree.js b/ecomp-portal-FE/client/bower_components/jqTree/src_test/test_jqtree.js deleted file mode 100644 index b571ad13..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/src_test/test_jqtree.js +++ /dev/null @@ -1,1390 +0,0 @@ -var mockjax = require('jquery-mockjax')(jQuery, window); - -var utils_for_test = require('./utils_for_test'); - -var example_data = utils_for_test.example_data; -var example_data2 = utils_for_test.example_data2; -var formatNodes = utils_for_test.formatNodes; -var formatTitles = utils_for_test.formatTitles; -var isNodeOpen = utils_for_test.isNodeOpen; -var isNodeClosed = utils_for_test.isNodeClosed; - -var tree_vars = utils_for_test.getTreeVariables(); - -var Position = tree_vars.Position; - -var test = QUnit.test; - - -QUnit.module("jqtree", { - beforeEach: function() { - $('body').append('
    '); - }, - - afterEach: function() { - var $tree = $('#tree1'); - $tree.tree('destroy'); - $tree.remove(); - - $.mockjax.clear(); - } -}); - -test("create jqtree from data", function(assert) { - $('#tree1').tree({ - data: example_data - }); - - assert.equal( - $('#tree1').children().length, 1, - 'number of children on level 0' - ); - assert.ok( - $('#tree1').children().is('ul.jqtree-tree'), - 'first element is ul.jqtree-tree' - ); - assert.equal( - $('#tree1 ul.jqtree-tree > li').length, 2, - 'number of children on level 1' - ); - assert.ok( - $('#tree1 ul.jqtree-tree li:eq(0)').is('li.jqtree-folder.jqtree-closed'), - 'first child is li.jqtree-folder.jqtree-closed' - ); - assert.ok( - $('#tree1 ul.jqtree-tree li:eq(0) > .jqtree-element > a.jqtree-toggler').is('a.jqtree-toggler.jqtree-closed'), - 'button in first folder' - ); - assert.equal( - $('#tree1 ul.jqtree-tree li:eq(0) > .jqtree-element span.jqtree-title').text(), - 'node1' - ); -}); - -test('toggle', function(assert) { - // setup - var done = assert.async(); - - // create tree - var $tree = $('#tree1'); - var $node1; - var node1; - - $tree.tree({ - data: example_data - }); - - $tree.bind( - 'tree.open', - function(e) { - assert.ok(! isNodeClosed($node1), 'node1 is open'); - - // 2. close node1 - $tree.tree('toggle', node1); - } - ); - - $tree.bind( - 'tree.close', - function(e) { - assert.ok(isNodeClosed($node1), 'node1 is closed'); - - done(); - } - ); - - var tree = $tree.tree('getTree'); - node1 = tree.children[0]; - $node1 = $tree.find('ul.jqtree-tree li:eq(0)'); - - // node1 is initially closed - assert.ok(isNodeClosed($node1), 'node1 is closed'); - - // 1. open node1 - $tree.tree('toggle', node1); -}); - -test("click event", function(assert) { - var select_count = 0; - - // create tree - var $tree = $('#tree1'); - - $tree.tree({ - data: example_data, - selectable: true - }); - - var $node1 = $tree.find('ul.jqtree-tree li:first'); - var $text_span = $node1.find('span:first'); - - $tree.bind('tree.click', function(e) { - assert.equal(e.node.name, 'node1'); - }); - - var done = assert.async(); - - $tree.bind('tree.select', function(e) { - select_count += 1; - - if (select_count == 1) { - assert.equal(e.node.name, 'node1'); - - assert.equal($tree.tree('getSelectedNode').name, 'node1'); - - // deselect - $text_span.click(); - } - else { - assert.equal(e.node, null); - assert.equal(e.previous_node.name, 'node1'); - assert.equal($tree.tree('getSelectedNode'), false); - - done(); - } - }); - - // click on node1 - $text_span.click(); -}); - -test('saveState', function(assert) { - var $tree = $('#tree1'); - - var saved_state; - - function setState(state) { - saved_state = state; - } - - function getState() { - return saved_state; - } - - function createTree() { - $tree.tree({ - data: example_data, - saveState: true, - onSetStateFromStorage: setState, - onGetStateFromStorage: getState, - selectable: true - }); - } - - // create tree - createTree(); - - // nodes are initially closed - var tree = $tree.tree('getTree'); - tree.iterate(function(node) { - assert.ok(! node.is_open, 'jqtree-closed'); - return true; - }); - - // open node1 - $tree.tree('toggle', tree.children[0]); - - // node1 is open - assert.ok(tree.children[0].is_open, 'node1 is_open'); - - // select node2 - $tree.tree('selectNode', tree.children[1]); - - // node2 is selected - assert.equal( - $tree.tree('getSelectedNode').name, - 'node2', - 'getSelectedNode (1)' - ); - - // create tree again - $tree.tree('destroy'); - createTree(); - - tree = $tree.tree('getTree'); - assert.ok(tree.children[0].is_open, 'node1 is_open'); - assert.ok(! tree.children[1].is_open, 'node2 is closed'); - - // node2 is selected - assert.equal( - $tree.tree('getSelectedNode').name, - 'node2', - 'getSelectedNode (2)' - ); -}); - -test('getSelectedNode', function(assert) { - var $tree = $('#tree1'); - - // create tree - $tree.tree({ - data: example_data, - selectable: true - }); - - // there is no node selected - assert.equal( - $tree.tree('getSelectedNode'), - false, - 'getSelectedNode' - ); - - // select node1 - var tree = $tree.tree('getTree'); - var node1 = tree.children[0]; - $tree.tree('selectNode', node1); - - // node1 is selected - assert.equal( - $tree.tree('getSelectedNode').name, - 'node1', - 'getSelectedNode' - ); -}); - -test("toJson", function(assert) { - // setup - var $tree = $('#tree1'); - $tree.tree({ - data: example_data - }); - - // 1. call toJson - assert.equal( - $tree.tree('toJson'), - '[{"name":"node1","id":123,"int_property":1,"str_property":"1",'+ - '"children":[{"name":"child1","id":125,"int_property":2},{"name":'+ - '"child2","id":126}]},{"name":"node2","id":124,"int_property":3,'+ - '"str_property":"3","children":[{"name":"child3","id":127}]}]' - ); - - // Check that properties 'children', 'parent' and 'element' still exist. - var tree = $tree.tree('getTree'); - assert.equal(tree.children.length, 2); - assert.ok(tree.children[0].parent != undefined, 'parent'); - assert.ok($(tree.children[0].element).is('li'), 'element'); -}); - -test('loadData', function(assert) { - // setup - var $tree = $('#tree1'); - $tree.tree({ - data: example_data, - autoOpen: true - }); - - // first node is 'node1' - assert.equal( - $tree.find('> ul > li:first .jqtree-element:first > span').text(), - 'node1' - ); - - // - load new data - $tree.tree('loadData', example_data2); - - // first node is 'main' - assert.equal( - $tree.find('> ul > li:first .jqtree-element:first > span').text(), - 'main' - ); - - // - load new data under node 'child3' - $tree.tree('loadData', example_data); - - var child3 = $tree.tree('getNodeByName', 'child3'); - - var data = [ - { label: 'c4', id: 200 }, - { - label: 'c5', id: 201, - children: [ - { label: 'c6', id: 202 } - ] - } - ]; - $tree.tree('loadData', data, child3); - - // first node in html is still 'node1' - assert.equal( - $tree.find('li:eq(0)').find('.jqtree-element:eq(0) span.jqtree-title').text(), - 'node1' - ); - - // Node 'child3' now has a children 'c4' and 'c5' - var $child3 = $tree.find('span:contains(child3)'); - var $li = $child3.closest('li'); - assert.equal( - $li.children('ul').children('li:eq(0)').find('.jqtree-element span.jqtree-title').text(), - 'c4' - ); - - // Node 'child3' must have toggler button - assert.ok( - $child3.prev().is('a.jqtree-toggler'), - "node 'child3' must have toggler button" - ); - - // - select node 'c5' and load new data under 'child3' - var c5 = $tree.tree('getNodeByName', 'c5'); - $tree.tree('selectNode', c5); - - assert.equal($tree.tree('getSelectedNode').name, 'c5'); - - var data2 = [ - { label: 'c7' }, - { label: 'c8' } - ]; - $tree.tree('loadData', data2, child3); - - // c5 must be deselected - assert.equal($tree.tree('getSelectedNode'), false); - - // - select c7; load new data under child3; note that c7 has no id - $tree.tree('selectNode', $tree.tree('getNodeByName', 'c7')); - - assert.equal($tree.tree('getSelectedNode').name, 'c7'); - - $tree.tree('loadData', [ 'c9' ], child3); - - assert.equal($tree.tree('getSelectedNode'), false); - - // - select c9 (which has no id); load new nodes under child2 - $tree.tree('selectNode', $tree.tree('getNodeByName', 'c9')); - - var child2 = $tree.tree('getNodeByName', 'child2'); - $tree.tree('loadData', [ 'c10' ], child2); - - assert.equal($tree.tree('getSelectedNode').name, 'c9'); -}); - -test('openNode and closeNode', function(assert) { - // setup - var $tree = $('#tree1'); - $tree.tree({ - data: example_data - }); - - var node2 = $tree.tree('getNodeByName', 'node2'); - assert.equal(node2.name, 'node2'); - assert.equal(node2.is_open, undefined); - - // 1. open node2 - $tree.tree('openNode', node2, false); - assert.equal(node2.is_open, true); - assert.equal(isNodeOpen($(node2.element)), true); - - // 2. close node2 - $tree.tree('closeNode', node2, false); - assert.equal(node2.is_open, false); - assert.equal(isNodeClosed($(node2.element)), true); - - // 3. open child1 - var node1 = $tree.tree('getNodeByName', 'node1'); - var child1 = $tree.tree('getNodeByName', 'child1'); - - // add a child to child1 so it is a folder - $tree.tree('appendNode', 'child1a', child1); - - // node1 is initialy closed - assert.equal(node1.is_open, undefined); - - // open child1 - $tree.tree('openNode', child1, false); - - // node1 and child1 are now open1 - assert.equal(node1.is_open, true); - assert.equal(child1.is_open, true); -}); - -function test_open_node_with_callback(slide, include_slide_param, assert) { - // setup - var $tree = $('#tree1'); - $tree.tree({ - data: example_data - }); - - var node2 = $tree.tree('getNodeByName', 'node2'); - - // open node2 - var done = assert.async(); - - function handleOpenNode(node) { - assert.equal(node.name, 'node2'); - assert.ok(node.is_open); - - done(); - } - - if (include_slide_param) { - $tree.tree('openNode', node2, slide, handleOpenNode); - } - else { - $tree.tree('openNode', node2, handleOpenNode); - } -} - -test('openNode with callback with slide true', function(assert) { - test_open_node_with_callback(true, true, assert); -}); - -test('openNode with callback with slide false', function(assert) { - test_open_node_with_callback(false, true, assert); -}); - -test('openNode with callback with slide null', function(assert) { - test_open_node_with_callback(null, true, assert); -}); - -test('openNode with callback without slide param', function(assert) { - test_open_node_with_callback(null, false, assert); -}); - -test('selectNode', function(assert) { - // setup - var $tree = $('#tree1'); - $tree.tree({ - data: example_data, - selectable: true - }); - - var node1 = $tree.tree('getTree').children[0]; - var node2 = $tree.tree('getTree').children[1]; - var child3 = node2.children[0]; - - assert.equal(child3.name, 'child3'); - assert.equal(node1.is_open, undefined); - assert.equal(node2.is_open, undefined); - assert.equal(child3.is_open, undefined); - - // -- select node 'child3', which is a child of 'node2'; must_open_parents = true - $tree.tree('selectNode', child3, true); - assert.equal($tree.tree('getSelectedNode').name, 'child3'); - - assert.equal(node1.is_open, undefined); - assert.equal(node2.is_open, true); - assert.equal(child3.is_open, undefined); - - // -- select node 'node1' - $tree.tree('selectNode', node1); - assert.equal($tree.tree('getSelectedNode').name, 'node1'); - - // -- is 'node1' selected? - assert.equal($tree.tree('isNodeSelected', node1), true); - - // -- deselect - $tree.tree('selectNode', null); - assert.equal($tree.tree('getSelectedNode'), false); - - // -- is 'node1' selected? - assert.equal($tree.tree('isNodeSelected', node1), false); -}); - -test('selectNode when another node is selected', function(assert) { - // setup - var $tree = $('#tree1'); - $tree.tree({ - data: example_data, - selectable: true - }); - - var node1 = $tree.tree('getTree').children[0]; - var node2 = $tree.tree('getTree').children[1]; - - // -- select node 'node2' - $tree.tree('selectNode', node2); - assert.equal($tree.tree('getSelectedNode').name, 'node2'); - - // -- setting event - // -- is node 'node2' named 'deselected_node' in object's attributes? - var is_select_event_fired = false; - - $tree.bind('tree.select', function(e) { - assert.equal(e.deselected_node, node2); - is_select_event_fired = true; - }); - - // -- select node 'node1'; node 'node2' is selected before it - $tree.tree('selectNode', node1); - assert.equal($tree.tree('getSelectedNode').name, 'node1'); - - assert.equal($tree.tree('isNodeSelected', node1), true); - - // event was fired - assert.ok(is_select_event_fired); -}); - -test('click toggler', function(assert) { - // setup - var done = assert.async(); - - var $tree = $('#tree1'); - $tree.tree({ - data: example_data, - selectable: true - }); - - var $title = $tree.find('li:eq(0)').find('> .jqtree-element > span.jqtree-title'); - assert.equal($title.text(), 'node1'); - var $toggler = $title.prev(); - assert.ok($toggler.is('a.jqtree-toggler.jqtree-closed')); - - $tree.bind('tree.open', function(e) { - // 2. handle 'open' event - assert.equal(e.node.name, 'node1'); - - // 3. click toggler again - $toggler.click(); - }); - - $tree.bind('tree.close', function(e) { - assert.equal(e.node.name, 'node1'); - done(); - }); - - // 1. click toggler of 'node1' - $toggler.click(); -}); - -test('getNodeById', function(assert) { - // setup - var $tree = $('#tree1'); - $tree.tree({ - data: example_data - }); - var node2 = $tree.tree('getNodeByName', 'node2'); - - // 1. get 'node2' by id - assert.equal( - $tree.tree('getNodeById', 124).name, - 'node2' - ); - - // 2. get id that does not exist - assert.equal($tree.tree('getNodeById', 333), null); - - // 3. get id by string - assert.equal( - $tree.tree('getNodeById', '124').name, - 'node2' - ); - - // 4. add node with string id; search by int - $tree.tree( - 'appendNode', - { - label: 'abc', - id: '234' - } - ); - - assert.equal( - $tree.tree('getNodeById', 234).name, - 'abc' - ); - assert.equal( - $tree.tree('getNodeById', '234').name, - 'abc' - ); - - // 5. load subtree in node2 - var subtree_data = [ - { - label: 'sub1', - id: 200, - children: [ - {label: 'sub2', id: 201} - ] - } - ]; - $tree.tree('loadData', subtree_data, node2); - var t = $tree.tree('getTree'); - - assert.equal( - $tree.tree('getNodeById', 200).name, - 'sub1' - ); - assert.equal( - $tree.tree('getNodeById', 201).name, - 'sub2' - ); -}); - -test('autoOpen', function(assert) { - var $tree = $('#tree1'); - - function formatOpenFolders() { - var open_nodes = []; - $tree.find('li').each(function() { - var $li = $(this); - if ($li.is('.jqtree-folder') && ! $li.is('.jqtree-closed')) { - var label = $li.children('.jqtree-element').find('span').text(); - open_nodes.push(label); - }; - }); - - return open_nodes.join(';'); - } - - /* - -l1n1 (level 0) - ----l2n1 (1) - ----l2n2 (1) - -------l3n1 (2) - ----------l4n1 (3) - -l1n2 - */ - var data = [ - { - label: 'l1n1', - children: [ - 'l2n1', - { - label: 'l2n2', - children: [ - { - label: 'l3n1', - children: [ - 'l4n1' - ] - } - ] - } - ] - }, - 'l1n2' - ]; - - // 1. autoOpen is false - $tree.tree({ - data: data, - autoOpen: false - }); - assert.equal(formatOpenFolders(), ''); - - $tree.tree('destroy'); - - // 2. autoOpen is true - $tree.tree({ - data: data, - autoOpen: true - }); - assert.equal(formatOpenFolders(), 'l1n1;l2n2;l3n1'); - - $tree.tree('destroy'); - - // 3. autoOpen level 1 - $tree.tree({ - data: data, - autoOpen: 1 - }); - assert.equal(formatOpenFolders(), 'l1n1;l2n2'); -}); - -test('onCreateLi', function(assert) { - // 1. init tree with onCreateLi - var $tree = $('#tree1'); - $tree.tree({ - data: example_data, - onCreateLi: function(node, $li) { - var $span = $li.children('.jqtree-element').find('span'); - $span.html('_' + node.name + '_'); - } - }); - - assert.equal( - $tree.find('span:eq(0)').text(), - '_node1_' - ); -}); - -test('save state', function(assert) { - // setup - var state = null; - - // Fake $.cookie plugin for browsers that do not support localstorage - $.cookie = function(key, param2, param3) { - if (typeof param3 == 'object') { - // set - state = param2; - } - else { - // get - return state; - } - } - - // Remove state from localstorage - if (typeof localStorage != 'undefined') { - localStorage.setItem('my_tree', null); - } - - // 1. init tree - var $tree = $('#tree1'); - $tree.tree({ - data: example_data, - selectable: true, - saveState: 'my_tree' - }); - - var tree = $tree.tree('getTree'); - assert.equal($tree.tree('getSelectedNode'), false); - - // 2. select node -> state is saved - $tree.tree('selectNode', tree.children[0]); - assert.equal($tree.tree('getSelectedNode').name, 'node1'); - - // 3. init tree again - $tree.tree('destroy'); - - $tree.tree({ - data: example_data, - selectable: true, - saveState: 'my_tree' - }); - - assert.equal($tree.tree('getSelectedNode').name, 'node1'); - - $.cookie = null; -}); - -test('generate hit areas', function(assert) { - // setup - var $tree = $('#tree1'); - $tree.tree({ - data: example_data - }); - - // 1. get hit areas - var node = $tree.tree('getNodeById', 123); - var hit_areas = $tree.tree('testGenerateHitAreas', node); - - var strings = $.map(hit_areas, function(hit_area) { - return hit_area.node.name + ' ' + Position.getName(hit_area.position); - }); - assert.equal(strings.join(';'), 'node1 none;node2 inside;node2 after'); -}); - -test('removeNode', function(assert) { - // setup - var $tree = $('#tree1'); - $tree.tree({ - data: example_data, - selectable: true - }); - - // 1. Remove selected node; node is 'child1' - var child1 = $tree.tree('getNodeByName', 'child1'); - $tree.tree('selectNode', child1); - - assert.equal($tree.tree('getSelectedNode').name, 'child1'); - - $tree.tree('removeNode', child1); - - assert.equal( - formatTitles($tree), - 'node1 child2 node2 child3' - ); - - // getSelectedNode must now return false - assert.equal($tree.tree('getSelectedNode'), false); - - // 2. No node is selected; remove child3 - $tree.tree('loadData', example_data); - - var child3 = $tree.tree('getNodeByName', 'child3'); - $tree.tree('removeNode', child3); - - assert.equal( - formatTitles($tree), - 'node1 child1 child2 node2' - ); - - assert.equal($tree.tree('getSelectedNode'), false); - - // 3. Remove parent of selected node - $tree.tree('loadData', example_data); - - child1 = $tree.tree('getNodeByName', 'child1'); - var node1 = $tree.tree('getNodeByName', 'node1'); - - $tree.tree('selectNode', child1); - - $tree.tree('removeNode', node1); - - // node is unselected - assert.equal($tree.tree('getSelectedNode'), false); - - // 4. Remove unselected node without an id - $tree.tree('loadData', example_data2); - - var c1 = $tree.tree('getNodeByName', 'c1'); - - $tree.tree('removeNode', c1); - - assert.equal( - formatTitles($tree), - 'main c2' - ); -}); - -test('appendNode', function(assert) { - // setup - var $tree = $('#tree1'); - $tree.tree({ - data: example_data - }); - - var node1 = $tree.tree('getNodeByName', 'node1'); - - // 1. Add child3 to node1 - $tree.tree('appendNode', 'child3', node1); - - assert.equal( - formatTitles($(node1.element)), - 'node1 child1 child2 child3' - ); - - // 2. Add child4 to child1 - var child1 = $tree.tree('getNodeByName', 'child1'); - - // Node 'child1' does not have a toggler button - assert.equal( - $(child1.element).find('> .jqtree-element > .jqtree-toggler').length, - 0 - ); - - $tree.tree('appendNode', 'child4', child1); - - assert.equal(formatTitles($(child1.element)), 'child1 child4'); - - // Node 'child1' must get a toggler button - assert.equal( - $(child1.element).find('> .jqtree-element > .jqtree-toggler').length, - 1 - ); -}); - -test('prependNode', function(assert) { - // setup - var $tree = $('#tree1'); - $tree.tree({ - data: example_data - }); - - var node1 = $tree.tree('getNodeByName', 'node1'); - - // 1. Prepend child0 to node1 - $tree.tree('prependNode', 'child0', node1); - - assert.equal( - formatTitles($(node1.element)), - 'node1 child0 child1 child2' - ); -}); - -test('init event for local data', function(assert) { - // setup - var done = assert.async(); - - var $tree = $('#tree1'); - - $tree.bind('tree.init', function() { - // Check that we can call functions in 'tree.init' event - assert.equal($tree.tree('getNodeByName', 'node2').name, 'node2'); - - done(); - }); - - // init tree - $tree.tree({ - data: example_data - }); -}); - -test('init event for ajax', function(assert) { - // setup - var done = assert.async(); - - var $tree = $('#tree1'); - - mockjax({ - url: '/tree/', - responseText: example_data, - logging: false - }); - - $tree.bind('tree.init', function() { - assert.equal($tree.tree('getNodeByName', 'node2').name, 'node2'); - - done(); - }); - - // init tree - $tree.tree({ - dataUrl: '/tree/' - }); -}); - -test('updateNode', function(assert) { - // setup - var $tree = $('#tree1'); - - $tree.tree({ data: example_data }); - - assert.equal(formatTitles($tree), 'node1 child1 child2 node2 child3'); - - // -- update label - var node2 = $tree.tree('getNodeByName', 'node2'); - $tree.tree('updateNode', node2, 'CHANGED'); - - assert.equal(formatTitles($tree), 'node1 child1 child2 CHANGED child3'); - assert.equal(node2.name, 'CHANGED'); - - // -- update data - $tree.tree( - 'updateNode', - node2, - { - name: 'xyz', - tag1: 'abc' - } - ); - - assert.equal(formatTitles($tree), 'node1 child1 child2 xyz child3'); - assert.equal(node2.name, 'xyz'); - assert.equal(node2.tag1, 'abc'); - - // - update id - assert.equal(node2.id, 124); - - $tree.tree('updateNode', node2, {id: 555}); - - assert.equal(node2.id, 555); - assert.equal(node2.name, 'xyz'); - - // get node by id - var node_555 = $tree.tree('getNodeById', 555); - assert.equal(node_555.name, 'xyz'); - - var node_124 = $tree.tree('getNodeById', 124); - assert.equal(node_124, undefined); - - // update child1 - var child1 = $tree.tree('getNodeByName', 'child1'); - - $tree.tree('updateNode', child1, 'child1a'); - - assert.equal(formatTitles($tree), 'node1 child1a child2 xyz child3'); - - // select child1 - $tree.tree('selectNode', child1); - $tree.tree('updateNode', child1, 'child1b'); - - assert.ok($(child1.element).hasClass('jqtree-selected')); - - // add children to child1 - $tree.tree( - 'updateNode', - child1, - { - id: child1.id, - name: 'child1', - children: [ - { id: 5, name: 'child1-1' } - ] - } - ); - - assert.equal(formatTitles($tree), 'node1 child1 child1-1 child2 xyz child3'); - - // remove children - $tree.tree( - 'updateNode', - child1, - { - id: child1.id, - name: 'child1', - children: [] - } - ); - - assert.equal(formatTitles($tree), 'node1 child1 child2 xyz child3'); -}); - -test('moveNode', function(assert) { - // setup - var $tree = $('#tree1'); - - $tree.tree({ data: example_data }); - - var child1 = $tree.tree('getNodeByName', 'child1'); - var child2 = $tree.tree('getNodeByName', 'child2'); - var node1 = $tree.tree('getNodeByName', 'node1'); - var node2 = $tree.tree('getNodeByName', 'node2'); - - // -- Move child1 after node2 - $tree.tree('moveNode', child1, node2, 'after'); - - assert.equal(formatTitles($tree), 'node1 child2 node2 child3 child1'); - - // -- Check that illegal moves are skipped - $tree.tree('moveNode', node1, child2, 'inside'); -}); - -test('load on demand', function(assert) { - // setup - var done = assert.async(); - - var $tree = $('#tree1'); - - $tree.tree({ - data: [ - { - id: 1, - label: 'node1', - load_on_demand: true - } - ], - dataUrl: '/tree/' - }); - - mockjax({ - url: '*', - response: function(options) { - assert.equal(options.url, '/tree/', '2'); - assert.deepEqual(options.data, { 'node' : 1 }, '3'); - - this.responseText = [ - { - id: 2, - label: 'child1' - } - ]; - }, - logging: false - }); - - // -- open node - function handleOpenNode(node) { - assert.equal(node.name, 'node1'); - assert.equal(formatTitles($tree), 'node1 child1', '4'); - - done(); - } - - var node1 = $tree.tree('getNodeByName', 'node1'); - assert.equal(formatTitles($tree), 'node1', '1'); - - $tree.tree('openNode', node1, handleOpenNode); -}); - -test('addNodeAfter', function(assert) { - // setup - var $tree = $('#tree1'); - - $tree.tree({ data: example_data }); - var node1 = $tree.tree('getNodeByName', 'node1'); - - // -- add node after node1 - $tree.tree('addNodeAfter', 'node3', node1); - - assert.equal(formatTitles($tree), 'node1 child1 child2 node3 node2 child3'); -}); - -test('addNodeBefore', function(assert) { - // setup - var $tree = $('#tree1'); - - $tree.tree({ data: example_data }); - var node1 = $tree.tree('getNodeByName', 'node1'); - - // -- add node before node1 - var new_node = $tree.tree('addNodeBefore', 'node3', node1); - - assert.equal(formatTitles($tree), 'node3 node1 child1 child2 node2 child3'); -}); - -test('addParentNode', function(assert) { - // setup - var $tree = $('#tree1'); - - $tree.tree({ data: example_data }); - var child3 = $tree.tree('getNodeByName', 'child3'); - - // -- add parent to child3 - $tree.tree('addParentNode', 'node3', child3); - - assert.equal(formatTitles($tree), 'node1 child1 child2 node2 node3 child3'); -}); - -test('mouse events', function(assert) { - // setup - var $tree = $('#tree1'); - $tree.tree({ - data: example_data, - dragAndDrop: true, - autoOpen: true - }); - $tree.tree('setMouseDelay', 0); - - function getTitleElement(node_name) { - var node = $tree.tree('getNodeByName', node_name); - var $el = $(node.element); - return $($el.find('.jqtree-title')); - } - - var $node1 = getTitleElement('node1'); - var $child3 = getTitleElement('child3'); - - // Move node1 inside child3 - // trigger mousedown event on node1 - $node1.trigger( - $.Event('mousedown', { which: 1 }) - ); - - // trigger mouse move to child3 - var child3_offset = $child3.offset(); - $tree.trigger( - $.Event('mousemove', { pageX: child3_offset.left, pageY: child3_offset.top }) - ); - $tree.trigger('mouseup'); - - assert.equal( - formatTitles($tree), - 'node2 child3 node1 child1 child2' - ); -}); - -test('multiple select', function(assert) { - // setup - var $tree = $('#tree1'); - $tree.tree({ data: example_data }); - - var child1 = $tree.tree('getNodeByName', 'child1'); - var child2 = $tree.tree('getNodeByName', 'child2'); - - // -- add nodes to selection - // todo: more nodes as parameters? - // todo: rename to 'selection.add' or 'selection' 'add'? - $tree.tree('addToSelection', child1); - $tree.tree('addToSelection', child2); - - // -- get selected nodes - var selected_nodes = $tree.tree('getSelectedNodes'); - assert.equal( - formatNodes(selected_nodes), - 'child1 child2' - ); -}); - -test('keyboard', function(assert) { - // setup - var $tree = $('#tree1'); - - function keyDown(key) { - $tree.trigger( - $.Event('keydown', { which: key }) - ); - } - - $tree.tree({ data: example_data }); - - var node1 = $tree.tree('getNodeByName', 'node1'); - - // select node1 - $tree.tree('selectNode', node1); - assert.equal(node1.is_open, undefined); - - // - move down; -> node2 - keyDown(40); - assert.equal($tree.tree('getSelectedNode').name, 'node2'); - - // - move up; -> back to node1 - keyDown(38); - assert.equal($tree.tree('getSelectedNode').name, 'node1'); - - // - move right; open node1 - keyDown(39); - assert.equal(node1.is_open, true); - assert.equal($tree.tree('getSelectedNode').name, 'node1'); - - // - select child3 and move up -> node2 - $tree.tree('selectNode', $tree.tree('getNodeByName', 'child3')); - keyDown(38); - assert.equal($tree.tree('getSelectedNode').name, 'node2'); - - // - move up -> child2 - keyDown(38); - assert.equal($tree.tree('getSelectedNode').name, 'child2'); - - // - select node1 and move left -> close - $tree.tree('selectNode', node1); - keyDown(37); - assert.equal(node1.is_open, false); - assert.equal($tree.tree('getSelectedNode').name, 'node1'); -}); - -test('getNodesByProperty', function(assert) { - // setup - var $tree = $('#tree1'); - $tree.tree({ - data: example_data - }); - var node2 = $tree.tree('getNodeByName', 'node2'); - - // 1. get 'node1' by property - assert.equal( - $tree.tree('getNodesByProperty', 'int_property', 1)[0].name, - 'node1' - ); - - // 2. get property that does not exist in any node - assert.equal($tree.tree('getNodesByProperty', 'int_property', 123).length, 0); - - // 3. get string property - assert.equal( - $tree.tree('getNodesByProperty', 'str_property', '1')[0].name, - 'node1' - ); - - // 4. add node with string id; search by int - $tree.tree( - 'appendNode', - { - label: 'abc', - id: '234', - str_property: '111', - int_property: 111 - } - ); - - assert.equal( - $tree.tree('getNodesByProperty', 'int_property', 111)[0].name, - 'abc' - ); - assert.equal( - $tree.tree('getNodesByProperty', 'str_property', '111')[0].name, - 'abc' - ); - - // 5. load subtree in node2 - var subtree_data = [ - { - label: 'sub1', - id: 200, - int_property: 222, - children: [ - {label: 'sub2', id: 201, int_property: 444} - ] - } - ]; - $tree.tree('loadData', subtree_data, node2); - var t = $tree.tree('getTree'); - - assert.equal( - $tree.tree('getNodesByProperty', 'int_property', 222)[0].name, - 'sub1' - ); - assert.equal( - $tree.tree('getNodesByProperty', 'int_property', 444)[0].name, - 'sub2' - ); -}); - -test('dataUrl extra options', function(assert) { - var done = assert.async(); - - var $tree = $('#tree1'); - - mockjax({ - url: '*', - response: function(options) { - // 2. handle ajax request - // expect 'headers' option - assert.equal(options.url, '/tree2/'); - assert.deepEqual(options.headers, {'abc': 'def'}); - - done(); - }, - logging: false - }); - - // 1. init tree - // dataUrl contains 'headers' option - $tree.tree({ - dataUrl: { - 'url': '/tree2/', - 'headers': {'abc': 'def'} - } - }); -}); - -test('dataUrl is function', function(assert) { - var done = assert.async(); - - var $tree = $('#tree1'); - - mockjax({ - url: '*', - response: function(options) { - // 2. handle ajax request - // expect 'headers' option - assert.equal(options.url, '/tree3/'); - assert.deepEqual(options.headers, {'abc': 'def'}); - - done(); - }, - logging: false - }); - - // 1. init tree - // dataUrl is a function - $tree.tree({ - dataUrl: function(node) { - return { - 'url': '/tree3/', - 'headers': {'abc': 'def'} - }; - } - }); -}); - -test('getNodeByHtmlElement', function(assert) { - var $tree = $('#tree1'); - $tree.tree({ - data: example_data - }); - - var $el = $('.jqtree-title'); - - // Get node for jquery element - var node = $tree.tree('getNodeByHtmlElement', $el); - assert.equal(node.name, 'node1'); - - // Same for html element - node = $tree.tree('getNodeByHtmlElement', $el[0]); - assert.equal(node.name, 'node1'); -}); - -test('onLoadFailed', function(assert) { - mockjax({ - url: '/tree/', - status: 500, - responseText: 'test error', - logging: false - }); - - var done = assert.async(); - - function handleLoadFailed(e) { - assert.equal(e.responseText, 'test error'); - - done(); - } - - var $tree = $('#tree1'); - $tree.tree({ - dataUrl: '/tree/', - onLoadFailed: handleLoadFailed - }); -}); diff --git a/ecomp-portal-FE/client/bower_components/jqTree/src_test/test_tree.js b/ecomp-portal-FE/client/bower_components/jqTree/src_test/test_tree.js deleted file mode 100644 index ffa4910c..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/src_test/test_tree.js +++ /dev/null @@ -1,726 +0,0 @@ -var utils_for_test = require('./utils_for_test'); - -var example_data = utils_for_test.example_data; -var formatNodes = utils_for_test.formatNodes; - -var tree_vars = utils_for_test.getTreeVariables(); - -var Node = tree_vars.Node; -var Position = tree_vars.Position; - -var test = QUnit.test; - - -QUnit.module("Tree"); -test('constructor', function(assert) { - // 1. Create node from string - var node = new Node('n1'); - - assert.equal(node.name, 'n1'); - assert.equal(node.children.length, 0); - assert.equal(node.parent, null); - - // 2. Create node from object - node = new Node({ - label: 'n2', - id: 123, - parent: 'abc', // parent must be ignored - children: ['c'], // children must be ignored - url: '/' - }); - - assert.equal(node.name, 'n2'); - assert.equal(node.id, 123); - assert.equal(node.url, '/'); - assert.equal(node.label, undefined); - assert.equal(node.children.length, 0); - assert.equal(node.parent, null); -}); - -test("create tree from data", function(assert) { - function checkData(tree) { - assert.equal( - formatNodes(tree.children), - 'node1 node2', - 'nodes on level 1' - ); - assert.equal( - formatNodes(tree.children[0].children), - 'child1 child2', - 'children of node1' - ); - assert.equal( - formatNodes(tree.children[1].children), - 'child3', - 'children of node2' - ); - assert.equal( - tree.children[0].id, - 123, - 'id' - ); - } - - // - create tree from example data - var tree = new Node(null, true); - tree.loadFromData(example_data); - checkData(tree); - - // - create tree from new data format - var data = [ - { - label: 'node1', - id: 123, - children: ['child1', 'child2'] // nodes are only defined by a string - }, - { - label: 'node2', - id: 124, - children: ['child3'] - } - ]; - var tree = new Node(null, true); - tree.loadFromData(data); - checkData(tree); -}); - -test("addChild", function(assert) { - var tree = new Node('tree1', true); - tree.addChild( - new Node('abc') - ); - tree.addChild( - new Node('def') - ); - - assert.equal( - formatNodes(tree.children), - 'abc def', - 'children' - ); - - var node = tree.children[0]; - assert.equal( - node.parent.name, - 'tree1', - 'parent of node' - ); -}); - -test('addChildAtPosition', function(assert) { - var tree = new Node(null, true); - tree.addChildAtPosition(new Node('abc'), 0); // first - tree.addChildAtPosition(new Node('ghi'), 2); // index 2 does not exist - tree.addChildAtPosition(new Node('def'), 1); - tree.addChildAtPosition(new Node('123'), 0); - - assert.equal( - formatNodes(tree.children), - '123 abc def ghi', - 'children' - ); -}); - -test('removeChild', function(assert) { - var tree = new Node(null, true); - - var abc = new Node({'label': 'abc', 'id': 1}); - var def = new Node({'label': 'def', 'id': 2}); - var ghi = new Node({'label': 'ghi', 'id': 3}); - - tree.addChild(abc); - tree.addChild(def); - tree.addChild(ghi); - - var jkl = new Node({'label': 'jkl', 'id': 4}); - def.addChild(jkl); - - assert.equal( - formatNodes(tree.children), - 'abc def ghi', - 'children' - ); - - assert.equal(tree.id_mapping[2].name, 'def'); - assert.equal(tree.id_mapping[4].name, 'jkl'); - - // remove 'def' - tree.removeChild(def); - assert.equal( - formatNodes(tree.children), - 'abc ghi', - 'children' - ); - - assert.equal(tree.id_mapping[2], null); - assert.equal(tree.id_mapping[4], null); - - // remove 'ghi' - tree.removeChild(ghi); - assert.equal( - formatNodes(tree.children), - 'abc', - 'children' - ); - - // remove 'abc' - tree.removeChild(abc); - assert.equal( - formatNodes(tree.children), - '', - 'children' - ); -}); - -test('getChildIndex', function(assert) { - // setup - var tree = new Node(null, true); - - var abc = new Node('abc'); - var def = new Node('def'); - var ghi = new Node('ghi'); - tree.addChild(abc); - tree.addChild(def); - tree.addChild(ghi); - - // 1. Get child index of 'def' - assert.equal(tree.getChildIndex(def), 1); - - // 2. Get child index of non-existing node - assert.equal(tree.getChildIndex(new Node('xyz')), -1); -}); - -test('hasChildren', function(assert) { - var tree = new Node(null, true); - assert.equal( - tree.hasChildren(), - false, - 'tree without children' - ); - - tree.addChild(new Node('abc')); - assert.equal( - tree.hasChildren(), - true, - 'tree has children' - ); -}); - -test('iterate', function(assert) { - var tree = new Node(null, true); - tree.loadFromData(example_data); - - // iterate over all the nodes - var nodes = []; - tree.iterate( - function(node, level) { - nodes.push(node); - return true; - } - ); - - assert.equal( - formatNodes(nodes), - 'node1 child1 child2 node2 child3', - 'all nodes' - ); - - // iterate over nodes on first level - nodes = []; - tree.iterate( - function(node, level) { - nodes.push(node); - return false; - } - ); - - assert.equal( - formatNodes(nodes), - 'node1 node2', - 'nodes on first level' - ); - - // add child 4 - var node3 = tree.getNodeById(124).children[0]; - node3.addChild( - new Node('child4') - ); - - // test level parameter - nodes = []; - tree.iterate( - function(node, level) { - nodes.push(node.name + ' ' + level); - return true; - } - ); - - assert.equal( - nodes.join(','), - 'node1 0,child1 1,child2 1,node2 0,child3 1,child4 2' - ); -}); - -test('moveNode', function(assert) { - var tree = new Node(null, true); - tree.loadFromData(example_data); - - /* - node1 - ---child1 - ---child2 - node2 - ---child3 - */ - - var node1 = tree.children[0]; - var node2 = tree.children[1]; - var child1 = node1.children[0]; - var child2 = node1.children[1]; - assert.equal(node2.name, 'node2', 'node2 name'); - assert.equal(child2.name, 'child2', 'child2 name'); - - // move child2 after node2 - tree.moveNode(child2, node2, Position.AFTER); - - /* - node1 - ---child1 - node2 - ---child3 - child2 - */ - assert.equal( - formatNodes(tree.children), - 'node1 node2 child2', - 'tree nodes at first level' - ); - assert.equal( - formatNodes(node1.children), - 'child1', - 'node1 children' - ); - - // move child1 inside node2 - // this means it's the first child - tree.moveNode(child1, node2, Position.INSIDE); - - /* - node1 - node2 - ---child1 - ---child3 - child2 - */ - assert.equal( - formatNodes(node2.children), - 'child1 child3', - 'node2 children' - ); - assert.equal( - formatNodes(node1.children), - '', - 'node1 has no children' - ); - - // move child2 before child1 - tree.moveNode(child2, child1, Position.BEFORE); - - /* - node1 - node2 - ---child2 - ---child1 - ---child3 - */ - assert.equal( - formatNodes(node2.children), - 'child2 child1 child3', - 'node2 children' - ); - assert.equal( - formatNodes(tree.children), - 'node1 node2', - 'tree nodes at first level' - ); -}); - -test('initFromData', function(assert) { - var data = - { - label: 'main', - children: [ - 'c1', - { - label: 'c2', - id: 201 - } - ] - }; - var node = new Node(null, true); - node.initFromData(data); - - assert.equal(node.name, 'main') - assert.equal( - formatNodes(node.children), - 'c1 c2', - 'children' - ); - assert.equal(node.children[1].id, 201); -}); - -test('getData', function(assert) { - // 1. empty node - var node = new Node(null, true); - assert.deepEqual(node.getData(), []); - - // 2.node with data - node.loadFromData( - [ - { - label: 'n1', - children: [ - { - label: 'c1' - } - ] - } - ] - ); - assert.deepEqual( - node.getData(), - [ - { - name: 'n1', - children: [ - { - name: 'c1' - } - ] - } - ] - ); - - // 3. get data including parent - var n1 = node.getNodeByName('n1'); - - assert.deepEqual( - n1.getData(true), - [ - { - name: 'n1', - children: [ - { name: 'c1'} - ] - } - ] - ); -}); - -test('addAfter', function(assert) { - // setup - var tree = new Node(null, true); - tree.loadFromData(example_data); - - /* - -node1 - ---c1 - ---c2 - -node2 - ---c3 - */ - - assert.equal(formatNodes(tree.children), 'node1 node2'); - - // - Add 'node_b' after node2 - var node2 = tree.getNodeByName('node2'); - node2.addAfter('node_b'); - - assert.equal(formatNodes(tree.children), 'node1 node2 node_b'); - - var node_b = tree.getNodeByName('node_b'); - assert.equal(node_b.name, 'node_b'); - - // - Add 'node_a' after node1 - var node1 = tree.getNodeByName('node1'); - node1.addAfter('node_a'); - - assert.equal(formatNodes(tree.children), 'node1 node_a node2 node_b'); - - // - Add 'node_c' after node_b; new node is an object - node_b.addAfter({ - label: 'node_c', - id: 789 - }); - - var node_c = tree.getNodeByName('node_c'); - assert.equal(node_c.id, 789); - - assert.equal(formatNodes(tree.children), 'node1 node_a node2 node_b node_c'); - - // - Add after root node; this is not possible - assert.equal(tree.addAfter('node_x'), null); -}); - -test('addBefore', function(assert) { - // setup - var tree = new Node(null, true); - tree.loadFromData(example_data); - - // - Add 'node_0' before node1 - var node1 = tree.getNodeByName('node1'); - node1.addBefore('node0'); - assert.equal(formatNodes(tree.children), 'node0 node1 node2'); - - // - Add before root node; this is not possile - assert.equal(tree.addBefore('x'), null); -}); - -test('addParent', function(assert) { - // setup - var tree = new Node(null, true); - tree.loadFromData(example_data); - - // - Add node 'root' as parent of node1 - // Note that node also becomes a child of 'root' - var node1 = tree.getNodeByName('node1'); - node1.addParent('root'); - - var root = tree.getNodeByName('root'); - assert.equal(formatNodes(root.children), 'node1 node2'); - - // - Add parent to root node; not possible - assert.equal(tree.addParent('x'), null); -}); - -test('remove', function(assert) { - // setup - var tree = new Node(null, true); - tree.loadFromData(example_data); - - var child1 = tree.getNodeByName('child1'); - var node1 = tree.getNodeByName('node1'); - - assert.equal(formatNodes(node1.children), 'child1 child2'); - assert.equal(child1.parent, node1); - - // 1. Remove child1 - child1.remove(); - - assert.equal(formatNodes(node1.children), 'child2'); - assert.equal(child1.parent, null); -}); - -test('append', function(assert) { - // setup - var tree = new Node(null, true); - tree.loadFromData(example_data); - - var node1 = tree.getNodeByName('node1'); - - // 1. Append child3 to node1 - node1.append('child3'); - - assert.equal(formatNodes(node1.children), 'child1 child2 child3'); - - // 2. Append subtree - node1.append( - { - name: 'child4', - children: [ - { name: 'child5' } - ] - } - ); - - assert.equal(formatNodes(node1.children), 'child1 child2 child3 child4'); - - var child4 = node1.getNodeByName('child4'); - assert.equal(formatNodes(child4.children), 'child5'); -}); - -test('prepend', function(assert) { - // setup - var tree = new Node(null, true); - tree.loadFromData(example_data); - - var node1 = tree.getNodeByName('node1'); - - // 1. Prepend child0 to node1 - node1.prepend('child0'); - - assert.equal(formatNodes(node1.children), 'child0 child1 child2'); - - // 2. Prepend subtree - node1.prepend({ - name: 'child3', - children: [ - { name: 'child4' } - ] - }); - - assert.equal(formatNodes(node1.children), 'child3 child0 child1 child2'); - - var child3 = node1.getNodeByName('child3'); - assert.equal(formatNodes(child3.children), 'child4'); -}); - -test('getNodeById', function(assert) { - // setup - var tree = new Node(null, true); - tree.loadFromData(example_data); - - // 1. Get node with id 124 - var node = tree.getNodeById(124); - assert.equal(node.name, 'node2'); - - // 2. Delete node with id 124 and search again - node.remove(); - - assert.equal(tree.getNodeById(124), null); - - // 3. Add node with id 456 and search for it - var child3 = tree.getNodeByName('child2'); - child3.append({ - id: 456, - label: 'new node' - }); - - node = tree.getNodeById(456); - assert.equal(node.name, 'new node'); -}); - -test('getLevel', function(assert) { - // setup - var tree = new Node(null, true); - tree.loadFromData(example_data); - - // 1. get level for node1 and child1 - assert.equal(tree.getNodeByName('node1').getLevel(), 1); - assert.equal(tree.getNodeByName('child1').getLevel(), 2); -}); - -test('loadFromData and id mapping', function(assert) { - // - get node from empty tree - var tree = new Node(null, true); - assert.equal(tree.getNodeById(999), null); - - // - load example data in tree - tree.loadFromData(example_data); - assert.equal(tree.getNodeById(124).name, 'node2'); - - var child2 = tree.getNodeById(126); - child2.addChild( - new Node({label: 'child4', id: 128}) - ); - child2.addChild( - new Node({label: 'child5', id: 129}) - ); - - // - load data in node child2 - child2.loadFromData(['abc', 'def']); - - assert.equal(tree.getNodeById(128), null); - assert.equal(child2.children.length, 2); - assert.equal(child2.children[0].name, 'abc'); -}); - -test('removeChildren', function(assert) { - // - load example data - var tree = new Node(null, true); - tree.loadFromData(example_data); - - // add child4 and child5 - var child2 = tree.getNodeById(126); - assert.equal(child2.name, 'child2'); - - child2.addChild( - new Node({label: 'child4', id: 128}) - ); - child2.addChild( - new Node({label: 'child5', id: 129}) - ); - assert.equal(tree.getNodeById(128).name, 'child4'); - - // - remove children from child2 - child2.removeChildren(); - assert.equal(tree.getNodeById(128), null); - assert.equal(child2.children.length, 0); -}); - -test('node with id 0', function(assert) { - // - load node with id 0 - var tree = new Node(null, true); - tree.loadFromData([ - { - id: 0, - label: 'mynode' - } - ]); - - // - get node by id - var node = tree.getNodeById(0); - assert.equal(node.name, 'mynode'); - - // -- remove the node - node.remove(); - - assert.equal(tree.getNodeById(0), undefined); -}); - -test('getPreviousSibling', function(assert) { - // setup - var tree = new Node(null, true); - tree.loadFromData(example_data); - - // - getPreviousSibling - assert.equal( - tree.getNodeByName('child2').getPreviousSibling().name, - 'child1' - ); - assert.equal(tree.getPreviousSibling(), null); - assert.equal( - tree.getNodeByName('child1').getPreviousSibling(), - null - ); -}); - -test('getNextSibling', function(assert) { - // setup - var tree = new Node(null, true); - tree.loadFromData(example_data); - - // - getNextSibling - assert.equal( - tree.getNodeByName('node1').getNextSibling().name, - 'node2' - ); - assert.equal( - tree.getNodeByName('node2').getNextSibling(), - null - ); - assert.equal(tree.getNextSibling(), null); -}); - -test('getNodesByProperty', function(assert) { - var tree = new Node(null, true); - tree.loadFromData(example_data); - - nodes = tree.getNodesByProperty('name', 'child1'); - - assert.equal(nodes.length, 1); - assert.equal(nodes[0].name, 'child1'); -}); - -test('getNodeByCallback', function(assert) { - var tree = new Node(null, true); - tree.loadFromData(example_data); - - node = tree.getNodeByCallback( - function(node) { - return node.name == 'child1'; - } - ); - - assert.equal(node.name, 'child1'); -}); diff --git a/ecomp-portal-FE/client/bower_components/jqTree/src_test/test_util.js b/ecomp-portal-FE/client/bower_components/jqTree/src_test/test_util.js deleted file mode 100644 index 18b6464e..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/src_test/test_util.js +++ /dev/null @@ -1,34 +0,0 @@ -var utils_for_test = require('./utils_for_test'); - -var tree_vars = utils_for_test.getTreeVariables(); - -var Position = tree_vars.Position; -var util = tree_vars.util; - -var test = QUnit.test; - - -QUnit.module('util'); - -test('indexOf', function(assert) { - var _indexOf = util._indexOf; - var indexOf = util.indexOf; - - assert.equal(indexOf([3, 2, 1], 1), 2); - assert.equal(_indexOf([3, 2, 1], 1), 2); - assert.equal(indexOf([4, 5, 6], 1), -1); - assert.equal(_indexOf([4, 5, 6], 1), -1); -}); - -test('Position.getName', function(assert) { - assert.equal(Position.getName(Position.BEFORE), 'before'); - assert.equal(Position.getName(Position.AFTER), 'after'); - assert.equal(Position.getName(Position.INSIDE), 'inside'); - assert.equal(Position.getName(Position.NONE), 'none'); -}); - -test('Position.nameToIndex', function(assert) { - assert.equal(Position.nameToIndex('before'), Position.BEFORE); - assert.equal(Position.nameToIndex('after'), Position.AFTER); - assert.equal(Position.nameToIndex(''), 0); -}); diff --git a/ecomp-portal-FE/client/bower_components/jqTree/src_test/utils_for_test.js b/ecomp-portal-FE/client/bower_components/jqTree/src_test/utils_for_test.js deleted file mode 100644 index 3885ef51..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/src_test/utils_for_test.js +++ /dev/null @@ -1,107 +0,0 @@ -/* -example data: - -node1 ----child1 ----child2 --node2 ----child3 -*/ - -var example_data = [ - { - label: 'node1', - id: 123, // extra data - int_property: 1, - str_property: '1', - children: [ - { label: 'child1', id: 125, int_property: 2 }, - { label: 'child2', id: 126 } - ] - }, - { - label: 'node2', - id: 124, - int_property: 3, - str_property: '3', - children: [ - { label: 'child3', id: 127 } - ] - } -]; - -/* -example data 2: - --main ----c1 ----c2 -*/ - -var example_data2 = [ - { - label: 'main', - children: [ - { label: 'c1' }, - { label: 'c2' } - ] - } -]; - -function formatNodes(nodes) { - var strings = $.map(nodes, function(node) { - return node.name; - }); - return strings.join(' '); -}; - -function isNodeClosed($node) { - return ( - ($node.is('li.jqtree-folder.jqtree-closed')) && - ($node.find('a:eq(0)').is('a.jqtree-toggler.jqtree-closed')) && - ($node.find('ul:eq(0)').is('ul')) - ); -} - -function isNodeOpen($node) { - return ( - ($node.is('li.jqtree-folder')) && - ($node.find('a:eq(0)').is('a.jqtree-toggler')) && - ($node.find('ul:eq(0)').is('ul')) && - (! $node.is('li.jqtree-folder.jqtree-closed')) && - (! $node.find('span:eq(0)').is('a.jqtree-toggler.jqtree-closed')) - ); -} - -function formatTitles($node) { - var titles = $node.find('.jqtree-title').map( - function(i, el) { - return $(el).text(); - } - ); - return titles.toArray().join(' '); -} - -function getTreeVariables() { - var JqTreeWidget = $('').tree('get_widget_class'); - - var node = JqTreeWidget.getModule('node'); - var util = JqTreeWidget.getModule('util'); - - return { - Node: node.Node, - Position: node.Position, - util: util - }; -} - - -module.exports = { - example_data: example_data, - example_data2: example_data2, - formatNodes: formatNodes, - formatTitles: formatTitles, - getTreeVariables: getTreeVariables, - isNodeClosed: isNodeClosed, - isNodeOpen: isNodeOpen -}; diff --git a/ecomp-portal-FE/client/bower_components/jqTree/static/bower.json b/ecomp-portal-FE/client/bower_components/jqTree/static/bower.json deleted file mode 100644 index 7aba92bd..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/static/bower.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "jqtree-docs", - "dependencies": { - "blanket": "1.1.7", - "bootstrap": "3.3.7", - "fontawesome": "4.7.0", - "jquery": "3.1.1", - "jquery-2": "jquery#2.2.4", - "jquery-1": "jquery#1.12.4", - "jquery-cookie": "v1.4.1", - "jquery-mockjax": "2.2.1", - "json3": "3.3.2", - "pygments": "2.1.3", - "qunit": "2.1.1" - } -} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/blanket/dist/qunit/blanket.js b/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/blanket/dist/qunit/blanket.js deleted file mode 100644 index c07ede27..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/blanket/dist/qunit/blanket.js +++ /dev/null @@ -1,5299 +0,0 @@ -/*! blanket - v1.1.5 */ - -if (typeof QUnit !== 'undefined'){ QUnit.config.autostart = false; } -(function(define){ -/* - Copyright (C) 2013 Ariya Hidayat - Copyright (C) 2013 Thaddee Tyl - Copyright (C) 2013 Mathias Bynens - Copyright (C) 2012 Ariya Hidayat - Copyright (C) 2012 Mathias Bynens - Copyright (C) 2012 Joost-Wim Boekesteijn - Copyright (C) 2012 Kris Kowal - Copyright (C) 2012 Yusuke Suzuki - Copyright (C) 2012 Arpad Borsos - Copyright (C) 2011 Ariya Hidayat - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/*jslint bitwise:true plusplus:true */ -/*global esprima:true, define:true, exports:true, window: true, -throwErrorTolerant: true, -throwError: true, generateStatement: true, peek: true, -parseAssignmentExpression: true, parseBlock: true, parseExpression: true, -parseFunctionDeclaration: true, parseFunctionExpression: true, -parseFunctionSourceElements: true, parseVariableIdentifier: true, -parseLeftHandSideExpression: true, -parseUnaryExpression: true, -parseStatement: true, parseSourceElement: true */ - -(function (root, factory) { - 'use strict'; - - // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, - // Rhino, and plain browser loading. - - /* istanbul ignore next */ - if (typeof define === 'function' && define.amd) { - define(['exports'], factory); - } else if (typeof exports !== 'undefined') { - factory(exports); - } else { - factory((root.esprima = {})); - } -}(this, function (exports) { - 'use strict'; - - var Token, - TokenName, - FnExprTokens, - Syntax, - PropertyKind, - Messages, - Regex, - SyntaxTreeDelegate, - source, - strict, - index, - lineNumber, - lineStart, - length, - delegate, - lookahead, - state, - extra; - - Token = { - BooleanLiteral: 1, - EOF: 2, - Identifier: 3, - Keyword: 4, - NullLiteral: 5, - NumericLiteral: 6, - Punctuator: 7, - StringLiteral: 8, - RegularExpression: 9 - }; - - TokenName = {}; - TokenName[Token.BooleanLiteral] = 'Boolean'; - TokenName[Token.EOF] = ''; - TokenName[Token.Identifier] = 'Identifier'; - TokenName[Token.Keyword] = 'Keyword'; - TokenName[Token.NullLiteral] = 'Null'; - TokenName[Token.NumericLiteral] = 'Numeric'; - TokenName[Token.Punctuator] = 'Punctuator'; - TokenName[Token.StringLiteral] = 'String'; - TokenName[Token.RegularExpression] = 'RegularExpression'; - - // A function following one of those tokens is an expression. - FnExprTokens = ['(', '{', '[', 'in', 'typeof', 'instanceof', 'new', - 'return', 'case', 'delete', 'throw', 'void', - // assignment operators - '=', '+=', '-=', '*=', '/=', '%=', '<<=', '>>=', '>>>=', - '&=', '|=', '^=', ',', - // binary/unary operators - '+', '-', '*', '/', '%', '++', '--', '<<', '>>', '>>>', '&', - '|', '^', '!', '~', '&&', '||', '?', ':', '===', '==', '>=', - '<=', '<', '>', '!=', '!==']; - - Syntax = { - AssignmentExpression: 'AssignmentExpression', - ArrayExpression: 'ArrayExpression', - BlockStatement: 'BlockStatement', - BinaryExpression: 'BinaryExpression', - BreakStatement: 'BreakStatement', - CallExpression: 'CallExpression', - CatchClause: 'CatchClause', - ConditionalExpression: 'ConditionalExpression', - ContinueStatement: 'ContinueStatement', - DoWhileStatement: 'DoWhileStatement', - DebuggerStatement: 'DebuggerStatement', - EmptyStatement: 'EmptyStatement', - ExpressionStatement: 'ExpressionStatement', - ForStatement: 'ForStatement', - ForInStatement: 'ForInStatement', - FunctionDeclaration: 'FunctionDeclaration', - FunctionExpression: 'FunctionExpression', - Identifier: 'Identifier', - IfStatement: 'IfStatement', - Literal: 'Literal', - LabeledStatement: 'LabeledStatement', - LogicalExpression: 'LogicalExpression', - MemberExpression: 'MemberExpression', - NewExpression: 'NewExpression', - ObjectExpression: 'ObjectExpression', - Program: 'Program', - Property: 'Property', - ReturnStatement: 'ReturnStatement', - SequenceExpression: 'SequenceExpression', - SwitchStatement: 'SwitchStatement', - SwitchCase: 'SwitchCase', - ThisExpression: 'ThisExpression', - ThrowStatement: 'ThrowStatement', - TryStatement: 'TryStatement', - UnaryExpression: 'UnaryExpression', - UpdateExpression: 'UpdateExpression', - VariableDeclaration: 'VariableDeclaration', - VariableDeclarator: 'VariableDeclarator', - WhileStatement: 'WhileStatement', - WithStatement: 'WithStatement' - }; - - PropertyKind = { - Data: 1, - Get: 2, - Set: 4 - }; - - // Error messages should be identical to V8. - Messages = { - UnexpectedToken: 'Unexpected token %0', - UnexpectedNumber: 'Unexpected number', - UnexpectedString: 'Unexpected string', - UnexpectedIdentifier: 'Unexpected identifier', - UnexpectedReserved: 'Unexpected reserved word', - UnexpectedEOS: 'Unexpected end of input', - NewlineAfterThrow: 'Illegal newline after throw', - InvalidRegExp: 'Invalid regular expression', - UnterminatedRegExp: 'Invalid regular expression: missing /', - InvalidLHSInAssignment: 'Invalid left-hand side in assignment', - InvalidLHSInForIn: 'Invalid left-hand side in for-in', - MultipleDefaultsInSwitch: 'More than one default clause in switch statement', - NoCatchOrFinally: 'Missing catch or finally after try', - UnknownLabel: 'Undefined label \'%0\'', - Redeclaration: '%0 \'%1\' has already been declared', - IllegalContinue: 'Illegal continue statement', - IllegalBreak: 'Illegal break statement', - IllegalReturn: 'Illegal return statement', - StrictModeWith: 'Strict mode code may not include a with statement', - StrictCatchVariable: 'Catch variable may not be eval or arguments in strict mode', - StrictVarName: 'Variable name may not be eval or arguments in strict mode', - StrictParamName: 'Parameter name eval or arguments is not allowed in strict mode', - StrictParamDupe: 'Strict mode function may not have duplicate parameter names', - StrictFunctionName: 'Function name may not be eval or arguments in strict mode', - StrictOctalLiteral: 'Octal literals are not allowed in strict mode.', - StrictDelete: 'Delete of an unqualified identifier in strict mode.', - StrictDuplicateProperty: 'Duplicate data property in object literal not allowed in strict mode', - AccessorDataProperty: 'Object literal may not have data and accessor property with the same name', - AccessorGetSet: 'Object literal may not have multiple get/set accessors with the same name', - StrictLHSAssignment: 'Assignment to eval or arguments is not allowed in strict mode', - StrictLHSPostfix: 'Postfix increment/decrement may not have eval or arguments operand in strict mode', - StrictLHSPrefix: 'Prefix increment/decrement may not have eval or arguments operand in strict mode', - StrictReservedWord: 'Use of future reserved word in strict mode' - }; - - // See also tools/generate-unicode-regex.py. - Regex = { - NonAsciiIdentifierStart: new RegExp('[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F0\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]'), - NonAsciiIdentifierPart: new RegExp('[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0\u08A2-\u08AC\u08E4-\u08FE\u0900-\u0963\u0966-\u096F\u0971-\u0977\u0979-\u097F\u0981-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C01-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58\u0C59\u0C60-\u0C63\u0C66-\u0C6F\u0C82\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D02\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D60-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F0\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191C\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1D00-\u1DE6\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA697\uA69F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7B\uAA80-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE26\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]') - }; - - // Ensure the condition is true, otherwise throw an error. - // This is only to have a better contract semantic, i.e. another safety net - // to catch a logic error. The condition shall be fulfilled in normal case. - // Do NOT use this to enforce a certain condition on any user input. - - function assert(condition, message) { - /* istanbul ignore if */ - if (!condition) { - throw new Error('ASSERT: ' + message); - } - } - - function isDecimalDigit(ch) { - return (ch >= 48 && ch <= 57); // 0..9 - } - - function isHexDigit(ch) { - return '0123456789abcdefABCDEF'.indexOf(ch) >= 0; - } - - function isOctalDigit(ch) { - return '01234567'.indexOf(ch) >= 0; - } - - - // 7.2 White Space - - function isWhiteSpace(ch) { - return (ch === 0x20) || (ch === 0x09) || (ch === 0x0B) || (ch === 0x0C) || (ch === 0xA0) || - (ch >= 0x1680 && [0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(ch) >= 0); - } - - // 7.3 Line Terminators - - function isLineTerminator(ch) { - return (ch === 0x0A) || (ch === 0x0D) || (ch === 0x2028) || (ch === 0x2029); - } - - // 7.6 Identifier Names and Identifiers - - function isIdentifierStart(ch) { - return (ch === 0x24) || (ch === 0x5F) || // $ (dollar) and _ (underscore) - (ch >= 0x41 && ch <= 0x5A) || // A..Z - (ch >= 0x61 && ch <= 0x7A) || // a..z - (ch === 0x5C) || // \ (backslash) - ((ch >= 0x80) && Regex.NonAsciiIdentifierStart.test(String.fromCharCode(ch))); - } - - function isIdentifierPart(ch) { - return (ch === 0x24) || (ch === 0x5F) || // $ (dollar) and _ (underscore) - (ch >= 0x41 && ch <= 0x5A) || // A..Z - (ch >= 0x61 && ch <= 0x7A) || // a..z - (ch >= 0x30 && ch <= 0x39) || // 0..9 - (ch === 0x5C) || // \ (backslash) - ((ch >= 0x80) && Regex.NonAsciiIdentifierPart.test(String.fromCharCode(ch))); - } - - // 7.6.1.2 Future Reserved Words - - function isFutureReservedWord(id) { - switch (id) { - case 'class': - case 'enum': - case 'export': - case 'extends': - case 'import': - case 'super': - return true; - default: - return false; - } - } - - function isStrictModeReservedWord(id) { - switch (id) { - case 'implements': - case 'interface': - case 'package': - case 'private': - case 'protected': - case 'public': - case 'static': - case 'yield': - case 'let': - return true; - default: - return false; - } - } - - function isRestrictedWord(id) { - return id === 'eval' || id === 'arguments'; - } - - // 7.6.1.1 Keywords - - function isKeyword(id) { - if (strict && isStrictModeReservedWord(id)) { - return true; - } - - // 'const' is specialized as Keyword in V8. - // 'yield' and 'let' are for compatiblity with SpiderMonkey and ES.next. - // Some others are from future reserved words. - - switch (id.length) { - case 2: - return (id === 'if') || (id === 'in') || (id === 'do'); - case 3: - return (id === 'var') || (id === 'for') || (id === 'new') || - (id === 'try') || (id === 'let'); - case 4: - return (id === 'this') || (id === 'else') || (id === 'case') || - (id === 'void') || (id === 'with') || (id === 'enum'); - case 5: - return (id === 'while') || (id === 'break') || (id === 'catch') || - (id === 'throw') || (id === 'const') || (id === 'yield') || - (id === 'class') || (id === 'super'); - case 6: - return (id === 'return') || (id === 'typeof') || (id === 'delete') || - (id === 'switch') || (id === 'export') || (id === 'import'); - case 7: - return (id === 'default') || (id === 'finally') || (id === 'extends'); - case 8: - return (id === 'function') || (id === 'continue') || (id === 'debugger'); - case 10: - return (id === 'instanceof'); - default: - return false; - } - } - - // 7.4 Comments - - function addComment(type, value, start, end, loc) { - var comment, attacher; - - assert(typeof start === 'number', 'Comment must have valid position'); - - // Because the way the actual token is scanned, often the comments - // (if any) are skipped twice during the lexical analysis. - // Thus, we need to skip adding a comment if the comment array already - // handled it. - if (state.lastCommentStart >= start) { - return; - } - state.lastCommentStart = start; - - comment = { - type: type, - value: value - }; - if (extra.range) { - comment.range = [start, end]; - } - if (extra.loc) { - comment.loc = loc; - } - extra.comments.push(comment); - if (extra.attachComment) { - extra.leadingComments.push(comment); - extra.trailingComments.push(comment); - } - } - - function skipSingleLineComment(offset) { - var start, loc, ch, comment; - - start = index - offset; - loc = { - start: { - line: lineNumber, - column: index - lineStart - offset - } - }; - - while (index < length) { - ch = source.charCodeAt(index); - ++index; - if (isLineTerminator(ch)) { - if (extra.comments) { - comment = source.slice(start + offset, index - 1); - loc.end = { - line: lineNumber, - column: index - lineStart - 1 - }; - addComment('Line', comment, start, index - 1, loc); - } - if (ch === 13 && source.charCodeAt(index) === 10) { - ++index; - } - ++lineNumber; - lineStart = index; - return; - } - } - - if (extra.comments) { - comment = source.slice(start + offset, index); - loc.end = { - line: lineNumber, - column: index - lineStart - }; - addComment('Line', comment, start, index, loc); - } - } - - function skipMultiLineComment() { - var start, loc, ch, comment; - - if (extra.comments) { - start = index - 2; - loc = { - start: { - line: lineNumber, - column: index - lineStart - 2 - } - }; - } - - while (index < length) { - ch = source.charCodeAt(index); - if (isLineTerminator(ch)) { - if (ch === 0x0D && source.charCodeAt(index + 1) === 0x0A) { - ++index; - } - ++lineNumber; - ++index; - lineStart = index; - if (index >= length) { - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - } else if (ch === 0x2A) { - // Block comment ends with '*/'. - if (source.charCodeAt(index + 1) === 0x2F) { - ++index; - ++index; - if (extra.comments) { - comment = source.slice(start + 2, index - 2); - loc.end = { - line: lineNumber, - column: index - lineStart - }; - addComment('Block', comment, start, index, loc); - } - return; - } - ++index; - } else { - ++index; - } - } - - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - - function skipComment() { - var ch, start; - - start = (index === 0); - while (index < length) { - ch = source.charCodeAt(index); - - if (isWhiteSpace(ch)) { - ++index; - } else if (isLineTerminator(ch)) { - ++index; - if (ch === 0x0D && source.charCodeAt(index) === 0x0A) { - ++index; - } - ++lineNumber; - lineStart = index; - start = true; - } else if (ch === 0x2F) { // U+002F is '/' - ch = source.charCodeAt(index + 1); - if (ch === 0x2F) { - ++index; - ++index; - skipSingleLineComment(2); - start = true; - } else if (ch === 0x2A) { // U+002A is '*' - ++index; - ++index; - skipMultiLineComment(); - } else { - break; - } - } else if (start && ch === 0x2D) { // U+002D is '-' - // U+003E is '>' - if ((source.charCodeAt(index + 1) === 0x2D) && (source.charCodeAt(index + 2) === 0x3E)) { - // '-->' is a single-line comment - index += 3; - skipSingleLineComment(3); - } else { - break; - } - } else if (ch === 0x3C) { // U+003C is '<' - if (source.slice(index + 1, index + 4) === '!--') { - ++index; // `<` - ++index; // `!` - ++index; // `-` - ++index; // `-` - skipSingleLineComment(4); - } else { - break; - } - } else { - break; - } - } - } - - function scanHexEscape(prefix) { - var i, len, ch, code = 0; - - len = (prefix === 'u') ? 4 : 2; - for (i = 0; i < len; ++i) { - if (index < length && isHexDigit(source[index])) { - ch = source[index++]; - code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase()); - } else { - return ''; - } - } - return String.fromCharCode(code); - } - - function getEscapedIdentifier() { - var ch, id; - - ch = source.charCodeAt(index++); - id = String.fromCharCode(ch); - - // '\u' (U+005C, U+0075) denotes an escaped character. - if (ch === 0x5C) { - if (source.charCodeAt(index) !== 0x75) { - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - ++index; - ch = scanHexEscape('u'); - if (!ch || ch === '\\' || !isIdentifierStart(ch.charCodeAt(0))) { - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - id = ch; - } - - while (index < length) { - ch = source.charCodeAt(index); - if (!isIdentifierPart(ch)) { - break; - } - ++index; - id += String.fromCharCode(ch); - - // '\u' (U+005C, U+0075) denotes an escaped character. - if (ch === 0x5C) { - id = id.substr(0, id.length - 1); - if (source.charCodeAt(index) !== 0x75) { - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - ++index; - ch = scanHexEscape('u'); - if (!ch || ch === '\\' || !isIdentifierPart(ch.charCodeAt(0))) { - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - id += ch; - } - } - - return id; - } - - function getIdentifier() { - var start, ch; - - start = index++; - while (index < length) { - ch = source.charCodeAt(index); - if (ch === 0x5C) { - // Blackslash (U+005C) marks Unicode escape sequence. - index = start; - return getEscapedIdentifier(); - } - if (isIdentifierPart(ch)) { - ++index; - } else { - break; - } - } - - return source.slice(start, index); - } - - function scanIdentifier() { - var start, id, type; - - start = index; - - // Backslash (U+005C) starts an escaped character. - id = (source.charCodeAt(index) === 0x5C) ? getEscapedIdentifier() : getIdentifier(); - - // There is no keyword or literal with only one character. - // Thus, it must be an identifier. - if (id.length === 1) { - type = Token.Identifier; - } else if (isKeyword(id)) { - type = Token.Keyword; - } else if (id === 'null') { - type = Token.NullLiteral; - } else if (id === 'true' || id === 'false') { - type = Token.BooleanLiteral; - } else { - type = Token.Identifier; - } - - return { - type: type, - value: id, - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - } - - - // 7.7 Punctuators - - function scanPunctuator() { - var start = index, - code = source.charCodeAt(index), - code2, - ch1 = source[index], - ch2, - ch3, - ch4; - - switch (code) { - - // Check for most common single-character punctuators. - case 0x2E: // . dot - case 0x28: // ( open bracket - case 0x29: // ) close bracket - case 0x3B: // ; semicolon - case 0x2C: // , comma - case 0x7B: // { open curly brace - case 0x7D: // } close curly brace - case 0x5B: // [ - case 0x5D: // ] - case 0x3A: // : - case 0x3F: // ? - case 0x7E: // ~ - ++index; - if (extra.tokenize) { - if (code === 0x28) { - extra.openParenToken = extra.tokens.length; - } else if (code === 0x7B) { - extra.openCurlyToken = extra.tokens.length; - } - } - return { - type: Token.Punctuator, - value: String.fromCharCode(code), - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - - default: - code2 = source.charCodeAt(index + 1); - - // '=' (U+003D) marks an assignment or comparison operator. - if (code2 === 0x3D) { - switch (code) { - case 0x2B: // + - case 0x2D: // - - case 0x2F: // / - case 0x3C: // < - case 0x3E: // > - case 0x5E: // ^ - case 0x7C: // | - case 0x25: // % - case 0x26: // & - case 0x2A: // * - index += 2; - return { - type: Token.Punctuator, - value: String.fromCharCode(code) + String.fromCharCode(code2), - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - - case 0x21: // ! - case 0x3D: // = - index += 2; - - // !== and === - if (source.charCodeAt(index) === 0x3D) { - ++index; - } - return { - type: Token.Punctuator, - value: source.slice(start, index), - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - } - } - } - - // 4-character punctuator: >>>= - - ch4 = source.substr(index, 4); - - if (ch4 === '>>>=') { - index += 4; - return { - type: Token.Punctuator, - value: ch4, - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - } - - // 3-character punctuators: === !== >>> <<= >>= - - ch3 = ch4.substr(0, 3); - - if (ch3 === '>>>' || ch3 === '<<=' || ch3 === '>>=') { - index += 3; - return { - type: Token.Punctuator, - value: ch3, - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - } - - // Other 2-character punctuators: ++ -- << >> && || - ch2 = ch3.substr(0, 2); - - if ((ch1 === ch2[1] && ('+-<>&|'.indexOf(ch1) >= 0)) || ch2 === '=>') { - index += 2; - return { - type: Token.Punctuator, - value: ch2, - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - } - - // 1-character punctuators: < > = ! + - * % & | ^ / - if ('<>=!+-*%&|^/'.indexOf(ch1) >= 0) { - ++index; - return { - type: Token.Punctuator, - value: ch1, - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - } - - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - - // 7.8.3 Numeric Literals - - function scanHexLiteral(start) { - var number = ''; - - while (index < length) { - if (!isHexDigit(source[index])) { - break; - } - number += source[index++]; - } - - if (number.length === 0) { - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - - if (isIdentifierStart(source.charCodeAt(index))) { - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - - return { - type: Token.NumericLiteral, - value: parseInt('0x' + number, 16), - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - } - - function scanOctalLiteral(start) { - var number = '0' + source[index++]; - while (index < length) { - if (!isOctalDigit(source[index])) { - break; - } - number += source[index++]; - } - - if (isIdentifierStart(source.charCodeAt(index)) || isDecimalDigit(source.charCodeAt(index))) { - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - - return { - type: Token.NumericLiteral, - value: parseInt(number, 8), - octal: true, - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - } - - function scanNumericLiteral() { - var number, start, ch; - - ch = source[index]; - assert(isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'), - 'Numeric literal must start with a decimal digit or a decimal point'); - - start = index; - number = ''; - if (ch !== '.') { - number = source[index++]; - ch = source[index]; - - // Hex number starts with '0x'. - // Octal number starts with '0'. - if (number === '0') { - if (ch === 'x' || ch === 'X') { - ++index; - return scanHexLiteral(start); - } - if (isOctalDigit(ch)) { - return scanOctalLiteral(start); - } - - // decimal number starts with '0' such as '09' is illegal. - if (ch && isDecimalDigit(ch.charCodeAt(0))) { - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - } - - while (isDecimalDigit(source.charCodeAt(index))) { - number += source[index++]; - } - ch = source[index]; - } - - if (ch === '.') { - number += source[index++]; - while (isDecimalDigit(source.charCodeAt(index))) { - number += source[index++]; - } - ch = source[index]; - } - - if (ch === 'e' || ch === 'E') { - number += source[index++]; - - ch = source[index]; - if (ch === '+' || ch === '-') { - number += source[index++]; - } - if (isDecimalDigit(source.charCodeAt(index))) { - while (isDecimalDigit(source.charCodeAt(index))) { - number += source[index++]; - } - } else { - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - } - - if (isIdentifierStart(source.charCodeAt(index))) { - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - - return { - type: Token.NumericLiteral, - value: parseFloat(number), - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - } - - // 7.8.4 String Literals - - function scanStringLiteral() { - var str = '', quote, start, ch, code, unescaped, restore, octal = false, startLineNumber, startLineStart; - startLineNumber = lineNumber; - startLineStart = lineStart; - - quote = source[index]; - assert((quote === '\'' || quote === '"'), - 'String literal must starts with a quote'); - - start = index; - ++index; - - while (index < length) { - ch = source[index++]; - - if (ch === quote) { - quote = ''; - break; - } else if (ch === '\\') { - ch = source[index++]; - if (!ch || !isLineTerminator(ch.charCodeAt(0))) { - switch (ch) { - case 'u': - case 'x': - restore = index; - unescaped = scanHexEscape(ch); - if (unescaped) { - str += unescaped; - } else { - index = restore; - str += ch; - } - break; - case 'n': - str += '\n'; - break; - case 'r': - str += '\r'; - break; - case 't': - str += '\t'; - break; - case 'b': - str += '\b'; - break; - case 'f': - str += '\f'; - break; - case 'v': - str += '\x0B'; - break; - - default: - if (isOctalDigit(ch)) { - code = '01234567'.indexOf(ch); - - // \0 is not octal escape sequence - if (code !== 0) { - octal = true; - } - - if (index < length && isOctalDigit(source[index])) { - octal = true; - code = code * 8 + '01234567'.indexOf(source[index++]); - - // 3 digits are only allowed when string starts - // with 0, 1, 2, 3 - if ('0123'.indexOf(ch) >= 0 && - index < length && - isOctalDigit(source[index])) { - code = code * 8 + '01234567'.indexOf(source[index++]); - } - } - str += String.fromCharCode(code); - } else { - str += ch; - } - break; - } - } else { - ++lineNumber; - if (ch === '\r' && source[index] === '\n') { - ++index; - } - lineStart = index; - } - } else if (isLineTerminator(ch.charCodeAt(0))) { - break; - } else { - str += ch; - } - } - - if (quote !== '') { - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - - return { - type: Token.StringLiteral, - value: str, - octal: octal, - startLineNumber: startLineNumber, - startLineStart: startLineStart, - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - } - - function testRegExp(pattern, flags) { - var value; - try { - value = new RegExp(pattern, flags); - } catch (e) { - throwError({}, Messages.InvalidRegExp); - } - return value; - } - - function scanRegExpBody() { - var ch, str, classMarker, terminated, body; - - ch = source[index]; - assert(ch === '/', 'Regular expression literal must start with a slash'); - str = source[index++]; - - classMarker = false; - terminated = false; - while (index < length) { - ch = source[index++]; - str += ch; - if (ch === '\\') { - ch = source[index++]; - // ECMA-262 7.8.5 - if (isLineTerminator(ch.charCodeAt(0))) { - throwError({}, Messages.UnterminatedRegExp); - } - str += ch; - } else if (isLineTerminator(ch.charCodeAt(0))) { - throwError({}, Messages.UnterminatedRegExp); - } else if (classMarker) { - if (ch === ']') { - classMarker = false; - } - } else { - if (ch === '/') { - terminated = true; - break; - } else if (ch === '[') { - classMarker = true; - } - } - } - - if (!terminated) { - throwError({}, Messages.UnterminatedRegExp); - } - - // Exclude leading and trailing slash. - body = str.substr(1, str.length - 2); - return { - value: body, - literal: str - }; - } - - function scanRegExpFlags() { - var ch, str, flags, restore; - - str = ''; - flags = ''; - while (index < length) { - ch = source[index]; - if (!isIdentifierPart(ch.charCodeAt(0))) { - break; - } - - ++index; - if (ch === '\\' && index < length) { - ch = source[index]; - if (ch === 'u') { - ++index; - restore = index; - ch = scanHexEscape('u'); - if (ch) { - flags += ch; - for (str += '\\u'; restore < index; ++restore) { - str += source[restore]; - } - } else { - index = restore; - flags += 'u'; - str += '\\u'; - } - throwErrorTolerant({}, Messages.UnexpectedToken, 'ILLEGAL'); - } else { - str += '\\'; - throwErrorTolerant({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - } else { - flags += ch; - str += ch; - } - } - - return { - value: flags, - literal: str - }; - } - - function scanRegExp() { - var start, body, flags, pattern, value; - - lookahead = null; - skipComment(); - start = index; - - body = scanRegExpBody(); - flags = scanRegExpFlags(); - value = testRegExp(body.value, flags.value); - - if (extra.tokenize) { - return { - type: Token.RegularExpression, - value: value, - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - } - - return { - literal: body.literal + flags.literal, - value: value, - start: start, - end: index - }; - } - - function collectRegex() { - var pos, loc, regex, token; - - skipComment(); - - pos = index; - loc = { - start: { - line: lineNumber, - column: index - lineStart - } - }; - - regex = scanRegExp(); - loc.end = { - line: lineNumber, - column: index - lineStart - }; - - /* istanbul ignore next */ - if (!extra.tokenize) { - // Pop the previous token, which is likely '/' or '/=' - if (extra.tokens.length > 0) { - token = extra.tokens[extra.tokens.length - 1]; - if (token.range[0] === pos && token.type === 'Punctuator') { - if (token.value === '/' || token.value === '/=') { - extra.tokens.pop(); - } - } - } - - extra.tokens.push({ - type: 'RegularExpression', - value: regex.literal, - range: [pos, index], - loc: loc - }); - } - - return regex; - } - - function isIdentifierName(token) { - return token.type === Token.Identifier || - token.type === Token.Keyword || - token.type === Token.BooleanLiteral || - token.type === Token.NullLiteral; - } - - function advanceSlash() { - var prevToken, - checkToken; - // Using the following algorithm: - // https://github.com/mozilla/sweet.js/wiki/design - prevToken = extra.tokens[extra.tokens.length - 1]; - if (!prevToken) { - // Nothing before that: it cannot be a division. - return collectRegex(); - } - if (prevToken.type === 'Punctuator') { - if (prevToken.value === ']') { - return scanPunctuator(); - } - if (prevToken.value === ')') { - checkToken = extra.tokens[extra.openParenToken - 1]; - if (checkToken && - checkToken.type === 'Keyword' && - (checkToken.value === 'if' || - checkToken.value === 'while' || - checkToken.value === 'for' || - checkToken.value === 'with')) { - return collectRegex(); - } - return scanPunctuator(); - } - if (prevToken.value === '}') { - // Dividing a function by anything makes little sense, - // but we have to check for that. - if (extra.tokens[extra.openCurlyToken - 3] && - extra.tokens[extra.openCurlyToken - 3].type === 'Keyword') { - // Anonymous function. - checkToken = extra.tokens[extra.openCurlyToken - 4]; - if (!checkToken) { - return scanPunctuator(); - } - } else if (extra.tokens[extra.openCurlyToken - 4] && - extra.tokens[extra.openCurlyToken - 4].type === 'Keyword') { - // Named function. - checkToken = extra.tokens[extra.openCurlyToken - 5]; - if (!checkToken) { - return collectRegex(); - } - } else { - return scanPunctuator(); - } - // checkToken determines whether the function is - // a declaration or an expression. - if (FnExprTokens.indexOf(checkToken.value) >= 0) { - // It is an expression. - return scanPunctuator(); - } - // It is a declaration. - return collectRegex(); - } - return collectRegex(); - } - if (prevToken.type === 'Keyword') { - return collectRegex(); - } - return scanPunctuator(); - } - - function advance() { - var ch; - - skipComment(); - - if (index >= length) { - return { - type: Token.EOF, - lineNumber: lineNumber, - lineStart: lineStart, - start: index, - end: index - }; - } - - ch = source.charCodeAt(index); - - if (isIdentifierStart(ch)) { - return scanIdentifier(); - } - - // Very common: ( and ) and ; - if (ch === 0x28 || ch === 0x29 || ch === 0x3B) { - return scanPunctuator(); - } - - // String literal starts with single quote (U+0027) or double quote (U+0022). - if (ch === 0x27 || ch === 0x22) { - return scanStringLiteral(); - } - - - // Dot (.) U+002E can also start a floating-point number, hence the need - // to check the next character. - if (ch === 0x2E) { - if (isDecimalDigit(source.charCodeAt(index + 1))) { - return scanNumericLiteral(); - } - return scanPunctuator(); - } - - if (isDecimalDigit(ch)) { - return scanNumericLiteral(); - } - - // Slash (/) U+002F can also start a regex. - if (extra.tokenize && ch === 0x2F) { - return advanceSlash(); - } - - return scanPunctuator(); - } - - function collectToken() { - var loc, token, range, value; - - skipComment(); - loc = { - start: { - line: lineNumber, - column: index - lineStart - } - }; - - token = advance(); - loc.end = { - line: lineNumber, - column: index - lineStart - }; - - if (token.type !== Token.EOF) { - value = source.slice(token.start, token.end); - extra.tokens.push({ - type: TokenName[token.type], - value: value, - range: [token.start, token.end], - loc: loc - }); - } - - return token; - } - - function lex() { - var token; - - token = lookahead; - index = token.end; - lineNumber = token.lineNumber; - lineStart = token.lineStart; - - lookahead = (typeof extra.tokens !== 'undefined') ? collectToken() : advance(); - - index = token.end; - lineNumber = token.lineNumber; - lineStart = token.lineStart; - - return token; - } - - function peek() { - var pos, line, start; - - pos = index; - line = lineNumber; - start = lineStart; - lookahead = (typeof extra.tokens !== 'undefined') ? collectToken() : advance(); - index = pos; - lineNumber = line; - lineStart = start; - } - - function Position(line, column) { - this.line = line; - this.column = column; - } - - function SourceLocation(startLine, startColumn, line, column) { - this.start = new Position(startLine, startColumn); - this.end = new Position(line, column); - } - - SyntaxTreeDelegate = { - - name: 'SyntaxTree', - - processComment: function (node) { - var lastChild, trailingComments; - - if (node.type === Syntax.Program) { - if (node.body.length > 0) { - return; - } - } - - if (extra.trailingComments.length > 0) { - if (extra.trailingComments[0].range[0] >= node.range[1]) { - trailingComments = extra.trailingComments; - extra.trailingComments = []; - } else { - extra.trailingComments.length = 0; - } - } else { - if (extra.bottomRightStack.length > 0 && - extra.bottomRightStack[extra.bottomRightStack.length - 1].trailingComments && - extra.bottomRightStack[extra.bottomRightStack.length - 1].trailingComments[0].range[0] >= node.range[1]) { - trailingComments = extra.bottomRightStack[extra.bottomRightStack.length - 1].trailingComments; - delete extra.bottomRightStack[extra.bottomRightStack.length - 1].trailingComments; - } - } - - // Eating the stack. - while (extra.bottomRightStack.length > 0 && extra.bottomRightStack[extra.bottomRightStack.length - 1].range[0] >= node.range[0]) { - lastChild = extra.bottomRightStack.pop(); - } - - if (lastChild) { - if (lastChild.leadingComments && lastChild.leadingComments[lastChild.leadingComments.length - 1].range[1] <= node.range[0]) { - node.leadingComments = lastChild.leadingComments; - delete lastChild.leadingComments; - } - } else if (extra.leadingComments.length > 0 && extra.leadingComments[extra.leadingComments.length - 1].range[1] <= node.range[0]) { - node.leadingComments = extra.leadingComments; - extra.leadingComments = []; - } - - - if (trailingComments) { - node.trailingComments = trailingComments; - } - - extra.bottomRightStack.push(node); - }, - - markEnd: function (node, startToken) { - if (extra.range) { - node.range = [startToken.start, index]; - } - if (extra.loc) { - node.loc = new SourceLocation( - startToken.startLineNumber === undefined ? startToken.lineNumber : startToken.startLineNumber, - startToken.start - (startToken.startLineStart === undefined ? startToken.lineStart : startToken.startLineStart), - lineNumber, - index - lineStart - ); - this.postProcess(node); - } - - if (extra.attachComment) { - this.processComment(node); - } - return node; - }, - - postProcess: function (node) { - if (extra.source) { - node.loc.source = extra.source; - } - return node; - }, - - createArrayExpression: function (elements) { - return { - type: Syntax.ArrayExpression, - elements: elements - }; - }, - - createAssignmentExpression: function (operator, left, right) { - return { - type: Syntax.AssignmentExpression, - operator: operator, - left: left, - right: right - }; - }, - - createBinaryExpression: function (operator, left, right) { - var type = (operator === '||' || operator === '&&') ? Syntax.LogicalExpression : - Syntax.BinaryExpression; - return { - type: type, - operator: operator, - left: left, - right: right - }; - }, - - createBlockStatement: function (body) { - return { - type: Syntax.BlockStatement, - body: body - }; - }, - - createBreakStatement: function (label) { - return { - type: Syntax.BreakStatement, - label: label - }; - }, - - createCallExpression: function (callee, args) { - return { - type: Syntax.CallExpression, - callee: callee, - 'arguments': args - }; - }, - - createCatchClause: function (param, body) { - return { - type: Syntax.CatchClause, - param: param, - body: body - }; - }, - - createConditionalExpression: function (test, consequent, alternate) { - return { - type: Syntax.ConditionalExpression, - test: test, - consequent: consequent, - alternate: alternate - }; - }, - - createContinueStatement: function (label) { - return { - type: Syntax.ContinueStatement, - label: label - }; - }, - - createDebuggerStatement: function () { - return { - type: Syntax.DebuggerStatement - }; - }, - - createDoWhileStatement: function (body, test) { - return { - type: Syntax.DoWhileStatement, - body: body, - test: test - }; - }, - - createEmptyStatement: function () { - return { - type: Syntax.EmptyStatement - }; - }, - - createExpressionStatement: function (expression) { - return { - type: Syntax.ExpressionStatement, - expression: expression - }; - }, - - createForStatement: function (init, test, update, body) { - return { - type: Syntax.ForStatement, - init: init, - test: test, - update: update, - body: body - }; - }, - - createForInStatement: function (left, right, body) { - return { - type: Syntax.ForInStatement, - left: left, - right: right, - body: body, - each: false - }; - }, - - createFunctionDeclaration: function (id, params, defaults, body) { - return { - type: Syntax.FunctionDeclaration, - id: id, - params: params, - defaults: defaults, - body: body, - rest: null, - generator: false, - expression: false - }; - }, - - createFunctionExpression: function (id, params, defaults, body) { - return { - type: Syntax.FunctionExpression, - id: id, - params: params, - defaults: defaults, - body: body, - rest: null, - generator: false, - expression: false - }; - }, - - createIdentifier: function (name) { - return { - type: Syntax.Identifier, - name: name - }; - }, - - createIfStatement: function (test, consequent, alternate) { - return { - type: Syntax.IfStatement, - test: test, - consequent: consequent, - alternate: alternate - }; - }, - - createLabeledStatement: function (label, body) { - return { - type: Syntax.LabeledStatement, - label: label, - body: body - }; - }, - - createLiteral: function (token) { - return { - type: Syntax.Literal, - value: token.value, - raw: source.slice(token.start, token.end) - }; - }, - - createMemberExpression: function (accessor, object, property) { - return { - type: Syntax.MemberExpression, - computed: accessor === '[', - object: object, - property: property - }; - }, - - createNewExpression: function (callee, args) { - return { - type: Syntax.NewExpression, - callee: callee, - 'arguments': args - }; - }, - - createObjectExpression: function (properties) { - return { - type: Syntax.ObjectExpression, - properties: properties - }; - }, - - createPostfixExpression: function (operator, argument) { - return { - type: Syntax.UpdateExpression, - operator: operator, - argument: argument, - prefix: false - }; - }, - - createProgram: function (body) { - return { - type: Syntax.Program, - body: body - }; - }, - - createProperty: function (kind, key, value) { - return { - type: Syntax.Property, - key: key, - value: value, - kind: kind - }; - }, - - createReturnStatement: function (argument) { - return { - type: Syntax.ReturnStatement, - argument: argument - }; - }, - - createSequenceExpression: function (expressions) { - return { - type: Syntax.SequenceExpression, - expressions: expressions - }; - }, - - createSwitchCase: function (test, consequent) { - return { - type: Syntax.SwitchCase, - test: test, - consequent: consequent - }; - }, - - createSwitchStatement: function (discriminant, cases) { - return { - type: Syntax.SwitchStatement, - discriminant: discriminant, - cases: cases - }; - }, - - createThisExpression: function () { - return { - type: Syntax.ThisExpression - }; - }, - - createThrowStatement: function (argument) { - return { - type: Syntax.ThrowStatement, - argument: argument - }; - }, - - createTryStatement: function (block, guardedHandlers, handlers, finalizer) { - return { - type: Syntax.TryStatement, - block: block, - guardedHandlers: guardedHandlers, - handlers: handlers, - finalizer: finalizer - }; - }, - - createUnaryExpression: function (operator, argument) { - if (operator === '++' || operator === '--') { - return { - type: Syntax.UpdateExpression, - operator: operator, - argument: argument, - prefix: true - }; - } - return { - type: Syntax.UnaryExpression, - operator: operator, - argument: argument, - prefix: true - }; - }, - - createVariableDeclaration: function (declarations, kind) { - return { - type: Syntax.VariableDeclaration, - declarations: declarations, - kind: kind - }; - }, - - createVariableDeclarator: function (id, init) { - return { - type: Syntax.VariableDeclarator, - id: id, - init: init - }; - }, - - createWhileStatement: function (test, body) { - return { - type: Syntax.WhileStatement, - test: test, - body: body - }; - }, - - createWithStatement: function (object, body) { - return { - type: Syntax.WithStatement, - object: object, - body: body - }; - } - }; - - // Return true if there is a line terminator before the next token. - - function peekLineTerminator() { - var pos, line, start, found; - - pos = index; - line = lineNumber; - start = lineStart; - skipComment(); - found = lineNumber !== line; - index = pos; - lineNumber = line; - lineStart = start; - - return found; - } - - // Throw an exception - - function throwError(token, messageFormat) { - var error, - args = Array.prototype.slice.call(arguments, 2), - msg = messageFormat.replace( - /%(\d)/g, - function (whole, index) { - assert(index < args.length, 'Message reference must be in range'); - return args[index]; - } - ); - - if (typeof token.lineNumber === 'number') { - error = new Error('Line ' + token.lineNumber + ': ' + msg); - error.index = token.start; - error.lineNumber = token.lineNumber; - error.column = token.start - lineStart + 1; - } else { - error = new Error('Line ' + lineNumber + ': ' + msg); - error.index = index; - error.lineNumber = lineNumber; - error.column = index - lineStart + 1; - } - - error.description = msg; - throw error; - } - - function throwErrorTolerant() { - try { - throwError.apply(null, arguments); - } catch (e) { - if (extra.errors) { - extra.errors.push(e); - } else { - throw e; - } - } - } - - - // Throw an exception because of the token. - - function throwUnexpected(token) { - if (token.type === Token.EOF) { - throwError(token, Messages.UnexpectedEOS); - } - - if (token.type === Token.NumericLiteral) { - throwError(token, Messages.UnexpectedNumber); - } - - if (token.type === Token.StringLiteral) { - throwError(token, Messages.UnexpectedString); - } - - if (token.type === Token.Identifier) { - throwError(token, Messages.UnexpectedIdentifier); - } - - if (token.type === Token.Keyword) { - if (isFutureReservedWord(token.value)) { - throwError(token, Messages.UnexpectedReserved); - } else if (strict && isStrictModeReservedWord(token.value)) { - throwErrorTolerant(token, Messages.StrictReservedWord); - return; - } - throwError(token, Messages.UnexpectedToken, token.value); - } - - // BooleanLiteral, NullLiteral, or Punctuator. - throwError(token, Messages.UnexpectedToken, token.value); - } - - // Expect the next token to match the specified punctuator. - // If not, an exception will be thrown. - - function expect(value) { - var token = lex(); - if (token.type !== Token.Punctuator || token.value !== value) { - throwUnexpected(token); - } - } - - // Expect the next token to match the specified keyword. - // If not, an exception will be thrown. - - function expectKeyword(keyword) { - var token = lex(); - if (token.type !== Token.Keyword || token.value !== keyword) { - throwUnexpected(token); - } - } - - // Return true if the next token matches the specified punctuator. - - function match(value) { - return lookahead.type === Token.Punctuator && lookahead.value === value; - } - - // Return true if the next token matches the specified keyword - - function matchKeyword(keyword) { - return lookahead.type === Token.Keyword && lookahead.value === keyword; - } - - // Return true if the next token is an assignment operator - - function matchAssign() { - var op; - - if (lookahead.type !== Token.Punctuator) { - return false; - } - op = lookahead.value; - return op === '=' || - op === '*=' || - op === '/=' || - op === '%=' || - op === '+=' || - op === '-=' || - op === '<<=' || - op === '>>=' || - op === '>>>=' || - op === '&=' || - op === '^=' || - op === '|='; - } - - function consumeSemicolon() { - var line; - - // Catch the very common case first: immediately a semicolon (U+003B). - if (source.charCodeAt(index) === 0x3B || match(';')) { - lex(); - return; - } - - line = lineNumber; - skipComment(); - if (lineNumber !== line) { - return; - } - - if (lookahead.type !== Token.EOF && !match('}')) { - throwUnexpected(lookahead); - } - } - - // Return true if provided expression is LeftHandSideExpression - - function isLeftHandSide(expr) { - return expr.type === Syntax.Identifier || expr.type === Syntax.MemberExpression; - } - - // 11.1.4 Array Initialiser - - function parseArrayInitialiser() { - var elements = [], startToken; - - startToken = lookahead; - expect('['); - - while (!match(']')) { - if (match(',')) { - lex(); - elements.push(null); - } else { - elements.push(parseAssignmentExpression()); - - if (!match(']')) { - expect(','); - } - } - } - - lex(); - - return delegate.markEnd(delegate.createArrayExpression(elements), startToken); - } - - // 11.1.5 Object Initialiser - - function parsePropertyFunction(param, first) { - var previousStrict, body, startToken; - - previousStrict = strict; - startToken = lookahead; - body = parseFunctionSourceElements(); - if (first && strict && isRestrictedWord(param[0].name)) { - throwErrorTolerant(first, Messages.StrictParamName); - } - strict = previousStrict; - return delegate.markEnd(delegate.createFunctionExpression(null, param, [], body), startToken); - } - - function parseObjectPropertyKey() { - var token, startToken; - - startToken = lookahead; - token = lex(); - - // Note: This function is called only from parseObjectProperty(), where - // EOF and Punctuator tokens are already filtered out. - - if (token.type === Token.StringLiteral || token.type === Token.NumericLiteral) { - if (strict && token.octal) { - throwErrorTolerant(token, Messages.StrictOctalLiteral); - } - return delegate.markEnd(delegate.createLiteral(token), startToken); - } - - return delegate.markEnd(delegate.createIdentifier(token.value), startToken); - } - - function parseObjectProperty() { - var token, key, id, value, param, startToken; - - token = lookahead; - startToken = lookahead; - - if (token.type === Token.Identifier) { - - id = parseObjectPropertyKey(); - - // Property Assignment: Getter and Setter. - - if (token.value === 'get' && !match(':')) { - key = parseObjectPropertyKey(); - expect('('); - expect(')'); - value = parsePropertyFunction([]); - return delegate.markEnd(delegate.createProperty('get', key, value), startToken); - } - if (token.value === 'set' && !match(':')) { - key = parseObjectPropertyKey(); - expect('('); - token = lookahead; - if (token.type !== Token.Identifier) { - expect(')'); - throwErrorTolerant(token, Messages.UnexpectedToken, token.value); - value = parsePropertyFunction([]); - } else { - param = [ parseVariableIdentifier() ]; - expect(')'); - value = parsePropertyFunction(param, token); - } - return delegate.markEnd(delegate.createProperty('set', key, value), startToken); - } - expect(':'); - value = parseAssignmentExpression(); - return delegate.markEnd(delegate.createProperty('init', id, value), startToken); - } - if (token.type === Token.EOF || token.type === Token.Punctuator) { - throwUnexpected(token); - } else { - key = parseObjectPropertyKey(); - expect(':'); - value = parseAssignmentExpression(); - return delegate.markEnd(delegate.createProperty('init', key, value), startToken); - } - } - - function parseObjectInitialiser() { - var properties = [], property, name, key, kind, map = {}, toString = String, startToken; - - startToken = lookahead; - - expect('{'); - - while (!match('}')) { - property = parseObjectProperty(); - - if (property.key.type === Syntax.Identifier) { - name = property.key.name; - } else { - name = toString(property.key.value); - } - kind = (property.kind === 'init') ? PropertyKind.Data : (property.kind === 'get') ? PropertyKind.Get : PropertyKind.Set; - - key = '$' + name; - if (Object.prototype.hasOwnProperty.call(map, key)) { - if (map[key] === PropertyKind.Data) { - if (strict && kind === PropertyKind.Data) { - throwErrorTolerant({}, Messages.StrictDuplicateProperty); - } else if (kind !== PropertyKind.Data) { - throwErrorTolerant({}, Messages.AccessorDataProperty); - } - } else { - if (kind === PropertyKind.Data) { - throwErrorTolerant({}, Messages.AccessorDataProperty); - } else if (map[key] & kind) { - throwErrorTolerant({}, Messages.AccessorGetSet); - } - } - map[key] |= kind; - } else { - map[key] = kind; - } - - properties.push(property); - - if (!match('}')) { - expect(','); - } - } - - expect('}'); - - return delegate.markEnd(delegate.createObjectExpression(properties), startToken); - } - - // 11.1.6 The Grouping Operator - - function parseGroupExpression() { - var expr; - - expect('('); - - expr = parseExpression(); - - expect(')'); - - return expr; - } - - - // 11.1 Primary Expressions - - function parsePrimaryExpression() { - var type, token, expr, startToken; - - if (match('(')) { - return parseGroupExpression(); - } - - if (match('[')) { - return parseArrayInitialiser(); - } - - if (match('{')) { - return parseObjectInitialiser(); - } - - type = lookahead.type; - startToken = lookahead; - - if (type === Token.Identifier) { - expr = delegate.createIdentifier(lex().value); - } else if (type === Token.StringLiteral || type === Token.NumericLiteral) { - if (strict && lookahead.octal) { - throwErrorTolerant(lookahead, Messages.StrictOctalLiteral); - } - expr = delegate.createLiteral(lex()); - } else if (type === Token.Keyword) { - if (matchKeyword('function')) { - return parseFunctionExpression(); - } - if (matchKeyword('this')) { - lex(); - expr = delegate.createThisExpression(); - } else { - throwUnexpected(lex()); - } - } else if (type === Token.BooleanLiteral) { - token = lex(); - token.value = (token.value === 'true'); - expr = delegate.createLiteral(token); - } else if (type === Token.NullLiteral) { - token = lex(); - token.value = null; - expr = delegate.createLiteral(token); - } else if (match('/') || match('/=')) { - if (typeof extra.tokens !== 'undefined') { - expr = delegate.createLiteral(collectRegex()); - } else { - expr = delegate.createLiteral(scanRegExp()); - } - peek(); - } else { - throwUnexpected(lex()); - } - - return delegate.markEnd(expr, startToken); - } - - // 11.2 Left-Hand-Side Expressions - - function parseArguments() { - var args = []; - - expect('('); - - if (!match(')')) { - while (index < length) { - args.push(parseAssignmentExpression()); - if (match(')')) { - break; - } - expect(','); - } - } - - expect(')'); - - return args; - } - - function parseNonComputedProperty() { - var token, startToken; - - startToken = lookahead; - token = lex(); - - if (!isIdentifierName(token)) { - throwUnexpected(token); - } - - return delegate.markEnd(delegate.createIdentifier(token.value), startToken); - } - - function parseNonComputedMember() { - expect('.'); - - return parseNonComputedProperty(); - } - - function parseComputedMember() { - var expr; - - expect('['); - - expr = parseExpression(); - - expect(']'); - - return expr; - } - - function parseNewExpression() { - var callee, args, startToken; - - startToken = lookahead; - expectKeyword('new'); - callee = parseLeftHandSideExpression(); - args = match('(') ? parseArguments() : []; - - return delegate.markEnd(delegate.createNewExpression(callee, args), startToken); - } - - function parseLeftHandSideExpressionAllowCall() { - var previousAllowIn, expr, args, property, startToken; - - startToken = lookahead; - - previousAllowIn = state.allowIn; - state.allowIn = true; - expr = matchKeyword('new') ? parseNewExpression() : parsePrimaryExpression(); - state.allowIn = previousAllowIn; - - for (;;) { - if (match('.')) { - property = parseNonComputedMember(); - expr = delegate.createMemberExpression('.', expr, property); - } else if (match('(')) { - args = parseArguments(); - expr = delegate.createCallExpression(expr, args); - } else if (match('[')) { - property = parseComputedMember(); - expr = delegate.createMemberExpression('[', expr, property); - } else { - break; - } - delegate.markEnd(expr, startToken); - } - - return expr; - } - - function parseLeftHandSideExpression() { - var previousAllowIn, expr, property, startToken; - - startToken = lookahead; - - previousAllowIn = state.allowIn; - expr = matchKeyword('new') ? parseNewExpression() : parsePrimaryExpression(); - state.allowIn = previousAllowIn; - - while (match('.') || match('[')) { - if (match('[')) { - property = parseComputedMember(); - expr = delegate.createMemberExpression('[', expr, property); - } else { - property = parseNonComputedMember(); - expr = delegate.createMemberExpression('.', expr, property); - } - delegate.markEnd(expr, startToken); - } - - return expr; - } - - // 11.3 Postfix Expressions - - function parsePostfixExpression() { - var expr, token, startToken = lookahead; - - expr = parseLeftHandSideExpressionAllowCall(); - - if (lookahead.type === Token.Punctuator) { - if ((match('++') || match('--')) && !peekLineTerminator()) { - // 11.3.1, 11.3.2 - if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) { - throwErrorTolerant({}, Messages.StrictLHSPostfix); - } - - if (!isLeftHandSide(expr)) { - throwErrorTolerant({}, Messages.InvalidLHSInAssignment); - } - - token = lex(); - expr = delegate.markEnd(delegate.createPostfixExpression(token.value, expr), startToken); - } - } - - return expr; - } - - // 11.4 Unary Operators - - function parseUnaryExpression() { - var token, expr, startToken; - - if (lookahead.type !== Token.Punctuator && lookahead.type !== Token.Keyword) { - expr = parsePostfixExpression(); - } else if (match('++') || match('--')) { - startToken = lookahead; - token = lex(); - expr = parseUnaryExpression(); - // 11.4.4, 11.4.5 - if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) { - throwErrorTolerant({}, Messages.StrictLHSPrefix); - } - - if (!isLeftHandSide(expr)) { - throwErrorTolerant({}, Messages.InvalidLHSInAssignment); - } - - expr = delegate.createUnaryExpression(token.value, expr); - expr = delegate.markEnd(expr, startToken); - } else if (match('+') || match('-') || match('~') || match('!')) { - startToken = lookahead; - token = lex(); - expr = parseUnaryExpression(); - expr = delegate.createUnaryExpression(token.value, expr); - expr = delegate.markEnd(expr, startToken); - } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) { - startToken = lookahead; - token = lex(); - expr = parseUnaryExpression(); - expr = delegate.createUnaryExpression(token.value, expr); - expr = delegate.markEnd(expr, startToken); - if (strict && expr.operator === 'delete' && expr.argument.type === Syntax.Identifier) { - throwErrorTolerant({}, Messages.StrictDelete); - } - } else { - expr = parsePostfixExpression(); - } - - return expr; - } - - function binaryPrecedence(token, allowIn) { - var prec = 0; - - if (token.type !== Token.Punctuator && token.type !== Token.Keyword) { - return 0; - } - - switch (token.value) { - case '||': - prec = 1; - break; - - case '&&': - prec = 2; - break; - - case '|': - prec = 3; - break; - - case '^': - prec = 4; - break; - - case '&': - prec = 5; - break; - - case '==': - case '!=': - case '===': - case '!==': - prec = 6; - break; - - case '<': - case '>': - case '<=': - case '>=': - case 'instanceof': - prec = 7; - break; - - case 'in': - prec = allowIn ? 7 : 0; - break; - - case '<<': - case '>>': - case '>>>': - prec = 8; - break; - - case '+': - case '-': - prec = 9; - break; - - case '*': - case '/': - case '%': - prec = 11; - break; - - default: - break; - } - - return prec; - } - - // 11.5 Multiplicative Operators - // 11.6 Additive Operators - // 11.7 Bitwise Shift Operators - // 11.8 Relational Operators - // 11.9 Equality Operators - // 11.10 Binary Bitwise Operators - // 11.11 Binary Logical Operators - - function parseBinaryExpression() { - var marker, markers, expr, token, prec, stack, right, operator, left, i; - - marker = lookahead; - left = parseUnaryExpression(); - - token = lookahead; - prec = binaryPrecedence(token, state.allowIn); - if (prec === 0) { - return left; - } - token.prec = prec; - lex(); - - markers = [marker, lookahead]; - right = parseUnaryExpression(); - - stack = [left, token, right]; - - while ((prec = binaryPrecedence(lookahead, state.allowIn)) > 0) { - - // Reduce: make a binary expression from the three topmost entries. - while ((stack.length > 2) && (prec <= stack[stack.length - 2].prec)) { - right = stack.pop(); - operator = stack.pop().value; - left = stack.pop(); - expr = delegate.createBinaryExpression(operator, left, right); - markers.pop(); - marker = markers[markers.length - 1]; - delegate.markEnd(expr, marker); - stack.push(expr); - } - - // Shift. - token = lex(); - token.prec = prec; - stack.push(token); - markers.push(lookahead); - expr = parseUnaryExpression(); - stack.push(expr); - } - - // Final reduce to clean-up the stack. - i = stack.length - 1; - expr = stack[i]; - markers.pop(); - while (i > 1) { - expr = delegate.createBinaryExpression(stack[i - 1].value, stack[i - 2], expr); - i -= 2; - marker = markers.pop(); - delegate.markEnd(expr, marker); - } - - return expr; - } - - - // 11.12 Conditional Operator - - function parseConditionalExpression() { - var expr, previousAllowIn, consequent, alternate, startToken; - - startToken = lookahead; - - expr = parseBinaryExpression(); - - if (match('?')) { - lex(); - previousAllowIn = state.allowIn; - state.allowIn = true; - consequent = parseAssignmentExpression(); - state.allowIn = previousAllowIn; - expect(':'); - alternate = parseAssignmentExpression(); - - expr = delegate.createConditionalExpression(expr, consequent, alternate); - delegate.markEnd(expr, startToken); - } - - return expr; - } - - // 11.13 Assignment Operators - - function parseAssignmentExpression() { - var token, left, right, node, startToken; - - token = lookahead; - startToken = lookahead; - - node = left = parseConditionalExpression(); - - if (matchAssign()) { - // LeftHandSideExpression - if (!isLeftHandSide(left)) { - throwErrorTolerant({}, Messages.InvalidLHSInAssignment); - } - - // 11.13.1 - if (strict && left.type === Syntax.Identifier && isRestrictedWord(left.name)) { - throwErrorTolerant(token, Messages.StrictLHSAssignment); - } - - token = lex(); - right = parseAssignmentExpression(); - node = delegate.markEnd(delegate.createAssignmentExpression(token.value, left, right), startToken); - } - - return node; - } - - // 11.14 Comma Operator - - function parseExpression() { - var expr, startToken = lookahead; - - expr = parseAssignmentExpression(); - - if (match(',')) { - expr = delegate.createSequenceExpression([ expr ]); - - while (index < length) { - if (!match(',')) { - break; - } - lex(); - expr.expressions.push(parseAssignmentExpression()); - } - - delegate.markEnd(expr, startToken); - } - - return expr; - } - - // 12.1 Block - - function parseStatementList() { - var list = [], - statement; - - while (index < length) { - if (match('}')) { - break; - } - statement = parseSourceElement(); - if (typeof statement === 'undefined') { - break; - } - list.push(statement); - } - - return list; - } - - function parseBlock() { - var block, startToken; - - startToken = lookahead; - expect('{'); - - block = parseStatementList(); - - expect('}'); - - return delegate.markEnd(delegate.createBlockStatement(block), startToken); - } - - // 12.2 Variable Statement - - function parseVariableIdentifier() { - var token, startToken; - - startToken = lookahead; - token = lex(); - - if (token.type !== Token.Identifier) { - throwUnexpected(token); - } - - return delegate.markEnd(delegate.createIdentifier(token.value), startToken); - } - - function parseVariableDeclaration(kind) { - var init = null, id, startToken; - - startToken = lookahead; - id = parseVariableIdentifier(); - - // 12.2.1 - if (strict && isRestrictedWord(id.name)) { - throwErrorTolerant({}, Messages.StrictVarName); - } - - if (kind === 'const') { - expect('='); - init = parseAssignmentExpression(); - } else if (match('=')) { - lex(); - init = parseAssignmentExpression(); - } - - return delegate.markEnd(delegate.createVariableDeclarator(id, init), startToken); - } - - function parseVariableDeclarationList(kind) { - var list = []; - - do { - list.push(parseVariableDeclaration(kind)); - if (!match(',')) { - break; - } - lex(); - } while (index < length); - - return list; - } - - function parseVariableStatement() { - var declarations; - - expectKeyword('var'); - - declarations = parseVariableDeclarationList(); - - consumeSemicolon(); - - return delegate.createVariableDeclaration(declarations, 'var'); - } - - // kind may be `const` or `let` - // Both are experimental and not in the specification yet. - // see http://wiki.ecmascript.org/doku.php?id=harmony:const - // and http://wiki.ecmascript.org/doku.php?id=harmony:let - function parseConstLetDeclaration(kind) { - var declarations, startToken; - - startToken = lookahead; - - expectKeyword(kind); - - declarations = parseVariableDeclarationList(kind); - - consumeSemicolon(); - - return delegate.markEnd(delegate.createVariableDeclaration(declarations, kind), startToken); - } - - // 12.3 Empty Statement - - function parseEmptyStatement() { - expect(';'); - return delegate.createEmptyStatement(); - } - - // 12.4 Expression Statement - - function parseExpressionStatement() { - var expr = parseExpression(); - consumeSemicolon(); - return delegate.createExpressionStatement(expr); - } - - // 12.5 If statement - - function parseIfStatement() { - var test, consequent, alternate; - - expectKeyword('if'); - - expect('('); - - test = parseExpression(); - - expect(')'); - - consequent = parseStatement(); - - if (matchKeyword('else')) { - lex(); - alternate = parseStatement(); - } else { - alternate = null; - } - - return delegate.createIfStatement(test, consequent, alternate); - } - - // 12.6 Iteration Statements - - function parseDoWhileStatement() { - var body, test, oldInIteration; - - expectKeyword('do'); - - oldInIteration = state.inIteration; - state.inIteration = true; - - body = parseStatement(); - - state.inIteration = oldInIteration; - - expectKeyword('while'); - - expect('('); - - test = parseExpression(); - - expect(')'); - - if (match(';')) { - lex(); - } - - return delegate.createDoWhileStatement(body, test); - } - - function parseWhileStatement() { - var test, body, oldInIteration; - - expectKeyword('while'); - - expect('('); - - test = parseExpression(); - - expect(')'); - - oldInIteration = state.inIteration; - state.inIteration = true; - - body = parseStatement(); - - state.inIteration = oldInIteration; - - return delegate.createWhileStatement(test, body); - } - - function parseForVariableDeclaration() { - var token, declarations, startToken; - - startToken = lookahead; - token = lex(); - declarations = parseVariableDeclarationList(); - - return delegate.markEnd(delegate.createVariableDeclaration(declarations, token.value), startToken); - } - - function parseForStatement() { - var init, test, update, left, right, body, oldInIteration; - - init = test = update = null; - - expectKeyword('for'); - - expect('('); - - if (match(';')) { - lex(); - } else { - if (matchKeyword('var') || matchKeyword('let')) { - state.allowIn = false; - init = parseForVariableDeclaration(); - state.allowIn = true; - - if (init.declarations.length === 1 && matchKeyword('in')) { - lex(); - left = init; - right = parseExpression(); - init = null; - } - } else { - state.allowIn = false; - init = parseExpression(); - state.allowIn = true; - - if (matchKeyword('in')) { - // LeftHandSideExpression - if (!isLeftHandSide(init)) { - throwErrorTolerant({}, Messages.InvalidLHSInForIn); - } - - lex(); - left = init; - right = parseExpression(); - init = null; - } - } - - if (typeof left === 'undefined') { - expect(';'); - } - } - - if (typeof left === 'undefined') { - - if (!match(';')) { - test = parseExpression(); - } - expect(';'); - - if (!match(')')) { - update = parseExpression(); - } - } - - expect(')'); - - oldInIteration = state.inIteration; - state.inIteration = true; - - body = parseStatement(); - - state.inIteration = oldInIteration; - - return (typeof left === 'undefined') ? - delegate.createForStatement(init, test, update, body) : - delegate.createForInStatement(left, right, body); - } - - // 12.7 The continue statement - - function parseContinueStatement() { - var label = null, key; - - expectKeyword('continue'); - - // Optimize the most common form: 'continue;'. - if (source.charCodeAt(index) === 0x3B) { - lex(); - - if (!state.inIteration) { - throwError({}, Messages.IllegalContinue); - } - - return delegate.createContinueStatement(null); - } - - if (peekLineTerminator()) { - if (!state.inIteration) { - throwError({}, Messages.IllegalContinue); - } - - return delegate.createContinueStatement(null); - } - - if (lookahead.type === Token.Identifier) { - label = parseVariableIdentifier(); - - key = '$' + label.name; - if (!Object.prototype.hasOwnProperty.call(state.labelSet, key)) { - throwError({}, Messages.UnknownLabel, label.name); - } - } - - consumeSemicolon(); - - if (label === null && !state.inIteration) { - throwError({}, Messages.IllegalContinue); - } - - return delegate.createContinueStatement(label); - } - - // 12.8 The break statement - - function parseBreakStatement() { - var label = null, key; - - expectKeyword('break'); - - // Catch the very common case first: immediately a semicolon (U+003B). - if (source.charCodeAt(index) === 0x3B) { - lex(); - - if (!(state.inIteration || state.inSwitch)) { - throwError({}, Messages.IllegalBreak); - } - - return delegate.createBreakStatement(null); - } - - if (peekLineTerminator()) { - if (!(state.inIteration || state.inSwitch)) { - throwError({}, Messages.IllegalBreak); - } - - return delegate.createBreakStatement(null); - } - - if (lookahead.type === Token.Identifier) { - label = parseVariableIdentifier(); - - key = '$' + label.name; - if (!Object.prototype.hasOwnProperty.call(state.labelSet, key)) { - throwError({}, Messages.UnknownLabel, label.name); - } - } - - consumeSemicolon(); - - if (label === null && !(state.inIteration || state.inSwitch)) { - throwError({}, Messages.IllegalBreak); - } - - return delegate.createBreakStatement(label); - } - - // 12.9 The return statement - - function parseReturnStatement() { - var argument = null; - - expectKeyword('return'); - - if (!state.inFunctionBody) { - throwErrorTolerant({}, Messages.IllegalReturn); - } - - // 'return' followed by a space and an identifier is very common. - if (source.charCodeAt(index) === 0x20) { - if (isIdentifierStart(source.charCodeAt(index + 1))) { - argument = parseExpression(); - consumeSemicolon(); - return delegate.createReturnStatement(argument); - } - } - - if (peekLineTerminator()) { - return delegate.createReturnStatement(null); - } - - if (!match(';')) { - if (!match('}') && lookahead.type !== Token.EOF) { - argument = parseExpression(); - } - } - - consumeSemicolon(); - - return delegate.createReturnStatement(argument); - } - - // 12.10 The with statement - - function parseWithStatement() { - var object, body; - - if (strict) { - // TODO(ikarienator): Should we update the test cases instead? - skipComment(); - throwErrorTolerant({}, Messages.StrictModeWith); - } - - expectKeyword('with'); - - expect('('); - - object = parseExpression(); - - expect(')'); - - body = parseStatement(); - - return delegate.createWithStatement(object, body); - } - - // 12.10 The swith statement - - function parseSwitchCase() { - var test, consequent = [], statement, startToken; - - startToken = lookahead; - if (matchKeyword('default')) { - lex(); - test = null; - } else { - expectKeyword('case'); - test = parseExpression(); - } - expect(':'); - - while (index < length) { - if (match('}') || matchKeyword('default') || matchKeyword('case')) { - break; - } - statement = parseStatement(); - consequent.push(statement); - } - - return delegate.markEnd(delegate.createSwitchCase(test, consequent), startToken); - } - - function parseSwitchStatement() { - var discriminant, cases, clause, oldInSwitch, defaultFound; - - expectKeyword('switch'); - - expect('('); - - discriminant = parseExpression(); - - expect(')'); - - expect('{'); - - cases = []; - - if (match('}')) { - lex(); - return delegate.createSwitchStatement(discriminant, cases); - } - - oldInSwitch = state.inSwitch; - state.inSwitch = true; - defaultFound = false; - - while (index < length) { - if (match('}')) { - break; - } - clause = parseSwitchCase(); - if (clause.test === null) { - if (defaultFound) { - throwError({}, Messages.MultipleDefaultsInSwitch); - } - defaultFound = true; - } - cases.push(clause); - } - - state.inSwitch = oldInSwitch; - - expect('}'); - - return delegate.createSwitchStatement(discriminant, cases); - } - - // 12.13 The throw statement - - function parseThrowStatement() { - var argument; - - expectKeyword('throw'); - - if (peekLineTerminator()) { - throwError({}, Messages.NewlineAfterThrow); - } - - argument = parseExpression(); - - consumeSemicolon(); - - return delegate.createThrowStatement(argument); - } - - // 12.14 The try statement - - function parseCatchClause() { - var param, body, startToken; - - startToken = lookahead; - expectKeyword('catch'); - - expect('('); - if (match(')')) { - throwUnexpected(lookahead); - } - - param = parseVariableIdentifier(); - // 12.14.1 - if (strict && isRestrictedWord(param.name)) { - throwErrorTolerant({}, Messages.StrictCatchVariable); - } - - expect(')'); - body = parseBlock(); - return delegate.markEnd(delegate.createCatchClause(param, body), startToken); - } - - function parseTryStatement() { - var block, handlers = [], finalizer = null; - - expectKeyword('try'); - - block = parseBlock(); - - if (matchKeyword('catch')) { - handlers.push(parseCatchClause()); - } - - if (matchKeyword('finally')) { - lex(); - finalizer = parseBlock(); - } - - if (handlers.length === 0 && !finalizer) { - throwError({}, Messages.NoCatchOrFinally); - } - - return delegate.createTryStatement(block, [], handlers, finalizer); - } - - // 12.15 The debugger statement - - function parseDebuggerStatement() { - expectKeyword('debugger'); - - consumeSemicolon(); - - return delegate.createDebuggerStatement(); - } - - // 12 Statements - - function parseStatement() { - var type = lookahead.type, - expr, - labeledBody, - key, - startToken; - - if (type === Token.EOF) { - throwUnexpected(lookahead); - } - - if (type === Token.Punctuator && lookahead.value === '{') { - return parseBlock(); - } - - startToken = lookahead; - - if (type === Token.Punctuator) { - switch (lookahead.value) { - case ';': - return delegate.markEnd(parseEmptyStatement(), startToken); - case '(': - return delegate.markEnd(parseExpressionStatement(), startToken); - default: - break; - } - } - - if (type === Token.Keyword) { - switch (lookahead.value) { - case 'break': - return delegate.markEnd(parseBreakStatement(), startToken); - case 'continue': - return delegate.markEnd(parseContinueStatement(), startToken); - case 'debugger': - return delegate.markEnd(parseDebuggerStatement(), startToken); - case 'do': - return delegate.markEnd(parseDoWhileStatement(), startToken); - case 'for': - return delegate.markEnd(parseForStatement(), startToken); - case 'function': - return delegate.markEnd(parseFunctionDeclaration(), startToken); - case 'if': - return delegate.markEnd(parseIfStatement(), startToken); - case 'return': - return delegate.markEnd(parseReturnStatement(), startToken); - case 'switch': - return delegate.markEnd(parseSwitchStatement(), startToken); - case 'throw': - return delegate.markEnd(parseThrowStatement(), startToken); - case 'try': - return delegate.markEnd(parseTryStatement(), startToken); - case 'var': - return delegate.markEnd(parseVariableStatement(), startToken); - case 'while': - return delegate.markEnd(parseWhileStatement(), startToken); - case 'with': - return delegate.markEnd(parseWithStatement(), startToken); - default: - break; - } - } - - expr = parseExpression(); - - // 12.12 Labelled Statements - if ((expr.type === Syntax.Identifier) && match(':')) { - lex(); - - key = '$' + expr.name; - if (Object.prototype.hasOwnProperty.call(state.labelSet, key)) { - throwError({}, Messages.Redeclaration, 'Label', expr.name); - } - - state.labelSet[key] = true; - labeledBody = parseStatement(); - delete state.labelSet[key]; - return delegate.markEnd(delegate.createLabeledStatement(expr, labeledBody), startToken); - } - - consumeSemicolon(); - - return delegate.markEnd(delegate.createExpressionStatement(expr), startToken); - } - - // 13 Function Definition - - function parseFunctionSourceElements() { - var sourceElement, sourceElements = [], token, directive, firstRestricted, - oldLabelSet, oldInIteration, oldInSwitch, oldInFunctionBody, startToken; - - startToken = lookahead; - expect('{'); - - while (index < length) { - if (lookahead.type !== Token.StringLiteral) { - break; - } - token = lookahead; - - sourceElement = parseSourceElement(); - sourceElements.push(sourceElement); - if (sourceElement.expression.type !== Syntax.Literal) { - // this is not directive - break; - } - directive = source.slice(token.start + 1, token.end - 1); - if (directive === 'use strict') { - strict = true; - if (firstRestricted) { - throwErrorTolerant(firstRestricted, Messages.StrictOctalLiteral); - } - } else { - if (!firstRestricted && token.octal) { - firstRestricted = token; - } - } - } - - oldLabelSet = state.labelSet; - oldInIteration = state.inIteration; - oldInSwitch = state.inSwitch; - oldInFunctionBody = state.inFunctionBody; - - state.labelSet = {}; - state.inIteration = false; - state.inSwitch = false; - state.inFunctionBody = true; - - while (index < length) { - if (match('}')) { - break; - } - sourceElement = parseSourceElement(); - if (typeof sourceElement === 'undefined') { - break; - } - sourceElements.push(sourceElement); - } - - expect('}'); - - state.labelSet = oldLabelSet; - state.inIteration = oldInIteration; - state.inSwitch = oldInSwitch; - state.inFunctionBody = oldInFunctionBody; - - return delegate.markEnd(delegate.createBlockStatement(sourceElements), startToken); - } - - function parseParams(firstRestricted) { - var param, params = [], token, stricted, paramSet, key, message; - expect('('); - - if (!match(')')) { - paramSet = {}; - while (index < length) { - token = lookahead; - param = parseVariableIdentifier(); - key = '$' + token.value; - if (strict) { - if (isRestrictedWord(token.value)) { - stricted = token; - message = Messages.StrictParamName; - } - if (Object.prototype.hasOwnProperty.call(paramSet, key)) { - stricted = token; - message = Messages.StrictParamDupe; - } - } else if (!firstRestricted) { - if (isRestrictedWord(token.value)) { - firstRestricted = token; - message = Messages.StrictParamName; - } else if (isStrictModeReservedWord(token.value)) { - firstRestricted = token; - message = Messages.StrictReservedWord; - } else if (Object.prototype.hasOwnProperty.call(paramSet, key)) { - firstRestricted = token; - message = Messages.StrictParamDupe; - } - } - params.push(param); - paramSet[key] = true; - if (match(')')) { - break; - } - expect(','); - } - } - - expect(')'); - - return { - params: params, - stricted: stricted, - firstRestricted: firstRestricted, - message: message - }; - } - - function parseFunctionDeclaration() { - var id, params = [], body, token, stricted, tmp, firstRestricted, message, previousStrict, startToken; - - startToken = lookahead; - - expectKeyword('function'); - token = lookahead; - id = parseVariableIdentifier(); - if (strict) { - if (isRestrictedWord(token.value)) { - throwErrorTolerant(token, Messages.StrictFunctionName); - } - } else { - if (isRestrictedWord(token.value)) { - firstRestricted = token; - message = Messages.StrictFunctionName; - } else if (isStrictModeReservedWord(token.value)) { - firstRestricted = token; - message = Messages.StrictReservedWord; - } - } - - tmp = parseParams(firstRestricted); - params = tmp.params; - stricted = tmp.stricted; - firstRestricted = tmp.firstRestricted; - if (tmp.message) { - message = tmp.message; - } - - previousStrict = strict; - body = parseFunctionSourceElements(); - if (strict && firstRestricted) { - throwError(firstRestricted, message); - } - if (strict && stricted) { - throwErrorTolerant(stricted, message); - } - strict = previousStrict; - - return delegate.markEnd(delegate.createFunctionDeclaration(id, params, [], body), startToken); - } - - function parseFunctionExpression() { - var token, id = null, stricted, firstRestricted, message, tmp, params = [], body, previousStrict, startToken; - - startToken = lookahead; - expectKeyword('function'); - - if (!match('(')) { - token = lookahead; - id = parseVariableIdentifier(); - if (strict) { - if (isRestrictedWord(token.value)) { - throwErrorTolerant(token, Messages.StrictFunctionName); - } - } else { - if (isRestrictedWord(token.value)) { - firstRestricted = token; - message = Messages.StrictFunctionName; - } else if (isStrictModeReservedWord(token.value)) { - firstRestricted = token; - message = Messages.StrictReservedWord; - } - } - } - - tmp = parseParams(firstRestricted); - params = tmp.params; - stricted = tmp.stricted; - firstRestricted = tmp.firstRestricted; - if (tmp.message) { - message = tmp.message; - } - - previousStrict = strict; - body = parseFunctionSourceElements(); - if (strict && firstRestricted) { - throwError(firstRestricted, message); - } - if (strict && stricted) { - throwErrorTolerant(stricted, message); - } - strict = previousStrict; - - return delegate.markEnd(delegate.createFunctionExpression(id, params, [], body), startToken); - } - - // 14 Program - - function parseSourceElement() { - if (lookahead.type === Token.Keyword) { - switch (lookahead.value) { - case 'const': - case 'let': - return parseConstLetDeclaration(lookahead.value); - case 'function': - return parseFunctionDeclaration(); - default: - return parseStatement(); - } - } - - if (lookahead.type !== Token.EOF) { - return parseStatement(); - } - } - - function parseSourceElements() { - var sourceElement, sourceElements = [], token, directive, firstRestricted; - - while (index < length) { - token = lookahead; - if (token.type !== Token.StringLiteral) { - break; - } - - sourceElement = parseSourceElement(); - sourceElements.push(sourceElement); - if (sourceElement.expression.type !== Syntax.Literal) { - // this is not directive - break; - } - directive = source.slice(token.start + 1, token.end - 1); - if (directive === 'use strict') { - strict = true; - if (firstRestricted) { - throwErrorTolerant(firstRestricted, Messages.StrictOctalLiteral); - } - } else { - if (!firstRestricted && token.octal) { - firstRestricted = token; - } - } - } - - while (index < length) { - sourceElement = parseSourceElement(); - /* istanbul ignore if */ - if (typeof sourceElement === 'undefined') { - break; - } - sourceElements.push(sourceElement); - } - return sourceElements; - } - - function parseProgram() { - var body, startToken; - - skipComment(); - peek(); - startToken = lookahead; - strict = false; - - body = parseSourceElements(); - return delegate.markEnd(delegate.createProgram(body), startToken); - } - - function filterTokenLocation() { - var i, entry, token, tokens = []; - - for (i = 0; i < extra.tokens.length; ++i) { - entry = extra.tokens[i]; - token = { - type: entry.type, - value: entry.value - }; - if (extra.range) { - token.range = entry.range; - } - if (extra.loc) { - token.loc = entry.loc; - } - tokens.push(token); - } - - extra.tokens = tokens; - } - - function tokenize(code, options) { - var toString, - token, - tokens; - - toString = String; - if (typeof code !== 'string' && !(code instanceof String)) { - code = toString(code); - } - - delegate = SyntaxTreeDelegate; - source = code; - index = 0; - lineNumber = (source.length > 0) ? 1 : 0; - lineStart = 0; - length = source.length; - lookahead = null; - state = { - allowIn: true, - labelSet: {}, - inFunctionBody: false, - inIteration: false, - inSwitch: false, - lastCommentStart: -1 - }; - - extra = {}; - - // Options matching. - options = options || {}; - - // Of course we collect tokens here. - options.tokens = true; - extra.tokens = []; - extra.tokenize = true; - // The following two fields are necessary to compute the Regex tokens. - extra.openParenToken = -1; - extra.openCurlyToken = -1; - - extra.range = (typeof options.range === 'boolean') && options.range; - extra.loc = (typeof options.loc === 'boolean') && options.loc; - - if (typeof options.comment === 'boolean' && options.comment) { - extra.comments = []; - } - if (typeof options.tolerant === 'boolean' && options.tolerant) { - extra.errors = []; - } - - try { - peek(); - if (lookahead.type === Token.EOF) { - return extra.tokens; - } - - token = lex(); - while (lookahead.type !== Token.EOF) { - try { - token = lex(); - } catch (lexError) { - token = lookahead; - if (extra.errors) { - extra.errors.push(lexError); - // We have to break on the first error - // to avoid infinite loops. - break; - } else { - throw lexError; - } - } - } - - filterTokenLocation(); - tokens = extra.tokens; - if (typeof extra.comments !== 'undefined') { - tokens.comments = extra.comments; - } - if (typeof extra.errors !== 'undefined') { - tokens.errors = extra.errors; - } - } catch (e) { - throw e; - } finally { - extra = {}; - } - return tokens; - } - - function parse(code, options) { - var program, toString; - - toString = String; - if (typeof code !== 'string' && !(code instanceof String)) { - code = toString(code); - } - - delegate = SyntaxTreeDelegate; - source = code; - index = 0; - lineNumber = (source.length > 0) ? 1 : 0; - lineStart = 0; - length = source.length; - lookahead = null; - state = { - allowIn: true, - labelSet: {}, - inFunctionBody: false, - inIteration: false, - inSwitch: false, - lastCommentStart: -1 - }; - - extra = {}; - if (typeof options !== 'undefined') { - extra.range = (typeof options.range === 'boolean') && options.range; - extra.loc = (typeof options.loc === 'boolean') && options.loc; - extra.attachComment = (typeof options.attachComment === 'boolean') && options.attachComment; - - if (extra.loc && options.source !== null && options.source !== undefined) { - extra.source = toString(options.source); - } - - if (typeof options.tokens === 'boolean' && options.tokens) { - extra.tokens = []; - } - if (typeof options.comment === 'boolean' && options.comment) { - extra.comments = []; - } - if (typeof options.tolerant === 'boolean' && options.tolerant) { - extra.errors = []; - } - if (extra.attachComment) { - extra.range = true; - extra.comments = []; - extra.bottomRightStack = []; - extra.trailingComments = []; - extra.leadingComments = []; - } - } - - try { - program = parseProgram(); - if (typeof extra.comments !== 'undefined') { - program.comments = extra.comments; - } - if (typeof extra.tokens !== 'undefined') { - filterTokenLocation(); - program.tokens = extra.tokens; - } - if (typeof extra.errors !== 'undefined') { - program.errors = extra.errors; - } - } catch (e) { - throw e; - } finally { - extra = {}; - } - - return program; - } - - // Sync with *.json manifests. - exports.version = '1.2.2'; - - exports.tokenize = tokenize; - - exports.parse = parse; - - // Deep copy. - /* istanbul ignore next */ - exports.Syntax = (function () { - var name, types = {}; - - if (typeof Object.create === 'function') { - types = Object.create(null); - } - - for (name in Syntax) { - if (Syntax.hasOwnProperty(name)) { - types[name] = Syntax[name]; - } - } - - if (typeof Object.freeze === 'function') { - Object.freeze(types); - } - - return types; - }()); - -})); -/* vim: set sw=4 ts=4 et tw=80 : */ - -})(null); -/*! - * falafel (c) James Halliday / MIT License - * https://github.com/substack/node-falafel - */ - -(function(require,module){ -var parse = require('esprima').parse; -var objectKeys = Object.keys || function (obj) { - var keys = []; - for (var key in obj) keys.push(key); - return keys; -}; -var forEach = function (xs, fn) { - if (xs.forEach) return xs.forEach(fn); - for (var i = 0; i < xs.length; i++) { - fn.call(xs, xs[i], i, xs); - } -}; - -var isArray = Array.isArray || function (xs) { - return Object.prototype.toString.call(xs) === '[object Array]'; -}; - -module.exports = function (src, opts, fn) { - if (typeof opts === 'function') { - fn = opts; - opts = {}; - } - if (typeof src === 'object') { - opts = src; - src = opts.source; - delete opts.source; - } - src = src === undefined ? opts.source : src; - opts.range = true; - if (typeof src !== 'string') src = String(src); - - var ast = parse(src, opts); - - var result = { - chunks : src.split(''), - toString : function () { return result.chunks.join('') }, - inspect : function () { return result.toString() } - }; - var index = 0; - - (function walk (node, parent) { - insertHelpers(node, parent, result.chunks); - - forEach(objectKeys(node), function (key) { - if (key === 'parent') return; - - var child = node[key]; - if (isArray(child)) { - forEach(child, function (c) { - if (c && typeof c.type === 'string') { - walk(c, node); - } - }); - } - else if (child && typeof child.type === 'string') { - insertHelpers(child, node, result.chunks); - walk(child, node); - } - }); - fn(node); - })(ast, undefined); - - return result; -}; - -function insertHelpers (node, parent, chunks) { - if (!node.range) return; - - node.parent = parent; - - node.source = function () { - return chunks.slice( - node.range[0], node.range[1] - ).join(''); - }; - - if (node.update && typeof node.update === 'object') { - var prev = node.update; - forEach(objectKeys(prev), function (key) { - update[key] = prev[key]; - }); - node.update = update; - } - else { - node.update = update; - } - - function update (s) { - chunks[node.range[0]] = s; - for (var i = node.range[0] + 1; i < node.range[1]; i++) { - chunks[i] = ''; - } - }; -} - -window.falafel = module.exports;})(function(){return {parse: esprima.parse};},{exports: {}}); -var inBrowser = typeof window !== 'undefined' && this === window; -var parseAndModify = (inBrowser ? window.falafel : require("falafel")); - -(inBrowser ? window : exports).blanket = (function(){ - var linesToAddTracking = [ - "ExpressionStatement", - "BreakStatement" , - "ContinueStatement" , - "VariableDeclaration", - "ReturnStatement" , - "ThrowStatement" , - "TryStatement" , - "FunctionDeclaration" , - "IfStatement" , - "WhileStatement" , - "DoWhileStatement" , - "ForStatement" , - "ForInStatement" , - "SwitchStatement" , - "WithStatement" - ], - linesToAddBrackets = [ - "IfStatement" , - "WhileStatement" , - "DoWhileStatement" , - "ForStatement" , - "ForInStatement" , - "WithStatement" - ], - __blanket, - copynumber = Math.floor(Math.random()*1000), - coverageInfo = {},options = { - reporter: null, - adapter:null, - filter: null, - customVariable: null, - loader: null, - ignoreScriptError: false, - existingRequireJS:false, - autoStart: false, - timeout: 180, - ignoreCors: false, - branchTracking: false, - sourceURL: false, - debug:false, - engineOnly:false, - testReadyCallback:null, - commonJS:false, - instrumentCache:false, - modulePattern: null - }; - - if (inBrowser && typeof window.blanket !== 'undefined'){ - __blanket = window.blanket.noConflict(); - } - - _blanket = { - noConflict: function(){ - if (__blanket){ - return __blanket; - } - return _blanket; - }, - _getCopyNumber: function(){ - //internal method - //for differentiating between instances - return copynumber; - }, - extend: function(obj) { - //borrowed from underscore - _blanket._extend(_blanket,obj); - }, - _extend: function(dest,source){ - if (source) { - for (var prop in source) { - if ( dest[prop] instanceof Object && typeof dest[prop] !== "function"){ - _blanket._extend(dest[prop],source[prop]); - }else{ - dest[prop] = source[prop]; - } - } - } - }, - getCovVar: function(){ - var opt = _blanket.options("customVariable"); - if (opt){ - if (_blanket.options("debug")) {console.log("BLANKET-Using custom tracking variable:",opt);} - return inBrowser ? "window."+opt : opt; - } - return inBrowser ? "window._$blanket" : "_$jscoverage"; - }, - options: function(key,value){ - if (typeof key !== "string"){ - _blanket._extend(options,key); - }else if (typeof value === 'undefined'){ - return options[key]; - }else{ - options[key]=value; - } - }, - instrument: function(config, next){ - //check instrumented hash table, - //return instrumented code if available. - var inFile = config.inputFile, - inFileName = config.inputFileName; - //check instrument cache - if (_blanket.options("instrumentCache") && sessionStorage && sessionStorage.getItem("blanket_instrument_store-"+inFileName)){ - if (_blanket.options("debug")) {console.log("BLANKET-Reading instrumentation from cache: ",inFileName);} - next(sessionStorage.getItem("blanket_instrument_store-"+inFileName)); - }else{ - var sourceArray = _blanket._prepareSource(inFile); - _blanket._trackingArraySetup=[]; - //remove shebang - inFile = inFile.replace(/^\#\!.*/, ""); - var instrumented = parseAndModify(inFile,{loc:true,comment:true}, _blanket._addTracking(inFileName)); - instrumented = _blanket._trackingSetup(inFileName,sourceArray)+instrumented; - if (_blanket.options("sourceURL")){ - instrumented += "\n//@ sourceURL="+inFileName.replace("http://",""); - } - if (_blanket.options("debug")) {console.log("BLANKET-Instrumented file: ",inFileName);} - if (_blanket.options("instrumentCache") && sessionStorage){ - if (_blanket.options("debug")) {console.log("BLANKET-Saving instrumentation to cache: ",inFileName);} - sessionStorage.setItem("blanket_instrument_store-"+inFileName,instrumented); - } - next(instrumented); - } - }, - _trackingArraySetup: [], - _branchingArraySetup: [], - _prepareSource: function(source){ - return source.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/(\r\n|\n|\r)/gm,"\n").split('\n'); - }, - _trackingSetup: function(filename,sourceArray){ - var branches = _blanket.options("branchTracking"); - var sourceString = sourceArray.join("',\n'"); - var intro = ""; - var covVar = _blanket.getCovVar(); - - intro += "if (typeof "+covVar+" === 'undefined') "+covVar+" = {};\n"; - if (branches){ - intro += "var _$branchFcn=function(f,l,c,r){ "; - intro += "if (!!r) { "; - intro += covVar+"[f].branchData[l][c][0] = "+covVar+"[f].branchData[l][c][0] || [];"; - intro += covVar+"[f].branchData[l][c][0].push(r); }"; - intro += "else { "; - intro += covVar+"[f].branchData[l][c][1] = "+covVar+"[f].branchData[l][c][1] || [];"; - intro += covVar+"[f].branchData[l][c][1].push(r); }"; - intro += "return r;};\n"; - } - intro += "if (typeof "+covVar+"['"+filename+"'] === 'undefined'){"; - - intro += covVar+"['"+filename+"']=[];\n"; - if (branches){ - intro += covVar+"['"+filename+"'].branchData=[];\n"; - } - intro += covVar+"['"+filename+"'].source=['"+sourceString+"'];\n"; - //initialize array values - _blanket._trackingArraySetup.sort(function(a,b){ - return parseInt(a,10) > parseInt(b,10); - }).forEach(function(item){ - intro += covVar+"['"+filename+"']["+item+"]=0;\n"; - }); - if (branches){ - _blanket._branchingArraySetup.sort(function(a,b){ - return a.line > b.line; - }).sort(function(a,b){ - return a.column > b.column; - }).forEach(function(item){ - if (item.file === filename){ - intro += "if (typeof "+ covVar+"['"+filename+"'].branchData["+item.line+"] === 'undefined'){\n"; - intro += covVar+"['"+filename+"'].branchData["+item.line+"]=[];\n"; - intro += "}"; - intro += covVar+"['"+filename+"'].branchData["+item.line+"]["+item.column+"] = [];\n"; - intro += covVar+"['"+filename+"'].branchData["+item.line+"]["+item.column+"].consequent = "+JSON.stringify(item.consequent)+";\n"; - intro += covVar+"['"+filename+"'].branchData["+item.line+"]["+item.column+"].alternate = "+JSON.stringify(item.alternate)+";\n"; - } - }); - } - intro += "}"; - - return intro; - }, - _blockifyIf: function(node){ - if (linesToAddBrackets.indexOf(node.type) > -1){ - var bracketsExistObject = node.consequent || node.body; - var bracketsExistAlt = node.alternate; - if( bracketsExistAlt && bracketsExistAlt.type !== "BlockStatement") { - bracketsExistAlt.update("{\n"+bracketsExistAlt.source()+"}\n"); - } - if( bracketsExistObject && bracketsExistObject.type !== "BlockStatement") { - bracketsExistObject.update("{\n"+bracketsExistObject.source()+"}\n"); - } - } - }, - _trackBranch: function(node,filename){ - //recursive on consequent and alternative - var line = node.loc.start.line; - var col = node.loc.start.column; - - _blanket._branchingArraySetup.push({ - line: line, - column: col, - file:filename, - consequent: node.consequent.loc, - alternate: node.alternate.loc - }); - - var updated = "_$branchFcn"+ - "('"+filename+"',"+line+","+col+","+node.test.source()+ - ")?"+node.consequent.source()+":"+node.alternate.source(); - node.update(updated); - }, - _addTracking: function (filename) { - //falafel doesn't take a file name - //so we include the filename in a closure - //and return the function to falafel - var covVar = _blanket.getCovVar(); - - return function(node){ - _blanket._blockifyIf(node); - - if (linesToAddTracking.indexOf(node.type) > -1 && node.parent.type !== "LabeledStatement") { - _blanket._checkDefs(node,filename); - if (node.type === "VariableDeclaration" && - (node.parent.type === "ForStatement" || node.parent.type === "ForInStatement")){ - return; - } - if (node.loc && node.loc.start){ - node.update(covVar+"['"+filename+"']["+node.loc.start.line+"]++;\n"+node.source()); - _blanket._trackingArraySetup.push(node.loc.start.line); - }else{ - //I don't think we can handle a node with no location - throw new Error("The instrumenter encountered a node with no location: "+Object.keys(node)); - } - }else if (_blanket.options("branchTracking") && node.type === "ConditionalExpression"){ - _blanket._trackBranch(node,filename); - } - }; - }, - _checkDefs: function(node,filename){ - // Make sure developers don't redefine window. if they do, inform them it is wrong. - if (inBrowser){ - if (node.type === "VariableDeclaration" && node.declarations) { - node.declarations.forEach(function(declaration) { - if (declaration.id.name === "window") { - throw new Error("Instrumentation error, you cannot redefine the 'window' variable in " + filename + ":" + node.loc.start.line); - } - }); - } - if (node.type === "FunctionDeclaration" && node.params) { - node.params.forEach(function(param) { - if (param.name === "window") { - throw new Error("Instrumentation error, you cannot redefine the 'window' variable in " + filename + ":" + node.loc.start.line); - } - }); - } - //Make sure developers don't redefine the coverage variable - if (node.type === "ExpressionStatement" && - node.expression && node.expression.left && - node.expression.left.object && node.expression.left.property && - node.expression.left.object.name + - "." + node.expression.left.property.name === _blanket.getCovVar()) { - throw new Error("Instrumentation error, you cannot redefine the coverage variable in " + filename + ":" + node.loc.start.line); - } - }else{ - //Make sure developers don't redefine the coverage variable in node - if (node.type === "ExpressionStatement" && - node.expression && node.expression.left && - !node.expression.left.object && !node.expression.left.property && - node.expression.left.name === _blanket.getCovVar()) { - throw new Error("Instrumentation error, you cannot redefine the coverage variable in " + filename + ":" + node.loc.start.line); - } - } - }, - setupCoverage: function(){ - coverageInfo.instrumentation = "blanket"; - coverageInfo.stats = { - "suites": 0, - "tests": 0, - "passes": 0, - "pending": 0, - "failures": 0, - "start": new Date() - }; - }, - _checkIfSetup: function(){ - if (!coverageInfo.stats){ - throw new Error("You must call blanket.setupCoverage() first."); - } - }, - onTestStart: function(){ - if (_blanket.options("debug")) {console.log("BLANKET-Test event started");} - this._checkIfSetup(); - coverageInfo.stats.tests++; - coverageInfo.stats.pending++; - }, - onTestDone: function(total,passed){ - this._checkIfSetup(); - if(passed === total){ - coverageInfo.stats.passes++; - }else{ - coverageInfo.stats.failures++; - } - coverageInfo.stats.pending--; - }, - onModuleStart: function(){ - this._checkIfSetup(); - coverageInfo.stats.suites++; - }, - onTestsDone: function(){ - if (_blanket.options("debug")) {console.log("BLANKET-Test event done");} - this._checkIfSetup(); - coverageInfo.stats.end = new Date(); - - if (inBrowser){ - this.report(coverageInfo); - }else{ - if (!_blanket.options("branchTracking")){ - delete (inBrowser ? window : global)[_blanket.getCovVar()].branchFcn; - } - this.options("reporter").call(this,coverageInfo); - } - } - }; - return _blanket; -})(); - -(function(_blanket){ - var oldOptions = _blanket.options; -_blanket.extend({ - outstandingRequireFiles:[], - options: function(key,value){ - var newVal={}; - - if (typeof key !== "string"){ - //key is key/value map - oldOptions(key); - newVal = key; - }else if (typeof value === 'undefined'){ - //accessor - return oldOptions(key); - }else{ - //setter - oldOptions(key,value); - newVal[key] = value; - } - - if (newVal.adapter){ - _blanket._loadFile(newVal.adapter); - } - if (newVal.loader){ - _blanket._loadFile(newVal.loader); - } - }, - requiringFile: function(filename,done){ - if (typeof filename === "undefined"){ - _blanket.outstandingRequireFiles=[]; - }else if (typeof done === "undefined"){ - _blanket.outstandingRequireFiles.push(filename); - }else{ - _blanket.outstandingRequireFiles.splice(_blanket.outstandingRequireFiles.indexOf(filename),1); - } - }, - requireFilesLoaded: function(){ - return _blanket.outstandingRequireFiles.length === 0; - }, - showManualLoader: function(){ - if (document.getElementById("blanketLoaderDialog")){ - return; - } - //copied from http://blog.avtex.com/2012/01/26/cross-browser-css-only-modal-box/ - var loader = "
    "; - loader += " 
    "; - loader += "
    "; - loader += "
    "; - loader += "Error: Blanket.js encountered a cross origin request error while instrumenting the source files. "; - loader += "

    This is likely caused by the source files being referenced locally (using the file:// protocol). "; - loader += "

    Some solutions include starting Chrome with special flags, running a server locally, or using a browser without these CORS restrictions (Safari)."; - loader += "
    "; - if (typeof FileReader !== "undefined"){ - loader += "
    Or, try the experimental loader. When prompted, simply click on the directory containing all the source files you want covered."; - loader += "Start Loader"; - loader += ""; - } - loader += "
    Close"; - loader += "
    "; - loader += "
    "; - - var css = ".blanketDialogWrapper {"; - css += "display:block;"; - css += "position:fixed;"; - css += "z-index:40001; }"; - - css += ".blanketDialogOverlay {"; - css += "position:fixed;"; - css += "width:100%;"; - css += "height:100%;"; - css += "background-color:black;"; - css += "opacity:.5; "; - css += "-ms-filter:'progid:DXImageTransform.Microsoft.Alpha(Opacity=50)'; "; - css += "filter:alpha(opacity=50); "; - css += "z-index:40001; }"; - - css += ".blanketDialogVerticalOffset { "; - css += "position:fixed;"; - css += "top:30%;"; - css += "width:100%;"; - css += "z-index:40002; }"; - - css += ".blanketDialogBox { "; - css += "width:405px; "; - css += "position:relative;"; - css += "margin:0 auto;"; - css += "background-color:white;"; - css += "padding:10px;"; - css += "border:1px solid black; }"; - - var dom = document.createElement("style"); - dom.innerHTML = css; - document.head.appendChild(dom); - - var div = document.createElement("div"); - div.id = "blanketLoaderDialog"; - div.className = "blanketDialogWrapper"; - div.innerHTML = loader; - document.body.insertBefore(div,document.body.firstChild); - - }, - manualFileLoader: function(files){ - var toArray =Array.prototype.slice; - files = toArray.call(files).filter(function(item){ - return item.type !== ""; - }); - var sessionLength = files.length-1; - var sessionIndx=0; - var sessionArray = {}; - if (sessionStorage["blanketSessionLoader"]){ - sessionArray = JSON.parse(sessionStorage["blanketSessionLoader"]); - } - - - var fileLoader = function(event){ - var fileContent = event.currentTarget.result; - var file = files[sessionIndx]; - var filename = file.webkitRelativePath && file.webkitRelativePath !== '' ? file.webkitRelativePath : file.name; - sessionArray[filename] = fileContent; - sessionIndx++; - if (sessionIndx === sessionLength){ - sessionStorage.setItem("blanketSessionLoader", JSON.stringify(sessionArray)); - document.location.reload(); - }else{ - readFile(files[sessionIndx]); - } - }; - function readFile(file){ - var reader = new FileReader(); - reader.onload = fileLoader; - reader.readAsText(file); - } - readFile(files[sessionIndx]); - }, - _loadFile: function(path){ - if (typeof path !== "undefined"){ - var request = new XMLHttpRequest(); - request.open('GET', path, false); - request.send(); - _blanket._addScript(request.responseText); - } - }, - _addScript: function(data){ - var script = document.createElement("script"); - script.type = "text/javascript"; - script.text = data; - (document.body || document.getElementsByTagName('head')[0]).appendChild(script); - }, - hasAdapter: function(callback){ - return _blanket.options("adapter") !== null; - }, - report: function(coverage_data){ - if (!document.getElementById("blanketLoaderDialog")){ - //all found, clear it - _blanket.blanketSession = null; - } - coverage_data.files = window._$blanket; - var require = blanket.options("commonJS") ? blanket._commonjs.require : window.require; - - // Check if we have any covered files that requires reporting - // otherwise just exit gracefully. - if (!coverage_data.files || !Object.keys(coverage_data.files).length) { - if (_blanket.options("debug")) {console.log("BLANKET-Reporting No files were instrumented.");} - return; - } - - if (typeof coverage_data.files.branchFcn !== "undefined"){ - delete coverage_data.files.branchFcn; - } - if (typeof _blanket.options("reporter") === "string"){ - _blanket._loadFile(_blanket.options("reporter")); - _blanket.customReporter(coverage_data,_blanket.options("reporter_options")); - }else if (typeof _blanket.options("reporter") === "function"){ - _blanket.options("reporter")(coverage_data,_blanket.options("reporter_options")); - }else if (typeof _blanket.defaultReporter === 'function'){ - _blanket.defaultReporter(coverage_data,_blanket.options("reporter_options")); - }else{ - throw new Error("no reporter defined."); - } - }, - _bindStartTestRunner: function(bindEvent,startEvent){ - if (bindEvent){ - bindEvent(startEvent); - }else{ - window.addEventListener("load",startEvent,false); - } - }, - _loadSourceFiles: function(callback){ - var require = blanket.options("commonJS") ? blanket._commonjs.require : window.require; - function copy(o){ - var _copy = Object.create( Object.getPrototypeOf(o) ); - var propNames = Object.getOwnPropertyNames(o); - - propNames.forEach(function(name){ - var desc = Object.getOwnPropertyDescriptor(o, name); - Object.defineProperty(_copy, name, desc); - }); - - return _copy; - } - if (_blanket.options("debug")) {console.log("BLANKET-Collecting page scripts");} - var scripts = _blanket.utils.collectPageScripts(); - //_blanket.options("filter",scripts); - if (scripts.length === 0){ - callback(); - }else{ - - //check session state - if (sessionStorage["blanketSessionLoader"]){ - _blanket.blanketSession = JSON.parse(sessionStorage["blanketSessionLoader"]); - } - - scripts.forEach(function(file,indx){ - _blanket.utils.cache[file]={ - loaded:false - }; - }); - - var currScript=-1; - _blanket.utils.loadAll(function(test){ - if (test){ - return typeof scripts[currScript+1] !== 'undefined'; - } - currScript++; - if (currScript >= scripts.length){ - return null; - } - return scripts[currScript]; - },callback); - } - }, - beforeStartTestRunner: function(opts){ - opts = opts || {}; - opts.checkRequirejs = typeof opts.checkRequirejs === "undefined" ? true : opts.checkRequirejs; - opts.callback = opts.callback || function() { }; - opts.coverage = typeof opts.coverage === "undefined" ? true : opts.coverage; - if (opts.coverage) { - _blanket._bindStartTestRunner(opts.bindEvent, - function(){ - _blanket._loadSourceFiles(function() { - - var allLoaded = function(){ - return opts.condition ? opts.condition() : _blanket.requireFilesLoaded(); - }; - var check = function() { - if (allLoaded()) { - if (_blanket.options("debug")) {console.log("BLANKET-All files loaded, init start test runner callback.");} - var cb = _blanket.options("testReadyCallback"); - - if (cb){ - if (typeof cb === "function"){ - cb(opts.callback); - }else if (typeof cb === "string"){ - _blanket._addScript(cb); - opts.callback(); - } - }else{ - opts.callback(); - } - } else { - setTimeout(check, 13); - } - }; - check(); - }); - }); - }else{ - opts.callback(); - } - }, - utils: { - qualifyURL: function (url) { - //http://stackoverflow.com/questions/470832/getting-an-absolute-url-from-a-relative-one-ie6-issue - var a = document.createElement('a'); - a.href = url; - return a.href; - } - } -}); - -})(blanket); - -blanket.defaultReporter = function(coverage){ - var cssSytle = "#blanket-main {margin:2px;background:#EEE;color:#333;clear:both;font-family:'Helvetica Neue Light', 'HelveticaNeue-Light', 'Helvetica Neue', Calibri, Helvetica, Arial, sans-serif; font-size:17px;} #blanket-main a {color:#333;text-decoration:none;} #blanket-main a:hover {text-decoration:underline;} .blanket {margin:0;padding:5px;clear:both;border-bottom: 1px solid #FFFFFF;} .bl-error {color:red;}.bl-success {color:#5E7D00;} .bl-file{width:auto;} .bl-cl{float:left;} .blanket div.rs {margin-left:50px; width:150px; float:right} .bl-nb {padding-right:10px;} #blanket-main a.bl-logo {color: #EB1764;cursor: pointer;font-weight: bold;text-decoration: none} .bl-source{ overflow-x:scroll; background-color: #FFFFFF; border: 1px solid #CBCBCB; color: #363636; margin: 25px 20px; width: 80%;} .bl-source div{white-space: pre;font-family: monospace;} .bl-source > div > span:first-child{background-color: #EAEAEA;color: #949494;display: inline-block;padding: 0 10px;text-align: center;width: 30px;} .bl-source .miss{background-color:#e6c3c7} .bl-source span.branchWarning{color:#000;background-color:yellow;} .bl-source span.branchOkay{color:#000;background-color:transparent;}", - successRate = 60, - head = document.head, - fileNumber = 0, - body = document.body, - headerContent, - hasBranchTracking = Object.keys(coverage.files).some(function(elem){ - return typeof coverage.files[elem].branchData !== 'undefined'; - }), - bodyContent = "
    results
    Coverage (%)
    Covered/Total Smts.
    "+(hasBranchTracking ? "
    Covered/Total Branches
    ":"")+"
    ", - fileTemplate = "
    {{fileNumber}}.{{file}}
    {{percentage}} %
    {{numberCovered}}/{{totalSmts}}
    "+( hasBranchTracking ? "
    {{passedBranches}}/{{totalBranches}}
    " : "" )+"
    "; - grandTotalTemplate = "
    {{rowTitle}}
    {{percentage}} %
    {{numberCovered}}/{{totalSmts}}
    "+( hasBranchTracking ? "
    {{passedBranches}}/{{totalBranches}}
    " : "" ) + "
    "; - - function blanket_toggleSource(id) { - var element = document.getElementById(id); - if(element.style.display === 'block') { - element.style.display = 'none'; - } else { - element.style.display = 'block'; - } - } - - - var script = document.createElement("script"); - script.type = "text/javascript"; - script.text = blanket_toggleSource.toString().replace('function ' + blanket_toggleSource.name, 'function blanket_toggleSource'); - body.appendChild(script); - - var percentage = function(number, total) { - return (Math.round(((number/total) * 100)*100)/100); - }; - - var appendTag = function (type, el, str) { - var dom = document.createElement(type); - dom.innerHTML = str; - el.appendChild(dom); - }; - - function escapeInvalidXmlChars(str) { - return str.replace(/\&/g, "&") - .replace(//g, ">") - .replace(/\"/g, """) - .replace(/\'/g, "'"); - } - - function isBranchFollowed(data,bool){ - var mode = bool ? 0 : 1; - if (typeof data === 'undefined' || - typeof data === null || - typeof data[mode] === 'undefined'){ - return false; - } - return data[mode].length > 0; - } - - var branchStack = []; - - function branchReport(colsIndex,src,cols,offset,lineNum){ - var newsrc=""; - var postfix=""; - if (branchStack.length > 0){ - newsrc += ""; - if (branchStack[0][0].end.line === lineNum){ - newsrc += escapeInvalidXmlChars(src.slice(0,branchStack[0][0].end.column)) + ""; - src = src.slice(branchStack[0][0].end.column); - branchStack.shift(); - if (branchStack.length > 0){ - newsrc += ""; - if (branchStack[0][0].end.line === lineNum){ - newsrc += escapeInvalidXmlChars(src.slice(0,branchStack[0][0].end.column)) + ""; - src = src.slice(branchStack[0][0].end.column); - branchStack.shift(); - if (!cols){ - return {src: newsrc + escapeInvalidXmlChars(src) ,cols:cols}; - } - } - else if (!cols){ - return {src: newsrc + escapeInvalidXmlChars(src) + "",cols:cols}; - } - else{ - postfix = ""; - } - }else if (!cols){ - return {src: newsrc + escapeInvalidXmlChars(src) ,cols:cols}; - } - }else if(!cols){ - return {src: newsrc + escapeInvalidXmlChars(src) + "",cols:cols}; - }else{ - postfix = ""; - } - } - var thisline = cols[colsIndex]; - //consequent - - var cons = thisline.consequent; - if (cons.start.line > lineNum){ - branchStack.unshift([thisline.alternate,thisline]); - branchStack.unshift([cons,thisline]); - src = escapeInvalidXmlChars(src); - }else{ - var style = ""; - newsrc += escapeInvalidXmlChars(src.slice(0,cons.start.column-offset)) + style; - - if (cols.length > colsIndex+1 && - cols[colsIndex+1].consequent.start.line === lineNum && - cols[colsIndex+1].consequent.start.column-offset < cols[colsIndex].consequent.end.column-offset) - { - var res = branchReport(colsIndex+1,src.slice(cons.start.column-offset,cons.end.column-offset),cols,cons.start.column-offset,lineNum); - newsrc += res.src; - cols = res.cols; - cols[colsIndex+1] = cols[colsIndex+2]; - cols.length--; - }else{ - newsrc += escapeInvalidXmlChars(src.slice(cons.start.column-offset,cons.end.column-offset)); - } - newsrc += ""; - - var alt = thisline.alternate; - if (alt.start.line > lineNum){ - newsrc += escapeInvalidXmlChars(src.slice(cons.end.column-offset)); - branchStack.unshift([alt,thisline]); - }else{ - newsrc += escapeInvalidXmlChars(src.slice(cons.end.column-offset,alt.start.column-offset)); - style = ""; - newsrc += style; - if (cols.length > colsIndex+1 && - cols[colsIndex+1].consequent.start.line === lineNum && - cols[colsIndex+1].consequent.start.column-offset < cols[colsIndex].alternate.end.column-offset) - { - var res2 = branchReport(colsIndex+1,src.slice(alt.start.column-offset,alt.end.column-offset),cols,alt.start.column-offset,lineNum); - newsrc += res2.src; - cols = res2.cols; - cols[colsIndex+1] = cols[colsIndex+2]; - cols.length--; - }else{ - newsrc += escapeInvalidXmlChars(src.slice(alt.start.column-offset,alt.end.column-offset)); - } - newsrc += ""; - newsrc += escapeInvalidXmlChars(src.slice(alt.end.column-offset)); - src = newsrc; - } - } - return {src:src+postfix, cols:cols}; - } - - var isUndefined = function(item){ - return typeof item !== 'undefined'; - }; - - var files = coverage.files; - var totals = { - totalSmts: 0, - numberOfFilesCovered: 0, - passedBranches: 0, - totalBranches: 0, - moduleTotalStatements : {}, - moduleTotalCoveredStatements : {}, - moduleTotalBranches : {}, - moduleTotalCoveredBranches : {} - }; - - // check if a data-cover-modulepattern was provided for per-module coverage reporting - var modulePattern = _blanket.options("modulePattern"); - var modulePatternRegex = ( modulePattern ? new RegExp(modulePattern) : null ); - - for(var file in files) - { - if (!files.hasOwnProperty(file)) { - continue; - } - - fileNumber++; - - var statsForFile = files[file], - totalSmts = 0, - numberOfFilesCovered = 0, - code = [], - i; - - - var end = []; - for(i = 0; i < statsForFile.source.length; i +=1){ - var src = statsForFile.source[i]; - - if (branchStack.length > 0 || - typeof statsForFile.branchData !== 'undefined') - { - if (typeof statsForFile.branchData[i+1] !== 'undefined') - { - var cols = statsForFile.branchData[i+1].filter(isUndefined); - var colsIndex=0; - - - src = branchReport(colsIndex,src,cols,0,i+1).src; - - }else if (branchStack.length){ - src = branchReport(0,src,null,0,i+1).src; - }else{ - src = escapeInvalidXmlChars(src); - } - }else{ - src = escapeInvalidXmlChars(src); - } - var lineClass=""; - if(statsForFile[i+1]) { - numberOfFilesCovered += 1; - totalSmts += 1; - lineClass = 'hit'; - }else{ - if(statsForFile[i+1] === 0){ - totalSmts++; - lineClass = 'miss'; - } - } - code[i + 1] = "
    "+(i + 1)+""+src+"
    "; - } - totals.totalSmts += totalSmts; - totals.numberOfFilesCovered += numberOfFilesCovered; - var totalBranches=0; - var passedBranches=0; - if (typeof statsForFile.branchData !== 'undefined'){ - for(var j=0;j 0 && - typeof statsForFile.branchData[j][k][1] !== 'undefined' && - statsForFile.branchData[j][k][1].length > 0){ - passedBranches++; - } - } - } - } - } - } - totals.passedBranches += passedBranches; - totals.totalBranches += totalBranches; - - // if "data-cover-modulepattern" was provided, - // track totals per module name as well as globally - if (modulePatternRegex) { - var moduleName = file.match(modulePatternRegex)[1]; - - if(!totals.moduleTotalStatements.hasOwnProperty(moduleName)) { - totals.moduleTotalStatements[moduleName] = 0; - totals.moduleTotalCoveredStatements[moduleName] = 0; - } - - totals.moduleTotalStatements[moduleName] += totalSmts; - totals.moduleTotalCoveredStatements[moduleName] += numberOfFilesCovered; - - if(!totals.moduleTotalBranches.hasOwnProperty(moduleName)) { - totals.moduleTotalBranches[moduleName] = 0; - totals.moduleTotalCoveredBranches[moduleName] = 0; - } - - totals.moduleTotalBranches[moduleName] += totalBranches; - totals.moduleTotalCoveredBranches[moduleName] += passedBranches; - } - - var result = percentage(numberOfFilesCovered, totalSmts); - - var output = fileTemplate.replace("{{file}}", file) - .replace("{{percentage}}",result) - .replace("{{numberCovered}}", numberOfFilesCovered) - .replace(/\{\{fileNumber\}\}/g, fileNumber) - .replace("{{totalSmts}}", totalSmts) - .replace("{{totalBranches}}", totalBranches) - .replace("{{passedBranches}}", passedBranches) - .replace("{{source}}", code.join(" ")); - if(result < successRate) - { - output = output.replace("{{statusclass}}", "bl-error"); - } else { - output = output.replace("{{statusclass}}", "bl-success"); - } - bodyContent += output; - } - - // create temporary function for use by the global totals reporter, - // as well as the per-module totals reporter - var createAggregateTotal = function(numSt, numCov, numBranch, numCovBr, moduleName) { - - var totalPercent = percentage(numCov, numSt); - var statusClass = totalPercent < successRate ? "bl-error" : "bl-success"; - var rowTitle = ( moduleName ? "Total for module: " + moduleName : "Global total" ); - var totalsOutput = grandTotalTemplate.replace("{{rowTitle}}", rowTitle) - .replace("{{percentage}}", totalPercent) - .replace("{{numberCovered}}", numCov) - .replace("{{totalSmts}}", numSt) - .replace("{{passedBranches}}", numCovBr) - .replace("{{totalBranches}}", numBranch) - .replace("{{statusclass}}", statusClass); - - bodyContent += totalsOutput; - }; - - // if "data-cover-modulepattern" was provided, - // output the per-module totals alongside the global totals - if (modulePatternRegex) { - for (var thisModuleName in totals.moduleTotalStatements) { - if (totals.moduleTotalStatements.hasOwnProperty(thisModuleName)) { - - var moduleTotalSt = totals.moduleTotalStatements[thisModuleName]; - var moduleTotalCovSt = totals.moduleTotalCoveredStatements[thisModuleName]; - - var moduleTotalBr = totals.moduleTotalBranches[thisModuleName]; - var moduleTotalCovBr = totals.moduleTotalCoveredBranches[thisModuleName]; - - createAggregateTotal(moduleTotalSt, moduleTotalCovSt, moduleTotalBr, moduleTotalCovBr, thisModuleName); - } - } - } - - createAggregateTotal(totals.totalSmts, totals.numberOfFilesCovered, totals.totalBranches, totals.passedBranches, null); - bodyContent += "
    "; //closing main - - - appendTag('style', head, cssSytle); - //appendStyle(body, headerContent); - if (document.getElementById("blanket-main")){ - document.getElementById("blanket-main").innerHTML= - bodyContent.slice(23,-6); - }else{ - appendTag('div', body, bodyContent); - } - //appendHtml(body, ''); -}; - -(function(){ - var newOptions={}; - //http://stackoverflow.com/a/2954896 - var toArray =Array.prototype.slice; - var scripts = toArray.call(document.scripts); - toArray.call(scripts[scripts.length - 1].attributes) - .forEach(function(es){ - if(es.nodeName === "data-cover-only"){ - newOptions.filter = es.nodeValue; - } - if(es.nodeName === "data-cover-never"){ - newOptions.antifilter = es.nodeValue; - } - if(es.nodeName === "data-cover-reporter"){ - newOptions.reporter = es.nodeValue; - } - if (es.nodeName === "data-cover-adapter"){ - newOptions.adapter = es.nodeValue; - } - if (es.nodeName === "data-cover-loader"){ - newOptions.loader = es.nodeValue; - } - if (es.nodeName === "data-cover-timeout"){ - newOptions.timeout = es.nodeValue; - } - if (es.nodeName === "data-cover-modulepattern") { - newOptions.modulePattern = es.nodeValue; - } - if (es.nodeName === "data-cover-reporter-options"){ - try{ - newOptions.reporter_options = JSON.parse(es.nodeValue); - }catch(e){ - if (blanket.options("debug")){ - throw new Error("Invalid reporter options. Must be a valid stringified JSON object."); - } - } - } - if (es.nodeName === "data-cover-testReadyCallback"){ - newOptions.testReadyCallback = es.nodeValue; - } - if (es.nodeName === "data-cover-customVariable"){ - newOptions.customVariable = es.nodeValue; - } - if (es.nodeName === "data-cover-flags"){ - var flags = " "+es.nodeValue+" "; - if (flags.indexOf(" ignoreError ") > -1){ - newOptions.ignoreScriptError = true; - } - if (flags.indexOf(" autoStart ") > -1){ - newOptions.autoStart = true; - } - if (flags.indexOf(" ignoreCors ") > -1){ - newOptions.ignoreCors = true; - } - if (flags.indexOf(" branchTracking ") > -1){ - newOptions.branchTracking = true; - } - if (flags.indexOf(" sourceURL ") > -1){ - newOptions.sourceURL = true; - } - if (flags.indexOf(" debug ") > -1){ - newOptions.debug = true; - } - if (flags.indexOf(" engineOnly ") > -1){ - newOptions.engineOnly = true; - } - if (flags.indexOf(" commonJS ") > -1){ - newOptions.commonJS = true; - } - if (flags.indexOf(" instrumentCache ") > -1){ - newOptions.instrumentCache = true; - } - } - }); - blanket.options(newOptions); - - if (typeof requirejs !== 'undefined'){ - blanket.options("existingRequireJS",true); - } - /* setup requirejs loader, if needed */ - - if (blanket.options("commonJS")){ - blanket._commonjs = {}; - } -})(); -(function(_blanket){ -_blanket.extend({ - utils: { - normalizeBackslashes: function(str) { - return str.replace(/\\/g, '/'); - }, - matchPatternAttribute: function(filename,pattern){ - if (typeof pattern === 'string'){ - if (pattern.indexOf("[") === 0){ - //treat as array - var pattenArr = pattern.slice(1,pattern.length-1).split(","); - return pattenArr.some(function(elem){ - return _blanket.utils.matchPatternAttribute(filename,_blanket.utils.normalizeBackslashes(elem.slice(1,-1))); - //return filename.indexOf(_blanket.utils.normalizeBackslashes(elem.slice(1,-1))) > -1; - }); - }else if ( pattern.indexOf("//") === 0){ - var ex = pattern.slice(2,pattern.lastIndexOf('/')); - var mods = pattern.slice(pattern.lastIndexOf('/')+1); - var regex = new RegExp(ex,mods); - return regex.test(filename); - }else if (pattern.indexOf("#") === 0){ - return window[pattern.slice(1)].call(window,filename); - }else{ - return filename.indexOf(_blanket.utils.normalizeBackslashes(pattern)) > -1; - } - }else if ( pattern instanceof Array ){ - return pattern.some(function(elem){ - return _blanket.utils.matchPatternAttribute(filename,elem); - }); - }else if (pattern instanceof RegExp){ - return pattern.test(filename); - }else if (typeof pattern === "function"){ - return pattern.call(window,filename); - } - }, - blanketEval: function(data){ - _blanket._addScript(data); - }, - collectPageScripts: function(){ - var toArray = Array.prototype.slice; - var scripts = toArray.call(document.scripts); - var selectedScripts=[],scriptNames=[]; - var filter = _blanket.options("filter"); - if(filter != null){ - //global filter in place, data-cover-only - var antimatch = _blanket.options("antifilter"); - selectedScripts = toArray.call(document.scripts) - .filter(function(s){ - return toArray.call(s.attributes).filter(function(sn){ - return sn.nodeName === "src" && _blanket.utils.matchPatternAttribute(sn.nodeValue,filter) && - (typeof antimatch === "undefined" || !_blanket.utils.matchPatternAttribute(sn.nodeValue,antimatch)); - }).length === 1; - }); - }else{ - selectedScripts = toArray.call(document.querySelectorAll("script[data-cover]")); - } - scriptNames = selectedScripts.map(function(s){ - return _blanket.utils.qualifyURL( - toArray.call(s.attributes).filter( - function(sn){ - return sn.nodeName === "src"; - })[0].nodeValue); - }); - if (!filter){ - _blanket.options("filter","['"+scriptNames.join("','")+"']"); - } - return scriptNames; - }, - loadAll: function(nextScript,cb,preprocessor){ - /** - * load dependencies - * @param {nextScript} factory for priority level - * @param {cb} the done callback - */ - var currScript=nextScript(); - var isLoaded = _blanket.utils.scriptIsLoaded( - currScript, - _blanket.utils.ifOrdered, - nextScript, - cb - ); - - if (!(_blanket.utils.cache[currScript] && _blanket.utils.cache[currScript].loaded)){ - var attach = function(){ - if (_blanket.options("debug")) {console.log("BLANKET-Mark script:"+currScript+", as loaded and move to next script.");} - isLoaded(); - }; - var whenDone = function(result){ - if (_blanket.options("debug")) {console.log("BLANKET-File loading finished");} - if (typeof result !== 'undefined'){ - if (_blanket.options("debug")) {console.log("BLANKET-Add file to DOM.");} - _blanket._addScript(result); - } - attach(); - }; - - _blanket.utils.attachScript( - { - url: currScript - }, - function (content){ - _blanket.utils.processFile( - content, - currScript, - whenDone, - whenDone - ); - } - ); - }else{ - isLoaded(); - } - }, - attachScript: function(options,cb){ - var timeout = _blanket.options("timeout") || 3000; - setTimeout(function(){ - if (!_blanket.utils.cache[options.url].loaded){ - throw new Error("error loading source script"); - } - },timeout); - _blanket.utils.getFile( - options.url, - cb, - function(){ throw new Error("error loading source script");} - ); - }, - ifOrdered: function(nextScript,cb){ - /** - * ordered loading callback - * @param {nextScript} factory for priority level - * @param {cb} the done callback - */ - var currScript = nextScript(true); - if (currScript){ - _blanket.utils.loadAll(nextScript,cb); - }else{ - cb(new Error("Error in loading chain.")); - } - }, - scriptIsLoaded: function(url,orderedCb,nextScript,cb){ - /** - * returns a callback that checks a loading list to see if a script is loaded. - * @param {orderedCb} callback if ordered loading is being done - * @param {nextScript} factory for next priority level - * @param {cb} the done callback - */ - if (_blanket.options("debug")) {console.log("BLANKET-Returning function");} - return function(){ - if (_blanket.options("debug")) {console.log("BLANKET-Marking file as loaded: "+url);} - - _blanket.utils.cache[url].loaded=true; - - if (_blanket.utils.allLoaded()){ - if (_blanket.options("debug")) {console.log("BLANKET-All files loaded");} - cb(); - }else if (orderedCb){ - //if it's ordered we need to - //traverse down to the next - //priority level - if (_blanket.options("debug")) {console.log("BLANKET-Load next file.");} - orderedCb(nextScript,cb); - } - }; - }, - cache: {}, - allLoaded: function (){ - /** - * check if depdencies are loaded in cache - */ - var cached = Object.keys(_blanket.utils.cache); - for (var i=0;i -1){ - callback(_blanket.blanketSession[key]); - foundInSession=true; - return; - } - } - } - if (!foundInSession){ - var xhr = _blanket.utils.createXhr(); - xhr.open('GET', url, true); - - //Allow overrides specified in config - if (onXhr) { - onXhr(xhr, url); - } - - xhr.onreadystatechange = function (evt) { - var status, err; - - //Do not explicitly handle errors, those should be - //visible via console output in the browser. - if (xhr.readyState === 4) { - status = xhr.status; - if ((status > 399 && status < 600) /*|| - (status === 0 && - navigator.userAgent.toLowerCase().indexOf('firefox') > -1) - */ ) { - //An http 4xx or 5xx error. Signal an error. - err = new Error(url + ' HTTP status: ' + status); - err.xhr = xhr; - errback(err); - } else { - callback(xhr.responseText); - } - } - }; - try{ - xhr.send(null); - }catch(e){ - if (e.code && (e.code === 101 || e.code === 1012) && _blanket.options("ignoreCors") === false){ - //running locally and getting error from browser - _blanket.showManualLoader(); - } else { - throw e; - } - } - } - } - } -}); - -(function(){ - var require = blanket.options("commonJS") ? blanket._commonjs.require : window.require; - var requirejs = blanket.options("commonJS") ? blanket._commonjs.requirejs : window.requirejs; - if (!_blanket.options("engineOnly") && _blanket.options("existingRequireJS")){ - - _blanket.utils.oldloader = requirejs.load; - - requirejs.load = function (context, moduleName, url) { - _blanket.requiringFile(url); - _blanket.utils.getFile(url, - function(content){ - _blanket.utils.processFile( - content, - url, - function newLoader(){ - context.completeLoad(moduleName); - }, - function oldLoader(){ - _blanket.utils.oldloader(context, moduleName, url); - } - ); - }, function (err) { - _blanket.requiringFile(); - throw err; - }); - }; - } - // Save the XHR constructor, just in case frameworks like Sinon would sandbox it. - _blanket.utils.cacheXhrConstructor(); -})(); - -})(blanket); - -(function(){ -if (typeof QUnit !== 'undefined'){ - //check to make sure requirejs is completed before we start the test runner - var allLoaded = function() { - return window.QUnit.config.queue.length > 0 && blanket.noConflict().requireFilesLoaded(); - }; - - if (!QUnit.config.urlConfig[0].tooltip){ - //older versions we run coverage automatically - //and we change how events are binded - QUnit.begin=function(){ - blanket.noConflict().setupCoverage(); - }; - - QUnit.done=function(failures, total) { - blanket.noConflict().onTestsDone(); - }; - QUnit.moduleStart=function( details ) { - blanket.noConflict().onModuleStart(); - }; - QUnit.testStart=function( details ) { - blanket.noConflict().onTestStart(); - }; - QUnit.testDone=function( details ) { - blanket.noConflict().onTestDone(details.total,details.passed); - }; - blanket.beforeStartTestRunner({ - condition: allLoaded, - callback: QUnit.start - }); - }else{ - QUnit.config.urlConfig.push({ - id: "coverage", - label: "Enable coverage", - tooltip: "Enable code coverage." - }); - - if ( QUnit.urlParams.coverage || blanket.options("autoStart") ) { - QUnit.begin(function(){ - blanket.noConflict().setupCoverage(); - }); - - QUnit.done(function(failures, total) { - blanket.noConflict().onTestsDone(); - }); - QUnit.moduleStart(function( details ) { - blanket.noConflict().onModuleStart(); - }); - QUnit.testStart(function( details ) { - blanket.noConflict().onTestStart(); - }); - QUnit.testDone(function( details ) { - blanket.noConflict().onTestDone(details.total,details.passed); - }); - blanket.noConflict().beforeStartTestRunner({ - condition: allLoaded, - callback: function(){ - if (!(blanket.options("existingRequireJS") && !blanket.options("autoStart"))){ - QUnit.start(); - } - } - }); - }else{ - if (blanket.options("existingRequireJS")){ requirejs.load = _blanket.utils.oldloader; } - blanket.noConflict().beforeStartTestRunner({ - condition: allLoaded, - callback: function(){ - if (!(blanket.options("existingRequireJS") && !blanket.options("autoStart"))){ - QUnit.start(); - } - }, - coverage:false - }); - } - } -} -})(); \ No newline at end of file diff --git a/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/bootstrap/dist/css/bootstrap-theme.min.css b/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/bootstrap/dist/css/bootstrap-theme.min.css deleted file mode 100644 index 5e394019..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/bootstrap/dist/css/bootstrap-theme.min.css +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * Bootstrap v3.3.7 (http://getbootstrap.com) - * Copyright 2011-2016 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */.btn-danger,.btn-default,.btn-info,.btn-primary,.btn-success,.btn-warning{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-danger.disabled,.btn-danger[disabled],.btn-default.disabled,.btn-default[disabled],.btn-info.disabled,.btn-info[disabled],.btn-primary.disabled,.btn-primary[disabled],.btn-success.disabled,.btn-success[disabled],.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-danger,fieldset[disabled] .btn-default,fieldset[disabled] .btn-info,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-success,fieldset[disabled] .btn-warning{-webkit-box-shadow:none;box-shadow:none}.btn-danger .badge,.btn-default .badge,.btn-info .badge,.btn-primary .badge,.btn-success .badge,.btn-warning .badge{text-shadow:none}.btn.active,.btn:active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:focus,.btn-default:hover{background-color:#e0e0e0;background-position:0 -15px}.btn-default.active,.btn-default:active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:focus,.btn-primary:hover{background-color:#265a88;background-position:0 -15px}.btn-primary.active,.btn-primary:active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:focus,.btn-success:hover{background-color:#419641;background-position:0 -15px}.btn-success.active,.btn-success:active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:focus,.btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.btn-info.active,.btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:focus,.btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.btn-warning.active,.btn-warning:active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:focus,.btn-danger:hover{background-color:#c12e2a;background-position:0 -15px}.btn-danger.active,.btn-danger:active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#c12e2a;background-image:none}.img-thumbnail,.thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#2e6da4;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:focus .badge,.list-group-item.active:hover .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)} -/*# sourceMappingURL=bootstrap-theme.min.css.map */ \ No newline at end of file diff --git a/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/bootstrap/dist/css/bootstrap.min.css b/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/bootstrap/dist/css/bootstrap.min.css deleted file mode 100644 index ed3905e0..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/bootstrap/dist/css/bootstrap.min.css +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * Bootstrap v3.3.7 (http://getbootstrap.com) - * Copyright 2011-2016 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;-webkit-text-size-adjust:100%;-ms-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:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}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{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;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-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{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 td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../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:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro: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"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;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:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;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,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,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,.h5,.h6,h4,h5,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{padding:.2em;background-color:#fcf8e3}.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:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer: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:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;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{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.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-md-1,.col-md-10,.col-md-11,.col-md-12,.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-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.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-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{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-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{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-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{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-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{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:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{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;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@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 #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{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=checkbox]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;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-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.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],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left: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}select[multiple].input-sm,textarea.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 select[multiple].form-control,.form-group-sm textarea.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}select[multiple].input-lg,textarea.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 select[multiple].form-control,.form-group-lg textarea.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}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.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 .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.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;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{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=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .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;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.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}.dropdown,.dropup{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;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.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:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{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-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-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-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;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-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-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-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;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=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{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-right:0;padding-left: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}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.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}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn: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:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;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=checkbox],.input-group-addon input[type=radio]{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-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-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:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-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:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{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{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;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 #ddd}.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:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.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:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.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:focus,.nav-pills>li.active>a:hover{color:#fff;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{margin-bottom:5px;text-align:center}.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:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-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{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;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-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{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-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{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;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{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;padding:9px 10px;margin-top:8px;margin-right:15px;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;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{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{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@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 .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{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;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-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-right:15px;margin-left: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:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@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:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.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{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.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;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.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-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-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-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.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:#eee}.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{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.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:700}.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{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.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}}@-o-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{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-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:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.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-body,.media-left,.media-right{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{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-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:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .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:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{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:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{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:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{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:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{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:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;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-left-radius:3px;border-top-right-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-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody: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:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.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 th:first-child,.panel>.table-responsive:first-child>.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 th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.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 th:last-child,.panel>.table-responsive:first-child>.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 th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.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 th:first-child,.panel>.table-responsive:last-child>.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 th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.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 th:last-child,.panel>.table-responsive:last-child>.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 th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.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 #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border: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>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;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:#fff}.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 embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height: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;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(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:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.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:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.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-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}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;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:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.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-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;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{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,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;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.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%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(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-next,.carousel-control .icon-prev{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{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left: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-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-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}td.visible-xs,th.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}td.visible-sm,th.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}td.visible-md,th.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}td.visible-lg,th.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}td.visible-print,th.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}} -/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.eot b/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.eot deleted file mode 100644 index b93a4953..00000000 Binary files a/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.eot and /dev/null differ diff --git a/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.svg b/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.svg deleted file mode 100644 index 94fb5490..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.svg +++ /dev/null @@ -1,288 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf b/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf deleted file mode 100644 index 1413fc60..00000000 Binary files a/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf and /dev/null differ diff --git a/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff b/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff deleted file mode 100644 index 9e612858..00000000 Binary files a/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff and /dev/null differ diff --git a/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2 b/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2 deleted file mode 100644 index 64539b54..00000000 Binary files a/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2 and /dev/null differ diff --git a/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/bootstrap/dist/js/bootstrap.min.js b/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/bootstrap/dist/js/bootstrap.min.js deleted file mode 100644 index 9bcd2fcc..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/bootstrap/dist/js/bootstrap.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap v3.3.7 (http://getbootstrap.com) - * Copyright 2011-2016 Twitter, Inc. - * Licensed under the MIT license - */ -if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){if(a(b.target).is(this))return b.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.7",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a("#"===f?[]:f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.7",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c).prop(c,!0)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c).prop(c,!1))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target).closest(".btn");b.call(d,"toggle"),a(c.target).is('input[type="radio"], input[type="checkbox"]')||(c.preventDefault(),d.is("input,button")?d.trigger("focus"):d.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(a>this.$items.length-1||a<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide("next")},c.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.7",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.7",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&jdocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth
    ',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);if(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),!c.isInStateTrue())return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-mo.width?"left":"left"==h&&k.left-lg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null,a.$element=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.7",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.7",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b=e[a]&&(void 0===e[a+1]||b .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.7",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return e=a-d&&"bottom"},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file diff --git a/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/fontawesome/css/font-awesome.min.css b/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/fontawesome/css/font-awesome.min.css deleted file mode 100644 index 540440ce..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/fontawesome/css/font-awesome.min.css +++ /dev/null @@ -1,4 +0,0 @@ -/*! - * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;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} diff --git a/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/fontawesome/fonts/FontAwesome.otf b/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/fontawesome/fonts/FontAwesome.otf deleted file mode 100644 index 401ec0f3..00000000 Binary files a/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/fontawesome/fonts/FontAwesome.otf and /dev/null differ diff --git a/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/fontawesome/fonts/fontawesome-webfont.eot b/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/fontawesome/fonts/fontawesome-webfont.eot deleted file mode 100644 index e9f60ca9..00000000 Binary files a/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/fontawesome/fonts/fontawesome-webfont.eot and /dev/null differ diff --git a/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/fontawesome/fonts/fontawesome-webfont.svg b/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/fontawesome/fonts/fontawesome-webfont.svg deleted file mode 100644 index 855c845e..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/fontawesome/fonts/fontawesome-webfont.svg +++ /dev/null @@ -1,2671 +0,0 @@ - - - - -Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 - By ,,, -Copyright Dave Gandy 2016. All rights reserved. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/fontawesome/fonts/fontawesome-webfont.ttf b/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/fontawesome/fonts/fontawesome-webfont.ttf deleted file mode 100644 index 35acda2f..00000000 Binary files a/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/fontawesome/fonts/fontawesome-webfont.ttf and /dev/null differ diff --git a/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/fontawesome/fonts/fontawesome-webfont.woff b/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/fontawesome/fonts/fontawesome-webfont.woff deleted file mode 100644 index 400014a4..00000000 Binary files a/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/fontawesome/fonts/fontawesome-webfont.woff and /dev/null differ diff --git a/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/fontawesome/fonts/fontawesome-webfont.woff2 b/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/fontawesome/fonts/fontawesome-webfont.woff2 deleted file mode 100644 index 4d13fc60..00000000 Binary files a/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/fontawesome/fonts/fontawesome-webfont.woff2 and /dev/null differ diff --git a/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/jquery-1/dist/jquery.js b/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/jquery-1/dist/jquery.js deleted file mode 100644 index 7fc60fca..00000000 --- a/ecomp-portal-FE/client/bower_components/jqTree/static/bower_components/jquery-1/dist/jquery.js +++ /dev/null @@ -1,11008 +0,0 @@ -/*! - * jQuery JavaScript Library v1.12.4 - * http://jquery.com/ - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license - * http://jquery.org/license - * - * Date: 2016-05-20T17:17Z - */ - -(function( global, factory ) { - - 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 ) { - -// Support: Firefox 18+ -// Can't be in strict mode, several libs including ASP.NET trace -// the stack via arguments.caller.callee and Firefox dies if -// you try to trace through "use strict" call chains. (#13335) -//"use strict"; -var deletedIds = []; - -var document = window.document; - -var slice = deletedIds.slice; - -var concat = deletedIds.concat; - -var push = deletedIds.push; - -var indexOf = deletedIds.indexOf; - -var class2type = {}; - -var toString = class2type.toString; - -var hasOwn = class2type.hasOwnProperty; - -var support = {}; - - - -var - version = "1.12.4", - - // 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, IE<9 - // 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. - 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: deletedIds.sort, - splice: deletedIds.splice -}; - -jQuery.extend = jQuery.fn.extend = function() { - var src, copyIsArray, copy, name, options, clone, - target = arguments[ 0 ] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - - // 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 || function( obj ) { - return jQuery.type( obj ) === "array"; - }, - - isWindow: function( obj ) { - /* jshint eqeqeq: false */ - 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 - // adding 1 corrects loss of precision from parseFloat (#15100) - var realStringObj = obj && obj.toString(); - return !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0; - }, - - isEmptyObject: function( obj ) { - var name; - for ( name in obj ) { - return false; - } - return true; - }, - - isPlainObject: function( obj ) { - var key; - - // Must be an Object. - // Because of IE, we also have to check the presence of the constructor property. - // Make sure that DOM nodes and window objects don't pass through, as well - if ( !obj || jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { - return false; - } - - try { - - // Not own constructor property must be Object - if ( obj.constructor && - !hasOwn.call( obj, "constructor" ) && - !hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) { - return false; - } - } catch ( e ) { - - // IE8,9 Will throw exceptions on certain host objects #9897 - return false; - } - - // Support: IE<9 - // Handle iteration over inherited properties before own properties. - if ( !support.ownFirst ) { - for ( key in obj ) { - return hasOwn.call( obj, key ); - } - } - - // Own properties are enumerated firstly, so to speed up, - // if last one is own, then all properties are own. - for ( key in obj ) {} - - return key === undefined || hasOwn.call( obj, key ); - }, - - type: function( obj ) { - if ( obj == null ) { - return obj + ""; - } - return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call( obj ) ] || "object" : - typeof obj; - }, - - // Workarounds based on findings by Jim Driscoll - // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context - globalEval: function( data ) { - if ( data && jQuery.trim( data ) ) { - - // We use execScript on Internet Explorer - // We use an anonymous function so that context is window - // rather than jQuery in Firefox - ( window.execScript || function( data ) { - window[ "eval" ].call( window, data ); // jscs:ignore requireDotNotation - } )( data ); - } - }, - - // Convert dashed to camelCase; used by the css and data modules - // Microsoft forgot to hump their vendor prefix (#9572) - camelCase: function( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); - }, - - nodeName: function( elem, name ) { - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - }, - - 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.1, IE<9 - 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 ) { - var len; - - if ( arr ) { - if ( indexOf ) { - return indexOf.call( arr, elem, i ); - } - - len = arr.length; - i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; - - for ( ; i < len; i++ ) { - - // Skip accessing in sparse arrays - if ( i in arr && arr[ i ] === elem ) { - return i; - } - } - } - - return -1; - }, - - merge: function( first, second ) { - var len = +second.length, - j = 0, - i = first.length; - - while ( j < len ) { - first[ i++ ] = second[ j++ ]; - } - - // Support: IE<9 - // Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists) - if ( len !== len ) { - while ( second[ j ] !== undefined ) { - 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, - - // Bind a function to a context, optionally partially applying any - // arguments. - proxy: function( fn, context ) { - var args, proxy, tmp; - - if ( typeof context === "string" ) { - tmp = fn[ context ]; - context = fn; - fn = tmp; - } - - // Quick check to determine if target is callable, in the spec - // this throws a TypeError, but we will just return undefined. - if ( !jQuery.isFunction( fn ) ) { - return undefined; - } - - // Simulated bind - args = 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: function() { - return +( new Date() ); - }, - - // jQuery.support is not used in Core but other projects attach their - // properties to it so it needs to exist. - support: support -} ); - -// JSHint would error on this code due to the Symbol not being defined in ES5. -// Defining this global in .jshintrc would create a danger of using the global -// unguarded in another place, it seems safer to just disable JSHint for these -// three lines. -/* jshint ignore: start */ -if ( typeof Symbol === "function" ) { - jQuery.fn[ Symbol.iterator ] = deletedIds[ Symbol.iterator ]; -} -/* jshint ignore: end */ - -// 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: iOS 8.2 (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 = jQuery.type( obj ); - - if ( type === "function" || jQuery.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.2.1 - * http://sizzlejs.com/ - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license - * http://jquery.org/license - * - * Date: 2015-10-17 - */ -(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(), - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - } - return 0; - }, - - // General-purpose constants - 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 as it's faster than native - // http://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-]|[^\\x00-\\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 + "*" ), - - rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), - - 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" ) - }, - - 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 ); - }, - - // Used for iframes - // See setDocument() - // Removing the function wrapper causes a "Permission Denied" - // error in IE - unloadHandler = function() { - setDocument(); - }; - -// 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, nidselect, 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 && - !compilerCache[ selector + " " ] && - (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { - - if ( nodeType !== 1 ) { - newContext = context; - newSelector = selector; - - // qSA looks outside Element context, which is not what we want - // Thanks to Andrew Dupont for this workaround technique - // Support: IE <=8 - // Exclude object elements - } else if ( context.nodeName.toLowerCase() !== "object" ) { - - // Capture the context ID, setting it first if necessary - if ( (nid = context.getAttribute( "id" )) ) { - nid = nid.replace( rescape, "\\$&" ); - } else { - context.setAttribute( "id", (nid = expando) ); - } - - // Prefix every selector in the list - groups = tokenize( selector ); - i = groups.length; - nidselect = ridentifier.test( nid ) ? "#" + nid : "[id='" + nid + "']"; - while ( i-- ) { - groups[i] = nidselect + " " + toSelector( groups[i] ); - } - newSelector = groups.join( "," ); - - // Expand context for sibling selectors - newContext = rsibling.test( selector ) && testContext( context.parentNode ) || - context; - } - - if ( newSelector ) { - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch ( qsaError ) { - } 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 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 = 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 && - ( ~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 !== "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 ) { - // 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, parent, - 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 ( (parent = document.defaultView) && parent.top !== parent ) { - // Support: IE 11 - if ( parent.addEventListener ) { - parent.addEventListener( "unload", unloadHandler, false ); - - // Support: IE 9 - 10 only - } else if ( parent.attachEvent ) { - parent.attachEvent( "onunload", unloadHandler ); - } - } - - /* 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( document.createComment("") ); - return !div.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 programatically-set names, - // so use a roundabout getElementsByName test - support.getById = assert(function( div ) { - docElem.appendChild( div ).id = expando; - return !document.getElementsByName || !document.getElementsByName( expando ).length; - }); - - // ID find and filter - if ( support.getById ) { - Expr.find["ID"] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var m = context.getElementById( id ); - return m ? [ 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 !== "undefined" && - elem.getAttributeNode("id"); - return node && node.value === attrId; - }; - }; - } - - // 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 http://bugs.jquery.com/ticket/13378 - rbuggyQSA = []; - - if ( (support.qsa = rnative.test( document.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 - docElem.appendChild( 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("[msallowcapture^='']").length ) { - rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); - } - - // Support: IE8 - // Boolean attributes and "value" are not treated correctly - if ( !div.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 ( !div.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 ( !div.querySelectorAll(":checked").length ) { - rbuggyQSA.push(":checked"); - } - - // Support: Safari 8+, iOS 8+ - // https://bugs.webkit.org/show_bug.cgi?id=136851 - // In-page `selector#id sibing-combinator selector` fails - if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) { - rbuggyQSA.push(".#.+[+~]"); - } - }); - - assert(function( div ) { - // Support: Windows 8 Native Apps - // The type and name attributes are restricted during .innerHTML assignment - var input = document.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 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 ); - } - - // Make sure that attribute selectors are quoted - expr = expr.replace( rattributeQuotes, "='$1']" ); - - if ( support.matchesSelector && documentIsHTML && - !compilerCache[ 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) {} - } - - 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 !== "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 || 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, 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 ( (oldCache = uniqueCache[ 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 - uniqueCache[ 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( 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" && - 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, - !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( 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.uniqueSort = jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; - - - -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; - -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 ( jQuery.inArray( elem, qualifier ) > -1 ) !== 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, - ret = [], - self = this, - len = self.length; - - if ( typeof selector !== "string" ) { - return this.pushStack( jQuery( selector ).filter( function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - } ) ); - } - - for ( i = 0; i < len; i++ ) { - jQuery.find( selector, self[ i ], ret ); - } - - // Needed because $( selector, context ) becomes $( context ).find( selector ) - ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); - ret.selector = this.selector ? this.selector + " " + selector : selector; - return ret; - }, - 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, root ) { - var match, elem; - - // HANDLE: $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } - - // 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.charAt( 0 ) === "<" && - selector.charAt( selector.length - 1 ) === ">" && - selector.length >= 3 ) { - - // Assume that strings that start and end with <> are HTML and skip the regex check - match = [ null, selector, null ]; - - } else { - match = rquickExpr.exec( selector ); - } - - // Match html or make sure no context is specified for #id - if ( match && ( match[ 1 ] || !context ) ) { - - // HANDLE: $(html) -> $(array) - if ( match[ 1 ] ) { - context = context instanceof jQuery ? context[ 0 ] : context; - - // scripts is true for back-compat - // 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 ) { - - // Handle the case where IE and Opera return items - // by name instead of ID - if ( elem.id !== match[ 2 ] ) { - return rootjQuery.find( selector ); - } - - // Otherwise, we inject the element directly into the jQuery object - this.length = 1; - this[ 0 ] = elem; - } - - this.context = document; - this.selector = selector; - return this; - } - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return ( context || 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.context = this[ 0 ] = selector; - this.length = 1; - return this; - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( jQuery.isFunction( selector ) ) { - return typeof root.ready !== "undefined" ? - root.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.fn.extend( { - has: function( target ) { - var i, - targets = jQuery( target, this ), - len = targets.length; - - return this.filter( function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( this, targets[ i ] ) ) { - return true; - } - } - } ); - }, - - 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.uniqueSort( 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 jQuery.inArray( this[ 0 ], jQuery( elem ) ); - } - - // Locate the position of the desired element - return jQuery.inArray( - - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[ 0 ] : elem, this ); - }, - - add: function( selector, context ) { - 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 ) { - do { - cur = cur[ dir ]; - } while ( cur && cur.nodeType !== 1 ); - - return cur; -} - -jQuery.each( { - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return 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 ) { - return jQuery.nodeName( elem, "iframe" ) ? - elem.contentDocument || elem.contentWindow.document : - jQuery.merge( [], elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var ret = jQuery.map( this, fn, until ); - - if ( name.slice( -5 ) !== "Until" ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - ret = jQuery.filter( selector, ret ); - } - - if ( this.length > 1 ) { - - // Remove duplicates - if ( !guaranteedUnique[ name ] ) { - ret = jQuery.uniqueSort( ret ); - } - - // Reverse order for parents* and prev-derivatives - if ( rparentsprev.test( name ) ) { - ret = ret.reverse(); - } - } - - return this.pushStack( ret ); - }; -} ); -var rnotwhite = ( /\S+/g ); - - - -// Convert String-formatted options into Object-formatted ones -function createOptions( options ) { - var object = {}; - 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" ? - 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 = 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 ( jQuery.isFunction( arg ) ) { - if ( !options.unique || !self.has( arg ) ) { - list.push( arg ); - } - } else if ( arg && arg.length && jQuery.type( 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 = true; - if ( !memory ) { - self.disable(); - } - 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; -}; - - -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() - .progress( newDefer.notify ) - .done( newDefer.resolve ) - .fail( newDefer.reject ); - } 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() - .progress( updateFunc( i, progressContexts, progressValues ) ) - .done( updateFunc( i, resolveContexts, resolveValues ) ) - .fail( deferred.reject ); - } 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" ); - } - } -} ); - -/** - * Clean-up method for dom ready events - */ -function detach() { - if ( document.addEventListener ) { - document.removeEventListener( "DOMContentLoaded", completed ); - window.removeEventListener( "load", completed ); - - } else { - document.detachEvent( "onreadystatechange", completed ); - window.detachEvent( "onload", completed ); - } -} - -/** - * The ready event handler and self cleanup method - */ -function completed() { - - // readyState === "complete" is good enough for us to call the dom ready in oldIE - if ( document.addEventListener || - window.event.type === "load" || - document.readyState === "complete" ) { - - detach(); - 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. - // Support: IE6-10 - // 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 ); - - // Standards-based browsers support DOMContentLoaded - } else if ( document.addEventListener ) { - - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", completed ); - - // If IE event model is used - } else { - - // Ensure firing before onload, maybe late but safe also for iframes - document.attachEvent( "onreadystatechange", completed ); - - // A fallback to window.onload, that will always work - window.attachEvent( "onload", completed ); - - // If IE and not a frame - // continually check to see if the document is ready - var top = false; - - try { - top = window.frameElement == null && document.documentElement; - } catch ( e ) {} - - if ( top && top.doScroll ) { - ( function doScrollCheck() { - if ( !jQuery.isReady ) { - - try { - - // Use the trick by Diego Perini - // http://javascript.nwbox.com/IEContentLoaded/ - top.doScroll( "left" ); - } catch ( e ) { - return window.setTimeout( doScrollCheck, 50 ); - } - - // detach all dom ready events - detach(); - - // and execute any waiting functions - jQuery.ready(); - } - } )(); - } - } - } - return readyList.promise( obj ); -}; - -// Kick off the DOM ready check even if the user does not -jQuery.ready.promise(); - - - - -// Support: IE<9 -// Iteration over object's inherited properties before its own -var i; -for ( i in jQuery( support ) ) { - break; -} -support.ownFirst = i === "0"; - -// Note: most support tests are defined in their respective modules. -// false until the test is run -support.inlineBlockNeedsLayout = false; - -// Execute ASAP in case we need to set body.style.zoom -jQuery( function() { - - // Minified: var a,b,c,d - var val, div, body, container; - - body = document.getElementsByTagName( "body" )[ 0 ]; - if ( !body || !body.style ) { - - // Return for frameset docs that don't have a body - return; - } - - // Setup - div = document.createElement( "div" ); - container = document.createElement( "div" ); - container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px"; - body.appendChild( container ).appendChild( div ); - - if ( typeof div.style.zoom !== "undefined" ) { - - // Support: IE<8 - // Check if natively block-level elements act like inline-block - // elements when setting their display to 'inline' and giving - // them layout - div.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1"; - - support.inlineBlockNeedsLayout = val = div.offsetWidth === 3; - if ( val ) { - - // Prevent IE 6 from affecting layout for positioned elements #11048 - // Prevent IE from shrinking the body in IE 7 mode #12869 - // Support: IE<8 - body.style.zoom = 1; - } - } - - body.removeChild( container ); -} ); - - -( function() { - var div = document.createElement( "div" ); - - // Support: IE<9 - support.deleteExpando = true; - try { - delete div.test; - } catch ( e ) { - support.deleteExpando = false; - } - - // Null elements to avoid leaks in IE. - div = null; -} )(); -var acceptData = function( elem ) { - var noData = jQuery.noData[ ( elem.nodeName + " " ).toLowerCase() ], - nodeType = +elem.nodeType || 1; - - // Do not set data on non-element DOM nodes because it will not be cleared (#8335). - return nodeType !== 1 && nodeType !== 9 ? - false : - - // Nodes accept data unless otherwise specified; rejection can be conditional - !noData || noData !== true && elem.getAttribute( "classid" ) === noData; -}; - - - - -var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, - rmultiDash = /([A-Z])/g; - -function dataAttr( elem, key, data ) { - - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - - var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); - - data = elem.getAttribute( name ); - - if ( typeof data === "string" ) { - try { - data = data === "true" ? true : - data === "false" ? false : - data === "null" ? null : - - // Only convert to a number if it doesn't change the string - +data + "" === data ? +data : - rbrace.test( data ) ? jQuery.parseJSON( data ) : - data; - } catch ( e ) {} - - // Make sure we set the data so it isn't changed later - jQuery.data( elem, key, data ); - - } else { - data = undefined; - } - } - - return data; -} - -// checks a cache object for emptiness -function isEmptyDataObject( obj ) { - var name; - for ( name in obj ) { - - // if the public data object is empty, the private is still empty - if ( name === "data" && jQuery.isEmptyObject( obj[ name ] ) ) { - continue; - } - if ( name !== "toJSON" ) { - return false; - } - } - - return true; -} - -function internalData( elem, name, data, pvt /* Internal Use Only */ ) { - if ( !acceptData( elem ) ) { - return; - } - - var ret, thisCache, - internalKey = jQuery.expando, - - // We have to handle DOM nodes and JS objects differently because IE6-7 - // can't GC object references properly across the DOM-JS boundary - isNode = elem.nodeType, - - // Only DOM nodes need the global jQuery cache; JS object data is - // attached directly to the object so GC can occur automatically - cache = isNode ? jQuery.cache : elem, - - // Only defining an ID for JS objects if its cache already exists allows - // the code to shortcut on the same path as a DOM node with no cache - id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey; - - // Avoid doing any more work than we need to when trying to get data on an - // object that has no data at all - if ( ( !id || !cache[ id ] || ( !pvt && !cache[ id ].data ) ) && - data === undefined && typeof name === "string" ) { - return; - } - - if ( !id ) { - - // Only DOM nodes need a new unique ID for each element since their data - // ends up in the global cache - if ( isNode ) { - id = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++; - } else { - id = internalKey; - } - } - - if ( !cache[ id ] ) { - - // Avoid exposing jQuery metadata on plain JS objects when the object - // is serialized using JSON.stringify - cache[ id ] = isNode ? {} : { toJSON: jQuery.noop }; - } - - // An object can be passed to jQuery.data instead of a key/value pair; this gets - // shallow copied over onto the existing cache - if ( typeof name === "object" || typeof name === "function" ) { - if ( pvt ) { - cache[ id ] = jQuery.extend( cache[ id ], name ); - } else { - cache[ id ].data = jQuery.extend( cache[ id ].data, name ); - } - } - - thisCache = cache[ id ]; - - // jQuery data() is stored in a separate object inside the object's internal data - // cache in order to avoid key collisions between internal data and user-defined - // data. - if ( !pvt ) { - if ( !thisCache.data ) { - thisCache.data = {}; - } - - thisCache = thisCache.data; - } - - if ( data !== undefined ) { - thisCache[ jQuery.camelCase( name ) ] = data; - } - - // Check for both converted-to-camel and non-converted data property names - // If a data property was specified - if ( typeof name === "string" ) { - - // First Try to find as-is property data - ret = thisCache[ name ]; - - // Test for null|undefined property data - if ( ret == null ) { - - // Try to find the camelCased property - ret = thisCache[ jQuery.camelCase( name ) ]; - } - } else { - ret = thisCache; - } - - return ret; -} - -function internalRemoveData( elem, name, pvt ) { - if ( !acceptData( elem ) ) { - return; - } - - var thisCache, i, - isNode = elem.nodeType, - - // See jQuery.data for more information - cache = isNode ? jQuery.cache : elem, - id = isNode ? elem[ jQuery.expando ] : jQuery.expando; - - // If there is already no cache entry for this object, there is no - // purpose in continuing - if ( !cache[ id ] ) { - return; - } - - if ( name ) { - - thisCache = pvt ? cache[ id ] : cache[ id ].data; - - if ( thisCache ) { - - // Support array or space separated string names for data keys - if ( !jQuery.isArray( name ) ) { - - // try the string as a key before any manipulation - if ( name in thisCache ) { - name = [ name ]; - } else { - - // split the camel cased version by spaces unless a key with the spaces exists - name = jQuery.camelCase( name ); - if ( name in thisCache ) { - name = [ name ]; - } else { - name = name.split( " " ); - } - } - } else { - - // If "name" is an array of keys... - // When data is initially created, via ("key", "val") signature, - // keys will be converted to camelCase. - // Since there is no way to tell _how_ a key was added, remove - // both plain key and camelCase key. #12786 - // This will only penalize the array argument path. - name = name.concat( jQuery.map( name, jQuery.camelCase ) ); - } - - i = name.length; - while ( i-- ) { - delete thisCache[ name[ i ] ]; - } - - // If there is no data left in the cache, we want to continue - // and let the cache object itself get destroyed - if ( pvt ? !isEmptyDataObject( thisCache ) : !jQuery.isEmptyObject( thisCache ) ) { - return; - } - } - } - - // See jQuery.data for more information - if ( !pvt ) { - delete cache[ id ].data; - - // Don't destroy the parent cache unless the internal data object - // had been the only thing left in it - if ( !isEmptyDataObject( cache[ id ] ) ) { - return; - } - } - - // Destroy the cache - if ( isNode ) { - jQuery.cleanData( [ elem ], true ); - - // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) - /* jshint eqeqeq: false */ - } else if ( support.deleteExpando || cache != cache.window ) { - /* jshint eqeqeq: true */ - delete cache[ id ]; - - // When all else fails, undefined - } else { - cache[ id ] = undefined; - } -} - -jQuery.extend( { - cache: {}, - - // The following elements (space-suffixed to avoid Object.prototype collisions) - // throw uncatchable exceptions if you attempt to set expando properties - noData: { - "applet ": true, - "embed ": true, - - // ...but Flash objects (which have this classid) *can* handle expandos - "object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" - }, - - hasData: function( elem ) { - elem = elem.nodeType ? jQuery.cache[ elem[ jQuery.expando ] ] : elem[ jQuery.expando ]; - return !!elem && !isEmptyDataObject( elem ); - }, - - data: function( elem, name, data ) { - return internalData( elem, name, data ); - }, - - removeData: function( elem, name ) { - return internalRemoveData( elem, name ); - }, - - // For internal use only. - _data: function( elem, name, data ) { - return internalData( elem, name, data, true ); - }, - - _removeData: function( elem, name ) { - return internalRemoveData( elem, name, true ); - } -} ); - -jQuery.fn.extend( { - data: function( key, value ) { - var i, name, data, - elem = this[ 0 ], - attrs = elem && elem.attributes; - - // Special expections of .data basically thwart jQuery.access, - // so implement the relevant behavior ourselves - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = jQuery.data( elem ); - - if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { - 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 ] ); - } - } - } - jQuery._data( elem, "parsedAttrs", true ); - } - } - - return data; - } - - // Sets multiple values - if ( typeof key === "object" ) { - return this.each( function() { - jQuery.data( this, key ); - } ); - } - - return arguments.length > 1 ? - - // Sets one value - this.each( function() { - jQuery.data( this, key, value ); - } ) : - - // Gets one value - // Try to fetch any internally stored data first - elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined; - }, - - removeData: function( key ) { - return this.each( function() { - jQuery.removeData( this, key ); - } ); - } -} ); - - -jQuery.extend( { - queue: function( elem, type, data ) { - var queue; - - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = jQuery._data( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !queue || jQuery.isArray( data ) ) { - queue = jQuery._data( elem, type, jQuery.makeArray( data ) ); - } else { - queue.push( data ); - } - } - return queue || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - startLength = queue.length, - fn = queue.shift(), - hooks = jQuery._queueHooks( elem, type ), - next = function() { - jQuery.dequeue( elem, type ); - }; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - startLength--; - } - - if ( fn ) { - - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift( "inprogress" ); - } - - // clear up the last queue stop function - delete hooks.stop; - fn.call( elem, next, hooks ); - } - - if ( !startLength && hooks ) { - hooks.empty.fire(); - } - }, - - // not intended for public consumption - generates a queueHooks object, - // or returns the current one - _queueHooks: function( elem, type ) { - var key = type + "queueHooks"; - return jQuery._data( elem, key ) || jQuery._data( elem, key, { - empty: jQuery.Callbacks( "once memory" ).add( function() { - jQuery._removeData( elem, type + "queue" ); - jQuery._removeData( elem, key ); - } ) - } ); - } -} ); - -jQuery.fn.extend( { - queue: function( type, data ) { - var setter = 2; - - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - setter--; - } - - if ( arguments.length < setter ) { - return jQuery.queue( this[ 0 ], type ); - } - - return data === undefined ? - this : - this.each( function() { - var queue = jQuery.queue( this, type, data ); - - // ensure a hooks for this queue - jQuery._queueHooks( this, type ); - - if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - } ); - }, - dequeue: function( type ) { - return this.each( function() { - jQuery.dequeue( this, type ); - } ); - }, - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - }, - - // Get a promise resolved when queues of a certain type - // are emptied (fx is the type by default) - promise: function( type, obj ) { - var tmp, - count = 1, - defer = jQuery.Deferred(), - elements = this, - i = this.length, - resolve = function() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - }; - - if ( typeof type !== "string" ) { - obj = type; - type = undefined; - } - type = type || "fx"; - - while ( i-- ) { - tmp = jQuery._data( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } -} ); - - -( function() { - var shrinkWrapBlocksVal; - - support.shrinkWrapBlocks = function() { - if ( shrinkWrapBlocksVal != null ) { - return shrinkWrapBlocksVal; - } - - // Will be changed later if needed. - shrinkWrapBlocksVal = false; - - // Minified: var b,c,d - var div, body, container; - - body = document.getElementsByTagName( "body" )[ 0 ]; - if ( !body || !body.style ) { - - // Test fired too early or in an unsupported environment, exit. - return; - } - - // Setup - div = document.createElement( "div" ); - container = document.createElement( "div" ); - container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px"; - body.appendChild( container ).appendChild( div ); - - // Support: IE6 - // Check if elements with layout shrink-wrap their children - if ( typeof div.style.zoom !== "undefined" ) { - - // Reset CSS: box-sizing; display; margin; border - div.style.cssText = - - // Support: Firefox<29, Android 2.3 - // Vendor-prefix box-sizing - "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" + - "box-sizing:content-box;display:block;margin:0;border:0;" + - "padding:1px;width:1px;zoom:1"; - div.appendChild( document.createElement( "div" ) ).style.width = "5px"; - shrinkWrapBlocksVal = div.offsetWidth !== 3; - } - - body.removeChild( container ); - - return shrinkWrapBlocksVal; - }; - -} )(); -var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; - -var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); - - -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 ); - }; - - - -function adjustCSS( elem, prop, valueParts, tween ) { - var adjusted, - scale = 1, - 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 = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && - rcssNum.exec( jQuery.css( elem, prop ) ); - - if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { - - // Trust units reported by jQuery.css - unit = unit || initialInUnit[ 3 ]; - - // Make sure we update the tween properties later on - valueParts = valueParts || []; - - // Iteratively approximate from a nonzero starting point - initialInUnit = +initial || 1; - - do { - - // If previous iteration zeroed out, double until we get *something*. - // Use string for doubling so we don't accidentally see scale as unchanged below - scale = scale || ".5"; - - // Adjust and apply - initialInUnit = initialInUnit / scale; - jQuery.style( elem, prop, initialInUnit + unit ); - - // Update scale, tolerating zero or NaN from tween.cur() - // Break the loop if scale is unchanged or perfect, or if we've just had enough. - } while ( - scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations - ); - } - - 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; -} - - -// 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, - length = elems.length, - bulk = key == null; - - // Sets many values - if ( jQuery.type( 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 ( !jQuery.isFunction( value ) ) { - raw = true; - } - - if ( bulk ) { - - // Bulk operations run against the entire set - if ( raw ) { - fn.call( elems, value ); - fn = null; - - // ...except when executing function values - } else { - bulk = fn; - fn = function( elem, key, value ) { - return bulk.call( jQuery( elem ), value ); - }; - } - } - - if ( fn ) { - for ( ; i < length; i++ ) { - fn( - elems[ i ], - key, - raw ? value : value.call( elems[ i ], i, fn( elems[ i ], key ) ) - ); - } - } - } - - return chainable ? - elems : - - // Gets - bulk ? - fn.call( elems ) : - length ? fn( elems[ 0 ], key ) : emptyGet; -}; -var rcheckableType = ( /^(?:checkbox|radio)$/i ); - -var rtagName = ( /<([\w:-]+)/ ); - -var rscriptType = ( /^$|\/(?:java|ecma)script/i ); - -var rleadingWhitespace = ( /^\s+/ ); - -var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|" + - "details|dialog|figcaption|figure|footer|header|hgroup|main|" + - "mark|meter|nav|output|picture|progress|section|summary|template|time|video"; - - - -function createSafeFragment( document ) { - var list = nodeNames.split( "|" ), - safeFrag = document.createDocumentFragment(); - - if ( safeFrag.createElement ) { - while ( list.length ) { - safeFrag.createElement( - list.pop() - ); - } - } - return safeFrag; -} - - -( function() { - var div = document.createElement( "div" ), - fragment = document.createDocumentFragment(), - input = document.createElement( "input" ); - - // Setup - div.innerHTML = "
    a"; - - // IE strips leading whitespace when .innerHTML is used - support.leadingWhitespace = div.firstChild.nodeType === 3; - - // Make sure that tbody elements aren't automatically inserted - // IE will insert them into empty tables - support.tbody = !div.getElementsByTagName( "tbody" ).length; - - // Make sure that link elements get serialized correctly by innerHTML - // This requires a wrapper element in IE - support.htmlSerialize = !!div.getElementsByTagName( "link" ).length; - - // Makes sure cloning an html5 element does not cause problems - // Where outerHTML is undefined, this still works - support.html5Clone = - document.createElement( "nav" ).cloneNode( true ).outerHTML !== "<:nav>"; - - // Check if a disconnected checkbox will retain its checked - // value of true after appended to the DOM (IE6/7) - input.type = "checkbox"; - input.checked = true; - fragment.appendChild( input ); - support.appendChecked = input.checked; - - // Make sure textarea (and checkbox) defaultValue is properly cloned - // Support: IE6-IE11+ - div.innerHTML = ""; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; - - // #11217 - WebKit loses check when the name is after the checked attribute - fragment.appendChild( div ); - - // Support: Windows Web Apps (WWA) - // `name` and `type` must use .setAttribute for WWA (#14901) - input = document.createElement( "input" ); - 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; - - // Support: IE<9 - // Cloned elements keep attachEvent handlers, we use addEventListener on IE9+ - support.noCloneEvent = !!div.addEventListener; - - // Support: IE<9 - // Since attributes and properties are the same in IE, - // cleanData must set properties to undefined rather than use removeAttribute - div[ jQuery.expando ] = 1; - support.attributes = !div.getAttribute( jQuery.expando ); -} )(); - - -// We have to close these tags to support XHTML (#13200) -var wrapMap = { - option: [ 1, "" ], - legend: [ 1, "
    ", "
    " ], - area: [ 1, "", "" ], - - // Support: IE8 - param: [ 1, "", "" ], - thead: [ 1, "", "
    " ], - tr: [ 2, "", "
    " ], - col: [ 2, "", "
    " ], - td: [ 3, "", "
    " ], - - // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, - // unless wrapped in a div with non-breaking characters in front of it. - _default: support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X
    ", "
    " ] -}; - -// Support: IE8-IE9 -wrapMap.optgroup = wrapMap.option; - -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - - -function getAll( context, tag ) { - var elems, elem, - i = 0, - found = typeof context.getElementsByTagName !== "undefined" ? - context.getElementsByTagName( tag || "*" ) : - typeof context.querySelectorAll !== "undefined" ? - context.querySelectorAll( tag || "*" ) : - undefined; - - if ( !found ) { - for ( found = [], elems = context.childNodes || context; - ( elem = elems[ i ] ) != null; - i++ - ) { - if ( !tag || jQuery.nodeName( elem, tag ) ) { - found.push( elem ); - } else { - jQuery.merge( found, getAll( elem, tag ) ); - } - } - } - - return tag === undefined || tag && jQuery.nodeName( context, tag ) ? - jQuery.merge( [ context ], found ) : - found; -} - - -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var elem, - i = 0; - for ( ; ( elem = elems[ i ] ) != null; i++ ) { - jQuery._data( - elem, - "globalEval", - !refElements || jQuery._data( refElements[ i ], "globalEval" ) - ); - } -} - - -var rhtml = /<|&#?\w+;/, - rtbody = / from table fragments - if ( !support.tbody ) { - - // String was a , *may* have spurious - elem = tag === "table" && !rtbody.test( elem ) ? - tmp.firstChild : - - // String was a bare or - wrap[ 1 ] === "
    " && !rtbody.test( elem ) ? - tmp : - 0; - - j = elem && elem.childNodes.length; - while ( j-- ) { - if ( jQuery.nodeName( ( tbody = elem.childNodes[ j ] ), "tbody" ) && - !tbody.childNodes.length ) { - - elem.removeChild( tbody ); - } - } - } - - jQuery.merge( nodes, tmp.childNodes ); - - // Fix #12392 for WebKit and IE > 9 - tmp.textContent = ""; - - // Fix #12392 for oldIE - while ( tmp.firstChild ) { - tmp.removeChild( tmp.firstChild ); - } - - // Remember the top-level container for proper cleanup - tmp = safe.lastChild; - } - } - } - - // Fix #11356: Clear elements from fragment - if ( tmp ) { - safe.removeChild( tmp ); - } - - // Reset defaultChecked for any radios and checkboxes - // about to be appended to the DOM in IE 6/7 (#8060) - if ( !support.appendChecked ) { - jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked ); - } - - 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; - } - - contains = jQuery.contains( elem.ownerDocument, elem ); - - // Append to fragment - tmp = getAll( safe.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( contains ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( ( elem = tmp[ j++ ] ) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - tmp = null; - - return safe; -} - - -( function() { - var i, eventName, - div = document.createElement( "div" ); - - // Support: IE<9 (lack submit/change bubble), Firefox (lack focus(in | out) events) - for ( i in { submit: true, change: true, focusin: true } ) { - eventName = "on" + i; - - if ( !( support[ i ] = eventName in window ) ) { - - // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP) - div.setAttribute( eventName, "t" ); - support[ i ] = div.attributes[ eventName ].expando === false; - } - } - - // Null elements to avoid leaks in IE. - div = null; -} )(); - - -var rformElems = /^(?:input|select|textarea)$/i, - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, - rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -// Support: IE9 -// See #13393 for more info -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 tmp, events, t, handleObjIn, - special, eventHandle, handleObj, - handlers, type, namespaces, origType, - elemData = jQuery._data( elem ); - - // Don't attach events to noData or text/comment nodes (but allow plain objects) - if ( !elemData ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - if ( !( events = elemData.events ) ) { - events = elemData.events = {}; - } - if ( !( eventHandle = elemData.handle ) ) { - eventHandle = elemData.handle = function( e ) { - - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== "undefined" && - ( !e || jQuery.event.triggered !== e.type ) ? - jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : - undefined; - }; - - // Add elem as a property of the handle fn to prevent a memory leak - // with IE non-native events - eventHandle.elem = elem; - } - - // Handle multiple events separated by a space - 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/attachEvent if the special events handler returns false - if ( !special.setup || - special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - - // Bind the global event handler to the element - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle, false ); - - } else if ( elem.attachEvent ) { - elem.attachEvent( "on" + type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - // Nullify elem to prevent memory leaks in IE - elem = null; - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - var j, handleObj, tmp, - origCount, t, events, - special, handlers, type, - namespaces, origType, - elemData = jQuery.hasData( elem ) && jQuery._data( elem ); - - if ( !elemData || !( events = elemData.events ) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( rnotwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // Unbind all events (on this namespace, if provided) for the element - if ( !type ) { - for ( type in events ) { - jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); - } - continue; - } - - special = jQuery.event.special[ type ] || {}; - type = ( selector ? special.delegateType : special.bindType ) || type; - handlers = events[ type ] || []; - tmp = tmp[ 2 ] && - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); - - // Remove matching events - origCount = j = handlers.length; - while ( j-- ) { - handleObj = handlers[ j ]; - - if ( ( mappedTypes || origType === handleObj.origType ) && - ( !handler || handler.guid === handleObj.guid ) && - ( !tmp || tmp.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || - selector === "**" && handleObj.selector ) ) { - handlers.splice( j, 1 ); - - if ( handleObj.selector ) { - handlers.delegateCount--; - } - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - } - - // Remove generic event handler if we removed something and no more handlers exist - // (avoids potential for endless recursion during removal of special event handlers) - if ( origCount && !handlers.length ) { - if ( !special.teardown || - special.teardown.call( elem, namespaces, elemData.handle ) === false ) { - - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - delete elemData.handle; - - // removeData also checks for emptiness and clears the expando if empty - // so use it instead of delete - jQuery._removeData( elem, "events" ); - } - }, - - trigger: function( event, data, elem, onlyHandlers ) { - var handle, ontype, cur, - bubbleType, special, tmp, i, - eventPath = [ elem || document ], - type = 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( "." ) > -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 && !jQuery.isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - if ( !rfocusMorph.test( bubbleType + type ) ) { - cur = cur.parentNode; - } - for ( ; cur; cur = cur.parentNode ) { - eventPath.push( cur ); - tmp = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === ( elem.ownerDocument || document ) ) { - eventPath.push( tmp.defaultView || tmp.parentWindow || window ); - } - } - - // Fire handlers on the event path - i = 0; - while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { - - event.type = i > 1 ? - bubbleType : - special.bindType || type; - - // jQuery handler - handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && - jQuery._data( cur, "handle" ); - - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && 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 name as the event. - // Can't use an .isFunction() check here because IE6/7 fails that test. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; - - if ( tmp ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - try { - elem[ type ](); - } catch ( e ) { - - // IE<9 dies on focus/blur to hidden element (#1486,#12518) - // only reproducible on winXP IE8 native, not IE9 in IE8 mode - } - jQuery.event.triggered = undefined; - - if ( tmp ) { - elem[ ontype ] = tmp; - } - } - } - } - - return event.result; - }, - - dispatch: function( event ) { - - // Make a writable jQuery.Event from the native event object - event = jQuery.event.fix( event ); - - var i, j, ret, matched, handleObj, - handlerQueue = [], - args = slice.call( arguments ), - handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [], - special = jQuery.event.special[ event.type ] || {}; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[ 0 ] = event; - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers - handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - - // Run delegates first; they may want to stop propagation beneath us - i = 0; - while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { - event.currentTarget = matched.elem; - - j = 0; - while ( ( handleObj = matched.handlers[ j++ ] ) && - !event.isImmediatePropagationStopped() ) { - - // Triggered event must either 1) have no namespace, or 2) have namespace(s) - // a subset or equal to those in the bound event (both can have no namespace). - if ( !event.rnamespace || 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, matches, sel, handleObj, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Support (at least): Chrome, IE9 - // Find delegate handlers - // Black-hole SVG instance trees (#13180) - // - // Support: Firefox<=42+ - // Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343) - if ( delegateCount && cur.nodeType && - ( event.type !== "click" || isNaN( event.button ) || event.button < 1 ) ) { - - /* jshint eqeqeq: false */ - for ( ; cur != this; cur = cur.parentNode || this ) { - /* jshint eqeqeq: true */ - - // Don't check non-elements (#13208) - // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== "click" ) ) { - matches = []; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - - // Don't conflict with Object.prototype properties (#13203) - sel = handleObj.selector + " "; - - if ( matches[ sel ] === undefined ) { - matches[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) > -1 : - jQuery.find( sel, this, null, [ cur ] ).length; - } - if ( matches[ sel ] ) { - matches.push( handleObj ); - } - } - if ( matches.length ) { - handlerQueue.push( { elem: cur, handlers: matches } ); - } - } - } - } - - // Add the remaining (directly-bound) handlers - if ( delegateCount < handlers.length ) { - handlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } ); - } - - return handlerQueue; - }, - - fix: function( event ) { - if ( event[ jQuery.expando ] ) { - return event; - } - - // Create a writable copy of the event object and normalize some properties - var i, prop, copy, - type = event.type, - originalEvent = event, - fixHook = this.fixHooks[ type ]; - - if ( !fixHook ) { - this.fixHooks[ type ] = fixHook = - rmouseEvent.test( type ) ? this.mouseHooks : - rkeyEvent.test( type ) ? this.keyHooks : - {}; - } - copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; - - event = new jQuery.Event( originalEvent ); - - i = copy.length; - while ( i-- ) { - prop = copy[ i ]; - event[ prop ] = originalEvent[ prop ]; - } - - // Support: IE<9 - // Fix target property (#1925) - if ( !event.target ) { - event.target = originalEvent.srcElement || document; - } - - // Support: Safari 6-8+ - // Target should not be a text node (#504, #13143) - if ( event.target.nodeType === 3 ) { - event.target = event.target.parentNode; - } - - // Support: IE<9 - // For mouse/key events, metaKey==false if it's undefined (#3368, #11328) - event.metaKey = !!event.metaKey; - - return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; - }, - - // Includes some event props shared by KeyEvent and MouseEvent - props: ( "altKey bubbles cancelable ctrlKey currentTarget detail eventPhase " + - "metaKey relatedTarget shiftKey target timeStamp view which" ).split( " " ), - - fixHooks: {}, - - keyHooks: { - props: "char charCode key keyCode".split( " " ), - filter: function( event, original ) { - - // Add which for key events - if ( event.which == null ) { - event.which = original.charCode != null ? original.charCode : original.keyCode; - } - - return event; - } - }, - - mouseHooks: { - props: ( "button buttons clientX clientY fromElement offsetX offsetY " + - "pageX pageY screenX screenY toElement" ).split( " " ), - filter: function( event, original ) { - var body, eventDoc, doc, - button = original.button, - fromElement = original.fromElement; - - // Calculate pageX/Y if missing and clientX/Y available - if ( event.pageX == null && original.clientX != null ) { - eventDoc = event.target.ownerDocument || document; - doc = eventDoc.documentElement; - body = eventDoc.body; - - event.pageX = original.clientX + - ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); - event.pageY = original.clientY + - ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - - ( doc && doc.clientTop || body && body.clientTop || 0 ); - } - - // Add relatedTarget, if necessary - if ( !event.relatedTarget && fromElement ) { - event.relatedTarget = fromElement === event.target ? - original.toElement : - fromElement; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - // Note: button is not normalized, so don't use it - if ( !event.which && button !== undefined ) { - event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); - } - - return event; - } - }, - - special: { - load: { - - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - focus: { - - // Fire native event if possible so blur/focus sequence is correct - trigger: function() { - if ( this !== safeActiveElement() && this.focus ) { - try { - this.focus(); - return false; - } catch ( e ) { - - // Support: IE<9 - // If we error on focus to hidden element (#1486, #12518), - // let .trigger() run the handlers - } - } - }, - delegateType: "focusin" - }, - blur: { - trigger: function() { - if ( this === safeActiveElement() && this.blur ) { - this.blur(); - return false; - } - }, - delegateType: "focusout" - }, - click: { - - // For checkbox, fire native event so checked state will be right - trigger: function() { - if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) { - this.click(); - return false; - } - }, - - // For cross-browser consistency, don't fire native .click() on links - _default: function( event ) { - return jQuery.nodeName( event.target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // 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; - } - } - } - }, - - // Piggyback on a donor event to simulate a different one - simulate: function( type, elem, event ) { - var e = jQuery.extend( - new jQuery.Event(), - event, - { - type: type, - isSimulated: true - - // Previously, `originalEvent: {}` was set here, so stopPropagation call - // would not be triggered on donor event, since in our own - // jQuery.event.stopPropagation function we had a check for existence of - // originalEvent.stopPropagation method, so, consequently it would be a noop. - // - // Guard for simulated events was moved to jQuery.event.stopPropagation function - // since `originalEvent` should point to the original event for the - // constancy with other events and for more focused logic - } - ); - - jQuery.event.trigger( e, null, elem ); - - if ( e.isDefaultPrevented() ) { - event.preventDefault(); - } - } -}; - -jQuery.removeEvent = document.removeEventListener ? - function( elem, type, handle ) { - - // This "if" is needed for plain objects - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle ); - } - } : - function( elem, type, handle ) { - var name = "on" + type; - - if ( elem.detachEvent ) { - - // #8545, #7054, preventing memory leaks for custom events in IE6-8 - // detachEvent needed property on element, by name of that event, - // to properly expose it to GC - if ( typeof elem[ name ] === "undefined" ) { - elem[ name ] = null; - } - - elem.detachEvent( name, handle ); - } - }; - -jQuery.Event = function( src, props ) { - - // Allow instantiation without the 'new' keyword - if ( !( this instanceof jQuery.Event ) ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = src.defaultPrevented || - src.defaultPrevented === undefined && - - // Support: IE < 9, 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 = { - constructor: jQuery.Event, - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse, - - preventDefault: function() { - var e = this.originalEvent; - - this.isDefaultPrevented = returnTrue; - if ( !e ) { - return; - } - - // If preventDefault exists, run it on the original event - if ( e.preventDefault ) { - e.preventDefault(); - - // Support: IE - // Otherwise set the returnValue property of the original event to false - } else { - e.returnValue = false; - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - - if ( !e || this.isSimulated ) { - return; - } - - // If stopPropagation exists, run it on the original event - if ( e.stopPropagation ) { - e.stopPropagation(); - } - - // Support: IE - // Set the cancelBubble property of the original event to true - e.cancelBubble = true; - }, - stopImmediatePropagation: function() { - 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 -// 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://code.google.com/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; - } - }; -} ); - -// IE submit delegation -if ( !support.submit ) { - - jQuery.event.special.submit = { - setup: function() { - - // Only need this for delegated form submit events - if ( jQuery.nodeName( this, "form" ) ) { - return false; - } - - // Lazy-add a submit handler when a descendant form may potentially be submitted - jQuery.event.add( this, "click._submit keypress._submit", function( e ) { - - // Node name check avoids a VML-related crash in IE (#9807) - var elem = e.target, - form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? - - // Support: IE <=8 - // We use jQuery.prop instead of elem.form - // to allow fixing the IE8 delegated submit issue (gh-2332) - // by 3rd party polyfills/workarounds. - jQuery.prop( elem, "form" ) : - undefined; - - if ( form && !jQuery._data( form, "submit" ) ) { - jQuery.event.add( form, "submit._submit", function( event ) { - event._submitBubble = true; - } ); - jQuery._data( form, "submit", true ); - } - } ); - - // return undefined since we don't need an event listener - }, - - postDispatch: function( event ) { - - // If form was submitted by the user, bubble the event up the tree - if ( event._submitBubble ) { - delete event._submitBubble; - if ( this.parentNode && !event.isTrigger ) { - jQuery.event.simulate( "submit", this.parentNode, event ); - } - } - }, - - teardown: function() { - - // Only need this for delegated form submit events - if ( jQuery.nodeName( this, "form" ) ) { - return false; - } - - // Remove delegated handlers; cleanData eventually reaps submit handlers attached above - jQuery.event.remove( this, "._submit" ); - } - }; -} - -// IE change delegation and checkbox/radio fix -if ( !support.change ) { - - jQuery.event.special.change = { - - setup: function() { - - if ( rformElems.test( this.nodeName ) ) { - - // IE doesn't fire change on a check/radio until blur; trigger it on click - // after a propertychange. Eat the blur-change in special.change.handle. - // This still fires onchange a second time for check/radio after blur. - if ( this.type === "checkbox" || this.type === "radio" ) { - jQuery.event.add( this, "propertychange._change", function( event ) { - if ( event.originalEvent.propertyName === "checked" ) { - this._justChanged = true; - } - } ); - jQuery.event.add( this, "click._change", function( event ) { - if ( this._justChanged && !event.isTrigger ) { - this._justChanged = false; - } - - // Allow triggered, simulated change events (#11500) - jQuery.event.simulate( "change", this, event ); - } ); - } - return false; - } - - // Delegated event; lazy-add a change handler on descendant inputs - jQuery.event.add( this, "beforeactivate._change", function( e ) { - var elem = e.target; - - if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "change" ) ) { - jQuery.event.add( elem, "change._change", function( event ) { - if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { - jQuery.event.simulate( "change", this.parentNode, event ); - } - } ); - jQuery._data( elem, "change", true ); - } - } ); - }, - - handle: function( event ) { - var elem = event.target; - - // Swallow native change events from checkbox/radio, we already triggered them above - if ( this !== elem || event.isSimulated || event.isTrigger || - ( elem.type !== "radio" && elem.type !== "checkbox" ) ) { - - return event.handleObj.handler.apply( this, arguments ); - } - }, - - teardown: function() { - jQuery.event.remove( this, "._change" ); - - return !rformElems.test( this.nodeName ); - } - }; -} - -// Support: Firefox -// Firefox doesn't have focus(in | out) events -// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 -// -// Support: Chrome, Safari -// 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://code.google.com/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 = jQuery._data( doc, fix ); - - if ( !attaches ) { - doc.addEventListener( orig, handler, true ); - } - jQuery._data( doc, fix, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this, - attaches = jQuery._data( doc, fix ) - 1; - - if ( !attaches ) { - doc.removeEventListener( orig, handler, true ); - jQuery._removeData( doc, fix ); - } else { - jQuery._data( doc, fix, attaches ); - } - } - }; - } ); -} - -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 ); - } ); - }, - - 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 rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, - rnoshimcache = new RegExp( "<(?:" + nodeNames + ")[\\s/>]", "i" ), - rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi, - - // Support: IE 10-11, Edge 10240+ - // In IE/Edge using regex groups here causes severe slowdowns. - // See https://connect.microsoft.com/IE/feedback/details/1736512/ - rnoInnerhtml = /\s*$/g, - safeFragment = createSafeFragment( document ), - fragmentDiv = safeFragment.appendChild( document.createElement( "div" ) ); - -// Support: IE<8 -// 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 = ( jQuery.find.attr( elem, "type" ) !== null ) + "/" + elem.type; - return elem; -} -function restoreScript( elem ) { - var match = rscriptTypeMasked.exec( elem.type ); - if ( match ) { - elem.type = match[ 1 ]; - } else { - elem.removeAttribute( "type" ); - } - return elem; -} - -function cloneCopyEvent( src, dest ) { - if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { - return; - } - - var type, i, l, - oldData = jQuery._data( src ), - curData = jQuery._data( dest, oldData ), - events = oldData.events; - - if ( events ) { - delete curData.handle; - curData.events = {}; - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - - // make the cloned public data object a copy from the original - if ( curData.data ) { - curData.data = jQuery.extend( {}, curData.data ); - } -} - -function fixCloneNodeIssues( src, dest ) { - var nodeName, e, data; - - // We do not need to do anything for non-Elements - if ( dest.nodeType !== 1 ) { - return; - } - - nodeName = dest.nodeName.toLowerCase(); - - // IE6-8 copies events bound via attachEvent when using cloneNode. - if ( !support.noCloneEvent && dest[ jQuery.expando ] ) { - data = jQuery._data( dest ); - - for ( e in data.events ) { - jQuery.removeEvent( dest, e, data.handle ); - } - - // Event data gets referenced instead of copied if the expando gets copied too - dest.removeAttribute( jQuery.expando ); - } - - // IE blanks contents when cloning scripts, and tries to evaluate newly-set text - if ( nodeName === "script" && dest.text !== src.text ) { - disableScript( dest ).text = src.text; - restoreScript( dest ); - - // IE6-10 improperly clones children of object elements using classid. - // IE10 throws NoModificationAllowedError if parent is null, #12132. - } else if ( nodeName === "object" ) { - if ( dest.parentNode ) { - dest.outerHTML = src.outerHTML; - } - - // This path appears unavoidable for IE9. When cloning an object - // element in IE9, the outerHTML strategy above is not sufficient. - // If the src has innerHTML and the destination does not, - // copy the src.innerHTML into the dest.innerHTML. #10324 - if ( support.html5Clone && ( src.innerHTML && !jQuery.trim( dest.innerHTML ) ) ) { - dest.innerHTML = src.innerHTML; - } - - } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) { - - // IE6-8 fails to persist the checked state of a cloned checkbox - // or radio button. Worse, IE6-7 fail to give the cloned element - // a checked appearance if the defaultChecked value isn't also set - - dest.defaultChecked = dest.checked = src.checked; - - // IE6-7 get confused and end up setting the value of a cloned - // checkbox/radio button to an empty string instead of "on" - if ( dest.value !== src.value ) { - dest.value = src.value; - } - - // IE6-8 fails to return the selected option to the default selected - // state when cloning options - } else if ( nodeName === "option" ) { - dest.defaultSelected = dest.selected = src.defaultSelected; - - // IE6-8 fails to set the defaultValue to the correct value when - // cloning other types of input fields - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -function domManip( collection, args, callback, ignored ) { - - // Flatten any nested arrays - args = concat.apply( [], args ); - - var first, node, hasScripts, - scripts, doc, fragment, - i = 0, - l = collection.length, - 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 collection.each( function( index ) { - var self = collection.eq( index ); - if ( isFunction ) { - 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.1, PhantomJS<2 - // 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 || "" ) && - !jQuery._data( 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.text || node.textContent || node.innerHTML || "" ) - .replace( rcleanScript, "" ) - ); - } - } - } - } - - // Fix #11809: Avoid leaking memory - fragment = first = null; - } - } - - return collection; -} - -function remove( elem, selector, keepData ) { - var node, - elems = selector ? jQuery.filter( selector, elem ) : elem, - i = 0; - - for ( ; ( node = elems[ i ] ) != null; i++ ) { - - if ( !keepData && node.nodeType === 1 ) { - jQuery.cleanData( getAll( node ) ); - } - - if ( node.parentNode ) { - if ( keepData && jQuery.contains( node.ownerDocument, 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 destElements, node, clone, i, srcElements, - inPage = jQuery.contains( elem.ownerDocument, elem ); - - if ( support.html5Clone || jQuery.isXMLDoc( elem ) || - !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { - - clone = elem.cloneNode( true ); - - // IE<=8 does not properly clone detached, unknown element nodes - } else { - fragmentDiv.innerHTML = elem.outerHTML; - fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); - } - - if ( ( !support.noCloneEvent || !support.noCloneChecked ) && - ( elem.nodeType === 1 || elem.nodeType === 11 ) && !jQuery.isXMLDoc( elem ) ) { - - // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 - destElements = getAll( clone ); - srcElements = getAll( elem ); - - // Fix all IE cloning issues - for ( i = 0; ( node = srcElements[ i ] ) != null; ++i ) { - - // Ensure that the destination node is not null; Fixes #9587 - if ( destElements[ i ] ) { - fixCloneNodeIssues( node, destElements[ i ] ); - } - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - if ( deepDataAndEvents ) { - srcElements = srcElements || getAll( elem ); - destElements = destElements || getAll( clone ); - - for ( i = 0; ( node = srcElements[ i ] ) != null; i++ ) { - cloneCopyEvent( node, destElements[ i ] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - destElements = srcElements = node = null; - - // Return the cloned set - return clone; - }, - - cleanData: function( elems, /* internal */ forceAcceptData ) { - var elem, type, id, data, - i = 0, - internalKey = jQuery.expando, - cache = jQuery.cache, - attributes = support.attributes, - special = jQuery.event.special; - - for ( ; ( elem = elems[ i ] ) != null; i++ ) { - if ( forceAcceptData || acceptData( elem ) ) { - - id = elem[ internalKey ]; - data = id && cache[ id ]; - - if ( data ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - - // Remove cache only if it was not already removed by jQuery.event.remove - if ( cache[ id ] ) { - - delete cache[ id ]; - - // Support: IE<9 - // IE does not allow us to delete expando properties from nodes - // IE creates expando attributes along with the property - // IE does not have a removeAttribute function on Document nodes - if ( !attributes && typeof elem.removeAttribute !== "undefined" ) { - elem.removeAttribute( internalKey ); - - // Webkit & Blink performance suffers when deleting properties - // from DOM nodes, so set to undefined instead - // https://code.google.com/p/chromium/issues/detail?id=378607 - } else { - elem[ internalKey ] = undefined; - } - - deletedIds.push( id ); - } - } - } - } - } -} ); - -jQuery.fn.extend( { - - // Keep domManip exposed until 3.0 (gh-2225) - domManip: domManip, - - 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().append( - ( this[ 0 ] && this[ 0 ].ownerDocument || document ).createTextNode( 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++ ) { - - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - } - - // Remove any remaining nodes - while ( elem.firstChild ) { - elem.removeChild( elem.firstChild ); - } - - // If this is a select, ensure that it displays empty (#12336) - // Support: IE<9 - if ( elem.options && jQuery.nodeName( elem, "select" ) ) { - elem.options.length = 0; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map( function() { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - } ); - }, - - html: function( value ) { - return access( this, function( value ) { - var elem = this[ 0 ] || {}, - i = 0, - l = this.length; - - if ( value === undefined ) { - return elem.nodeType === 1 ? - elem.innerHTML.replace( rinlinejQuery, "" ) : - undefined; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - ( support.htmlSerialize || !rnoshimcache.test( value ) ) && - ( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && - !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { - - value = jQuery.htmlPrefilter( value ); - - try { - for ( ; i < l; i++ ) { - - // Remove element nodes and prevent memory leaks - elem = this[ i ] || {}; - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch ( e ) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function() { - var 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, - i = 0, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone( true ); - jQuery( insert[ i ] )[ original ]( elems ); - - // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() - push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -} ); - - -var iframe, - elemdisplay = { - - // Support: Firefox - // We have to pre-define these values for FF (#10227) - HTML: "block", - BODY: "block" - }; - -/** - * 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 elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), - - 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( "