From 3305b9d1a27a85445da8bf8697ef66f275509700 Mon Sep 17 00:00:00 2001 From: Jan Luca Naumann Date: Fri, 21 Sep 2018 12:45:05 +0200 Subject: [PATCH 1/5] Add plugin-bootstrap-select --- .../plugin-bootstrap-select-1.12.4/bower.json | 32 + .../composer.json | 23 + .../css/bootstrap-select.css | 300 +++ .../css/bootstrap-select.css.map | 1 + .../css/bootstrap-select.min.css | 6 + .../js/bootstrap-select.js | 1872 +++++++++++++++++ .../js/bootstrap-select.js.map | 1 + .../js/bootstrap-select.min.js | 9 + .../js/i18n/defaults-ar_AR.js | 49 + .../js/i18n/defaults-ar_AR.min.js | 12 + .../js/i18n/defaults-bg_BG.js | 44 + .../js/i18n/defaults-bg_BG.min.js | 7 + .../js/i18n/defaults-cro_CRO.js | 44 + .../js/i18n/defaults-cro_CRO.min.js | 7 + .../js/i18n/defaults-cs_CZ.js | 37 + .../js/i18n/defaults-cs_CZ.min.js | 7 + .../js/i18n/defaults-da_DK.js | 44 + .../js/i18n/defaults-da_DK.min.js | 7 + .../js/i18n/defaults-de_DE.js | 44 + .../js/i18n/defaults-de_DE.min.js | 7 + .../js/i18n/defaults-en_US.js | 44 + .../js/i18n/defaults-en_US.min.js | 7 + .../js/i18n/defaults-es_CL.js | 37 + .../js/i18n/defaults-es_CL.min.js | 7 + .../js/i18n/defaults-es_ES.js | 37 + .../js/i18n/defaults-es_ES.min.js | 7 + .../js/i18n/defaults-et_EE.js | 44 + .../js/i18n/defaults-et_EE.min.js | 7 + .../js/i18n/defaults-eu.js | 37 + .../js/i18n/defaults-eu.min.js | 7 + .../js/i18n/defaults-fa_IR.js | 37 + .../js/i18n/defaults-fa_IR.min.js | 7 + .../js/i18n/defaults-fi_FI.js | 44 + .../js/i18n/defaults-fi_FI.min.js | 7 + .../js/i18n/defaults-fr_FR.js | 44 + .../js/i18n/defaults-fr_FR.min.js | 7 + .../js/i18n/defaults-hu_HU.js | 44 + .../js/i18n/defaults-hu_HU.min.js | 7 + .../js/i18n/defaults-id_ID.js | 37 + .../js/i18n/defaults-id_ID.min.js | 7 + .../js/i18n/defaults-it_IT.js | 39 + .../js/i18n/defaults-it_IT.min.js | 7 + .../js/i18n/defaults-ja_JP.js | 37 + .../js/i18n/defaults-ja_JP.min.js | 7 + .../js/i18n/defaults-kh_KM.js | 44 + .../js/i18n/defaults-kh_KM.min.js | 7 + .../js/i18n/defaults-ko_KR.js | 44 + .../js/i18n/defaults-ko_KR.min.js | 7 + .../js/i18n/defaults-lt_LT.js | 44 + .../js/i18n/defaults-lt_LT.min.js | 7 + .../js/i18n/defaults-nb_NO.js | 44 + .../js/i18n/defaults-nb_NO.min.js | 7 + .../js/i18n/defaults-nl_NL.js | 37 + .../js/i18n/defaults-nl_NL.min.js | 7 + .../js/i18n/defaults-pl_PL.js | 37 + .../js/i18n/defaults-pl_PL.min.js | 7 + .../js/i18n/defaults-pt_BR.js | 37 + .../js/i18n/defaults-pt_BR.min.js | 7 + .../js/i18n/defaults-pt_PT.js | 37 + .../js/i18n/defaults-pt_PT.min.js | 7 + .../js/i18n/defaults-ro_RO.js | 38 + .../js/i18n/defaults-ro_RO.min.js | 7 + .../js/i18n/defaults-ru_RU.js | 38 + .../js/i18n/defaults-ru_RU.min.js | 7 + .../js/i18n/defaults-sk_SK.js | 37 + .../js/i18n/defaults-sk_SK.min.js | 7 + .../js/i18n/defaults-sl_SI.js | 42 + .../js/i18n/defaults-sl_SI.min.js | 7 + .../js/i18n/defaults-sv_SE.js | 44 + .../js/i18n/defaults-sv_SE.min.js | 7 + .../js/i18n/defaults-tr_TR.js | 44 + .../js/i18n/defaults-tr_TR.min.js | 7 + .../js/i18n/defaults-ua_UA.js | 37 + .../js/i18n/defaults-ua_UA.min.js | 7 + .../js/i18n/defaults-vi_VN.js | 44 + .../js/i18n/defaults-vi_VN.min.js | 7 + .../js/i18n/defaults-zh_CN.js | 37 + .../js/i18n/defaults-zh_CN.min.js | 7 + .../js/i18n/defaults-zh_TW.js | 37 + .../js/i18n/defaults-zh_TW.min.js | 7 + .../package.json | 66 + 81 files changed, 4032 insertions(+) create mode 100644 app/static/plugin-bootstrap-select-1.12.4/bower.json create mode 100644 app/static/plugin-bootstrap-select-1.12.4/composer.json create mode 100644 app/static/plugin-bootstrap-select-1.12.4/css/bootstrap-select.css create mode 100644 app/static/plugin-bootstrap-select-1.12.4/css/bootstrap-select.css.map create mode 100644 app/static/plugin-bootstrap-select-1.12.4/css/bootstrap-select.min.css create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/bootstrap-select.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/bootstrap-select.js.map create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/bootstrap-select.min.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ar_AR.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ar_AR.min.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-bg_BG.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-bg_BG.min.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-cro_CRO.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-cro_CRO.min.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-cs_CZ.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-cs_CZ.min.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-da_DK.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-da_DK.min.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-de_DE.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-de_DE.min.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-en_US.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-en_US.min.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-es_CL.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-es_CL.min.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-es_ES.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-es_ES.min.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-et_EE.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-et_EE.min.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-eu.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-eu.min.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-fa_IR.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-fa_IR.min.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-fi_FI.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-fi_FI.min.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-fr_FR.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-fr_FR.min.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-hu_HU.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-hu_HU.min.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-id_ID.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-id_ID.min.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-it_IT.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-it_IT.min.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ja_JP.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ja_JP.min.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-kh_KM.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-kh_KM.min.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ko_KR.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ko_KR.min.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-lt_LT.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-lt_LT.min.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-nb_NO.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-nb_NO.min.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-nl_NL.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-nl_NL.min.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-pl_PL.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-pl_PL.min.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-pt_BR.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-pt_BR.min.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-pt_PT.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-pt_PT.min.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ro_RO.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ro_RO.min.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ru_RU.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ru_RU.min.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-sk_SK.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-sk_SK.min.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-sl_SI.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-sl_SI.min.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-sv_SE.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-sv_SE.min.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-tr_TR.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-tr_TR.min.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ua_UA.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ua_UA.min.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-vi_VN.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-vi_VN.min.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-zh_CN.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-zh_CN.min.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-zh_TW.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-zh_TW.min.js create mode 100644 app/static/plugin-bootstrap-select-1.12.4/package.json diff --git a/app/static/plugin-bootstrap-select-1.12.4/bower.json b/app/static/plugin-bootstrap-select-1.12.4/bower.json new file mode 100644 index 0000000..3d176b8 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/bower.json @@ -0,0 +1,32 @@ +{ + "name": "bootstrap-select", + "main": [ + "less/bootstrap-select.less", + "dist/css/bootstrap-select.css", + "dist/js/bootstrap-select.js" + ], + "homepage": "http://silviomoreto.github.io/bootstrap-select", + "authors": [ + "silviomoreto" + ], + "keywords": [ + "form", + "bootstrap", + "select", + "replacement" + ], + "dependencies": { + "jquery": ">=1.8" + }, + "license": "MIT", + "ignore": [ + ".gitignore", + "CONTRIBUTING.md", + "Gruntfile.js", + "README.md", + "composer.json", + "package.json", + "test.html", + "docs" + ] +} diff --git a/app/static/plugin-bootstrap-select-1.12.4/composer.json b/app/static/plugin-bootstrap-select-1.12.4/composer.json new file mode 100644 index 0000000..5d18612 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/composer.json @@ -0,0 +1,23 @@ +{ + "name": "bootstrap-select/bootstrap-select", + "description": "Bootstrap-select is a jQuery plugin that utilizes Bootstrap's dropdown.js to style and bring additional functionality to standard select elements.", + "keywords": [ + "form", + "bootstrap", + "select", + "replacement" + ], + "homepage": "http://silviomoreto.github.io/bootstrap-select", + "version": "1.12.4", + "authors": [ + { + "name": "Silvio Moreto", + "homepage": "https://github.com/silviomoreto" + } + ], + "license": "MIT", + "suggest": { + "components/jquery": ">=1.8", + "twbs/bootstrap": "~3.0.0" + } +} diff --git a/app/static/plugin-bootstrap-select-1.12.4/css/bootstrap-select.css b/app/static/plugin-bootstrap-select-1.12.4/css/bootstrap-select.css new file mode 100644 index 0000000..9908156 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/css/bootstrap-select.css @@ -0,0 +1,300 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ + +select.bs-select-hidden, +select.selectpicker { + display: none !important; +} +.bootstrap-select { + width: 220px \0; + /*IE9 and below*/ +} +.bootstrap-select > .dropdown-toggle { + width: 100%; + padding-right: 25px; + z-index: 1; +} +.bootstrap-select > .dropdown-toggle.bs-placeholder, +.bootstrap-select > .dropdown-toggle.bs-placeholder:hover, +.bootstrap-select > .dropdown-toggle.bs-placeholder:focus, +.bootstrap-select > .dropdown-toggle.bs-placeholder:active { + color: #999; +} +.bootstrap-select > select { + position: absolute !important; + bottom: 0; + left: 50%; + display: block !important; + width: 0.5px !important; + height: 100% !important; + padding: 0 !important; + opacity: 0 !important; + border: none; +} +.bootstrap-select > select.mobile-device { + top: 0; + left: 0; + display: block !important; + width: 100% !important; + z-index: 2; +} +.has-error .bootstrap-select .dropdown-toggle, +.error .bootstrap-select .dropdown-toggle { + border-color: #b94a48; +} +.bootstrap-select.fit-width { + width: auto !important; +} +.bootstrap-select:not([class*="col-"]):not([class*="form-control"]):not(.input-group-btn) { + width: 220px; +} +.bootstrap-select .dropdown-toggle:focus { + outline: thin dotted #333333 !important; + outline: 5px auto -webkit-focus-ring-color !important; + outline-offset: -2px; +} +.bootstrap-select.form-control { + margin-bottom: 0; + padding: 0; + border: none; +} +.bootstrap-select.form-control:not([class*="col-"]) { + width: 100%; +} +.bootstrap-select.form-control.input-group-btn { + z-index: auto; +} +.bootstrap-select.form-control.input-group-btn:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.bootstrap-select.btn-group:not(.input-group-btn), +.bootstrap-select.btn-group[class*="col-"] { + float: none; + display: inline-block; + margin-left: 0; +} +.bootstrap-select.btn-group.dropdown-menu-right, +.bootstrap-select.btn-group[class*="col-"].dropdown-menu-right, +.row .bootstrap-select.btn-group[class*="col-"].dropdown-menu-right { + float: right; +} +.form-inline .bootstrap-select.btn-group, +.form-horizontal .bootstrap-select.btn-group, +.form-group .bootstrap-select.btn-group { + margin-bottom: 0; +} +.form-group-lg .bootstrap-select.btn-group.form-control, +.form-group-sm .bootstrap-select.btn-group.form-control { + padding: 0; +} +.form-group-lg .bootstrap-select.btn-group.form-control .dropdown-toggle, +.form-group-sm .bootstrap-select.btn-group.form-control .dropdown-toggle { + height: 100%; + font-size: inherit; + line-height: inherit; + border-radius: inherit; +} +.form-inline .bootstrap-select.btn-group .form-control { + width: 100%; +} +.bootstrap-select.btn-group.disabled, +.bootstrap-select.btn-group > .disabled { + cursor: not-allowed; +} +.bootstrap-select.btn-group.disabled:focus, +.bootstrap-select.btn-group > .disabled:focus { + outline: none !important; +} +.bootstrap-select.btn-group.bs-container { + position: absolute; + height: 0 !important; + padding: 0 !important; +} +.bootstrap-select.btn-group.bs-container .dropdown-menu { + z-index: 1060; +} +.bootstrap-select.btn-group .dropdown-toggle .filter-option { + display: inline-block; + overflow: hidden; + width: 100%; + text-align: left; +} +.bootstrap-select.btn-group .dropdown-toggle .caret { + position: absolute; + top: 50%; + right: 12px; + margin-top: -2px; + vertical-align: middle; +} +.bootstrap-select.btn-group[class*="col-"] .dropdown-toggle { + width: 100%; +} +.bootstrap-select.btn-group .dropdown-menu { + min-width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.bootstrap-select.btn-group .dropdown-menu.inner { + position: static; + float: none; + border: 0; + padding: 0; + margin: 0; + border-radius: 0; + -webkit-box-shadow: none; + box-shadow: none; +} +.bootstrap-select.btn-group .dropdown-menu li { + position: relative; +} +.bootstrap-select.btn-group .dropdown-menu li.active small { + color: #fff; +} +.bootstrap-select.btn-group .dropdown-menu li.disabled a { + cursor: not-allowed; +} +.bootstrap-select.btn-group .dropdown-menu li a { + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.bootstrap-select.btn-group .dropdown-menu li a.opt { + position: relative; + padding-left: 2.25em; +} +.bootstrap-select.btn-group .dropdown-menu li a span.check-mark { + display: none; +} +.bootstrap-select.btn-group .dropdown-menu li a span.text { + display: inline-block; +} +.bootstrap-select.btn-group .dropdown-menu li small { + padding-left: 0.5em; +} +.bootstrap-select.btn-group .dropdown-menu .notify { + position: absolute; + bottom: 5px; + width: 96%; + margin: 0 2%; + min-height: 26px; + padding: 3px 5px; + background: #f5f5f5; + border: 1px solid #e3e3e3; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + pointer-events: none; + opacity: 0.9; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.bootstrap-select.btn-group .no-results { + padding: 3px; + background: #f5f5f5; + margin: 0 5px; + white-space: nowrap; +} +.bootstrap-select.btn-group.fit-width .dropdown-toggle .filter-option { + position: static; +} +.bootstrap-select.btn-group.fit-width .dropdown-toggle .caret { + position: static; + top: auto; + margin-top: -1px; +} +.bootstrap-select.btn-group.show-tick .dropdown-menu li.selected a span.check-mark { + position: absolute; + display: inline-block; + right: 15px; + margin-top: 5px; +} +.bootstrap-select.btn-group.show-tick .dropdown-menu li a span.text { + margin-right: 34px; +} +.bootstrap-select.show-menu-arrow.open > .dropdown-toggle { + z-index: 1061; +} +.bootstrap-select.show-menu-arrow .dropdown-toggle:before { + content: ''; + border-left: 7px solid transparent; + border-right: 7px solid transparent; + border-bottom: 7px solid rgba(204, 204, 204, 0.2); + position: absolute; + bottom: -4px; + left: 9px; + display: none; +} +.bootstrap-select.show-menu-arrow .dropdown-toggle:after { + content: ''; + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-bottom: 6px solid white; + position: absolute; + bottom: -4px; + left: 10px; + display: none; +} +.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:before { + bottom: auto; + top: -3px; + border-top: 7px solid rgba(204, 204, 204, 0.2); + border-bottom: 0; +} +.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:after { + bottom: auto; + top: -3px; + border-top: 6px solid white; + border-bottom: 0; +} +.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:before { + right: 12px; + left: auto; +} +.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:after { + right: 13px; + left: auto; +} +.bootstrap-select.show-menu-arrow.open > .dropdown-toggle:before, +.bootstrap-select.show-menu-arrow.open > .dropdown-toggle:after { + display: block; +} +.bs-searchbox, +.bs-actionsbox, +.bs-donebutton { + padding: 4px 8px; +} +.bs-actionsbox { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.bs-actionsbox .btn-group button { + width: 50%; +} +.bs-donebutton { + float: left; + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.bs-donebutton .btn-group button { + width: 100%; +} +.bs-searchbox + .bs-actionsbox { + padding: 0 8px 4px; +} +.bs-searchbox .form-control { + margin-bottom: 0; + width: 100%; + float: none; +} +/*# sourceMappingURL=bootstrap-select.css.map */ \ No newline at end of file diff --git a/app/static/plugin-bootstrap-select-1.12.4/css/bootstrap-select.css.map b/app/static/plugin-bootstrap-select-1.12.4/css/bootstrap-select.css.map new file mode 100644 index 0000000..53dd5db --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/css/bootstrap-select.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["less/bootstrap-select.less","bootstrap-select.css"],"names":[],"mappings":"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","file":"bootstrap-select.css","sourcesContent":["@import \"variables\";\n\n// Mixins\n.cursor-disabled() {\n cursor: not-allowed;\n}\n\n// Rules\nselect.bs-select-hidden,\nselect.selectpicker {\n display: none !important;\n}\n\n.bootstrap-select {\n width: 220px \\0; /*IE9 and below*/\n\n // The selectpicker button\n > .dropdown-toggle {\n width: 100%;\n padding-right: 25px;\n z-index: 1;\n\n &.bs-placeholder,\n &.bs-placeholder:hover,\n &.bs-placeholder:focus,\n &.bs-placeholder:active { color: @input-color-placeholder; }\n }\n\n > select {\n position: absolute !important;\n bottom: 0;\n left: 50%;\n display: block !important;\n width: 0.5px !important;\n height: 100% !important;\n padding: 0 !important;\n opacity: 0 !important;\n border: none;\n\n &.mobile-device {\n top: 0;\n left: 0;\n display: block !important;\n width: 100% !important;\n z-index: 2;\n }\n }\n\n // Error display\n .has-error & .dropdown-toggle,\n .error & .dropdown-toggle {\n border-color: @color-red-error;\n }\n\n &.fit-width {\n width: auto !important;\n }\n\n &:not([class*=\"col-\"]):not([class*=\"form-control\"]):not(.input-group-btn) {\n width: @width-default;\n }\n\n .dropdown-toggle:focus {\n outline: thin dotted #333333 !important;\n outline: 5px auto -webkit-focus-ring-color !important;\n outline-offset: -2px;\n }\n}\n\n.bootstrap-select.form-control {\n margin-bottom: 0;\n padding: 0;\n border: none;\n\n &:not([class*=\"col-\"]) {\n width: 100%;\n }\n\n &.input-group-btn {\n z-index: auto;\n\n &:not(:first-child):not(:last-child) {\n > .btn {\n border-radius: 0;\n }\n }\n }\n}\n\n// The selectpicker components\n.bootstrap-select.btn-group {\n &:not(.input-group-btn),\n &[class*=\"col-\"] {\n float: none;\n display: inline-block;\n margin-left: 0;\n }\n\n // Forces the pull to the right, if necessary\n &,\n &[class*=\"col-\"],\n .row &[class*=\"col-\"] {\n &.dropdown-menu-right {\n float: right;\n }\n }\n\n .form-inline &,\n .form-horizontal &,\n .form-group & {\n margin-bottom: 0;\n }\n\n .form-group-lg &.form-control,\n .form-group-sm &.form-control {\n padding: 0;\n\n .dropdown-toggle {\n height: 100%;\n font-size: inherit;\n line-height: inherit;\n border-radius: inherit;\n }\n }\n\n // Set the width of the live search (and any other form control within an inline form)\n // see https://github.com/silviomoreto/bootstrap-select/issues/685\n .form-inline & .form-control {\n width: 100%;\n }\n\n &.disabled,\n > .disabled {\n .cursor-disabled();\n\n &:focus {\n outline: none !important;\n }\n }\n\n &.bs-container {\n position: absolute;\n height: 0 !important;\n padding: 0 !important;\n \n .dropdown-menu {\n z-index: @zindex-select-dropdown;\n }\n }\n\n // The selectpicker button\n .dropdown-toggle {\n .filter-option {\n display: inline-block;\n overflow: hidden;\n width: 100%;\n text-align: left;\n }\n\n .caret {\n position: absolute;\n top: 50%;\n right: 12px;\n margin-top: -2px;\n vertical-align: middle;\n }\n }\n\n &[class*=\"col-\"] .dropdown-toggle {\n width: 100%;\n }\n\n // The selectpicker dropdown\n .dropdown-menu {\n min-width: 100%;\n box-sizing: border-box;\n\n &.inner {\n position: static;\n float: none;\n border: 0;\n padding: 0;\n margin: 0;\n border-radius: 0;\n box-shadow: none;\n }\n\n li {\n position: relative;\n\n &.active small {\n color: #fff;\n }\n\n &.disabled a {\n .cursor-disabled();\n }\n\n a {\n cursor: pointer;\n user-select: none;\n\n &.opt {\n position: relative;\n padding-left: 2.25em;\n }\n\n span.check-mark {\n display: none;\n }\n\n span.text {\n display: inline-block;\n }\n }\n\n small {\n padding-left: 0.5em;\n }\n }\n\n .notify {\n position: absolute;\n bottom: 5px;\n width: 96%;\n margin: 0 2%;\n min-height: 26px;\n padding: 3px 5px;\n background: rgb(245, 245, 245);\n border: 1px solid rgb(227, 227, 227);\n box-shadow: inset 0 1px 1px fade(rgb(0, 0, 0), 5%);\n pointer-events: none;\n opacity: 0.9;\n box-sizing: border-box;\n }\n }\n\n .no-results {\n padding: 3px;\n background: #f5f5f5;\n margin: 0 5px;\n white-space: nowrap;\n }\n\n &.fit-width .dropdown-toggle {\n .filter-option {\n position: static;\n }\n\n .caret {\n position: static;\n top: auto;\n margin-top: -1px;\n }\n }\n\n &.show-tick .dropdown-menu li {\n &.selected a span.check-mark {\n position: absolute;\n display: inline-block;\n right: 15px;\n margin-top: 5px;\n }\n\n a span.text {\n margin-right: 34px;\n }\n }\n}\n\n.bootstrap-select.show-menu-arrow {\n &.open > .dropdown-toggle {\n z-index: (@zindex-select-dropdown + 1);\n }\n\n .dropdown-toggle {\n &:before {\n content: '';\n border-left: 7px solid transparent;\n border-right: 7px solid transparent;\n border-bottom: 7px solid @color-grey-arrow;\n position: absolute;\n bottom: -4px;\n left: 9px;\n display: none;\n }\n\n &:after {\n content: '';\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-bottom: 6px solid white;\n position: absolute;\n bottom: -4px;\n left: 10px;\n display: none;\n }\n }\n\n &.dropup .dropdown-toggle {\n &:before {\n bottom: auto;\n top: -3px;\n border-top: 7px solid @color-grey-arrow;\n border-bottom: 0;\n }\n\n &:after {\n bottom: auto;\n top: -3px;\n border-top: 6px solid white;\n border-bottom: 0;\n }\n }\n\n &.pull-right .dropdown-toggle {\n &:before {\n right: 12px;\n left: auto;\n }\n\n &:after {\n right: 13px;\n left: auto;\n }\n }\n\n &.open > .dropdown-toggle {\n &:before,\n &:after {\n display: block;\n }\n }\n}\n\n.bs-searchbox,\n.bs-actionsbox,\n.bs-donebutton {\n padding: 4px 8px;\n}\n\n.bs-actionsbox {\n width: 100%;\n box-sizing: border-box;\n\n & .btn-group button {\n width: 50%;\n }\n}\n\n.bs-donebutton {\n float: left;\n width: 100%;\n box-sizing: border-box;\n\n & .btn-group button {\n width: 100%;\n }\n}\n\n.bs-searchbox {\n & + .bs-actionsbox {\n padding: 0 8px 4px;\n }\n\n & .form-control {\n margin-bottom: 0;\n width: 100%;\n float: none;\n }\n}\n","select.bs-select-hidden,\nselect.selectpicker {\n display: none !important;\n}\n.bootstrap-select {\n width: 220px \\0;\n /*IE9 and below*/\n}\n.bootstrap-select > .dropdown-toggle {\n width: 100%;\n padding-right: 25px;\n z-index: 1;\n}\n.bootstrap-select > .dropdown-toggle.bs-placeholder,\n.bootstrap-select > .dropdown-toggle.bs-placeholder:hover,\n.bootstrap-select > .dropdown-toggle.bs-placeholder:focus,\n.bootstrap-select > .dropdown-toggle.bs-placeholder:active {\n color: #999;\n}\n.bootstrap-select > select {\n position: absolute !important;\n bottom: 0;\n left: 50%;\n display: block !important;\n width: 0.5px !important;\n height: 100% !important;\n padding: 0 !important;\n opacity: 0 !important;\n border: none;\n}\n.bootstrap-select > select.mobile-device {\n top: 0;\n left: 0;\n display: block !important;\n width: 100% !important;\n z-index: 2;\n}\n.has-error .bootstrap-select .dropdown-toggle,\n.error .bootstrap-select .dropdown-toggle {\n border-color: #b94a48;\n}\n.bootstrap-select.fit-width {\n width: auto !important;\n}\n.bootstrap-select:not([class*=\"col-\"]):not([class*=\"form-control\"]):not(.input-group-btn) {\n width: 220px;\n}\n.bootstrap-select .dropdown-toggle:focus {\n outline: thin dotted #333333 !important;\n outline: 5px auto -webkit-focus-ring-color !important;\n outline-offset: -2px;\n}\n.bootstrap-select.form-control {\n margin-bottom: 0;\n padding: 0;\n border: none;\n}\n.bootstrap-select.form-control:not([class*=\"col-\"]) {\n width: 100%;\n}\n.bootstrap-select.form-control.input-group-btn {\n z-index: auto;\n}\n.bootstrap-select.form-control.input-group-btn:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.bootstrap-select.btn-group:not(.input-group-btn),\n.bootstrap-select.btn-group[class*=\"col-\"] {\n float: none;\n display: inline-block;\n margin-left: 0;\n}\n.bootstrap-select.btn-group.dropdown-menu-right,\n.bootstrap-select.btn-group[class*=\"col-\"].dropdown-menu-right,\n.row .bootstrap-select.btn-group[class*=\"col-\"].dropdown-menu-right {\n float: right;\n}\n.form-inline .bootstrap-select.btn-group,\n.form-horizontal .bootstrap-select.btn-group,\n.form-group .bootstrap-select.btn-group {\n margin-bottom: 0;\n}\n.form-group-lg .bootstrap-select.btn-group.form-control,\n.form-group-sm .bootstrap-select.btn-group.form-control {\n padding: 0;\n}\n.form-group-lg .bootstrap-select.btn-group.form-control .dropdown-toggle,\n.form-group-sm .bootstrap-select.btn-group.form-control .dropdown-toggle {\n height: 100%;\n font-size: inherit;\n line-height: inherit;\n border-radius: inherit;\n}\n.form-inline .bootstrap-select.btn-group .form-control {\n width: 100%;\n}\n.bootstrap-select.btn-group.disabled,\n.bootstrap-select.btn-group > .disabled {\n cursor: not-allowed;\n}\n.bootstrap-select.btn-group.disabled:focus,\n.bootstrap-select.btn-group > .disabled:focus {\n outline: none !important;\n}\n.bootstrap-select.btn-group.bs-container {\n position: absolute;\n height: 0 !important;\n padding: 0 !important;\n}\n.bootstrap-select.btn-group.bs-container .dropdown-menu {\n z-index: 1060;\n}\n.bootstrap-select.btn-group .dropdown-toggle .filter-option {\n display: inline-block;\n overflow: hidden;\n width: 100%;\n text-align: left;\n}\n.bootstrap-select.btn-group .dropdown-toggle .caret {\n position: absolute;\n top: 50%;\n right: 12px;\n margin-top: -2px;\n vertical-align: middle;\n}\n.bootstrap-select.btn-group[class*=\"col-\"] .dropdown-toggle {\n width: 100%;\n}\n.bootstrap-select.btn-group .dropdown-menu {\n min-width: 100%;\n box-sizing: border-box;\n}\n.bootstrap-select.btn-group .dropdown-menu.inner {\n position: static;\n float: none;\n border: 0;\n padding: 0;\n margin: 0;\n border-radius: 0;\n box-shadow: none;\n}\n.bootstrap-select.btn-group .dropdown-menu li {\n position: relative;\n}\n.bootstrap-select.btn-group .dropdown-menu li.active small {\n color: #fff;\n}\n.bootstrap-select.btn-group .dropdown-menu li.disabled a {\n cursor: not-allowed;\n}\n.bootstrap-select.btn-group .dropdown-menu li a {\n cursor: pointer;\n user-select: none;\n}\n.bootstrap-select.btn-group .dropdown-menu li a.opt {\n position: relative;\n padding-left: 2.25em;\n}\n.bootstrap-select.btn-group .dropdown-menu li a span.check-mark {\n display: none;\n}\n.bootstrap-select.btn-group .dropdown-menu li a span.text {\n display: inline-block;\n}\n.bootstrap-select.btn-group .dropdown-menu li small {\n padding-left: 0.5em;\n}\n.bootstrap-select.btn-group .dropdown-menu .notify {\n position: absolute;\n bottom: 5px;\n width: 96%;\n margin: 0 2%;\n min-height: 26px;\n padding: 3px 5px;\n background: #f5f5f5;\n border: 1px solid #e3e3e3;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n pointer-events: none;\n opacity: 0.9;\n box-sizing: border-box;\n}\n.bootstrap-select.btn-group .no-results {\n padding: 3px;\n background: #f5f5f5;\n margin: 0 5px;\n white-space: nowrap;\n}\n.bootstrap-select.btn-group.fit-width .dropdown-toggle .filter-option {\n position: static;\n}\n.bootstrap-select.btn-group.fit-width .dropdown-toggle .caret {\n position: static;\n top: auto;\n margin-top: -1px;\n}\n.bootstrap-select.btn-group.show-tick .dropdown-menu li.selected a span.check-mark {\n position: absolute;\n display: inline-block;\n right: 15px;\n margin-top: 5px;\n}\n.bootstrap-select.btn-group.show-tick .dropdown-menu li a span.text {\n margin-right: 34px;\n}\n.bootstrap-select.show-menu-arrow.open > .dropdown-toggle {\n z-index: 1061;\n}\n.bootstrap-select.show-menu-arrow .dropdown-toggle:before {\n content: '';\n border-left: 7px solid transparent;\n border-right: 7px solid transparent;\n border-bottom: 7px solid rgba(204, 204, 204, 0.2);\n position: absolute;\n bottom: -4px;\n left: 9px;\n display: none;\n}\n.bootstrap-select.show-menu-arrow .dropdown-toggle:after {\n content: '';\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-bottom: 6px solid white;\n position: absolute;\n bottom: -4px;\n left: 10px;\n display: none;\n}\n.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:before {\n bottom: auto;\n top: -3px;\n border-top: 7px solid rgba(204, 204, 204, 0.2);\n border-bottom: 0;\n}\n.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:after {\n bottom: auto;\n top: -3px;\n border-top: 6px solid white;\n border-bottom: 0;\n}\n.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:before {\n right: 12px;\n left: auto;\n}\n.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:after {\n right: 13px;\n left: auto;\n}\n.bootstrap-select.show-menu-arrow.open > .dropdown-toggle:before,\n.bootstrap-select.show-menu-arrow.open > .dropdown-toggle:after {\n display: block;\n}\n.bs-searchbox,\n.bs-actionsbox,\n.bs-donebutton {\n padding: 4px 8px;\n}\n.bs-actionsbox {\n width: 100%;\n box-sizing: border-box;\n}\n.bs-actionsbox .btn-group button {\n width: 50%;\n}\n.bs-donebutton {\n float: left;\n width: 100%;\n box-sizing: border-box;\n}\n.bs-donebutton .btn-group button {\n width: 100%;\n}\n.bs-searchbox + .bs-actionsbox {\n padding: 0 8px 4px;\n}\n.bs-searchbox .form-control {\n margin-bottom: 0;\n width: 100%;\n float: none;\n}\n/*# sourceMappingURL=bootstrap-select.css.map */"]} \ No newline at end of file diff --git a/app/static/plugin-bootstrap-select-1.12.4/css/bootstrap-select.min.css b/app/static/plugin-bootstrap-select-1.12.4/css/bootstrap-select.min.css new file mode 100644 index 0000000..9d96ebb --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/css/bootstrap-select.min.css @@ -0,0 +1,6 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */select.bs-select-hidden,select.selectpicker{display:none!important}.bootstrap-select{width:220px\9}.bootstrap-select>.dropdown-toggle{width:100%;padding-right:25px;z-index:1}.bootstrap-select>.dropdown-toggle.bs-placeholder,.bootstrap-select>.dropdown-toggle.bs-placeholder:active,.bootstrap-select>.dropdown-toggle.bs-placeholder:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder:hover{color:#999}.bootstrap-select>select{position:absolute!important;bottom:0;left:50%;display:block!important;width:.5px!important;height:100%!important;padding:0!important;opacity:0!important;border:none}.bootstrap-select>select.mobile-device{top:0;left:0;display:block!important;width:100%!important;z-index:2}.error .bootstrap-select .dropdown-toggle,.has-error .bootstrap-select .dropdown-toggle{border-color:#b94a48}.bootstrap-select.fit-width{width:auto!important}.bootstrap-select:not([class*=col-]):not([class*=form-control]):not(.input-group-btn){width:220px}.bootstrap-select .dropdown-toggle:focus{outline:thin dotted #333!important;outline:5px auto -webkit-focus-ring-color!important;outline-offset:-2px}.bootstrap-select.form-control{margin-bottom:0;padding:0;border:none}.bootstrap-select.form-control:not([class*=col-]){width:100%}.bootstrap-select.form-control.input-group-btn{z-index:auto}.bootstrap-select.form-control.input-group-btn:not(:first-child):not(:last-child)>.btn{border-radius:0}.bootstrap-select.btn-group:not(.input-group-btn),.bootstrap-select.btn-group[class*=col-]{float:none;display:inline-block;margin-left:0}.bootstrap-select.btn-group.dropdown-menu-right,.bootstrap-select.btn-group[class*=col-].dropdown-menu-right,.row .bootstrap-select.btn-group[class*=col-].dropdown-menu-right{float:right}.form-group .bootstrap-select.btn-group,.form-horizontal .bootstrap-select.btn-group,.form-inline .bootstrap-select.btn-group{margin-bottom:0}.form-group-lg .bootstrap-select.btn-group.form-control,.form-group-sm .bootstrap-select.btn-group.form-control{padding:0}.form-group-lg .bootstrap-select.btn-group.form-control .dropdown-toggle,.form-group-sm .bootstrap-select.btn-group.form-control .dropdown-toggle{height:100%;font-size:inherit;line-height:inherit;border-radius:inherit}.form-inline .bootstrap-select.btn-group .form-control{width:100%}.bootstrap-select.btn-group.disabled,.bootstrap-select.btn-group>.disabled{cursor:not-allowed}.bootstrap-select.btn-group.disabled:focus,.bootstrap-select.btn-group>.disabled:focus{outline:0!important}.bootstrap-select.btn-group.bs-container{position:absolute;height:0!important;padding:0!important}.bootstrap-select.btn-group.bs-container .dropdown-menu{z-index:1060}.bootstrap-select.btn-group .dropdown-toggle .filter-option{display:inline-block;overflow:hidden;width:100%;text-align:left}.bootstrap-select.btn-group .dropdown-toggle .caret{position:absolute;top:50%;right:12px;margin-top:-2px;vertical-align:middle}.bootstrap-select.btn-group[class*=col-] .dropdown-toggle{width:100%}.bootstrap-select.btn-group .dropdown-menu{min-width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bootstrap-select.btn-group .dropdown-menu.inner{position:static;float:none;border:0;padding:0;margin:0;border-radius:0;-webkit-box-shadow:none;box-shadow:none}.bootstrap-select.btn-group .dropdown-menu li{position:relative}.bootstrap-select.btn-group .dropdown-menu li.active small{color:#fff}.bootstrap-select.btn-group .dropdown-menu li.disabled a{cursor:not-allowed}.bootstrap-select.btn-group .dropdown-menu li a{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.bootstrap-select.btn-group .dropdown-menu li a.opt{position:relative;padding-left:2.25em}.bootstrap-select.btn-group .dropdown-menu li a span.check-mark{display:none}.bootstrap-select.btn-group .dropdown-menu li a span.text{display:inline-block}.bootstrap-select.btn-group .dropdown-menu li small{padding-left:.5em}.bootstrap-select.btn-group .dropdown-menu .notify{position:absolute;bottom:5px;width:96%;margin:0 2%;min-height:26px;padding:3px 5px;background:#f5f5f5;border:1px solid #e3e3e3;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05);pointer-events:none;opacity:.9;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bootstrap-select.btn-group .no-results{padding:3px;background:#f5f5f5;margin:0 5px;white-space:nowrap}.bootstrap-select.btn-group.fit-width .dropdown-toggle .filter-option{position:static}.bootstrap-select.btn-group.fit-width .dropdown-toggle .caret{position:static;top:auto;margin-top:-1px}.bootstrap-select.btn-group.show-tick .dropdown-menu li.selected a span.check-mark{position:absolute;display:inline-block;right:15px;margin-top:5px}.bootstrap-select.btn-group.show-tick .dropdown-menu li a span.text{margin-right:34px}.bootstrap-select.show-menu-arrow.open>.dropdown-toggle{z-index:1061}.bootstrap-select.show-menu-arrow .dropdown-toggle:before{content:'';border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid rgba(204,204,204,.2);position:absolute;bottom:-4px;left:9px;display:none}.bootstrap-select.show-menu-arrow .dropdown-toggle:after{content:'';border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute;bottom:-4px;left:10px;display:none}.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:before{bottom:auto;top:-3px;border-top:7px solid rgba(204,204,204,.2);border-bottom:0}.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:after{bottom:auto;top:-3px;border-top:6px solid #fff;border-bottom:0}.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:before{right:12px;left:auto}.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:after{right:13px;left:auto}.bootstrap-select.show-menu-arrow.open>.dropdown-toggle:after,.bootstrap-select.show-menu-arrow.open>.dropdown-toggle:before{display:block}.bs-actionsbox,.bs-donebutton,.bs-searchbox{padding:4px 8px}.bs-actionsbox{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bs-actionsbox .btn-group button{width:50%}.bs-donebutton{float:left;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bs-donebutton .btn-group button{width:100%}.bs-searchbox+.bs-actionsbox{padding:0 8px 4px}.bs-searchbox .form-control{margin-bottom:0;width:100%;float:none} \ No newline at end of file diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/bootstrap-select.js b/app/static/plugin-bootstrap-select-1.12.4/js/bootstrap-select.js new file mode 100644 index 0000000..6d38250 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/bootstrap-select.js @@ -0,0 +1,1872 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module unless amdModuleId is set + define(["jquery"], function (a0) { + return (factory(a0)); + }); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +}(this, function (jQuery) { + +(function ($) { + 'use strict'; + + // + if (!String.prototype.includes) { + (function () { + 'use strict'; // needed to support `apply`/`call` with `undefined`/`null` + var toString = {}.toString; + var defineProperty = (function () { + // IE 8 only supports `Object.defineProperty` on DOM elements + try { + var object = {}; + var $defineProperty = Object.defineProperty; + var result = $defineProperty(object, object, object) && $defineProperty; + } catch (error) { + } + return result; + }()); + var indexOf = ''.indexOf; + var includes = function (search) { + if (this == null) { + throw new TypeError(); + } + var string = String(this); + if (search && toString.call(search) == '[object RegExp]') { + throw new TypeError(); + } + var stringLength = string.length; + var searchString = String(search); + var searchLength = searchString.length; + var position = arguments.length > 1 ? arguments[1] : undefined; + // `ToInteger` + var pos = position ? Number(position) : 0; + if (pos != pos) { // better `isNaN` + pos = 0; + } + var start = Math.min(Math.max(pos, 0), stringLength); + // Avoid the `indexOf` call if no match is possible + if (searchLength + start > stringLength) { + return false; + } + return indexOf.call(string, searchString, pos) != -1; + }; + if (defineProperty) { + defineProperty(String.prototype, 'includes', { + 'value': includes, + 'configurable': true, + 'writable': true + }); + } else { + String.prototype.includes = includes; + } + }()); + } + + if (!String.prototype.startsWith) { + (function () { + 'use strict'; // needed to support `apply`/`call` with `undefined`/`null` + var defineProperty = (function () { + // IE 8 only supports `Object.defineProperty` on DOM elements + try { + var object = {}; + var $defineProperty = Object.defineProperty; + var result = $defineProperty(object, object, object) && $defineProperty; + } catch (error) { + } + return result; + }()); + var toString = {}.toString; + var startsWith = function (search) { + if (this == null) { + throw new TypeError(); + } + var string = String(this); + if (search && toString.call(search) == '[object RegExp]') { + throw new TypeError(); + } + var stringLength = string.length; + var searchString = String(search); + var searchLength = searchString.length; + var position = arguments.length > 1 ? arguments[1] : undefined; + // `ToInteger` + var pos = position ? Number(position) : 0; + if (pos != pos) { // better `isNaN` + pos = 0; + } + var start = Math.min(Math.max(pos, 0), stringLength); + // Avoid the `indexOf` call if no match is possible + if (searchLength + start > stringLength) { + return false; + } + var index = -1; + while (++index < searchLength) { + if (string.charCodeAt(start + index) != searchString.charCodeAt(index)) { + return false; + } + } + return true; + }; + if (defineProperty) { + defineProperty(String.prototype, 'startsWith', { + 'value': startsWith, + 'configurable': true, + 'writable': true + }); + } else { + String.prototype.startsWith = startsWith; + } + }()); + } + + if (!Object.keys) { + Object.keys = function ( + o, // object + k, // key + r // result array + ){ + // initialize object and result + r=[]; + // iterate over object keys + for (k in o) + // fill result array with non-prototypical keys + r.hasOwnProperty.call(o, k) && r.push(k); + // return result + return r; + }; + } + + // set data-selected on select element if the value has been programmatically selected + // prior to initialization of bootstrap-select + // * consider removing or replacing an alternative method * + var valHooks = { + useDefault: false, + _set: $.valHooks.select.set + }; + + $.valHooks.select.set = function(elem, value) { + if (value && !valHooks.useDefault) $(elem).data('selected', true); + + return valHooks._set.apply(this, arguments); + }; + + var changed_arguments = null; + + var EventIsSupported = (function() { + try { + new Event('change'); + return true; + } catch (e) { + return false; + } + })(); + + $.fn.triggerNative = function (eventName) { + var el = this[0], + event; + + if (el.dispatchEvent) { // for modern browsers & IE9+ + if (EventIsSupported) { + // For modern browsers + event = new Event(eventName, { + bubbles: true + }); + } else { + // For IE since it doesn't support Event constructor + event = document.createEvent('Event'); + event.initEvent(eventName, true, false); + } + + el.dispatchEvent(event); + } else if (el.fireEvent) { // for IE8 + event = document.createEventObject(); + event.eventType = eventName; + el.fireEvent('on' + eventName, event); + } else { + // fall back to jQuery.trigger + this.trigger(eventName); + } + }; + // + + // Case insensitive contains search + $.expr.pseudos.icontains = function (obj, index, meta) { + var $obj = $(obj).find('a'); + var haystack = ($obj.data('tokens') || $obj.text()).toString().toUpperCase(); + return haystack.includes(meta[3].toUpperCase()); + }; + + // Case insensitive begins search + $.expr.pseudos.ibegins = function (obj, index, meta) { + var $obj = $(obj).find('a'); + var haystack = ($obj.data('tokens') || $obj.text()).toString().toUpperCase(); + return haystack.startsWith(meta[3].toUpperCase()); + }; + + // Case and accent insensitive contains search + $.expr.pseudos.aicontains = function (obj, index, meta) { + var $obj = $(obj).find('a'); + var haystack = ($obj.data('tokens') || $obj.data('normalizedText') || $obj.text()).toString().toUpperCase(); + return haystack.includes(meta[3].toUpperCase()); + }; + + // Case and accent insensitive begins search + $.expr.pseudos.aibegins = function (obj, index, meta) { + var $obj = $(obj).find('a'); + var haystack = ($obj.data('tokens') || $obj.data('normalizedText') || $obj.text()).toString().toUpperCase(); + return haystack.startsWith(meta[3].toUpperCase()); + }; + + /** + * Remove all diatrics from the given text. + * @access private + * @param {String} text + * @returns {String} + */ + function normalizeToBase(text) { + var rExps = [ + {re: /[\xC0-\xC6]/g, ch: "A"}, + {re: /[\xE0-\xE6]/g, ch: "a"}, + {re: /[\xC8-\xCB]/g, ch: "E"}, + {re: /[\xE8-\xEB]/g, ch: "e"}, + {re: /[\xCC-\xCF]/g, ch: "I"}, + {re: /[\xEC-\xEF]/g, ch: "i"}, + {re: /[\xD2-\xD6]/g, ch: "O"}, + {re: /[\xF2-\xF6]/g, ch: "o"}, + {re: /[\xD9-\xDC]/g, ch: "U"}, + {re: /[\xF9-\xFC]/g, ch: "u"}, + {re: /[\xC7-\xE7]/g, ch: "c"}, + {re: /[\xD1]/g, ch: "N"}, + {re: /[\xF1]/g, ch: "n"} + ]; + $.each(rExps, function () { + text = text ? text.replace(this.re, this.ch) : ''; + }); + return text; + } + + + // List of HTML entities for escaping. + var escapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`' + }; + + var unescapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + ''': "'", + '`': '`' + }; + + // Functions for escaping and unescaping strings to/from HTML interpolation. + var createEscaper = function(map) { + var escaper = function(match) { + return map[match]; + }; + // Regexes for identifying a key that needs to be escaped. + var source = '(?:' + Object.keys(map).join('|') + ')'; + var testRegexp = RegExp(source); + var replaceRegexp = RegExp(source, 'g'); + return function(string) { + string = string == null ? '' : '' + string; + return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string; + }; + }; + + var htmlEscape = createEscaper(escapeMap); + var htmlUnescape = createEscaper(unescapeMap); + + var Selectpicker = function (element, options) { + // bootstrap-select has been initialized - revert valHooks.select.set back to its original function + if (!valHooks.useDefault) { + $.valHooks.select.set = valHooks._set; + valHooks.useDefault = true; + } + + this.$element = $(element); + this.$newElement = null; + this.$button = null; + this.$menu = null; + this.$lis = null; + this.options = options; + + // If we have no title yet, try to pull it from the html title attribute (jQuery doesnt' pick it up as it's not a + // data-attribute) + if (this.options.title === null) { + this.options.title = this.$element.attr('title'); + } + + // Format window padding + var winPad = this.options.windowPadding; + if (typeof winPad === 'number') { + this.options.windowPadding = [winPad, winPad, winPad, winPad]; + } + + //Expose public methods + this.val = Selectpicker.prototype.val; + this.render = Selectpicker.prototype.render; + this.refresh = Selectpicker.prototype.refresh; + this.setStyle = Selectpicker.prototype.setStyle; + this.selectAll = Selectpicker.prototype.selectAll; + this.deselectAll = Selectpicker.prototype.deselectAll; + this.destroy = Selectpicker.prototype.destroy; + this.remove = Selectpicker.prototype.remove; + this.show = Selectpicker.prototype.show; + this.hide = Selectpicker.prototype.hide; + + this.init(); + }; + + Selectpicker.VERSION = '1.12.4'; + + // part of this is duplicated in i18n/defaults-en_US.js. Make sure to update both. + Selectpicker.DEFAULTS = { + noneSelectedText: 'Nothing selected', + noneResultsText: 'No results matched {0}', + countSelectedText: function (numSelected, numTotal) { + return (numSelected == 1) ? "{0} item selected" : "{0} items selected"; + }, + maxOptionsText: function (numAll, numGroup) { + return [ + (numAll == 1) ? 'Limit reached ({n} item max)' : 'Limit reached ({n} items max)', + (numGroup == 1) ? 'Group limit reached ({n} item max)' : 'Group limit reached ({n} items max)' + ]; + }, + selectAllText: 'Select All', + deselectAllText: 'Deselect All', + doneButton: false, + doneButtonText: 'Close', + multipleSeparator: ', ', + styleBase: 'btn', + style: 'btn-default', + size: 'auto', + title: null, + selectedTextFormat: 'values', + width: false, + container: false, + hideDisabled: false, + showSubtext: false, + showIcon: true, + showContent: true, + dropupAuto: true, + header: false, + liveSearch: false, + liveSearchPlaceholder: null, + liveSearchNormalize: false, + liveSearchStyle: 'contains', + actionsBox: false, + iconBase: 'glyphicon', + tickIcon: 'glyphicon-ok', + showTick: false, + template: { + caret: '' + }, + maxOptions: false, + mobile: false, + selectOnTab: false, + dropdownAlignRight: false, + windowPadding: 0 + }; + + Selectpicker.prototype = { + + constructor: Selectpicker, + + init: function () { + var that = this, + id = this.$element.attr('id'); + + this.$element.addClass('bs-select-hidden'); + + // store originalIndex (key) and newIndex (value) in this.liObj for fast accessibility + // allows us to do this.$lis.eq(that.liObj[index]) instead of this.$lis.filter('[data-original-index="' + index + '"]') + this.liObj = {}; + this.multiple = this.$element.prop('multiple'); + this.autofocus = this.$element.prop('autofocus'); + this.$newElement = this.createView(); + this.$element + .after(this.$newElement) + .appendTo(this.$newElement); + this.$button = this.$newElement.children('button'); + this.$menu = this.$newElement.children('.dropdown-menu'); + this.$menuInner = this.$menu.children('.inner'); + this.$searchbox = this.$menu.find('input'); + + this.$element.removeClass('bs-select-hidden'); + + if (this.options.dropdownAlignRight === true) this.$menu.addClass('dropdown-menu-right'); + + if (typeof id !== 'undefined') { + this.$button.attr('data-id', id); + $('label[for="' + id + '"]').click(function (e) { + e.preventDefault(); + that.$button.focus(); + }); + } + + this.checkDisabled(); + this.clickListener(); + if (this.options.liveSearch) this.liveSearchListener(); + this.render(); + this.setStyle(); + this.setWidth(); + if (this.options.container) this.selectPosition(); + this.$menu.data('this', this); + this.$newElement.data('this', this); + if (this.options.mobile) this.mobile(); + + this.$newElement.on({ + 'hide.bs.dropdown': function (e) { + that.$menuInner.attr('aria-expanded', false); + that.$element.trigger('hide.bs.select', e); + }, + 'hidden.bs.dropdown': function (e) { + that.$element.trigger('hidden.bs.select', e); + }, + 'show.bs.dropdown': function (e) { + that.$menuInner.attr('aria-expanded', true); + that.$element.trigger('show.bs.select', e); + }, + 'shown.bs.dropdown': function (e) { + that.$element.trigger('shown.bs.select', e); + } + }); + + if (that.$element[0].hasAttribute('required')) { + this.$element.on('invalid', function () { + that.$button.addClass('bs-invalid'); + + that.$element.on({ + 'focus.bs.select': function () { + that.$button.focus(); + that.$element.off('focus.bs.select'); + }, + 'shown.bs.select': function () { + that.$element + .val(that.$element.val()) // set the value to hide the validation message in Chrome when menu is opened + .off('shown.bs.select'); + }, + 'rendered.bs.select': function () { + // if select is no longer invalid, remove the bs-invalid class + if (this.validity.valid) that.$button.removeClass('bs-invalid'); + that.$element.off('rendered.bs.select'); + } + }); + + that.$button.on('blur.bs.select', function() { + that.$element.focus().blur(); + that.$button.off('blur.bs.select'); + }); + }); + } + + setTimeout(function () { + that.$element.trigger('loaded.bs.select'); + }); + }, + + createDropdown: function () { + // Options + // If we are multiple or showTick option is set, then add the show-tick class + var showTick = (this.multiple || this.options.showTick) ? ' show-tick' : '', + inputGroup = this.$element.parent().hasClass('input-group') ? ' input-group-btn' : '', + autofocus = this.autofocus ? ' autofocus' : ''; + // Elements + var header = this.options.header ? '
' + this.options.header + '
' : ''; + var searchbox = this.options.liveSearch ? + '' + : ''; + var actionsbox = this.multiple && this.options.actionsBox ? + '
' + + '
' + + '' + + '' + + '
' + + '
' + : ''; + var donebutton = this.multiple && this.options.doneButton ? + '
' + + '
' + + '' + + '
' + + '
' + : ''; + var drop = + '
' + + '' + + '' + + '
'; + + return $(drop); + }, + + createView: function () { + var $drop = this.createDropdown(), + li = this.createLi(); + + $drop.find('ul')[0].innerHTML = li; + return $drop; + }, + + reloadLi: function () { + // rebuild + var li = this.createLi(); + this.$menuInner[0].innerHTML = li; + }, + + createLi: function () { + var that = this, + _li = [], + optID = 0, + titleOption = document.createElement('option'), + liIndex = -1; // increment liIndex whenever a new
  • element is created to ensure liObj is correct + + // Helper functions + /** + * @param content + * @param [index] + * @param [classes] + * @param [optgroup] + * @returns {string} + */ + var generateLI = function (content, index, classes, optgroup) { + return '' + content + '
  • '; + }; + + /** + * @param text + * @param [classes] + * @param [inline] + * @param [tokens] + * @returns {string} + */ + var generateA = function (text, classes, inline, tokens) { + return '' + text + + '' + + ''; + }; + + if (this.options.title && !this.multiple) { + // this option doesn't create a new
  • element, but does add a new option, so liIndex is decreased + // since liObj is recalculated on every refresh, liIndex needs to be decreased even if the titleOption is already appended + liIndex--; + + if (!this.$element.find('.bs-title-option').length) { + // Use native JS to prepend option (faster) + var element = this.$element[0]; + titleOption.className = 'bs-title-option'; + titleOption.innerHTML = this.options.title; + titleOption.value = ''; + element.insertBefore(titleOption, element.firstChild); + // Check if selected or data-selected attribute is already set on an option. If not, select the titleOption option. + // the selected item may have been changed by user or programmatically before the bootstrap select plugin runs, + // if so, the select will have the data-selected attribute + var $opt = $(element.options[element.selectedIndex]); + if ($opt.attr('selected') === undefined && this.$element.data('selected') === undefined) { + titleOption.selected = true; + } + } + } + + var $selectOptions = this.$element.find('option'); + + $selectOptions.each(function (index) { + var $this = $(this); + + liIndex++; + + if ($this.hasClass('bs-title-option')) return; + + // Get the class and text for the option + var optionClass = this.className || '', + inline = htmlEscape(this.style.cssText), + text = $this.data('content') ? $this.data('content') : $this.html(), + tokens = $this.data('tokens') ? $this.data('tokens') : null, + subtext = typeof $this.data('subtext') !== 'undefined' ? '' + $this.data('subtext') + '' : '', + icon = typeof $this.data('icon') !== 'undefined' ? ' ' : '', + $parent = $this.parent(), + isOptgroup = $parent[0].tagName === 'OPTGROUP', + isOptgroupDisabled = isOptgroup && $parent[0].disabled, + isDisabled = this.disabled || isOptgroupDisabled, + prevHiddenIndex; + + if (icon !== '' && isDisabled) { + icon = '' + icon + ''; + } + + if (that.options.hideDisabled && (isDisabled && !isOptgroup || isOptgroupDisabled)) { + // set prevHiddenIndex - the index of the first hidden option in a group of hidden options + // used to determine whether or not a divider should be placed after an optgroup if there are + // hidden options between the optgroup and the first visible option + prevHiddenIndex = $this.data('prevHiddenIndex'); + $this.next().data('prevHiddenIndex', (prevHiddenIndex !== undefined ? prevHiddenIndex : index)); + + liIndex--; + return; + } + + if (!$this.data('content')) { + // Prepend any icon and append any subtext to the main text. + text = icon + '' + text + subtext + ''; + } + + if (isOptgroup && $this.data('divider') !== true) { + if (that.options.hideDisabled && isDisabled) { + if ($parent.data('allOptionsDisabled') === undefined) { + var $options = $parent.children(); + $parent.data('allOptionsDisabled', $options.filter(':disabled').length === $options.length); + } + + if ($parent.data('allOptionsDisabled')) { + liIndex--; + return; + } + } + + var optGroupClass = ' ' + $parent[0].className || ''; + + if ($this.index() === 0) { // Is it the first option of the optgroup? + optID += 1; + + // Get the opt group label + var label = $parent[0].label, + labelSubtext = typeof $parent.data('subtext') !== 'undefined' ? '' + $parent.data('subtext') + '' : '', + labelIcon = $parent.data('icon') ? ' ' : ''; + + label = labelIcon + '' + htmlEscape(label) + labelSubtext + ''; + + if (index !== 0 && _li.length > 0) { // Is it NOT the first option of the select && are there elements in the dropdown? + liIndex++; + _li.push(generateLI('', null, 'divider', optID + 'div')); + } + liIndex++; + _li.push(generateLI(label, null, 'dropdown-header' + optGroupClass, optID)); + } + + if (that.options.hideDisabled && isDisabled) { + liIndex--; + return; + } + + _li.push(generateLI(generateA(text, 'opt ' + optionClass + optGroupClass, inline, tokens), index, '', optID)); + } else if ($this.data('divider') === true) { + _li.push(generateLI('', index, 'divider')); + } else if ($this.data('hidden') === true) { + // set prevHiddenIndex - the index of the first hidden option in a group of hidden options + // used to determine whether or not a divider should be placed after an optgroup if there are + // hidden options between the optgroup and the first visible option + prevHiddenIndex = $this.data('prevHiddenIndex'); + $this.next().data('prevHiddenIndex', (prevHiddenIndex !== undefined ? prevHiddenIndex : index)); + + _li.push(generateLI(generateA(text, optionClass, inline, tokens), index, 'hidden is-hidden')); + } else { + var showDivider = this.previousElementSibling && this.previousElementSibling.tagName === 'OPTGROUP'; + + // if previous element is not an optgroup and hideDisabled is true + if (!showDivider && that.options.hideDisabled) { + prevHiddenIndex = $this.data('prevHiddenIndex'); + + if (prevHiddenIndex !== undefined) { + // select the element **before** the first hidden element in the group + var prevHidden = $selectOptions.eq(prevHiddenIndex)[0].previousElementSibling; + + if (prevHidden && prevHidden.tagName === 'OPTGROUP' && !prevHidden.disabled) { + showDivider = true; + } + } + } + + if (showDivider) { + liIndex++; + _li.push(generateLI('', null, 'divider', optID + 'div')); + } + _li.push(generateLI(generateA(text, optionClass, inline, tokens), index)); + } + + that.liObj[index] = liIndex; + }); + + //If we are not multiple, we don't have a selected item, and we don't have a title, select the first element so something is set in the button + if (!this.multiple && this.$element.find('option:selected').length === 0 && !this.options.title) { + this.$element.find('option').eq(0).prop('selected', true).attr('selected', 'selected'); + } + + return _li.join(''); + }, + + findLis: function () { + if (this.$lis == null) this.$lis = this.$menu.find('li'); + return this.$lis; + }, + + /** + * @param [updateLi] defaults to true + */ + render: function (updateLi) { + var that = this, + notDisabled, + $selectOptions = this.$element.find('option'); + + //Update the LI to match the SELECT + if (updateLi !== false) { + $selectOptions.each(function (index) { + var $lis = that.findLis().eq(that.liObj[index]); + + that.setDisabled(index, this.disabled || this.parentNode.tagName === 'OPTGROUP' && this.parentNode.disabled, $lis); + that.setSelected(index, this.selected, $lis); + }); + } + + this.togglePlaceholder(); + + this.tabIndex(); + + var selectedItems = $selectOptions.map(function () { + if (this.selected) { + if (that.options.hideDisabled && (this.disabled || this.parentNode.tagName === 'OPTGROUP' && this.parentNode.disabled)) return; + + var $this = $(this), + icon = $this.data('icon') && that.options.showIcon ? ' ' : '', + subtext; + + if (that.options.showSubtext && $this.data('subtext') && !that.multiple) { + subtext = ' ' + $this.data('subtext') + ''; + } else { + subtext = ''; + } + if (typeof $this.attr('title') !== 'undefined') { + return $this.attr('title'); + } else if ($this.data('content') && that.options.showContent) { + return $this.data('content').toString(); + } else { + return icon + $this.html() + subtext; + } + } + }).toArray(); + + //Fixes issue in IE10 occurring when no default option is selected and at least one option is disabled + //Convert all the values into a comma delimited string + var title = !this.multiple ? selectedItems[0] : selectedItems.join(this.options.multipleSeparator); + + //If this is multi select, and the selectText type is count, the show 1 of 2 selected etc.. + if (this.multiple && this.options.selectedTextFormat.indexOf('count') > -1) { + var max = this.options.selectedTextFormat.split('>'); + if ((max.length > 1 && selectedItems.length > max[1]) || (max.length == 1 && selectedItems.length >= 2)) { + notDisabled = this.options.hideDisabled ? ', [disabled]' : ''; + var totalCount = $selectOptions.not('[data-divider="true"], [data-hidden="true"]' + notDisabled).length, + tr8nText = (typeof this.options.countSelectedText === 'function') ? this.options.countSelectedText(selectedItems.length, totalCount) : this.options.countSelectedText; + title = tr8nText.replace('{0}', selectedItems.length.toString()).replace('{1}', totalCount.toString()); + } + } + + if (this.options.title == undefined) { + this.options.title = this.$element.attr('title'); + } + + if (this.options.selectedTextFormat == 'static') { + title = this.options.title; + } + + //If we dont have a title, then use the default, or if nothing is set at all, use the not selected text + if (!title) { + title = typeof this.options.title !== 'undefined' ? this.options.title : this.options.noneSelectedText; + } + + //strip all HTML tags and trim the result, then unescape any escaped tags + this.$button.attr('title', htmlUnescape($.trim(title.replace(/<[^>]*>?/g, '')))); + this.$button.children('.filter-option').html(title); + + this.$element.trigger('rendered.bs.select'); + }, + + /** + * @param [style] + * @param [status] + */ + setStyle: function (style, status) { + if (this.$element.attr('class')) { + this.$newElement.addClass(this.$element.attr('class').replace(/selectpicker|mobile-device|bs-select-hidden|validate\[.*\]/gi, '')); + } + + var buttonClass = style ? style : this.options.style; + + if (status == 'add') { + this.$button.addClass(buttonClass); + } else if (status == 'remove') { + this.$button.removeClass(buttonClass); + } else { + this.$button.removeClass(this.options.style); + this.$button.addClass(buttonClass); + } + }, + + liHeight: function (refresh) { + if (!refresh && (this.options.size === false || this.sizeInfo)) return; + + var newElement = document.createElement('div'), + menu = document.createElement('div'), + menuInner = document.createElement('ul'), + divider = document.createElement('li'), + li = document.createElement('li'), + a = document.createElement('a'), + text = document.createElement('span'), + header = this.options.header && this.$menu.find('.popover-title').length > 0 ? this.$menu.find('.popover-title')[0].cloneNode(true) : null, + search = this.options.liveSearch ? document.createElement('div') : null, + actions = this.options.actionsBox && this.multiple && this.$menu.find('.bs-actionsbox').length > 0 ? this.$menu.find('.bs-actionsbox')[0].cloneNode(true) : null, + doneButton = this.options.doneButton && this.multiple && this.$menu.find('.bs-donebutton').length > 0 ? this.$menu.find('.bs-donebutton')[0].cloneNode(true) : null; + + text.className = 'text'; + newElement.className = this.$menu[0].parentNode.className + ' open'; + menu.className = 'dropdown-menu open'; + menuInner.className = 'dropdown-menu inner'; + divider.className = 'divider'; + + text.appendChild(document.createTextNode('Inner text')); + a.appendChild(text); + li.appendChild(a); + menuInner.appendChild(li); + menuInner.appendChild(divider); + if (header) menu.appendChild(header); + if (search) { + var input = document.createElement('input'); + search.className = 'bs-searchbox'; + input.className = 'form-control'; + search.appendChild(input); + menu.appendChild(search); + } + if (actions) menu.appendChild(actions); + menu.appendChild(menuInner); + if (doneButton) menu.appendChild(doneButton); + newElement.appendChild(menu); + + document.body.appendChild(newElement); + + var liHeight = a.offsetHeight, + headerHeight = header ? header.offsetHeight : 0, + searchHeight = search ? search.offsetHeight : 0, + actionsHeight = actions ? actions.offsetHeight : 0, + doneButtonHeight = doneButton ? doneButton.offsetHeight : 0, + dividerHeight = $(divider).outerHeight(true), + // fall back to jQuery if getComputedStyle is not supported + menuStyle = typeof getComputedStyle === 'function' ? getComputedStyle(menu) : false, + $menu = menuStyle ? null : $(menu), + menuPadding = { + vert: parseInt(menuStyle ? menuStyle.paddingTop : $menu.css('paddingTop')) + + parseInt(menuStyle ? menuStyle.paddingBottom : $menu.css('paddingBottom')) + + parseInt(menuStyle ? menuStyle.borderTopWidth : $menu.css('borderTopWidth')) + + parseInt(menuStyle ? menuStyle.borderBottomWidth : $menu.css('borderBottomWidth')), + horiz: parseInt(menuStyle ? menuStyle.paddingLeft : $menu.css('paddingLeft')) + + parseInt(menuStyle ? menuStyle.paddingRight : $menu.css('paddingRight')) + + parseInt(menuStyle ? menuStyle.borderLeftWidth : $menu.css('borderLeftWidth')) + + parseInt(menuStyle ? menuStyle.borderRightWidth : $menu.css('borderRightWidth')) + }, + menuExtras = { + vert: menuPadding.vert + + parseInt(menuStyle ? menuStyle.marginTop : $menu.css('marginTop')) + + parseInt(menuStyle ? menuStyle.marginBottom : $menu.css('marginBottom')) + 2, + horiz: menuPadding.horiz + + parseInt(menuStyle ? menuStyle.marginLeft : $menu.css('marginLeft')) + + parseInt(menuStyle ? menuStyle.marginRight : $menu.css('marginRight')) + 2 + } + + document.body.removeChild(newElement); + + this.sizeInfo = { + liHeight: liHeight, + headerHeight: headerHeight, + searchHeight: searchHeight, + actionsHeight: actionsHeight, + doneButtonHeight: doneButtonHeight, + dividerHeight: dividerHeight, + menuPadding: menuPadding, + menuExtras: menuExtras + }; + }, + + setSize: function () { + this.findLis(); + this.liHeight(); + + if (this.options.header) this.$menu.css('padding-top', 0); + if (this.options.size === false) return; + + var that = this, + $menu = this.$menu, + $menuInner = this.$menuInner, + $window = $(window), + selectHeight = this.$newElement[0].offsetHeight, + selectWidth = this.$newElement[0].offsetWidth, + liHeight = this.sizeInfo['liHeight'], + headerHeight = this.sizeInfo['headerHeight'], + searchHeight = this.sizeInfo['searchHeight'], + actionsHeight = this.sizeInfo['actionsHeight'], + doneButtonHeight = this.sizeInfo['doneButtonHeight'], + divHeight = this.sizeInfo['dividerHeight'], + menuPadding = this.sizeInfo['menuPadding'], + menuExtras = this.sizeInfo['menuExtras'], + notDisabled = this.options.hideDisabled ? '.disabled' : '', + menuHeight, + menuWidth, + getHeight, + getWidth, + selectOffsetTop, + selectOffsetBot, + selectOffsetLeft, + selectOffsetRight, + getPos = function() { + var pos = that.$newElement.offset(), + $container = $(that.options.container), + containerPos; + + if (that.options.container && !$container.is('body')) { + containerPos = $container.offset(); + containerPos.top += parseInt($container.css('borderTopWidth')); + containerPos.left += parseInt($container.css('borderLeftWidth')); + } else { + containerPos = { top: 0, left: 0 }; + } + + var winPad = that.options.windowPadding; + selectOffsetTop = pos.top - containerPos.top - $window.scrollTop(); + selectOffsetBot = $window.height() - selectOffsetTop - selectHeight - containerPos.top - winPad[2]; + selectOffsetLeft = pos.left - containerPos.left - $window.scrollLeft(); + selectOffsetRight = $window.width() - selectOffsetLeft - selectWidth - containerPos.left - winPad[1]; + selectOffsetTop -= winPad[0]; + selectOffsetLeft -= winPad[3]; + }; + + getPos(); + + if (this.options.size === 'auto') { + var getSize = function () { + var minHeight, + hasClass = function (className, include) { + return function (element) { + if (include) { + return (element.classList ? element.classList.contains(className) : $(element).hasClass(className)); + } else { + return !(element.classList ? element.classList.contains(className) : $(element).hasClass(className)); + } + }; + }, + lis = that.$menuInner[0].getElementsByTagName('li'), + lisVisible = Array.prototype.filter ? Array.prototype.filter.call(lis, hasClass('hidden', false)) : that.$lis.not('.hidden'), + optGroup = Array.prototype.filter ? Array.prototype.filter.call(lisVisible, hasClass('dropdown-header', true)) : lisVisible.filter('.dropdown-header'); + + getPos(); + menuHeight = selectOffsetBot - menuExtras.vert; + menuWidth = selectOffsetRight - menuExtras.horiz; + + if (that.options.container) { + if (!$menu.data('height')) $menu.data('height', $menu.height()); + getHeight = $menu.data('height'); + + if (!$menu.data('width')) $menu.data('width', $menu.width()); + getWidth = $menu.data('width'); + } else { + getHeight = $menu.height(); + getWidth = $menu.width(); + } + + if (that.options.dropupAuto) { + that.$newElement.toggleClass('dropup', selectOffsetTop > selectOffsetBot && (menuHeight - menuExtras.vert) < getHeight); + } + + if (that.$newElement.hasClass('dropup')) { + menuHeight = selectOffsetTop - menuExtras.vert; + } + + if (that.options.dropdownAlignRight === 'auto') { + $menu.toggleClass('dropdown-menu-right', selectOffsetLeft > selectOffsetRight && (menuWidth - menuExtras.horiz) < (getWidth - selectWidth)); + } + + if ((lisVisible.length + optGroup.length) > 3) { + minHeight = liHeight * 3 + menuExtras.vert - 2; + } else { + minHeight = 0; + } + + $menu.css({ + 'max-height': menuHeight + 'px', + 'overflow': 'hidden', + 'min-height': minHeight + headerHeight + searchHeight + actionsHeight + doneButtonHeight + 'px' + }); + $menuInner.css({ + 'max-height': menuHeight - headerHeight - searchHeight - actionsHeight - doneButtonHeight - menuPadding.vert + 'px', + 'overflow-y': 'auto', + 'min-height': Math.max(minHeight - menuPadding.vert, 0) + 'px' + }); + }; + getSize(); + this.$searchbox.off('input.getSize propertychange.getSize').on('input.getSize propertychange.getSize', getSize); + $window.off('resize.getSize scroll.getSize').on('resize.getSize scroll.getSize', getSize); + } else if (this.options.size && this.options.size != 'auto' && this.$lis.not(notDisabled).length > this.options.size) { + var optIndex = this.$lis.not('.divider').not(notDisabled).children().slice(0, this.options.size).last().parent().index(), + divLength = this.$lis.slice(0, optIndex + 1).filter('.divider').length; + menuHeight = liHeight * this.options.size + divLength * divHeight + menuPadding.vert; + + if (that.options.container) { + if (!$menu.data('height')) $menu.data('height', $menu.height()); + getHeight = $menu.data('height'); + } else { + getHeight = $menu.height(); + } + + if (that.options.dropupAuto) { + //noinspection JSUnusedAssignment + this.$newElement.toggleClass('dropup', selectOffsetTop > selectOffsetBot && (menuHeight - menuExtras.vert) < getHeight); + } + $menu.css({ + 'max-height': menuHeight + headerHeight + searchHeight + actionsHeight + doneButtonHeight + 'px', + 'overflow': 'hidden', + 'min-height': '' + }); + $menuInner.css({ + 'max-height': menuHeight - menuPadding.vert + 'px', + 'overflow-y': 'auto', + 'min-height': '' + }); + } + }, + + setWidth: function () { + if (this.options.width === 'auto') { + this.$menu.css('min-width', '0'); + + // Get correct width if element is hidden + var $selectClone = this.$menu.parent().clone().appendTo('body'), + $selectClone2 = this.options.container ? this.$newElement.clone().appendTo('body') : $selectClone, + ulWidth = $selectClone.children('.dropdown-menu').outerWidth(), + btnWidth = $selectClone2.css('width', 'auto').children('button').outerWidth(); + + $selectClone.remove(); + $selectClone2.remove(); + + // Set width to whatever's larger, button title or longest option + this.$newElement.css('width', Math.max(ulWidth, btnWidth) + 'px'); + } else if (this.options.width === 'fit') { + // Remove inline min-width so width can be changed from 'auto' + this.$menu.css('min-width', ''); + this.$newElement.css('width', '').addClass('fit-width'); + } else if (this.options.width) { + // Remove inline min-width so width can be changed from 'auto' + this.$menu.css('min-width', ''); + this.$newElement.css('width', this.options.width); + } else { + // Remove inline min-width/width so width can be changed + this.$menu.css('min-width', ''); + this.$newElement.css('width', ''); + } + // Remove fit-width class if width is changed programmatically + if (this.$newElement.hasClass('fit-width') && this.options.width !== 'fit') { + this.$newElement.removeClass('fit-width'); + } + }, + + selectPosition: function () { + this.$bsContainer = $('
    '); + + var that = this, + $container = $(this.options.container), + pos, + containerPos, + actualHeight, + getPlacement = function ($element) { + that.$bsContainer.addClass($element.attr('class').replace(/form-control|fit-width/gi, '')).toggleClass('dropup', $element.hasClass('dropup')); + pos = $element.offset(); + + if (!$container.is('body')) { + containerPos = $container.offset(); + containerPos.top += parseInt($container.css('borderTopWidth')) - $container.scrollTop(); + containerPos.left += parseInt($container.css('borderLeftWidth')) - $container.scrollLeft(); + } else { + containerPos = { top: 0, left: 0 }; + } + + actualHeight = $element.hasClass('dropup') ? 0 : $element[0].offsetHeight; + + that.$bsContainer.css({ + 'top': pos.top - containerPos.top + actualHeight, + 'left': pos.left - containerPos.left, + 'width': $element[0].offsetWidth + }); + }; + + this.$button.on('click', function () { + var $this = $(this); + + if (that.isDisabled()) { + return; + } + + getPlacement(that.$newElement); + + that.$bsContainer + .appendTo(that.options.container) + .toggleClass('open', !$this.hasClass('open')) + .append(that.$menu); + }); + + $(window).on('resize scroll', function () { + getPlacement(that.$newElement); + }); + + this.$element.on('hide.bs.select', function () { + that.$menu.data('height', that.$menu.height()); + that.$bsContainer.detach(); + }); + }, + + /** + * @param {number} index - the index of the option that is being changed + * @param {boolean} selected - true if the option is being selected, false if being deselected + * @param {JQuery} $lis - the 'li' element that is being modified + */ + setSelected: function (index, selected, $lis) { + if (!$lis) { + this.togglePlaceholder(); // check if setSelected is being called by changing the value of the select + $lis = this.findLis().eq(this.liObj[index]); + } + + $lis.toggleClass('selected', selected).find('a').attr('aria-selected', selected); + }, + + /** + * @param {number} index - the index of the option that is being disabled + * @param {boolean} disabled - true if the option is being disabled, false if being enabled + * @param {JQuery} $lis - the 'li' element that is being modified + */ + setDisabled: function (index, disabled, $lis) { + if (!$lis) { + $lis = this.findLis().eq(this.liObj[index]); + } + + if (disabled) { + $lis.addClass('disabled').children('a').attr('href', '#').attr('tabindex', -1).attr('aria-disabled', true); + } else { + $lis.removeClass('disabled').children('a').removeAttr('href').attr('tabindex', 0).attr('aria-disabled', false); + } + }, + + isDisabled: function () { + return this.$element[0].disabled; + }, + + checkDisabled: function () { + var that = this; + + if (this.isDisabled()) { + this.$newElement.addClass('disabled'); + this.$button.addClass('disabled').attr('tabindex', -1).attr('aria-disabled', true); + } else { + if (this.$button.hasClass('disabled')) { + this.$newElement.removeClass('disabled'); + this.$button.removeClass('disabled').attr('aria-disabled', false); + } + + if (this.$button.attr('tabindex') == -1 && !this.$element.data('tabindex')) { + this.$button.removeAttr('tabindex'); + } + } + + this.$button.click(function () { + return !that.isDisabled(); + }); + }, + + togglePlaceholder: function () { + var value = this.$element.val(); + this.$button.toggleClass('bs-placeholder', value === null || value === '' || (value.constructor === Array && value.length === 0)); + }, + + tabIndex: function () { + if (this.$element.data('tabindex') !== this.$element.attr('tabindex') && + (this.$element.attr('tabindex') !== -98 && this.$element.attr('tabindex') !== '-98')) { + this.$element.data('tabindex', this.$element.attr('tabindex')); + this.$button.attr('tabindex', this.$element.data('tabindex')); + } + + this.$element.attr('tabindex', -98); + }, + + clickListener: function () { + var that = this, + $document = $(document); + + $document.data('spaceSelect', false); + + this.$button.on('keyup', function (e) { + if (/(32)/.test(e.keyCode.toString(10)) && $document.data('spaceSelect')) { + e.preventDefault(); + $document.data('spaceSelect', false); + } + }); + + this.$button.on('click', function () { + that.setSize(); + }); + + this.$element.on('shown.bs.select', function () { + if (!that.options.liveSearch && !that.multiple) { + that.$menuInner.find('.selected a').focus(); + } else if (!that.multiple) { + var selectedIndex = that.liObj[that.$element[0].selectedIndex]; + + if (typeof selectedIndex !== 'number' || that.options.size === false) return; + + // scroll to selected option + var offset = that.$lis.eq(selectedIndex)[0].offsetTop - that.$menuInner[0].offsetTop; + offset = offset - that.$menuInner[0].offsetHeight/2 + that.sizeInfo.liHeight/2; + that.$menuInner[0].scrollTop = offset; + } + }); + + this.$menuInner.on('click', 'li a', function (e) { + var $this = $(this), + clickedIndex = $this.parent().data('originalIndex'), + prevValue = that.$element.val(), + prevIndex = that.$element.prop('selectedIndex'), + triggerChange = true; + + // Don't close on multi choice menu + if (that.multiple && that.options.maxOptions !== 1) { + e.stopPropagation(); + } + + e.preventDefault(); + + //Don't run if we have been disabled + if (!that.isDisabled() && !$this.parent().hasClass('disabled')) { + var $options = that.$element.find('option'), + $option = $options.eq(clickedIndex), + state = $option.prop('selected'), + $optgroup = $option.parent('optgroup'), + maxOptions = that.options.maxOptions, + maxOptionsGrp = $optgroup.data('maxOptions') || false; + + if (!that.multiple) { // Deselect all others if not multi select box + $options.prop('selected', false); + $option.prop('selected', true); + that.$menuInner.find('.selected').removeClass('selected').find('a').attr('aria-selected', false); + that.setSelected(clickedIndex, true); + } else { // Toggle the one we have chosen if we are multi select. + $option.prop('selected', !state); + that.setSelected(clickedIndex, !state); + $this.blur(); + + if (maxOptions !== false || maxOptionsGrp !== false) { + var maxReached = maxOptions < $options.filter(':selected').length, + maxReachedGrp = maxOptionsGrp < $optgroup.find('option:selected').length; + + if ((maxOptions && maxReached) || (maxOptionsGrp && maxReachedGrp)) { + if (maxOptions && maxOptions == 1) { + $options.prop('selected', false); + $option.prop('selected', true); + that.$menuInner.find('.selected').removeClass('selected'); + that.setSelected(clickedIndex, true); + } else if (maxOptionsGrp && maxOptionsGrp == 1) { + $optgroup.find('option:selected').prop('selected', false); + $option.prop('selected', true); + var optgroupID = $this.parent().data('optgroup'); + that.$menuInner.find('[data-optgroup="' + optgroupID + '"]').removeClass('selected'); + that.setSelected(clickedIndex, true); + } else { + var maxOptionsText = typeof that.options.maxOptionsText === 'string' ? [that.options.maxOptionsText, that.options.maxOptionsText] : that.options.maxOptionsText, + maxOptionsArr = typeof maxOptionsText === 'function' ? maxOptionsText(maxOptions, maxOptionsGrp) : maxOptionsText, + maxTxt = maxOptionsArr[0].replace('{n}', maxOptions), + maxTxtGrp = maxOptionsArr[1].replace('{n}', maxOptionsGrp), + $notify = $('
    '); + // If {var} is set in array, replace it + /** @deprecated */ + if (maxOptionsArr[2]) { + maxTxt = maxTxt.replace('{var}', maxOptionsArr[2][maxOptions > 1 ? 0 : 1]); + maxTxtGrp = maxTxtGrp.replace('{var}', maxOptionsArr[2][maxOptionsGrp > 1 ? 0 : 1]); + } + + $option.prop('selected', false); + + that.$menu.append($notify); + + if (maxOptions && maxReached) { + $notify.append($('
    ' + maxTxt + '
    ')); + triggerChange = false; + that.$element.trigger('maxReached.bs.select'); + } + + if (maxOptionsGrp && maxReachedGrp) { + $notify.append($('
    ' + maxTxtGrp + '
    ')); + triggerChange = false; + that.$element.trigger('maxReachedGrp.bs.select'); + } + + setTimeout(function () { + that.setSelected(clickedIndex, false); + }, 10); + + $notify.delay(750).fadeOut(300, function () { + $(this).remove(); + }); + } + } + } + } + + if (!that.multiple || (that.multiple && that.options.maxOptions === 1)) { + that.$button.focus(); + } else if (that.options.liveSearch) { + that.$searchbox.focus(); + } + + // Trigger select 'change' + if (triggerChange) { + if ((prevValue != that.$element.val() && that.multiple) || (prevIndex != that.$element.prop('selectedIndex') && !that.multiple)) { + // $option.prop('selected') is current option state (selected/unselected). state is previous option state. + changed_arguments = [clickedIndex, $option.prop('selected'), state]; + that.$element + .triggerNative('change'); + } + } + } + }); + + this.$menu.on('click', 'li.disabled a, .popover-title, .popover-title :not(.close)', function (e) { + if (e.currentTarget == this) { + e.preventDefault(); + e.stopPropagation(); + if (that.options.liveSearch && !$(e.target).hasClass('close')) { + that.$searchbox.focus(); + } else { + that.$button.focus(); + } + } + }); + + this.$menuInner.on('click', '.divider, .dropdown-header', function (e) { + e.preventDefault(); + e.stopPropagation(); + if (that.options.liveSearch) { + that.$searchbox.focus(); + } else { + that.$button.focus(); + } + }); + + this.$menu.on('click', '.popover-title .close', function () { + that.$button.click(); + }); + + this.$searchbox.on('click', function (e) { + e.stopPropagation(); + }); + + this.$menu.on('click', '.actions-btn', function (e) { + if (that.options.liveSearch) { + that.$searchbox.focus(); + } else { + that.$button.focus(); + } + + e.preventDefault(); + e.stopPropagation(); + + if ($(this).hasClass('bs-select-all')) { + that.selectAll(); + } else { + that.deselectAll(); + } + }); + + this.$element.change(function () { + that.render(false); + that.$element.trigger('changed.bs.select', changed_arguments); + changed_arguments = null; + }); + }, + + liveSearchListener: function () { + var that = this, + $no_results = $('
  • '); + + this.$button.on('click.dropdown.data-api', function () { + that.$menuInner.find('.active').removeClass('active'); + if (!!that.$searchbox.val()) { + that.$searchbox.val(''); + that.$lis.not('.is-hidden').removeClass('hidden'); + if (!!$no_results.parent().length) $no_results.remove(); + } + if (!that.multiple) that.$menuInner.find('.selected').addClass('active'); + setTimeout(function () { + that.$searchbox.focus(); + }, 10); + }); + + this.$searchbox.on('click.dropdown.data-api focus.dropdown.data-api touchend.dropdown.data-api', function (e) { + e.stopPropagation(); + }); + + this.$searchbox.on('input propertychange', function () { + that.$lis.not('.is-hidden').removeClass('hidden'); + that.$lis.filter('.active').removeClass('active'); + $no_results.remove(); + + if (that.$searchbox.val()) { + var $searchBase = that.$lis.not('.is-hidden, .divider, .dropdown-header'), + $hideItems; + if (that.options.liveSearchNormalize) { + $hideItems = $searchBase.not(':a' + that._searchStyle() + '("' + normalizeToBase(that.$searchbox.val()) + '")'); + } else { + $hideItems = $searchBase.not(':' + that._searchStyle() + '("' + that.$searchbox.val() + '")'); + } + + if ($hideItems.length === $searchBase.length) { + $no_results.html(that.options.noneResultsText.replace('{0}', '"' + htmlEscape(that.$searchbox.val()) + '"')); + that.$menuInner.append($no_results); + that.$lis.addClass('hidden'); + } else { + $hideItems.addClass('hidden'); + + var $lisVisible = that.$lis.not('.hidden'), + $foundDiv; + + // hide divider if first or last visible, or if followed by another divider + $lisVisible.each(function (index) { + var $this = $(this); + + if ($this.hasClass('divider')) { + if ($foundDiv === undefined) { + $this.addClass('hidden'); + } else { + if ($foundDiv) $foundDiv.addClass('hidden'); + $foundDiv = $this; + } + } else if ($this.hasClass('dropdown-header') && $lisVisible.eq(index + 1).data('optgroup') !== $this.data('optgroup')) { + $this.addClass('hidden'); + } else { + $foundDiv = null; + } + }); + if ($foundDiv) $foundDiv.addClass('hidden'); + + $searchBase.not('.hidden').first().addClass('active'); + that.$menuInner.scrollTop(0); + } + } + }); + }, + + _searchStyle: function () { + var styles = { + begins: 'ibegins', + startsWith: 'ibegins' + }; + + return styles[this.options.liveSearchStyle] || 'icontains'; + }, + + val: function (value) { + if (typeof value !== 'undefined') { + this.$element.val(value); + this.render(); + + return this.$element; + } else { + return this.$element.val(); + } + }, + + changeAll: function (status) { + if (!this.multiple) return; + if (typeof status === 'undefined') status = true; + + this.findLis(); + + var $options = this.$element.find('option'), + $lisVisible = this.$lis.not('.divider, .dropdown-header, .disabled, .hidden'), + lisVisLen = $lisVisible.length, + selectedOptions = []; + + if (status) { + if ($lisVisible.filter('.selected').length === $lisVisible.length) return; + } else { + if ($lisVisible.filter('.selected').length === 0) return; + } + + $lisVisible.toggleClass('selected', status); + + for (var i = 0; i < lisVisLen; i++) { + var origIndex = $lisVisible[i].getAttribute('data-original-index'); + selectedOptions[selectedOptions.length] = $options.eq(origIndex)[0]; + } + + $(selectedOptions).prop('selected', status); + + this.render(false); + + this.togglePlaceholder(); + + this.$element + .triggerNative('change'); + }, + + selectAll: function () { + return this.changeAll(true); + }, + + deselectAll: function () { + return this.changeAll(false); + }, + + toggle: function (e) { + e = e || window.event; + + if (e) e.stopPropagation(); + + this.$button.trigger('click'); + }, + + keydown: function (e) { + var $this = $(this), + $parent = $this.is('input') ? $this.parent().parent() : $this.parent(), + $items, + that = $parent.data('this'), + index, + prevIndex, + isActive, + selector = ':not(.disabled, .hidden, .dropdown-header, .divider)', + keyCodeMap = { + 32: ' ', + 48: '0', + 49: '1', + 50: '2', + 51: '3', + 52: '4', + 53: '5', + 54: '6', + 55: '7', + 56: '8', + 57: '9', + 59: ';', + 65: 'a', + 66: 'b', + 67: 'c', + 68: 'd', + 69: 'e', + 70: 'f', + 71: 'g', + 72: 'h', + 73: 'i', + 74: 'j', + 75: 'k', + 76: 'l', + 77: 'm', + 78: 'n', + 79: 'o', + 80: 'p', + 81: 'q', + 82: 'r', + 83: 's', + 84: 't', + 85: 'u', + 86: 'v', + 87: 'w', + 88: 'x', + 89: 'y', + 90: 'z', + 96: '0', + 97: '1', + 98: '2', + 99: '3', + 100: '4', + 101: '5', + 102: '6', + 103: '7', + 104: '8', + 105: '9' + }; + + + isActive = that.$newElement.hasClass('open'); + + if (!isActive && (e.keyCode >= 48 && e.keyCode <= 57 || e.keyCode >= 96 && e.keyCode <= 105 || e.keyCode >= 65 && e.keyCode <= 90)) { + if (!that.options.container) { + that.setSize(); + that.$menu.parent().addClass('open'); + isActive = true; + } else { + that.$button.trigger('click'); + } + that.$searchbox.focus(); + return; + } + + if (that.options.liveSearch) { + if (/(^9$|27)/.test(e.keyCode.toString(10)) && isActive) { + e.preventDefault(); + e.stopPropagation(); + that.$menuInner.click(); + that.$button.focus(); + } + } + + if (/(38|40)/.test(e.keyCode.toString(10))) { + $items = that.$lis.filter(selector); + if (!$items.length) return; + + if (!that.options.liveSearch) { + index = $items.index($items.find('a').filter(':focus').parent()); + } else { + index = $items.index($items.filter('.active')); + } + + prevIndex = that.$menuInner.data('prevIndex'); + + if (e.keyCode == 38) { + if ((that.options.liveSearch || index == prevIndex) && index != -1) index--; + if (index < 0) index += $items.length; + } else if (e.keyCode == 40) { + if (that.options.liveSearch || index == prevIndex) index++; + index = index % $items.length; + } + + that.$menuInner.data('prevIndex', index); + + if (!that.options.liveSearch) { + $items.eq(index).children('a').focus(); + } else { + e.preventDefault(); + if (!$this.hasClass('dropdown-toggle')) { + $items.removeClass('active').eq(index).addClass('active').children('a').focus(); + $this.focus(); + } + } + + } else if (!$this.is('input')) { + var keyIndex = [], + count, + prevKey; + + $items = that.$lis.filter(selector); + $items.each(function (i) { + if ($.trim($(this).children('a').text().toLowerCase()).substring(0, 1) == keyCodeMap[e.keyCode]) { + keyIndex.push(i); + } + }); + + count = $(document).data('keycount'); + count++; + $(document).data('keycount', count); + + prevKey = $.trim($(':focus').text().toLowerCase()).substring(0, 1); + + if (prevKey != keyCodeMap[e.keyCode]) { + count = 1; + $(document).data('keycount', count); + } else if (count >= keyIndex.length) { + $(document).data('keycount', 0); + if (count > keyIndex.length) count = 1; + } + + $items.eq(keyIndex[count - 1]).children('a').focus(); + } + + // Select focused option if "Enter", "Spacebar" or "Tab" (when selectOnTab is true) are pressed inside the menu. + if ((/(13|32)/.test(e.keyCode.toString(10)) || (/(^9$)/.test(e.keyCode.toString(10)) && that.options.selectOnTab)) && isActive) { + if (!/(32)/.test(e.keyCode.toString(10))) e.preventDefault(); + if (!that.options.liveSearch) { + var elem = $(':focus'); + elem.click(); + // Bring back focus for multiselects + elem.focus(); + // Prevent screen from scrolling if the user hit the spacebar + e.preventDefault(); + // Fixes spacebar selection of dropdown items in FF & IE + $(document).data('spaceSelect', true); + } else if (!/(32)/.test(e.keyCode.toString(10))) { + that.$menuInner.find('.active a').click(); + $this.focus(); + } + $(document).data('keycount', 0); + } + + if ((/(^9$|27)/.test(e.keyCode.toString(10)) && isActive && (that.multiple || that.options.liveSearch)) || (/(27)/.test(e.keyCode.toString(10)) && !isActive)) { + that.$menu.parent().removeClass('open'); + if (that.options.container) that.$newElement.removeClass('open'); + that.$button.focus(); + } + }, + + mobile: function () { + this.$element.addClass('mobile-device'); + }, + + refresh: function () { + this.$lis = null; + this.liObj = {}; + this.reloadLi(); + this.render(); + this.checkDisabled(); + this.liHeight(true); + this.setStyle(); + this.setWidth(); + if (this.$lis) this.$searchbox.trigger('propertychange'); + + this.$element.trigger('refreshed.bs.select'); + }, + + hide: function () { + this.$newElement.hide(); + }, + + show: function () { + this.$newElement.show(); + }, + + remove: function () { + this.$newElement.remove(); + this.$element.remove(); + }, + + destroy: function () { + this.$newElement.before(this.$element).remove(); + + if (this.$bsContainer) { + this.$bsContainer.remove(); + } else { + this.$menu.remove(); + } + + this.$element + .off('.bs.select') + .removeData('selectpicker') + .removeClass('bs-select-hidden selectpicker'); + } + }; + + // SELECTPICKER PLUGIN DEFINITION + // ============================== + function Plugin(option) { + // get the args of the outer function.. + var args = arguments; + // The arguments of the function are explicitly re-defined from the argument list, because the shift causes them + // to get lost/corrupted in android 2.3 and IE9 #715 #775 + var _option = option; + + [].shift.apply(args); + + var value; + var chain = this.each(function () { + var $this = $(this); + if ($this.is('select')) { + var data = $this.data('selectpicker'), + options = typeof _option == 'object' && _option; + + if (!data) { + var config = $.extend({}, Selectpicker.DEFAULTS, $.fn.selectpicker.defaults || {}, $this.data(), options); + config.template = $.extend({}, Selectpicker.DEFAULTS.template, ($.fn.selectpicker.defaults ? $.fn.selectpicker.defaults.template : {}), $this.data().template, options.template); + $this.data('selectpicker', (data = new Selectpicker(this, config))); + } else if (options) { + for (var i in options) { + if (options.hasOwnProperty(i)) { + data.options[i] = options[i]; + } + } + } + + if (typeof _option == 'string') { + if (data[_option] instanceof Function) { + value = data[_option].apply(data, args); + } else { + value = data.options[_option]; + } + } + } + }); + + if (typeof value !== 'undefined') { + //noinspection JSUnusedAssignment + return value; + } else { + return chain; + } + } + + var old = $.fn.selectpicker; + $.fn.selectpicker = Plugin; + $.fn.selectpicker.Constructor = Selectpicker; + + // SELECTPICKER NO CONFLICT + // ======================== + $.fn.selectpicker.noConflict = function () { + $.fn.selectpicker = old; + return this; + }; + + $(document) + .data('keycount', 0) + .on('keydown.bs.select', '.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role="listbox"], .bs-searchbox input', Selectpicker.prototype.keydown) + .on('focusin.modal', '.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role="listbox"], .bs-searchbox input', function (e) { + e.stopPropagation(); + }); + + // SELECTPICKER DATA-API + // ===================== + $(window).on('load.bs.select.data-api', function () { + $('.selectpicker').each(function () { + var $selectpicker = $(this); + Plugin.call($selectpicker, $selectpicker.data()); + }) + }); +})(jQuery); + + +})); diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/bootstrap-select.js.map b/app/static/plugin-bootstrap-select-1.12.4/js/bootstrap-select.js.map new file mode 100644 index 0000000..9168fbc --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/bootstrap-select.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["bootstrap-select.js"],"names":["root","factory","define","amd","a0","module","exports","require","this","jQuery","$","normalizeToBase","text","rExps","re","ch","each","replace","Plugin","option","args","arguments","_option","shift","apply","value","chain","$this","is","data","options","i","hasOwnProperty","config","extend","Selectpicker","DEFAULTS","fn","selectpicker","defaults","template","Function","String","prototype","includes","toString","defineProperty","object","$defineProperty","Object","result","error","indexOf","search","TypeError","string","call","stringLength","length","searchString","searchLength","position","undefined","pos","Number","start","Math","min","max","configurable","writable","startsWith","index","charCodeAt","keys","o","k","r","push","valHooks","useDefault","_set","select","set","elem","changed_arguments","EventIsSupported","Event","e","triggerNative","eventName","event","el","dispatchEvent","bubbles","document","createEvent","initEvent","fireEvent","createEventObject","eventType","trigger","expr","pseudos","icontains","obj","meta","$obj","find","haystack","toUpperCase","ibegins","aicontains","aibegins","escapeMap","&","<",">","\"","'","`","unescapeMap","&","<",">",""","'","`","createEscaper","map","escaper","match","source","join","testRegexp","RegExp","replaceRegexp","test","htmlEscape","htmlUnescape","element","$element","$newElement","$button","$menu","$lis","title","attr","winPad","windowPadding","val","render","refresh","setStyle","selectAll","deselectAll","destroy","remove","show","hide","init","VERSION","noneSelectedText","noneResultsText","countSelectedText","numSelected","numTotal","maxOptionsText","numAll","numGroup","selectAllText","deselectAllText","doneButton","doneButtonText","multipleSeparator","styleBase","style","size","selectedTextFormat","width","container","hideDisabled","showSubtext","showIcon","showContent","dropupAuto","header","liveSearch","liveSearchPlaceholder","liveSearchNormalize","liveSearchStyle","actionsBox","iconBase","tickIcon","showTick","caret","maxOptions","mobile","selectOnTab","dropdownAlignRight","constructor","that","id","addClass","liObj","multiple","prop","autofocus","createView","after","appendTo","children","$menuInner","$searchbox","removeClass","click","preventDefault","focus","checkDisabled","clickListener","liveSearchListener","setWidth","selectPosition","on","hide.bs.dropdown","hidden.bs.dropdown","show.bs.dropdown","shown.bs.dropdown","hasAttribute","focus.bs.select","off","shown.bs.select","rendered.bs.select","validity","valid","blur","setTimeout","createDropdown","inputGroup","parent","hasClass","searchbox","actionsbox","donebutton","drop","$drop","li","createLi","innerHTML","reloadLi","_li","optID","titleOption","createElement","liIndex","generateLI","content","classes","optgroup","generateA","inline","tokens","html","className","insertBefore","firstChild","$opt","selectedIndex","selected","$selectOptions","prevHiddenIndex","optionClass","cssText","subtext","icon","$parent","isOptgroup","tagName","isOptgroupDisabled","disabled","isDisabled","next","$options","filter","optGroupClass","label","labelSubtext","labelIcon","showDivider","previousElementSibling","prevHidden","eq","findLis","updateLi","notDisabled","setDisabled","parentNode","setSelected","togglePlaceholder","tabIndex","selectedItems","toArray","split","totalCount","not","tr8nText","trim","status","buttonClass","liHeight","sizeInfo","newElement","menu","menuInner","divider","a","cloneNode","actions","appendChild","createTextNode","input","body","offsetHeight","headerHeight","searchHeight","actionsHeight","doneButtonHeight","dividerHeight","outerHeight","menuStyle","getComputedStyle","menuPadding","vert","parseInt","paddingTop","css","paddingBottom","borderTopWidth","borderBottomWidth","horiz","paddingLeft","paddingRight","borderLeftWidth","borderRightWidth","menuExtras","marginTop","marginBottom","marginLeft","marginRight","removeChild","setSize","menuHeight","menuWidth","getHeight","getWidth","selectOffsetTop","selectOffsetBot","selectOffsetLeft","selectOffsetRight","$window","window","selectHeight","selectWidth","offsetWidth","divHeight","getPos","containerPos","offset","$container","top","left","scrollTop","height","scrollLeft","getSize","minHeight","include","classList","contains","lis","getElementsByTagName","lisVisible","Array","optGroup","toggleClass","max-height","overflow","min-height","overflow-y","optIndex","slice","last","divLength","$selectClone","clone","$selectClone2","ulWidth","outerWidth","btnWidth","$bsContainer","actualHeight","getPlacement","append","detach","removeAttr","$document","keyCode","offsetTop","clickedIndex","prevValue","prevIndex","triggerChange","stopPropagation","$option","state","$optgroup","maxOptionsGrp","maxReached","maxReachedGrp","optgroupID","maxOptionsArr","maxTxt","maxTxtGrp","$notify","delay","fadeOut","currentTarget","target","change","$no_results","$hideItems","$searchBase","_searchStyle","$foundDiv","$lisVisible","first","styles","begins","changeAll","lisVisLen","selectedOptions","origIndex","getAttribute","toggle","keydown","$items","isActive","selector","keyCodeMap","32","48","49","50","51","52","53","54","55","56","57","59","65","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","87","88","89","90","96","97","98","99","100","101","102","103","104","105","count","prevKey","keyIndex","toLowerCase","substring","before","removeData","old","Constructor","noConflict","$selectpicker"],"mappings":"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","file":"bootstrap-select.min.js"} \ No newline at end of file diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/bootstrap-select.min.js b/app/static/plugin-bootstrap-select-1.12.4/js/bootstrap-select.min.js new file mode 100644 index 0000000..d417383 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/bootstrap-select.min.js @@ -0,0 +1,9 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){!function(a){"use strict";function b(b){var c=[{re:/[\xC0-\xC6]/g,ch:"A"},{re:/[\xE0-\xE6]/g,ch:"a"},{re:/[\xC8-\xCB]/g,ch:"E"},{re:/[\xE8-\xEB]/g,ch:"e"},{re:/[\xCC-\xCF]/g,ch:"I"},{re:/[\xEC-\xEF]/g,ch:"i"},{re:/[\xD2-\xD6]/g,ch:"O"},{re:/[\xF2-\xF6]/g,ch:"o"},{re:/[\xD9-\xDC]/g,ch:"U"},{re:/[\xF9-\xFC]/g,ch:"u"},{re:/[\xC7-\xE7]/g,ch:"c"},{re:/[\xD1]/g,ch:"N"},{re:/[\xF1]/g,ch:"n"}];return a.each(c,function(){b=b?b.replace(this.re,this.ch):""}),b}function c(b){var c=arguments,d=b;[].shift.apply(c);var e,f=this.each(function(){var b=a(this);if(b.is("select")){var f=b.data("selectpicker"),g="object"==typeof d&&d;if(f){if(g)for(var h in g)g.hasOwnProperty(h)&&(f.options[h]=g[h])}else{var i=a.extend({},l.DEFAULTS,a.fn.selectpicker.defaults||{},b.data(),g);i.template=a.extend({},l.DEFAULTS.template,a.fn.selectpicker.defaults?a.fn.selectpicker.defaults.template:{},b.data().template,g.template),b.data("selectpicker",f=new l(this,i))}"string"==typeof d&&(e=f[d]instanceof Function?f[d].apply(f,c):f.options[d])}});return"undefined"!=typeof e?e:f}String.prototype.includes||!function(){var a={}.toString,b=function(){try{var a={},b=Object.defineProperty,c=b(a,a,a)&&b}catch(a){}return c}(),c="".indexOf,d=function(b){if(null==this)throw new TypeError;var d=String(this);if(b&&"[object RegExp]"==a.call(b))throw new TypeError;var e=d.length,f=String(b),g=f.length,h=arguments.length>1?arguments[1]:void 0,i=h?Number(h):0;i!=i&&(i=0);var j=Math.min(Math.max(i,0),e);return!(g+j>e)&&c.call(d,f,i)!=-1};b?b(String.prototype,"includes",{value:d,configurable:!0,writable:!0}):String.prototype.includes=d}(),String.prototype.startsWith||!function(){var a=function(){try{var a={},b=Object.defineProperty,c=b(a,a,a)&&b}catch(a){}return c}(),b={}.toString,c=function(a){if(null==this)throw new TypeError;var c=String(this);if(a&&"[object RegExp]"==b.call(a))throw new TypeError;var d=c.length,e=String(a),f=e.length,g=arguments.length>1?arguments[1]:void 0,h=g?Number(g):0;h!=h&&(h=0);var i=Math.min(Math.max(h,0),d);if(f+i>d)return!1;for(var j=-1;++j":">",'"':""","'":"'","`":"`"},h={"&":"&","<":"<",">":">",""":'"',"'":"'","`":"`"},i=function(a){var b=function(b){return a[b]},c="(?:"+Object.keys(a).join("|")+")",d=RegExp(c),e=RegExp(c,"g");return function(a){return a=null==a?"":""+a,d.test(a)?a.replace(e,b):a}},j=i(g),k=i(h),l=function(b,c){d.useDefault||(a.valHooks.select.set=d._set,d.useDefault=!0),this.$element=a(b),this.$newElement=null,this.$button=null,this.$menu=null,this.$lis=null,this.options=c,null===this.options.title&&(this.options.title=this.$element.attr("title"));var e=this.options.windowPadding;"number"==typeof e&&(this.options.windowPadding=[e,e,e,e]),this.val=l.prototype.val,this.render=l.prototype.render,this.refresh=l.prototype.refresh,this.setStyle=l.prototype.setStyle,this.selectAll=l.prototype.selectAll,this.deselectAll=l.prototype.deselectAll,this.destroy=l.prototype.destroy,this.remove=l.prototype.remove,this.show=l.prototype.show,this.hide=l.prototype.hide,this.init()};l.VERSION="1.12.4",l.DEFAULTS={noneSelectedText:"Nothing selected",noneResultsText:"No results matched {0}",countSelectedText:function(a,b){return 1==a?"{0} item selected":"{0} items selected"},maxOptionsText:function(a,b){return[1==a?"Limit reached ({n} item max)":"Limit reached ({n} items max)",1==b?"Group limit reached ({n} item max)":"Group limit reached ({n} items max)"]},selectAllText:"Select All",deselectAllText:"Deselect All",doneButton:!1,doneButtonText:"Close",multipleSeparator:", ",styleBase:"btn",style:"btn-default",size:"auto",title:null,selectedTextFormat:"values",width:!1,container:!1,hideDisabled:!1,showSubtext:!1,showIcon:!0,showContent:!0,dropupAuto:!0,header:!1,liveSearch:!1,liveSearchPlaceholder:null,liveSearchNormalize:!1,liveSearchStyle:"contains",actionsBox:!1,iconBase:"glyphicon",tickIcon:"glyphicon-ok",showTick:!1,template:{caret:''},maxOptions:!1,mobile:!1,selectOnTab:!1,dropdownAlignRight:!1,windowPadding:0},l.prototype={constructor:l,init:function(){var b=this,c=this.$element.attr("id");this.$element.addClass("bs-select-hidden"),this.liObj={},this.multiple=this.$element.prop("multiple"),this.autofocus=this.$element.prop("autofocus"),this.$newElement=this.createView(),this.$element.after(this.$newElement).appendTo(this.$newElement),this.$button=this.$newElement.children("button"),this.$menu=this.$newElement.children(".dropdown-menu"),this.$menuInner=this.$menu.children(".inner"),this.$searchbox=this.$menu.find("input"),this.$element.removeClass("bs-select-hidden"),this.options.dropdownAlignRight===!0&&this.$menu.addClass("dropdown-menu-right"),"undefined"!=typeof c&&(this.$button.attr("data-id",c),a('label[for="'+c+'"]').click(function(a){a.preventDefault(),b.$button.focus()})),this.checkDisabled(),this.clickListener(),this.options.liveSearch&&this.liveSearchListener(),this.render(),this.setStyle(),this.setWidth(),this.options.container&&this.selectPosition(),this.$menu.data("this",this),this.$newElement.data("this",this),this.options.mobile&&this.mobile(),this.$newElement.on({"hide.bs.dropdown":function(a){b.$menuInner.attr("aria-expanded",!1),b.$element.trigger("hide.bs.select",a)},"hidden.bs.dropdown":function(a){b.$element.trigger("hidden.bs.select",a)},"show.bs.dropdown":function(a){b.$menuInner.attr("aria-expanded",!0),b.$element.trigger("show.bs.select",a)},"shown.bs.dropdown":function(a){b.$element.trigger("shown.bs.select",a)}}),b.$element[0].hasAttribute("required")&&this.$element.on("invalid",function(){b.$button.addClass("bs-invalid"),b.$element.on({"focus.bs.select":function(){b.$button.focus(),b.$element.off("focus.bs.select")},"shown.bs.select":function(){b.$element.val(b.$element.val()).off("shown.bs.select")},"rendered.bs.select":function(){this.validity.valid&&b.$button.removeClass("bs-invalid"),b.$element.off("rendered.bs.select")}}),b.$button.on("blur.bs.select",function(){b.$element.focus().blur(),b.$button.off("blur.bs.select")})}),setTimeout(function(){b.$element.trigger("loaded.bs.select")})},createDropdown:function(){var b=this.multiple||this.options.showTick?" show-tick":"",c=this.$element.parent().hasClass("input-group")?" input-group-btn":"",d=this.autofocus?" autofocus":"",e=this.options.header?'
    '+this.options.header+"
    ":"",f=this.options.liveSearch?'':"",g=this.multiple&&this.options.actionsBox?'
    ":"",h=this.multiple&&this.options.doneButton?'
    ":"",i='
    ";return a(i)},createView:function(){var a=this.createDropdown(),b=this.createLi();return a.find("ul")[0].innerHTML=b,a},reloadLi:function(){var a=this.createLi();this.$menuInner[0].innerHTML=a},createLi:function(){var c=this,d=[],e=0,f=document.createElement("option"),g=-1,h=function(a,b,c,d){return""+a+""},i=function(d,e,f,g){return''+d+''};if(this.options.title&&!this.multiple&&(g--,!this.$element.find(".bs-title-option").length)){var k=this.$element[0];f.className="bs-title-option",f.innerHTML=this.options.title,f.value="",k.insertBefore(f,k.firstChild);var l=a(k.options[k.selectedIndex]);void 0===l.attr("selected")&&void 0===this.$element.data("selected")&&(f.selected=!0)}var m=this.$element.find("option");return m.each(function(b){var f=a(this);if(g++,!f.hasClass("bs-title-option")){var k,l=this.className||"",n=j(this.style.cssText),o=f.data("content")?f.data("content"):f.html(),p=f.data("tokens")?f.data("tokens"):null,q="undefined"!=typeof f.data("subtext")?''+f.data("subtext")+"":"",r="undefined"!=typeof f.data("icon")?' ':"",s=f.parent(),t="OPTGROUP"===s[0].tagName,u=t&&s[0].disabled,v=this.disabled||u;if(""!==r&&v&&(r=""+r+""),c.options.hideDisabled&&(v&&!t||u))return k=f.data("prevHiddenIndex"),f.next().data("prevHiddenIndex",void 0!==k?k:b),void g--;if(f.data("content")||(o=r+''+o+q+""),t&&f.data("divider")!==!0){if(c.options.hideDisabled&&v){if(void 0===s.data("allOptionsDisabled")){var w=s.children();s.data("allOptionsDisabled",w.filter(":disabled").length===w.length)}if(s.data("allOptionsDisabled"))return void g--}var x=" "+s[0].className||"";if(0===f.index()){e+=1;var y=s[0].label,z="undefined"!=typeof s.data("subtext")?''+s.data("subtext")+"":"",A=s.data("icon")?' ':"";y=A+''+j(y)+z+"",0!==b&&d.length>0&&(g++,d.push(h("",null,"divider",e+"div"))),g++,d.push(h(y,null,"dropdown-header"+x,e))}if(c.options.hideDisabled&&v)return void g--;d.push(h(i(o,"opt "+l+x,n,p),b,"",e))}else if(f.data("divider")===!0)d.push(h("",b,"divider"));else if(f.data("hidden")===!0)k=f.data("prevHiddenIndex"),f.next().data("prevHiddenIndex",void 0!==k?k:b),d.push(h(i(o,l,n,p),b,"hidden is-hidden"));else{var B=this.previousElementSibling&&"OPTGROUP"===this.previousElementSibling.tagName;if(!B&&c.options.hideDisabled&&(k=f.data("prevHiddenIndex"),void 0!==k)){var C=m.eq(k)[0].previousElementSibling;C&&"OPTGROUP"===C.tagName&&!C.disabled&&(B=!0)}B&&(g++,d.push(h("",null,"divider",e+"div"))),d.push(h(i(o,l,n,p),b))}c.liObj[b]=g}}),this.multiple||0!==this.$element.find("option:selected").length||this.options.title||this.$element.find("option").eq(0).prop("selected",!0).attr("selected","selected"),d.join("")},findLis:function(){return null==this.$lis&&(this.$lis=this.$menu.find("li")),this.$lis},render:function(b){var c,d=this,e=this.$element.find("option");b!==!1&&e.each(function(a){var b=d.findLis().eq(d.liObj[a]);d.setDisabled(a,this.disabled||"OPTGROUP"===this.parentNode.tagName&&this.parentNode.disabled,b),d.setSelected(a,this.selected,b)}),this.togglePlaceholder(),this.tabIndex();var f=e.map(function(){if(this.selected){if(d.options.hideDisabled&&(this.disabled||"OPTGROUP"===this.parentNode.tagName&&this.parentNode.disabled))return;var b,c=a(this),e=c.data("icon")&&d.options.showIcon?' ':"";return b=d.options.showSubtext&&c.data("subtext")&&!d.multiple?' '+c.data("subtext")+"":"","undefined"!=typeof c.attr("title")?c.attr("title"):c.data("content")&&d.options.showContent?c.data("content").toString():e+c.html()+b}}).toArray(),g=this.multiple?f.join(this.options.multipleSeparator):f[0];if(this.multiple&&this.options.selectedTextFormat.indexOf("count")>-1){var h=this.options.selectedTextFormat.split(">");if(h.length>1&&f.length>h[1]||1==h.length&&f.length>=2){c=this.options.hideDisabled?", [disabled]":"";var i=e.not('[data-divider="true"], [data-hidden="true"]'+c).length,j="function"==typeof this.options.countSelectedText?this.options.countSelectedText(f.length,i):this.options.countSelectedText;g=j.replace("{0}",f.length.toString()).replace("{1}",i.toString())}}void 0==this.options.title&&(this.options.title=this.$element.attr("title")),"static"==this.options.selectedTextFormat&&(g=this.options.title),g||(g="undefined"!=typeof this.options.title?this.options.title:this.options.noneSelectedText),this.$button.attr("title",k(a.trim(g.replace(/<[^>]*>?/g,"")))),this.$button.children(".filter-option").html(g),this.$element.trigger("rendered.bs.select")},setStyle:function(a,b){this.$element.attr("class")&&this.$newElement.addClass(this.$element.attr("class").replace(/selectpicker|mobile-device|bs-select-hidden|validate\[.*\]/gi,""));var c=a?a:this.options.style;"add"==b?this.$button.addClass(c):"remove"==b?this.$button.removeClass(c):(this.$button.removeClass(this.options.style),this.$button.addClass(c))},liHeight:function(b){if(b||this.options.size!==!1&&!this.sizeInfo){var c=document.createElement("div"),d=document.createElement("div"),e=document.createElement("ul"),f=document.createElement("li"),g=document.createElement("li"),h=document.createElement("a"),i=document.createElement("span"),j=this.options.header&&this.$menu.find(".popover-title").length>0?this.$menu.find(".popover-title")[0].cloneNode(!0):null,k=this.options.liveSearch?document.createElement("div"):null,l=this.options.actionsBox&&this.multiple&&this.$menu.find(".bs-actionsbox").length>0?this.$menu.find(".bs-actionsbox")[0].cloneNode(!0):null,m=this.options.doneButton&&this.multiple&&this.$menu.find(".bs-donebutton").length>0?this.$menu.find(".bs-donebutton")[0].cloneNode(!0):null;if(i.className="text",c.className=this.$menu[0].parentNode.className+" open",d.className="dropdown-menu open",e.className="dropdown-menu inner",f.className="divider",i.appendChild(document.createTextNode("Inner text")),h.appendChild(i),g.appendChild(h),e.appendChild(g),e.appendChild(f),j&&d.appendChild(j),k){var n=document.createElement("input");k.className="bs-searchbox",n.className="form-control",k.appendChild(n),d.appendChild(k)}l&&d.appendChild(l),d.appendChild(e),m&&d.appendChild(m),c.appendChild(d),document.body.appendChild(c);var o=h.offsetHeight,p=j?j.offsetHeight:0,q=k?k.offsetHeight:0,r=l?l.offsetHeight:0,s=m?m.offsetHeight:0,t=a(f).outerHeight(!0),u="function"==typeof getComputedStyle&&getComputedStyle(d),v=u?null:a(d),w={vert:parseInt(u?u.paddingTop:v.css("paddingTop"))+parseInt(u?u.paddingBottom:v.css("paddingBottom"))+parseInt(u?u.borderTopWidth:v.css("borderTopWidth"))+parseInt(u?u.borderBottomWidth:v.css("borderBottomWidth")),horiz:parseInt(u?u.paddingLeft:v.css("paddingLeft"))+parseInt(u?u.paddingRight:v.css("paddingRight"))+parseInt(u?u.borderLeftWidth:v.css("borderLeftWidth"))+parseInt(u?u.borderRightWidth:v.css("borderRightWidth"))},x={vert:w.vert+parseInt(u?u.marginTop:v.css("marginTop"))+parseInt(u?u.marginBottom:v.css("marginBottom"))+2,horiz:w.horiz+parseInt(u?u.marginLeft:v.css("marginLeft"))+parseInt(u?u.marginRight:v.css("marginRight"))+2};document.body.removeChild(c),this.sizeInfo={liHeight:o,headerHeight:p,searchHeight:q,actionsHeight:r,doneButtonHeight:s,dividerHeight:t,menuPadding:w,menuExtras:x}}},setSize:function(){if(this.findLis(),this.liHeight(),this.options.header&&this.$menu.css("padding-top",0),this.options.size!==!1){var b,c,d,e,f,g,h,i,j=this,k=this.$menu,l=this.$menuInner,m=a(window),n=this.$newElement[0].offsetHeight,o=this.$newElement[0].offsetWidth,p=this.sizeInfo.liHeight,q=this.sizeInfo.headerHeight,r=this.sizeInfo.searchHeight,s=this.sizeInfo.actionsHeight,t=this.sizeInfo.doneButtonHeight,u=this.sizeInfo.dividerHeight,v=this.sizeInfo.menuPadding,w=this.sizeInfo.menuExtras,x=this.options.hideDisabled?".disabled":"",y=function(){var b,c=j.$newElement.offset(),d=a(j.options.container);j.options.container&&!d.is("body")?(b=d.offset(),b.top+=parseInt(d.css("borderTopWidth")),b.left+=parseInt(d.css("borderLeftWidth"))):b={top:0,left:0};var e=j.options.windowPadding;f=c.top-b.top-m.scrollTop(),g=m.height()-f-n-b.top-e[2],h=c.left-b.left-m.scrollLeft(),i=m.width()-h-o-b.left-e[1],f-=e[0],h-=e[3]};if(y(),"auto"===this.options.size){var z=function(){var m,n=function(b,c){return function(d){return c?d.classList?d.classList.contains(b):a(d).hasClass(b):!(d.classList?d.classList.contains(b):a(d).hasClass(b))}},u=j.$menuInner[0].getElementsByTagName("li"),x=Array.prototype.filter?Array.prototype.filter.call(u,n("hidden",!1)):j.$lis.not(".hidden"),z=Array.prototype.filter?Array.prototype.filter.call(x,n("dropdown-header",!0)):x.filter(".dropdown-header");y(),b=g-w.vert,c=i-w.horiz,j.options.container?(k.data("height")||k.data("height",k.height()),d=k.data("height"),k.data("width")||k.data("width",k.width()),e=k.data("width")):(d=k.height(),e=k.width()),j.options.dropupAuto&&j.$newElement.toggleClass("dropup",f>g&&b-w.verti&&c-w.horiz3?3*p+w.vert-2:0,k.css({"max-height":b+"px",overflow:"hidden","min-height":m+q+r+s+t+"px"}),l.css({"max-height":b-q-r-s-t-v.vert+"px","overflow-y":"auto","min-height":Math.max(m-v.vert,0)+"px"})};z(),this.$searchbox.off("input.getSize propertychange.getSize").on("input.getSize propertychange.getSize",z),m.off("resize.getSize scroll.getSize").on("resize.getSize scroll.getSize",z)}else if(this.options.size&&"auto"!=this.options.size&&this.$lis.not(x).length>this.options.size){var A=this.$lis.not(".divider").not(x).children().slice(0,this.options.size).last().parent().index(),B=this.$lis.slice(0,A+1).filter(".divider").length;b=p*this.options.size+B*u+v.vert,j.options.container?(k.data("height")||k.data("height",k.height()),d=k.data("height")):d=k.height(),j.options.dropupAuto&&this.$newElement.toggleClass("dropup",f>g&&b-w.vert');var b,c,d,e=this,f=a(this.options.container),g=function(a){e.$bsContainer.addClass(a.attr("class").replace(/form-control|fit-width/gi,"")).toggleClass("dropup",a.hasClass("dropup")),b=a.offset(),f.is("body")?c={top:0,left:0}:(c=f.offset(),c.top+=parseInt(f.css("borderTopWidth"))-f.scrollTop(),c.left+=parseInt(f.css("borderLeftWidth"))-f.scrollLeft()),d=a.hasClass("dropup")?0:a[0].offsetHeight,e.$bsContainer.css({top:b.top-c.top+d,left:b.left-c.left,width:a[0].offsetWidth})};this.$button.on("click",function(){var b=a(this);e.isDisabled()||(g(e.$newElement),e.$bsContainer.appendTo(e.options.container).toggleClass("open",!b.hasClass("open")).append(e.$menu))}),a(window).on("resize scroll",function(){g(e.$newElement)}),this.$element.on("hide.bs.select",function(){e.$menu.data("height",e.$menu.height()),e.$bsContainer.detach()})},setSelected:function(a,b,c){c||(this.togglePlaceholder(),c=this.findLis().eq(this.liObj[a])),c.toggleClass("selected",b).find("a").attr("aria-selected",b)},setDisabled:function(a,b,c){c||(c=this.findLis().eq(this.liObj[a])),b?c.addClass("disabled").children("a").attr("href","#").attr("tabindex",-1).attr("aria-disabled",!0):c.removeClass("disabled").children("a").removeAttr("href").attr("tabindex",0).attr("aria-disabled",!1)},isDisabled:function(){return this.$element[0].disabled},checkDisabled:function(){var a=this;this.isDisabled()?(this.$newElement.addClass("disabled"),this.$button.addClass("disabled").attr("tabindex",-1).attr("aria-disabled",!0)):(this.$button.hasClass("disabled")&&(this.$newElement.removeClass("disabled"),this.$button.removeClass("disabled").attr("aria-disabled",!1)),this.$button.attr("tabindex")!=-1||this.$element.data("tabindex")||this.$button.removeAttr("tabindex")),this.$button.click(function(){return!a.isDisabled()})},togglePlaceholder:function(){var a=this.$element.val();this.$button.toggleClass("bs-placeholder",null===a||""===a||a.constructor===Array&&0===a.length)},tabIndex:function(){this.$element.data("tabindex")!==this.$element.attr("tabindex")&&this.$element.attr("tabindex")!==-98&&"-98"!==this.$element.attr("tabindex")&&(this.$element.data("tabindex",this.$element.attr("tabindex")),this.$button.attr("tabindex",this.$element.data("tabindex"))),this.$element.attr("tabindex",-98)},clickListener:function(){var b=this,c=a(document);c.data("spaceSelect",!1),this.$button.on("keyup",function(a){/(32)/.test(a.keyCode.toString(10))&&c.data("spaceSelect")&&(a.preventDefault(),c.data("spaceSelect",!1))}),this.$button.on("click",function(){b.setSize()}),this.$element.on("shown.bs.select",function(){if(b.options.liveSearch||b.multiple){if(!b.multiple){var a=b.liObj[b.$element[0].selectedIndex];if("number"!=typeof a||b.options.size===!1)return;var c=b.$lis.eq(a)[0].offsetTop-b.$menuInner[0].offsetTop;c=c-b.$menuInner[0].offsetHeight/2+b.sizeInfo.liHeight/2,b.$menuInner[0].scrollTop=c}}else b.$menuInner.find(".selected a").focus()}),this.$menuInner.on("click","li a",function(c){var d=a(this),f=d.parent().data("originalIndex"),g=b.$element.val(),h=b.$element.prop("selectedIndex"),i=!0;if(b.multiple&&1!==b.options.maxOptions&&c.stopPropagation(),c.preventDefault(),!b.isDisabled()&&!d.parent().hasClass("disabled")){var j=b.$element.find("option"),k=j.eq(f),l=k.prop("selected"),m=k.parent("optgroup"),n=b.options.maxOptions,o=m.data("maxOptions")||!1;if(b.multiple){if(k.prop("selected",!l),b.setSelected(f,!l),d.blur(),n!==!1||o!==!1){var p=n');t[2]&&(u=u.replace("{var}",t[2][n>1?0:1]),v=v.replace("{var}",t[2][o>1?0:1])),k.prop("selected",!1),b.$menu.append(w),n&&p&&(w.append(a("
    "+u+"
    ")),i=!1,b.$element.trigger("maxReached.bs.select")),o&&q&&(w.append(a("
    "+v+"
    ")),i=!1,b.$element.trigger("maxReachedGrp.bs.select")),setTimeout(function(){b.setSelected(f,!1)},10),w.delay(750).fadeOut(300,function(){a(this).remove()})}}}else j.prop("selected",!1),k.prop("selected",!0),b.$menuInner.find(".selected").removeClass("selected").find("a").attr("aria-selected",!1),b.setSelected(f,!0);!b.multiple||b.multiple&&1===b.options.maxOptions?b.$button.focus():b.options.liveSearch&&b.$searchbox.focus(),i&&(g!=b.$element.val()&&b.multiple||h!=b.$element.prop("selectedIndex")&&!b.multiple)&&(e=[f,k.prop("selected"),l],b.$element.triggerNative("change"))}}),this.$menu.on("click","li.disabled a, .popover-title, .popover-title :not(.close)",function(c){c.currentTarget==this&&(c.preventDefault(),c.stopPropagation(),b.options.liveSearch&&!a(c.target).hasClass("close")?b.$searchbox.focus():b.$button.focus())}),this.$menuInner.on("click",".divider, .dropdown-header",function(a){a.preventDefault(),a.stopPropagation(),b.options.liveSearch?b.$searchbox.focus():b.$button.focus()}),this.$menu.on("click",".popover-title .close",function(){b.$button.click()}),this.$searchbox.on("click",function(a){a.stopPropagation()}),this.$menu.on("click",".actions-btn",function(c){b.options.liveSearch?b.$searchbox.focus():b.$button.focus(),c.preventDefault(),c.stopPropagation(),a(this).hasClass("bs-select-all")?b.selectAll():b.deselectAll()}),this.$element.change(function(){b.render(!1),b.$element.trigger("changed.bs.select",e),e=null})},liveSearchListener:function(){var c=this,d=a('
  • ');this.$button.on("click.dropdown.data-api",function(){c.$menuInner.find(".active").removeClass("active"),c.$searchbox.val()&&(c.$searchbox.val(""),c.$lis.not(".is-hidden").removeClass("hidden"),d.parent().length&&d.remove()),c.multiple||c.$menuInner.find(".selected").addClass("active"),setTimeout(function(){c.$searchbox.focus()},10)}),this.$searchbox.on("click.dropdown.data-api focus.dropdown.data-api touchend.dropdown.data-api",function(a){a.stopPropagation()}),this.$searchbox.on("input propertychange",function(){if(c.$lis.not(".is-hidden").removeClass("hidden"),c.$lis.filter(".active").removeClass("active"),d.remove(),c.$searchbox.val()){var e,f=c.$lis.not(".is-hidden, .divider, .dropdown-header");if(e=c.options.liveSearchNormalize?f.not(":a"+c._searchStyle()+'("'+b(c.$searchbox.val())+'")'):f.not(":"+c._searchStyle()+'("'+c.$searchbox.val()+'")'),e.length===f.length)d.html(c.options.noneResultsText.replace("{0}",'"'+j(c.$searchbox.val())+'"')),c.$menuInner.append(d),c.$lis.addClass("hidden");else{e.addClass("hidden");var g,h=c.$lis.not(".hidden");h.each(function(b){var c=a(this);c.hasClass("divider")?void 0===g?c.addClass("hidden"):(g&&g.addClass("hidden"),g=c):c.hasClass("dropdown-header")&&h.eq(b+1).data("optgroup")!==c.data("optgroup")?c.addClass("hidden"):g=null}),g&&g.addClass("hidden"),f.not(".hidden").first().addClass("active"),c.$menuInner.scrollTop(0)}}})},_searchStyle:function(){var a={begins:"ibegins",startsWith:"ibegins"};return a[this.options.liveSearchStyle]||"icontains"},val:function(a){return"undefined"!=typeof a?(this.$element.val(a),this.render(),this.$element):this.$element.val()},changeAll:function(b){if(this.multiple){"undefined"==typeof b&&(b=!0),this.findLis();var c=this.$element.find("option"),d=this.$lis.not(".divider, .dropdown-header, .disabled, .hidden"),e=d.length,f=[];if(b){if(d.filter(".selected").length===d.length)return}else if(0===d.filter(".selected").length)return;d.toggleClass("selected",b);for(var g=0;g=48&&b.keyCode<=57||b.keyCode>=96&&b.keyCode<=105||b.keyCode>=65&&b.keyCode<=90))return i.options.container?i.$button.trigger("click"):(i.setSize(),i.$menu.parent().addClass("open"),f=!0),void i.$searchbox.focus();if(i.options.liveSearch&&/(^9$|27)/.test(b.keyCode.toString(10))&&f&&(b.preventDefault(),b.stopPropagation(),i.$menuInner.click(),i.$button.focus()),/(38|40)/.test(b.keyCode.toString(10))){if(c=i.$lis.filter(j),!c.length)return;d=i.options.liveSearch?c.index(c.filter(".active")):c.index(c.find("a").filter(":focus").parent()),e=i.$menuInner.data("prevIndex"),38==b.keyCode?(!i.options.liveSearch&&d!=e||d==-1||d--,d<0&&(d+=c.length)):40==b.keyCode&&((i.options.liveSearch||d==e)&&d++,d%=c.length),i.$menuInner.data("prevIndex",d),i.options.liveSearch?(b.preventDefault(),g.hasClass("dropdown-toggle")||(c.removeClass("active").eq(d).addClass("active").children("a").focus(),g.focus())):c.eq(d).children("a").focus()}else if(!g.is("input")){var l,m,n=[];c=i.$lis.filter(j),c.each(function(c){a.trim(a(this).children("a").text().toLowerCase()).substring(0,1)==k[b.keyCode]&&n.push(c)}),l=a(document).data("keycount"),l++,a(document).data("keycount",l),m=a.trim(a(":focus").text().toLowerCase()).substring(0,1),m!=k[b.keyCode]?(l=1,a(document).data("keycount",l)):l>=n.length&&(a(document).data("keycount",0),l>n.length&&(l=1)),c.eq(n[l-1]).children("a").focus()}if((/(13|32)/.test(b.keyCode.toString(10))||/(^9$)/.test(b.keyCode.toString(10))&&i.options.selectOnTab)&&f){if(/(32)/.test(b.keyCode.toString(10))||b.preventDefault(),i.options.liveSearch)/(32)/.test(b.keyCode.toString(10))||(i.$menuInner.find(".active a").click(),g.focus());else{var o=a(":focus");o.click(),o.focus(),b.preventDefault(),a(document).data("spaceSelect",!0)}a(document).data("keycount",0)}(/(^9$|27)/.test(b.keyCode.toString(10))&&f&&(i.multiple||i.options.liveSearch)||/(27)/.test(b.keyCode.toString(10))&&!f)&&(i.$menu.parent().removeClass("open"),i.options.container&&i.$newElement.removeClass("open"),i.$button.focus())},mobile:function(){this.$element.addClass("mobile-device")},refresh:function(){this.$lis=null,this.liObj={},this.reloadLi(),this.render(),this.checkDisabled(),this.liHeight(!0),this.setStyle(), +this.setWidth(),this.$lis&&this.$searchbox.trigger("propertychange"),this.$element.trigger("refreshed.bs.select")},hide:function(){this.$newElement.hide()},show:function(){this.$newElement.show()},remove:function(){this.$newElement.remove(),this.$element.remove()},destroy:function(){this.$newElement.before(this.$element).remove(),this.$bsContainer?this.$bsContainer.remove():this.$menu.remove(),this.$element.off(".bs.select").removeData("selectpicker").removeClass("bs-select-hidden selectpicker")}};var m=a.fn.selectpicker;a.fn.selectpicker=c,a.fn.selectpicker.Constructor=l,a.fn.selectpicker.noConflict=function(){return a.fn.selectpicker=m,this},a(document).data("keycount",0).on("keydown.bs.select",'.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role="listbox"], .bs-searchbox input',l.prototype.keydown).on("focusin.modal",'.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role="listbox"], .bs-searchbox input',function(a){a.stopPropagation()}),a(window).on("load.bs.select.data-api",function(){a(".selectpicker").each(function(){var b=a(this);c.call(b,b.data())})})}(a)}); +//# sourceMappingURL=bootstrap-select.js.map \ No newline at end of file diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ar_AR.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ar_AR.js new file mode 100644 index 0000000..f7005d2 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ar_AR.js @@ -0,0 +1,49 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module unless amdModuleId is set + define(["jquery"], function (a0) { + return (factory(a0)); + }); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +}(this, function (jQuery) { + +/*! + * Translated default messages for bootstrap-select. + * Locale: AR (Arabic) + * Author: Yasser Lotfy + */ +(function ($) { + $.fn.selectpicker.defaults = { + noneSelectedText: 'لم يتم إختيار شئ', + noneResultsText: 'لا توجد نتائج مطابقة لـ {0}', + countSelectedText: function (numSelected, numTotal) { + return (numSelected == 1) ? "{0} خيار تم إختياره" : "{0} خيارات تمت إختيارها"; + }, + maxOptionsText: function (numAll, numGroup) { + return [ + (numAll == 1) ? 'تخطى الحد المسموح ({n} خيار بحد أقصى)' : 'تخطى الحد المسموح ({n} خيارات بحد أقصى)', + (numGroup == 1) ? 'تخطى الحد المسموح للمجموعة ({n} خيار بحد أقصى)' : 'تخطى الحد المسموح للمجموعة ({n} خيارات بحد أقصى)' + ]; + }, + selectAllText: 'إختيار الجميع', + deselectAllText: 'إلغاء إختيار الجميع', + multipleSeparator: '، ' + }; +})(jQuery); + + +})); diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ar_AR.min.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ar_AR.min.js new file mode 100644 index 0000000..1f54d04 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ar_AR.min.js @@ -0,0 +1,12 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){/*! + * Translated default messages for bootstrap-select. + * Locale: AR (Arabic) + * Author: Yasser Lotfy + */ +!function(a){a.fn.selectpicker.defaults={noneSelectedText:"لم يتم إختيار شئ",noneResultsText:"لا توجد نتائج مطابقة لـ {0}",countSelectedText:function(a,b){return 1==a?"{0} خيار تم إختياره":"{0} خيارات تمت إختيارها"},maxOptionsText:function(a,b){return[1==a?"تخطى الحد المسموح ({n} خيار بحد أقصى)":"تخطى الحد المسموح ({n} خيارات بحد أقصى)",1==b?"تخطى الحد المسموح للمجموعة ({n} خيار بحد أقصى)":"تخطى الحد المسموح للمجموعة ({n} خيارات بحد أقصى)"]},selectAllText:"إختيار الجميع",deselectAllText:"إلغاء إختيار الجميع",multipleSeparator:"، "}}(a)}); \ No newline at end of file diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-bg_BG.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-bg_BG.js new file mode 100644 index 0000000..1cb5651 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-bg_BG.js @@ -0,0 +1,44 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module unless amdModuleId is set + define(["jquery"], function (a0) { + return (factory(a0)); + }); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +}(this, function (jQuery) { + +(function ($) { + $.fn.selectpicker.defaults = { + noneSelectedText: 'Нищо избрано', + noneResultsText: 'Няма резултат за {0}', + countSelectedText: function (numSelected, numTotal) { + return (numSelected == 1) ? "{0} избран елемент" : "{0} избрани елемента"; + }, + maxOptionsText: function (numAll, numGroup) { + return [ + (numAll == 1) ? 'Лимита е достигнат ({n} елемент максимум)' : 'Лимита е достигнат ({n} елемента максимум)', + (numGroup == 1) ? 'Груповия лимит е достигнат ({n} елемент максимум)' : 'Груповия лимит е достигнат ({n} елемента максимум)' + ]; + }, + selectAllText: 'Избери всички', + deselectAllText: 'Размаркирай всички', + multipleSeparator: ', ' + }; +})(jQuery); + + +})); diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-bg_BG.min.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-bg_BG.min.js new file mode 100644 index 0000000..3c63a98 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-bg_BG.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Нищо избрано",noneResultsText:"Няма резултат за {0}",countSelectedText:function(a,b){return 1==a?"{0} избран елемент":"{0} избрани елемента"},maxOptionsText:function(a,b){return[1==a?"Лимита е достигнат ({n} елемент максимум)":"Лимита е достигнат ({n} елемента максимум)",1==b?"Груповия лимит е достигнат ({n} елемент максимум)":"Груповия лимит е достигнат ({n} елемента максимум)"]},selectAllText:"Избери всички",deselectAllText:"Размаркирай всички",multipleSeparator:", "}}(a)}); \ No newline at end of file diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-cro_CRO.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-cro_CRO.js new file mode 100644 index 0000000..c8577fb --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-cro_CRO.js @@ -0,0 +1,44 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module unless amdModuleId is set + define(["jquery"], function (a0) { + return (factory(a0)); + }); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +}(this, function (jQuery) { + +(function ($) { + $.fn.selectpicker.defaults = { + noneSelectedText: 'Odaberite stavku', + noneResultsText: 'Nema rezultata pretrage {0}', + countSelectedText: function (numSelected, numTotal) { + return (numSelected == 1) ? "{0} stavka selektirana" : "{0} stavke selektirane"; + }, + maxOptionsText: function (numAll, numGroup) { + return [ + (numAll == 1) ? 'Limit je postignut ({n} stvar maximalno)' : 'Limit je postignut ({n} stavke maksimalno)', + (numGroup == 1) ? 'Grupni limit je postignut ({n} stvar maksimalno)' : 'Grupni limit je postignut ({n} stavke maksimalno)' + ]; + }, + selectAllText: 'Selektiraj sve', + deselectAllText: 'Deselektiraj sve', + multipleSeparator: ', ' + }; +})(jQuery); + + +})); diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-cro_CRO.min.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-cro_CRO.min.js new file mode 100644 index 0000000..c7066d7 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-cro_CRO.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Odaberite stavku",noneResultsText:"Nema rezultata pretrage {0}",countSelectedText:function(a,b){return 1==a?"{0} stavka selektirana":"{0} stavke selektirane"},maxOptionsText:function(a,b){return[1==a?"Limit je postignut ({n} stvar maximalno)":"Limit je postignut ({n} stavke maksimalno)",1==b?"Grupni limit je postignut ({n} stvar maksimalno)":"Grupni limit je postignut ({n} stavke maksimalno)"]},selectAllText:"Selektiraj sve",deselectAllText:"Deselektiraj sve",multipleSeparator:", "}}(a)}); \ No newline at end of file diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-cs_CZ.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-cs_CZ.js new file mode 100644 index 0000000..6213888 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-cs_CZ.js @@ -0,0 +1,37 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module unless amdModuleId is set + define(["jquery"], function (a0) { + return (factory(a0)); + }); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +}(this, function (jQuery) { + +(function ($) { + $.fn.selectpicker.defaults = { + noneSelectedText: 'Nic není vybráno', + noneResultsText: 'Žádné výsledky {0}', + countSelectedText: 'Označeno {0} z {1}', + maxOptionsText: ['Limit překročen ({n} {var} max)', 'Limit skupiny překročen ({n} {var} max)', ['položek', 'položka']], + multipleSeparator: ', ', + selectAllText: 'Vybrat Vše', + deselectAllText: 'Odznačit Vše' + }; +})(jQuery); + + +})); diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-cs_CZ.min.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-cs_CZ.min.js new file mode 100644 index 0000000..2244303 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-cs_CZ.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Nic není vybráno",noneResultsText:"Žádné výsledky {0}",countSelectedText:"Označeno {0} z {1}",maxOptionsText:["Limit překročen ({n} {var} max)","Limit skupiny překročen ({n} {var} max)",["položek","položka"]],multipleSeparator:", ",selectAllText:"Vybrat Vše",deselectAllText:"Odznačit Vše"}}(a)}); \ No newline at end of file diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-da_DK.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-da_DK.js new file mode 100644 index 0000000..bd9651e --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-da_DK.js @@ -0,0 +1,44 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module unless amdModuleId is set + define(["jquery"], function (a0) { + return (factory(a0)); + }); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +}(this, function (jQuery) { + +(function ($) { + $.fn.selectpicker.defaults = { + noneSelectedText: 'Intet valgt', + noneResultsText: 'Ingen resultater fundet {0}', + countSelectedText: function (numSelected, numTotal) { + return (numSelected == 1) ? "{0} valgt" : "{0} valgt"; + }, + maxOptionsText: function (numAll, numGroup) { + return [ + (numAll == 1) ? 'Begrænsning nået (max {n} valgt)' : 'Begrænsning nået (max {n} valgte)', + (numGroup == 1) ? 'Gruppe-begrænsning nået (max {n} valgt)' : 'Gruppe-begrænsning nået (max {n} valgte)' + ]; + }, + selectAllText: 'Markér alle', + deselectAllText: 'Afmarkér alle', + multipleSeparator: ', ' + }; +})(jQuery); + + +})); diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-da_DK.min.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-da_DK.min.js new file mode 100644 index 0000000..253fdac --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-da_DK.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Intet valgt",noneResultsText:"Ingen resultater fundet {0}",countSelectedText:function(a,b){return"{0} valgt"},maxOptionsText:function(a,b){return[1==a?"Begrænsning nået (max {n} valgt)":"Begrænsning nået (max {n} valgte)",1==b?"Gruppe-begrænsning nået (max {n} valgt)":"Gruppe-begrænsning nået (max {n} valgte)"]},selectAllText:"Markér alle",deselectAllText:"Afmarkér alle",multipleSeparator:", "}}(a)}); \ No newline at end of file diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-de_DE.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-de_DE.js new file mode 100644 index 0000000..38f1405 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-de_DE.js @@ -0,0 +1,44 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module unless amdModuleId is set + define(["jquery"], function (a0) { + return (factory(a0)); + }); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +}(this, function (jQuery) { + +(function ($) { + $.fn.selectpicker.defaults = { + noneSelectedText: 'Bitte wählen...', + noneResultsText: 'Keine Ergebnisse für {0}', + countSelectedText: function (numSelected, numTotal) { + return (numSelected == 1) ? "{0} Element ausgewählt" : "{0} Elemente ausgewählt"; + }, + maxOptionsText: function (numAll, numGroup) { + return [ + (numAll == 1) ? 'Limit erreicht ({n} Element max.)' : 'Limit erreicht ({n} Elemente max.)', + (numGroup == 1) ? 'Gruppen-Limit erreicht ({n} Element max.)' : 'Gruppen-Limit erreicht ({n} Elemente max.)' + ]; + }, + selectAllText: 'Alles auswählen', + deselectAllText: 'Nichts auswählen', + multipleSeparator: ', ' + }; +})(jQuery); + + +})); diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-de_DE.min.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-de_DE.min.js new file mode 100644 index 0000000..37753a2 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-de_DE.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Bitte wählen...",noneResultsText:"Keine Ergebnisse für {0}",countSelectedText:function(a,b){return 1==a?"{0} Element ausgewählt":"{0} Elemente ausgewählt"},maxOptionsText:function(a,b){return[1==a?"Limit erreicht ({n} Element max.)":"Limit erreicht ({n} Elemente max.)",1==b?"Gruppen-Limit erreicht ({n} Element max.)":"Gruppen-Limit erreicht ({n} Elemente max.)"]},selectAllText:"Alles auswählen",deselectAllText:"Nichts auswählen",multipleSeparator:", "}}(a)}); \ No newline at end of file diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-en_US.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-en_US.js new file mode 100644 index 0000000..36b8c68 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-en_US.js @@ -0,0 +1,44 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module unless amdModuleId is set + define(["jquery"], function (a0) { + return (factory(a0)); + }); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +}(this, function (jQuery) { + +(function ($) { + $.fn.selectpicker.defaults = { + noneSelectedText: 'Nothing selected', + noneResultsText: 'No results match {0}', + countSelectedText: function (numSelected, numTotal) { + return (numSelected == 1) ? "{0} item selected" : "{0} items selected"; + }, + maxOptionsText: function (numAll, numGroup) { + return [ + (numAll == 1) ? 'Limit reached ({n} item max)' : 'Limit reached ({n} items max)', + (numGroup == 1) ? 'Group limit reached ({n} item max)' : 'Group limit reached ({n} items max)' + ]; + }, + selectAllText: 'Select All', + deselectAllText: 'Deselect All', + multipleSeparator: ', ' + }; +})(jQuery); + + +})); diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-en_US.min.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-en_US.min.js new file mode 100644 index 0000000..356e6a9 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-en_US.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Nothing selected",noneResultsText:"No results match {0}",countSelectedText:function(a,b){return 1==a?"{0} item selected":"{0} items selected"},maxOptionsText:function(a,b){return[1==a?"Limit reached ({n} item max)":"Limit reached ({n} items max)",1==b?"Group limit reached ({n} item max)":"Group limit reached ({n} items max)"]},selectAllText:"Select All",deselectAllText:"Deselect All",multipleSeparator:", "}}(a)}); \ No newline at end of file diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-es_CL.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-es_CL.js new file mode 100644 index 0000000..43edf97 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-es_CL.js @@ -0,0 +1,37 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module unless amdModuleId is set + define(["jquery"], function (a0) { + return (factory(a0)); + }); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +}(this, function (jQuery) { + +(function ($) { + $.fn.selectpicker.defaults = { + noneSelectedText: 'No hay selección', + noneResultsText: 'No hay resultados {0}', + countSelectedText: 'Seleccionados {0} de {1}', + maxOptionsText: ['Límite alcanzado ({n} {var} max)', 'Límite del grupo alcanzado({n} {var} max)', ['elementos', 'element']], + multipleSeparator: ', ', + selectAllText: 'Seleccionar Todos', + deselectAllText: 'Desmarcar Todos' + }; +})(jQuery); + + +})); diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-es_CL.min.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-es_CL.min.js new file mode 100644 index 0000000..2943b78 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-es_CL.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"No hay selección",noneResultsText:"No hay resultados {0}",countSelectedText:"Seleccionados {0} de {1}",maxOptionsText:["Límite alcanzado ({n} {var} max)","Límite del grupo alcanzado({n} {var} max)",["elementos","element"]],multipleSeparator:", ",selectAllText:"Seleccionar Todos",deselectAllText:"Desmarcar Todos"}}(a)}); \ No newline at end of file diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-es_ES.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-es_ES.js new file mode 100644 index 0000000..43edf97 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-es_ES.js @@ -0,0 +1,37 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module unless amdModuleId is set + define(["jquery"], function (a0) { + return (factory(a0)); + }); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +}(this, function (jQuery) { + +(function ($) { + $.fn.selectpicker.defaults = { + noneSelectedText: 'No hay selección', + noneResultsText: 'No hay resultados {0}', + countSelectedText: 'Seleccionados {0} de {1}', + maxOptionsText: ['Límite alcanzado ({n} {var} max)', 'Límite del grupo alcanzado({n} {var} max)', ['elementos', 'element']], + multipleSeparator: ', ', + selectAllText: 'Seleccionar Todos', + deselectAllText: 'Desmarcar Todos' + }; +})(jQuery); + + +})); diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-es_ES.min.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-es_ES.min.js new file mode 100644 index 0000000..2943b78 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-es_ES.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"No hay selección",noneResultsText:"No hay resultados {0}",countSelectedText:"Seleccionados {0} de {1}",maxOptionsText:["Límite alcanzado ({n} {var} max)","Límite del grupo alcanzado({n} {var} max)",["elementos","element"]],multipleSeparator:", ",selectAllText:"Seleccionar Todos",deselectAllText:"Desmarcar Todos"}}(a)}); \ No newline at end of file diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-et_EE.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-et_EE.js new file mode 100644 index 0000000..f168626 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-et_EE.js @@ -0,0 +1,44 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module unless amdModuleId is set + define(["jquery"], function (a0) { + return (factory(a0)); + }); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +}(this, function (jQuery) { + +(function ($) { + $.fn.selectpicker.defaults = { + noneSelectedText: 'Valikut pole tehtud', + noneResultsText: 'Otsingule {0} ei ole vasteid', + countSelectedText: function (numSelected, numTotal) { + return (numSelected == 1) ? "{0} item selected" : "{0} items selected"; + }, + maxOptionsText: function (numAll, numGroup) { + return [ + 'Limiit on {n} max', + 'Globaalne limiit on {n} max' + ]; + }, + selectAllText: 'Vali kõik', + deselectAllText: 'Tühista kõik', + multipleSeparator: ', ' + }; +})(jQuery); + + +})); diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-et_EE.min.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-et_EE.min.js new file mode 100644 index 0000000..e808b57 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-et_EE.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Valikut pole tehtud",noneResultsText:"Otsingule {0} ei ole vasteid",countSelectedText:function(a,b){return 1==a?"{0} item selected":"{0} items selected"},maxOptionsText:function(a,b){return["Limiit on {n} max","Globaalne limiit on {n} max"]},selectAllText:"Vali kõik",deselectAllText:"Tühista kõik",multipleSeparator:", "}}(a)}); \ No newline at end of file diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-eu.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-eu.js new file mode 100644 index 0000000..6b8c1ea --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-eu.js @@ -0,0 +1,37 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module unless amdModuleId is set + define(["jquery"], function (a0) { + return (factory(a0)); + }); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +}(this, function (jQuery) { + +(function ($) { + $.fn.selectpicker.defaults = { + noneSelectedText: 'Hautapenik ez', + noneResultsText: 'Emaitzarik ez {0}', + countSelectedText: '{1}(e)tik {0} hautatuta', + maxOptionsText: ['Mugara iritsita ({n} {var} gehienez)', 'Taldearen mugara iritsita ({n} {var} gehienez)', ['elementu', 'elementu']], + multipleSeparator: ', ', + selectAllText: 'Hautatu Guztiak', + deselectAllText: 'Desautatu Guztiak' + }; +})(jQuery); + + +})); diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-eu.min.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-eu.min.js new file mode 100644 index 0000000..b783e88 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-eu.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Hautapenik ez",noneResultsText:"Emaitzarik ez {0}",countSelectedText:"{1}(e)tik {0} hautatuta",maxOptionsText:["Mugara iritsita ({n} {var} gehienez)","Taldearen mugara iritsita ({n} {var} gehienez)",["elementu","elementu"]],multipleSeparator:", ",selectAllText:"Hautatu Guztiak",deselectAllText:"Desautatu Guztiak"}}(a)}); \ No newline at end of file diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-fa_IR.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-fa_IR.js new file mode 100644 index 0000000..6f7c56a --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-fa_IR.js @@ -0,0 +1,37 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module unless amdModuleId is set + define(["jquery"], function (a0) { + return (factory(a0)); + }); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +}(this, function (jQuery) { + +(function ($) { + $.fn.selectpicker.defaults = { + noneSelectedText: 'چیزی انتخاب نشده است', + noneResultsText: 'هیج مشابهی برای {0} پیدا نشد', + countSelectedText: "{0} از {1} مورد انتخاب شده", + maxOptionsText: ['بیشتر ممکن نیست {حداکثر {n} عدد}', 'بیشتر ممکن نیست {حداکثر {n} عدد}'], + selectAllText: 'انتخاب همه', + deselectAllText: 'انتخاب هیچ کدام', + multipleSeparator: ', ' + }; +})(jQuery); + + +})); diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-fa_IR.min.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-fa_IR.min.js new file mode 100644 index 0000000..871b70f --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-fa_IR.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"چیزی انتخاب نشده است",noneResultsText:"هیج مشابهی برای {0} پیدا نشد",countSelectedText:"{0} از {1} مورد انتخاب شده",maxOptionsText:["بیشتر ممکن نیست {حداکثر {n} عدد}","بیشتر ممکن نیست {حداکثر {n} عدد}"],selectAllText:"انتخاب همه",deselectAllText:"انتخاب هیچ کدام",multipleSeparator:", "}}(a)}); \ No newline at end of file diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-fi_FI.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-fi_FI.js new file mode 100644 index 0000000..d6d2dc3 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-fi_FI.js @@ -0,0 +1,44 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module unless amdModuleId is set + define(["jquery"], function (a0) { + return (factory(a0)); + }); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +}(this, function (jQuery) { + +(function ($) { + $.fn.selectpicker.defaults = { + noneSelectedText: 'Ei valintoja', + noneResultsText: 'Ei hakutuloksia {0}', + countSelectedText: function (numSelected, numTotal) { + return (numSelected == 1) ? "{0} valittu" : "{0} valitut"; + }, + maxOptionsText: function (numAll, numGroup) { + return [ + (numAll == 1) ? 'Valintojen maksimimäärä ({n} saavutettu)' : 'Valintojen maksimimäärä ({n} saavutettu)', + (numGroup == 1) ? 'Ryhmän maksimimäärä ({n} saavutettu)' : 'Ryhmän maksimimäärä ({n} saavutettu)' + ]; + }, + selectAllText: 'Valitse kaikki', + deselectAllText: 'Poista kaikki', + multipleSeparator: ', ' + }; +})(jQuery); + + +})); diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-fi_FI.min.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-fi_FI.min.js new file mode 100644 index 0000000..9d9638e --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-fi_FI.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Ei valintoja",noneResultsText:"Ei hakutuloksia {0}",countSelectedText:function(a,b){return 1==a?"{0} valittu":"{0} valitut"},maxOptionsText:function(a,b){return["Valintojen maksimimäärä ({n} saavutettu)","Ryhmän maksimimäärä ({n} saavutettu)"]},selectAllText:"Valitse kaikki",deselectAllText:"Poista kaikki",multipleSeparator:", "}}(a)}); \ No newline at end of file diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-fr_FR.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-fr_FR.js new file mode 100644 index 0000000..94cd4f3 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-fr_FR.js @@ -0,0 +1,44 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module unless amdModuleId is set + define(["jquery"], function (a0) { + return (factory(a0)); + }); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +}(this, function (jQuery) { + +(function ($) { + $.fn.selectpicker.defaults = { + noneSelectedText: 'Aucune sélection', + noneResultsText: 'Aucun résultat pour {0}', + countSelectedText: function (numSelected, numTotal) { + return (numSelected > 1) ? "{0} éléments sélectionnés" : "{0} élément sélectionné"; + }, + maxOptionsText: function (numAll, numGroup) { + return [ + (numAll > 1) ? 'Limite atteinte ({n} éléments max)' : 'Limite atteinte ({n} élément max)', + (numGroup > 1) ? 'Limite du groupe atteinte ({n} éléments max)' : 'Limite du groupe atteinte ({n} élément max)' + ]; + }, + multipleSeparator: ', ', + selectAllText: 'Tout sélectionner', + deselectAllText: 'Tout désélectionner', + }; +})(jQuery); + + +})); diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-fr_FR.min.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-fr_FR.min.js new file mode 100644 index 0000000..bb6c236 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-fr_FR.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Aucune sélection",noneResultsText:"Aucun résultat pour {0}",countSelectedText:function(a,b){return a>1?"{0} éléments sélectionnés":"{0} élément sélectionné"},maxOptionsText:function(a,b){return[a>1?"Limite atteinte ({n} éléments max)":"Limite atteinte ({n} élément max)",b>1?"Limite du groupe atteinte ({n} éléments max)":"Limite du groupe atteinte ({n} élément max)"]},multipleSeparator:", ",selectAllText:"Tout sélectionner",deselectAllText:"Tout désélectionner"}}(a)}); \ No newline at end of file diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-hu_HU.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-hu_HU.js new file mode 100644 index 0000000..219ff91 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-hu_HU.js @@ -0,0 +1,44 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module unless amdModuleId is set + define(["jquery"], function (a0) { + return (factory(a0)); + }); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +}(this, function (jQuery) { + +(function ($) { + $.fn.selectpicker.defaults = { + noneSelectedText: 'Válasszon!', + noneResultsText: 'Nincs találat {0}', + countSelectedText: function (numSelected, numTotal) { + return '{0} elem kiválasztva'; + }, + maxOptionsText: function (numAll, numGroup) { + return [ + 'Legfeljebb {n} elem választható', + 'A csoportban legfeljebb {n} elem választható' + ]; + }, + selectAllText: 'Mind', + deselectAllText: 'Egyik sem', + multipleSeparator: ', ' + }; +})(jQuery); + + +})); diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-hu_HU.min.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-hu_HU.min.js new file mode 100644 index 0000000..6eea515 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-hu_HU.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Válasszon!",noneResultsText:"Nincs találat {0}",countSelectedText:function(a,b){return"{0} elem kiválasztva"},maxOptionsText:function(a,b){return["Legfeljebb {n} elem választható","A csoportban legfeljebb {n} elem választható"]},selectAllText:"Mind",deselectAllText:"Egyik sem",multipleSeparator:", "}}(a)}); \ No newline at end of file diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-id_ID.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-id_ID.js new file mode 100644 index 0000000..2f6ca91 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-id_ID.js @@ -0,0 +1,37 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module unless amdModuleId is set + define(["jquery"], function (a0) { + return (factory(a0)); + }); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +}(this, function (jQuery) { + +(function ($) { + $.fn.selectpicker.defaults = { + noneSelectedText: 'Tidak ada yang dipilih', + noneResultsText: 'Tidak ada yang cocok {0}', + countSelectedText: '{0} terpilih', + maxOptionsText: ['Mencapai batas (maksimum {n})', 'Mencapai batas grup (maksimum {n})'], + selectAllText: 'Pilih Semua', + deselectAllText: 'Hapus Semua', + multipleSeparator: ', ' + }; +})(jQuery); + + +})); diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-id_ID.min.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-id_ID.min.js new file mode 100644 index 0000000..e61f0f5 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-id_ID.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Tidak ada yang dipilih",noneResultsText:"Tidak ada yang cocok {0}",countSelectedText:"{0} terpilih",maxOptionsText:["Mencapai batas (maksimum {n})","Mencapai batas grup (maksimum {n})"],selectAllText:"Pilih Semua",deselectAllText:"Hapus Semua",multipleSeparator:", "}}(a)}); \ No newline at end of file diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-it_IT.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-it_IT.js new file mode 100644 index 0000000..5b3d1f2 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-it_IT.js @@ -0,0 +1,39 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module unless amdModuleId is set + define(["jquery"], function (a0) { + return (factory(a0)); + }); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +}(this, function (jQuery) { + +(function ($) { + $.fn.selectpicker.defaults = { + noneSelectedText: 'Nessuna selezione', + noneResultsText: 'Nessun risultato per {0}', + countSelectedText: function (numSelected, numTotal){ + return (numSelected == 1) ? 'Selezionato {0} di {1}' : 'Selezionati {0} di {1}'; + }, + maxOptionsText: ['Limite raggiunto ({n} {var} max)', 'Limite del gruppo raggiunto ({n} {var} max)', ['elementi', 'elemento']], + multipleSeparator: ', ', + selectAllText: 'Seleziona Tutto', + deselectAllText: 'Deseleziona Tutto' + }; +})(jQuery); + + +})); diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-it_IT.min.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-it_IT.min.js new file mode 100644 index 0000000..2f3d398 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-it_IT.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Nessuna selezione",noneResultsText:"Nessun risultato per {0}",countSelectedText:function(a,b){return 1==a?"Selezionato {0} di {1}":"Selezionati {0} di {1}"},maxOptionsText:["Limite raggiunto ({n} {var} max)","Limite del gruppo raggiunto ({n} {var} max)",["elementi","elemento"]],multipleSeparator:", ",selectAllText:"Seleziona Tutto",deselectAllText:"Deseleziona Tutto"}}(a)}); \ No newline at end of file diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ja_JP.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ja_JP.js new file mode 100644 index 0000000..0722e33 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ja_JP.js @@ -0,0 +1,37 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module unless amdModuleId is set + define(["jquery"], function (a0) { + return (factory(a0)); + }); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +}(this, function (jQuery) { + +(function ($) { + $.fn.selectpicker.defaults = { + noneSelectedText: '何もが選択した', + noneResultsText: '\'{0}\'が結果を返さない', + countSelectedText: '{0}/{1}が選択した', + maxOptionsText: ['限界は達した({n}{var}最大)', '限界をグループは達した({n}{var}最大)', ['アイテム', 'アイテム']], + selectAllText: '全部を選択する', + deselectAllText: '何も選択しない', + multipleSeparator: ', ' + }; +})(jQuery); + + +})); diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ja_JP.min.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ja_JP.min.js new file mode 100644 index 0000000..279a07f --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ja_JP.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"何もが選択した",noneResultsText:"'{0}'が結果を返さない",countSelectedText:"{0}/{1}が選択した",maxOptionsText:["限界は達した({n}{var}最大)","限界をグループは達した({n}{var}最大)",["アイテム","アイテム"]],selectAllText:"全部を選択する",deselectAllText:"何も選択しない",multipleSeparator:", "}}(a)}); \ No newline at end of file diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-kh_KM.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-kh_KM.js new file mode 100644 index 0000000..d1c4922 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-kh_KM.js @@ -0,0 +1,44 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module unless amdModuleId is set + define(["jquery"], function (a0) { + return (factory(a0)); + }); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +}(this, function (jQuery) { + +(function ($) { + $.fn.selectpicker.defaults = { + noneSelectedText: 'មិនមានអ្វីបានជ្រើសរើស', + noneResultsText: 'មិនមានលទ្ធផល {0}', + countSelectedText: function (numSelected, numTotal) { + return (numSelected == 1) ? "{0} ធាតុដែលបានជ្រើស" : "{0} ធាតុដែលបានជ្រើស"; + }, + maxOptionsText: function (numAll, numGroup) { + return [ + (numAll == 1) ? 'ឈានដល់ដែនកំណត់ ( {n} ធាតុអតិបរមា)' : 'អតិបរមាឈានដល់ដែនកំណត់ ( {n} ធាតុ)', + (numGroup == 1) ? 'ដែនកំណត់ក្រុមឈានដល់ ( {n} អតិបរមាធាតុ)' : 'អតិបរមាក្រុមឈានដល់ដែនកំណត់ ( {n} ធាតុ)' + ]; + }, + selectAllText: 'ជ្រើស​យក​ទាំងអស់', + deselectAllText: 'មិនជ្រើស​យក​ទាំងអស', + multipleSeparator: ', ' + }; +})(jQuery); + + +})); diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-kh_KM.min.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-kh_KM.min.js new file mode 100644 index 0000000..3ba80e3 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-kh_KM.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"មិនមានអ្វីបានជ្រើសរើស",noneResultsText:"មិនមានលទ្ធផល {0}",countSelectedText:function(a,b){return"{0} ធាតុដែលបានជ្រើស"},maxOptionsText:function(a,b){return[1==a?"ឈានដល់ដែនកំណត់ ( {n} ធាតុអតិបរមា)":"អតិបរមាឈានដល់ដែនកំណត់ ( {n} ធាតុ)",1==b?"ដែនកំណត់ក្រុមឈានដល់ ( {n} អតិបរមាធាតុ)":"អតិបរមាក្រុមឈានដល់ដែនកំណត់ ( {n} ធាតុ)"]},selectAllText:"ជ្រើស​យក​ទាំងអស់",deselectAllText:"មិនជ្រើស​យក​ទាំងអស",multipleSeparator:", "}}(a)}); \ No newline at end of file diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ko_KR.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ko_KR.js new file mode 100644 index 0000000..b5c52ef --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ko_KR.js @@ -0,0 +1,44 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module unless amdModuleId is set + define(["jquery"], function (a0) { + return (factory(a0)); + }); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +}(this, function (jQuery) { + +(function ($) { + $.fn.selectpicker.defaults = { + noneSelectedText: '항목을 선택해주세요', + noneResultsText: '{0} 검색 결과가 없습니다', + countSelectedText: function (numSelected, numTotal) { + return "{0}개를 선택하였습니다"; + }, + maxOptionsText: function (numAll, numGroup) { + return [ + '{n}개까지 선택 가능합니다', + '해당 그룹은 {n}개까지 선택 가능합니다' + ]; + }, + selectAllText: '전체선택', + deselectAllText: '전체해제', + multipleSeparator: ', ' + }; +})(jQuery); + + +})); diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ko_KR.min.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ko_KR.min.js new file mode 100644 index 0000000..7bd9bcf --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ko_KR.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"항목을 선택해주세요",noneResultsText:"{0} 검색 결과가 없습니다",countSelectedText:function(a,b){return"{0}개를 선택하였습니다"},maxOptionsText:function(a,b){return["{n}개까지 선택 가능합니다","해당 그룹은 {n}개까지 선택 가능합니다"]},selectAllText:"전체선택",deselectAllText:"전체해제",multipleSeparator:", "}}(a)}); \ No newline at end of file diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-lt_LT.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-lt_LT.js new file mode 100644 index 0000000..be96a28 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-lt_LT.js @@ -0,0 +1,44 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module unless amdModuleId is set + define(["jquery"], function (a0) { + return (factory(a0)); + }); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +}(this, function (jQuery) { + +(function ($) { + $.fn.selectpicker.defaults = { + noneSelectedText: 'Niekas nepasirinkta', + noneResultsText: 'Niekas nesutapo su {0}', + countSelectedText: function (numSelected, numTotal) { + return (numSelected == 1) ? "{0} elementas pasirinktas" : "{0} elementai(-ų) pasirinkta"; + }, + maxOptionsText: function (numAll, numGroup) { + return [ + (numAll == 1) ? 'Pasiekta riba ({n} elementas daugiausiai)' : 'Riba pasiekta ({n} elementai(-ų) daugiausiai)', + (numGroup == 1) ? 'Grupės riba pasiekta ({n} elementas daugiausiai)' : 'Grupės riba pasiekta ({n} elementai(-ų) daugiausiai)' + ]; + }, + selectAllText: 'Pasirinkti visus', + deselectAllText: 'Atmesti visus', + multipleSeparator: ', ' + }; +})(jQuery); + + +})); diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-lt_LT.min.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-lt_LT.min.js new file mode 100644 index 0000000..b6baef8 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-lt_LT.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Niekas nepasirinkta",noneResultsText:"Niekas nesutapo su {0}",countSelectedText:function(a,b){return 1==a?"{0} elementas pasirinktas":"{0} elementai(-ų) pasirinkta"},maxOptionsText:function(a,b){return[1==a?"Pasiekta riba ({n} elementas daugiausiai)":"Riba pasiekta ({n} elementai(-ų) daugiausiai)",1==b?"Grupės riba pasiekta ({n} elementas daugiausiai)":"Grupės riba pasiekta ({n} elementai(-ų) daugiausiai)"]},selectAllText:"Pasirinkti visus",deselectAllText:"Atmesti visus",multipleSeparator:", "}}(a)}); \ No newline at end of file diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-nb_NO.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-nb_NO.js new file mode 100644 index 0000000..49cc8f2 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-nb_NO.js @@ -0,0 +1,44 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module unless amdModuleId is set + define(["jquery"], function (a0) { + return (factory(a0)); + }); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +}(this, function (jQuery) { + +(function ($) { + $.fn.selectpicker.defaults = { + noneSelectedText: 'Ingen valgt', + noneResultsText: 'Søket gir ingen treff {0}', + countSelectedText: function (numSelected, numTotal) { + return (numSelected == 1) ? "{0} alternativ valgt" : "{0} alternativer valgt"; + }, + maxOptionsText: function (numAll, numGroup) { + return [ + (numAll == 1) ? 'Grense nådd (maks {n} valg)' : 'Grense nådd (maks {n} valg)', + (numGroup == 1) ? 'Grense for grupper nådd (maks {n} grupper)' : 'Grense for grupper nådd (maks {n} grupper)' + ]; + }, + selectAllText: 'Merk alle', + deselectAllText: 'Fjern alle', + multipleSeparator: ', ' + }; +})(jQuery); + + +})); diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-nb_NO.min.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-nb_NO.min.js new file mode 100644 index 0000000..1487f1b --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-nb_NO.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Ingen valgt",noneResultsText:"Søket gir ingen treff {0}",countSelectedText:function(a,b){return 1==a?"{0} alternativ valgt":"{0} alternativer valgt"},maxOptionsText:function(a,b){return["Grense nådd (maks {n} valg)","Grense for grupper nådd (maks {n} grupper)"]},selectAllText:"Merk alle",deselectAllText:"Fjern alle",multipleSeparator:", "}}(a)}); \ No newline at end of file diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-nl_NL.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-nl_NL.js new file mode 100644 index 0000000..da5c271 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-nl_NL.js @@ -0,0 +1,37 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module unless amdModuleId is set + define(["jquery"], function (a0) { + return (factory(a0)); + }); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +}(this, function (jQuery) { + +(function ($) { + $.fn.selectpicker.defaults = { + noneSelectedText: 'Niets geselecteerd', + noneResultsText: 'Geen resultaten gevonden voor {0}', + countSelectedText: '{0} van {1} geselecteerd', + maxOptionsText: ['Limiet bereikt ({n} {var} max)', 'Groep limiet bereikt ({n} {var} max)', ['items', 'item']], + selectAllText: 'Alles selecteren', + deselectAllText: 'Alles deselecteren', + multipleSeparator: ', ' + }; +})(jQuery); + + +})); diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-nl_NL.min.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-nl_NL.min.js new file mode 100644 index 0000000..65ccf95 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-nl_NL.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Niets geselecteerd",noneResultsText:"Geen resultaten gevonden voor {0}",countSelectedText:"{0} van {1} geselecteerd",maxOptionsText:["Limiet bereikt ({n} {var} max)","Groep limiet bereikt ({n} {var} max)",["items","item"]],selectAllText:"Alles selecteren",deselectAllText:"Alles deselecteren",multipleSeparator:", "}}(a)}); \ No newline at end of file diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-pl_PL.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-pl_PL.js new file mode 100644 index 0000000..cee2b67 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-pl_PL.js @@ -0,0 +1,37 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module unless amdModuleId is set + define(["jquery"], function (a0) { + return (factory(a0)); + }); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +}(this, function (jQuery) { + +(function ($) { + $.fn.selectpicker.defaults = { + noneSelectedText: 'Nic nie zaznaczono', + noneResultsText: 'Brak wyników wyszukiwania {0}', + countSelectedText: 'Zaznaczono {0} z {1}', + maxOptionsText: ['Osiągnięto limit ({n} {var} max)', 'Limit grupy osiągnięty ({n} {var} max)', ['elementy', 'element']], + selectAllText: 'Zaznacz wszystkie', + deselectAllText: 'Odznacz wszystkie', + multipleSeparator: ', ' + }; +})(jQuery); + + +})); diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-pl_PL.min.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-pl_PL.min.js new file mode 100644 index 0000000..5aede3d --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-pl_PL.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Nic nie zaznaczono",noneResultsText:"Brak wyników wyszukiwania {0}",countSelectedText:"Zaznaczono {0} z {1}",maxOptionsText:["Osiągnięto limit ({n} {var} max)","Limit grupy osiągnięty ({n} {var} max)",["elementy","element"]],selectAllText:"Zaznacz wszystkie",deselectAllText:"Odznacz wszystkie",multipleSeparator:", "}}(a)}); \ No newline at end of file diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-pt_BR.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-pt_BR.js new file mode 100644 index 0000000..7207f68 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-pt_BR.js @@ -0,0 +1,37 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module unless amdModuleId is set + define(["jquery"], function (a0) { + return (factory(a0)); + }); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +}(this, function (jQuery) { + +(function ($) { + $.fn.selectpicker.defaults = { + noneSelectedText: 'Nada selecionado', + noneResultsText: 'Nada encontrado contendo {0}', + countSelectedText: 'Selecionado {0} de {1}', + maxOptionsText: ['Limite excedido (máx. {n} {var})', 'Limite do grupo excedido (máx. {n} {var})', ['itens', 'item']], + multipleSeparator: ', ', + selectAllText: 'Selecionar Todos', + deselectAllText: 'Desmarcar Todos' + }; +})(jQuery); + + +})); diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-pt_BR.min.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-pt_BR.min.js new file mode 100644 index 0000000..5f496ba --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-pt_BR.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Nada selecionado",noneResultsText:"Nada encontrado contendo {0}",countSelectedText:"Selecionado {0} de {1}",maxOptionsText:["Limite excedido (máx. {n} {var})","Limite do grupo excedido (máx. {n} {var})",["itens","item"]],multipleSeparator:", ",selectAllText:"Selecionar Todos",deselectAllText:"Desmarcar Todos"}}(a)}); \ No newline at end of file diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-pt_PT.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-pt_PT.js new file mode 100644 index 0000000..d059b4f --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-pt_PT.js @@ -0,0 +1,37 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module unless amdModuleId is set + define(["jquery"], function (a0) { + return (factory(a0)); + }); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +}(this, function (jQuery) { + +(function ($) { +$.fn.selectpicker.defaults = { + noneSelectedText: 'Nenhum seleccionado', + noneResultsText: 'Sem resultados contendo {0}', + countSelectedText: 'Selecionado {0} de {1}', + maxOptionsText: ['Limite ultrapassado (máx. {n} {var})', 'Limite de seleções ultrapassado (máx. {n} {var})', ['itens', 'item']], + multipleSeparator: ', ', + selectAllText: 'Selecionar Tudo', + deselectAllText: 'Desmarcar Todos' +}; +})(jQuery); + + +})); diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-pt_PT.min.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-pt_PT.min.js new file mode 100644 index 0000000..e2c4d6e --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-pt_PT.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Nenhum seleccionado",noneResultsText:"Sem resultados contendo {0}",countSelectedText:"Selecionado {0} de {1}",maxOptionsText:["Limite ultrapassado (máx. {n} {var})","Limite de seleções ultrapassado (máx. {n} {var})",["itens","item"]],multipleSeparator:", ",selectAllText:"Selecionar Tudo",deselectAllText:"Desmarcar Todos"}}(a)}); \ No newline at end of file diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ro_RO.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ro_RO.js new file mode 100644 index 0000000..19c6829 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ro_RO.js @@ -0,0 +1,38 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module unless amdModuleId is set + define(["jquery"], function (a0) { + return (factory(a0)); + }); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +}(this, function (jQuery) { + +(function ($) { + $.fn.selectpicker.defaults = { + doneButtonText: 'Închide', + noneSelectedText: 'Nu a fost selectat nimic', + noneResultsText: 'Nu există niciun rezultat {0}', + countSelectedText: '{0} din {1} selectat(e)', + maxOptionsText: ['Limita a fost atinsă ({n} {var} max)', 'Limita de grup a fost atinsă ({n} {var} max)', ['iteme', 'item']], + selectAllText: 'Selectează toate', + deselectAllText: 'Deselectează toate', + multipleSeparator: ', ' + }; +})(jQuery); + + +})); diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ro_RO.min.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ro_RO.min.js new file mode 100644 index 0000000..71df790 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ro_RO.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={doneButtonText:"Închide",noneSelectedText:"Nu a fost selectat nimic",noneResultsText:"Nu există niciun rezultat {0}",countSelectedText:"{0} din {1} selectat(e)",maxOptionsText:["Limita a fost atinsă ({n} {var} max)","Limita de grup a fost atinsă ({n} {var} max)",["iteme","item"]],selectAllText:"Selectează toate",deselectAllText:"Deselectează toate",multipleSeparator:", "}}(a)}); \ No newline at end of file diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ru_RU.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ru_RU.js new file mode 100644 index 0000000..b249c39 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ru_RU.js @@ -0,0 +1,38 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module unless amdModuleId is set + define(["jquery"], function (a0) { + return (factory(a0)); + }); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +}(this, function (jQuery) { + +(function ($) { + $.fn.selectpicker.defaults = { + noneSelectedText: 'Ничего не выбрано', + noneResultsText: 'Совпадений не найдено {0}', + countSelectedText: 'Выбрано {0} из {1}', + maxOptionsText: ['Достигнут предел ({n} {var} максимум)', 'Достигнут предел в группе ({n} {var} максимум)', ['шт.', 'шт.']], + doneButtonText: 'Закрыть', + selectAllText: 'Выбрать все', + deselectAllText: 'Отменить все', + multipleSeparator: ', ' + }; +})(jQuery); + + +})); diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ru_RU.min.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ru_RU.min.js new file mode 100644 index 0000000..8f10ca5 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ru_RU.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Ничего не выбрано",noneResultsText:"Совпадений не найдено {0}",countSelectedText:"Выбрано {0} из {1}",maxOptionsText:["Достигнут предел ({n} {var} максимум)","Достигнут предел в группе ({n} {var} максимум)",["шт.","шт."]],doneButtonText:"Закрыть",selectAllText:"Выбрать все",deselectAllText:"Отменить все",multipleSeparator:", "}}(a)}); \ No newline at end of file diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-sk_SK.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-sk_SK.js new file mode 100644 index 0000000..50f7309 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-sk_SK.js @@ -0,0 +1,37 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module unless amdModuleId is set + define(["jquery"], function (a0) { + return (factory(a0)); + }); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +}(this, function (jQuery) { + +(function ($) { + $.fn.selectpicker.defaults = { + noneSelectedText: 'Vyberte zo zoznamu', + noneResultsText: 'Pre výraz {0} neboli nájdené žiadne výsledky', + countSelectedText: 'Vybrané {0} z {1}', + maxOptionsText: ['Limit prekročený ({n} {var} max)', 'Limit skupiny prekročený ({n} {var} max)', ['položiek', 'položka']], + selectAllText: 'Vybrať všetky', + deselectAllText: 'Zrušiť výber', + multipleSeparator: ', ' + }; +})(jQuery); + + +})); diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-sk_SK.min.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-sk_SK.min.js new file mode 100644 index 0000000..e70c3fa --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-sk_SK.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Vyberte zo zoznamu",noneResultsText:"Pre výraz {0} neboli nájdené žiadne výsledky",countSelectedText:"Vybrané {0} z {1}",maxOptionsText:["Limit prekročený ({n} {var} max)","Limit skupiny prekročený ({n} {var} max)",["položiek","položka"]],selectAllText:"Vybrať všetky",deselectAllText:"Zrušiť výber",multipleSeparator:", "}}(a)}); \ No newline at end of file diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-sl_SI.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-sl_SI.js new file mode 100644 index 0000000..8714713 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-sl_SI.js @@ -0,0 +1,42 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module unless amdModuleId is set + define(["jquery"], function (a0) { + return (factory(a0)); + }); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +}(this, function (jQuery) { + +(function ($) { + $.fn.selectpicker.defaults = { + noneSelectedText: 'Nič izbranega', + noneResultsText: 'Ni zadetkov za {0}', + countSelectedText: '{0} od {1} izbranih', + maxOptionsText: function (numAll, numGroup) { + return [ + 'Omejitev dosežena (max. izbranih: {n})', + 'Omejitev skupine dosežena (max. izbranih: {n})' + ]; + }, + selectAllText: 'Izberi vse', + deselectAllText: 'Počisti izbor', + multipleSeparator: ', ' + }; +})(jQuery); + + +})); diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-sl_SI.min.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-sl_SI.min.js new file mode 100644 index 0000000..f8372b3 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-sl_SI.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Nič izbranega",noneResultsText:"Ni zadetkov za {0}",countSelectedText:"{0} od {1} izbranih",maxOptionsText:function(a,b){return["Omejitev dosežena (max. izbranih: {n})","Omejitev skupine dosežena (max. izbranih: {n})"]},selectAllText:"Izberi vse",deselectAllText:"Počisti izbor",multipleSeparator:", "}}(a)}); \ No newline at end of file diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-sv_SE.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-sv_SE.js new file mode 100644 index 0000000..8cf1467 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-sv_SE.js @@ -0,0 +1,44 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module unless amdModuleId is set + define(["jquery"], function (a0) { + return (factory(a0)); + }); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +}(this, function (jQuery) { + +(function ($) { + $.fn.selectpicker.defaults = { + noneSelectedText: 'Inget valt', + noneResultsText: 'Inget sökresultat matchar {0}', + countSelectedText: function (numSelected, numTotal) { + return (numSelected === 1) ? "{0} alternativ valt" : "{0} alternativ valda"; + }, + maxOptionsText: function (numAll, numGroup) { + return [ + 'Gräns uppnåd (max {n} alternativ)', + 'Gräns uppnåd (max {n} gruppalternativ)' + ]; + }, + selectAllText: 'Markera alla', + deselectAllText: 'Avmarkera alla', + multipleSeparator: ', ' + }; +})(jQuery); + + +})); diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-sv_SE.min.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-sv_SE.min.js new file mode 100644 index 0000000..0c78926 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-sv_SE.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Inget valt",noneResultsText:"Inget sökresultat matchar {0}",countSelectedText:function(a,b){return 1===a?"{0} alternativ valt":"{0} alternativ valda"},maxOptionsText:function(a,b){return["Gräns uppnåd (max {n} alternativ)","Gräns uppnåd (max {n} gruppalternativ)"]},selectAllText:"Markera alla",deselectAllText:"Avmarkera alla",multipleSeparator:", "}}(a)}); \ No newline at end of file diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-tr_TR.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-tr_TR.js new file mode 100644 index 0000000..b3bc46e --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-tr_TR.js @@ -0,0 +1,44 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module unless amdModuleId is set + define(["jquery"], function (a0) { + return (factory(a0)); + }); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +}(this, function (jQuery) { + +(function ($) { + $.fn.selectpicker.defaults = { + noneSelectedText: 'Hiçbiri seçilmedi', + noneResultsText: 'Hiçbir sonuç bulunamadı {0}', + countSelectedText: function (numSelected, numTotal) { + return (numSelected == 1) ? "{0} öğe seçildi" : "{0} öğe seçildi"; + }, + maxOptionsText: function (numAll, numGroup) { + return [ + (numAll == 1) ? 'Limit aşıldı (maksimum {n} sayıda öğe )' : 'Limit aşıldı (maksimum {n} sayıda öğe)', + (numGroup == 1) ? 'Grup limiti aşıldı (maksimum {n} sayıda öğe)' : 'Grup limiti aşıldı (maksimum {n} sayıda öğe)' + ]; + }, + selectAllText: 'Tümünü Seç', + deselectAllText: 'Seçiniz', + multipleSeparator: ', ' + }; +})(jQuery); + + +})); diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-tr_TR.min.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-tr_TR.min.js new file mode 100644 index 0000000..715f145 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-tr_TR.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Hiçbiri seçilmedi",noneResultsText:"Hiçbir sonuç bulunamadı {0}",countSelectedText:function(a,b){return"{0} öğe seçildi"},maxOptionsText:function(a,b){return[1==a?"Limit aşıldı (maksimum {n} sayıda öğe )":"Limit aşıldı (maksimum {n} sayıda öğe)","Grup limiti aşıldı (maksimum {n} sayıda öğe)"]},selectAllText:"Tümünü Seç",deselectAllText:"Seçiniz",multipleSeparator:", "}}(a)}); \ No newline at end of file diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ua_UA.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ua_UA.js new file mode 100644 index 0000000..d02188b --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ua_UA.js @@ -0,0 +1,37 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module unless amdModuleId is set + define(["jquery"], function (a0) { + return (factory(a0)); + }); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +}(this, function (jQuery) { + +(function ($) { + $.fn.selectpicker.defaults = { + noneSelectedText: 'Нічого не вибрано', + noneResultsText: 'Збігів не знайдено {0}', + countSelectedText: 'Вибрано {0} із {1}', + maxOptionsText: ['Досягнута межа ({n} {var} максимум)', 'Досягнута межа в групі ({n} {var} максимум)', ['items', 'item']], + multipleSeparator: ', ', + selectAllText: 'Вибрати все', + deselectAllText: 'Скасувати вибір усі' + }; +})(jQuery); + + +})); diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ua_UA.min.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ua_UA.min.js new file mode 100644 index 0000000..eb4152e --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-ua_UA.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Нічого не вибрано",noneResultsText:"Збігів не знайдено {0}",countSelectedText:"Вибрано {0} із {1}",maxOptionsText:["Досягнута межа ({n} {var} максимум)","Досягнута межа в групі ({n} {var} максимум)",["items","item"]],multipleSeparator:", ",selectAllText:"Вибрати все",deselectAllText:"Скасувати вибір усі"}}(a)}); \ No newline at end of file diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-vi_VN.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-vi_VN.js new file mode 100644 index 0000000..4bf539a --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-vi_VN.js @@ -0,0 +1,44 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module unless amdModuleId is set + define(["jquery"], function (a0) { + return (factory(a0)); + }); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +}(this, function (jQuery) { + +(function ($) { + $.fn.selectpicker.defaults = { + noneSelectedText: 'Chưa chọn', + noneResultsText: 'Không có kết quả cho {0}', + countSelectedText: function (numSelected, numTotal) { + return "{0} mục đã chọn"; + }, + maxOptionsText: function (numAll, numGroup) { + return [ + 'Không thể chọn (giới hạn {n} mục)', + 'Không thể chọn (giới hạn {n} mục)' + ]; + }, + selectAllText: 'Chọn tất cả', + deselectAllText: 'Bỏ chọn', + multipleSeparator: ', ' + }; +})(jQuery); + + +})); diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-vi_VN.min.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-vi_VN.min.js new file mode 100644 index 0000000..6333f0a --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-vi_VN.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Chưa chọn",noneResultsText:"Không có kết quả cho {0}",countSelectedText:function(a,b){return"{0} mục đã chọn"},maxOptionsText:function(a,b){return["Không thể chọn (giới hạn {n} mục)","Không thể chọn (giới hạn {n} mục)"]},selectAllText:"Chọn tất cả",deselectAllText:"Bỏ chọn",multipleSeparator:", "}}(a)}); \ No newline at end of file diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-zh_CN.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-zh_CN.js new file mode 100644 index 0000000..46f811c --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-zh_CN.js @@ -0,0 +1,37 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module unless amdModuleId is set + define(["jquery"], function (a0) { + return (factory(a0)); + }); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +}(this, function (jQuery) { + +(function ($) { + $.fn.selectpicker.defaults = { + noneSelectedText: '没有选中任何项', + noneResultsText: '没有找到匹配项', + countSelectedText: '选中{1}中的{0}项', + maxOptionsText: ['超出限制 (最多选择{n}项)', '组选择超出限制(最多选择{n}组)'], + multipleSeparator: ', ', + selectAllText: '全选', + deselectAllText: '取消全选' + }; +})(jQuery); + + +})); diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-zh_CN.min.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-zh_CN.min.js new file mode 100644 index 0000000..f5264e7 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-zh_CN.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"没有选中任何项",noneResultsText:"没有找到匹配项",countSelectedText:"选中{1}中的{0}项",maxOptionsText:["超出限制 (最多选择{n}项)","组选择超出限制(最多选择{n}组)"],multipleSeparator:", ",selectAllText:"全选",deselectAllText:"取消全选"}}(a)}); \ No newline at end of file diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-zh_TW.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-zh_TW.js new file mode 100644 index 0000000..cab57aa --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-zh_TW.js @@ -0,0 +1,37 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module unless amdModuleId is set + define(["jquery"], function (a0) { + return (factory(a0)); + }); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +}(this, function (jQuery) { + +(function ($) { + $.fn.selectpicker.defaults = { + noneSelectedText: '沒有選取任何項目', + noneResultsText: '沒有找到符合的結果', + countSelectedText: '已經選取{0}個項目', + maxOptionsText: ['超過限制 (最多選擇{n}項)', '超過限制(最多選擇{n}組)'], + selectAllText: '選取全部', + deselectAllText: '全部取消', + multipleSeparator: ', ' + }; +})(jQuery); + + +})); diff --git a/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-zh_TW.min.js b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-zh_TW.min.js new file mode 100644 index 0000000..abbd5b5 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/js/i18n/defaults-zh_TW.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select) + * + * Copyright 2013-2017 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof module&&module.exports?module.exports=b(require("jquery")):b(a.jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"沒有選取任何項目",noneResultsText:"沒有找到符合的結果",countSelectedText:"已經選取{0}個項目",maxOptionsText:["超過限制 (最多選擇{n}項)","超過限制(最多選擇{n}組)"],selectAllText:"選取全部",deselectAllText:"全部取消",multipleSeparator:", "}}(a)}); \ No newline at end of file diff --git a/app/static/plugin-bootstrap-select-1.12.4/package.json b/app/static/plugin-bootstrap-select-1.12.4/package.json new file mode 100644 index 0000000..b78de61 --- /dev/null +++ b/app/static/plugin-bootstrap-select-1.12.4/package.json @@ -0,0 +1,66 @@ +{ + "name": "bootstrap-select", + "title": "bootstrap-select", + "main": "dist/js/bootstrap-select.js", + "description": "Bootstrap-select is a jQuery plugin that utilizes Bootstrap's dropdown.js to style and bring additional functionality to standard select elements.", + "version": "1.12.4", + "homepage": "http://silviomoreto.github.io/bootstrap-select", + "author": { + "name": "Silvio Moreto", + "url": "https://github.com/silviomoreto" + }, + "contributors": [ + { + "name": "Silvio Moreto", + "url": "https://github.com/silviomoreto" + }, + { + "name": "Ana Carolina", + "url": "https://github.com/anacarolinats" + }, + { + "name": "caseyjhol", + "url": "https://github.com/caseyjhol" + }, + { + "name": "Matt Bryson", + "url": "https://github.com/mattbryson" + }, + { + "name": "t0xicCode", + "url": "https://github.com/t0xicCode" + } + ], + "repository": { + "type": "git", + "url": "git://github.com/silviomoreto/bootstrap-select.git" + }, + "license": "MIT", + "dependencies": { + "jquery": ">=1.8" + }, + "devDependencies": { + "grunt": "^1.0.1", + "grunt-autoprefixer": "^3.0.4", + "grunt-banner": "^0.6.0", + "grunt-contrib-clean": "^1.0.0", + "grunt-contrib-compress": "^1.3.0", + "grunt-contrib-concat": "^1.0.1", + "grunt-contrib-copy": "^1.0.0", + "grunt-contrib-csslint": "^2.0.0", + "grunt-contrib-cssmin": "^1.0.2", + "grunt-contrib-jshint": "^1.0.0", + "grunt-contrib-less": "^1.4.0", + "grunt-contrib-uglify": "^2.0.0", + "grunt-contrib-watch": "^1.0.0", + "grunt-umd": "^2.3.6", + "grunt-version": "^1.1.1", + "load-grunt-tasks": "^3.5.2" + }, + "keywords": [ + "form", + "bootstrap", + "select", + "replacement" + ] +} From 62793af5cecbf6cb191ffb879cfe6a2e4b749344 Mon Sep 17 00:00:00 2001 From: Jan Luca Naumann Date: Fri, 21 Sep 2018 12:45:58 +0200 Subject: [PATCH 2/5] Add feature for recipient management --- app/__init__.py | 4 + app/registration/models.py | 2 + app/stapf/__init__.py | 8 + app/stapf/helpers.py | 37 ++ app/stapf/models.py | 65 +++ app/stapf/templates/batch.html | 72 ++++ app/stapf/templates/batches.html | 56 +++ app/stapf/templates/decision.html | 80 ++++ app/stapf/templates/decisions.html | 51 +++ app/stapf/templates/recipient.html | 79 ++++ app/stapf/templates/recipients.html | 47 +++ app/stapf/templates/recipients_list.html | 64 +++ .../templates/recipients_list_import.html | 51 +++ app/stapf/templates/recipients_lists.html | 46 +++ app/stapf/views.py | 384 ++++++++++++++++++ app/templates/base.html | 12 + config.py | 9 +- migrations/README | 0 migrations/env.py | 116 +++++- migrations/script.py.mako | 38 +- migrations/versions/1c83d3a73c76_.py | 80 ++++ ...90776c82_remove_uni_priority_constraint.py | 28 -- ...e1b2_registration_uni_unique_constraint.py | 35 -- migrations/versions/410cf11a3b3e_.py | 74 ++++ migrations/versions/5d77b4cb64ed_.py | 113 ++++++ migrations/versions/ba89e3b7438c_initial.py | 48 --- 26 files changed, 1457 insertions(+), 142 deletions(-) create mode 100644 app/stapf/__init__.py create mode 100644 app/stapf/helpers.py create mode 100644 app/stapf/models.py create mode 100644 app/stapf/templates/batch.html create mode 100644 app/stapf/templates/batches.html create mode 100644 app/stapf/templates/decision.html create mode 100644 app/stapf/templates/decisions.html create mode 100644 app/stapf/templates/recipient.html create mode 100644 app/stapf/templates/recipients.html create mode 100644 app/stapf/templates/recipients_list.html create mode 100644 app/stapf/templates/recipients_list_import.html create mode 100644 app/stapf/templates/recipients_lists.html create mode 100644 app/stapf/views.py mode change 100755 => 100644 migrations/README mode change 100755 => 100644 migrations/env.py mode change 100755 => 100644 migrations/script.py.mako create mode 100644 migrations/versions/1c83d3a73c76_.py delete mode 100644 migrations/versions/235d90776c82_remove_uni_priority_constraint.py delete mode 100644 migrations/versions/257e0b50e1b2_registration_uni_unique_constraint.py create mode 100644 migrations/versions/410cf11a3b3e_.py create mode 100644 migrations/versions/5d77b4cb64ed_.py delete mode 100644 migrations/versions/ba89e3b7438c_initial.py diff --git a/app/__init__.py b/app/__init__.py index 913e618..b696cf0 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -53,6 +53,10 @@ def create_app(profile="default"): app.register_blueprint(registration_blueprint) init_reg(app) + from app.stapf import stapf_blueprint, init_app as init_stapf + app.register_blueprint(stapf_blueprint) + init_stapf(app) + return app def check_sanity(fix=True): diff --git a/app/registration/models.py b/app/registration/models.py index 6235464..f9533d5 100644 --- a/app/registration/models.py +++ b/app/registration/models.py @@ -3,6 +3,7 @@ from flask import Blueprint, abort, current_app, json class Registration(db.Model): + __bind_key__ = 'anmeldung' id = db.Column(db.Integer(), primary_key = True) username = db.Column(db.Text(), unique = True) blob = db.Column(db.Text()) @@ -49,6 +50,7 @@ def is_zapf_attendee(self): return self.confirmed and self.priority < self.uni.slots class Uni(db.Model): + __bind_key__ = 'anmeldung' id = db.Column(db.Integer(), primary_key = True) token = db.Column(db.String(256), unique = True) name = db.Column(db.Text(), unique = True) diff --git a/app/stapf/__init__.py b/app/stapf/__init__.py new file mode 100644 index 0000000..8557fee --- /dev/null +++ b/app/stapf/__init__.py @@ -0,0 +1,8 @@ +from flask import Blueprint + +stapf_blueprint = Blueprint('stapf', __name__, template_folder='templates/') + +from . import models, views + +def init_app(app): + return app diff --git a/app/stapf/helpers.py b/app/stapf/helpers.py new file mode 100644 index 0000000..e301832 --- /dev/null +++ b/app/stapf/helpers.py @@ -0,0 +1,37 @@ +import email.utils +from app.db import db +from .models import Recipient +from flask import current_app +from flask_mail import Message + +def import_recipients_from_list(mail_list): + result = [] + for line in mail_list.splitlines(): + parsed_mail = email.utils.parseaddr(line) + recipient = Recipient() + recipient.name = parsed_mail[0] + recipient.mail = parsed_mail[1] + recipient.comment = 'Automatisch importiert (bitte überprüfen)' + db.session.add(recipient) + result.append(recipient) + db.session.commit() + return result + +def send_batch_mails(batch): + with current_app.mail.connect() as conn: + for recipients_list in batch.decision.recipients_lists: + for recipient in recipients_list.recipients: + if not recipient.mail: + continue + msg = Message(batch.subject, recipients=[recipient.mail], + body=batch.message, sender=current_app.config['MAIL_STAPF']) + with current_app.open_resource(batch.decision.file_path) as fp: + msg.attach(batch.decision.filename, "application/pdf", fp.read()) + conn.send(msg) + + msg = Message(batch.subject, recipients=[current_app.config['MAIL_STAPF']], + body=batch.message, sender=current_app.config['MAIL_STAPF']) + with current_app.open_resource(batch.decision.file_path) as fp: + msg.attach(batch.decision.filename, "application/pdf", fp.read()) + conn.send(msg) + diff --git a/app/stapf/models.py b/app/stapf/models.py new file mode 100644 index 0000000..2d0ed3e --- /dev/null +++ b/app/stapf/models.py @@ -0,0 +1,65 @@ +from app.db import db +from app.user.models import User +from flask import Blueprint, abort, current_app, json + +RecipientToList = db.Table('recipient_to_list', + db.Column('list_id', db.Integer, db.ForeignKey('recipients_lists.id'), primary_key=True), + db.Column('recipient_id', db.Integer, db.ForeignKey('recipients.id'), primary_key=True), + info={'bind_key': 'stapf'} +) + +DecisionRecipientsLists = db.Table('decision_recipients_lists', + db.Column('decision_id', db.Integer, db.ForeignKey('decisions.id'), primary_key=True), + db.Column('recipients_list_id', db.Integer, db.ForeignKey('recipients_lists.id'), primary_key=True), + info={'bind_key': 'stapf'} +) + +class Recipient(db.Model): + __bind_key__ = 'stapf' + __tablename__ = 'recipients' + id = db.Column(db.Integer(), primary_key = True) + name = db.Column(db.Text()) + organisation_name = db.Column(db.Text()) + addressline1 = db.Column(db.Text()) + addressline2 = db.Column(db.Text()) + street = db.Column(db.Text()) + postal_code = db.Column(db.Integer()) + locality = db.Column(db.Text()) + country = db.Column(db.Text()) + mail = db.Column(db.Text()) + comment = db.Column(db.Text()) + + @property + def has_address(self): + return self.street and self.locality + +class RecipientsList(db.Model): + __bind_key__ = 'stapf' + __tablename__ = 'recipients_lists' + id = db.Column(db.Integer(), primary_key = True) + name = db.Column(db.Text(), unique = True) + recipients = db.relationship("Recipient", secondary=RecipientToList, backref=db.backref('lists', lazy=True)) + comment = db.Column(db.Text()) + +class Decision(db.Model): + __bind_key__ = 'stapf' + __tablename__ = 'decisions' + id = db.Column(db.Integer(), primary_key = True) + title = db.Column(db.Text()) + decided = db.Column(db.Date()) + recipients_lists = db.relationship("RecipientsList", secondary=DecisionRecipientsLists, backref=db.backref('decisions', lazy=True)) + filename = db.Column(db.Text()) + file_path = db.Column(db.Text()) + comment = db.Column(db.Text()) + +class Batch(db.Model): + __bind_key__ = 'stapf' + __tablename__ = 'batches' + id = db.Column(db.Integer(), primary_key = True) + subject = db.Column(db.Text()) + message = db.Column(db.Text()) + decision_id = db.Column(db.Integer(), db.ForeignKey('decisions.id')) + decision = db.relationship("Decision", backref=db.backref('batches', lazy=True)) + sent = db.Column(db.Boolean(), default=False) + sent_at = db.Column(db.DateTime()) + comment = db.Column(db.Text()) diff --git a/app/stapf/templates/batch.html b/app/stapf/templates/batch.html new file mode 100644 index 0000000..b2f049a --- /dev/null +++ b/app/stapf/templates/batch.html @@ -0,0 +1,72 @@ +{% extends "base.html" %} +{% import "bootstrap/wtf.html" as wtf %} + +{% block styles %} +{{super()}} + +{% endblock %} + +{% block scripts %} +{{super()}} + +{% endblock %} + +{% macro show_form_errors(form, container = True) %} +{% if form.errors -%} {# don't output anything if there are no errors #} +{% if container -%} +
    +
    +{% endif -%} + +{% if container %} +
    +
    +{% endif -%} +{% endif -%} +{% endmacro -%} + +{% block title %}Mail-Auftrag bearbeiten{% endblock %} + +{% block content %} +
    +
    + {{ form.hidden_tag() }} + +
    + {{ show_form_errors(form) }} + +
    + {{ form.subject.label(class='col-sm-3 control-label') }} +
    {% if readonly %}{{ form.subject(class='form-control', readonly='readonly') }}{% else %}{{ form.subject(class='form-control') }}{% endif %}
    +
    +
    + {{ form.decision.label(class='col-sm-3 control-label') }} +
    + {% if readonly %} + {{form.decision(class='form-control', readonly='readonly')}} + {% else %} + {{form.decision(class='form-control selectpicker', **{'data-live-search':'true', 'data-selected-text-format':'count > 3'})}} + {% endif %} +
    +
    +
    + {{ form.message.label(class='col-sm-3 control-label') }} +
    {% if readonly %}{{ form.message(class='form-control', readonly='readonly') }}{% else %}{{ form.message(class='form-control') }}{% endif %}
    +
    +
    + {{ form.comment.label(class='col-sm-3 control-label') }} +
    {% if readonly %}{{ form.comment(class='form-control', readonly='readonly') }}{% else %}{{ form.comment(class='form-control') }}{% endif %}
    +
    +
    +
    + {{ form.submit(class='btn btn-lg btn-default') }} +
    +
    +
    +
    +
    +{% endblock %} diff --git a/app/stapf/templates/batches.html b/app/stapf/templates/batches.html new file mode 100644 index 0000000..3671c1e --- /dev/null +++ b/app/stapf/templates/batches.html @@ -0,0 +1,56 @@ +{% extends "base.html" %} + +{% block title %}Mail-Aufträge{% endblock %} + +{% block content %} +
    +

    Mail-Aufträge

    + + + +
    + +
    + + + + + + + + + {% for batch in batches %} + + + + + + + + {% endfor %} +
    BetreffVersendetVersendet amKommentarAktionen
    {{ batch.subject }}{% if batch.sent %}{% endif %}{% if batch.sent %}{{ batch.sent_at }}{% endif %}{{ batch.comment }} +
    + {% if not batch.sent %} + + Versenden + + + Bearbeiten + + + Löschen + + {% else %} + + Details + + {% endif %} +
    +
    +
    +
    +{% endblock %} diff --git a/app/stapf/templates/decision.html b/app/stapf/templates/decision.html new file mode 100644 index 0000000..2ad4cf3 --- /dev/null +++ b/app/stapf/templates/decision.html @@ -0,0 +1,80 @@ +{% extends "base.html" %} +{% import "bootstrap/wtf.html" as wtf %} + +{% block styles %} +{{super()}} + +{% endblock %} + +{% block scripts %} +{{super()}} + +{% endblock %} + +{% macro show_form_errors(form, container = True) %} +{% if form.errors -%} {# don't output anything if there are no errors #} +{% if container -%} +
    +
    +{% endif -%} + +{% if container %} +
    +
    +{% endif -%} +{% endif -%} +{% endmacro -%} + +{% block title %}Beschluss bearbeiten{% endblock %} + +{% block content %} +
    +
    + {{ form.hidden_tag() }} + +
    + {{ show_form_errors(form) }} + +
    + {{ form.title.label(class='col-sm-3 control-label') }} +
    {{ form.title(class='form-control') }}
    +
    +
    + {{ form.decided.label(class='col-sm-3 control-label') }} +
    {{ form.decided(class='form-control') }}
    +
    +
    + {{ form.recipients_lists.label(class='col-sm-3 control-label') }} +
    + {{form.recipients_lists(class='form-control selectpicker', **{'data-live-search':'true', 'data-selected-text-format':'count > 3'})}} +
    +
    +
    + {{ form.upload.label(class='col-sm-3 control-label') }} + {% if isNew %} +
    {{ form.upload() }}
    + {% else %} + + {% endif %} +
    +
    + {{ form.comment.label(class='col-sm-3 control-label') }} +
    {{ form.comment(class='form-control') }}
    +
    +
    +
    + {{ form.submit(class='btn btn-lg btn-default') }} +
    +
    +
    +
    +
    +{% endblock %} diff --git a/app/stapf/templates/decisions.html b/app/stapf/templates/decisions.html new file mode 100644 index 0000000..216c5e9 --- /dev/null +++ b/app/stapf/templates/decisions.html @@ -0,0 +1,51 @@ +{% extends "base.html" %} + +{% block title %}Beschlüsse{% endblock %} + +{% block content %} +
    +

    Beschlüsse

    + + + +
    + +
    + + + + + + + + + {% for decision in decisions %} + + + + + + + + {% endfor %} +
    Beschlossen amTitelDateiKommentarAktionen
    {{ decision.decided }}{{ decision.title }} + + PDF des Beschluss downloaden + + {{ decision.comment }} + +
    +
    +
    +{% endblock %} diff --git a/app/stapf/templates/recipient.html b/app/stapf/templates/recipient.html new file mode 100644 index 0000000..7d932c7 --- /dev/null +++ b/app/stapf/templates/recipient.html @@ -0,0 +1,79 @@ +{% extends "base.html" %} +{% import "bootstrap/wtf.html" as wtf %} + +{% macro show_form_errors(form, container = True) %} +{% if form.errors -%} {# don't output anything if there are no errors #} +{% if container -%} +
    +
    +{% endif -%} + +{% if container %} +
    +
    +{% endif -%} +{% endif -%} +{% endmacro -%} + +{% block title %}Adressat bearbeiten{% endblock %} + +{% block content %} +
    +
    + {{ form.hidden_tag() }} + +
    + {{ show_form_errors(form) }} + +
    + {{ form.name.label(class='col-sm-3 control-label') }} +
    {{ form.name(class='form-control') }}
    +
    +
    + {{ form.organisation_name.label(class='col-sm-3 control-label') }} +
    {{ form.organisation_name(class='form-control') }}
    +
    +
    + {{ form.addressline1.label(class='col-sm-3 control-label') }} +
    {{ form.addressline1(class='form-control') }}
    +
    +
    + {{ form.addressline2.label(class='col-sm-3 control-label') }} +
    {{ form.addressline2(class='form-control') }}
    +
    +
    + {{ form.street.label(class='col-sm-3 control-label') }} +
    {{ form.street(class='form-control') }}
    +
    +
    + {{ form.postal_code.label(class='col-sm-3 control-label') }} +
    {{ form.postal_code(class='form-control') }}
    +
    +
    + {{ form.locality.label(class='col-sm-3 control-label') }} +
    {{ form.locality(class='form-control') }}
    +
    +
    + {{ form.country.label(class='col-sm-3 control-label') }} +
    {{ form.country(class='form-control') }}
    +
    +
    + {{ form.mail.label(class='col-sm-3 control-label') }} +
    {{ form.mail(class='form-control') }}
    +
    +
    + {{ form.comment.label(class='col-sm-3 control-label') }} +
    {{ form.comment(class='form-control') }}
    +
    +
    +
    + {{ form.submit(class='btn btn-lg btn-default') }} +
    +
    +
    +
    +
    +{% endblock %} diff --git a/app/stapf/templates/recipients.html b/app/stapf/templates/recipients.html new file mode 100644 index 0000000..7dcfb82 --- /dev/null +++ b/app/stapf/templates/recipients.html @@ -0,0 +1,47 @@ +{% extends "base.html" %} + +{% block title %}Adressaten{% endblock %} + +{% block content %} +
    +

    Adressaten

    + + + +
    + +
    + + + + + + + + + {% for recipient in recipients %} + + + + + + + + {% endfor %} +
    NameOrganisationE-MailKommentarActions
    {{ recipient.name }}{{ recipient.organisation_name }}{{ recipient.mail }}{{ recipient.comment }} + +
    +
    +
    +{% endblock %} diff --git a/app/stapf/templates/recipients_list.html b/app/stapf/templates/recipients_list.html new file mode 100644 index 0000000..2da9aa0 --- /dev/null +++ b/app/stapf/templates/recipients_list.html @@ -0,0 +1,64 @@ +{% extends "base.html" %} +{% import "bootstrap/wtf.html" as wtf %} + +{% block styles %} +{{super()}} + +{% endblock %} + +{% block scripts %} +{{super()}} + +{% endblock %} + +{% macro show_form_errors(form, container = True) %} +{% if form.errors -%} {# don't output anything if there are no errors #} +{% if container -%} +
    +
    +{% endif -%} + +{% if container %} +
    +
    +{% endif -%} +{% endif -%} +{% endmacro -%} + +{% block title %}Adressaten-Liste bearbeiten{% endblock %} + +{% block content %} +
    +
    + {{ form.hidden_tag() }} + +
    + {{ show_form_errors(form) }} + +
    + {{ form.name.label(class='col-sm-3 control-label') }} +
    {{ form.name(class='form-control') }}
    +
    +
    + {{ form.recipients.label(class='col-sm-3 control-label') }} +
    + {{form.recipients(class='form-control selectpicker', **{'data-live-search':'true', 'data-selected-text-format':'count > 3'})}} +
    +
    +
    + {{ form.comment.label(class='col-sm-3 control-label') }} +
    {{ form.comment(class='form-control') }}
    +
    +
    +
    + {{ form.submit(class='btn btn-lg btn-default') }} +
    +
    +
    +
    +
    +{% endblock %} diff --git a/app/stapf/templates/recipients_list_import.html b/app/stapf/templates/recipients_list_import.html new file mode 100644 index 0000000..5a141d3 --- /dev/null +++ b/app/stapf/templates/recipients_list_import.html @@ -0,0 +1,51 @@ +{% extends "base.html" %} +{% import "bootstrap/wtf.html" as wtf %} + +{% macro show_form_errors(form, container = True) %} +{% if form.errors -%} {# don't output anything if there are no errors #} +{% if container -%} +
    +
    +{% endif -%} + +{% if container %} +
    +
    +{% endif -%} +{% endif -%} +{% endmacro -%} + +{% block title %}Adressaten-Liste importieren{% endblock %} + +{% block content %} +
    +
    + {{ form.hidden_tag() }} + +
    + {{ show_form_errors(form) }} + +
    + {{ form.name.label(class='col-sm-3 control-label') }} +
    {{ form.name(class='form-control') }}
    +
    +
    + {{ form.recipients.label(class='col-sm-3 control-label') }} +
    {{ form.recipients(class='form-control') }}
    +
    +
    + {{ form.comment.label(class='col-sm-3 control-label') }} +
    {{ form.comment(class='form-control') }}
    +
    +
    +
    + {{ form.submit(class='btn btn-lg btn-default') }} +
    +
    +
    +
    +
    +{% endblock %} diff --git a/app/stapf/templates/recipients_lists.html b/app/stapf/templates/recipients_lists.html new file mode 100644 index 0000000..aae6952 --- /dev/null +++ b/app/stapf/templates/recipients_lists.html @@ -0,0 +1,46 @@ +{% extends "base.html" %} + +{% block title %}Adressaten-Listen{% endblock %} + +{% block content %} +
    +

    Adressaten-Listen

    + + + +
    + +
    + + + + + + + {% for recipients_list in recipients_lists %} + + + + + + {% endfor %} +
    NameKommentarAktionen
    {{ recipients_list.name }}{{ recipients_list.comment }} + +
    +
    +
    +{% endblock %} diff --git a/app/stapf/views.py b/app/stapf/views.py new file mode 100644 index 0000000..08e7c88 --- /dev/null +++ b/app/stapf/views.py @@ -0,0 +1,384 @@ +from flask import render_template, redirect, url_for, flash, current_app, send_file +from . import stapf_blueprint +from app.db import db +from .models import Recipient, RecipientsList, Decision, Batch +from .helpers import import_recipients_from_list, send_batch_mails +from flask_wtf import FlaskForm +from flask_wtf.file import FileField, FileAllowed, FileRequired +from wtforms import StringField, TextAreaField, SubmitField, IntegerField, SelectField, SelectMultipleField, validators +from wtforms.fields.html5 import EmailField, DateField +from werkzeug.utils import secure_filename +from app.user import groups_sufficient +from app.views import confirm +import os +import datetime + +class RecipientForm(FlaskForm): + name = StringField('Name') + organisation_name = StringField('Organisation') + addressline1 = StringField('Adresszeile 1') + addressline2 = StringField('Adresszeile 2') + street = StringField('Straße und Hausnummer') + postal_code = IntegerField('PLZ', validators=[validators.Optional()]) + locality = StringField('Ort') + country = StringField('Staat', default='Deutschland') + mail = EmailField('E-Mail') + comment = TextAreaField('Kommentar') + submit = SubmitField() + +class RecipientsListForm(FlaskForm): + name = StringField('Name') + recipients = SelectMultipleField('Adressaten', coerce=int) + comment = TextAreaField('Kommentar') + submit = SubmitField() + +class RecipientsListImportMailsForm(FlaskForm): + name = StringField('Name') + recipients = TextAreaField('Adressaten als Liste') + comment = TextAreaField('Kommentar') + submit = SubmitField() + +class DecisionForm(FlaskForm): + title = StringField('Titel') + decided = DateField('Beschlossen am', validators=[validators.Required()]) + recipients_lists = SelectMultipleField('Adressaten-Listen', coerce=int) + upload = FileField('Beschluss als PDF', validators=[FileAllowed(['pdf'], 'PDFs only!')]) + comment = TextAreaField('Kommentar') + submit = SubmitField() + +class BatchForm(FlaskForm): + subject = StringField('Betreff') + message = TextAreaField('Anschreiben') + decision = SelectField('Beschluss', coerce=int, validators=[validators.Required()]) + comment = TextAreaField('Kommentar') + submit = SubmitField() + +@stapf_blueprint.route('/stapf/recipients') +@groups_sufficient('admin', 'StAPF') +def recipients(): + recipients = Recipient.query.order_by(Recipient.name) + return render_template('recipients.html', + recipients = recipients + ) + +@stapf_blueprint.route('/stapf/recipient/new', methods=['GET', 'POST']) +@groups_sufficient('admin', 'StAPF') +def recipient_new(): + form = RecipientForm() + if form.validate_on_submit(): + recipient = Recipient() + recipient.name = form.name.data + recipient.organisation_name = form.organisation_name.data + recipient.addressline1 = form.addressline1.data + recipient.addressline2 = form.addressline2.data + recipient.street = form.street.data + recipient.postal_code = form.postal_code.data + recipient.locality = form.locality.data + recipient.country = form.country.data + recipient.mail = form.mail.data + recipient.comment = form.comment.data + db.session.add(recipient) + db.session.commit() + flash('Adressat erfolgreich angelegt', 'success') + return redirect(url_for('stapf.recipients')) + + return render_template('recipient.html', + form = form + ) + +@stapf_blueprint.route('/stapf/recipient/', methods=['GET', 'POST']) +@groups_sufficient('admin', 'StAPF') +def recipient(recipient_id): + recipient = Recipient.query.filter_by(id=recipient_id).first() + form = RecipientForm() + if form.validate_on_submit(): + recipient.name = form.name.data + recipient.organisation_name = form.organisation_name.data + recipient.addressline1 = form.addressline1.data + recipient.addressline2 = form.addressline2.data + recipient.street = form.street.data + recipient.postal_code = form.postal_code.data + recipient.locality = form.locality.data + recipient.country = form.country.data + recipient.mail = form.mail.data + recipient.comment = form.comment.data + db.session.add(recipient) + db.session.commit() + flash('Adressat erfolgreich geändert', 'success') + return redirect(url_for('stapf.recipients')) + + form.name.data = recipient.name + form.organisation_name.data = recipient.organisation_name + form.addressline1.data = recipient.addressline1 + form.addressline2.data = recipient.addressline2 + form.street.data = recipient.street + form.postal_code.data = recipient.postal_code + form.locality.data = recipient.locality + form.country.data = recipient.country + form.mail.data = recipient.mail + form.comment.data = recipient.comment + return render_template('recipient.html', + form = form + ) + +@stapf_blueprint.route('/stapf/recipient//delete', methods=['GET', 'POST']) +@groups_sufficient('admin', 'StAPF') +@confirm(title='Lösche Adressat', + action='Löschen', + back='stapf.recipients') +def recipient_delete(recipient_id): + recipient = Recipient.query.filter_by(id=recipient_id).first() + db.session.delete(recipient) + db.session.commit() + flash('Adressat "{}" wurde gelöscht'.format(recipient.name), 'success') + return redirect(url_for('stapf.recipients')) + +@stapf_blueprint.route('/stapf/recipients_lists') +@groups_sufficient('admin', 'StAPF') +def recipients_lists(): + recipients_lists = RecipientsList.query.order_by(RecipientsList.name) + return render_template('recipients_lists.html', + recipients_lists = recipients_lists + ) + +@stapf_blueprint.route('/stapf/recipients_list/new', methods=['GET', 'POST']) +@groups_sufficient('admin', 'StAPF') +def recipients_list_new(): + form = RecipientsListForm() + form.recipients.choices = [(r.id, "{} ({})".format(r.name, r.organisation_name)) + for r in Recipient.query.order_by(Recipient.name)] + if form.validate_on_submit(): + recipients_list = RecipientsList() + recipients_list.name = form.name.data + recipients_list.recipients = [Recipient.query.filter_by(id=i).first() for i in form.recipients.data] + recipients_list.comment = form.comment.data + db.session.add(recipients_list) + db.session.commit() + flash('Adressaten-Liste erfolgreich angelegt', 'success') + return redirect(url_for('stapf.recipients_lists')) + + return render_template('recipients_list.html', + form = form + ) + +@stapf_blueprint.route('/stapf/recipients_list/', methods=['GET', 'POST']) +@groups_sufficient('admin', 'StAPF') +def recipients_list(recipients_list_id): + recipients_list = RecipientsList.query.filter_by(id=recipients_list_id).first() + form = RecipientsListForm() + form.recipients.choices = [(r.id, "{} ({})".format(r.name, r.organisation_name)) + for r in Recipient.query.order_by(Recipient.name)] + if form.validate_on_submit(): + recipients_list.name = form.name.data + recipients_list.recipients = [Recipient.query.filter_by(id=i).first() for i in form.recipients.data] + recipients_list.comment = form.comment.data + db.session.add(recipients_list) + db.session.commit() + flash('Adressaten-Liste erfolgreich geändert', 'success') + return redirect(url_for('stapf.recipients_lists')) + + form.name.data = recipients_list.name + form.recipients.data = [r.id for r in recipients_list.recipients] + form.comment.data = recipients_list.comment + return render_template('recipients_list.html', + form = form + ) + +@stapf_blueprint.route('/stapf/recipients_list//delete', methods=['GET', 'POST']) +@groups_sufficient('admin', 'StAPF') +@confirm(title='Lösche Adressaten-Liste', + action='Löschen', + back='stapf.recipients_lists') +def recipients_list_delete(recipients_list_id): + recipients_list = RecipientsList.query.filter_by(id=recipients_list_id).first() + db.session.delete(recipients_list) + db.session.commit() + flash('Adressaten-Liste "{}" wurde gelöscht'.format(recipients_list.name), 'success') + return redirect(url_for('stapf.recipients_lists')) + +@stapf_blueprint.route('/stapf/recipients_list/import_mails', methods=['GET', 'POST']) +@groups_sufficient('admin', 'StAPF') +def recipients_list_import_mails(): + form = RecipientsListImportMailsForm() + if form.validate_on_submit(): + recipients_list = RecipientsList() + recipients_list.name = form.name.data + recipients_list.recipients = import_recipients_from_list(form.recipients.data) + recipients_list.comment = form.comment.data + db.session.add(recipients_list) + db.session.commit() + flash('Adressaten-Liste erfolgreich importiert', 'success') + return redirect(url_for('stapf.recipients_lists')) + + return render_template('recipients_list_import.html', + form = form + ) + +@stapf_blueprint.route('/stapf/decisions') +@groups_sufficient('admin', 'StAPF') +def decisions(): + decisions = Decision.query.order_by(Decision.decided) + return render_template('decisions.html', + decisions = decisions + ) + +@stapf_blueprint.route('/stapf/decision/new', methods=['GET', 'POST']) +@groups_sufficient('admin', 'StAPF') +def decision_new(): + form = DecisionForm() + form.recipients_lists.choices = [(l.id, l.name) for l in RecipientsList.query.order_by(RecipientsList.name)] + form.upload.validators.append(FileRequired()) + if form.validate_on_submit(): + decision = Decision() + decision.title = form.title.data + decision.recipients_lists = [RecipientsList.query.filter_by(id=i).first() for i in form.recipients_lists.data] + decision.decided = form.decided.data + decision.comment = form.comment.data + db.session.add(decision) + db.session.flush() + + f = form.upload.data + filename = secure_filename(f.filename) + file_path = os.path.join(current_app.config['STAPF_DECISIONS_PATH'], "{}_{}".format(decision.id, filename)) + f.save(file_path) + decision.filename = filename + decision.file_path = file_path + + db.session.commit() + flash('Beschluss erfolgreich angelegt', 'success') + return redirect(url_for('stapf.decisions')) + + return render_template('decision.html', + form = form, + isNew = True + ) + +@stapf_blueprint.route('/stapf/decision/', methods=['GET', 'POST']) +@groups_sufficient('admin', 'StAPF') +def decision(decision_id): + decision = Decision.query.filter_by(id=decision_id).first() + form = DecisionForm() + form.recipients_lists.choices = [(l.id, l.name) for l in RecipientsList.query.order_by(RecipientsList.name)] + if form.validate_on_submit(): + decision.title = form.title.data + decision.recipients_lists = [RecipientsList.query.filter_by(id=i).first() for i in form.recipients_lists.data] + decision.decided = form.decided.data + decision.comment = form.comment.data + + db.session.add(decision) + db.session.commit() + flash('Beschluss erfolgreich geändert', 'success') + return redirect(url_for('stapf.decisions')) + + form.title.data = decision.title + form.recipients_lists.data = [l.id for l in decision.recipients_lists] + form.decided.data = decision.decided + form.comment.data = decision.comment + + return render_template('decision.html', + form = form, + isNew = False, + decision_id = decision_id + ) + +@stapf_blueprint.route('/stapf/decision//file') +@groups_sufficient('admin', 'StAPF') +def decision_file(decision_id): + decision = Decision.query.filter_by(id=decision_id).first() + return send_file(decision.file_path, mimetype='application/pdf', as_attachment=True, attachment_filename=decision.filename) + +@stapf_blueprint.route('/stapf/decision//delete', methods=['GET', 'POST']) +@groups_sufficient('admin', 'StAPF') +@confirm(title='Lösche Beschluss', + action='Löschen', + back='stapf.decisions') +def decision_delete(decision_id): + decision = Decision.query.filter_by(id=decision_id).first() + db.session.delete(decision) + db.session.commit() + os.remove(decision.file_path) + flash('Beschluss "{}" wurde gelöscht'.format(decision.title), 'success') + return redirect(url_for('stapf.decisions')) + +@stapf_blueprint.route('/stapf/batches') +@groups_sufficient('admin', 'StAPF') +def batches(): + batches = Batch.query.order_by(Batch.sent) + return render_template('batches.html', + batches = batches + ) + +@stapf_blueprint.route('/stapf/batch/new', methods=['GET', 'POST']) +@groups_sufficient('admin', 'StAPF') +def batch_new(): + form = BatchForm() + form.decision.choices = [(d.id, d.title) for d in Decision.query.order_by(Decision.decided)] + if form.validate_on_submit(): + batch = Batch() + batch.subject = form.subject.data + batch.message = form.message.data + batch.decision_id = form.decision.data + batch.comment = form.comment.data + db.session.add(batch) + db.session.commit() + flash('Mail-Auftrag erfolgreich angelegt', 'success') + return redirect(url_for('stapf.batches')) + + return render_template('batch.html', + form = form + ) + +@stapf_blueprint.route('/stapf/batch/', methods=['GET', 'POST']) +@groups_sufficient('admin', 'StAPF') +def batch(batch_id): + batch = Batch.query.filter_by(id=batch_id).first() + form = BatchForm() + form.decision.choices = [(d.id, d.title) for d in Decision.query.order_by(Decision.decided)] + if not batch.sent and form.validate_on_submit(): + batch.subject = form.subject.data + batch.message = form.message.data + batch.decision_id = form.decision.data + batch.comment = form.comment.data + db.session.add(batch) + db.session.commit() + flash('Mail-Auftrag erfolgreich geändert', 'success') + return redirect(url_for('stapf.batches')) + + form.subject.data = batch.subject + form.message.data = batch.message + form.decision.data = batch.decision_id + form.comment.data = batch.comment + return render_template('batch.html', + form = form, + readonly = batch.sent + ) + +@stapf_blueprint.route('/stapf/batch//send', methods=['GET', 'POST']) +@groups_sufficient('admin', 'StAPF') +@confirm(title='Versende Mail-Auftrag', + action='Senden', + back='stapf.batches') +def batch_send(batch_id): + batch = Batch.query.filter_by(id=batch_id).first() + if batch.sent: + flash('Mail-Auftrag "{}" wurde bereits versendet. Bitte neuen Auftrag, wenn nötig, anlegen'.format(batch.subject), 'warning') + return redirect(url_for('stapf.batches')) + send_batch_mails(batch) + batch.sent = True + batch.sent_at = datetime.datetime.now() + db.session.add(batch) + db.session.commit() + flash('Mail-Auftrag "{}" wurde versendet'.format(batch.subject), 'success') + return redirect(url_for('stapf.batches')) + +@stapf_blueprint.route('/stapf/batch//delete', methods=['GET', 'POST']) +@groups_sufficient('admin', 'StAPF') +@confirm(title='Lösche Mail-Auftrag', + action='Löschen', + back='stapf.batches') +def batch_delete(batch_id): + batch = Batch.query.filter_by(id=batch_id).first() + db.session.delete(batch) + db.session.commit() + flash('Mail-Auftrag "{}" wurde gelöscht'.format(batch.subject), 'success') + return redirect(url_for('stapf.batches')) diff --git a/app/templates/base.html b/app/templates/base.html index 1f76832..8ce4489 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -45,6 +45,18 @@ {% endif %} + + {% if current_user.is_in_group('StAPF') or current_user.is_admin %} + + {% endif %}