diff --git a/doc/getting_started/upgrade.rst b/doc/getting_started/upgrade.rst index 25b5236ec..3ce3b85de 100644 --- a/doc/getting_started/upgrade.rst +++ b/doc/getting_started/upgrade.rst @@ -54,13 +54,13 @@ you did choose. See :ref:`webservers` for more details. 1.2.0: radicale extension, bootstrap3 and more ============================================== -A new notification service let administrator know about new Modoboa +A new notification service let administrators know about new Modoboa versions. To activate it, you need to: #. Add `'modoboa.core.context_processors.top_notifications'`` to the ``TEMPLATE_CONTEXT_PROCESSORS`` variable -#. Define the ``MODOBOA_API_URL``:: +#. Define the ``MODOBOA_API_URL`` variable:: MODOBOA_API_URL = 'http://api.modoboa.org/1/' diff --git a/modoboa/bower_components/bootstrap-select/.bower.json b/modoboa/bower_components/bootstrap-select/.bower.json index 57659a23c..323fc4f0a 100644 --- a/modoboa/bower_components/bootstrap-select/.bower.json +++ b/modoboa/bower_components/bootstrap-select/.bower.json @@ -5,7 +5,7 @@ "dist/css/bootstrap-select.css", "dist/js/bootstrap-select.js" ], - "version": "1.6.0", + "version": "1.6.3", "homepage": "https://github.com/silviomoreto/bootstrap-select", "authors": [ "silviomoreto" @@ -27,14 +27,14 @@ "test", "tests" ], - "_release": "1.6.0", + "_release": "1.6.3", "_resolution": { "type": "version", - "tag": "v1.6.0", - "commit": "32032e001d1ac735ed0a8c00c00c50ddaacefbdd" + "tag": "v1.6.3", + "commit": "83d5a1bc0158270fe17f3d745113e89a3a58f9a7" }, "_source": "git://github.com/silviomoreto/bootstrap-select.git", - "_target": "1.6.0", + "_target": "1.6", "_originalSource": "bootstrap-select", "_direct": true } \ No newline at end of file diff --git a/modoboa/bower_components/bootstrap-select/Gruntfile.js b/modoboa/bower_components/bootstrap-select/Gruntfile.js index 040c25640..c54c5b43e 100644 --- a/modoboa/bower_components/bootstrap-select/Gruntfile.js +++ b/modoboa/bower_components/bootstrap-select/Gruntfile.js @@ -12,11 +12,11 @@ module.exports = function (grunt) { // Metadata. pkg: grunt.file.readJSON('package.json'), banner: '/*!\n' + - ' * Bootstrap-select v<%= pkg.version %> (<%= pkg.homepage %>)\n' + - ' *\n' + - ' * Copyright 2013-<%= grunt.template.today("yyyy") %> bootstrap-select\n' + - ' * Licensed under <%= pkg.license.type %> (<%= pkg.license.url %>)\n' + - ' */\n', + ' * Bootstrap-select v<%= pkg.version %> (<%= pkg.homepage %>)\n' + + ' *\n' + + ' * Copyright 2013-<%= grunt.template.today(\'yyyy\') %> bootstrap-select\n' + + ' * Licensed under <%= pkg.license.type %> (<%= pkg.license.url %>)\n' + + ' */\n', // Task configuration. @@ -31,7 +31,7 @@ module.exports = function (grunt) { }, gruntfile: { options: { - "node": true + 'node': true }, src: 'Gruntfile.js' }, @@ -130,24 +130,24 @@ module.exports = function (grunt) { csslint: { options: { - "adjoining-classes": false, - "box-sizing": false, - "box-model": false, - "compatible-vendor-prefixes": false, - "floats": false, - "font-sizes": false, - "gradients": false, - "important": false, - "known-properties": false, - "outline-none": false, - "qualified-headings": false, - "regex-selectors": false, - "shorthand": false, - "text-indent": false, - "unique-headings": false, - "universal-selector": false, - "unqualified-attributes": false, - "overqualified-elements": false + 'adjoining-classes': false, + 'box-sizing': false, + 'box-model': false, + 'compatible-vendor-prefixes': false, + 'floats': false, + 'font-sizes': false, + 'gradients': false, + 'important': false, + 'known-properties': false, + 'outline-none': false, + 'qualified-headings': false, + 'regex-selectors': false, + 'shorthand': false, + 'text-indent': false, + 'unique-headings': false, + 'universal-selector': false, + 'unqualified-attributes': false, + 'overqualified-elements': false }, css: { src: '<%= less.css.dest %>' @@ -157,12 +157,12 @@ module.exports = function (grunt) { sed: { versionNumber: { path: [ - "less", - "js", - "bootstrap-select.jquery.json", - "bower.json", - "composer.json", - "package.json" + 'less', + 'js', + 'bootstrap-select.jquery.json', + 'bower.json', + 'composer.json', + 'package.json' ], pattern: (function () { var old = grunt.option('old'); @@ -173,6 +173,43 @@ module.exports = function (grunt) { } }, + autoprefixer: { + options: { + browsers: [ + 'Android 2.3', + 'Android >= 4', + 'Chrome >= 20', + 'Firefox >= 24', // Firefox 24 is the latest ESR + 'Explorer >= 8', + 'iOS >= 6', + 'Opera >= 12', + 'Safari >= 6' + ] + }, + css: { + options: { + map: true + }, + src: '<%= less.css.dest %>' + } + }, + + compress: { + main: { + options: { + archive: 'bootstrap-select-<%= pkg.version %>.zip', + mode: 'zip' + }, + files: [ + {expand: true, cwd: 'dist/', src: ['**'], dest: 'bootstrap-select-<%= pkg.version %>/'}, + { + src: ['bootstrap-select.jquery.json', 'bower.json', 'composer.json', 'package.json'], + dest: 'bootstrap-select-<%= pkg.version %>/' + } + ] + } + }, + watch: { gruntfile: { files: '<%= jshint.gruntfile.src %>', @@ -198,15 +235,15 @@ module.exports = function (grunt) { grunt.registerTask('change-version-number', 'sed'); // CSS distribution - grunt.registerTask('dist-css', ['less', 'usebanner', 'cssmin']); + grunt.registerTask('dist-css', ['clean:css', 'less', 'autoprefixer', 'usebanner', 'cssmin']); // JS distribution - grunt.registerTask('dist-js', ['concat', 'uglify']); + grunt.registerTask('dist-js', ['clean:js', 'concat', 'uglify']); // Full distribution - grunt.registerTask('dist', ['dist-css', 'dist-js']); + grunt.registerTask('dist', ['dist-css', 'dist-js', 'compress']); // Default task. - grunt.registerTask('default', ['clean', 'dist']); + grunt.registerTask('default', ['clean', 'dist-css', 'dist-js']); }; diff --git a/modoboa/bower_components/bootstrap-select/README.md b/modoboa/bower_components/bootstrap-select/README.md index 393d0fca0..17cbec0c9 100644 --- a/modoboa/bower_components/bootstrap-select/README.md +++ b/modoboa/bower_components/bootstrap-select/README.md @@ -1,17 +1,24 @@ bootstrap-select ================ -A custom select / multiselect for Bootstrap using button dropdown, designed to behave like regular Bootstrap selects; +[](https://github.com/silviomoreto/bootstrap-select/releases/latest) +[](https://david-dm.org/silviomoreto/bootstrap-select) +[](LICENSE) + +[](https://david-dm.org/silviomoreto/bootstrap-select#info=devDependencies) + +A custom select / multiselect for Bootstrap using button dropdown, designed to behave like regular Bootstrap selects. ## Demo and Documentation -See a Bootstrap 2.3.2 example [here](http://silviomoreto.github.com/bootstrap-select/). -See a Bootstrap 3.0.3 example [here](http://silviomoreto.github.com/bootstrap-select/3) (work-in-progress). +See a Bootstrap 3.2.0 example [here](http://silviomoreto.github.io/bootstrap-select/3). + +See a Bootstrap 2.3.2 example [here](http://silviomoreto.github.io/bootstrap-select) (deprecated). ## Authors -[Silvio Moreto](http://github.com/silviomoreto), -[Ana Carolina](http://github.com/anacarolinats), +[Silvio Moreto](https://github.com/silviomoreto), +[Ana Carolina](https://github.com/anacarolinats), [caseyjhol](https://github.com/caseyjhol), [Matt Bryson](https://github.com/mattbryson), and [t0xicCode](https://github.com/t0xicCode). @@ -26,6 +33,7 @@ Create your `` with the `.selectpicker` class. Barbecue ``` + Enable Bootstrap-Select via JavaScript: ```js $('.selectpicker').selectpicker(); @@ -34,29 +42,29 @@ Or just ```js $('select').selectpicker(); ``` -Checkout the [documentation](http://silviomoreto.github.com/bootstrap-select/) for further information. + +***Starting with the current dev version, we support bootstrap's data-api, which means that you don't even have to manually instanciate bootstrap-select.*** + +Checkout the [documentation](http://silviomoreto.github.io/bootstrap-select) for further information. ## CDN -* https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.5.4/bootstrap-select.min.js -* https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.5.4/bootstrap-select.min.css +**N.B.**: The CDN is updated after the release is made public, which means that there is a delay between the publishing of a release and its availability on the CDN. Check [the GitHub page](https://github.com/silviomoreto/bootstrap-select/releases) for the latest release. + +* [//cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.6.2/css/bootstrap-select.min.css](//cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.6.2/css/bootstrap-select.min.css) +* [//cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.6.2/js/bootstrap-select.min.js](//cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.6.2/js/bootstrap-select.min.js) +* //cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.6.2/js/i18n/defaults-*.min.js (The translation files) ## Bugs and feature requests Anyone and everyone is welcome to contribute. Please take a moment to review the [guidelines for contributing](CONTRIBUTING.md). Make sure you're using the latest version of bootstrap-select before submitting an issue. -* [Bug reports](CONTRIBUTING.md#bugs) -* [Feature requests](CONTRIBUTING.md#features) +* [Bug reports](CONTRIBUTING.md#bug-reports) +* [Feature requests](CONTRIBUTING.md#feature-requests) ## Copyright and license -Copyright (C) 2013 bootstrap-select +Copyright (C) 2013-2014 bootstrap-select -Licensed under the MIT license. - -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. +Licensed under [the MIT license](LICENSE). diff --git a/modoboa/bower_components/bootstrap-select/bootstrap-select.jquery.json b/modoboa/bower_components/bootstrap-select/bootstrap-select.jquery.json index cd14b591b..1612451dc 100644 --- a/modoboa/bower_components/bootstrap-select/bootstrap-select.jquery.json +++ b/modoboa/bower_components/bootstrap-select/bootstrap-select.jquery.json @@ -8,7 +8,7 @@ "select", "replacement" ], - "version": "1.6.0", + "version": "1.6.3", "author": { "name": "Silvio Moreto", "url": "https://github.com/silviomoreto/" diff --git a/modoboa/bower_components/bootstrap-select/bower.json b/modoboa/bower_components/bootstrap-select/bower.json index bb34e848c..0643b3215 100644 --- a/modoboa/bower_components/bootstrap-select/bower.json +++ b/modoboa/bower_components/bootstrap-select/bower.json @@ -5,7 +5,7 @@ "dist/css/bootstrap-select.css", "dist/js/bootstrap-select.js" ], - "version": "1.6.0", + "version": "1.6.3", "homepage": "https://github.com/silviomoreto/bootstrap-select", "authors": [ "silviomoreto" diff --git a/modoboa/bower_components/bootstrap-select/composer.json b/modoboa/bower_components/bootstrap-select/composer.json index 8123893a5..1c32e37b2 100644 --- a/modoboa/bower_components/bootstrap-select/composer.json +++ b/modoboa/bower_components/bootstrap-select/composer.json @@ -3,7 +3,7 @@ "description": "A custom for Bootstrap using button dropdown as replacement", "keywords": ["form", "bootstrap", "select", "replacement"], "homepage": "https://github.com/silviomoreto/bootstrap-select", - "version": "1.6.0", + "version": "1.6.3", "authors": [ { "name": "Silvio Moreto", @@ -12,6 +12,6 @@ ], "license": "MIT", "suggest": { - "components/jquery": "1.8.*" + "components/jquery": ">=1.8" } } diff --git a/modoboa/bower_components/bootstrap-select/dist/css/bootstrap-select.css b/modoboa/bower_components/bootstrap-select/dist/css/bootstrap-select.css index 4b025fb2a..35c94546e 100644 --- a/modoboa/bower_components/bootstrap-select/dist/css/bootstrap-select.css +++ b/modoboa/bower_components/bootstrap-select/dist/css/bootstrap-select.css @@ -1,5 +1,5 @@ /*! - * Bootstrap-select v1.6.0 (http://silviomoreto.github.io/bootstrap-select/) + * Bootstrap-select v1.6.3 (http://silviomoreto.github.io/bootstrap-select/) * * Copyright 2013-2014 bootstrap-select * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) @@ -17,24 +17,37 @@ .error .bootstrap-select .btn { border: 1px solid #b94a48; } +.control-group.error .bootstrap-select .dropdown-toggle { + border-color: #b94a48; +} .bootstrap-select.fit-width { width: auto !important; } -.bootstrap-select.btn-group:not(.input-group-btn), -.bootstrap-select.btn-group[class*="span"] { - float: none; - display: inline-block; - margin-bottom: 10px; - margin-left: 0; +.bootstrap-select:not([class*="col-"]):not([class*="form-control"]):not(.input-group-btn) { + width: 220px; +} +.bootstrap-select .btn: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.btn-group.pull-right, -.bootstrap-select.btn-group[class*="span"].pull-right, -.row-fluid .bootstrap-select.btn-group[class*="span"].pull-right { +.bootstrap-select.form-control:not([class*="col-"]) { + width: 100%; +} +.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-fluid .bootstrap-select.btn-group[class*="col-"].dropdown-menu-right { float: right; } .form-search .bootstrap-select.btn-group, @@ -43,25 +56,24 @@ .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%; +} .input-append .bootstrap-select.btn-group { margin-left: -1px; } .input-prepend .bootstrap-select.btn-group { margin-right: -1px; } -.bootstrap-select:not([class*="span"]):not([class*="col-"]):not([class*="form-control"]):not(.input-group-btn) { - width: 220px; +.bootstrap-select.btn-group > .disabled { + cursor: not-allowed; } -.bootstrap-select.form-control:not([class*="span"]) { - width: 100%; -} -.bootstrap-select.show-menu-arrow.open > .btn { - z-index: 2051; -} -.bootstrap-select .btn:focus { - outline: thin dotted #333333 !important; - outline: 5px auto -webkit-focus-ring-color !important; - outline-offset: -2px; +.bootstrap-select.btn-group > .disabled:focus { + outline: none !important; } .bootstrap-select.btn-group .btn .filter-option { display: inline-block; @@ -76,82 +88,94 @@ margin-top: -2px; vertical-align: middle; } -.bootstrap-select.btn-group > .disabled, -.bootstrap-select.btn-group .dropdown-menu li.disabled > a { - cursor: not-allowed; -} -.bootstrap-select.btn-group > .disabled:focus { - outline: none !important; -} -.bootstrap-select.btn-group[class*="span"] .btn { +.bootstrap-select.btn-group[class*="col-"] .btn { width: 100%; } .bootstrap-select.btn-group .dropdown-menu { min-width: 100%; - z-index: 2000; + z-index: 1035; -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; } .bootstrap-select.btn-group .dropdown-menu.inner { position: static; border: 0; padding: 0; margin: 0; - -webkit-border-radius: 0; - -moz-border-radius: 0; border-radius: 0; -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} -.bootstrap-select.btn-group .dropdown-menu dt { - display: block; - padding: 3px 20px; - cursor: default; -} -.bootstrap-select.btn-group .div-contain { - overflow: hidden; + box-shadow: none; } .bootstrap-select.btn-group .dropdown-menu li { position: relative; } -.bootstrap-select.btn-group .dropdown-menu li > a.opt { - position: relative; - padding-left: 35px; +.bootstrap-select.btn-group .dropdown-menu li:not(.disabled) a:hover small, +.bootstrap-select.btn-group .dropdown-menu li:not(.disabled) a:focus small, +.bootstrap-select.btn-group .dropdown-menu li.active:not(.disabled) a small { + color: #64b1d8; + color: rgba(100, 177, 216, 0.4); } -.bootstrap-select.btn-group .dropdown-menu li > a { +.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 > dt small { - font-weight: normal; +.bootstrap-select.btn-group .dropdown-menu li a.opt { + position: relative; + padding-left: 2.25em; } -.bootstrap-select.btn-group.show-tick .dropdown-menu li.selected a i.check-mark { - position: absolute; - display: inline-block; - right: 15px; - margin-top: 2.5px; -} -.bootstrap-select.btn-group .dropdown-menu li a i.check-mark { +.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.show-tick .dropdown-menu li a span.text { - margin-right: 34px; -} .bootstrap-select.btn-group .dropdown-menu li small { padding-left: 0.5em; } -.bootstrap-select.btn-group .dropdown-menu li:not(.disabled) > a:hover small, -.bootstrap-select.btn-group .dropdown-menu li:not(.disabled) > a:focus small, -.bootstrap-select.btn-group .dropdown-menu li.active:not(.disabled) > a small { - color: #64b1d8; - color: rgba(100, 177, 216, 0.4); +.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 .dropdown-menu li > dt small { - font-weight: normal; +.bootstrap-select.btn-group .no-results { + padding: 3px; + background: #f5f5f5; + margin: 0 5px; +} +.bootstrap-select.btn-group.fit-width .btn .filter-option { + position: static; +} +.bootstrap-select.btn-group.fit-width .btn .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 > .btn { + z-index: 1035 + 1; } .bootstrap-select.show-menu-arrow .dropdown-toggle:before { content: ''; @@ -188,7 +212,7 @@ .bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:after { bottom: auto; top: -3px; - border-top: 6px solid #FFFFFF; + border-top: 6px solid white; border-bottom: 0; } .bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:before { @@ -203,57 +227,24 @@ .bootstrap-select.show-menu-arrow.open > .dropdown-toggle:after { display: block; } -.bootstrap-select.btn-group .no-results { - padding: 3px; - background: #f5f5f5; - margin: 0 5px; -} -.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; - 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.fit-width .btn .filter-option { - position: static; -} -.bootstrap-select.btn-group.fit-width .btn .caret { - position: static; - top: auto; - margin-top: -1px; -} -.control-group.error .bootstrap-select .dropdown-toggle { - border-color: #b94a48; -} -.bootstrap-select-searchbox, -.bootstrap-select .bs-actionsbox { +.bs-searchbox, +.bs-actionsbox { padding: 4px 8px; } -.bootstrap-select .bs-actionsbox { +.bs-actionsbox { float: left; width: 100%; -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; } -.bootstrap-select .bs-actionsbox .btn-group button { +.bs-actionsbox .btn-group button { width: 50%; } -.bootstrap-select-searchbox + .bs-actionsbox { +.bs-searchbox + .bs-actionsbox { padding: 0 8px 4px; } -.bootstrap-select-searchbox input, -.bootstrap-select-searchbox .form-control { +.bs-searchbox input.form-control { margin-bottom: 0; width: 100%; } 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 index fa101d213..5abff4021 100644 --- a/modoboa/bower_components/bootstrap-select/dist/css/bootstrap-select.css.map +++ b/modoboa/bower_components/bootstrap-select/dist/css/bootstrap-select.css.map @@ -1 +1 @@ -{"version":3,"sources":["less/bootstrap-select.less"],"names":[],"mappings":"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","sourcesContent":[".bootstrap-select {\n /*width: 220px\\9; IE8 and below*/\n //noinspection CssShorthandPropertyValue\n width: 220px \\0; /*IE9 and below*/\n\n & > .btn {\n width: 100%;\n padding-right: 25px;\n }\n\n .error & .btn {\n border: 1px solid #b94a48;\n }\n\n &.fit-width {\n width: auto !important;\n }\n}\n\n.bootstrap-select.btn-group:not(.input-group-btn),\n.bootstrap-select.btn-group[class*=\"span\"] {\n float: none;\n display: inline-block;\n margin-bottom: 10px;\n margin-left: 0;\n}\n\n.bootstrap-select.form-control {\n margin-bottom: 0;\n padding: 0;\n border: none;\n}\n\n.bootstrap-select.btn-group.pull-right,\n.bootstrap-select.btn-group[class*=\"span\"].pull-right,\n.row-fluid .bootstrap-select.btn-group[class*=\"span\"].pull-right {\n float: right;\n}\n\n.bootstrap-select.btn-group {\n .form-search &,\n .form-inline &,\n .form-horizontal &,\n .form-group & {\n margin-bottom: 0;\n }\n\n .input-append & {\n margin-left: -1px;\n }\n\n .input-prepend & {\n margin-right: -1px;\n }\n}\n\n.bootstrap-select:not([class*=\"span\"]):not([class*=\"col-\"]):not([class*=\"form-control\"]):not(.input-group-btn) {\n width: 220px;\n}\n\n.bootstrap-select.form-control:not([class*=\"span\"]) {\n width: 100%;\n}\n\n.bootstrap-select.show-menu-arrow.open > .btn {\n z-index: 2051;\n}\n\n.bootstrap-select .btn:focus {\n outline: thin dotted #333333 !important;\n outline: 5px auto -webkit-focus-ring-color !important;\n outline-offset: -2px;\n}\n\n.bootstrap-select.btn-group .btn .filter-option {\n display: inline-block;\n overflow: hidden;\n width: 100%;\n text-align: left;\n}\n\n.bootstrap-select.btn-group .btn .caret {\n position: absolute;\n top: 50%;\n right: 12px;\n margin-top: -2px;\n vertical-align: middle;\n}\n\n.bootstrap-select.btn-group > .disabled,\n.bootstrap-select.btn-group .dropdown-menu li.disabled > a {\n cursor: not-allowed;\n}\n\n.bootstrap-select.btn-group > .disabled:focus {\n outline: none !important;\n}\n\n.bootstrap-select.btn-group[class*=\"span\"] .btn {\n width: 100%;\n}\n\n.bootstrap-select.btn-group .dropdown-menu {\n min-width: 100%;\n z-index: 2000;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n\n.bootstrap-select.btn-group .dropdown-menu.inner {\n position: static;\n border: 0;\n padding: 0;\n margin: 0;\n -webkit-border-radius: 0;\n -moz-border-radius: 0;\n border-radius: 0;\n -webkit-box-shadow: none;\n -moz-box-shadow: none;\n box-shadow: none;\n}\n\n.bootstrap-select.btn-group .dropdown-menu dt {\n display: block;\n padding: 3px 20px;\n cursor: default;\n}\n\n.bootstrap-select.btn-group .div-contain {\n overflow: hidden;\n}\n\n.bootstrap-select.btn-group .dropdown-menu li {\n position: relative;\n}\n\n.bootstrap-select.btn-group .dropdown-menu li > a.opt {\n position: relative;\n padding-left: 35px;\n}\n\n.bootstrap-select.btn-group .dropdown-menu li > a {\n cursor: pointer;\n}\n\n.bootstrap-select.btn-group .dropdown-menu li > dt small {\n font-weight: normal;\n}\n\n.bootstrap-select.btn-group.show-tick .dropdown-menu li.selected a i.check-mark {\n position: absolute;\n display: inline-block;\n right: 15px;\n margin-top: 2.5px;\n}\n\n.bootstrap-select.btn-group .dropdown-menu li a i.check-mark {\n display: none;\n}\n\n.bootstrap-select.btn-group .dropdown-menu li a span.text {\n display: inline-block;\n}\n\n.bootstrap-select.btn-group.show-tick .dropdown-menu li a span.text {\n margin-right: 34px;\n}\n\n.bootstrap-select.btn-group .dropdown-menu li small {\n padding-left: 0.5em;\n}\n\n.bootstrap-select.btn-group .dropdown-menu {\n & li:not(.disabled) > a:hover small,\n & li:not(.disabled) > a:focus small,\n & li.active:not(.disabled) > a small {\n color: rgb(100, 177, 216);\n color: rgba(100, 177, 216, 0.4);\n }\n\n & li > dt small {\n font-weight: normal;\n }\n}\n\n.bootstrap-select.show-menu-arrow {\n .dropdown-toggle {\n &:before {\n content: '';\n border-left: 7px solid transparent;\n border-right: 7px solid transparent;\n border-bottom-width: 7px;\n border-bottom-style: solid;\n border-bottom-color: rgb(204, 204, 204);\n border-bottom-color: rgba(204, 204, 204, 0.2);\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 {\n .dropdown-toggle {\n &:before {\n bottom: auto;\n top: -3px;\n border-bottom: 0;\n border-top-width: 7px;\n border-top-style: solid;\n border-top-color: rgb(204, 204, 204);\n border-top-color: rgba(204, 204, 204, 0.2);\n }\n\n &:after {\n bottom: auto;\n top: -3px;\n border-top: 6px solid #FFFFFF;\n border-bottom: 0;\n }\n }\n }\n\n &.pull-right {\n .dropdown-toggle {\n &:before {\n right: 12px;\n left: auto;\n }\n\n &:after {\n right: 13px;\n left: auto;\n }\n }\n }\n\n &.open > .dropdown-toggle {\n &:before,\n &:after {\n display: block;\n }\n }\n}\n\n.bootstrap-select.btn-group .no-results {\n padding: 3px;\n background: #f5f5f5;\n margin: 0 5px;\n}\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 -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n\n.bootstrap-select.btn-group.fit-width .btn .filter-option {\n position: static;\n}\n\n.bootstrap-select.btn-group.fit-width .btn .caret {\n position: static;\n top: auto;\n margin-top: -1px;\n}\n\n.control-group.error .bootstrap-select .dropdown-toggle {\n border-color: #b94a48;\n}\n\n.bootstrap-select-searchbox,\n.bootstrap-select .bs-actionsbox {\n padding: 4px 8px;\n}\n\n.bootstrap-select .bs-actionsbox {\n float: left;\n width: 100%;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n\n & .btn-group button {\n width: 50%;\n }\n}\n\n.bootstrap-select-searchbox {\n & + .bs-actionsbox {\n padding: 0 8px 4px;\n }\n\n & input, & .form-control {\n margin-bottom: 0;\n width: 100%;\n }\n}\n\n.mobile-device {\n position: absolute;\n top: 0;\n left: 0;\n display: block !important;\n width: 100%;\n height: 100% !important;\n opacity: 0;\n}\n"]} \ No newline at end of file +{"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\\9; IE8 and below*/\n //noinspection CssShorthandPropertyValue\n width: 220px \\0; /*IE9 and below*/\n\n // The selectpicker button\n > .btn {\n width: 100%;\n padding-right: 25px;\n }\n\n // Error display\n .error & .btn {\n border: 1px solid @color-red-error;\n }\n\n // Error display\n .control-group.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 .btn: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\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-fluid &[class*=\"col-\"] {\n &.dropdown-menu-right {\n float: right;\n }\n }\n\n .form-search &,\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 .input-append & {\n margin-left: -1px;\n }\n\n .input-prepend & {\n margin-right: -1px;\n }\n\n > .disabled {\n .cursor-disabled();\n\n &:focus {\n outline: none !important;\n }\n }\n\n // The selectpicker button\n .btn {\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-\"] .btn {\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 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 &:not(.disabled) a:hover small,\n &:not(.disabled) a:focus small,\n &.active:not(.disabled) a small {\n color: @color-blue-hover;\n color: fade(@color-blue-hover, 40%);\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 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 }\n\n &.fit-width .btn {\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 > .btn {\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-width: 7px;\n border-bottom-style: solid;\n border-bottom-color: @color-grey-arrow;\n border-bottom-color: fade(@color-grey-arrow, 20%);\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-bottom: 0;\n border-top-width: 7px;\n border-top-style: solid;\n border-top-color: @color-grey-arrow;\n border-top-color: fade(@color-grey-arrow, 20%);\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 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-searchbox {\n & + .bs-actionsbox {\n padding: 0 8px 4px;\n }\n\n & input.form-control {\n margin-bottom: 0;\n width: 100%;\n }\n}\n\n.mobile-device {\n position: absolute;\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\\9; IE8 and below*/\n width: 220px \\0;\n /*IE9 and below*/\n}\n.bootstrap-select > .btn {\n width: 100%;\n padding-right: 25px;\n}\n.error .bootstrap-select .btn {\n border: 1px solid #b94a48;\n}\n.control-group.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 .btn: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.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-fluid .bootstrap-select.btn-group[class*=\"col-\"].dropdown-menu-right {\n float: right;\n}\n.form-search .bootstrap-select.btn-group,\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.input-append .bootstrap-select.btn-group {\n margin-left: -1px;\n}\n.input-prepend .bootstrap-select.btn-group {\n margin-right: -1px;\n}\n.bootstrap-select.btn-group > .disabled {\n cursor: not-allowed;\n}\n.bootstrap-select.btn-group > .disabled:focus {\n outline: none !important;\n}\n.bootstrap-select.btn-group .btn .filter-option {\n display: inline-block;\n overflow: hidden;\n width: 100%;\n text-align: left;\n}\n.bootstrap-select.btn-group .btn .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-\"] .btn {\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 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:not(.disabled) a:hover small,\n.bootstrap-select.btn-group .dropdown-menu li:not(.disabled) a:focus small,\n.bootstrap-select.btn-group .dropdown-menu li.active:not(.disabled) a small {\n color: #64b1d8;\n color: rgba(100, 177, 216, 0.4);\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}\n.bootstrap-select.btn-group.fit-width .btn .filter-option {\n position: static;\n}\n.bootstrap-select.btn-group.fit-width .btn .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 > .btn {\n z-index: 1035 + 1;\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-width: 7px;\n border-bottom-style: solid;\n border-bottom-color: #cccccc;\n border-bottom-color: 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-bottom: 0;\n border-top-width: 7px;\n border-top-style: solid;\n border-top-color: #cccccc;\n border-top-color: rgba(204, 204, 204, 0.2);\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 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-searchbox + .bs-actionsbox {\n padding: 0 8px 4px;\n}\n.bs-searchbox input.form-control {\n margin-bottom: 0;\n width: 100%;\n}\n.mobile-device {\n position: absolute;\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 index 2e2a0d592..b3021ae28 100644 --- a/modoboa/bower_components/bootstrap-select/dist/css/bootstrap-select.min.css +++ b/modoboa/bower_components/bootstrap-select/dist/css/bootstrap-select.min.css @@ -1,6 +1,6 @@ /*! - * Bootstrap-select v1.6.0 (http://silviomoreto.github.io/bootstrap-select/) + * Bootstrap-select v1.6.3 (http://silviomoreto.github.io/bootstrap-select/) * * Copyright 2013-2014 bootstrap-select * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */.bootstrap-select{width:220px \0}.bootstrap-select>.btn{width:100%;padding-right:25px}.error .bootstrap-select .btn{border:1px solid #b94a48}.bootstrap-select.fit-width{width:auto!important}.bootstrap-select.btn-group:not(.input-group-btn),.bootstrap-select.btn-group[class*=span]{float:none;display:inline-block;margin-bottom:10px;margin-left:0}.bootstrap-select.form-control{margin-bottom:0;padding:0;border:none}.bootstrap-select.btn-group.pull-right,.bootstrap-select.btn-group[class*=span].pull-right,.row-fluid .bootstrap-select.btn-group[class*=span].pull-right{float:right}.form-search .bootstrap-select.btn-group,.form-inline .bootstrap-select.btn-group,.form-horizontal .bootstrap-select.btn-group,.form-group .bootstrap-select.btn-group{margin-bottom:0}.input-append .bootstrap-select.btn-group{margin-left:-1px}.input-prepend .bootstrap-select.btn-group{margin-right:-1px}.bootstrap-select:not([class*=span]):not([class*=col-]):not([class*=form-control]):not(.input-group-btn){width:220px}.bootstrap-select.form-control:not([class*=span]){width:100%}.bootstrap-select.show-menu-arrow.open>.btn{z-index:2051}.bootstrap-select .btn:focus{outline:thin dotted #333!important;outline:5px auto -webkit-focus-ring-color!important;outline-offset:-2px}.bootstrap-select.btn-group .btn .filter-option{display:inline-block;overflow:hidden;width:100%;text-align:left}.bootstrap-select.btn-group .btn .caret{position:absolute;top:50%;right:12px;margin-top:-2px;vertical-align:middle}.bootstrap-select.btn-group>.disabled,.bootstrap-select.btn-group .dropdown-menu li.disabled>a{cursor:not-allowed}.bootstrap-select.btn-group>.disabled:focus{outline:0!important}.bootstrap-select.btn-group[class*=span] .btn{width:100%}.bootstrap-select.btn-group .dropdown-menu{min-width:100%;z-index:2000;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bootstrap-select.btn-group .dropdown-menu.inner{position:static;border:0;padding:0;margin:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.bootstrap-select.btn-group .dropdown-menu dt{display:block;padding:3px 20px;cursor:default}.bootstrap-select.btn-group .div-contain{overflow:hidden}.bootstrap-select.btn-group .dropdown-menu li{position:relative}.bootstrap-select.btn-group .dropdown-menu li>a.opt{position:relative;padding-left:35px}.bootstrap-select.btn-group .dropdown-menu li>a{cursor:pointer}.bootstrap-select.btn-group .dropdown-menu li>dt small{font-weight:400}.bootstrap-select.btn-group.show-tick .dropdown-menu li.selected a i.check-mark{position:absolute;display:inline-block;right:15px;margin-top:2.5px}.bootstrap-select.btn-group .dropdown-menu li a i.check-mark{display:none}.bootstrap-select.btn-group .dropdown-menu li a span.text{display:inline-block}.bootstrap-select.btn-group.show-tick .dropdown-menu li a span.text{margin-right:34px}.bootstrap-select.btn-group .dropdown-menu li small{padding-left:.5em}.bootstrap-select.btn-group .dropdown-menu li:not(.disabled)>a:hover small,.bootstrap-select.btn-group .dropdown-menu li:not(.disabled)>a:focus small,.bootstrap-select.btn-group .dropdown-menu li.active:not(.disabled)>a small{color:#64b1d8;color:rgba(100,177,216,.4)}.bootstrap-select.btn-group .dropdown-menu li>dt small{font-weight:400}.bootstrap-select.show-menu-arrow .dropdown-toggle:before{content:'';border-left:7px solid transparent;border-right:7px solid transparent;border-bottom-width:7px;border-bottom-style:solid;border-bottom-color:#ccc;border-bottom-color: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-bottom:0;border-top-width:7px;border-top-style:solid;border-top-color:#ccc;border-top-color:rgba(204,204,204,.2)}.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:before,.bootstrap-select.show-menu-arrow.open>.dropdown-toggle:after{display:block}.bootstrap-select.btn-group .no-results{padding:3px;background:#f5f5f5;margin:0 5px}.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;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.fit-width .btn .filter-option{position:static}.bootstrap-select.btn-group.fit-width .btn .caret{position:static;top:auto;margin-top:-1px}.control-group.error .bootstrap-select .dropdown-toggle{border-color:#b94a48}.bootstrap-select-searchbox,.bootstrap-select .bs-actionsbox{padding:4px 8px}.bootstrap-select .bs-actionsbox{float:left;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bootstrap-select .bs-actionsbox .btn-group button{width:50%}.bootstrap-select-searchbox+.bs-actionsbox{padding:0 8px 4px}.bootstrap-select-searchbox input,.bootstrap-select-searchbox .form-control{margin-bottom:0;width:100%}.mobile-device{position:absolute;top:0;left:0;display:block!important;width:100%;height:100%!important;opacity:0} \ No newline at end of file + */.bootstrap-select{width:220px \0}.bootstrap-select>.btn{width:100%;padding-right:25px}.error .bootstrap-select .btn{border:1px solid #b94a48}.control-group.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 .btn: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.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-fluid .bootstrap-select.btn-group[class*=col-].dropdown-menu-right{float:right}.form-search .bootstrap-select.btn-group,.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%}.input-append .bootstrap-select.btn-group{margin-left:-1px}.input-prepend .bootstrap-select.btn-group{margin-right:-1px}.bootstrap-select.btn-group>.disabled{cursor:not-allowed}.bootstrap-select.btn-group>.disabled:focus{outline:0!important}.bootstrap-select.btn-group .btn .filter-option{display:inline-block;overflow:hidden;width:100%;text-align:left}.bootstrap-select.btn-group .btn .caret{position:absolute;top:50%;right:12px;margin-top:-2px;vertical-align:middle}.bootstrap-select.btn-group[class*=col-] .btn{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;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:not(.disabled) a:hover small,.bootstrap-select.btn-group .dropdown-menu li:not(.disabled) a:focus small,.bootstrap-select.btn-group .dropdown-menu li.active:not(.disabled) a small{color:#64b1d8;color:rgba(100,177,216,.4)}.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}.bootstrap-select.btn-group.fit-width .btn .filter-option{position:static}.bootstrap-select.btn-group.fit-width .btn .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>.btn{z-index:1035+1}.bootstrap-select.show-menu-arrow .dropdown-toggle:before{content:'';border-left:7px solid transparent;border-right:7px solid transparent;border-bottom-width:7px;border-bottom-style:solid;border-bottom-color:#ccc;border-bottom-color: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-bottom:0;border-top-width:7px;border-top-style:solid;border-top-color:#ccc;border-top-color:rgba(204,204,204,.2)}.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:before,.bootstrap-select.show-menu-arrow.open>.dropdown-toggle:after{display:block}.bs-searchbox,.bs-actionsbox{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-searchbox+.bs-actionsbox{padding:0 8px 4px}.bs-searchbox input.form-control{margin-bottom:0;width:100%}.mobile-device{position:absolute;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 index debb318f2..cfd6599b5 100644 --- a/modoboa/bower_components/bootstrap-select/dist/js/bootstrap-select.js +++ b/modoboa/bower_components/bootstrap-select/dist/js/bootstrap-select.js @@ -1,17 +1,80 @@ /*! - * Bootstrap-select v1.6.0 (http://silviomoreto.github.io/bootstrap-select/) + * Bootstrap-select v1.6.3 (http://silviomoreto.github.io/bootstrap-select/) * * Copyright 2013-2014 bootstrap-select * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) */ (function ($) { - 'use strict'; + // Case insensitive search $.expr[':'].icontains = function (obj, index, meta) { - return $(obj).text().toUpperCase().indexOf(meta[3].toUpperCase()) >= 0; + return icontains($(obj).text(), meta[3]); }; + // Case and accent insensitive search + $.expr[':'].aicontains = function (obj, index, meta) { + return icontains($(obj).data('normalizedText') || $(obj).text(), meta[3]); + }; + + /** + * Actual implementation of the case insensitive search. + * @access private + * @param {String} haystack + * @param {String} needle + * @returns {boolean} + */ + function icontains(haystack, needle) { + return haystack.toUpperCase().indexOf(needle.toUpperCase()) > -1; + } + + /** + * 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(); @@ -25,7 +88,8 @@ this.$lis = null; this.options = options; - //If we have no title yet, check the attribute 'title' (this is missed by jq as its not a data-attribute + // 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'); } @@ -37,26 +101,38 @@ this.setStyle = Selectpicker.prototype.setStyle; this.selectAll = Selectpicker.prototype.selectAll; this.deselectAll = Selectpicker.prototype.deselectAll; - this.destroy = Selectpicker.prototype.destroy; - this.remove = Selectpicker.prototype.destroy; + 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.6.0'; + Selectpicker.VERSION = '1.6.3'; // part of this is duplicated in i18n/defaults-en_US.js. Make sure to update both. Selectpicker.DEFAULTS = { + noneSelectedText: 'Nothing selected', + noneResultsText: 'No results match', + countSelectedText: function (numSelected, numTotal) { + return (numSelected == 1) ? "{0} item selected" : "{0} items selected"; + }, + maxOptionsText: function (numAll, numGroup) { + var arr = []; + + arr[0] = (numAll == 1) ? 'Limit reached ({n} item max)' : 'Limit reached ({n} items max)'; + arr[1] = (numGroup == 1) ? 'Group limit reached ({n} item max)' : 'Group limit reached ({n} items max)'; + + return arr; + }, + selectAllText: 'Select All', + deselectAllText: 'Deselect All', + multipleSeparator: ', ', style: 'btn-default', size: 'auto', title: null, selectedTextFormat: 'values', - noneSelectedText: 'Nothing selected', - noneResultsText: 'No results match', - countSelectedText: '{0} of {1} selected', - maxOptionsText: ['Limit reached ({n} {var} max)', 'Group limit reached ({n} {var} max)', ['items', 'item']], width: false, container: false, hideDisabled: false, @@ -67,11 +143,13 @@ header: false, liveSearch: false, actionsBox: false, - multipleSeparator: ', ', iconBase: 'glyphicon', tickIcon: 'glyphicon-ok', maxOptions: false, - mobile: false + mobile: false, + selectOnTab: false, + dropdownAlignRight: false, + searchAccentInsensitive: false }; Selectpicker.prototype = { @@ -91,7 +169,10 @@ this.$button = this.$newElement.find('> button'); this.$searchbox = this.$newElement.find('input'); - if (id !== undefined) { + 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(); @@ -113,36 +194,39 @@ }, createDropdown: function () { - //If we are multiple, then add the show-tick class by default - var multiple = this.multiple ? ' show-tick' : ''; - var inputGroup = this.$element.parent().hasClass('input-group') ? ' input-group-btn' : ''; - var autofocus = this.autofocus ? ' autofocus' : ''; + // 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' : '', + btnSize = this.$element.parents().hasClass('form-group-lg') ? ' btn-lg' : (this.$element.parents().hasClass('form-group-sm') ? ' btn-sm' : ''); + // Elements var header = this.options.header ? '×' + this.options.header + '' : ''; - var searchbox = this.options.liveSearch ? '' : ''; + var searchbox = this.options.liveSearch ? '' : ''; var actionsbox = this.options.actionsBox ? '' + - '' + - '' + - 'Select All' + - '' + - '' + - 'Deselect All' + - '' + - '' + - '' : ''; + '' + + '' + + this.options.selectAllText + + '' + + '' + + this.options.deselectAllText + + '' + + '' + + '' : ''; var drop = '' + - '' + - ' ' + - '' + - '' + - '' + - header + - searchbox + - actionsbox + - '' + - '' + - '' + - ''; + '' + + ' ' + + '' + + '' + + '' + + header + + searchbox + + actionsbox + + '' + + '' + + '' + + ''; return $(drop); }, @@ -168,94 +252,108 @@ createLi: function () { var that = this, - _liA = [], - _liHtml = '', + _li = [], optID = 0; + // Helper functions + /** + * @param content + * @param [index] + * @param [classes] + * @returns {string} + */ + var generateLI = function (content, index, classes) { + return '' + content + ''; + }; + + /** + * @param text + * @param [classes] + * @param [inline] + * @param [optgroup] + * @returns {string} + */ + var generateA = function (text, classes, inline, optgroup) { + var normText = normalizeToBase(htmlEscape(text)); + return '' + text + + '' + + ''; + }; + this.$element.find('option').each(function () { var $this = $(this); - //Get the class and text for the option - var optionClass = $this.attr('class') || ''; - var inline = $this.attr('style') || ''; - var text = $this.data('content') ? $this.data('content') : $this.html(); - var subtext = $this.data('subtext') !== undefined ? '' + $this.data('subtext') + '' : ''; - var icon = $this.data('icon') !== undefined ? ' ' : ''; - if (icon !== '' && ($this.is(':disabled') || $this.parent().is(':disabled'))) { + // Get the class and text for the option + var optionClass = $this.attr('class') || '', + inline = $this.attr('style'), + text = $this.data('content') ? $this.data('content') : $this.html(), + subtext = typeof $this.data('subtext') !== 'undefined' ? '' + $this.data('subtext') + '' : '', + icon = typeof $this.data('icon') !== 'undefined' ? ' ' : '', + isDisabled = $this.is(':disabled') || $this.parent().is(':disabled'), + index = $this[0].index; + if (icon !== '' && isDisabled) { icon = '' + icon + ''; } if (!$this.data('content')) { - //Prepend any icon and append any subtext to the main text. + // Prepend any icon and append any subtext to the main text. text = icon + '' + text + subtext + ''; } - if (that.options.hideDisabled && ($this.is(':disabled') || $this.parent().is(':disabled'))) { - _liA.push(''); - } else if ($this.parent().is('optgroup') && $this.data('divider') !== true) { - if ($this.index() === 0) { - //Get the opt group label - var label = $this.parent().attr('label'); - var labelSubtext = $this.parent().data('subtext') !== undefined ? '' + $this.parent().data('subtext') + '' : ''; - var labelIcon = $this.parent().data('icon') ? ' ' : ''; - label = labelIcon + '' + label + labelSubtext + ''; + if (that.options.hideDisabled && isDisabled) { + return; + } + if ($this.parent().is('optgroup') && $this.data('divider') !== true) { + if ($this.index() === 0) { // Is it the first option of the optgroup? optID += 1; - if ($this[0].index !== 0) { - _liA.push( - '' + - '' + label + '' + - that.createA(text, 'opt ' + optionClass, inline, optID) - ); - } else { - _liA.push( - '' + label + '' + - that.createA(text, 'opt ' + optionClass, inline, optID)); + // Get the opt group label + var label = $this.parent().attr('label'); + var labelSubtext = typeof $this.parent().data('subtext') !== 'undefined' ? '' + $this.parent().data('subtext') + '' : ''; + var 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? + _li.push(generateLI('', null, 'divider')); } - } else { - _liA.push(that.createA(text, 'opt ' + optionClass, inline, optID)); + + _li.push(generateLI(label, null, 'dropdown-header')); } + + _li.push(generateLI(generateA(text, 'opt ' + optionClass, inline, optID), index)); } else if ($this.data('divider') === true) { - _liA.push(''); - } else if ($(this).data('hidden') === true) { - _liA.push(''); + _li.push(generateLI('', index, 'divider')); + } else if ($this.data('hidden') === true) { + _li.push(generateLI(generateA(text, optionClass, inline), index, 'hide is-hidden')); } else { - _liA.push(that.createA(text, optionClass, inline)); + _li.push(generateLI(generateA(text, optionClass, inline), index)); } }); - $.each(_liA, function (i, item) { - var hide = item === '' ? 'class="hide is-hidden"' : ''; - _liHtml += '' + item + ''; - }); - - //If we are not multiple, and we dont have a selected item, and we dont have a title, select the first element so something is set in the button + //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 $(_liHtml); + return $(_li.join('')); + }, + + findLis: function () { + if (this.$lis == null) this.$lis = this.$menu.find('li'); + return this.$lis; }, /** - * - * @param text - * @param classes - * @param inline - * @param [optgroup] - * @returns {string} - */ - createA: function (text, classes, inline, optgroup) { - return '' + - text + - '' + - ''; - }, - - /** - * @param [updateLi] + * @param [updateLi] defaults to true */ render: function (updateLi) { var that = this; @@ -269,8 +367,8 @@ } this.tabIndex(); - - var selectedItems = this.$element.find('option:selected').map(function () { + var notDisabled = this.options.hideDisabled ? ':not([disabled])' : ''; + var selectedItems = this.$element.find('option:selected' + notDisabled).map(function () { var $this = $(this); var icon = $this.data('icon') && that.options.showIcon ? ' ' : ''; var subtext; @@ -281,7 +379,7 @@ } if ($this.data('content') && that.options.showContent) { return $this.data('content'); - } else if ($this.attr('title') !== undefined) { + } else if (typeof $this.attr('title') !== 'undefined') { return $this.attr('title'); } else { return icon + $this.html() + subtext; @@ -295,9 +393,11 @@ //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('>'); - var notDisabled = this.options.hideDisabled ? ':not([disabled])' : ''; if ((max.length > 1 && selectedItems.length > max[1]) || (max.length == 1 && selectedItems.length >= 2)) { - title = this.options.countSelectedText.replace('{0}', selectedItems.length).replace('{1}', this.$element.find('option:not([data-divider="true"], [data-hidden="true"])' + notDisabled).length); + 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()); } } @@ -309,10 +409,10 @@ //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 = this.options.title !== undefined ? this.options.title : this.options.noneSelectedText; + title = typeof this.options.title !== 'undefined' ? this.options.title : this.options.noneSelectedText; } - this.$button.attr('title', $.trim($("").html(title).text()).replace(/\s\s+/g, ' ')); + this.$button.attr('title', htmlEscape(title)); this.$newElement.find('.filter-option').html(title); }, @@ -342,9 +442,9 @@ var $selectClone = this.$menu.parent().clone().find('> .dropdown-toggle').prop('autofocus', false).end().appendTo('body'), $menuClone = $selectClone.addClass('open').find('> .dropdown-menu'), - liHeight = $menuClone.find('li > a').outerHeight(), + liHeight = $menuClone.find('li').not('.divider').not('.dropdown-header').filter(':visible').children('a').outerHeight(), headerHeight = this.options.header ? $menuClone.find('.popover-title').outerHeight() : 0, - searchHeight = this.options.liveSearch ? $menuClone.find('.bootstrap-select-searchbox').outerHeight() : 0, + searchHeight = this.options.liveSearch ? $menuClone.find('.bs-searchbox').outerHeight() : 0, actionsHeight = this.options.actionsBox ? $menuClone.find('.bs-actionsbox').outerHeight() : 0; $selectClone.remove(); @@ -357,6 +457,7 @@ }, setSize: function () { + this.findLis(); var that = this, menu = this.$menu, menuInner = menu.find('.inner'), @@ -365,19 +466,19 @@ headerHeight = this.$newElement.data('headerHeight'), searchHeight = this.$newElement.data('searchHeight'), actionsHeight = this.$newElement.data('actionsHeight'), - divHeight = menu.find('li .divider').outerHeight(true), + divHeight = this.$lis.filter('.divider').outerHeight(true), menuPadding = parseInt(menu.css('padding-top')) + parseInt(menu.css('padding-bottom')) + parseInt(menu.css('border-top-width')) + parseInt(menu.css('border-bottom-width')), - notDisabled = this.options.hideDisabled ? ':not(.disabled)' : '', + notDisabled = this.options.hideDisabled ? ', .disabled' : '', $window = $(window), menuExtras = menuPadding + parseInt(menu.css('margin-top')) + parseInt(menu.css('margin-bottom')) + 2, menuHeight, selectOffsetTop, selectOffsetBot, posVert = function () { - //JQuery defines a scrollTop function, but in pure JS it's a property + // JQuery defines a scrollTop function, but in pure JS it's a property //noinspection JSValidateTypes selectOffsetTop = that.$newElement.offset().top - $window.scrollTop(); selectOffsetBot = $window.height() - selectOffsetTop - selectHeight; @@ -400,24 +501,33 @@ menuHeight = selectOffsetTop - menuExtras; } - if ((lisVis.length + lisVis.find('dt').length) > 3) { + if ((lisVis.length + lisVis.filter('.dropdown-header').length) > 3) { minHeight = liHeight * 3 + menuExtras - 2; } else { minHeight = 0; } - menu.css({'max-height': menuHeight + 'px', 'overflow': 'hidden', 'min-height': minHeight + headerHeight + searchHeight + actionsHeight + 'px'}); - menuInner.css({'max-height': menuHeight - headerHeight - searchHeight - actionsHeight - menuPadding + 'px', 'overflow-y': 'auto', 'min-height': Math.max(minHeight - menuPadding, 0) + 'px'}); + menu.css({ + 'max-height': menuHeight + 'px', + 'overflow': 'hidden', + 'min-height': minHeight + headerHeight + searchHeight + actionsHeight + 'px' + }); + menuInner.css({ + 'max-height': menuHeight - headerHeight - searchHeight - actionsHeight - 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').on('resize.getSize', getSize); $(window).off('scroll.getSize').on('scroll.getSize', getSize); } else if (this.options.size && this.options.size != 'auto' && menu.find('li' + notDisabled).length > this.options.size) { - var optIndex = menu.find('li' + notDisabled + ' > *').not('.div-contain').slice(0, this.options.size).last().parent().index(); - var divLength = menu.find('li').slice(0, optIndex + 1).find('.div-contain').length; + var optIndex = this.$lis.not('.divider' + notDisabled).find(' > *').slice(0, this.options.size).last().parent().index(); + var divLength = this.$lis.slice(0, optIndex + 1).filter('.divider').length; menuHeight = liHeight * this.options.size + divLength * divHeight + menuPadding; if (that.options.dropupAuto) { + //noinspection JSUnusedAssignment this.$newElement.toggleClass('dropup', (selectOffsetTop > selectOffsetBot) && (menuHeight < menu.height())); } menu.css({'max-height': menuHeight + headerHeight + searchHeight + actionsHeight + 'px', 'overflow': 'hidden'}); @@ -466,7 +576,12 @@ $drop.addClass($element.attr('class').replace(/form-control/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'}); + $drop.css({ + 'top': pos.top + actualHeight, + 'left': pos.left, + 'width': $element[0].offsetWidth, + 'position': 'absolute' + }); }; this.$newElement.on('click', function () { if (that.isDisabled()) { @@ -490,40 +605,17 @@ }); }, - mobile: function () { - this.$element.addClass('mobile-device').appendTo(this.$newElement); - if (this.options.container) this.$menu.hide(); - }, - - refresh: function () { - this.$lis = null; - this.reloadLi(); - this.render(); - this.setWidth(); - this.setStyle(); - this.checkDisabled(); - this.liHeight(); - }, - - update: function () { - this.reloadLi(); - this.setWidth(); - this.setStyle(); - this.checkDisabled(); - this.liHeight(); - }, - setSelected: function (index, selected) { - if (this.$lis == null) this.$lis = this.$menu.find('li'); - $(this.$lis[index]).toggleClass('selected', selected); + this.findLis(); + this.$lis.filter('[data-original-index="' + index + '"]').toggleClass('selected', selected); }, setDisabled: function (index, disabled) { - if (this.$lis == null) this.$lis = this.$menu.find('li'); + this.findLis(); if (disabled) { - $(this.$lis[index]).addClass('disabled').find('a').attr('href', '#').attr('tabindex', -1); + this.$lis.filter('[data-original-index="' + index + '"]').addClass('disabled').find('a').attr('href', '#').attr('tabindex', -1); } else { - $(this.$lis[index]).removeClass('disabled').find('a').removeAttr('href').attr('tabindex', 0); + this.$lis.filter('[data-original-index="' + index + '"]').removeClass('disabled').find('a').removeAttr('href').attr('tabindex', 0); } }, @@ -575,19 +667,20 @@ }); this.$menu.on('click', 'li a', function (e) { - var clickedIndex = $(this).parent().index(), + var $this = $(this), + clickedIndex = $this.parent().data('originalIndex'), prevValue = that.$element.val(), prevIndex = that.$element.prop('selectedIndex'); - //Dont close on multi choice menu + // Don't close on multi choice menu if (that.multiple) { e.stopPropagation(); } e.preventDefault(); - //Dont run if we have been disabled - if (!that.isDisabled() && !$(this).parent().hasClass('disabled')) { + //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'), @@ -595,26 +688,19 @@ maxOptions = that.options.maxOptions, maxOptionsGrp = $optgroup.data('maxOptions') || false; - //Deselect all others if not multi select box - if (!that.multiple) { + 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. - else { + } else { // Toggle the one we have chosen if we are multi select. $option.prop('selected', !state); that.setSelected(clickedIndex, !state); - $(this).blur(); + $this.blur(); if ((maxOptions !== false) || (maxOptionsGrp !== false)) { var maxReached = maxOptions < $options.filter(':selected').length, - maxReachedGrp = maxOptionsGrp < $optgroup.find('option:selected').length, - maxOptionsArr = that.options.maxOptionsText, - maxTxt = maxOptionsArr[0].replace('{n}', maxOptions), - maxTxtGrp = maxOptionsArr[1].replace('{n}', maxOptionsGrp), - $notify = $(''); + maxReachedGrp = maxOptionsGrp < $optgroup.find('option:selected').length; if ((maxOptions && maxReached) || (maxOptionsGrp && maxReachedGrp)) { if (maxOptions && maxOptions == 1) { @@ -625,13 +711,19 @@ } else if (maxOptionsGrp && maxOptionsGrp == 1) { $optgroup.find('option:selected').prop('selected', false); $option.prop('selected', true); - var optgroupID = $(this).data('optgroup'); + var optgroupID = $this.data('optgroup'); - that.$menu.find('.selected').has('a[data-optgroup="'+optgroupID+'"]').removeClass('selected'); + that.$menu.find('.selected').has('a[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]); @@ -676,7 +768,7 @@ } }); - this.$menu.on('click', 'li.disabled a, li dt, li .div-contain, .popover-title, .popover-title :not(.close)', function (e) { + this.$menu.on('click', 'li.disabled a, .popover-title, .popover-title :not(.close)', function (e) { if (e.target == this) { e.preventDefault(); e.stopPropagation(); @@ -688,6 +780,16 @@ } }); + this.$menu.on('click', 'li.divider, li.dropdown-header', function (e) { + e.preventDefault(); + e.stopPropagation(); + if (!that.options.liveSearch) { + that.$button.focus(); + } else { + that.$searchbox.focus(); + } + }); + this.$menu.on('click', '.popover-title .close', function () { that.$button.focus(); }); @@ -724,7 +826,7 @@ var that = this, no_results = $(''); - this.$newElement.on('click.dropdown.data-api', function () { + this.$newElement.on('click.dropdown.data-api touchstart.dropdown.data-api', function () { that.$menu.find('.active').removeClass('active'); if (!!that.$searchbox.val()) { that.$searchbox.val(''); @@ -737,13 +839,22 @@ }, 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()) { - that.$lis.not('.is-hidden').removeClass('hide').find('a').not(':icontains(' + that.$searchbox.val() + ')').parent().addClass('hide'); + + if (that.options.searchAccentInsensitive) { + that.$lis.not('.is-hidden').removeClass('hide').find('a').not(':aicontains(' + normalizeToBase(that.$searchbox.val()) + ')').parent().addClass('hide'); + } else { + that.$lis.not('.is-hidden').removeClass('hide').find('a').not(':icontains(' + that.$searchbox.val() + ')').parent().addClass('hide'); + } if (!that.$menu.find('li').filter(':visible:not(.no-results)').length) { if (!!no_results.parent().length) no_results.remove(); - no_results.html(that.options.noneResultsText + ' "' + that.$searchbox.val() + '"').show(); + no_results.html(that.options.noneResultsText + ' "' + htmlEscape(that.$searchbox.val()) + '"').show(); that.$menu.find('li').last().after(no_results); } else if (!!no_results.parent().length) { no_results.remove(); @@ -758,22 +869,11 @@ that.$menu.find('li').filter(':visible:not(.divider)').eq(0).addClass('active').find('a').focus(); $(this).focus(); }); - - this.$menu.on('mouseenter', 'a', function (e) { - that.$menu.find('.active').removeClass('active'); - $(e.currentTarget).parent().not('.disabled').addClass('active'); - }); - - this.$menu.on('mouseleave', 'a', function () { - that.$menu.find('.active').removeClass('active'); - }); }, val: function (value) { - - if (value !== undefined) { + if (typeof value !== 'undefined') { this.$element.val(value); - this.$element.change(); this.render(); return this.$element; @@ -783,52 +883,84 @@ }, selectAll: function () { - if (this.$lis == null) this.$lis = this.$menu.find('li'); - this.$element.find('option:enabled').prop('selected', true); - $(this.$lis).not('.disabled').addClass('selected'); - this.render(false); + this.findLis(); + this.$lis.not('.divider').not('.disabled').not('.selected').filter(':visible').find('a').click(); }, deselectAll: function () { - if (this.$lis == null) this.$lis = this.$menu.find('li'); - this.$element.find('option:enabled').prop('selected', false); - $(this.$lis).not('.disabled').removeClass('selected'); - this.render(false); + this.findLis(); + this.$lis.not('.divider').not('.disabled').filter('.selected').filter(':visible').find('a').click(); }, keydown: function (e) { - var $this, + var $this = $(this), + $parent = ($this.is('input')) ? $this.parent().parent() : $this.parent(), $items, - $parent, + that = $parent.data('this'), index, next, first, last, prev, nextPrev, - that, prevIndex, isActive, 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' + 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' }; - $this = $(this); - - $parent = $this.parent(); - - if ($this.is('input')) $parent = $this.parent().parent(); - - that = $parent.data('this'); - if (that.options.liveSearch) $parent = $this.parent().parent(); if (that.options.container) $parent = that.$menu; - $items = $('[role=menu] li:not(.divider) a', $parent); + $items = $('[role=menu] li a', $parent); isActive = that.$menu.parent().hasClass('open'); @@ -849,10 +981,14 @@ that.$menu.parent().removeClass('open'); that.$button.focus(); } - $items = $('[role=menu] li:not(.divider):visible', $parent); + $items = $('[role=menu] li:not(.divider):not(.dropdown-header):visible', $parent); if (!$this.val() && !/(38|40)/.test(e.keyCode.toString(10))) { if ($items.filter('.active').length === 0) { - $items = that.$newElement.find('li').filter(':icontains(' + keyCodeMap[e.keyCode] + ')'); + if (that.options.searchAccentInsensitive) { + $items = that.$newElement.find('li').filter(':aicontains(' + normalizeToBase(keyCodeMap[e.keyCode]) + ')'); + } else { + $items = that.$newElement.find('li').filter(':icontains(' + keyCodeMap[e.keyCode] + ')'); + } } } } @@ -860,7 +996,6 @@ if (!$items.length) return; if (/(38|40)/.test(e.keyCode.toString(10))) { - index = $items.index($items.filter(':focus')); first = $items.parent(':not(.disabled):visible').first().index(); last = $items.parent(':not(.disabled):visible').last().index(); @@ -913,7 +1048,6 @@ } } else if (!$this.is('input')) { - var keyIndex = [], count, prevKey; @@ -943,8 +1077,8 @@ $items.eq(keyIndex[count - 1]).focus(); } - // Select focused option if "Enter", "Spacebar" are pressed inside the menu. - if (/(13|32)/.test(e.keyCode.toString(10)) && isActive) { + // 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) { $(':focus').click(); @@ -959,7 +1093,29 @@ that.$menu.parent().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.reloadLi(); + this.render(); + this.setWidth(); + this.setStyle(); + this.checkDisabled(); + this.liHeight(); + }, + + update: function () { + this.reloadLi(); + this.setWidth(); + this.setStyle(); + this.checkDisabled(); + this.liHeight(); }, hide: function () { @@ -970,24 +1126,40 @@ this.$newElement.show(); }, - destroy: function () { + remove: function () { this.$newElement.remove(); this.$element.remove(); } }; - $.fn.selectpicker = function (option, event) { - //get the args of the outer function.. + // 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 + //noinspection JSDuplicatedDeclaration + var _option = option, + option = args[0], + event = args[1]; + [].shift.apply(args); + + // This fixes a bug in the js implementation on android 2.3 #715 + if (typeof option == 'undefined') { + option = _option; + } + var value; var chain = this.each(function () { - if ($(this).is('select')) { - var $this = $(this), - data = $this.data('selectpicker'), + var $this = $(this); + if ($this.is('select')) { + var data = $this.data('selectpicker'), options = typeof option == 'object' && option; if (!data) { - $this.data('selectpicker', (data = new Selectpicker(this, $.extend({}, Selectpicker.DEFAULTS, $.fn.selectpicker.defaults || {}, $this.data(), options), event))); + 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)) { @@ -997,14 +1169,10 @@ } if (typeof option == 'string') { - //Copy the value of option, as once we shift the arguments - //it also shifts the value of option. - var property = option; - if (data[property] instanceof Function) { - [].shift.apply(args); - value = data[property].apply(data, args); + if (data[option] instanceof Function) { + value = data[option].apply(data, args); } else { - value = data.options[property]; + value = data.options[option]; } } } @@ -1016,15 +1184,32 @@ } 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], .bootstrap-select-searchbox input', Selectpicker.prototype.keydown) - .on('focusin.modal', '.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role=menu], .bootstrap-select-searchbox input', function (e) { + .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 index a77865ea8..b70aa0e2b 100644 --- a/modoboa/bower_components/bootstrap-select/dist/js/bootstrap-select.js.map +++ b/modoboa/bower_components/bootstrap-select/dist/js/bootstrap-select.js.map @@ -1 +1 @@ -{"version":3,"file":"bootstrap-select.min.js","sources":["bootstrap-select.js"],"names":["$","expr","icontains","obj","index","meta","text","toUpperCase","indexOf","Selectpicker","element","options","e","stopPropagation","preventDefault","this","$element","$newElement","$button","$menu","$lis","title","attr","val","prototype","render","refresh","setStyle","selectAll","deselectAll","destroy","remove","show","hide","init","VERSION","DEFAULTS","style","size","selectedTextFormat","noneSelectedText","noneResultsText","countSelectedText","maxOptionsText","width","container","hideDisabled","showSubtext","showIcon","showContent","dropupAuto","header","liveSearch","actionsBox","multipleSeparator","iconBase","tickIcon","maxOptions","mobile","constructor","that","id","multiple","prop","autofocus","createView","after","find","$searchbox","undefined","click","focus","checkDisabled","clickListener","liveSearchListener","liHeight","setWidth","selectPosition","data","createDropdown","inputGroup","parent","hasClass","searchbox","actionsbox","drop","$drop","$li","createLi","append","reloadLi","destroyLi","_liA","_liHtml","optID","each","$this","optionClass","inline","html","subtext","icon","is","push","label","labelSubtext","labelIcon","createA","i","item","length","eq","classes","optgroup","updateLi","setDisabled","setSelected","tabIndex","selectedItems","map","toArray","join","max","split","notDisabled","replace","trim","status","addClass","buttonClass","removeClass","$selectClone","clone","end","appendTo","$menuClone","outerHeight","headerHeight","searchHeight","actionsHeight","setSize","menuHeight","selectOffsetTop","selectOffsetBot","menu","menuInner","selectHeight","divHeight","menuPadding","parseInt","css","$window","window","menuExtras","posVert","offset","top","scrollTop","height","getSize","minHeight","lisVis","not","toggleClass","max-height","overflow","min-height","overflow-y","Math","off","on","optIndex","slice","last","divLength","selectClone","ulWidth","btnWidth","pos","actualHeight","getPlacement","offsetHeight","left","offsetWidth","position","isDisabled","resize","target","closest","update","selected","disabled","removeAttr","setTimeout","clickedIndex","prevValue","prevIndex","$options","$option","state","$optgroup","maxOptionsGrp","blur","maxReached","filter","maxReachedGrp","maxOptionsArr","maxTxt","maxTxtGrp","$notify","optgroupID","has","trigger","delay","fadeOut","change","no_results","currentTarget","value","keydown","$items","$parent","next","first","prev","nextPrev","isActive","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,"test","String","fromCharCode","keyCode","toString","nextAll","prevAll","count","prevKey","keyIndex","toLowerCase","substring","document","fn","selectpicker","option","event","args","arguments","chain","hasOwnProperty","extend","defaults","property","Function","shift","apply","Constructor","jQuery"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"bootstrap-select.min.js","sources":["bootstrap-select.js"],"names":["$","icontains","haystack","needle","toUpperCase","indexOf","normalizeToBase","text","rExps","re","ch","each","replace","this","htmlEscape","html","escapeMap","&","<",">","\"","'","`","source","Object","keys","join","testRegexp","RegExp","replaceRegexp","string","test","match","Plugin","option","event","args","arguments","_option","shift","apply","value","chain","$this","is","data","options","i","hasOwnProperty","config","extend","Selectpicker","DEFAULTS","fn","selectpicker","defaults","Function","expr","obj","index","meta","aicontains","element","e","stopPropagation","preventDefault","$element","$newElement","$button","$menu","$lis","title","attr","val","prototype","render","refresh","setStyle","selectAll","deselectAll","destroy","remove","show","hide","init","VERSION","noneSelectedText","noneResultsText","countSelectedText","numSelected","maxOptionsText","numAll","numGroup","arr","selectAllText","deselectAllText","multipleSeparator","style","size","selectedTextFormat","width","container","hideDisabled","showSubtext","showIcon","showContent","dropupAuto","header","liveSearch","actionsBox","iconBase","tickIcon","maxOptions","mobile","selectOnTab","dropdownAlignRight","searchAccentInsensitive","constructor","that","id","multiple","prop","autofocus","createView","after","find","$searchbox","addClass","click","focus","checkDisabled","clickListener","liveSearchListener","liHeight","setWidth","selectPosition","createDropdown","inputGroup","parent","hasClass","btnSize","parents","searchbox","actionsbox","drop","$drop","$li","createLi","append","reloadLi","destroyLi","_li","optID","generateLI","content","classes","generateA","inline","optgroup","normText","optionClass","subtext","icon","isDisabled","label","labelSubtext","labelIcon","length","push","eq","findLis","updateLi","setDisabled","setSelected","tabIndex","notDisabled","selectedItems","map","toArray","max","split","totalCount","not","tr8nText","toString","status","buttonClass","removeClass","$selectClone","clone","end","appendTo","$menuClone","filter","children","outerHeight","headerHeight","searchHeight","actionsHeight","setSize","menuHeight","selectOffsetTop","selectOffsetBot","menu","menuInner","selectHeight","divHeight","menuPadding","parseInt","css","$window","window","menuExtras","posVert","offset","top","scrollTop","height","getSize","minHeight","lisVis","toggleClass","max-height","overflow","min-height","overflow-y","Math","off","on","optIndex","slice","last","divLength","selectClone","ulWidth","btnWidth","pos","actualHeight","getPlacement","offsetHeight","left","offsetWidth","position","resize","target","closest","selected","disabled","removeAttr","setTimeout","clickedIndex","prevValue","prevIndex","$options","$option","state","$optgroup","maxOptionsGrp","blur","maxReached","maxReachedGrp","optgroupID","has","maxOptionsArr","maxTxt","maxTxtGrp","$notify","trigger","delay","fadeOut","change","no_results","keydown","$items","next","first","prev","nextPrev","isActive","$parent","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,"String","fromCharCode","keyCode","nextAll","prevAll","count","prevKey","keyIndex","trim","toLowerCase","substring","document","update","old","Constructor","noConflict","$selectpicker","call","jQuery"],"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 index b04fd51d8..074e38375 100644 --- a/modoboa/bower_components/bootstrap-select/dist/js/bootstrap-select.min.js +++ b/modoboa/bower_components/bootstrap-select/dist/js/bootstrap-select.min.js @@ -1,8 +1,8 @@ /*! - * Bootstrap-select v1.6.0 (http://silviomoreto.github.io/bootstrap-select/) + * Bootstrap-select v1.6.3 (http://silviomoreto.github.io/bootstrap-select/) * * Copyright 2013-2014 bootstrap-select * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) */ -!function(a){"use strict";a.expr[":"].icontains=function(b,c,d){return a(b).text().toUpperCase().indexOf(d[3].toUpperCase())>=0};var b=function(c,d,e){e&&(e.stopPropagation(),e.preventDefault()),this.$element=a(c),this.$newElement=null,this.$button=null,this.$menu=null,this.$lis=null,this.options=d,null===this.options.title&&(this.options.title=this.$element.attr("title")),this.val=b.prototype.val,this.render=b.prototype.render,this.refresh=b.prototype.refresh,this.setStyle=b.prototype.setStyle,this.selectAll=b.prototype.selectAll,this.deselectAll=b.prototype.deselectAll,this.destroy=b.prototype.destroy,this.remove=b.prototype.destroy,this.show=b.prototype.show,this.hide=b.prototype.hide,this.init()};b.VERSION="1.6.0",b.DEFAULTS={style:"btn-default",size:"auto",title:null,selectedTextFormat:"values",noneSelectedText:"Nothing selected",noneResultsText:"No results match",countSelectedText:"{0} of {1} selected",maxOptionsText:["Limit reached ({n} {var} max)","Group limit reached ({n} {var} max)",["items","item"]],width:!1,container:!1,hideDisabled:!1,showSubtext:!1,showIcon:!0,showContent:!0,dropupAuto:!0,header:!1,liveSearch:!1,actionsBox:!1,multipleSeparator:", ",iconBase:"glyphicon",tickIcon:"glyphicon-ok",maxOptions:!1,mobile:!1},b.prototype={constructor:b,init:function(){var b=this,c=this.$element.attr("id");this.$element.hide(),this.multiple=this.$element.prop("multiple"),this.autofocus=this.$element.prop("autofocus"),this.$newElement=this.createView(),this.$element.after(this.$newElement),this.$menu=this.$newElement.find("> .dropdown-menu"),this.$button=this.$newElement.find("> button"),this.$searchbox=this.$newElement.find("input"),void 0!==c&&(this.$button.attr("data-id",c),a('label[for="'+c+'"]').click(function(a){a.preventDefault(),b.$button.focus()})),this.checkDisabled(),this.clickListener(),this.options.liveSearch&&this.liveSearchListener(),this.render(),this.liHeight(),this.setStyle(),this.setWidth(),this.options.container&&this.selectPosition(),this.$menu.data("this",this),this.$newElement.data("this",this),this.options.mobile&&this.mobile()},createDropdown:function(){var b=this.multiple?" show-tick":"",c=this.$element.parent().hasClass("input-group")?" input-group-btn":"",d=this.autofocus?" autofocus":"",e=this.options.header?'×'+this.options.header+"":"",f=this.options.liveSearch?'':"",g=this.options.actionsBox?'Select AllDeselect All':"",h=' '+e+f+g+'';return a(h)},createView:function(){var a=this.createDropdown(),b=this.createLi();return a.find("ul").append(b),a},reloadLi:function(){this.destroyLi();var a=this.createLi();this.$menu.find("ul").append(a)},destroyLi:function(){this.$menu.find("li").remove()},createLi:function(){var b=this,c=[],d="",e=0;return this.$element.find("option").each(function(){var d=a(this),f=d.attr("class")||"",g=d.attr("style")||"",h=d.data("content")?d.data("content"):d.html(),i=void 0!==d.data("subtext")?''+d.data("subtext")+"":"",j=void 0!==d.data("icon")?' ':"";if(""!==j&&(d.is(":disabled")||d.parent().is(":disabled"))&&(j=""+j+""),d.data("content")||(h=j+''+h+i+""),b.options.hideDisabled&&(d.is(":disabled")||d.parent().is(":disabled")))c.push('');else if(d.parent().is("optgroup")&&d.data("divider")!==!0)if(0===d.index()){var k=d.parent().attr("label"),l=void 0!==d.parent().data("subtext")?''+d.parent().data("subtext")+"":"",m=d.parent().data("icon")?' ':"";k=m+''+k+l+"",e+=1,c.push(0!==d[0].index?''+k+""+b.createA(h,"opt "+f,g,e):""+k+""+b.createA(h,"opt "+f,g,e))}else c.push(b.createA(h,"opt "+f,g,e));else c.push(d.data("divider")===!0?'':a(this).data("hidden")===!0?"":b.createA(h,f,g))}),a.each(c,function(a,b){var c=""===b?'class="hide is-hidden"':"";d+='"+b+""}),this.multiple||0!==this.$element.find("option:selected").length||this.options.title||this.$element.find("option").eq(0).prop("selected",!0).attr("selected","selected"),a(d)},createA:function(a,b,c,d){return'"+a+''},render:function(b){var c=this;b!==!1&&this.$element.find("option").each(function(b){c.setDisabled(b,a(this).is(":disabled")||a(this).parent().is(":disabled")),c.setSelected(b,a(this).is(":selected"))}),this.tabIndex();var d=this.$element.find("option:selected").map(function(){var b,d=a(this),e=d.data("icon")&&c.options.showIcon?' ':"";return b=c.options.showSubtext&&d.attr("data-subtext")&&!c.multiple?' '+d.data("subtext")+"":"",d.data("content")&&c.options.showContent?d.data("content"):void 0!==d.attr("title")?d.attr("title"):e+d.html()+b}).toArray(),e=this.multiple?d.join(this.options.multipleSeparator):d[0];if(this.multiple&&this.options.selectedTextFormat.indexOf("count")>-1){var f=this.options.selectedTextFormat.split(">"),g=this.options.hideDisabled?":not([disabled])":"";(f.length>1&&d.length>f[1]||1==f.length&&d.length>=2)&&(e=this.options.countSelectedText.replace("{0}",d.length).replace("{1}",this.$element.find('option:not([data-divider="true"], [data-hidden="true"])'+g).length))}this.options.title=this.$element.attr("title"),"static"==this.options.selectedTextFormat&&(e=this.options.title),e||(e=void 0!==this.options.title?this.options.title:this.options.noneSelectedText),this.$button.attr("title",a.trim(a("").html(e).text()).replace(/\s\s+/g," ")),this.$newElement.find(".filter-option").html(e)},setStyle:function(a,b){this.$element.attr("class")&&this.$newElement.addClass(this.$element.attr("class").replace(/selectpicker|mobile-device|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(){if(this.options.size!==!1){var a=this.$menu.parent().clone().find("> .dropdown-toggle").prop("autofocus",!1).end().appendTo("body"),b=a.addClass("open").find("> .dropdown-menu"),c=b.find("li > a").outerHeight(),d=this.options.header?b.find(".popover-title").outerHeight():0,e=this.options.liveSearch?b.find(".bootstrap-select-searchbox").outerHeight():0,f=this.options.actionsBox?b.find(".bs-actionsbox").outerHeight():0;a.remove(),this.$newElement.data("liHeight",c).data("headerHeight",d).data("searchHeight",e).data("actionsHeight",f)}},setSize:function(){var b,c,d,e=this,f=this.$menu,g=f.find(".inner"),h=this.$newElement.outerHeight(),i=this.$newElement.data("liHeight"),j=this.$newElement.data("headerHeight"),k=this.$newElement.data("searchHeight"),l=this.$newElement.data("actionsHeight"),m=f.find("li .divider").outerHeight(!0),n=parseInt(f.css("padding-top"))+parseInt(f.css("padding-bottom"))+parseInt(f.css("border-top-width"))+parseInt(f.css("border-bottom-width")),o=this.options.hideDisabled?":not(.disabled)":"",p=a(window),q=n+parseInt(f.css("margin-top"))+parseInt(f.css("margin-bottom"))+2,r=function(){c=e.$newElement.offset().top-p.scrollTop(),d=p.height()-c-h};if(r(),this.options.header&&f.css("padding-top",0),"auto"==this.options.size){var s=function(){var a,h=e.$lis.not(".hide");r(),b=d-q,e.options.dropupAuto&&e.$newElement.toggleClass("dropup",c>d&&b-q3?3*i+q-2:0,f.css({"max-height":b+"px",overflow:"hidden","min-height":a+j+k+l+"px"}),g.css({"max-height":b-j-k-l-n+"px","overflow-y":"auto","min-height":Math.max(a-n,0)+"px"})};s(),this.$searchbox.off("input.getSize propertychange.getSize").on("input.getSize propertychange.getSize",s),a(window).off("resize.getSize").on("resize.getSize",s),a(window).off("scroll.getSize").on("scroll.getSize",s)}else if(this.options.size&&"auto"!=this.options.size&&f.find("li"+o).length>this.options.size){var t=f.find("li"+o+" > *").not(".div-contain").slice(0,this.options.size).last().parent().index(),u=f.find("li").slice(0,t+1).find(".div-contain").length;b=i*this.options.size+u*m+n,e.options.dropupAuto&&this.$newElement.toggleClass("dropup",c>d&&b .dropdown-menu").css("width"),c=a.css("width","auto").find("> button").css("width");a.remove(),this.$newElement.css("width",Math.max(parseInt(b),parseInt(c))+"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/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).resize(function(){g(d.$newElement)}),a(window).on("scroll",function(){g(d.$newElement)}),a("html").on("click",function(b){a(b.target).closest(d.$newElement).length<1&&f.removeClass("open")})},mobile:function(){this.$element.addClass("mobile-device").appendTo(this.$newElement),this.options.container&&this.$menu.hide()},refresh:function(){this.$lis=null,this.reloadLi(),this.render(),this.setWidth(),this.setStyle(),this.checkDisabled(),this.liHeight()},update:function(){this.reloadLi(),this.setWidth(),this.setStyle(),this.checkDisabled(),this.liHeight()},setSelected:function(b,c){null==this.$lis&&(this.$lis=this.$menu.find("li")),a(this.$lis[b]).toggleClass("selected",c)},setDisabled:function(b,c){null==this.$lis&&(this.$lis=this.$menu.find("li")),c?a(this.$lis[b]).addClass("disabled").find("a").attr("href","#").attr("tabindex",-1):a(this.$lis[b]).removeClass("disabled").find("a").removeAttr("href").attr("tabindex",0)},isDisabled:function(){return this.$element.is(":disabled")},checkDisabled:function(){var a=this;this.isDisabled()?this.$button.addClass("disabled").attr("tabindex",-1):(this.$button.hasClass("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;this.$newElement.on("touchstart.dropdown",".dropdown-menu",function(a){a.stopPropagation()}),this.$newElement.on("click",function(){b.setSize(),b.options.liveSearch||b.multiple||setTimeout(function(){b.$menu.find(".selected a").focus()},10)}),this.$menu.on("click","li a",function(c){var d=a(this).parent().index(),e=b.$element.val(),f=b.$element.prop("selectedIndex");if(b.multiple&&c.stopPropagation(),c.preventDefault(),!b.isDisabled()&&!a(this).parent().hasClass("disabled")){var g=b.$element.find("option"),h=g.eq(d),i=h.prop("selected"),j=h.parent("optgroup"),k=b.options.maxOptions,l=j.data("maxOptions")||!1;if(b.multiple){if(h.prop("selected",!i),b.setSelected(d,!i),a(this).blur(),k!==!1||l!==!1){var m=k');if(k&&m||l&&n)if(k&&1==k)g.prop("selected",!1),h.prop("selected",!0),b.$menu.find(".selected").removeClass("selected"),b.setSelected(d,!0);else if(l&&1==l){j.find("option:selected").prop("selected",!1),h.prop("selected",!0);var s=a(this).data("optgroup");b.$menu.find(".selected").has('a[data-optgroup="'+s+'"]').removeClass("selected"),b.setSelected(d,!0)}else o[2]&&(p=p.replace("{var}",o[2][k>1?0:1]),q=q.replace("{var}",o[2][l>1?0:1])),h.prop("selected",!1),b.$menu.append(r),k&&m&&(r.append(a(""+p+"")),b.$element.trigger("maxReached.bs.select")),l&&n&&(r.append(a(""+q+"")),b.$element.trigger("maxReachedGrp.bs.select")),setTimeout(function(){b.setSelected(d,!1)},10),r.delay(750).fadeOut(300,function(){a(this).remove()})}}else g.prop("selected",!1),h.prop("selected",!0),b.$menu.find(".selected").removeClass("selected"),b.setSelected(d,!0);b.multiple?b.options.liveSearch&&b.$searchbox.focus():b.$button.focus(),(e!=b.$element.val()&&b.multiple||f!=b.$element.prop("selectedIndex")&&!b.multiple)&&b.$element.change()}}),this.$menu.on("click","li.disabled a, li dt, li .div-contain, .popover-title, .popover-title :not(.close)",function(a){a.target==this&&(a.preventDefault(),a.stopPropagation(),b.options.liveSearch?b.$searchbox.focus():b.$button.focus())}),this.$menu.on("click",".popover-title .close",function(){b.$button.focus()}),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).is(".bs-select-all")?b.selectAll():b.deselectAll(),b.$element.change()}),this.$element.change(function(){b.render(!1)})},liveSearchListener:function(){var b=this,c=a('');this.$newElement.on("click.dropdown.data-api",function(){b.$menu.find(".active").removeClass("active"),b.$searchbox.val()&&(b.$searchbox.val(""),b.$lis.not(".is-hidden").removeClass("hide"),c.parent().length&&c.remove()),b.multiple||b.$menu.find(".selected").addClass("active"),setTimeout(function(){b.$searchbox.focus()},10)}),this.$searchbox.on("input propertychange",function(){b.$searchbox.val()?(b.$lis.not(".is-hidden").removeClass("hide").find("a").not(":icontains("+b.$searchbox.val()+")").parent().addClass("hide"),b.$menu.find("li").filter(":visible:not(.no-results)").length?c.parent().length&&c.remove():(c.parent().length&&c.remove(),c.html(b.options.noneResultsText+' "'+b.$searchbox.val()+'"').show(),b.$menu.find("li").last().after(c))):(b.$lis.not(".is-hidden").removeClass("hide"),c.parent().length&&c.remove()),b.$menu.find("li.active").removeClass("active"),b.$menu.find("li").filter(":visible:not(.divider)").eq(0).addClass("active").find("a").focus(),a(this).focus()}),this.$menu.on("mouseenter","a",function(c){b.$menu.find(".active").removeClass("active"),a(c.currentTarget).parent().not(".disabled").addClass("active")}),this.$menu.on("mouseleave","a",function(){b.$menu.find(".active").removeClass("active")})},val:function(a){return void 0!==a?(this.$element.val(a),this.$element.change(),this.render(),this.$element):this.$element.val()},selectAll:function(){null==this.$lis&&(this.$lis=this.$menu.find("li")),this.$element.find("option:enabled").prop("selected",!0),a(this.$lis).not(".disabled").addClass("selected"),this.render(!1)},deselectAll:function(){null==this.$lis&&(this.$lis=this.$menu.find("li")),this.$element.find("option:enabled").prop("selected",!1),a(this.$lis).not(".disabled").removeClass("selected"),this.render(!1)},keydown:function(b){var c,d,e,f,g,h,i,j,k,l,m,n,o={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(c=a(this),e=c.parent(),c.is("input")&&(e=c.parent().parent()),l=e.data("this"),l.options.liveSearch&&(e=c.parent().parent()),l.options.container&&(e=l.$menu),d=a("[role=menu] li:not(.divider) a",e),n=l.$menu.parent().hasClass("open"),!n&&/([0-9]|[A-z])/.test(String.fromCharCode(b.keyCode))&&(l.options.container?l.$newElement.trigger("click"):(l.setSize(),l.$menu.parent().addClass("open"),n=!0),l.$searchbox.focus()),l.options.liveSearch&&(/(^9$|27)/.test(b.keyCode.toString(10))&&n&&0===l.$menu.find(".active").length&&(b.preventDefault(),l.$menu.parent().removeClass("open"),l.$button.focus()),d=a("[role=menu] li:not(.divider):visible",e),c.val()||/(38|40)/.test(b.keyCode.toString(10))||0===d.filter(".active").length&&(d=l.$newElement.find("li").filter(":icontains("+o[b.keyCode]+")"))),d.length){if(/(38|40)/.test(b.keyCode.toString(10)))f=d.index(d.filter(":focus")),h=d.parent(":not(.disabled):visible").first().index(),i=d.parent(":not(.disabled):visible").last().index(),g=d.eq(f).parent().nextAll(":not(.disabled):visible").eq(0).index(),j=d.eq(f).parent().prevAll(":not(.disabled):visible").eq(0).index(),k=d.eq(g).parent().prevAll(":not(.disabled):visible").eq(0).index(),l.options.liveSearch&&(d.each(function(b){a(this).is(":not(.disabled)")&&a(this).data("index",b)}),f=d.index(d.filter(".active")),h=d.filter(":not(.disabled):visible").first().data("index"),i=d.filter(":not(.disabled):visible").last().data("index"),g=d.eq(f).nextAll(":not(.disabled):visible").eq(0).data("index"),j=d.eq(f).prevAll(":not(.disabled):visible").eq(0).data("index"),k=d.eq(g).prevAll(":not(.disabled):visible").eq(0).data("index")),m=c.data("prevIndex"),38==b.keyCode&&(l.options.liveSearch&&(f-=1),f!=k&&f>j&&(f=j),h>f&&(f=h),f==m&&(f=i)),40==b.keyCode&&(l.options.liveSearch&&(f+=1),-1==f&&(f=0),f!=k&&g>f&&(f=g),f>i&&(f=i),f==m&&(f=h)),c.data("prevIndex",f),l.options.liveSearch?(b.preventDefault(),c.is(".dropdown-toggle")||(d.removeClass("active"),d.eq(f).addClass("active").find("a").focus(),c.focus())):d.eq(f).focus();else if(!c.is("input")){var p,q,r=[];d.each(function(){a(this).parent().is(":not(.disabled)")&&a.trim(a(this).text().toLowerCase()).substring(0,1)==o[b.keyCode]&&r.push(a(this).parent().index())}),p=a(document).data("keycount"),p++,a(document).data("keycount",p),q=a.trim(a(":focus").text().toLowerCase()).substring(0,1),q!=o[b.keyCode]?(p=1,a(document).data("keycount",p)):p>=r.length&&(a(document).data("keycount",0),p>r.length&&(p=1)),d.eq(r[p-1]).focus()}/(13|32)/.test(b.keyCode.toString(10))&&n&&(/(32)/.test(b.keyCode.toString(10))||b.preventDefault(),l.options.liveSearch?/(32)/.test(b.keyCode.toString(10))||(l.$menu.find(".active a").click(),c.focus()):a(":focus").click(),a(document).data("keycount",0)),(/(^9$|27)/.test(b.keyCode.toString(10))&&n&&(l.multiple||l.options.liveSearch)||/(27)/.test(b.keyCode.toString(10))&&!n)&&(l.$menu.parent().removeClass("open"),l.$button.focus())}},hide:function(){this.$newElement.hide()},show:function(){this.$newElement.show()},destroy:function(){this.$newElement.remove(),this.$element.remove()}},a.fn.selectpicker=function(c,d){var e,f=arguments,g=this.each(function(){if(a(this).is("select")){var g=a(this),h=g.data("selectpicker"),i="object"==typeof c&&c;if(h){if(i)for(var j in i)i.hasOwnProperty(j)&&(h.options[j]=i[j])}else g.data("selectpicker",h=new b(this,a.extend({},b.DEFAULTS,a.fn.selectpicker.defaults||{},g.data(),i),d));if("string"==typeof c){var k=c;h[k]instanceof Function?([].shift.apply(f),e=h[k].apply(h,f)):e=h.options[k]}}});return"undefined"!=typeof e?e:g},a.fn.selectpicker.Constructor=b,a(document).data("keycount",0).on("keydown",".bootstrap-select [data-toggle=dropdown], .bootstrap-select [role=menu], .bootstrap-select-searchbox input",b.prototype.keydown).on("focusin.modal",".bootstrap-select [data-toggle=dropdown], .bootstrap-select [role=menu], .bootstrap-select-searchbox input",function(a){a.stopPropagation()})}(jQuery); +!function(a){"use strict";function b(a,b){return a.toUpperCase().indexOf(b.toUpperCase())>-1}function c(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 d(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 e(b,c){var d=arguments,e=b,b=d[0],c=d[1];[].shift.apply(d),"undefined"==typeof b&&(b=e);var g,h=this.each(function(){var e=a(this);if(e.is("select")){var h=e.data("selectpicker"),i="object"==typeof b&&b;if(h){if(i)for(var j in i)i.hasOwnProperty(j)&&(h.options[j]=i[j])}else{var k=a.extend({},f.DEFAULTS,a.fn.selectpicker.defaults||{},e.data(),i);e.data("selectpicker",h=new f(this,k,c))}"string"==typeof b&&(g=h[b]instanceof Function?h[b].apply(h,d):h.options[b])}});return"undefined"!=typeof g?g:h}a.expr[":"].icontains=function(c,d,e){return b(a(c).text(),e[3])},a.expr[":"].aicontains=function(c,d,e){return b(a(c).data("normalizedText")||a(c).text(),e[3])};var f=function(b,c,d){d&&(d.stopPropagation(),d.preventDefault()),this.$element=a(b),this.$newElement=null,this.$button=null,this.$menu=null,this.$lis=null,this.options=c,null===this.options.title&&(this.options.title=this.$element.attr("title")),this.val=f.prototype.val,this.render=f.prototype.render,this.refresh=f.prototype.refresh,this.setStyle=f.prototype.setStyle,this.selectAll=f.prototype.selectAll,this.deselectAll=f.prototype.deselectAll,this.destroy=f.prototype.remove,this.remove=f.prototype.remove,this.show=f.prototype.show,this.hide=f.prototype.hide,this.init()};f.VERSION="1.6.3",f.DEFAULTS={noneSelectedText:"Nothing selected",noneResultsText:"No results match",countSelectedText:function(a){return 1==a?"{0} item selected":"{0} items selected"},maxOptionsText:function(a,b){var c=[];return c[0]=1==a?"Limit reached ({n} item max)":"Limit reached ({n} items max)",c[1]=1==b?"Group limit reached ({n} item max)":"Group limit reached ({n} items max)",c},selectAllText:"Select All",deselectAllText:"Deselect All",multipleSeparator:", ",style:"btn-default",size:"auto",title:null,selectedTextFormat:"values",width:!1,container:!1,hideDisabled:!1,showSubtext:!1,showIcon:!0,showContent:!0,dropupAuto:!0,header:!1,liveSearch:!1,actionsBox:!1,iconBase:"glyphicon",tickIcon:"glyphicon-ok",maxOptions:!1,mobile:!1,selectOnTab:!1,dropdownAlignRight:!1,searchAccentInsensitive:!1},f.prototype={constructor:f,init:function(){var b=this,c=this.$element.attr("id");this.$element.hide(),this.multiple=this.$element.prop("multiple"),this.autofocus=this.$element.prop("autofocus"),this.$newElement=this.createView(),this.$element.after(this.$newElement),this.$menu=this.$newElement.find("> .dropdown-menu"),this.$button=this.$newElement.find("> button"),this.$searchbox=this.$newElement.find("input"),this.options.dropdownAlignRight&&this.$menu.addClass("dropdown-menu-right"),"undefined"!=typeof c&&(this.$button.attr("data-id",c),a('label[for="'+c+'"]').click(function(a){a.preventDefault(),b.$button.focus()})),this.checkDisabled(),this.clickListener(),this.options.liveSearch&&this.liveSearchListener(),this.render(),this.liHeight(),this.setStyle(),this.setWidth(),this.options.container&&this.selectPosition(),this.$menu.data("this",this),this.$newElement.data("this",this),this.options.mobile&&this.mobile()},createDropdown:function(){var b=this.multiple?" show-tick":"",c=this.$element.parent().hasClass("input-group")?" input-group-btn":"",d=this.autofocus?" autofocus":"",e=this.$element.parents().hasClass("form-group-lg")?" btn-lg":this.$element.parents().hasClass("form-group-sm")?" btn-sm":"",f=this.options.header?'×'+this.options.header+"":"",g=this.options.liveSearch?'':"",h=this.options.actionsBox?''+this.options.selectAllText+''+this.options.deselectAllText+"":"",i=' '+f+g+h+'';return a(i)},createView:function(){var a=this.createDropdown(),b=this.createLi();return a.find("ul").append(b),a},reloadLi:function(){this.destroyLi();var a=this.createLi();this.$menu.find("ul").append(a)},destroyLi:function(){this.$menu.find("li").remove()},createLi:function(){var b=this,e=[],f=0,g=function(a,b,c){return""+a+""},h=function(a,e,f,g){var h=c(d(a));return''+a+''};return this.$element.find("option").each(function(){var c=a(this),d=c.attr("class")||"",i=c.attr("style"),j=c.data("content")?c.data("content"):c.html(),k="undefined"!=typeof c.data("subtext")?''+c.data("subtext")+"":"",l="undefined"!=typeof c.data("icon")?' ':"",m=c.is(":disabled")||c.parent().is(":disabled"),n=c[0].index;if(""!==l&&m&&(l=""+l+""),c.data("content")||(j=l+''+j+k+""),!b.options.hideDisabled||!m)if(c.parent().is("optgroup")&&c.data("divider")!==!0){if(0===c.index()){f+=1;var o=c.parent().attr("label"),p="undefined"!=typeof c.parent().data("subtext")?''+c.parent().data("subtext")+"":"",q=c.parent().data("icon")?' ':"";o=q+''+o+p+"",0!==n&&e.length>0&&e.push(g("",null,"divider")),e.push(g(o,null,"dropdown-header"))}e.push(g(h(j,"opt "+d,i,f),n))}else e.push(c.data("divider")===!0?g("",n,"divider"):c.data("hidden")===!0?g(h(j,d,i),n,"hide is-hidden"):g(h(j,d,i),n))}),this.multiple||0!==this.$element.find("option:selected").length||this.options.title||this.$element.find("option").eq(0).prop("selected",!0).attr("selected","selected"),a(e.join(""))},findLis:function(){return null==this.$lis&&(this.$lis=this.$menu.find("li")),this.$lis},render:function(b){var c=this;b!==!1&&this.$element.find("option").each(function(b){c.setDisabled(b,a(this).is(":disabled")||a(this).parent().is(":disabled")),c.setSelected(b,a(this).is(":selected"))}),this.tabIndex();var e=this.options.hideDisabled?":not([disabled])":"",f=this.$element.find("option:selected"+e).map(function(){var b,d=a(this),e=d.data("icon")&&c.options.showIcon?' ':"";return b=c.options.showSubtext&&d.attr("data-subtext")&&!c.multiple?' '+d.data("subtext")+"":"",d.data("content")&&c.options.showContent?d.data("content"):"undefined"!=typeof d.attr("title")?d.attr("title"):e+d.html()+b}).toArray(),g=this.multiple?f.join(this.options.multipleSeparator):f[0];if(this.multiple&&this.options.selectedTextFormat.indexOf("count")>-1){var h=this.options.selectedTextFormat.split(">");if(h.length>1&&f.length>h[1]||1==h.length&&f.length>=2){e=this.options.hideDisabled?", [disabled]":"";var i=this.$element.find("option").not('[data-divider="true"], [data-hidden="true"]'+e).length,j="function"==typeof this.options.countSelectedText?this.options.countSelectedText(f.length,i):this.options.countSelectedText;g=j.replace("{0}",f.length.toString()).replace("{1}",i.toString())}}this.options.title=this.$element.attr("title"),"static"==this.options.selectedTextFormat&&(g=this.options.title),g||(g="undefined"!=typeof this.options.title?this.options.title:this.options.noneSelectedText),this.$button.attr("title",d(g)),this.$newElement.find(".filter-option").html(g)},setStyle:function(a,b){this.$element.attr("class")&&this.$newElement.addClass(this.$element.attr("class").replace(/selectpicker|mobile-device|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(){if(this.options.size!==!1){var a=this.$menu.parent().clone().find("> .dropdown-toggle").prop("autofocus",!1).end().appendTo("body"),b=a.addClass("open").find("> .dropdown-menu"),c=b.find("li").not(".divider").not(".dropdown-header").filter(":visible").children("a").outerHeight(),d=this.options.header?b.find(".popover-title").outerHeight():0,e=this.options.liveSearch?b.find(".bs-searchbox").outerHeight():0,f=this.options.actionsBox?b.find(".bs-actionsbox").outerHeight():0;a.remove(),this.$newElement.data("liHeight",c).data("headerHeight",d).data("searchHeight",e).data("actionsHeight",f)}},setSize:function(){this.findLis();var b,c,d,e=this,f=this.$menu,g=f.find(".inner"),h=this.$newElement.outerHeight(),i=this.$newElement.data("liHeight"),j=this.$newElement.data("headerHeight"),k=this.$newElement.data("searchHeight"),l=this.$newElement.data("actionsHeight"),m=this.$lis.filter(".divider").outerHeight(!0),n=parseInt(f.css("padding-top"))+parseInt(f.css("padding-bottom"))+parseInt(f.css("border-top-width"))+parseInt(f.css("border-bottom-width")),o=this.options.hideDisabled?", .disabled":"",p=a(window),q=n+parseInt(f.css("margin-top"))+parseInt(f.css("margin-bottom"))+2,r=function(){c=e.$newElement.offset().top-p.scrollTop(),d=p.height()-c-h};if(r(),this.options.header&&f.css("padding-top",0),"auto"==this.options.size){var s=function(){var a,h=e.$lis.not(".hide");r(),b=d-q,e.options.dropupAuto&&e.$newElement.toggleClass("dropup",c>d&&b-q3?3*i+q-2:0,f.css({"max-height":b+"px",overflow:"hidden","min-height":a+j+k+l+"px"}),g.css({"max-height":b-j-k-l-n+"px","overflow-y":"auto","min-height":Math.max(a-n,0)+"px"})};s(),this.$searchbox.off("input.getSize propertychange.getSize").on("input.getSize propertychange.getSize",s),a(window).off("resize.getSize").on("resize.getSize",s),a(window).off("scroll.getSize").on("scroll.getSize",s)}else if(this.options.size&&"auto"!=this.options.size&&f.find("li"+o).length>this.options.size){var t=this.$lis.not(".divider"+o).find(" > *").slice(0,this.options.size).last().parent().index(),u=this.$lis.slice(0,t+1).filter(".divider").length;b=i*this.options.size+u*m+n,e.options.dropupAuto&&this.$newElement.toggleClass("dropup",c>d&&b .dropdown-menu").css("width"),c=a.css("width","auto").find("> button").css("width");a.remove(),this.$newElement.css("width",Math.max(parseInt(b),parseInt(c))+"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/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).resize(function(){g(d.$newElement)}),a(window).on("scroll",function(){g(d.$newElement)}),a("html").on("click",function(b){a(b.target).closest(d.$newElement).length<1&&f.removeClass("open")})},setSelected:function(a,b){this.findLis(),this.$lis.filter('[data-original-index="'+a+'"]').toggleClass("selected",b)},setDisabled:function(a,b){this.findLis(),b?this.$lis.filter('[data-original-index="'+a+'"]').addClass("disabled").find("a").attr("href","#").attr("tabindex",-1):this.$lis.filter('[data-original-index="'+a+'"]').removeClass("disabled").find("a").removeAttr("href").attr("tabindex",0)},isDisabled:function(){return this.$element.is(":disabled")},checkDisabled:function(){var a=this;this.isDisabled()?this.$button.addClass("disabled").attr("tabindex",-1):(this.$button.hasClass("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;this.$newElement.on("touchstart.dropdown",".dropdown-menu",function(a){a.stopPropagation()}),this.$newElement.on("click",function(){b.setSize(),b.options.liveSearch||b.multiple||setTimeout(function(){b.$menu.find(".selected a").focus()},10)}),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.change()}}),this.$menu.on("click","li.disabled a, .popover-title, .popover-title :not(.close)",function(a){a.target==this&&(a.preventDefault(),a.stopPropagation(),b.options.liveSearch?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.focus()}),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).is(".bs-select-all")?b.selectAll():b.deselectAll(),b.$element.change()}),this.$element.change(function(){b.render(!1)})},liveSearchListener:function(){var b=this,e=a('');this.$newElement.on("click.dropdown.data-api touchstart.dropdown.data-api",function(){b.$menu.find(".active").removeClass("active"),b.$searchbox.val()&&(b.$searchbox.val(""),b.$lis.not(".is-hidden").removeClass("hide"),e.parent().length&&e.remove()),b.multiple||b.$menu.find(".selected").addClass("active"),setTimeout(function(){b.$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(){b.$searchbox.val()?(b.options.searchAccentInsensitive?b.$lis.not(".is-hidden").removeClass("hide").find("a").not(":aicontains("+c(b.$searchbox.val())+")").parent().addClass("hide"):b.$lis.not(".is-hidden").removeClass("hide").find("a").not(":icontains("+b.$searchbox.val()+")").parent().addClass("hide"),b.$menu.find("li").filter(":visible:not(.no-results)").length?e.parent().length&&e.remove():(e.parent().length&&e.remove(),e.html(b.options.noneResultsText+' "'+d(b.$searchbox.val())+'"').show(),b.$menu.find("li").last().after(e))):(b.$lis.not(".is-hidden").removeClass("hide"),e.parent().length&&e.remove()),b.$menu.find("li.active").removeClass("active"),b.$menu.find("li").filter(":visible:not(.divider)").eq(0).addClass("active").find("a").focus(),a(this).focus()})},val:function(a){return"undefined"!=typeof a?(this.$element.val(a),this.render(),this.$element):this.$element.val()},selectAll:function(){this.findLis(),this.$lis.not(".divider").not(".disabled").not(".selected").filter(":visible").find("a").click()},deselectAll:function(){this.findLis(),this.$lis.not(".divider").not(".disabled").filter(".selected").filter(":visible").find("a").click()},keydown:function(b){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={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&&/([0-9]|[A-z])/.test(String.fromCharCode(b.keyCode))&&(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(b.keyCode.toString(10))&&l&&0===o.$menu.find(".active").length&&(b.preventDefault(),o.$menu.parent().removeClass("open"),o.$button.focus()),d=a("[role=menu] li:not(.divider):not(.dropdown-header):visible",n),m.val()||/(38|40)/.test(b.keyCode.toString(10))||0===d.filter(".active").length&&(d=o.$newElement.find("li").filter(o.options.searchAccentInsensitive?":aicontains("+c(p[b.keyCode])+")":":icontains("+p[b.keyCode]+")"))),d.length){if(/(38|40)/.test(b.keyCode.toString(10)))e=d.index(d.filter(":focus")),g=d.parent(":not(.disabled):visible").first().index(),h=d.parent(":not(.disabled):visible").last().index(),f=d.eq(e).parent().nextAll(":not(.disabled):visible").eq(0).index(),i=d.eq(e).parent().prevAll(":not(.disabled):visible").eq(0).index(),j=d.eq(f).parent().prevAll(":not(.disabled):visible").eq(0).index(),o.options.liveSearch&&(d.each(function(b){a(this).is(":not(.disabled)")&&a(this).data("index",b)}),e=d.index(d.filter(".active")),g=d.filter(":not(.disabled):visible").first().data("index"),h=d.filter(":not(.disabled):visible").last().data("index"),f=d.eq(e).nextAll(":not(.disabled):visible").eq(0).data("index"),i=d.eq(e).prevAll(":not(.disabled):visible").eq(0).data("index"),j=d.eq(f).prevAll(":not(.disabled):visible").eq(0).data("index")),k=m.data("prevIndex"),38==b.keyCode&&(o.options.liveSearch&&(e-=1),e!=j&&e>i&&(e=i),g>e&&(e=g),e==k&&(e=h)),40==b.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?(b.preventDefault(),m.is(".dropdown-toggle")||(d.removeClass("active"),d.eq(e).addClass("active").find("a").focus(),m.focus())):d.eq(e).focus();else if(!m.is("input")){var q,r,s=[];d.each(function(){a(this).parent().is(":not(.disabled)")&&a.trim(a(this).text().toLowerCase()).substring(0,1)==p[b.keyCode]&&s.push(a(this).parent().index())}),q=a(document).data("keycount"),q++,a(document).data("keycount",q),r=a.trim(a(":focus").text().toLowerCase()).substring(0,1),r!=p[b.keyCode]?(q=1,a(document).data("keycount",q)):q>=s.length&&(a(document).data("keycount",0),q>s.length&&(q=1)),d.eq(s[q-1]).focus()}(/(13|32)/.test(b.keyCode.toString(10))||/(^9$)/.test(b.keyCode.toString(10))&&o.options.selectOnTab)&&l&&(/(32)/.test(b.keyCode.toString(10))||b.preventDefault(),o.options.liveSearch?/(32)/.test(b.keyCode.toString(10))||(o.$menu.find(".active a").click(),m.focus()):a(":focus").click(),a(document).data("keycount",0)),(/(^9$|27)/.test(b.keyCode.toString(10))&&l&&(o.multiple||o.options.liveSearch)||/(27)/.test(b.keyCode.toString(10))&&!l)&&(o.$menu.parent().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.reloadLi(),this.render(),this.setWidth(),this.setStyle(),this.checkDisabled(),this.liHeight()},update:function(){this.reloadLi(),this.setWidth(),this.setStyle(),this.checkDisabled(),this.liHeight()},hide:function(){this.$newElement.hide()},show:function(){this.$newElement.show()},remove:function(){this.$newElement.remove(),this.$element.remove()}};var g=a.fn.selectpicker;a.fn.selectpicker=e,a.fn.selectpicker.Constructor=f,a.fn.selectpicker.noConflict=function(){return a.fn.selectpicker=g,this},a(document).data("keycount",0).on("keydown",".bootstrap-select [data-toggle=dropdown], .bootstrap-select [role=menu], .bs-searchbox input",f.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);e.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-cs_CZ.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-cs_CZ.js index 8a280628d..467789e13 100644 --- 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 @@ -1,5 +1,5 @@ /*! - * Bootstrap-select v1.6.0 (http://silviomoreto.github.io/bootstrap-select/) + * Bootstrap-select v1.6.3 (http://silviomoreto.github.io/bootstrap-select/) * * Copyright 2013-2014 bootstrap-select * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) 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 index 0a9b599c6..a69b96582 100644 --- 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 @@ -1,5 +1,5 @@ /*! - * Bootstrap-select v1.6.0 (http://silviomoreto.github.io/bootstrap-select/) + * Bootstrap-select v1.6.3 (http://silviomoreto.github.io/bootstrap-select/) * * Copyright 2013-2014 bootstrap-select * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) 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 index 117683e34..2487ce568 100644 --- 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 @@ -1,5 +1,5 @@ /*! - * Bootstrap-select v1.6.0 (http://silviomoreto.github.io/bootstrap-select/) + * Bootstrap-select v1.6.3 (http://silviomoreto.github.io/bootstrap-select/) * * Copyright 2013-2014 bootstrap-select * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) 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 index 5a4c5571b..9466a822c 100644 --- 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 @@ -1,5 +1,5 @@ /*! - * Bootstrap-select v1.6.0 (http://silviomoreto.github.io/bootstrap-select/) + * Bootstrap-select v1.6.3 (http://silviomoreto.github.io/bootstrap-select/) * * Copyright 2013-2014 bootstrap-select * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) 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 index 1c225035d..cc41b2de7 100644 --- 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 @@ -1,5 +1,5 @@ /*! - * Bootstrap-select v1.6.0 (http://silviomoreto.github.io/bootstrap-select/) + * Bootstrap-select v1.6.3 (http://silviomoreto.github.io/bootstrap-select/) * * Copyright 2013-2014 bootstrap-select * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) @@ -8,8 +8,19 @@ $.fn.selectpicker.defaults = { noneSelectedText: 'Nothing selected', noneResultsText: 'No results match', - countSelectedText: '{0} of {1} selected', - maxOptionsText: ['Limit reached ({n} {var} max)', 'Group limit reached ({n} {var} max)', ['items', 'item']], + countSelectedText: function (numSelected, numTotal) { + return (numSelected == 1) ? "{0} item selected" : "{0} items selected"; + }, + maxOptionsText: function (numAll, numGroup) { + var arr = []; + + arr[0] = (numAll == 1) ? 'Limit reached ({n} item max)' : 'Limit reached ({n} items max)'; + arr[1] = (numGroup == 1) ? 'Group limit reached ({n} item max)' : 'Group limit reached ({n} items max)'; + + return arr; + }, + 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 index 695967054..297146191 100644 --- 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 @@ -1,7 +1,7 @@ /*! - * Bootstrap-select v1.6.0 (http://silviomoreto.github.io/bootstrap-select/) + * Bootstrap-select v1.6.3 (http://silviomoreto.github.io/bootstrap-select/) * * Copyright 2013-2014 bootstrap-select * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) */ -!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Nothing selected",noneResultsText:"No results match",countSelectedText:"{0} of {1} selected",maxOptionsText:["Limit reached ({n} {var} max)","Group limit reached ({n} {var} max)",["items","item"]],multipleSeparator:", "}}(jQuery); \ No newline at end of file +!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Nothing selected",noneResultsText:"No results match",countSelectedText:function(a){return 1==a?"{0} item selected":"{0} items selected"},maxOptionsText:function(a,b){var c=[];return c[0]=1==a?"Limit reached ({n} item max)":"Limit reached ({n} items max)",c[1]=1==b?"Group limit reached ({n} item max)":"Group limit reached ({n} items max)",c},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 index f4f0ca968..9724636ac 100644 --- 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 @@ -1,5 +1,5 @@ /*! - * Bootstrap-select v1.6.0 (http://silviomoreto.github.io/bootstrap-select/) + * Bootstrap-select v1.6.3 (http://silviomoreto.github.io/bootstrap-select/) * * Copyright 2013-2014 bootstrap-select * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) 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 index bc5bb00dc..ab8dfbdc7 100644 --- 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 @@ -1,5 +1,5 @@ /*! - * Bootstrap-select v1.6.0 (http://silviomoreto.github.io/bootstrap-select/) + * Bootstrap-select v1.6.3 (http://silviomoreto.github.io/bootstrap-select/) * * Copyright 2013-2014 bootstrap-select * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) 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 index 3247cb707..47b745430 100644 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-eu.js +++ b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-eu.js @@ -1,5 +1,5 @@ /*! - * Bootstrap-select v1.6.0 (http://silviomoreto.github.io/bootstrap-select/) + * Bootstrap-select v1.6.3 (http://silviomoreto.github.io/bootstrap-select/) * * Copyright 2013-2014 bootstrap-select * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) 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 index 04fb91a77..0e85a2b59 100644 --- 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 @@ -1,5 +1,5 @@ /*! - * Bootstrap-select v1.6.0 (http://silviomoreto.github.io/bootstrap-select/) + * Bootstrap-select v1.6.3 (http://silviomoreto.github.io/bootstrap-select/) * * Copyright 2013-2014 bootstrap-select * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) 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 index de25d10b8..d9fb81320 100644 --- 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 @@ -1,5 +1,5 @@ /*! - * Bootstrap-select v1.6.0 (http://silviomoreto.github.io/bootstrap-select/) + * Bootstrap-select v1.6.3 (http://silviomoreto.github.io/bootstrap-select/) * * Copyright 2013-2014 bootstrap-select * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) @@ -8,8 +8,17 @@ $.fn.selectpicker.defaults = { noneSelectedText: 'Aucune sélection', noneResultsText: 'Aucun résultat', - countSelectedText: '{0} sur {1} sélection(s)', - maxOptionsText: ['Limite atteinte ({n} {var} max)', 'Limite du groupe atteinte ({n} {var} max)', ['éléments', 'élément']], + countSelectedText: function (numSelected, numTotal) { + return (numSelected > 1) ? "{0} éléments sélectionés" : "{0} élément sélectioné"; + }, + maxOptionsText: function (numAll, numGroup) { + var arr = []; + + arr[0] = (numAll > 1) ? 'Limite atteinte ({n} éléments max)' : 'Limite atteinte ({n} élément max)'; + arr[1] = (numGroup > 1) ? 'Limite du groupe atteinte ({n} éléments max)' : 'Limite du groupe atteinte ({n} élément max)'; + + return arr; + }, 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 index 057ec2a81..2a7c4106a 100644 --- 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 @@ -1,7 +1,7 @@ /*! - * Bootstrap-select v1.6.0 (http://silviomoreto.github.io/bootstrap-select/) + * Bootstrap-select v1.6.3 (http://silviomoreto.github.io/bootstrap-select/) * * Copyright 2013-2014 bootstrap-select * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) */ -!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Aucune sélection",noneResultsText:"Aucun résultat",countSelectedText:"{0} sur {1} sélection(s)",maxOptionsText:["Limite atteinte ({n} {var} max)","Limite du groupe atteinte ({n} {var} max)",["éléments","élément"]],multipleSeparator:", "}}(jQuery); \ No newline at end of file +!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Aucune sélection",noneResultsText:"Aucun résultat",countSelectedText:function(a){return a>1?"{0} éléments sélectionés":"{0} élément sélectioné"},maxOptionsText:function(a,b){var c=[];return c[0]=a>1?"Limite atteinte ({n} éléments max)":"Limite atteinte ({n} élément max)",c[1]=b>1?"Limite du groupe atteinte ({n} éléments max)":"Limite du groupe atteinte ({n} élément max)",c},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 index ee35d8f24..97d931ec6 100644 --- 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 @@ -1,5 +1,5 @@ /*! - * Bootstrap-select v1.6.0 (http://silviomoreto.github.io/bootstrap-select/) + * Bootstrap-select v1.6.3 (http://silviomoreto.github.io/bootstrap-select/) * * Copyright 2013-2014 bootstrap-select * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) 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 index 2c2e451cf..7900a0afd 100644 --- 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 @@ -1,5 +1,5 @@ /*! - * Bootstrap-select v1.6.0 (http://silviomoreto.github.io/bootstrap-select/) + * Bootstrap-select v1.6.3 (http://silviomoreto.github.io/bootstrap-select/) * * Copyright 2013-2014 bootstrap-select * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) 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 index f7d01dc38..071318385 100644 --- 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 @@ -1,5 +1,5 @@ /*! - * Bootstrap-select v1.6.0 (http://silviomoreto.github.io/bootstrap-select/) + * Bootstrap-select v1.6.3 (http://silviomoreto.github.io/bootstrap-select/) * * Copyright 2013-2014 bootstrap-select * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) 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 index 66ab640ec..921d79a23 100644 --- 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 @@ -1,5 +1,5 @@ /*! - * Bootstrap-select v1.6.0 (http://silviomoreto.github.io/bootstrap-select/) + * Bootstrap-select v1.6.3 (http://silviomoreto.github.io/bootstrap-select/) * * Copyright 2013-2014 bootstrap-select * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) 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 index 93a151779..43f30bc3c 100644 --- 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 @@ -1,5 +1,5 @@ /*! - * Bootstrap-select v1.6.0 (http://silviomoreto.github.io/bootstrap-select/) + * Bootstrap-select v1.6.3 (http://silviomoreto.github.io/bootstrap-select/) * * Copyright 2013-2014 bootstrap-select * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) @@ -10,6 +10,8 @@ noneResultsText: 'Brak wyników wyszukiwania', 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 index 0aaceeb77..10870904b 100644 --- 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 @@ -1,7 +1,7 @@ /*! - * Bootstrap-select v1.6.0 (http://silviomoreto.github.io/bootstrap-select/) + * Bootstrap-select v1.6.3 (http://silviomoreto.github.io/bootstrap-select/) * * Copyright 2013-2014 bootstrap-select * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) */ -!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Nic nie zaznaczono",noneResultsText:"Brak wyników wyszukiwania",countSelectedText:"Zaznaczono {0} z {1}",maxOptionsText:["Osiągnięto limit ({n} {var} max)","Limit grupy osiągnięty ({n} {var} max)",["elementy","element"]],multipleSeparator:", "}}(jQuery); \ No newline at end of file +!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Nic nie zaznaczono",noneResultsText:"Brak wyników wyszukiwania",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 index 01da58ea4..ddd9d635f 100644 --- 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 @@ -1,5 +1,5 @@ /*! - * Bootstrap-select v1.6.0 (http://silviomoreto.github.io/bootstrap-select/) + * Bootstrap-select v1.6.3 (http://silviomoreto.github.io/bootstrap-select/) * * Copyright 2013-2014 bootstrap-select * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) 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 index 8594d7837..1eb5812c5 100644 --- 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 @@ -1,5 +1,5 @@ /*! - * Bootstrap-select v1.6.0 (http://silviomoreto.github.io/bootstrap-select/) + * Bootstrap-select v1.6.3 (http://silviomoreto.github.io/bootstrap-select/) * * Copyright 2013-2014 bootstrap-select * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) 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 new file mode 100644 index 000000000..cc68a0446 --- /dev/null +++ b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ro_RO.js @@ -0,0 +1,15 @@ +/*! + * Bootstrap-select v1.6.3 (http://silviomoreto.github.io/bootstrap-select/) + * + * Copyright 2013-2014 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +(function ($) { + $.fn.selectpicker.defaults = { + noneSelectedText: 'Nu a fost selectat nimic', + noneResultsText: 'Nu exista niciun rezultat', + 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 new file mode 100644 index 000000000..fdcdbf697 --- /dev/null +++ b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ro_RO.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap-select v1.6.3 (http://silviomoreto.github.io/bootstrap-select/) + * + * Copyright 2013-2014 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Nu a fost selectat nimic",noneResultsText:"Nu exista niciun rezultat",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 index d7b1f2ff8..0f3ecf586 100644 --- 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 @@ -1,5 +1,5 @@ /*! - * Bootstrap-select v1.6.0 (http://silviomoreto.github.io/bootstrap-select/) + * Bootstrap-select v1.6.3 (http://silviomoreto.github.io/bootstrap-select/) * * Copyright 2013-2014 bootstrap-select * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) @@ -7,7 +7,7 @@ (function ($) { $.fn.selectpicker.defaults = { noneSelectedText: 'Ничего не выбрано', - noneResultsText: 'Не найдено совпадений', + noneResultsText: 'Совпадений не найдено', countSelectedText: 'Выбрано {0} из {1}', maxOptionsText: ['Достигнут предел ({n} {var} максимум)', 'Достигнут предел в группе ({n} {var} максимум)', ['items', 'item']], multipleSeparator: ', ' 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 index ff042b708..3976edb1f 100644 --- 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 @@ -1,7 +1,7 @@ /*! - * Bootstrap-select v1.6.0 (http://silviomoreto.github.io/bootstrap-select/) + * Bootstrap-select v1.6.3 (http://silviomoreto.github.io/bootstrap-select/) * * Copyright 2013-2014 bootstrap-select * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) */ -!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Ничего не выбрано",noneResultsText:"Не найдено совпадений",countSelectedText:"Выбрано {0} из {1}",maxOptionsText:["Достигнут предел ({n} {var} максимум)","Достигнут предел в группе ({n} {var} максимум)",["items","item"]],multipleSeparator:", "}}(jQuery); \ No newline at end of file +!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Ничего не выбрано",noneResultsText:"Совпадений не найдено",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-ua_UA.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ua_UA.js new file mode 100644 index 000000000..c7baa884a --- /dev/null +++ b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ua_UA.js @@ -0,0 +1,15 @@ +/*! + * Bootstrap-select v1.6.3 (http://silviomoreto.github.io/bootstrap-select/) + * + * Copyright 2013-2014 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +(function ($) { + $.fn.selectpicker.defaults = { + noneSelectedText: 'Нічого не вибрано', + noneResultsText: 'Збігів не знайдено', + 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 new file mode 100644 index 000000000..f367f21b2 --- /dev/null +++ b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ua_UA.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap-select v1.6.3 (http://silviomoreto.github.io/bootstrap-select/) + * + * Copyright 2013-2014 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Нічого не вибрано",noneResultsText:"Збігів не знайдено",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 index 199f8ca36..f185f2d6b 100644 --- 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 @@ -1,5 +1,5 @@ /*! - * Bootstrap-select v1.6.0 (http://silviomoreto.github.io/bootstrap-select/) + * Bootstrap-select v1.6.3 (http://silviomoreto.github.io/bootstrap-select/) * * Copyright 2013-2014 bootstrap-select * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) 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 index 112720ba1..86d18771f 100644 --- 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 @@ -1,5 +1,5 @@ /*! - * Bootstrap-select v1.6.0 (http://silviomoreto.github.io/bootstrap-select/) + * Bootstrap-select v1.6.3 (http://silviomoreto.github.io/bootstrap-select/) * * Copyright 2013-2014 bootstrap-select * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) 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 new file mode 100644 index 000000000..31bb791e0 --- /dev/null +++ b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-zh_TW.js @@ -0,0 +1,17 @@ +/*! + * Bootstrap-select v1.6.3 (http://silviomoreto.github.io/bootstrap-select/) + * + * Copyright 2013-2014 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +(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 new file mode 100644 index 000000000..78d90dc82 --- /dev/null +++ b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-zh_TW.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap-select v1.6.3 (http://silviomoreto.github.io/bootstrap-select/) + * + * Copyright 2013-2014 bootstrap-select + * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) + */ +!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/bootstrap-select.js b/modoboa/bower_components/bootstrap-select/js/bootstrap-select.js index 22cb743a5..caa9615df 100644 --- a/modoboa/bower_components/bootstrap-select/js/bootstrap-select.js +++ b/modoboa/bower_components/bootstrap-select/js/bootstrap-select.js @@ -1,11 +1,74 @@ (function ($) { - 'use strict'; + // Case insensitive search $.expr[':'].icontains = function (obj, index, meta) { - return $(obj).text().toUpperCase().indexOf(meta[3].toUpperCase()) >= 0; + return icontains($(obj).text(), meta[3]); }; + // Case and accent insensitive search + $.expr[':'].aicontains = function (obj, index, meta) { + return icontains($(obj).data('normalizedText') || $(obj).text(), meta[3]); + }; + + /** + * Actual implementation of the case insensitive search. + * @access private + * @param {String} haystack + * @param {String} needle + * @returns {boolean} + */ + function icontains(haystack, needle) { + return haystack.toUpperCase().indexOf(needle.toUpperCase()) > -1; + } + + /** + * 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(); @@ -19,7 +82,8 @@ this.$lis = null; this.options = options; - //If we have no title yet, check the attribute 'title' (this is missed by jq as its not a data-attribute + // 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'); } @@ -31,26 +95,38 @@ this.setStyle = Selectpicker.prototype.setStyle; this.selectAll = Selectpicker.prototype.selectAll; this.deselectAll = Selectpicker.prototype.deselectAll; - this.destroy = Selectpicker.prototype.destroy; - this.remove = Selectpicker.prototype.destroy; + 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.6.0'; + Selectpicker.VERSION = '1.6.3'; // part of this is duplicated in i18n/defaults-en_US.js. Make sure to update both. Selectpicker.DEFAULTS = { + noneSelectedText: 'Nothing selected', + noneResultsText: 'No results match', + countSelectedText: function (numSelected, numTotal) { + return (numSelected == 1) ? "{0} item selected" : "{0} items selected"; + }, + maxOptionsText: function (numAll, numGroup) { + var arr = []; + + arr[0] = (numAll == 1) ? 'Limit reached ({n} item max)' : 'Limit reached ({n} items max)'; + arr[1] = (numGroup == 1) ? 'Group limit reached ({n} item max)' : 'Group limit reached ({n} items max)'; + + return arr; + }, + selectAllText: 'Select All', + deselectAllText: 'Deselect All', + multipleSeparator: ', ', style: 'btn-default', size: 'auto', title: null, selectedTextFormat: 'values', - noneSelectedText: 'Nothing selected', - noneResultsText: 'No results match', - countSelectedText: '{0} of {1} selected', - maxOptionsText: ['Limit reached ({n} {var} max)', 'Group limit reached ({n} {var} max)', ['items', 'item']], width: false, container: false, hideDisabled: false, @@ -61,11 +137,13 @@ header: false, liveSearch: false, actionsBox: false, - multipleSeparator: ', ', iconBase: 'glyphicon', tickIcon: 'glyphicon-ok', maxOptions: false, - mobile: false + mobile: false, + selectOnTab: false, + dropdownAlignRight: false, + searchAccentInsensitive: false }; Selectpicker.prototype = { @@ -85,7 +163,10 @@ this.$button = this.$newElement.find('> button'); this.$searchbox = this.$newElement.find('input'); - if (id !== undefined) { + 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(); @@ -107,36 +188,39 @@ }, createDropdown: function () { - //If we are multiple, then add the show-tick class by default - var multiple = this.multiple ? ' show-tick' : ''; - var inputGroup = this.$element.parent().hasClass('input-group') ? ' input-group-btn' : ''; - var autofocus = this.autofocus ? ' autofocus' : ''; + // 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' : '', + btnSize = this.$element.parents().hasClass('form-group-lg') ? ' btn-lg' : (this.$element.parents().hasClass('form-group-sm') ? ' btn-sm' : ''); + // Elements var header = this.options.header ? '×' + this.options.header + '' : ''; - var searchbox = this.options.liveSearch ? '' : ''; + var searchbox = this.options.liveSearch ? '' : ''; var actionsbox = this.options.actionsBox ? '' + - '' + - '' + - 'Select All' + - '' + - '' + - 'Deselect All' + - '' + - '' + - '' : ''; + '' + + '' + + this.options.selectAllText + + '' + + '' + + this.options.deselectAllText + + '' + + '' + + '' : ''; var drop = '' + - '' + - ' ' + - '' + - '' + - '' + - header + - searchbox + - actionsbox + - '' + - '' + - '' + - ''; + '' + + ' ' + + '' + + '' + + '' + + header + + searchbox + + actionsbox + + '' + + '' + + '' + + ''; return $(drop); }, @@ -162,94 +246,108 @@ createLi: function () { var that = this, - _liA = [], - _liHtml = '', + _li = [], optID = 0; + // Helper functions + /** + * @param content + * @param [index] + * @param [classes] + * @returns {string} + */ + var generateLI = function (content, index, classes) { + return '' + content + ''; + }; + + /** + * @param text + * @param [classes] + * @param [inline] + * @param [optgroup] + * @returns {string} + */ + var generateA = function (text, classes, inline, optgroup) { + var normText = normalizeToBase(htmlEscape(text)); + return '' + text + + '' + + ''; + }; + this.$element.find('option').each(function () { var $this = $(this); - //Get the class and text for the option - var optionClass = $this.attr('class') || ''; - var inline = $this.attr('style') || ''; - var text = $this.data('content') ? $this.data('content') : $this.html(); - var subtext = $this.data('subtext') !== undefined ? '' + $this.data('subtext') + '' : ''; - var icon = $this.data('icon') !== undefined ? ' ' : ''; - if (icon !== '' && ($this.is(':disabled') || $this.parent().is(':disabled'))) { + // Get the class and text for the option + var optionClass = $this.attr('class') || '', + inline = $this.attr('style'), + text = $this.data('content') ? $this.data('content') : $this.html(), + subtext = typeof $this.data('subtext') !== 'undefined' ? '' + $this.data('subtext') + '' : '', + icon = typeof $this.data('icon') !== 'undefined' ? ' ' : '', + isDisabled = $this.is(':disabled') || $this.parent().is(':disabled'), + index = $this[0].index; + if (icon !== '' && isDisabled) { icon = '' + icon + ''; } if (!$this.data('content')) { - //Prepend any icon and append any subtext to the main text. + // Prepend any icon and append any subtext to the main text. text = icon + '' + text + subtext + ''; } - if (that.options.hideDisabled && ($this.is(':disabled') || $this.parent().is(':disabled'))) { - _liA.push(''); - } else if ($this.parent().is('optgroup') && $this.data('divider') !== true) { - if ($this.index() === 0) { - //Get the opt group label - var label = $this.parent().attr('label'); - var labelSubtext = $this.parent().data('subtext') !== undefined ? '' + $this.parent().data('subtext') + '' : ''; - var labelIcon = $this.parent().data('icon') ? ' ' : ''; - label = labelIcon + '' + label + labelSubtext + ''; + if (that.options.hideDisabled && isDisabled) { + return; + } + if ($this.parent().is('optgroup') && $this.data('divider') !== true) { + if ($this.index() === 0) { // Is it the first option of the optgroup? optID += 1; - if ($this[0].index !== 0) { - _liA.push( - '' + - '' + label + '' + - that.createA(text, 'opt ' + optionClass, inline, optID) - ); - } else { - _liA.push( - '' + label + '' + - that.createA(text, 'opt ' + optionClass, inline, optID)); + // Get the opt group label + var label = $this.parent().attr('label'); + var labelSubtext = typeof $this.parent().data('subtext') !== 'undefined' ? '' + $this.parent().data('subtext') + '' : ''; + var 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? + _li.push(generateLI('', null, 'divider')); } - } else { - _liA.push(that.createA(text, 'opt ' + optionClass, inline, optID)); + + _li.push(generateLI(label, null, 'dropdown-header')); } + + _li.push(generateLI(generateA(text, 'opt ' + optionClass, inline, optID), index)); } else if ($this.data('divider') === true) { - _liA.push(''); - } else if ($(this).data('hidden') === true) { - _liA.push(''); + _li.push(generateLI('', index, 'divider')); + } else if ($this.data('hidden') === true) { + _li.push(generateLI(generateA(text, optionClass, inline), index, 'hide is-hidden')); } else { - _liA.push(that.createA(text, optionClass, inline)); + _li.push(generateLI(generateA(text, optionClass, inline), index)); } }); - $.each(_liA, function (i, item) { - var hide = item === '' ? 'class="hide is-hidden"' : ''; - _liHtml += '' + item + ''; - }); - - //If we are not multiple, and we dont have a selected item, and we dont have a title, select the first element so something is set in the button + //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 $(_liHtml); + return $(_li.join('')); + }, + + findLis: function () { + if (this.$lis == null) this.$lis = this.$menu.find('li'); + return this.$lis; }, /** - * - * @param text - * @param classes - * @param inline - * @param [optgroup] - * @returns {string} - */ - createA: function (text, classes, inline, optgroup) { - return '' + - text + - '' + - ''; - }, - - /** - * @param [updateLi] + * @param [updateLi] defaults to true */ render: function (updateLi) { var that = this; @@ -263,8 +361,8 @@ } this.tabIndex(); - - var selectedItems = this.$element.find('option:selected').map(function () { + var notDisabled = this.options.hideDisabled ? ':not([disabled])' : ''; + var selectedItems = this.$element.find('option:selected' + notDisabled).map(function () { var $this = $(this); var icon = $this.data('icon') && that.options.showIcon ? ' ' : ''; var subtext; @@ -275,7 +373,7 @@ } if ($this.data('content') && that.options.showContent) { return $this.data('content'); - } else if ($this.attr('title') !== undefined) { + } else if (typeof $this.attr('title') !== 'undefined') { return $this.attr('title'); } else { return icon + $this.html() + subtext; @@ -289,9 +387,11 @@ //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('>'); - var notDisabled = this.options.hideDisabled ? ':not([disabled])' : ''; if ((max.length > 1 && selectedItems.length > max[1]) || (max.length == 1 && selectedItems.length >= 2)) { - title = this.options.countSelectedText.replace('{0}', selectedItems.length).replace('{1}', this.$element.find('option:not([data-divider="true"], [data-hidden="true"])' + notDisabled).length); + 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()); } } @@ -303,10 +403,10 @@ //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 = this.options.title !== undefined ? this.options.title : this.options.noneSelectedText; + title = typeof this.options.title !== 'undefined' ? this.options.title : this.options.noneSelectedText; } - this.$button.attr('title', $.trim($("").html(title).text()).replace(/\s\s+/g, ' ')); + this.$button.attr('title', htmlEscape(title)); this.$newElement.find('.filter-option').html(title); }, @@ -336,9 +436,9 @@ var $selectClone = this.$menu.parent().clone().find('> .dropdown-toggle').prop('autofocus', false).end().appendTo('body'), $menuClone = $selectClone.addClass('open').find('> .dropdown-menu'), - liHeight = $menuClone.find('li > a').outerHeight(), + liHeight = $menuClone.find('li').not('.divider').not('.dropdown-header').filter(':visible').children('a').outerHeight(), headerHeight = this.options.header ? $menuClone.find('.popover-title').outerHeight() : 0, - searchHeight = this.options.liveSearch ? $menuClone.find('.bootstrap-select-searchbox').outerHeight() : 0, + searchHeight = this.options.liveSearch ? $menuClone.find('.bs-searchbox').outerHeight() : 0, actionsHeight = this.options.actionsBox ? $menuClone.find('.bs-actionsbox').outerHeight() : 0; $selectClone.remove(); @@ -351,6 +451,7 @@ }, setSize: function () { + this.findLis(); var that = this, menu = this.$menu, menuInner = menu.find('.inner'), @@ -359,19 +460,19 @@ headerHeight = this.$newElement.data('headerHeight'), searchHeight = this.$newElement.data('searchHeight'), actionsHeight = this.$newElement.data('actionsHeight'), - divHeight = menu.find('li .divider').outerHeight(true), + divHeight = this.$lis.filter('.divider').outerHeight(true), menuPadding = parseInt(menu.css('padding-top')) + parseInt(menu.css('padding-bottom')) + parseInt(menu.css('border-top-width')) + parseInt(menu.css('border-bottom-width')), - notDisabled = this.options.hideDisabled ? ':not(.disabled)' : '', + notDisabled = this.options.hideDisabled ? ', .disabled' : '', $window = $(window), menuExtras = menuPadding + parseInt(menu.css('margin-top')) + parseInt(menu.css('margin-bottom')) + 2, menuHeight, selectOffsetTop, selectOffsetBot, posVert = function () { - //JQuery defines a scrollTop function, but in pure JS it's a property + // JQuery defines a scrollTop function, but in pure JS it's a property //noinspection JSValidateTypes selectOffsetTop = that.$newElement.offset().top - $window.scrollTop(); selectOffsetBot = $window.height() - selectOffsetTop - selectHeight; @@ -394,24 +495,33 @@ menuHeight = selectOffsetTop - menuExtras; } - if ((lisVis.length + lisVis.find('dt').length) > 3) { + if ((lisVis.length + lisVis.filter('.dropdown-header').length) > 3) { minHeight = liHeight * 3 + menuExtras - 2; } else { minHeight = 0; } - menu.css({'max-height': menuHeight + 'px', 'overflow': 'hidden', 'min-height': minHeight + headerHeight + searchHeight + actionsHeight + 'px'}); - menuInner.css({'max-height': menuHeight - headerHeight - searchHeight - actionsHeight - menuPadding + 'px', 'overflow-y': 'auto', 'min-height': Math.max(minHeight - menuPadding, 0) + 'px'}); + menu.css({ + 'max-height': menuHeight + 'px', + 'overflow': 'hidden', + 'min-height': minHeight + headerHeight + searchHeight + actionsHeight + 'px' + }); + menuInner.css({ + 'max-height': menuHeight - headerHeight - searchHeight - actionsHeight - 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').on('resize.getSize', getSize); $(window).off('scroll.getSize').on('scroll.getSize', getSize); } else if (this.options.size && this.options.size != 'auto' && menu.find('li' + notDisabled).length > this.options.size) { - var optIndex = menu.find('li' + notDisabled + ' > *').not('.div-contain').slice(0, this.options.size).last().parent().index(); - var divLength = menu.find('li').slice(0, optIndex + 1).find('.div-contain').length; + var optIndex = this.$lis.not('.divider' + notDisabled).find(' > *').slice(0, this.options.size).last().parent().index(); + var divLength = this.$lis.slice(0, optIndex + 1).filter('.divider').length; menuHeight = liHeight * this.options.size + divLength * divHeight + menuPadding; if (that.options.dropupAuto) { + //noinspection JSUnusedAssignment this.$newElement.toggleClass('dropup', (selectOffsetTop > selectOffsetBot) && (menuHeight < menu.height())); } menu.css({'max-height': menuHeight + headerHeight + searchHeight + actionsHeight + 'px', 'overflow': 'hidden'}); @@ -460,7 +570,12 @@ $drop.addClass($element.attr('class').replace(/form-control/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'}); + $drop.css({ + 'top': pos.top + actualHeight, + 'left': pos.left, + 'width': $element[0].offsetWidth, + 'position': 'absolute' + }); }; this.$newElement.on('click', function () { if (that.isDisabled()) { @@ -484,40 +599,17 @@ }); }, - mobile: function () { - this.$element.addClass('mobile-device').appendTo(this.$newElement); - if (this.options.container) this.$menu.hide(); - }, - - refresh: function () { - this.$lis = null; - this.reloadLi(); - this.render(); - this.setWidth(); - this.setStyle(); - this.checkDisabled(); - this.liHeight(); - }, - - update: function () { - this.reloadLi(); - this.setWidth(); - this.setStyle(); - this.checkDisabled(); - this.liHeight(); - }, - setSelected: function (index, selected) { - if (this.$lis == null) this.$lis = this.$menu.find('li'); - $(this.$lis[index]).toggleClass('selected', selected); + this.findLis(); + this.$lis.filter('[data-original-index="' + index + '"]').toggleClass('selected', selected); }, setDisabled: function (index, disabled) { - if (this.$lis == null) this.$lis = this.$menu.find('li'); + this.findLis(); if (disabled) { - $(this.$lis[index]).addClass('disabled').find('a').attr('href', '#').attr('tabindex', -1); + this.$lis.filter('[data-original-index="' + index + '"]').addClass('disabled').find('a').attr('href', '#').attr('tabindex', -1); } else { - $(this.$lis[index]).removeClass('disabled').find('a').removeAttr('href').attr('tabindex', 0); + this.$lis.filter('[data-original-index="' + index + '"]').removeClass('disabled').find('a').removeAttr('href').attr('tabindex', 0); } }, @@ -569,19 +661,20 @@ }); this.$menu.on('click', 'li a', function (e) { - var clickedIndex = $(this).parent().index(), + var $this = $(this), + clickedIndex = $this.parent().data('originalIndex'), prevValue = that.$element.val(), prevIndex = that.$element.prop('selectedIndex'); - //Dont close on multi choice menu + // Don't close on multi choice menu if (that.multiple) { e.stopPropagation(); } e.preventDefault(); - //Dont run if we have been disabled - if (!that.isDisabled() && !$(this).parent().hasClass('disabled')) { + //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'), @@ -589,26 +682,19 @@ maxOptions = that.options.maxOptions, maxOptionsGrp = $optgroup.data('maxOptions') || false; - //Deselect all others if not multi select box - if (!that.multiple) { + 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. - else { + } else { // Toggle the one we have chosen if we are multi select. $option.prop('selected', !state); that.setSelected(clickedIndex, !state); - $(this).blur(); + $this.blur(); if ((maxOptions !== false) || (maxOptionsGrp !== false)) { var maxReached = maxOptions < $options.filter(':selected').length, - maxReachedGrp = maxOptionsGrp < $optgroup.find('option:selected').length, - maxOptionsArr = that.options.maxOptionsText, - maxTxt = maxOptionsArr[0].replace('{n}', maxOptions), - maxTxtGrp = maxOptionsArr[1].replace('{n}', maxOptionsGrp), - $notify = $(''); + maxReachedGrp = maxOptionsGrp < $optgroup.find('option:selected').length; if ((maxOptions && maxReached) || (maxOptionsGrp && maxReachedGrp)) { if (maxOptions && maxOptions == 1) { @@ -619,13 +705,19 @@ } else if (maxOptionsGrp && maxOptionsGrp == 1) { $optgroup.find('option:selected').prop('selected', false); $option.prop('selected', true); - var optgroupID = $(this).data('optgroup'); + var optgroupID = $this.data('optgroup'); - that.$menu.find('.selected').has('a[data-optgroup="'+optgroupID+'"]').removeClass('selected'); + that.$menu.find('.selected').has('a[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]); @@ -670,7 +762,7 @@ } }); - this.$menu.on('click', 'li.disabled a, li dt, li .div-contain, .popover-title, .popover-title :not(.close)', function (e) { + this.$menu.on('click', 'li.disabled a, .popover-title, .popover-title :not(.close)', function (e) { if (e.target == this) { e.preventDefault(); e.stopPropagation(); @@ -682,6 +774,16 @@ } }); + this.$menu.on('click', 'li.divider, li.dropdown-header', function (e) { + e.preventDefault(); + e.stopPropagation(); + if (!that.options.liveSearch) { + that.$button.focus(); + } else { + that.$searchbox.focus(); + } + }); + this.$menu.on('click', '.popover-title .close', function () { that.$button.focus(); }); @@ -718,7 +820,7 @@ var that = this, no_results = $(''); - this.$newElement.on('click.dropdown.data-api', function () { + this.$newElement.on('click.dropdown.data-api touchstart.dropdown.data-api', function () { that.$menu.find('.active').removeClass('active'); if (!!that.$searchbox.val()) { that.$searchbox.val(''); @@ -731,13 +833,22 @@ }, 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()) { - that.$lis.not('.is-hidden').removeClass('hide').find('a').not(':icontains(' + that.$searchbox.val() + ')').parent().addClass('hide'); + + if (that.options.searchAccentInsensitive) { + that.$lis.not('.is-hidden').removeClass('hide').find('a').not(':aicontains(' + normalizeToBase(that.$searchbox.val()) + ')').parent().addClass('hide'); + } else { + that.$lis.not('.is-hidden').removeClass('hide').find('a').not(':icontains(' + that.$searchbox.val() + ')').parent().addClass('hide'); + } if (!that.$menu.find('li').filter(':visible:not(.no-results)').length) { if (!!no_results.parent().length) no_results.remove(); - no_results.html(that.options.noneResultsText + ' "' + that.$searchbox.val() + '"').show(); + no_results.html(that.options.noneResultsText + ' "' + htmlEscape(that.$searchbox.val()) + '"').show(); that.$menu.find('li').last().after(no_results); } else if (!!no_results.parent().length) { no_results.remove(); @@ -752,22 +863,11 @@ that.$menu.find('li').filter(':visible:not(.divider)').eq(0).addClass('active').find('a').focus(); $(this).focus(); }); - - this.$menu.on('mouseenter', 'a', function (e) { - that.$menu.find('.active').removeClass('active'); - $(e.currentTarget).parent().not('.disabled').addClass('active'); - }); - - this.$menu.on('mouseleave', 'a', function () { - that.$menu.find('.active').removeClass('active'); - }); }, val: function (value) { - - if (value !== undefined) { + if (typeof value !== 'undefined') { this.$element.val(value); - this.$element.change(); this.render(); return this.$element; @@ -777,52 +877,84 @@ }, selectAll: function () { - if (this.$lis == null) this.$lis = this.$menu.find('li'); - this.$element.find('option:enabled').prop('selected', true); - $(this.$lis).not('.disabled').addClass('selected'); - this.render(false); + this.findLis(); + this.$lis.not('.divider').not('.disabled').not('.selected').filter(':visible').find('a').click(); }, deselectAll: function () { - if (this.$lis == null) this.$lis = this.$menu.find('li'); - this.$element.find('option:enabled').prop('selected', false); - $(this.$lis).not('.disabled').removeClass('selected'); - this.render(false); + this.findLis(); + this.$lis.not('.divider').not('.disabled').filter('.selected').filter(':visible').find('a').click(); }, keydown: function (e) { - var $this, + var $this = $(this), + $parent = ($this.is('input')) ? $this.parent().parent() : $this.parent(), $items, - $parent, + that = $parent.data('this'), index, next, first, last, prev, nextPrev, - that, prevIndex, isActive, 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' + 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' }; - $this = $(this); - - $parent = $this.parent(); - - if ($this.is('input')) $parent = $this.parent().parent(); - - that = $parent.data('this'); - if (that.options.liveSearch) $parent = $this.parent().parent(); if (that.options.container) $parent = that.$menu; - $items = $('[role=menu] li:not(.divider) a', $parent); + $items = $('[role=menu] li a', $parent); isActive = that.$menu.parent().hasClass('open'); @@ -843,10 +975,14 @@ that.$menu.parent().removeClass('open'); that.$button.focus(); } - $items = $('[role=menu] li:not(.divider):visible', $parent); + $items = $('[role=menu] li:not(.divider):not(.dropdown-header):visible', $parent); if (!$this.val() && !/(38|40)/.test(e.keyCode.toString(10))) { if ($items.filter('.active').length === 0) { - $items = that.$newElement.find('li').filter(':icontains(' + keyCodeMap[e.keyCode] + ')'); + if (that.options.searchAccentInsensitive) { + $items = that.$newElement.find('li').filter(':aicontains(' + normalizeToBase(keyCodeMap[e.keyCode]) + ')'); + } else { + $items = that.$newElement.find('li').filter(':icontains(' + keyCodeMap[e.keyCode] + ')'); + } } } } @@ -854,7 +990,6 @@ if (!$items.length) return; if (/(38|40)/.test(e.keyCode.toString(10))) { - index = $items.index($items.filter(':focus')); first = $items.parent(':not(.disabled):visible').first().index(); last = $items.parent(':not(.disabled):visible').last().index(); @@ -907,7 +1042,6 @@ } } else if (!$this.is('input')) { - var keyIndex = [], count, prevKey; @@ -937,8 +1071,8 @@ $items.eq(keyIndex[count - 1]).focus(); } - // Select focused option if "Enter", "Spacebar" are pressed inside the menu. - if (/(13|32)/.test(e.keyCode.toString(10)) && isActive) { + // 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) { $(':focus').click(); @@ -953,7 +1087,29 @@ that.$menu.parent().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.reloadLi(); + this.render(); + this.setWidth(); + this.setStyle(); + this.checkDisabled(); + this.liHeight(); + }, + + update: function () { + this.reloadLi(); + this.setWidth(); + this.setStyle(); + this.checkDisabled(); + this.liHeight(); }, hide: function () { @@ -964,24 +1120,40 @@ this.$newElement.show(); }, - destroy: function () { + remove: function () { this.$newElement.remove(); this.$element.remove(); } }; - $.fn.selectpicker = function (option, event) { - //get the args of the outer function.. + // 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 + //noinspection JSDuplicatedDeclaration + var _option = option, + option = args[0], + event = args[1]; + [].shift.apply(args); + + // This fixes a bug in the js implementation on android 2.3 #715 + if (typeof option == 'undefined') { + option = _option; + } + var value; var chain = this.each(function () { - if ($(this).is('select')) { - var $this = $(this), - data = $this.data('selectpicker'), + var $this = $(this); + if ($this.is('select')) { + var data = $this.data('selectpicker'), options = typeof option == 'object' && option; if (!data) { - $this.data('selectpicker', (data = new Selectpicker(this, $.extend({}, Selectpicker.DEFAULTS, $.fn.selectpicker.defaults || {}, $this.data(), options), event))); + 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)) { @@ -991,14 +1163,10 @@ } if (typeof option == 'string') { - //Copy the value of option, as once we shift the arguments - //it also shifts the value of option. - var property = option; - if (data[property] instanceof Function) { - [].shift.apply(args); - value = data[property].apply(data, args); + if (data[option] instanceof Function) { + value = data[option].apply(data, args); } else { - value = data.options[property]; + value = data.options[option]; } } } @@ -1010,15 +1178,32 @@ } 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], .bootstrap-select-searchbox input', Selectpicker.prototype.keydown) - .on('focusin.modal', '.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role=menu], .bootstrap-select-searchbox input', function (e) { + .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-en_US.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-en_US.js index 8da80640e..197e6ae8c 100644 --- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-en_US.js +++ b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-en_US.js @@ -7,8 +7,19 @@ $.fn.selectpicker.defaults = { noneSelectedText: 'Nothing selected', noneResultsText: 'No results match', - countSelectedText: '{0} of {1} selected', - maxOptionsText: ['Limit reached ({n} {var} max)', 'Group limit reached ({n} {var} max)', ['items', 'item']], + countSelectedText: function (numSelected, numTotal) { + return (numSelected == 1) ? "{0} item selected" : "{0} items selected"; + }, + maxOptionsText: function (numAll, numGroup) { + var arr = []; + + arr[0] = (numAll == 1) ? 'Limit reached ({n} item max)' : 'Limit reached ({n} items max)'; + arr[1] = (numGroup == 1) ? 'Group limit reached ({n} item max)' : 'Group limit reached ({n} items max)'; + + return arr; + }, + selectAllText: 'Select All', + deselectAllText: 'Deselect All', 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 index 8942bf6ce..53eab611c 100644 --- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-fr_FR.js +++ b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-fr_FR.js @@ -7,8 +7,17 @@ $.fn.selectpicker.defaults = { noneSelectedText: 'Aucune sélection', noneResultsText: 'Aucun résultat', - countSelectedText: '{0} sur {1} sélection(s)', - maxOptionsText: ['Limite atteinte ({n} {var} max)', 'Limite du groupe atteinte ({n} {var} max)', ['éléments', 'élément']], + countSelectedText: function (numSelected, numTotal) { + return (numSelected > 1) ? "{0} éléments sélectionés" : "{0} élément sélectioné"; + }, + maxOptionsText: function (numAll, numGroup) { + var arr = []; + + arr[0] = (numAll > 1) ? 'Limite atteinte ({n} éléments max)' : 'Limite atteinte ({n} élément max)'; + arr[1] = (numGroup > 1) ? 'Limite du groupe atteinte ({n} éléments max)' : 'Limite du groupe atteinte ({n} élément max)'; + + return arr; + }, 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 index 165fdb390..6a6fe45f8 100644 --- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-pl_PL.js +++ b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-pl_PL.js @@ -9,6 +9,8 @@ noneResultsText: 'Brak wyników wyszukiwania', 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-ro_RO.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-ro_RO.js new file mode 100644 index 000000000..e234ccc95 --- /dev/null +++ b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-ro_RO.js @@ -0,0 +1,15 @@ +/* + * 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', + 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 index 75e5b2750..bff703bad 100644 --- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-ru_RU.js +++ b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-ru_RU.js @@ -6,7 +6,7 @@ (function ($) { $.fn.selectpicker.defaults = { noneSelectedText: 'Ничего не выбрано', - noneResultsText: 'Не найдено совпадений', + noneResultsText: 'Совпадений не найдено', countSelectedText: 'Выбрано {0} из {1}', maxOptionsText: ['Достигнут предел ({n} {var} максимум)', 'Достигнут предел в группе ({n} {var} максимум)', ['items', 'item']], multipleSeparator: ', ' 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 new file mode 100644 index 000000000..d7d59639c --- /dev/null +++ b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-ua_UA.js @@ -0,0 +1,14 @@ +/* + * Translated default messages for bootstrap-select. + * Locale: UA (Ukrainian; Українська) + * Region: UA (Ukraine) + */ +(function ($) { + $.fn.selectpicker.defaults = { + noneSelectedText: 'Нічого не вибрано', + noneResultsText: 'Збігів не знайдено', + countSelectedText: 'Вибрано {0} із {1}', + maxOptionsText: ['Досягнута межа ({n} {var} максимум)', 'Досягнута межа в групі ({n} {var} максимум)', ['items', 'item']], + 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 new file mode 100644 index 000000000..28d2a1ed8 --- /dev/null +++ b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-zh_TW.js @@ -0,0 +1,16 @@ +/* + * 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 index 1f826dfc8..65956058c 100644 --- a/modoboa/bower_components/bootstrap-select/less/bootstrap-select.less +++ b/modoboa/bower_components/bootstrap-select/less/bootstrap-select.less @@ -1,43 +1,75 @@ +@import "variables"; + +// Mixins +.cursor-disabled() { + cursor: not-allowed; +} + +// Rules .bootstrap-select { /*width: 220px\9; IE8 and below*/ //noinspection CssShorthandPropertyValue width: 220px \0; /*IE9 and below*/ - & > .btn { + // The selectpicker button + > .btn { width: 100%; padding-right: 25px; } + // Error display .error & .btn { - border: 1px solid #b94a48; + border: 1px solid @color-red-error; + } + + // Error display + .control-group.error & .dropdown-toggle { + border-color: @color-red-error; } &.fit-width { width: auto !important; } -} -.bootstrap-select.btn-group:not(.input-group-btn), -.bootstrap-select.btn-group[class*="span"] { - float: none; - display: inline-block; - margin-bottom: 10px; - margin-left: 0; + &:not([class*="col-"]):not([class*="form-control"]):not(.input-group-btn) { + width: @width-default; + } + + .btn: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%; + } } -.bootstrap-select.btn-group.pull-right, -.bootstrap-select.btn-group[class*="span"].pull-right, -.row-fluid .bootstrap-select.btn-group[class*="span"].pull-right { - float: right; -} - +// 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-fluid &[class*="col-"] { + &.dropdown-menu-right { + float: right; + } + } + .form-search &, .form-inline &, .form-horizontal &, @@ -45,6 +77,17 @@ 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%; + } + .input-append & { margin-left: -1px; } @@ -52,139 +95,140 @@ .input-prepend & { margin-right: -1px; } -} -.bootstrap-select:not([class*="span"]):not([class*="col-"]):not([class*="form-control"]):not(.input-group-btn) { - width: 220px; -} + > .disabled { + .cursor-disabled(); -.bootstrap-select.form-control:not([class*="span"]) { - width: 100%; -} - -.bootstrap-select.show-menu-arrow.open > .btn { - z-index: 2051; -} - -.bootstrap-select .btn:focus { - outline: thin dotted #333333 !important; - outline: 5px auto -webkit-focus-ring-color !important; - outline-offset: -2px; -} - -.bootstrap-select.btn-group .btn .filter-option { - display: inline-block; - overflow: hidden; - width: 100%; - text-align: left; -} - -.bootstrap-select.btn-group .btn .caret { - position: absolute; - top: 50%; - right: 12px; - margin-top: -2px; - vertical-align: middle; -} - -.bootstrap-select.btn-group > .disabled, -.bootstrap-select.btn-group .dropdown-menu li.disabled > a { - cursor: not-allowed; -} - -.bootstrap-select.btn-group > .disabled:focus { - outline: none !important; -} - -.bootstrap-select.btn-group[class*="span"] .btn { - width: 100%; -} - -.bootstrap-select.btn-group .dropdown-menu { - min-width: 100%; - z-index: 2000; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.bootstrap-select.btn-group .dropdown-menu.inner { - position: static; - border: 0; - padding: 0; - margin: 0; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} - -.bootstrap-select.btn-group .dropdown-menu dt { - display: block; - padding: 3px 20px; - cursor: default; -} - -.bootstrap-select.btn-group .div-contain { - overflow: hidden; -} - -.bootstrap-select.btn-group .dropdown-menu li { - position: relative; -} - -.bootstrap-select.btn-group .dropdown-menu li > a.opt { - position: relative; - padding-left: 35px; -} - -.bootstrap-select.btn-group .dropdown-menu li > a { - cursor: pointer; -} - -.bootstrap-select.btn-group .dropdown-menu li > dt small { - font-weight: normal; -} - -.bootstrap-select.btn-group.show-tick .dropdown-menu li.selected a i.check-mark { - position: absolute; - display: inline-block; - right: 15px; - margin-top: 2.5px; -} - -.bootstrap-select.btn-group .dropdown-menu li a i.check-mark { - display: none; -} - -.bootstrap-select.btn-group .dropdown-menu li a span.text { - display: inline-block; -} - -.bootstrap-select.btn-group.show-tick .dropdown-menu li a span.text { - margin-right: 34px; -} - -.bootstrap-select.btn-group .dropdown-menu li small { - padding-left: 0.5em; -} - -.bootstrap-select.btn-group .dropdown-menu { - & li:not(.disabled) > a:hover small, - & li:not(.disabled) > a:focus small, - & li.active:not(.disabled) > a small { - color: rgb(100, 177, 216); - color: rgba(100, 177, 216, 0.4); + &:focus { + outline: none !important; + } } - & li > dt small { - font-weight: normal; + // The selectpicker button + .btn { + .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-"] .btn { + width: 100%; + } + + // The selectpicker dropdown + .dropdown-menu { + min-width: 100%; + z-index: @zindex-select-dropdown; + box-sizing: border-box; + + &.inner { + position: static; + border: 0; + padding: 0; + margin: 0; + border-radius: 0; + box-shadow: none; + } + + li { + position: relative; + + &:not(.disabled) a:hover small, + &:not(.disabled) a:focus small, + &.active:not(.disabled) a small { + color: @color-blue-hover; + color: fade(@color-blue-hover, 40%); + } + + &.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; + } + + &.fit-width .btn { + .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 > .btn { + z-index: @zindex-select-dropdown + 1; + } + .dropdown-toggle { &:before { content: ''; @@ -192,8 +236,8 @@ border-right: 7px solid transparent; border-bottom-width: 7px; border-bottom-style: solid; - border-bottom-color: rgb(204, 204, 204); - border-bottom-color: rgba(204, 204, 204, 0.2); + border-bottom-color: @color-grey-arrow; + border-bottom-color: fade(@color-grey-arrow, 20%); position: absolute; bottom: -4px; left: 9px; @@ -212,38 +256,34 @@ } } - &.dropup { - .dropdown-toggle { - &:before { - bottom: auto; - top: -3px; - border-bottom: 0; - border-top-width: 7px; - border-top-style: solid; - border-top-color: rgb(204, 204, 204); - border-top-color: rgba(204, 204, 204, 0.2); - } + &.dropup .dropdown-toggle { + &:before { + bottom: auto; + top: -3px; + border-bottom: 0; + border-top-width: 7px; + border-top-style: solid; + border-top-color: @color-grey-arrow; + border-top-color: fade(@color-grey-arrow, 20%); + } - &:after { - bottom: auto; - top: -3px; - border-top: 6px solid #FFFFFF; - 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; - } + &.pull-right .dropdown-toggle { + &:before { + right: 12px; + left: auto; + } - &:after { - right: 13px; - left: auto; - } + &:after { + right: 13px; + left: auto; } } @@ -255,53 +295,14 @@ } } -.bootstrap-select.btn-group .no-results { - padding: 3px; - background: #f5f5f5; - margin: 0 5px; -} - -.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; - 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.fit-width .btn .filter-option { - position: static; -} - -.bootstrap-select.btn-group.fit-width .btn .caret { - position: static; - top: auto; - margin-top: -1px; -} - -.control-group.error .bootstrap-select .dropdown-toggle { - border-color: #b94a48; -} - -.bootstrap-select-searchbox, -.bootstrap-select .bs-actionsbox { +.bs-searchbox, +.bs-actionsbox { padding: 4px 8px; } -.bootstrap-select .bs-actionsbox { +.bs-actionsbox { float: left; width: 100%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; box-sizing: border-box; & .btn-group button { @@ -309,12 +310,12 @@ } } -.bootstrap-select-searchbox { +.bs-searchbox { & + .bs-actionsbox { padding: 0 8px 4px; } - & input, & .form-control { + & input.form-control { margin-bottom: 0; width: 100%; } diff --git a/modoboa/bower_components/bootstrap-select/less/variables.less b/modoboa/bower_components/bootstrap-select/less/variables.less new file mode 100644 index 000000000..3bdbcc790 --- /dev/null +++ b/modoboa/bower_components/bootstrap-select/less/variables.less @@ -0,0 +1,7 @@ +@color-red-error: rgb(185, 74, 72); +@color-blue-hover: rgb(100, 177, 216); +@color-grey-arrow: rgb(204, 204, 204); + +@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/bootstrap-select/package.json b/modoboa/bower_components/bootstrap-select/package.json index 7afbe4a8b..56431f83a 100644 --- a/modoboa/bower_components/bootstrap-select/package.json +++ b/modoboa/bower_components/bootstrap-select/package.json @@ -3,7 +3,7 @@ "title": "bootstrap-select", "filename": "bootstrap-select.js", "description": "A custom for Bootstrap using button dropdown as replacement", - "version": "1.6.0", + "version": "1.6.3", "homepage": "http://silviomoreto.github.io/bootstrap-select/", "author": { "name": "Silvio Moreto", @@ -43,22 +43,24 @@ "url": "https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE" }, "dependencies": { - "jquery": "1.8" + "jquery": ">=1.8" }, "devDependencies": { "grunt": "~0.4.5", - "grunt-contrib-jshint": "~0.10.0", - "grunt-contrib-watch": "~0.6.1", - "grunt-contrib-qunit": "~0.5.2", - "grunt-contrib-concat": "~0.4.0", - "grunt-contrib-uglify": "~0.5.0", - "grunt-contrib-less": "~0.11.3", - "grunt-contrib-csslint": "~0.2.0", - "grunt-contrib-clean": "~0.5.0", - "load-grunt-tasks": "~0.6.0", + "grunt-autoprefixer": "~1.0.0", "grunt-banner": "~0.2.3", + "grunt-contrib-clean": "~0.6.0", + "grunt-contrib-compress": "^0.12.0", + "grunt-contrib-concat": "~0.5.0", + "grunt-contrib-csslint": "~0.2.0", "grunt-contrib-cssmin": "~0.10.0", - "grunt-sed": "~0.1.1" + "grunt-contrib-jshint": "~0.10.0", + "grunt-contrib-less": "~0.11.3", + "grunt-contrib-qunit": "~0.5.2", + "grunt-contrib-uglify": "~0.5.0", + "grunt-contrib-watch": "~0.6.1", + "grunt-sed": "~0.1.1", + "load-grunt-tasks": "~0.6.0" }, "keywords": [ "form", diff --git a/modoboa/bower_components/bootstrap-select/test.html b/modoboa/bower_components/bootstrap-select/test.html index 4771ecb40..4a4c54ac8 100644 --- a/modoboa/bower_components/bootstrap-select/test.html +++ b/modoboa/bower_components/bootstrap-select/test.html @@ -5,42 +5,39 @@ + + + + + - - - - - - - + + + + Bootstrap-select usability tests + + + - Test bootstrap 3 form + "Basic" - + cow bull ox - + ASD Bla Ble @@ -49,16 +46,17 @@ + - multiple & max-option = 2 + "Basic" #2 (multiple max-option=1) - + cow bull ox - + ASD Bla Ble @@ -67,6 +65,140 @@ + + + + multiple, show-menu-arrow, & max-option = 2 + + + + chicken + turkey + duck + goose + + + + + + + + Lunch: + + + + Hot Dog, Fries and a Soda + Burger, Shake and a Smile + Sugar, Spice and all things nice + Baby Back Ribs + A really really long option made to illustrate an issue with the live search in an inline form + + + + + + + error + + + + pen + pencil + brush + + + + + + + + + Navbar + + + + + + + option1 + option2 + option3 + option4 + + + option1 + option2 + option3 + option4 + + + option1 + option2 + option3 + option4 + + + + + + + + + + + + Search + + + + + + + + + Hidden + + + Apple + Orange + + + Corn + Carrot + + + + + Apple + Banana + Orange + Pineapple + Apple2 + Banana2 + Orange2 + Pineapple2 + Apple2 + Banana2 + Orange2 + Pineapple2 + + Hide selected by disabling + Just select 1st element, click button and check list again +
Just select 1st element, click button and check list again