From 15b11460bd457c0c1f0ed3556829cc4d7e957282 Mon Sep 17 00:00:00 2001 From: j Date: Mon, 18 Dec 2017 16:46:24 +0100 Subject: [PATCH] don't checkin collected static files --- camp/.Python | 1 - camp/include/python2.7 | 1 - camp/settings.py | 11 +- camp/static/admin/css/base.css | 978 -- camp/static/admin/css/changelists.css | 344 - camp/static/admin/css/dashboard.css | 27 - camp/static/admin/css/fonts.css | 20 - camp/static/admin/css/forms.css | 515 - camp/static/admin/css/login.css | 78 - camp/static/admin/css/rtl.css | 264 - camp/static/admin/css/widgets.css | 565 - camp/static/admin/fonts/LICENSE.txt | 202 - camp/static/admin/fonts/README.txt | 2 - .../admin/fonts/Roboto-Bold-webfont.woff | Bin 82564 -> 0 bytes .../admin/fonts/Roboto-Light-webfont.woff | Bin 81348 -> 0 bytes .../admin/fonts/Roboto-Regular-webfont.woff | Bin 80304 -> 0 bytes camp/static/admin/img/LICENSE | 20 - camp/static/admin/img/README.txt | 7 - camp/static/admin/img/calendar-icons.svg | 14 - camp/static/admin/img/gis/move_vertex_off.svg | 1 - camp/static/admin/img/gis/move_vertex_on.svg | 1 - camp/static/admin/img/icon-addlink.svg | 3 - camp/static/admin/img/icon-alert.svg | 3 - camp/static/admin/img/icon-calendar.svg | 9 - camp/static/admin/img/icon-changelink.svg | 3 - camp/static/admin/img/icon-clock.svg | 9 - camp/static/admin/img/icon-deletelink.svg | 3 - camp/static/admin/img/icon-no.svg | 3 - camp/static/admin/img/icon-unknown-alt.svg | 3 - camp/static/admin/img/icon-unknown.svg | 3 - camp/static/admin/img/icon-yes.svg | 3 - camp/static/admin/img/inline-delete.svg | 3 - camp/static/admin/img/search.svg | 3 - camp/static/admin/img/selector-icons.svg | 34 - camp/static/admin/img/sorting-icons.svg | 19 - camp/static/admin/img/tooltag-add.svg | 3 - camp/static/admin/img/tooltag-arrowright.svg | 3 - camp/static/admin/js/SelectBox.js | 144 - camp/static/admin/js/SelectFilter2.js | 236 - camp/static/admin/js/actions.js | 153 - camp/static/admin/js/actions.min.js | 6 - .../admin/js/admin/DateTimeShortcuts.js | 431 - .../admin/js/admin/RelatedObjectLookups.js | 175 - camp/static/admin/js/calendar.js | 208 - camp/static/admin/js/cancel.js | 9 - camp/static/admin/js/change_form.js | 20 - camp/static/admin/js/collapse.js | 26 - camp/static/admin/js/collapse.min.js | 2 - camp/static/admin/js/core.js | 250 - camp/static/admin/js/inlines.js | 295 - camp/static/admin/js/inlines.min.js | 10 - camp/static/admin/js/jquery.init.js | 8 - camp/static/admin/js/popup_response.js | 16 - camp/static/admin/js/prepopulate.js | 42 - camp/static/admin/js/prepopulate.min.js | 1 - camp/static/admin/js/prepopulate_init.js | 10 - camp/static/admin/js/timeparse.js | 106 - camp/static/admin/js/urlify.js | 179 - .../admin/js/vendor/jquery/LICENSE-JQUERY.txt | 26 - camp/static/admin/js/vendor/jquery/jquery.js | 9842 ----------------- .../admin/js/vendor/jquery/jquery.min.js | 4 - .../js/vendor/xregexp/LICENSE-XREGEXP.txt | 21 - .../static/admin/js/vendor/xregexp/xregexp.js | 2308 ---- .../admin/js/vendor/xregexp/xregexp.min.js | 18 - .../3668df16-bdbe-4adc-b07f-b8438346fa80.jpg | Bin 32755 -> 0 bytes .../409e892b-2be1-4b0f-b95c-5fb9be5707bf.jpg | Bin 31626 -> 0 bytes .../a427532a-f9ca-4ee9-8683-81cc0f50d1a5.png | Bin 25365 -> 0 bytes .../a5530b07-02fa-4403-bbd5-8496dbf63061.jpg | Bin 2347 -> 0 bytes .../a7db623b-9005-4a4f-92da-24a5ddae79d7.jpg | Bin 32755 -> 0 bytes camp/static/images/arr.png | Bin 5557 -> 0 bytes .../images/as_if_changed_dimensions_2-04.png | Bin 24920 -> 0 bytes .../images/as_if_changed_dimensions_2-12.png | Bin 41692 -> 0 bytes .../cbab7759-51e4-430a-9d83-5d7558365fa4.png | Bin 27486 -> 0 bytes .../d759bca8-ebe0-4f7a-b2ae-8c0037607a2c.png | Bin 17263 -> 0 bytes camp/static/images/di.png | Bin 27486 -> 0 bytes .../photologue/photos/1956_Theaterbild.jpg | Bin 4029811 -> 0 bytes .../photologue/photos/IMG_0151_copy.JPG | Bin 7965767 -> 0 bytes .../photologue/photos/IMG_0301_copy.JPG | Bin 5119092 -> 0 bytes .../photologue/photos/IMG_0409_copy.JPG | Bin 4802834 -> 0 bytes .../photologue/photos/Lampsky_11101.jpg | Bin 5642258 -> 0 bytes .../photos/as_if_changed_dimensions_2-06.png | Bin 33002 -> 0 bytes .../1956_Theaterbild_admin_thumbnail.jpg | Bin 1967 -> 0 bytes .../photos/cache/1956_Theaterbild_display.jpg | Bin 64891 -> 0 bytes .../cache/1956_Theaterbild_thumbnail.jpg | Bin 1967 -> 0 bytes .../photologue/photos/cache/CACHEDIR.TAG | 1 - .../cache/IMG_0151_copy_admin_thumbnail.JPG | Bin 2222 -> 0 bytes .../photos/cache/IMG_0151_copy_display.JPG | Bin 166926 -> 0 bytes .../photos/cache/IMG_0151_copy_thumbnail.JPG | Bin 2222 -> 0 bytes .../cache/IMG_0301_copy_admin_thumbnail.JPG | Bin 1848 -> 0 bytes .../photos/cache/IMG_0301_copy_display.JPG | Bin 39482 -> 0 bytes .../photos/cache/IMG_0301_copy_thumbnail.JPG | Bin 1848 -> 0 bytes .../cache/IMG_0409_copy_admin_thumbnail.JPG | Bin 2076 -> 0 bytes .../photos/cache/IMG_0409_copy_display.JPG | Bin 41349 -> 0 bytes .../photos/cache/IMG_0409_copy_thumbnail.JPG | Bin 2076 -> 0 bytes .../cache/Lampsky_11101_admin_thumbnail.jpg | Bin 2933 -> 0 bytes .../photos/cache/Lampsky_11101_display.jpg | Bin 86946 -> 0 bytes .../photos/cache/Lampsky_11101_thumbnail.jpg | Bin 2933 -> 0 bytes ...hanged_dimensions_2-06_admin_thumbnail.png | Bin 2750 -> 0 bytes .../as_if_changed_dimensions_2-06_display.png | Bin 37559 -> 0 bytes ...s_if_changed_dimensions_2-06_thumbnail.png | Bin 2750 -> 0 bytes camp/static/images/pi.png | Bin 24920 -> 0 bytes .../67761c19-f26c-4bf0-8cb0-de3bc6a2c25e.png | Bin 319380 -> 0 bytes camp/static/markdownx/admin/css/markdownx.css | 192 - .../markdownx/admin/css/markdownx.min.css | 1 - .../b9e05f4e-b295-4de6-975e-0fd29abca658.png | Bin 19744 -> 0 bytes .../d4b0fcbf-9602-4b44-966d-0126828acf84.png | Bin 27486 -> 0 bytes camp/static/markdownx/js/markdownx.js | 824 -- camp/static/markdownx/js/markdownx.min.js | 1 - 108 files changed, 4 insertions(+), 18719 deletions(-) delete mode 120000 camp/.Python delete mode 120000 camp/include/python2.7 delete mode 100644 camp/static/admin/css/base.css delete mode 100644 camp/static/admin/css/changelists.css delete mode 100644 camp/static/admin/css/dashboard.css delete mode 100644 camp/static/admin/css/fonts.css delete mode 100644 camp/static/admin/css/forms.css delete mode 100644 camp/static/admin/css/login.css delete mode 100644 camp/static/admin/css/rtl.css delete mode 100644 camp/static/admin/css/widgets.css delete mode 100644 camp/static/admin/fonts/LICENSE.txt delete mode 100644 camp/static/admin/fonts/README.txt delete mode 100644 camp/static/admin/fonts/Roboto-Bold-webfont.woff delete mode 100644 camp/static/admin/fonts/Roboto-Light-webfont.woff delete mode 100644 camp/static/admin/fonts/Roboto-Regular-webfont.woff delete mode 100644 camp/static/admin/img/LICENSE delete mode 100644 camp/static/admin/img/README.txt delete mode 100644 camp/static/admin/img/calendar-icons.svg delete mode 100644 camp/static/admin/img/gis/move_vertex_off.svg delete mode 100644 camp/static/admin/img/gis/move_vertex_on.svg delete mode 100644 camp/static/admin/img/icon-addlink.svg delete mode 100644 camp/static/admin/img/icon-alert.svg delete mode 100644 camp/static/admin/img/icon-calendar.svg delete mode 100644 camp/static/admin/img/icon-changelink.svg delete mode 100644 camp/static/admin/img/icon-clock.svg delete mode 100644 camp/static/admin/img/icon-deletelink.svg delete mode 100644 camp/static/admin/img/icon-no.svg delete mode 100644 camp/static/admin/img/icon-unknown-alt.svg delete mode 100644 camp/static/admin/img/icon-unknown.svg delete mode 100644 camp/static/admin/img/icon-yes.svg delete mode 100644 camp/static/admin/img/inline-delete.svg delete mode 100644 camp/static/admin/img/search.svg delete mode 100644 camp/static/admin/img/selector-icons.svg delete mode 100644 camp/static/admin/img/sorting-icons.svg delete mode 100644 camp/static/admin/img/tooltag-add.svg delete mode 100644 camp/static/admin/img/tooltag-arrowright.svg delete mode 100644 camp/static/admin/js/SelectBox.js delete mode 100644 camp/static/admin/js/SelectFilter2.js delete mode 100644 camp/static/admin/js/actions.js delete mode 100644 camp/static/admin/js/actions.min.js delete mode 100644 camp/static/admin/js/admin/DateTimeShortcuts.js delete mode 100644 camp/static/admin/js/admin/RelatedObjectLookups.js delete mode 100644 camp/static/admin/js/calendar.js delete mode 100644 camp/static/admin/js/cancel.js delete mode 100644 camp/static/admin/js/change_form.js delete mode 100644 camp/static/admin/js/collapse.js delete mode 100644 camp/static/admin/js/collapse.min.js delete mode 100644 camp/static/admin/js/core.js delete mode 100644 camp/static/admin/js/inlines.js delete mode 100644 camp/static/admin/js/inlines.min.js delete mode 100644 camp/static/admin/js/jquery.init.js delete mode 100644 camp/static/admin/js/popup_response.js delete mode 100644 camp/static/admin/js/prepopulate.js delete mode 100644 camp/static/admin/js/prepopulate.min.js delete mode 100644 camp/static/admin/js/prepopulate_init.js delete mode 100644 camp/static/admin/js/timeparse.js delete mode 100644 camp/static/admin/js/urlify.js delete mode 100644 camp/static/admin/js/vendor/jquery/LICENSE-JQUERY.txt delete mode 100644 camp/static/admin/js/vendor/jquery/jquery.js delete mode 100644 camp/static/admin/js/vendor/jquery/jquery.min.js delete mode 100644 camp/static/admin/js/vendor/xregexp/LICENSE-XREGEXP.txt delete mode 100644 camp/static/admin/js/vendor/xregexp/xregexp.js delete mode 100644 camp/static/admin/js/vendor/xregexp/xregexp.min.js delete mode 100644 camp/static/images/3668df16-bdbe-4adc-b07f-b8438346fa80.jpg delete mode 100644 camp/static/images/409e892b-2be1-4b0f-b95c-5fb9be5707bf.jpg delete mode 100644 camp/static/images/a427532a-f9ca-4ee9-8683-81cc0f50d1a5.png delete mode 100644 camp/static/images/a5530b07-02fa-4403-bbd5-8496dbf63061.jpg delete mode 100644 camp/static/images/a7db623b-9005-4a4f-92da-24a5ddae79d7.jpg delete mode 100755 camp/static/images/arr.png delete mode 100644 camp/static/images/as_if_changed_dimensions_2-04.png delete mode 100644 camp/static/images/as_if_changed_dimensions_2-12.png delete mode 100644 camp/static/images/cbab7759-51e4-430a-9d83-5d7558365fa4.png delete mode 100644 camp/static/images/d759bca8-ebe0-4f7a-b2ae-8c0037607a2c.png delete mode 100644 camp/static/images/di.png delete mode 100644 camp/static/images/photologue/photos/1956_Theaterbild.jpg delete mode 100644 camp/static/images/photologue/photos/IMG_0151_copy.JPG delete mode 100644 camp/static/images/photologue/photos/IMG_0301_copy.JPG delete mode 100644 camp/static/images/photologue/photos/IMG_0409_copy.JPG delete mode 100644 camp/static/images/photologue/photos/Lampsky_11101.jpg delete mode 100644 camp/static/images/photologue/photos/as_if_changed_dimensions_2-06.png delete mode 100644 camp/static/images/photologue/photos/cache/1956_Theaterbild_admin_thumbnail.jpg delete mode 100644 camp/static/images/photologue/photos/cache/1956_Theaterbild_display.jpg delete mode 100644 camp/static/images/photologue/photos/cache/1956_Theaterbild_thumbnail.jpg delete mode 100644 camp/static/images/photologue/photos/cache/CACHEDIR.TAG delete mode 100644 camp/static/images/photologue/photos/cache/IMG_0151_copy_admin_thumbnail.JPG delete mode 100644 camp/static/images/photologue/photos/cache/IMG_0151_copy_display.JPG delete mode 100644 camp/static/images/photologue/photos/cache/IMG_0151_copy_thumbnail.JPG delete mode 100644 camp/static/images/photologue/photos/cache/IMG_0301_copy_admin_thumbnail.JPG delete mode 100644 camp/static/images/photologue/photos/cache/IMG_0301_copy_display.JPG delete mode 100644 camp/static/images/photologue/photos/cache/IMG_0301_copy_thumbnail.JPG delete mode 100644 camp/static/images/photologue/photos/cache/IMG_0409_copy_admin_thumbnail.JPG delete mode 100644 camp/static/images/photologue/photos/cache/IMG_0409_copy_display.JPG delete mode 100644 camp/static/images/photologue/photos/cache/IMG_0409_copy_thumbnail.JPG delete mode 100644 camp/static/images/photologue/photos/cache/Lampsky_11101_admin_thumbnail.jpg delete mode 100644 camp/static/images/photologue/photos/cache/Lampsky_11101_display.jpg delete mode 100644 camp/static/images/photologue/photos/cache/Lampsky_11101_thumbnail.jpg delete mode 100644 camp/static/images/photologue/photos/cache/as_if_changed_dimensions_2-06_admin_thumbnail.png delete mode 100644 camp/static/images/photologue/photos/cache/as_if_changed_dimensions_2-06_display.png delete mode 100644 camp/static/images/photologue/photos/cache/as_if_changed_dimensions_2-06_thumbnail.png delete mode 100644 camp/static/images/pi.png delete mode 100644 camp/static/markdownx/67761c19-f26c-4bf0-8cb0-de3bc6a2c25e.png delete mode 100644 camp/static/markdownx/admin/css/markdownx.css delete mode 100644 camp/static/markdownx/admin/css/markdownx.min.css delete mode 100644 camp/static/markdownx/b9e05f4e-b295-4de6-975e-0fd29abca658.png delete mode 100644 camp/static/markdownx/d4b0fcbf-9602-4b44-966d-0126828acf84.png delete mode 100644 camp/static/markdownx/js/markdownx.js delete mode 100644 camp/static/markdownx/js/markdownx.min.js diff --git a/camp/.Python b/camp/.Python deleted file mode 120000 index 19d0f77..0000000 --- a/camp/.Python +++ /dev/null @@ -1 +0,0 @@ -/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/Python \ No newline at end of file diff --git a/camp/include/python2.7 b/camp/include/python2.7 deleted file mode 120000 index f2164a2..0000000 --- a/camp/include/python2.7 +++ /dev/null @@ -1 +0,0 @@ -/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/include/python2.7 \ No newline at end of file diff --git a/camp/settings.py b/camp/settings.py index 8aaf363..631410f 100644 --- a/camp/settings.py +++ b/camp/settings.py @@ -39,6 +39,8 @@ INSTALLED_APPS = [ 'photologue', 'sortedm2m', 'braces', + + 'camp' ] SITE_ID = 1 @@ -87,7 +89,7 @@ DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'camp', - 'USER': 'vaishk', + 'USER': '', } } @@ -130,18 +132,13 @@ SITE_ROOT = os.path.dirname(os.path.realpath(__file__)) # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.11/howto/static-files/ STATIC_URL = '/static/' - -STATIC_ROOT = '' - -STATICFILES_DIRS = (os.path.join(SITE_ROOT, 'static'), ) +STATIC_ROOT = os.path.join(BASE_DIR, 'static') MARKDOWNX_MEDIA_PATH = 'images/markdown' - MARKDOWNX_EDITOR_RESIZABLE = True MEDIA_URL = '/static/images/' MEDIA_ROOT = os.path.join(BASE_DIR, 'data/images') -MEDIA_ROOT = os.path.join(BASE_DIR, 'static/images') IMAGE_PREFIX = 'http://studio.camp/images/' diff --git a/camp/static/admin/css/base.css b/camp/static/admin/css/base.css deleted file mode 100644 index b2a40c4..0000000 --- a/camp/static/admin/css/base.css +++ /dev/null @@ -1,978 +0,0 @@ -/* - DJANGO Admin styles -*/ - -@import url(fonts.css); - -body { - margin: 0; - padding: 0; - font-size: 14px; - font-family: "Roboto","Lucida Grande","DejaVu Sans","Bitstream Vera Sans",Verdana,Arial,sans-serif; - color: #333; - background: #fff; -} - -/* LINKS */ - -a:link, a:visited { - color: #447e9b; - text-decoration: none; -} - -a:focus, a:hover { - color: #036; -} - -a:focus { - text-decoration: underline; -} - -a img { - border: none; -} - -a.section:link, a.section:visited { - color: #fff; - text-decoration: none; -} - -a.section:focus, a.section:hover { - text-decoration: underline; -} - -/* GLOBAL DEFAULTS */ - -p, ol, ul, dl { - margin: .2em 0 .8em 0; -} - -p { - padding: 0; - line-height: 140%; -} - -h1,h2,h3,h4,h5 { - font-weight: bold; -} - -h1 { - margin: 0 0 20px; - font-weight: 300; - font-size: 20px; - color: #666; -} - -h2 { - font-size: 16px; - margin: 1em 0 .5em 0; -} - -h2.subhead { - font-weight: normal; - margin-top: 0; -} - -h3 { - font-size: 14px; - margin: .8em 0 .3em 0; - color: #666; - font-weight: bold; -} - -h4 { - font-size: 12px; - margin: 1em 0 .8em 0; - padding-bottom: 3px; -} - -h5 { - font-size: 10px; - margin: 1.5em 0 .5em 0; - color: #666; - text-transform: uppercase; - letter-spacing: 1px; -} - -ul li { - list-style-type: square; - padding: 1px 0; -} - -li ul { - margin-bottom: 0; -} - -li, dt, dd { - font-size: 13px; - line-height: 20px; -} - -dt { - font-weight: bold; - margin-top: 4px; -} - -dd { - margin-left: 0; -} - -form { - margin: 0; - padding: 0; -} - -fieldset { - margin: 0; - padding: 0; - border: none; - border-top: 1px solid #eee; -} - -blockquote { - font-size: 11px; - color: #777; - margin-left: 2px; - padding-left: 10px; - border-left: 5px solid #ddd; -} - -code, pre { - font-family: "Bitstream Vera Sans Mono", Monaco, "Courier New", Courier, monospace; - color: #666; - font-size: 12px; -} - -pre.literal-block { - margin: 10px; - background: #eee; - padding: 6px 8px; -} - -code strong { - color: #930; -} - -hr { - clear: both; - color: #eee; - background-color: #eee; - height: 1px; - border: none; - margin: 0; - padding: 0; - font-size: 1px; - line-height: 1px; -} - -/* TEXT STYLES & MODIFIERS */ - -.small { - font-size: 11px; -} - -.tiny { - font-size: 10px; -} - -p.tiny { - margin-top: -2px; -} - -.mini { - font-size: 10px; -} - -p.mini { - margin-top: -3px; -} - -.help, p.help, form p.help, div.help, form div.help, div.help li { - font-size: 11px; - color: #999; -} - -div.help ul { - margin-bottom: 0; -} - -.help-tooltip { - cursor: help; -} - -p img, h1 img, h2 img, h3 img, h4 img, td img { - vertical-align: middle; -} - -.quiet, a.quiet:link, a.quiet:visited { - color: #999; - font-weight: normal; -} - -.float-right { - float: right; -} - -.float-left { - float: left; -} - -.clear { - clear: both; -} - -.align-left { - text-align: left; -} - -.align-right { - text-align: right; -} - -.example { - margin: 10px 0; - padding: 5px 10px; - background: #efefef; -} - -.nowrap { - white-space: nowrap; -} - -/* TABLES */ - -table { - border-collapse: collapse; - border-color: #ccc; -} - -td, th { - font-size: 13px; - line-height: 16px; - border-bottom: 1px solid #eee; - vertical-align: top; - padding: 8px; - font-family: "Roboto", "Lucida Grande", Verdana, Arial, sans-serif; -} - -th { - font-weight: 600; - text-align: left; -} - -thead th, -tfoot td { - color: #666; - padding: 5px 10px; - font-size: 11px; - background: #fff; - border: none; - border-top: 1px solid #eee; - border-bottom: 1px solid #eee; -} - -tfoot td { - border-bottom: none; - border-top: 1px solid #eee; -} - -thead th.required { - color: #000; -} - -tr.alt { - background: #f6f6f6; -} - -.row1 { - background: #fff; -} - -.row2 { - background: #f9f9f9; -} - -/* SORTABLE TABLES */ - -thead th { - padding: 5px 10px; - line-height: normal; - text-transform: uppercase; - background: #f6f6f6; -} - -thead th a:link, thead th a:visited { - color: #666; -} - -thead th.sorted { - background: #eee; -} - -thead th.sorted .text { - padding-right: 42px; -} - -table thead th .text span { - padding: 8px 10px; - display: block; -} - -table thead th .text a { - display: block; - cursor: pointer; - padding: 8px 10px; -} - -table thead th .text a:focus, table thead th .text a:hover { - background: #eee; -} - -thead th.sorted a.sortremove { - visibility: hidden; -} - -table thead th.sorted:hover a.sortremove { - visibility: visible; -} - -table thead th.sorted .sortoptions { - display: block; - padding: 9px 5px 0 5px; - float: right; - text-align: right; -} - -table thead th.sorted .sortpriority { - font-size: .8em; - min-width: 12px; - text-align: center; - vertical-align: 3px; - margin-left: 2px; - margin-right: 2px; -} - -table thead th.sorted .sortoptions a { - position: relative; - width: 14px; - height: 14px; - display: inline-block; - background: url(../img/sorting-icons.svg) 0 0 no-repeat; - background-size: 14px auto; -} - -table thead th.sorted .sortoptions a.sortremove { - background-position: 0 0; -} - -table thead th.sorted .sortoptions a.sortremove:after { - content: '\\'; - position: absolute; - top: -6px; - left: 3px; - font-weight: 200; - font-size: 18px; - color: #999; -} - -table thead th.sorted .sortoptions a.sortremove:focus:after, -table thead th.sorted .sortoptions a.sortremove:hover:after { - color: #447e9b; -} - -table thead th.sorted .sortoptions a.sortremove:focus, -table thead th.sorted .sortoptions a.sortremove:hover { - background-position: 0 -14px; -} - -table thead th.sorted .sortoptions a.ascending { - background-position: 0 -28px; -} - -table thead th.sorted .sortoptions a.ascending:focus, -table thead th.sorted .sortoptions a.ascending:hover { - background-position: 0 -42px; -} - -table thead th.sorted .sortoptions a.descending { - top: 1px; - background-position: 0 -56px; -} - -table thead th.sorted .sortoptions a.descending:focus, -table thead th.sorted .sortoptions a.descending:hover { - background-position: 0 -70px; -} - -/* FORM DEFAULTS */ - -input, textarea, select, .form-row p, form .button { - margin: 2px 0; - padding: 2px 3px; - vertical-align: middle; - font-family: "Roboto", "Lucida Grande", Verdana, Arial, sans-serif; - font-weight: normal; - font-size: 13px; -} -.form-row div.help { - padding: 2px 3px; -} - -textarea { - vertical-align: top; -} - -input[type=text], input[type=password], input[type=email], input[type=url], -input[type=number], textarea, select, .vTextField { - border: 1px solid #ccc; - border-radius: 4px; - padding: 5px 6px; - margin-top: 0; -} - -input[type=text]:focus, input[type=password]:focus, input[type=email]:focus, -input[type=url]:focus, input[type=number]:focus, textarea:focus, select:focus, -.vTextField:focus { - border-color: #999; -} - -select { - height: 30px; -} - -select[multiple] { - min-height: 150px; -} - -/* FORM BUTTONS */ - -.button, input[type=submit], input[type=button], .submit-row input, a.button { - background: #79aec8; - padding: 10px 15px; - border: none; - border-radius: 4px; - color: #fff; - cursor: pointer; -} - -a.button { - padding: 4px 5px; -} - -.button:active, input[type=submit]:active, input[type=button]:active, -.button:focus, input[type=submit]:focus, input[type=button]:focus, -.button:hover, input[type=submit]:hover, input[type=button]:hover { - background: #609ab6; -} - -.button[disabled], input[type=submit][disabled], input[type=button][disabled] { - opacity: 0.4; -} - -.button.default, input[type=submit].default, .submit-row input.default { - float: right; - border: none; - font-weight: 400; - background: #417690; -} - -.button.default:active, input[type=submit].default:active, -.button.default:focus, input[type=submit].default:focus, -.button.default:hover, input[type=submit].default:hover { - background: #205067; -} - -.button[disabled].default, -input[type=submit][disabled].default, -input[type=button][disabled].default { - opacity: 0.4; -} - - -/* MODULES */ - -.module { - border: none; - margin-bottom: 30px; - background: #fff; -} - -.module p, .module ul, .module h3, .module h4, .module dl, .module pre { - padding-left: 10px; - padding-right: 10px; -} - -.module blockquote { - margin-left: 12px; -} - -.module ul, .module ol { - margin-left: 1.5em; -} - -.module h3 { - margin-top: .6em; -} - -.module h2, .module caption, .inline-group h2 { - margin: 0; - padding: 8px; - font-weight: 400; - font-size: 13px; - text-align: left; - background: #79aec8; - color: #fff; -} - -.module caption, -.inline-group h2 { - font-size: 12px; - letter-spacing: 0.5px; - text-transform: uppercase; -} - -.module table { - border-collapse: collapse; -} - -/* MESSAGES & ERRORS */ - -ul.messagelist { - padding: 0; - margin: 0; -} - -ul.messagelist li { - display: block; - font-weight: 400; - font-size: 13px; - padding: 10px 10px 10px 65px; - margin: 0 0 10px 0; - background: #dfd url(../img/icon-yes.svg) 40px 12px no-repeat; - background-size: 16px auto; - color: #333; -} - -ul.messagelist li.warning { - background: #ffc url(../img/icon-alert.svg) 40px 14px no-repeat; - background-size: 14px auto; -} - -ul.messagelist li.error { - background: #ffefef url(../img/icon-no.svg) 40px 12px no-repeat; - background-size: 16px auto; -} - -.errornote { - font-size: 14px; - font-weight: 700; - display: block; - padding: 10px 12px; - margin: 0 0 10px 0; - color: #ba2121; - border: 1px solid #ba2121; - border-radius: 4px; - background-color: #fff; - background-position: 5px 12px; -} - -ul.errorlist { - margin: 0 0 4px; - padding: 0; - color: #ba2121; - background: #fff; -} - -ul.errorlist li { - font-size: 13px; - display: block; - margin-bottom: 4px; -} - -ul.errorlist li:first-child { - margin-top: 0; -} - -ul.errorlist li a { - color: inherit; - text-decoration: underline; -} - -td ul.errorlist { - margin: 0; - padding: 0; -} - -td ul.errorlist li { - margin: 0; -} - -.form-row.errors { - margin: 0; - border: none; - border-bottom: 1px solid #eee; - background: none; -} - -.form-row.errors ul.errorlist li { - padding-left: 0; -} - -.errors input, .errors select, .errors textarea { - border: 1px solid #ba2121; -} - -div.system-message { - background: #ffc; - margin: 10px; - padding: 6px 8px; - font-size: .8em; -} - -div.system-message p.system-message-title { - padding: 4px 5px 4px 25px; - margin: 0; - color: #c11; - background: #ffefef url(../img/icon-no.svg) 5px 5px no-repeat; -} - -.description { - font-size: 12px; - padding: 5px 0 0 12px; -} - -/* BREADCRUMBS */ - -div.breadcrumbs { - background: #79aec8; - padding: 10px 40px; - border: none; - font-size: 14px; - color: #c4dce8; - text-align: left; -} - -div.breadcrumbs a { - color: #fff; -} - -div.breadcrumbs a:focus, div.breadcrumbs a:hover { - color: #c4dce8; -} - -/* ACTION ICONS */ - -.addlink { - padding-left: 16px; - background: url(../img/icon-addlink.svg) 0 1px no-repeat; -} - -.changelink, .inlinechangelink { - padding-left: 16px; - background: url(../img/icon-changelink.svg) 0 1px no-repeat; -} - -.deletelink { - padding-left: 16px; - background: url(../img/icon-deletelink.svg) 0 1px no-repeat; -} - -a.deletelink:link, a.deletelink:visited { - color: #CC3434; -} - -a.deletelink:focus, a.deletelink:hover { - color: #993333; - text-decoration: none; -} - -/* OBJECT TOOLS */ - -.object-tools { - font-size: 10px; - font-weight: bold; - padding-left: 0; - float: right; - position: relative; - margin-top: -48px; -} - -.form-row .object-tools { - margin-top: 5px; - margin-bottom: 5px; - float: none; - height: 2em; - padding-left: 3.5em; -} - -.object-tools li { - display: block; - float: left; - margin-left: 5px; - height: 16px; -} - -.object-tools a { - border-radius: 15px; -} - -.object-tools a:link, .object-tools a:visited { - display: block; - float: left; - padding: 3px 12px; - background: #999; - font-weight: 400; - font-size: 11px; - text-transform: uppercase; - letter-spacing: 0.5px; - color: #fff; -} - -.object-tools a:focus, .object-tools a:hover { - background-color: #417690; -} - -.object-tools a:focus{ - text-decoration: none; -} - -.object-tools a.viewsitelink, .object-tools a.golink,.object-tools a.addlink { - background-repeat: no-repeat; - background-position: right 7px center; - padding-right: 26px; -} - -.object-tools a.viewsitelink, .object-tools a.golink { - background-image: url(../img/tooltag-arrowright.svg); -} - -.object-tools a.addlink { - background-image: url(../img/tooltag-add.svg); -} - -/* OBJECT HISTORY */ - -table#change-history { - width: 100%; -} - -table#change-history tbody th { - width: 16em; -} - -/* PAGE STRUCTURE */ - -#container { - position: relative; - width: 100%; - min-width: 980px; - padding: 0; -} - -#content { - padding: 20px 40px; -} - -.dashboard #content { - width: 600px; -} - -#content-main { - float: left; - width: 100%; -} - -#content-related { - float: right; - width: 260px; - position: relative; - margin-right: -300px; -} - -#footer { - clear: both; - padding: 10px; -} - -/* COLUMN TYPES */ - -.colMS { - margin-right: 300px; -} - -.colSM { - margin-left: 300px; -} - -.colSM #content-related { - float: left; - margin-right: 0; - margin-left: -300px; -} - -.colSM #content-main { - float: right; -} - -.popup .colM { - width: auto; -} - -/* HEADER */ - -#header { - width: auto; - height: 40px; - padding: 10px 40px; - background: #417690; - line-height: 40px; - color: #ffc; - overflow: hidden; -} - -#header a:link, #header a:visited { - color: #fff; -} - -#header a:focus , #header a:hover { - text-decoration: underline; -} - -#branding { - float: left; -} - -#branding h1 { - padding: 0; - margin: 0 20px 0 0; - font-weight: 300; - font-size: 24px; - color: #f5dd5d; -} - -#branding h1, #branding h1 a:link, #branding h1 a:visited { - color: #f5dd5d; -} - -#branding h2 { - padding: 0 10px; - font-size: 14px; - margin: -8px 0 8px 0; - font-weight: normal; - color: #ffc; -} - -#branding a:hover { - text-decoration: none; -} - -#user-tools { - float: right; - padding: 0; - margin: 0 0 0 20px; - font-weight: 300; - font-size: 11px; - letter-spacing: 0.5px; - text-transform: uppercase; - text-align: right; -} - -#user-tools a { - border-bottom: 1px solid rgba(255, 255, 255, 0.25); -} - -#user-tools a:focus, #user-tools a:hover { - text-decoration: none; - border-bottom-color: #79aec8; - color: #79aec8; -} - -/* SIDEBAR */ - -#content-related { - background: #f8f8f8; -} - -#content-related .module { - background: none; -} - -#content-related h3 { - font-size: 14px; - color: #666; - padding: 0 16px; - margin: 0 0 16px; -} - -#content-related h4 { - font-size: 13px; -} - -#content-related p { - padding-left: 16px; - padding-right: 16px; -} - -#content-related .actionlist { - padding: 0; - margin: 16px; -} - -#content-related .actionlist li { - line-height: 1.2; - margin-bottom: 10px; - padding-left: 18px; -} - -#content-related .module h2 { - background: none; - padding: 16px; - margin-bottom: 16px; - border-bottom: 1px solid #eaeaea; - font-size: 18px; - color: #333; -} - -.delete-confirmation form input[type="submit"] { - background: #ba2121; - border-radius: 4px; - padding: 10px 15px; - color: #fff; -} - -.delete-confirmation form input[type="submit"]:active, -.delete-confirmation form input[type="submit"]:focus, -.delete-confirmation form input[type="submit"]:hover { - background: #a41515; -} - -.delete-confirmation form .cancel-link { - display: inline-block; - vertical-align: middle; - height: 15px; - line-height: 15px; - background: #ddd; - border-radius: 4px; - padding: 10px 15px; - color: #333; - margin: 0 0 0 10px; -} - -.delete-confirmation form .cancel-link:active, -.delete-confirmation form .cancel-link:focus, -.delete-confirmation form .cancel-link:hover { - background: #ccc; -} - -/* POPUP */ -.popup #content { - padding: 20px; -} - -.popup #container { - min-width: 0; -} - -.popup #header { - padding: 10px 20px; -} diff --git a/camp/static/admin/css/changelists.css b/camp/static/admin/css/changelists.css deleted file mode 100644 index 17690a3..0000000 --- a/camp/static/admin/css/changelists.css +++ /dev/null @@ -1,344 +0,0 @@ -/* CHANGELISTS */ - -#changelist { - position: relative; - width: 100%; -} - -#changelist table { - width: 100%; -} - -.change-list .hiddenfields { display:none; } - -.change-list .filtered table { - border-right: none; -} - -.change-list .filtered { - min-height: 400px; -} - -.change-list .filtered .results, .change-list .filtered .paginator, -.filtered #toolbar, .filtered div.xfull { - margin-right: 280px; - width: auto; -} - -.change-list .filtered table tbody th { - padding-right: 1em; -} - -#changelist-form .results { - overflow-x: auto; -} - -#changelist .toplinks { - border-bottom: 1px solid #ddd; -} - -#changelist .paginator { - color: #666; - border-bottom: 1px solid #eee; - background: #fff; - overflow: hidden; -} - -/* CHANGELIST TABLES */ - -#changelist table thead th { - padding: 0; - white-space: nowrap; - vertical-align: middle; -} - -#changelist table thead th.action-checkbox-column { - width: 1.5em; - text-align: center; -} - -#changelist table tbody td.action-checkbox { - text-align: center; -} - -#changelist table tfoot { - color: #666; -} - -/* TOOLBAR */ - -#changelist #toolbar { - padding: 8px 10px; - margin-bottom: 15px; - border-top: 1px solid #eee; - border-bottom: 1px solid #eee; - background: #f8f8f8; - color: #666; -} - -#changelist #toolbar form input { - border-radius: 4px; - font-size: 14px; - padding: 5px; - color: #333; -} - -#changelist #toolbar form #searchbar { - height: 19px; - border: 1px solid #ccc; - padding: 2px 5px; - margin: 0; - vertical-align: top; - font-size: 13px; -} - -#changelist #toolbar form #searchbar:focus { - border-color: #999; -} - -#changelist #toolbar form input[type="submit"] { - border: 1px solid #ccc; - padding: 2px 10px; - margin: 0; - vertical-align: middle; - background: #fff; - box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset; - cursor: pointer; - color: #333; -} - -#changelist #toolbar form input[type="submit"]:focus, -#changelist #toolbar form input[type="submit"]:hover { - border-color: #999; -} - -#changelist #changelist-search img { - vertical-align: middle; - margin-right: 4px; -} - -/* FILTER COLUMN */ - -#changelist-filter { - position: absolute; - top: 0; - right: 0; - z-index: 1000; - width: 240px; - background: #f8f8f8; - border-left: none; - margin: 0; -} - -#changelist-filter h2 { - font-size: 14px; - text-transform: uppercase; - letter-spacing: 0.5px; - padding: 5px 15px; - margin-bottom: 12px; - border-bottom: none; -} - -#changelist-filter h3 { - font-weight: 400; - font-size: 14px; - padding: 0 15px; - margin-bottom: 10px; -} - -#changelist-filter ul { - margin: 5px 0; - padding: 0 15px 15px; - border-bottom: 1px solid #eaeaea; -} - -#changelist-filter ul:last-child { - border-bottom: none; - padding-bottom: none; -} - -#changelist-filter li { - list-style-type: none; - margin-left: 0; - padding-left: 0; -} - -#changelist-filter a { - display: block; - color: #999; - text-overflow: ellipsis; - overflow-x: hidden; -} - -#changelist-filter li.selected { - border-left: 5px solid #eaeaea; - padding-left: 10px; - margin-left: -15px; -} - -#changelist-filter li.selected a { - color: #5b80b2; -} - -#changelist-filter a:focus, #changelist-filter a:hover, -#changelist-filter li.selected a:focus, -#changelist-filter li.selected a:hover { - color: #036; -} - -/* DATE DRILLDOWN */ - -.change-list ul.toplinks { - display: block; - float: left; - padding: 0; - margin: 0; - width: 100%; -} - -.change-list ul.toplinks li { - padding: 3px 6px; - font-weight: bold; - list-style-type: none; - display: inline-block; -} - -.change-list ul.toplinks .date-back a { - color: #999; -} - -.change-list ul.toplinks .date-back a:focus, -.change-list ul.toplinks .date-back a:hover { - color: #036; -} - -/* PAGINATOR */ - -.paginator { - font-size: 13px; - padding-top: 10px; - padding-bottom: 10px; - line-height: 22px; - margin: 0; - border-top: 1px solid #ddd; -} - -.paginator a:link, .paginator a:visited { - padding: 2px 6px; - background: #79aec8; - text-decoration: none; - color: #fff; -} - -.paginator a.showall { - padding: 0; - border: none; - background: none; - color: #5b80b2; -} - -.paginator a.showall:focus, .paginator a.showall:hover { - background: none; - color: #036; -} - -.paginator .end { - margin-right: 6px; -} - -.paginator .this-page { - padding: 2px 6px; - font-weight: bold; - font-size: 13px; - vertical-align: top; -} - -.paginator a:focus, .paginator a:hover { - color: white; - background: #036; -} - -/* ACTIONS */ - -.filtered .actions { - margin-right: 280px; - border-right: none; -} - -#changelist table input { - margin: 0; - vertical-align: baseline; -} - -#changelist table tbody tr.selected { - background-color: #FFFFCC; -} - -#changelist .actions { - padding: 10px; - background: #fff; - border-top: none; - border-bottom: none; - line-height: 24px; - color: #999; -} - -#changelist .actions.selected { - background: #fffccf; - border-top: 1px solid #fffee8; - border-bottom: 1px solid #edecd6; -} - -#changelist .actions span.all, -#changelist .actions span.action-counter, -#changelist .actions span.clear, -#changelist .actions span.question { - font-size: 13px; - margin: 0 0.5em; - display: none; -} - -#changelist .actions:last-child { - border-bottom: none; -} - -#changelist .actions select { - vertical-align: top; - height: 24px; - background: none; - color: #000; - border: 1px solid #ccc; - border-radius: 4px; - font-size: 14px; - padding: 0 0 0 4px; - margin: 0; - margin-left: 10px; -} - -#changelist .actions select:focus { - border-color: #999; -} - -#changelist .actions label { - display: inline-block; - vertical-align: middle; - font-size: 13px; -} - -#changelist .actions .button { - font-size: 13px; - border: 1px solid #ccc; - border-radius: 4px; - background: #fff; - box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset; - cursor: pointer; - height: 24px; - line-height: 1; - padding: 4px 8px; - margin: 0; - color: #333; -} - -#changelist .actions .button:focus, #changelist .actions .button:hover { - border-color: #999; -} diff --git a/camp/static/admin/css/dashboard.css b/camp/static/admin/css/dashboard.css deleted file mode 100644 index 1560c7b..0000000 --- a/camp/static/admin/css/dashboard.css +++ /dev/null @@ -1,27 +0,0 @@ -/* DASHBOARD */ - -.dashboard .module table th { - width: 100%; -} - -.dashboard .module table td { - white-space: nowrap; -} - -.dashboard .module table td a { - display: block; - padding-right: .6em; -} - -/* RECENT ACTIONS MODULE */ - -.module ul.actionlist { - margin-left: 0; -} - -ul.actionlist li { - list-style-type: none; - overflow: hidden; - text-overflow: ellipsis; - -o-text-overflow: ellipsis; -} diff --git a/camp/static/admin/css/fonts.css b/camp/static/admin/css/fonts.css deleted file mode 100644 index c837e01..0000000 --- a/camp/static/admin/css/fonts.css +++ /dev/null @@ -1,20 +0,0 @@ -@font-face { - font-family: 'Roboto'; - src: url('../fonts/Roboto-Bold-webfont.woff'); - font-weight: 700; - font-style: normal; -} - -@font-face { - font-family: 'Roboto'; - src: url('../fonts/Roboto-Regular-webfont.woff'); - font-weight: 400; - font-style: normal; -} - -@font-face { - font-family: 'Roboto'; - src: url('../fonts/Roboto-Light-webfont.woff'); - font-weight: 300; - font-style: normal; -} diff --git a/camp/static/admin/css/forms.css b/camp/static/admin/css/forms.css deleted file mode 100644 index 77985d5..0000000 --- a/camp/static/admin/css/forms.css +++ /dev/null @@ -1,515 +0,0 @@ -@import url('widgets.css'); - -/* FORM ROWS */ - -.form-row { - overflow: hidden; - padding: 10px; - font-size: 13px; - border-bottom: 1px solid #eee; -} - -.form-row img, .form-row input { - vertical-align: middle; -} - -.form-row label input[type="checkbox"] { - margin-top: 0; - vertical-align: 0; -} - -form .form-row p { - padding-left: 0; -} - -.hidden { - display: none; -} - -/* FORM LABELS */ - -label { - font-weight: normal; - color: #666; - font-size: 13px; -} - -.required label, label.required { - font-weight: bold; - color: #333; -} - -/* RADIO BUTTONS */ - -form ul.radiolist li { - list-style-type: none; -} - -form ul.radiolist label { - float: none; - display: inline; -} - -form ul.radiolist input[type="radio"] { - margin: -2px 4px 0 0; - padding: 0; -} - -form ul.inline { - margin-left: 0; - padding: 0; -} - -form ul.inline li { - float: left; - padding-right: 7px; -} - -/* ALIGNED FIELDSETS */ - -.aligned label { - display: block; - padding: 4px 10px 0 0; - float: left; - width: 160px; - word-wrap: break-word; - line-height: 1; -} - -.aligned label:not(.vCheckboxLabel):after { - content: ''; - display: inline-block; - vertical-align: middle; - height: 26px; -} - -.aligned label + p, .aligned label + div.help, .aligned label + div.readonly { - padding: 6px 0; - margin-top: 0; - margin-bottom: 0; - margin-left: 170px; -} - -.aligned ul label { - display: inline; - float: none; - width: auto; -} - -.aligned .form-row input { - margin-bottom: 0; -} - -.colMS .aligned .vLargeTextField, .colMS .aligned .vXMLLargeTextField { - width: 350px; -} - -form .aligned ul { - margin-left: 160px; - padding-left: 10px; -} - -form .aligned ul.radiolist { - display: inline-block; - margin: 0; - padding: 0; -} - -form .aligned p.help, -form .aligned div.help { - clear: left; - margin-top: 0; - margin-left: 160px; - padding-left: 10px; -} - -form .aligned label + p.help, -form .aligned label + div.help { - margin-left: 0; - padding-left: 0; -} - -form .aligned p.help:last-child, -form .aligned div.help:last-child { - margin-bottom: 0; - padding-bottom: 0; -} - -form .aligned input + p.help, -form .aligned textarea + p.help, -form .aligned select + p.help, -form .aligned input + div.help, -form .aligned textarea + div.help, -form .aligned select + div.help { - margin-left: 160px; - padding-left: 10px; -} - -form .aligned ul li { - list-style: none; -} - -form .aligned table p { - margin-left: 0; - padding-left: 0; -} - -.aligned .vCheckboxLabel { - float: none; - width: auto; - display: inline-block; - vertical-align: -3px; - padding: 0 0 5px 5px; -} - -.aligned .vCheckboxLabel + p.help, -.aligned .vCheckboxLabel + div.help { - margin-top: -4px; -} - -.colM .aligned .vLargeTextField, .colM .aligned .vXMLLargeTextField { - width: 610px; -} - -.checkbox-row p.help, -.checkbox-row div.help { - margin-left: 0; - padding-left: 0; -} - -fieldset .field-box { - float: left; - margin-right: 20px; -} - -/* WIDE FIELDSETS */ - -.wide label { - width: 200px; -} - -form .wide p, -form .wide input + p.help, -form .wide input + div.help { - margin-left: 200px; -} - -form .wide p.help, -form .wide div.help { - padding-left: 38px; -} - -form div.help ul { - padding-left: 0; - margin-left: 0; -} - -.colM fieldset.wide .vLargeTextField, .colM fieldset.wide .vXMLLargeTextField { - width: 450px; -} - -/* COLLAPSED FIELDSETS */ - -fieldset.collapsed * { - display: none; -} - -fieldset.collapsed h2, fieldset.collapsed { - display: block; -} - -fieldset.collapsed { - border: 1px solid #eee; - border-radius: 4px; - overflow: hidden; -} - -fieldset.collapsed h2 { - background: #f8f8f8; - color: #666; -} - -fieldset .collapse-toggle { - color: #fff; -} - -fieldset.collapsed .collapse-toggle { - background: transparent; - display: inline; - color: #447e9b; -} - -/* MONOSPACE TEXTAREAS */ - -fieldset.monospace textarea { - font-family: "Bitstream Vera Sans Mono", Monaco, "Courier New", Courier, monospace; -} - -/* SUBMIT ROW */ - -.submit-row { - padding: 12px 14px; - margin: 0 0 20px; - background: #f8f8f8; - border: 1px solid #eee; - border-radius: 4px; - text-align: right; - overflow: hidden; -} - -body.popup .submit-row { - overflow: auto; -} - -.submit-row input { - height: 35px; - line-height: 15px; - margin: 0 0 0 5px; -} - -.submit-row input.default { - margin: 0 0 0 8px; - text-transform: uppercase; -} - -.submit-row p { - margin: 0.3em; -} - -.submit-row p.deletelink-box { - float: left; - margin: 0; -} - -.submit-row a.deletelink { - display: block; - background: #ba2121; - border-radius: 4px; - padding: 10px 15px; - height: 15px; - line-height: 15px; - color: #fff; -} - -.submit-row a.deletelink:focus, -.submit-row a.deletelink:hover, -.submit-row a.deletelink:active { - background: #a41515; -} - -/* CUSTOM FORM FIELDS */ - -.vSelectMultipleField { - vertical-align: top; -} - -.vCheckboxField { - border: none; -} - -.vDateField, .vTimeField { - margin-right: 2px; - margin-bottom: 4px; -} - -.vDateField { - min-width: 6.85em; -} - -.vTimeField { - min-width: 4.7em; -} - -.vURLField { - width: 30em; -} - -.vLargeTextField, .vXMLLargeTextField { - width: 48em; -} - -.flatpages-flatpage #id_content { - height: 40.2em; -} - -.module table .vPositiveSmallIntegerField { - width: 2.2em; -} - -.vTextField { - width: 20em; -} - -.vIntegerField { - width: 5em; -} - -.vBigIntegerField { - width: 10em; -} - -.vForeignKeyRawIdAdminField { - width: 5em; -} - -/* INLINES */ - -.inline-group { - padding: 0; - margin: 0 0 30px; -} - -.inline-group thead th { - padding: 8px 10px; -} - -.inline-group .aligned label { - width: 160px; -} - -.inline-related { - position: relative; -} - -.inline-related h3 { - margin: 0; - color: #666; - padding: 5px; - font-size: 13px; - background: #f8f8f8; - border-top: 1px solid #eee; - border-bottom: 1px solid #eee; -} - -.inline-related h3 span.delete { - float: right; -} - -.inline-related h3 span.delete label { - margin-left: 2px; - font-size: 11px; -} - -.inline-related fieldset { - margin: 0; - background: #fff; - border: none; - width: 100%; -} - -.inline-related fieldset.module h3 { - margin: 0; - padding: 2px 5px 3px 5px; - font-size: 11px; - text-align: left; - font-weight: bold; - background: #bcd; - color: #fff; -} - -.inline-group .tabular fieldset.module { - border: none; -} - -.inline-related.tabular fieldset.module table { - width: 100%; -} - -.last-related fieldset { - border: none; -} - -.inline-group .tabular tr.has_original td { - padding-top: 2em; -} - -.inline-group .tabular tr td.original { - padding: 2px 0 0 0; - width: 0; - _position: relative; -} - -.inline-group .tabular th.original { - width: 0px; - padding: 0; -} - -.inline-group .tabular td.original p { - position: absolute; - left: 0; - height: 1.1em; - padding: 2px 9px; - overflow: hidden; - font-size: 9px; - font-weight: bold; - color: #666; - _width: 700px; -} - -.inline-group ul.tools { - padding: 0; - margin: 0; - list-style: none; -} - -.inline-group ul.tools li { - display: inline; - padding: 0 5px; -} - -.inline-group div.add-row, -.inline-group .tabular tr.add-row td { - color: #666; - background: #f8f8f8; - padding: 8px 10px; - border-bottom: 1px solid #eee; -} - -.inline-group .tabular tr.add-row td { - padding: 8px 10px; - border-bottom: 1px solid #eee; -} - -.inline-group ul.tools a.add, -.inline-group div.add-row a, -.inline-group .tabular tr.add-row td a { - background: url(../img/icon-addlink.svg) 0 1px no-repeat; - padding-left: 16px; - font-size: 12px; -} - -.empty-form { - display: none; -} - -/* RELATED FIELD ADD ONE / LOOKUP */ - -.add-another, .related-lookup { - margin-left: 5px; - display: inline-block; - vertical-align: middle; - background-repeat: no-repeat; - background-size: 14px; -} - -.add-another { - width: 16px; - height: 16px; - background-image: url(../img/icon-addlink.svg); -} - -.related-lookup { - width: 16px; - height: 16px; - background-image: url(../img/search.svg); -} - -form .related-widget-wrapper ul { - display: inline-block; - margin-left: 0; - padding-left: 0; -} - -.clearable-file-input input { - margin-top: 0; -} diff --git a/camp/static/admin/css/login.css b/camp/static/admin/css/login.css deleted file mode 100644 index cab3bbf..0000000 --- a/camp/static/admin/css/login.css +++ /dev/null @@ -1,78 +0,0 @@ -/* LOGIN FORM */ - -body.login { - background: #f8f8f8; -} - -.login #header { - height: auto; - padding: 5px 16px; -} - -.login #header h1 { - font-size: 18px; -} - -.login #header h1 a { - color: #fff; -} - -.login #content { - padding: 20px 20px 0; -} - -.login #container { - background: #fff; - border: 1px solid #eaeaea; - border-radius: 4px; - overflow: hidden; - width: 28em; - min-width: 300px; - margin: 100px auto; -} - -.login #content-main { - width: 100%; -} - -.login .form-row { - padding: 4px 0; - float: left; - width: 100%; - border-bottom: none; -} - -.login .form-row label { - padding-right: 0.5em; - line-height: 2em; - font-size: 1em; - clear: both; - color: #333; -} - -.login .form-row #id_username, .login .form-row #id_password { - clear: both; - padding: 8px; - width: 100%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.login span.help { - font-size: 10px; - display: block; -} - -.login .submit-row { - clear: both; - padding: 1em 0 0 9.4em; - margin: 0; - border: none; - background: none; - text-align: left; -} - -.login .password-reset-link { - text-align: center; -} diff --git a/camp/static/admin/css/rtl.css b/camp/static/admin/css/rtl.css deleted file mode 100644 index ef39781..0000000 --- a/camp/static/admin/css/rtl.css +++ /dev/null @@ -1,264 +0,0 @@ -body { - direction: rtl; -} - -/* LOGIN */ - -.login .form-row { - float: right; -} - -.login .form-row label { - float: right; - padding-left: 0.5em; - padding-right: 0; - text-align: left; -} - -.login .submit-row { - clear: both; - padding: 1em 9.4em 0 0; -} - -/* GLOBAL */ - -th { - text-align: right; -} - -.module h2, .module caption { - text-align: right; -} - -.module ul, .module ol { - margin-left: 0; - margin-right: 1.5em; -} - -.addlink, .changelink { - padding-left: 0; - padding-right: 16px; - background-position: 100% 1px; -} - -.deletelink { - padding-left: 0; - padding-right: 16px; - background-position: 100% 1px; -} - -.object-tools { - float: left; -} - -thead th:first-child, -tfoot td:first-child { - border-left: none; -} - -/* LAYOUT */ - -#user-tools { - right: auto; - left: 0; - text-align: left; -} - -div.breadcrumbs { - text-align: right; -} - -#content-main { - float: right; -} - -#content-related { - float: left; - margin-left: -300px; - margin-right: auto; -} - -.colMS { - margin-left: 300px; - margin-right: 0; -} - -/* SORTABLE TABLES */ - -table thead th.sorted .sortoptions { - float: left; -} - -thead th.sorted .text { - padding-right: 0; - padding-left: 42px; -} - -/* dashboard styles */ - -.dashboard .module table td a { - padding-left: .6em; - padding-right: 16px; -} - -/* changelists styles */ - -.change-list .filtered table { - border-left: none; - border-right: 0px none; -} - -#changelist-filter { - right: auto; - left: 0; - border-left: none; - border-right: none; -} - -.change-list .filtered .results, .change-list .filtered .paginator, .filtered #toolbar, .filtered div.xfull { - margin-right: 0; - margin-left: 280px; -} - -#changelist-filter li.selected { - border-left: none; - padding-left: 10px; - margin-left: 0; - border-right: 5px solid #eaeaea; - padding-right: 10px; - margin-right: -15px; -} - -.filtered .actions { - margin-left: 280px; - margin-right: 0; -} - -#changelist table tbody td:first-child, #changelist table tbody th:first-child { - border-right: none; - border-left: none; -} - -/* FORMS */ - -.aligned label { - padding: 0 0 3px 1em; - float: right; -} - -.submit-row { - text-align: left -} - -.submit-row p.deletelink-box { - float: right; -} - -.submit-row input.default { - margin-left: 0; -} - -.vDateField, .vTimeField { - margin-left: 2px; -} - -.aligned .form-row input { - margin-left: 5px; -} - -form .aligned p.help, form .aligned div.help { - clear: right; -} - -form ul.inline li { - float: right; - padding-right: 0; - padding-left: 7px; -} - -input[type=submit].default, .submit-row input.default { - float: left; -} - -fieldset .field-box { - float: right; - margin-left: 20px; - margin-right: 0; -} - -.errorlist li { - background-position: 100% 12px; - padding: 0; -} - -.errornote { - background-position: 100% 12px; - padding: 10px 12px; -} - -/* WIDGETS */ - -.calendarnav-previous { - top: 0; - left: auto; - right: 10px; -} - -.calendarnav-next { - top: 0; - right: auto; - left: 10px; -} - -.calendar caption, .calendarbox h2 { - text-align: center; -} - -.selector { - float: right; -} - -.selector .selector-filter { - text-align: right; -} - -.inline-deletelink { - float: left; -} - -form .form-row p.datetime { - overflow: hidden; -} - -.related-widget-wrapper { - float: right; -} - -/* MISC */ - -.inline-related h2, .inline-group h2 { - text-align: right -} - -.inline-related h3 span.delete { - padding-right: 20px; - padding-left: inherit; - left: 10px; - right: inherit; - float:left; -} - -.inline-related h3 span.delete label { - margin-left: inherit; - margin-right: 2px; -} - -/* IE7 specific bug fixes */ - -div.colM { - position: relative; -} - -.submit-row input { - float: left; -} diff --git a/camp/static/admin/css/widgets.css b/camp/static/admin/css/widgets.css deleted file mode 100644 index d3bd67a..0000000 --- a/camp/static/admin/css/widgets.css +++ /dev/null @@ -1,565 +0,0 @@ -/* SELECTOR (FILTER INTERFACE) */ - -.selector { - width: 800px; - float: left; -} - -.selector select { - width: 380px; - height: 17.2em; -} - -.selector-available, .selector-chosen { - float: left; - width: 380px; - text-align: center; - margin-bottom: 5px; -} - -.selector-chosen select { - border-top: none; -} - -.selector-available h2, .selector-chosen h2 { - border: 1px solid #ccc; - border-radius: 4px 4px 0 0; -} - -.selector-chosen h2 { - background: #79aec8; - color: #fff; -} - -.selector .selector-available h2 { - background: #f8f8f8; - color: #666; -} - -.selector .selector-filter { - background: white; - border: 1px solid #ccc; - border-width: 0 1px; - padding: 8px; - color: #999; - font-size: 10px; - margin: 0; - text-align: left; -} - -.selector .selector-filter label, -.inline-group .aligned .selector .selector-filter label { - float: left; - margin: 7px 0 0; - width: 18px; - height: 18px; - padding: 0; - overflow: hidden; - line-height: 1; -} - -.selector .selector-available input { - width: 320px; - margin-left: 8px; -} - -.selector ul.selector-chooser { - float: left; - width: 22px; - background-color: #eee; - border-radius: 10px; - margin: 10em 5px 0 5px; - padding: 0; -} - -.selector-chooser li { - margin: 0; - padding: 3px; - list-style-type: none; -} - -.selector select { - padding: 0 10px; - margin: 0 0 10px; - border-radius: 0 0 4px 4px; -} - -.selector-add, .selector-remove { - width: 16px; - height: 16px; - display: block; - text-indent: -3000px; - overflow: hidden; - cursor: default; - opacity: 0.3; -} - -.active.selector-add, .active.selector-remove { - opacity: 1; -} - -.active.selector-add:hover, .active.selector-remove:hover { - cursor: pointer; -} - -.selector-add { - background: url(../img/selector-icons.svg) 0 -96px no-repeat; -} - -.active.selector-add:focus, .active.selector-add:hover { - background-position: 0 -112px; -} - -.selector-remove { - background: url(../img/selector-icons.svg) 0 -64px no-repeat; -} - -.active.selector-remove:focus, .active.selector-remove:hover { - background-position: 0 -80px; -} - -a.selector-chooseall, a.selector-clearall { - display: inline-block; - height: 16px; - text-align: left; - margin: 1px auto 3px; - overflow: hidden; - font-weight: bold; - line-height: 16px; - color: #666; - text-decoration: none; - opacity: 0.3; -} - -a.active.selector-chooseall:focus, a.active.selector-clearall:focus, -a.active.selector-chooseall:hover, a.active.selector-clearall:hover { - color: #447e9b; -} - -a.active.selector-chooseall, a.active.selector-clearall { - opacity: 1; -} - -a.active.selector-chooseall:hover, a.active.selector-clearall:hover { - cursor: pointer; -} - -a.selector-chooseall { - padding: 0 18px 0 0; - background: url(../img/selector-icons.svg) right -160px no-repeat; - cursor: default; -} - -a.active.selector-chooseall:focus, a.active.selector-chooseall:hover { - background-position: 100% -176px; -} - -a.selector-clearall { - padding: 0 0 0 18px; - background: url(../img/selector-icons.svg) 0 -128px no-repeat; - cursor: default; -} - -a.active.selector-clearall:focus, a.active.selector-clearall:hover { - background-position: 0 -144px; -} - -/* STACKED SELECTORS */ - -.stacked { - float: left; - width: 490px; -} - -.stacked select { - width: 480px; - height: 10.1em; -} - -.stacked .selector-available, .stacked .selector-chosen { - width: 480px; -} - -.stacked .selector-available { - margin-bottom: 0; -} - -.stacked .selector-available input { - width: 422px; -} - -.stacked ul.selector-chooser { - height: 22px; - width: 50px; - margin: 0 0 10px 40%; - background-color: #eee; - border-radius: 10px; -} - -.stacked .selector-chooser li { - float: left; - padding: 3px 3px 3px 5px; -} - -.stacked .selector-chooseall, .stacked .selector-clearall { - display: none; -} - -.stacked .selector-add { - background: url(../img/selector-icons.svg) 0 -32px no-repeat; - cursor: default; -} - -.stacked .active.selector-add { - background-position: 0 -48px; - cursor: pointer; -} - -.stacked .selector-remove { - background: url(../img/selector-icons.svg) 0 0 no-repeat; - cursor: default; -} - -.stacked .active.selector-remove { - background-position: 0 -16px; - cursor: pointer; -} - -.selector .help-icon { - background: url(../img/icon-unknown.svg) 0 0 no-repeat; - display: inline-block; - vertical-align: middle; - margin: -2px 0 0 2px; - width: 13px; - height: 13px; -} - -.selector .selector-chosen .help-icon { - background: url(../img/icon-unknown-alt.svg) 0 0 no-repeat; -} - -.selector .search-label-icon { - background: url(../img/search.svg) 0 0 no-repeat; - display: inline-block; - height: 18px; - width: 18px; -} - -/* DATE AND TIME */ - -p.datetime { - line-height: 20px; - margin: 0; - padding: 0; - color: #666; - font-weight: bold; -} - -.datetime span { - white-space: nowrap; - font-weight: normal; - font-size: 11px; - color: #ccc; -} - -.datetime input, .form-row .datetime input.vDateField, .form-row .datetime input.vTimeField { - min-width: 0; - margin-left: 5px; - margin-bottom: 4px; -} - -table p.datetime { - font-size: 11px; - margin-left: 0; - padding-left: 0; -} - -.datetimeshortcuts .clock-icon, .datetimeshortcuts .date-icon { - position: relative; - display: inline-block; - vertical-align: middle; - height: 16px; - width: 16px; - overflow: hidden; -} - -.datetimeshortcuts .clock-icon { - background: url(../img/icon-clock.svg) 0 0 no-repeat; -} - -.datetimeshortcuts a:focus .clock-icon, -.datetimeshortcuts a:hover .clock-icon { - background-position: 0 -16px; -} - -.datetimeshortcuts .date-icon { - background: url(../img/icon-calendar.svg) 0 0 no-repeat; - top: -1px; -} - -.datetimeshortcuts a:focus .date-icon, -.datetimeshortcuts a:hover .date-icon { - background-position: 0 -16px; -} - -.timezonewarning { - font-size: 11px; - color: #999; -} - -/* URL */ - -p.url { - line-height: 20px; - margin: 0; - padding: 0; - color: #666; - font-size: 11px; - font-weight: bold; -} - -.url a { - font-weight: normal; -} - -/* FILE UPLOADS */ - -p.file-upload { - line-height: 20px; - margin: 0; - padding: 0; - color: #666; - font-size: 11px; - font-weight: bold; -} - -.aligned p.file-upload { - margin-left: 170px; -} - -.file-upload a { - font-weight: normal; -} - -.file-upload .deletelink { - margin-left: 5px; -} - -span.clearable-file-input label { - color: #333; - font-size: 11px; - display: inline; - float: none; -} - -/* CALENDARS & CLOCKS */ - -.calendarbox, .clockbox { - margin: 5px auto; - font-size: 12px; - width: 19em; - text-align: center; - background: white; - border: 1px solid #ddd; - border-radius: 4px; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15); - overflow: hidden; - position: relative; -} - -.clockbox { - width: auto; -} - -.calendar { - margin: 0; - padding: 0; -} - -.calendar table { - margin: 0; - padding: 0; - border-collapse: collapse; - background: white; - width: 100%; -} - -.calendar caption, .calendarbox h2 { - margin: 0; - text-align: center; - border-top: none; - background: #f5dd5d; - font-weight: 700; - font-size: 12px; - color: #333; -} - -.calendar th { - padding: 8px 5px; - background: #f8f8f8; - border-bottom: 1px solid #ddd; - font-weight: 400; - font-size: 12px; - text-align: center; - color: #666; -} - -.calendar td { - font-weight: 400; - font-size: 12px; - text-align: center; - padding: 0; - border-top: 1px solid #eee; - border-bottom: none; -} - -.calendar td.selected a { - background: #79aec8; - color: #fff; -} - -.calendar td.nonday { - background: #f8f8f8; -} - -.calendar td.today a { - font-weight: 700; -} - -.calendar td a, .timelist a { - display: block; - font-weight: 400; - padding: 6px; - text-decoration: none; - color: #444; -} - -.calendar td a:focus, .timelist a:focus, -.calendar td a:hover, .timelist a:hover { - background: #79aec8; - color: white; -} - -.calendar td a:active, .timelist a:active { - background: #417690; - color: white; -} - -.calendarnav { - font-size: 10px; - text-align: center; - color: #ccc; - margin: 0; - padding: 1px 3px; -} - -.calendarnav a:link, #calendarnav a:visited, -#calendarnav a:focus, #calendarnav a:hover { - color: #999; -} - -.calendar-shortcuts { - background: white; - font-size: 11px; - line-height: 11px; - border-top: 1px solid #eee; - padding: 8px 0; - color: #ccc; -} - -.calendarbox .calendarnav-previous, .calendarbox .calendarnav-next { - display: block; - position: absolute; - top: 8px; - width: 15px; - height: 15px; - text-indent: -9999px; - padding: 0; -} - -.calendarnav-previous { - left: 10px; - background: url(../img/calendar-icons.svg) 0 0 no-repeat; -} - -.calendarbox .calendarnav-previous:focus, -.calendarbox .calendarnav-previous:hover { - background-position: 0 -15px; -} - -.calendarnav-next { - right: 10px; - background: url(../img/calendar-icons.svg) 0 -30px no-repeat; -} - -.calendarbox .calendarnav-next:focus, -.calendarbox .calendarnav-next:hover { - background-position: 0 -45px; -} - -.calendar-cancel { - margin: 0; - padding: 4px 0; - font-size: 12px; - background: #eee; - border-top: 1px solid #ddd; - color: #333; -} - -.calendar-cancel:focus, .calendar-cancel:hover { - background: #ddd; -} - -.calendar-cancel a { - color: black; - display: block; -} - -ul.timelist, .timelist li { - list-style-type: none; - margin: 0; - padding: 0; -} - -.timelist a { - padding: 2px; -} - -/* EDIT INLINE */ - -.inline-deletelink { - float: right; - text-indent: -9999px; - background: url(../img/inline-delete.svg) 0 0 no-repeat; - width: 16px; - height: 16px; - border: 0px none; -} - -.inline-deletelink:focus, .inline-deletelink:hover { - cursor: pointer; -} - -/* RELATED WIDGET WRAPPER */ -.related-widget-wrapper { - float: left; /* display properly in form rows with multiple fields */ - overflow: hidden; /* clear floated contents */ -} - -.related-widget-wrapper-link { - opacity: 0.3; -} - -.related-widget-wrapper-link:link { - opacity: .8; -} - -.related-widget-wrapper-link:link:focus, -.related-widget-wrapper-link:link:hover { - opacity: 1; -} - -select + .related-widget-wrapper-link, -.related-widget-wrapper-link + .related-widget-wrapper-link { - margin-left: 7px; -} diff --git a/camp/static/admin/fonts/LICENSE.txt b/camp/static/admin/fonts/LICENSE.txt deleted file mode 100644 index 75b5248..0000000 --- a/camp/static/admin/fonts/LICENSE.txt +++ /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 [yyyy] [name of copyright owner] - - 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/camp/static/admin/fonts/README.txt b/camp/static/admin/fonts/README.txt deleted file mode 100644 index cc2135a..0000000 --- a/camp/static/admin/fonts/README.txt +++ /dev/null @@ -1,2 +0,0 @@ -Roboto webfont source: https://www.google.com/fonts/specimen/Roboto -Weights used in this project: Light (300), Regular (400), Bold (700) diff --git a/camp/static/admin/fonts/Roboto-Bold-webfont.woff b/camp/static/admin/fonts/Roboto-Bold-webfont.woff deleted file mode 100644 index 03357ce4f5833006114f2e790a7b89dbf69d4f90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82564 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 U5+{zuf?@lC+j6Kse)s?X0ZPdgP5=M^ diff --git a/camp/static/admin/img/LICENSE b/camp/static/admin/img/LICENSE deleted file mode 100644 index a4faaa1..0000000 --- a/camp/static/admin/img/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Code Charm Ltd - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/camp/static/admin/img/README.txt b/camp/static/admin/img/README.txt deleted file mode 100644 index 43373ad..0000000 --- a/camp/static/admin/img/README.txt +++ /dev/null @@ -1,7 +0,0 @@ -All icons are taken from Font Awesome (http://fontawesome.io/) project. -The Font Awesome font is licensed under the SIL OFL 1.1: -- http://scripts.sil.org/OFL - -SVG icons source: https://github.com/encharm/Font-Awesome-SVG-PNG -Font-Awesome-SVG-PNG is licensed under the MIT license (see file license -in current folder). diff --git a/camp/static/admin/img/calendar-icons.svg b/camp/static/admin/img/calendar-icons.svg deleted file mode 100644 index dbf21c3..0000000 --- a/camp/static/admin/img/calendar-icons.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/camp/static/admin/img/gis/move_vertex_off.svg b/camp/static/admin/img/gis/move_vertex_off.svg deleted file mode 100644 index 228854f..0000000 --- a/camp/static/admin/img/gis/move_vertex_off.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/camp/static/admin/img/gis/move_vertex_on.svg b/camp/static/admin/img/gis/move_vertex_on.svg deleted file mode 100644 index 96b87fd..0000000 --- a/camp/static/admin/img/gis/move_vertex_on.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/camp/static/admin/img/icon-addlink.svg b/camp/static/admin/img/icon-addlink.svg deleted file mode 100644 index e004fb1..0000000 --- a/camp/static/admin/img/icon-addlink.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/camp/static/admin/img/icon-alert.svg b/camp/static/admin/img/icon-alert.svg deleted file mode 100644 index e51ea83..0000000 --- a/camp/static/admin/img/icon-alert.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/camp/static/admin/img/icon-calendar.svg b/camp/static/admin/img/icon-calendar.svg deleted file mode 100644 index 97910a9..0000000 --- a/camp/static/admin/img/icon-calendar.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/camp/static/admin/img/icon-changelink.svg b/camp/static/admin/img/icon-changelink.svg deleted file mode 100644 index bbb137a..0000000 --- a/camp/static/admin/img/icon-changelink.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/camp/static/admin/img/icon-clock.svg b/camp/static/admin/img/icon-clock.svg deleted file mode 100644 index bf9985d..0000000 --- a/camp/static/admin/img/icon-clock.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/camp/static/admin/img/icon-deletelink.svg b/camp/static/admin/img/icon-deletelink.svg deleted file mode 100644 index 4059b15..0000000 --- a/camp/static/admin/img/icon-deletelink.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/camp/static/admin/img/icon-no.svg b/camp/static/admin/img/icon-no.svg deleted file mode 100644 index 2e0d383..0000000 --- a/camp/static/admin/img/icon-no.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/camp/static/admin/img/icon-unknown-alt.svg b/camp/static/admin/img/icon-unknown-alt.svg deleted file mode 100644 index 1c6b99f..0000000 --- a/camp/static/admin/img/icon-unknown-alt.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/camp/static/admin/img/icon-unknown.svg b/camp/static/admin/img/icon-unknown.svg deleted file mode 100644 index 50b4f97..0000000 --- a/camp/static/admin/img/icon-unknown.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/camp/static/admin/img/icon-yes.svg b/camp/static/admin/img/icon-yes.svg deleted file mode 100644 index 5883d87..0000000 --- a/camp/static/admin/img/icon-yes.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/camp/static/admin/img/inline-delete.svg b/camp/static/admin/img/inline-delete.svg deleted file mode 100644 index 17d1ad6..0000000 --- a/camp/static/admin/img/inline-delete.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/camp/static/admin/img/search.svg b/camp/static/admin/img/search.svg deleted file mode 100644 index c8c69b2..0000000 --- a/camp/static/admin/img/search.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/camp/static/admin/img/selector-icons.svg b/camp/static/admin/img/selector-icons.svg deleted file mode 100644 index 926b8e2..0000000 --- a/camp/static/admin/img/selector-icons.svg +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/camp/static/admin/img/sorting-icons.svg b/camp/static/admin/img/sorting-icons.svg deleted file mode 100644 index 7c31ec9..0000000 --- a/camp/static/admin/img/sorting-icons.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/camp/static/admin/img/tooltag-add.svg b/camp/static/admin/img/tooltag-add.svg deleted file mode 100644 index 1ca64ae..0000000 --- a/camp/static/admin/img/tooltag-add.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/camp/static/admin/img/tooltag-arrowright.svg b/camp/static/admin/img/tooltag-arrowright.svg deleted file mode 100644 index b664d61..0000000 --- a/camp/static/admin/img/tooltag-arrowright.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/camp/static/admin/js/SelectBox.js b/camp/static/admin/js/SelectBox.js deleted file mode 100644 index 1a14959..0000000 --- a/camp/static/admin/js/SelectBox.js +++ /dev/null @@ -1,144 +0,0 @@ -(function($) { - 'use strict'; - var SelectBox = { - cache: {}, - init: function(id) { - var box = document.getElementById(id); - var node; - SelectBox.cache[id] = []; - var cache = SelectBox.cache[id]; - var boxOptions = box.options; - var boxOptionsLength = boxOptions.length; - for (var i = 0, j = boxOptionsLength; i < j; i++) { - node = boxOptions[i]; - cache.push({value: node.value, text: node.text, displayed: 1}); - } - }, - redisplay: function(id) { - // Repopulate HTML select box from cache - var box = document.getElementById(id); - var node; - $(box).empty(); // clear all options - var new_options = box.outerHTML.slice(0, -9); // grab just the opening tag - var cache = SelectBox.cache[id]; - for (var i = 0, j = cache.length; i < j; i++) { - node = cache[i]; - if (node.displayed) { - var new_option = new Option(node.text, node.value, false, false); - // Shows a tooltip when hovering over the option - new_option.setAttribute("title", node.text); - new_options += new_option.outerHTML; - } - } - new_options += ''; - box.outerHTML = new_options; - }, - filter: function(id, text) { - // Redisplay the HTML select box, displaying only the choices containing ALL - // the words in text. (It's an AND search.) - var tokens = text.toLowerCase().split(/\s+/); - var node, token; - var cache = SelectBox.cache[id]; - for (var i = 0, j = cache.length; i < j; i++) { - node = cache[i]; - node.displayed = 1; - var node_text = node.text.toLowerCase(); - var numTokens = tokens.length; - for (var k = 0; k < numTokens; k++) { - token = tokens[k]; - if (node_text.indexOf(token) === -1) { - node.displayed = 0; - break; // Once the first token isn't found we're done - } - } - } - SelectBox.redisplay(id); - }, - delete_from_cache: function(id, value) { - var node, delete_index = null; - var cache = SelectBox.cache[id]; - for (var i = 0, j = cache.length; i < j; i++) { - node = cache[i]; - if (node.value === value) { - delete_index = i; - break; - } - } - cache.splice(delete_index, 1); - }, - add_to_cache: function(id, option) { - SelectBox.cache[id].push({value: option.value, text: option.text, displayed: 1}); - }, - cache_contains: function(id, value) { - // Check if an item is contained in the cache - var node; - var cache = SelectBox.cache[id]; - for (var i = 0, j = cache.length; i < j; i++) { - node = cache[i]; - if (node.value === value) { - return true; - } - } - return false; - }, - move: function(from, to) { - var from_box = document.getElementById(from); - var option; - var boxOptions = from_box.options; - var boxOptionsLength = boxOptions.length; - for (var i = 0, j = boxOptionsLength; i < j; i++) { - option = boxOptions[i]; - var option_value = option.value; - if (option.selected && SelectBox.cache_contains(from, option_value)) { - SelectBox.add_to_cache(to, {value: option_value, text: option.text, displayed: 1}); - SelectBox.delete_from_cache(from, option_value); - } - } - SelectBox.redisplay(from); - SelectBox.redisplay(to); - }, - move_all: function(from, to) { - var from_box = document.getElementById(from); - var option; - var boxOptions = from_box.options; - var boxOptionsLength = boxOptions.length; - for (var i = 0, j = boxOptionsLength; i < j; i++) { - option = boxOptions[i]; - var option_value = option.value; - if (SelectBox.cache_contains(from, option_value)) { - SelectBox.add_to_cache(to, {value: option_value, text: option.text, displayed: 1}); - SelectBox.delete_from_cache(from, option_value); - } - } - SelectBox.redisplay(from); - SelectBox.redisplay(to); - }, - sort: function(id) { - SelectBox.cache[id].sort(function(a, b) { - a = a.text.toLowerCase(); - b = b.text.toLowerCase(); - try { - if (a > b) { - return 1; - } - if (a < b) { - return -1; - } - } - catch (e) { - // silently fail on IE 'unknown' exception - } - return 0; - } ); - }, - select_all: function(id) { - var box = document.getElementById(id); - var boxOptions = box.options; - var boxOptionsLength = boxOptions.length; - for (var i = 0; i < boxOptionsLength; i++) { - boxOptions[i].selected = 'selected'; - } - } - }; - window.SelectBox = SelectBox; -})(django.jQuery); diff --git a/camp/static/admin/js/SelectFilter2.js b/camp/static/admin/js/SelectFilter2.js deleted file mode 100644 index 0f9a188..0000000 --- a/camp/static/admin/js/SelectFilter2.js +++ /dev/null @@ -1,236 +0,0 @@ -/*global SelectBox, addEvent, gettext, interpolate, quickElement, SelectFilter*/ -/* -SelectFilter2 - Turns a multiple-select box into a filter interface. - -Requires jQuery, core.js, and SelectBox.js. -*/ -(function($) { - 'use strict'; - function findForm(node) { - // returns the node of the form containing the given node - if (node.tagName.toLowerCase() !== 'form') { - return findForm(node.parentNode); - } - return node; - } - - window.SelectFilter = { - init: function(field_id, field_name, is_stacked) { - if (field_id.match(/__prefix__/)) { - // Don't initialize on empty forms. - return; - } - var from_box = document.getElementById(field_id); - from_box.id += '_from'; // change its ID - from_box.className = 'filtered'; - - var ps = from_box.parentNode.getElementsByTagName('p'); - for (var i = 0; i < ps.length; i++) { - if (ps[i].className.indexOf("info") !== -1) { - // Remove

, because it just gets in the way. - from_box.parentNode.removeChild(ps[i]); - } else if (ps[i].className.indexOf("help") !== -1) { - // Move help text up to the top so it isn't below the select - // boxes or wrapped off on the side to the right of the add - // button: - from_box.parentNode.insertBefore(ps[i], from_box.parentNode.firstChild); - } - } - - //

or
- var selector_div = quickElement('div', from_box.parentNode); - selector_div.className = is_stacked ? 'selector stacked' : 'selector'; - - //
- var selector_available = quickElement('div', selector_div); - selector_available.className = 'selector-available'; - var title_available = quickElement('h2', selector_available, interpolate(gettext('Available %s') + ' ', [field_name])); - quickElement( - 'span', title_available, '', - 'class', 'help help-tooltip help-icon', - 'title', interpolate( - gettext( - 'This is the list of available %s. You may choose some by ' + - 'selecting them in the box below and then clicking the ' + - '"Choose" arrow between the two boxes.' - ), - [field_name] - ) - ); - - var filter_p = quickElement('p', selector_available, '', 'id', field_id + '_filter'); - filter_p.className = 'selector-filter'; - - var search_filter_label = quickElement('label', filter_p, '', 'for', field_id + '_input'); - - quickElement( - 'span', search_filter_label, '', - 'class', 'help-tooltip search-label-icon', - 'title', interpolate(gettext("Type into this box to filter down the list of available %s."), [field_name]) - ); - - filter_p.appendChild(document.createTextNode(' ')); - - var filter_input = quickElement('input', filter_p, '', 'type', 'text', 'placeholder', gettext("Filter")); - filter_input.id = field_id + '_input'; - - selector_available.appendChild(from_box); - var choose_all = quickElement('a', selector_available, gettext('Choose all'), 'title', interpolate(gettext('Click to choose all %s at once.'), [field_name]), 'href', '#', 'id', field_id + '_add_all_link'); - choose_all.className = 'selector-chooseall'; - - //
    - var selector_chooser = quickElement('ul', selector_div); - selector_chooser.className = 'selector-chooser'; - var add_link = quickElement('a', quickElement('li', selector_chooser), gettext('Choose'), 'title', gettext('Choose'), 'href', '#', 'id', field_id + '_add_link'); - add_link.className = 'selector-add'; - var remove_link = quickElement('a', quickElement('li', selector_chooser), gettext('Remove'), 'title', gettext('Remove'), 'href', '#', 'id', field_id + '_remove_link'); - remove_link.className = 'selector-remove'; - - //
    - var selector_chosen = quickElement('div', selector_div); - selector_chosen.className = 'selector-chosen'; - var title_chosen = quickElement('h2', selector_chosen, interpolate(gettext('Chosen %s') + ' ', [field_name])); - quickElement( - 'span', title_chosen, '', - 'class', 'help help-tooltip help-icon', - 'title', interpolate( - gettext( - 'This is the list of chosen %s. You may remove some by ' + - 'selecting them in the box below and then clicking the ' + - '"Remove" arrow between the two boxes.' - ), - [field_name] - ) - ); - - var to_box = quickElement('select', selector_chosen, '', 'id', field_id + '_to', 'multiple', 'multiple', 'size', from_box.size, 'name', from_box.getAttribute('name')); - to_box.className = 'filtered'; - var clear_all = quickElement('a', selector_chosen, gettext('Remove all'), 'title', interpolate(gettext('Click to remove all chosen %s at once.'), [field_name]), 'href', '#', 'id', field_id + '_remove_all_link'); - clear_all.className = 'selector-clearall'; - - from_box.setAttribute('name', from_box.getAttribute('name') + '_old'); - - // Set up the JavaScript event handlers for the select box filter interface - var move_selection = function(e, elem, move_func, from, to) { - if (elem.className.indexOf('active') !== -1) { - move_func(from, to); - SelectFilter.refresh_icons(field_id); - } - e.preventDefault(); - }; - addEvent(choose_all, 'click', function(e) { move_selection(e, this, SelectBox.move_all, field_id + '_from', field_id + '_to'); }); - addEvent(add_link, 'click', function(e) { move_selection(e, this, SelectBox.move, field_id + '_from', field_id + '_to'); }); - addEvent(remove_link, 'click', function(e) { move_selection(e, this, SelectBox.move, field_id + '_to', field_id + '_from'); }); - addEvent(clear_all, 'click', function(e) { move_selection(e, this, SelectBox.move_all, field_id + '_to', field_id + '_from'); }); - addEvent(filter_input, 'keypress', function(e) { SelectFilter.filter_key_press(e, field_id); }); - addEvent(filter_input, 'keyup', function(e) { SelectFilter.filter_key_up(e, field_id); }); - addEvent(filter_input, 'keydown', function(e) { SelectFilter.filter_key_down(e, field_id); }); - addEvent(selector_div, 'change', function(e) { - if (e.target.tagName === 'SELECT') { - SelectFilter.refresh_icons(field_id); - } - }); - addEvent(selector_div, 'dblclick', function(e) { - if (e.target.tagName === 'OPTION') { - if (e.target.closest('select').id === field_id + '_to') { - SelectBox.move(field_id + '_to', field_id + '_from'); - } else { - SelectBox.move(field_id + '_from', field_id + '_to'); - } - SelectFilter.refresh_icons(field_id); - } - }); - addEvent(findForm(from_box), 'submit', function() { SelectBox.select_all(field_id + '_to'); }); - SelectBox.init(field_id + '_from'); - SelectBox.init(field_id + '_to'); - // Move selected from_box options to to_box - SelectBox.move(field_id + '_from', field_id + '_to'); - - if (!is_stacked) { - // In horizontal mode, give the same height to the two boxes. - var j_from_box = $(from_box); - var j_to_box = $(to_box); - var resize_filters = function() { j_to_box.height($(filter_p).outerHeight() + j_from_box.outerHeight()); }; - if (j_from_box.outerHeight() > 0) { - resize_filters(); // This fieldset is already open. Resize now. - } else { - // This fieldset is probably collapsed. Wait for its 'show' event. - j_to_box.closest('fieldset').one('show.fieldset', resize_filters); - } - } - - // Initial icon refresh - SelectFilter.refresh_icons(field_id); - }, - any_selected: function(field) { - var any_selected = false; - try { - // Temporarily add the required attribute and check validity. - // This is much faster in WebKit browsers than the fallback. - field.attr('required', 'required'); - any_selected = field.is(':valid'); - field.removeAttr('required'); - } catch (e) { - // Browsers that don't support :valid (IE < 10) - any_selected = field.find('option:selected').length > 0; - } - return any_selected; - }, - refresh_icons: function(field_id) { - var from = $('#' + field_id + '_from'); - var to = $('#' + field_id + '_to'); - // Active if at least one item is selected - $('#' + field_id + '_add_link').toggleClass('active', SelectFilter.any_selected(from)); - $('#' + field_id + '_remove_link').toggleClass('active', SelectFilter.any_selected(to)); - // Active if the corresponding box isn't empty - $('#' + field_id + '_add_all_link').toggleClass('active', from.find('option').length > 0); - $('#' + field_id + '_remove_all_link').toggleClass('active', to.find('option').length > 0); - }, - filter_key_press: function(event, field_id) { - var from = document.getElementById(field_id + '_from'); - // don't submit form if user pressed Enter - if ((event.which && event.which === 13) || (event.keyCode && event.keyCode === 13)) { - from.selectedIndex = 0; - SelectBox.move(field_id + '_from', field_id + '_to'); - from.selectedIndex = 0; - event.preventDefault(); - return false; - } - }, - filter_key_up: function(event, field_id) { - var from = document.getElementById(field_id + '_from'); - var temp = from.selectedIndex; - SelectBox.filter(field_id + '_from', document.getElementById(field_id + '_input').value); - from.selectedIndex = temp; - return true; - }, - filter_key_down: function(event, field_id) { - var from = document.getElementById(field_id + '_from'); - // right arrow -- move across - if ((event.which && event.which === 39) || (event.keyCode && event.keyCode === 39)) { - var old_index = from.selectedIndex; - SelectBox.move(field_id + '_from', field_id + '_to'); - from.selectedIndex = (old_index === from.length) ? from.length - 1 : old_index; - return false; - } - // down arrow -- wrap around - if ((event.which && event.which === 40) || (event.keyCode && event.keyCode === 40)) { - from.selectedIndex = (from.length === from.selectedIndex + 1) ? 0 : from.selectedIndex + 1; - } - // up arrow -- wrap around - if ((event.which && event.which === 38) || (event.keyCode && event.keyCode === 38)) { - from.selectedIndex = (from.selectedIndex === 0) ? from.length - 1 : from.selectedIndex - 1; - } - return true; - } - }; - - addEvent(window, 'load', function(e) { - $('select.selectfilter, select.selectfilterstacked').each(function() { - var $el = $(this), - data = $el.data(); - SelectFilter.init($el.attr('id'), data.fieldName, parseInt(data.isStacked, 10)); - }); - }); - -})(django.jQuery); diff --git a/camp/static/admin/js/actions.js b/camp/static/admin/js/actions.js deleted file mode 100644 index 7041701..0000000 --- a/camp/static/admin/js/actions.js +++ /dev/null @@ -1,153 +0,0 @@ -/*global gettext, interpolate, ngettext*/ -(function($) { - 'use strict'; - var lastChecked; - - $.fn.actions = function(opts) { - var options = $.extend({}, $.fn.actions.defaults, opts); - var actionCheckboxes = $(this); - var list_editable_changed = false; - var showQuestion = function() { - $(options.acrossClears).hide(); - $(options.acrossQuestions).show(); - $(options.allContainer).hide(); - }, - showClear = function() { - $(options.acrossClears).show(); - $(options.acrossQuestions).hide(); - $(options.actionContainer).toggleClass(options.selectedClass); - $(options.allContainer).show(); - $(options.counterContainer).hide(); - }, - reset = function() { - $(options.acrossClears).hide(); - $(options.acrossQuestions).hide(); - $(options.allContainer).hide(); - $(options.counterContainer).show(); - }, - clearAcross = function() { - reset(); - $(options.acrossInput).val(0); - $(options.actionContainer).removeClass(options.selectedClass); - }, - checker = function(checked) { - if (checked) { - showQuestion(); - } else { - reset(); - } - $(actionCheckboxes).prop("checked", checked) - .parent().parent().toggleClass(options.selectedClass, checked); - }, - updateCounter = function() { - var sel = $(actionCheckboxes).filter(":checked").length; - // data-actions-icnt is defined in the generated HTML - // and contains the total amount of objects in the queryset - var actions_icnt = $('.action-counter').data('actionsIcnt'); - $(options.counterContainer).html(interpolate( - ngettext('%(sel)s of %(cnt)s selected', '%(sel)s of %(cnt)s selected', sel), { - sel: sel, - cnt: actions_icnt - }, true)); - $(options.allToggle).prop("checked", function() { - var value; - if (sel === actionCheckboxes.length) { - value = true; - showQuestion(); - } else { - value = false; - clearAcross(); - } - return value; - }); - }; - // Show counter by default - $(options.counterContainer).show(); - // Check state of checkboxes and reinit state if needed - $(this).filter(":checked").each(function(i) { - $(this).parent().parent().toggleClass(options.selectedClass); - updateCounter(); - if ($(options.acrossInput).val() === 1) { - showClear(); - } - }); - $(options.allToggle).show().click(function() { - checker($(this).prop("checked")); - updateCounter(); - }); - $("a", options.acrossQuestions).click(function(event) { - event.preventDefault(); - $(options.acrossInput).val(1); - showClear(); - }); - $("a", options.acrossClears).click(function(event) { - event.preventDefault(); - $(options.allToggle).prop("checked", false); - clearAcross(); - checker(0); - updateCounter(); - }); - lastChecked = null; - $(actionCheckboxes).click(function(event) { - if (!event) { event = window.event; } - var target = event.target ? event.target : event.srcElement; - if (lastChecked && $.data(lastChecked) !== $.data(target) && event.shiftKey === true) { - var inrange = false; - $(lastChecked).prop("checked", target.checked) - .parent().parent().toggleClass(options.selectedClass, target.checked); - $(actionCheckboxes).each(function() { - if ($.data(this) === $.data(lastChecked) || $.data(this) === $.data(target)) { - inrange = (inrange) ? false : true; - } - if (inrange) { - $(this).prop("checked", target.checked) - .parent().parent().toggleClass(options.selectedClass, target.checked); - } - }); - } - $(target).parent().parent().toggleClass(options.selectedClass, target.checked); - lastChecked = target; - updateCounter(); - }); - $('form#changelist-form table#result_list tr').find('td:gt(0) :input').change(function() { - list_editable_changed = true; - }); - $('form#changelist-form button[name="index"]').click(function(event) { - if (list_editable_changed) { - return confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost.")); - } - }); - $('form#changelist-form input[name="_save"]').click(function(event) { - var action_changed = false; - $('select option:selected', options.actionContainer).each(function() { - if ($(this).val()) { - action_changed = true; - } - }); - if (action_changed) { - if (list_editable_changed) { - return confirm(gettext("You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action.")); - } else { - return confirm(gettext("You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button.")); - } - } - }); - }; - /* Setup plugin defaults */ - $.fn.actions.defaults = { - actionContainer: "div.actions", - counterContainer: "span.action-counter", - allContainer: "div.actions span.all", - acrossInput: "div.actions input.select-across", - acrossQuestions: "div.actions span.question", - acrossClears: "div.actions span.clear", - allToggle: "#action-toggle", - selectedClass: "selected" - }; - $(document).ready(function() { - var $actionsEls = $('tr input.action-select'); - if ($actionsEls.length > 0) { - $actionsEls.actions(); - } - }); -})(django.jQuery); diff --git a/camp/static/admin/js/actions.min.js b/camp/static/admin/js/actions.min.js deleted file mode 100644 index c83b06a..0000000 --- a/camp/static/admin/js/actions.min.js +++ /dev/null @@ -1,6 +0,0 @@ -(function(a){var f;a.fn.actions=function(e){var b=a.extend({},a.fn.actions.defaults,e),g=a(this),k=!1,l=function(){a(b.acrossClears).hide();a(b.acrossQuestions).show();a(b.allContainer).hide()},m=function(){a(b.acrossClears).show();a(b.acrossQuestions).hide();a(b.actionContainer).toggleClass(b.selectedClass);a(b.allContainer).show();a(b.counterContainer).hide()},n=function(){a(b.acrossClears).hide();a(b.acrossQuestions).hide();a(b.allContainer).hide();a(b.counterContainer).show()},p=function(){n(); -a(b.acrossInput).val(0);a(b.actionContainer).removeClass(b.selectedClass)},q=function(c){c?l():n();a(g).prop("checked",c).parent().parent().toggleClass(b.selectedClass,c)},h=function(){var c=a(g).filter(":checked").length,d=a(".action-counter").data("actionsIcnt");a(b.counterContainer).html(interpolate(ngettext("%(sel)s of %(cnt)s selected","%(sel)s of %(cnt)s selected",c),{sel:c,cnt:d},!0));a(b.allToggle).prop("checked",function(){var a;c===g.length?(a=!0,l()):(a=!1,p());return a})};a(b.counterContainer).show(); -a(this).filter(":checked").each(function(c){a(this).parent().parent().toggleClass(b.selectedClass);h();1===a(b.acrossInput).val()&&m()});a(b.allToggle).show().click(function(){q(a(this).prop("checked"));h()});a("a",b.acrossQuestions).click(function(c){c.preventDefault();a(b.acrossInput).val(1);m()});a("a",b.acrossClears).click(function(c){c.preventDefault();a(b.allToggle).prop("checked",!1);p();q(0);h()});f=null;a(g).click(function(c){c||(c=window.event);var d=c.target?c.target:c.srcElement;if(f&& -a.data(f)!==a.data(d)&&!0===c.shiftKey){var e=!1;a(f).prop("checked",d.checked).parent().parent().toggleClass(b.selectedClass,d.checked);a(g).each(function(){if(a.data(this)===a.data(f)||a.data(this)===a.data(d))e=e?!1:!0;e&&a(this).prop("checked",d.checked).parent().parent().toggleClass(b.selectedClass,d.checked)})}a(d).parent().parent().toggleClass(b.selectedClass,d.checked);f=d;h()});a("form#changelist-form table#result_list tr").find("td:gt(0) :input").change(function(){k=!0});a('form#changelist-form button[name="index"]').click(function(a){if(k)return confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost."))}); -a('form#changelist-form input[name="_save"]').click(function(c){var d=!1;a("select option:selected",b.actionContainer).each(function(){a(this).val()&&(d=!0)});if(d)return k?confirm(gettext("You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action.")):confirm(gettext("You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button."))})}; -a.fn.actions.defaults={actionContainer:"div.actions",counterContainer:"span.action-counter",allContainer:"div.actions span.all",acrossInput:"div.actions input.select-across",acrossQuestions:"div.actions span.question",acrossClears:"div.actions span.clear",allToggle:"#action-toggle",selectedClass:"selected"};a(document).ready(function(){var e=a("tr input.action-select");0 -// -(function() { - 'use strict'; - var DateTimeShortcuts = { - calendars: [], - calendarInputs: [], - clockInputs: [], - dismissClockFunc: [], - dismissCalendarFunc: [], - calendarDivName1: 'calendarbox', // name of calendar
    that gets toggled - calendarDivName2: 'calendarin', // name of
    that contains calendar - calendarLinkName: 'calendarlink',// name of the link that is used to toggle - clockDivName: 'clockbox', // name of clock
    that gets toggled - clockLinkName: 'clocklink', // name of the link that is used to toggle - shortCutsClass: 'datetimeshortcuts', // class of the clock and cal shortcuts - timezoneWarningClass: 'timezonewarning', // class of the warning for timezone mismatch - timezoneOffset: 0, - init: function() { - var body = document.getElementsByTagName('body')[0]; - var serverOffset = body.getAttribute('data-admin-utc-offset'); - if (serverOffset) { - var localOffset = new Date().getTimezoneOffset() * -60; - DateTimeShortcuts.timezoneOffset = localOffset - serverOffset; - } - - var inputs = document.getElementsByTagName('input'); - for (var i = 0; i < inputs.length; i++) { - var inp = inputs[i]; - if (inp.getAttribute('type') === 'text' && inp.className.match(/vTimeField/)) { - DateTimeShortcuts.addClock(inp); - DateTimeShortcuts.addTimezoneWarning(inp); - } - else if (inp.getAttribute('type') === 'text' && inp.className.match(/vDateField/)) { - DateTimeShortcuts.addCalendar(inp); - DateTimeShortcuts.addTimezoneWarning(inp); - } - } - }, - // Return the current time while accounting for the server timezone. - now: function() { - var body = document.getElementsByTagName('body')[0]; - var serverOffset = body.getAttribute('data-admin-utc-offset'); - if (serverOffset) { - var localNow = new Date(); - var localOffset = localNow.getTimezoneOffset() * -60; - localNow.setTime(localNow.getTime() + 1000 * (serverOffset - localOffset)); - return localNow; - } else { - return new Date(); - } - }, - // Add a warning when the time zone in the browser and backend do not match. - addTimezoneWarning: function(inp) { - var $ = django.jQuery; - var warningClass = DateTimeShortcuts.timezoneWarningClass; - var timezoneOffset = DateTimeShortcuts.timezoneOffset / 3600; - - // Only warn if there is a time zone mismatch. - if (!timezoneOffset) { - return; - } - - // Check if warning is already there. - if ($(inp).siblings('.' + warningClass).length) { - return; - } - - var message; - if (timezoneOffset > 0) { - message = ngettext( - 'Note: You are %s hour ahead of server time.', - 'Note: You are %s hours ahead of server time.', - timezoneOffset - ); - } - else { - timezoneOffset *= -1; - message = ngettext( - 'Note: You are %s hour behind server time.', - 'Note: You are %s hours behind server time.', - timezoneOffset - ); - } - message = interpolate(message, [timezoneOffset]); - - var $warning = $(''); - $warning.attr('class', warningClass); - $warning.text(message); - - $(inp).parent() - .append($('
    ')) - .append($warning); - }, - // Add clock widget to a given field - addClock: function(inp) { - var num = DateTimeShortcuts.clockInputs.length; - DateTimeShortcuts.clockInputs[num] = inp; - DateTimeShortcuts.dismissClockFunc[num] = function() { DateTimeShortcuts.dismissClock(num); return true; }; - - // Shortcut links (clock icon and "Now" link) - var shortcuts_span = document.createElement('span'); - shortcuts_span.className = DateTimeShortcuts.shortCutsClass; - inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling); - var now_link = document.createElement('a'); - now_link.setAttribute('href', "#"); - now_link.appendChild(document.createTextNode(gettext('Now'))); - addEvent(now_link, 'click', function(e) { - e.preventDefault(); - DateTimeShortcuts.handleClockQuicklink(num, -1); - }); - var clock_link = document.createElement('a'); - clock_link.setAttribute('href', '#'); - clock_link.id = DateTimeShortcuts.clockLinkName + num; - addEvent(clock_link, 'click', function(e) { - e.preventDefault(); - // avoid triggering the document click handler to dismiss the clock - e.stopPropagation(); - DateTimeShortcuts.openClock(num); - }); - - quickElement( - 'span', clock_link, '', - 'class', 'clock-icon', - 'title', gettext('Choose a Time') - ); - shortcuts_span.appendChild(document.createTextNode('\u00A0')); - shortcuts_span.appendChild(now_link); - shortcuts_span.appendChild(document.createTextNode('\u00A0|\u00A0')); - shortcuts_span.appendChild(clock_link); - - // Create clock link div - // - // Markup looks like: - //
    - - var clock_box = document.createElement('div'); - clock_box.style.display = 'none'; - clock_box.style.position = 'absolute'; - clock_box.className = 'clockbox module'; - clock_box.setAttribute('id', DateTimeShortcuts.clockDivName + num); - document.body.appendChild(clock_box); - addEvent(clock_box, 'click', cancelEventPropagation); - - quickElement('h2', clock_box, gettext('Choose a time')); - var time_list = quickElement('ul', clock_box); - time_list.className = 'timelist'; - var time_link = quickElement("a", quickElement("li", time_list), gettext("Now"), "href", "#"); - addEvent(time_link, 'click', function(e) { - e.preventDefault(); - DateTimeShortcuts.handleClockQuicklink(num, -1); - }); - time_link = quickElement("a", quickElement("li", time_list), gettext("Midnight"), "href", "#"); - addEvent(time_link, 'click', function(e) { - e.preventDefault(); - DateTimeShortcuts.handleClockQuicklink(num, 0); - }); - time_link = quickElement("a", quickElement("li", time_list), gettext("6 a.m."), "href", "#"); - addEvent(time_link, 'click', function(e) { - e.preventDefault(); - DateTimeShortcuts.handleClockQuicklink(num, 6); - }); - time_link = quickElement("a", quickElement("li", time_list), gettext("Noon"), "href", "#"); - addEvent(time_link, 'click', function(e) { - e.preventDefault(); - DateTimeShortcuts.handleClockQuicklink(num, 12); - }); - time_link = quickElement("a", quickElement("li", time_list), gettext("6 p.m."), "href", "#"); - addEvent(time_link, 'click', function(e) { - e.preventDefault(); - DateTimeShortcuts.handleClockQuicklink(num, 18); - }); - - var cancel_p = quickElement('p', clock_box); - cancel_p.className = 'calendar-cancel'; - var cancel_link = quickElement('a', cancel_p, gettext('Cancel'), 'href', '#'); - addEvent(cancel_link, 'click', function(e) { - e.preventDefault(); - DateTimeShortcuts.dismissClock(num); - }); - - django.jQuery(document).bind('keyup', function(event) { - if (event.which === 27) { - // ESC key closes popup - DateTimeShortcuts.dismissClock(num); - event.preventDefault(); - } - }); - }, - openClock: function(num) { - var clock_box = document.getElementById(DateTimeShortcuts.clockDivName + num); - var clock_link = document.getElementById(DateTimeShortcuts.clockLinkName + num); - - // Recalculate the clockbox position - // is it left-to-right or right-to-left layout ? - if (getStyle(document.body, 'direction') !== 'rtl') { - clock_box.style.left = findPosX(clock_link) + 17 + 'px'; - } - else { - // since style's width is in em, it'd be tough to calculate - // px value of it. let's use an estimated px for now - // TODO: IE returns wrong value for findPosX when in rtl mode - // (it returns as it was left aligned), needs to be fixed. - clock_box.style.left = findPosX(clock_link) - 110 + 'px'; - } - clock_box.style.top = Math.max(0, findPosY(clock_link) - 30) + 'px'; - - // Show the clock box - clock_box.style.display = 'block'; - addEvent(document, 'click', DateTimeShortcuts.dismissClockFunc[num]); - }, - dismissClock: function(num) { - document.getElementById(DateTimeShortcuts.clockDivName + num).style.display = 'none'; - removeEvent(document, 'click', DateTimeShortcuts.dismissClockFunc[num]); - }, - handleClockQuicklink: function(num, val) { - var d; - if (val === -1) { - d = DateTimeShortcuts.now(); - } - else { - d = new Date(1970, 1, 1, val, 0, 0, 0); - } - DateTimeShortcuts.clockInputs[num].value = d.strftime(get_format('TIME_INPUT_FORMATS')[0]); - DateTimeShortcuts.clockInputs[num].focus(); - DateTimeShortcuts.dismissClock(num); - }, - // Add calendar widget to a given field. - addCalendar: function(inp) { - var num = DateTimeShortcuts.calendars.length; - - DateTimeShortcuts.calendarInputs[num] = inp; - DateTimeShortcuts.dismissCalendarFunc[num] = function() { DateTimeShortcuts.dismissCalendar(num); return true; }; - - // Shortcut links (calendar icon and "Today" link) - var shortcuts_span = document.createElement('span'); - shortcuts_span.className = DateTimeShortcuts.shortCutsClass; - inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling); - var today_link = document.createElement('a'); - today_link.setAttribute('href', '#'); - today_link.appendChild(document.createTextNode(gettext('Today'))); - addEvent(today_link, 'click', function(e) { - e.preventDefault(); - DateTimeShortcuts.handleCalendarQuickLink(num, 0); - }); - var cal_link = document.createElement('a'); - cal_link.setAttribute('href', '#'); - cal_link.id = DateTimeShortcuts.calendarLinkName + num; - addEvent(cal_link, 'click', function(e) { - e.preventDefault(); - // avoid triggering the document click handler to dismiss the calendar - e.stopPropagation(); - DateTimeShortcuts.openCalendar(num); - }); - quickElement( - 'span', cal_link, '', - 'class', 'date-icon', - 'title', gettext('Choose a Date') - ); - shortcuts_span.appendChild(document.createTextNode('\u00A0')); - shortcuts_span.appendChild(today_link); - shortcuts_span.appendChild(document.createTextNode('\u00A0|\u00A0')); - shortcuts_span.appendChild(cal_link); - - // Create calendarbox div. - // - // Markup looks like: - // - //
    - //

    - // - // February 2003 - //

    - //
    - // - //
    - //
    - // Yesterday | Today | Tomorrow - //
    - //

    Cancel

    - //
    - var cal_box = document.createElement('div'); - cal_box.style.display = 'none'; - cal_box.style.position = 'absolute'; - cal_box.className = 'calendarbox module'; - cal_box.setAttribute('id', DateTimeShortcuts.calendarDivName1 + num); - document.body.appendChild(cal_box); - addEvent(cal_box, 'click', cancelEventPropagation); - - // next-prev links - var cal_nav = quickElement('div', cal_box); - var cal_nav_prev = quickElement('a', cal_nav, '<', 'href', '#'); - cal_nav_prev.className = 'calendarnav-previous'; - addEvent(cal_nav_prev, 'click', function(e) { - e.preventDefault(); - DateTimeShortcuts.drawPrev(num); - }); - - var cal_nav_next = quickElement('a', cal_nav, '>', 'href', '#'); - cal_nav_next.className = 'calendarnav-next'; - addEvent(cal_nav_next, 'click', function(e) { - e.preventDefault(); - DateTimeShortcuts.drawNext(num); - }); - - // main box - var cal_main = quickElement('div', cal_box, '', 'id', DateTimeShortcuts.calendarDivName2 + num); - cal_main.className = 'calendar'; - DateTimeShortcuts.calendars[num] = new Calendar(DateTimeShortcuts.calendarDivName2 + num, DateTimeShortcuts.handleCalendarCallback(num)); - DateTimeShortcuts.calendars[num].drawCurrent(); - - // calendar shortcuts - var shortcuts = quickElement('div', cal_box); - shortcuts.className = 'calendar-shortcuts'; - var day_link = quickElement('a', shortcuts, gettext('Yesterday'), 'href', '#'); - addEvent(day_link, 'click', function(e) { - e.preventDefault(); - DateTimeShortcuts.handleCalendarQuickLink(num, -1); - }); - shortcuts.appendChild(document.createTextNode('\u00A0|\u00A0')); - day_link = quickElement('a', shortcuts, gettext('Today'), 'href', '#'); - addEvent(day_link, 'click', function(e) { - e.preventDefault(); - DateTimeShortcuts.handleCalendarQuickLink(num, 0); - }); - shortcuts.appendChild(document.createTextNode('\u00A0|\u00A0')); - day_link = quickElement('a', shortcuts, gettext('Tomorrow'), 'href', '#'); - addEvent(day_link, 'click', function(e) { - e.preventDefault(); - DateTimeShortcuts.handleCalendarQuickLink(num, +1); - }); - - // cancel bar - var cancel_p = quickElement('p', cal_box); - cancel_p.className = 'calendar-cancel'; - var cancel_link = quickElement('a', cancel_p, gettext('Cancel'), 'href', '#'); - addEvent(cancel_link, 'click', function(e) { - e.preventDefault(); - DateTimeShortcuts.dismissCalendar(num); - }); - django.jQuery(document).bind('keyup', function(event) { - if (event.which === 27) { - // ESC key closes popup - DateTimeShortcuts.dismissCalendar(num); - event.preventDefault(); - } - }); - }, - openCalendar: function(num) { - var cal_box = document.getElementById(DateTimeShortcuts.calendarDivName1 + num); - var cal_link = document.getElementById(DateTimeShortcuts.calendarLinkName + num); - var inp = DateTimeShortcuts.calendarInputs[num]; - - // Determine if the current value in the input has a valid date. - // If so, draw the calendar with that date's year and month. - if (inp.value) { - var format = get_format('DATE_INPUT_FORMATS')[0]; - var selected = inp.value.strptime(format); - var year = selected.getUTCFullYear(); - var month = selected.getUTCMonth() + 1; - var re = /\d{4}/; - if (re.test(year.toString()) && month >= 1 && month <= 12) { - DateTimeShortcuts.calendars[num].drawDate(month, year, selected); - } - } - - // Recalculate the clockbox position - // is it left-to-right or right-to-left layout ? - if (getStyle(document.body, 'direction') !== 'rtl') { - cal_box.style.left = findPosX(cal_link) + 17 + 'px'; - } - else { - // since style's width is in em, it'd be tough to calculate - // px value of it. let's use an estimated px for now - // TODO: IE returns wrong value for findPosX when in rtl mode - // (it returns as it was left aligned), needs to be fixed. - cal_box.style.left = findPosX(cal_link) - 180 + 'px'; - } - cal_box.style.top = Math.max(0, findPosY(cal_link) - 75) + 'px'; - - cal_box.style.display = 'block'; - addEvent(document, 'click', DateTimeShortcuts.dismissCalendarFunc[num]); - }, - dismissCalendar: function(num) { - document.getElementById(DateTimeShortcuts.calendarDivName1 + num).style.display = 'none'; - removeEvent(document, 'click', DateTimeShortcuts.dismissCalendarFunc[num]); - }, - drawPrev: function(num) { - DateTimeShortcuts.calendars[num].drawPreviousMonth(); - }, - drawNext: function(num) { - DateTimeShortcuts.calendars[num].drawNextMonth(); - }, - handleCalendarCallback: function(num) { - var format = get_format('DATE_INPUT_FORMATS')[0]; - // the format needs to be escaped a little - format = format.replace('\\', '\\\\'); - format = format.replace('\r', '\\r'); - format = format.replace('\n', '\\n'); - format = format.replace('\t', '\\t'); - format = format.replace("'", "\\'"); - return function(y, m, d) { - DateTimeShortcuts.calendarInputs[num].value = new Date(y, m - 1, d).strftime(format); - DateTimeShortcuts.calendarInputs[num].focus(); - document.getElementById(DateTimeShortcuts.calendarDivName1 + num).style.display = 'none'; - }; - }, - handleCalendarQuickLink: function(num, offset) { - var d = DateTimeShortcuts.now(); - d.setDate(d.getDate() + offset); - DateTimeShortcuts.calendarInputs[num].value = d.strftime(get_format('DATE_INPUT_FORMATS')[0]); - DateTimeShortcuts.calendarInputs[num].focus(); - DateTimeShortcuts.dismissCalendar(num); - } - }; - - addEvent(window, 'load', DateTimeShortcuts.init); - window.DateTimeShortcuts = DateTimeShortcuts; -})(); diff --git a/camp/static/admin/js/admin/RelatedObjectLookups.js b/camp/static/admin/js/admin/RelatedObjectLookups.js deleted file mode 100644 index 3fb1e52..0000000 --- a/camp/static/admin/js/admin/RelatedObjectLookups.js +++ /dev/null @@ -1,175 +0,0 @@ -/*global SelectBox, interpolate*/ -// Handles related-objects functionality: lookup link for raw_id_fields -// and Add Another links. - -(function($) { - 'use strict'; - - // IE doesn't accept periods or dashes in the window name, but the element IDs - // we use to generate popup window names may contain them, therefore we map them - // to allowed characters in a reversible way so that we can locate the correct - // element when the popup window is dismissed. - function id_to_windowname(text) { - text = text.replace(/\./g, '__dot__'); - text = text.replace(/\-/g, '__dash__'); - return text; - } - - function windowname_to_id(text) { - text = text.replace(/__dot__/g, '.'); - text = text.replace(/__dash__/g, '-'); - return text; - } - - function showAdminPopup(triggeringLink, name_regexp, add_popup) { - var name = triggeringLink.id.replace(name_regexp, ''); - name = id_to_windowname(name); - var href = triggeringLink.href; - if (add_popup) { - if (href.indexOf('?') === -1) { - href += '?_popup=1'; - } else { - href += '&_popup=1'; - } - } - var win = window.open(href, name, 'height=500,width=800,resizable=yes,scrollbars=yes'); - win.focus(); - return false; - } - - function showRelatedObjectLookupPopup(triggeringLink) { - return showAdminPopup(triggeringLink, /^lookup_/, true); - } - - function dismissRelatedLookupPopup(win, chosenId) { - var name = windowname_to_id(win.name); - var elem = document.getElementById(name); - if (elem.className.indexOf('vManyToManyRawIdAdminField') !== -1 && elem.value) { - elem.value += ',' + chosenId; - } else { - document.getElementById(name).value = chosenId; - } - win.close(); - } - - function showRelatedObjectPopup(triggeringLink) { - return showAdminPopup(triggeringLink, /^(change|add|delete)_/, false); - } - - function updateRelatedObjectLinks(triggeringLink) { - var $this = $(triggeringLink); - var siblings = $this.nextAll('.change-related, .delete-related'); - if (!siblings.length) { - return; - } - var value = $this.val(); - if (value) { - siblings.each(function() { - var elm = $(this); - elm.attr('href', elm.attr('data-href-template').replace('__fk__', value)); - }); - } else { - siblings.removeAttr('href'); - } - } - - function dismissAddRelatedObjectPopup(win, newId, newRepr) { - var name = windowname_to_id(win.name); - var elem = document.getElementById(name); - if (elem) { - var elemName = elem.nodeName.toUpperCase(); - if (elemName === 'SELECT') { - elem.options[elem.options.length] = new Option(newRepr, newId, true, true); - } else if (elemName === 'INPUT') { - if (elem.className.indexOf('vManyToManyRawIdAdminField') !== -1 && elem.value) { - elem.value += ',' + newId; - } else { - elem.value = newId; - } - } - // Trigger a change event to update related links if required. - $(elem).trigger('change'); - } else { - var toId = name + "_to"; - var o = new Option(newRepr, newId); - SelectBox.add_to_cache(toId, o); - SelectBox.redisplay(toId); - } - win.close(); - } - - function dismissChangeRelatedObjectPopup(win, objId, newRepr, newId) { - var id = windowname_to_id(win.name).replace(/^edit_/, ''); - var selectsSelector = interpolate('#%s, #%s_from, #%s_to', [id, id, id]); - var selects = $(selectsSelector); - selects.find('option').each(function() { - if (this.value === objId) { - this.textContent = newRepr; - this.value = newId; - } - }); - win.close(); - } - - function dismissDeleteRelatedObjectPopup(win, objId) { - var id = windowname_to_id(win.name).replace(/^delete_/, ''); - var selectsSelector = interpolate('#%s, #%s_from, #%s_to', [id, id, id]); - var selects = $(selectsSelector); - selects.find('option').each(function() { - if (this.value === objId) { - $(this).remove(); - } - }).trigger('change'); - win.close(); - } - - // Global for testing purposes - window.id_to_windowname = id_to_windowname; - window.windowname_to_id = windowname_to_id; - - window.showRelatedObjectLookupPopup = showRelatedObjectLookupPopup; - window.dismissRelatedLookupPopup = dismissRelatedLookupPopup; - window.showRelatedObjectPopup = showRelatedObjectPopup; - window.updateRelatedObjectLinks = updateRelatedObjectLinks; - window.dismissAddRelatedObjectPopup = dismissAddRelatedObjectPopup; - window.dismissChangeRelatedObjectPopup = dismissChangeRelatedObjectPopup; - window.dismissDeleteRelatedObjectPopup = dismissDeleteRelatedObjectPopup; - - // Kept for backward compatibility - window.showAddAnotherPopup = showRelatedObjectPopup; - window.dismissAddAnotherPopup = dismissAddRelatedObjectPopup; - - $(document).ready(function() { - $("a[data-popup-opener]").click(function(event) { - event.preventDefault(); - opener.dismissRelatedLookupPopup(window, $(this).data("popup-opener")); - }); - $('body').on('click', '.related-widget-wrapper-link', function(e) { - e.preventDefault(); - if (this.href) { - var event = $.Event('django:show-related', {href: this.href}); - $(this).trigger(event); - if (!event.isDefaultPrevented()) { - showRelatedObjectPopup(this); - } - } - }); - $('body').on('change', '.related-widget-wrapper select', function(e) { - var event = $.Event('django:update-related'); - $(this).trigger(event); - if (!event.isDefaultPrevented()) { - updateRelatedObjectLinks(this); - } - }); - $('.related-widget-wrapper select').trigger('change'); - $('body').on('click', '.related-lookup', function(e) { - e.preventDefault(); - var event = $.Event('django:lookup-related'); - $(this).trigger(event); - if (!event.isDefaultPrevented()) { - showRelatedObjectLookupPopup(this); - } - }); - }); - -})(django.jQuery); diff --git a/camp/static/admin/js/calendar.js b/camp/static/admin/js/calendar.js deleted file mode 100644 index 5765560..0000000 --- a/camp/static/admin/js/calendar.js +++ /dev/null @@ -1,208 +0,0 @@ -/*global gettext, pgettext, get_format, quickElement, removeChildren, addEvent*/ -/* -calendar.js - Calendar functions by Adrian Holovaty -depends on core.js for utility functions like removeChildren or quickElement -*/ - -(function() { - 'use strict'; - // CalendarNamespace -- Provides a collection of HTML calendar-related helper functions - var CalendarNamespace = { - monthsOfYear: [ - gettext('January'), - gettext('February'), - gettext('March'), - gettext('April'), - gettext('May'), - gettext('June'), - gettext('July'), - gettext('August'), - gettext('September'), - gettext('October'), - gettext('November'), - gettext('December') - ], - daysOfWeek: [ - pgettext('one letter Sunday', 'S'), - pgettext('one letter Monday', 'M'), - pgettext('one letter Tuesday', 'T'), - pgettext('one letter Wednesday', 'W'), - pgettext('one letter Thursday', 'T'), - pgettext('one letter Friday', 'F'), - pgettext('one letter Saturday', 'S') - ], - firstDayOfWeek: parseInt(get_format('FIRST_DAY_OF_WEEK')), - isLeapYear: function(year) { - return (((year % 4) === 0) && ((year % 100) !== 0 ) || ((year % 400) === 0)); - }, - getDaysInMonth: function(month, year) { - var days; - if (month === 1 || month === 3 || month === 5 || month === 7 || month === 8 || month === 10 || month === 12) { - days = 31; - } - else if (month === 4 || month === 6 || month === 9 || month === 11) { - days = 30; - } - else if (month === 2 && CalendarNamespace.isLeapYear(year)) { - days = 29; - } - else { - days = 28; - } - return days; - }, - draw: function(month, year, div_id, callback, selected) { // month = 1-12, year = 1-9999 - var today = new Date(); - var todayDay = today.getDate(); - var todayMonth = today.getMonth() + 1; - var todayYear = today.getFullYear(); - var todayClass = ''; - - // Use UTC functions here because the date field does not contain time - // and using the UTC function variants prevent the local time offset - // from altering the date, specifically the day field. For example: - // - // ``` - // var x = new Date('2013-10-02'); - // var day = x.getDate(); - // ``` - // - // The day variable above will be 1 instead of 2 in, say, US Pacific time - // zone. - var isSelectedMonth = false; - if (typeof selected !== 'undefined') { - isSelectedMonth = (selected.getUTCFullYear() === year && (selected.getUTCMonth() + 1) === month); - } - - month = parseInt(month); - year = parseInt(year); - var calDiv = document.getElementById(div_id); - removeChildren(calDiv); - var calTable = document.createElement('table'); - quickElement('caption', calTable, CalendarNamespace.monthsOfYear[month - 1] + ' ' + year); - var tableBody = quickElement('tbody', calTable); - - // Draw days-of-week header - var tableRow = quickElement('tr', tableBody); - for (var i = 0; i < 7; i++) { - quickElement('th', tableRow, CalendarNamespace.daysOfWeek[(i + CalendarNamespace.firstDayOfWeek) % 7]); - } - - var startingPos = new Date(year, month - 1, 1 - CalendarNamespace.firstDayOfWeek).getDay(); - var days = CalendarNamespace.getDaysInMonth(month, year); - - var nonDayCell; - - // Draw blanks before first of month - tableRow = quickElement('tr', tableBody); - for (i = 0; i < startingPos; i++) { - nonDayCell = quickElement('td', tableRow, ' '); - nonDayCell.className = "nonday"; - } - - function calendarMonth(y, m) { - function onClick(e) { - e.preventDefault(); - callback(y, m, django.jQuery(this).text()); - } - return onClick; - } - - // Draw days of month - var currentDay = 1; - for (i = startingPos; currentDay <= days; i++) { - if (i % 7 === 0 && currentDay !== 1) { - tableRow = quickElement('tr', tableBody); - } - if ((currentDay === todayDay) && (month === todayMonth) && (year === todayYear)) { - todayClass = 'today'; - } else { - todayClass = ''; - } - - // use UTC function; see above for explanation. - if (isSelectedMonth && currentDay === selected.getUTCDate()) { - if (todayClass !== '') { - todayClass += " "; - } - todayClass += "selected"; - } - - var cell = quickElement('td', tableRow, '', 'class', todayClass); - var link = quickElement('a', cell, currentDay, 'href', '#'); - addEvent(link, 'click', calendarMonth(year, month)); - currentDay++; - } - - // Draw blanks after end of month (optional, but makes for valid code) - while (tableRow.childNodes.length < 7) { - nonDayCell = quickElement('td', tableRow, ' '); - nonDayCell.className = "nonday"; - } - - calDiv.appendChild(calTable); - } - }; - - // Calendar -- A calendar instance - function Calendar(div_id, callback, selected) { - // div_id (string) is the ID of the element in which the calendar will - // be displayed - // callback (string) is the name of a JavaScript function that will be - // called with the parameters (year, month, day) when a day in the - // calendar is clicked - this.div_id = div_id; - this.callback = callback; - this.today = new Date(); - this.currentMonth = this.today.getMonth() + 1; - this.currentYear = this.today.getFullYear(); - if (typeof selected !== 'undefined') { - this.selected = selected; - } - } - Calendar.prototype = { - drawCurrent: function() { - CalendarNamespace.draw(this.currentMonth, this.currentYear, this.div_id, this.callback, this.selected); - }, - drawDate: function(month, year, selected) { - this.currentMonth = month; - this.currentYear = year; - - if(selected) { - this.selected = selected; - } - - this.drawCurrent(); - }, - drawPreviousMonth: function() { - if (this.currentMonth === 1) { - this.currentMonth = 12; - this.currentYear--; - } - else { - this.currentMonth--; - } - this.drawCurrent(); - }, - drawNextMonth: function() { - if (this.currentMonth === 12) { - this.currentMonth = 1; - this.currentYear++; - } - else { - this.currentMonth++; - } - this.drawCurrent(); - }, - drawPreviousYear: function() { - this.currentYear--; - this.drawCurrent(); - }, - drawNextYear: function() { - this.currentYear++; - this.drawCurrent(); - } - }; - window.Calendar = Calendar; - window.CalendarNamespace = CalendarNamespace; -})(); diff --git a/camp/static/admin/js/cancel.js b/camp/static/admin/js/cancel.js deleted file mode 100644 index b641387..0000000 --- a/camp/static/admin/js/cancel.js +++ /dev/null @@ -1,9 +0,0 @@ -(function($) { - 'use strict'; - $(function() { - $('.cancel-link').click(function(e) { - e.preventDefault(); - window.history.back(); - }); - }); -})(django.jQuery); diff --git a/camp/static/admin/js/change_form.js b/camp/static/admin/js/change_form.js deleted file mode 100644 index 4797383..0000000 --- a/camp/static/admin/js/change_form.js +++ /dev/null @@ -1,20 +0,0 @@ -/*global showAddAnotherPopup, showRelatedObjectLookupPopup showRelatedObjectPopup updateRelatedObjectLinks*/ - -(function($) { - 'use strict'; - $(document).ready(function() { - var modelName = $('#django-admin-form-add-constants').data('modelName'); - $('body').on('click', '.add-another', function(e) { - e.preventDefault(); - var event = $.Event('django:add-another-related'); - $(this).trigger(event); - if (!event.isDefaultPrevented()) { - showAddAnotherPopup(this); - } - }); - - if (modelName) { - $('form#' + modelName + '_form :input:visible:enabled:first').focus(); - } - }); -})(django.jQuery); diff --git a/camp/static/admin/js/collapse.js b/camp/static/admin/js/collapse.js deleted file mode 100644 index 7cb9362..0000000 --- a/camp/static/admin/js/collapse.js +++ /dev/null @@ -1,26 +0,0 @@ -/*global gettext*/ -(function($) { - 'use strict'; - $(document).ready(function() { - // Add anchor tag for Show/Hide link - $("fieldset.collapse").each(function(i, elem) { - // Don't hide if fields in this fieldset have errors - if ($(elem).find("div.errors").length === 0) { - $(elem).addClass("collapsed").find("h2").first().append(' (' + gettext("Show") + - ')'); - } - }); - // Add toggle to anchor tag - $("fieldset.collapse a.collapse-toggle").click(function(ev) { - if ($(this).closest("fieldset").hasClass("collapsed")) { - // Show - $(this).text(gettext("Hide")).closest("fieldset").removeClass("collapsed").trigger("show.fieldset", [$(this).attr("id")]); - } else { - // Hide - $(this).text(gettext("Show")).closest("fieldset").addClass("collapsed").trigger("hide.fieldset", [$(this).attr("id")]); - } - return false; - }); - }); -})(django.jQuery); diff --git a/camp/static/admin/js/collapse.min.js b/camp/static/admin/js/collapse.min.js deleted file mode 100644 index 6251d91..0000000 --- a/camp/static/admin/js/collapse.min.js +++ /dev/null @@ -1,2 +0,0 @@ -(function(a){a(document).ready(function(){a("fieldset.collapse").each(function(b,c){0===a(c).find("div.errors").length&&a(c).addClass("collapsed").find("h2").first().append(' ('+gettext("Show")+")")});a("fieldset.collapse a.collapse-toggle").click(function(b){a(this).closest("fieldset").hasClass("collapsed")?a(this).text(gettext("Hide")).closest("fieldset").removeClass("collapsed").trigger("show.fieldset",[a(this).attr("id")]):a(this).text(gettext("Show")).closest("fieldset").addClass("collapsed").trigger("hide.fieldset", -[a(this).attr("id")]);return!1})})})(django.jQuery); diff --git a/camp/static/admin/js/core.js b/camp/static/admin/js/core.js deleted file mode 100644 index edccdc0..0000000 --- a/camp/static/admin/js/core.js +++ /dev/null @@ -1,250 +0,0 @@ -// Core javascript helper functions - -// basic browser identification & version -var isOpera = (navigator.userAgent.indexOf("Opera") >= 0) && parseFloat(navigator.appVersion); -var isIE = ((document.all) && (!isOpera)) && parseFloat(navigator.appVersion.split("MSIE ")[1].split(";")[0]); - -// Cross-browser event handlers. -function addEvent(obj, evType, fn) { - 'use strict'; - if (obj.addEventListener) { - obj.addEventListener(evType, fn, false); - return true; - } else if (obj.attachEvent) { - var r = obj.attachEvent("on" + evType, fn); - return r; - } else { - return false; - } -} - -function removeEvent(obj, evType, fn) { - 'use strict'; - if (obj.removeEventListener) { - obj.removeEventListener(evType, fn, false); - return true; - } else if (obj.detachEvent) { - obj.detachEvent("on" + evType, fn); - return true; - } else { - return false; - } -} - -function cancelEventPropagation(e) { - 'use strict'; - if (!e) { - e = window.event; - } - e.cancelBubble = true; - if (e.stopPropagation) { - e.stopPropagation(); - } -} - -// quickElement(tagType, parentReference [, textInChildNode, attribute, attributeValue ...]); -function quickElement() { - 'use strict'; - var obj = document.createElement(arguments[0]); - if (arguments[2]) { - var textNode = document.createTextNode(arguments[2]); - obj.appendChild(textNode); - } - var len = arguments.length; - for (var i = 3; i < len; i += 2) { - obj.setAttribute(arguments[i], arguments[i + 1]); - } - arguments[1].appendChild(obj); - return obj; -} - -// "a" is reference to an object -function removeChildren(a) { - 'use strict'; - while (a.hasChildNodes()) { - a.removeChild(a.lastChild); - } -} - -// ---------------------------------------------------------------------------- -// Find-position functions by PPK -// See http://www.quirksmode.org/js/findpos.html -// ---------------------------------------------------------------------------- -function findPosX(obj) { - 'use strict'; - var curleft = 0; - if (obj.offsetParent) { - while (obj.offsetParent) { - curleft += obj.offsetLeft - ((isOpera) ? 0 : obj.scrollLeft); - obj = obj.offsetParent; - } - // IE offsetParent does not include the top-level - if (isIE && obj.parentElement) { - curleft += obj.offsetLeft - obj.scrollLeft; - } - } else if (obj.x) { - curleft += obj.x; - } - return curleft; -} - -function findPosY(obj) { - 'use strict'; - var curtop = 0; - if (obj.offsetParent) { - while (obj.offsetParent) { - curtop += obj.offsetTop - ((isOpera) ? 0 : obj.scrollTop); - obj = obj.offsetParent; - } - // IE offsetParent does not include the top-level - if (isIE && obj.parentElement) { - curtop += obj.offsetTop - obj.scrollTop; - } - } else if (obj.y) { - curtop += obj.y; - } - return curtop; -} - -//----------------------------------------------------------------------------- -// Date object extensions -// ---------------------------------------------------------------------------- -(function() { - 'use strict'; - Date.prototype.getTwelveHours = function() { - var hours = this.getHours(); - if (hours === 0) { - return 12; - } - else { - return hours <= 12 ? hours : hours - 12; - } - }; - - Date.prototype.getTwoDigitMonth = function() { - return (this.getMonth() < 9) ? '0' + (this.getMonth() + 1) : (this.getMonth() + 1); - }; - - Date.prototype.getTwoDigitDate = function() { - return (this.getDate() < 10) ? '0' + this.getDate() : this.getDate(); - }; - - Date.prototype.getTwoDigitTwelveHour = function() { - return (this.getTwelveHours() < 10) ? '0' + this.getTwelveHours() : this.getTwelveHours(); - }; - - Date.prototype.getTwoDigitHour = function() { - return (this.getHours() < 10) ? '0' + this.getHours() : this.getHours(); - }; - - Date.prototype.getTwoDigitMinute = function() { - return (this.getMinutes() < 10) ? '0' + this.getMinutes() : this.getMinutes(); - }; - - Date.prototype.getTwoDigitSecond = function() { - return (this.getSeconds() < 10) ? '0' + this.getSeconds() : this.getSeconds(); - }; - - Date.prototype.getHourMinute = function() { - return this.getTwoDigitHour() + ':' + this.getTwoDigitMinute(); - }; - - Date.prototype.getHourMinuteSecond = function() { - return this.getTwoDigitHour() + ':' + this.getTwoDigitMinute() + ':' + this.getTwoDigitSecond(); - }; - - Date.prototype.getFullMonthName = function() { - return typeof window.CalendarNamespace === "undefined" - ? this.getTwoDigitMonth() - : window.CalendarNamespace.monthsOfYear[this.getMonth()]; - }; - - Date.prototype.strftime = function(format) { - var fields = { - B: this.getFullMonthName(), - c: this.toString(), - d: this.getTwoDigitDate(), - H: this.getTwoDigitHour(), - I: this.getTwoDigitTwelveHour(), - m: this.getTwoDigitMonth(), - M: this.getTwoDigitMinute(), - p: (this.getHours() >= 12) ? 'PM' : 'AM', - S: this.getTwoDigitSecond(), - w: '0' + this.getDay(), - x: this.toLocaleDateString(), - X: this.toLocaleTimeString(), - y: ('' + this.getFullYear()).substr(2, 4), - Y: '' + this.getFullYear(), - '%': '%' - }; - var result = '', i = 0; - while (i < format.length) { - if (format.charAt(i) === '%') { - result = result + fields[format.charAt(i + 1)]; - ++i; - } - else { - result = result + format.charAt(i); - } - ++i; - } - return result; - }; - -// ---------------------------------------------------------------------------- -// String object extensions -// ---------------------------------------------------------------------------- - String.prototype.pad_left = function(pad_length, pad_string) { - var new_string = this; - for (var i = 0; new_string.length < pad_length; i++) { - new_string = pad_string + new_string; - } - return new_string; - }; - - String.prototype.strptime = function(format) { - var split_format = format.split(/[.\-/]/); - var date = this.split(/[.\-/]/); - var i = 0; - var day, month, year; - while (i < split_format.length) { - switch (split_format[i]) { - case "%d": - day = date[i]; - break; - case "%m": - month = date[i] - 1; - break; - case "%Y": - year = date[i]; - break; - case "%y": - year = date[i]; - break; - } - ++i; - } - // Create Date object from UTC since the parsed value is supposed to be - // in UTC, not local time. Also, the calendar uses UTC functions for - // date extraction. - return new Date(Date.UTC(year, month, day)); - }; - -})(); -// ---------------------------------------------------------------------------- -// Get the computed style for and element -// ---------------------------------------------------------------------------- -function getStyle(oElm, strCssRule) { - 'use strict'; - var strValue = ""; - if(document.defaultView && document.defaultView.getComputedStyle) { - strValue = document.defaultView.getComputedStyle(oElm, "").getPropertyValue(strCssRule); - } - else if(oElm.currentStyle) { - strCssRule = strCssRule.replace(/\-(\w)/g, function(strMatch, p1) { - return p1.toUpperCase(); - }); - strValue = oElm.currentStyle[strCssRule]; - } - return strValue; -} diff --git a/camp/static/admin/js/inlines.js b/camp/static/admin/js/inlines.js deleted file mode 100644 index 4e9bb77..0000000 --- a/camp/static/admin/js/inlines.js +++ /dev/null @@ -1,295 +0,0 @@ -/*global DateTimeShortcuts, SelectFilter*/ -/** - * Django admin inlines - * - * Based on jQuery Formset 1.1 - * @author Stanislaus Madueke (stan DOT madueke AT gmail DOT com) - * @requires jQuery 1.2.6 or later - * - * Copyright (c) 2009, Stanislaus Madueke - * All rights reserved. - * - * Spiced up with Code from Zain Memon's GSoC project 2009 - * and modified for Django by Jannis Leidel, Travis Swicegood and Julien Phalip. - * - * Licensed under the New BSD License - * See: http://www.opensource.org/licenses/bsd-license.php - */ -(function($) { - 'use strict'; - $.fn.formset = function(opts) { - var options = $.extend({}, $.fn.formset.defaults, opts); - var $this = $(this); - var $parent = $this.parent(); - var updateElementIndex = function(el, prefix, ndx) { - var id_regex = new RegExp("(" + prefix + "-(\\d+|__prefix__))"); - var replacement = prefix + "-" + ndx; - if ($(el).prop("for")) { - $(el).prop("for", $(el).prop("for").replace(id_regex, replacement)); - } - if (el.id) { - el.id = el.id.replace(id_regex, replacement); - } - if (el.name) { - el.name = el.name.replace(id_regex, replacement); - } - }; - var totalForms = $("#id_" + options.prefix + "-TOTAL_FORMS").prop("autocomplete", "off"); - var nextIndex = parseInt(totalForms.val(), 10); - var maxForms = $("#id_" + options.prefix + "-MAX_NUM_FORMS").prop("autocomplete", "off"); - // only show the add button if we are allowed to add more items, - // note that max_num = None translates to a blank string. - var showAddButton = maxForms.val() === '' || (maxForms.val() - totalForms.val()) > 0; - $this.each(function(i) { - $(this).not("." + options.emptyCssClass).addClass(options.formCssClass); - }); - if ($this.length && showAddButton) { - var addButton = options.addButton; - if (addButton === null) { - if ($this.prop("tagName") === "TR") { - // If forms are laid out as table rows, insert the - // "add" button in a new table row: - var numCols = this.eq(-1).children().length; - $parent.append('' + options.addText + ""); - addButton = $parent.find("tr:last a"); - } else { - // Otherwise, insert it immediately after the last form: - $this.filter(":last").after('"); - addButton = $this.filter(":last").next().find("a"); - } - } - addButton.click(function(e) { - e.preventDefault(); - var template = $("#" + options.prefix + "-empty"); - var row = template.clone(true); - row.removeClass(options.emptyCssClass) - .addClass(options.formCssClass) - .attr("id", options.prefix + "-" + nextIndex); - if (row.is("tr")) { - // If the forms are laid out in table rows, insert - // the remove button into the last table cell: - row.children(":last").append('"); - } else if (row.is("ul") || row.is("ol")) { - // If they're laid out as an ordered/unordered list, - // insert an
  • after the last list item: - row.append('
  • ' + options.deleteText + "
  • "); - } else { - // Otherwise, just insert the remove button as the - // last child element of the form's container: - row.children(":first").append('' + options.deleteText + ""); - } - row.find("*").each(function() { - updateElementIndex(this, options.prefix, totalForms.val()); - }); - // Insert the new form when it has been fully edited - row.insertBefore($(template)); - // Update number of total forms - $(totalForms).val(parseInt(totalForms.val(), 10) + 1); - nextIndex += 1; - // Hide add button in case we've hit the max, except we want to add infinitely - if ((maxForms.val() !== '') && (maxForms.val() - totalForms.val()) <= 0) { - addButton.parent().hide(); - } - // The delete button of each row triggers a bunch of other things - row.find("a." + options.deleteCssClass).click(function(e1) { - e1.preventDefault(); - // Remove the parent form containing this button: - row.remove(); - nextIndex -= 1; - // If a post-delete callback was provided, call it with the deleted form: - if (options.removed) { - options.removed(row); - } - $(document).trigger('formset:removed', [row, options.prefix]); - // Update the TOTAL_FORMS form count. - var forms = $("." + options.formCssClass); - $("#id_" + options.prefix + "-TOTAL_FORMS").val(forms.length); - // Show add button again once we drop below max - if ((maxForms.val() === '') || (maxForms.val() - forms.length) > 0) { - addButton.parent().show(); - } - // Also, update names and ids for all remaining form controls - // so they remain in sequence: - var i, formCount; - var updateElementCallback = function() { - updateElementIndex(this, options.prefix, i); - }; - for (i = 0, formCount = forms.length; i < formCount; i++) { - updateElementIndex($(forms).get(i), options.prefix, i); - $(forms.get(i)).find("*").each(updateElementCallback); - } - }); - // If a post-add callback was supplied, call it with the added form: - if (options.added) { - options.added(row); - } - $(document).trigger('formset:added', [row, options.prefix]); - }); - } - return this; - }; - - /* Setup plugin defaults */ - $.fn.formset.defaults = { - prefix: "form", // The form prefix for your django formset - addText: "add another", // Text for the add link - deleteText: "remove", // Text for the delete link - addCssClass: "add-row", // CSS class applied to the add link - deleteCssClass: "delete-row", // CSS class applied to the delete link - emptyCssClass: "empty-row", // CSS class applied to the empty row - formCssClass: "dynamic-form", // CSS class applied to each form in a formset - added: null, // Function called each time a new form is added - removed: null, // Function called each time a form is deleted - addButton: null // Existing add button to use - }; - - - // Tabular inlines --------------------------------------------------------- - $.fn.tabularFormset = function(options) { - var $rows = $(this); - var alternatingRows = function(row) { - $($rows.selector).not(".add-row").removeClass("row1 row2") - .filter(":even").addClass("row1").end() - .filter(":odd").addClass("row2"); - }; - - var reinitDateTimeShortCuts = function() { - // Reinitialize the calendar and clock widgets by force - if (typeof DateTimeShortcuts !== "undefined") { - $(".datetimeshortcuts").remove(); - DateTimeShortcuts.init(); - } - }; - - var updateSelectFilter = function() { - // If any SelectFilter widgets are a part of the new form, - // instantiate a new SelectFilter instance for it. - if (typeof SelectFilter !== 'undefined') { - $('.selectfilter').each(function(index, value) { - var namearr = value.name.split('-'); - SelectFilter.init(value.id, namearr[namearr.length - 1], false); - }); - $('.selectfilterstacked').each(function(index, value) { - var namearr = value.name.split('-'); - SelectFilter.init(value.id, namearr[namearr.length - 1], true); - }); - } - }; - - var initPrepopulatedFields = function(row) { - row.find('.prepopulated_field').each(function() { - var field = $(this), - input = field.find('input, select, textarea'), - dependency_list = input.data('dependency_list') || [], - dependencies = []; - $.each(dependency_list, function(i, field_name) { - dependencies.push('#' + row.find('.field-' + field_name).find('input, select, textarea').attr('id')); - }); - if (dependencies.length) { - input.prepopulate(dependencies, input.attr('maxlength')); - } - }); - }; - - $rows.formset({ - prefix: options.prefix, - addText: options.addText, - formCssClass: "dynamic-" + options.prefix, - deleteCssClass: "inline-deletelink", - deleteText: options.deleteText, - emptyCssClass: "empty-form", - removed: alternatingRows, - added: function(row) { - initPrepopulatedFields(row); - reinitDateTimeShortCuts(); - updateSelectFilter(); - alternatingRows(row); - }, - addButton: options.addButton - }); - - return $rows; - }; - - // Stacked inlines --------------------------------------------------------- - $.fn.stackedFormset = function(options) { - var $rows = $(this); - var updateInlineLabel = function(row) { - $($rows.selector).find(".inline_label").each(function(i) { - var count = i + 1; - $(this).html($(this).html().replace(/(#\d+)/g, "#" + count)); - }); - }; - - var reinitDateTimeShortCuts = function() { - // Reinitialize the calendar and clock widgets by force, yuck. - if (typeof DateTimeShortcuts !== "undefined") { - $(".datetimeshortcuts").remove(); - DateTimeShortcuts.init(); - } - }; - - var updateSelectFilter = function() { - // If any SelectFilter widgets were added, instantiate a new instance. - if (typeof SelectFilter !== "undefined") { - $(".selectfilter").each(function(index, value) { - var namearr = value.name.split('-'); - SelectFilter.init(value.id, namearr[namearr.length - 1], false); - }); - $(".selectfilterstacked").each(function(index, value) { - var namearr = value.name.split('-'); - SelectFilter.init(value.id, namearr[namearr.length - 1], true); - }); - } - }; - - var initPrepopulatedFields = function(row) { - row.find('.prepopulated_field').each(function() { - var field = $(this), - input = field.find('input, select, textarea'), - dependency_list = input.data('dependency_list') || [], - dependencies = []; - $.each(dependency_list, function(i, field_name) { - dependencies.push('#' + row.find('.form-row .field-' + field_name).find('input, select, textarea').attr('id')); - }); - if (dependencies.length) { - input.prepopulate(dependencies, input.attr('maxlength')); - } - }); - }; - - $rows.formset({ - prefix: options.prefix, - addText: options.addText, - formCssClass: "dynamic-" + options.prefix, - deleteCssClass: "inline-deletelink", - deleteText: options.deleteText, - emptyCssClass: "empty-form", - removed: updateInlineLabel, - added: function(row) { - initPrepopulatedFields(row); - reinitDateTimeShortCuts(); - updateSelectFilter(); - updateInlineLabel(row); - }, - addButton: options.addButton - }); - - return $rows; - }; - - $(document).ready(function() { - $(".js-inline-admin-formset").each(function() { - var data = $(this).data(), - inlineOptions = data.inlineFormset; - switch(data.inlineType) { - case "stacked": - $(inlineOptions.name + "-group .inline-related").stackedFormset(inlineOptions.options); - break; - case "tabular": - $(inlineOptions.name + "-group .tabular.inline-related tbody tr").tabularFormset(inlineOptions.options); - break; - } - }); - }); -})(django.jQuery); diff --git a/camp/static/admin/js/inlines.min.js b/camp/static/admin/js/inlines.min.js deleted file mode 100644 index 1968ac2..0000000 --- a/camp/static/admin/js/inlines.min.js +++ /dev/null @@ -1,10 +0,0 @@ -(function(c){c.fn.formset=function(b){var a=c.extend({},c.fn.formset.defaults,b),d=c(this);b=d.parent();var k=function(a,g,l){var b=new RegExp("("+g+"-(\\d+|__prefix__))");g=g+"-"+l;c(a).prop("for")&&c(a).prop("for",c(a).prop("for").replace(b,g));a.id&&(a.id=a.id.replace(b,g));a.name&&(a.name=a.name.replace(b,g))},e=c("#id_"+a.prefix+"-TOTAL_FORMS").prop("autocomplete","off"),l=parseInt(e.val(),10),g=c("#id_"+a.prefix+"-MAX_NUM_FORMS").prop("autocomplete","off"),h=""===g.val()||0'+a.addText+""),m=b.find("tr:last a")):(d.filter(":last").after('"),m=d.filter(":last").next().find("a")));m.click(function(b){b.preventDefault();b=c("#"+a.prefix+"-empty"); -var f=b.clone(!0);f.removeClass(a.emptyCssClass).addClass(a.formCssClass).attr("id",a.prefix+"-"+l);f.is("tr")?f.children(":last").append('"):f.is("ul")||f.is("ol")?f.append('
  • '+a.deleteText+"
  • "):f.children(":first").append(''+a.deleteText+"");f.find("*").each(function(){k(this,a.prefix,e.val())});f.insertBefore(c(b)); -c(e).val(parseInt(e.val(),10)+1);l+=1;""!==g.val()&&0>=g.val()-e.val()&&m.parent().hide();f.find("a."+a.deleteCssClass).click(function(b){b.preventDefault();f.remove();--l;a.removed&&a.removed(f);c(document).trigger("formset:removed",[f,a.prefix]);b=c("."+a.formCssClass);c("#id_"+a.prefix+"-TOTAL_FORMS").val(b.length);(""===g.val()||0 0) { - values.push(field.val()); - } - }); - prepopulatedField.val(URLify(values.join(' '), maxLength, allowUnicode)); - }; - - prepopulatedField.data('_changed', false); - prepopulatedField.change(function() { - prepopulatedField.data('_changed', true); - }); - - if (!prepopulatedField.val()) { - $(dependencies.join(',')).keyup(populate).change(populate).focus(populate); - } - }); - }; -})(django.jQuery); diff --git a/camp/static/admin/js/prepopulate.min.js b/camp/static/admin/js/prepopulate.min.js deleted file mode 100644 index 75f3c17..0000000 --- a/camp/static/admin/js/prepopulate.min.js +++ /dev/null @@ -1 +0,0 @@ -(function(c){c.fn.prepopulate=function(e,f,g){return this.each(function(){var a=c(this),b=function(){if(!a.data("_changed")){var b=[];c.each(e,function(a,d){d=c(d);0= 0 && j < len ? [ this[ j ] ] : [] ); - }, - - end: function() { - return this.prevObject || this.constructor(); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: arr.sort, - splice: arr.splice -}; - -jQuery.extend = jQuery.fn.extend = function() { - var options, name, src, copy, copyIsArray, clone, - target = arguments[ 0 ] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - - // Skip the boolean and the target - target = arguments[ i ] || {}; - i++; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !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() {}, - - isFunction: function( obj ) { - return jQuery.type( obj ) === "function"; - }, - - isArray: Array.isArray, - - isWindow: function( obj ) { - return obj != null && obj === obj.window; - }, - - isNumeric: function( obj ) { - - // parseFloat NaNs numeric-cast false positives (null|true|false|"") - // ...but misinterprets leading-number strings, particularly hex literals ("0x...") - // subtraction forces infinities to NaN - // adding 1 corrects loss of precision from parseFloat (#15100) - var realStringObj = obj && obj.toString(); - return !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0; - }, - - isPlainObject: function( obj ) { - var key; - - // Not plain objects: - // - Any object or value whose internal [[Class]] property is not "[object Object]" - // - DOM nodes - // - window - if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { - return false; - } - - // Not own constructor property must be Object - if ( obj.constructor && - !hasOwn.call( obj, "constructor" ) && - !hasOwn.call( obj.constructor.prototype || {}, "isPrototypeOf" ) ) { - return false; - } - - // 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 ); - }, - - isEmptyObject: function( obj ) { - var name; - for ( name in obj ) { - return false; - } - return true; - }, - - type: function( obj ) { - if ( obj == null ) { - return obj + ""; - } - - // Support: Android<4.0, iOS<6 (functionish RegExp) - return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call( obj ) ] || "object" : - typeof obj; - }, - - // Evaluates a script in a global context - globalEval: function( code ) { - var script, - indirect = eval; - - code = jQuery.trim( code ); - - if ( code ) { - - // If the code includes a valid, prologue position - // strict mode pragma, execute code by injecting a - // script tag into the document. - if ( code.indexOf( "use strict" ) === 1 ) { - script = document.createElement( "script" ); - script.text = code; - document.head.appendChild( script ).parentNode.removeChild( script ); - } else { - - // Otherwise, avoid the DOM node creation, insertion - // and removal by using an indirect global eval - - indirect( code ); - } - } - }, - - // Convert dashed to camelCase; used by the css and data modules - // Support: IE9-11+ - // 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 - trim: function( text ) { - return text == null ? - "" : - ( text + "" ).replace( rtrim, "" ); - }, - - // results is for internal usage only - makeArray: function( arr, results ) { - var ret = results || []; - - if ( arr != null ) { - if ( isArrayLike( Object( arr ) ) ) { - jQuery.merge( ret, - typeof arr === "string" ? - [ arr ] : arr - ); - } else { - push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - return arr == null ? -1 : indexOf.call( arr, elem, i ); - }, - - merge: function( first, second ) { - var len = +second.length, - j = 0, - i = first.length; - - for ( ; j < len; j++ ) { - first[ i++ ] = second[ j ]; - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, invert ) { - var callbackInverse, - matches = [], - i = 0, - length = elems.length, - callbackExpect = !invert; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - callbackInverse = !callback( elems[ i ], i ); - if ( callbackInverse !== callbackExpect ) { - matches.push( elems[ i ] ); - } - } - - return matches; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var 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 tmp, args, proxy; - - if ( typeof context === "string" ) { - tmp = fn[ context ]; - context = fn; - fn = tmp; - } - - // Quick check to determine if target is callable, in the spec - // this throws a TypeError, but we will just return undefined. - if ( !jQuery.isFunction( fn ) ) { - return undefined; - } - - // Simulated bind - args = slice.call( arguments, 2 ); - proxy = function() { - return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); - }; - - // Set the guid of unique handler to the same of original handler, so it can be removed - proxy.guid = fn.guid = fn.guid || jQuery.guid++; - - return proxy; - }, - - now: Date.now, - - // jQuery.support is not used in Core but other projects attach their - // properties to it so it needs to exist. - support: support -} ); - -// 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 ] = arr[ 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 ( indexOf.call( qualifier, elem ) > -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, - len = this.length, - ret = [], - self = this; - - if ( typeof selector !== "string" ) { - return this.pushStack( jQuery( selector ).filter( function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - } ) ); - } - - for ( i = 0; i < len; i++ ) { - jQuery.find( selector, self[ i ], ret ); - } - - // Needed because $( selector, context ) becomes $( context ).find( selector ) - ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); - ret.selector = this.selector ? this.selector + " " + selector : selector; - return ret; - }, - filter: function( selector ) { - return this.pushStack( winnow( this, selector || [], false ) ); - }, - not: function( selector ) { - return this.pushStack( winnow( this, selector || [], true ) ); - }, - is: function( selector ) { - return !!winnow( - this, - - // If this is a positional/relative selector, check membership in the returned set - // so $("p:first").is("p:last") won't return true for a doc with two "p". - typeof selector === "string" && rneedsContext.test( selector ) ? - jQuery( selector ) : - selector || [], - false - ).length; - } -} ); - - -// Initialize a jQuery object - - -// A central reference to the root jQuery(document) -var rootjQuery, - - // A simple way to check for HTML strings - // Prioritize #id over to avoid XSS via location.hash (#9521) - // Strict HTML recognition (#11290: must start with <) - rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, - - init = jQuery.fn.init = function( selector, context, root ) { - var match, elem; - - // HANDLE: $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } - - // Method init() accepts an alternate rootjQuery - // so migrate can support jQuery.sub (gh-2101) - root = root || rootjQuery; - - // Handle HTML strings - if ( typeof selector === "string" ) { - if ( selector[ 0 ] === "<" && - selector[ selector.length - 1 ] === ">" && - selector.length >= 3 ) { - - // Assume that strings that start and end with <> are HTML and skip the regex check - match = [ null, selector, null ]; - - } else { - match = rquickExpr.exec( selector ); - } - - // Match html or make sure no context is specified for #id - if ( match && ( match[ 1 ] || !context ) ) { - - // HANDLE: $(html) -> $(array) - if ( match[ 1 ] ) { - context = context instanceof jQuery ? context[ 0 ] : context; - - // Option to run scripts is true for back-compat - // Intentionally let the error be thrown if parseHTML is not present - jQuery.merge( this, jQuery.parseHTML( - match[ 1 ], - context && context.nodeType ? context.ownerDocument || context : document, - true - ) ); - - // HANDLE: $(html, props) - if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { - for ( match in context ) { - - // Properties of context are called as methods if possible - if ( 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 ] ); - - // Support: Blackberry 4.6 - // gEBID returns nodes no longer in the document (#6963) - if ( elem && elem.parentNode ) { - - // Inject the element directly into the jQuery object - this.length = 1; - this[ 0 ] = elem; - } - - this.context = document; - this.selector = selector; - return this; - } - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return ( context || 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 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 targets = jQuery( target, this ), - l = targets.length; - - return this.filter( function() { - var i = 0; - for ( ; i < l; i++ ) { - if ( jQuery.contains( this, targets[ i ] ) ) { - return true; - } - } - } ); - }, - - closest: function( selectors, context ) { - var cur, - i = 0, - l = this.length, - matched = [], - pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? - jQuery( selectors, context || this.context ) : - 0; - - for ( ; i < l; i++ ) { - for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { - - // Always skip document fragments - if ( cur.nodeType < 11 && ( pos ? - pos.index( cur ) > -1 : - - // Don't pass non-elements to Sizzle - cur.nodeType === 1 && - jQuery.find.matchesSelector( cur, selectors ) ) ) { - - matched.push( cur ); - break; - } - } - } - - return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); - }, - - // Determine the position of an element within the set - index: function( elem ) { - - // No argument, return index in parent - if ( !elem ) { - return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; - } - - // Index in selector - if ( typeof elem === "string" ) { - return indexOf.call( jQuery( elem ), this[ 0 ] ); - } - - // Locate the position of the desired element - return indexOf.call( this, - - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[ 0 ] : elem - ); - }, - - add: function( selector, context ) { - return this.pushStack( - jQuery.uniqueSort( - jQuery.merge( this.get(), jQuery( selector, context ) ) - ) - ); - }, - - addBack: function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter( selector ) - ); - } -} ); - -function sibling( cur, dir ) { - while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} - return cur; -} - -jQuery.each( { - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, i, until ) { - return dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return sibling( elem, "nextSibling" ); - }, - prev: function( elem ) { - return sibling( elem, "previousSibling" ); - }, - nextAll: function( elem ) { - return dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, i, until ) { - return dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, i, until ) { - return dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return siblings( ( elem.parentNode || {} ).firstChild, elem ); - }, - children: function( elem ) { - return siblings( elem.firstChild ); - }, - contents: function( elem ) { - return elem.contentDocument || jQuery.merge( [], elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var matched = jQuery.map( this, fn, until ); - - if ( name.slice( -5 ) !== "Until" ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - matched = jQuery.filter( selector, matched ); - } - - if ( this.length > 1 ) { - - // Remove duplicates - if ( !guaranteedUnique[ name ] ) { - jQuery.uniqueSort( matched ); - } - - // Reverse order for parents* and prev-derivatives - if ( rparentsprev.test( name ) ) { - matched.reverse(); - } - } - - return this.pushStack( matched ); - }; -} ); -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 = queue = []; - if ( !memory ) { - list = memory = ""; - } - return this; - }, - locked: function() { - return !!locked; - }, - - // Call all callbacks with the given context and arguments - fireWith: function( context, args ) { - if ( !locked ) { - args = args || []; - args = [ context, args.slice ? args.slice() : args ]; - queue.push( args ); - if ( !firing ) { - fire(); - } - } - return this; - }, - - // Call all the callbacks with the given arguments - fire: function() { - self.fireWith( this, arguments ); - return this; - }, - - // To know if the callbacks have already been called at least once - fired: function() { - return !!fired; - } - }; - - return self; -}; - - -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" ); - } - } -} ); - -/** - * The ready event handler and self cleanup method - */ -function completed() { - document.removeEventListener( "DOMContentLoaded", completed ); - window.removeEventListener( "load", completed ); - 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: IE9-10 only - // Older IE sometimes signals "interactive" too soon - if ( document.readyState === "complete" || - ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { - - // Handle it asynchronously to allow scripts the opportunity to delay ready - window.setTimeout( jQuery.ready ); - - } else { - - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", completed ); - } - } - return readyList.promise( obj ); -}; - -// Kick off the DOM ready check even if the user does not -jQuery.ready.promise(); - - - - -// Multifunctional method to get and set values of a collection -// The value/s can optionally be executed if it's a function -var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { - var i = 0, - len = elems.length, - bulk = key == null; - - // Sets many values - if ( jQuery.type( key ) === "object" ) { - chainable = true; - for ( i in key ) { - access( elems, fn, i, key[ i ], true, emptyGet, raw ); - } - - // Sets one value - } else if ( value !== undefined ) { - chainable = true; - - if ( !jQuery.isFunction( value ) ) { - raw = true; - } - - if ( bulk ) { - - // Bulk operations run against the entire set - if ( raw ) { - fn.call( elems, value ); - fn = null; - - // ...except when executing function values - } else { - bulk = fn; - fn = function( elem, key, value ) { - return bulk.call( jQuery( elem ), value ); - }; - } - } - - if ( fn ) { - for ( ; i < len; i++ ) { - fn( - elems[ i ], key, raw ? - value : - value.call( elems[ i ], i, fn( elems[ i ], key ) ) - ); - } - } - } - - return chainable ? - elems : - - // Gets - bulk ? - fn.call( elems ) : - len ? fn( elems[ 0 ], key ) : emptyGet; -}; -var acceptData = function( owner ) { - - // Accepts only: - // - Node - // - Node.ELEMENT_NODE - // - Node.DOCUMENT_NODE - // - Object - // - Any - /* jshint -W018 */ - return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); -}; - - - - -function Data() { - this.expando = jQuery.expando + Data.uid++; -} - -Data.uid = 1; - -Data.prototype = { - - register: function( owner, initial ) { - var value = initial || {}; - - // If it is a node unlikely to be stringify-ed or looped over - // use plain assignment - if ( owner.nodeType ) { - owner[ this.expando ] = value; - - // Otherwise secure it in a non-enumerable, non-writable property - // configurability must be true to allow the property to be - // deleted with the delete operator - } else { - Object.defineProperty( owner, this.expando, { - value: value, - writable: true, - configurable: true - } ); - } - return owner[ this.expando ]; - }, - cache: function( owner ) { - - // We can accept data for non-element nodes in modern browsers, - // but we should not, see #8335. - // Always return an empty object. - if ( !acceptData( owner ) ) { - return {}; - } - - // Check if the owner object already has a cache - var value = owner[ this.expando ]; - - // If not, create one - if ( !value ) { - value = {}; - - // We can accept data for non-element nodes in modern browsers, - // but we should not, see #8335. - // Always return an empty object. - if ( acceptData( owner ) ) { - - // If it is a node unlikely to be stringify-ed or looped over - // use plain assignment - if ( owner.nodeType ) { - owner[ this.expando ] = value; - - // Otherwise secure it in a non-enumerable property - // configurable must be true to allow the property to be - // deleted when data is removed - } else { - Object.defineProperty( owner, this.expando, { - value: value, - configurable: true - } ); - } - } - } - - return value; - }, - set: function( owner, data, value ) { - var prop, - cache = this.cache( owner ); - - // Handle: [ owner, key, value ] args - if ( typeof data === "string" ) { - cache[ data ] = value; - - // Handle: [ owner, { properties } ] args - } else { - - // Copy the properties one-by-one to the cache object - for ( prop in data ) { - cache[ prop ] = data[ prop ]; - } - } - return cache; - }, - get: function( owner, key ) { - return key === undefined ? - this.cache( owner ) : - owner[ this.expando ] && owner[ this.expando ][ key ]; - }, - access: function( owner, key, value ) { - var stored; - - // In cases where either: - // - // 1. No key was specified - // 2. A string key was specified, but no value provided - // - // Take the "read" path and allow the get method to determine - // which value to return, respectively either: - // - // 1. The entire cache object - // 2. The data stored at the key - // - if ( key === undefined || - ( ( key && typeof key === "string" ) && value === undefined ) ) { - - stored = this.get( owner, key ); - - return stored !== undefined ? - stored : this.get( owner, jQuery.camelCase( key ) ); - } - - // When the key is not a string, or both a key and value - // are specified, set or extend (existing objects) with either: - // - // 1. An object of properties - // 2. A key and value - // - this.set( owner, key, value ); - - // Since the "set" path can have two possible entry points - // return the expected data based on which path was taken[*] - return value !== undefined ? value : key; - }, - remove: function( owner, key ) { - var i, name, camel, - cache = owner[ this.expando ]; - - if ( cache === undefined ) { - return; - } - - if ( key === undefined ) { - this.register( owner ); - - } else { - - // Support array or space separated string of keys - if ( jQuery.isArray( key ) ) { - - // If "name" is an array of keys... - // When data is initially created, via ("key", "val") signature, - // keys will be converted to camelCase. - // Since there is no way to tell _how_ a key was added, remove - // both plain key and camelCase key. #12786 - // This will only penalize the array argument path. - name = key.concat( key.map( jQuery.camelCase ) ); - } else { - camel = jQuery.camelCase( key ); - - // Try the string as a key before any manipulation - if ( key in cache ) { - name = [ key, camel ]; - } else { - - // If a key with the spaces exists, use it. - // Otherwise, create an array by matching non-whitespace - name = camel; - name = name in cache ? - [ name ] : ( name.match( rnotwhite ) || [] ); - } - } - - i = name.length; - - while ( i-- ) { - delete cache[ name[ i ] ]; - } - } - - // Remove the expando if there's no more data - if ( key === undefined || jQuery.isEmptyObject( cache ) ) { - - // Support: Chrome <= 35-45+ - // Webkit & Blink performance suffers when deleting properties - // from DOM nodes, so set to undefined instead - // https://code.google.com/p/chromium/issues/detail?id=378607 - if ( owner.nodeType ) { - owner[ this.expando ] = undefined; - } else { - delete owner[ this.expando ]; - } - } - }, - hasData: function( owner ) { - var cache = owner[ this.expando ]; - return cache !== undefined && !jQuery.isEmptyObject( cache ); - } -}; -var dataPriv = new Data(); - -var dataUser = new Data(); - - - -// Implementation Summary -// -// 1. Enforce API surface and semantic compatibility with 1.9.x branch -// 2. Improve the module's maintainability by reducing the storage -// paths to a single mechanism. -// 3. Use the same single mechanism to support "private" and "user" data. -// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) -// 5. Avoid exposing implementation details on user objects (eg. expando properties) -// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 - -var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, - rmultiDash = /[A-Z]/g; - -function dataAttr( elem, key, data ) { - var name; - - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); - data = elem.getAttribute( name ); - - if ( typeof data === "string" ) { - try { - data = 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 - dataUser.set( elem, key, data ); - } else { - data = undefined; - } - } - return data; -} - -jQuery.extend( { - hasData: function( elem ) { - return dataUser.hasData( elem ) || dataPriv.hasData( elem ); - }, - - data: function( elem, name, data ) { - return dataUser.access( elem, name, data ); - }, - - removeData: function( elem, name ) { - dataUser.remove( elem, name ); - }, - - // TODO: Now that all calls to _data and _removeData have been replaced - // with direct calls to dataPriv methods, these can be deprecated. - _data: function( elem, name, data ) { - return dataPriv.access( elem, name, data ); - }, - - _removeData: function( elem, name ) { - dataPriv.remove( elem, name ); - } -} ); - -jQuery.fn.extend( { - data: function( key, value ) { - var i, name, data, - elem = this[ 0 ], - attrs = elem && elem.attributes; - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = dataUser.get( elem ); - - if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { - i = attrs.length; - while ( i-- ) { - - // Support: 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 ] ); - } - } - } - dataPriv.set( elem, "hasDataAttrs", true ); - } - } - - return data; - } - - // Sets multiple values - if ( typeof key === "object" ) { - return this.each( function() { - dataUser.set( this, key ); - } ); - } - - return access( this, function( value ) { - var data, camelKey; - - // The calling jQuery object (element matches) is not empty - // (and therefore has an element appears at this[ 0 ]) and the - // `value` parameter was not undefined. An empty jQuery object - // will result in `undefined` for elem = this[ 0 ] which will - // throw an exception if an attempt to read a data cache is made. - if ( elem && value === undefined ) { - - // Attempt to get data from the cache - // with the key as-is - data = dataUser.get( elem, key ) || - - // Try to find dashed key if it exists (gh-2779) - // This is for 2.2.x only - dataUser.get( elem, key.replace( rmultiDash, "-$&" ).toLowerCase() ); - - if ( data !== undefined ) { - return data; - } - - camelKey = jQuery.camelCase( key ); - - // Attempt to get data from the cache - // with the key camelized - data = dataUser.get( elem, camelKey ); - if ( data !== undefined ) { - return data; - } - - // Attempt to "discover" the data in - // HTML5 custom data-* attrs - data = dataAttr( elem, camelKey, undefined ); - if ( data !== undefined ) { - return data; - } - - // We tried really hard, but the data doesn't exist. - return; - } - - // Set the data... - camelKey = jQuery.camelCase( key ); - this.each( function() { - - // First, attempt to store a copy or reference of any - // data that might've been store with a camelCased key. - var data = dataUser.get( this, camelKey ); - - // For HTML5 data-* attribute interop, we have to - // store property names with dashes in a camelCase form. - // This might not apply to all properties...* - dataUser.set( this, camelKey, value ); - - // *... In the case of properties that might _actually_ - // have dashes, we need to also store a copy of that - // unchanged property. - if ( key.indexOf( "-" ) > -1 && data !== undefined ) { - dataUser.set( this, key, value ); - } - } ); - }, null, value, arguments.length > 1, null, true ); - }, - - removeData: function( key ) { - return this.each( function() { - dataUser.remove( this, key ); - } ); - } -} ); - - -jQuery.extend( { - queue: function( elem, type, data ) { - var queue; - - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = dataPriv.get( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !queue || jQuery.isArray( data ) ) { - queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); - } else { - queue.push( data ); - } - } - return queue || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - startLength = queue.length, - fn = queue.shift(), - hooks = jQuery._queueHooks( elem, type ), - next = function() { - jQuery.dequeue( elem, type ); - }; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - startLength--; - } - - if ( fn ) { - - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift( "inprogress" ); - } - - // Clear up the last queue stop function - delete hooks.stop; - fn.call( elem, next, hooks ); - } - - if ( !startLength && hooks ) { - hooks.empty.fire(); - } - }, - - // Not public - generate a queueHooks object, or return the current one - _queueHooks: function( elem, type ) { - var key = type + "queueHooks"; - return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { - empty: jQuery.Callbacks( "once memory" ).add( function() { - dataPriv.remove( elem, [ type + "queue", key ] ); - } ) - } ); - } -} ); - -jQuery.fn.extend( { - queue: function( type, data ) { - var setter = 2; - - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - setter--; - } - - if ( arguments.length < setter ) { - return jQuery.queue( this[ 0 ], type ); - } - - return data === undefined ? - this : - this.each( function() { - var queue = jQuery.queue( this, type, data ); - - // Ensure a hooks for this queue - jQuery._queueHooks( this, type ); - - if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - } ); - }, - dequeue: function( type ) { - return this.each( function() { - jQuery.dequeue( this, type ); - } ); - }, - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - }, - - // Get a promise resolved when queues of a certain type - // are emptied (fx is the type by default) - promise: function( type, obj ) { - var tmp, - count = 1, - defer = jQuery.Deferred(), - elements = this, - i = this.length, - resolve = function() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - }; - - if ( typeof type !== "string" ) { - obj = type; - type = undefined; - } - type = type || "fx"; - - while ( i-- ) { - tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } -} ); -var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; - -var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); - - -var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; - -var 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; -} -var rcheckableType = ( /^(?:checkbox|radio)$/i ); - -var rtagName = ( /<([\w:-]+)/ ); - -var rscriptType = ( /^$|\/(?:java|ecma)script/i ); - - - -// We have to close these tags to support XHTML (#13200) -var wrapMap = { - - // Support: IE9 - option: [ 1, "" ], - - // XHTML parsers do not magically insert elements in the - // same way that tag soup parsers do. So we cannot shorten - // this by omitting or other required elements. - thead: [ 1, "", "
    " ], - col: [ 2, "", "
    " ], - tr: [ 2, "", "
    " ], - td: [ 3, "", "
    " ], - - _default: [ 0, "", "" ] -}; - -// Support: IE9 -wrapMap.optgroup = wrapMap.option; - -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - - -function getAll( context, tag ) { - - // Support: IE9-11+ - // Use typeof to avoid zero-argument method invocation on host objects (#15151) - var ret = typeof context.getElementsByTagName !== "undefined" ? - context.getElementsByTagName( tag || "*" ) : - typeof context.querySelectorAll !== "undefined" ? - context.querySelectorAll( tag || "*" ) : - []; - - return tag === undefined || tag && jQuery.nodeName( context, tag ) ? - jQuery.merge( [ context ], ret ) : - ret; -} - - -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - dataPriv.set( - elems[ i ], - "globalEval", - !refElements || dataPriv.get( refElements[ i ], "globalEval" ) - ); - } -} - - -var rhtml = /<|&#?\w+;/; - -function buildFragment( elems, context, scripts, selection, ignored ) { - var elem, tmp, tag, wrap, contains, j, - fragment = context.createDocumentFragment(), - nodes = [], - i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( jQuery.type( elem ) === "object" ) { - - // Support: Android<4.1, PhantomJS<2 - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); - - // Deserialize a standard representation - tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; - - // Descend through wrappers to the right content - j = wrap[ 0 ]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Support: Android<4.1, PhantomJS<2 - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, tmp.childNodes ); - - // Remember the top-level container - tmp = fragment.firstChild; - - // Ensure the created nodes are orphaned (#12392) - tmp.textContent = ""; - } - } - } - - // Remove wrapper from fragment - fragment.textContent = ""; - - i = 0; - while ( ( elem = nodes[ i++ ] ) ) { - - // Skip elements already in the context collection (trac-4087) - if ( selection && jQuery.inArray( elem, selection ) > -1 ) { - if ( ignored ) { - ignored.push( elem ); - } - continue; - } - - contains = jQuery.contains( elem.ownerDocument, elem ); - - // Append to fragment - tmp = getAll( fragment.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( contains ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( ( elem = tmp[ j++ ] ) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - return fragment; -} - - -( function() { - var fragment = document.createDocumentFragment(), - div = fragment.appendChild( document.createElement( "div" ) ), - input = document.createElement( "input" ); - - // Support: Android 4.0-4.3, Safari<=5.1 - // Check state lost if the name is set (#11217) - // Support: Windows Web Apps (WWA) - // `name` and `type` must use .setAttribute for WWA (#14901) - input.setAttribute( "type", "radio" ); - input.setAttribute( "checked", "checked" ); - input.setAttribute( "name", "t" ); - - div.appendChild( input ); - - // Support: Safari<=5.1, Android<4.2 - // Older WebKit doesn't clone checked state correctly in fragments - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Support: IE<=11+ - // Make sure textarea (and checkbox) defaultValue is properly cloned - div.innerHTML = ""; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; -} )(); - - -var - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -// Support: 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 handleObjIn, eventHandle, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.get( elem ); - - // Don't attach events to noData or text/comment nodes (but allow plain objects) - if ( !elemData ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - if ( !( events = elemData.events ) ) { - events = elemData.events = {}; - } - if ( !( eventHandle = elemData.handle ) ) { - eventHandle = elemData.handle = function( e ) { - - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? - jQuery.event.dispatch.apply( elem, arguments ) : undefined; - }; - } - - // Handle multiple events separated by a space - types = ( types || "" ).match( rnotwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // There *must* be a type, no attaching namespace-only handlers - if ( !type ) { - continue; - } - - // If event changes its type, use the special event handlers for the changed type - special = jQuery.event.special[ type ] || {}; - - // If selector defined, determine special event api type, otherwise given type - type = ( selector ? special.delegateType : special.bindType ) || type; - - // Update special based on newly reset type - special = jQuery.event.special[ type ] || {}; - - // handleObj is passed to all event handlers - handleObj = jQuery.extend( { - type: type, - origType: origType, - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join( "." ) - }, handleObjIn ); - - // Init the event handler queue if we're the first - if ( !( handlers = events[ type ] ) ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener if the special events handler returns false - if ( !special.setup || - special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - - var j, origCount, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); - - if ( !elemData || !( events = elemData.events ) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( 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 data and the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - dataPriv.remove( elem, "handle events" ); - } - }, - - 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 = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], - special = jQuery.event.special[ event.type ] || {}; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[ 0 ] = event; - 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 ) ) { - - for ( ; cur !== this; cur = cur.parentNode || this ) { - - // Don't check non-elements (#13208) - // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.nodeType === 1 && ( 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; - }, - - // 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 offsetX offsetY pageX pageY " + - "screenX screenY toElement" ).split( " " ), - filter: function( event, original ) { - var eventDoc, doc, body, - button = original.button; - - // Calculate pageX/Y if missing and clientX/Y available - if ( event.pageX == null && original.clientX != null ) { - eventDoc = event.target.ownerDocument || document; - doc = eventDoc.documentElement; - body = eventDoc.body; - - event.pageX = original.clientX + - ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); - event.pageY = original.clientY + - ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - - ( doc && doc.clientTop || body && body.clientTop || 0 ); - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - // Note: button is not normalized, so don't use it - if ( !event.which && button !== undefined ) { - event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); - } - - return event; - } - }, - - fix: function( event ) { - if ( event[ jQuery.expando ] ) { - return event; - } - - // Create a writable copy of the event object and normalize some properties - var i, prop, copy, - type = event.type, - originalEvent = event, - fixHook = this.fixHooks[ type ]; - - if ( !fixHook ) { - this.fixHooks[ type ] = fixHook = - rmouseEvent.test( type ) ? this.mouseHooks : - rkeyEvent.test( type ) ? this.keyHooks : - {}; - } - copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; - - event = new jQuery.Event( originalEvent ); - - i = copy.length; - while ( i-- ) { - prop = copy[ i ]; - event[ prop ] = originalEvent[ prop ]; - } - - // Support: Cordova 2.5 (WebKit) (#13255) - // All events should have a target; Cordova deviceready doesn't - if ( !event.target ) { - event.target = document; - } - - // Support: Safari 6.0+, Chrome<28 - // Target should not be a text node (#504, #13143) - if ( event.target.nodeType === 3 ) { - event.target = event.target.parentNode; - } - - return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; - }, - - special: { - load: { - - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - focus: { - - // Fire native event if possible so blur/focus sequence is correct - trigger: function() { - if ( this !== safeActiveElement() && this.focus ) { - this.focus(); - return false; - } - }, - delegateType: "focusin" - }, - blur: { - trigger: function() { - if ( this === safeActiveElement() && this.blur ) { - this.blur(); - return false; - } - }, - delegateType: "focusout" - }, - click: { - - // For checkbox, fire native event so checked state will be right - trigger: function() { - if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) { - this.click(); - return false; - } - }, - - // For cross-browser consistency, don't fire native .click() on links - _default: function( event ) { - return jQuery.nodeName( event.target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // Support: Firefox 20+ - // Firefox doesn't alert if the returnValue field is not set. - if ( event.result !== undefined && event.originalEvent ) { - event.originalEvent.returnValue = event.result; - } - } - } - } -}; - -jQuery.removeEvent = function( elem, type, handle ) { - - // This "if" is needed for plain objects - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle ); - } -}; - -jQuery.Event = function( src, props ) { - - // Allow instantiation without the 'new' keyword - if ( !( this instanceof jQuery.Event ) ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = src.defaultPrevented || - src.defaultPrevented === undefined && - - // Support: Android<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 ) { - e.preventDefault(); - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - - if ( e ) { - e.stopPropagation(); - } - }, - stopImmediatePropagation: function() { - var e = this.originalEvent; - - this.isImmediatePropagationStopped = returnTrue; - - if ( e ) { - 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; - } - }; -} ); - -jQuery.fn.extend( { - on: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn ); - }, - one: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn, 1 ); - }, - off: function( types, selector, fn ) { - var handleObj, type; - if ( types && types.preventDefault && types.handleObj ) { - - // ( event ) dispatched jQuery.Event - handleObj = types.handleObj; - jQuery( types.delegateTarget ).off( - handleObj.namespace ? - handleObj.origType + "." + handleObj.namespace : - handleObj.origType, - handleObj.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - - // ( types-object [, selector] ) - for ( type in types ) { - this.off( type, selector, types[ type ] ); - } - return this; - } - if ( selector === false || typeof selector === "function" ) { - - // ( types [, fn] ) - fn = selector; - selector = undefined; - } - if ( fn === false ) { - fn = returnFalse; - } - return this.each( function() { - jQuery.event.remove( this, types, fn, selector ); - } ); - } -} ); - - -var - 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; - -// Manipulating tables requires a tbody -function manipulationTarget( elem, content ) { - return jQuery.nodeName( elem, "table" ) && - jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? - - elem.getElementsByTagName( "tbody" )[ 0 ] || - elem.appendChild( elem.ownerDocument.createElement( "tbody" ) ) : - elem; -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; - return elem; -} -function restoreScript( elem ) { - var match = rscriptTypeMasked.exec( elem.type ); - - if ( match ) { - elem.type = match[ 1 ]; - } else { - elem.removeAttribute( "type" ); - } - - return elem; -} - -function cloneCopyEvent( src, dest ) { - var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; - - if ( dest.nodeType !== 1 ) { - return; - } - - // 1. Copy private data: events, handlers, etc. - if ( dataPriv.hasData( src ) ) { - pdataOld = dataPriv.access( src ); - pdataCur = dataPriv.set( dest, pdataOld ); - events = pdataOld.events; - - if ( events ) { - delete pdataCur.handle; - pdataCur.events = {}; - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - } - - // 2. Copy user data - if ( dataUser.hasData( src ) ) { - udataOld = dataUser.access( src ); - udataCur = jQuery.extend( {}, udataOld ); - - dataUser.set( dest, udataCur ); - } -} - -// Fix IE bugs, see support tests -function fixInput( src, dest ) { - var nodeName = dest.nodeName.toLowerCase(); - - // Fails to persist the checked state of a cloned checkbox or radio button. - if ( nodeName === "input" && rcheckableType.test( src.type ) ) { - dest.checked = src.checked; - - // Fails to return the selected option to the default selected state when cloning options - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -function domManip( collection, args, callback, ignored ) { - - // Flatten any nested arrays - args = concat.apply( [], args ); - - var fragment, first, scripts, hasScripts, node, doc, - i = 0, - l = collection.length, - iNoClone = l - 1, - value = args[ 0 ], - 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 || "" ) && - !dataPriv.access( node, "globalEval" ) && - jQuery.contains( doc, node ) ) { - - if ( node.src ) { - - // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl ) { - jQuery._evalUrl( node.src ); - } - } else { - jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) ); - } - } - } - } - } - } - - return collection; -} - -function remove( elem, selector, keepData ) { - var node, - nodes = selector ? jQuery.filter( selector, elem ) : elem, - i = 0; - - for ( ; ( node = nodes[ i ] ) != null; i++ ) { - if ( !keepData && node.nodeType === 1 ) { - jQuery.cleanData( getAll( node ) ); - } - - if ( node.parentNode ) { - if ( keepData && 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 i, l, srcElements, destElements, - clone = elem.cloneNode( true ), - inPage = jQuery.contains( elem.ownerDocument, elem ); - - // Fix IE cloning issues - if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && - !jQuery.isXMLDoc( elem ) ) { - - // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 - destElements = getAll( clone ); - srcElements = getAll( elem ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - fixInput( srcElements[ i ], destElements[ i ] ); - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - if ( deepDataAndEvents ) { - srcElements = srcElements || getAll( elem ); - destElements = destElements || getAll( clone ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - cloneCopyEvent( srcElements[ i ], destElements[ i ] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - // Return the cloned set - return clone; - }, - - cleanData: function( elems ) { - var data, elem, type, - special = jQuery.event.special, - i = 0; - - for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { - if ( acceptData( elem ) ) { - if ( ( data = elem[ dataPriv.expando ] ) ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - - // Support: Chrome <= 35-45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataPriv.expando ] = undefined; - } - if ( elem[ dataUser.expando ] ) { - - // Support: Chrome <= 35-45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataUser.expando ] = undefined; - } - } - } - } -} ); - -jQuery.fn.extend( { - - // 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().each( function() { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.textContent = value; - } - } ); - }, null, value, arguments.length ); - }, - - append: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.appendChild( elem ); - } - } ); - }, - - prepend: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.insertBefore( elem, target.firstChild ); - } - } ); - }, - - before: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - } ); - }, - - after: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - } ); - }, - - empty: function() { - var elem, - i = 0; - - for ( ; ( elem = this[ i ] ) != null; i++ ) { - if ( elem.nodeType === 1 ) { - - // Prevent memory leaks - jQuery.cleanData( getAll( elem, false ) ); - - // Remove any remaining nodes - elem.textContent = ""; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map( function() { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - } ); - }, - - html: function( value ) { - return access( this, function( value ) { - var elem = this[ 0 ] || {}, - i = 0, - l = this.length; - - if ( value === undefined && elem.nodeType === 1 ) { - return elem.innerHTML; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { - - value = jQuery.htmlPrefilter( value ); - - try { - for ( ; i < l; i++ ) { - elem = this[ i ] || {}; - - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch ( e ) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function() { - var ignored = []; - - // Make the changes, replacing each non-ignored context element with the new content - return domManip( this, arguments, function( elem ) { - var parent = this.parentNode; - - if ( jQuery.inArray( this, ignored ) < 0 ) { - jQuery.cleanData( getAll( this ) ); - if ( parent ) { - parent.replaceChild( elem, this ); - } - } - - // Force callback invocation - }, ignored ); - } -} ); - -jQuery.each( { - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1, - i = 0; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone( true ); - jQuery( insert[ i ] )[ original ]( elems ); - - // Support: QtWebKit - // .get() because push.apply(_, arraylike) throws - 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( "