diff --git a/modoboa/bower_components/bootstrap-select/.bower.json b/modoboa/bower_components/bootstrap-select/.bower.json
deleted file mode 100644
index aed6f7798..000000000
--- a/modoboa/bower_components/bootstrap-select/.bower.json
+++ /dev/null
@@ -1,42 +0,0 @@
-{
- "name": "bootstrap-select",
- "main": [
- "less/bootstrap-select.less",
- "dist/css/bootstrap-select.css",
- "dist/js/bootstrap-select.js"
- ],
- "version": "1.7.3",
- "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"
- ],
- "_release": "1.7.3",
- "_resolution": {
- "type": "version",
- "tag": "v1.7.3",
- "commit": "005d84efe1679d3c83f02bcd4a8cc5f89d500afc"
- },
- "_source": "git://github.com/silviomoreto/bootstrap-select.git",
- "_target": "1.7.3",
- "_originalSource": "bootstrap-select",
- "_direct": true
-}
\ No newline at end of file
diff --git a/modoboa/bower_components/bootstrap-select/LICENSE b/modoboa/bower_components/bootstrap-select/LICENSE
deleted file mode 100644
index abb940afa..000000000
--- a/modoboa/bower_components/bootstrap-select/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2013-2015 bootstrap-select
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/modoboa/bower_components/bootstrap-select/bootstrap-select-1.7.3.zip b/modoboa/bower_components/bootstrap-select/bootstrap-select-1.7.3.zip
deleted file mode 100644
index db01bc080..000000000
Binary files a/modoboa/bower_components/bootstrap-select/bootstrap-select-1.7.3.zip and /dev/null differ
diff --git a/modoboa/bower_components/bootstrap-select/bower.json b/modoboa/bower_components/bootstrap-select/bower.json
deleted file mode 100644
index 6143da2fc..000000000
--- a/modoboa/bower_components/bootstrap-select/bower.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- "name": "bootstrap-select",
- "main": [
- "less/bootstrap-select.less",
- "dist/css/bootstrap-select.css",
- "dist/js/bootstrap-select.js"
- ],
- "version": "1.7.2",
- "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"
- ]
-}
diff --git a/modoboa/bower_components/bootstrap-select/dist/css/bootstrap-select.css b/modoboa/bower_components/bootstrap-select/dist/css/bootstrap-select.css
deleted file mode 100644
index bac496798..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/css/bootstrap-select.css
+++ /dev/null
@@ -1,263 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 bootstrap-select
- * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
- */
-
-.bootstrap-select {
- width: 220px \0;
- /*IE9 and below*/
-}
-.bootstrap-select > .dropdown-toggle {
- width: 100%;
- padding-right: 25px;
-}
-.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.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-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 .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%;
- z-index: 1035;
- -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;
-}
-.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: 1036;
-}
-.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 {
- float: left;
- 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%;
-}
-select.bs-select-hidden,
-select.selectpicker {
- display: none !important;
-}
-select.mobile-device {
- position: absolute !important;
- top: 0;
- left: 0;
- display: block !important;
- width: 100%;
- height: 100% !important;
- opacity: 0;
-}
-/*# sourceMappingURL=bootstrap-select.css.map */
\ No newline at end of file
diff --git a/modoboa/bower_components/bootstrap-select/dist/css/bootstrap-select.css.map b/modoboa/bower_components/bootstrap-select/dist/css/bootstrap-select.css.map
deleted file mode 100644
index 535fdf23d..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/css/bootstrap-select.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"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\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 }\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}\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\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 // 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 z-index: @zindex-select-dropdown;\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\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 float: left;\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 }\n}\n\nselect.bs-select-hidden,\nselect.selectpicker {\n display: none !important;\n}\n\nselect.mobile-device {\n position: absolute !important;\n top: 0;\n left: 0;\n display: block !important;\n width: 100%;\n height: 100% !important;\n opacity: 0;\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}\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.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-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 .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 z-index: 1035;\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}\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: 1036;\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 float: left;\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}\nselect.bs-select-hidden,\nselect.selectpicker {\n display: none !important;\n}\nselect.mobile-device {\n position: absolute !important;\n top: 0;\n left: 0;\n display: block !important;\n width: 100%;\n height: 100% !important;\n opacity: 0;\n}\n/*# sourceMappingURL=bootstrap-select.css.map */"]}
\ No newline at end of file
diff --git a/modoboa/bower_components/bootstrap-select/dist/css/bootstrap-select.min.css b/modoboa/bower_components/bootstrap-select/dist/css/bootstrap-select.min.css
deleted file mode 100644
index 156f41bfb..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/css/bootstrap-select.min.css
+++ /dev/null
@@ -1,6 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 bootstrap-select
- * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
- */.bootstrap-select{width:220px \0}.bootstrap-select>.dropdown-toggle{width:100%;padding-right:25px}.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.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-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 .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%;z-index:1035;-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}.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:1036}.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{float:left;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%}select.bs-select-hidden,select.selectpicker{display:none!important}select.mobile-device{position:absolute!important;top:0;left:0;display:block!important;width:100%;height:100%!important;opacity:0}
\ No newline at end of file
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/bootstrap-select.js b/modoboa/bower_components/bootstrap-select/dist/js/bootstrap-select.js
deleted file mode 100644
index 2ff31d0da..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/bootstrap-select.js
+++ /dev/null
@@ -1,1650 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports === 'object') {
- // 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(jQuery);
- }
-}(this, function () {
-
-(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 TypeError();
- }
- var string = String(this);
- if (search && toString.call(search) == '[object RegExp]') {
- throw 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 TypeError();
- }
- var string = String(this);
- if (search && toString.call(search) == '[object RegExp]') {
- throw 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
- };
- }
-
- $.fn.triggerNative = function (eventName) {
- var el = this[0],
- event;
-
- if (el.dispatchEvent) {
- if (typeof Event === 'function') {
- // 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) {
- event = document.createEventObject();
- event.eventType = eventName;
- el.fireEvent('on' + eventName, event);
- }
-
- this.trigger(eventName);
- }
- };
- //
-
- // Case insensitive contains search
- $.expr[':'].icontains = function (obj, index, meta) {
- var $obj = $(obj);
- var haystack = ($obj.data('tokens') || $obj.text()).toUpperCase();
- return haystack.includes(meta[3].toUpperCase());
- };
-
- // Case insensitive begins search
- $.expr[':'].ibegins = function (obj, index, meta) {
- var $obj = $(obj);
- var haystack = ($obj.data('tokens') || $obj.text()).toUpperCase();
- return haystack.startsWith(meta[3].toUpperCase());
- };
-
- // Case and accent insensitive contains search
- $.expr[':'].aicontains = function (obj, index, meta) {
- var $obj = $(obj);
- var haystack = ($obj.data('tokens') || $obj.data('normalizedText') || $obj.text()).toUpperCase();
- return haystack.includes(meta[3].toUpperCase());
- };
-
- // Case and accent insensitive begins search
- $.expr[':'].aibegins = function (obj, index, meta) {
- var $obj = $(obj);
- var haystack = ($obj.data('tokens') || $obj.data('normalizedText') || $obj.text()).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.replace(this.re, this.ch);
- });
- return text;
- }
-
-
- function htmlEscape(html) {
- var escapeMap = {
- '&': '&',
- '<': '<',
- '>': '>',
- '"': '"',
- "'": ''',
- '`': '`'
- };
- var source = '(?:' + Object.keys(escapeMap).join('|') + ')',
- testRegexp = new RegExp(source),
- replaceRegexp = new RegExp(source, 'g'),
- string = html == null ? '' : '' + html;
- return testRegexp.test(string) ? string.replace(replaceRegexp, function (match) {
- return escapeMap[match];
- }) : string;
- }
-
- var Selectpicker = function (element, options, e) {
- if (e) {
- e.stopPropagation();
- e.preventDefault();
- }
-
- 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');
- }
-
- //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.remove;
- this.remove = Selectpicker.prototype.remove;
- this.show = Selectpicker.prototype.show;
- this.hide = Selectpicker.prototype.hide;
-
- this.init();
- };
-
- Selectpicker.VERSION = '1.7.2';
-
- // 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',
- maxOptions: false,
- mobile: false,
- selectOnTab: false,
- dropdownAlignRight: false
- };
-
- 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);
- 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');
-
- if (this.options.dropdownAlignRight)
- 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.$element.trigger('hide.bs.select', e);
- });
-
- this.$newElement.on('hidden.bs.dropdown', function (e) {
- that.$element.trigger('hidden.bs.select', e);
- });
-
- this.$newElement.on('show.bs.dropdown', function (e) {
- that.$element.trigger('show.bs.select', e);
- });
-
- this.$newElement.on('shown.bs.dropdown', function (e) {
- that.$element.trigger('shown.bs.select', e);
- });
-
- setTimeout(function () {
- that.$element.trigger('loaded.bs.select');
- });
- },
-
- createDropdown: function () {
- // Options
- // If we are multiple, then add the show-tick class by default
- var multiple = this.multiple ? ' 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 () {
- //Remove all children.
- this.destroyLi();
- //Re build
- var li = this.createLi();
- this.$menuInner[0].innerHTML = li;
- },
-
- destroyLi: function () {
- this.$menu.find('li').remove();
- },
-
- 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.appendChild(document.createTextNode(this.options.title));
- titleOption.value = '';
- element.insertBefore(titleOption, element.firstChild);
- // Check if selected attribute is already set on an option. If not, select the titleOption option.
- if ($(element.options[element.selectedIndex]).attr('selected') === undefined) titleOption.selected = true;
- }
- }
-
- this.$element.find('option').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 = 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' ? ' ' : '',
- isDisabled = this.disabled || (this.parentElement.tagName === 'OPTGROUP' && this.parentElement.disabled);
-
- if (icon !== '' && isDisabled) {
- icon = '' + icon + '';
- }
-
- if (that.options.hideDisabled && isDisabled) {
- liIndex--;
- return;
- }
-
- if (!$this.data('content')) {
- // Prepend any icon and append any subtext to the main text.
- text = icon + '' + text + subtext + '';
- }
-
- if (this.parentElement.tagName === 'OPTGROUP' && $this.data('divider') !== true) {
- var optGroupClass = ' ' + this.parentElement.className || '';
-
- if ($this.index() === 0) { // Is it the first option of the optgroup?
- optID += 1;
-
- // Get the opt group label
- var label = this.parentElement.label,
- labelSubtext = typeof $this.parent().data('subtext') !== 'undefined' ? '' + $this.parent().data('subtext') + '' : '',
- labelIcon = $this.parent().data('icon') ? ' ' : '';
-
- label = labelIcon + '' + 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));
- }
- _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) {
- _li.push(generateLI(generateA(text, optionClass, inline, tokens), index, 'hidden is-hidden'));
- } else {
- if (this.previousElementSibling && this.previousElementSibling.tagName === 'OPTGROUP') {
- 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;
-
- //Update the LI to match the SELECT
- if (updateLi !== false) {
- this.$element.find('option').each(function (index) {
- var $lis = that.findLis().eq(that.liObj[index]);
-
- that.setDisabled(index, this.disabled || this.parentElement.tagName === 'OPTGROUP' && this.parentElement.disabled, $lis);
- that.setSelected(index, this.selected, $lis);
- });
- }
-
- this.tabIndex();
-
- var selectedItems = this.$element.find('option').map(function () {
- if (this.selected) {
- if (that.options.hideDisabled && (this.disabled || this.parentElement.tagName === 'OPTGROUP' && this.parentElement.disabled)) return false;
-
- 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');
- } 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 = this.$element.find('option').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
- this.$button.attr('title', $.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')[0].cloneNode(true) : null,
- search = this.options.liveSearch ? document.createElement('div') : null,
- actions = this.options.actionsBox && this.multiple ? this.$menu.find('.bs-actionsbox')[0].cloneNode(true) : null,
- doneButton = this.options.doneButton && this.multiple ? 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) {
- // create a span instead of input as creating an input element is slower
- var input = document.createElement('span');
- 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 = 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')),
- menuExtras = menuPadding +
- parseInt(menuStyle ? menuStyle.marginTop : $menu.css('marginTop')) +
- parseInt(menuStyle ? menuStyle.marginBottom : $menu.css('marginBottom')) + 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,
- 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,
- getHeight,
- selectOffsetTop,
- selectOffsetBot,
- posVert = function () {
- selectOffsetTop = that.$newElement.offset().top - $window.scrollTop();
- selectOffsetBot = $window.height() - selectOffsetTop - selectHeight;
- };
-
- posVert();
-
- 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');
-
- posVert();
- menuHeight = selectOffsetBot - menuExtras;
-
- 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) {
- that.$newElement.toggleClass('dropup', selectOffsetTop > selectOffsetBot && (menuHeight - menuExtras) < getHeight);
- }
- if (that.$newElement.hasClass('dropup')) {
- menuHeight = selectOffsetTop - menuExtras;
- }
-
- if ((lisVisible.length + optGroup.length) > 3) {
- minHeight = liHeight * 3 + menuExtras - 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 + 'px',
- 'overflow-y': 'auto',
- 'min-height': Math.max(minHeight - menuPadding, 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;
-
- 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) < getHeight);
- }
- $menu.css({
- 'max-height': menuHeight + headerHeight + searchHeight + actionsHeight + doneButtonHeight + 'px',
- 'overflow': 'hidden',
- 'min-height': ''
- });
- $menuInner.css({
- 'max-height': menuHeight - menuPadding + '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 () {
- var that = this,
- drop = '',
- $drop = $(drop),
- pos,
- actualHeight,
- getPlacement = function ($element) {
- $drop.addClass($element.attr('class').replace(/form-control|fit-width/gi, '')).toggleClass('dropup', $element.hasClass('dropup'));
- pos = $element.offset();
- actualHeight = $element.hasClass('dropup') ? 0 : $element[0].offsetHeight;
- $drop.css({
- 'top': pos.top + actualHeight,
- 'left': pos.left,
- 'width': $element[0].offsetWidth,
- 'position': 'absolute'
- });
- };
-
- this.$newElement.on('click', function () {
- if (that.isDisabled()) {
- return;
- }
- getPlacement($(this));
- $drop.appendTo(that.options.container);
- $drop.toggleClass('open', !$(this).hasClass('open'));
- $drop.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());
- $drop.detach();
- });
- },
-
- setSelected: function (index, selected, $lis) {
- if (!$lis) {
- var $lis = this.findLis().eq(this.liObj[index]);
- }
-
- $lis.toggleClass('selected', selected);
- },
-
- setDisabled: function (index, disabled, $lis) {
- if (!$lis) {
- var $lis = this.findLis().eq(this.liObj[index]);
- }
-
- if (disabled) {
- $lis.addClass('disabled').children('a').attr('href', '#').attr('tabindex', -1);
- } else {
- $lis.removeClass('disabled').children('a').removeAttr('href').attr('tabindex', 0);
- }
- },
-
- 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);
- } else {
- if (this.$button.hasClass('disabled')) {
- this.$newElement.removeClass('disabled');
- this.$button.removeClass('disabled');
- }
-
- if (this.$button.attr('tabindex') == -1 && !this.$element.data('tabindex')) {
- this.$button.removeAttr('tabindex');
- }
- }
-
- this.$button.click(function () {
- return !that.isDisabled();
- });
- },
-
- tabIndex: function () {
- if (this.$element.is('[tabindex]')) {
- this.$element.data('tabindex', this.$element.attr('tabindex'));
- this.$button.attr('tabindex', this.$element.data('tabindex'));
- }
- },
-
- clickListener: function () {
- var that = this,
- $document = $(document);
-
- this.$newElement.on('touchstart.dropdown', '.dropdown-menu', function (e) {
- e.stopPropagation();
- });
-
- $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.$newElement.on('click', function () {
- that.setSize();
- that.$element.on('shown.bs.select', function () {
- if (!that.options.liveSearch && !that.multiple) {
- that.$menu.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.$menu.on('click', 'li a', function (e) {
- var $this = $(this),
- clickedIndex = $this.parent().data('originalIndex'),
- prevValue = that.$element.val(),
- prevIndex = that.$element.prop('selectedIndex');
-
- // Don't close on multi choice menu
- if (that.multiple) {
- 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.$menu.find('.selected').removeClass('selected');
- 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.$menu.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.$menu.find('[data-optgroup="' + optgroupID + '"]').removeClass('selected');
- that.setSelected(clickedIndex, true);
- } else {
- var maxOptionsArr = (typeof that.options.maxOptionsText === 'function') ?
- that.options.maxOptionsText(maxOptions, maxOptionsGrp) : that.options.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 + '
'));
- that.$element.trigger('maxReached.bs.select');
- }
-
- if (maxOptionsGrp && maxReachedGrp) {
- $notify.append($('' + maxTxtGrp + '
'));
- 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.$button.focus();
- } else if (that.options.liveSearch) {
- that.$searchbox.focus();
- }
-
- // Trigger select 'change'
- if ((prevValue != that.$element.val() && that.multiple) || (prevIndex != that.$element.prop('selectedIndex') && !that.multiple)) {
- that.$element.triggerNative('change');
- // $option.prop('selected') is current option state (selected/unselected). state is previous option state.
- that.$element.trigger('changed.bs.select', [clickedIndex, $option.prop('selected'), state]);
- }
- }
- });
-
- 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.$menu.on('click', 'li.divider, li.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();
- }
- that.$element.triggerNative('change');
- });
-
- this.$element.change(function () {
- that.render(false);
- });
- },
-
- liveSearchListener: function () {
- var that = this,
- $no_results = $('');
-
- this.$newElement.on('click.dropdown.data-api touchstart.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 () {
- if (that.$searchbox.val()) {
- var $searchBase = that.$lis.not('.is-hidden').removeClass('hidden').children('a');
- if (that.options.liveSearchNormalize) {
- $searchBase = $searchBase.not(':a' + that._searchStyle() + '("' + normalizeToBase(that.$searchbox.val()) + '")');
- } else {
- $searchBase = $searchBase.not(':' + that._searchStyle() + '("' + that.$searchbox.val() + '")');
- }
- $searchBase.parent().addClass('hidden');
-
- that.$lis.filter('.dropdown-header').each(function () {
- var $this = $(this),
- optgroup = $this.data('optgroup');
-
- if (that.$lis.filter('[data-optgroup=' + optgroup + ']').not($this).not('.hidden').length === 0) {
- $this.addClass('hidden');
- that.$lis.filter('[data-optgroup=' + optgroup + 'div]').addClass('hidden');
- }
- });
-
- var $lisVisible = that.$lis.not('.hidden');
-
- // hide divider if first or last visible, or if followed by another divider
- $lisVisible.each(function (index) {
- var $this = $(this);
-
- if ($this.hasClass('divider') && (
- $this.index() === $lisVisible.eq(0).index() ||
- $this.index() === $lisVisible.last().index() ||
- $lisVisible.eq(index + 1).hasClass('divider'))) {
- $this.addClass('hidden');
- }
- });
-
- if (!that.$lis.not('.hidden, .no-results').length) {
- if (!!$no_results.parent().length) {
- $no_results.remove();
- }
- $no_results.html(that.options.noneResultsText.replace('{0}', '"' + htmlEscape(that.$searchbox.val()) + '"')).show();
- that.$menuInner.append($no_results);
- } else if (!!$no_results.parent().length) {
- $no_results.remove();
- }
-
- } else {
- that.$lis.not('.is-hidden').removeClass('hidden');
- if (!!$no_results.parent().length) {
- $no_results.remove();
- }
- }
-
- that.$lis.filter('.active').removeClass('active');
- if (that.$searchbox.val()) that.$lis.not('.hidden, .divider, .dropdown-header').eq(0).addClass('active').children('a').focus();
- $(this).focus();
- });
- },
-
- _searchStyle: function () {
- var style = 'icontains';
- switch (this.options.liveSearchStyle) {
- case 'begins':
- case 'startsWith':
- style = 'ibegins';
- break;
- case 'contains':
- default:
- break; //no need to change the default
- }
-
- return style;
- },
-
- val: function (value) {
- if (typeof value !== 'undefined') {
- this.$element.val(value);
- this.render();
-
- return this.$element;
- } else {
- return this.$element.val();
- }
- },
-
- selectAll: function () {
- this.findLis();
- this.$element.find('option:enabled').not('[data-divider], [data-hidden]').prop('selected', true);
- this.$lis.not('.divider, .dropdown-header, .disabled, .hidden').addClass('selected');
- this.render(false);
- },
-
- deselectAll: function () {
- this.findLis();
- this.$element.find('option:enabled').not('[data-divider], [data-hidden]').prop('selected', false);
- this.$lis.not('.divider, .dropdown-header, .disabled, .hidden').removeClass('selected');
- this.render(false);
- },
-
- keydown: function (e) {
- var $this = $(this),
- $parent = $this.is('input') ? $this.parent().parent() : $this.parent(),
- $items,
- that = $parent.data('this'),
- index,
- next,
- first,
- last,
- prev,
- nextPrev,
- 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'
- };
-
- if (that.options.liveSearch) $parent = $this.parent().parent();
-
- if (that.options.container) $parent = that.$menu;
-
- $items = $('[role=menu] li a', $parent);
-
- isActive = that.$menu.parent().hasClass('open');
-
- if (!isActive && (e.keyCode >= 48 && e.keyCode <= 57 || e.keyCode >= 65 && e.keyCode <= 90)) {
- if (!that.options.container) {
- that.setSize();
- that.$menu.parent().addClass('open');
- isActive = true;
- } else {
- that.$newElement.trigger('click');
- }
- that.$searchbox.focus();
- }
-
- if (that.options.liveSearch) {
- if (/(^9$|27)/.test(e.keyCode.toString(10)) && isActive && that.$menu.find('.active').length === 0) {
- e.preventDefault();
- that.$menu.parent().removeClass('open');
- if (that.options.container) that.$newElement.removeClass('open');
- that.$button.focus();
- }
- // $items contains li elements when liveSearch is enabled
- $items = $('[role=menu] li:not(.disabled, .hidden, .dropdown-header, .divider)', $parent);
- if (!$this.val() && !/(38|40)/.test(e.keyCode.toString(10))) {
- if ($items.filter('.active').length === 0) {
- $items = that.$newElement.find('li');
- if (that.options.liveSearchNormalize) {
- $items = $items.filter(':a' + that._searchStyle() + '(' + normalizeToBase(keyCodeMap[e.keyCode]) + ')');
- } else {
- $items = $items.filter(':' + that._searchStyle() + '(' + keyCodeMap[e.keyCode] + ')');
- }
- }
- }
- }
-
- if (!$items.length) return;
-
- if (/(38|40)/.test(e.keyCode.toString(10))) {
- index = $items.index($items.filter(':focus'));
- first = $items.parent(selector).first().data('originalIndex');
- last = $items.parent(selector).last().data('originalIndex');
- next = $items.eq(index).parent().nextAll(selector).eq(0).data('originalIndex');
- prev = $items.eq(index).parent().prevAll(selector).eq(0).data('originalIndex');
- nextPrev = $items.eq(next).parent().prevAll(selector).eq(0).data('originalIndex');
-
- if (that.options.liveSearch) {
- $items.each(function (i) {
- if (!$(this).hasClass('disabled')) {
- $(this).data('index', i);
- }
- });
- index = $items.index($items.filter('.active'));
- first = $items.first().data('index');
- last = $items.last().data('index');
- next = $items.eq(index).nextAll().eq(0).data('index');
- prev = $items.eq(index).prevAll().eq(0).data('index');
- nextPrev = $items.eq(next).prevAll().eq(0).data('index');
- }
-
- prevIndex = $this.data('prevIndex');
-
- if (e.keyCode == 38) {
- if (that.options.liveSearch) index -= 1;
- if (index != nextPrev && index > prev) index = prev;
- if (index < first) index = first;
- if (index == prevIndex) index = last;
- } else if (e.keyCode == 40) {
- if (that.options.liveSearch) index += 1;
- if (index == -1) index = 0;
- if (index != nextPrev && index < next) index = next;
- if (index > last) index = last;
- if (index == prevIndex) index = first;
- }
-
- $this.data('prevIndex', index);
-
- if (!that.options.liveSearch) {
- $items.eq(index).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.each(function () {
- if (!$(this).parent().hasClass('disabled')) {
- if ($.trim($(this).text().toLowerCase()).substring(0, 1) == keyCodeMap[e.keyCode]) {
- keyIndex.push($(this).parent().index());
- }
- }
- });
-
- 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]).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.$menu.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').appendTo(this.$newElement);
- if (this.options.container) this.$menu.hide();
- },
-
- 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();
- }
- };
-
- // SELECTPICKER PLUGIN DEFINITION
- // ==============================
- function Plugin(option, event) {
- // 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,
- _event = event;
- [].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);
- $this.data('selectpicker', (data = new Selectpicker(this, config, _event)));
- } 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', '.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role="menu"], .bs-searchbox input', Selectpicker.prototype.keydown)
- .on('focusin.modal', '.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role="menu"], .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/modoboa/bower_components/bootstrap-select/dist/js/bootstrap-select.js.map b/modoboa/bower_components/bootstrap-select/dist/js/bootstrap-select.js.map
deleted file mode 100644
index 5b851e992..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/bootstrap-select.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"bootstrap-select.min.js","sources":["bootstrap-select.js"],"names":["root","factory","define","amd","a0","exports","module","require","jQuery","this","$","normalizeToBase","text","rExps","re","ch","each","replace","htmlEscape","html","escapeMap","&","<",">","\"","'","`","source","Object","keys","join","testRegexp","RegExp","replaceRegexp","string","test","match","Plugin","option","event","args","arguments","_option","_event","shift","apply","value","chain","$this","is","data","options","i","hasOwnProperty","config","extend","Selectpicker","DEFAULTS","fn","selectpicker","defaults","Function","String","prototype","includes","toString","defineProperty","object","$defineProperty","result","error","indexOf","search","TypeError","call","stringLength","length","searchString","searchLength","position","undefined","pos","Number","start","Math","min","max","configurable","writable","startsWith","index","charCodeAt","o","k","r","push","triggerNative","eventName","el","dispatchEvent","Event","bubbles","document","createEvent","initEvent","fireEvent","createEventObject","eventType","trigger","expr","icontains","obj","meta","$obj","haystack","toUpperCase","ibegins","aicontains","aibegins","element","e","stopPropagation","preventDefault","$element","$newElement","$button","$menu","$lis","title","attr","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","maxOptions","mobile","selectOnTab","dropdownAlignRight","constructor","that","id","addClass","liObj","multiple","prop","autofocus","createView","after","children","$menuInner","$searchbox","find","click","focus","checkDisabled","clickListener","liveSearchListener","setWidth","selectPosition","on","setTimeout","createDropdown","inputGroup","parent","hasClass","searchbox","actionsbox","donebutton","drop","$drop","li","createLi","innerHTML","reloadLi","destroyLi","_li","optID","titleOption","createElement","liIndex","generateLI","content","classes","optgroup","generateA","inline","tokens","className","appendChild","createTextNode","insertBefore","firstChild","selectedIndex","selected","optionClass","cssText","subtext","icon","isDisabled","disabled","parentElement","tagName","optGroupClass","label","labelSubtext","labelIcon","previousElementSibling","eq","findLis","updateLi","notDisabled","setDisabled","setSelected","tabIndex","selectedItems","map","toArray","split","totalCount","not","tr8nText","trim","status","buttonClass","removeClass","liHeight","sizeInfo","newElement","menu","menuInner","divider","a","cloneNode","actions","parentNode","input","body","offsetHeight","headerHeight","searchHeight","actionsHeight","doneButtonHeight","dividerHeight","outerHeight","menuStyle","getComputedStyle","menuPadding","parseInt","paddingTop","css","paddingBottom","borderTopWidth","borderBottomWidth","menuExtras","marginTop","marginBottom","removeChild","setSize","menuHeight","getHeight","selectOffsetTop","selectOffsetBot","$window","window","selectHeight","divHeight","posVert","offset","top","scrollTop","height","getSize","minHeight","include","classList","contains","lis","getElementsByTagName","lisVisible","Array","filter","optGroup","toggleClass","max-height","overflow","min-height","overflow-y","off","optIndex","slice","last","divLength","$selectClone","clone","appendTo","$selectClone2","ulWidth","outerWidth","btnWidth","actualHeight","getPlacement","left","offsetWidth","append","detach","removeAttr","$document","keyCode","offsetTop","clickedIndex","prevValue","prevIndex","$options","$option","state","$optgroup","maxOptionsGrp","blur","maxReached","maxReachedGrp","optgroupID","maxOptionsArr","maxTxt","maxTxtGrp","$notify","delay","fadeOut","currentTarget","target","change","$no_results","$searchBase","_searchStyle","$lisVisible","keydown","$items","next","first","prev","nextPrev","isActive","$parent","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,"nextAll","prevAll","count","prevKey","keyIndex","toLowerCase","substring","elem","old","Constructor","noConflict","$selectpicker"],"mappings":"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"}
\ No newline at end of file
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/bootstrap-select.min.js b/modoboa/bower_components/bootstrap-select/dist/js/bootstrap-select.min.js
deleted file mode 100644
index 95b1c9e1d..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/bootstrap-select.min.js
+++ /dev/null
@@ -1,8 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!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.replace(this.re,this.ch)}),b}function c(a){var b={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},c="(?:"+Object.keys(b).join("|")+")",d=new RegExp(c),e=new RegExp(c,"g"),f=null==a?"":""+a;return d.test(f)?f.replace(e,function(a){return b[a]}):f}function d(b,c){var d=arguments,f=b,g=c;[].shift.apply(d);var h,i=this.each(function(){var b=a(this);if(b.is("select")){var c=b.data("selectpicker"),i="object"==typeof f&&f;if(c){if(i)for(var j in i)i.hasOwnProperty(j)&&(c.options[j]=i[j])}else{var k=a.extend({},e.DEFAULTS,a.fn.selectpicker.defaults||{},b.data(),i);b.data("selectpicker",c=new e(this,k,g))}"string"==typeof f&&(h=c[f]instanceof Function?c[f].apply(c,d):c.options[f])}});return"undefined"!=typeof h?h:i}String.prototype.includes||!function(){var a={}.toString,b=function(){try{var a={},b=Object.defineProperty,c=b(a,a,a)&&b}catch(d){}return c}(),c="".indexOf,d=function(b){if(null==this)throw TypeError();var d=String(this);if(b&&"[object RegExp]"==a.call(b))throw 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?!1:-1!=c.call(d,f,i)};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(d){}return c}(),b={}.toString,c=function(a){if(null==this)throw TypeError();var c=String(this);if(a&&"[object RegExp]"==b.call(a))throw 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'+this.options.header+"":"",g=this.options.liveSearch?'":"",h=this.multiple&&this.options.actionsBox?' ":"",i=this.multiple&&this.options.doneButton?'":"",j='";return a(j)},createView:function(){var a=this.createDropdown(),b=this.createLi();return a.find("ul")[0].innerHTML=b,a},reloadLi:function(){this.destroyLi();var a=this.createLi();this.$menuInner[0].innerHTML=a},destroyLi:function(){this.$menu.find("li").remove()},createLi:function(){var d=this,e=[],f=0,g=document.createElement("option"),h=-1,i=function(a,b,c,d){return""+a+""},j=function(a,e,f,g){return'"+a+''};if(this.options.title&&!this.multiple&&(h--,!this.$element.find(".bs-title-option").length)){var k=this.$element[0];g.className="bs-title-option",g.appendChild(document.createTextNode(this.options.title)),g.value="",k.insertBefore(g,k.firstChild),void 0===a(k.options[k.selectedIndex]).attr("selected")&&(g.selected=!0)}return this.$element.find("option").each(function(b){var c=a(this);if(h++,!c.hasClass("bs-title-option")){var g=this.className||"",k=this.style.cssText,l=c.data("content")?c.data("content"):c.html(),m=c.data("tokens")?c.data("tokens"):null,n="undefined"!=typeof c.data("subtext")?''+c.data("subtext")+"":"",o="undefined"!=typeof c.data("icon")?' ':"",p=this.disabled||"OPTGROUP"===this.parentElement.tagName&&this.parentElement.disabled;if(""!==o&&p&&(o=""+o+""),d.options.hideDisabled&&p)return void h--;if(c.data("content")||(l=o+''+l+n+""),"OPTGROUP"===this.parentElement.tagName&&c.data("divider")!==!0){var q=" "+this.parentElement.className||"";if(0===c.index()){f+=1;var r=this.parentElement.label,s="undefined"!=typeof c.parent().data("subtext")?''+c.parent().data("subtext")+"":"",t=c.parent().data("icon")?' ':"";r=t+''+r+s+"",0!==b&&e.length>0&&(h++,e.push(i("",null,"divider",f+"div"))),h++,e.push(i(r,null,"dropdown-header"+q,f))}e.push(i(j(l,"opt "+g+q,k,m),b,"",f))}else c.data("divider")===!0?e.push(i("",b,"divider")):c.data("hidden")===!0?e.push(i(j(l,g,k,m),b,"hidden is-hidden")):(this.previousElementSibling&&"OPTGROUP"===this.previousElementSibling.tagName&&(h++,e.push(i("",null,"divider",f+"div"))),e.push(i(j(l,g,k,m),b)));d.liObj[b]=h}}),this.multiple||0!==this.$element.find("option:selected").length||this.options.title||this.$element.find("option").eq(0).prop("selected",!0).attr("selected","selected"),e.join("")},findLis:function(){return null==this.$lis&&(this.$lis=this.$menu.find("li")),this.$lis},render:function(b){var c,d=this;b!==!1&&this.$element.find("option").each(function(a){var b=d.findLis().eq(d.liObj[a]);d.setDisabled(a,this.disabled||"OPTGROUP"===this.parentElement.tagName&&this.parentElement.disabled,b),d.setSelected(a,this.selected,b)}),this.tabIndex();var e=this.$element.find("option").map(function(){if(this.selected){if(d.options.hideDisabled&&(this.disabled||"OPTGROUP"===this.parentElement.tagName&&this.parentElement.disabled))return!1;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"):e+c.html()+b}}).toArray(),f=this.multiple?e.join(this.options.multipleSeparator):e[0];if(this.multiple&&this.options.selectedTextFormat.indexOf("count")>-1){var g=this.options.selectedTextFormat.split(">");if(g.length>1&&e.length>g[1]||1==g.length&&e.length>=2){c=this.options.hideDisabled?", [disabled]":"";var h=this.$element.find("option").not('[data-divider="true"], [data-hidden="true"]'+c).length,i="function"==typeof this.options.countSelectedText?this.options.countSelectedText(e.length,h):this.options.countSelectedText;f=i.replace("{0}",e.length.toString()).replace("{1}",h.toString())}}void 0==this.options.title&&(this.options.title=this.$element.attr("title")),"static"==this.options.selectedTextFormat&&(f=this.options.title),f||(f="undefined"!=typeof this.options.title?this.options.title:this.options.noneSelectedText),this.$button.attr("title",a.trim(f.replace(/<[^>]*>?/g,""))),this.$button.children(".filter-option").html(f),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")[0].cloneNode(!0):null,k=this.options.liveSearch?document.createElement("div"):null,l=this.options.actionsBox&&this.multiple?this.$menu.find(".bs-actionsbox")[0].cloneNode(!0):null,m=this.options.doneButton&&this.multiple?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("span");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):!1,v=u?null:a(d),w=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")),x=w+parseInt(u?u.marginTop:v.css("marginTop"))+parseInt(u?u.marginBottom:v.css("marginBottom"))+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=this,g=this.$menu,h=this.$menuInner,i=a(window),j=this.$newElement[0].offsetHeight,k=this.sizeInfo.liHeight,l=this.sizeInfo.headerHeight,m=this.sizeInfo.searchHeight,n=this.sizeInfo.actionsHeight,o=this.sizeInfo.doneButtonHeight,p=this.sizeInfo.dividerHeight,q=this.sizeInfo.menuPadding,r=this.sizeInfo.menuExtras,s=this.options.hideDisabled?".disabled":"",t=function(){d=f.$newElement.offset().top-i.scrollTop(),e=i.height()-d-j};if(t(),"auto"===this.options.size){var u=function(){var i,j=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))}},p=f.$menuInner[0].getElementsByTagName("li"),s=Array.prototype.filter?Array.prototype.filter.call(p,j("hidden",!1)):f.$lis.not(".hidden"),u=Array.prototype.filter?Array.prototype.filter.call(s,j("dropdown-header",!0)):s.filter(".dropdown-header");t(),b=e-r,f.options.container?(g.data("height")||g.data("height",g.height()),c=g.data("height")):c=g.height(),f.options.dropupAuto&&f.$newElement.toggleClass("dropup",d>e&&c>b-r),f.$newElement.hasClass("dropup")&&(b=d-r),i=s.length+u.length>3?3*k+r-2:0,g.css({"max-height":b+"px",overflow:"hidden","min-height":i+l+m+n+o+"px"}),h.css({"max-height":b-l-m-n-o-q+"px","overflow-y":"auto","min-height":Math.max(i-q,0)+"px"})};u(),this.$searchbox.off("input.getSize propertychange.getSize").on("input.getSize propertychange.getSize",u),i.off("resize.getSize scroll.getSize").on("resize.getSize scroll.getSize",u)}else if(this.options.size&&"auto"!=this.options.size&&this.$lis.not(s).length>this.options.size){var v=this.$lis.not(".divider").not(s).children().slice(0,this.options.size).last().parent().index(),w=this.$lis.slice(0,v+1).filter(".divider").length;b=k*this.options.size+w*p+q,f.options.container?(g.data("height")||g.data("height",g.height()),c=g.data("height")):c=g.height(),f.options.dropupAuto&&this.$newElement.toggleClass("dropup",d>e&&c>b-r),g.css({"max-height":b+l+m+n+o+"px",overflow:"hidden","min-height":""}),h.css({"max-height":b-q+"px","overflow-y":"auto","min-height":""})}}},setWidth:function(){if("auto"===this.options.width){this.$menu.css("min-width","0");var a=this.$menu.parent().clone().appendTo("body"),b=this.options.container?this.$newElement.clone().appendTo("body"):a,c=a.children(".dropdown-menu").outerWidth(),d=b.css("width","auto").children("button").outerWidth();a.remove(),b.remove(),this.$newElement.css("width",Math.max(c,d)+"px")}else"fit"===this.options.width?(this.$menu.css("min-width",""),this.$newElement.css("width","").addClass("fit-width")):this.options.width?(this.$menu.css("min-width",""),this.$newElement.css("width",this.options.width)):(this.$menu.css("min-width",""),this.$newElement.css("width",""));this.$newElement.hasClass("fit-width")&&"fit"!==this.options.width&&this.$newElement.removeClass("fit-width")},selectPosition:function(){var b,c,d=this,e="",f=a(e),g=function(a){f.addClass(a.attr("class").replace(/form-control|fit-width/gi,"")).toggleClass("dropup",a.hasClass("dropup")),b=a.offset(),c=a.hasClass("dropup")?0:a[0].offsetHeight,f.css({top:b.top+c,left:b.left,width:a[0].offsetWidth,position:"absolute"})};this.$newElement.on("click",function(){d.isDisabled()||(g(a(this)),f.appendTo(d.options.container),f.toggleClass("open",!a(this).hasClass("open")),f.append(d.$menu))}),a(window).on("resize scroll",function(){g(d.$newElement)}),this.$element.on("hide.bs.select",function(){d.$menu.data("height",d.$menu.height()),f.detach()})},setSelected:function(a,b,c){if(!c)var c=this.findLis().eq(this.liObj[a]);c.toggleClass("selected",b)},setDisabled:function(a,b,c){if(!c)var c=this.findLis().eq(this.liObj[a]);b?c.addClass("disabled").children("a").attr("href","#").attr("tabindex",-1):c.removeClass("disabled").children("a").removeAttr("href").attr("tabindex",0)},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)):(this.$button.hasClass("disabled")&&(this.$newElement.removeClass("disabled"),this.$button.removeClass("disabled")),-1!=this.$button.attr("tabindex")||this.$element.data("tabindex")||this.$button.removeAttr("tabindex")),this.$button.click(function(){return!a.isDisabled()})},tabIndex:function(){this.$element.is("[tabindex]")&&(this.$element.data("tabindex",this.$element.attr("tabindex")),this.$button.attr("tabindex",this.$element.data("tabindex")))},clickListener:function(){var b=this,c=a(document);this.$newElement.on("touchstart.dropdown",".dropdown-menu",function(a){a.stopPropagation()}),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.$newElement.on("click",function(){b.setSize(),b.$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.$menu.find(".selected a").focus()})}),this.$menu.on("click","li a",function(c){var d=a(this),e=d.parent().data("originalIndex"),f=b.$element.val(),g=b.$element.prop("selectedIndex");if(b.multiple&&c.stopPropagation(),c.preventDefault(),!b.isDisabled()&&!d.parent().hasClass("disabled")){var h=b.$element.find("option"),i=h.eq(e),j=i.prop("selected"),k=i.parent("optgroup"),l=b.options.maxOptions,m=k.data("maxOptions")||!1;if(b.multiple){if(i.prop("selected",!j),b.setSelected(e,!j),d.blur(),l!==!1||m!==!1){var n=l');q[2]&&(r=r.replace("{var}",q[2][l>1?0:1]),s=s.replace("{var}",q[2][m>1?0:1])),i.prop("selected",!1),b.$menu.append(t),l&&n&&(t.append(a(""+r+"
")),b.$element.trigger("maxReached.bs.select")),m&&o&&(t.append(a(""+s+"
")),b.$element.trigger("maxReachedGrp.bs.select")),setTimeout(function(){b.setSelected(e,!1)},10),t.delay(750).fadeOut(300,function(){a(this).remove()})}}}else h.prop("selected",!1),i.prop("selected",!0),b.$menu.find(".selected").removeClass("selected"),b.setSelected(e,!0);b.multiple?b.options.liveSearch&&b.$searchbox.focus():b.$button.focus(),(f!=b.$element.val()&&b.multiple||g!=b.$element.prop("selectedIndex")&&!b.multiple)&&(b.$element.triggerNative("change"),b.$element.trigger("changed.bs.select",[e,i.prop("selected"),j]))}}),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.$menu.on("click","li.divider, li.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(),b.$element.triggerNative("change")}),this.$element.change(function(){b.render(!1)})},liveSearchListener:function(){var d=this,e=a('');this.$newElement.on("click.dropdown.data-api touchstart.dropdown.data-api",function(){d.$menuInner.find(".active").removeClass("active"),d.$searchbox.val()&&(d.$searchbox.val(""),d.$lis.not(".is-hidden").removeClass("hidden"),e.parent().length&&e.remove()),d.multiple||d.$menuInner.find(".selected").addClass("active"),setTimeout(function(){d.$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(d.$searchbox.val()){var f=d.$lis.not(".is-hidden").removeClass("hidden").children("a");f=d.options.liveSearchNormalize?f.not(":a"+d._searchStyle()+'("'+b(d.$searchbox.val())+'")'):f.not(":"+d._searchStyle()+'("'+d.$searchbox.val()+'")'),f.parent().addClass("hidden"),d.$lis.filter(".dropdown-header").each(function(){var b=a(this),c=b.data("optgroup");0===d.$lis.filter("[data-optgroup="+c+"]").not(b).not(".hidden").length&&(b.addClass("hidden"),d.$lis.filter("[data-optgroup="+c+"div]").addClass("hidden"))});var g=d.$lis.not(".hidden");g.each(function(b){var c=a(this);c.hasClass("divider")&&(c.index()===g.eq(0).index()||c.index()===g.last().index()||g.eq(b+1).hasClass("divider"))&&c.addClass("hidden")}),d.$lis.not(".hidden, .no-results").length?e.parent().length&&e.remove():(e.parent().length&&e.remove(),e.html(d.options.noneResultsText.replace("{0}",'"'+c(d.$searchbox.val())+'"')).show(),d.$menuInner.append(e))}else d.$lis.not(".is-hidden").removeClass("hidden"),e.parent().length&&e.remove();d.$lis.filter(".active").removeClass("active"),d.$searchbox.val()&&d.$lis.not(".hidden, .divider, .dropdown-header").eq(0).addClass("active").children("a").focus(),a(this).focus()})},_searchStyle:function(){var a="icontains";switch(this.options.liveSearchStyle){case"begins":case"startsWith":a="ibegins";break;case"contains":}return a},val:function(a){return"undefined"!=typeof a?(this.$element.val(a),this.render(),this.$element):this.$element.val()},selectAll:function(){this.findLis(),this.$element.find("option:enabled").not("[data-divider], [data-hidden]").prop("selected",!0),this.$lis.not(".divider, .dropdown-header, .disabled, .hidden").addClass("selected"),this.render(!1)},deselectAll:function(){this.findLis(),this.$element.find("option:enabled").not("[data-divider], [data-hidden]").prop("selected",!1),this.$lis.not(".divider, .dropdown-header, .disabled, .hidden").removeClass("selected"),this.render(!1)},keydown:function(c){var d,e,f,g,h,i,j,k,l,m=a(this),n=m.is("input")?m.parent().parent():m.parent(),o=n.data("this"),p=":not(.disabled, .hidden, .dropdown-header, .divider)",q={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"};if(o.options.liveSearch&&(n=m.parent().parent()),o.options.container&&(n=o.$menu),d=a("[role=menu] li a",n),l=o.$menu.parent().hasClass("open"),!l&&(c.keyCode>=48&&c.keyCode<=57||c.keyCode>=65&&c.keyCode<=90)&&(o.options.container?o.$newElement.trigger("click"):(o.setSize(),o.$menu.parent().addClass("open"),l=!0),o.$searchbox.focus()),o.options.liveSearch&&(/(^9$|27)/.test(c.keyCode.toString(10))&&l&&0===o.$menu.find(".active").length&&(c.preventDefault(),o.$menu.parent().removeClass("open"),o.options.container&&o.$newElement.removeClass("open"),o.$button.focus()),d=a("[role=menu] li:not(.disabled, .hidden, .dropdown-header, .divider)",n),m.val()||/(38|40)/.test(c.keyCode.toString(10))||0===d.filter(".active").length&&(d=o.$newElement.find("li"),d=o.options.liveSearchNormalize?d.filter(":a"+o._searchStyle()+"("+b(q[c.keyCode])+")"):d.filter(":"+o._searchStyle()+"("+q[c.keyCode]+")"))),d.length){if(/(38|40)/.test(c.keyCode.toString(10)))e=d.index(d.filter(":focus")),g=d.parent(p).first().data("originalIndex"),h=d.parent(p).last().data("originalIndex"),f=d.eq(e).parent().nextAll(p).eq(0).data("originalIndex"),i=d.eq(e).parent().prevAll(p).eq(0).data("originalIndex"),j=d.eq(f).parent().prevAll(p).eq(0).data("originalIndex"),o.options.liveSearch&&(d.each(function(b){a(this).hasClass("disabled")||a(this).data("index",b)}),e=d.index(d.filter(".active")),g=d.first().data("index"),h=d.last().data("index"),f=d.eq(e).nextAll().eq(0).data("index"),i=d.eq(e).prevAll().eq(0).data("index"),j=d.eq(f).prevAll().eq(0).data("index")),k=m.data("prevIndex"),38==c.keyCode?(o.options.liveSearch&&(e-=1),e!=j&&e>i&&(e=i),g>e&&(e=g),e==k&&(e=h)):40==c.keyCode&&(o.options.liveSearch&&(e+=1),-1==e&&(e=0),e!=j&&f>e&&(e=f),e>h&&(e=h),e==k&&(e=g)),m.data("prevIndex",e),o.options.liveSearch?(c.preventDefault(),m.hasClass("dropdown-toggle")||(d.removeClass("active").eq(e).addClass("active").children("a").focus(),m.focus())):d.eq(e).focus();else if(!m.is("input")){var r,s,t=[];d.each(function(){a(this).parent().hasClass("disabled")||a.trim(a(this).text().toLowerCase()).substring(0,1)==q[c.keyCode]&&t.push(a(this).parent().index())}),r=a(document).data("keycount"),r++,a(document).data("keycount",r),s=a.trim(a(":focus").text().toLowerCase()).substring(0,1),s!=q[c.keyCode]?(r=1,a(document).data("keycount",r)):r>=t.length&&(a(document).data("keycount",0),r>t.length&&(r=1)),d.eq(t[r-1]).focus()}if((/(13|32)/.test(c.keyCode.toString(10))||/(^9$)/.test(c.keyCode.toString(10))&&o.options.selectOnTab)&&l){if(/(32)/.test(c.keyCode.toString(10))||c.preventDefault(),o.options.liveSearch)/(32)/.test(c.keyCode.toString(10))||(o.$menu.find(".active a").click(),m.focus());else{var u=a(":focus");u.click(),u.focus(),c.preventDefault(),a(document).data("spaceSelect",!0)}a(document).data("keycount",0)}(/(^9$|27)/.test(c.keyCode.toString(10))&&l&&(o.multiple||o.options.liveSearch)||/(27)/.test(c.keyCode.toString(10))&&!l)&&(o.$menu.parent().removeClass("open"),o.options.container&&o.$newElement.removeClass("open"),o.$button.focus())}},mobile:function(){this.$element.addClass("mobile-device").appendTo(this.$newElement),this.options.container&&this.$menu.hide()},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()}};var f=a.fn.selectpicker;a.fn.selectpicker=d,a.fn.selectpicker.Constructor=e,a.fn.selectpicker.noConflict=function(){return a.fn.selectpicker=f,this},a(document).data("keycount",0).on("keydown",'.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role="menu"], .bs-searchbox input',e.prototype.keydown).on("focusin.modal",'.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role="menu"], .bs-searchbox input',function(a){a.stopPropagation()}),a(window).on("load.bs.select.data-api",function(){a(".selectpicker").each(function(){var b=a(this);d.call(b,b.data())})})}(jQuery)});
-//# sourceMappingURL=bootstrap-select.js.map
\ No newline at end of file
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-bg_BG.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-bg_BG.js
deleted file mode 100644
index 3f714ae55..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-bg_BG.js
+++ /dev/null
@@ -1,44 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports === 'object') {
- // 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(jQuery);
- }
-}(this, function () {
-
-(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/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-bg_BG.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-bg_BG.min.js
deleted file mode 100644
index 3475f21a7..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-bg_BG.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!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:", "}}(jQuery)});
\ No newline at end of file
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-cs_CZ.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-cs_CZ.js
deleted file mode 100644
index cfe317dae..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-cs_CZ.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports === 'object') {
- // 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(jQuery);
- }
-}(this, function () {
-
-(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: ', '
- };
-})(jQuery);
-
-
-}));
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-cs_CZ.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-cs_CZ.min.js
deleted file mode 100644
index c3890f69f..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-cs_CZ.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!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:", "}}(jQuery)});
\ No newline at end of file
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-da_DK.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-da_DK.js
deleted file mode 100644
index 9b905bd12..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-da_DK.js
+++ /dev/null
@@ -1,44 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports === 'object') {
- // 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(jQuery);
- }
-}(this, function () {
-
-(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/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-da_DK.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-da_DK.min.js
deleted file mode 100644
index df4030a48..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-da_DK.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!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:", "}}(jQuery)});
\ No newline at end of file
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-de_DE.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-de_DE.js
deleted file mode 100644
index ba350b395..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-de_DE.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports === 'object') {
- // 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(jQuery);
- }
-}(this, function () {
-
-(function ($) {
- $.fn.selectpicker.defaults = {
- noneSelectedText: 'Bitte wählen...',
- noneResultsText: 'Keine Ergebnisse für {0}',
- countSelectedText: '{0} von {1} ausgewählt',
- maxOptionsText: ['Limit erreicht ({n} {var} max.)', 'Gruppen-Limit erreicht ({n} {var} max.)', ['Eintrag', 'Einträge']],
- multipleSeparator: ', '
- };
-})(jQuery);
-
-
-}));
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-de_DE.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-de_DE.min.js
deleted file mode 100644
index 3866e0448..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-de_DE.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Bitte wählen...",noneResultsText:"Keine Ergebnisse für {0}",countSelectedText:"{0} von {1} ausgewählt",maxOptionsText:["Limit erreicht ({n} {var} max.)","Gruppen-Limit erreicht ({n} {var} max.)",["Eintrag","Einträge"]],multipleSeparator:", "}}(jQuery)});
\ No newline at end of file
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-en_US.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-en_US.js
deleted file mode 100644
index 118c78c8e..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-en_US.js
+++ /dev/null
@@ -1,44 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports === 'object') {
- // 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(jQuery);
- }
-}(this, function () {
-
-(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/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-en_US.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-en_US.min.js
deleted file mode 100644
index 5d683fb21..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-en_US.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!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:", "}}(jQuery)});
\ No newline at end of file
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-es_CL.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-es_CL.js
deleted file mode 100644
index e2a991199..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-es_CL.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports === 'object') {
- // 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(jQuery);
- }
-}(this, function () {
-
-(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: ', '
- };
-})(jQuery);
-
-
-}));
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-es_CL.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-es_CL.min.js
deleted file mode 100644
index 651bd10de..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-es_CL.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!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:", "}}(jQuery)});
\ No newline at end of file
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-eu.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-eu.js
deleted file mode 100644
index ab2728431..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-eu.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports === 'object') {
- // 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(jQuery);
- }
-}(this, function () {
-
-(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: ', '
- };
-})(jQuery);
-
-
-}));
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-eu.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-eu.min.js
deleted file mode 100644
index 384bb8168..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-eu.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!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:", "}}(jQuery)});
\ No newline at end of file
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-fa_IR.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-fa_IR.js
deleted file mode 100644
index 7edc4d3c6..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-fa_IR.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports === 'object') {
- // 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(jQuery);
- }
-}(this, function () {
-
-(function ($) {
- $.fn.selectpicker.defaults = {
- noneSelectedText: 'چیزی انتخاب نشده است',
- noneResultsText: 'هیج مشابهی برای {0} پیدا نشد',
- countSelectedText: "{0} از {1} مورد انتخاب شده",
- maxOptionsText: ['بیشتر ممکن نیست {حداکثر {n} عدد}', 'بیشتر ممکن نیست {حداکثر {n} عدد}'],
- selectAllText: 'انتخاب همه',
- deselectAllText: 'انتخاب هیچ کدام',
- multipleSeparator: ', '
- };
-})(jQuery);
-
-
-}));
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-fa_IR.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-fa_IR.min.js
deleted file mode 100644
index b45020cf9..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-fa_IR.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"چیزی انتخاب نشده است",noneResultsText:"هیج مشابهی برای {0} پیدا نشد",countSelectedText:"{0} از {1} مورد انتخاب شده",maxOptionsText:["بیشتر ممکن نیست {حداکثر {n} عدد}","بیشتر ممکن نیست {حداکثر {n} عدد}"],selectAllText:"انتخاب همه",deselectAllText:"انتخاب هیچ کدام",multipleSeparator:", "}}(jQuery)});
\ No newline at end of file
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-fr_FR.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-fr_FR.js
deleted file mode 100644
index db77fa334..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-fr_FR.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports === 'object') {
- // 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(jQuery);
- }
-}(this, function () {
-
-(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: ', '
- };
-})(jQuery);
-
-
-}));
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-fr_FR.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-fr_FR.min.js
deleted file mode 100644
index e999af859..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-fr_FR.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!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:", "}}(jQuery)});
\ No newline at end of file
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-hu_HU.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-hu_HU.js
deleted file mode 100644
index 4d7f502ae..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-hu_HU.js
+++ /dev/null
@@ -1,44 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports === 'object') {
- // 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(jQuery);
- }
-}(this, function () {
-
-(function ($) {
- $.fn.selectpicker.defaults = {
- noneSelectedText: 'Válasszon!',
- noneResultsText: 'Nincs találat {0}',
- countSelectedText: function (numSelected, numTotal) {
- return '{n} 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/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-hu_HU.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-hu_HU.min.js
deleted file mode 100644
index 98cdef707..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-hu_HU.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Válasszon!",noneResultsText:"Nincs találat {0}",countSelectedText:function(a,b){return"{n} 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:", "}}(jQuery)});
\ No newline at end of file
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-it_IT.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-it_IT.js
deleted file mode 100644
index f41331d11..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-it_IT.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports === 'object') {
- // 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(jQuery);
- }
-}(this, function () {
-
-(function ($) {
- $.fn.selectpicker.defaults = {
- noneSelectedText: 'Nessuna selezione',
- noneResultsText: 'Nessun risultato per {0}',
- countSelectedText: 'Selezionati {0} di {1}',
- maxOptionsText: ['Limite raggiunto ({n} {var} max)', 'Limite del gruppo raggiunto ({n} {var} max)', ['elementi', 'elemento']],
- multipleSeparator: ', '
- };
-})(jQuery);
-
-
-}));
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-it_IT.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-it_IT.min.js
deleted file mode 100644
index 746f011e4..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-it_IT.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Nessuna selezione",noneResultsText:"Nessun risultato per {0}",countSelectedText:"Selezionati {0} di {1}",maxOptionsText:["Limite raggiunto ({n} {var} max)","Limite del gruppo raggiunto ({n} {var} max)",["elementi","elemento"]],multipleSeparator:", "}}(jQuery)});
\ No newline at end of file
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ko_KR.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ko_KR.js
deleted file mode 100644
index 823db4c4f..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ko_KR.js
+++ /dev/null
@@ -1,44 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports === 'object') {
- // 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(jQuery);
- }
-}(this, function () {
-
-(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/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ko_KR.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ko_KR.min.js
deleted file mode 100644
index 73b57451d..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ko_KR.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!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:", "}}(jQuery)});
\ No newline at end of file
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-nl_NL.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-nl_NL.js
deleted file mode 100644
index b53167097..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-nl_NL.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports === 'object') {
- // 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(jQuery);
- }
-}(this, function () {
-
-(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']],
- multipleSeparator: ', '
- };
-})(jQuery);
-
-
-}));
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-nl_NL.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-nl_NL.min.js
deleted file mode 100644
index 07a951e5e..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-nl_NL.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!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"]],multipleSeparator:", "}}(jQuery)});
\ No newline at end of file
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-pl_PL.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-pl_PL.js
deleted file mode 100644
index d7e425157..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-pl_PL.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports === 'object') {
- // 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(jQuery);
- }
-}(this, function () {
-
-(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']],
- selectAll: 'Zaznacz wszystkie',
- deselectAll: 'Odznacz wszystkie',
- multipleSeparator: ', '
- };
-})(jQuery);
-
-
-}));
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-pl_PL.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-pl_PL.min.js
deleted file mode 100644
index 6c0a986ec..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-pl_PL.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!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"]],selectAll:"Zaznacz wszystkie",deselectAll:"Odznacz wszystkie",multipleSeparator:", "}}(jQuery)});
\ No newline at end of file
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-pt_BR.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-pt_BR.js
deleted file mode 100644
index c899b5e7e..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-pt_BR.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports === 'object') {
- // 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(jQuery);
- }
-}(this, function () {
-
-(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: ', '
- };
-})(jQuery);
-
-
-}));
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-pt_BR.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-pt_BR.min.js
deleted file mode 100644
index af7e2b802..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-pt_BR.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!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:", "}}(jQuery)});
\ No newline at end of file
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-pt_PT.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-pt_PT.js
deleted file mode 100644
index 6e840f9c8..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-pt_PT.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports === 'object') {
- // 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(jQuery);
- }
-}(this, function () {
-
-(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: ', '
-};
-})(jQuery);
-
-
-}));
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-pt_PT.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-pt_PT.min.js
deleted file mode 100644
index 1bdbfca12..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-pt_PT.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!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:", "}}(jQuery)});
\ No newline at end of file
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ro_RO.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ro_RO.js
deleted file mode 100644
index 7acdcaf2b..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ro_RO.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports === 'object') {
- // 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(jQuery);
- }
-}(this, function () {
-
-(function ($) {
- $.fn.selectpicker.defaults = {
- noneSelectedText: 'Nu a fost selectat nimic',
- noneResultsText: 'Nu exista niciun rezultat {0}',
- countSelectedText: '{0} din {1} selectat(e)',
- maxOptionsText: ['Limita a fost atinsa ({n} {var} max)', 'Limita de grup a fost atinsa ({n} {var} max)', ['iteme', 'item']],
- multipleSeparator: ', '
- };
-})(jQuery);
-
-
-}));
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ro_RO.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ro_RO.min.js
deleted file mode 100644
index 0bab32a59..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ro_RO.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Nu a fost selectat nimic",noneResultsText:"Nu exista niciun rezultat {0}",countSelectedText:"{0} din {1} selectat(e)",maxOptionsText:["Limita a fost atinsa ({n} {var} max)","Limita de grup a fost atinsa ({n} {var} max)",["iteme","item"]],multipleSeparator:", "}}(jQuery)});
\ No newline at end of file
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ru_RU.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ru_RU.js
deleted file mode 100644
index 6afe385f3..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ru_RU.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports === 'object') {
- // 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(jQuery);
- }
-}(this, function () {
-
-(function ($) {
- $.fn.selectpicker.defaults = {
- noneSelectedText: 'Ничего не выбрано',
- noneResultsText: 'Совпадений не найдено {0}',
- countSelectedText: 'Выбрано {0} из {1}',
- maxOptionsText: ['Достигнут предел ({n} {var} максимум)', 'Достигнут предел в группе ({n} {var} максимум)', ['items', 'item']],
- doneButtonText: 'Закрыть',
- multipleSeparator: ', '
- };
-})(jQuery);
-
-
-}));
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ru_RU.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ru_RU.min.js
deleted file mode 100644
index 07b7c430a..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ru_RU.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Ничего не выбрано",noneResultsText:"Совпадений не найдено {0}",countSelectedText:"Выбрано {0} из {1}",maxOptionsText:["Достигнут предел ({n} {var} максимум)","Достигнут предел в группе ({n} {var} максимум)",["items","item"]],doneButtonText:"Закрыть",multipleSeparator:", "}}(jQuery)});
\ No newline at end of file
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-sk_SK.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-sk_SK.js
deleted file mode 100644
index 6591959b2..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-sk_SK.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports === 'object') {
- // 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(jQuery);
- }
-}(this, function () {
-
-(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/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-sk_SK.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-sk_SK.min.js
deleted file mode 100644
index 5f2edaf04..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-sk_SK.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!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:", "}}(jQuery)});
\ No newline at end of file
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-sl_SI.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-sl_SI.js
deleted file mode 100644
index 4830b3393..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-sl_SI.js
+++ /dev/null
@@ -1,44 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports === 'object') {
- // 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(jQuery);
- }
-}(this, function () {
-
-(function ($) {
- $.fn.selectpicker.defaults = {
- noneSelectedText: 'Nič izbranega',
- noneResultsText: 'Ni zadetkov za {0}',
- countSelectedText: function (numSelected, numTotal) {
- "Število izbranih: {0}";
- },
- 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/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-sl_SI.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-sl_SI.min.js
deleted file mode 100644
index 361f50350..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-sl_SI.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Nič izbranega",noneResultsText:"Ni zadetkov za {0}",countSelectedText:function(a,b){"Število izbranih: {0}"},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:", "}}(jQuery)});
\ No newline at end of file
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-sv_SE.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-sv_SE.js
deleted file mode 100644
index ec834f95a..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-sv_SE.js
+++ /dev/null
@@ -1,44 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports === 'object') {
- // 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(jQuery);
- }
-}(this, function () {
-
-(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/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-sv_SE.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-sv_SE.min.js
deleted file mode 100644
index 5cbff5e14..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-sv_SE.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!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:", "}}(jQuery)});
\ No newline at end of file
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-tr_TR.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-tr_TR.js
deleted file mode 100644
index 027c8c76d..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-tr_TR.js
+++ /dev/null
@@ -1,44 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports === 'object') {
- // 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(jQuery);
- }
-}(this, function () {
-
-(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/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-tr_TR.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-tr_TR.min.js
deleted file mode 100644
index 049bf167c..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-tr_TR.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!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:", "}}(jQuery)});
\ No newline at end of file
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ua_UA.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ua_UA.js
deleted file mode 100644
index 35203c238..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ua_UA.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports === 'object') {
- // 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(jQuery);
- }
-}(this, function () {
-
-(function ($) {
- $.fn.selectpicker.defaults = {
- noneSelectedText: 'Нічого не вибрано',
- noneResultsText: 'Збігів не знайдено {0}',
- countSelectedText: 'Вибрано {0} із {1}',
- maxOptionsText: ['Досягнута межа ({n} {var} максимум)', 'Досягнута межа в групі ({n} {var} максимум)', ['items', 'item']],
- multipleSeparator: ', '
- };
-})(jQuery);
-
-
-}));
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ua_UA.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ua_UA.min.js
deleted file mode 100644
index bced6aa8b..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ua_UA.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Нічого не вибрано",noneResultsText:"Збігів не знайдено {0}",countSelectedText:"Вибрано {0} із {1}",maxOptionsText:["Досягнута межа ({n} {var} максимум)","Досягнута межа в групі ({n} {var} максимум)",["items","item"]],multipleSeparator:", "}}(jQuery)});
\ No newline at end of file
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-zh_CN.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-zh_CN.js
deleted file mode 100644
index 2a9fa3452..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-zh_CN.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports === 'object') {
- // 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(jQuery);
- }
-}(this, function () {
-
-(function ($) {
- $.fn.selectpicker.defaults = {
- noneSelectedText: '没有选中任何项',
- noneResultsText: '没有找到匹配项',
- countSelectedText: '选中{1}中的{0}项',
- maxOptionsText: ['超出限制 (最多选择{n}项)', '组选择超出限制(最多选择{n}组)'],
- multipleSeparator: ', '
- };
-})(jQuery);
-
-
-}));
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-zh_CN.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-zh_CN.min.js
deleted file mode 100644
index bb7023bff..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-zh_CN.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"没有选中任何项",noneResultsText:"没有找到匹配项",countSelectedText:"选中{1}中的{0}项",maxOptionsText:["超出限制 (最多选择{n}项)","组选择超出限制(最多选择{n}组)"],multipleSeparator:", "}}(jQuery)});
\ No newline at end of file
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-zh_TW.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-zh_TW.js
deleted file mode 100644
index 33ce80574..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-zh_TW.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports === 'object') {
- // 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(jQuery);
- }
-}(this, function () {
-
-(function ($) {
- $.fn.selectpicker.defaults = {
- noneSelectedText: '沒有選取任何項目',
- noneResultsText: '沒有找到符合的結果',
- countSelectedText: '已經選取{0}個項目',
- maxOptionsText: ['超過限制 (最多選擇{n}項)', '超過限制(最多選擇{n}組)'],
- selectAllText: '選取全部',
- deselectAllText: '全部取消',
- multipleSeparator: ', '
- };
-})(jQuery);
-
-
-}));
diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-zh_TW.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-zh_TW.min.js
deleted file mode 100644
index 7e871b80d..000000000
--- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-zh_TW.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select)
- *
- * Copyright 2013-2015 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 exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"沒有選取任何項目",noneResultsText:"沒有找到符合的結果",countSelectedText:"已經選取{0}個項目",maxOptionsText:["超過限制 (最多選擇{n}項)","超過限制(最多選擇{n}組)"],selectAllText:"選取全部",deselectAllText:"全部取消",multipleSeparator:", "}}(jQuery)});
\ No newline at end of file
diff --git a/modoboa/bower_components/bootstrap-select/js/.jshintrc b/modoboa/bower_components/bootstrap-select/js/.jshintrc
deleted file mode 100644
index 99c92fe3c..000000000
--- a/modoboa/bower_components/bootstrap-select/js/.jshintrc
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "curly": true,
- "eqeqeq": true,
- "immed": true,
- "latedef": true,
- "newcap": true,
- "noarg": true,
- "sub": true,
- "undef": true,
- "unused": true,
- "boss": true,
- "eqnull": true,
- "browser": true,
- "jquery": true
-}
diff --git a/modoboa/bower_components/bootstrap-select/js/bootstrap-select.js b/modoboa/bower_components/bootstrap-select/js/bootstrap-select.js
deleted file mode 100644
index b7d6e237d..000000000
--- a/modoboa/bower_components/bootstrap-select/js/bootstrap-select.js
+++ /dev/null
@@ -1,1624 +0,0 @@
-(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 TypeError();
- }
- var string = String(this);
- if (search && toString.call(search) == '[object RegExp]') {
- throw 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 TypeError();
- }
- var string = String(this);
- if (search && toString.call(search) == '[object RegExp]') {
- throw 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
- };
- }
-
- $.fn.triggerNative = function (eventName) {
- var el = this[0],
- event;
-
- if (el.dispatchEvent) {
- if (typeof Event === 'function') {
- // 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) {
- event = document.createEventObject();
- event.eventType = eventName;
- el.fireEvent('on' + eventName, event);
- }
-
- this.trigger(eventName);
- }
- };
- //
-
- // Case insensitive contains search
- $.expr[':'].icontains = function (obj, index, meta) {
- var $obj = $(obj);
- var haystack = ($obj.data('tokens') || $obj.text()).toUpperCase();
- return haystack.includes(meta[3].toUpperCase());
- };
-
- // Case insensitive begins search
- $.expr[':'].ibegins = function (obj, index, meta) {
- var $obj = $(obj);
- var haystack = ($obj.data('tokens') || $obj.text()).toUpperCase();
- return haystack.startsWith(meta[3].toUpperCase());
- };
-
- // Case and accent insensitive contains search
- $.expr[':'].aicontains = function (obj, index, meta) {
- var $obj = $(obj);
- var haystack = ($obj.data('tokens') || $obj.data('normalizedText') || $obj.text()).toUpperCase();
- return haystack.includes(meta[3].toUpperCase());
- };
-
- // Case and accent insensitive begins search
- $.expr[':'].aibegins = function (obj, index, meta) {
- var $obj = $(obj);
- var haystack = ($obj.data('tokens') || $obj.data('normalizedText') || $obj.text()).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.replace(this.re, this.ch);
- });
- return text;
- }
-
-
- function htmlEscape(html) {
- var escapeMap = {
- '&': '&',
- '<': '<',
- '>': '>',
- '"': '"',
- "'": ''',
- '`': '`'
- };
- var source = '(?:' + Object.keys(escapeMap).join('|') + ')',
- testRegexp = new RegExp(source),
- replaceRegexp = new RegExp(source, 'g'),
- string = html == null ? '' : '' + html;
- return testRegexp.test(string) ? string.replace(replaceRegexp, function (match) {
- return escapeMap[match];
- }) : string;
- }
-
- var Selectpicker = function (element, options, e) {
- if (e) {
- e.stopPropagation();
- e.preventDefault();
- }
-
- 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');
- }
-
- //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.remove;
- this.remove = Selectpicker.prototype.remove;
- this.show = Selectpicker.prototype.show;
- this.hide = Selectpicker.prototype.hide;
-
- this.init();
- };
-
- Selectpicker.VERSION = '1.7.2';
-
- // 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',
- maxOptions: false,
- mobile: false,
- selectOnTab: false,
- dropdownAlignRight: false
- };
-
- 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);
- 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');
-
- if (this.options.dropdownAlignRight)
- 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.$element.trigger('hide.bs.select', e);
- });
-
- this.$newElement.on('hidden.bs.dropdown', function (e) {
- that.$element.trigger('hidden.bs.select', e);
- });
-
- this.$newElement.on('show.bs.dropdown', function (e) {
- that.$element.trigger('show.bs.select', e);
- });
-
- this.$newElement.on('shown.bs.dropdown', function (e) {
- that.$element.trigger('shown.bs.select', e);
- });
-
- setTimeout(function () {
- that.$element.trigger('loaded.bs.select');
- });
- },
-
- createDropdown: function () {
- // Options
- // If we are multiple, then add the show-tick class by default
- var multiple = this.multiple ? ' 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 () {
- //Remove all children.
- this.destroyLi();
- //Re build
- var li = this.createLi();
- this.$menuInner[0].innerHTML = li;
- },
-
- destroyLi: function () {
- this.$menu.find('li').remove();
- },
-
- 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.appendChild(document.createTextNode(this.options.title));
- titleOption.value = '';
- element.insertBefore(titleOption, element.firstChild);
- // Check if selected attribute is already set on an option. If not, select the titleOption option.
- if ($(element.options[element.selectedIndex]).attr('selected') === undefined) titleOption.selected = true;
- }
- }
-
- this.$element.find('option').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 = 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' ? ' ' : '',
- isDisabled = this.disabled || (this.parentElement.tagName === 'OPTGROUP' && this.parentElement.disabled);
-
- if (icon !== '' && isDisabled) {
- icon = '' + icon + '';
- }
-
- if (that.options.hideDisabled && isDisabled) {
- liIndex--;
- return;
- }
-
- if (!$this.data('content')) {
- // Prepend any icon and append any subtext to the main text.
- text = icon + '' + text + subtext + '';
- }
-
- if (this.parentElement.tagName === 'OPTGROUP' && $this.data('divider') !== true) {
- var optGroupClass = ' ' + this.parentElement.className || '';
-
- if ($this.index() === 0) { // Is it the first option of the optgroup?
- optID += 1;
-
- // Get the opt group label
- var label = this.parentElement.label,
- labelSubtext = typeof $this.parent().data('subtext') !== 'undefined' ? '' + $this.parent().data('subtext') + '' : '',
- labelIcon = $this.parent().data('icon') ? ' ' : '';
-
- label = labelIcon + '' + 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));
- }
- _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) {
- _li.push(generateLI(generateA(text, optionClass, inline, tokens), index, 'hidden is-hidden'));
- } else {
- if (this.previousElementSibling && this.previousElementSibling.tagName === 'OPTGROUP') {
- 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;
-
- //Update the LI to match the SELECT
- if (updateLi !== false) {
- this.$element.find('option').each(function (index) {
- var $lis = that.findLis().eq(that.liObj[index]);
-
- that.setDisabled(index, this.disabled || this.parentElement.tagName === 'OPTGROUP' && this.parentElement.disabled, $lis);
- that.setSelected(index, this.selected, $lis);
- });
- }
-
- this.tabIndex();
-
- var selectedItems = this.$element.find('option').map(function () {
- if (this.selected) {
- if (that.options.hideDisabled && (this.disabled || this.parentElement.tagName === 'OPTGROUP' && this.parentElement.disabled)) return false;
-
- 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');
- } 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 = this.$element.find('option').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
- this.$button.attr('title', $.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')[0].cloneNode(true) : null,
- search = this.options.liveSearch ? document.createElement('div') : null,
- actions = this.options.actionsBox && this.multiple ? this.$menu.find('.bs-actionsbox')[0].cloneNode(true) : null,
- doneButton = this.options.doneButton && this.multiple ? 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) {
- // create a span instead of input as creating an input element is slower
- var input = document.createElement('span');
- 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 = 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')),
- menuExtras = menuPadding +
- parseInt(menuStyle ? menuStyle.marginTop : $menu.css('marginTop')) +
- parseInt(menuStyle ? menuStyle.marginBottom : $menu.css('marginBottom')) + 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,
- 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,
- getHeight,
- selectOffsetTop,
- selectOffsetBot,
- posVert = function () {
- selectOffsetTop = that.$newElement.offset().top - $window.scrollTop();
- selectOffsetBot = $window.height() - selectOffsetTop - selectHeight;
- };
-
- posVert();
-
- 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');
-
- posVert();
- menuHeight = selectOffsetBot - menuExtras;
-
- 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) {
- that.$newElement.toggleClass('dropup', selectOffsetTop > selectOffsetBot && (menuHeight - menuExtras) < getHeight);
- }
- if (that.$newElement.hasClass('dropup')) {
- menuHeight = selectOffsetTop - menuExtras;
- }
-
- if ((lisVisible.length + optGroup.length) > 3) {
- minHeight = liHeight * 3 + menuExtras - 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 + 'px',
- 'overflow-y': 'auto',
- 'min-height': Math.max(minHeight - menuPadding, 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;
-
- 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) < getHeight);
- }
- $menu.css({
- 'max-height': menuHeight + headerHeight + searchHeight + actionsHeight + doneButtonHeight + 'px',
- 'overflow': 'hidden',
- 'min-height': ''
- });
- $menuInner.css({
- 'max-height': menuHeight - menuPadding + '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 () {
- var that = this,
- drop = '',
- $drop = $(drop),
- pos,
- actualHeight,
- getPlacement = function ($element) {
- $drop.addClass($element.attr('class').replace(/form-control|fit-width/gi, '')).toggleClass('dropup', $element.hasClass('dropup'));
- pos = $element.offset();
- actualHeight = $element.hasClass('dropup') ? 0 : $element[0].offsetHeight;
- $drop.css({
- 'top': pos.top + actualHeight,
- 'left': pos.left,
- 'width': $element[0].offsetWidth,
- 'position': 'absolute'
- });
- };
-
- this.$newElement.on('click', function () {
- if (that.isDisabled()) {
- return;
- }
- getPlacement($(this));
- $drop.appendTo(that.options.container);
- $drop.toggleClass('open', !$(this).hasClass('open'));
- $drop.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());
- $drop.detach();
- });
- },
-
- setSelected: function (index, selected, $lis) {
- if (!$lis) {
- var $lis = this.findLis().eq(this.liObj[index]);
- }
-
- $lis.toggleClass('selected', selected);
- },
-
- setDisabled: function (index, disabled, $lis) {
- if (!$lis) {
- var $lis = this.findLis().eq(this.liObj[index]);
- }
-
- if (disabled) {
- $lis.addClass('disabled').children('a').attr('href', '#').attr('tabindex', -1);
- } else {
- $lis.removeClass('disabled').children('a').removeAttr('href').attr('tabindex', 0);
- }
- },
-
- 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);
- } else {
- if (this.$button.hasClass('disabled')) {
- this.$newElement.removeClass('disabled');
- this.$button.removeClass('disabled');
- }
-
- if (this.$button.attr('tabindex') == -1 && !this.$element.data('tabindex')) {
- this.$button.removeAttr('tabindex');
- }
- }
-
- this.$button.click(function () {
- return !that.isDisabled();
- });
- },
-
- tabIndex: function () {
- if (this.$element.is('[tabindex]')) {
- this.$element.data('tabindex', this.$element.attr('tabindex'));
- this.$button.attr('tabindex', this.$element.data('tabindex'));
- }
- },
-
- clickListener: function () {
- var that = this,
- $document = $(document);
-
- this.$newElement.on('touchstart.dropdown', '.dropdown-menu', function (e) {
- e.stopPropagation();
- });
-
- $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.$newElement.on('click', function () {
- that.setSize();
- that.$element.on('shown.bs.select', function () {
- if (!that.options.liveSearch && !that.multiple) {
- that.$menu.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.$menu.on('click', 'li a', function (e) {
- var $this = $(this),
- clickedIndex = $this.parent().data('originalIndex'),
- prevValue = that.$element.val(),
- prevIndex = that.$element.prop('selectedIndex');
-
- // Don't close on multi choice menu
- if (that.multiple) {
- 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.$menu.find('.selected').removeClass('selected');
- 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.$menu.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.$menu.find('[data-optgroup="' + optgroupID + '"]').removeClass('selected');
- that.setSelected(clickedIndex, true);
- } else {
- var maxOptionsArr = (typeof that.options.maxOptionsText === 'function') ?
- that.options.maxOptionsText(maxOptions, maxOptionsGrp) : that.options.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 + '
'));
- that.$element.trigger('maxReached.bs.select');
- }
-
- if (maxOptionsGrp && maxReachedGrp) {
- $notify.append($('' + maxTxtGrp + '
'));
- 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.$button.focus();
- } else if (that.options.liveSearch) {
- that.$searchbox.focus();
- }
-
- // Trigger select 'change'
- if ((prevValue != that.$element.val() && that.multiple) || (prevIndex != that.$element.prop('selectedIndex') && !that.multiple)) {
- that.$element.triggerNative('change');
- // $option.prop('selected') is current option state (selected/unselected). state is previous option state.
- that.$element.trigger('changed.bs.select', [clickedIndex, $option.prop('selected'), state]);
- }
- }
- });
-
- 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.$menu.on('click', 'li.divider, li.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();
- }
- that.$element.triggerNative('change');
- });
-
- this.$element.change(function () {
- that.render(false);
- });
- },
-
- liveSearchListener: function () {
- var that = this,
- $no_results = $('');
-
- this.$newElement.on('click.dropdown.data-api touchstart.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 () {
- if (that.$searchbox.val()) {
- var $searchBase = that.$lis.not('.is-hidden').removeClass('hidden').children('a');
- if (that.options.liveSearchNormalize) {
- $searchBase = $searchBase.not(':a' + that._searchStyle() + '("' + normalizeToBase(that.$searchbox.val()) + '")');
- } else {
- $searchBase = $searchBase.not(':' + that._searchStyle() + '("' + that.$searchbox.val() + '")');
- }
- $searchBase.parent().addClass('hidden');
-
- that.$lis.filter('.dropdown-header').each(function () {
- var $this = $(this),
- optgroup = $this.data('optgroup');
-
- if (that.$lis.filter('[data-optgroup=' + optgroup + ']').not($this).not('.hidden').length === 0) {
- $this.addClass('hidden');
- that.$lis.filter('[data-optgroup=' + optgroup + 'div]').addClass('hidden');
- }
- });
-
- var $lisVisible = that.$lis.not('.hidden');
-
- // hide divider if first or last visible, or if followed by another divider
- $lisVisible.each(function (index) {
- var $this = $(this);
-
- if ($this.hasClass('divider') && (
- $this.index() === $lisVisible.eq(0).index() ||
- $this.index() === $lisVisible.last().index() ||
- $lisVisible.eq(index + 1).hasClass('divider'))) {
- $this.addClass('hidden');
- }
- });
-
- if (!that.$lis.not('.hidden, .no-results').length) {
- if (!!$no_results.parent().length) {
- $no_results.remove();
- }
- $no_results.html(that.options.noneResultsText.replace('{0}', '"' + htmlEscape(that.$searchbox.val()) + '"')).show();
- that.$menuInner.append($no_results);
- } else if (!!$no_results.parent().length) {
- $no_results.remove();
- }
-
- } else {
- that.$lis.not('.is-hidden').removeClass('hidden');
- if (!!$no_results.parent().length) {
- $no_results.remove();
- }
- }
-
- that.$lis.filter('.active').removeClass('active');
- if (that.$searchbox.val()) that.$lis.not('.hidden, .divider, .dropdown-header').eq(0).addClass('active').children('a').focus();
- $(this).focus();
- });
- },
-
- _searchStyle: function () {
- var style = 'icontains';
- switch (this.options.liveSearchStyle) {
- case 'begins':
- case 'startsWith':
- style = 'ibegins';
- break;
- case 'contains':
- default:
- break; //no need to change the default
- }
-
- return style;
- },
-
- val: function (value) {
- if (typeof value !== 'undefined') {
- this.$element.val(value);
- this.render();
-
- return this.$element;
- } else {
- return this.$element.val();
- }
- },
-
- selectAll: function () {
- this.findLis();
- this.$element.find('option:enabled').not('[data-divider], [data-hidden]').prop('selected', true);
- this.$lis.not('.divider, .dropdown-header, .disabled, .hidden').addClass('selected');
- this.render(false);
- },
-
- deselectAll: function () {
- this.findLis();
- this.$element.find('option:enabled').not('[data-divider], [data-hidden]').prop('selected', false);
- this.$lis.not('.divider, .dropdown-header, .disabled, .hidden').removeClass('selected');
- this.render(false);
- },
-
- keydown: function (e) {
- var $this = $(this),
- $parent = $this.is('input') ? $this.parent().parent() : $this.parent(),
- $items,
- that = $parent.data('this'),
- index,
- next,
- first,
- last,
- prev,
- nextPrev,
- 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'
- };
-
- if (that.options.liveSearch) $parent = $this.parent().parent();
-
- if (that.options.container) $parent = that.$menu;
-
- $items = $('[role=menu] li a', $parent);
-
- isActive = that.$menu.parent().hasClass('open');
-
- if (!isActive && (e.keyCode >= 48 && e.keyCode <= 57 || e.keyCode >= 65 && e.keyCode <= 90)) {
- if (!that.options.container) {
- that.setSize();
- that.$menu.parent().addClass('open');
- isActive = true;
- } else {
- that.$newElement.trigger('click');
- }
- that.$searchbox.focus();
- }
-
- if (that.options.liveSearch) {
- if (/(^9$|27)/.test(e.keyCode.toString(10)) && isActive && that.$menu.find('.active').length === 0) {
- e.preventDefault();
- that.$menu.parent().removeClass('open');
- if (that.options.container) that.$newElement.removeClass('open');
- that.$button.focus();
- }
- // $items contains li elements when liveSearch is enabled
- $items = $('[role=menu] li:not(.disabled, .hidden, .dropdown-header, .divider)', $parent);
- if (!$this.val() && !/(38|40)/.test(e.keyCode.toString(10))) {
- if ($items.filter('.active').length === 0) {
- $items = that.$newElement.find('li');
- if (that.options.liveSearchNormalize) {
- $items = $items.filter(':a' + that._searchStyle() + '(' + normalizeToBase(keyCodeMap[e.keyCode]) + ')');
- } else {
- $items = $items.filter(':' + that._searchStyle() + '(' + keyCodeMap[e.keyCode] + ')');
- }
- }
- }
- }
-
- if (!$items.length) return;
-
- if (/(38|40)/.test(e.keyCode.toString(10))) {
- index = $items.index($items.filter(':focus'));
- first = $items.parent(selector).first().data('originalIndex');
- last = $items.parent(selector).last().data('originalIndex');
- next = $items.eq(index).parent().nextAll(selector).eq(0).data('originalIndex');
- prev = $items.eq(index).parent().prevAll(selector).eq(0).data('originalIndex');
- nextPrev = $items.eq(next).parent().prevAll(selector).eq(0).data('originalIndex');
-
- if (that.options.liveSearch) {
- $items.each(function (i) {
- if (!$(this).hasClass('disabled')) {
- $(this).data('index', i);
- }
- });
- index = $items.index($items.filter('.active'));
- first = $items.first().data('index');
- last = $items.last().data('index');
- next = $items.eq(index).nextAll().eq(0).data('index');
- prev = $items.eq(index).prevAll().eq(0).data('index');
- nextPrev = $items.eq(next).prevAll().eq(0).data('index');
- }
-
- prevIndex = $this.data('prevIndex');
-
- if (e.keyCode == 38) {
- if (that.options.liveSearch) index -= 1;
- if (index != nextPrev && index > prev) index = prev;
- if (index < first) index = first;
- if (index == prevIndex) index = last;
- } else if (e.keyCode == 40) {
- if (that.options.liveSearch) index += 1;
- if (index == -1) index = 0;
- if (index != nextPrev && index < next) index = next;
- if (index > last) index = last;
- if (index == prevIndex) index = first;
- }
-
- $this.data('prevIndex', index);
-
- if (!that.options.liveSearch) {
- $items.eq(index).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.each(function () {
- if (!$(this).parent().hasClass('disabled')) {
- if ($.trim($(this).text().toLowerCase()).substring(0, 1) == keyCodeMap[e.keyCode]) {
- keyIndex.push($(this).parent().index());
- }
- }
- });
-
- 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]).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.$menu.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').appendTo(this.$newElement);
- if (this.options.container) this.$menu.hide();
- },
-
- 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();
- }
- };
-
- // SELECTPICKER PLUGIN DEFINITION
- // ==============================
- function Plugin(option, event) {
- // 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,
- _event = event;
- [].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);
- $this.data('selectpicker', (data = new Selectpicker(this, config, _event)));
- } 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', '.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role="menu"], .bs-searchbox input', Selectpicker.prototype.keydown)
- .on('focusin.modal', '.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role="menu"], .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/modoboa/bower_components/bootstrap-select/js/i18n/defaults-bg_BG.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-bg_BG.js
deleted file mode 100644
index 4d99b60b3..000000000
--- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-bg_BG.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for bootstrap-select.
- * Locale: BG (Bulgaria)
- * Region: BG (Bulgaria)
- */
-(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/modoboa/bower_components/bootstrap-select/js/i18n/defaults-cs_CZ.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-cs_CZ.js
deleted file mode 100644
index d45727954..000000000
--- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-cs_CZ.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * Translated default messages for bootstrap-select.
- * Locale: CS
- * Region: CZ (Czech Republic)
- */
-(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: ', '
- };
-})(jQuery);
diff --git a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-da_DK.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-da_DK.js
deleted file mode 100644
index 5376021ab..000000000
--- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-da_DK.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for bootstrap-select.
- * Locale: DA (Danish)
- * Region: DK (Denmark)
- */
-(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/modoboa/bower_components/bootstrap-select/js/i18n/defaults-de_DE.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-de_DE.js
deleted file mode 100644
index d4d5b0990..000000000
--- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-de_DE.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * Translated default messages for bootstrap-select.
- * Locale: DE (German, deutsch)
- * Region: DE (Germany, Deutschland)
- */
-(function ($) {
- $.fn.selectpicker.defaults = {
- noneSelectedText: 'Bitte wählen...',
- noneResultsText: 'Keine Ergebnisse für {0}',
- countSelectedText: '{0} von {1} ausgewählt',
- maxOptionsText: ['Limit erreicht ({n} {var} max.)', 'Gruppen-Limit erreicht ({n} {var} max.)', ['Eintrag', 'Einträge']],
- multipleSeparator: ', '
- };
-})(jQuery);
diff --git a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-en_US.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-en_US.js
deleted file mode 100644
index acb90352d..000000000
--- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-en_US.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for bootstrap-select.
- * Locale: EN (English)
- * Region: US (United States)
- */
-(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/modoboa/bower_components/bootstrap-select/js/i18n/defaults-es_CL.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-es_CL.js
deleted file mode 100644
index ed17a5f4a..000000000
--- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-es_CL.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * Translated default messages for bootstrap-select.
- * Locale: ES (Spanish)
- * Region: CL (Chile)
- */
-(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: ', '
- };
-})(jQuery);
diff --git a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-eu.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-eu.js
deleted file mode 100644
index 037c7d7c0..000000000
--- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-eu.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * Translated default messages for bootstrap-select.
- * Locale: EU (Basque)
- * Region:
- */
-(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: ', '
- };
-})(jQuery);
diff --git a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-fa_IR.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-fa_IR.js
deleted file mode 100644
index 00b179868..000000000
--- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-fa_IR.js
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * Translated default messages for bootstrap-select.
- * Locale: FA (Farsi)
- * Region: IR (Iran)
- */
-(function ($) {
- $.fn.selectpicker.defaults = {
- noneSelectedText: 'چیزی انتخاب نشده است',
- noneResultsText: 'هیج مشابهی برای {0} پیدا نشد',
- countSelectedText: "{0} از {1} مورد انتخاب شده",
- maxOptionsText: ['بیشتر ممکن نیست {حداکثر {n} عدد}', 'بیشتر ممکن نیست {حداکثر {n} عدد}'],
- selectAllText: 'انتخاب همه',
- deselectAllText: 'انتخاب هیچ کدام',
- multipleSeparator: ', '
- };
-})(jQuery);
diff --git a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-fr_FR.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-fr_FR.js
deleted file mode 100644
index 133320fa3..000000000
--- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-fr_FR.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Translated default messages for bootstrap-select.
- * Locale: FR (French; Français)
- * Region: FR (France)
- */
-(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: ', '
- };
-})(jQuery);
diff --git a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-hu_HU.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-hu_HU.js
deleted file mode 100644
index 5f5a56176..000000000
--- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-hu_HU.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for bootstrap-select.
- * Locale: HU (Hungarian)
- * Region: HU (Hungary)
- */
-(function ($) {
- $.fn.selectpicker.defaults = {
- noneSelectedText: 'Válasszon!',
- noneResultsText: 'Nincs találat {0}',
- countSelectedText: function (numSelected, numTotal) {
- return '{n} 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/modoboa/bower_components/bootstrap-select/js/i18n/defaults-it_IT.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-it_IT.js
deleted file mode 100644
index 3cf2e13f6..000000000
--- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-it_IT.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * Translated default messages for bootstrap-select.
- * Locale: IT (Italian; italiano)
- * Region: IT (Italy; Italia)
- * Author: Michele Beltrame
- */
-(function ($) {
- $.fn.selectpicker.defaults = {
- noneSelectedText: 'Nessuna selezione',
- noneResultsText: 'Nessun risultato per {0}',
- countSelectedText: 'Selezionati {0} di {1}',
- maxOptionsText: ['Limite raggiunto ({n} {var} max)', 'Limite del gruppo raggiunto ({n} {var} max)', ['elementi', 'elemento']],
- multipleSeparator: ', '
- };
-})(jQuery);
diff --git a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-ko_KR.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-ko_KR.js
deleted file mode 100644
index 9583cc561..000000000
--- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-ko_KR.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for bootstrap-select.
- * Locale: KO (Korean)
- * Region: KR (South Korea)
- */
-(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/modoboa/bower_components/bootstrap-select/js/i18n/defaults-nl_NL.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-nl_NL.js
deleted file mode 100644
index 96b857a43..000000000
--- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-nl_NL.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * Translated default messages for bootstrap-select.
- * Locale: NL (Dutch; Nederlands)
- * Region: NL (Europe)
- * Author: Daan Rosbergen (Badmuts)
- */
-(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']],
- multipleSeparator: ', '
- };
-})(jQuery);
diff --git a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-pl_PL.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-pl_PL.js
deleted file mode 100644
index e7eccaf9a..000000000
--- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-pl_PL.js
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * Translated default messages for bootstrap-select.
- * Locale: PL (Polish)
- * Region: EU (Europe)
- */
-(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']],
- selectAll: 'Zaznacz wszystkie',
- deselectAll: 'Odznacz wszystkie',
- multipleSeparator: ', '
- };
-})(jQuery);
diff --git a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-pt_BR.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-pt_BR.js
deleted file mode 100644
index 610871b1e..000000000
--- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-pt_BR.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * Translated default messages for bootstrap-select.
- * Locale: PT (Portuguese; português)
- * Region: BR (Brazil; Brasil)
- * Author: Rodrigo de Avila
- */
-(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: ', '
- };
-})(jQuery);
diff --git a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-pt_PT.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-pt_PT.js
deleted file mode 100644
index 2d07e87c2..000000000
--- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-pt_PT.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
-* Translated default messages for bootstrap-select.
-* Locale: PT (Portuguese; português)
-* Region: PT (Portugal; Portugal)
-* Author: Burnspirit
-*/
-(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: ', '
-};
-})(jQuery);
diff --git a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-ro_RO.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-ro_RO.js
deleted file mode 100644
index c6ddf6f6a..000000000
--- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-ro_RO.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * Translated default messages for bootstrap-select.
- * Locale: RO (Romanian)
- * Region: RO (Romania)
- * Alex Florea
- */
-(function ($) {
- $.fn.selectpicker.defaults = {
- noneSelectedText: 'Nu a fost selectat nimic',
- noneResultsText: 'Nu exista niciun rezultat {0}',
- countSelectedText: '{0} din {1} selectat(e)',
- maxOptionsText: ['Limita a fost atinsa ({n} {var} max)', 'Limita de grup a fost atinsa ({n} {var} max)', ['iteme', 'item']],
- multipleSeparator: ', '
- };
-})(jQuery);
diff --git a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-ru_RU.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-ru_RU.js
deleted file mode 100644
index c354f8c98..000000000
--- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-ru_RU.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * Translated default messages for bootstrap-select.
- * Locale: RU (Russian; Русский)
- * Region: RU (Russian Federation)
- */
-(function ($) {
- $.fn.selectpicker.defaults = {
- noneSelectedText: 'Ничего не выбрано',
- noneResultsText: 'Совпадений не найдено {0}',
- countSelectedText: 'Выбрано {0} из {1}',
- maxOptionsText: ['Достигнут предел ({n} {var} максимум)', 'Достигнут предел в группе ({n} {var} максимум)', ['items', 'item']],
- doneButtonText: 'Закрыть',
- multipleSeparator: ', '
- };
-})(jQuery);
diff --git a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-sk_SK.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-sk_SK.js
deleted file mode 100644
index e96762d7b..000000000
--- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-sk_SK.js
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * Translated default messages for bootstrap-select.
- * Locale: SK
- * Region: SK (Slovak Republic)
- */
-(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/modoboa/bower_components/bootstrap-select/js/i18n/defaults-sl_SI.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-sl_SI.js
deleted file mode 100644
index a328c8c17..000000000
--- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-sl_SI.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for bootstrap-select.
- * Locale: SL (Slovenian)
- * Region: SI (Slovenia)
- */
-(function ($) {
- $.fn.selectpicker.defaults = {
- noneSelectedText: 'Nič izbranega',
- noneResultsText: 'Ni zadetkov za {0}',
- countSelectedText: function (numSelected, numTotal) {
- "Število izbranih: {0}";
- },
- 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/modoboa/bower_components/bootstrap-select/js/i18n/defaults-sv_SE.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-sv_SE.js
deleted file mode 100644
index 89128e947..000000000
--- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-sv_SE.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for bootstrap-select.
- * Locale: SV (Swedish)
- * Region: SE (Sweden)
- */
-(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/modoboa/bower_components/bootstrap-select/js/i18n/defaults-tr_TR.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-tr_TR.js
deleted file mode 100644
index fe43937d1..000000000
--- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-tr_TR.js
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Translated default messages for bootstrap-select.
- * Locale: TR (Turkey)
- * Region: TR (Europe)
- * Author: Serhan Güney
- */
-(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/modoboa/bower_components/bootstrap-select/js/i18n/defaults-ua_UA.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-ua_UA.js
deleted file mode 100644
index e1d395866..000000000
--- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-ua_UA.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * Translated default messages for bootstrap-select.
- * Locale: UA (Ukrainian; Українська)
- * Region: UA (Ukraine)
- */
-(function ($) {
- $.fn.selectpicker.defaults = {
- noneSelectedText: 'Нічого не вибрано',
- noneResultsText: 'Збігів не знайдено {0}',
- countSelectedText: 'Вибрано {0} із {1}',
- maxOptionsText: ['Досягнута межа ({n} {var} максимум)', 'Досягнута межа в групі ({n} {var} максимум)', ['items', 'item']],
- multipleSeparator: ', '
- };
-})(jQuery);
diff --git a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-zh_CN.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-zh_CN.js
deleted file mode 100644
index ad1c13293..000000000
--- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-zh_CN.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * Translated default messages for bootstrap-select.
- * Locale: ZH (Chinese)
- * Region: CN (China)
- */
-(function ($) {
- $.fn.selectpicker.defaults = {
- noneSelectedText: '没有选中任何项',
- noneResultsText: '没有找到匹配项',
- countSelectedText: '选中{1}中的{0}项',
- maxOptionsText: ['超出限制 (最多选择{n}项)', '组选择超出限制(最多选择{n}组)'],
- multipleSeparator: ', '
- };
-})(jQuery);
diff --git a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-zh_TW.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-zh_TW.js
deleted file mode 100644
index c05add334..000000000
--- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-zh_TW.js
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * Translated default messages for bootstrap-select.
- * Locale: ZH (Chinese)
- * Region: TW (Taiwan)
- */
-(function ($) {
- $.fn.selectpicker.defaults = {
- noneSelectedText: '沒有選取任何項目',
- noneResultsText: '沒有找到符合的結果',
- countSelectedText: '已經選取{0}個項目',
- maxOptionsText: ['超過限制 (最多選擇{n}項)', '超過限制(最多選擇{n}組)'],
- selectAllText: '選取全部',
- deselectAllText: '全部取消',
- multipleSeparator: ', '
- };
-})(jQuery);
diff --git a/modoboa/bower_components/bootstrap-select/less/bootstrap-select.less b/modoboa/bower_components/bootstrap-select/less/bootstrap-select.less
deleted file mode 100644
index 13808c945..000000000
--- a/modoboa/bower_components/bootstrap-select/less/bootstrap-select.less
+++ /dev/null
@@ -1,332 +0,0 @@
-@import "variables";
-
-// Mixins
-.cursor-disabled() {
- cursor: not-allowed;
-}
-
-// Rules
-.bootstrap-select {
- width: 220px \0; /*IE9 and below*/
-
- // The selectpicker button
- > .dropdown-toggle {
- width: 100%;
- padding-right: 25px;
- }
-
- // Error display
- .has-error & .dropdown-toggle,
- .error & .dropdown-toggle {
- border-color: @color-red-error;
- }
-
- &.fit-width {
- width: auto !important;
- }
-
- &:not([class*="col-"]):not([class*="form-control"]):not(.input-group-btn) {
- width: @width-default;
- }
-
- .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;
-
- &:not([class*="col-"]) {
- width: 100%;
- }
-
- &.input-group-btn {
- z-index: auto;
- }
-}
-
-// The selectpicker components
-.bootstrap-select.btn-group {
- &:not(.input-group-btn),
- &[class*="col-"] {
- float: none;
- display: inline-block;
- margin-left: 0;
- }
-
- // Forces the pull to the right, if necessary
- &,
- &[class*="col-"],
- .row &[class*="col-"] {
- &.dropdown-menu-right {
- float: right;
- }
- }
-
- .form-inline &,
- .form-horizontal &,
- .form-group & {
- margin-bottom: 0;
- }
-
- .form-group-lg &.form-control,
- .form-group-sm &.form-control {
- padding: 0;
- }
-
- // Set the width of the live search (and any other form control within an inline form)
- // see https://github.com/silviomoreto/bootstrap-select/issues/685
- .form-inline & .form-control {
- width: 100%;
- }
-
- &.disabled,
- > .disabled {
- .cursor-disabled();
-
- &:focus {
- outline: none !important;
- }
- }
-
- // The selectpicker button
- .dropdown-toggle {
- .filter-option {
- display: inline-block;
- overflow: hidden;
- width: 100%;
- text-align: left;
- }
-
- .caret {
- position: absolute;
- top: 50%;
- right: 12px;
- margin-top: -2px;
- vertical-align: middle;
- }
- }
-
- &[class*="col-"] .dropdown-toggle {
- width: 100%;
- }
-
- // The selectpicker dropdown
- .dropdown-menu {
- min-width: 100%;
- z-index: @zindex-select-dropdown;
- box-sizing: border-box;
-
- &.inner {
- position: static;
- float: none;
- border: 0;
- padding: 0;
- margin: 0;
- border-radius: 0;
- box-shadow: none;
- }
-
- li {
- position: relative;
-
- &.active small {
- color: #fff;
- }
-
- &.disabled a {
- .cursor-disabled();
- }
-
- a {
- cursor: pointer;
-
- &.opt {
- position: relative;
- padding-left: 2.25em;
- }
-
- span.check-mark {
- display: none;
- }
-
- span.text {
- display: inline-block;
- }
- }
-
- small {
- padding-left: 0.5em;
- }
- }
-
- .notify {
- position: absolute;
- bottom: 5px;
- width: 96%;
- margin: 0 2%;
- min-height: 26px;
- padding: 3px 5px;
- background: rgb(245, 245, 245);
- border: 1px solid rgb(227, 227, 227);
- box-shadow: inset 0 1px 1px fade(rgb(0, 0, 0), 5%);
- pointer-events: none;
- opacity: 0.9;
- box-sizing: border-box;
- }
- }
-
- .no-results {
- padding: 3px;
- background: #f5f5f5;
- margin: 0 5px;
- white-space: nowrap;
- }
-
- &.fit-width .dropdown-toggle {
- .filter-option {
- position: static;
- }
-
- .caret {
- position: static;
- top: auto;
- margin-top: -1px;
- }
- }
-
- &.show-tick .dropdown-menu li {
- &.selected a span.check-mark {
- position: absolute;
- display: inline-block;
- right: 15px;
- margin-top: 5px;
- }
-
- a span.text {
- margin-right: 34px;
- }
- }
-}
-
-.bootstrap-select.show-menu-arrow {
- &.open > .dropdown-toggle {
- z-index: (@zindex-select-dropdown + 1);
- }
-
- .dropdown-toggle {
- &:before {
- content: '';
- border-left: 7px solid transparent;
- border-right: 7px solid transparent;
- border-bottom: 7px solid @color-grey-arrow;
- position: absolute;
- bottom: -4px;
- left: 9px;
- display: none;
- }
-
- &: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;
- }
- }
-
- &.dropup .dropdown-toggle {
- &:before {
- bottom: auto;
- top: -3px;
- border-top: 7px solid @color-grey-arrow;
- border-bottom: 0;
- }
-
- &:after {
- bottom: auto;
- top: -3px;
- border-top: 6px solid white;
- border-bottom: 0;
- }
- }
-
- &.pull-right .dropdown-toggle {
- &:before {
- right: 12px;
- left: auto;
- }
-
- &:after {
- right: 13px;
- left: auto;
- }
- }
-
- &.open > .dropdown-toggle {
- &:before,
- &:after {
- display: block;
- }
- }
-}
-
-.bs-searchbox,
-.bs-actionsbox,
-.bs-donebutton {
- padding: 4px 8px;
-}
-
-.bs-actionsbox {
- float: left;
- width: 100%;
- box-sizing: border-box;
-
- & .btn-group button {
- width: 50%;
- }
-}
-
-.bs-donebutton {
- float: left;
- width: 100%;
- box-sizing: border-box;
-
- & .btn-group button {
- width: 100%;
- }
-}
-
-.bs-searchbox {
- & + .bs-actionsbox {
- padding: 0 8px 4px;
- }
-
- & .form-control {
- margin-bottom: 0;
- width: 100%;
- }
-}
-
-select.bs-select-hidden,
-select.selectpicker {
- display: none !important;
-}
-
-select.mobile-device {
- position: absolute !important;
- top: 0;
- left: 0;
- display: block !important;
- width: 100%;
- height: 100% !important;
- opacity: 0;
-}
diff --git a/modoboa/bower_components/bootstrap-select/less/variables.less b/modoboa/bower_components/bootstrap-select/less/variables.less
deleted file mode 100644
index c6deaa321..000000000
--- a/modoboa/bower_components/bootstrap-select/less/variables.less
+++ /dev/null
@@ -1,6 +0,0 @@
-@color-red-error: rgb(185, 74, 72);
-@color-grey-arrow: rgba(204, 204, 204, 0.2);
-
-@width-default: 220px; // 3 960px-grid columns
-
-@zindex-select-dropdown: 1035; // must be lower than a modal background (1040) but higher than the fixed navbar (1030)
diff --git a/modoboa/bower_components/microplugin/.bower.json b/modoboa/bower_components/microplugin/.bower.json
new file mode 100644
index 000000000..6952e931e
--- /dev/null
+++ b/modoboa/bower_components/microplugin/.bower.json
@@ -0,0 +1,38 @@
+{
+ "name": "microplugin",
+ "keywords": [
+ "extensibility",
+ "plugins",
+ "architecture",
+ "require",
+ "dependencies"
+ ],
+ "description": "A lightweight plugin / dependency system for javascript libraries.",
+ "version": "0.0.3",
+ "license": "Apache License, Version 2.0",
+ "readmeFilename": "README.md",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/brianreavis/microplugin.js.git"
+ },
+ "main": [
+ "src/microplugin.js"
+ ],
+ "ignore": [
+ "Makefile",
+ "test",
+ ".travis.yml",
+ ".npmignore.yml"
+ ],
+ "dependencies": {},
+ "homepage": "https://github.com/brianreavis/microplugin.js",
+ "_release": "0.0.3",
+ "_resolution": {
+ "type": "version",
+ "tag": "v0.0.3",
+ "commit": "d8671e6cc769938648f8735610534427cdeeaf67"
+ },
+ "_source": "https://github.com/brianreavis/microplugin.js.git",
+ "_target": "0.0.x",
+ "_originalSource": "microplugin"
+}
\ No newline at end of file
diff --git a/modoboa/bower_components/microplugin/.gitignore b/modoboa/bower_components/microplugin/.gitignore
new file mode 100644
index 000000000..fbe153a5d
--- /dev/null
+++ b/modoboa/bower_components/microplugin/.gitignore
@@ -0,0 +1,2 @@
+.DS_store
+node_modules
\ No newline at end of file
diff --git a/modoboa/bower_components/microplugin/.npmignore b/modoboa/bower_components/microplugin/.npmignore
new file mode 100644
index 000000000..46c03e5b2
--- /dev/null
+++ b/modoboa/bower_components/microplugin/.npmignore
@@ -0,0 +1,3 @@
+*.md
+.git*
+test/
\ No newline at end of file
diff --git a/modoboa/bower_components/microplugin/README.md b/modoboa/bower_components/microplugin/README.md
new file mode 100644
index 000000000..985ae454a
--- /dev/null
+++ b/modoboa/bower_components/microplugin/README.md
@@ -0,0 +1,115 @@
+# microplugin.js
+[](http://badge.fury.io/js/microplugin)
+[](https://travis-ci.org/brianreavis/microplugin.js)
+
+*Keep code modularized & extensible.* MicroPlugin is a lightweight drop-in plugin architecture for your JavaScript library. Plugins can [declare dependencies](#dependencies) to other plugins and can be [initialized with options](#loading-plugins) (in a variety of formats). It [AMD](http://en.wikipedia.org/wiki/Asynchronous_module_definition)-compatible and it works identically in Node.js and in a browser.
+
+```sh
+$ npm install microplugin
+$ bower install microplugin
+```
+
+## Integration
+
+Using the provided mixin, extend your function with the [API](#mixin-methods) for declaring and loading plugins:
+
+```js
+var TextEditor = function(options) {
+ this.initializePlugins(options.plugins);
+};
+
+MicroPlugin.mixin(TextEditor);
+```
+
+That's it for integration! Now you can selectively load the plugins on an instance-by-instance basis.
+
+```js
+var editor = new TextEditor({
+ plugins: ['links','images']
+});
+```
+
+### Loading Plugins
+
+The [`initializePlugins()`](#prototypeinitializepluginsplugins) method sets up the plugin system and loads a list of plugins (with options). It accepts the list in three styles, depending on your preference.
+
+#### List (no options)
+```js
+["plugin_a","plugin_b","plugin_c"]
+```
+
+#### List (with options)
+```js
+[
+ {name: "plugin_a", options: { /* ... */ }},
+ {name: "plugin_b", options: { /* ... */ }},
+ {name: "plugin_c", options: { /* ... */ }}
+]
+```
+
+#### Hash (with options)
+```js
+{
+ "plugin_a": { /* ... */ },
+ "plugin_b": { /* ... */ },
+ "plugin_c": { /* ... */ }
+}
+```
+
+## Plugin Design
+
+Plugins aren't extravagant—they are barebones by design. A plugin is simply a function that gets called when an instance of your object is being constructed. Within that function, you can manually override methods, set up event listeners, etc. The `this` context will be the instance of your object.
+
+### Defining Plugins
+
+```js
+MyLibrary.define("math", function(options) {
+ // You can return values which will be available to other plugins
+ // when they load the plugin via "require()". Explained more in
+ // the next section.
+ return {
+ random : Math.random,
+ sqrt : Math.sqrt,
+ sin2 : function(t) { return Math.pow(Math.sin(t), 2); },
+ cos2 : function(t) { return Math.pow(Math.sin(t), 2); }
+ };
+});
+```
+
+#### Dependencies
+
+Plugins can declare dependencies to other plugins (and use any exports they provide) through the [`require`](#prototyperequirename) function.
+
+```js
+MyLibrary.define("calculations", function(options) {
+ var math = this.require("math");
+ var theta = math.random();
+ var success = math.sqrt(math.sin2(theta) + math.cos2(theta)) === 1;
+
+ alert("Does the law of sines work? " + success);
+});
+```
+
+## API Reference
+
+#### MicroPlugin.mixin(fn)
+Sets up all methods on the function and its prototype for defining and loading plugins.
+
+### Mixin Methods
+
+#### define(name, fn)
+Declares a new plugin with the specified name.
+
+#### [prototype].require(name)
+Loads a plugin as a dependency and returns whatever it exports (if anything).
+
+#### [prototype].initializePlugins(plugins)
+Initializes the plugin system and loads a list of plugins with the provided options. The "plugins" argument can be in a [variety of formats](#loading-plugins).
+
+## License
+
+Copyright © 2013 [Brian Reavis](http://twitter.com/brianreavis) & [Contributors](https://github.com/brianreavis/microplugin.js/graphs/contributors)
+
+Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at: http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
diff --git a/modoboa/bower_components/microplugin/bower.json b/modoboa/bower_components/microplugin/bower.json
new file mode 100644
index 000000000..5ea782cdc
--- /dev/null
+++ b/modoboa/bower_components/microplugin/bower.json
@@ -0,0 +1,22 @@
+{
+ "name": "microplugin",
+ "keywords": ["extensibility","plugins","architecture","require","dependencies"],
+ "description": "A lightweight plugin / dependency system for javascript libraries.",
+ "version": "0.0.3",
+ "license": "Apache License, Version 2.0",
+ "readmeFilename": "README.md",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/brianreavis/microplugin.js.git"
+ },
+ "main": [
+ "src/microplugin.js"
+ ],
+ "ignore": [
+ "Makefile",
+ "test",
+ ".travis.yml",
+ ".npmignore.yml"
+ ],
+ "dependencies": {}
+}
diff --git a/modoboa/bower_components/microplugin/package.json b/modoboa/bower_components/microplugin/package.json
new file mode 100644
index 000000000..317d01fb2
--- /dev/null
+++ b/modoboa/bower_components/microplugin/package.json
@@ -0,0 +1,15 @@
+{
+ "name": "microplugin",
+ "keywords": ["extensibility","plugins","architecture","require","dependencies"],
+ "description": "A lightweight plugin / dependency system for javascript libraries.",
+ "version": "0.0.3",
+ "author": "Brian Reavis ",
+ "main": "src/microplugin.js",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/brianreavis/microplugin.js.git"
+ },
+ "dependencies": {},
+ "devDependencies": {},
+ "engines": {"node": "*"}
+}
diff --git a/modoboa/bower_components/microplugin/src/microplugin.js b/modoboa/bower_components/microplugin/src/microplugin.js
new file mode 100644
index 000000000..0b53c50ce
--- /dev/null
+++ b/modoboa/bower_components/microplugin/src/microplugin.js
@@ -0,0 +1,135 @@
+/**
+ * microplugin.js
+ * Copyright (c) 2013 Brian Reavis & contributors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
+ * file except in compliance with the License. You may obtain a copy of the License at:
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
+ * ANY KIND, either express or implied. See the License for the specific language
+ * governing permissions and limitations under the License.
+ *
+ * @author Brian Reavis
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ define(factory);
+ } else if (typeof exports === 'object') {
+ module.exports = factory();
+ } else {
+ root.MicroPlugin = factory();
+ }
+}(this, function() {
+ var MicroPlugin = {};
+
+ MicroPlugin.mixin = function(Interface) {
+ Interface.plugins = {};
+
+ /**
+ * Initializes the listed plugins (with options).
+ * Acceptable formats:
+ *
+ * List (without options):
+ * ['a', 'b', 'c']
+ *
+ * List (with options):
+ * [{'name': 'a', options: {}}, {'name': 'b', options: {}}]
+ *
+ * Hash (with options):
+ * {'a': { ... }, 'b': { ... }, 'c': { ... }}
+ *
+ * @param {mixed} plugins
+ */
+ Interface.prototype.initializePlugins = function(plugins) {
+ var i, n, key;
+ var self = this;
+ var queue = [];
+
+ self.plugins = {
+ names : [],
+ settings : {},
+ requested : {},
+ loaded : {}
+ };
+
+ if (utils.isArray(plugins)) {
+ for (i = 0, n = plugins.length; i < n; i++) {
+ if (typeof plugins[i] === 'string') {
+ queue.push(plugins[i]);
+ } else {
+ self.plugins.settings[plugins[i].name] = plugins[i].options;
+ queue.push(plugins[i].name);
+ }
+ }
+ } else if (plugins) {
+ for (key in plugins) {
+ if (plugins.hasOwnProperty(key)) {
+ self.plugins.settings[key] = plugins[key];
+ queue.push(key);
+ }
+ }
+ }
+
+ while (queue.length) {
+ self.require(queue.shift());
+ }
+ };
+
+ Interface.prototype.loadPlugin = function(name) {
+ var self = this;
+ var plugins = self.plugins;
+ var plugin = Interface.plugins[name];
+
+ if (!Interface.plugins.hasOwnProperty(name)) {
+ throw new Error('Unable to find "' + name + '" plugin');
+ }
+
+ plugins.requested[name] = true;
+ plugins.loaded[name] = plugin.fn.apply(self, [self.plugins.settings[name] || {}]);
+ plugins.names.push(name);
+ };
+
+ /**
+ * Initializes a plugin.
+ *
+ * @param {string} name
+ */
+ Interface.prototype.require = function(name) {
+ var self = this;
+ var plugins = self.plugins;
+
+ if (!self.plugins.loaded.hasOwnProperty(name)) {
+ if (plugins.requested[name]) {
+ throw new Error('Plugin has circular dependency ("' + name + '")');
+ }
+ self.loadPlugin(name);
+ }
+
+ return plugins.loaded[name];
+ };
+
+ /**
+ * Registers a plugin.
+ *
+ * @param {string} name
+ * @param {function} fn
+ */
+ Interface.define = function(name, fn) {
+ Interface.plugins[name] = {
+ 'name' : name,
+ 'fn' : fn
+ };
+ };
+ };
+
+ var utils = {
+ isArray: Array.isArray || function(vArg) {
+ return Object.prototype.toString.call(vArg) === '[object Array]';
+ }
+ };
+
+ return MicroPlugin;
+}));
\ No newline at end of file
diff --git a/modoboa/bower_components/selectize/.bower.json b/modoboa/bower_components/selectize/.bower.json
new file mode 100644
index 000000000..8e523cbe5
--- /dev/null
+++ b/modoboa/bower_components/selectize/.bower.json
@@ -0,0 +1,60 @@
+{
+ "name": "selectize",
+ "keywords": [
+ "select",
+ "ui",
+ "form",
+ "input",
+ "control",
+ "autocomplete",
+ "tagging",
+ "tag"
+ ],
+ "description": "Selectize is a jQuery-based custom