diff --git a/modoboa/bower_components/bootstrap-select/.bower.json b/modoboa/bower_components/bootstrap-select/.bower.json deleted file mode 100644 index aed6f7798..000000000 --- a/modoboa/bower_components/bootstrap-select/.bower.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "bootstrap-select", - "main": [ - "less/bootstrap-select.less", - "dist/css/bootstrap-select.css", - "dist/js/bootstrap-select.js" - ], - "version": "1.7.3", - "homepage": "http://silviomoreto.github.io/bootstrap-select", - "authors": [ - "silviomoreto" - ], - "keywords": [ - "form", - "bootstrap", - "select", - "replacement" - ], - "dependencies": { - "jquery": ">=1.8" - }, - "license": "MIT", - "ignore": [ - ".gitignore", - "CONTRIBUTING.md", - "Gruntfile.js", - "README.md", - "composer.json", - "package.json", - "test.html" - ], - "_release": "1.7.3", - "_resolution": { - "type": "version", - "tag": "v1.7.3", - "commit": "005d84efe1679d3c83f02bcd4a8cc5f89d500afc" - }, - "_source": "git://github.com/silviomoreto/bootstrap-select.git", - "_target": "1.7.3", - "_originalSource": "bootstrap-select", - "_direct": true -} \ No newline at end of file diff --git a/modoboa/bower_components/bootstrap-select/LICENSE b/modoboa/bower_components/bootstrap-select/LICENSE deleted file mode 100644 index abb940afa..000000000 --- a/modoboa/bower_components/bootstrap-select/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2013-2015 bootstrap-select - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/modoboa/bower_components/bootstrap-select/bootstrap-select-1.7.3.zip b/modoboa/bower_components/bootstrap-select/bootstrap-select-1.7.3.zip deleted file mode 100644 index db01bc080..000000000 Binary files a/modoboa/bower_components/bootstrap-select/bootstrap-select-1.7.3.zip and /dev/null differ diff --git a/modoboa/bower_components/bootstrap-select/bower.json b/modoboa/bower_components/bootstrap-select/bower.json deleted file mode 100644 index 6143da2fc..000000000 --- a/modoboa/bower_components/bootstrap-select/bower.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "bootstrap-select", - "main": [ - "less/bootstrap-select.less", - "dist/css/bootstrap-select.css", - "dist/js/bootstrap-select.js" - ], - "version": "1.7.2", - "homepage": "http://silviomoreto.github.io/bootstrap-select", - "authors": [ - "silviomoreto" - ], - "keywords": [ - "form", - "bootstrap", - "select", - "replacement" - ], - "dependencies": { - "jquery": ">=1.8" - }, - "license": "MIT", - "ignore": [ - ".gitignore", - "CONTRIBUTING.md", - "Gruntfile.js", - "README.md", - "composer.json", - "package.json", - "test.html" - ] -} diff --git a/modoboa/bower_components/bootstrap-select/dist/css/bootstrap-select.css b/modoboa/bower_components/bootstrap-select/dist/css/bootstrap-select.css deleted file mode 100644 index bac496798..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/css/bootstrap-select.css +++ /dev/null @@ -1,263 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ - -.bootstrap-select { - width: 220px \0; - /*IE9 and below*/ -} -.bootstrap-select > .dropdown-toggle { - width: 100%; - padding-right: 25px; -} -.has-error .bootstrap-select .dropdown-toggle, -.error .bootstrap-select .dropdown-toggle { - border-color: #b94a48; -} -.bootstrap-select.fit-width { - width: auto !important; -} -.bootstrap-select:not([class*="col-"]):not([class*="form-control"]):not(.input-group-btn) { - width: 220px; -} -.bootstrap-select .dropdown-toggle:focus { - outline: thin dotted #333333 !important; - outline: 5px auto -webkit-focus-ring-color !important; - outline-offset: -2px; -} -.bootstrap-select.form-control { - margin-bottom: 0; - padding: 0; - border: none; -} -.bootstrap-select.form-control:not([class*="col-"]) { - width: 100%; -} -.bootstrap-select.form-control.input-group-btn { - z-index: auto; -} -.bootstrap-select.btn-group:not(.input-group-btn), -.bootstrap-select.btn-group[class*="col-"] { - float: none; - display: inline-block; - margin-left: 0; -} -.bootstrap-select.btn-group.dropdown-menu-right, -.bootstrap-select.btn-group[class*="col-"].dropdown-menu-right, -.row .bootstrap-select.btn-group[class*="col-"].dropdown-menu-right { - float: right; -} -.form-inline .bootstrap-select.btn-group, -.form-horizontal .bootstrap-select.btn-group, -.form-group .bootstrap-select.btn-group { - margin-bottom: 0; -} -.form-group-lg .bootstrap-select.btn-group.form-control, -.form-group-sm .bootstrap-select.btn-group.form-control { - padding: 0; -} -.form-inline .bootstrap-select.btn-group .form-control { - width: 100%; -} -.bootstrap-select.btn-group.disabled, -.bootstrap-select.btn-group > .disabled { - cursor: not-allowed; -} -.bootstrap-select.btn-group.disabled:focus, -.bootstrap-select.btn-group > .disabled:focus { - outline: none !important; -} -.bootstrap-select.btn-group .dropdown-toggle .filter-option { - display: inline-block; - overflow: hidden; - width: 100%; - text-align: left; -} -.bootstrap-select.btn-group .dropdown-toggle .caret { - position: absolute; - top: 50%; - right: 12px; - margin-top: -2px; - vertical-align: middle; -} -.bootstrap-select.btn-group[class*="col-"] .dropdown-toggle { - width: 100%; -} -.bootstrap-select.btn-group .dropdown-menu { - min-width: 100%; - z-index: 1035; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.bootstrap-select.btn-group .dropdown-menu.inner { - position: static; - float: none; - border: 0; - padding: 0; - margin: 0; - border-radius: 0; - -webkit-box-shadow: none; - box-shadow: none; -} -.bootstrap-select.btn-group .dropdown-menu li { - position: relative; -} -.bootstrap-select.btn-group .dropdown-menu li.active small { - color: #fff; -} -.bootstrap-select.btn-group .dropdown-menu li.disabled a { - cursor: not-allowed; -} -.bootstrap-select.btn-group .dropdown-menu li a { - cursor: pointer; -} -.bootstrap-select.btn-group .dropdown-menu li a.opt { - position: relative; - padding-left: 2.25em; -} -.bootstrap-select.btn-group .dropdown-menu li a span.check-mark { - display: none; -} -.bootstrap-select.btn-group .dropdown-menu li a span.text { - display: inline-block; -} -.bootstrap-select.btn-group .dropdown-menu li small { - padding-left: 0.5em; -} -.bootstrap-select.btn-group .dropdown-menu .notify { - position: absolute; - bottom: 5px; - width: 96%; - margin: 0 2%; - min-height: 26px; - padding: 3px 5px; - background: #f5f5f5; - border: 1px solid #e3e3e3; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - pointer-events: none; - opacity: 0.9; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.bootstrap-select.btn-group .no-results { - padding: 3px; - background: #f5f5f5; - margin: 0 5px; - white-space: nowrap; -} -.bootstrap-select.btn-group.fit-width .dropdown-toggle .filter-option { - position: static; -} -.bootstrap-select.btn-group.fit-width .dropdown-toggle .caret { - position: static; - top: auto; - margin-top: -1px; -} -.bootstrap-select.btn-group.show-tick .dropdown-menu li.selected a span.check-mark { - position: absolute; - display: inline-block; - right: 15px; - margin-top: 5px; -} -.bootstrap-select.btn-group.show-tick .dropdown-menu li a span.text { - margin-right: 34px; -} -.bootstrap-select.show-menu-arrow.open > .dropdown-toggle { - z-index: 1036; -} -.bootstrap-select.show-menu-arrow .dropdown-toggle:before { - content: ''; - border-left: 7px solid transparent; - border-right: 7px solid transparent; - border-bottom: 7px solid rgba(204, 204, 204, 0.2); - position: absolute; - bottom: -4px; - left: 9px; - display: none; -} -.bootstrap-select.show-menu-arrow .dropdown-toggle:after { - content: ''; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid white; - position: absolute; - bottom: -4px; - left: 10px; - display: none; -} -.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:before { - bottom: auto; - top: -3px; - border-top: 7px solid rgba(204, 204, 204, 0.2); - border-bottom: 0; -} -.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:after { - bottom: auto; - top: -3px; - border-top: 6px solid white; - border-bottom: 0; -} -.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:before { - right: 12px; - left: auto; -} -.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:after { - right: 13px; - left: auto; -} -.bootstrap-select.show-menu-arrow.open > .dropdown-toggle:before, -.bootstrap-select.show-menu-arrow.open > .dropdown-toggle:after { - display: block; -} -.bs-searchbox, -.bs-actionsbox, -.bs-donebutton { - padding: 4px 8px; -} -.bs-actionsbox { - float: left; - width: 100%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.bs-actionsbox .btn-group button { - width: 50%; -} -.bs-donebutton { - float: left; - width: 100%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.bs-donebutton .btn-group button { - width: 100%; -} -.bs-searchbox + .bs-actionsbox { - padding: 0 8px 4px; -} -.bs-searchbox .form-control { - margin-bottom: 0; - width: 100%; -} -select.bs-select-hidden, -select.selectpicker { - display: none !important; -} -select.mobile-device { - position: absolute !important; - top: 0; - left: 0; - display: block !important; - width: 100%; - height: 100% !important; - opacity: 0; -} -/*# sourceMappingURL=bootstrap-select.css.map */ \ No newline at end of file diff --git a/modoboa/bower_components/bootstrap-select/dist/css/bootstrap-select.css.map b/modoboa/bower_components/bootstrap-select/dist/css/bootstrap-select.css.map deleted file mode 100644 index 535fdf23d..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/css/bootstrap-select.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["less/bootstrap-select.less","bootstrap-select.css"],"names":[],"mappings":"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","file":"bootstrap-select.css","sourcesContent":["@import \"variables\";\n\n// Mixins\n.cursor-disabled() {\n cursor: not-allowed;\n}\n\n// Rules\n.bootstrap-select {\n width: 220px \\0; /*IE9 and below*/\n\n // The selectpicker button\n > .dropdown-toggle {\n width: 100%;\n padding-right: 25px;\n }\n\n // Error display\n .has-error & .dropdown-toggle,\n .error & .dropdown-toggle {\n border-color: @color-red-error;\n }\n\n &.fit-width {\n width: auto !important;\n }\n\n &:not([class*=\"col-\"]):not([class*=\"form-control\"]):not(.input-group-btn) {\n width: @width-default;\n }\n\n .dropdown-toggle:focus {\n outline: thin dotted #333333 !important;\n outline: 5px auto -webkit-focus-ring-color !important;\n outline-offset: -2px;\n }\n}\n\n.bootstrap-select.form-control {\n margin-bottom: 0;\n padding: 0;\n border: none;\n\n &:not([class*=\"col-\"]) {\n width: 100%;\n }\n\n &.input-group-btn {\n z-index: auto;\n }\n}\n\n// The selectpicker components\n.bootstrap-select.btn-group {\n &:not(.input-group-btn),\n &[class*=\"col-\"] {\n float: none;\n display: inline-block;\n margin-left: 0;\n }\n\n // Forces the pull to the right, if necessary\n &,\n &[class*=\"col-\"],\n .row &[class*=\"col-\"] {\n &.dropdown-menu-right {\n float: right;\n }\n }\n\n .form-inline &,\n .form-horizontal &,\n .form-group & {\n margin-bottom: 0;\n }\n\n .form-group-lg &.form-control,\n .form-group-sm &.form-control {\n padding: 0;\n }\n\n // Set the width of the live search (and any other form control within an inline form)\n // see https://github.com/silviomoreto/bootstrap-select/issues/685\n .form-inline & .form-control {\n width: 100%;\n }\n\n &.disabled,\n > .disabled {\n .cursor-disabled();\n\n &:focus {\n outline: none !important;\n }\n }\n\n // The selectpicker button\n .dropdown-toggle {\n .filter-option {\n display: inline-block;\n overflow: hidden;\n width: 100%;\n text-align: left;\n }\n\n .caret {\n position: absolute;\n top: 50%;\n right: 12px;\n margin-top: -2px;\n vertical-align: middle;\n }\n }\n\n &[class*=\"col-\"] .dropdown-toggle {\n width: 100%;\n }\n\n // The selectpicker dropdown\n .dropdown-menu {\n min-width: 100%;\n z-index: @zindex-select-dropdown;\n box-sizing: border-box;\n\n &.inner {\n position: static;\n float: none;\n border: 0;\n padding: 0;\n margin: 0;\n border-radius: 0;\n box-shadow: none;\n }\n\n li {\n position: relative;\n\n &.active small {\n color: #fff;\n }\n\n &.disabled a {\n .cursor-disabled();\n }\n\n a {\n cursor: pointer;\n\n &.opt {\n position: relative;\n padding-left: 2.25em;\n }\n\n span.check-mark {\n display: none;\n }\n\n span.text {\n display: inline-block;\n }\n }\n\n small {\n padding-left: 0.5em;\n }\n }\n\n .notify {\n position: absolute;\n bottom: 5px;\n width: 96%;\n margin: 0 2%;\n min-height: 26px;\n padding: 3px 5px;\n background: rgb(245, 245, 245);\n border: 1px solid rgb(227, 227, 227);\n box-shadow: inset 0 1px 1px fade(rgb(0, 0, 0), 5%);\n pointer-events: none;\n opacity: 0.9;\n box-sizing: border-box;\n }\n }\n\n .no-results {\n padding: 3px;\n background: #f5f5f5;\n margin: 0 5px;\n white-space: nowrap;\n }\n\n &.fit-width .dropdown-toggle {\n .filter-option {\n position: static;\n }\n\n .caret {\n position: static;\n top: auto;\n margin-top: -1px;\n }\n }\n\n &.show-tick .dropdown-menu li {\n &.selected a span.check-mark {\n position: absolute;\n display: inline-block;\n right: 15px;\n margin-top: 5px;\n }\n\n a span.text {\n margin-right: 34px;\n }\n }\n}\n\n.bootstrap-select.show-menu-arrow {\n &.open > .dropdown-toggle {\n z-index: (@zindex-select-dropdown + 1);\n }\n\n .dropdown-toggle {\n &:before {\n content: '';\n border-left: 7px solid transparent;\n border-right: 7px solid transparent;\n border-bottom: 7px solid @color-grey-arrow;\n position: absolute;\n bottom: -4px;\n left: 9px;\n display: none;\n }\n\n &:after {\n content: '';\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-bottom: 6px solid white;\n position: absolute;\n bottom: -4px;\n left: 10px;\n display: none;\n }\n }\n\n &.dropup .dropdown-toggle {\n &:before {\n bottom: auto;\n top: -3px;\n border-top: 7px solid @color-grey-arrow;\n border-bottom: 0;\n }\n\n &:after {\n bottom: auto;\n top: -3px;\n border-top: 6px solid white;\n border-bottom: 0;\n }\n }\n\n &.pull-right .dropdown-toggle {\n &:before {\n right: 12px;\n left: auto;\n }\n\n &:after {\n right: 13px;\n left: auto;\n }\n }\n\n &.open > .dropdown-toggle {\n &:before,\n &:after {\n display: block;\n }\n }\n}\n\n.bs-searchbox,\n.bs-actionsbox,\n.bs-donebutton {\n padding: 4px 8px;\n}\n\n.bs-actionsbox {\n float: left;\n width: 100%;\n box-sizing: border-box;\n\n & .btn-group button {\n width: 50%;\n }\n}\n\n.bs-donebutton {\n float: left;\n width: 100%;\n box-sizing: border-box;\n\n & .btn-group button {\n width: 100%;\n }\n}\n\n.bs-searchbox {\n & + .bs-actionsbox {\n padding: 0 8px 4px;\n }\n\n & .form-control {\n margin-bottom: 0;\n width: 100%;\n }\n}\n\nselect.bs-select-hidden,\nselect.selectpicker {\n display: none !important;\n}\n\nselect.mobile-device {\n position: absolute !important;\n top: 0;\n left: 0;\n display: block !important;\n width: 100%;\n height: 100% !important;\n opacity: 0;\n}\n",".bootstrap-select {\n width: 220px \\0;\n /*IE9 and below*/\n}\n.bootstrap-select > .dropdown-toggle {\n width: 100%;\n padding-right: 25px;\n}\n.has-error .bootstrap-select .dropdown-toggle,\n.error .bootstrap-select .dropdown-toggle {\n border-color: #b94a48;\n}\n.bootstrap-select.fit-width {\n width: auto !important;\n}\n.bootstrap-select:not([class*=\"col-\"]):not([class*=\"form-control\"]):not(.input-group-btn) {\n width: 220px;\n}\n.bootstrap-select .dropdown-toggle:focus {\n outline: thin dotted #333333 !important;\n outline: 5px auto -webkit-focus-ring-color !important;\n outline-offset: -2px;\n}\n.bootstrap-select.form-control {\n margin-bottom: 0;\n padding: 0;\n border: none;\n}\n.bootstrap-select.form-control:not([class*=\"col-\"]) {\n width: 100%;\n}\n.bootstrap-select.form-control.input-group-btn {\n z-index: auto;\n}\n.bootstrap-select.btn-group:not(.input-group-btn),\n.bootstrap-select.btn-group[class*=\"col-\"] {\n float: none;\n display: inline-block;\n margin-left: 0;\n}\n.bootstrap-select.btn-group.dropdown-menu-right,\n.bootstrap-select.btn-group[class*=\"col-\"].dropdown-menu-right,\n.row .bootstrap-select.btn-group[class*=\"col-\"].dropdown-menu-right {\n float: right;\n}\n.form-inline .bootstrap-select.btn-group,\n.form-horizontal .bootstrap-select.btn-group,\n.form-group .bootstrap-select.btn-group {\n margin-bottom: 0;\n}\n.form-group-lg .bootstrap-select.btn-group.form-control,\n.form-group-sm .bootstrap-select.btn-group.form-control {\n padding: 0;\n}\n.form-inline .bootstrap-select.btn-group .form-control {\n width: 100%;\n}\n.bootstrap-select.btn-group.disabled,\n.bootstrap-select.btn-group > .disabled {\n cursor: not-allowed;\n}\n.bootstrap-select.btn-group.disabled:focus,\n.bootstrap-select.btn-group > .disabled:focus {\n outline: none !important;\n}\n.bootstrap-select.btn-group .dropdown-toggle .filter-option {\n display: inline-block;\n overflow: hidden;\n width: 100%;\n text-align: left;\n}\n.bootstrap-select.btn-group .dropdown-toggle .caret {\n position: absolute;\n top: 50%;\n right: 12px;\n margin-top: -2px;\n vertical-align: middle;\n}\n.bootstrap-select.btn-group[class*=\"col-\"] .dropdown-toggle {\n width: 100%;\n}\n.bootstrap-select.btn-group .dropdown-menu {\n min-width: 100%;\n z-index: 1035;\n box-sizing: border-box;\n}\n.bootstrap-select.btn-group .dropdown-menu.inner {\n position: static;\n float: none;\n border: 0;\n padding: 0;\n margin: 0;\n border-radius: 0;\n box-shadow: none;\n}\n.bootstrap-select.btn-group .dropdown-menu li {\n position: relative;\n}\n.bootstrap-select.btn-group .dropdown-menu li.active small {\n color: #fff;\n}\n.bootstrap-select.btn-group .dropdown-menu li.disabled a {\n cursor: not-allowed;\n}\n.bootstrap-select.btn-group .dropdown-menu li a {\n cursor: pointer;\n}\n.bootstrap-select.btn-group .dropdown-menu li a.opt {\n position: relative;\n padding-left: 2.25em;\n}\n.bootstrap-select.btn-group .dropdown-menu li a span.check-mark {\n display: none;\n}\n.bootstrap-select.btn-group .dropdown-menu li a span.text {\n display: inline-block;\n}\n.bootstrap-select.btn-group .dropdown-menu li small {\n padding-left: 0.5em;\n}\n.bootstrap-select.btn-group .dropdown-menu .notify {\n position: absolute;\n bottom: 5px;\n width: 96%;\n margin: 0 2%;\n min-height: 26px;\n padding: 3px 5px;\n background: #f5f5f5;\n border: 1px solid #e3e3e3;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n pointer-events: none;\n opacity: 0.9;\n box-sizing: border-box;\n}\n.bootstrap-select.btn-group .no-results {\n padding: 3px;\n background: #f5f5f5;\n margin: 0 5px;\n white-space: nowrap;\n}\n.bootstrap-select.btn-group.fit-width .dropdown-toggle .filter-option {\n position: static;\n}\n.bootstrap-select.btn-group.fit-width .dropdown-toggle .caret {\n position: static;\n top: auto;\n margin-top: -1px;\n}\n.bootstrap-select.btn-group.show-tick .dropdown-menu li.selected a span.check-mark {\n position: absolute;\n display: inline-block;\n right: 15px;\n margin-top: 5px;\n}\n.bootstrap-select.btn-group.show-tick .dropdown-menu li a span.text {\n margin-right: 34px;\n}\n.bootstrap-select.show-menu-arrow.open > .dropdown-toggle {\n z-index: 1036;\n}\n.bootstrap-select.show-menu-arrow .dropdown-toggle:before {\n content: '';\n border-left: 7px solid transparent;\n border-right: 7px solid transparent;\n border-bottom: 7px solid rgba(204, 204, 204, 0.2);\n position: absolute;\n bottom: -4px;\n left: 9px;\n display: none;\n}\n.bootstrap-select.show-menu-arrow .dropdown-toggle:after {\n content: '';\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-bottom: 6px solid white;\n position: absolute;\n bottom: -4px;\n left: 10px;\n display: none;\n}\n.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:before {\n bottom: auto;\n top: -3px;\n border-top: 7px solid rgba(204, 204, 204, 0.2);\n border-bottom: 0;\n}\n.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:after {\n bottom: auto;\n top: -3px;\n border-top: 6px solid white;\n border-bottom: 0;\n}\n.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:before {\n right: 12px;\n left: auto;\n}\n.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:after {\n right: 13px;\n left: auto;\n}\n.bootstrap-select.show-menu-arrow.open > .dropdown-toggle:before,\n.bootstrap-select.show-menu-arrow.open > .dropdown-toggle:after {\n display: block;\n}\n.bs-searchbox,\n.bs-actionsbox,\n.bs-donebutton {\n padding: 4px 8px;\n}\n.bs-actionsbox {\n float: left;\n width: 100%;\n box-sizing: border-box;\n}\n.bs-actionsbox .btn-group button {\n width: 50%;\n}\n.bs-donebutton {\n float: left;\n width: 100%;\n box-sizing: border-box;\n}\n.bs-donebutton .btn-group button {\n width: 100%;\n}\n.bs-searchbox + .bs-actionsbox {\n padding: 0 8px 4px;\n}\n.bs-searchbox .form-control {\n margin-bottom: 0;\n width: 100%;\n}\nselect.bs-select-hidden,\nselect.selectpicker {\n display: none !important;\n}\nselect.mobile-device {\n position: absolute !important;\n top: 0;\n left: 0;\n display: block !important;\n width: 100%;\n height: 100% !important;\n opacity: 0;\n}\n/*# sourceMappingURL=bootstrap-select.css.map */"]} \ No newline at end of file diff --git a/modoboa/bower_components/bootstrap-select/dist/css/bootstrap-select.min.css b/modoboa/bower_components/bootstrap-select/dist/css/bootstrap-select.min.css deleted file mode 100644 index 156f41bfb..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/css/bootstrap-select.min.css +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */.bootstrap-select{width:220px \0}.bootstrap-select>.dropdown-toggle{width:100%;padding-right:25px}.error .bootstrap-select .dropdown-toggle,.has-error .bootstrap-select .dropdown-toggle{border-color:#b94a48}.bootstrap-select.fit-width{width:auto!important}.bootstrap-select:not([class*=col-]):not([class*=form-control]):not(.input-group-btn){width:220px}.bootstrap-select .dropdown-toggle:focus{outline:thin dotted #333!important;outline:5px auto -webkit-focus-ring-color!important;outline-offset:-2px}.bootstrap-select.form-control{margin-bottom:0;padding:0;border:none}.bootstrap-select.form-control:not([class*=col-]){width:100%}.bootstrap-select.form-control.input-group-btn{z-index:auto}.bootstrap-select.btn-group:not(.input-group-btn),.bootstrap-select.btn-group[class*=col-]{float:none;display:inline-block;margin-left:0}.bootstrap-select.btn-group.dropdown-menu-right,.bootstrap-select.btn-group[class*=col-].dropdown-menu-right,.row .bootstrap-select.btn-group[class*=col-].dropdown-menu-right{float:right}.form-group .bootstrap-select.btn-group,.form-horizontal .bootstrap-select.btn-group,.form-inline .bootstrap-select.btn-group{margin-bottom:0}.form-group-lg .bootstrap-select.btn-group.form-control,.form-group-sm .bootstrap-select.btn-group.form-control{padding:0}.form-inline .bootstrap-select.btn-group .form-control{width:100%}.bootstrap-select.btn-group.disabled,.bootstrap-select.btn-group>.disabled{cursor:not-allowed}.bootstrap-select.btn-group.disabled:focus,.bootstrap-select.btn-group>.disabled:focus{outline:0!important}.bootstrap-select.btn-group .dropdown-toggle .filter-option{display:inline-block;overflow:hidden;width:100%;text-align:left}.bootstrap-select.btn-group .dropdown-toggle .caret{position:absolute;top:50%;right:12px;margin-top:-2px;vertical-align:middle}.bootstrap-select.btn-group[class*=col-] .dropdown-toggle{width:100%}.bootstrap-select.btn-group .dropdown-menu{min-width:100%;z-index:1035;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bootstrap-select.btn-group .dropdown-menu.inner{position:static;float:none;border:0;padding:0;margin:0;border-radius:0;-webkit-box-shadow:none;box-shadow:none}.bootstrap-select.btn-group .dropdown-menu li{position:relative}.bootstrap-select.btn-group .dropdown-menu li.active small{color:#fff}.bootstrap-select.btn-group .dropdown-menu li.disabled a{cursor:not-allowed}.bootstrap-select.btn-group .dropdown-menu li a{cursor:pointer}.bootstrap-select.btn-group .dropdown-menu li a.opt{position:relative;padding-left:2.25em}.bootstrap-select.btn-group .dropdown-menu li a span.check-mark{display:none}.bootstrap-select.btn-group .dropdown-menu li a span.text{display:inline-block}.bootstrap-select.btn-group .dropdown-menu li small{padding-left:.5em}.bootstrap-select.btn-group .dropdown-menu .notify{position:absolute;bottom:5px;width:96%;margin:0 2%;min-height:26px;padding:3px 5px;background:#f5f5f5;border:1px solid #e3e3e3;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05);pointer-events:none;opacity:.9;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bootstrap-select.btn-group .no-results{padding:3px;background:#f5f5f5;margin:0 5px;white-space:nowrap}.bootstrap-select.btn-group.fit-width .dropdown-toggle .filter-option{position:static}.bootstrap-select.btn-group.fit-width .dropdown-toggle .caret{position:static;top:auto;margin-top:-1px}.bootstrap-select.btn-group.show-tick .dropdown-menu li.selected a span.check-mark{position:absolute;display:inline-block;right:15px;margin-top:5px}.bootstrap-select.btn-group.show-tick .dropdown-menu li a span.text{margin-right:34px}.bootstrap-select.show-menu-arrow.open>.dropdown-toggle{z-index:1036}.bootstrap-select.show-menu-arrow .dropdown-toggle:before{content:'';border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid rgba(204,204,204,.2);position:absolute;bottom:-4px;left:9px;display:none}.bootstrap-select.show-menu-arrow .dropdown-toggle:after{content:'';border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute;bottom:-4px;left:10px;display:none}.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:before{bottom:auto;top:-3px;border-top:7px solid rgba(204,204,204,.2);border-bottom:0}.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:after{bottom:auto;top:-3px;border-top:6px solid #fff;border-bottom:0}.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:before{right:12px;left:auto}.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:after{right:13px;left:auto}.bootstrap-select.show-menu-arrow.open>.dropdown-toggle:after,.bootstrap-select.show-menu-arrow.open>.dropdown-toggle:before{display:block}.bs-actionsbox,.bs-donebutton,.bs-searchbox{padding:4px 8px}.bs-actionsbox{float:left;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bs-actionsbox .btn-group button{width:50%}.bs-donebutton{float:left;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bs-donebutton .btn-group button{width:100%}.bs-searchbox+.bs-actionsbox{padding:0 8px 4px}.bs-searchbox .form-control{margin-bottom:0;width:100%}select.bs-select-hidden,select.selectpicker{display:none!important}select.mobile-device{position:absolute!important;top:0;left:0;display:block!important;width:100%;height:100%!important;opacity:0} \ No newline at end of file diff --git a/modoboa/bower_components/bootstrap-select/dist/js/bootstrap-select.js b/modoboa/bower_components/bootstrap-select/dist/js/bootstrap-select.js deleted file mode 100644 index 2ff31d0da..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/bootstrap-select.js +++ /dev/null @@ -1,1650 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ - -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module unless amdModuleId is set - define(["jquery"], function (a0) { - return (factory(a0)); - }); - } else if (typeof exports === 'object') { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(require("jquery")); - } else { - factory(jQuery); - } -}(this, function () { - -(function ($) { - 'use strict'; - - // - if (!String.prototype.includes) { - (function () { - 'use strict'; // needed to support `apply`/`call` with `undefined`/`null` - var toString = {}.toString; - var defineProperty = (function () { - // IE 8 only supports `Object.defineProperty` on DOM elements - try { - var object = {}; - var $defineProperty = Object.defineProperty; - var result = $defineProperty(object, object, object) && $defineProperty; - } catch (error) { - } - return result; - }()); - var indexOf = ''.indexOf; - var includes = function (search) { - if (this == null) { - throw TypeError(); - } - var string = String(this); - if (search && toString.call(search) == '[object RegExp]') { - throw TypeError(); - } - var stringLength = string.length; - var searchString = String(search); - var searchLength = searchString.length; - var position = arguments.length > 1 ? arguments[1] : undefined; - // `ToInteger` - var pos = position ? Number(position) : 0; - if (pos != pos) { // better `isNaN` - pos = 0; - } - var start = Math.min(Math.max(pos, 0), stringLength); - // Avoid the `indexOf` call if no match is possible - if (searchLength + start > stringLength) { - return false; - } - return indexOf.call(string, searchString, pos) != -1; - }; - if (defineProperty) { - defineProperty(String.prototype, 'includes', { - 'value': includes, - 'configurable': true, - 'writable': true - }); - } else { - String.prototype.includes = includes; - } - }()); - } - - if (!String.prototype.startsWith) { - (function () { - 'use strict'; // needed to support `apply`/`call` with `undefined`/`null` - var defineProperty = (function () { - // IE 8 only supports `Object.defineProperty` on DOM elements - try { - var object = {}; - var $defineProperty = Object.defineProperty; - var result = $defineProperty(object, object, object) && $defineProperty; - } catch (error) { - } - return result; - }()); - var toString = {}.toString; - var startsWith = function (search) { - if (this == null) { - throw TypeError(); - } - var string = String(this); - if (search && toString.call(search) == '[object RegExp]') { - throw TypeError(); - } - var stringLength = string.length; - var searchString = String(search); - var searchLength = searchString.length; - var position = arguments.length > 1 ? arguments[1] : undefined; - // `ToInteger` - var pos = position ? Number(position) : 0; - if (pos != pos) { // better `isNaN` - pos = 0; - } - var start = Math.min(Math.max(pos, 0), stringLength); - // Avoid the `indexOf` call if no match is possible - if (searchLength + start > stringLength) { - return false; - } - var index = -1; - while (++index < searchLength) { - if (string.charCodeAt(start + index) != searchString.charCodeAt(index)) { - return false; - } - } - return true; - }; - if (defineProperty) { - defineProperty(String.prototype, 'startsWith', { - 'value': startsWith, - 'configurable': true, - 'writable': true - }); - } else { - String.prototype.startsWith = startsWith; - } - }()); - } - - if (!Object.keys) { - Object.keys = function ( - o, // object - k, // key - r // result array - ){ - // initialize object and result - r=[]; - // iterate over object keys - for (k in o) - // fill result array with non-prototypical keys - r.hasOwnProperty.call(o, k) && r.push(k); - // return result - return r - }; - } - - $.fn.triggerNative = function (eventName) { - var el = this[0], - event; - - if (el.dispatchEvent) { - if (typeof Event === 'function') { - // For modern browsers - event = new Event(eventName, { - bubbles: true - }); - } else { - // For IE since it doesn't support Event constructor - event = document.createEvent('Event'); - event.initEvent(eventName, true, false); - } - - el.dispatchEvent(event); - } else { - if (el.fireEvent) { - event = document.createEventObject(); - event.eventType = eventName; - el.fireEvent('on' + eventName, event); - } - - this.trigger(eventName); - } - }; - // - - // Case insensitive contains search - $.expr[':'].icontains = function (obj, index, meta) { - var $obj = $(obj); - var haystack = ($obj.data('tokens') || $obj.text()).toUpperCase(); - return haystack.includes(meta[3].toUpperCase()); - }; - - // Case insensitive begins search - $.expr[':'].ibegins = function (obj, index, meta) { - var $obj = $(obj); - var haystack = ($obj.data('tokens') || $obj.text()).toUpperCase(); - return haystack.startsWith(meta[3].toUpperCase()); - }; - - // Case and accent insensitive contains search - $.expr[':'].aicontains = function (obj, index, meta) { - var $obj = $(obj); - var haystack = ($obj.data('tokens') || $obj.data('normalizedText') || $obj.text()).toUpperCase(); - return haystack.includes(meta[3].toUpperCase()); - }; - - // Case and accent insensitive begins search - $.expr[':'].aibegins = function (obj, index, meta) { - var $obj = $(obj); - var haystack = ($obj.data('tokens') || $obj.data('normalizedText') || $obj.text()).toUpperCase(); - return haystack.startsWith(meta[3].toUpperCase()); - }; - - /** - * Remove all diatrics from the given text. - * @access private - * @param {String} text - * @returns {String} - */ - function normalizeToBase(text) { - var rExps = [ - {re: /[\xC0-\xC6]/g, ch: "A"}, - {re: /[\xE0-\xE6]/g, ch: "a"}, - {re: /[\xC8-\xCB]/g, ch: "E"}, - {re: /[\xE8-\xEB]/g, ch: "e"}, - {re: /[\xCC-\xCF]/g, ch: "I"}, - {re: /[\xEC-\xEF]/g, ch: "i"}, - {re: /[\xD2-\xD6]/g, ch: "O"}, - {re: /[\xF2-\xF6]/g, ch: "o"}, - {re: /[\xD9-\xDC]/g, ch: "U"}, - {re: /[\xF9-\xFC]/g, ch: "u"}, - {re: /[\xC7-\xE7]/g, ch: "c"}, - {re: /[\xD1]/g, ch: "N"}, - {re: /[\xF1]/g, ch: "n"} - ]; - $.each(rExps, function () { - text = text.replace(this.re, this.ch); - }); - return text; - } - - - function htmlEscape(html) { - var escapeMap = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - '`': '`' - }; - var source = '(?:' + Object.keys(escapeMap).join('|') + ')', - testRegexp = new RegExp(source), - replaceRegexp = new RegExp(source, 'g'), - string = html == null ? '' : '' + html; - return testRegexp.test(string) ? string.replace(replaceRegexp, function (match) { - return escapeMap[match]; - }) : string; - } - - var Selectpicker = function (element, options, e) { - if (e) { - e.stopPropagation(); - e.preventDefault(); - } - - this.$element = $(element); - this.$newElement = null; - this.$button = null; - this.$menu = null; - this.$lis = null; - this.options = options; - - // If we have no title yet, try to pull it from the html title attribute (jQuery doesnt' pick it up as it's not a - // data-attribute) - if (this.options.title === null) { - this.options.title = this.$element.attr('title'); - } - - //Expose public methods - this.val = Selectpicker.prototype.val; - this.render = Selectpicker.prototype.render; - this.refresh = Selectpicker.prototype.refresh; - this.setStyle = Selectpicker.prototype.setStyle; - this.selectAll = Selectpicker.prototype.selectAll; - this.deselectAll = Selectpicker.prototype.deselectAll; - this.destroy = Selectpicker.prototype.remove; - this.remove = Selectpicker.prototype.remove; - this.show = Selectpicker.prototype.show; - this.hide = Selectpicker.prototype.hide; - - this.init(); - }; - - Selectpicker.VERSION = '1.7.2'; - - // part of this is duplicated in i18n/defaults-en_US.js. Make sure to update both. - Selectpicker.DEFAULTS = { - noneSelectedText: 'Nothing selected', - noneResultsText: 'No results matched {0}', - countSelectedText: function (numSelected, numTotal) { - return (numSelected == 1) ? "{0} item selected" : "{0} items selected"; - }, - maxOptionsText: function (numAll, numGroup) { - return [ - (numAll == 1) ? 'Limit reached ({n} item max)' : 'Limit reached ({n} items max)', - (numGroup == 1) ? 'Group limit reached ({n} item max)' : 'Group limit reached ({n} items max)' - ]; - }, - selectAllText: 'Select All', - deselectAllText: 'Deselect All', - doneButton: false, - doneButtonText: 'Close', - multipleSeparator: ', ', - styleBase: 'btn', - style: 'btn-default', - size: 'auto', - title: null, - selectedTextFormat: 'values', - width: false, - container: false, - hideDisabled: false, - showSubtext: false, - showIcon: true, - showContent: true, - dropupAuto: true, - header: false, - liveSearch: false, - liveSearchPlaceholder: null, - liveSearchNormalize: false, - liveSearchStyle: 'contains', - actionsBox: false, - iconBase: 'glyphicon', - tickIcon: 'glyphicon-ok', - maxOptions: false, - mobile: false, - selectOnTab: false, - dropdownAlignRight: false - }; - - Selectpicker.prototype = { - - constructor: Selectpicker, - - init: function () { - var that = this, - id = this.$element.attr('id'); - - this.$element.addClass('bs-select-hidden'); - // store originalIndex (key) and newIndex (value) in this.liObj for fast accessibility - // allows us to do this.$lis.eq(that.liObj[index]) instead of this.$lis.filter('[data-original-index="' + index + '"]') - this.liObj = {}; - this.multiple = this.$element.prop('multiple'); - this.autofocus = this.$element.prop('autofocus'); - this.$newElement = this.createView(); - this.$element.after(this.$newElement); - this.$button = this.$newElement.children('button'); - this.$menu = this.$newElement.children('.dropdown-menu'); - this.$menuInner = this.$menu.children('.inner'); - this.$searchbox = this.$menu.find('input'); - - if (this.options.dropdownAlignRight) - this.$menu.addClass('dropdown-menu-right'); - - if (typeof id !== 'undefined') { - this.$button.attr('data-id', id); - $('label[for="' + id + '"]').click(function (e) { - e.preventDefault(); - that.$button.focus(); - }); - } - - this.checkDisabled(); - this.clickListener(); - if (this.options.liveSearch) this.liveSearchListener(); - this.render(); - this.setStyle(); - this.setWidth(); - if (this.options.container) this.selectPosition(); - this.$menu.data('this', this); - this.$newElement.data('this', this); - if (this.options.mobile) this.mobile(); - - this.$newElement.on('hide.bs.dropdown', function (e) { - that.$element.trigger('hide.bs.select', e); - }); - - this.$newElement.on('hidden.bs.dropdown', function (e) { - that.$element.trigger('hidden.bs.select', e); - }); - - this.$newElement.on('show.bs.dropdown', function (e) { - that.$element.trigger('show.bs.select', e); - }); - - this.$newElement.on('shown.bs.dropdown', function (e) { - that.$element.trigger('shown.bs.select', e); - }); - - setTimeout(function () { - that.$element.trigger('loaded.bs.select'); - }); - }, - - createDropdown: function () { - // Options - // If we are multiple, then add the show-tick class by default - var multiple = this.multiple ? ' show-tick' : '', - inputGroup = this.$element.parent().hasClass('input-group') ? ' input-group-btn' : '', - autofocus = this.autofocus ? ' autofocus' : ''; - // Elements - var header = this.options.header ? '
' + this.options.header + '
' : ''; - var searchbox = this.options.liveSearch ? - '' - : ''; - var actionsbox = this.multiple && this.options.actionsBox ? - '
' + - '
' + - '' + - '' + - '
' + - '
' - : ''; - var donebutton = this.multiple && this.options.doneButton ? - '
' + - '
' + - '' + - '
' + - '
' - : ''; - var drop = - '
' + - '' + - '' + - '
'; - - return $(drop); - }, - - createView: function () { - var $drop = this.createDropdown(), - li = this.createLi(); - - $drop.find('ul')[0].innerHTML = li; - return $drop; - }, - - reloadLi: function () { - //Remove all children. - this.destroyLi(); - //Re build - var li = this.createLi(); - this.$menuInner[0].innerHTML = li; - }, - - destroyLi: function () { - this.$menu.find('li').remove(); - }, - - createLi: function () { - var that = this, - _li = [], - optID = 0, - titleOption = document.createElement('option'), - liIndex = -1; // increment liIndex whenever a new
  • element is created to ensure liObj is correct - - // Helper functions - /** - * @param content - * @param [index] - * @param [classes] - * @param [optgroup] - * @returns {string} - */ - var generateLI = function (content, index, classes, optgroup) { - return '' + content + '
  • '; - }; - - /** - * @param text - * @param [classes] - * @param [inline] - * @param [tokens] - * @returns {string} - */ - var generateA = function (text, classes, inline, tokens) { - return '' + text + - '' + - ''; - }; - - if (this.options.title && !this.multiple) { - // this option doesn't create a new
  • element, but does add a new option, so liIndex is decreased - // since liObj is recalculated on every refresh, liIndex needs to be decreased even if the titleOption is already appended - liIndex--; - - if (!this.$element.find('.bs-title-option').length) { - // Use native JS to prepend option (faster) - var element = this.$element[0]; - titleOption.className = 'bs-title-option'; - titleOption.appendChild(document.createTextNode(this.options.title)); - titleOption.value = ''; - element.insertBefore(titleOption, element.firstChild); - // Check if selected attribute is already set on an option. If not, select the titleOption option. - if ($(element.options[element.selectedIndex]).attr('selected') === undefined) titleOption.selected = true; - } - } - - this.$element.find('option').each(function (index) { - var $this = $(this); - - liIndex++; - - if ($this.hasClass('bs-title-option')) return; - - // Get the class and text for the option - var optionClass = this.className || '', - inline = this.style.cssText, - text = $this.data('content') ? $this.data('content') : $this.html(), - tokens = $this.data('tokens') ? $this.data('tokens') : null, - subtext = typeof $this.data('subtext') !== 'undefined' ? '' + $this.data('subtext') + '' : '', - icon = typeof $this.data('icon') !== 'undefined' ? ' ' : '', - isDisabled = this.disabled || (this.parentElement.tagName === 'OPTGROUP' && this.parentElement.disabled); - - if (icon !== '' && isDisabled) { - icon = '' + icon + ''; - } - - if (that.options.hideDisabled && isDisabled) { - liIndex--; - return; - } - - if (!$this.data('content')) { - // Prepend any icon and append any subtext to the main text. - text = icon + '' + text + subtext + ''; - } - - if (this.parentElement.tagName === 'OPTGROUP' && $this.data('divider') !== true) { - var optGroupClass = ' ' + this.parentElement.className || ''; - - if ($this.index() === 0) { // Is it the first option of the optgroup? - optID += 1; - - // Get the opt group label - var label = this.parentElement.label, - labelSubtext = typeof $this.parent().data('subtext') !== 'undefined' ? '' + $this.parent().data('subtext') + '' : '', - labelIcon = $this.parent().data('icon') ? ' ' : ''; - - label = labelIcon + '' + label + labelSubtext + ''; - - if (index !== 0 && _li.length > 0) { // Is it NOT the first option of the select && are there elements in the dropdown? - liIndex++; - _li.push(generateLI('', null, 'divider', optID + 'div')); - } - liIndex++; - _li.push(generateLI(label, null, 'dropdown-header' + optGroupClass, optID)); - } - _li.push(generateLI(generateA(text, 'opt ' + optionClass + optGroupClass, inline, tokens), index, '', optID)); - } else if ($this.data('divider') === true) { - _li.push(generateLI('', index, 'divider')); - } else if ($this.data('hidden') === true) { - _li.push(generateLI(generateA(text, optionClass, inline, tokens), index, 'hidden is-hidden')); - } else { - if (this.previousElementSibling && this.previousElementSibling.tagName === 'OPTGROUP') { - liIndex++; - _li.push(generateLI('', null, 'divider', optID + 'div')); - } - _li.push(generateLI(generateA(text, optionClass, inline, tokens), index)); - } - - that.liObj[index] = liIndex; - }); - - //If we are not multiple, we don't have a selected item, and we don't have a title, select the first element so something is set in the button - if (!this.multiple && this.$element.find('option:selected').length === 0 && !this.options.title) { - this.$element.find('option').eq(0).prop('selected', true).attr('selected', 'selected'); - } - - return _li.join(''); - }, - - findLis: function () { - if (this.$lis == null) this.$lis = this.$menu.find('li'); - return this.$lis; - }, - - /** - * @param [updateLi] defaults to true - */ - render: function (updateLi) { - var that = this, - notDisabled; - - //Update the LI to match the SELECT - if (updateLi !== false) { - this.$element.find('option').each(function (index) { - var $lis = that.findLis().eq(that.liObj[index]); - - that.setDisabled(index, this.disabled || this.parentElement.tagName === 'OPTGROUP' && this.parentElement.disabled, $lis); - that.setSelected(index, this.selected, $lis); - }); - } - - this.tabIndex(); - - var selectedItems = this.$element.find('option').map(function () { - if (this.selected) { - if (that.options.hideDisabled && (this.disabled || this.parentElement.tagName === 'OPTGROUP' && this.parentElement.disabled)) return false; - - var $this = $(this), - icon = $this.data('icon') && that.options.showIcon ? ' ' : '', - subtext; - - if (that.options.showSubtext && $this.data('subtext') && !that.multiple) { - subtext = ' ' + $this.data('subtext') + ''; - } else { - subtext = ''; - } - if (typeof $this.attr('title') !== 'undefined') { - return $this.attr('title'); - } else if ($this.data('content') && that.options.showContent) { - return $this.data('content'); - } else { - return icon + $this.html() + subtext; - } - } - }).toArray(); - - //Fixes issue in IE10 occurring when no default option is selected and at least one option is disabled - //Convert all the values into a comma delimited string - var title = !this.multiple ? selectedItems[0] : selectedItems.join(this.options.multipleSeparator); - - //If this is multi select, and the selectText type is count, the show 1 of 2 selected etc.. - if (this.multiple && this.options.selectedTextFormat.indexOf('count') > -1) { - var max = this.options.selectedTextFormat.split('>'); - if ((max.length > 1 && selectedItems.length > max[1]) || (max.length == 1 && selectedItems.length >= 2)) { - notDisabled = this.options.hideDisabled ? ', [disabled]' : ''; - var totalCount = this.$element.find('option').not('[data-divider="true"], [data-hidden="true"]' + notDisabled).length, - tr8nText = (typeof this.options.countSelectedText === 'function') ? this.options.countSelectedText(selectedItems.length, totalCount) : this.options.countSelectedText; - title = tr8nText.replace('{0}', selectedItems.length.toString()).replace('{1}', totalCount.toString()); - } - } - - if (this.options.title == undefined) { - this.options.title = this.$element.attr('title'); - } - - if (this.options.selectedTextFormat == 'static') { - title = this.options.title; - } - - //If we dont have a title, then use the default, or if nothing is set at all, use the not selected text - if (!title) { - title = typeof this.options.title !== 'undefined' ? this.options.title : this.options.noneSelectedText; - } - - //strip all html-tags and trim the result - this.$button.attr('title', $.trim(title.replace(/<[^>]*>?/g, ''))); - this.$button.children('.filter-option').html(title); - - this.$element.trigger('rendered.bs.select'); - }, - - /** - * @param [style] - * @param [status] - */ - setStyle: function (style, status) { - if (this.$element.attr('class')) { - this.$newElement.addClass(this.$element.attr('class').replace(/selectpicker|mobile-device|bs-select-hidden|validate\[.*\]/gi, '')); - } - - var buttonClass = style ? style : this.options.style; - - if (status == 'add') { - this.$button.addClass(buttonClass); - } else if (status == 'remove') { - this.$button.removeClass(buttonClass); - } else { - this.$button.removeClass(this.options.style); - this.$button.addClass(buttonClass); - } - }, - - liHeight: function (refresh) { - if (!refresh && (this.options.size === false || this.sizeInfo)) return; - - var newElement = document.createElement('div'), - menu = document.createElement('div'), - menuInner = document.createElement('ul'), - divider = document.createElement('li'), - li = document.createElement('li'), - a = document.createElement('a'), - text = document.createElement('span'), - header = this.options.header ? this.$menu.find('.popover-title')[0].cloneNode(true) : null, - search = this.options.liveSearch ? document.createElement('div') : null, - actions = this.options.actionsBox && this.multiple ? this.$menu.find('.bs-actionsbox')[0].cloneNode(true) : null, - doneButton = this.options.doneButton && this.multiple ? this.$menu.find('.bs-donebutton')[0].cloneNode(true) : null; - - text.className = 'text'; - newElement.className = this.$menu[0].parentNode.className + ' open'; - menu.className = 'dropdown-menu open'; - menuInner.className = 'dropdown-menu inner'; - divider.className = 'divider'; - - text.appendChild(document.createTextNode('Inner text')); - a.appendChild(text); - li.appendChild(a); - menuInner.appendChild(li); - menuInner.appendChild(divider); - if (header) menu.appendChild(header); - if (search) { - // create a span instead of input as creating an input element is slower - var input = document.createElement('span'); - search.className = 'bs-searchbox'; - input.className = 'form-control'; - search.appendChild(input); - menu.appendChild(search); - } - if (actions) menu.appendChild(actions); - menu.appendChild(menuInner); - if (doneButton) menu.appendChild(doneButton); - newElement.appendChild(menu); - - document.body.appendChild(newElement); - - var liHeight = a.offsetHeight, - headerHeight = header ? header.offsetHeight : 0, - searchHeight = search ? search.offsetHeight : 0, - actionsHeight = actions ? actions.offsetHeight : 0, - doneButtonHeight = doneButton ? doneButton.offsetHeight : 0, - dividerHeight = $(divider).outerHeight(true), - // fall back to jQuery if getComputedStyle is not supported - menuStyle = typeof getComputedStyle === 'function' ? getComputedStyle(menu) : false, - $menu = menuStyle ? null : $(menu), - menuPadding = parseInt(menuStyle ? menuStyle.paddingTop : $menu.css('paddingTop')) + - parseInt(menuStyle ? menuStyle.paddingBottom : $menu.css('paddingBottom')) + - parseInt(menuStyle ? menuStyle.borderTopWidth : $menu.css('borderTopWidth')) + - parseInt(menuStyle ? menuStyle.borderBottomWidth : $menu.css('borderBottomWidth')), - menuExtras = menuPadding + - parseInt(menuStyle ? menuStyle.marginTop : $menu.css('marginTop')) + - parseInt(menuStyle ? menuStyle.marginBottom : $menu.css('marginBottom')) + 2; - - document.body.removeChild(newElement); - - this.sizeInfo = { - liHeight: liHeight, - headerHeight: headerHeight, - searchHeight: searchHeight, - actionsHeight: actionsHeight, - doneButtonHeight: doneButtonHeight, - dividerHeight: dividerHeight, - menuPadding: menuPadding, - menuExtras: menuExtras - }; - }, - - setSize: function () { - this.findLis(); - this.liHeight(); - - if (this.options.header) this.$menu.css('padding-top', 0); - if (this.options.size === false) return; - - var that = this, - $menu = this.$menu, - $menuInner = this.$menuInner, - $window = $(window), - selectHeight = this.$newElement[0].offsetHeight, - liHeight = this.sizeInfo['liHeight'], - headerHeight = this.sizeInfo['headerHeight'], - searchHeight = this.sizeInfo['searchHeight'], - actionsHeight = this.sizeInfo['actionsHeight'], - doneButtonHeight = this.sizeInfo['doneButtonHeight'], - divHeight = this.sizeInfo['dividerHeight'], - menuPadding = this.sizeInfo['menuPadding'], - menuExtras = this.sizeInfo['menuExtras'], - notDisabled = this.options.hideDisabled ? '.disabled' : '', - menuHeight, - getHeight, - selectOffsetTop, - selectOffsetBot, - posVert = function () { - selectOffsetTop = that.$newElement.offset().top - $window.scrollTop(); - selectOffsetBot = $window.height() - selectOffsetTop - selectHeight; - }; - - posVert(); - - if (this.options.size === 'auto') { - var getSize = function () { - var minHeight, - hasClass = function (className, include) { - return function (element) { - if (include) { - return (element.classList ? element.classList.contains(className) : $(element).hasClass(className)); - } else { - return !(element.classList ? element.classList.contains(className) : $(element).hasClass(className)); - } - }; - }, - lis = that.$menuInner[0].getElementsByTagName('li'), - lisVisible = Array.prototype.filter ? Array.prototype.filter.call(lis, hasClass('hidden', false)) : that.$lis.not('.hidden'), - optGroup = Array.prototype.filter ? Array.prototype.filter.call(lisVisible, hasClass('dropdown-header', true)) : lisVisible.filter('.dropdown-header'); - - posVert(); - menuHeight = selectOffsetBot - menuExtras; - - if (that.options.container) { - if (!$menu.data('height')) $menu.data('height', $menu.height()); - getHeight = $menu.data('height'); - } else { - getHeight = $menu.height(); - } - - if (that.options.dropupAuto) { - that.$newElement.toggleClass('dropup', selectOffsetTop > selectOffsetBot && (menuHeight - menuExtras) < getHeight); - } - if (that.$newElement.hasClass('dropup')) { - menuHeight = selectOffsetTop - menuExtras; - } - - if ((lisVisible.length + optGroup.length) > 3) { - minHeight = liHeight * 3 + menuExtras - 2; - } else { - minHeight = 0; - } - - $menu.css({ - 'max-height': menuHeight + 'px', - 'overflow': 'hidden', - 'min-height': minHeight + headerHeight + searchHeight + actionsHeight + doneButtonHeight + 'px' - }); - $menuInner.css({ - 'max-height': menuHeight - headerHeight - searchHeight - actionsHeight - doneButtonHeight - menuPadding + 'px', - 'overflow-y': 'auto', - 'min-height': Math.max(minHeight - menuPadding, 0) + 'px' - }); - }; - getSize(); - this.$searchbox.off('input.getSize propertychange.getSize').on('input.getSize propertychange.getSize', getSize); - $window.off('resize.getSize scroll.getSize').on('resize.getSize scroll.getSize', getSize); - } else if (this.options.size && this.options.size != 'auto' && this.$lis.not(notDisabled).length > this.options.size) { - var optIndex = this.$lis.not('.divider').not(notDisabled).children().slice(0, this.options.size).last().parent().index(), - divLength = this.$lis.slice(0, optIndex + 1).filter('.divider').length; - menuHeight = liHeight * this.options.size + divLength * divHeight + menuPadding; - - if (that.options.container) { - if (!$menu.data('height')) $menu.data('height', $menu.height()); - getHeight = $menu.data('height'); - } else { - getHeight = $menu.height(); - } - - if (that.options.dropupAuto) { - //noinspection JSUnusedAssignment - this.$newElement.toggleClass('dropup', selectOffsetTop > selectOffsetBot && (menuHeight - menuExtras) < getHeight); - } - $menu.css({ - 'max-height': menuHeight + headerHeight + searchHeight + actionsHeight + doneButtonHeight + 'px', - 'overflow': 'hidden', - 'min-height': '' - }); - $menuInner.css({ - 'max-height': menuHeight - menuPadding + 'px', - 'overflow-y': 'auto', - 'min-height': '' - }); - } - }, - - setWidth: function () { - if (this.options.width === 'auto') { - this.$menu.css('min-width', '0'); - - // Get correct width if element is hidden - var $selectClone = this.$menu.parent().clone().appendTo('body'), - $selectClone2 = this.options.container ? this.$newElement.clone().appendTo('body') : $selectClone, - ulWidth = $selectClone.children('.dropdown-menu').outerWidth(), - btnWidth = $selectClone2.css('width', 'auto').children('button').outerWidth(); - - $selectClone.remove(); - $selectClone2.remove(); - - // Set width to whatever's larger, button title or longest option - this.$newElement.css('width', Math.max(ulWidth, btnWidth) + 'px'); - } else if (this.options.width === 'fit') { - // Remove inline min-width so width can be changed from 'auto' - this.$menu.css('min-width', ''); - this.$newElement.css('width', '').addClass('fit-width'); - } else if (this.options.width) { - // Remove inline min-width so width can be changed from 'auto' - this.$menu.css('min-width', ''); - this.$newElement.css('width', this.options.width); - } else { - // Remove inline min-width/width so width can be changed - this.$menu.css('min-width', ''); - this.$newElement.css('width', ''); - } - // Remove fit-width class if width is changed programmatically - if (this.$newElement.hasClass('fit-width') && this.options.width !== 'fit') { - this.$newElement.removeClass('fit-width'); - } - }, - - selectPosition: function () { - var that = this, - drop = '
    ', - $drop = $(drop), - pos, - actualHeight, - getPlacement = function ($element) { - $drop.addClass($element.attr('class').replace(/form-control|fit-width/gi, '')).toggleClass('dropup', $element.hasClass('dropup')); - pos = $element.offset(); - actualHeight = $element.hasClass('dropup') ? 0 : $element[0].offsetHeight; - $drop.css({ - 'top': pos.top + actualHeight, - 'left': pos.left, - 'width': $element[0].offsetWidth, - 'position': 'absolute' - }); - }; - - this.$newElement.on('click', function () { - if (that.isDisabled()) { - return; - } - getPlacement($(this)); - $drop.appendTo(that.options.container); - $drop.toggleClass('open', !$(this).hasClass('open')); - $drop.append(that.$menu); - }); - - $(window).on('resize scroll', function () { - getPlacement(that.$newElement); - }); - - this.$element.on('hide.bs.select', function () { - that.$menu.data('height', that.$menu.height()); - $drop.detach(); - }); - }, - - setSelected: function (index, selected, $lis) { - if (!$lis) { - var $lis = this.findLis().eq(this.liObj[index]); - } - - $lis.toggleClass('selected', selected); - }, - - setDisabled: function (index, disabled, $lis) { - if (!$lis) { - var $lis = this.findLis().eq(this.liObj[index]); - } - - if (disabled) { - $lis.addClass('disabled').children('a').attr('href', '#').attr('tabindex', -1); - } else { - $lis.removeClass('disabled').children('a').removeAttr('href').attr('tabindex', 0); - } - }, - - isDisabled: function () { - return this.$element[0].disabled; - }, - - checkDisabled: function () { - var that = this; - - if (this.isDisabled()) { - this.$newElement.addClass('disabled'); - this.$button.addClass('disabled').attr('tabindex', -1); - } else { - if (this.$button.hasClass('disabled')) { - this.$newElement.removeClass('disabled'); - this.$button.removeClass('disabled'); - } - - if (this.$button.attr('tabindex') == -1 && !this.$element.data('tabindex')) { - this.$button.removeAttr('tabindex'); - } - } - - this.$button.click(function () { - return !that.isDisabled(); - }); - }, - - tabIndex: function () { - if (this.$element.is('[tabindex]')) { - this.$element.data('tabindex', this.$element.attr('tabindex')); - this.$button.attr('tabindex', this.$element.data('tabindex')); - } - }, - - clickListener: function () { - var that = this, - $document = $(document); - - this.$newElement.on('touchstart.dropdown', '.dropdown-menu', function (e) { - e.stopPropagation(); - }); - - $document.data('spaceSelect', false); - - this.$button.on('keyup', function (e) { - if (/(32)/.test(e.keyCode.toString(10)) && $document.data('spaceSelect')) { - e.preventDefault(); - $document.data('spaceSelect', false); - } - }); - - this.$newElement.on('click', function () { - that.setSize(); - that.$element.on('shown.bs.select', function () { - if (!that.options.liveSearch && !that.multiple) { - that.$menu.find('.selected a').focus(); - } else if (!that.multiple) { - var selectedIndex = that.liObj[that.$element[0].selectedIndex]; - - if (typeof selectedIndex !== 'number' || that.options.size === false) return; - - // scroll to selected option - var offset = that.$lis.eq(selectedIndex)[0].offsetTop - that.$menuInner[0].offsetTop; - offset = offset - that.$menuInner[0].offsetHeight/2 + that.sizeInfo.liHeight/2; - that.$menuInner[0].scrollTop = offset; - } - }); - }); - - this.$menu.on('click', 'li a', function (e) { - var $this = $(this), - clickedIndex = $this.parent().data('originalIndex'), - prevValue = that.$element.val(), - prevIndex = that.$element.prop('selectedIndex'); - - // Don't close on multi choice menu - if (that.multiple) { - e.stopPropagation(); - } - - e.preventDefault(); - - //Don't run if we have been disabled - if (!that.isDisabled() && !$this.parent().hasClass('disabled')) { - var $options = that.$element.find('option'), - $option = $options.eq(clickedIndex), - state = $option.prop('selected'), - $optgroup = $option.parent('optgroup'), - maxOptions = that.options.maxOptions, - maxOptionsGrp = $optgroup.data('maxOptions') || false; - - if (!that.multiple) { // Deselect all others if not multi select box - $options.prop('selected', false); - $option.prop('selected', true); - that.$menu.find('.selected').removeClass('selected'); - that.setSelected(clickedIndex, true); - } else { // Toggle the one we have chosen if we are multi select. - $option.prop('selected', !state); - that.setSelected(clickedIndex, !state); - $this.blur(); - - if (maxOptions !== false || maxOptionsGrp !== false) { - var maxReached = maxOptions < $options.filter(':selected').length, - maxReachedGrp = maxOptionsGrp < $optgroup.find('option:selected').length; - - if ((maxOptions && maxReached) || (maxOptionsGrp && maxReachedGrp)) { - if (maxOptions && maxOptions == 1) { - $options.prop('selected', false); - $option.prop('selected', true); - that.$menu.find('.selected').removeClass('selected'); - that.setSelected(clickedIndex, true); - } else if (maxOptionsGrp && maxOptionsGrp == 1) { - $optgroup.find('option:selected').prop('selected', false); - $option.prop('selected', true); - var optgroupID = $this.parent().data('optgroup'); - that.$menu.find('[data-optgroup="' + optgroupID + '"]').removeClass('selected'); - that.setSelected(clickedIndex, true); - } else { - var maxOptionsArr = (typeof that.options.maxOptionsText === 'function') ? - that.options.maxOptionsText(maxOptions, maxOptionsGrp) : that.options.maxOptionsText, - maxTxt = maxOptionsArr[0].replace('{n}', maxOptions), - maxTxtGrp = maxOptionsArr[1].replace('{n}', maxOptionsGrp), - $notify = $('
    '); - // If {var} is set in array, replace it - /** @deprecated */ - if (maxOptionsArr[2]) { - maxTxt = maxTxt.replace('{var}', maxOptionsArr[2][maxOptions > 1 ? 0 : 1]); - maxTxtGrp = maxTxtGrp.replace('{var}', maxOptionsArr[2][maxOptionsGrp > 1 ? 0 : 1]); - } - - $option.prop('selected', false); - - that.$menu.append($notify); - - if (maxOptions && maxReached) { - $notify.append($('
    ' + maxTxt + '
    ')); - that.$element.trigger('maxReached.bs.select'); - } - - if (maxOptionsGrp && maxReachedGrp) { - $notify.append($('
    ' + maxTxtGrp + '
    ')); - that.$element.trigger('maxReachedGrp.bs.select'); - } - - setTimeout(function () { - that.setSelected(clickedIndex, false); - }, 10); - - $notify.delay(750).fadeOut(300, function () { - $(this).remove(); - }); - } - } - } - } - - if (!that.multiple) { - that.$button.focus(); - } else if (that.options.liveSearch) { - that.$searchbox.focus(); - } - - // Trigger select 'change' - if ((prevValue != that.$element.val() && that.multiple) || (prevIndex != that.$element.prop('selectedIndex') && !that.multiple)) { - that.$element.triggerNative('change'); - // $option.prop('selected') is current option state (selected/unselected). state is previous option state. - that.$element.trigger('changed.bs.select', [clickedIndex, $option.prop('selected'), state]); - } - } - }); - - this.$menu.on('click', 'li.disabled a, .popover-title, .popover-title :not(.close)', function (e) { - if (e.currentTarget == this) { - e.preventDefault(); - e.stopPropagation(); - if (that.options.liveSearch && !$(e.target).hasClass('close')) { - that.$searchbox.focus(); - } else { - that.$button.focus(); - } - } - }); - - this.$menu.on('click', 'li.divider, li.dropdown-header', function (e) { - e.preventDefault(); - e.stopPropagation(); - if (that.options.liveSearch) { - that.$searchbox.focus(); - } else { - that.$button.focus(); - } - }); - - this.$menu.on('click', '.popover-title .close', function () { - that.$button.click(); - }); - - this.$searchbox.on('click', function (e) { - e.stopPropagation(); - }); - - this.$menu.on('click', '.actions-btn', function (e) { - if (that.options.liveSearch) { - that.$searchbox.focus(); - } else { - that.$button.focus(); - } - - e.preventDefault(); - e.stopPropagation(); - - if ($(this).hasClass('bs-select-all')) { - that.selectAll(); - } else { - that.deselectAll(); - } - that.$element.triggerNative('change'); - }); - - this.$element.change(function () { - that.render(false); - }); - }, - - liveSearchListener: function () { - var that = this, - $no_results = $('
  • '); - - this.$newElement.on('click.dropdown.data-api touchstart.dropdown.data-api', function () { - that.$menuInner.find('.active').removeClass('active'); - if (!!that.$searchbox.val()) { - that.$searchbox.val(''); - that.$lis.not('.is-hidden').removeClass('hidden'); - if (!!$no_results.parent().length) $no_results.remove(); - } - if (!that.multiple) that.$menuInner.find('.selected').addClass('active'); - setTimeout(function () { - that.$searchbox.focus(); - }, 10); - }); - - this.$searchbox.on('click.dropdown.data-api focus.dropdown.data-api touchend.dropdown.data-api', function (e) { - e.stopPropagation(); - }); - - this.$searchbox.on('input propertychange', function () { - if (that.$searchbox.val()) { - var $searchBase = that.$lis.not('.is-hidden').removeClass('hidden').children('a'); - if (that.options.liveSearchNormalize) { - $searchBase = $searchBase.not(':a' + that._searchStyle() + '("' + normalizeToBase(that.$searchbox.val()) + '")'); - } else { - $searchBase = $searchBase.not(':' + that._searchStyle() + '("' + that.$searchbox.val() + '")'); - } - $searchBase.parent().addClass('hidden'); - - that.$lis.filter('.dropdown-header').each(function () { - var $this = $(this), - optgroup = $this.data('optgroup'); - - if (that.$lis.filter('[data-optgroup=' + optgroup + ']').not($this).not('.hidden').length === 0) { - $this.addClass('hidden'); - that.$lis.filter('[data-optgroup=' + optgroup + 'div]').addClass('hidden'); - } - }); - - var $lisVisible = that.$lis.not('.hidden'); - - // hide divider if first or last visible, or if followed by another divider - $lisVisible.each(function (index) { - var $this = $(this); - - if ($this.hasClass('divider') && ( - $this.index() === $lisVisible.eq(0).index() || - $this.index() === $lisVisible.last().index() || - $lisVisible.eq(index + 1).hasClass('divider'))) { - $this.addClass('hidden'); - } - }); - - if (!that.$lis.not('.hidden, .no-results').length) { - if (!!$no_results.parent().length) { - $no_results.remove(); - } - $no_results.html(that.options.noneResultsText.replace('{0}', '"' + htmlEscape(that.$searchbox.val()) + '"')).show(); - that.$menuInner.append($no_results); - } else if (!!$no_results.parent().length) { - $no_results.remove(); - } - - } else { - that.$lis.not('.is-hidden').removeClass('hidden'); - if (!!$no_results.parent().length) { - $no_results.remove(); - } - } - - that.$lis.filter('.active').removeClass('active'); - if (that.$searchbox.val()) that.$lis.not('.hidden, .divider, .dropdown-header').eq(0).addClass('active').children('a').focus(); - $(this).focus(); - }); - }, - - _searchStyle: function () { - var style = 'icontains'; - switch (this.options.liveSearchStyle) { - case 'begins': - case 'startsWith': - style = 'ibegins'; - break; - case 'contains': - default: - break; //no need to change the default - } - - return style; - }, - - val: function (value) { - if (typeof value !== 'undefined') { - this.$element.val(value); - this.render(); - - return this.$element; - } else { - return this.$element.val(); - } - }, - - selectAll: function () { - this.findLis(); - this.$element.find('option:enabled').not('[data-divider], [data-hidden]').prop('selected', true); - this.$lis.not('.divider, .dropdown-header, .disabled, .hidden').addClass('selected'); - this.render(false); - }, - - deselectAll: function () { - this.findLis(); - this.$element.find('option:enabled').not('[data-divider], [data-hidden]').prop('selected', false); - this.$lis.not('.divider, .dropdown-header, .disabled, .hidden').removeClass('selected'); - this.render(false); - }, - - keydown: function (e) { - var $this = $(this), - $parent = $this.is('input') ? $this.parent().parent() : $this.parent(), - $items, - that = $parent.data('this'), - index, - next, - first, - last, - prev, - nextPrev, - prevIndex, - isActive, - selector = ':not(.disabled, .hidden, .dropdown-header, .divider)', - keyCodeMap = { - 32: ' ', - 48: '0', - 49: '1', - 50: '2', - 51: '3', - 52: '4', - 53: '5', - 54: '6', - 55: '7', - 56: '8', - 57: '9', - 59: ';', - 65: 'a', - 66: 'b', - 67: 'c', - 68: 'd', - 69: 'e', - 70: 'f', - 71: 'g', - 72: 'h', - 73: 'i', - 74: 'j', - 75: 'k', - 76: 'l', - 77: 'm', - 78: 'n', - 79: 'o', - 80: 'p', - 81: 'q', - 82: 'r', - 83: 's', - 84: 't', - 85: 'u', - 86: 'v', - 87: 'w', - 88: 'x', - 89: 'y', - 90: 'z', - 96: '0', - 97: '1', - 98: '2', - 99: '3', - 100: '4', - 101: '5', - 102: '6', - 103: '7', - 104: '8', - 105: '9' - }; - - if (that.options.liveSearch) $parent = $this.parent().parent(); - - if (that.options.container) $parent = that.$menu; - - $items = $('[role=menu] li a', $parent); - - isActive = that.$menu.parent().hasClass('open'); - - if (!isActive && (e.keyCode >= 48 && e.keyCode <= 57 || e.keyCode >= 65 && e.keyCode <= 90)) { - if (!that.options.container) { - that.setSize(); - that.$menu.parent().addClass('open'); - isActive = true; - } else { - that.$newElement.trigger('click'); - } - that.$searchbox.focus(); - } - - if (that.options.liveSearch) { - if (/(^9$|27)/.test(e.keyCode.toString(10)) && isActive && that.$menu.find('.active').length === 0) { - e.preventDefault(); - that.$menu.parent().removeClass('open'); - if (that.options.container) that.$newElement.removeClass('open'); - that.$button.focus(); - } - // $items contains li elements when liveSearch is enabled - $items = $('[role=menu] li:not(.disabled, .hidden, .dropdown-header, .divider)', $parent); - if (!$this.val() && !/(38|40)/.test(e.keyCode.toString(10))) { - if ($items.filter('.active').length === 0) { - $items = that.$newElement.find('li'); - if (that.options.liveSearchNormalize) { - $items = $items.filter(':a' + that._searchStyle() + '(' + normalizeToBase(keyCodeMap[e.keyCode]) + ')'); - } else { - $items = $items.filter(':' + that._searchStyle() + '(' + keyCodeMap[e.keyCode] + ')'); - } - } - } - } - - if (!$items.length) return; - - if (/(38|40)/.test(e.keyCode.toString(10))) { - index = $items.index($items.filter(':focus')); - first = $items.parent(selector).first().data('originalIndex'); - last = $items.parent(selector).last().data('originalIndex'); - next = $items.eq(index).parent().nextAll(selector).eq(0).data('originalIndex'); - prev = $items.eq(index).parent().prevAll(selector).eq(0).data('originalIndex'); - nextPrev = $items.eq(next).parent().prevAll(selector).eq(0).data('originalIndex'); - - if (that.options.liveSearch) { - $items.each(function (i) { - if (!$(this).hasClass('disabled')) { - $(this).data('index', i); - } - }); - index = $items.index($items.filter('.active')); - first = $items.first().data('index'); - last = $items.last().data('index'); - next = $items.eq(index).nextAll().eq(0).data('index'); - prev = $items.eq(index).prevAll().eq(0).data('index'); - nextPrev = $items.eq(next).prevAll().eq(0).data('index'); - } - - prevIndex = $this.data('prevIndex'); - - if (e.keyCode == 38) { - if (that.options.liveSearch) index -= 1; - if (index != nextPrev && index > prev) index = prev; - if (index < first) index = first; - if (index == prevIndex) index = last; - } else if (e.keyCode == 40) { - if (that.options.liveSearch) index += 1; - if (index == -1) index = 0; - if (index != nextPrev && index < next) index = next; - if (index > last) index = last; - if (index == prevIndex) index = first; - } - - $this.data('prevIndex', index); - - if (!that.options.liveSearch) { - $items.eq(index).focus(); - } else { - e.preventDefault(); - if (!$this.hasClass('dropdown-toggle')) { - $items.removeClass('active').eq(index).addClass('active').children('a').focus(); - $this.focus(); - } - } - - } else if (!$this.is('input')) { - var keyIndex = [], - count, - prevKey; - - $items.each(function () { - if (!$(this).parent().hasClass('disabled')) { - if ($.trim($(this).text().toLowerCase()).substring(0, 1) == keyCodeMap[e.keyCode]) { - keyIndex.push($(this).parent().index()); - } - } - }); - - count = $(document).data('keycount'); - count++; - $(document).data('keycount', count); - - prevKey = $.trim($(':focus').text().toLowerCase()).substring(0, 1); - - if (prevKey != keyCodeMap[e.keyCode]) { - count = 1; - $(document).data('keycount', count); - } else if (count >= keyIndex.length) { - $(document).data('keycount', 0); - if (count > keyIndex.length) count = 1; - } - - $items.eq(keyIndex[count - 1]).focus(); - } - - // Select focused option if "Enter", "Spacebar" or "Tab" (when selectOnTab is true) are pressed inside the menu. - if ((/(13|32)/.test(e.keyCode.toString(10)) || (/(^9$)/.test(e.keyCode.toString(10)) && that.options.selectOnTab)) && isActive) { - if (!/(32)/.test(e.keyCode.toString(10))) e.preventDefault(); - if (!that.options.liveSearch) { - var elem = $(':focus'); - elem.click(); - // Bring back focus for multiselects - elem.focus(); - // Prevent screen from scrolling if the user hit the spacebar - e.preventDefault(); - // Fixes spacebar selection of dropdown items in FF & IE - $(document).data('spaceSelect', true); - } else if (!/(32)/.test(e.keyCode.toString(10))) { - that.$menu.find('.active a').click(); - $this.focus(); - } - $(document).data('keycount', 0); - } - - if ((/(^9$|27)/.test(e.keyCode.toString(10)) && isActive && (that.multiple || that.options.liveSearch)) || (/(27)/.test(e.keyCode.toString(10)) && !isActive)) { - that.$menu.parent().removeClass('open'); - if (that.options.container) that.$newElement.removeClass('open'); - that.$button.focus(); - } - }, - - mobile: function () { - this.$element.addClass('mobile-device').appendTo(this.$newElement); - if (this.options.container) this.$menu.hide(); - }, - - refresh: function () { - this.$lis = null; - this.liObj = {}; - this.reloadLi(); - this.render(); - this.checkDisabled(); - this.liHeight(true); - this.setStyle(); - this.setWidth(); - if (this.$lis) this.$searchbox.trigger('propertychange'); - - this.$element.trigger('refreshed.bs.select'); - }, - - hide: function () { - this.$newElement.hide(); - }, - - show: function () { - this.$newElement.show(); - }, - - remove: function () { - this.$newElement.remove(); - this.$element.remove(); - } - }; - - // SELECTPICKER PLUGIN DEFINITION - // ============================== - function Plugin(option, event) { - // get the args of the outer function.. - var args = arguments; - // The arguments of the function are explicitly re-defined from the argument list, because the shift causes them - // to get lost/corrupted in android 2.3 and IE9 #715 #775 - var _option = option, - _event = event; - [].shift.apply(args); - - var value; - var chain = this.each(function () { - var $this = $(this); - if ($this.is('select')) { - var data = $this.data('selectpicker'), - options = typeof _option == 'object' && _option; - - if (!data) { - var config = $.extend({}, Selectpicker.DEFAULTS, $.fn.selectpicker.defaults || {}, $this.data(), options); - $this.data('selectpicker', (data = new Selectpicker(this, config, _event))); - } else if (options) { - for (var i in options) { - if (options.hasOwnProperty(i)) { - data.options[i] = options[i]; - } - } - } - - if (typeof _option == 'string') { - if (data[_option] instanceof Function) { - value = data[_option].apply(data, args); - } else { - value = data.options[_option]; - } - } - } - }); - - if (typeof value !== 'undefined') { - //noinspection JSUnusedAssignment - return value; - } else { - return chain; - } - } - - var old = $.fn.selectpicker; - $.fn.selectpicker = Plugin; - $.fn.selectpicker.Constructor = Selectpicker; - - // SELECTPICKER NO CONFLICT - // ======================== - $.fn.selectpicker.noConflict = function () { - $.fn.selectpicker = old; - return this; - }; - - $(document) - .data('keycount', 0) - .on('keydown', '.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role="menu"], .bs-searchbox input', Selectpicker.prototype.keydown) - .on('focusin.modal', '.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role="menu"], .bs-searchbox input', function (e) { - e.stopPropagation(); - }); - - // SELECTPICKER DATA-API - // ===================== - $(window).on('load.bs.select.data-api', function () { - $('.selectpicker').each(function () { - var $selectpicker = $(this); - Plugin.call($selectpicker, $selectpicker.data()); - }) - }); -})(jQuery); - - -})); diff --git a/modoboa/bower_components/bootstrap-select/dist/js/bootstrap-select.js.map b/modoboa/bower_components/bootstrap-select/dist/js/bootstrap-select.js.map deleted file mode 100644 index 5b851e992..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/bootstrap-select.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"bootstrap-select.min.js","sources":["bootstrap-select.js"],"names":["root","factory","define","amd","a0","exports","module","require","jQuery","this","$","normalizeToBase","text","rExps","re","ch","each","replace","htmlEscape","html","escapeMap","&","<",">","\"","'","`","source","Object","keys","join","testRegexp","RegExp","replaceRegexp","string","test","match","Plugin","option","event","args","arguments","_option","_event","shift","apply","value","chain","$this","is","data","options","i","hasOwnProperty","config","extend","Selectpicker","DEFAULTS","fn","selectpicker","defaults","Function","String","prototype","includes","toString","defineProperty","object","$defineProperty","result","error","indexOf","search","TypeError","call","stringLength","length","searchString","searchLength","position","undefined","pos","Number","start","Math","min","max","configurable","writable","startsWith","index","charCodeAt","o","k","r","push","triggerNative","eventName","el","dispatchEvent","Event","bubbles","document","createEvent","initEvent","fireEvent","createEventObject","eventType","trigger","expr","icontains","obj","meta","$obj","haystack","toUpperCase","ibegins","aicontains","aibegins","element","e","stopPropagation","preventDefault","$element","$newElement","$button","$menu","$lis","title","attr","val","render","refresh","setStyle","selectAll","deselectAll","destroy","remove","show","hide","init","VERSION","noneSelectedText","noneResultsText","countSelectedText","numSelected","numTotal","maxOptionsText","numAll","numGroup","selectAllText","deselectAllText","doneButton","doneButtonText","multipleSeparator","styleBase","style","size","selectedTextFormat","width","container","hideDisabled","showSubtext","showIcon","showContent","dropupAuto","header","liveSearch","liveSearchPlaceholder","liveSearchNormalize","liveSearchStyle","actionsBox","iconBase","tickIcon","maxOptions","mobile","selectOnTab","dropdownAlignRight","constructor","that","id","addClass","liObj","multiple","prop","autofocus","createView","after","children","$menuInner","$searchbox","find","click","focus","checkDisabled","clickListener","liveSearchListener","setWidth","selectPosition","on","setTimeout","createDropdown","inputGroup","parent","hasClass","searchbox","actionsbox","donebutton","drop","$drop","li","createLi","innerHTML","reloadLi","destroyLi","_li","optID","titleOption","createElement","liIndex","generateLI","content","classes","optgroup","generateA","inline","tokens","className","appendChild","createTextNode","insertBefore","firstChild","selectedIndex","selected","optionClass","cssText","subtext","icon","isDisabled","disabled","parentElement","tagName","optGroupClass","label","labelSubtext","labelIcon","previousElementSibling","eq","findLis","updateLi","notDisabled","setDisabled","setSelected","tabIndex","selectedItems","map","toArray","split","totalCount","not","tr8nText","trim","status","buttonClass","removeClass","liHeight","sizeInfo","newElement","menu","menuInner","divider","a","cloneNode","actions","parentNode","input","body","offsetHeight","headerHeight","searchHeight","actionsHeight","doneButtonHeight","dividerHeight","outerHeight","menuStyle","getComputedStyle","menuPadding","parseInt","paddingTop","css","paddingBottom","borderTopWidth","borderBottomWidth","menuExtras","marginTop","marginBottom","removeChild","setSize","menuHeight","getHeight","selectOffsetTop","selectOffsetBot","$window","window","selectHeight","divHeight","posVert","offset","top","scrollTop","height","getSize","minHeight","include","classList","contains","lis","getElementsByTagName","lisVisible","Array","filter","optGroup","toggleClass","max-height","overflow","min-height","overflow-y","off","optIndex","slice","last","divLength","$selectClone","clone","appendTo","$selectClone2","ulWidth","outerWidth","btnWidth","actualHeight","getPlacement","left","offsetWidth","append","detach","removeAttr","$document","keyCode","offsetTop","clickedIndex","prevValue","prevIndex","$options","$option","state","$optgroup","maxOptionsGrp","blur","maxReached","maxReachedGrp","optgroupID","maxOptionsArr","maxTxt","maxTxtGrp","$notify","delay","fadeOut","currentTarget","target","change","$no_results","$searchBase","_searchStyle","$lisVisible","keydown","$items","next","first","prev","nextPrev","isActive","$parent","selector","keyCodeMap",32,48,49,50,51,52,53,54,55,56,57,59,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,96,97,98,99,100,101,102,103,104,105,"nextAll","prevAll","count","prevKey","keyIndex","toLowerCase","substring","elem","old","Constructor","noConflict","$selectpicker"],"mappings":";;;;;;CAOC,SAAUA,EAAMC,GACO,kBAAXC,SAAyBA,OAAOC,IAEzCD,QAAQ,UAAW,SAAUE,GAC3B,MAAQH,GAAQG,KAEU,gBAAZC,SAIhBC,OAAOD,QAAUJ,EAAQM,QAAQ,WAEjCN,EAAQO,SAEVC,KAAM,YAER,SAAWC,GACT,YA8LA,SAASC,GAAgBC,GACvB,GAAIC,KACDC,GAAI,eAAgBC,GAAI,MACxBD,GAAI,eAAgBC,GAAI,MACxBD,GAAI,eAAgBC,GAAI,MACxBD,GAAI,eAAgBC,GAAI,MACxBD,GAAI,eAAgBC,GAAI,MACxBD,GAAI,eAAgBC,GAAI,MACxBD,GAAI,eAAgBC,GAAI,MACxBD,GAAI,eAAgBC,GAAI,MACxBD,GAAI,eAAgBC,GAAI,MACxBD,GAAI,eAAgBC,GAAI,MACxBD,GAAI,eAAgBC,GAAI,MACxBD,GAAI,UAAWC,GAAI,MACnBD,GAAI,UAAWC,GAAI,KAKtB,OAHAL,GAAEM,KAAKH,EAAO,WACZD,EAAOA,EAAKK,QAAQR,KAAKK,GAAIL,KAAKM,MAE7BH,EAIT,QAASM,GAAWC,GAClB,GAAIC,IACFC,IAAK,QACLC,IAAK,OACLC,IAAK,OACLC,IAAK,SACLC,IAAK,SACLC,IAAK,UAEHC,EAAS,MAAQC,OAAOC,KAAKT,GAAWU,KAAK,KAAO,IACpDC,EAAa,GAAIC,QAAOL,GACxBM,EAAgB,GAAID,QAAOL,EAAQ,KACnCO,EAAiB,MAARf,EAAe,GAAK,GAAKA,CACtC,OAAOY,GAAWI,KAAKD,GAAUA,EAAOjB,QAAQgB,EAAe,SAAUG,GACvE,MAAOhB,GAAUgB,KACdF,EA2yCP,QAASG,GAAOC,EAAQC,GAEtB,GAAIC,GAAOC,UAGPC,EAAUJ,EACVK,EAASJ,KACVK,MAAMC,MAAML,EAEf,IAAIM,GACAC,EAAQtC,KAAKO,KAAK,WACpB,GAAIgC,GAAQtC,EAAED,KACd,IAAIuC,EAAMC,GAAG,UAAW,CACtB,GAAIC,GAAOF,EAAME,KAAK,gBAClBC,EAA4B,gBAAXT,IAAuBA,CAE5C,IAAKQ,GAGE,GAAIC,EACT,IAAK,GAAIC,KAAKD,GACRA,EAAQE,eAAeD,KACzBF,EAAKC,QAAQC,GAAKD,EAAQC,QANrB,CACT,GAAIE,GAAS5C,EAAE6C,UAAWC,EAAaC,SAAU/C,EAAEgD,GAAGC,aAAaC,aAAgBZ,EAAME,OAAQC,EACjGH,GAAME,KAAK,eAAiBA,EAAO,GAAIM,GAAa/C,KAAM6C,EAAQX,IAS9C,gBAAXD,KAEPI,EADEI,EAAKR,YAAoBmB,UACnBX,EAAKR,GAASG,MAAMK,EAAMV,GAE1BU,EAAKC,QAAQT,MAM7B,OAAqB,mBAAVI,GAEFA,EAEAC,EArjDNe,OAAOC,UAAUC,WACnB,WAEC,GAAIC,MAAcA,SACdC,EAAkB,WAEpB,IACE,GAAIC,MACAC,EAAkBxC,OAAOsC,eACzBG,EAASD,EAAgBD,EAAQA,EAAQA,IAAWC,EACxD,MAAOE,IAET,MAAOD,MAELE,EAAU,GAAGA,QACbP,EAAW,SAAUQ,GACvB,GAAY,MAAR/D,KACF,KAAMgE,YAER,IAAIvC,GAAS4B,OAAOrD,KACpB,IAAI+D,GAAmC,mBAAzBP,EAASS,KAAKF,GAC1B,KAAMC,YAER,IAAIE,GAAezC,EAAO0C,OACtBC,EAAef,OAAOU,GACtBM,EAAeD,EAAaD,OAC5BG,EAAWtC,UAAUmC,OAAS,EAAInC,UAAU,GAAKuC,OAEjDC,EAAMF,EAAWG,OAAOH,GAAY,CACpCE,IAAOA,IACTA,EAAM,EAER,IAAIE,GAAQC,KAAKC,IAAID,KAAKE,IAAIL,EAAK,GAAIN,EAEvC,OAAIG,GAAeK,EAAQR,GAClB,EAEyC,IAA3CJ,EAAQG,KAAKxC,EAAQ2C,EAAcI,GAExCf,GACFA,EAAeJ,OAAOC,UAAW,YAC/BjB,MAASkB,EACTuB,cAAgB,EAChBC,UAAY,IAGd1B,OAAOC,UAAUC,SAAWA,KAK7BF,OAAOC,UAAU0B,aACnB,WAEC,GAAIvB,GAAkB,WAEpB,IACE,GAAIC,MACAC,EAAkBxC,OAAOsC,eACzBG,EAASD,EAAgBD,EAAQA,EAAQA,IAAWC,EACxD,MAAOE,IAET,MAAOD,MAELJ,KAAcA,SACdwB,EAAa,SAAUjB,GACzB,GAAY,MAAR/D,KACF,KAAMgE,YAER,IAAIvC,GAAS4B,OAAOrD,KACpB,IAAI+D,GAAmC,mBAAzBP,EAASS,KAAKF,GAC1B,KAAMC,YAER,IAAIE,GAAezC,EAAO0C,OACtBC,EAAef,OAAOU,GACtBM,EAAeD,EAAaD,OAC5BG,EAAWtC,UAAUmC,OAAS,EAAInC,UAAU,GAAKuC,OAEjDC,EAAMF,EAAWG,OAAOH,GAAY,CACpCE,IAAOA,IACTA,EAAM,EAER,IAAIE,GAAQC,KAAKC,IAAID,KAAKE,IAAIL,EAAK,GAAIN,EAEvC,IAAIG,EAAeK,EAAQR,EACzB,OAAO,CAGT,KADA,GAAIe,GAAQ,KACHA,EAAQZ,GACf,GAAI5C,EAAOyD,WAAWR,EAAQO,IAAUb,EAAac,WAAWD,GAC9D,OAAO,CAGX,QAAO,EAELxB,GACFA,EAAeJ,OAAOC,UAAW,cAC/BjB,MAAS2C,EACTF,cAAgB,EAChBC,UAAY,IAGd1B,OAAOC,UAAU0B,WAAaA,KAK/B7D,OAAOC,OACVD,OAAOC,KAAO,SACZ+D,EACAC,EACAC,GAGAA,IAEA,KAAKD,IAAKD,GAERE,EAAEzC,eAAeqB,KAAKkB,EAAGC,IAAMC,EAAEC,KAAKF,EAExC,OAAOC,KAIXpF,EAAEgD,GAAGsC,cAAgB,SAAUC,GAC7B,GACI1D,GADA2D,EAAKzF,KAAK,EAGVyF,GAAGC,eACgB,kBAAVC,OAET7D,EAAQ,GAAI6D,OAAMH,GAChBI,SAAS,KAIX9D,EAAQ+D,SAASC,YAAY,SAC7BhE,EAAMiE,UAAUP,GAAW,GAAM,IAGnCC,EAAGC,cAAc5D,KAEb2D,EAAGO,YACLlE,EAAQ+D,SAASI,oBACjBnE,EAAMoE,UAAYV,EAClBC,EAAGO,UAAU,KAAOR,EAAW1D,IAGjC9B,KAAKmG,QAAQX,KAMjBvF,EAAEmG,KAAK,KAAKC,UAAY,SAAUC,EAAKrB,EAAOsB,GAC5C,GAAIC,GAAOvG,EAAEqG,GACTG,GAAYD,EAAK/D,KAAK,WAAa+D,EAAKrG,QAAQuG,aACpD,OAAOD,GAASlD,SAASgD,EAAK,GAAGG,gBAInCzG,EAAEmG,KAAK,KAAKO,QAAU,SAAUL,EAAKrB,EAAOsB,GAC1C,GAAIC,GAAOvG,EAAEqG,GACTG,GAAYD,EAAK/D,KAAK,WAAa+D,EAAKrG,QAAQuG,aACpD,OAAOD,GAASzB,WAAWuB,EAAK,GAAGG,gBAIrCzG,EAAEmG,KAAK,KAAKQ,WAAa,SAAUN,EAAKrB,EAAOsB,GAC7C,GAAIC,GAAOvG,EAAEqG,GACTG,GAAYD,EAAK/D,KAAK,WAAa+D,EAAK/D,KAAK,mBAAqB+D,EAAKrG,QAAQuG,aACnF,OAAOD,GAASlD,SAASgD,EAAK,GAAGG,gBAInCzG,EAAEmG,KAAK,KAAKS,SAAW,SAAUP,EAAKrB,EAAOsB,GAC3C,GAAIC,GAAOvG,EAAEqG,GACTG,GAAYD,EAAK/D,KAAK,WAAa+D,EAAK/D,KAAK,mBAAqB+D,EAAKrG,QAAQuG,aACnF,OAAOD,GAASzB,WAAWuB,EAAK,GAAGG,eAkDrC,IAAI3D,GAAe,SAAU+D,EAASpE,EAASqE,GACzCA,IACFA,EAAEC,kBACFD,EAAEE,kBAGJjH,KAAKkH,SAAWjH,EAAE6G,GAClB9G,KAAKmH,YAAc,KACnBnH,KAAKoH,QAAU,KACfpH,KAAKqH,MAAQ,KACbrH,KAAKsH,KAAO,KACZtH,KAAK0C,QAAUA,EAIY,OAAvB1C,KAAK0C,QAAQ6E,QACfvH,KAAK0C,QAAQ6E,MAAQvH,KAAKkH,SAASM,KAAK,UAI1CxH,KAAKyH,IAAM1E,EAAaO,UAAUmE,IAClCzH,KAAK0H,OAAS3E,EAAaO,UAAUoE,OACrC1H,KAAK2H,QAAU5E,EAAaO,UAAUqE,QACtC3H,KAAK4H,SAAW7E,EAAaO,UAAUsE,SACvC5H,KAAK6H,UAAY9E,EAAaO,UAAUuE,UACxC7H,KAAK8H,YAAc/E,EAAaO,UAAUwE,YAC1C9H,KAAK+H,QAAUhF,EAAaO,UAAU0E,OACtChI,KAAKgI,OAASjF,EAAaO,UAAU0E,OACrChI,KAAKiI,KAAOlF,EAAaO,UAAU2E,KACnCjI,KAAKkI,KAAOnF,EAAaO,UAAU4E,KAEnClI,KAAKmI,OAGPpF,GAAaqF,QAAU,QAGvBrF,EAAaC,UACXqF,iBAAkB,mBAClBC,gBAAiB,yBACjBC,kBAAmB,SAAUC,EAAaC,GACxC,MAAuB,IAAfD,EAAoB,oBAAsB,sBAEpDE,eAAgB,SAAUC,EAAQC,GAChC,OACa,GAAVD,EAAe,+BAAiC,gCACpC,GAAZC,EAAiB,qCAAuC,wCAG7DC,cAAe,aACfC,gBAAiB,eACjBC,YAAY,EACZC,eAAgB,QAChBC,kBAAmB,KACnBC,UAAW,MACXC,MAAO,cACPC,KAAM,OACN7B,MAAO,KACP8B,mBAAoB,SACpBC,OAAO,EACPC,WAAW,EACXC,cAAc,EACdC,aAAa,EACbC,UAAU,EACVC,aAAa,EACbC,YAAY,EACZC,QAAQ,EACRC,YAAY,EACZC,sBAAuB,KACvBC,qBAAqB,EACrBC,gBAAiB,WACjBC,YAAY,EACZC,SAAU,YACVC,SAAU,eACVC,YAAY,EACZC,QAAQ,EACRC,aAAa,EACbC,oBAAoB,GAGtBzH,EAAaO,WAEXmH,YAAa1H,EAEboF,KAAM,WACJ,GAAIuC,GAAO1K,KACP2K,EAAK3K,KAAKkH,SAASM,KAAK,KAE5BxH,MAAKkH,SAAS0D,SAAS,oBAGvB5K,KAAK6K,SACL7K,KAAK8K,SAAW9K,KAAKkH,SAAS6D,KAAK,YACnC/K,KAAKgL,UAAYhL,KAAKkH,SAAS6D,KAAK,aACpC/K,KAAKmH,YAAcnH,KAAKiL,aACxBjL,KAAKkH,SAASgE,MAAMlL,KAAKmH,aACzBnH,KAAKoH,QAAUpH,KAAKmH,YAAYgE,SAAS,UACzCnL,KAAKqH,MAAQrH,KAAKmH,YAAYgE,SAAS,kBACvCnL,KAAKoL,WAAapL,KAAKqH,MAAM8D,SAAS,UACtCnL,KAAKqL,WAAarL,KAAKqH,MAAMiE,KAAK,SAE9BtL,KAAK0C,QAAQ8H,oBACfxK,KAAKqH,MAAMuD,SAAS,uBAEJ,mBAAPD,KACT3K,KAAKoH,QAAQI,KAAK,UAAWmD,GAC7B1K,EAAE,cAAgB0K,EAAK,MAAMY,MAAM,SAAUxE,GAC3CA,EAAEE,iBACFyD,EAAKtD,QAAQoE,WAIjBxL,KAAKyL,gBACLzL,KAAK0L,gBACD1L,KAAK0C,QAAQoH,YAAY9J,KAAK2L,qBAClC3L,KAAK0H,SACL1H,KAAK4H,WACL5H,KAAK4L,WACD5L,KAAK0C,QAAQ6G,WAAWvJ,KAAK6L,iBACjC7L,KAAKqH,MAAM5E,KAAK,OAAQzC,MACxBA,KAAKmH,YAAY1E,KAAK,OAAQzC,MAC1BA,KAAK0C,QAAQ4H,QAAQtK,KAAKsK,SAE9BtK,KAAKmH,YAAY2E,GAAG,mBAAoB,SAAU/E,GAChD2D,EAAKxD,SAASf,QAAQ,iBAAkBY,KAG1C/G,KAAKmH,YAAY2E,GAAG,qBAAsB,SAAU/E,GAClD2D,EAAKxD,SAASf,QAAQ,mBAAoBY,KAG5C/G,KAAKmH,YAAY2E,GAAG,mBAAoB,SAAU/E,GAChD2D,EAAKxD,SAASf,QAAQ,iBAAkBY,KAG1C/G,KAAKmH,YAAY2E,GAAG,oBAAqB,SAAU/E,GACjD2D,EAAKxD,SAASf,QAAQ,kBAAmBY,KAG3CgF,WAAW,WACTrB,EAAKxD,SAASf,QAAQ,uBAI1B6F,eAAgB,WAGd,GAAIlB,GAAW9K,KAAK8K,SAAW,aAAe,GAC1CmB,EAAajM,KAAKkH,SAASgF,SAASC,SAAS,eAAiB,mBAAqB,GACnFnB,EAAYhL,KAAKgL,UAAY,aAAe,GAE5CnB,EAAS7J,KAAK0C,QAAQmH,OAAS,qGAAuG7J,KAAK0C,QAAQmH,OAAS,SAAW,GACvKuC,EAAYpM,KAAK0C,QAAQoH,WAC7B,wFAEC,OAAS9J,KAAK0C,QAAQqH,sBAAwB,GAAK,iBAAmBtJ,EAAWT,KAAK0C,QAAQqH,uBAAyB,KAAO,UAEzH,GACFsC,EAAarM,KAAK8K,UAAY9K,KAAK0C,QAAQwH,WAC/C,oJAGAlK,KAAK0C,QAAQmG,cACb,sFAEA7I,KAAK0C,QAAQoG,gBACb,wBAGM,GACFwD,EAAatM,KAAK8K,UAAY9K,KAAK0C,QAAQqG,WAC/C,oHAGA/I,KAAK0C,QAAQsG,eACb,wBAGM,GACFuD,EACA,yCAA2CzB,EAAWmB,EAAa,kCACjCjM,KAAK0C,QAAQwG,UAAY,2CAA6C8B,EAAY,2HAKpHnB,EACAuC,EACAC,EACA,oDAEAC,EACA,cAGJ,OAAOrM,GAAEsM,IAGXtB,WAAY,WACV,GAAIuB,GAAQxM,KAAKgM,iBACbS,EAAKzM,KAAK0M,UAGd,OADAF,GAAMlB,KAAK,MAAM,GAAGqB,UAAYF,EACzBD,GAGTI,SAAU,WAER5M,KAAK6M,WAEL,IAAIJ,GAAKzM,KAAK0M,UACd1M,MAAKoL,WAAW,GAAGuB,UAAYF,GAGjCI,UAAW,WACT7M,KAAKqH,MAAMiE,KAAK,MAAMtD,UAGxB0E,SAAU,WACR,GAAIhC,GAAO1K,KACP8M,KACAC,EAAQ,EACRC,EAAcnH,SAASoH,cAAc,UACrCC,EAAU,GAUVC,EAAa,SAAUC,EAASnI,EAAOoI,EAASC,GAClD,MAAO,OACkB,mBAAZD,GAA0B,KAAOA,EAAW,WAAaA,EAAU,IAAM,KAC/D,mBAAVpI,GAAwB,OAASA,EAAS,yBAA2BA,EAAQ,IAAM,KACtE,mBAAbqI,GAA2B,OAASA,EAAY,kBAAoBA,EAAW,IAAM,IAC9F,IAAMF,EAAU,SAUlBG,EAAY,SAAUpN,EAAMkN,EAASG,EAAQC,GAC/C,MAAO,mBACiB,mBAAZJ,GAA0B,WAAaA,EAAU,IAAM,KAC5C,mBAAXG,GAAyB,WAAaA,EAAS,IAAM,KAC5D9C,EAAKhI,QAAQsH,oBAAsB,0BAA4B9J,EAAgBO,EAAWN,IAAS,IAAM,KACvF,mBAAXsN,IAAqC,OAAXA,EAAkB,iBAAmBA,EAAS,IAAM,IACtF,IAAMtN,EACN,gBAAkBuK,EAAKhI,QAAQyH,SAAW,IAAMO,EAAKhI,QAAQ0H,SAAW,2BAI9E,IAAIpK,KAAK0C,QAAQ6E,QAAUvH,KAAK8K,WAG9BoC,KAEKlN,KAAKkH,SAASoE,KAAK,oBAAoBnH,QAAQ,CAElD,GAAI2C,GAAU9G,KAAKkH,SAAS,EAC5B8F,GAAYU,UAAY,kBACxBV,EAAYW,YAAY9H,SAAS+H,eAAe5N,KAAK0C,QAAQ6E,QAC7DyF,EAAY3K,MAAQ,GACpByE,EAAQ+G,aAAab,EAAalG,EAAQgH,YAEyBvJ,SAA/DtE,EAAE6G,EAAQpE,QAAQoE,EAAQiH,gBAAgBvG,KAAK,cAA2BwF,EAAYgB,UAAW,GA2EzG,MAvEAhO,MAAKkH,SAASoE,KAAK,UAAU/K,KAAK,SAAU0E,GAC1C,GAAI1C,GAAQtC,EAAED,KAId,IAFAkN,KAEI3K,EAAM4J,SAAS,mBAAnB,CAGA,GAAI8B,GAAcjO,KAAK0N,WAAa,GAChCF,EAASxN,KAAKmJ,MAAM+E,QACpB/N,EAAOoC,EAAME,KAAK,WAAaF,EAAME,KAAK,WAAaF,EAAM7B,OAC7D+M,EAASlL,EAAME,KAAK,UAAYF,EAAME,KAAK,UAAY,KACvD0L,EAA2C,mBAA1B5L,GAAME,KAAK,WAA6B,6BAA+BF,EAAME,KAAK,WAAa,WAAa,GAC7H2L,EAAqC,mBAAvB7L,GAAME,KAAK,QAA0B,gBAAkBiI,EAAKhI,QAAQyH,SAAW,IAAM5H,EAAME,KAAK,QAAU,aAAe,GACvI4L,EAAarO,KAAKsO,UAA4C,aAA/BtO,KAAKuO,cAAcC,SAA0BxO,KAAKuO,cAAcD,QAMnG,IAJa,KAATF,GAAeC,IACjBD,EAAO,SAAWA,EAAO,WAGvB1D,EAAKhI,QAAQ8G,cAAgB6E,EAE/B,WADAnB,IASF,IALK3K,EAAME,KAAK,aAEdtC,EAAOiO,EAAO,sBAAwBjO,EAAOgO,EAAU,WAGtB,aAA/BnO,KAAKuO,cAAcC,SAA0BjM,EAAME,KAAK,cAAe,EAAM,CAC/E,GAAIgM,GAAgB,IAAMzO,KAAKuO,cAAcb,WAAa,EAE1D,IAAsB,IAAlBnL,EAAM0C,QAAe,CACvB8H,GAAS,CAGT,IAAI2B,GAAQ1O,KAAKuO,cAAcG,MAC3BC,EAAyD,mBAAnCpM,GAAM2J,SAASzJ,KAAK,WAA6B,6BAA+BF,EAAM2J,SAASzJ,KAAK,WAAa,WAAa,GACpJmM,EAAYrM,EAAM2J,SAASzJ,KAAK,QAAU,gBAAkBiI,EAAKhI,QAAQyH,SAAW,IAAM5H,EAAM2J,SAASzJ,KAAK,QAAU,aAAe,EAE3IiM,GAAQE,EAAY,sBAAwBF,EAAQC,EAAe,UAErD,IAAV1J,GAAe6H,EAAI3I,OAAS,IAC9B+I,IACAJ,EAAIxH,KAAK6H,EAAW,GAAI,KAAM,UAAWJ,EAAQ,SAEnDG,IACAJ,EAAIxH,KAAK6H,EAAWuB,EAAO,KAAM,kBAAoBD,EAAe1B,IAEtED,EAAIxH,KAAK6H,EAAWI,EAAUpN,EAAM,OAAS8N,EAAcQ,EAAejB,EAAQC,GAASxI,EAAO,GAAI8H,QAC7FxK,GAAME,KAAK,cAAe,EACnCqK,EAAIxH,KAAK6H,EAAW,GAAIlI,EAAO,YACtB1C,EAAME,KAAK,aAAc,EAClCqK,EAAIxH,KAAK6H,EAAWI,EAAUpN,EAAM8N,EAAaT,EAAQC,GAASxI,EAAO,sBAErEjF,KAAK6O,wBAAkE,aAAxC7O,KAAK6O,uBAAuBL,UAC7DtB,IACAJ,EAAIxH,KAAK6H,EAAW,GAAI,KAAM,UAAWJ,EAAQ,SAEnDD,EAAIxH,KAAK6H,EAAWI,EAAUpN,EAAM8N,EAAaT,EAAQC,GAASxI,IAGpEyF,GAAKG,MAAM5F,GAASiI,KAIjBlN,KAAK8K,UAA6D,IAAjD9K,KAAKkH,SAASoE,KAAK,mBAAmBnH,QAAiBnE,KAAK0C,QAAQ6E,OACxFvH,KAAKkH,SAASoE,KAAK,UAAUwD,GAAG,GAAG/D,KAAK,YAAY,GAAMvD,KAAK,WAAY,YAGtEsF,EAAIzL,KAAK,KAGlB0N,QAAS,WAEP,MADiB,OAAb/O,KAAKsH,OAActH,KAAKsH,KAAOtH,KAAKqH,MAAMiE,KAAK,OAC5CtL,KAAKsH,MAMdI,OAAQ,SAAUsH,GAChB,GACIC,GADAvE,EAAO1K,IAIPgP,MAAa,GACfhP,KAAKkH,SAASoE,KAAK,UAAU/K,KAAK,SAAU0E,GAC1C,GAAIqC,GAAOoD,EAAKqE,UAAUD,GAAGpE,EAAKG,MAAM5F,GAExCyF,GAAKwE,YAAYjK,EAAOjF,KAAKsO,UAA2C,aAA/BtO,KAAKuO,cAAcC,SAA0BxO,KAAKuO,cAAcD,SAAUhH,GACnHoD,EAAKyE,YAAYlK,EAAOjF,KAAKgO,SAAU1G,KAI3CtH,KAAKoP,UAEL,IAAIC,GAAgBrP,KAAKkH,SAASoE,KAAK,UAAUgE,IAAI,WACnD,GAAItP,KAAKgO,SAAU,CACjB,GAAItD,EAAKhI,QAAQ8G,eAAiBxJ,KAAKsO,UAA2C,aAA/BtO,KAAKuO,cAAcC,SAA0BxO,KAAKuO,cAAcD,UAAW,OAAO,CAErI,IAEIH,GAFA5L,EAAQtC,EAAED,MACVoO,EAAO7L,EAAME,KAAK,SAAWiI,EAAKhI,QAAQgH,SAAW,aAAegB,EAAKhI,QAAQyH,SAAW,IAAM5H,EAAME,KAAK,QAAU,UAAY,EAQvI,OAJE0L,GADEzD,EAAKhI,QAAQ+G,aAAelH,EAAME,KAAK,aAAeiI,EAAKI,SACnD,8BAAgCvI,EAAME,KAAK,WAAa,WAExD,GAEuB,mBAAxBF,GAAMiF,KAAK,SACbjF,EAAMiF,KAAK,SACTjF,EAAME,KAAK,YAAciI,EAAKhI,QAAQiH,YACxCpH,EAAME,KAAK,WAEX2L,EAAO7L,EAAM7B,OAASyN,KAGhCoB,UAIChI,EAASvH,KAAK8K,SAA8BuE,EAAchO,KAAKrB,KAAK0C,QAAQuG,mBAAnDoG,EAAc,EAG3C,IAAIrP,KAAK8K,UAAY9K,KAAK0C,QAAQ2G,mBAAmBvF,QAAQ,SAAW,GAAI,CAC1E,GAAIe,GAAM7E,KAAK0C,QAAQ2G,mBAAmBmG,MAAM,IAChD,IAAK3K,EAAIV,OAAS,GAAKkL,EAAclL,OAASU,EAAI,IAAsB,GAAdA,EAAIV,QAAekL,EAAclL,QAAU,EAAI,CACvG8K,EAAcjP,KAAK0C,QAAQ8G,aAAe,eAAiB,EAC3D,IAAIiG,GAAazP,KAAKkH,SAASoE,KAAK,UAAUoE,IAAI,8CAAgDT,GAAa9K,OAC3GwL,EAAsD,kBAAnC3P,MAAK0C,QAAQ6F,kBAAoCvI,KAAK0C,QAAQ6F,kBAAkB8G,EAAclL,OAAQsL,GAAczP,KAAK0C,QAAQ6F,iBACxJhB,GAAQoI,EAASnP,QAAQ,MAAO6O,EAAclL,OAAOX,YAAYhD,QAAQ,MAAOiP,EAAWjM,aAIrEe,QAAtBvE,KAAK0C,QAAQ6E,QACfvH,KAAK0C,QAAQ6E,MAAQvH,KAAKkH,SAASM,KAAK,UAGH,UAAnCxH,KAAK0C,QAAQ2G,qBACf9B,EAAQvH,KAAK0C,QAAQ6E,OAIlBA,IACHA,EAAsC,mBAAvBvH,MAAK0C,QAAQ6E,MAAwBvH,KAAK0C,QAAQ6E,MAAQvH,KAAK0C,QAAQ2F,kBAIxFrI,KAAKoH,QAAQI,KAAK,QAASvH,EAAE2P,KAAKrI,EAAM/G,QAAQ,YAAa,MAC7DR,KAAKoH,QAAQ+D,SAAS,kBAAkBzK,KAAK6G,GAE7CvH,KAAKkH,SAASf,QAAQ,uBAOxByB,SAAU,SAAUuB,EAAO0G,GACrB7P,KAAKkH,SAASM,KAAK,UACrBxH,KAAKmH,YAAYyD,SAAS5K,KAAKkH,SAASM,KAAK,SAAShH,QAAQ,+DAAgE,IAGhI,IAAIsP,GAAc3G,EAAQA,EAAQnJ,KAAK0C,QAAQyG,KAEjC,QAAV0G,EACF7P,KAAKoH,QAAQwD,SAASkF,GACH,UAAVD,EACT7P,KAAKoH,QAAQ2I,YAAYD,IAEzB9P,KAAKoH,QAAQ2I,YAAY/P,KAAK0C,QAAQyG,OACtCnJ,KAAKoH,QAAQwD,SAASkF,KAI1BE,SAAU,SAAUrI,GAClB,GAAKA,GAAY3H,KAAK0C,QAAQ0G,QAAS,IAASpJ,KAAKiQ,SAArD,CAEA,GAAIC,GAAarK,SAASoH,cAAc,OACpCkD,EAAOtK,SAASoH,cAAc,OAC9BmD,EAAYvK,SAASoH,cAAc,MACnCoD,EAAUxK,SAASoH,cAAc,MACjCR,EAAK5G,SAASoH,cAAc,MAC5BqD,EAAIzK,SAASoH,cAAc,KAC3B9M,EAAO0F,SAASoH,cAAc,QAC9BpD,EAAS7J,KAAK0C,QAAQmH,OAAS7J,KAAKqH,MAAMiE,KAAK,kBAAkB,GAAGiF,WAAU,GAAQ,KACtFxM,EAAS/D,KAAK0C,QAAQoH,WAAajE,SAASoH,cAAc,OAAS,KACnEuD,EAAUxQ,KAAK0C,QAAQwH,YAAclK,KAAK8K,SAAW9K,KAAKqH,MAAMiE,KAAK,kBAAkB,GAAGiF,WAAU,GAAQ,KAC5GxH,EAAa/I,KAAK0C,QAAQqG,YAAc/I,KAAK8K,SAAW9K,KAAKqH,MAAMiE,KAAK,kBAAkB,GAAGiF,WAAU,GAAQ,IAcnH,IAZApQ,EAAKuN,UAAY,OACjBwC,EAAWxC,UAAY1N,KAAKqH,MAAM,GAAGoJ,WAAW/C,UAAY,QAC5DyC,EAAKzC,UAAY,qBACjB0C,EAAU1C,UAAY,sBACtB2C,EAAQ3C,UAAY,UAEpBvN,EAAKwN,YAAY9H,SAAS+H,eAAe,eACzC0C,EAAE3C,YAAYxN,GACdsM,EAAGkB,YAAY2C,GACfF,EAAUzC,YAAYlB,GACtB2D,EAAUzC,YAAY0C,GAClBxG,GAAQsG,EAAKxC,YAAY9D,GACzB9F,EAAQ,CAEV,GAAI2M,GAAQ7K,SAASoH,cAAc,OACnClJ,GAAO2J,UAAY,eACnBgD,EAAMhD,UAAY,eAClB3J,EAAO4J,YAAY+C,GACnBP,EAAKxC,YAAY5J,GAEfyM,GAASL,EAAKxC,YAAY6C,GAC9BL,EAAKxC,YAAYyC,GACbrH,GAAYoH,EAAKxC,YAAY5E,GACjCmH,EAAWvC,YAAYwC,GAEvBtK,SAAS8K,KAAKhD,YAAYuC,EAE1B,IAAIF,GAAWM,EAAEM,aACbC,EAAehH,EAASA,EAAO+G,aAAe,EAC9CE,EAAe/M,EAASA,EAAO6M,aAAe,EAC9CG,EAAgBP,EAAUA,EAAQI,aAAe,EACjDI,EAAmBjI,EAAaA,EAAW6H,aAAe,EAC1DK,EAAgBhR,EAAEoQ,GAASa,aAAY,GAEvCC,EAAwC,kBAArBC,kBAAkCA,iBAAiBjB,IAAQ,EAC9E9I,EAAQ8J,EAAY,KAAOlR,EAAEkQ,GAC7BkB,EAAcC,SAASH,EAAYA,EAAUI,WAAalK,EAAMmK,IAAI,eACtDF,SAASH,EAAYA,EAAUM,cAAgBpK,EAAMmK,IAAI,kBACzDF,SAASH,EAAYA,EAAUO,eAAiBrK,EAAMmK,IAAI,mBAC1DF,SAASH,EAAYA,EAAUQ,kBAAoBtK,EAAMmK,IAAI,sBAC3EI,EAAcP,EACAC,SAASH,EAAYA,EAAUU,UAAYxK,EAAMmK,IAAI,cACrDF,SAASH,EAAYA,EAAUW,aAAezK,EAAMmK,IAAI,iBAAmB,CAE7F3L,UAAS8K,KAAKoB,YAAY7B,GAE1BlQ,KAAKiQ,UACHD,SAAUA,EACVa,aAAcA,EACdC,aAAcA,EACdC,cAAeA,EACfC,iBAAkBA,EAClBC,cAAeA,EACfI,YAAaA,EACbO,WAAYA,KAIhBI,QAAS,WAKP,GAJAhS,KAAK+O,UACL/O,KAAKgQ,WAEDhQ,KAAK0C,QAAQmH,QAAQ7J,KAAKqH,MAAMmK,IAAI,cAAe,GACnDxR,KAAK0C,QAAQ0G,QAAS,EAA1B,CAEA,GAcI6I,GACAC,EACAC,EACAC,EAjBA1H,EAAO1K,KACPqH,EAAQrH,KAAKqH,MACb+D,EAAapL,KAAKoL,WAClBiH,EAAUpS,EAAEqS,QACZC,EAAevS,KAAKmH,YAAY,GAAGyJ,aACnCZ,EAAWhQ,KAAKiQ,SAAmB,SACnCY,EAAe7Q,KAAKiQ,SAAuB,aAC3Ca,EAAe9Q,KAAKiQ,SAAuB,aAC3Cc,EAAgB/Q,KAAKiQ,SAAwB,cAC7Ce,EAAmBhR,KAAKiQ,SAA2B,iBACnDuC,EAAYxS,KAAKiQ,SAAwB,cACzCoB,EAAcrR,KAAKiQ,SAAsB,YACzC2B,EAAa5R,KAAKiQ,SAAqB,WACvChB,EAAcjP,KAAK0C,QAAQ8G,aAAe,YAAc,GAKxDiJ,EAAU,WACRN,EAAkBzH,EAAKvD,YAAYuL,SAASC,IAAMN,EAAQO,YAC1DR,EAAkBC,EAAQQ,SAAWV,EAAkBI,EAK7D,IAFAE,IAE0B,SAAtBzS,KAAK0C,QAAQ0G,KAAiB,CAChC,GAAI0J,GAAU,WACZ,GAAIC,GACA5G,EAAW,SAAUuB,EAAWsF,GAC9B,MAAO,UAAUlM,GACb,MAAIkM,GACQlM,EAAQmM,UAAYnM,EAAQmM,UAAUC,SAASxF,GAAazN,EAAE6G,GAASqF,SAASuB,KAE/E5G,EAAQmM,UAAYnM,EAAQmM,UAAUC,SAASxF,GAAazN,EAAE6G,GAASqF,SAASuB,MAInGyF,EAAMzI,EAAKU,WAAW,GAAGgI,qBAAqB,MAC9CC,EAAaC,MAAMhQ,UAAUiQ,OAASD,MAAMhQ,UAAUiQ,OAAOtP,KAAKkP,EAAKhH,EAAS,UAAU,IAAUzB,EAAKpD,KAAKoI,IAAI,WAClH8D,EAAWF,MAAMhQ,UAAUiQ,OAASD,MAAMhQ,UAAUiQ,OAAOtP,KAAKoP,EAAYlH,EAAS,mBAAmB,IAASkH,EAAWE,OAAO,mBAEvId,KACAR,EAAaG,EAAkBR,EAE3BlH,EAAKhI,QAAQ6G,WACVlC,EAAM5E,KAAK,WAAW4E,EAAM5E,KAAK,SAAU4E,EAAMwL,UACtDX,EAAY7K,EAAM5E,KAAK,WAEvByP,EAAY7K,EAAMwL,SAGhBnI,EAAKhI,QAAQkH,YACfc,EAAKvD,YAAYsM,YAAY,SAAUtB,EAAkBC,GAA+CF,EAA3BD,EAAaL,GAExFlH,EAAKvD,YAAYgF,SAAS,YAC5B8F,EAAaE,EAAkBP,GAI/BmB,EADGM,EAAWlP,OAASqP,EAASrP,OAAU,EACnB,EAAX6L,EAAe4B,EAAa,EAE5B,EAGdvK,EAAMmK,KACJkC,aAAczB,EAAa,KAC3B0B,SAAY,SACZC,aAAcb,EAAYlC,EAAeC,EAAeC,EAAgBC,EAAmB,OAE7F5F,EAAWoG,KACTkC,aAAczB,EAAapB,EAAeC,EAAeC,EAAgBC,EAAmBK,EAAc,KAC1GwC,aAAc,OACdD,aAAcjP,KAAKE,IAAIkO,EAAY1B,EAAa,GAAK,OAGzDyB,KACA9S,KAAKqL,WAAWyI,IAAI,wCAAwChI,GAAG,uCAAwCgH,GACvGT,EAAQyB,IAAI,iCAAiChI,GAAG,gCAAiCgH,OAC5E,IAAI9S,KAAK0C,QAAQ0G,MAA6B,QAArBpJ,KAAK0C,QAAQ0G,MAAkBpJ,KAAKsH,KAAKoI,IAAIT,GAAa9K,OAASnE,KAAK0C,QAAQ0G,KAAM,CACpH,GAAI2K,GAAW/T,KAAKsH,KAAKoI,IAAI,YAAYA,IAAIT,GAAa9D,WAAW6I,MAAM,EAAGhU,KAAK0C,QAAQ0G,MAAM6K,OAAO/H,SAASjH,QAC7GiP,EAAYlU,KAAKsH,KAAK0M,MAAM,EAAGD,EAAW,GAAGR,OAAO,YAAYpP,MACpE8N,GAAajC,EAAWhQ,KAAK0C,QAAQ0G,KAAO8K,EAAY1B,EAAYnB,EAEhE3G,EAAKhI,QAAQ6G,WACVlC,EAAM5E,KAAK,WAAW4E,EAAM5E,KAAK,SAAU4E,EAAMwL,UACtDX,EAAY7K,EAAM5E,KAAK,WAEvByP,EAAY7K,EAAMwL,SAGhBnI,EAAKhI,QAAQkH,YAEf5J,KAAKmH,YAAYsM,YAAY,SAAUtB,EAAkBC,GAA+CF,EAA3BD,EAAaL,GAE5FvK,EAAMmK,KACJkC,aAAczB,EAAapB,EAAeC,EAAeC,EAAgBC,EAAmB,KAC5F2C,SAAY,SACZC,aAAc,KAEhBxI,EAAWoG,KACTkC,aAAczB,EAAaZ,EAAc,KACzCwC,aAAc,OACdD,aAAc,QAKpBhI,SAAU,WACR,GAA2B,SAAvB5L,KAAK0C,QAAQ4G,MAAkB,CACjCtJ,KAAKqH,MAAMmK,IAAI,YAAa,IAG5B,IAAI2C,GAAenU,KAAKqH,MAAM6E,SAASkI,QAAQC,SAAS,QACpDC,EAAgBtU,KAAK0C,QAAQ6G,UAAYvJ,KAAKmH,YAAYiN,QAAQC,SAAS,QAAUF,EACrFI,EAAUJ,EAAahJ,SAAS,kBAAkBqJ,aAClDC,EAAWH,EAAc9C,IAAI,QAAS,QAAQrG,SAAS,UAAUqJ,YAErEL,GAAanM,SACbsM,EAActM,SAGdhI,KAAKmH,YAAYqK,IAAI,QAAS7M,KAAKE,IAAI0P,EAASE,GAAY,UAC5B,QAAvBzU,KAAK0C,QAAQ4G,OAEtBtJ,KAAKqH,MAAMmK,IAAI,YAAa,IAC5BxR,KAAKmH,YAAYqK,IAAI,QAAS,IAAI5G,SAAS,cAClC5K,KAAK0C,QAAQ4G,OAEtBtJ,KAAKqH,MAAMmK,IAAI,YAAa,IAC5BxR,KAAKmH,YAAYqK,IAAI,QAASxR,KAAK0C,QAAQ4G,SAG3CtJ,KAAKqH,MAAMmK,IAAI,YAAa,IAC5BxR,KAAKmH,YAAYqK,IAAI,QAAS,IAG5BxR,MAAKmH,YAAYgF,SAAS,cAAuC,QAAvBnM,KAAK0C,QAAQ4G,OACzDtJ,KAAKmH,YAAY4I,YAAY,cAIjClE,eAAgB,WACd,GAGIrH,GACAkQ,EAJAhK,EAAO1K,KACPuM,EAAO,UACPC,EAAQvM,EAAEsM,GAGVoI,EAAe,SAAUzN,GACvBsF,EAAM5B,SAAS1D,EAASM,KAAK,SAAShH,QAAQ,2BAA4B,KAAKiT,YAAY,SAAUvM,EAASiF,SAAS,WACvH3H,EAAM0C,EAASwL,SACfgC,EAAexN,EAASiF,SAAS,UAAY,EAAIjF,EAAS,GAAG0J,aAC7DpE,EAAMgF,KACJmB,IAAOnO,EAAImO,IAAM+B,EACjBE,KAAQpQ,EAAIoQ,KACZtL,MAASpC,EAAS,GAAG2N,YACrBvQ,SAAY,aAIpBtE,MAAKmH,YAAY2E,GAAG,QAAS,WACvBpB,EAAK2D,eAGTsG,EAAa1U,EAAED,OACfwM,EAAM6H,SAAS3J,EAAKhI,QAAQ6G,WAC5BiD,EAAMiH,YAAY,QAASxT,EAAED,MAAMmM,SAAS,SAC5CK,EAAMsI,OAAOpK,EAAKrD,UAGpBpH,EAAEqS,QAAQxG,GAAG,gBAAiB,WAC5B6I,EAAajK,EAAKvD,eAGpBnH,KAAKkH,SAAS4E,GAAG,iBAAkB,WACjCpB,EAAKrD,MAAM5E,KAAK,SAAUiI,EAAKrD,MAAMwL,UACrCrG,EAAMuI,YAIV5F,YAAa,SAAUlK,EAAO+I,EAAU1G,GACtC,IAAKA,EACH,GAAIA,GAAOtH,KAAK+O,UAAUD,GAAG9O,KAAK6K,MAAM5F,GAG1CqC,GAAKmM,YAAY,WAAYzF,IAG/BkB,YAAa,SAAUjK,EAAOqJ,EAAUhH,GACtC,IAAKA,EACH,GAAIA,GAAOtH,KAAK+O,UAAUD,GAAG9O,KAAK6K,MAAM5F,GAGtCqJ,GACFhH,EAAKsD,SAAS,YAAYO,SAAS,KAAK3D,KAAK,OAAQ,KAAKA,KAAK,WAAY,IAE3EF,EAAKyI,YAAY,YAAY5E,SAAS,KAAK6J,WAAW,QAAQxN,KAAK,WAAY,IAInF6G,WAAY,WACV,MAAOrO,MAAKkH,SAAS,GAAGoH,UAG1B7C,cAAe,WACb,GAAIf,GAAO1K,IAEPA,MAAKqO,cACPrO,KAAKmH,YAAYyD,SAAS,YAC1B5K,KAAKoH,QAAQwD,SAAS,YAAYpD,KAAK,WAAY,MAE/CxH,KAAKoH,QAAQ+E,SAAS,cACxBnM,KAAKmH,YAAY4I,YAAY,YAC7B/P,KAAKoH,QAAQ2I,YAAY,aAGU,IAAjC/P,KAAKoH,QAAQI,KAAK,aAAsBxH,KAAKkH,SAASzE,KAAK,aAC7DzC,KAAKoH,QAAQ4N,WAAW,aAI5BhV,KAAKoH,QAAQmE,MAAM,WACjB,OAAQb,EAAK2D,gBAIjBe,SAAU,WACJpP,KAAKkH,SAAS1E,GAAG,gBACnBxC,KAAKkH,SAASzE,KAAK,WAAYzC,KAAKkH,SAASM,KAAK,aAClDxH,KAAKoH,QAAQI,KAAK,WAAYxH,KAAKkH,SAASzE,KAAK,eAIrDiJ,cAAe,WACb,GAAIhB,GAAO1K,KACPiV,EAAYhV,EAAE4F,SAElB7F,MAAKmH,YAAY2E,GAAG,sBAAuB,iBAAkB,SAAU/E,GACrEA,EAAEC,oBAGJiO,EAAUxS,KAAK,eAAe,GAE9BzC,KAAKoH,QAAQ0E,GAAG,QAAS,SAAU/E,GAC7B,OAAOrF,KAAKqF,EAAEmO,QAAQ1R,SAAS,MAAQyR,EAAUxS,KAAK,iBACtDsE,EAAEE,iBACFgO,EAAUxS,KAAK,eAAe,MAIpCzC,KAAKmH,YAAY2E,GAAG,QAAS,WAC3BpB,EAAKsH,UACLtH,EAAKxD,SAAS4E,GAAG,kBAAmB,WAClC,GAAKpB,EAAKhI,QAAQoH,YAAeY,EAAKI,UAE/B,IAAKJ,EAAKI,SAAU,CACzB,GAAIiD,GAAgBrD,EAAKG,MAAMH,EAAKxD,SAAS,GAAG6G,cAEhD,IAA6B,gBAAlBA,IAA8BrD,EAAKhI,QAAQ0G,QAAS,EAAO,MAGtE,IAAIsJ,GAAShI,EAAKpD,KAAKwH,GAAGf,GAAe,GAAGoH,UAAYzK,EAAKU,WAAW,GAAG+J,SAC3EzC,GAASA,EAAShI,EAAKU,WAAW,GAAGwF,aAAa,EAAIlG,EAAKuF,SAASD,SAAS,EAC7EtF,EAAKU,WAAW,GAAGwH,UAAYF,OAT/BhI,GAAKrD,MAAMiE,KAAK,eAAeE,YAcrCxL,KAAKqH,MAAMyE,GAAG,QAAS,OAAQ,SAAU/E,GACvC,GAAIxE,GAAQtC,EAAED,MACVoV,EAAe7S,EAAM2J,SAASzJ,KAAK,iBACnC4S,EAAY3K,EAAKxD,SAASO,MAC1B6N,EAAY5K,EAAKxD,SAAS6D,KAAK,gBAUnC,IAPIL,EAAKI,UACP/D,EAAEC,kBAGJD,EAAEE,kBAGGyD,EAAK2D,eAAiB9L,EAAM2J,SAASC,SAAS,YAAa,CAC9D,GAAIoJ,GAAW7K,EAAKxD,SAASoE,KAAK,UAC9BkK,EAAUD,EAASzG,GAAGsG,GACtBK,EAAQD,EAAQzK,KAAK,YACrB2K,EAAYF,EAAQtJ,OAAO,YAC3B7B,EAAaK,EAAKhI,QAAQ2H,WAC1BsL,EAAgBD,EAAUjT,KAAK,gBAAiB,CAEpD,IAAKiI,EAAKI,UAUR,GAJA0K,EAAQzK,KAAK,YAAa0K,GAC1B/K,EAAKyE,YAAYiG,GAAeK,GAChClT,EAAMqT,OAEFvL,KAAe,GAASsL,KAAkB,EAAO,CACnD,GAAIE,GAAaxL,EAAakL,EAAShC,OAAO,aAAapP,OACvD2R,EAAgBH,EAAgBD,EAAUpK,KAAK,mBAAmBnH,MAEtE,IAAKkG,GAAcwL,GAAgBF,GAAiBG,EAClD,GAAIzL,GAA4B,GAAdA,EAChBkL,EAASxK,KAAK,YAAY,GAC1ByK,EAAQzK,KAAK,YAAY,GACzBL,EAAKrD,MAAMiE,KAAK,aAAayE,YAAY,YACzCrF,EAAKyE,YAAYiG,GAAc,OAC1B,IAAIO,GAAkC,GAAjBA,EAAoB,CAC9CD,EAAUpK,KAAK,mBAAmBP,KAAK,YAAY,GACnDyK,EAAQzK,KAAK,YAAY,EACzB,IAAIgL,GAAaxT,EAAM2J,SAASzJ,KAAK,WACrCiI,GAAKrD,MAAMiE,KAAK,mBAAqByK,EAAa,MAAMhG,YAAY,YACpErF,EAAKyE,YAAYiG,GAAc,OAC1B,CACL,GAAIY,GAAwD,kBAAhCtL,GAAKhI,QAAQgG,eACjCgC,EAAKhI,QAAQgG,eAAe2B,EAAYsL,GAAiBjL,EAAKhI,QAAQgG,eAC1EuN,EAASD,EAAc,GAAGxV,QAAQ,MAAO6J,GACzC6L,EAAYF,EAAc,GAAGxV,QAAQ,MAAOmV,GAC5CQ,EAAUlW,EAAE,6BAGZ+V,GAAc,KAChBC,EAASA,EAAOzV,QAAQ,QAASwV,EAAc,GAAG3L,EAAa,EAAI,EAAI,IACvE6L,EAAYA,EAAU1V,QAAQ,QAASwV,EAAc,GAAGL,EAAgB,EAAI,EAAI,KAGlFH,EAAQzK,KAAK,YAAY,GAEzBL,EAAKrD,MAAMyN,OAAOqB,GAEd9L,GAAcwL,IAChBM,EAAQrB,OAAO7U,EAAE,QAAUgW,EAAS,WACpCvL,EAAKxD,SAASf,QAAQ,yBAGpBwP,GAAiBG,IACnBK,EAAQrB,OAAO7U,EAAE,QAAUiW,EAAY,WACvCxL,EAAKxD,SAASf,QAAQ,4BAGxB4F,WAAW,WACTrB,EAAKyE,YAAYiG,GAAc,IAC9B,IAEHe,EAAQC,MAAM,KAAKC,QAAQ,IAAK,WAC9BpW,EAAED,MAAMgI,iBAzDhBuN,GAASxK,KAAK,YAAY,GAC1ByK,EAAQzK,KAAK,YAAY,GACzBL,EAAKrD,MAAMiE,KAAK,aAAayE,YAAY,YACzCrF,EAAKyE,YAAYiG,GAAc,EA6D5B1K,GAAKI,SAECJ,EAAKhI,QAAQoH,YACtBY,EAAKW,WAAWG,QAFhBd,EAAKtD,QAAQoE,SAMV6J,GAAa3K,EAAKxD,SAASO,OAASiD,EAAKI,UAAcwK,GAAa5K,EAAKxD,SAAS6D,KAAK,mBAAqBL,EAAKI,YACpHJ,EAAKxD,SAAS3B,cAAc,UAE5BmF,EAAKxD,SAASf,QAAQ,qBAAsBiP,EAAcI,EAAQzK,KAAK,YAAa0K,QAK1FzV,KAAKqH,MAAMyE,GAAG,QAAS,6DAA8D,SAAU/E,GACzFA,EAAEuP,eAAiBtW,OACrB+G,EAAEE,iBACFF,EAAEC,kBACE0D,EAAKhI,QAAQoH,aAAe7J,EAAE8G,EAAEwP,QAAQpK,SAAS,SACnDzB,EAAKW,WAAWG,QAEhBd,EAAKtD,QAAQoE,WAKnBxL,KAAKqH,MAAMyE,GAAG,QAAS,iCAAkC,SAAU/E,GACjEA,EAAEE,iBACFF,EAAEC,kBACE0D,EAAKhI,QAAQoH,WACfY,EAAKW,WAAWG,QAEhBd,EAAKtD,QAAQoE,UAIjBxL,KAAKqH,MAAMyE,GAAG,QAAS,wBAAyB,WAC9CpB,EAAKtD,QAAQmE,UAGfvL,KAAKqL,WAAWS,GAAG,QAAS,SAAU/E,GACpCA,EAAEC,oBAGJhH,KAAKqH,MAAMyE,GAAG,QAAS,eAAgB,SAAU/E,GAC3C2D,EAAKhI,QAAQoH,WACfY,EAAKW,WAAWG,QAEhBd,EAAKtD,QAAQoE,QAGfzE,EAAEE,iBACFF,EAAEC,kBAEE/G,EAAED,MAAMmM,SAAS,iBACnBzB,EAAK7C,YAEL6C,EAAK5C,cAEP4C,EAAKxD,SAAS3B,cAAc,YAG9BvF,KAAKkH,SAASsP,OAAO,WACnB9L,EAAKhD,QAAO,MAIhBiE,mBAAoB,WAClB,GAAIjB,GAAO1K,KACPyW,EAAcxW,EAAE,+BAEpBD,MAAKmH,YAAY2E,GAAG,uDAAwD,WAC1EpB,EAAKU,WAAWE,KAAK,WAAWyE,YAAY,UACtCrF,EAAKW,WAAW5D,QACpBiD,EAAKW,WAAW5D,IAAI,IACpBiD,EAAKpD,KAAKoI,IAAI,cAAcK,YAAY,UAClC0G,EAAYvK,SAAS/H,QAAQsS,EAAYzO,UAE5C0C,EAAKI,UAAUJ,EAAKU,WAAWE,KAAK,aAAaV,SAAS,UAC/DmB,WAAW,WACTrB,EAAKW,WAAWG,SACf,MAGLxL,KAAKqL,WAAWS,GAAG,6EAA8E,SAAU/E,GACzGA,EAAEC,oBAGJhH,KAAKqL,WAAWS,GAAG,uBAAwB,WACzC,GAAIpB,EAAKW,WAAW5D,MAAO,CACzB,GAAIiP,GAAchM,EAAKpD,KAAKoI,IAAI,cAAcK,YAAY,UAAU5E,SAAS,IAE3EuL,GADEhM,EAAKhI,QAAQsH,oBACD0M,EAAYhH,IAAI,KAAOhF,EAAKiM,eAAiB,KAAOzW,EAAgBwK,EAAKW,WAAW5D,OAAS,MAE7FiP,EAAYhH,IAAI,IAAMhF,EAAKiM,eAAiB,KAAOjM,EAAKW,WAAW5D,MAAQ,MAE3FiP,EAAYxK,SAAStB,SAAS,UAE9BF,EAAKpD,KAAKiM,OAAO,oBAAoBhT,KAAK,WACxC,GAAIgC,GAAQtC,EAAED,MACVsN,EAAW/K,EAAME,KAAK,WAEoE,KAA1FiI,EAAKpD,KAAKiM,OAAO,kBAAoBjG,EAAW,KAAKoC,IAAInN,GAAOmN,IAAI,WAAWvL,SACjF5B,EAAMqI,SAAS,UACfF,EAAKpD,KAAKiM,OAAO,kBAAoBjG,EAAW,QAAQ1C,SAAS,YAIrE,IAAIgM,GAAclM,EAAKpD,KAAKoI,IAAI,UAGhCkH,GAAYrW,KAAK,SAAU0E,GACzB,GAAI1C,GAAQtC,EAAED,KAEVuC,GAAM4J,SAAS,aACjB5J,EAAM0C,UAAY2R,EAAY9H,GAAG,GAAG7J,SACpC1C,EAAM0C,UAAY2R,EAAY3C,OAAOhP,SACrC2R,EAAY9H,GAAG7J,EAAQ,GAAGkH,SAAS,aACnC5J,EAAMqI,SAAS,YAIdF,EAAKpD,KAAKoI,IAAI,wBAAwBvL,OAM9BsS,EAAYvK,SAAS/H,QAChCsS,EAAYzO,UANNyO,EAAYvK,SAAS/H,QACzBsS,EAAYzO,SAEdyO,EAAY/V,KAAKgK,EAAKhI,QAAQ4F,gBAAgB9H,QAAQ,MAAO,IAAMC,EAAWiK,EAAKW,WAAW5D,OAAS,MAAMQ,OAC7GyC,EAAKU,WAAW0J,OAAO2B,QAMzB/L,GAAKpD,KAAKoI,IAAI,cAAcK,YAAY,UAClC0G,EAAYvK,SAAS/H,QACzBsS,EAAYzO,QAIhB0C,GAAKpD,KAAKiM,OAAO,WAAWxD,YAAY,UACpCrF,EAAKW,WAAW5D,OAAOiD,EAAKpD,KAAKoI,IAAI,uCAAuCZ,GAAG,GAAGlE,SAAS,UAAUO,SAAS,KAAKK,QACvHvL,EAAED,MAAMwL,WAIZmL,aAAc,WACZ,GAAIxN,GAAQ,WACZ,QAAQnJ,KAAK0C,QAAQuH,iBACnB,IAAK,SACL,IAAK,aACHd,EAAQ,SACR,MACF,KAAK,YAKP,MAAOA,IAGT1B,IAAK,SAAUpF,GACb,MAAqB,mBAAVA,IACTrC,KAAKkH,SAASO,IAAIpF,GAClBrC,KAAK0H,SAEE1H,KAAKkH,UAELlH,KAAKkH,SAASO,OAIzBI,UAAW,WACT7H,KAAK+O,UACL/O,KAAKkH,SAASoE,KAAK,kBAAkBoE,IAAI,iCAAiC3E,KAAK,YAAY,GAC3F/K,KAAKsH,KAAKoI,IAAI,kDAAkD9E,SAAS,YACzE5K,KAAK0H,QAAO,IAGdI,YAAa,WACX9H,KAAK+O,UACL/O,KAAKkH,SAASoE,KAAK,kBAAkBoE,IAAI,iCAAiC3E,KAAK,YAAY,GAC3F/K,KAAKsH,KAAKoI,IAAI,kDAAkDK,YAAY,YAC5E/P,KAAK0H,QAAO,IAGdmP,QAAS,SAAU9P,GACjB,GAEI+P,GAEA7R,EACA8R,EACAC,EACA/C,EACAgD,EACAC,EACA5B,EACA6B,EAXA5U,EAAQtC,EAAED,MACVoX,EAAU7U,EAAMC,GAAG,SAAWD,EAAM2J,SAASA,SAAW3J,EAAM2J,SAE9DxB,EAAO0M,EAAQ3U,KAAK,QASpB4U,EAAW,uDACXC,GACEC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IA2CX,IAxCI5P,EAAKhI,QAAQoH,aAAYsN,EAAU7U,EAAM2J,SAASA,UAElDxB,EAAKhI,QAAQ6G,YAAW6N,EAAU1M,EAAKrD,OAE3CyP,EAAS7W,EAAE,mBAAoBmX,GAE/BD,EAAWzM,EAAKrD,MAAM6E,SAASC,SAAS,SAEnCgL,IAAapQ,EAAEmO,SAAW,IAAMnO,EAAEmO,SAAW,IAAMnO,EAAEmO,SAAW,IAAMnO,EAAEmO,SAAW,MACjFxK,EAAKhI,QAAQ6G,UAKhBmB,EAAKvD,YAAYhB,QAAQ,UAJzBuE,EAAKsH,UACLtH,EAAKrD,MAAM6E,SAAStB,SAAS,QAC7BuM,GAAW,GAIbzM,EAAKW,WAAWG,SAGdd,EAAKhI,QAAQoH,aACX,WAAWpI,KAAKqF,EAAEmO,QAAQ1R,SAAS,MAAQ2T,GAAkD,IAAtCzM,EAAKrD,MAAMiE,KAAK,WAAWnH,SACpF4C,EAAEE,iBACFyD,EAAKrD,MAAM6E,SAAS6D,YAAY,QAC5BrF,EAAKhI,QAAQ6G,WAAWmB,EAAKvD,YAAY4I,YAAY,QACzDrF,EAAKtD,QAAQoE,SAGfsL,EAAS7W,EAAE,qEAAsEmX,GAC5E7U,EAAMkF,OAAU,UAAU/F,KAAKqF,EAAEmO,QAAQ1R,SAAS,MACb,IAApCsT,EAAOvD,OAAO,WAAWpP,SAC3B2S,EAASpM,EAAKvD,YAAYmE,KAAK,MAE7BwL,EADEpM,EAAKhI,QAAQsH,oBACN8M,EAAOvD,OAAO,KAAO7I,EAAKiM,eAAiB,IAAMzW,EAAgBoX,EAAWvQ,EAAEmO,UAAY,KAE1F4B,EAAOvD,OAAO,IAAM7I,EAAKiM,eAAiB,IAAMW,EAAWvQ,EAAEmO,SAAW,OAMpF4B,EAAO3S,OAAZ,CAEA,GAAI,UAAUzC,KAAKqF,EAAEmO,QAAQ1R,SAAS,KACpCyB,EAAQ6R,EAAO7R,MAAM6R,EAAOvD,OAAO,WACnCyD,EAAQF,EAAO5K,OAAOmL,GAAUL,QAAQvU,KAAK,iBAC7CwR,EAAO6C,EAAO5K,OAAOmL,GAAUpD,OAAOxR,KAAK,iBAC3CsU,EAAOD,EAAOhI,GAAG7J,GAAOiH,SAASqO,QAAQlD,GAAUvI,GAAG,GAAGrM,KAAK,iBAC9DwU,EAAOH,EAAOhI,GAAG7J,GAAOiH,SAASsO,QAAQnD,GAAUvI,GAAG,GAAGrM,KAAK,iBAC9DyU,EAAWJ,EAAOhI,GAAGiI,GAAM7K,SAASsO,QAAQnD,GAAUvI,GAAG,GAAGrM,KAAK,iBAE7DiI,EAAKhI,QAAQoH,aACfgN,EAAOvW,KAAK,SAAUoC,GACf1C,EAAED,MAAMmM,SAAS,aACpBlM,EAAED,MAAMyC,KAAK,QAASE,KAG1BsC,EAAQ6R,EAAO7R,MAAM6R,EAAOvD,OAAO,YACnCyD,EAAQF,EAAOE,QAAQvU,KAAK,SAC5BwR,EAAO6C,EAAO7C,OAAOxR,KAAK,SAC1BsU,EAAOD,EAAOhI,GAAG7J,GAAOsV,UAAUzL,GAAG,GAAGrM,KAAK,SAC7CwU,EAAOH,EAAOhI,GAAG7J,GAAOuV,UAAU1L,GAAG,GAAGrM,KAAK,SAC7CyU,EAAWJ,EAAOhI,GAAGiI,GAAMyD,UAAU1L,GAAG,GAAGrM,KAAK,UAGlD6S,EAAY/S,EAAME,KAAK,aAEN,IAAbsE,EAAEmO,SACAxK,EAAKhI,QAAQoH,aAAY7E,GAAS,GAClCA,GAASiS,GAAYjS,EAAQgS,IAAMhS,EAAQgS,GACnCD,EAAR/R,IAAeA,EAAQ+R,GACvB/R,GAASqQ,IAAWrQ,EAAQgP,IACV,IAAblN,EAAEmO,UACPxK,EAAKhI,QAAQoH,aAAY7E,GAAS,GACzB,IAATA,IAAaA,EAAQ,GACrBA,GAASiS,GAAoBH,EAAR9R,IAAcA,EAAQ8R,GAC3C9R,EAAQgP,IAAMhP,EAAQgP,GACtBhP,GAASqQ,IAAWrQ,EAAQ+R,IAGlCzU,EAAME,KAAK,YAAawC,GAEnByF,EAAKhI,QAAQoH,YAGhB/C,EAAEE,iBACG1E,EAAM4J,SAAS,qBAClB2K,EAAO/G,YAAY,UAAUjB,GAAG7J,GAAO2F,SAAS,UAAUO,SAAS,KAAKK,QACxEjJ,EAAMiJ,UALRsL,EAAOhI,GAAG7J,GAAOuG,YASd,KAAKjJ,EAAMC,GAAG,SAAU,CAC7B,GACIiY,GACAC,EAFAC,IAIJ7D,GAAOvW,KAAK,WACLN,EAAED,MAAMkM,SAASC,SAAS,aACzBlM,EAAE2P,KAAK3P,EAAED,MAAMG,OAAOya,eAAeC,UAAU,EAAG,IAAMvD,EAAWvQ,EAAEmO,UACvEyF,EAASrV,KAAKrF,EAAED,MAAMkM,SAASjH,WAKrCwV,EAAQxa,EAAE4F,UAAUpD,KAAK,YACzBgY,IACAxa,EAAE4F,UAAUpD,KAAK,WAAYgY,GAE7BC,EAAUza,EAAE2P,KAAK3P,EAAE,UAAUE,OAAOya,eAAeC,UAAU,EAAG,GAE5DH,GAAWpD,EAAWvQ,EAAEmO,UAC1BuF,EAAQ,EACRxa,EAAE4F,UAAUpD,KAAK,WAAYgY,IACpBA,GAASE,EAASxW,SAC3BlE,EAAE4F,UAAUpD,KAAK,WAAY,GACzBgY,EAAQE,EAASxW,SAAQsW,EAAQ,IAGvC3D,EAAOhI,GAAG6L,EAASF,EAAQ,IAAIjP,QAIjC,IAAK,UAAU9J,KAAKqF,EAAEmO,QAAQ1R,SAAS,MAAS,QAAQ9B,KAAKqF,EAAEmO,QAAQ1R,SAAS,MAAQkH,EAAKhI,QAAQ6H,cAAiB4M,EAAU,CAE9H,GADK,OAAOzV,KAAKqF,EAAEmO,QAAQ1R,SAAS,MAAMuD,EAAEE,iBACvCyD,EAAKhI,QAAQoH,WASN,OAAOpI,KAAKqF,EAAEmO,QAAQ1R,SAAS,OACzCkH,EAAKrD,MAAMiE,KAAK,aAAaC,QAC7BhJ,EAAMiJ,aAXsB,CAC5B,GAAIsP,GAAO7a,EAAE,SACb6a,GAAKvP,QAELuP,EAAKtP,QAELzE,EAAEE,iBAEFhH,EAAE4F,UAAUpD,KAAK,eAAe,GAKlCxC,EAAE4F,UAAUpD,KAAK,WAAY,IAG1B,WAAWf,KAAKqF,EAAEmO,QAAQ1R,SAAS,MAAQ2T,IAAazM,EAAKI,UAAYJ,EAAKhI,QAAQoH,aAAiB,OAAOpI,KAAKqF,EAAEmO,QAAQ1R,SAAS,OAAS2T,KAClJzM,EAAKrD,MAAM6E,SAAS6D,YAAY,QAC5BrF,EAAKhI,QAAQ6G,WAAWmB,EAAKvD,YAAY4I,YAAY,QACzDrF,EAAKtD,QAAQoE,WAIjBlB,OAAQ,WACNtK,KAAKkH,SAAS0D,SAAS,iBAAiByJ,SAASrU,KAAKmH,aAClDnH,KAAK0C,QAAQ6G,WAAWvJ,KAAKqH,MAAMa,QAGzCP,QAAS,WACP3H,KAAKsH,KAAO,KACZtH,KAAK6K,SACL7K,KAAK4M,WACL5M,KAAK0H,SACL1H,KAAKyL,gBACLzL,KAAKgQ,UAAS,GACdhQ,KAAK4H,WACL5H,KAAK4L,WACD5L,KAAKsH,MAAMtH,KAAKqL,WAAWlF,QAAQ,kBAEvCnG,KAAKkH,SAASf,QAAQ,wBAGxB+B,KAAM,WACJlI,KAAKmH,YAAYe,QAGnBD,KAAM,WACJjI,KAAKmH,YAAYc,QAGnBD,OAAQ,WACNhI,KAAKmH,YAAYa,SACjBhI,KAAKkH,SAASc,UAmDlB,IAAI+S,GAAM9a,EAAEgD,GAAGC,YACfjD,GAAEgD,GAAGC,aAAetB,EACpB3B,EAAEgD,GAAGC,aAAa8X,YAAcjY,EAIhC9C,EAAEgD,GAAGC,aAAa+X,WAAa,WAE7B,MADAhb,GAAEgD,GAAGC,aAAe6X,EACb/a,MAGTC,EAAE4F,UACGpD,KAAK,WAAY,GACjBqJ,GAAG,UAAW,iGAAkG/I,EAAaO,UAAUuT,SACvI/K,GAAG,gBAAiB,iGAAkG,SAAU/E,GAC/HA,EAAEC,oBAKR/G,EAAEqS,QAAQxG,GAAG,0BAA2B,WACtC7L,EAAE,iBAAiBM,KAAK,WACtB,GAAI2a,GAAgBjb,EAAED,KACtB4B,GAAOqC,KAAKiX,EAAeA,EAAczY,aAG5C1C"} \ No newline at end of file diff --git a/modoboa/bower_components/bootstrap-select/dist/js/bootstrap-select.min.js b/modoboa/bower_components/bootstrap-select/dist/js/bootstrap-select.min.js deleted file mode 100644 index 95b1c9e1d..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/bootstrap-select.min.js +++ /dev/null @@ -1,8 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ -!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!function(a){"use strict";function b(b){var c=[{re:/[\xC0-\xC6]/g,ch:"A"},{re:/[\xE0-\xE6]/g,ch:"a"},{re:/[\xC8-\xCB]/g,ch:"E"},{re:/[\xE8-\xEB]/g,ch:"e"},{re:/[\xCC-\xCF]/g,ch:"I"},{re:/[\xEC-\xEF]/g,ch:"i"},{re:/[\xD2-\xD6]/g,ch:"O"},{re:/[\xF2-\xF6]/g,ch:"o"},{re:/[\xD9-\xDC]/g,ch:"U"},{re:/[\xF9-\xFC]/g,ch:"u"},{re:/[\xC7-\xE7]/g,ch:"c"},{re:/[\xD1]/g,ch:"N"},{re:/[\xF1]/g,ch:"n"}];return a.each(c,function(){b=b.replace(this.re,this.ch)}),b}function c(a){var b={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},c="(?:"+Object.keys(b).join("|")+")",d=new RegExp(c),e=new RegExp(c,"g"),f=null==a?"":""+a;return d.test(f)?f.replace(e,function(a){return b[a]}):f}function d(b,c){var d=arguments,f=b,g=c;[].shift.apply(d);var h,i=this.each(function(){var b=a(this);if(b.is("select")){var c=b.data("selectpicker"),i="object"==typeof f&&f;if(c){if(i)for(var j in i)i.hasOwnProperty(j)&&(c.options[j]=i[j])}else{var k=a.extend({},e.DEFAULTS,a.fn.selectpicker.defaults||{},b.data(),i);b.data("selectpicker",c=new e(this,k,g))}"string"==typeof f&&(h=c[f]instanceof Function?c[f].apply(c,d):c.options[f])}});return"undefined"!=typeof h?h:i}String.prototype.includes||!function(){var a={}.toString,b=function(){try{var a={},b=Object.defineProperty,c=b(a,a,a)&&b}catch(d){}return c}(),c="".indexOf,d=function(b){if(null==this)throw TypeError();var d=String(this);if(b&&"[object RegExp]"==a.call(b))throw TypeError();var e=d.length,f=String(b),g=f.length,h=arguments.length>1?arguments[1]:void 0,i=h?Number(h):0;i!=i&&(i=0);var j=Math.min(Math.max(i,0),e);return g+j>e?!1:-1!=c.call(d,f,i)};b?b(String.prototype,"includes",{value:d,configurable:!0,writable:!0}):String.prototype.includes=d}(),String.prototype.startsWith||!function(){var a=function(){try{var a={},b=Object.defineProperty,c=b(a,a,a)&&b}catch(d){}return c}(),b={}.toString,c=function(a){if(null==this)throw TypeError();var c=String(this);if(a&&"[object RegExp]"==b.call(a))throw TypeError();var d=c.length,e=String(a),f=e.length,g=arguments.length>1?arguments[1]:void 0,h=g?Number(g):0;h!=h&&(h=0);var i=Math.min(Math.max(h,0),d);if(f+i>d)return!1;for(var j=-1;++j'+this.options.header+"":"",g=this.options.liveSearch?'":"",h=this.multiple&&this.options.actionsBox?'
    ":"",i=this.multiple&&this.options.doneButton?'
    ":"",j='
    ";return a(j)},createView:function(){var a=this.createDropdown(),b=this.createLi();return a.find("ul")[0].innerHTML=b,a},reloadLi:function(){this.destroyLi();var a=this.createLi();this.$menuInner[0].innerHTML=a},destroyLi:function(){this.$menu.find("li").remove()},createLi:function(){var d=this,e=[],f=0,g=document.createElement("option"),h=-1,i=function(a,b,c,d){return""+a+""},j=function(a,e,f,g){return'"+a+''};if(this.options.title&&!this.multiple&&(h--,!this.$element.find(".bs-title-option").length)){var k=this.$element[0];g.className="bs-title-option",g.appendChild(document.createTextNode(this.options.title)),g.value="",k.insertBefore(g,k.firstChild),void 0===a(k.options[k.selectedIndex]).attr("selected")&&(g.selected=!0)}return this.$element.find("option").each(function(b){var c=a(this);if(h++,!c.hasClass("bs-title-option")){var g=this.className||"",k=this.style.cssText,l=c.data("content")?c.data("content"):c.html(),m=c.data("tokens")?c.data("tokens"):null,n="undefined"!=typeof c.data("subtext")?''+c.data("subtext")+"":"",o="undefined"!=typeof c.data("icon")?' ':"",p=this.disabled||"OPTGROUP"===this.parentElement.tagName&&this.parentElement.disabled;if(""!==o&&p&&(o=""+o+""),d.options.hideDisabled&&p)return void h--;if(c.data("content")||(l=o+''+l+n+""),"OPTGROUP"===this.parentElement.tagName&&c.data("divider")!==!0){var q=" "+this.parentElement.className||"";if(0===c.index()){f+=1;var r=this.parentElement.label,s="undefined"!=typeof c.parent().data("subtext")?''+c.parent().data("subtext")+"":"",t=c.parent().data("icon")?' ':"";r=t+''+r+s+"",0!==b&&e.length>0&&(h++,e.push(i("",null,"divider",f+"div"))),h++,e.push(i(r,null,"dropdown-header"+q,f))}e.push(i(j(l,"opt "+g+q,k,m),b,"",f))}else c.data("divider")===!0?e.push(i("",b,"divider")):c.data("hidden")===!0?e.push(i(j(l,g,k,m),b,"hidden is-hidden")):(this.previousElementSibling&&"OPTGROUP"===this.previousElementSibling.tagName&&(h++,e.push(i("",null,"divider",f+"div"))),e.push(i(j(l,g,k,m),b)));d.liObj[b]=h}}),this.multiple||0!==this.$element.find("option:selected").length||this.options.title||this.$element.find("option").eq(0).prop("selected",!0).attr("selected","selected"),e.join("")},findLis:function(){return null==this.$lis&&(this.$lis=this.$menu.find("li")),this.$lis},render:function(b){var c,d=this;b!==!1&&this.$element.find("option").each(function(a){var b=d.findLis().eq(d.liObj[a]);d.setDisabled(a,this.disabled||"OPTGROUP"===this.parentElement.tagName&&this.parentElement.disabled,b),d.setSelected(a,this.selected,b)}),this.tabIndex();var e=this.$element.find("option").map(function(){if(this.selected){if(d.options.hideDisabled&&(this.disabled||"OPTGROUP"===this.parentElement.tagName&&this.parentElement.disabled))return!1;var b,c=a(this),e=c.data("icon")&&d.options.showIcon?' ':"";return b=d.options.showSubtext&&c.data("subtext")&&!d.multiple?' '+c.data("subtext")+"":"","undefined"!=typeof c.attr("title")?c.attr("title"):c.data("content")&&d.options.showContent?c.data("content"):e+c.html()+b}}).toArray(),f=this.multiple?e.join(this.options.multipleSeparator):e[0];if(this.multiple&&this.options.selectedTextFormat.indexOf("count")>-1){var g=this.options.selectedTextFormat.split(">");if(g.length>1&&e.length>g[1]||1==g.length&&e.length>=2){c=this.options.hideDisabled?", [disabled]":"";var h=this.$element.find("option").not('[data-divider="true"], [data-hidden="true"]'+c).length,i="function"==typeof this.options.countSelectedText?this.options.countSelectedText(e.length,h):this.options.countSelectedText;f=i.replace("{0}",e.length.toString()).replace("{1}",h.toString())}}void 0==this.options.title&&(this.options.title=this.$element.attr("title")),"static"==this.options.selectedTextFormat&&(f=this.options.title),f||(f="undefined"!=typeof this.options.title?this.options.title:this.options.noneSelectedText),this.$button.attr("title",a.trim(f.replace(/<[^>]*>?/g,""))),this.$button.children(".filter-option").html(f),this.$element.trigger("rendered.bs.select")},setStyle:function(a,b){this.$element.attr("class")&&this.$newElement.addClass(this.$element.attr("class").replace(/selectpicker|mobile-device|bs-select-hidden|validate\[.*\]/gi,""));var c=a?a:this.options.style;"add"==b?this.$button.addClass(c):"remove"==b?this.$button.removeClass(c):(this.$button.removeClass(this.options.style),this.$button.addClass(c))},liHeight:function(b){if(b||this.options.size!==!1&&!this.sizeInfo){var c=document.createElement("div"),d=document.createElement("div"),e=document.createElement("ul"),f=document.createElement("li"),g=document.createElement("li"),h=document.createElement("a"),i=document.createElement("span"),j=this.options.header?this.$menu.find(".popover-title")[0].cloneNode(!0):null,k=this.options.liveSearch?document.createElement("div"):null,l=this.options.actionsBox&&this.multiple?this.$menu.find(".bs-actionsbox")[0].cloneNode(!0):null,m=this.options.doneButton&&this.multiple?this.$menu.find(".bs-donebutton")[0].cloneNode(!0):null;if(i.className="text",c.className=this.$menu[0].parentNode.className+" open",d.className="dropdown-menu open",e.className="dropdown-menu inner",f.className="divider",i.appendChild(document.createTextNode("Inner text")),h.appendChild(i),g.appendChild(h),e.appendChild(g),e.appendChild(f),j&&d.appendChild(j),k){var n=document.createElement("span");k.className="bs-searchbox",n.className="form-control",k.appendChild(n),d.appendChild(k)}l&&d.appendChild(l),d.appendChild(e),m&&d.appendChild(m),c.appendChild(d),document.body.appendChild(c);var o=h.offsetHeight,p=j?j.offsetHeight:0,q=k?k.offsetHeight:0,r=l?l.offsetHeight:0,s=m?m.offsetHeight:0,t=a(f).outerHeight(!0),u="function"==typeof getComputedStyle?getComputedStyle(d):!1,v=u?null:a(d),w=parseInt(u?u.paddingTop:v.css("paddingTop"))+parseInt(u?u.paddingBottom:v.css("paddingBottom"))+parseInt(u?u.borderTopWidth:v.css("borderTopWidth"))+parseInt(u?u.borderBottomWidth:v.css("borderBottomWidth")),x=w+parseInt(u?u.marginTop:v.css("marginTop"))+parseInt(u?u.marginBottom:v.css("marginBottom"))+2;document.body.removeChild(c),this.sizeInfo={liHeight:o,headerHeight:p,searchHeight:q,actionsHeight:r,doneButtonHeight:s,dividerHeight:t,menuPadding:w,menuExtras:x}}},setSize:function(){if(this.findLis(),this.liHeight(),this.options.header&&this.$menu.css("padding-top",0),this.options.size!==!1){var b,c,d,e,f=this,g=this.$menu,h=this.$menuInner,i=a(window),j=this.$newElement[0].offsetHeight,k=this.sizeInfo.liHeight,l=this.sizeInfo.headerHeight,m=this.sizeInfo.searchHeight,n=this.sizeInfo.actionsHeight,o=this.sizeInfo.doneButtonHeight,p=this.sizeInfo.dividerHeight,q=this.sizeInfo.menuPadding,r=this.sizeInfo.menuExtras,s=this.options.hideDisabled?".disabled":"",t=function(){d=f.$newElement.offset().top-i.scrollTop(),e=i.height()-d-j};if(t(),"auto"===this.options.size){var u=function(){var i,j=function(b,c){return function(d){return c?d.classList?d.classList.contains(b):a(d).hasClass(b):!(d.classList?d.classList.contains(b):a(d).hasClass(b))}},p=f.$menuInner[0].getElementsByTagName("li"),s=Array.prototype.filter?Array.prototype.filter.call(p,j("hidden",!1)):f.$lis.not(".hidden"),u=Array.prototype.filter?Array.prototype.filter.call(s,j("dropdown-header",!0)):s.filter(".dropdown-header");t(),b=e-r,f.options.container?(g.data("height")||g.data("height",g.height()),c=g.data("height")):c=g.height(),f.options.dropupAuto&&f.$newElement.toggleClass("dropup",d>e&&c>b-r),f.$newElement.hasClass("dropup")&&(b=d-r),i=s.length+u.length>3?3*k+r-2:0,g.css({"max-height":b+"px",overflow:"hidden","min-height":i+l+m+n+o+"px"}),h.css({"max-height":b-l-m-n-o-q+"px","overflow-y":"auto","min-height":Math.max(i-q,0)+"px"})};u(),this.$searchbox.off("input.getSize propertychange.getSize").on("input.getSize propertychange.getSize",u),i.off("resize.getSize scroll.getSize").on("resize.getSize scroll.getSize",u)}else if(this.options.size&&"auto"!=this.options.size&&this.$lis.not(s).length>this.options.size){var v=this.$lis.not(".divider").not(s).children().slice(0,this.options.size).last().parent().index(),w=this.$lis.slice(0,v+1).filter(".divider").length;b=k*this.options.size+w*p+q,f.options.container?(g.data("height")||g.data("height",g.height()),c=g.data("height")):c=g.height(),f.options.dropupAuto&&this.$newElement.toggleClass("dropup",d>e&&c>b-r),g.css({"max-height":b+l+m+n+o+"px",overflow:"hidden","min-height":""}),h.css({"max-height":b-q+"px","overflow-y":"auto","min-height":""})}}},setWidth:function(){if("auto"===this.options.width){this.$menu.css("min-width","0");var a=this.$menu.parent().clone().appendTo("body"),b=this.options.container?this.$newElement.clone().appendTo("body"):a,c=a.children(".dropdown-menu").outerWidth(),d=b.css("width","auto").children("button").outerWidth();a.remove(),b.remove(),this.$newElement.css("width",Math.max(c,d)+"px")}else"fit"===this.options.width?(this.$menu.css("min-width",""),this.$newElement.css("width","").addClass("fit-width")):this.options.width?(this.$menu.css("min-width",""),this.$newElement.css("width",this.options.width)):(this.$menu.css("min-width",""),this.$newElement.css("width",""));this.$newElement.hasClass("fit-width")&&"fit"!==this.options.width&&this.$newElement.removeClass("fit-width")},selectPosition:function(){var b,c,d=this,e="
    ",f=a(e),g=function(a){f.addClass(a.attr("class").replace(/form-control|fit-width/gi,"")).toggleClass("dropup",a.hasClass("dropup")),b=a.offset(),c=a.hasClass("dropup")?0:a[0].offsetHeight,f.css({top:b.top+c,left:b.left,width:a[0].offsetWidth,position:"absolute"})};this.$newElement.on("click",function(){d.isDisabled()||(g(a(this)),f.appendTo(d.options.container),f.toggleClass("open",!a(this).hasClass("open")),f.append(d.$menu))}),a(window).on("resize scroll",function(){g(d.$newElement)}),this.$element.on("hide.bs.select",function(){d.$menu.data("height",d.$menu.height()),f.detach()})},setSelected:function(a,b,c){if(!c)var c=this.findLis().eq(this.liObj[a]);c.toggleClass("selected",b)},setDisabled:function(a,b,c){if(!c)var c=this.findLis().eq(this.liObj[a]);b?c.addClass("disabled").children("a").attr("href","#").attr("tabindex",-1):c.removeClass("disabled").children("a").removeAttr("href").attr("tabindex",0)},isDisabled:function(){return this.$element[0].disabled},checkDisabled:function(){var a=this;this.isDisabled()?(this.$newElement.addClass("disabled"),this.$button.addClass("disabled").attr("tabindex",-1)):(this.$button.hasClass("disabled")&&(this.$newElement.removeClass("disabled"),this.$button.removeClass("disabled")),-1!=this.$button.attr("tabindex")||this.$element.data("tabindex")||this.$button.removeAttr("tabindex")),this.$button.click(function(){return!a.isDisabled()})},tabIndex:function(){this.$element.is("[tabindex]")&&(this.$element.data("tabindex",this.$element.attr("tabindex")),this.$button.attr("tabindex",this.$element.data("tabindex")))},clickListener:function(){var b=this,c=a(document);this.$newElement.on("touchstart.dropdown",".dropdown-menu",function(a){a.stopPropagation()}),c.data("spaceSelect",!1),this.$button.on("keyup",function(a){/(32)/.test(a.keyCode.toString(10))&&c.data("spaceSelect")&&(a.preventDefault(),c.data("spaceSelect",!1))}),this.$newElement.on("click",function(){b.setSize(),b.$element.on("shown.bs.select",function(){if(b.options.liveSearch||b.multiple){if(!b.multiple){var a=b.liObj[b.$element[0].selectedIndex];if("number"!=typeof a||b.options.size===!1)return;var c=b.$lis.eq(a)[0].offsetTop-b.$menuInner[0].offsetTop;c=c-b.$menuInner[0].offsetHeight/2+b.sizeInfo.liHeight/2,b.$menuInner[0].scrollTop=c}}else b.$menu.find(".selected a").focus()})}),this.$menu.on("click","li a",function(c){var d=a(this),e=d.parent().data("originalIndex"),f=b.$element.val(),g=b.$element.prop("selectedIndex");if(b.multiple&&c.stopPropagation(),c.preventDefault(),!b.isDisabled()&&!d.parent().hasClass("disabled")){var h=b.$element.find("option"),i=h.eq(e),j=i.prop("selected"),k=i.parent("optgroup"),l=b.options.maxOptions,m=k.data("maxOptions")||!1;if(b.multiple){if(i.prop("selected",!j),b.setSelected(e,!j),d.blur(),l!==!1||m!==!1){var n=l
    ');q[2]&&(r=r.replace("{var}",q[2][l>1?0:1]),s=s.replace("{var}",q[2][m>1?0:1])),i.prop("selected",!1),b.$menu.append(t),l&&n&&(t.append(a("
    "+r+"
    ")),b.$element.trigger("maxReached.bs.select")),m&&o&&(t.append(a("
    "+s+"
    ")),b.$element.trigger("maxReachedGrp.bs.select")),setTimeout(function(){b.setSelected(e,!1)},10),t.delay(750).fadeOut(300,function(){a(this).remove()})}}}else h.prop("selected",!1),i.prop("selected",!0),b.$menu.find(".selected").removeClass("selected"),b.setSelected(e,!0);b.multiple?b.options.liveSearch&&b.$searchbox.focus():b.$button.focus(),(f!=b.$element.val()&&b.multiple||g!=b.$element.prop("selectedIndex")&&!b.multiple)&&(b.$element.triggerNative("change"),b.$element.trigger("changed.bs.select",[e,i.prop("selected"),j]))}}),this.$menu.on("click","li.disabled a, .popover-title, .popover-title :not(.close)",function(c){c.currentTarget==this&&(c.preventDefault(),c.stopPropagation(),b.options.liveSearch&&!a(c.target).hasClass("close")?b.$searchbox.focus():b.$button.focus())}),this.$menu.on("click","li.divider, li.dropdown-header",function(a){a.preventDefault(),a.stopPropagation(),b.options.liveSearch?b.$searchbox.focus():b.$button.focus()}),this.$menu.on("click",".popover-title .close",function(){b.$button.click()}),this.$searchbox.on("click",function(a){a.stopPropagation()}),this.$menu.on("click",".actions-btn",function(c){b.options.liveSearch?b.$searchbox.focus():b.$button.focus(),c.preventDefault(),c.stopPropagation(),a(this).hasClass("bs-select-all")?b.selectAll():b.deselectAll(),b.$element.triggerNative("change")}),this.$element.change(function(){b.render(!1)})},liveSearchListener:function(){var d=this,e=a('
  • ');this.$newElement.on("click.dropdown.data-api touchstart.dropdown.data-api",function(){d.$menuInner.find(".active").removeClass("active"),d.$searchbox.val()&&(d.$searchbox.val(""),d.$lis.not(".is-hidden").removeClass("hidden"),e.parent().length&&e.remove()),d.multiple||d.$menuInner.find(".selected").addClass("active"),setTimeout(function(){d.$searchbox.focus()},10)}),this.$searchbox.on("click.dropdown.data-api focus.dropdown.data-api touchend.dropdown.data-api",function(a){a.stopPropagation()}),this.$searchbox.on("input propertychange",function(){if(d.$searchbox.val()){var f=d.$lis.not(".is-hidden").removeClass("hidden").children("a");f=d.options.liveSearchNormalize?f.not(":a"+d._searchStyle()+'("'+b(d.$searchbox.val())+'")'):f.not(":"+d._searchStyle()+'("'+d.$searchbox.val()+'")'),f.parent().addClass("hidden"),d.$lis.filter(".dropdown-header").each(function(){var b=a(this),c=b.data("optgroup");0===d.$lis.filter("[data-optgroup="+c+"]").not(b).not(".hidden").length&&(b.addClass("hidden"),d.$lis.filter("[data-optgroup="+c+"div]").addClass("hidden"))});var g=d.$lis.not(".hidden");g.each(function(b){var c=a(this);c.hasClass("divider")&&(c.index()===g.eq(0).index()||c.index()===g.last().index()||g.eq(b+1).hasClass("divider"))&&c.addClass("hidden")}),d.$lis.not(".hidden, .no-results").length?e.parent().length&&e.remove():(e.parent().length&&e.remove(),e.html(d.options.noneResultsText.replace("{0}",'"'+c(d.$searchbox.val())+'"')).show(),d.$menuInner.append(e))}else d.$lis.not(".is-hidden").removeClass("hidden"),e.parent().length&&e.remove();d.$lis.filter(".active").removeClass("active"),d.$searchbox.val()&&d.$lis.not(".hidden, .divider, .dropdown-header").eq(0).addClass("active").children("a").focus(),a(this).focus()})},_searchStyle:function(){var a="icontains";switch(this.options.liveSearchStyle){case"begins":case"startsWith":a="ibegins";break;case"contains":}return a},val:function(a){return"undefined"!=typeof a?(this.$element.val(a),this.render(),this.$element):this.$element.val()},selectAll:function(){this.findLis(),this.$element.find("option:enabled").not("[data-divider], [data-hidden]").prop("selected",!0),this.$lis.not(".divider, .dropdown-header, .disabled, .hidden").addClass("selected"),this.render(!1)},deselectAll:function(){this.findLis(),this.$element.find("option:enabled").not("[data-divider], [data-hidden]").prop("selected",!1),this.$lis.not(".divider, .dropdown-header, .disabled, .hidden").removeClass("selected"),this.render(!1)},keydown:function(c){var d,e,f,g,h,i,j,k,l,m=a(this),n=m.is("input")?m.parent().parent():m.parent(),o=n.data("this"),p=":not(.disabled, .hidden, .dropdown-header, .divider)",q={32:" ",48:"0",49:"1",50:"2",51:"3",52:"4",53:"5",54:"6",55:"7",56:"8",57:"9",59:";",65:"a",66:"b",67:"c",68:"d",69:"e",70:"f",71:"g",72:"h",73:"i",74:"j",75:"k",76:"l",77:"m",78:"n",79:"o",80:"p",81:"q",82:"r",83:"s",84:"t",85:"u",86:"v",87:"w",88:"x",89:"y",90:"z",96:"0",97:"1",98:"2",99:"3",100:"4",101:"5",102:"6",103:"7",104:"8",105:"9"};if(o.options.liveSearch&&(n=m.parent().parent()),o.options.container&&(n=o.$menu),d=a("[role=menu] li a",n),l=o.$menu.parent().hasClass("open"),!l&&(c.keyCode>=48&&c.keyCode<=57||c.keyCode>=65&&c.keyCode<=90)&&(o.options.container?o.$newElement.trigger("click"):(o.setSize(),o.$menu.parent().addClass("open"),l=!0),o.$searchbox.focus()),o.options.liveSearch&&(/(^9$|27)/.test(c.keyCode.toString(10))&&l&&0===o.$menu.find(".active").length&&(c.preventDefault(),o.$menu.parent().removeClass("open"),o.options.container&&o.$newElement.removeClass("open"),o.$button.focus()),d=a("[role=menu] li:not(.disabled, .hidden, .dropdown-header, .divider)",n),m.val()||/(38|40)/.test(c.keyCode.toString(10))||0===d.filter(".active").length&&(d=o.$newElement.find("li"),d=o.options.liveSearchNormalize?d.filter(":a"+o._searchStyle()+"("+b(q[c.keyCode])+")"):d.filter(":"+o._searchStyle()+"("+q[c.keyCode]+")"))),d.length){if(/(38|40)/.test(c.keyCode.toString(10)))e=d.index(d.filter(":focus")),g=d.parent(p).first().data("originalIndex"),h=d.parent(p).last().data("originalIndex"),f=d.eq(e).parent().nextAll(p).eq(0).data("originalIndex"),i=d.eq(e).parent().prevAll(p).eq(0).data("originalIndex"),j=d.eq(f).parent().prevAll(p).eq(0).data("originalIndex"),o.options.liveSearch&&(d.each(function(b){a(this).hasClass("disabled")||a(this).data("index",b)}),e=d.index(d.filter(".active")),g=d.first().data("index"),h=d.last().data("index"),f=d.eq(e).nextAll().eq(0).data("index"),i=d.eq(e).prevAll().eq(0).data("index"),j=d.eq(f).prevAll().eq(0).data("index")),k=m.data("prevIndex"),38==c.keyCode?(o.options.liveSearch&&(e-=1),e!=j&&e>i&&(e=i),g>e&&(e=g),e==k&&(e=h)):40==c.keyCode&&(o.options.liveSearch&&(e+=1),-1==e&&(e=0),e!=j&&f>e&&(e=f),e>h&&(e=h),e==k&&(e=g)),m.data("prevIndex",e),o.options.liveSearch?(c.preventDefault(),m.hasClass("dropdown-toggle")||(d.removeClass("active").eq(e).addClass("active").children("a").focus(),m.focus())):d.eq(e).focus();else if(!m.is("input")){var r,s,t=[];d.each(function(){a(this).parent().hasClass("disabled")||a.trim(a(this).text().toLowerCase()).substring(0,1)==q[c.keyCode]&&t.push(a(this).parent().index())}),r=a(document).data("keycount"),r++,a(document).data("keycount",r),s=a.trim(a(":focus").text().toLowerCase()).substring(0,1),s!=q[c.keyCode]?(r=1,a(document).data("keycount",r)):r>=t.length&&(a(document).data("keycount",0),r>t.length&&(r=1)),d.eq(t[r-1]).focus()}if((/(13|32)/.test(c.keyCode.toString(10))||/(^9$)/.test(c.keyCode.toString(10))&&o.options.selectOnTab)&&l){if(/(32)/.test(c.keyCode.toString(10))||c.preventDefault(),o.options.liveSearch)/(32)/.test(c.keyCode.toString(10))||(o.$menu.find(".active a").click(),m.focus());else{var u=a(":focus");u.click(),u.focus(),c.preventDefault(),a(document).data("spaceSelect",!0)}a(document).data("keycount",0)}(/(^9$|27)/.test(c.keyCode.toString(10))&&l&&(o.multiple||o.options.liveSearch)||/(27)/.test(c.keyCode.toString(10))&&!l)&&(o.$menu.parent().removeClass("open"),o.options.container&&o.$newElement.removeClass("open"),o.$button.focus())}},mobile:function(){this.$element.addClass("mobile-device").appendTo(this.$newElement),this.options.container&&this.$menu.hide()},refresh:function(){this.$lis=null,this.liObj={},this.reloadLi(),this.render(),this.checkDisabled(),this.liHeight(!0),this.setStyle(),this.setWidth(),this.$lis&&this.$searchbox.trigger("propertychange"),this.$element.trigger("refreshed.bs.select")},hide:function(){this.$newElement.hide()},show:function(){this.$newElement.show()},remove:function(){this.$newElement.remove(),this.$element.remove()}};var f=a.fn.selectpicker;a.fn.selectpicker=d,a.fn.selectpicker.Constructor=e,a.fn.selectpicker.noConflict=function(){return a.fn.selectpicker=f,this},a(document).data("keycount",0).on("keydown",'.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role="menu"], .bs-searchbox input',e.prototype.keydown).on("focusin.modal",'.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role="menu"], .bs-searchbox input',function(a){a.stopPropagation()}),a(window).on("load.bs.select.data-api",function(){a(".selectpicker").each(function(){var b=a(this);d.call(b,b.data())})})}(jQuery)}); -//# sourceMappingURL=bootstrap-select.js.map \ No newline at end of file diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-bg_BG.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-bg_BG.js deleted file mode 100644 index 3f714ae55..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-bg_BG.js +++ /dev/null @@ -1,44 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ - -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module unless amdModuleId is set - define(["jquery"], function (a0) { - return (factory(a0)); - }); - } else if (typeof exports === 'object') { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(require("jquery")); - } else { - factory(jQuery); - } -}(this, function () { - -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: 'Нищо избрано', - noneResultsText: 'Няма резултат за {0}', - countSelectedText: function (numSelected, numTotal) { - return (numSelected == 1) ? "{0} избран елемент" : "{0} избрани елемента"; - }, - maxOptionsText: function (numAll, numGroup) { - return [ - (numAll == 1) ? 'Лимита е достигнат ({n} елемент максимум)' : 'Лимита е достигнат ({n} елемента максимум)', - (numGroup == 1) ? 'Груповия лимит е достигнат ({n} елемент максимум)' : 'Груповия лимит е достигнат ({n} елемента максимум)' - ]; - }, - selectAllText: 'Избери всички', - deselectAllText: 'Размаркирай всички', - multipleSeparator: ', ' - }; -})(jQuery); - - -})); diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-bg_BG.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-bg_BG.min.js deleted file mode 100644 index 3475f21a7..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-bg_BG.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ -!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Нищо избрано",noneResultsText:"Няма резултат за {0}",countSelectedText:function(a,b){return 1==a?"{0} избран елемент":"{0} избрани елемента"},maxOptionsText:function(a,b){return[1==a?"Лимита е достигнат ({n} елемент максимум)":"Лимита е достигнат ({n} елемента максимум)",1==b?"Груповия лимит е достигнат ({n} елемент максимум)":"Груповия лимит е достигнат ({n} елемента максимум)"]},selectAllText:"Избери всички",deselectAllText:"Размаркирай всички",multipleSeparator:", "}}(jQuery)}); \ No newline at end of file diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-cs_CZ.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-cs_CZ.js deleted file mode 100644 index cfe317dae..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-cs_CZ.js +++ /dev/null @@ -1,35 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ - -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module unless amdModuleId is set - define(["jquery"], function (a0) { - return (factory(a0)); - }); - } else if (typeof exports === 'object') { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(require("jquery")); - } else { - factory(jQuery); - } -}(this, function () { - -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: 'Nic není vybráno', - noneResultsText: 'Žádné výsledky {0}', - countSelectedText: 'Označeno {0} z {1}', - maxOptionsText: ['Limit překročen ({n} {var} max)', 'Limit skupiny překročen ({n} {var} max)', ['položek', 'položka']], - multipleSeparator: ', ' - }; -})(jQuery); - - -})); diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-cs_CZ.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-cs_CZ.min.js deleted file mode 100644 index c3890f69f..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-cs_CZ.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ -!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Nic není vybráno",noneResultsText:"Žádné výsledky {0}",countSelectedText:"Označeno {0} z {1}",maxOptionsText:["Limit překročen ({n} {var} max)","Limit skupiny překročen ({n} {var} max)",["položek","položka"]],multipleSeparator:", "}}(jQuery)}); \ No newline at end of file diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-da_DK.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-da_DK.js deleted file mode 100644 index 9b905bd12..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-da_DK.js +++ /dev/null @@ -1,44 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ - -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module unless amdModuleId is set - define(["jquery"], function (a0) { - return (factory(a0)); - }); - } else if (typeof exports === 'object') { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(require("jquery")); - } else { - factory(jQuery); - } -}(this, function () { - -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: 'Intet valgt', - noneResultsText: 'Ingen resultater fundet {0}', - countSelectedText: function (numSelected, numTotal) { - return (numSelected == 1) ? "{0} valgt" : "{0} valgt"; - }, - maxOptionsText: function (numAll, numGroup) { - return [ - (numAll == 1) ? 'Begrænsning nået (max {n} valgt)' : 'Begrænsning nået (max {n} valgte)', - (numGroup == 1) ? 'Gruppe-begrænsning nået (max {n} valgt)' : 'Gruppe-begrænsning nået (max {n} valgte)' - ]; - }, - selectAllText: 'Markér alle', - deselectAllText: 'Afmarkér alle', - multipleSeparator: ', ' - }; -})(jQuery); - - -})); diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-da_DK.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-da_DK.min.js deleted file mode 100644 index df4030a48..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-da_DK.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ -!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Intet valgt",noneResultsText:"Ingen resultater fundet {0}",countSelectedText:function(a,b){return"{0} valgt"},maxOptionsText:function(a,b){return[1==a?"Begrænsning nået (max {n} valgt)":"Begrænsning nået (max {n} valgte)",1==b?"Gruppe-begrænsning nået (max {n} valgt)":"Gruppe-begrænsning nået (max {n} valgte)"]},selectAllText:"Markér alle",deselectAllText:"Afmarkér alle",multipleSeparator:", "}}(jQuery)}); \ No newline at end of file diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-de_DE.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-de_DE.js deleted file mode 100644 index ba350b395..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-de_DE.js +++ /dev/null @@ -1,35 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ - -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module unless amdModuleId is set - define(["jquery"], function (a0) { - return (factory(a0)); - }); - } else if (typeof exports === 'object') { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(require("jquery")); - } else { - factory(jQuery); - } -}(this, function () { - -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: 'Bitte wählen...', - noneResultsText: 'Keine Ergebnisse für {0}', - countSelectedText: '{0} von {1} ausgewählt', - maxOptionsText: ['Limit erreicht ({n} {var} max.)', 'Gruppen-Limit erreicht ({n} {var} max.)', ['Eintrag', 'Einträge']], - multipleSeparator: ', ' - }; -})(jQuery); - - -})); diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-de_DE.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-de_DE.min.js deleted file mode 100644 index 3866e0448..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-de_DE.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ -!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Bitte wählen...",noneResultsText:"Keine Ergebnisse für {0}",countSelectedText:"{0} von {1} ausgewählt",maxOptionsText:["Limit erreicht ({n} {var} max.)","Gruppen-Limit erreicht ({n} {var} max.)",["Eintrag","Einträge"]],multipleSeparator:", "}}(jQuery)}); \ No newline at end of file diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-en_US.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-en_US.js deleted file mode 100644 index 118c78c8e..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-en_US.js +++ /dev/null @@ -1,44 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ - -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module unless amdModuleId is set - define(["jquery"], function (a0) { - return (factory(a0)); - }); - } else if (typeof exports === 'object') { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(require("jquery")); - } else { - factory(jQuery); - } -}(this, function () { - -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: 'Nothing selected', - noneResultsText: 'No results match {0}', - countSelectedText: function (numSelected, numTotal) { - return (numSelected == 1) ? "{0} item selected" : "{0} items selected"; - }, - maxOptionsText: function (numAll, numGroup) { - return [ - (numAll == 1) ? 'Limit reached ({n} item max)' : 'Limit reached ({n} items max)', - (numGroup == 1) ? 'Group limit reached ({n} item max)' : 'Group limit reached ({n} items max)' - ]; - }, - selectAllText: 'Select All', - deselectAllText: 'Deselect All', - multipleSeparator: ', ' - }; -})(jQuery); - - -})); diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-en_US.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-en_US.min.js deleted file mode 100644 index 5d683fb21..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-en_US.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ -!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Nothing selected",noneResultsText:"No results match {0}",countSelectedText:function(a,b){return 1==a?"{0} item selected":"{0} items selected"},maxOptionsText:function(a,b){return[1==a?"Limit reached ({n} item max)":"Limit reached ({n} items max)",1==b?"Group limit reached ({n} item max)":"Group limit reached ({n} items max)"]},selectAllText:"Select All",deselectAllText:"Deselect All",multipleSeparator:", "}}(jQuery)}); \ No newline at end of file diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-es_CL.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-es_CL.js deleted file mode 100644 index e2a991199..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-es_CL.js +++ /dev/null @@ -1,35 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ - -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module unless amdModuleId is set - define(["jquery"], function (a0) { - return (factory(a0)); - }); - } else if (typeof exports === 'object') { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(require("jquery")); - } else { - factory(jQuery); - } -}(this, function () { - -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: 'No hay selección', - noneResultsText: 'No hay resultados {0}', - countSelectedText: 'Seleccionados {0} de {1}', - maxOptionsText: ['Límite alcanzado ({n} {var} max)', 'Límite del grupo alcanzado({n} {var} max)', ['elementos', 'element']], - multipleSeparator: ', ' - }; -})(jQuery); - - -})); diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-es_CL.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-es_CL.min.js deleted file mode 100644 index 651bd10de..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-es_CL.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ -!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"No hay selección",noneResultsText:"No hay resultados {0}",countSelectedText:"Seleccionados {0} de {1}",maxOptionsText:["Límite alcanzado ({n} {var} max)","Límite del grupo alcanzado({n} {var} max)",["elementos","element"]],multipleSeparator:", "}}(jQuery)}); \ No newline at end of file diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-eu.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-eu.js deleted file mode 100644 index ab2728431..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-eu.js +++ /dev/null @@ -1,35 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ - -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module unless amdModuleId is set - define(["jquery"], function (a0) { - return (factory(a0)); - }); - } else if (typeof exports === 'object') { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(require("jquery")); - } else { - factory(jQuery); - } -}(this, function () { - -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: 'Hautapenik ez', - noneResultsText: 'Emaitzarik ez {0}', - countSelectedText: '{1}(e)tik {0} hautatuta', - maxOptionsText: ['Mugara iritsita ({n} {var} gehienez)', 'Taldearen mugara iritsita ({n} {var} gehienez)', ['elementu', 'elementu']], - multipleSeparator: ', ' - }; -})(jQuery); - - -})); diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-eu.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-eu.min.js deleted file mode 100644 index 384bb8168..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-eu.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ -!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Hautapenik ez",noneResultsText:"Emaitzarik ez {0}",countSelectedText:"{1}(e)tik {0} hautatuta",maxOptionsText:["Mugara iritsita ({n} {var} gehienez)","Taldearen mugara iritsita ({n} {var} gehienez)",["elementu","elementu"]],multipleSeparator:", "}}(jQuery)}); \ No newline at end of file diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-fa_IR.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-fa_IR.js deleted file mode 100644 index 7edc4d3c6..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-fa_IR.js +++ /dev/null @@ -1,37 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ - -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module unless amdModuleId is set - define(["jquery"], function (a0) { - return (factory(a0)); - }); - } else if (typeof exports === 'object') { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(require("jquery")); - } else { - factory(jQuery); - } -}(this, function () { - -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: 'چیزی انتخاب نشده است', - noneResultsText: 'هیج مشابهی برای {0} پیدا نشد', - countSelectedText: "{0} از {1} مورد انتخاب شده", - maxOptionsText: ['بیشتر ممکن نیست {حداکثر {n} عدد}', 'بیشتر ممکن نیست {حداکثر {n} عدد}'], - selectAllText: 'انتخاب همه', - deselectAllText: 'انتخاب هیچ کدام', - multipleSeparator: ', ' - }; -})(jQuery); - - -})); diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-fa_IR.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-fa_IR.min.js deleted file mode 100644 index b45020cf9..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-fa_IR.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ -!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"چیزی انتخاب نشده است",noneResultsText:"هیج مشابهی برای {0} پیدا نشد",countSelectedText:"{0} از {1} مورد انتخاب شده",maxOptionsText:["بیشتر ممکن نیست {حداکثر {n} عدد}","بیشتر ممکن نیست {حداکثر {n} عدد}"],selectAllText:"انتخاب همه",deselectAllText:"انتخاب هیچ کدام",multipleSeparator:", "}}(jQuery)}); \ No newline at end of file diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-fr_FR.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-fr_FR.js deleted file mode 100644 index db77fa334..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-fr_FR.js +++ /dev/null @@ -1,42 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ - -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module unless amdModuleId is set - define(["jquery"], function (a0) { - return (factory(a0)); - }); - } else if (typeof exports === 'object') { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(require("jquery")); - } else { - factory(jQuery); - } -}(this, function () { - -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: 'Aucune sélection', - noneResultsText: 'Aucun résultat pour {0}', - countSelectedText: function (numSelected, numTotal) { - return (numSelected > 1) ? "{0} éléments sélectionnés" : "{0} élément sélectionné"; - }, - maxOptionsText: function (numAll, numGroup) { - return [ - (numAll > 1) ? 'Limite atteinte ({n} éléments max)' : 'Limite atteinte ({n} élément max)', - (numGroup > 1) ? 'Limite du groupe atteinte ({n} éléments max)' : 'Limite du groupe atteinte ({n} élément max)' - ]; - }, - multipleSeparator: ', ' - }; -})(jQuery); - - -})); diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-fr_FR.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-fr_FR.min.js deleted file mode 100644 index e999af859..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-fr_FR.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ -!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Aucune sélection",noneResultsText:"Aucun résultat pour {0}",countSelectedText:function(a,b){return a>1?"{0} éléments sélectionnés":"{0} élément sélectionné"},maxOptionsText:function(a,b){return[a>1?"Limite atteinte ({n} éléments max)":"Limite atteinte ({n} élément max)",b>1?"Limite du groupe atteinte ({n} éléments max)":"Limite du groupe atteinte ({n} élément max)"]},multipleSeparator:", "}}(jQuery)}); \ No newline at end of file diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-hu_HU.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-hu_HU.js deleted file mode 100644 index 4d7f502ae..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-hu_HU.js +++ /dev/null @@ -1,44 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ - -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module unless amdModuleId is set - define(["jquery"], function (a0) { - return (factory(a0)); - }); - } else if (typeof exports === 'object') { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(require("jquery")); - } else { - factory(jQuery); - } -}(this, function () { - -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: 'Válasszon!', - noneResultsText: 'Nincs találat {0}', - countSelectedText: function (numSelected, numTotal) { - return '{n} elem kiválasztva'; - }, - maxOptionsText: function (numAll, numGroup) { - return [ - 'Legfeljebb {n} elem választható', - 'A csoportban legfeljebb {n} elem választható' - ]; - }, - selectAllText: 'Mind', - deselectAllText: 'Egyik sem', - multipleSeparator: ', ' - }; -})(jQuery); - - -})); diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-hu_HU.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-hu_HU.min.js deleted file mode 100644 index 98cdef707..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-hu_HU.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ -!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Válasszon!",noneResultsText:"Nincs találat {0}",countSelectedText:function(a,b){return"{n} elem kiválasztva"},maxOptionsText:function(a,b){return["Legfeljebb {n} elem választható","A csoportban legfeljebb {n} elem választható"]},selectAllText:"Mind",deselectAllText:"Egyik sem",multipleSeparator:", "}}(jQuery)}); \ No newline at end of file diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-it_IT.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-it_IT.js deleted file mode 100644 index f41331d11..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-it_IT.js +++ /dev/null @@ -1,35 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ - -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module unless amdModuleId is set - define(["jquery"], function (a0) { - return (factory(a0)); - }); - } else if (typeof exports === 'object') { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(require("jquery")); - } else { - factory(jQuery); - } -}(this, function () { - -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: 'Nessuna selezione', - noneResultsText: 'Nessun risultato per {0}', - countSelectedText: 'Selezionati {0} di {1}', - maxOptionsText: ['Limite raggiunto ({n} {var} max)', 'Limite del gruppo raggiunto ({n} {var} max)', ['elementi', 'elemento']], - multipleSeparator: ', ' - }; -})(jQuery); - - -})); diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-it_IT.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-it_IT.min.js deleted file mode 100644 index 746f011e4..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-it_IT.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ -!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Nessuna selezione",noneResultsText:"Nessun risultato per {0}",countSelectedText:"Selezionati {0} di {1}",maxOptionsText:["Limite raggiunto ({n} {var} max)","Limite del gruppo raggiunto ({n} {var} max)",["elementi","elemento"]],multipleSeparator:", "}}(jQuery)}); \ No newline at end of file diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ko_KR.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ko_KR.js deleted file mode 100644 index 823db4c4f..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ko_KR.js +++ /dev/null @@ -1,44 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ - -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module unless amdModuleId is set - define(["jquery"], function (a0) { - return (factory(a0)); - }); - } else if (typeof exports === 'object') { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(require("jquery")); - } else { - factory(jQuery); - } -}(this, function () { - -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: '항목을 선택해주세요', - noneResultsText: '{0} 검색 결과가 없습니다', - countSelectedText: function (numSelected, numTotal) { - return "{0}개를 선택하였습니다"; - }, - maxOptionsText: function (numAll, numGroup) { - return [ - '{n}개까지 선택 가능합니다', - '해당 그룹은 {n}개까지 선택 가능합니다' - ]; - }, - selectAllText: '전체선택', - deselectAllText: '전체해제', - multipleSeparator: ', ' - }; -})(jQuery); - - -})); diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ko_KR.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ko_KR.min.js deleted file mode 100644 index 73b57451d..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ko_KR.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ -!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"항목을 선택해주세요",noneResultsText:"{0} 검색 결과가 없습니다",countSelectedText:function(a,b){return"{0}개를 선택하였습니다"},maxOptionsText:function(a,b){return["{n}개까지 선택 가능합니다","해당 그룹은 {n}개까지 선택 가능합니다"]},selectAllText:"전체선택",deselectAllText:"전체해제",multipleSeparator:", "}}(jQuery)}); \ No newline at end of file diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-nl_NL.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-nl_NL.js deleted file mode 100644 index b53167097..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-nl_NL.js +++ /dev/null @@ -1,35 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ - -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module unless amdModuleId is set - define(["jquery"], function (a0) { - return (factory(a0)); - }); - } else if (typeof exports === 'object') { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(require("jquery")); - } else { - factory(jQuery); - } -}(this, function () { - -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: 'Niets geselecteerd', - noneResultsText: 'Geen resultaten gevonden voor {0}', - countSelectedText: '{0} van {1} geselecteerd', - maxOptionsText: ['Limiet bereikt ({n} {var} max)', 'Groep limiet bereikt ({n} {var} max)', ['items', 'item']], - multipleSeparator: ', ' - }; -})(jQuery); - - -})); diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-nl_NL.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-nl_NL.min.js deleted file mode 100644 index 07a951e5e..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-nl_NL.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ -!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Niets geselecteerd",noneResultsText:"Geen resultaten gevonden voor {0}",countSelectedText:"{0} van {1} geselecteerd",maxOptionsText:["Limiet bereikt ({n} {var} max)","Groep limiet bereikt ({n} {var} max)",["items","item"]],multipleSeparator:", "}}(jQuery)}); \ No newline at end of file diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-pl_PL.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-pl_PL.js deleted file mode 100644 index d7e425157..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-pl_PL.js +++ /dev/null @@ -1,37 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ - -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module unless amdModuleId is set - define(["jquery"], function (a0) { - return (factory(a0)); - }); - } else if (typeof exports === 'object') { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(require("jquery")); - } else { - factory(jQuery); - } -}(this, function () { - -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: 'Nic nie zaznaczono', - noneResultsText: 'Brak wyników wyszukiwania {0}', - countSelectedText: 'Zaznaczono {0} z {1}', - maxOptionsText: ['Osiągnięto limit ({n} {var} max)', 'Limit grupy osiągnięty ({n} {var} max)', ['elementy', 'element']], - selectAll: 'Zaznacz wszystkie', - deselectAll: 'Odznacz wszystkie', - multipleSeparator: ', ' - }; -})(jQuery); - - -})); diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-pl_PL.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-pl_PL.min.js deleted file mode 100644 index 6c0a986ec..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-pl_PL.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ -!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Nic nie zaznaczono",noneResultsText:"Brak wyników wyszukiwania {0}",countSelectedText:"Zaznaczono {0} z {1}",maxOptionsText:["Osiągnięto limit ({n} {var} max)","Limit grupy osiągnięty ({n} {var} max)",["elementy","element"]],selectAll:"Zaznacz wszystkie",deselectAll:"Odznacz wszystkie",multipleSeparator:", "}}(jQuery)}); \ No newline at end of file diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-pt_BR.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-pt_BR.js deleted file mode 100644 index c899b5e7e..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-pt_BR.js +++ /dev/null @@ -1,35 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ - -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module unless amdModuleId is set - define(["jquery"], function (a0) { - return (factory(a0)); - }); - } else if (typeof exports === 'object') { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(require("jquery")); - } else { - factory(jQuery); - } -}(this, function () { - -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: 'Nada selecionado', - noneResultsText: 'Nada encontrado contendo {0}', - countSelectedText: 'Selecionado {0} de {1}', - maxOptionsText: ['Limite excedido (máx. {n} {var})', 'Limite do grupo excedido (máx. {n} {var})', ['itens', 'item']], - multipleSeparator: ', ' - }; -})(jQuery); - - -})); diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-pt_BR.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-pt_BR.min.js deleted file mode 100644 index af7e2b802..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-pt_BR.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ -!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Nada selecionado",noneResultsText:"Nada encontrado contendo {0}",countSelectedText:"Selecionado {0} de {1}",maxOptionsText:["Limite excedido (máx. {n} {var})","Limite do grupo excedido (máx. {n} {var})",["itens","item"]],multipleSeparator:", "}}(jQuery)}); \ No newline at end of file diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-pt_PT.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-pt_PT.js deleted file mode 100644 index 6e840f9c8..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-pt_PT.js +++ /dev/null @@ -1,35 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ - -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module unless amdModuleId is set - define(["jquery"], function (a0) { - return (factory(a0)); - }); - } else if (typeof exports === 'object') { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(require("jquery")); - } else { - factory(jQuery); - } -}(this, function () { - -(function ($) { -$.fn.selectpicker.defaults = { -noneSelectedText: 'Nenhum seleccionado', -noneResultsText: 'Sem resultados contendo {0}', -countSelectedText: 'Selecionado {0} de {1}', -maxOptionsText: ['Limite ultrapassado (máx. {n} {var})', 'Limite de seleções ultrapassado (máx. {n} {var})', ['itens', 'item']], -multipleSeparator: ', ' -}; -})(jQuery); - - -})); diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-pt_PT.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-pt_PT.min.js deleted file mode 100644 index 1bdbfca12..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-pt_PT.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ -!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Nenhum seleccionado",noneResultsText:"Sem resultados contendo {0}",countSelectedText:"Selecionado {0} de {1}",maxOptionsText:["Limite ultrapassado (máx. {n} {var})","Limite de seleções ultrapassado (máx. {n} {var})",["itens","item"]],multipleSeparator:", "}}(jQuery)}); \ No newline at end of file diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ro_RO.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ro_RO.js deleted file mode 100644 index 7acdcaf2b..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ro_RO.js +++ /dev/null @@ -1,35 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ - -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module unless amdModuleId is set - define(["jquery"], function (a0) { - return (factory(a0)); - }); - } else if (typeof exports === 'object') { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(require("jquery")); - } else { - factory(jQuery); - } -}(this, function () { - -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: 'Nu a fost selectat nimic', - noneResultsText: 'Nu exista niciun rezultat {0}', - countSelectedText: '{0} din {1} selectat(e)', - maxOptionsText: ['Limita a fost atinsa ({n} {var} max)', 'Limita de grup a fost atinsa ({n} {var} max)', ['iteme', 'item']], - multipleSeparator: ', ' - }; -})(jQuery); - - -})); diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ro_RO.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ro_RO.min.js deleted file mode 100644 index 0bab32a59..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ro_RO.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ -!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Nu a fost selectat nimic",noneResultsText:"Nu exista niciun rezultat {0}",countSelectedText:"{0} din {1} selectat(e)",maxOptionsText:["Limita a fost atinsa ({n} {var} max)","Limita de grup a fost atinsa ({n} {var} max)",["iteme","item"]],multipleSeparator:", "}}(jQuery)}); \ No newline at end of file diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ru_RU.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ru_RU.js deleted file mode 100644 index 6afe385f3..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ru_RU.js +++ /dev/null @@ -1,36 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ - -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module unless amdModuleId is set - define(["jquery"], function (a0) { - return (factory(a0)); - }); - } else if (typeof exports === 'object') { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(require("jquery")); - } else { - factory(jQuery); - } -}(this, function () { - -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: 'Ничего не выбрано', - noneResultsText: 'Совпадений не найдено {0}', - countSelectedText: 'Выбрано {0} из {1}', - maxOptionsText: ['Достигнут предел ({n} {var} максимум)', 'Достигнут предел в группе ({n} {var} максимум)', ['items', 'item']], - doneButtonText: 'Закрыть', - multipleSeparator: ', ' - }; -})(jQuery); - - -})); diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ru_RU.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ru_RU.min.js deleted file mode 100644 index 07b7c430a..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ru_RU.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ -!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Ничего не выбрано",noneResultsText:"Совпадений не найдено {0}",countSelectedText:"Выбрано {0} из {1}",maxOptionsText:["Достигнут предел ({n} {var} максимум)","Достигнут предел в группе ({n} {var} максимум)",["items","item"]],doneButtonText:"Закрыть",multipleSeparator:", "}}(jQuery)}); \ No newline at end of file diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-sk_SK.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-sk_SK.js deleted file mode 100644 index 6591959b2..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-sk_SK.js +++ /dev/null @@ -1,37 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ - -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module unless amdModuleId is set - define(["jquery"], function (a0) { - return (factory(a0)); - }); - } else if (typeof exports === 'object') { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(require("jquery")); - } else { - factory(jQuery); - } -}(this, function () { - -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: 'Vyberte zo zoznamu', - noneResultsText: 'Pre výraz {0} neboli nájdené žiadne výsledky', - countSelectedText: 'Vybrané {0} z {1}', - maxOptionsText: ['Limit prekročený ({n} {var} max)', 'Limit skupiny prekročený ({n} {var} max)', ['položiek', 'položka']], - selectAllText: 'Vybrať všetky', - deselectAllText: 'Zrušiť výber', - multipleSeparator: ', ' - }; -})(jQuery); - - -})); diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-sk_SK.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-sk_SK.min.js deleted file mode 100644 index 5f2edaf04..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-sk_SK.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ -!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Vyberte zo zoznamu",noneResultsText:"Pre výraz {0} neboli nájdené žiadne výsledky",countSelectedText:"Vybrané {0} z {1}",maxOptionsText:["Limit prekročený ({n} {var} max)","Limit skupiny prekročený ({n} {var} max)",["položiek","položka"]],selectAllText:"Vybrať všetky",deselectAllText:"Zrušiť výber",multipleSeparator:", "}}(jQuery)}); \ No newline at end of file diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-sl_SI.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-sl_SI.js deleted file mode 100644 index 4830b3393..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-sl_SI.js +++ /dev/null @@ -1,44 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ - -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module unless amdModuleId is set - define(["jquery"], function (a0) { - return (factory(a0)); - }); - } else if (typeof exports === 'object') { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(require("jquery")); - } else { - factory(jQuery); - } -}(this, function () { - -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: 'Nič izbranega', - noneResultsText: 'Ni zadetkov za {0}', - countSelectedText: function (numSelected, numTotal) { - "Število izbranih: {0}"; - }, - maxOptionsText: function (numAll, numGroup) { - return [ - 'Omejitev dosežena (max. izbranih: {n})', - 'Omejitev skupine dosežena (max. izbranih: {n})' - ]; - }, - selectAllText: 'Izberi vse', - deselectAllText: 'Počisti izbor', - multipleSeparator: ', ' - }; -})(jQuery); - - -})); diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-sl_SI.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-sl_SI.min.js deleted file mode 100644 index 361f50350..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-sl_SI.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ -!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Nič izbranega",noneResultsText:"Ni zadetkov za {0}",countSelectedText:function(a,b){"Število izbranih: {0}"},maxOptionsText:function(a,b){return["Omejitev dosežena (max. izbranih: {n})","Omejitev skupine dosežena (max. izbranih: {n})"]},selectAllText:"Izberi vse",deselectAllText:"Počisti izbor",multipleSeparator:", "}}(jQuery)}); \ No newline at end of file diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-sv_SE.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-sv_SE.js deleted file mode 100644 index ec834f95a..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-sv_SE.js +++ /dev/null @@ -1,44 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ - -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module unless amdModuleId is set - define(["jquery"], function (a0) { - return (factory(a0)); - }); - } else if (typeof exports === 'object') { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(require("jquery")); - } else { - factory(jQuery); - } -}(this, function () { - -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: 'Inget valt', - noneResultsText: 'Inget sökresultat matchar {0}', - countSelectedText: function (numSelected, numTotal) { - return (numSelected === 1) ? "{0} alternativ valt" : "{0} alternativ valda"; - }, - maxOptionsText: function (numAll, numGroup) { - return [ - 'Gräns uppnåd (max {n} alternativ)', - 'Gräns uppnåd (max {n} gruppalternativ)' - ]; - }, - selectAllText: 'Markera alla', - deselectAllText: 'Avmarkera alla', - multipleSeparator: ', ' - }; -})(jQuery); - - -})); diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-sv_SE.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-sv_SE.min.js deleted file mode 100644 index 5cbff5e14..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-sv_SE.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ -!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Inget valt",noneResultsText:"Inget sökresultat matchar {0}",countSelectedText:function(a,b){return 1===a?"{0} alternativ valt":"{0} alternativ valda"},maxOptionsText:function(a,b){return["Gräns uppnåd (max {n} alternativ)","Gräns uppnåd (max {n} gruppalternativ)"]},selectAllText:"Markera alla",deselectAllText:"Avmarkera alla",multipleSeparator:", "}}(jQuery)}); \ No newline at end of file diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-tr_TR.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-tr_TR.js deleted file mode 100644 index 027c8c76d..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-tr_TR.js +++ /dev/null @@ -1,44 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ - -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module unless amdModuleId is set - define(["jquery"], function (a0) { - return (factory(a0)); - }); - } else if (typeof exports === 'object') { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(require("jquery")); - } else { - factory(jQuery); - } -}(this, function () { - -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: 'Hiçbiri seçilmedi', - noneResultsText: 'Hiçbir sonuç bulunamadı {0}', - countSelectedText: function (numSelected, numTotal) { - return (numSelected == 1) ? "{0} öğe seçildi" : "{0} öğe seçildi"; - }, - maxOptionsText: function (numAll, numGroup) { - return [ - (numAll == 1) ? 'Limit aşıldı (maksimum {n} sayıda öğe )' : 'Limit aşıldı (maksimum {n} sayıda öğe)', - (numGroup == 1) ? 'Grup limiti aşıldı (maksimum {n} sayıda öğe)' : 'Grup limiti aşıldı (maksimum {n} sayıda öğe)' - ]; - }, - selectAllText: 'Tümünü Seç', - deselectAllText: 'Seçiniz', - multipleSeparator: ', ' - }; -})(jQuery); - - -})); diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-tr_TR.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-tr_TR.min.js deleted file mode 100644 index 049bf167c..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-tr_TR.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ -!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Hiçbiri seçilmedi",noneResultsText:"Hiçbir sonuç bulunamadı {0}",countSelectedText:function(a,b){return"{0} öğe seçildi"},maxOptionsText:function(a,b){return[1==a?"Limit aşıldı (maksimum {n} sayıda öğe )":"Limit aşıldı (maksimum {n} sayıda öğe)","Grup limiti aşıldı (maksimum {n} sayıda öğe)"]},selectAllText:"Tümünü Seç",deselectAllText:"Seçiniz",multipleSeparator:", "}}(jQuery)}); \ No newline at end of file diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ua_UA.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ua_UA.js deleted file mode 100644 index 35203c238..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ua_UA.js +++ /dev/null @@ -1,35 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ - -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module unless amdModuleId is set - define(["jquery"], function (a0) { - return (factory(a0)); - }); - } else if (typeof exports === 'object') { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(require("jquery")); - } else { - factory(jQuery); - } -}(this, function () { - -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: 'Нічого не вибрано', - noneResultsText: 'Збігів не знайдено {0}', - countSelectedText: 'Вибрано {0} із {1}', - maxOptionsText: ['Досягнута межа ({n} {var} максимум)', 'Досягнута межа в групі ({n} {var} максимум)', ['items', 'item']], - multipleSeparator: ', ' - }; -})(jQuery); - - -})); diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ua_UA.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ua_UA.min.js deleted file mode 100644 index bced6aa8b..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-ua_UA.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ -!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Нічого не вибрано",noneResultsText:"Збігів не знайдено {0}",countSelectedText:"Вибрано {0} із {1}",maxOptionsText:["Досягнута межа ({n} {var} максимум)","Досягнута межа в групі ({n} {var} максимум)",["items","item"]],multipleSeparator:", "}}(jQuery)}); \ No newline at end of file diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-zh_CN.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-zh_CN.js deleted file mode 100644 index 2a9fa3452..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-zh_CN.js +++ /dev/null @@ -1,35 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ - -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module unless amdModuleId is set - define(["jquery"], function (a0) { - return (factory(a0)); - }); - } else if (typeof exports === 'object') { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(require("jquery")); - } else { - factory(jQuery); - } -}(this, function () { - -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: '没有选中任何项', - noneResultsText: '没有找到匹配项', - countSelectedText: '选中{1}中的{0}项', - maxOptionsText: ['超出限制 (最多选择{n}项)', '组选择超出限制(最多选择{n}组)'], - multipleSeparator: ', ' - }; -})(jQuery); - - -})); diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-zh_CN.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-zh_CN.min.js deleted file mode 100644 index bb7023bff..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-zh_CN.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ -!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"没有选中任何项",noneResultsText:"没有找到匹配项",countSelectedText:"选中{1}中的{0}项",maxOptionsText:["超出限制 (最多选择{n}项)","组选择超出限制(最多选择{n}组)"],multipleSeparator:", "}}(jQuery)}); \ No newline at end of file diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-zh_TW.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-zh_TW.js deleted file mode 100644 index 33ce80574..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-zh_TW.js +++ /dev/null @@ -1,37 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ - -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module unless amdModuleId is set - define(["jquery"], function (a0) { - return (factory(a0)); - }); - } else if (typeof exports === 'object') { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(require("jquery")); - } else { - factory(jQuery); - } -}(this, function () { - -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: '沒有選取任何項目', - noneResultsText: '沒有找到符合的結果', - countSelectedText: '已經選取{0}個項目', - maxOptionsText: ['超過限制 (最多選擇{n}項)', '超過限制(最多選擇{n}組)'], - selectAllText: '選取全部', - deselectAllText: '全部取消', - multipleSeparator: ', ' - }; -})(jQuery); - - -})); diff --git a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-zh_TW.min.js b/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-zh_TW.min.js deleted file mode 100644 index 7e871b80d..000000000 --- a/modoboa/bower_components/bootstrap-select/dist/js/i18n/defaults-zh_TW.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap-select v1.7.3 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ -!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"沒有選取任何項目",noneResultsText:"沒有找到符合的結果",countSelectedText:"已經選取{0}個項目",maxOptionsText:["超過限制 (最多選擇{n}項)","超過限制(最多選擇{n}組)"],selectAllText:"選取全部",deselectAllText:"全部取消",multipleSeparator:", "}}(jQuery)}); \ No newline at end of file diff --git a/modoboa/bower_components/bootstrap-select/js/.jshintrc b/modoboa/bower_components/bootstrap-select/js/.jshintrc deleted file mode 100644 index 99c92fe3c..000000000 --- a/modoboa/bower_components/bootstrap-select/js/.jshintrc +++ /dev/null @@ -1,15 +0,0 @@ -{ - "curly": true, - "eqeqeq": true, - "immed": true, - "latedef": true, - "newcap": true, - "noarg": true, - "sub": true, - "undef": true, - "unused": true, - "boss": true, - "eqnull": true, - "browser": true, - "jquery": true -} diff --git a/modoboa/bower_components/bootstrap-select/js/bootstrap-select.js b/modoboa/bower_components/bootstrap-select/js/bootstrap-select.js deleted file mode 100644 index b7d6e237d..000000000 --- a/modoboa/bower_components/bootstrap-select/js/bootstrap-select.js +++ /dev/null @@ -1,1624 +0,0 @@ -(function ($) { - 'use strict'; - - // - if (!String.prototype.includes) { - (function () { - 'use strict'; // needed to support `apply`/`call` with `undefined`/`null` - var toString = {}.toString; - var defineProperty = (function () { - // IE 8 only supports `Object.defineProperty` on DOM elements - try { - var object = {}; - var $defineProperty = Object.defineProperty; - var result = $defineProperty(object, object, object) && $defineProperty; - } catch (error) { - } - return result; - }()); - var indexOf = ''.indexOf; - var includes = function (search) { - if (this == null) { - throw TypeError(); - } - var string = String(this); - if (search && toString.call(search) == '[object RegExp]') { - throw TypeError(); - } - var stringLength = string.length; - var searchString = String(search); - var searchLength = searchString.length; - var position = arguments.length > 1 ? arguments[1] : undefined; - // `ToInteger` - var pos = position ? Number(position) : 0; - if (pos != pos) { // better `isNaN` - pos = 0; - } - var start = Math.min(Math.max(pos, 0), stringLength); - // Avoid the `indexOf` call if no match is possible - if (searchLength + start > stringLength) { - return false; - } - return indexOf.call(string, searchString, pos) != -1; - }; - if (defineProperty) { - defineProperty(String.prototype, 'includes', { - 'value': includes, - 'configurable': true, - 'writable': true - }); - } else { - String.prototype.includes = includes; - } - }()); - } - - if (!String.prototype.startsWith) { - (function () { - 'use strict'; // needed to support `apply`/`call` with `undefined`/`null` - var defineProperty = (function () { - // IE 8 only supports `Object.defineProperty` on DOM elements - try { - var object = {}; - var $defineProperty = Object.defineProperty; - var result = $defineProperty(object, object, object) && $defineProperty; - } catch (error) { - } - return result; - }()); - var toString = {}.toString; - var startsWith = function (search) { - if (this == null) { - throw TypeError(); - } - var string = String(this); - if (search && toString.call(search) == '[object RegExp]') { - throw TypeError(); - } - var stringLength = string.length; - var searchString = String(search); - var searchLength = searchString.length; - var position = arguments.length > 1 ? arguments[1] : undefined; - // `ToInteger` - var pos = position ? Number(position) : 0; - if (pos != pos) { // better `isNaN` - pos = 0; - } - var start = Math.min(Math.max(pos, 0), stringLength); - // Avoid the `indexOf` call if no match is possible - if (searchLength + start > stringLength) { - return false; - } - var index = -1; - while (++index < searchLength) { - if (string.charCodeAt(start + index) != searchString.charCodeAt(index)) { - return false; - } - } - return true; - }; - if (defineProperty) { - defineProperty(String.prototype, 'startsWith', { - 'value': startsWith, - 'configurable': true, - 'writable': true - }); - } else { - String.prototype.startsWith = startsWith; - } - }()); - } - - if (!Object.keys) { - Object.keys = function ( - o, // object - k, // key - r // result array - ){ - // initialize object and result - r=[]; - // iterate over object keys - for (k in o) - // fill result array with non-prototypical keys - r.hasOwnProperty.call(o, k) && r.push(k); - // return result - return r - }; - } - - $.fn.triggerNative = function (eventName) { - var el = this[0], - event; - - if (el.dispatchEvent) { - if (typeof Event === 'function') { - // For modern browsers - event = new Event(eventName, { - bubbles: true - }); - } else { - // For IE since it doesn't support Event constructor - event = document.createEvent('Event'); - event.initEvent(eventName, true, false); - } - - el.dispatchEvent(event); - } else { - if (el.fireEvent) { - event = document.createEventObject(); - event.eventType = eventName; - el.fireEvent('on' + eventName, event); - } - - this.trigger(eventName); - } - }; - // - - // Case insensitive contains search - $.expr[':'].icontains = function (obj, index, meta) { - var $obj = $(obj); - var haystack = ($obj.data('tokens') || $obj.text()).toUpperCase(); - return haystack.includes(meta[3].toUpperCase()); - }; - - // Case insensitive begins search - $.expr[':'].ibegins = function (obj, index, meta) { - var $obj = $(obj); - var haystack = ($obj.data('tokens') || $obj.text()).toUpperCase(); - return haystack.startsWith(meta[3].toUpperCase()); - }; - - // Case and accent insensitive contains search - $.expr[':'].aicontains = function (obj, index, meta) { - var $obj = $(obj); - var haystack = ($obj.data('tokens') || $obj.data('normalizedText') || $obj.text()).toUpperCase(); - return haystack.includes(meta[3].toUpperCase()); - }; - - // Case and accent insensitive begins search - $.expr[':'].aibegins = function (obj, index, meta) { - var $obj = $(obj); - var haystack = ($obj.data('tokens') || $obj.data('normalizedText') || $obj.text()).toUpperCase(); - return haystack.startsWith(meta[3].toUpperCase()); - }; - - /** - * Remove all diatrics from the given text. - * @access private - * @param {String} text - * @returns {String} - */ - function normalizeToBase(text) { - var rExps = [ - {re: /[\xC0-\xC6]/g, ch: "A"}, - {re: /[\xE0-\xE6]/g, ch: "a"}, - {re: /[\xC8-\xCB]/g, ch: "E"}, - {re: /[\xE8-\xEB]/g, ch: "e"}, - {re: /[\xCC-\xCF]/g, ch: "I"}, - {re: /[\xEC-\xEF]/g, ch: "i"}, - {re: /[\xD2-\xD6]/g, ch: "O"}, - {re: /[\xF2-\xF6]/g, ch: "o"}, - {re: /[\xD9-\xDC]/g, ch: "U"}, - {re: /[\xF9-\xFC]/g, ch: "u"}, - {re: /[\xC7-\xE7]/g, ch: "c"}, - {re: /[\xD1]/g, ch: "N"}, - {re: /[\xF1]/g, ch: "n"} - ]; - $.each(rExps, function () { - text = text.replace(this.re, this.ch); - }); - return text; - } - - - function htmlEscape(html) { - var escapeMap = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - '`': '`' - }; - var source = '(?:' + Object.keys(escapeMap).join('|') + ')', - testRegexp = new RegExp(source), - replaceRegexp = new RegExp(source, 'g'), - string = html == null ? '' : '' + html; - return testRegexp.test(string) ? string.replace(replaceRegexp, function (match) { - return escapeMap[match]; - }) : string; - } - - var Selectpicker = function (element, options, e) { - if (e) { - e.stopPropagation(); - e.preventDefault(); - } - - this.$element = $(element); - this.$newElement = null; - this.$button = null; - this.$menu = null; - this.$lis = null; - this.options = options; - - // If we have no title yet, try to pull it from the html title attribute (jQuery doesnt' pick it up as it's not a - // data-attribute) - if (this.options.title === null) { - this.options.title = this.$element.attr('title'); - } - - //Expose public methods - this.val = Selectpicker.prototype.val; - this.render = Selectpicker.prototype.render; - this.refresh = Selectpicker.prototype.refresh; - this.setStyle = Selectpicker.prototype.setStyle; - this.selectAll = Selectpicker.prototype.selectAll; - this.deselectAll = Selectpicker.prototype.deselectAll; - this.destroy = Selectpicker.prototype.remove; - this.remove = Selectpicker.prototype.remove; - this.show = Selectpicker.prototype.show; - this.hide = Selectpicker.prototype.hide; - - this.init(); - }; - - Selectpicker.VERSION = '1.7.2'; - - // part of this is duplicated in i18n/defaults-en_US.js. Make sure to update both. - Selectpicker.DEFAULTS = { - noneSelectedText: 'Nothing selected', - noneResultsText: 'No results matched {0}', - countSelectedText: function (numSelected, numTotal) { - return (numSelected == 1) ? "{0} item selected" : "{0} items selected"; - }, - maxOptionsText: function (numAll, numGroup) { - return [ - (numAll == 1) ? 'Limit reached ({n} item max)' : 'Limit reached ({n} items max)', - (numGroup == 1) ? 'Group limit reached ({n} item max)' : 'Group limit reached ({n} items max)' - ]; - }, - selectAllText: 'Select All', - deselectAllText: 'Deselect All', - doneButton: false, - doneButtonText: 'Close', - multipleSeparator: ', ', - styleBase: 'btn', - style: 'btn-default', - size: 'auto', - title: null, - selectedTextFormat: 'values', - width: false, - container: false, - hideDisabled: false, - showSubtext: false, - showIcon: true, - showContent: true, - dropupAuto: true, - header: false, - liveSearch: false, - liveSearchPlaceholder: null, - liveSearchNormalize: false, - liveSearchStyle: 'contains', - actionsBox: false, - iconBase: 'glyphicon', - tickIcon: 'glyphicon-ok', - maxOptions: false, - mobile: false, - selectOnTab: false, - dropdownAlignRight: false - }; - - Selectpicker.prototype = { - - constructor: Selectpicker, - - init: function () { - var that = this, - id = this.$element.attr('id'); - - this.$element.addClass('bs-select-hidden'); - // store originalIndex (key) and newIndex (value) in this.liObj for fast accessibility - // allows us to do this.$lis.eq(that.liObj[index]) instead of this.$lis.filter('[data-original-index="' + index + '"]') - this.liObj = {}; - this.multiple = this.$element.prop('multiple'); - this.autofocus = this.$element.prop('autofocus'); - this.$newElement = this.createView(); - this.$element.after(this.$newElement); - this.$button = this.$newElement.children('button'); - this.$menu = this.$newElement.children('.dropdown-menu'); - this.$menuInner = this.$menu.children('.inner'); - this.$searchbox = this.$menu.find('input'); - - if (this.options.dropdownAlignRight) - this.$menu.addClass('dropdown-menu-right'); - - if (typeof id !== 'undefined') { - this.$button.attr('data-id', id); - $('label[for="' + id + '"]').click(function (e) { - e.preventDefault(); - that.$button.focus(); - }); - } - - this.checkDisabled(); - this.clickListener(); - if (this.options.liveSearch) this.liveSearchListener(); - this.render(); - this.setStyle(); - this.setWidth(); - if (this.options.container) this.selectPosition(); - this.$menu.data('this', this); - this.$newElement.data('this', this); - if (this.options.mobile) this.mobile(); - - this.$newElement.on('hide.bs.dropdown', function (e) { - that.$element.trigger('hide.bs.select', e); - }); - - this.$newElement.on('hidden.bs.dropdown', function (e) { - that.$element.trigger('hidden.bs.select', e); - }); - - this.$newElement.on('show.bs.dropdown', function (e) { - that.$element.trigger('show.bs.select', e); - }); - - this.$newElement.on('shown.bs.dropdown', function (e) { - that.$element.trigger('shown.bs.select', e); - }); - - setTimeout(function () { - that.$element.trigger('loaded.bs.select'); - }); - }, - - createDropdown: function () { - // Options - // If we are multiple, then add the show-tick class by default - var multiple = this.multiple ? ' show-tick' : '', - inputGroup = this.$element.parent().hasClass('input-group') ? ' input-group-btn' : '', - autofocus = this.autofocus ? ' autofocus' : ''; - // Elements - var header = this.options.header ? '
    ' + this.options.header + '
    ' : ''; - var searchbox = this.options.liveSearch ? - '' - : ''; - var actionsbox = this.multiple && this.options.actionsBox ? - '
    ' + - '
    ' + - '' + - '' + - '
    ' + - '
    ' - : ''; - var donebutton = this.multiple && this.options.doneButton ? - '
    ' + - '
    ' + - '' + - '
    ' + - '
    ' - : ''; - var drop = - '
    ' + - '' + - '' + - '
    '; - - return $(drop); - }, - - createView: function () { - var $drop = this.createDropdown(), - li = this.createLi(); - - $drop.find('ul')[0].innerHTML = li; - return $drop; - }, - - reloadLi: function () { - //Remove all children. - this.destroyLi(); - //Re build - var li = this.createLi(); - this.$menuInner[0].innerHTML = li; - }, - - destroyLi: function () { - this.$menu.find('li').remove(); - }, - - createLi: function () { - var that = this, - _li = [], - optID = 0, - titleOption = document.createElement('option'), - liIndex = -1; // increment liIndex whenever a new
  • element is created to ensure liObj is correct - - // Helper functions - /** - * @param content - * @param [index] - * @param [classes] - * @param [optgroup] - * @returns {string} - */ - var generateLI = function (content, index, classes, optgroup) { - return '' + content + '
  • '; - }; - - /** - * @param text - * @param [classes] - * @param [inline] - * @param [tokens] - * @returns {string} - */ - var generateA = function (text, classes, inline, tokens) { - return '' + text + - '' + - ''; - }; - - if (this.options.title && !this.multiple) { - // this option doesn't create a new
  • element, but does add a new option, so liIndex is decreased - // since liObj is recalculated on every refresh, liIndex needs to be decreased even if the titleOption is already appended - liIndex--; - - if (!this.$element.find('.bs-title-option').length) { - // Use native JS to prepend option (faster) - var element = this.$element[0]; - titleOption.className = 'bs-title-option'; - titleOption.appendChild(document.createTextNode(this.options.title)); - titleOption.value = ''; - element.insertBefore(titleOption, element.firstChild); - // Check if selected attribute is already set on an option. If not, select the titleOption option. - if ($(element.options[element.selectedIndex]).attr('selected') === undefined) titleOption.selected = true; - } - } - - this.$element.find('option').each(function (index) { - var $this = $(this); - - liIndex++; - - if ($this.hasClass('bs-title-option')) return; - - // Get the class and text for the option - var optionClass = this.className || '', - inline = this.style.cssText, - text = $this.data('content') ? $this.data('content') : $this.html(), - tokens = $this.data('tokens') ? $this.data('tokens') : null, - subtext = typeof $this.data('subtext') !== 'undefined' ? '' + $this.data('subtext') + '' : '', - icon = typeof $this.data('icon') !== 'undefined' ? ' ' : '', - isDisabled = this.disabled || (this.parentElement.tagName === 'OPTGROUP' && this.parentElement.disabled); - - if (icon !== '' && isDisabled) { - icon = '' + icon + ''; - } - - if (that.options.hideDisabled && isDisabled) { - liIndex--; - return; - } - - if (!$this.data('content')) { - // Prepend any icon and append any subtext to the main text. - text = icon + '' + text + subtext + ''; - } - - if (this.parentElement.tagName === 'OPTGROUP' && $this.data('divider') !== true) { - var optGroupClass = ' ' + this.parentElement.className || ''; - - if ($this.index() === 0) { // Is it the first option of the optgroup? - optID += 1; - - // Get the opt group label - var label = this.parentElement.label, - labelSubtext = typeof $this.parent().data('subtext') !== 'undefined' ? '' + $this.parent().data('subtext') + '' : '', - labelIcon = $this.parent().data('icon') ? ' ' : ''; - - label = labelIcon + '' + label + labelSubtext + ''; - - if (index !== 0 && _li.length > 0) { // Is it NOT the first option of the select && are there elements in the dropdown? - liIndex++; - _li.push(generateLI('', null, 'divider', optID + 'div')); - } - liIndex++; - _li.push(generateLI(label, null, 'dropdown-header' + optGroupClass, optID)); - } - _li.push(generateLI(generateA(text, 'opt ' + optionClass + optGroupClass, inline, tokens), index, '', optID)); - } else if ($this.data('divider') === true) { - _li.push(generateLI('', index, 'divider')); - } else if ($this.data('hidden') === true) { - _li.push(generateLI(generateA(text, optionClass, inline, tokens), index, 'hidden is-hidden')); - } else { - if (this.previousElementSibling && this.previousElementSibling.tagName === 'OPTGROUP') { - liIndex++; - _li.push(generateLI('', null, 'divider', optID + 'div')); - } - _li.push(generateLI(generateA(text, optionClass, inline, tokens), index)); - } - - that.liObj[index] = liIndex; - }); - - //If we are not multiple, we don't have a selected item, and we don't have a title, select the first element so something is set in the button - if (!this.multiple && this.$element.find('option:selected').length === 0 && !this.options.title) { - this.$element.find('option').eq(0).prop('selected', true).attr('selected', 'selected'); - } - - return _li.join(''); - }, - - findLis: function () { - if (this.$lis == null) this.$lis = this.$menu.find('li'); - return this.$lis; - }, - - /** - * @param [updateLi] defaults to true - */ - render: function (updateLi) { - var that = this, - notDisabled; - - //Update the LI to match the SELECT - if (updateLi !== false) { - this.$element.find('option').each(function (index) { - var $lis = that.findLis().eq(that.liObj[index]); - - that.setDisabled(index, this.disabled || this.parentElement.tagName === 'OPTGROUP' && this.parentElement.disabled, $lis); - that.setSelected(index, this.selected, $lis); - }); - } - - this.tabIndex(); - - var selectedItems = this.$element.find('option').map(function () { - if (this.selected) { - if (that.options.hideDisabled && (this.disabled || this.parentElement.tagName === 'OPTGROUP' && this.parentElement.disabled)) return false; - - var $this = $(this), - icon = $this.data('icon') && that.options.showIcon ? ' ' : '', - subtext; - - if (that.options.showSubtext && $this.data('subtext') && !that.multiple) { - subtext = ' ' + $this.data('subtext') + ''; - } else { - subtext = ''; - } - if (typeof $this.attr('title') !== 'undefined') { - return $this.attr('title'); - } else if ($this.data('content') && that.options.showContent) { - return $this.data('content'); - } else { - return icon + $this.html() + subtext; - } - } - }).toArray(); - - //Fixes issue in IE10 occurring when no default option is selected and at least one option is disabled - //Convert all the values into a comma delimited string - var title = !this.multiple ? selectedItems[0] : selectedItems.join(this.options.multipleSeparator); - - //If this is multi select, and the selectText type is count, the show 1 of 2 selected etc.. - if (this.multiple && this.options.selectedTextFormat.indexOf('count') > -1) { - var max = this.options.selectedTextFormat.split('>'); - if ((max.length > 1 && selectedItems.length > max[1]) || (max.length == 1 && selectedItems.length >= 2)) { - notDisabled = this.options.hideDisabled ? ', [disabled]' : ''; - var totalCount = this.$element.find('option').not('[data-divider="true"], [data-hidden="true"]' + notDisabled).length, - tr8nText = (typeof this.options.countSelectedText === 'function') ? this.options.countSelectedText(selectedItems.length, totalCount) : this.options.countSelectedText; - title = tr8nText.replace('{0}', selectedItems.length.toString()).replace('{1}', totalCount.toString()); - } - } - - if (this.options.title == undefined) { - this.options.title = this.$element.attr('title'); - } - - if (this.options.selectedTextFormat == 'static') { - title = this.options.title; - } - - //If we dont have a title, then use the default, or if nothing is set at all, use the not selected text - if (!title) { - title = typeof this.options.title !== 'undefined' ? this.options.title : this.options.noneSelectedText; - } - - //strip all html-tags and trim the result - this.$button.attr('title', $.trim(title.replace(/<[^>]*>?/g, ''))); - this.$button.children('.filter-option').html(title); - - this.$element.trigger('rendered.bs.select'); - }, - - /** - * @param [style] - * @param [status] - */ - setStyle: function (style, status) { - if (this.$element.attr('class')) { - this.$newElement.addClass(this.$element.attr('class').replace(/selectpicker|mobile-device|bs-select-hidden|validate\[.*\]/gi, '')); - } - - var buttonClass = style ? style : this.options.style; - - if (status == 'add') { - this.$button.addClass(buttonClass); - } else if (status == 'remove') { - this.$button.removeClass(buttonClass); - } else { - this.$button.removeClass(this.options.style); - this.$button.addClass(buttonClass); - } - }, - - liHeight: function (refresh) { - if (!refresh && (this.options.size === false || this.sizeInfo)) return; - - var newElement = document.createElement('div'), - menu = document.createElement('div'), - menuInner = document.createElement('ul'), - divider = document.createElement('li'), - li = document.createElement('li'), - a = document.createElement('a'), - text = document.createElement('span'), - header = this.options.header ? this.$menu.find('.popover-title')[0].cloneNode(true) : null, - search = this.options.liveSearch ? document.createElement('div') : null, - actions = this.options.actionsBox && this.multiple ? this.$menu.find('.bs-actionsbox')[0].cloneNode(true) : null, - doneButton = this.options.doneButton && this.multiple ? this.$menu.find('.bs-donebutton')[0].cloneNode(true) : null; - - text.className = 'text'; - newElement.className = this.$menu[0].parentNode.className + ' open'; - menu.className = 'dropdown-menu open'; - menuInner.className = 'dropdown-menu inner'; - divider.className = 'divider'; - - text.appendChild(document.createTextNode('Inner text')); - a.appendChild(text); - li.appendChild(a); - menuInner.appendChild(li); - menuInner.appendChild(divider); - if (header) menu.appendChild(header); - if (search) { - // create a span instead of input as creating an input element is slower - var input = document.createElement('span'); - search.className = 'bs-searchbox'; - input.className = 'form-control'; - search.appendChild(input); - menu.appendChild(search); - } - if (actions) menu.appendChild(actions); - menu.appendChild(menuInner); - if (doneButton) menu.appendChild(doneButton); - newElement.appendChild(menu); - - document.body.appendChild(newElement); - - var liHeight = a.offsetHeight, - headerHeight = header ? header.offsetHeight : 0, - searchHeight = search ? search.offsetHeight : 0, - actionsHeight = actions ? actions.offsetHeight : 0, - doneButtonHeight = doneButton ? doneButton.offsetHeight : 0, - dividerHeight = $(divider).outerHeight(true), - // fall back to jQuery if getComputedStyle is not supported - menuStyle = typeof getComputedStyle === 'function' ? getComputedStyle(menu) : false, - $menu = menuStyle ? null : $(menu), - menuPadding = parseInt(menuStyle ? menuStyle.paddingTop : $menu.css('paddingTop')) + - parseInt(menuStyle ? menuStyle.paddingBottom : $menu.css('paddingBottom')) + - parseInt(menuStyle ? menuStyle.borderTopWidth : $menu.css('borderTopWidth')) + - parseInt(menuStyle ? menuStyle.borderBottomWidth : $menu.css('borderBottomWidth')), - menuExtras = menuPadding + - parseInt(menuStyle ? menuStyle.marginTop : $menu.css('marginTop')) + - parseInt(menuStyle ? menuStyle.marginBottom : $menu.css('marginBottom')) + 2; - - document.body.removeChild(newElement); - - this.sizeInfo = { - liHeight: liHeight, - headerHeight: headerHeight, - searchHeight: searchHeight, - actionsHeight: actionsHeight, - doneButtonHeight: doneButtonHeight, - dividerHeight: dividerHeight, - menuPadding: menuPadding, - menuExtras: menuExtras - }; - }, - - setSize: function () { - this.findLis(); - this.liHeight(); - - if (this.options.header) this.$menu.css('padding-top', 0); - if (this.options.size === false) return; - - var that = this, - $menu = this.$menu, - $menuInner = this.$menuInner, - $window = $(window), - selectHeight = this.$newElement[0].offsetHeight, - liHeight = this.sizeInfo['liHeight'], - headerHeight = this.sizeInfo['headerHeight'], - searchHeight = this.sizeInfo['searchHeight'], - actionsHeight = this.sizeInfo['actionsHeight'], - doneButtonHeight = this.sizeInfo['doneButtonHeight'], - divHeight = this.sizeInfo['dividerHeight'], - menuPadding = this.sizeInfo['menuPadding'], - menuExtras = this.sizeInfo['menuExtras'], - notDisabled = this.options.hideDisabled ? '.disabled' : '', - menuHeight, - getHeight, - selectOffsetTop, - selectOffsetBot, - posVert = function () { - selectOffsetTop = that.$newElement.offset().top - $window.scrollTop(); - selectOffsetBot = $window.height() - selectOffsetTop - selectHeight; - }; - - posVert(); - - if (this.options.size === 'auto') { - var getSize = function () { - var minHeight, - hasClass = function (className, include) { - return function (element) { - if (include) { - return (element.classList ? element.classList.contains(className) : $(element).hasClass(className)); - } else { - return !(element.classList ? element.classList.contains(className) : $(element).hasClass(className)); - } - }; - }, - lis = that.$menuInner[0].getElementsByTagName('li'), - lisVisible = Array.prototype.filter ? Array.prototype.filter.call(lis, hasClass('hidden', false)) : that.$lis.not('.hidden'), - optGroup = Array.prototype.filter ? Array.prototype.filter.call(lisVisible, hasClass('dropdown-header', true)) : lisVisible.filter('.dropdown-header'); - - posVert(); - menuHeight = selectOffsetBot - menuExtras; - - if (that.options.container) { - if (!$menu.data('height')) $menu.data('height', $menu.height()); - getHeight = $menu.data('height'); - } else { - getHeight = $menu.height(); - } - - if (that.options.dropupAuto) { - that.$newElement.toggleClass('dropup', selectOffsetTop > selectOffsetBot && (menuHeight - menuExtras) < getHeight); - } - if (that.$newElement.hasClass('dropup')) { - menuHeight = selectOffsetTop - menuExtras; - } - - if ((lisVisible.length + optGroup.length) > 3) { - minHeight = liHeight * 3 + menuExtras - 2; - } else { - minHeight = 0; - } - - $menu.css({ - 'max-height': menuHeight + 'px', - 'overflow': 'hidden', - 'min-height': minHeight + headerHeight + searchHeight + actionsHeight + doneButtonHeight + 'px' - }); - $menuInner.css({ - 'max-height': menuHeight - headerHeight - searchHeight - actionsHeight - doneButtonHeight - menuPadding + 'px', - 'overflow-y': 'auto', - 'min-height': Math.max(minHeight - menuPadding, 0) + 'px' - }); - }; - getSize(); - this.$searchbox.off('input.getSize propertychange.getSize').on('input.getSize propertychange.getSize', getSize); - $window.off('resize.getSize scroll.getSize').on('resize.getSize scroll.getSize', getSize); - } else if (this.options.size && this.options.size != 'auto' && this.$lis.not(notDisabled).length > this.options.size) { - var optIndex = this.$lis.not('.divider').not(notDisabled).children().slice(0, this.options.size).last().parent().index(), - divLength = this.$lis.slice(0, optIndex + 1).filter('.divider').length; - menuHeight = liHeight * this.options.size + divLength * divHeight + menuPadding; - - if (that.options.container) { - if (!$menu.data('height')) $menu.data('height', $menu.height()); - getHeight = $menu.data('height'); - } else { - getHeight = $menu.height(); - } - - if (that.options.dropupAuto) { - //noinspection JSUnusedAssignment - this.$newElement.toggleClass('dropup', selectOffsetTop > selectOffsetBot && (menuHeight - menuExtras) < getHeight); - } - $menu.css({ - 'max-height': menuHeight + headerHeight + searchHeight + actionsHeight + doneButtonHeight + 'px', - 'overflow': 'hidden', - 'min-height': '' - }); - $menuInner.css({ - 'max-height': menuHeight - menuPadding + 'px', - 'overflow-y': 'auto', - 'min-height': '' - }); - } - }, - - setWidth: function () { - if (this.options.width === 'auto') { - this.$menu.css('min-width', '0'); - - // Get correct width if element is hidden - var $selectClone = this.$menu.parent().clone().appendTo('body'), - $selectClone2 = this.options.container ? this.$newElement.clone().appendTo('body') : $selectClone, - ulWidth = $selectClone.children('.dropdown-menu').outerWidth(), - btnWidth = $selectClone2.css('width', 'auto').children('button').outerWidth(); - - $selectClone.remove(); - $selectClone2.remove(); - - // Set width to whatever's larger, button title or longest option - this.$newElement.css('width', Math.max(ulWidth, btnWidth) + 'px'); - } else if (this.options.width === 'fit') { - // Remove inline min-width so width can be changed from 'auto' - this.$menu.css('min-width', ''); - this.$newElement.css('width', '').addClass('fit-width'); - } else if (this.options.width) { - // Remove inline min-width so width can be changed from 'auto' - this.$menu.css('min-width', ''); - this.$newElement.css('width', this.options.width); - } else { - // Remove inline min-width/width so width can be changed - this.$menu.css('min-width', ''); - this.$newElement.css('width', ''); - } - // Remove fit-width class if width is changed programmatically - if (this.$newElement.hasClass('fit-width') && this.options.width !== 'fit') { - this.$newElement.removeClass('fit-width'); - } - }, - - selectPosition: function () { - var that = this, - drop = '
    ', - $drop = $(drop), - pos, - actualHeight, - getPlacement = function ($element) { - $drop.addClass($element.attr('class').replace(/form-control|fit-width/gi, '')).toggleClass('dropup', $element.hasClass('dropup')); - pos = $element.offset(); - actualHeight = $element.hasClass('dropup') ? 0 : $element[0].offsetHeight; - $drop.css({ - 'top': pos.top + actualHeight, - 'left': pos.left, - 'width': $element[0].offsetWidth, - 'position': 'absolute' - }); - }; - - this.$newElement.on('click', function () { - if (that.isDisabled()) { - return; - } - getPlacement($(this)); - $drop.appendTo(that.options.container); - $drop.toggleClass('open', !$(this).hasClass('open')); - $drop.append(that.$menu); - }); - - $(window).on('resize scroll', function () { - getPlacement(that.$newElement); - }); - - this.$element.on('hide.bs.select', function () { - that.$menu.data('height', that.$menu.height()); - $drop.detach(); - }); - }, - - setSelected: function (index, selected, $lis) { - if (!$lis) { - var $lis = this.findLis().eq(this.liObj[index]); - } - - $lis.toggleClass('selected', selected); - }, - - setDisabled: function (index, disabled, $lis) { - if (!$lis) { - var $lis = this.findLis().eq(this.liObj[index]); - } - - if (disabled) { - $lis.addClass('disabled').children('a').attr('href', '#').attr('tabindex', -1); - } else { - $lis.removeClass('disabled').children('a').removeAttr('href').attr('tabindex', 0); - } - }, - - isDisabled: function () { - return this.$element[0].disabled; - }, - - checkDisabled: function () { - var that = this; - - if (this.isDisabled()) { - this.$newElement.addClass('disabled'); - this.$button.addClass('disabled').attr('tabindex', -1); - } else { - if (this.$button.hasClass('disabled')) { - this.$newElement.removeClass('disabled'); - this.$button.removeClass('disabled'); - } - - if (this.$button.attr('tabindex') == -1 && !this.$element.data('tabindex')) { - this.$button.removeAttr('tabindex'); - } - } - - this.$button.click(function () { - return !that.isDisabled(); - }); - }, - - tabIndex: function () { - if (this.$element.is('[tabindex]')) { - this.$element.data('tabindex', this.$element.attr('tabindex')); - this.$button.attr('tabindex', this.$element.data('tabindex')); - } - }, - - clickListener: function () { - var that = this, - $document = $(document); - - this.$newElement.on('touchstart.dropdown', '.dropdown-menu', function (e) { - e.stopPropagation(); - }); - - $document.data('spaceSelect', false); - - this.$button.on('keyup', function (e) { - if (/(32)/.test(e.keyCode.toString(10)) && $document.data('spaceSelect')) { - e.preventDefault(); - $document.data('spaceSelect', false); - } - }); - - this.$newElement.on('click', function () { - that.setSize(); - that.$element.on('shown.bs.select', function () { - if (!that.options.liveSearch && !that.multiple) { - that.$menu.find('.selected a').focus(); - } else if (!that.multiple) { - var selectedIndex = that.liObj[that.$element[0].selectedIndex]; - - if (typeof selectedIndex !== 'number' || that.options.size === false) return; - - // scroll to selected option - var offset = that.$lis.eq(selectedIndex)[0].offsetTop - that.$menuInner[0].offsetTop; - offset = offset - that.$menuInner[0].offsetHeight/2 + that.sizeInfo.liHeight/2; - that.$menuInner[0].scrollTop = offset; - } - }); - }); - - this.$menu.on('click', 'li a', function (e) { - var $this = $(this), - clickedIndex = $this.parent().data('originalIndex'), - prevValue = that.$element.val(), - prevIndex = that.$element.prop('selectedIndex'); - - // Don't close on multi choice menu - if (that.multiple) { - e.stopPropagation(); - } - - e.preventDefault(); - - //Don't run if we have been disabled - if (!that.isDisabled() && !$this.parent().hasClass('disabled')) { - var $options = that.$element.find('option'), - $option = $options.eq(clickedIndex), - state = $option.prop('selected'), - $optgroup = $option.parent('optgroup'), - maxOptions = that.options.maxOptions, - maxOptionsGrp = $optgroup.data('maxOptions') || false; - - if (!that.multiple) { // Deselect all others if not multi select box - $options.prop('selected', false); - $option.prop('selected', true); - that.$menu.find('.selected').removeClass('selected'); - that.setSelected(clickedIndex, true); - } else { // Toggle the one we have chosen if we are multi select. - $option.prop('selected', !state); - that.setSelected(clickedIndex, !state); - $this.blur(); - - if (maxOptions !== false || maxOptionsGrp !== false) { - var maxReached = maxOptions < $options.filter(':selected').length, - maxReachedGrp = maxOptionsGrp < $optgroup.find('option:selected').length; - - if ((maxOptions && maxReached) || (maxOptionsGrp && maxReachedGrp)) { - if (maxOptions && maxOptions == 1) { - $options.prop('selected', false); - $option.prop('selected', true); - that.$menu.find('.selected').removeClass('selected'); - that.setSelected(clickedIndex, true); - } else if (maxOptionsGrp && maxOptionsGrp == 1) { - $optgroup.find('option:selected').prop('selected', false); - $option.prop('selected', true); - var optgroupID = $this.parent().data('optgroup'); - that.$menu.find('[data-optgroup="' + optgroupID + '"]').removeClass('selected'); - that.setSelected(clickedIndex, true); - } else { - var maxOptionsArr = (typeof that.options.maxOptionsText === 'function') ? - that.options.maxOptionsText(maxOptions, maxOptionsGrp) : that.options.maxOptionsText, - maxTxt = maxOptionsArr[0].replace('{n}', maxOptions), - maxTxtGrp = maxOptionsArr[1].replace('{n}', maxOptionsGrp), - $notify = $('
    '); - // If {var} is set in array, replace it - /** @deprecated */ - if (maxOptionsArr[2]) { - maxTxt = maxTxt.replace('{var}', maxOptionsArr[2][maxOptions > 1 ? 0 : 1]); - maxTxtGrp = maxTxtGrp.replace('{var}', maxOptionsArr[2][maxOptionsGrp > 1 ? 0 : 1]); - } - - $option.prop('selected', false); - - that.$menu.append($notify); - - if (maxOptions && maxReached) { - $notify.append($('
    ' + maxTxt + '
    ')); - that.$element.trigger('maxReached.bs.select'); - } - - if (maxOptionsGrp && maxReachedGrp) { - $notify.append($('
    ' + maxTxtGrp + '
    ')); - that.$element.trigger('maxReachedGrp.bs.select'); - } - - setTimeout(function () { - that.setSelected(clickedIndex, false); - }, 10); - - $notify.delay(750).fadeOut(300, function () { - $(this).remove(); - }); - } - } - } - } - - if (!that.multiple) { - that.$button.focus(); - } else if (that.options.liveSearch) { - that.$searchbox.focus(); - } - - // Trigger select 'change' - if ((prevValue != that.$element.val() && that.multiple) || (prevIndex != that.$element.prop('selectedIndex') && !that.multiple)) { - that.$element.triggerNative('change'); - // $option.prop('selected') is current option state (selected/unselected). state is previous option state. - that.$element.trigger('changed.bs.select', [clickedIndex, $option.prop('selected'), state]); - } - } - }); - - this.$menu.on('click', 'li.disabled a, .popover-title, .popover-title :not(.close)', function (e) { - if (e.currentTarget == this) { - e.preventDefault(); - e.stopPropagation(); - if (that.options.liveSearch && !$(e.target).hasClass('close')) { - that.$searchbox.focus(); - } else { - that.$button.focus(); - } - } - }); - - this.$menu.on('click', 'li.divider, li.dropdown-header', function (e) { - e.preventDefault(); - e.stopPropagation(); - if (that.options.liveSearch) { - that.$searchbox.focus(); - } else { - that.$button.focus(); - } - }); - - this.$menu.on('click', '.popover-title .close', function () { - that.$button.click(); - }); - - this.$searchbox.on('click', function (e) { - e.stopPropagation(); - }); - - this.$menu.on('click', '.actions-btn', function (e) { - if (that.options.liveSearch) { - that.$searchbox.focus(); - } else { - that.$button.focus(); - } - - e.preventDefault(); - e.stopPropagation(); - - if ($(this).hasClass('bs-select-all')) { - that.selectAll(); - } else { - that.deselectAll(); - } - that.$element.triggerNative('change'); - }); - - this.$element.change(function () { - that.render(false); - }); - }, - - liveSearchListener: function () { - var that = this, - $no_results = $('
  • '); - - this.$newElement.on('click.dropdown.data-api touchstart.dropdown.data-api', function () { - that.$menuInner.find('.active').removeClass('active'); - if (!!that.$searchbox.val()) { - that.$searchbox.val(''); - that.$lis.not('.is-hidden').removeClass('hidden'); - if (!!$no_results.parent().length) $no_results.remove(); - } - if (!that.multiple) that.$menuInner.find('.selected').addClass('active'); - setTimeout(function () { - that.$searchbox.focus(); - }, 10); - }); - - this.$searchbox.on('click.dropdown.data-api focus.dropdown.data-api touchend.dropdown.data-api', function (e) { - e.stopPropagation(); - }); - - this.$searchbox.on('input propertychange', function () { - if (that.$searchbox.val()) { - var $searchBase = that.$lis.not('.is-hidden').removeClass('hidden').children('a'); - if (that.options.liveSearchNormalize) { - $searchBase = $searchBase.not(':a' + that._searchStyle() + '("' + normalizeToBase(that.$searchbox.val()) + '")'); - } else { - $searchBase = $searchBase.not(':' + that._searchStyle() + '("' + that.$searchbox.val() + '")'); - } - $searchBase.parent().addClass('hidden'); - - that.$lis.filter('.dropdown-header').each(function () { - var $this = $(this), - optgroup = $this.data('optgroup'); - - if (that.$lis.filter('[data-optgroup=' + optgroup + ']').not($this).not('.hidden').length === 0) { - $this.addClass('hidden'); - that.$lis.filter('[data-optgroup=' + optgroup + 'div]').addClass('hidden'); - } - }); - - var $lisVisible = that.$lis.not('.hidden'); - - // hide divider if first or last visible, or if followed by another divider - $lisVisible.each(function (index) { - var $this = $(this); - - if ($this.hasClass('divider') && ( - $this.index() === $lisVisible.eq(0).index() || - $this.index() === $lisVisible.last().index() || - $lisVisible.eq(index + 1).hasClass('divider'))) { - $this.addClass('hidden'); - } - }); - - if (!that.$lis.not('.hidden, .no-results').length) { - if (!!$no_results.parent().length) { - $no_results.remove(); - } - $no_results.html(that.options.noneResultsText.replace('{0}', '"' + htmlEscape(that.$searchbox.val()) + '"')).show(); - that.$menuInner.append($no_results); - } else if (!!$no_results.parent().length) { - $no_results.remove(); - } - - } else { - that.$lis.not('.is-hidden').removeClass('hidden'); - if (!!$no_results.parent().length) { - $no_results.remove(); - } - } - - that.$lis.filter('.active').removeClass('active'); - if (that.$searchbox.val()) that.$lis.not('.hidden, .divider, .dropdown-header').eq(0).addClass('active').children('a').focus(); - $(this).focus(); - }); - }, - - _searchStyle: function () { - var style = 'icontains'; - switch (this.options.liveSearchStyle) { - case 'begins': - case 'startsWith': - style = 'ibegins'; - break; - case 'contains': - default: - break; //no need to change the default - } - - return style; - }, - - val: function (value) { - if (typeof value !== 'undefined') { - this.$element.val(value); - this.render(); - - return this.$element; - } else { - return this.$element.val(); - } - }, - - selectAll: function () { - this.findLis(); - this.$element.find('option:enabled').not('[data-divider], [data-hidden]').prop('selected', true); - this.$lis.not('.divider, .dropdown-header, .disabled, .hidden').addClass('selected'); - this.render(false); - }, - - deselectAll: function () { - this.findLis(); - this.$element.find('option:enabled').not('[data-divider], [data-hidden]').prop('selected', false); - this.$lis.not('.divider, .dropdown-header, .disabled, .hidden').removeClass('selected'); - this.render(false); - }, - - keydown: function (e) { - var $this = $(this), - $parent = $this.is('input') ? $this.parent().parent() : $this.parent(), - $items, - that = $parent.data('this'), - index, - next, - first, - last, - prev, - nextPrev, - prevIndex, - isActive, - selector = ':not(.disabled, .hidden, .dropdown-header, .divider)', - keyCodeMap = { - 32: ' ', - 48: '0', - 49: '1', - 50: '2', - 51: '3', - 52: '4', - 53: '5', - 54: '6', - 55: '7', - 56: '8', - 57: '9', - 59: ';', - 65: 'a', - 66: 'b', - 67: 'c', - 68: 'd', - 69: 'e', - 70: 'f', - 71: 'g', - 72: 'h', - 73: 'i', - 74: 'j', - 75: 'k', - 76: 'l', - 77: 'm', - 78: 'n', - 79: 'o', - 80: 'p', - 81: 'q', - 82: 'r', - 83: 's', - 84: 't', - 85: 'u', - 86: 'v', - 87: 'w', - 88: 'x', - 89: 'y', - 90: 'z', - 96: '0', - 97: '1', - 98: '2', - 99: '3', - 100: '4', - 101: '5', - 102: '6', - 103: '7', - 104: '8', - 105: '9' - }; - - if (that.options.liveSearch) $parent = $this.parent().parent(); - - if (that.options.container) $parent = that.$menu; - - $items = $('[role=menu] li a', $parent); - - isActive = that.$menu.parent().hasClass('open'); - - if (!isActive && (e.keyCode >= 48 && e.keyCode <= 57 || e.keyCode >= 65 && e.keyCode <= 90)) { - if (!that.options.container) { - that.setSize(); - that.$menu.parent().addClass('open'); - isActive = true; - } else { - that.$newElement.trigger('click'); - } - that.$searchbox.focus(); - } - - if (that.options.liveSearch) { - if (/(^9$|27)/.test(e.keyCode.toString(10)) && isActive && that.$menu.find('.active').length === 0) { - e.preventDefault(); - that.$menu.parent().removeClass('open'); - if (that.options.container) that.$newElement.removeClass('open'); - that.$button.focus(); - } - // $items contains li elements when liveSearch is enabled - $items = $('[role=menu] li:not(.disabled, .hidden, .dropdown-header, .divider)', $parent); - if (!$this.val() && !/(38|40)/.test(e.keyCode.toString(10))) { - if ($items.filter('.active').length === 0) { - $items = that.$newElement.find('li'); - if (that.options.liveSearchNormalize) { - $items = $items.filter(':a' + that._searchStyle() + '(' + normalizeToBase(keyCodeMap[e.keyCode]) + ')'); - } else { - $items = $items.filter(':' + that._searchStyle() + '(' + keyCodeMap[e.keyCode] + ')'); - } - } - } - } - - if (!$items.length) return; - - if (/(38|40)/.test(e.keyCode.toString(10))) { - index = $items.index($items.filter(':focus')); - first = $items.parent(selector).first().data('originalIndex'); - last = $items.parent(selector).last().data('originalIndex'); - next = $items.eq(index).parent().nextAll(selector).eq(0).data('originalIndex'); - prev = $items.eq(index).parent().prevAll(selector).eq(0).data('originalIndex'); - nextPrev = $items.eq(next).parent().prevAll(selector).eq(0).data('originalIndex'); - - if (that.options.liveSearch) { - $items.each(function (i) { - if (!$(this).hasClass('disabled')) { - $(this).data('index', i); - } - }); - index = $items.index($items.filter('.active')); - first = $items.first().data('index'); - last = $items.last().data('index'); - next = $items.eq(index).nextAll().eq(0).data('index'); - prev = $items.eq(index).prevAll().eq(0).data('index'); - nextPrev = $items.eq(next).prevAll().eq(0).data('index'); - } - - prevIndex = $this.data('prevIndex'); - - if (e.keyCode == 38) { - if (that.options.liveSearch) index -= 1; - if (index != nextPrev && index > prev) index = prev; - if (index < first) index = first; - if (index == prevIndex) index = last; - } else if (e.keyCode == 40) { - if (that.options.liveSearch) index += 1; - if (index == -1) index = 0; - if (index != nextPrev && index < next) index = next; - if (index > last) index = last; - if (index == prevIndex) index = first; - } - - $this.data('prevIndex', index); - - if (!that.options.liveSearch) { - $items.eq(index).focus(); - } else { - e.preventDefault(); - if (!$this.hasClass('dropdown-toggle')) { - $items.removeClass('active').eq(index).addClass('active').children('a').focus(); - $this.focus(); - } - } - - } else if (!$this.is('input')) { - var keyIndex = [], - count, - prevKey; - - $items.each(function () { - if (!$(this).parent().hasClass('disabled')) { - if ($.trim($(this).text().toLowerCase()).substring(0, 1) == keyCodeMap[e.keyCode]) { - keyIndex.push($(this).parent().index()); - } - } - }); - - count = $(document).data('keycount'); - count++; - $(document).data('keycount', count); - - prevKey = $.trim($(':focus').text().toLowerCase()).substring(0, 1); - - if (prevKey != keyCodeMap[e.keyCode]) { - count = 1; - $(document).data('keycount', count); - } else if (count >= keyIndex.length) { - $(document).data('keycount', 0); - if (count > keyIndex.length) count = 1; - } - - $items.eq(keyIndex[count - 1]).focus(); - } - - // Select focused option if "Enter", "Spacebar" or "Tab" (when selectOnTab is true) are pressed inside the menu. - if ((/(13|32)/.test(e.keyCode.toString(10)) || (/(^9$)/.test(e.keyCode.toString(10)) && that.options.selectOnTab)) && isActive) { - if (!/(32)/.test(e.keyCode.toString(10))) e.preventDefault(); - if (!that.options.liveSearch) { - var elem = $(':focus'); - elem.click(); - // Bring back focus for multiselects - elem.focus(); - // Prevent screen from scrolling if the user hit the spacebar - e.preventDefault(); - // Fixes spacebar selection of dropdown items in FF & IE - $(document).data('spaceSelect', true); - } else if (!/(32)/.test(e.keyCode.toString(10))) { - that.$menu.find('.active a').click(); - $this.focus(); - } - $(document).data('keycount', 0); - } - - if ((/(^9$|27)/.test(e.keyCode.toString(10)) && isActive && (that.multiple || that.options.liveSearch)) || (/(27)/.test(e.keyCode.toString(10)) && !isActive)) { - that.$menu.parent().removeClass('open'); - if (that.options.container) that.$newElement.removeClass('open'); - that.$button.focus(); - } - }, - - mobile: function () { - this.$element.addClass('mobile-device').appendTo(this.$newElement); - if (this.options.container) this.$menu.hide(); - }, - - refresh: function () { - this.$lis = null; - this.liObj = {}; - this.reloadLi(); - this.render(); - this.checkDisabled(); - this.liHeight(true); - this.setStyle(); - this.setWidth(); - if (this.$lis) this.$searchbox.trigger('propertychange'); - - this.$element.trigger('refreshed.bs.select'); - }, - - hide: function () { - this.$newElement.hide(); - }, - - show: function () { - this.$newElement.show(); - }, - - remove: function () { - this.$newElement.remove(); - this.$element.remove(); - } - }; - - // SELECTPICKER PLUGIN DEFINITION - // ============================== - function Plugin(option, event) { - // get the args of the outer function.. - var args = arguments; - // The arguments of the function are explicitly re-defined from the argument list, because the shift causes them - // to get lost/corrupted in android 2.3 and IE9 #715 #775 - var _option = option, - _event = event; - [].shift.apply(args); - - var value; - var chain = this.each(function () { - var $this = $(this); - if ($this.is('select')) { - var data = $this.data('selectpicker'), - options = typeof _option == 'object' && _option; - - if (!data) { - var config = $.extend({}, Selectpicker.DEFAULTS, $.fn.selectpicker.defaults || {}, $this.data(), options); - $this.data('selectpicker', (data = new Selectpicker(this, config, _event))); - } else if (options) { - for (var i in options) { - if (options.hasOwnProperty(i)) { - data.options[i] = options[i]; - } - } - } - - if (typeof _option == 'string') { - if (data[_option] instanceof Function) { - value = data[_option].apply(data, args); - } else { - value = data.options[_option]; - } - } - } - }); - - if (typeof value !== 'undefined') { - //noinspection JSUnusedAssignment - return value; - } else { - return chain; - } - } - - var old = $.fn.selectpicker; - $.fn.selectpicker = Plugin; - $.fn.selectpicker.Constructor = Selectpicker; - - // SELECTPICKER NO CONFLICT - // ======================== - $.fn.selectpicker.noConflict = function () { - $.fn.selectpicker = old; - return this; - }; - - $(document) - .data('keycount', 0) - .on('keydown', '.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role="menu"], .bs-searchbox input', Selectpicker.prototype.keydown) - .on('focusin.modal', '.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role="menu"], .bs-searchbox input', function (e) { - e.stopPropagation(); - }); - - // SELECTPICKER DATA-API - // ===================== - $(window).on('load.bs.select.data-api', function () { - $('.selectpicker').each(function () { - var $selectpicker = $(this); - Plugin.call($selectpicker, $selectpicker.data()); - }) - }); -})(jQuery); diff --git a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-bg_BG.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-bg_BG.js deleted file mode 100644 index 4d99b60b3..000000000 --- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-bg_BG.js +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Translated default messages for bootstrap-select. - * Locale: BG (Bulgaria) - * Region: BG (Bulgaria) - */ -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: 'Нищо избрано', - noneResultsText: 'Няма резултат за {0}', - countSelectedText: function (numSelected, numTotal) { - return (numSelected == 1) ? "{0} избран елемент" : "{0} избрани елемента"; - }, - maxOptionsText: function (numAll, numGroup) { - return [ - (numAll == 1) ? 'Лимита е достигнат ({n} елемент максимум)' : 'Лимита е достигнат ({n} елемента максимум)', - (numGroup == 1) ? 'Груповия лимит е достигнат ({n} елемент максимум)' : 'Груповия лимит е достигнат ({n} елемента максимум)' - ]; - }, - selectAllText: 'Избери всички', - deselectAllText: 'Размаркирай всички', - multipleSeparator: ', ' - }; -})(jQuery); diff --git a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-cs_CZ.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-cs_CZ.js deleted file mode 100644 index d45727954..000000000 --- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-cs_CZ.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Translated default messages for bootstrap-select. - * Locale: CS - * Region: CZ (Czech Republic) - */ -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: 'Nic není vybráno', - noneResultsText: 'Žádné výsledky {0}', - countSelectedText: 'Označeno {0} z {1}', - maxOptionsText: ['Limit překročen ({n} {var} max)', 'Limit skupiny překročen ({n} {var} max)', ['položek', 'položka']], - multipleSeparator: ', ' - }; -})(jQuery); diff --git a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-da_DK.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-da_DK.js deleted file mode 100644 index 5376021ab..000000000 --- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-da_DK.js +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Translated default messages for bootstrap-select. - * Locale: DA (Danish) - * Region: DK (Denmark) - */ -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: 'Intet valgt', - noneResultsText: 'Ingen resultater fundet {0}', - countSelectedText: function (numSelected, numTotal) { - return (numSelected == 1) ? "{0} valgt" : "{0} valgt"; - }, - maxOptionsText: function (numAll, numGroup) { - return [ - (numAll == 1) ? 'Begrænsning nået (max {n} valgt)' : 'Begrænsning nået (max {n} valgte)', - (numGroup == 1) ? 'Gruppe-begrænsning nået (max {n} valgt)' : 'Gruppe-begrænsning nået (max {n} valgte)' - ]; - }, - selectAllText: 'Markér alle', - deselectAllText: 'Afmarkér alle', - multipleSeparator: ', ' - }; -})(jQuery); diff --git a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-de_DE.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-de_DE.js deleted file mode 100644 index d4d5b0990..000000000 --- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-de_DE.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Translated default messages for bootstrap-select. - * Locale: DE (German, deutsch) - * Region: DE (Germany, Deutschland) - */ -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: 'Bitte wählen...', - noneResultsText: 'Keine Ergebnisse für {0}', - countSelectedText: '{0} von {1} ausgewählt', - maxOptionsText: ['Limit erreicht ({n} {var} max.)', 'Gruppen-Limit erreicht ({n} {var} max.)', ['Eintrag', 'Einträge']], - multipleSeparator: ', ' - }; -})(jQuery); diff --git a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-en_US.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-en_US.js deleted file mode 100644 index acb90352d..000000000 --- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-en_US.js +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Translated default messages for bootstrap-select. - * Locale: EN (English) - * Region: US (United States) - */ -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: 'Nothing selected', - noneResultsText: 'No results match {0}', - countSelectedText: function (numSelected, numTotal) { - return (numSelected == 1) ? "{0} item selected" : "{0} items selected"; - }, - maxOptionsText: function (numAll, numGroup) { - return [ - (numAll == 1) ? 'Limit reached ({n} item max)' : 'Limit reached ({n} items max)', - (numGroup == 1) ? 'Group limit reached ({n} item max)' : 'Group limit reached ({n} items max)' - ]; - }, - selectAllText: 'Select All', - deselectAllText: 'Deselect All', - multipleSeparator: ', ' - }; -})(jQuery); diff --git a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-es_CL.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-es_CL.js deleted file mode 100644 index ed17a5f4a..000000000 --- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-es_CL.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Translated default messages for bootstrap-select. - * Locale: ES (Spanish) - * Region: CL (Chile) - */ -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: 'No hay selección', - noneResultsText: 'No hay resultados {0}', - countSelectedText: 'Seleccionados {0} de {1}', - maxOptionsText: ['Límite alcanzado ({n} {var} max)', 'Límite del grupo alcanzado({n} {var} max)', ['elementos', 'element']], - multipleSeparator: ', ' - }; -})(jQuery); diff --git a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-eu.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-eu.js deleted file mode 100644 index 037c7d7c0..000000000 --- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-eu.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Translated default messages for bootstrap-select. - * Locale: EU (Basque) - * Region: - */ -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: 'Hautapenik ez', - noneResultsText: 'Emaitzarik ez {0}', - countSelectedText: '{1}(e)tik {0} hautatuta', - maxOptionsText: ['Mugara iritsita ({n} {var} gehienez)', 'Taldearen mugara iritsita ({n} {var} gehienez)', ['elementu', 'elementu']], - multipleSeparator: ', ' - }; -})(jQuery); diff --git a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-fa_IR.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-fa_IR.js deleted file mode 100644 index 00b179868..000000000 --- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-fa_IR.js +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Translated default messages for bootstrap-select. - * Locale: FA (Farsi) - * Region: IR (Iran) - */ -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: 'چیزی انتخاب نشده است', - noneResultsText: 'هیج مشابهی برای {0} پیدا نشد', - countSelectedText: "{0} از {1} مورد انتخاب شده", - maxOptionsText: ['بیشتر ممکن نیست {حداکثر {n} عدد}', 'بیشتر ممکن نیست {حداکثر {n} عدد}'], - selectAllText: 'انتخاب همه', - deselectAllText: 'انتخاب هیچ کدام', - multipleSeparator: ', ' - }; -})(jQuery); diff --git a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-fr_FR.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-fr_FR.js deleted file mode 100644 index 133320fa3..000000000 --- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-fr_FR.js +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Translated default messages for bootstrap-select. - * Locale: FR (French; Français) - * Region: FR (France) - */ -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: 'Aucune sélection', - noneResultsText: 'Aucun résultat pour {0}', - countSelectedText: function (numSelected, numTotal) { - return (numSelected > 1) ? "{0} éléments sélectionnés" : "{0} élément sélectionné"; - }, - maxOptionsText: function (numAll, numGroup) { - return [ - (numAll > 1) ? 'Limite atteinte ({n} éléments max)' : 'Limite atteinte ({n} élément max)', - (numGroup > 1) ? 'Limite du groupe atteinte ({n} éléments max)' : 'Limite du groupe atteinte ({n} élément max)' - ]; - }, - multipleSeparator: ', ' - }; -})(jQuery); diff --git a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-hu_HU.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-hu_HU.js deleted file mode 100644 index 5f5a56176..000000000 --- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-hu_HU.js +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Translated default messages for bootstrap-select. - * Locale: HU (Hungarian) - * Region: HU (Hungary) - */ -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: 'Válasszon!', - noneResultsText: 'Nincs találat {0}', - countSelectedText: function (numSelected, numTotal) { - return '{n} elem kiválasztva'; - }, - maxOptionsText: function (numAll, numGroup) { - return [ - 'Legfeljebb {n} elem választható', - 'A csoportban legfeljebb {n} elem választható' - ]; - }, - selectAllText: 'Mind', - deselectAllText: 'Egyik sem', - multipleSeparator: ', ' - }; -})(jQuery); diff --git a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-it_IT.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-it_IT.js deleted file mode 100644 index 3cf2e13f6..000000000 --- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-it_IT.js +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Translated default messages for bootstrap-select. - * Locale: IT (Italian; italiano) - * Region: IT (Italy; Italia) - * Author: Michele Beltrame - */ -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: 'Nessuna selezione', - noneResultsText: 'Nessun risultato per {0}', - countSelectedText: 'Selezionati {0} di {1}', - maxOptionsText: ['Limite raggiunto ({n} {var} max)', 'Limite del gruppo raggiunto ({n} {var} max)', ['elementi', 'elemento']], - multipleSeparator: ', ' - }; -})(jQuery); diff --git a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-ko_KR.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-ko_KR.js deleted file mode 100644 index 9583cc561..000000000 --- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-ko_KR.js +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Translated default messages for bootstrap-select. - * Locale: KO (Korean) - * Region: KR (South Korea) - */ -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: '항목을 선택해주세요', - noneResultsText: '{0} 검색 결과가 없습니다', - countSelectedText: function (numSelected, numTotal) { - return "{0}개를 선택하였습니다"; - }, - maxOptionsText: function (numAll, numGroup) { - return [ - '{n}개까지 선택 가능합니다', - '해당 그룹은 {n}개까지 선택 가능합니다' - ]; - }, - selectAllText: '전체선택', - deselectAllText: '전체해제', - multipleSeparator: ', ' - }; -})(jQuery); diff --git a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-nl_NL.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-nl_NL.js deleted file mode 100644 index 96b857a43..000000000 --- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-nl_NL.js +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Translated default messages for bootstrap-select. - * Locale: NL (Dutch; Nederlands) - * Region: NL (Europe) - * Author: Daan Rosbergen (Badmuts) - */ -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: 'Niets geselecteerd', - noneResultsText: 'Geen resultaten gevonden voor {0}', - countSelectedText: '{0} van {1} geselecteerd', - maxOptionsText: ['Limiet bereikt ({n} {var} max)', 'Groep limiet bereikt ({n} {var} max)', ['items', 'item']], - multipleSeparator: ', ' - }; -})(jQuery); diff --git a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-pl_PL.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-pl_PL.js deleted file mode 100644 index e7eccaf9a..000000000 --- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-pl_PL.js +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Translated default messages for bootstrap-select. - * Locale: PL (Polish) - * Region: EU (Europe) - */ -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: 'Nic nie zaznaczono', - noneResultsText: 'Brak wyników wyszukiwania {0}', - countSelectedText: 'Zaznaczono {0} z {1}', - maxOptionsText: ['Osiągnięto limit ({n} {var} max)', 'Limit grupy osiągnięty ({n} {var} max)', ['elementy', 'element']], - selectAll: 'Zaznacz wszystkie', - deselectAll: 'Odznacz wszystkie', - multipleSeparator: ', ' - }; -})(jQuery); diff --git a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-pt_BR.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-pt_BR.js deleted file mode 100644 index 610871b1e..000000000 --- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-pt_BR.js +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Translated default messages for bootstrap-select. - * Locale: PT (Portuguese; português) - * Region: BR (Brazil; Brasil) - * Author: Rodrigo de Avila - */ -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: 'Nada selecionado', - noneResultsText: 'Nada encontrado contendo {0}', - countSelectedText: 'Selecionado {0} de {1}', - maxOptionsText: ['Limite excedido (máx. {n} {var})', 'Limite do grupo excedido (máx. {n} {var})', ['itens', 'item']], - multipleSeparator: ', ' - }; -})(jQuery); diff --git a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-pt_PT.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-pt_PT.js deleted file mode 100644 index 2d07e87c2..000000000 --- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-pt_PT.js +++ /dev/null @@ -1,15 +0,0 @@ -/* -* Translated default messages for bootstrap-select. -* Locale: PT (Portuguese; português) -* Region: PT (Portugal; Portugal) -* Author: Burnspirit -*/ -(function ($) { -$.fn.selectpicker.defaults = { -noneSelectedText: 'Nenhum seleccionado', -noneResultsText: 'Sem resultados contendo {0}', -countSelectedText: 'Selecionado {0} de {1}', -maxOptionsText: ['Limite ultrapassado (máx. {n} {var})', 'Limite de seleções ultrapassado (máx. {n} {var})', ['itens', 'item']], -multipleSeparator: ', ' -}; -})(jQuery); diff --git a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-ro_RO.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-ro_RO.js deleted file mode 100644 index c6ddf6f6a..000000000 --- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-ro_RO.js +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Translated default messages for bootstrap-select. - * Locale: RO (Romanian) - * Region: RO (Romania) - * Alex Florea - */ -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: 'Nu a fost selectat nimic', - noneResultsText: 'Nu exista niciun rezultat {0}', - countSelectedText: '{0} din {1} selectat(e)', - maxOptionsText: ['Limita a fost atinsa ({n} {var} max)', 'Limita de grup a fost atinsa ({n} {var} max)', ['iteme', 'item']], - multipleSeparator: ', ' - }; -})(jQuery); diff --git a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-ru_RU.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-ru_RU.js deleted file mode 100644 index c354f8c98..000000000 --- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-ru_RU.js +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Translated default messages for bootstrap-select. - * Locale: RU (Russian; Русский) - * Region: RU (Russian Federation) - */ -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: 'Ничего не выбрано', - noneResultsText: 'Совпадений не найдено {0}', - countSelectedText: 'Выбрано {0} из {1}', - maxOptionsText: ['Достигнут предел ({n} {var} максимум)', 'Достигнут предел в группе ({n} {var} максимум)', ['items', 'item']], - doneButtonText: 'Закрыть', - multipleSeparator: ', ' - }; -})(jQuery); diff --git a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-sk_SK.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-sk_SK.js deleted file mode 100644 index e96762d7b..000000000 --- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-sk_SK.js +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Translated default messages for bootstrap-select. - * Locale: SK - * Region: SK (Slovak Republic) - */ -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: 'Vyberte zo zoznamu', - noneResultsText: 'Pre výraz {0} neboli nájdené žiadne výsledky', - countSelectedText: 'Vybrané {0} z {1}', - maxOptionsText: ['Limit prekročený ({n} {var} max)', 'Limit skupiny prekročený ({n} {var} max)', ['položiek', 'položka']], - selectAllText: 'Vybrať všetky', - deselectAllText: 'Zrušiť výber', - multipleSeparator: ', ' - }; -})(jQuery); diff --git a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-sl_SI.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-sl_SI.js deleted file mode 100644 index a328c8c17..000000000 --- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-sl_SI.js +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Translated default messages for bootstrap-select. - * Locale: SL (Slovenian) - * Region: SI (Slovenia) - */ -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: 'Nič izbranega', - noneResultsText: 'Ni zadetkov za {0}', - countSelectedText: function (numSelected, numTotal) { - "Število izbranih: {0}"; - }, - maxOptionsText: function (numAll, numGroup) { - return [ - 'Omejitev dosežena (max. izbranih: {n})', - 'Omejitev skupine dosežena (max. izbranih: {n})' - ]; - }, - selectAllText: 'Izberi vse', - deselectAllText: 'Počisti izbor', - multipleSeparator: ', ' - }; -})(jQuery); diff --git a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-sv_SE.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-sv_SE.js deleted file mode 100644 index 89128e947..000000000 --- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-sv_SE.js +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Translated default messages for bootstrap-select. - * Locale: SV (Swedish) - * Region: SE (Sweden) - */ -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: 'Inget valt', - noneResultsText: 'Inget sökresultat matchar {0}', - countSelectedText: function (numSelected, numTotal) { - return (numSelected === 1) ? "{0} alternativ valt" : "{0} alternativ valda"; - }, - maxOptionsText: function (numAll, numGroup) { - return [ - 'Gräns uppnåd (max {n} alternativ)', - 'Gräns uppnåd (max {n} gruppalternativ)' - ]; - }, - selectAllText: 'Markera alla', - deselectAllText: 'Avmarkera alla', - multipleSeparator: ', ' - }; -})(jQuery); diff --git a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-tr_TR.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-tr_TR.js deleted file mode 100644 index fe43937d1..000000000 --- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-tr_TR.js +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Translated default messages for bootstrap-select. - * Locale: TR (Turkey) - * Region: TR (Europe) - * Author: Serhan Güney - */ -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: 'Hiçbiri seçilmedi', - noneResultsText: 'Hiçbir sonuç bulunamadı {0}', - countSelectedText: function (numSelected, numTotal) { - return (numSelected == 1) ? "{0} öğe seçildi" : "{0} öğe seçildi"; - }, - maxOptionsText: function (numAll, numGroup) { - return [ - (numAll == 1) ? 'Limit aşıldı (maksimum {n} sayıda öğe )' : 'Limit aşıldı (maksimum {n} sayıda öğe)', - (numGroup == 1) ? 'Grup limiti aşıldı (maksimum {n} sayıda öğe)' : 'Grup limiti aşıldı (maksimum {n} sayıda öğe)' - ]; - }, - selectAllText: 'Tümünü Seç', - deselectAllText: 'Seçiniz', - multipleSeparator: ', ' - }; -})(jQuery); diff --git a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-ua_UA.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-ua_UA.js deleted file mode 100644 index e1d395866..000000000 --- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-ua_UA.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Translated default messages for bootstrap-select. - * Locale: UA (Ukrainian; Українська) - * Region: UA (Ukraine) - */ -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: 'Нічого не вибрано', - noneResultsText: 'Збігів не знайдено {0}', - countSelectedText: 'Вибрано {0} із {1}', - maxOptionsText: ['Досягнута межа ({n} {var} максимум)', 'Досягнута межа в групі ({n} {var} максимум)', ['items', 'item']], - multipleSeparator: ', ' - }; -})(jQuery); diff --git a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-zh_CN.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-zh_CN.js deleted file mode 100644 index ad1c13293..000000000 --- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-zh_CN.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Translated default messages for bootstrap-select. - * Locale: ZH (Chinese) - * Region: CN (China) - */ -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: '没有选中任何项', - noneResultsText: '没有找到匹配项', - countSelectedText: '选中{1}中的{0}项', - maxOptionsText: ['超出限制 (最多选择{n}项)', '组选择超出限制(最多选择{n}组)'], - multipleSeparator: ', ' - }; -})(jQuery); diff --git a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-zh_TW.js b/modoboa/bower_components/bootstrap-select/js/i18n/defaults-zh_TW.js deleted file mode 100644 index c05add334..000000000 --- a/modoboa/bower_components/bootstrap-select/js/i18n/defaults-zh_TW.js +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Translated default messages for bootstrap-select. - * Locale: ZH (Chinese) - * Region: TW (Taiwan) - */ -(function ($) { - $.fn.selectpicker.defaults = { - noneSelectedText: '沒有選取任何項目', - noneResultsText: '沒有找到符合的結果', - countSelectedText: '已經選取{0}個項目', - maxOptionsText: ['超過限制 (最多選擇{n}項)', '超過限制(最多選擇{n}組)'], - selectAllText: '選取全部', - deselectAllText: '全部取消', - multipleSeparator: ', ' - }; -})(jQuery); diff --git a/modoboa/bower_components/bootstrap-select/less/bootstrap-select.less b/modoboa/bower_components/bootstrap-select/less/bootstrap-select.less deleted file mode 100644 index 13808c945..000000000 --- a/modoboa/bower_components/bootstrap-select/less/bootstrap-select.less +++ /dev/null @@ -1,332 +0,0 @@ -@import "variables"; - -// Mixins -.cursor-disabled() { - cursor: not-allowed; -} - -// Rules -.bootstrap-select { - width: 220px \0; /*IE9 and below*/ - - // The selectpicker button - > .dropdown-toggle { - width: 100%; - padding-right: 25px; - } - - // Error display - .has-error & .dropdown-toggle, - .error & .dropdown-toggle { - border-color: @color-red-error; - } - - &.fit-width { - width: auto !important; - } - - &:not([class*="col-"]):not([class*="form-control"]):not(.input-group-btn) { - width: @width-default; - } - - .dropdown-toggle:focus { - outline: thin dotted #333333 !important; - outline: 5px auto -webkit-focus-ring-color !important; - outline-offset: -2px; - } -} - -.bootstrap-select.form-control { - margin-bottom: 0; - padding: 0; - border: none; - - &:not([class*="col-"]) { - width: 100%; - } - - &.input-group-btn { - z-index: auto; - } -} - -// The selectpicker components -.bootstrap-select.btn-group { - &:not(.input-group-btn), - &[class*="col-"] { - float: none; - display: inline-block; - margin-left: 0; - } - - // Forces the pull to the right, if necessary - &, - &[class*="col-"], - .row &[class*="col-"] { - &.dropdown-menu-right { - float: right; - } - } - - .form-inline &, - .form-horizontal &, - .form-group & { - margin-bottom: 0; - } - - .form-group-lg &.form-control, - .form-group-sm &.form-control { - padding: 0; - } - - // Set the width of the live search (and any other form control within an inline form) - // see https://github.com/silviomoreto/bootstrap-select/issues/685 - .form-inline & .form-control { - width: 100%; - } - - &.disabled, - > .disabled { - .cursor-disabled(); - - &:focus { - outline: none !important; - } - } - - // The selectpicker button - .dropdown-toggle { - .filter-option { - display: inline-block; - overflow: hidden; - width: 100%; - text-align: left; - } - - .caret { - position: absolute; - top: 50%; - right: 12px; - margin-top: -2px; - vertical-align: middle; - } - } - - &[class*="col-"] .dropdown-toggle { - width: 100%; - } - - // The selectpicker dropdown - .dropdown-menu { - min-width: 100%; - z-index: @zindex-select-dropdown; - box-sizing: border-box; - - &.inner { - position: static; - float: none; - border: 0; - padding: 0; - margin: 0; - border-radius: 0; - box-shadow: none; - } - - li { - position: relative; - - &.active small { - color: #fff; - } - - &.disabled a { - .cursor-disabled(); - } - - a { - cursor: pointer; - - &.opt { - position: relative; - padding-left: 2.25em; - } - - span.check-mark { - display: none; - } - - span.text { - display: inline-block; - } - } - - small { - padding-left: 0.5em; - } - } - - .notify { - position: absolute; - bottom: 5px; - width: 96%; - margin: 0 2%; - min-height: 26px; - padding: 3px 5px; - background: rgb(245, 245, 245); - border: 1px solid rgb(227, 227, 227); - box-shadow: inset 0 1px 1px fade(rgb(0, 0, 0), 5%); - pointer-events: none; - opacity: 0.9; - box-sizing: border-box; - } - } - - .no-results { - padding: 3px; - background: #f5f5f5; - margin: 0 5px; - white-space: nowrap; - } - - &.fit-width .dropdown-toggle { - .filter-option { - position: static; - } - - .caret { - position: static; - top: auto; - margin-top: -1px; - } - } - - &.show-tick .dropdown-menu li { - &.selected a span.check-mark { - position: absolute; - display: inline-block; - right: 15px; - margin-top: 5px; - } - - a span.text { - margin-right: 34px; - } - } -} - -.bootstrap-select.show-menu-arrow { - &.open > .dropdown-toggle { - z-index: (@zindex-select-dropdown + 1); - } - - .dropdown-toggle { - &:before { - content: ''; - border-left: 7px solid transparent; - border-right: 7px solid transparent; - border-bottom: 7px solid @color-grey-arrow; - position: absolute; - bottom: -4px; - left: 9px; - display: none; - } - - &:after { - content: ''; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid white; - position: absolute; - bottom: -4px; - left: 10px; - display: none; - } - } - - &.dropup .dropdown-toggle { - &:before { - bottom: auto; - top: -3px; - border-top: 7px solid @color-grey-arrow; - border-bottom: 0; - } - - &:after { - bottom: auto; - top: -3px; - border-top: 6px solid white; - border-bottom: 0; - } - } - - &.pull-right .dropdown-toggle { - &:before { - right: 12px; - left: auto; - } - - &:after { - right: 13px; - left: auto; - } - } - - &.open > .dropdown-toggle { - &:before, - &:after { - display: block; - } - } -} - -.bs-searchbox, -.bs-actionsbox, -.bs-donebutton { - padding: 4px 8px; -} - -.bs-actionsbox { - float: left; - width: 100%; - box-sizing: border-box; - - & .btn-group button { - width: 50%; - } -} - -.bs-donebutton { - float: left; - width: 100%; - box-sizing: border-box; - - & .btn-group button { - width: 100%; - } -} - -.bs-searchbox { - & + .bs-actionsbox { - padding: 0 8px 4px; - } - - & .form-control { - margin-bottom: 0; - width: 100%; - } -} - -select.bs-select-hidden, -select.selectpicker { - display: none !important; -} - -select.mobile-device { - position: absolute !important; - top: 0; - left: 0; - display: block !important; - width: 100%; - height: 100% !important; - opacity: 0; -} diff --git a/modoboa/bower_components/bootstrap-select/less/variables.less b/modoboa/bower_components/bootstrap-select/less/variables.less deleted file mode 100644 index c6deaa321..000000000 --- a/modoboa/bower_components/bootstrap-select/less/variables.less +++ /dev/null @@ -1,6 +0,0 @@ -@color-red-error: rgb(185, 74, 72); -@color-grey-arrow: rgba(204, 204, 204, 0.2); - -@width-default: 220px; // 3 960px-grid columns - -@zindex-select-dropdown: 1035; // must be lower than a modal background (1040) but higher than the fixed navbar (1030) diff --git a/modoboa/bower_components/microplugin/.bower.json b/modoboa/bower_components/microplugin/.bower.json new file mode 100644 index 000000000..6952e931e --- /dev/null +++ b/modoboa/bower_components/microplugin/.bower.json @@ -0,0 +1,38 @@ +{ + "name": "microplugin", + "keywords": [ + "extensibility", + "plugins", + "architecture", + "require", + "dependencies" + ], + "description": "A lightweight plugin / dependency system for javascript libraries.", + "version": "0.0.3", + "license": "Apache License, Version 2.0", + "readmeFilename": "README.md", + "repository": { + "type": "git", + "url": "git://github.com/brianreavis/microplugin.js.git" + }, + "main": [ + "src/microplugin.js" + ], + "ignore": [ + "Makefile", + "test", + ".travis.yml", + ".npmignore.yml" + ], + "dependencies": {}, + "homepage": "https://github.com/brianreavis/microplugin.js", + "_release": "0.0.3", + "_resolution": { + "type": "version", + "tag": "v0.0.3", + "commit": "d8671e6cc769938648f8735610534427cdeeaf67" + }, + "_source": "https://github.com/brianreavis/microplugin.js.git", + "_target": "0.0.x", + "_originalSource": "microplugin" +} \ No newline at end of file diff --git a/modoboa/bower_components/microplugin/.gitignore b/modoboa/bower_components/microplugin/.gitignore new file mode 100644 index 000000000..fbe153a5d --- /dev/null +++ b/modoboa/bower_components/microplugin/.gitignore @@ -0,0 +1,2 @@ +.DS_store +node_modules \ No newline at end of file diff --git a/modoboa/bower_components/microplugin/.npmignore b/modoboa/bower_components/microplugin/.npmignore new file mode 100644 index 000000000..46c03e5b2 --- /dev/null +++ b/modoboa/bower_components/microplugin/.npmignore @@ -0,0 +1,3 @@ +*.md +.git* +test/ \ No newline at end of file diff --git a/modoboa/bower_components/microplugin/README.md b/modoboa/bower_components/microplugin/README.md new file mode 100644 index 000000000..985ae454a --- /dev/null +++ b/modoboa/bower_components/microplugin/README.md @@ -0,0 +1,115 @@ +# microplugin.js +[![NPM version](https://badge.fury.io/js/microplugin.png)](http://badge.fury.io/js/microplugin) +[![Build Status](https://travis-ci.org/brianreavis/microplugin.js.png?branch=master)](https://travis-ci.org/brianreavis/microplugin.js) + +*Keep code modularized & extensible.* MicroPlugin is a lightweight drop-in plugin architecture for your JavaScript library. Plugins can [declare dependencies](#dependencies) to other plugins and can be [initialized with options](#loading-plugins) (in a variety of formats). It [AMD](http://en.wikipedia.org/wiki/Asynchronous_module_definition)-compatible and it works identically in Node.js and in a browser. + +```sh +$ npm install microplugin +$ bower install microplugin +``` + +## Integration + +Using the provided mixin, extend your function with the [API](#mixin-methods) for declaring and loading plugins: + +```js +var TextEditor = function(options) { + this.initializePlugins(options.plugins); +}; + +MicroPlugin.mixin(TextEditor); +``` + +That's it for integration! Now you can selectively load the plugins on an instance-by-instance basis. + +```js +var editor = new TextEditor({ + plugins: ['links','images'] +}); +``` + +### Loading Plugins + +The [`initializePlugins()`](#prototypeinitializepluginsplugins) method sets up the plugin system and loads a list of plugins (with options). It accepts the list in three styles, depending on your preference. + +#### List (no options) +```js +["plugin_a","plugin_b","plugin_c"] +``` + +#### List (with options) +```js +[ + {name: "plugin_a", options: { /* ... */ }}, + {name: "plugin_b", options: { /* ... */ }}, + {name: "plugin_c", options: { /* ... */ }} +] +``` + +#### Hash (with options) +```js +{ + "plugin_a": { /* ... */ }, + "plugin_b": { /* ... */ }, + "plugin_c": { /* ... */ } +} +``` + +## Plugin Design + +Plugins aren't extravagant—they are barebones by design. A plugin is simply a function that gets called when an instance of your object is being constructed. Within that function, you can manually override methods, set up event listeners, etc. The `this` context will be the instance of your object. + +### Defining Plugins + +```js +MyLibrary.define("math", function(options) { + // You can return values which will be available to other plugins + // when they load the plugin via "require()". Explained more in + // the next section. + return { + random : Math.random, + sqrt : Math.sqrt, + sin2 : function(t) { return Math.pow(Math.sin(t), 2); }, + cos2 : function(t) { return Math.pow(Math.sin(t), 2); } + }; +}); +``` + +#### Dependencies + +Plugins can declare dependencies to other plugins (and use any exports they provide) through the [`require`](#prototyperequirename) function. + +```js +MyLibrary.define("calculations", function(options) { + var math = this.require("math"); + var theta = math.random(); + var success = math.sqrt(math.sin2(theta) + math.cos2(theta)) === 1; + + alert("Does the law of sines work? " + success); +}); +``` + +## API Reference + +#### MicroPlugin.mixin(fn) +Sets up all methods on the function and its prototype for defining and loading plugins. + +### Mixin Methods + +#### define(name, fn) +Declares a new plugin with the specified name. + +#### [prototype].require(name) +Loads a plugin as a dependency and returns whatever it exports (if anything). + +#### [prototype].initializePlugins(plugins) +Initializes the plugin system and loads a list of plugins with the provided options. The "plugins" argument can be in a [variety of formats](#loading-plugins). + +## License + +Copyright © 2013 [Brian Reavis](http://twitter.com/brianreavis) & [Contributors](https://github.com/brianreavis/microplugin.js/graphs/contributors) + +Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at: http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. diff --git a/modoboa/bower_components/microplugin/bower.json b/modoboa/bower_components/microplugin/bower.json new file mode 100644 index 000000000..5ea782cdc --- /dev/null +++ b/modoboa/bower_components/microplugin/bower.json @@ -0,0 +1,22 @@ +{ + "name": "microplugin", + "keywords": ["extensibility","plugins","architecture","require","dependencies"], + "description": "A lightweight plugin / dependency system for javascript libraries.", + "version": "0.0.3", + "license": "Apache License, Version 2.0", + "readmeFilename": "README.md", + "repository": { + "type": "git", + "url": "git://github.com/brianreavis/microplugin.js.git" + }, + "main": [ + "src/microplugin.js" + ], + "ignore": [ + "Makefile", + "test", + ".travis.yml", + ".npmignore.yml" + ], + "dependencies": {} +} diff --git a/modoboa/bower_components/microplugin/package.json b/modoboa/bower_components/microplugin/package.json new file mode 100644 index 000000000..317d01fb2 --- /dev/null +++ b/modoboa/bower_components/microplugin/package.json @@ -0,0 +1,15 @@ +{ + "name": "microplugin", + "keywords": ["extensibility","plugins","architecture","require","dependencies"], + "description": "A lightweight plugin / dependency system for javascript libraries.", + "version": "0.0.3", + "author": "Brian Reavis ", + "main": "src/microplugin.js", + "repository": { + "type": "git", + "url": "git://github.com/brianreavis/microplugin.js.git" + }, + "dependencies": {}, + "devDependencies": {}, + "engines": {"node": "*"} +} diff --git a/modoboa/bower_components/microplugin/src/microplugin.js b/modoboa/bower_components/microplugin/src/microplugin.js new file mode 100644 index 000000000..0b53c50ce --- /dev/null +++ b/modoboa/bower_components/microplugin/src/microplugin.js @@ -0,0 +1,135 @@ +/** + * microplugin.js + * Copyright (c) 2013 Brian Reavis & contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this + * file except in compliance with the License. You may obtain a copy of the License at: + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF + * ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + * + * @author Brian Reavis + */ + +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + define(factory); + } else if (typeof exports === 'object') { + module.exports = factory(); + } else { + root.MicroPlugin = factory(); + } +}(this, function() { + var MicroPlugin = {}; + + MicroPlugin.mixin = function(Interface) { + Interface.plugins = {}; + + /** + * Initializes the listed plugins (with options). + * Acceptable formats: + * + * List (without options): + * ['a', 'b', 'c'] + * + * List (with options): + * [{'name': 'a', options: {}}, {'name': 'b', options: {}}] + * + * Hash (with options): + * {'a': { ... }, 'b': { ... }, 'c': { ... }} + * + * @param {mixed} plugins + */ + Interface.prototype.initializePlugins = function(plugins) { + var i, n, key; + var self = this; + var queue = []; + + self.plugins = { + names : [], + settings : {}, + requested : {}, + loaded : {} + }; + + if (utils.isArray(plugins)) { + for (i = 0, n = plugins.length; i < n; i++) { + if (typeof plugins[i] === 'string') { + queue.push(plugins[i]); + } else { + self.plugins.settings[plugins[i].name] = plugins[i].options; + queue.push(plugins[i].name); + } + } + } else if (plugins) { + for (key in plugins) { + if (plugins.hasOwnProperty(key)) { + self.plugins.settings[key] = plugins[key]; + queue.push(key); + } + } + } + + while (queue.length) { + self.require(queue.shift()); + } + }; + + Interface.prototype.loadPlugin = function(name) { + var self = this; + var plugins = self.plugins; + var plugin = Interface.plugins[name]; + + if (!Interface.plugins.hasOwnProperty(name)) { + throw new Error('Unable to find "' + name + '" plugin'); + } + + plugins.requested[name] = true; + plugins.loaded[name] = plugin.fn.apply(self, [self.plugins.settings[name] || {}]); + plugins.names.push(name); + }; + + /** + * Initializes a plugin. + * + * @param {string} name + */ + Interface.prototype.require = function(name) { + var self = this; + var plugins = self.plugins; + + if (!self.plugins.loaded.hasOwnProperty(name)) { + if (plugins.requested[name]) { + throw new Error('Plugin has circular dependency ("' + name + '")'); + } + self.loadPlugin(name); + } + + return plugins.loaded[name]; + }; + + /** + * Registers a plugin. + * + * @param {string} name + * @param {function} fn + */ + Interface.define = function(name, fn) { + Interface.plugins[name] = { + 'name' : name, + 'fn' : fn + }; + }; + }; + + var utils = { + isArray: Array.isArray || function(vArg) { + return Object.prototype.toString.call(vArg) === '[object Array]'; + } + }; + + return MicroPlugin; +})); \ No newline at end of file diff --git a/modoboa/bower_components/selectize/.bower.json b/modoboa/bower_components/selectize/.bower.json new file mode 100644 index 000000000..8e523cbe5 --- /dev/null +++ b/modoboa/bower_components/selectize/.bower.json @@ -0,0 +1,60 @@ +{ + "name": "selectize", + "keywords": [ + "select", + "ui", + "form", + "input", + "control", + "autocomplete", + "tagging", + "tag" + ], + "description": "Selectize is a jQuery-based custom UI control. Useful for tagging, contact lists, country selectors, etc.", + "license": "Apache License, Version 2.0", + "readmeFilename": "README.md", + "repository": { + "type": "git", + "url": "git://github.com/selectize/selectize.js.git" + }, + "main": [ + "dist/css/selectize.css", + "dist/js/selectize.js" + ], + "ignore": [ + "Makefile", + "Gruntfile.js", + "examples", + "node_modules", + "bower_components", + "docs", + "src", + "test", + ".travis.yml", + "testem.json", + "selectize.jquery.json", + "*.sh", + "package.json" + ], + "dependencies": { + "jquery": ">=1.7.0", + "sifter": "0.5.x", + "microplugin": "0.0.x" + }, + "devDependencies": { + "bootstrap2": "bootstrap#2", + "bootstrap3": "bootstrap#3.2" + } +} diff --git a/modoboa/bower_components/selectize/dist/css/selectize.bootstrap2.css b/modoboa/bower_components/selectize/dist/css/selectize.bootstrap2.css new file mode 100644 index 000000000..95cb1f041 --- /dev/null +++ b/modoboa/bower_components/selectize/dist/css/selectize.bootstrap2.css @@ -0,0 +1,494 @@ +/** + * selectize.bootstrap2.css (v0.12.4) - Bootstrap 2 Theme + * Copyright (c) 2013–2015 Brian Reavis & contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this + * file except in compliance with the License. You may obtain a copy of the License at: + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF + * ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + * + * @author Brian Reavis + */ +.selectize-control.plugin-drag_drop.multi > .selectize-input > div.ui-sortable-placeholder { + visibility: visible !important; + background: #f2f2f2 !important; + background: rgba(0, 0, 0, 0.06) !important; + border: 0 none !important; + -webkit-box-shadow: inset 0 0 12px 4px #ffffff; + box-shadow: inset 0 0 12px 4px #ffffff; +} +.selectize-control.plugin-drag_drop .ui-sortable-placeholder::after { + content: '!'; + visibility: hidden; +} +.selectize-control.plugin-drag_drop .ui-sortable-helper { + -webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); +} +.selectize-dropdown-header { + position: relative; + padding: 3px 10px; + border-bottom: 1px solid #d0d0d0; + background: #f8f8f8; + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} +.selectize-dropdown-header-close { + position: absolute; + right: 10px; + top: 50%; + color: #333333; + opacity: 0.4; + margin-top: -12px; + line-height: 20px; + font-size: 20px !important; +} +.selectize-dropdown-header-close:hover { + color: #000000; +} +.selectize-dropdown.plugin-optgroup_columns .optgroup { + border-right: 1px solid #f2f2f2; + border-top: 0 none; + float: left; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.selectize-dropdown.plugin-optgroup_columns .optgroup:last-child { + border-right: 0 none; +} +.selectize-dropdown.plugin-optgroup_columns .optgroup:before { + display: none; +} +.selectize-dropdown.plugin-optgroup_columns .optgroup-header { + border-top: 0 none; +} +.selectize-control.plugin-remove_button [data-value] { + position: relative; + padding-right: 24px !important; +} +.selectize-control.plugin-remove_button [data-value] .remove { + z-index: 1; + /* fixes ie bug (see #392) */ + position: absolute; + top: 0; + right: 0; + bottom: 0; + width: 17px; + text-align: center; + font-weight: bold; + font-size: 12px; + color: inherit; + text-decoration: none; + vertical-align: middle; + display: inline-block; + padding: 1px 0 0 0; + border-left: 1px solid #cccccc; + -webkit-border-radius: 0 2px 2px 0; + -moz-border-radius: 0 2px 2px 0; + border-radius: 0 2px 2px 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.selectize-control.plugin-remove_button [data-value] .remove:hover { + background: rgba(0, 0, 0, 0.05); +} +.selectize-control.plugin-remove_button [data-value].active .remove { + border-left-color: #0077b3; +} +.selectize-control.plugin-remove_button .disabled [data-value] .remove:hover { + background: none; +} +.selectize-control.plugin-remove_button .disabled [data-value] .remove { + border-left-color: #e0e0e0; +} +.selectize-control.plugin-remove_button .remove-single { + position: absolute; + right: 28px; + top: 6px; + font-size: 23px; +} +.selectize-control { + position: relative; +} +.selectize-dropdown, +.selectize-input, +.selectize-input input { + color: #333333; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 20px; + -webkit-font-smoothing: inherit; +} +.selectize-input, +.selectize-control.single .selectize-input.input-active { + background: #ffffff; + cursor: text; + display: inline-block; +} +.selectize-input { + border: 1px solid #d0d0d0; + padding: 7px 10px; + display: inline-block; + width: 100%; + overflow: hidden; + position: relative; + z-index: 1; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-box-shadow: none; + box-shadow: none; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.selectize-control.multi .selectize-input.has-items { + padding: 5px 10px 2px; +} +.selectize-input.full { + background-color: #ffffff; +} +.selectize-input.disabled, +.selectize-input.disabled * { + cursor: default !important; +} +.selectize-input.focus { + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15); +} +.selectize-input.dropdown-active { + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} +.selectize-input > * { + vertical-align: baseline; + display: -moz-inline-stack; + display: inline-block; + zoom: 1; + *display: inline; +} +.selectize-control.multi .selectize-input > div { + cursor: pointer; + margin: 0 3px 3px 0; + padding: 1px 3px; + background: #e6e6e6; + color: #333333; + border: 1px solid #cccccc; +} +.selectize-control.multi .selectize-input > div.active { + background: #0088cc; + color: #ffffff; + border: 1px solid #0077b3; +} +.selectize-control.multi .selectize-input.disabled > div, +.selectize-control.multi .selectize-input.disabled > div.active { + color: #474747; + background: #fafafa; + border: 1px solid #e0e0e0; +} +.selectize-input > input { + display: inline-block !important; + padding: 0 !important; + min-height: 0 !important; + max-height: none !important; + max-width: 100% !important; + margin: 0 !important; + text-indent: 0 !important; + border: 0 none !important; + background: none !important; + line-height: inherit !important; + -webkit-user-select: auto !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; +} +.selectize-input > input::-ms-clear { + display: none; +} +.selectize-input > input:focus { + outline: none !important; +} +.selectize-input::after { + content: ' '; + display: block; + clear: left; +} +.selectize-input.dropdown-active::before { + content: ' '; + display: block; + position: absolute; + background: #e5e5e5; + height: 1px; + bottom: 0; + left: 0; + right: 0; +} +.selectize-dropdown { + position: absolute; + z-index: 10; + border: 1px solid #cccccc; + background: #ffffff; + margin: -1px 0 0 0; + border-top: 0 none; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} +.selectize-dropdown [data-selectable] { + cursor: pointer; + overflow: hidden; +} +.selectize-dropdown [data-selectable] .highlight { + background: rgba(255, 237, 40, 0.4); + -webkit-border-radius: 1px; + -moz-border-radius: 1px; + border-radius: 1px; +} +.selectize-dropdown [data-selectable], +.selectize-dropdown .optgroup-header { + padding: 3px 10px; +} +.selectize-dropdown .optgroup:first-child .optgroup-header { + border-top: 0 none; +} +.selectize-dropdown .optgroup-header { + color: #999999; + background: #ffffff; + cursor: default; +} +.selectize-dropdown .active { + background-color: #0088cc; + color: #ffffff; +} +.selectize-dropdown .active.create { + color: #ffffff; +} +.selectize-dropdown .create { + color: rgba(51, 51, 51, 0.5); +} +.selectize-dropdown-content { + overflow-y: auto; + overflow-x: hidden; + max-height: 200px; + -webkit-overflow-scrolling: touch; +} +.selectize-control.single .selectize-input, +.selectize-control.single .selectize-input input { + cursor: pointer; +} +.selectize-control.single .selectize-input.input-active, +.selectize-control.single .selectize-input.input-active input { + cursor: text; +} +.selectize-control.single .selectize-input:after { + content: ' '; + display: block; + position: absolute; + top: 50%; + right: 15px; + margin-top: -3px; + width: 0; + height: 0; + border-style: solid; + border-width: 5px 5px 0 5px; + border-color: #000000 transparent transparent transparent; +} +.selectize-control.single .selectize-input.dropdown-active:after { + margin-top: -4px; + border-width: 0 5px 5px 5px; + border-color: transparent transparent #000000 transparent; +} +.selectize-control.rtl.single .selectize-input:after { + left: 15px; + right: auto; +} +.selectize-control.rtl .selectize-input > input { + margin: 0 4px 0 -2px !important; +} +.selectize-control .selectize-input.disabled { + opacity: 0.5; + background-color: #ffffff; +} +.selectize-dropdown { + margin: 2px 0 0 0; + z-index: 1000; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 4px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); +} +.selectize-dropdown .optgroup-header { + font-size: 11px; + font-weight: bold; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + text-transform: uppercase; +} +.selectize-dropdown .optgroup:first-child:before { + display: none; +} +.selectize-dropdown .optgroup:before { + content: ' '; + display: block; + *width: 100%; + height: 1px; + margin: 9px 1px; + *margin: -5px 0 5px; + overflow: hidden; + background-color: #e5e5e5; + border-bottom: 1px solid #ffffff; + margin-left: -10px; + margin-right: -10px; +} +.selectize-dropdown [data-selectable].active { + background-color: #0081c2; + background-image: -moz-linear-gradient(top, #0088cc, #0077b3); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); + background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); + background-image: -o-linear-gradient(top, #0088cc, #0077b3); + background-image: linear-gradient(to bottom, #0088cc, #0077b3); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); +} +.selectize-dropdown-content { + padding: 5px 0; +} +.selectize-dropdown-header { + padding: 6px 10px; +} +.selectize-input { + -webkit-transition: border linear .2s, box-shadow linear .2s; + -moz-transition: border linear .2s, box-shadow linear .2s; + -o-transition: border linear .2s, box-shadow linear .2s; + transition: border linear .2s, box-shadow linear .2s; +} +.selectize-input.dropdown-active { + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.selectize-input.dropdown-active::before { + display: none; +} +.selectize-input.input-active, +.selectize-input.input-active:hover, +.selectize-control.multi .selectize-input.focus { + background: #ffffff !important; + border-color: rgba(82, 168, 236, 0.8) !important; + outline: 0 !important; + outline: thin dotted \9 !important; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6) !important; + -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6) !important; + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6) !important; +} +.selectize-control.single .selectize-input { + color: #333333; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + background-color: #f5f5f5; + background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); + background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); + background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); + border-color: #e6e6e6 #e6e6e6 #bfbfbf; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #e6e6e6; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); + -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); + box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); +} +.selectize-control.single .selectize-input:hover, +.selectize-control.single .selectize-input:focus, +.selectize-control.single .selectize-input:active, +.selectize-control.single .selectize-input.active, +.selectize-control.single .selectize-input.disabled, +.selectize-control.single .selectize-input[disabled] { + color: #333333; + background-color: #e6e6e6; + *background-color: #d9d9d9; +} +.selectize-control.single .selectize-input:active, +.selectize-control.single .selectize-input.active { + background-color: #cccccc \9; +} +.selectize-control.single .selectize-input:hover { + color: #333333; + text-decoration: none; + background-position: 0 -15px; + -webkit-transition: background-position 0.1s linear; + -moz-transition: background-position 0.1s linear; + -o-transition: background-position 0.1s linear; + transition: background-position 0.1s linear; +} +.selectize-control.single .selectize-input.disabled { + background: #e6e6e6 !important; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} +.selectize-control.multi .selectize-input { + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.selectize-control.multi .selectize-input.has-items { + padding-left: 7px; + padding-right: 7px; +} +.selectize-control.multi .selectize-input > div { + color: #333333; + text-shadow: none; + background-color: #f5f5f5; + background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); + background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); + background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); + border-color: #e6e6e6 #e6e6e6 #bfbfbf; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #e6e6e6; + border: 1px solid #cccccc; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); + -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); + box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); +} +.selectize-control.multi .selectize-input > div.active { + -webkit-box-shadow: 0 1px 2px rgba(0,0,0,.05); + -moz-box-shadow: 0 1px 2px rgba(0,0,0,.05); + box-shadow: 0 1px 2px rgba(0,0,0,.05); + color: #ffffff; + text-shadow: none; + background-color: #0081c2; + background-image: -moz-linear-gradient(top, #0088cc, #0077b3); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); + background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); + background-image: -o-linear-gradient(top, #0088cc, #0077b3); + background-image: linear-gradient(to bottom, #0088cc, #0077b3); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); + border-color: #0077b3 #0077b3 #004466; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #0088cc; + border: 1px solid #0088cc; +} diff --git a/modoboa/bower_components/selectize/dist/css/selectize.bootstrap3.css b/modoboa/bower_components/selectize/dist/css/selectize.bootstrap3.css new file mode 100644 index 000000000..799a4114c --- /dev/null +++ b/modoboa/bower_components/selectize/dist/css/selectize.bootstrap3.css @@ -0,0 +1,408 @@ +/** + * selectize.bootstrap3.css (v0.12.4) - Bootstrap 3 Theme + * Copyright (c) 2013–2015 Brian Reavis & contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this + * file except in compliance with the License. You may obtain a copy of the License at: + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF + * ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + * + * @author Brian Reavis + */ +.selectize-control.plugin-drag_drop.multi > .selectize-input > div.ui-sortable-placeholder { + visibility: visible !important; + background: #f2f2f2 !important; + background: rgba(0, 0, 0, 0.06) !important; + border: 0 none !important; + -webkit-box-shadow: inset 0 0 12px 4px #ffffff; + box-shadow: inset 0 0 12px 4px #ffffff; +} +.selectize-control.plugin-drag_drop .ui-sortable-placeholder::after { + content: '!'; + visibility: hidden; +} +.selectize-control.plugin-drag_drop .ui-sortable-helper { + -webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); +} +.selectize-dropdown-header { + position: relative; + padding: 3px 12px; + border-bottom: 1px solid #d0d0d0; + background: #f8f8f8; + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} +.selectize-dropdown-header-close { + position: absolute; + right: 12px; + top: 50%; + color: #333333; + opacity: 0.4; + margin-top: -12px; + line-height: 20px; + font-size: 20px !important; +} +.selectize-dropdown-header-close:hover { + color: #000000; +} +.selectize-dropdown.plugin-optgroup_columns .optgroup { + border-right: 1px solid #f2f2f2; + border-top: 0 none; + float: left; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.selectize-dropdown.plugin-optgroup_columns .optgroup:last-child { + border-right: 0 none; +} +.selectize-dropdown.plugin-optgroup_columns .optgroup:before { + display: none; +} +.selectize-dropdown.plugin-optgroup_columns .optgroup-header { + border-top: 0 none; +} +.selectize-control.plugin-remove_button [data-value] { + position: relative; + padding-right: 24px !important; +} +.selectize-control.plugin-remove_button [data-value] .remove { + z-index: 1; + /* fixes ie bug (see #392) */ + position: absolute; + top: 0; + right: 0; + bottom: 0; + width: 17px; + text-align: center; + font-weight: bold; + font-size: 12px; + color: inherit; + text-decoration: none; + vertical-align: middle; + display: inline-block; + padding: 1px 0 0 0; + border-left: 1px solid rgba(0, 0, 0, 0); + -webkit-border-radius: 0 2px 2px 0; + -moz-border-radius: 0 2px 2px 0; + border-radius: 0 2px 2px 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.selectize-control.plugin-remove_button [data-value] .remove:hover { + background: rgba(0, 0, 0, 0.05); +} +.selectize-control.plugin-remove_button [data-value].active .remove { + border-left-color: rgba(0, 0, 0, 0); +} +.selectize-control.plugin-remove_button .disabled [data-value] .remove:hover { + background: none; +} +.selectize-control.plugin-remove_button .disabled [data-value] .remove { + border-left-color: rgba(77, 77, 77, 0); +} +.selectize-control.plugin-remove_button .remove-single { + position: absolute; + right: 28px; + top: 6px; + font-size: 23px; +} +.selectize-control { + position: relative; +} +.selectize-dropdown, +.selectize-input, +.selectize-input input { + color: #333333; + font-family: inherit; + font-size: inherit; + line-height: 20px; + -webkit-font-smoothing: inherit; +} +.selectize-input, +.selectize-control.single .selectize-input.input-active { + background: #ffffff; + cursor: text; + display: inline-block; +} +.selectize-input { + border: 1px solid #cccccc; + padding: 6px 12px; + display: inline-block; + width: 100%; + overflow: hidden; + position: relative; + z-index: 1; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-box-shadow: none; + box-shadow: none; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.selectize-control.multi .selectize-input.has-items { + padding: 5px 12px 2px; +} +.selectize-input.full { + background-color: #ffffff; +} +.selectize-input.disabled, +.selectize-input.disabled * { + cursor: default !important; +} +.selectize-input.focus { + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15); +} +.selectize-input.dropdown-active { + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} +.selectize-input > * { + vertical-align: baseline; + display: -moz-inline-stack; + display: inline-block; + zoom: 1; + *display: inline; +} +.selectize-control.multi .selectize-input > div { + cursor: pointer; + margin: 0 3px 3px 0; + padding: 1px 3px; + background: #efefef; + color: #333333; + border: 0 solid rgba(0, 0, 0, 0); +} +.selectize-control.multi .selectize-input > div.active { + background: #428bca; + color: #ffffff; + border: 0 solid rgba(0, 0, 0, 0); +} +.selectize-control.multi .selectize-input.disabled > div, +.selectize-control.multi .selectize-input.disabled > div.active { + color: #808080; + background: #ffffff; + border: 0 solid rgba(77, 77, 77, 0); +} +.selectize-input > input { + display: inline-block !important; + padding: 0 !important; + min-height: 0 !important; + max-height: none !important; + max-width: 100% !important; + margin: 0 !important; + text-indent: 0 !important; + border: 0 none !important; + background: none !important; + line-height: inherit !important; + -webkit-user-select: auto !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; +} +.selectize-input > input::-ms-clear { + display: none; +} +.selectize-input > input:focus { + outline: none !important; +} +.selectize-input::after { + content: ' '; + display: block; + clear: left; +} +.selectize-input.dropdown-active::before { + content: ' '; + display: block; + position: absolute; + background: #ffffff; + height: 1px; + bottom: 0; + left: 0; + right: 0; +} +.selectize-dropdown { + position: absolute; + z-index: 10; + border: 1px solid #d0d0d0; + background: #ffffff; + margin: -1px 0 0 0; + border-top: 0 none; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} +.selectize-dropdown [data-selectable] { + cursor: pointer; + overflow: hidden; +} +.selectize-dropdown [data-selectable] .highlight { + background: rgba(255, 237, 40, 0.4); + -webkit-border-radius: 1px; + -moz-border-radius: 1px; + border-radius: 1px; +} +.selectize-dropdown [data-selectable], +.selectize-dropdown .optgroup-header { + padding: 3px 12px; +} +.selectize-dropdown .optgroup:first-child .optgroup-header { + border-top: 0 none; +} +.selectize-dropdown .optgroup-header { + color: #777777; + background: #ffffff; + cursor: default; +} +.selectize-dropdown .active { + background-color: #f5f5f5; + color: #262626; +} +.selectize-dropdown .active.create { + color: #262626; +} +.selectize-dropdown .create { + color: rgba(51, 51, 51, 0.5); +} +.selectize-dropdown-content { + overflow-y: auto; + overflow-x: hidden; + max-height: 200px; + -webkit-overflow-scrolling: touch; +} +.selectize-control.single .selectize-input, +.selectize-control.single .selectize-input input { + cursor: pointer; +} +.selectize-control.single .selectize-input.input-active, +.selectize-control.single .selectize-input.input-active input { + cursor: text; +} +.selectize-control.single .selectize-input:after { + content: ' '; + display: block; + position: absolute; + top: 50%; + right: 17px; + margin-top: -3px; + width: 0; + height: 0; + border-style: solid; + border-width: 5px 5px 0 5px; + border-color: #333333 transparent transparent transparent; +} +.selectize-control.single .selectize-input.dropdown-active:after { + margin-top: -4px; + border-width: 0 5px 5px 5px; + border-color: transparent transparent #333333 transparent; +} +.selectize-control.rtl.single .selectize-input:after { + left: 17px; + right: auto; +} +.selectize-control.rtl .selectize-input > input { + margin: 0 4px 0 -2px !important; +} +.selectize-control .selectize-input.disabled { + opacity: 0.5; + background-color: #ffffff; +} +.selectize-dropdown, +.selectize-dropdown.form-control { + height: auto; + padding: 0; + margin: 2px 0 0 0; + z-index: 1000; + background: #ffffff; + border: 1px solid #cccccc; + border: 1px solid rgba(0, 0, 0, 0.15); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); +} +.selectize-dropdown .optgroup-header { + font-size: 12px; + line-height: 1.42857143; +} +.selectize-dropdown .optgroup:first-child:before { + display: none; +} +.selectize-dropdown .optgroup:before { + content: ' '; + display: block; + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; + margin-left: -12px; + margin-right: -12px; +} +.selectize-dropdown-content { + padding: 5px 0; +} +.selectize-dropdown-header { + padding: 6px 12px; +} +.selectize-input { + min-height: 34px; +} +.selectize-input.dropdown-active { + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.selectize-input.dropdown-active::before { + display: none; +} +.selectize-input.focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); +} +.has-error .selectize-input { + border-color: #a94442; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-error .selectize-input:focus { + border-color: #843534; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; +} +.selectize-control.multi .selectize-input.has-items { + padding-left: 9px; + padding-right: 9px; +} +.selectize-control.multi .selectize-input > div { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +.form-control.selectize-control { + padding: 0; + height: auto; + border: none; + background: none; + -webkit-box-shadow: none; + box-shadow: none; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} diff --git a/modoboa/bower_components/selectize/dist/css/selectize.css b/modoboa/bower_components/selectize/dist/css/selectize.css new file mode 100644 index 000000000..698c0559f --- /dev/null +++ b/modoboa/bower_components/selectize/dist/css/selectize.css @@ -0,0 +1,324 @@ +/** + * selectize.css (v0.12.4) + * Copyright (c) 2013–2015 Brian Reavis & contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this + * file except in compliance with the License. You may obtain a copy of the License at: + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF + * ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + * + * @author Brian Reavis + */ + +.selectize-control.plugin-drag_drop.multi > .selectize-input > div.ui-sortable-placeholder { + visibility: visible !important; + background: #f2f2f2 !important; + background: rgba(0, 0, 0, 0.06) !important; + border: 0 none !important; + -webkit-box-shadow: inset 0 0 12px 4px #ffffff; + box-shadow: inset 0 0 12px 4px #ffffff; +} +.selectize-control.plugin-drag_drop .ui-sortable-placeholder::after { + content: '!'; + visibility: hidden; +} +.selectize-control.plugin-drag_drop .ui-sortable-helper { + -webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); +} +.selectize-dropdown-header { + position: relative; + padding: 5px 8px; + border-bottom: 1px solid #d0d0d0; + background: #f8f8f8; + -webkit-border-radius: 3px 3px 0 0; + -moz-border-radius: 3px 3px 0 0; + border-radius: 3px 3px 0 0; +} +.selectize-dropdown-header-close { + position: absolute; + right: 8px; + top: 50%; + color: #303030; + opacity: 0.4; + margin-top: -12px; + line-height: 20px; + font-size: 20px !important; +} +.selectize-dropdown-header-close:hover { + color: #000000; +} +.selectize-dropdown.plugin-optgroup_columns .optgroup { + border-right: 1px solid #f2f2f2; + border-top: 0 none; + float: left; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.selectize-dropdown.plugin-optgroup_columns .optgroup:last-child { + border-right: 0 none; +} +.selectize-dropdown.plugin-optgroup_columns .optgroup:before { + display: none; +} +.selectize-dropdown.plugin-optgroup_columns .optgroup-header { + border-top: 0 none; +} +.selectize-control.plugin-remove_button [data-value] { + position: relative; + padding-right: 24px !important; +} +.selectize-control.plugin-remove_button [data-value] .remove { + z-index: 1; + /* fixes ie bug (see #392) */ + position: absolute; + top: 0; + right: 0; + bottom: 0; + width: 17px; + text-align: center; + font-weight: bold; + font-size: 12px; + color: inherit; + text-decoration: none; + vertical-align: middle; + display: inline-block; + padding: 2px 0 0 0; + border-left: 1px solid #d0d0d0; + -webkit-border-radius: 0 2px 2px 0; + -moz-border-radius: 0 2px 2px 0; + border-radius: 0 2px 2px 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.selectize-control.plugin-remove_button [data-value] .remove:hover { + background: rgba(0, 0, 0, 0.05); +} +.selectize-control.plugin-remove_button [data-value].active .remove { + border-left-color: #cacaca; +} +.selectize-control.plugin-remove_button .disabled [data-value] .remove:hover { + background: none; +} +.selectize-control.plugin-remove_button .disabled [data-value] .remove { + border-left-color: #ffffff; +} +.selectize-control.plugin-remove_button .remove-single { + position: absolute; + right: 28px; + top: 6px; + font-size: 23px; +} +.selectize-control { + position: relative; +} +.selectize-dropdown, +.selectize-input, +.selectize-input input { + color: #303030; + font-family: inherit; + font-size: 13px; + line-height: 18px; + -webkit-font-smoothing: inherit; +} +.selectize-input, +.selectize-control.single .selectize-input.input-active { + background: #ffffff; + cursor: text; + display: inline-block; +} +.selectize-input { + border: 1px solid #d0d0d0; + padding: 8px 8px; + display: inline-block; + width: 100%; + overflow: hidden; + position: relative; + z-index: 1; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.1); + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +.selectize-control.multi .selectize-input.has-items { + padding: 6px 8px 3px; +} +.selectize-input.full { + background-color: #ffffff; +} +.selectize-input.disabled, +.selectize-input.disabled * { + cursor: default !important; +} +.selectize-input.focus { + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15); +} +.selectize-input.dropdown-active { + -webkit-border-radius: 3px 3px 0 0; + -moz-border-radius: 3px 3px 0 0; + border-radius: 3px 3px 0 0; +} +.selectize-input > * { + vertical-align: baseline; + display: -moz-inline-stack; + display: inline-block; + zoom: 1; + *display: inline; +} +.selectize-control.multi .selectize-input > div { + cursor: pointer; + margin: 0 3px 3px 0; + padding: 2px 6px; + background: #f2f2f2; + color: #303030; + border: 0 solid #d0d0d0; +} +.selectize-control.multi .selectize-input > div.active { + background: #e8e8e8; + color: #303030; + border: 0 solid #cacaca; +} +.selectize-control.multi .selectize-input.disabled > div, +.selectize-control.multi .selectize-input.disabled > div.active { + color: #7d7d7d; + background: #ffffff; + border: 0 solid #ffffff; +} +.selectize-input > input { + display: inline-block !important; + padding: 0 !important; + min-height: 0 !important; + max-height: none !important; + max-width: 100% !important; + margin: 0 2px 0 0 !important; + text-indent: 0 !important; + border: 0 none !important; + background: none !important; + line-height: inherit !important; + -webkit-user-select: auto !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; +} +.selectize-input > input::-ms-clear { + display: none; +} +.selectize-input > input:focus { + outline: none !important; +} +.selectize-input::after { + content: ' '; + display: block; + clear: left; +} +.selectize-input.dropdown-active::before { + content: ' '; + display: block; + position: absolute; + background: #f0f0f0; + height: 1px; + bottom: 0; + left: 0; + right: 0; +} +.selectize-dropdown { + position: absolute; + z-index: 10; + border: 1px solid #d0d0d0; + background: #ffffff; + margin: -1px 0 0 0; + border-top: 0 none; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + -webkit-border-radius: 0 0 3px 3px; + -moz-border-radius: 0 0 3px 3px; + border-radius: 0 0 3px 3px; +} +.selectize-dropdown [data-selectable] { + cursor: pointer; + overflow: hidden; +} +.selectize-dropdown [data-selectable] .highlight { + background: rgba(125, 168, 208, 0.2); + -webkit-border-radius: 1px; + -moz-border-radius: 1px; + border-radius: 1px; +} +.selectize-dropdown [data-selectable], +.selectize-dropdown .optgroup-header { + padding: 5px 8px; +} +.selectize-dropdown .optgroup:first-child .optgroup-header { + border-top: 0 none; +} +.selectize-dropdown .optgroup-header { + color: #303030; + background: #ffffff; + cursor: default; +} +.selectize-dropdown .active { + background-color: #f5fafd; + color: #495c68; +} +.selectize-dropdown .active.create { + color: #495c68; +} +.selectize-dropdown .create { + color: rgba(48, 48, 48, 0.5); +} +.selectize-dropdown-content { + overflow-y: auto; + overflow-x: hidden; + max-height: 200px; + -webkit-overflow-scrolling: touch; +} +.selectize-control.single .selectize-input, +.selectize-control.single .selectize-input input { + cursor: pointer; +} +.selectize-control.single .selectize-input.input-active, +.selectize-control.single .selectize-input.input-active input { + cursor: text; +} +.selectize-control.single .selectize-input:after { + content: ' '; + display: block; + position: absolute; + top: 50%; + right: 15px; + margin-top: -3px; + width: 0; + height: 0; + border-style: solid; + border-width: 5px 5px 0 5px; + border-color: #808080 transparent transparent transparent; +} +.selectize-control.single .selectize-input.dropdown-active:after { + margin-top: -4px; + border-width: 0 5px 5px 5px; + border-color: transparent transparent #808080 transparent; +} +.selectize-control.rtl.single .selectize-input:after { + left: 15px; + right: auto; +} +.selectize-control.rtl .selectize-input > input { + margin: 0 4px 0 -2px !important; +} +.selectize-control .selectize-input.disabled { + opacity: 0.5; + background-color: #fafafa; +} diff --git a/modoboa/bower_components/selectize/dist/css/selectize.default.css b/modoboa/bower_components/selectize/dist/css/selectize.default.css new file mode 100644 index 000000000..ab5309509 --- /dev/null +++ b/modoboa/bower_components/selectize/dist/css/selectize.default.css @@ -0,0 +1,394 @@ +/** + * selectize.default.css (v0.12.4) - Default Theme + * Copyright (c) 2013–2015 Brian Reavis & contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this + * file except in compliance with the License. You may obtain a copy of the License at: + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF + * ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + * + * @author Brian Reavis + */ +.selectize-control.plugin-drag_drop.multi > .selectize-input > div.ui-sortable-placeholder { + visibility: visible !important; + background: #f2f2f2 !important; + background: rgba(0, 0, 0, 0.06) !important; + border: 0 none !important; + -webkit-box-shadow: inset 0 0 12px 4px #ffffff; + box-shadow: inset 0 0 12px 4px #ffffff; +} +.selectize-control.plugin-drag_drop .ui-sortable-placeholder::after { + content: '!'; + visibility: hidden; +} +.selectize-control.plugin-drag_drop .ui-sortable-helper { + -webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); +} +.selectize-dropdown-header { + position: relative; + padding: 5px 8px; + border-bottom: 1px solid #d0d0d0; + background: #f8f8f8; + -webkit-border-radius: 3px 3px 0 0; + -moz-border-radius: 3px 3px 0 0; + border-radius: 3px 3px 0 0; +} +.selectize-dropdown-header-close { + position: absolute; + right: 8px; + top: 50%; + color: #303030; + opacity: 0.4; + margin-top: -12px; + line-height: 20px; + font-size: 20px !important; +} +.selectize-dropdown-header-close:hover { + color: #000000; +} +.selectize-dropdown.plugin-optgroup_columns .optgroup { + border-right: 1px solid #f2f2f2; + border-top: 0 none; + float: left; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.selectize-dropdown.plugin-optgroup_columns .optgroup:last-child { + border-right: 0 none; +} +.selectize-dropdown.plugin-optgroup_columns .optgroup:before { + display: none; +} +.selectize-dropdown.plugin-optgroup_columns .optgroup-header { + border-top: 0 none; +} +.selectize-control.plugin-remove_button [data-value] { + position: relative; + padding-right: 24px !important; +} +.selectize-control.plugin-remove_button [data-value] .remove { + z-index: 1; + /* fixes ie bug (see #392) */ + position: absolute; + top: 0; + right: 0; + bottom: 0; + width: 17px; + text-align: center; + font-weight: bold; + font-size: 12px; + color: inherit; + text-decoration: none; + vertical-align: middle; + display: inline-block; + padding: 2px 0 0 0; + border-left: 1px solid #0073bb; + -webkit-border-radius: 0 2px 2px 0; + -moz-border-radius: 0 2px 2px 0; + border-radius: 0 2px 2px 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.selectize-control.plugin-remove_button [data-value] .remove:hover { + background: rgba(0, 0, 0, 0.05); +} +.selectize-control.plugin-remove_button [data-value].active .remove { + border-left-color: #00578d; +} +.selectize-control.plugin-remove_button .disabled [data-value] .remove:hover { + background: none; +} +.selectize-control.plugin-remove_button .disabled [data-value] .remove { + border-left-color: #aaaaaa; +} +.selectize-control.plugin-remove_button .remove-single { + position: absolute; + right: 28px; + top: 6px; + font-size: 23px; +} +.selectize-control { + position: relative; +} +.selectize-dropdown, +.selectize-input, +.selectize-input input { + color: #303030; + font-family: inherit; + font-size: 13px; + line-height: 18px; + -webkit-font-smoothing: inherit; +} +.selectize-input, +.selectize-control.single .selectize-input.input-active { + background: #ffffff; + cursor: text; + display: inline-block; +} +.selectize-input { + border: 1px solid #d0d0d0; + padding: 8px 8px; + display: inline-block; + width: 100%; + overflow: hidden; + position: relative; + z-index: 1; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.1); + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +.selectize-control.multi .selectize-input.has-items { + padding: 5px 8px 2px; +} +.selectize-input.full { + background-color: #ffffff; +} +.selectize-input.disabled, +.selectize-input.disabled * { + cursor: default !important; +} +.selectize-input.focus { + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15); +} +.selectize-input.dropdown-active { + -webkit-border-radius: 3px 3px 0 0; + -moz-border-radius: 3px 3px 0 0; + border-radius: 3px 3px 0 0; +} +.selectize-input > * { + vertical-align: baseline; + display: -moz-inline-stack; + display: inline-block; + zoom: 1; + *display: inline; +} +.selectize-control.multi .selectize-input > div { + cursor: pointer; + margin: 0 3px 3px 0; + padding: 2px 6px; + background: #1da7ee; + color: #ffffff; + border: 1px solid #0073bb; +} +.selectize-control.multi .selectize-input > div.active { + background: #92c836; + color: #ffffff; + border: 1px solid #00578d; +} +.selectize-control.multi .selectize-input.disabled > div, +.selectize-control.multi .selectize-input.disabled > div.active { + color: #ffffff; + background: #d2d2d2; + border: 1px solid #aaaaaa; +} +.selectize-input > input { + display: inline-block !important; + padding: 0 !important; + min-height: 0 !important; + max-height: none !important; + max-width: 100% !important; + margin: 0 1px !important; + text-indent: 0 !important; + border: 0 none !important; + background: none !important; + line-height: inherit !important; + -webkit-user-select: auto !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; +} +.selectize-input > input::-ms-clear { + display: none; +} +.selectize-input > input:focus { + outline: none !important; +} +.selectize-input::after { + content: ' '; + display: block; + clear: left; +} +.selectize-input.dropdown-active::before { + content: ' '; + display: block; + position: absolute; + background: #f0f0f0; + height: 1px; + bottom: 0; + left: 0; + right: 0; +} +.selectize-dropdown { + position: absolute; + z-index: 10; + border: 1px solid #d0d0d0; + background: #ffffff; + margin: -1px 0 0 0; + border-top: 0 none; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + -webkit-border-radius: 0 0 3px 3px; + -moz-border-radius: 0 0 3px 3px; + border-radius: 0 0 3px 3px; +} +.selectize-dropdown [data-selectable] { + cursor: pointer; + overflow: hidden; +} +.selectize-dropdown [data-selectable] .highlight { + background: rgba(125, 168, 208, 0.2); + -webkit-border-radius: 1px; + -moz-border-radius: 1px; + border-radius: 1px; +} +.selectize-dropdown [data-selectable], +.selectize-dropdown .optgroup-header { + padding: 5px 8px; +} +.selectize-dropdown .optgroup:first-child .optgroup-header { + border-top: 0 none; +} +.selectize-dropdown .optgroup-header { + color: #303030; + background: #ffffff; + cursor: default; +} +.selectize-dropdown .active { + background-color: #f5fafd; + color: #495c68; +} +.selectize-dropdown .active.create { + color: #495c68; +} +.selectize-dropdown .create { + color: rgba(48, 48, 48, 0.5); +} +.selectize-dropdown-content { + overflow-y: auto; + overflow-x: hidden; + max-height: 200px; + -webkit-overflow-scrolling: touch; +} +.selectize-control.single .selectize-input, +.selectize-control.single .selectize-input input { + cursor: pointer; +} +.selectize-control.single .selectize-input.input-active, +.selectize-control.single .selectize-input.input-active input { + cursor: text; +} +.selectize-control.single .selectize-input:after { + content: ' '; + display: block; + position: absolute; + top: 50%; + right: 15px; + margin-top: -3px; + width: 0; + height: 0; + border-style: solid; + border-width: 5px 5px 0 5px; + border-color: #808080 transparent transparent transparent; +} +.selectize-control.single .selectize-input.dropdown-active:after { + margin-top: -4px; + border-width: 0 5px 5px 5px; + border-color: transparent transparent #808080 transparent; +} +.selectize-control.rtl.single .selectize-input:after { + left: 15px; + right: auto; +} +.selectize-control.rtl .selectize-input > input { + margin: 0 4px 0 -2px !important; +} +.selectize-control .selectize-input.disabled { + opacity: 0.5; + background-color: #fafafa; +} +.selectize-control.multi .selectize-input.has-items { + padding-left: 5px; + padding-right: 5px; +} +.selectize-control.multi .selectize-input.disabled [data-value] { + color: #999; + text-shadow: none; + background: none; + -webkit-box-shadow: none; + box-shadow: none; +} +.selectize-control.multi .selectize-input.disabled [data-value], +.selectize-control.multi .selectize-input.disabled [data-value] .remove { + border-color: #e6e6e6; +} +.selectize-control.multi .selectize-input.disabled [data-value] .remove { + background: none; +} +.selectize-control.multi .selectize-input [data-value] { + text-shadow: 0 1px 0 rgba(0, 51, 83, 0.3); + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + background-color: #1b9dec; + background-image: -moz-linear-gradient(top, #1da7ee, #178ee9); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#1da7ee), to(#178ee9)); + background-image: -webkit-linear-gradient(top, #1da7ee, #178ee9); + background-image: -o-linear-gradient(top, #1da7ee, #178ee9); + background-image: linear-gradient(to bottom, #1da7ee, #178ee9); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff1da7ee', endColorstr='#ff178ee9', GradientType=0); + -webkit-box-shadow: 0 1px 0 rgba(0,0,0,0.2),inset 0 1px rgba(255,255,255,0.03); + box-shadow: 0 1px 0 rgba(0,0,0,0.2),inset 0 1px rgba(255,255,255,0.03); +} +.selectize-control.multi .selectize-input [data-value].active { + background-color: #0085d4; + background-image: -moz-linear-gradient(top, #008fd8, #0075cf); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#008fd8), to(#0075cf)); + background-image: -webkit-linear-gradient(top, #008fd8, #0075cf); + background-image: -o-linear-gradient(top, #008fd8, #0075cf); + background-image: linear-gradient(to bottom, #008fd8, #0075cf); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff008fd8', endColorstr='#ff0075cf', GradientType=0); +} +.selectize-control.single .selectize-input { + -webkit-box-shadow: 0 1px 0 rgba(0,0,0,0.05), inset 0 1px 0 rgba(255,255,255,0.8); + box-shadow: 0 1px 0 rgba(0,0,0,0.05), inset 0 1px 0 rgba(255,255,255,0.8); + background-color: #f9f9f9; + background-image: -moz-linear-gradient(top, #fefefe, #f2f2f2); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fefefe), to(#f2f2f2)); + background-image: -webkit-linear-gradient(top, #fefefe, #f2f2f2); + background-image: -o-linear-gradient(top, #fefefe, #f2f2f2); + background-image: linear-gradient(to bottom, #fefefe, #f2f2f2); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffefefe', endColorstr='#fff2f2f2', GradientType=0); +} +.selectize-control.single .selectize-input, +.selectize-dropdown.single { + border-color: #b8b8b8; +} +.selectize-dropdown .optgroup-header { + padding-top: 7px; + font-weight: bold; + font-size: 0.85em; +} +.selectize-dropdown .optgroup { + border-top: 1px solid #f0f0f0; +} +.selectize-dropdown .optgroup:first-child { + border-top: 0 none; +} diff --git a/modoboa/bower_components/selectize/dist/css/selectize.legacy.css b/modoboa/bower_components/selectize/dist/css/selectize.legacy.css new file mode 100644 index 000000000..9a191e1f3 --- /dev/null +++ b/modoboa/bower_components/selectize/dist/css/selectize.legacy.css @@ -0,0 +1,371 @@ +/** + * selectize.legacy.css (v0.12.4) - Default Theme + * Copyright (c) 2013–2015 Brian Reavis & contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this + * file except in compliance with the License. You may obtain a copy of the License at: + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF + * ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + * + * @author Brian Reavis + */ +.selectize-control.plugin-drag_drop.multi > .selectize-input > div.ui-sortable-placeholder { + visibility: visible !important; + background: #f2f2f2 !important; + background: rgba(0, 0, 0, 0.06) !important; + border: 0 none !important; + -webkit-box-shadow: inset 0 0 12px 4px #ffffff; + box-shadow: inset 0 0 12px 4px #ffffff; +} +.selectize-control.plugin-drag_drop .ui-sortable-placeholder::after { + content: '!'; + visibility: hidden; +} +.selectize-control.plugin-drag_drop .ui-sortable-helper { + -webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); +} +.selectize-dropdown-header { + position: relative; + padding: 7px 10px; + border-bottom: 1px solid #d0d0d0; + background: #f8f8f8; + -webkit-border-radius: 3px 3px 0 0; + -moz-border-radius: 3px 3px 0 0; + border-radius: 3px 3px 0 0; +} +.selectize-dropdown-header-close { + position: absolute; + right: 10px; + top: 50%; + color: #303030; + opacity: 0.4; + margin-top: -12px; + line-height: 20px; + font-size: 20px !important; +} +.selectize-dropdown-header-close:hover { + color: #000000; +} +.selectize-dropdown.plugin-optgroup_columns .optgroup { + border-right: 1px solid #f2f2f2; + border-top: 0 none; + float: left; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.selectize-dropdown.plugin-optgroup_columns .optgroup:last-child { + border-right: 0 none; +} +.selectize-dropdown.plugin-optgroup_columns .optgroup:before { + display: none; +} +.selectize-dropdown.plugin-optgroup_columns .optgroup-header { + border-top: 0 none; +} +.selectize-control.plugin-remove_button [data-value] { + position: relative; + padding-right: 24px !important; +} +.selectize-control.plugin-remove_button [data-value] .remove { + z-index: 1; + /* fixes ie bug (see #392) */ + position: absolute; + top: 0; + right: 0; + bottom: 0; + width: 17px; + text-align: center; + font-weight: bold; + font-size: 12px; + color: inherit; + text-decoration: none; + vertical-align: middle; + display: inline-block; + padding: 1px 0 0 0; + border-left: 1px solid #74b21e; + -webkit-border-radius: 0 2px 2px 0; + -moz-border-radius: 0 2px 2px 0; + border-radius: 0 2px 2px 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.selectize-control.plugin-remove_button [data-value] .remove:hover { + background: rgba(0, 0, 0, 0.05); +} +.selectize-control.plugin-remove_button [data-value].active .remove { + border-left-color: #6f9839; +} +.selectize-control.plugin-remove_button .disabled [data-value] .remove:hover { + background: none; +} +.selectize-control.plugin-remove_button .disabled [data-value] .remove { + border-left-color: #b4b4b4; +} +.selectize-control.plugin-remove_button .remove-single { + position: absolute; + right: 28px; + top: 6px; + font-size: 23px; +} +.selectize-control { + position: relative; +} +.selectize-dropdown, +.selectize-input, +.selectize-input input { + color: #303030; + font-family: inherit; + font-size: 13px; + line-height: 20px; + -webkit-font-smoothing: inherit; +} +.selectize-input, +.selectize-control.single .selectize-input.input-active { + background: #ffffff; + cursor: text; + display: inline-block; +} +.selectize-input { + border: 1px solid #d0d0d0; + padding: 10px 10px; + display: inline-block; + width: 100%; + overflow: hidden; + position: relative; + z-index: 1; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.1); + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +.selectize-control.multi .selectize-input.has-items { + padding: 8px 10px 4px; +} +.selectize-input.full { + background-color: #f2f2f2; +} +.selectize-input.disabled, +.selectize-input.disabled * { + cursor: default !important; +} +.selectize-input.focus { + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15); +} +.selectize-input.dropdown-active { + -webkit-border-radius: 3px 3px 0 0; + -moz-border-radius: 3px 3px 0 0; + border-radius: 3px 3px 0 0; +} +.selectize-input > * { + vertical-align: baseline; + display: -moz-inline-stack; + display: inline-block; + zoom: 1; + *display: inline; +} +.selectize-control.multi .selectize-input > div { + cursor: pointer; + margin: 0 4px 4px 0; + padding: 1px 5px; + background: #b8e76f; + color: #3d5d18; + border: 1px solid #74b21e; +} +.selectize-control.multi .selectize-input > div.active { + background: #92c836; + color: #303030; + border: 1px solid #6f9839; +} +.selectize-control.multi .selectize-input.disabled > div, +.selectize-control.multi .selectize-input.disabled > div.active { + color: #878787; + background: #f8f8f8; + border: 1px solid #b4b4b4; +} +.selectize-input > input { + display: inline-block !important; + padding: 0 !important; + min-height: 0 !important; + max-height: none !important; + max-width: 100% !important; + margin: 0 2px 0 0 !important; + text-indent: 0 !important; + border: 0 none !important; + background: none !important; + line-height: inherit !important; + -webkit-user-select: auto !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; +} +.selectize-input > input::-ms-clear { + display: none; +} +.selectize-input > input:focus { + outline: none !important; +} +.selectize-input::after { + content: ' '; + display: block; + clear: left; +} +.selectize-input.dropdown-active::before { + content: ' '; + display: block; + position: absolute; + background: #f0f0f0; + height: 1px; + bottom: 0; + left: 0; + right: 0; +} +.selectize-dropdown { + position: absolute; + z-index: 10; + border: 1px solid #d0d0d0; + background: #ffffff; + margin: -1px 0 0 0; + border-top: 0 none; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + -webkit-border-radius: 0 0 3px 3px; + -moz-border-radius: 0 0 3px 3px; + border-radius: 0 0 3px 3px; +} +.selectize-dropdown [data-selectable] { + cursor: pointer; + overflow: hidden; +} +.selectize-dropdown [data-selectable] .highlight { + background: rgba(255, 237, 40, 0.4); + -webkit-border-radius: 1px; + -moz-border-radius: 1px; + border-radius: 1px; +} +.selectize-dropdown [data-selectable], +.selectize-dropdown .optgroup-header { + padding: 7px 10px; +} +.selectize-dropdown .optgroup:first-child .optgroup-header { + border-top: 0 none; +} +.selectize-dropdown .optgroup-header { + color: #303030; + background: #f8f8f8; + cursor: default; +} +.selectize-dropdown .active { + background-color: #fffceb; + color: #303030; +} +.selectize-dropdown .active.create { + color: #303030; +} +.selectize-dropdown .create { + color: rgba(48, 48, 48, 0.5); +} +.selectize-dropdown-content { + overflow-y: auto; + overflow-x: hidden; + max-height: 200px; + -webkit-overflow-scrolling: touch; +} +.selectize-control.single .selectize-input, +.selectize-control.single .selectize-input input { + cursor: pointer; +} +.selectize-control.single .selectize-input.input-active, +.selectize-control.single .selectize-input.input-active input { + cursor: text; +} +.selectize-control.single .selectize-input:after { + content: ' '; + display: block; + position: absolute; + top: 50%; + right: 15px; + margin-top: -3px; + width: 0; + height: 0; + border-style: solid; + border-width: 5px 5px 0 5px; + border-color: #808080 transparent transparent transparent; +} +.selectize-control.single .selectize-input.dropdown-active:after { + margin-top: -4px; + border-width: 0 5px 5px 5px; + border-color: transparent transparent #808080 transparent; +} +.selectize-control.rtl.single .selectize-input:after { + left: 15px; + right: auto; +} +.selectize-control.rtl .selectize-input > input { + margin: 0 4px 0 -2px !important; +} +.selectize-control .selectize-input.disabled { + opacity: 0.5; + background-color: #fafafa; +} +.selectize-control.multi .selectize-input [data-value] { + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.1); + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + background-color: #b2e567; + background-image: -moz-linear-gradient(top, #b8e76f, #a9e25c); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#b8e76f), to(#a9e25c)); + background-image: -webkit-linear-gradient(top, #b8e76f, #a9e25c); + background-image: -o-linear-gradient(top, #b8e76f, #a9e25c); + background-image: linear-gradient(to bottom, #b8e76f, #a9e25c); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffb8e76f', endColorstr='#ffa9e25c', GradientType=0); + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); +} +.selectize-control.multi .selectize-input [data-value].active { + background-color: #88c332; + background-image: -moz-linear-gradient(top, #92c836, #7abc2c); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#92c836), to(#7abc2c)); + background-image: -webkit-linear-gradient(top, #92c836, #7abc2c); + background-image: -o-linear-gradient(top, #92c836, #7abc2c); + background-image: linear-gradient(to bottom, #92c836, #7abc2c); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff92c836', endColorstr='#ff7abc2c', GradientType=0); +} +.selectize-control.single .selectize-input { + -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,0.8), 0 2px 0 #e0e0e0, 0 3px 0 #c8c8c8, 0 4px 1px rgba(0,0,0,0.1); + box-shadow: inset 0 1px 0 rgba(255,255,255,0.8), 0 2px 0 #e0e0e0, 0 3px 0 #c8c8c8, 0 4px 1px rgba(0,0,0,0.1); + background-color: #f3f3f3; + background-image: -moz-linear-gradient(top, #f5f5f5, #efefef); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#efefef)); + background-image: -webkit-linear-gradient(top, #f5f5f5, #efefef); + background-image: -o-linear-gradient(top, #f5f5f5, #efefef); + background-image: linear-gradient(to bottom, #f5f5f5, #efefef); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffefefef', GradientType=0); +} +.selectize-control.single .selectize-input, +.selectize-dropdown.single { + border-color: #b8b8b8; +} +.selectize-dropdown .optgroup-header { + font-weight: bold; + font-size: 0.8em; + border-bottom: 1px solid #f0f0f0; + border-top: 1px solid #f0f0f0; +} diff --git a/modoboa/bower_components/selectize/dist/js/selectize.js b/modoboa/bower_components/selectize/dist/js/selectize.js new file mode 100644 index 000000000..afe09e474 --- /dev/null +++ b/modoboa/bower_components/selectize/dist/js/selectize.js @@ -0,0 +1,3193 @@ +/** + * selectize.js (v0.12.4) + * Copyright (c) 2013–2015 Brian Reavis & contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this + * file except in compliance with the License. You may obtain a copy of the License at: + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF + * ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + * + * @author Brian Reavis + */ + +/*jshint curly:false */ +/*jshint browser:true */ + +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + define(['jquery','sifter','microplugin'], factory); + } else if (typeof exports === 'object') { + module.exports = factory(require('jquery'), require('sifter'), require('microplugin')); + } else { + root.Selectize = factory(root.jQuery, root.Sifter, root.MicroPlugin); + } +}(this, function($, Sifter, MicroPlugin) { + 'use strict'; + + var highlight = function($element, pattern) { + if (typeof pattern === 'string' && !pattern.length) return; + var regex = (typeof pattern === 'string') ? new RegExp(pattern, 'i') : pattern; + + var highlight = function(node) { + var skip = 0; + if (node.nodeType === 3) { + var pos = node.data.search(regex); + if (pos >= 0 && node.data.length > 0) { + var match = node.data.match(regex); + var spannode = document.createElement('span'); + spannode.className = 'highlight'; + var middlebit = node.splitText(pos); + var endbit = middlebit.splitText(match[0].length); + var middleclone = middlebit.cloneNode(true); + spannode.appendChild(middleclone); + middlebit.parentNode.replaceChild(spannode, middlebit); + skip = 1; + } + } else if (node.nodeType === 1 && node.childNodes && !/(script|style)/i.test(node.tagName)) { + for (var i = 0; i < node.childNodes.length; ++i) { + i += highlight(node.childNodes[i]); + } + } + return skip; + }; + + return $element.each(function() { + highlight(this); + }); + }; + + /** + * removeHighlight fn copied from highlight v5 and + * edited to remove with() and pass js strict mode + */ + $.fn.removeHighlight = function() { + return this.find("span.highlight").each(function() { + this.parentNode.firstChild.nodeName; + var parent = this.parentNode; + parent.replaceChild(this.firstChild, this); + parent.normalize(); + }).end(); + }; + + + var MicroEvent = function() {}; + MicroEvent.prototype = { + on: function(event, fct){ + this._events = this._events || {}; + this._events[event] = this._events[event] || []; + this._events[event].push(fct); + }, + off: function(event, fct){ + var n = arguments.length; + if (n === 0) return delete this._events; + if (n === 1) return delete this._events[event]; + + this._events = this._events || {}; + if (event in this._events === false) return; + this._events[event].splice(this._events[event].indexOf(fct), 1); + }, + trigger: function(event /* , args... */){ + this._events = this._events || {}; + if (event in this._events === false) return; + for (var i = 0; i < this._events[event].length; i++){ + this._events[event][i].apply(this, Array.prototype.slice.call(arguments, 1)); + } + } + }; + + /** + * Mixin will delegate all MicroEvent.js function in the destination object. + * + * - MicroEvent.mixin(Foobar) will make Foobar able to use MicroEvent + * + * @param {object} the object which will support MicroEvent + */ + MicroEvent.mixin = function(destObject){ + var props = ['on', 'off', 'trigger']; + for (var i = 0; i < props.length; i++){ + destObject.prototype[props[i]] = MicroEvent.prototype[props[i]]; + } + }; + + var IS_MAC = /Mac/.test(navigator.userAgent); + + var KEY_A = 65; + var KEY_COMMA = 188; + var KEY_RETURN = 13; + var KEY_ESC = 27; + var KEY_LEFT = 37; + var KEY_UP = 38; + var KEY_P = 80; + var KEY_RIGHT = 39; + var KEY_DOWN = 40; + var KEY_N = 78; + var KEY_BACKSPACE = 8; + var KEY_DELETE = 46; + var KEY_SHIFT = 16; + var KEY_CMD = IS_MAC ? 91 : 17; + var KEY_CTRL = IS_MAC ? 18 : 17; + var KEY_TAB = 9; + + var TAG_SELECT = 1; + var TAG_INPUT = 2; + + // for now, android support in general is too spotty to support validity + var SUPPORTS_VALIDITY_API = !/android/i.test(window.navigator.userAgent) && !!document.createElement('input').validity; + + + var isset = function(object) { + return typeof object !== 'undefined'; + }; + + /** + * Converts a scalar to its best string representation + * for hash keys and HTML attribute values. + * + * Transformations: + * 'str' -> 'str' + * null -> '' + * undefined -> '' + * true -> '1' + * false -> '0' + * 0 -> '0' + * 1 -> '1' + * + * @param {string} value + * @returns {string|null} + */ + var hash_key = function(value) { + if (typeof value === 'undefined' || value === null) return null; + if (typeof value === 'boolean') return value ? '1' : '0'; + return value + ''; + }; + + /** + * Escapes a string for use within HTML. + * + * @param {string} str + * @returns {string} + */ + var escape_html = function(str) { + return (str + '') + .replace(/&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"'); + }; + + /** + * Escapes "$" characters in replacement strings. + * + * @param {string} str + * @returns {string} + */ + var escape_replace = function(str) { + return (str + '').replace(/\$/g, '$$$$'); + }; + + var hook = {}; + + /** + * Wraps `method` on `self` so that `fn` + * is invoked before the original method. + * + * @param {object} self + * @param {string} method + * @param {function} fn + */ + hook.before = function(self, method, fn) { + var original = self[method]; + self[method] = function() { + fn.apply(self, arguments); + return original.apply(self, arguments); + }; + }; + + /** + * Wraps `method` on `self` so that `fn` + * is invoked after the original method. + * + * @param {object} self + * @param {string} method + * @param {function} fn + */ + hook.after = function(self, method, fn) { + var original = self[method]; + self[method] = function() { + var result = original.apply(self, arguments); + fn.apply(self, arguments); + return result; + }; + }; + + /** + * Wraps `fn` so that it can only be invoked once. + * + * @param {function} fn + * @returns {function} + */ + var once = function(fn) { + var called = false; + return function() { + if (called) return; + called = true; + fn.apply(this, arguments); + }; + }; + + /** + * Wraps `fn` so that it can only be called once + * every `delay` milliseconds (invoked on the falling edge). + * + * @param {function} fn + * @param {int} delay + * @returns {function} + */ + var debounce = function(fn, delay) { + var timeout; + return function() { + var self = this; + var args = arguments; + window.clearTimeout(timeout); + timeout = window.setTimeout(function() { + fn.apply(self, args); + }, delay); + }; + }; + + /** + * Debounce all fired events types listed in `types` + * while executing the provided `fn`. + * + * @param {object} self + * @param {array} types + * @param {function} fn + */ + var debounce_events = function(self, types, fn) { + var type; + var trigger = self.trigger; + var event_args = {}; + + // override trigger method + self.trigger = function() { + var type = arguments[0]; + if (types.indexOf(type) !== -1) { + event_args[type] = arguments; + } else { + return trigger.apply(self, arguments); + } + }; + + // invoke provided function + fn.apply(self, []); + self.trigger = trigger; + + // trigger queued events + for (type in event_args) { + if (event_args.hasOwnProperty(type)) { + trigger.apply(self, event_args[type]); + } + } + }; + + /** + * A workaround for http://bugs.jquery.com/ticket/6696 + * + * @param {object} $parent - Parent element to listen on. + * @param {string} event - Event name. + * @param {string} selector - Descendant selector to filter by. + * @param {function} fn - Event handler. + */ + var watchChildEvent = function($parent, event, selector, fn) { + $parent.on(event, selector, function(e) { + var child = e.target; + while (child && child.parentNode !== $parent[0]) { + child = child.parentNode; + } + e.currentTarget = child; + return fn.apply(this, [e]); + }); + }; + + /** + * Determines the current selection within a text input control. + * Returns an object containing: + * - start + * - length + * + * @param {object} input + * @returns {object} + */ + var getSelection = function(input) { + var result = {}; + if ('selectionStart' in input) { + result.start = input.selectionStart; + result.length = input.selectionEnd - result.start; + } else if (document.selection) { + input.focus(); + var sel = document.selection.createRange(); + var selLen = document.selection.createRange().text.length; + sel.moveStart('character', -input.value.length); + result.start = sel.text.length - selLen; + result.length = selLen; + } + return result; + }; + + /** + * Copies CSS properties from one element to another. + * + * @param {object} $from + * @param {object} $to + * @param {array} properties + */ + var transferStyles = function($from, $to, properties) { + var i, n, styles = {}; + if (properties) { + for (i = 0, n = properties.length; i < n; i++) { + styles[properties[i]] = $from.css(properties[i]); + } + } else { + styles = $from.css(); + } + $to.css(styles); + }; + + /** + * Measures the width of a string within a + * parent element (in pixels). + * + * @param {string} str + * @param {object} $parent + * @returns {int} + */ + var measureString = function(str, $parent) { + if (!str) { + return 0; + } + + var $test = $('').css({ + position: 'absolute', + top: -99999, + left: -99999, + width: 'auto', + padding: 0, + whiteSpace: 'pre' + }).text(str).appendTo('body'); + + transferStyles($parent, $test, [ + 'letterSpacing', + 'fontSize', + 'fontFamily', + 'fontWeight', + 'textTransform' + ]); + + var width = $test.width(); + $test.remove(); + + return width; + }; + + /** + * Sets up an input to grow horizontally as the user + * types. If the value is changed manually, you can + * trigger the "update" handler to resize: + * + * $input.trigger('update'); + * + * @param {object} $input + */ + var autoGrow = function($input) { + var currentWidth = null; + + var update = function(e, options) { + var value, keyCode, printable, placeholder, width; + var shift, character, selection; + e = e || window.event || {}; + options = options || {}; + + if (e.metaKey || e.altKey) return; + if (!options.force && $input.data('grow') === false) return; + + value = $input.val(); + if (e.type && e.type.toLowerCase() === 'keydown') { + keyCode = e.keyCode; + printable = ( + (keyCode >= 97 && keyCode <= 122) || // a-z + (keyCode >= 65 && keyCode <= 90) || // A-Z + (keyCode >= 48 && keyCode <= 57) || // 0-9 + keyCode === 32 // space + ); + + if (keyCode === KEY_DELETE || keyCode === KEY_BACKSPACE) { + selection = getSelection($input[0]); + if (selection.length) { + value = value.substring(0, selection.start) + value.substring(selection.start + selection.length); + } else if (keyCode === KEY_BACKSPACE && selection.start) { + value = value.substring(0, selection.start - 1) + value.substring(selection.start + 1); + } else if (keyCode === KEY_DELETE && typeof selection.start !== 'undefined') { + value = value.substring(0, selection.start) + value.substring(selection.start + 1); + } + } else if (printable) { + shift = e.shiftKey; + character = String.fromCharCode(e.keyCode); + if (shift) character = character.toUpperCase(); + else character = character.toLowerCase(); + value += character; + } + } + + placeholder = $input.attr('placeholder'); + if (!value && placeholder) { + value = placeholder; + } + + width = measureString(value, $input) + 4; + if (width !== currentWidth) { + currentWidth = width; + $input.width(width); + $input.triggerHandler('resize'); + } + }; + + $input.on('keydown keyup update blur', update); + update(); + }; + + var domToString = function(d) { + var tmp = document.createElement('div'); + + tmp.appendChild(d.cloneNode(true)); + + return tmp.innerHTML; + }; + + var logError = function(message, options){ + if(!options) options = {}; + var component = "Selectize"; + + console.error(component + ": " + message) + + if(options.explanation){ + // console.group is undefined in ').addClass(settings.wrapperClass).addClass(classes).addClass(inputMode); + $control = $('
    ').addClass(settings.inputClass).addClass('items').appendTo($wrapper); + $control_input = $('').appendTo($control).attr('tabindex', $input.is(':disabled') ? '-1' : self.tabIndex); + $dropdown_parent = $(settings.dropdownParent || $wrapper); + $dropdown = $('
    ').addClass(settings.dropdownClass).addClass(inputMode).hide().appendTo($dropdown_parent); + $dropdown_content = $('
    ').addClass(settings.dropdownContentClass).appendTo($dropdown); + + if(inputId = $input.attr('id')) { + $control_input.attr('id', inputId + '-selectized'); + $("label[for='"+inputId+"']").attr('for', inputId + '-selectized'); + } + + if(self.settings.copyClassesToDropdown) { + $dropdown.addClass(classes); + } + + $wrapper.css({ + width: $input[0].style.width + }); + + if (self.plugins.names.length) { + classes_plugins = 'plugin-' + self.plugins.names.join(' plugin-'); + $wrapper.addClass(classes_plugins); + $dropdown.addClass(classes_plugins); + } + + if ((settings.maxItems === null || settings.maxItems > 1) && self.tagType === TAG_SELECT) { + $input.attr('multiple', 'multiple'); + } + + if (self.settings.placeholder) { + $control_input.attr('placeholder', settings.placeholder); + } + + // if splitOn was not passed in, construct it from the delimiter to allow pasting universally + if (!self.settings.splitOn && self.settings.delimiter) { + var delimiterEscaped = self.settings.delimiter.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + self.settings.splitOn = new RegExp('\\s*' + delimiterEscaped + '+\\s*'); + } + + if ($input.attr('autocorrect')) { + $control_input.attr('autocorrect', $input.attr('autocorrect')); + } + + if ($input.attr('autocapitalize')) { + $control_input.attr('autocapitalize', $input.attr('autocapitalize')); + } + + self.$wrapper = $wrapper; + self.$control = $control; + self.$control_input = $control_input; + self.$dropdown = $dropdown; + self.$dropdown_content = $dropdown_content; + + $dropdown.on('mouseenter', '[data-selectable]', function() { return self.onOptionHover.apply(self, arguments); }); + $dropdown.on('mousedown click', '[data-selectable]', function() { return self.onOptionSelect.apply(self, arguments); }); + watchChildEvent($control, 'mousedown', '*:not(input)', function() { return self.onItemSelect.apply(self, arguments); }); + autoGrow($control_input); + + $control.on({ + mousedown : function() { return self.onMouseDown.apply(self, arguments); }, + click : function() { return self.onClick.apply(self, arguments); } + }); + + $control_input.on({ + mousedown : function(e) { e.stopPropagation(); }, + keydown : function() { return self.onKeyDown.apply(self, arguments); }, + keyup : function() { return self.onKeyUp.apply(self, arguments); }, + keypress : function() { return self.onKeyPress.apply(self, arguments); }, + resize : function() { self.positionDropdown.apply(self, []); }, + blur : function() { return self.onBlur.apply(self, arguments); }, + focus : function() { self.ignoreBlur = false; return self.onFocus.apply(self, arguments); }, + paste : function() { return self.onPaste.apply(self, arguments); } + }); + + $document.on('keydown' + eventNS, function(e) { + self.isCmdDown = e[IS_MAC ? 'metaKey' : 'ctrlKey']; + self.isCtrlDown = e[IS_MAC ? 'altKey' : 'ctrlKey']; + self.isShiftDown = e.shiftKey; + }); + + $document.on('keyup' + eventNS, function(e) { + if (e.keyCode === KEY_CTRL) self.isCtrlDown = false; + if (e.keyCode === KEY_SHIFT) self.isShiftDown = false; + if (e.keyCode === KEY_CMD) self.isCmdDown = false; + }); + + $document.on('mousedown' + eventNS, function(e) { + if (self.isFocused) { + // prevent events on the dropdown scrollbar from causing the control to blur + if (e.target === self.$dropdown[0] || e.target.parentNode === self.$dropdown[0]) { + return false; + } + // blur on click outside + if (!self.$control.has(e.target).length && e.target !== self.$control[0]) { + self.blur(e.target); + } + } + }); + + $window.on(['scroll' + eventNS, 'resize' + eventNS].join(' '), function() { + if (self.isOpen) { + self.positionDropdown.apply(self, arguments); + } + }); + $window.on('mousemove' + eventNS, function() { + self.ignoreHover = false; + }); + + // store original children and tab index so that they can be + // restored when the destroy() method is called. + this.revertSettings = { + $children : $input.children().detach(), + tabindex : $input.attr('tabindex') + }; + + $input.attr('tabindex', -1).hide().after(self.$wrapper); + + if ($.isArray(settings.items)) { + self.setValue(settings.items); + delete settings.items; + } + + // feature detect for the validation API + if (SUPPORTS_VALIDITY_API) { + $input.on('invalid' + eventNS, function(e) { + e.preventDefault(); + self.isInvalid = true; + self.refreshState(); + }); + } + + self.updateOriginalInput(); + self.refreshItems(); + self.refreshState(); + self.updatePlaceholder(); + self.isSetup = true; + + if ($input.is(':disabled')) { + self.disable(); + } + + self.on('change', this.onChange); + + $input.data('selectize', self); + $input.addClass('selectized'); + self.trigger('initialize'); + + // preload options + if (settings.preload === true) { + self.onSearchChange(''); + } + + }, + + /** + * Sets up default rendering functions. + */ + setupTemplates: function() { + var self = this; + var field_label = self.settings.labelField; + var field_optgroup = self.settings.optgroupLabelField; + + var templates = { + 'optgroup': function(data) { + return '
    ' + data.html + '
    '; + }, + 'optgroup_header': function(data, escape) { + return '
    ' + escape(data[field_optgroup]) + '
    '; + }, + 'option': function(data, escape) { + return '
    ' + escape(data[field_label]) + '
    '; + }, + 'item': function(data, escape) { + return '
    ' + escape(data[field_label]) + '
    '; + }, + 'option_create': function(data, escape) { + return '
    Add ' + escape(data.input) + '…
    '; + } + }; + + self.settings.render = $.extend({}, templates, self.settings.render); + }, + + /** + * Maps fired events to callbacks provided + * in the settings used when creating the control. + */ + setupCallbacks: function() { + var key, fn, callbacks = { + 'initialize' : 'onInitialize', + 'change' : 'onChange', + 'item_add' : 'onItemAdd', + 'item_remove' : 'onItemRemove', + 'clear' : 'onClear', + 'option_add' : 'onOptionAdd', + 'option_remove' : 'onOptionRemove', + 'option_clear' : 'onOptionClear', + 'optgroup_add' : 'onOptionGroupAdd', + 'optgroup_remove' : 'onOptionGroupRemove', + 'optgroup_clear' : 'onOptionGroupClear', + 'dropdown_open' : 'onDropdownOpen', + 'dropdown_close' : 'onDropdownClose', + 'type' : 'onType', + 'load' : 'onLoad', + 'focus' : 'onFocus', + 'blur' : 'onBlur' + }; + + for (key in callbacks) { + if (callbacks.hasOwnProperty(key)) { + fn = this.settings[callbacks[key]]; + if (fn) this.on(key, fn); + } + } + }, + + /** + * Triggered when the main control element + * has a click event. + * + * @param {object} e + * @return {boolean} + */ + onClick: function(e) { + var self = this; + + // necessary for mobile webkit devices (manual focus triggering + // is ignored unless invoked within a click event) + if (!self.isFocused) { + self.focus(); + e.preventDefault(); + } + }, + + /** + * Triggered when the main control element + * has a mouse down event. + * + * @param {object} e + * @return {boolean} + */ + onMouseDown: function(e) { + var self = this; + var defaultPrevented = e.isDefaultPrevented(); + var $target = $(e.target); + + if (self.isFocused) { + // retain focus by preventing native handling. if the + // event target is the input it should not be modified. + // otherwise, text selection within the input won't work. + if (e.target !== self.$control_input[0]) { + if (self.settings.mode === 'single') { + // toggle dropdown + self.isOpen ? self.close() : self.open(); + } else if (!defaultPrevented) { + self.setActiveItem(null); + } + return false; + } + } else { + // give control focus + if (!defaultPrevented) { + window.setTimeout(function() { + self.focus(); + }, 0); + } + } + }, + + /** + * Triggered when the value of the control has been changed. + * This should propagate the event to the original DOM + * input / select element. + */ + onChange: function() { + this.$input.trigger('change'); + }, + + /** + * Triggered on paste. + * + * @param {object} e + * @returns {boolean} + */ + onPaste: function(e) { + var self = this; + + if (self.isFull() || self.isInputHidden || self.isLocked) { + e.preventDefault(); + return; + } + + // If a regex or string is included, this will split the pasted + // input and create Items for each separate value + if (self.settings.splitOn) { + + // Wait for pasted text to be recognized in value + setTimeout(function() { + var pastedText = self.$control_input.val(); + if(!pastedText.match(self.settings.splitOn)){ return } + + var splitInput = $.trim(pastedText).split(self.settings.splitOn); + for (var i = 0, n = splitInput.length; i < n; i++) { + self.createItem(splitInput[i]); + } + }, 0); + } + }, + + /** + * Triggered on keypress. + * + * @param {object} e + * @returns {boolean} + */ + onKeyPress: function(e) { + if (this.isLocked) return e && e.preventDefault(); + var character = String.fromCharCode(e.keyCode || e.which); + if (this.settings.create && this.settings.mode === 'multi' && character === this.settings.delimiter) { + this.createItem(); + e.preventDefault(); + return false; + } + }, + + /** + * Triggered on keydown. + * + * @param {object} e + * @returns {boolean} + */ + onKeyDown: function(e) { + var isInput = e.target === this.$control_input[0]; + var self = this; + + if (self.isLocked) { + if (e.keyCode !== KEY_TAB) { + e.preventDefault(); + } + return; + } + + switch (e.keyCode) { + case KEY_A: + if (self.isCmdDown) { + self.selectAll(); + return; + } + break; + case KEY_ESC: + if (self.isOpen) { + e.preventDefault(); + e.stopPropagation(); + self.close(); + } + return; + case KEY_N: + if (!e.ctrlKey || e.altKey) break; + case KEY_DOWN: + if (!self.isOpen && self.hasOptions) { + self.open(); + } else if (self.$activeOption) { + self.ignoreHover = true; + var $next = self.getAdjacentOption(self.$activeOption, 1); + if ($next.length) self.setActiveOption($next, true, true); + } + e.preventDefault(); + return; + case KEY_P: + if (!e.ctrlKey || e.altKey) break; + case KEY_UP: + if (self.$activeOption) { + self.ignoreHover = true; + var $prev = self.getAdjacentOption(self.$activeOption, -1); + if ($prev.length) self.setActiveOption($prev, true, true); + } + e.preventDefault(); + return; + case KEY_RETURN: + if (self.isOpen && self.$activeOption) { + self.onOptionSelect({currentTarget: self.$activeOption}); + e.preventDefault(); + } + return; + case KEY_LEFT: + self.advanceSelection(-1, e); + return; + case KEY_RIGHT: + self.advanceSelection(1, e); + return; + case KEY_TAB: + if (self.settings.selectOnTab && self.isOpen && self.$activeOption) { + self.onOptionSelect({currentTarget: self.$activeOption}); + + // Default behaviour is to jump to the next field, we only want this + // if the current field doesn't accept any more entries + if (!self.isFull()) { + e.preventDefault(); + } + } + if (self.settings.create && self.createItem()) { + e.preventDefault(); + } + return; + case KEY_BACKSPACE: + case KEY_DELETE: + self.deleteSelection(e); + return; + } + + if ((self.isFull() || self.isInputHidden) && !(IS_MAC ? e.metaKey : e.ctrlKey)) { + e.preventDefault(); + return; + } + }, + + /** + * Triggered on keyup. + * + * @param {object} e + * @returns {boolean} + */ + onKeyUp: function(e) { + var self = this; + + if (self.isLocked) return e && e.preventDefault(); + var value = self.$control_input.val() || ''; + if (self.lastValue !== value) { + self.lastValue = value; + self.onSearchChange(value); + self.refreshOptions(); + self.trigger('type', value); + } + }, + + /** + * Invokes the user-provide option provider / loader. + * + * Note: this function is debounced in the Selectize + * constructor (by `settings.loadThrottle` milliseconds) + * + * @param {string} value + */ + onSearchChange: function(value) { + var self = this; + var fn = self.settings.load; + if (!fn) return; + if (self.loadedSearches.hasOwnProperty(value)) return; + self.loadedSearches[value] = true; + self.load(function(callback) { + fn.apply(self, [value, callback]); + }); + }, + + /** + * Triggered on focus. + * + * @param {object} e (optional) + * @returns {boolean} + */ + onFocus: function(e) { + var self = this; + var wasFocused = self.isFocused; + + if (self.isDisabled) { + self.blur(); + e && e.preventDefault(); + return false; + } + + if (self.ignoreFocus) return; + self.isFocused = true; + if (self.settings.preload === 'focus') self.onSearchChange(''); + + if (!wasFocused) self.trigger('focus'); + + if (!self.$activeItems.length) { + self.showInput(); + self.setActiveItem(null); + self.refreshOptions(!!self.settings.openOnFocus); + } + + self.refreshState(); + }, + + /** + * Triggered on blur. + * + * @param {object} e + * @param {Element} dest + */ + onBlur: function(e, dest) { + var self = this; + if (!self.isFocused) return; + self.isFocused = false; + + if (self.ignoreFocus) { + return; + } else if (!self.ignoreBlur && document.activeElement === self.$dropdown_content[0]) { + // necessary to prevent IE closing the dropdown when the scrollbar is clicked + self.ignoreBlur = true; + self.onFocus(e); + return; + } + + var deactivate = function() { + self.close(); + self.setTextboxValue(''); + self.setActiveItem(null); + self.setActiveOption(null); + self.setCaret(self.items.length); + self.refreshState(); + + // IE11 bug: element still marked as active + dest && dest.focus && dest.focus(); + + self.ignoreFocus = false; + self.trigger('blur'); + }; + + self.ignoreFocus = true; + if (self.settings.create && self.settings.createOnBlur) { + self.createItem(null, false, deactivate); + } else { + deactivate(); + } + }, + + /** + * Triggered when the user rolls over + * an option in the autocomplete dropdown menu. + * + * @param {object} e + * @returns {boolean} + */ + onOptionHover: function(e) { + if (this.ignoreHover) return; + this.setActiveOption(e.currentTarget, false); + }, + + /** + * Triggered when the user clicks on an option + * in the autocomplete dropdown menu. + * + * @param {object} e + * @returns {boolean} + */ + onOptionSelect: function(e) { + var value, $target, $option, self = this; + + if (e.preventDefault) { + e.preventDefault(); + e.stopPropagation(); + } + + $target = $(e.currentTarget); + if ($target.hasClass('create')) { + self.createItem(null, function() { + if (self.settings.closeAfterSelect) { + self.close(); + } + }); + } else { + value = $target.attr('data-value'); + if (typeof value !== 'undefined') { + self.lastQuery = null; + self.setTextboxValue(''); + self.addItem(value); + if (self.settings.closeAfterSelect) { + self.close(); + } else if (!self.settings.hideSelected && e.type && /mouse/.test(e.type)) { + self.setActiveOption(self.getOption(value)); + } + } + } + }, + + /** + * Triggered when the user clicks on an item + * that has been selected. + * + * @param {object} e + * @returns {boolean} + */ + onItemSelect: function(e) { + var self = this; + + if (self.isLocked) return; + if (self.settings.mode === 'multi') { + e.preventDefault(); + self.setActiveItem(e.currentTarget, e); + } + }, + + /** + * Invokes the provided method that provides + * results to a callback---which are then added + * as options to the control. + * + * @param {function} fn + */ + load: function(fn) { + var self = this; + var $wrapper = self.$wrapper.addClass(self.settings.loadingClass); + + self.loading++; + fn.apply(self, [function(results) { + self.loading = Math.max(self.loading - 1, 0); + if (results && results.length) { + self.addOption(results); + self.refreshOptions(self.isFocused && !self.isInputHidden); + } + if (!self.loading) { + $wrapper.removeClass(self.settings.loadingClass); + } + self.trigger('load', results); + }]); + }, + + /** + * Sets the input field of the control to the specified value. + * + * @param {string} value + */ + setTextboxValue: function(value) { + var $input = this.$control_input; + var changed = $input.val() !== value; + if (changed) { + $input.val(value).triggerHandler('update'); + this.lastValue = value; + } + }, + + /** + * Returns the value of the control. If multiple items + * can be selected (e.g. or + * element to reflect the current state. + */ + updateOriginalInput: function(opts) { + var i, n, options, label, self = this; + opts = opts || {}; + + if (self.tagType === TAG_SELECT) { + options = []; + for (i = 0, n = self.items.length; i < n; i++) { + label = self.options[self.items[i]][self.settings.labelField] || ''; + options.push(''); + } + if (!options.length && !this.$input.attr('multiple')) { + options.push(''); + } + self.$input.html(options.join('')); + } else { + self.$input.val(self.getValue()); + self.$input.attr('value',self.$input.val()); + } + + if (self.isSetup) { + if (!opts.silent) { + self.trigger('change', self.$input.val()); + } + } + }, + + /** + * Shows/hide the input placeholder depending + * on if there items in the list already. + */ + updatePlaceholder: function() { + if (!this.settings.placeholder) return; + var $input = this.$control_input; + + if (this.items.length) { + $input.removeAttr('placeholder'); + } else { + $input.attr('placeholder', this.settings.placeholder); + } + $input.triggerHandler('update', {force: true}); + }, + + /** + * Shows the autocomplete dropdown containing + * the available options. + */ + open: function() { + var self = this; + + if (self.isLocked || self.isOpen || (self.settings.mode === 'multi' && self.isFull())) return; + self.focus(); + self.isOpen = true; + self.refreshState(); + self.$dropdown.css({visibility: 'hidden', display: 'block'}); + self.positionDropdown(); + self.$dropdown.css({visibility: 'visible'}); + self.trigger('dropdown_open', self.$dropdown); + }, + + /** + * Closes the autocomplete dropdown menu. + */ + close: function() { + var self = this; + var trigger = self.isOpen; + + if (self.settings.mode === 'single' && self.items.length) { + self.hideInput(); + self.$control_input.blur(); // close keyboard on iOS + } + + self.isOpen = false; + self.$dropdown.hide(); + self.setActiveOption(null); + self.refreshState(); + + if (trigger) self.trigger('dropdown_close', self.$dropdown); + }, + + /** + * Calculates and applies the appropriate + * position of the dropdown. + */ + positionDropdown: function() { + var $control = this.$control; + var offset = this.settings.dropdownParent === 'body' ? $control.offset() : $control.position(); + offset.top += $control.outerHeight(true); + + this.$dropdown.css({ + width : $control.outerWidth(), + top : offset.top, + left : offset.left + }); + }, + + /** + * Resets / clears all selected items + * from the control. + * + * @param {boolean} silent + */ + clear: function(silent) { + var self = this; + + if (!self.items.length) return; + self.$control.children(':not(input)').remove(); + self.items = []; + self.lastQuery = null; + self.setCaret(0); + self.setActiveItem(null); + self.updatePlaceholder(); + self.updateOriginalInput({silent: silent}); + self.refreshState(); + self.showInput(); + self.trigger('clear'); + }, + + /** + * A helper method for inserting an element + * at the current caret position. + * + * @param {object} $el + */ + insertAtCaret: function($el) { + var caret = Math.min(this.caretPos, this.items.length); + if (caret === 0) { + this.$control.prepend($el); + } else { + $(this.$control[0].childNodes[caret]).before($el); + } + this.setCaret(caret + 1); + }, + + /** + * Removes the current selected item(s). + * + * @param {object} e (optional) + * @returns {boolean} + */ + deleteSelection: function(e) { + var i, n, direction, selection, values, caret, option_select, $option_select, $tail; + var self = this; + + direction = (e && e.keyCode === KEY_BACKSPACE) ? -1 : 1; + selection = getSelection(self.$control_input[0]); + + if (self.$activeOption && !self.settings.hideSelected) { + option_select = self.getAdjacentOption(self.$activeOption, -1).attr('data-value'); + } + + // determine items that will be removed + values = []; + + if (self.$activeItems.length) { + $tail = self.$control.children('.active:' + (direction > 0 ? 'last' : 'first')); + caret = self.$control.children(':not(input)').index($tail); + if (direction > 0) { caret++; } + + for (i = 0, n = self.$activeItems.length; i < n; i++) { + values.push($(self.$activeItems[i]).attr('data-value')); + } + if (e) { + e.preventDefault(); + e.stopPropagation(); + } + } else if ((self.isFocused || self.settings.mode === 'single') && self.items.length) { + if (direction < 0 && selection.start === 0 && selection.length === 0) { + values.push(self.items[self.caretPos - 1]); + } else if (direction > 0 && selection.start === self.$control_input.val().length) { + values.push(self.items[self.caretPos]); + } + } + + // allow the callback to abort + if (!values.length || (typeof self.settings.onDelete === 'function' && self.settings.onDelete.apply(self, [values]) === false)) { + return false; + } + + // perform removal + if (typeof caret !== 'undefined') { + self.setCaret(caret); + } + while (values.length) { + self.removeItem(values.pop()); + } + + self.showInput(); + self.positionDropdown(); + self.refreshOptions(true); + + // select previous option + if (option_select) { + $option_select = self.getOption(option_select); + if ($option_select.length) { + self.setActiveOption($option_select); + } + } + + return true; + }, + + /** + * Selects the previous / next item (depending + * on the `direction` argument). + * + * > 0 - right + * < 0 - left + * + * @param {int} direction + * @param {object} e (optional) + */ + advanceSelection: function(direction, e) { + var tail, selection, idx, valueLength, cursorAtEdge, $tail; + var self = this; + + if (direction === 0) return; + if (self.rtl) direction *= -1; + + tail = direction > 0 ? 'last' : 'first'; + selection = getSelection(self.$control_input[0]); + + if (self.isFocused && !self.isInputHidden) { + valueLength = self.$control_input.val().length; + cursorAtEdge = direction < 0 + ? selection.start === 0 && selection.length === 0 + : selection.start === valueLength; + + if (cursorAtEdge && !valueLength) { + self.advanceCaret(direction, e); + } + } else { + $tail = self.$control.children('.active:' + tail); + if ($tail.length) { + idx = self.$control.children(':not(input)').index($tail); + self.setActiveItem(null); + self.setCaret(direction > 0 ? idx + 1 : idx); + } + } + }, + + /** + * Moves the caret left / right. + * + * @param {int} direction + * @param {object} e (optional) + */ + advanceCaret: function(direction, e) { + var self = this, fn, $adj; + + if (direction === 0) return; + + fn = direction > 0 ? 'next' : 'prev'; + if (self.isShiftDown) { + $adj = self.$control_input[fn](); + if ($adj.length) { + self.hideInput(); + self.setActiveItem($adj); + e && e.preventDefault(); + } + } else { + self.setCaret(self.caretPos + direction); + } + }, + + /** + * Moves the caret to the specified index. + * + * @param {int} i + */ + setCaret: function(i) { + var self = this; + + if (self.settings.mode === 'single') { + i = self.items.length; + } else { + i = Math.max(0, Math.min(self.items.length, i)); + } + + if(!self.isPending) { + // the input must be moved by leaving it in place and moving the + // siblings, due to the fact that focus cannot be restored once lost + // on mobile webkit devices + var j, n, fn, $children, $child; + $children = self.$control.children(':not(input)'); + for (j = 0, n = $children.length; j < n; j++) { + $child = $($children[j]).detach(); + if (j < i) { + self.$control_input.before($child); + } else { + self.$control.append($child); + } + } + } + + self.caretPos = i; + }, + + /** + * Disables user input on the control. Used while + * items are being asynchronously created. + */ + lock: function() { + this.close(); + this.isLocked = true; + this.refreshState(); + }, + + /** + * Re-enables user input on the control. + */ + unlock: function() { + this.isLocked = false; + this.refreshState(); + }, + + /** + * Disables user input on the control completely. + * While disabled, it cannot receive focus. + */ + disable: function() { + var self = this; + self.$input.prop('disabled', true); + self.$control_input.prop('disabled', true).prop('tabindex', -1); + self.isDisabled = true; + self.lock(); + }, + + /** + * Enables the control so that it can respond + * to focus and user input. + */ + enable: function() { + var self = this; + self.$input.prop('disabled', false); + self.$control_input.prop('disabled', false).prop('tabindex', self.tabIndex); + self.isDisabled = false; + self.unlock(); + }, + + /** + * Completely destroys the control and + * unbinds all event listeners so that it can + * be garbage collected. + */ + destroy: function() { + var self = this; + var eventNS = self.eventNS; + var revertSettings = self.revertSettings; + + self.trigger('destroy'); + self.off(); + self.$wrapper.remove(); + self.$dropdown.remove(); + + self.$input + .html('') + .append(revertSettings.$children) + .removeAttr('tabindex') + .removeClass('selectized') + .attr({tabindex: revertSettings.tabindex}) + .show(); + + self.$control_input.removeData('grow'); + self.$input.removeData('selectize'); + + $(window).off(eventNS); + $(document).off(eventNS); + $(document.body).off(eventNS); + + delete self.$input[0].selectize; + }, + + /** + * A helper method for rendering "item" and + * "option" templates, given the data. + * + * @param {string} templateName + * @param {object} data + * @returns {string} + */ + render: function(templateName, data) { + var value, id, label; + var html = ''; + var cache = false; + var self = this; + var regex_tag = /^[\t \r\n]*<([a-z][a-z0-9\-_]*(?:\:[a-z][a-z0-9\-_]*)?)/i; + + if (templateName === 'option' || templateName === 'item') { + value = hash_key(data[self.settings.valueField]); + cache = !!value; + } + + // pull markup from cache if it exists + if (cache) { + if (!isset(self.renderCache[templateName])) { + self.renderCache[templateName] = {}; + } + if (self.renderCache[templateName].hasOwnProperty(value)) { + return self.renderCache[templateName][value]; + } + } + + // render markup + html = $(self.settings.render[templateName].apply(this, [data, escape_html])); + + // add mandatory attributes + if (templateName === 'option' || templateName === 'option_create') { + html.attr('data-selectable', ''); + } + else if (templateName === 'optgroup') { + id = data[self.settings.optgroupValueField] || ''; + html.attr('data-group', id); + } + if (templateName === 'option' || templateName === 'item') { + html.attr('data-value', value || ''); + } + + // update cache + if (cache) { + self.renderCache[templateName][value] = html[0]; + } + + return html[0]; + }, + + /** + * Clears the render cache for a template. If + * no template is given, clears all render + * caches. + * + * @param {string} templateName + */ + clearCache: function(templateName) { + var self = this; + if (typeof templateName === 'undefined') { + self.renderCache = {}; + } else { + delete self.renderCache[templateName]; + } + }, + + /** + * Determines whether or not to display the + * create item prompt, given a user input. + * + * @param {string} input + * @return {boolean} + */ + canCreate: function(input) { + var self = this; + if (!self.settings.create) return false; + var filter = self.settings.createFilter; + return input.length + && (typeof filter !== 'function' || filter.apply(self, [input])) + && (typeof filter !== 'string' || new RegExp(filter).test(input)) + && (!(filter instanceof RegExp) || filter.test(input)); + } + + }); + + + Selectize.count = 0; + Selectize.defaults = { + options: [], + optgroups: [], + + plugins: [], + delimiter: ',', + splitOn: null, // regexp or string for splitting up values from a paste command + persist: true, + diacritics: true, + create: false, + createOnBlur: false, + createFilter: null, + highlight: true, + openOnFocus: true, + maxOptions: 1000, + maxItems: null, + hideSelected: null, + addPrecedence: false, + selectOnTab: false, + preload: false, + allowEmptyOption: false, + closeAfterSelect: false, + + scrollDuration: 60, + loadThrottle: 300, + loadingClass: 'loading', + + dataAttr: 'data-data', + optgroupField: 'optgroup', + valueField: 'value', + labelField: 'text', + optgroupLabelField: 'label', + optgroupValueField: 'value', + lockOptgroupOrder: false, + + sortField: '$order', + searchField: ['text'], + searchConjunction: 'and', + + mode: null, + wrapperClass: 'selectize-control', + inputClass: 'selectize-input', + dropdownClass: 'selectize-dropdown', + dropdownContentClass: 'selectize-dropdown-content', + + dropdownParent: null, + + copyClassesToDropdown: true, + + /* + load : null, // function(query, callback) { ... } + score : null, // function(search) { ... } + onInitialize : null, // function() { ... } + onChange : null, // function(value) { ... } + onItemAdd : null, // function(value, $item) { ... } + onItemRemove : null, // function(value) { ... } + onClear : null, // function() { ... } + onOptionAdd : null, // function(value, data) { ... } + onOptionRemove : null, // function(value) { ... } + onOptionClear : null, // function() { ... } + onOptionGroupAdd : null, // function(id, data) { ... } + onOptionGroupRemove : null, // function(id) { ... } + onOptionGroupClear : null, // function() { ... } + onDropdownOpen : null, // function($dropdown) { ... } + onDropdownClose : null, // function($dropdown) { ... } + onType : null, // function(str) { ... } + onDelete : null, // function(values) { ... } + */ + + render: { + /* + item: null, + optgroup: null, + optgroup_header: null, + option: null, + option_create: null + */ + } + }; + + + $.fn.selectize = function(settings_user) { + var defaults = $.fn.selectize.defaults; + var settings = $.extend({}, defaults, settings_user); + var attr_data = settings.dataAttr; + var field_label = settings.labelField; + var field_value = settings.valueField; + var field_optgroup = settings.optgroupField; + var field_optgroup_label = settings.optgroupLabelField; + var field_optgroup_value = settings.optgroupValueField; + + /** + * Initializes selectize from a element. + * + * @param {object} $input + * @param {object} settings_element + */ + var init_textbox = function($input, settings_element) { + var i, n, values, option; + + var data_raw = $input.attr(attr_data); + + if (!data_raw) { + var value = $.trim($input.val() || ''); + if (!settings.allowEmptyOption && !value.length) return; + values = value.split(settings.delimiter); + for (i = 0, n = values.length; i < n; i++) { + option = {}; + option[field_label] = values[i]; + option[field_value] = values[i]; + settings_element.options.push(option); + } + settings_element.items = values; + } else { + settings_element.options = JSON.parse(data_raw); + for (i = 0, n = settings_element.options.length; i < n; i++) { + settings_element.items.push(settings_element.options[i][field_value]); + } + } + }; + + /** + * Initializes selectize from a ').appendTo(c).attr("tabindex",u.is(":disabled")?"-1":m.tabIndex),h=a(n.dropdownParent||b),e=a("
    ").addClass(n.dropdownClass).addClass(i).hide().appendTo(h),g=a("
    ").addClass(n.dropdownContentClass).appendTo(e),(l=u.attr("id"))&&(d.attr("id",l+"-selectized"),a("label[for='"+l+"']").attr("for",l+"-selectized")),m.settings.copyClassesToDropdown&&e.addClass(j),b.css({width:u[0].style.width}),m.plugins.names.length&&(k="plugin-"+m.plugins.names.join(" plugin-"),b.addClass(k),e.addClass(k)),(null===n.maxItems||n.maxItems>1)&&m.tagType===v&&u.attr("multiple","multiple"),m.settings.placeholder&&d.attr("placeholder",n.placeholder),!m.settings.splitOn&&m.settings.delimiter){var w=m.settings.delimiter.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&");m.settings.splitOn=new RegExp("\\s*"+w+"+\\s*")}u.attr("autocorrect")&&d.attr("autocorrect",u.attr("autocorrect")),u.attr("autocapitalize")&&d.attr("autocapitalize",u.attr("autocapitalize")),m.$wrapper=b,m.$control=c,m.$control_input=d,m.$dropdown=e,m.$dropdown_content=g,e.on("mouseenter","[data-selectable]",function(){return m.onOptionHover.apply(m,arguments)}),e.on("mousedown click","[data-selectable]",function(){return m.onOptionSelect.apply(m,arguments)}),F(c,"mousedown","*:not(input)",function(){return m.onItemSelect.apply(m,arguments)}),J(d),c.on({mousedown:function(){return m.onMouseDown.apply(m,arguments)},click:function(){return m.onClick.apply(m,arguments)}}),d.on({mousedown:function(a){a.stopPropagation()},keydown:function(){return m.onKeyDown.apply(m,arguments)},keyup:function(){return m.onKeyUp.apply(m,arguments)},keypress:function(){return m.onKeyPress.apply(m,arguments)},resize:function(){m.positionDropdown.apply(m,[])},blur:function(){return m.onBlur.apply(m,arguments)},focus:function(){return m.ignoreBlur=!1,m.onFocus.apply(m,arguments)},paste:function(){return m.onPaste.apply(m,arguments)}}),q.on("keydown"+o,function(a){m.isCmdDown=a[f?"metaKey":"ctrlKey"],m.isCtrlDown=a[f?"altKey":"ctrlKey"],m.isShiftDown=a.shiftKey}),q.on("keyup"+o,function(a){a.keyCode===t&&(m.isCtrlDown=!1),a.keyCode===r&&(m.isShiftDown=!1),a.keyCode===s&&(m.isCmdDown=!1)}),q.on("mousedown"+o,function(a){if(m.isFocused){if(a.target===m.$dropdown[0]||a.target.parentNode===m.$dropdown[0])return!1;m.$control.has(a.target).length||a.target===m.$control[0]||m.blur(a.target)}}),p.on(["scroll"+o,"resize"+o].join(" "),function(){m.isOpen&&m.positionDropdown.apply(m,arguments)}),p.on("mousemove"+o,function(){m.ignoreHover=!1}),this.revertSettings={$children:u.children().detach(),tabindex:u.attr("tabindex")},u.attr("tabindex",-1).hide().after(m.$wrapper),a.isArray(n.items)&&(m.setValue(n.items),delete n.items),x&&u.on("invalid"+o,function(a){a.preventDefault(),m.isInvalid=!0,m.refreshState()}),m.updateOriginalInput(),m.refreshItems(),m.refreshState(),m.updatePlaceholder(),m.isSetup=!0,u.is(":disabled")&&m.disable(),m.on("change",this.onChange),u.data("selectize",m),u.addClass("selectized"),m.trigger("initialize"),n.preload===!0&&m.onSearchChange("")},setupTemplates:function(){var b=this,c=b.settings.labelField,d=b.settings.optgroupLabelField,e={optgroup:function(a){return'
    '+a.html+"
    "},optgroup_header:function(a,b){return'
    '+b(a[d])+"
    "},option:function(a,b){return'
    '+b(a[c])+"
    "},item:function(a,b){return'
    '+b(a[c])+"
    "},option_create:function(a,b){return'
    Add '+b(a.input)+"…
    "}};b.settings.render=a.extend({},e,b.settings.render)},setupCallbacks:function(){var a,b,c={initialize:"onInitialize",change:"onChange",item_add:"onItemAdd",item_remove:"onItemRemove",clear:"onClear",option_add:"onOptionAdd",option_remove:"onOptionRemove",option_clear:"onOptionClear",optgroup_add:"onOptionGroupAdd",optgroup_remove:"onOptionGroupRemove",optgroup_clear:"onOptionGroupClear",dropdown_open:"onDropdownOpen",dropdown_close:"onDropdownClose",type:"onType",load:"onLoad",focus:"onFocus",blur:"onBlur"};for(a in c)c.hasOwnProperty(a)&&(b=this.settings[c[a]],b&&this.on(a,b))},onClick:function(a){var b=this;b.isFocused||(b.focus(),a.preventDefault())},onMouseDown:function(b){var c=this,d=b.isDefaultPrevented();a(b.target);if(c.isFocused){if(b.target!==c.$control_input[0])return"single"===c.settings.mode?c.isOpen?c.close():c.open():d||c.setActiveItem(null),!1}else d||window.setTimeout(function(){c.focus()},0)},onChange:function(){this.$input.trigger("change")},onPaste:function(b){var c=this;return c.isFull()||c.isInputHidden||c.isLocked?void b.preventDefault():void(c.settings.splitOn&&setTimeout(function(){var b=c.$control_input.val();if(b.match(c.settings.splitOn))for(var d=a.trim(b).split(c.settings.splitOn),e=0,f=d.length;eh&&(j=g,g=h,h=j),e=g;e<=h;e++)i=l.$control[0].childNodes[e],l.$activeItems.indexOf(i)===-1&&(a(i).addClass("active"),l.$activeItems.push(i));c.preventDefault()}else"mousedown"===d&&l.isCtrlDown||"keydown"===d&&this.isShiftDown?b.hasClass("active")?(f=l.$activeItems.indexOf(b[0]),l.$activeItems.splice(f,1),b.removeClass("active")):l.$activeItems.push(b.addClass("active")[0]):(a(l.$activeItems).removeClass("active"),l.$activeItems=[b.addClass("active")[0]]);l.hideInput(),this.isFocused||l.focus()}},setActiveOption:function(b,c,d){var e,f,g,h,i,j=this;j.$activeOption&&j.$activeOption.removeClass("active"),j.$activeOption=null,b=a(b),b.length&&(j.$activeOption=b.addClass("active"),!c&&y(c)||(e=j.$dropdown_content.height(),f=j.$activeOption.outerHeight(!0),c=j.$dropdown_content.scrollTop()||0,g=j.$activeOption.offset().top-j.$dropdown_content.offset().top+c,h=g,i=g-e+f,g+f>e+c?j.$dropdown_content.stop().animate({scrollTop:i},d?j.settings.scrollDuration:0):g=0;c--)f.items.indexOf(z(d.items[c].id))!==-1&&d.items.splice(c,1);return d},refreshOptions:function(b){var c,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;"undefined"==typeof b&&(b=!0);var t=this,u=a.trim(t.$control_input.val()),v=t.search(u),w=t.$dropdown_content,x=t.$activeOption&&z(t.$activeOption.attr("data-value"));for(g=v.items.length,"number"==typeof t.settings.maxOptions&&(g=Math.min(g,t.settings.maxOptions)),h={},i=[],c=0;c0||p,t.hasOptions?(v.items.length>0?(r=x&&t.getOption(x),r&&r.length?q=r:"single"===t.settings.mode&&t.items.length&&(q=t.getOption(t.items[0])),q&&q.length||(q=s&&!t.settings.addPrecedence?t.getAdjacentOption(s,1):w.find("[data-selectable]:first"))):q=s,t.setActiveOption(q),b&&!t.isOpen&&t.open()):(t.setActiveOption(null),b&&t.isOpen&&t.close())},addOption:function(b){var c,d,e,f=this;if(a.isArray(b))for(c=0,d=b.length;c=0&&e0),b.$control_input.data("grow",!c&&!d)},isFull:function(){return null!==this.settings.maxItems&&this.items.length>=this.settings.maxItems},updateOriginalInput:function(a){var b,c,d,e,f=this;if(a=a||{},f.tagType===v){for(d=[],b=0,c=f.items.length;b'+A(e)+"");d.length||this.$input.attr("multiple")||d.push(''),f.$input.html(d.join(""))}else f.$input.val(f.getValue()),f.$input.attr("value",f.$input.val());f.isSetup&&(a.silent||f.trigger("change",f.$input.val()))},updatePlaceholder:function(){if(this.settings.placeholder){var a=this.$control_input;this.items.length?a.removeAttr("placeholder"):a.attr("placeholder",this.settings.placeholder),a.triggerHandler("update",{force:!0})}},open:function(){var a=this;a.isLocked||a.isOpen||"multi"===a.settings.mode&&a.isFull()||(a.focus(),a.isOpen=!0,a.refreshState(),a.$dropdown.css({visibility:"hidden",display:"block"}),a.positionDropdown(),a.$dropdown.css({visibility:"visible"}),a.trigger("dropdown_open",a.$dropdown))},close:function(){var a=this,b=a.isOpen;"single"===a.settings.mode&&a.items.length&&(a.hideInput(),a.$control_input.blur()),a.isOpen=!1,a.$dropdown.hide(),a.setActiveOption(null),a.refreshState(),b&&a.trigger("dropdown_close",a.$dropdown)},positionDropdown:function(){var a=this.$control,b="body"===this.settings.dropdownParent?a.offset():a.position();b.top+=a.outerHeight(!0),this.$dropdown.css({width:a.outerWidth(),top:b.top,left:b.left})},clear:function(a){var b=this;b.items.length&&(b.$control.children(":not(input)").remove(),b.items=[],b.lastQuery=null,b.setCaret(0),b.setActiveItem(null),b.updatePlaceholder(),b.updateOriginalInput({silent:a}),b.refreshState(),b.showInput(),b.trigger("clear"))},insertAtCaret:function(b){var c=Math.min(this.caretPos,this.items.length);0===c?this.$control.prepend(b):a(this.$control[0].childNodes[c]).before(b),this.setCaret(c+1)},deleteSelection:function(b){var c,d,e,f,g,h,i,j,k,l=this;if(e=b&&b.keyCode===p?-1:1,f=G(l.$control_input[0]),l.$activeOption&&!l.settings.hideSelected&&(i=l.getAdjacentOption(l.$activeOption,-1).attr("data-value")),g=[],l.$activeItems.length){for(k=l.$control.children(".active:"+(e>0?"last":"first")),h=l.$control.children(":not(input)").index(k),e>0&&h++,c=0,d=l.$activeItems.length;c0&&f.start===l.$control_input.val().length&&g.push(l.items[l.caretPos]));if(!g.length||"function"==typeof l.settings.onDelete&&l.settings.onDelete.apply(l,[g])===!1)return!1;for("undefined"!=typeof h&&l.setCaret(h);g.length;)l.removeItem(g.pop());return l.showInput(),l.positionDropdown(),l.refreshOptions(!0),i&&(j=l.getOption(i),j.length&&l.setActiveOption(j)),!0},advanceSelection:function(a,b){var c,d,e,f,g,h,i=this;0!==a&&(i.rtl&&(a*=-1),c=a>0?"last":"first",d=G(i.$control_input[0]),i.isFocused&&!i.isInputHidden?(f=i.$control_input.val().length,g=a<0?0===d.start&&0===d.length:d.start===f,g&&!f&&i.advanceCaret(a,b)):(h=i.$control.children(".active:"+c),h.length&&(e=i.$control.children(":not(input)").index(h),i.setActiveItem(null),i.setCaret(a>0?e+1:e))))},advanceCaret:function(a,b){var c,d,e=this;0!==a&&(c=a>0?"next":"prev",e.isShiftDown?(d=e.$control_input[c](),d.length&&(e.hideInput(),e.setActiveItem(d),b&&b.preventDefault())):e.setCaret(e.caretPos+a))},setCaret:function(b){var c=this;if(b="single"===c.settings.mode?c.items.length:Math.max(0,Math.min(c.items.length,b)),!c.isPending){var d,e,f,g;for(f=c.$control.children(":not(input)"),d=0,e=f.length;d
    '+a.title+'×
    '}},b),c.setup=function(){var d=c.setup;return function(){d.apply(c,arguments),c.$dropdown_header=a(b.html(b)),c.$dropdown.prepend(c.$dropdown_header)}}()}),M.define("optgroup_columns",function(b){var c=this;b=a.extend({equalizeWidth:!0,equalizeHeight:!0},b),this.getAdjacentOption=function(b,c){var d=b.closest("[data-group]").find("[data-selectable]"),e=d.index(b)+c;return e>=0&&e
    ',a=a.firstChild,c.body.appendChild(a),b=d.width=a.offsetWidth-a.clientWidth,c.body.removeChild(a)),b},e=function(){var e,f,g,h,i,j,k;if(k=a("[data-group]",c.$dropdown_content),f=k.length,f&&c.$dropdown_content.width()){if(b.equalizeHeight){for(g=0,e=0;e1&&(i=j-h*(f-1),k.eq(f-1).css({width:i})))}};(b.equalizeHeight||b.equalizeWidth)&&(B.after(this,"positionDropdown",e),B.after(this,"refreshOptions",e))}),M.define("remove_button",function(b){b=a.extend({label:"×",title:"Remove",className:"remove",append:!0},b);var c=function(b,c){c.className="remove-single";var d=b,e=''+c.label+"",f=function(a,b){return a+b};b.setup=function(){var g=d.setup;return function(){if(c.append){var h=a(d.$input.context).attr("id"),i=(a("#"+h),d.settings.render.item);d.settings.render.item=function(a){return f(i.apply(b,arguments),e)}}g.apply(b,arguments),b.$control.on("click","."+c.className,function(a){a.preventDefault(),d.isLocked||d.clear()})}}()},d=function(b,c){var d=b,e=''+c.label+"",f=function(a,b){var c=a.search(/(<\/[^>]+>\s*)$/);return a.substring(0,c)+b+a.substring(c)};b.setup=function(){var g=d.setup;return function(){if(c.append){var h=d.settings.render.item;d.settings.render.item=function(a){return f(h.apply(b,arguments),e)}}g.apply(b,arguments),b.$control.on("click","."+c.className,function(b){if(b.preventDefault(),!d.isLocked){var c=a(b.currentTarget).parent();d.setActiveItem(c),d.deleteSelection()&&d.setCaret(d.items.length)}})}}()};return"single"===this.settings.mode?void c(this,b):void d(this,b)}),M.define("restore_on_backspace",function(a){var b=this;a.text=a.text||function(a){return a[this.settings.labelField]},this.onKeyDown=function(){var c=b.onKeyDown;return function(b){var d,e;return b.keyCode===p&&""===this.$control_input.val()&&!this.$activeItems.length&&(d=this.caretPos-1,d>=0&&d + */ + +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + define('sifter', factory); + } else if (typeof exports === 'object') { + module.exports = factory(); + } else { + root.Sifter = factory(); + } +}(this, function() { + + /** + * Textually searches arrays and hashes of objects + * by property (or multiple properties). Designed + * specifically for autocomplete. + * + * @constructor + * @param {array|object} items + * @param {object} items + */ + var Sifter = function(items, settings) { + this.items = items; + this.settings = settings || {diacritics: true}; + }; + + /** + * Splits a search string into an array of individual + * regexps to be used to match results. + * + * @param {string} query + * @returns {array} + */ + Sifter.prototype.tokenize = function(query) { + query = trim(String(query || '').toLowerCase()); + if (!query || !query.length) return []; + + var i, n, regex, letter; + var tokens = []; + var words = query.split(/ +/); + + for (i = 0, n = words.length; i < n; i++) { + regex = escape_regex(words[i]); + if (this.settings.diacritics) { + for (letter in DIACRITICS) { + if (DIACRITICS.hasOwnProperty(letter)) { + regex = regex.replace(new RegExp(letter, 'g'), DIACRITICS[letter]); + } + } + } + tokens.push({ + string : words[i], + regex : new RegExp(regex, 'i') + }); + } + + return tokens; + }; + + /** + * Iterates over arrays and hashes. + * + * ``` + * this.iterator(this.items, function(item, id) { + * // invoked for each item + * }); + * ``` + * + * @param {array|object} object + */ + Sifter.prototype.iterator = function(object, callback) { + var iterator; + if (is_array(object)) { + iterator = Array.prototype.forEach || function(callback) { + for (var i = 0, n = this.length; i < n; i++) { + callback(this[i], i, this); + } + }; + } else { + iterator = function(callback) { + for (var key in this) { + if (this.hasOwnProperty(key)) { + callback(this[key], key, this); + } + } + }; + } + + iterator.apply(object, [callback]); + }; + + /** + * Returns a function to be used to score individual results. + * + * Good matches will have a higher score than poor matches. + * If an item is not a match, 0 will be returned by the function. + * + * @param {object|string} search + * @param {object} options (optional) + * @returns {function} + */ + Sifter.prototype.getScoreFunction = function(search, options) { + var self, fields, tokens, token_count, nesting; + + self = this; + search = self.prepareSearch(search, options); + tokens = search.tokens; + fields = search.options.fields; + token_count = tokens.length; + nesting = search.options.nesting; + + /** + * Calculates how close of a match the + * given value is against a search token. + * + * @param {mixed} value + * @param {object} token + * @return {number} + */ + var scoreValue = function(value, token) { + var score, pos; + + if (!value) return 0; + value = String(value || ''); + pos = value.search(token.regex); + if (pos === -1) return 0; + score = token.string.length / value.length; + if (pos === 0) score += 0.5; + return score; + }; + + /** + * Calculates the score of an object + * against the search query. + * + * @param {object} token + * @param {object} data + * @return {number} + */ + var scoreObject = (function() { + var field_count = fields.length; + if (!field_count) { + return function() { return 0; }; + } + if (field_count === 1) { + return function(token, data) { + return scoreValue(getattr(data, fields[0], nesting), token); + }; + } + return function(token, data) { + for (var i = 0, sum = 0; i < field_count; i++) { + sum += scoreValue(getattr(data, fields[i], nesting), token); + } + return sum / field_count; + }; + })(); + + if (!token_count) { + return function() { return 0; }; + } + if (token_count === 1) { + return function(data) { + return scoreObject(tokens[0], data); + }; + } + + if (search.options.conjunction === 'and') { + return function(data) { + var score; + for (var i = 0, sum = 0; i < token_count; i++) { + score = scoreObject(tokens[i], data); + if (score <= 0) return 0; + sum += score; + } + return sum / token_count; + }; + } else { + return function(data) { + for (var i = 0, sum = 0; i < token_count; i++) { + sum += scoreObject(tokens[i], data); + } + return sum / token_count; + }; + } + }; + + /** + * Returns a function that can be used to compare two + * results, for sorting purposes. If no sorting should + * be performed, `null` will be returned. + * + * @param {string|object} search + * @param {object} options + * @return function(a,b) + */ + Sifter.prototype.getSortFunction = function(search, options) { + var i, n, self, field, fields, fields_count, multiplier, multipliers, get_field, implicit_score, sort; + + self = this; + search = self.prepareSearch(search, options); + sort = (!search.query && options.sort_empty) || options.sort; + + /** + * Fetches the specified sort field value + * from a search result item. + * + * @param {string} name + * @param {object} result + * @return {mixed} + */ + get_field = function(name, result) { + if (name === '$score') return result.score; + return getattr(self.items[result.id], name, options.nesting); + }; + + // parse options + fields = []; + if (sort) { + for (i = 0, n = sort.length; i < n; i++) { + if (search.query || sort[i].field !== '$score') { + fields.push(sort[i]); + } + } + } + + // the "$score" field is implied to be the primary + // sort field, unless it's manually specified + if (search.query) { + implicit_score = true; + for (i = 0, n = fields.length; i < n; i++) { + if (fields[i].field === '$score') { + implicit_score = false; + break; + } + } + if (implicit_score) { + fields.unshift({field: '$score', direction: 'desc'}); + } + } else { + for (i = 0, n = fields.length; i < n; i++) { + if (fields[i].field === '$score') { + fields.splice(i, 1); + break; + } + } + } + + multipliers = []; + for (i = 0, n = fields.length; i < n; i++) { + multipliers.push(fields[i].direction === 'desc' ? -1 : 1); + } + + // build function + fields_count = fields.length; + if (!fields_count) { + return null; + } else if (fields_count === 1) { + field = fields[0].field; + multiplier = multipliers[0]; + return function(a, b) { + return multiplier * cmp( + get_field(field, a), + get_field(field, b) + ); + }; + } else { + return function(a, b) { + var i, result, a_value, b_value, field; + for (i = 0; i < fields_count; i++) { + field = fields[i].field; + result = multipliers[i] * cmp( + get_field(field, a), + get_field(field, b) + ); + if (result) return result; + } + return 0; + }; + } + }; + + /** + * Parses a search query and returns an object + * with tokens and fields ready to be populated + * with results. + * + * @param {string} query + * @param {object} options + * @returns {object} + */ + Sifter.prototype.prepareSearch = function(query, options) { + if (typeof query === 'object') return query; + + options = extend({}, options); + + var option_fields = options.fields; + var option_sort = options.sort; + var option_sort_empty = options.sort_empty; + + if (option_fields && !is_array(option_fields)) options.fields = [option_fields]; + if (option_sort && !is_array(option_sort)) options.sort = [option_sort]; + if (option_sort_empty && !is_array(option_sort_empty)) options.sort_empty = [option_sort_empty]; + + return { + options : options, + query : String(query || '').toLowerCase(), + tokens : this.tokenize(query), + total : 0, + items : [] + }; + }; + + /** + * Searches through all items and returns a sorted array of matches. + * + * The `options` parameter can contain: + * + * - fields {string|array} + * - sort {array} + * - score {function} + * - filter {bool} + * - limit {integer} + * + * Returns an object containing: + * + * - options {object} + * - query {string} + * - tokens {array} + * - total {int} + * - items {array} + * + * @param {string} query + * @param {object} options + * @returns {object} + */ + Sifter.prototype.search = function(query, options) { + var self = this, value, score, search, calculateScore; + var fn_sort; + var fn_score; + + search = this.prepareSearch(query, options); + options = search.options; + query = search.query; + + // generate result scoring function + fn_score = options.score || self.getScoreFunction(search); + + // perform search and sort + if (query.length) { + self.iterator(self.items, function(item, id) { + score = fn_score(item); + if (options.filter === false || score > 0) { + search.items.push({'score': score, 'id': id}); + } + }); + } else { + self.iterator(self.items, function(item, id) { + search.items.push({'score': 1, 'id': id}); + }); + } + + fn_sort = self.getSortFunction(search, options); + if (fn_sort) search.items.sort(fn_sort); + + // apply limits + search.total = search.items.length; + if (typeof options.limit === 'number') { + search.items = search.items.slice(0, options.limit); + } + + return search; + }; + + // utilities + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + var cmp = function(a, b) { + if (typeof a === 'number' && typeof b === 'number') { + return a > b ? 1 : (a < b ? -1 : 0); + } + a = asciifold(String(a || '')); + b = asciifold(String(b || '')); + if (a > b) return 1; + if (b > a) return -1; + return 0; + }; + + var extend = function(a, b) { + var i, n, k, object; + for (i = 1, n = arguments.length; i < n; i++) { + object = arguments[i]; + if (!object) continue; + for (k in object) { + if (object.hasOwnProperty(k)) { + a[k] = object[k]; + } + } + } + return a; + }; + + /** + * A property getter resolving dot-notation + * @param {Object} obj The root object to fetch property on + * @param {String} name The optionally dotted property name to fetch + * @param {Boolean} nesting Handle nesting or not + * @return {Object} The resolved property value + */ + var getattr = function(obj, name, nesting) { + if (!obj || !name) return; + if (!nesting) return obj[name]; + var names = name.split("."); + while(names.length && (obj = obj[names.shift()])); + return obj; + }; + + var trim = function(str) { + return (str + '').replace(/^\s+|\s+$|/g, ''); + }; + + var escape_regex = function(str) { + return (str + '').replace(/([.?*+^$[\]\\(){}|-])/g, '\\$1'); + }; + + var is_array = Array.isArray || (typeof $ !== 'undefined' && $.isArray) || function(object) { + return Object.prototype.toString.call(object) === '[object Array]'; + }; + + var DIACRITICS = { + 'a': '[aḀḁĂăÂâǍǎȺⱥȦȧẠạÄäÀàÁáĀāÃãÅåąĄÃąĄ]', + 'b': '[b␢βΒB฿𐌁ᛒ]', + 'c': '[cĆćĈĉČčĊċC̄c̄ÇçḈḉȻȼƇƈɕᴄCc]', + 'd': '[dĎďḊḋḐḑḌḍḒḓḎḏĐđD̦d̦ƉɖƊɗƋƌᵭᶁᶑȡᴅDdð]', + 'e': '[eÉéÈèÊêḘḙĚěĔĕẼẽḚḛẺẻĖėËëĒēȨȩĘęᶒɆɇȄȅẾếỀềỄễỂểḜḝḖḗḔḕȆȇẸẹỆệⱸᴇEeɘǝƏƐε]', + 'f': '[fƑƒḞḟ]', + 'g': '[gɢ₲ǤǥĜĝĞğĢģƓɠĠġ]', + 'h': '[hĤĥĦħḨḩẖẖḤḥḢḣɦʰǶƕ]', + 'i': '[iÍíÌìĬĭÎîǏǐÏïḮḯĨĩĮįĪīỈỉȈȉȊȋỊịḬḭƗɨɨ̆ᵻᶖİiIıɪIi]', + 'j': '[jȷĴĵɈɉʝɟʲ]', + 'k': '[kƘƙꝀꝁḰḱǨǩḲḳḴḵκϰ₭]', + 'l': '[lŁłĽľĻļĹĺḶḷḸḹḼḽḺḻĿŀȽƚⱠⱡⱢɫɬᶅɭȴʟLl]', + 'n': '[nŃńǸǹŇňÑñṄṅŅņṆṇṊṋṈṉN̈n̈ƝɲȠƞᵰᶇɳȵɴNnŊŋ]', + 'o': '[oØøÖöÓóÒòÔôǑǒŐőŎŏȮȯỌọƟɵƠơỎỏŌōÕõǪǫȌȍՕօ]', + 'p': '[pṔṕṖṗⱣᵽƤƥᵱ]', + 'q': '[qꝖꝗʠɊɋꝘꝙq̃]', + 'r': '[rŔŕɌɍŘřŖŗṘṙȐȑȒȓṚṛⱤɽ]', + 's': '[sŚśṠṡṢṣꞨꞩŜŝŠšŞşȘșS̈s̈]', + 't': '[tŤťṪṫŢţṬṭƮʈȚțṰṱṮṯƬƭ]', + 'u': '[uŬŭɄʉỤụÜüÚúÙùÛûǓǔŰűŬŭƯưỦủŪūŨũŲųȔȕ∪]', + 'v': '[vṼṽṾṿƲʋꝞꝟⱱʋ]', + 'w': '[wẂẃẀẁŴŵẄẅẆẇẈẉ]', + 'x': '[xẌẍẊẋχ]', + 'y': '[yÝýỲỳŶŷŸÿỸỹẎẏỴỵɎɏƳƴ]', + 'z': '[zŹźẐẑŽžŻżẒẓẔẕƵƶ]' + }; + + var asciifold = (function() { + var i, n, k, chunk; + var foreignletters = ''; + var lookup = {}; + for (k in DIACRITICS) { + if (DIACRITICS.hasOwnProperty(k)) { + chunk = DIACRITICS[k].substring(2, DIACRITICS[k].length - 1); + foreignletters += chunk; + for (i = 0, n = chunk.length; i < n; i++) { + lookup[chunk.charAt(i)] = k; + } + } + } + var regexp = new RegExp('[' + foreignletters + ']', 'g'); + return function(str) { + return str.replace(regexp, function(foreignletter) { + return lookup[foreignletter]; + }).toLowerCase(); + }; + })(); + + + // export + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + return Sifter; +})); + + + +/** + * microplugin.js + * Copyright (c) 2013 Brian Reavis & contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this + * file except in compliance with the License. You may obtain a copy of the License at: + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF + * ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + * + * @author Brian Reavis + */ + +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + define('microplugin', factory); + } else if (typeof exports === 'object') { + module.exports = factory(); + } else { + root.MicroPlugin = factory(); + } +}(this, function() { + var MicroPlugin = {}; + + MicroPlugin.mixin = function(Interface) { + Interface.plugins = {}; + + /** + * Initializes the listed plugins (with options). + * Acceptable formats: + * + * List (without options): + * ['a', 'b', 'c'] + * + * List (with options): + * [{'name': 'a', options: {}}, {'name': 'b', options: {}}] + * + * Hash (with options): + * {'a': { ... }, 'b': { ... }, 'c': { ... }} + * + * @param {mixed} plugins + */ + Interface.prototype.initializePlugins = function(plugins) { + var i, n, key; + var self = this; + var queue = []; + + self.plugins = { + names : [], + settings : {}, + requested : {}, + loaded : {} + }; + + if (utils.isArray(plugins)) { + for (i = 0, n = plugins.length; i < n; i++) { + if (typeof plugins[i] === 'string') { + queue.push(plugins[i]); + } else { + self.plugins.settings[plugins[i].name] = plugins[i].options; + queue.push(plugins[i].name); + } + } + } else if (plugins) { + for (key in plugins) { + if (plugins.hasOwnProperty(key)) { + self.plugins.settings[key] = plugins[key]; + queue.push(key); + } + } + } + + while (queue.length) { + self.require(queue.shift()); + } + }; + + Interface.prototype.loadPlugin = function(name) { + var self = this; + var plugins = self.plugins; + var plugin = Interface.plugins[name]; + + if (!Interface.plugins.hasOwnProperty(name)) { + throw new Error('Unable to find "' + name + '" plugin'); + } + + plugins.requested[name] = true; + plugins.loaded[name] = plugin.fn.apply(self, [self.plugins.settings[name] || {}]); + plugins.names.push(name); + }; + + /** + * Initializes a plugin. + * + * @param {string} name + */ + Interface.prototype.require = function(name) { + var self = this; + var plugins = self.plugins; + + if (!self.plugins.loaded.hasOwnProperty(name)) { + if (plugins.requested[name]) { + throw new Error('Plugin has circular dependency ("' + name + '")'); + } + self.loadPlugin(name); + } + + return plugins.loaded[name]; + }; + + /** + * Registers a plugin. + * + * @param {string} name + * @param {function} fn + */ + Interface.define = function(name, fn) { + Interface.plugins[name] = { + 'name' : name, + 'fn' : fn + }; + }; + }; + + var utils = { + isArray: Array.isArray || function(vArg) { + return Object.prototype.toString.call(vArg) === '[object Array]'; + } + }; + + return MicroPlugin; +})); + +/** + * selectize.js (v0.12.4) + * Copyright (c) 2013–2015 Brian Reavis & contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this + * file except in compliance with the License. You may obtain a copy of the License at: + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF + * ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + * + * @author Brian Reavis + */ + +/*jshint curly:false */ +/*jshint browser:true */ + +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + define('selectize', ['jquery','sifter','microplugin'], factory); + } else if (typeof exports === 'object') { + module.exports = factory(require('jquery'), require('sifter'), require('microplugin')); + } else { + root.Selectize = factory(root.jQuery, root.Sifter, root.MicroPlugin); + } +}(this, function($, Sifter, MicroPlugin) { + 'use strict'; + + var highlight = function($element, pattern) { + if (typeof pattern === 'string' && !pattern.length) return; + var regex = (typeof pattern === 'string') ? new RegExp(pattern, 'i') : pattern; + + var highlight = function(node) { + var skip = 0; + if (node.nodeType === 3) { + var pos = node.data.search(regex); + if (pos >= 0 && node.data.length > 0) { + var match = node.data.match(regex); + var spannode = document.createElement('span'); + spannode.className = 'highlight'; + var middlebit = node.splitText(pos); + var endbit = middlebit.splitText(match[0].length); + var middleclone = middlebit.cloneNode(true); + spannode.appendChild(middleclone); + middlebit.parentNode.replaceChild(spannode, middlebit); + skip = 1; + } + } else if (node.nodeType === 1 && node.childNodes && !/(script|style)/i.test(node.tagName)) { + for (var i = 0; i < node.childNodes.length; ++i) { + i += highlight(node.childNodes[i]); + } + } + return skip; + }; + + return $element.each(function() { + highlight(this); + }); + }; + + /** + * removeHighlight fn copied from highlight v5 and + * edited to remove with() and pass js strict mode + */ + $.fn.removeHighlight = function() { + return this.find("span.highlight").each(function() { + this.parentNode.firstChild.nodeName; + var parent = this.parentNode; + parent.replaceChild(this.firstChild, this); + parent.normalize(); + }).end(); + }; + + + var MicroEvent = function() {}; + MicroEvent.prototype = { + on: function(event, fct){ + this._events = this._events || {}; + this._events[event] = this._events[event] || []; + this._events[event].push(fct); + }, + off: function(event, fct){ + var n = arguments.length; + if (n === 0) return delete this._events; + if (n === 1) return delete this._events[event]; + + this._events = this._events || {}; + if (event in this._events === false) return; + this._events[event].splice(this._events[event].indexOf(fct), 1); + }, + trigger: function(event /* , args... */){ + this._events = this._events || {}; + if (event in this._events === false) return; + for (var i = 0; i < this._events[event].length; i++){ + this._events[event][i].apply(this, Array.prototype.slice.call(arguments, 1)); + } + } + }; + + /** + * Mixin will delegate all MicroEvent.js function in the destination object. + * + * - MicroEvent.mixin(Foobar) will make Foobar able to use MicroEvent + * + * @param {object} the object which will support MicroEvent + */ + MicroEvent.mixin = function(destObject){ + var props = ['on', 'off', 'trigger']; + for (var i = 0; i < props.length; i++){ + destObject.prototype[props[i]] = MicroEvent.prototype[props[i]]; + } + }; + + var IS_MAC = /Mac/.test(navigator.userAgent); + + var KEY_A = 65; + var KEY_COMMA = 188; + var KEY_RETURN = 13; + var KEY_ESC = 27; + var KEY_LEFT = 37; + var KEY_UP = 38; + var KEY_P = 80; + var KEY_RIGHT = 39; + var KEY_DOWN = 40; + var KEY_N = 78; + var KEY_BACKSPACE = 8; + var KEY_DELETE = 46; + var KEY_SHIFT = 16; + var KEY_CMD = IS_MAC ? 91 : 17; + var KEY_CTRL = IS_MAC ? 18 : 17; + var KEY_TAB = 9; + + var TAG_SELECT = 1; + var TAG_INPUT = 2; + + // for now, android support in general is too spotty to support validity + var SUPPORTS_VALIDITY_API = !/android/i.test(window.navigator.userAgent) && !!document.createElement('input').validity; + + + var isset = function(object) { + return typeof object !== 'undefined'; + }; + + /** + * Converts a scalar to its best string representation + * for hash keys and HTML attribute values. + * + * Transformations: + * 'str' -> 'str' + * null -> '' + * undefined -> '' + * true -> '1' + * false -> '0' + * 0 -> '0' + * 1 -> '1' + * + * @param {string} value + * @returns {string|null} + */ + var hash_key = function(value) { + if (typeof value === 'undefined' || value === null) return null; + if (typeof value === 'boolean') return value ? '1' : '0'; + return value + ''; + }; + + /** + * Escapes a string for use within HTML. + * + * @param {string} str + * @returns {string} + */ + var escape_html = function(str) { + return (str + '') + .replace(/&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"'); + }; + + /** + * Escapes "$" characters in replacement strings. + * + * @param {string} str + * @returns {string} + */ + var escape_replace = function(str) { + return (str + '').replace(/\$/g, '$$$$'); + }; + + var hook = {}; + + /** + * Wraps `method` on `self` so that `fn` + * is invoked before the original method. + * + * @param {object} self + * @param {string} method + * @param {function} fn + */ + hook.before = function(self, method, fn) { + var original = self[method]; + self[method] = function() { + fn.apply(self, arguments); + return original.apply(self, arguments); + }; + }; + + /** + * Wraps `method` on `self` so that `fn` + * is invoked after the original method. + * + * @param {object} self + * @param {string} method + * @param {function} fn + */ + hook.after = function(self, method, fn) { + var original = self[method]; + self[method] = function() { + var result = original.apply(self, arguments); + fn.apply(self, arguments); + return result; + }; + }; + + /** + * Wraps `fn` so that it can only be invoked once. + * + * @param {function} fn + * @returns {function} + */ + var once = function(fn) { + var called = false; + return function() { + if (called) return; + called = true; + fn.apply(this, arguments); + }; + }; + + /** + * Wraps `fn` so that it can only be called once + * every `delay` milliseconds (invoked on the falling edge). + * + * @param {function} fn + * @param {int} delay + * @returns {function} + */ + var debounce = function(fn, delay) { + var timeout; + return function() { + var self = this; + var args = arguments; + window.clearTimeout(timeout); + timeout = window.setTimeout(function() { + fn.apply(self, args); + }, delay); + }; + }; + + /** + * Debounce all fired events types listed in `types` + * while executing the provided `fn`. + * + * @param {object} self + * @param {array} types + * @param {function} fn + */ + var debounce_events = function(self, types, fn) { + var type; + var trigger = self.trigger; + var event_args = {}; + + // override trigger method + self.trigger = function() { + var type = arguments[0]; + if (types.indexOf(type) !== -1) { + event_args[type] = arguments; + } else { + return trigger.apply(self, arguments); + } + }; + + // invoke provided function + fn.apply(self, []); + self.trigger = trigger; + + // trigger queued events + for (type in event_args) { + if (event_args.hasOwnProperty(type)) { + trigger.apply(self, event_args[type]); + } + } + }; + + /** + * A workaround for http://bugs.jquery.com/ticket/6696 + * + * @param {object} $parent - Parent element to listen on. + * @param {string} event - Event name. + * @param {string} selector - Descendant selector to filter by. + * @param {function} fn - Event handler. + */ + var watchChildEvent = function($parent, event, selector, fn) { + $parent.on(event, selector, function(e) { + var child = e.target; + while (child && child.parentNode !== $parent[0]) { + child = child.parentNode; + } + e.currentTarget = child; + return fn.apply(this, [e]); + }); + }; + + /** + * Determines the current selection within a text input control. + * Returns an object containing: + * - start + * - length + * + * @param {object} input + * @returns {object} + */ + var getSelection = function(input) { + var result = {}; + if ('selectionStart' in input) { + result.start = input.selectionStart; + result.length = input.selectionEnd - result.start; + } else if (document.selection) { + input.focus(); + var sel = document.selection.createRange(); + var selLen = document.selection.createRange().text.length; + sel.moveStart('character', -input.value.length); + result.start = sel.text.length - selLen; + result.length = selLen; + } + return result; + }; + + /** + * Copies CSS properties from one element to another. + * + * @param {object} $from + * @param {object} $to + * @param {array} properties + */ + var transferStyles = function($from, $to, properties) { + var i, n, styles = {}; + if (properties) { + for (i = 0, n = properties.length; i < n; i++) { + styles[properties[i]] = $from.css(properties[i]); + } + } else { + styles = $from.css(); + } + $to.css(styles); + }; + + /** + * Measures the width of a string within a + * parent element (in pixels). + * + * @param {string} str + * @param {object} $parent + * @returns {int} + */ + var measureString = function(str, $parent) { + if (!str) { + return 0; + } + + var $test = $('').css({ + position: 'absolute', + top: -99999, + left: -99999, + width: 'auto', + padding: 0, + whiteSpace: 'pre' + }).text(str).appendTo('body'); + + transferStyles($parent, $test, [ + 'letterSpacing', + 'fontSize', + 'fontFamily', + 'fontWeight', + 'textTransform' + ]); + + var width = $test.width(); + $test.remove(); + + return width; + }; + + /** + * Sets up an input to grow horizontally as the user + * types. If the value is changed manually, you can + * trigger the "update" handler to resize: + * + * $input.trigger('update'); + * + * @param {object} $input + */ + var autoGrow = function($input) { + var currentWidth = null; + + var update = function(e, options) { + var value, keyCode, printable, placeholder, width; + var shift, character, selection; + e = e || window.event || {}; + options = options || {}; + + if (e.metaKey || e.altKey) return; + if (!options.force && $input.data('grow') === false) return; + + value = $input.val(); + if (e.type && e.type.toLowerCase() === 'keydown') { + keyCode = e.keyCode; + printable = ( + (keyCode >= 97 && keyCode <= 122) || // a-z + (keyCode >= 65 && keyCode <= 90) || // A-Z + (keyCode >= 48 && keyCode <= 57) || // 0-9 + keyCode === 32 // space + ); + + if (keyCode === KEY_DELETE || keyCode === KEY_BACKSPACE) { + selection = getSelection($input[0]); + if (selection.length) { + value = value.substring(0, selection.start) + value.substring(selection.start + selection.length); + } else if (keyCode === KEY_BACKSPACE && selection.start) { + value = value.substring(0, selection.start - 1) + value.substring(selection.start + 1); + } else if (keyCode === KEY_DELETE && typeof selection.start !== 'undefined') { + value = value.substring(0, selection.start) + value.substring(selection.start + 1); + } + } else if (printable) { + shift = e.shiftKey; + character = String.fromCharCode(e.keyCode); + if (shift) character = character.toUpperCase(); + else character = character.toLowerCase(); + value += character; + } + } + + placeholder = $input.attr('placeholder'); + if (!value && placeholder) { + value = placeholder; + } + + width = measureString(value, $input) + 4; + if (width !== currentWidth) { + currentWidth = width; + $input.width(width); + $input.triggerHandler('resize'); + } + }; + + $input.on('keydown keyup update blur', update); + update(); + }; + + var domToString = function(d) { + var tmp = document.createElement('div'); + + tmp.appendChild(d.cloneNode(true)); + + return tmp.innerHTML; + }; + + var logError = function(message, options){ + if(!options) options = {}; + var component = "Selectize"; + + console.error(component + ": " + message) + + if(options.explanation){ + // console.group is undefined in ').addClass(settings.wrapperClass).addClass(classes).addClass(inputMode); + $control = $('
    ').addClass(settings.inputClass).addClass('items').appendTo($wrapper); + $control_input = $('').appendTo($control).attr('tabindex', $input.is(':disabled') ? '-1' : self.tabIndex); + $dropdown_parent = $(settings.dropdownParent || $wrapper); + $dropdown = $('
    ').addClass(settings.dropdownClass).addClass(inputMode).hide().appendTo($dropdown_parent); + $dropdown_content = $('
    ').addClass(settings.dropdownContentClass).appendTo($dropdown); + + if(inputId = $input.attr('id')) { + $control_input.attr('id', inputId + '-selectized'); + $("label[for='"+inputId+"']").attr('for', inputId + '-selectized'); + } + + if(self.settings.copyClassesToDropdown) { + $dropdown.addClass(classes); + } + + $wrapper.css({ + width: $input[0].style.width + }); + + if (self.plugins.names.length) { + classes_plugins = 'plugin-' + self.plugins.names.join(' plugin-'); + $wrapper.addClass(classes_plugins); + $dropdown.addClass(classes_plugins); + } + + if ((settings.maxItems === null || settings.maxItems > 1) && self.tagType === TAG_SELECT) { + $input.attr('multiple', 'multiple'); + } + + if (self.settings.placeholder) { + $control_input.attr('placeholder', settings.placeholder); + } + + // if splitOn was not passed in, construct it from the delimiter to allow pasting universally + if (!self.settings.splitOn && self.settings.delimiter) { + var delimiterEscaped = self.settings.delimiter.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + self.settings.splitOn = new RegExp('\\s*' + delimiterEscaped + '+\\s*'); + } + + if ($input.attr('autocorrect')) { + $control_input.attr('autocorrect', $input.attr('autocorrect')); + } + + if ($input.attr('autocapitalize')) { + $control_input.attr('autocapitalize', $input.attr('autocapitalize')); + } + + self.$wrapper = $wrapper; + self.$control = $control; + self.$control_input = $control_input; + self.$dropdown = $dropdown; + self.$dropdown_content = $dropdown_content; + + $dropdown.on('mouseenter', '[data-selectable]', function() { return self.onOptionHover.apply(self, arguments); }); + $dropdown.on('mousedown click', '[data-selectable]', function() { return self.onOptionSelect.apply(self, arguments); }); + watchChildEvent($control, 'mousedown', '*:not(input)', function() { return self.onItemSelect.apply(self, arguments); }); + autoGrow($control_input); + + $control.on({ + mousedown : function() { return self.onMouseDown.apply(self, arguments); }, + click : function() { return self.onClick.apply(self, arguments); } + }); + + $control_input.on({ + mousedown : function(e) { e.stopPropagation(); }, + keydown : function() { return self.onKeyDown.apply(self, arguments); }, + keyup : function() { return self.onKeyUp.apply(self, arguments); }, + keypress : function() { return self.onKeyPress.apply(self, arguments); }, + resize : function() { self.positionDropdown.apply(self, []); }, + blur : function() { return self.onBlur.apply(self, arguments); }, + focus : function() { self.ignoreBlur = false; return self.onFocus.apply(self, arguments); }, + paste : function() { return self.onPaste.apply(self, arguments); } + }); + + $document.on('keydown' + eventNS, function(e) { + self.isCmdDown = e[IS_MAC ? 'metaKey' : 'ctrlKey']; + self.isCtrlDown = e[IS_MAC ? 'altKey' : 'ctrlKey']; + self.isShiftDown = e.shiftKey; + }); + + $document.on('keyup' + eventNS, function(e) { + if (e.keyCode === KEY_CTRL) self.isCtrlDown = false; + if (e.keyCode === KEY_SHIFT) self.isShiftDown = false; + if (e.keyCode === KEY_CMD) self.isCmdDown = false; + }); + + $document.on('mousedown' + eventNS, function(e) { + if (self.isFocused) { + // prevent events on the dropdown scrollbar from causing the control to blur + if (e.target === self.$dropdown[0] || e.target.parentNode === self.$dropdown[0]) { + return false; + } + // blur on click outside + if (!self.$control.has(e.target).length && e.target !== self.$control[0]) { + self.blur(e.target); + } + } + }); + + $window.on(['scroll' + eventNS, 'resize' + eventNS].join(' '), function() { + if (self.isOpen) { + self.positionDropdown.apply(self, arguments); + } + }); + $window.on('mousemove' + eventNS, function() { + self.ignoreHover = false; + }); + + // store original children and tab index so that they can be + // restored when the destroy() method is called. + this.revertSettings = { + $children : $input.children().detach(), + tabindex : $input.attr('tabindex') + }; + + $input.attr('tabindex', -1).hide().after(self.$wrapper); + + if ($.isArray(settings.items)) { + self.setValue(settings.items); + delete settings.items; + } + + // feature detect for the validation API + if (SUPPORTS_VALIDITY_API) { + $input.on('invalid' + eventNS, function(e) { + e.preventDefault(); + self.isInvalid = true; + self.refreshState(); + }); + } + + self.updateOriginalInput(); + self.refreshItems(); + self.refreshState(); + self.updatePlaceholder(); + self.isSetup = true; + + if ($input.is(':disabled')) { + self.disable(); + } + + self.on('change', this.onChange); + + $input.data('selectize', self); + $input.addClass('selectized'); + self.trigger('initialize'); + + // preload options + if (settings.preload === true) { + self.onSearchChange(''); + } + + }, + + /** + * Sets up default rendering functions. + */ + setupTemplates: function() { + var self = this; + var field_label = self.settings.labelField; + var field_optgroup = self.settings.optgroupLabelField; + + var templates = { + 'optgroup': function(data) { + return '
    ' + data.html + '
    '; + }, + 'optgroup_header': function(data, escape) { + return '
    ' + escape(data[field_optgroup]) + '
    '; + }, + 'option': function(data, escape) { + return '
    ' + escape(data[field_label]) + '
    '; + }, + 'item': function(data, escape) { + return '
    ' + escape(data[field_label]) + '
    '; + }, + 'option_create': function(data, escape) { + return '
    Add ' + escape(data.input) + '…
    '; + } + }; + + self.settings.render = $.extend({}, templates, self.settings.render); + }, + + /** + * Maps fired events to callbacks provided + * in the settings used when creating the control. + */ + setupCallbacks: function() { + var key, fn, callbacks = { + 'initialize' : 'onInitialize', + 'change' : 'onChange', + 'item_add' : 'onItemAdd', + 'item_remove' : 'onItemRemove', + 'clear' : 'onClear', + 'option_add' : 'onOptionAdd', + 'option_remove' : 'onOptionRemove', + 'option_clear' : 'onOptionClear', + 'optgroup_add' : 'onOptionGroupAdd', + 'optgroup_remove' : 'onOptionGroupRemove', + 'optgroup_clear' : 'onOptionGroupClear', + 'dropdown_open' : 'onDropdownOpen', + 'dropdown_close' : 'onDropdownClose', + 'type' : 'onType', + 'load' : 'onLoad', + 'focus' : 'onFocus', + 'blur' : 'onBlur' + }; + + for (key in callbacks) { + if (callbacks.hasOwnProperty(key)) { + fn = this.settings[callbacks[key]]; + if (fn) this.on(key, fn); + } + } + }, + + /** + * Triggered when the main control element + * has a click event. + * + * @param {object} e + * @return {boolean} + */ + onClick: function(e) { + var self = this; + + // necessary for mobile webkit devices (manual focus triggering + // is ignored unless invoked within a click event) + if (!self.isFocused) { + self.focus(); + e.preventDefault(); + } + }, + + /** + * Triggered when the main control element + * has a mouse down event. + * + * @param {object} e + * @return {boolean} + */ + onMouseDown: function(e) { + var self = this; + var defaultPrevented = e.isDefaultPrevented(); + var $target = $(e.target); + + if (self.isFocused) { + // retain focus by preventing native handling. if the + // event target is the input it should not be modified. + // otherwise, text selection within the input won't work. + if (e.target !== self.$control_input[0]) { + if (self.settings.mode === 'single') { + // toggle dropdown + self.isOpen ? self.close() : self.open(); + } else if (!defaultPrevented) { + self.setActiveItem(null); + } + return false; + } + } else { + // give control focus + if (!defaultPrevented) { + window.setTimeout(function() { + self.focus(); + }, 0); + } + } + }, + + /** + * Triggered when the value of the control has been changed. + * This should propagate the event to the original DOM + * input / select element. + */ + onChange: function() { + this.$input.trigger('change'); + }, + + /** + * Triggered on paste. + * + * @param {object} e + * @returns {boolean} + */ + onPaste: function(e) { + var self = this; + + if (self.isFull() || self.isInputHidden || self.isLocked) { + e.preventDefault(); + return; + } + + // If a regex or string is included, this will split the pasted + // input and create Items for each separate value + if (self.settings.splitOn) { + + // Wait for pasted text to be recognized in value + setTimeout(function() { + var pastedText = self.$control_input.val(); + if(!pastedText.match(self.settings.splitOn)){ return } + + var splitInput = $.trim(pastedText).split(self.settings.splitOn); + for (var i = 0, n = splitInput.length; i < n; i++) { + self.createItem(splitInput[i]); + } + }, 0); + } + }, + + /** + * Triggered on keypress. + * + * @param {object} e + * @returns {boolean} + */ + onKeyPress: function(e) { + if (this.isLocked) return e && e.preventDefault(); + var character = String.fromCharCode(e.keyCode || e.which); + if (this.settings.create && this.settings.mode === 'multi' && character === this.settings.delimiter) { + this.createItem(); + e.preventDefault(); + return false; + } + }, + + /** + * Triggered on keydown. + * + * @param {object} e + * @returns {boolean} + */ + onKeyDown: function(e) { + var isInput = e.target === this.$control_input[0]; + var self = this; + + if (self.isLocked) { + if (e.keyCode !== KEY_TAB) { + e.preventDefault(); + } + return; + } + + switch (e.keyCode) { + case KEY_A: + if (self.isCmdDown) { + self.selectAll(); + return; + } + break; + case KEY_ESC: + if (self.isOpen) { + e.preventDefault(); + e.stopPropagation(); + self.close(); + } + return; + case KEY_N: + if (!e.ctrlKey || e.altKey) break; + case KEY_DOWN: + if (!self.isOpen && self.hasOptions) { + self.open(); + } else if (self.$activeOption) { + self.ignoreHover = true; + var $next = self.getAdjacentOption(self.$activeOption, 1); + if ($next.length) self.setActiveOption($next, true, true); + } + e.preventDefault(); + return; + case KEY_P: + if (!e.ctrlKey || e.altKey) break; + case KEY_UP: + if (self.$activeOption) { + self.ignoreHover = true; + var $prev = self.getAdjacentOption(self.$activeOption, -1); + if ($prev.length) self.setActiveOption($prev, true, true); + } + e.preventDefault(); + return; + case KEY_RETURN: + if (self.isOpen && self.$activeOption) { + self.onOptionSelect({currentTarget: self.$activeOption}); + e.preventDefault(); + } + return; + case KEY_LEFT: + self.advanceSelection(-1, e); + return; + case KEY_RIGHT: + self.advanceSelection(1, e); + return; + case KEY_TAB: + if (self.settings.selectOnTab && self.isOpen && self.$activeOption) { + self.onOptionSelect({currentTarget: self.$activeOption}); + + // Default behaviour is to jump to the next field, we only want this + // if the current field doesn't accept any more entries + if (!self.isFull()) { + e.preventDefault(); + } + } + if (self.settings.create && self.createItem()) { + e.preventDefault(); + } + return; + case KEY_BACKSPACE: + case KEY_DELETE: + self.deleteSelection(e); + return; + } + + if ((self.isFull() || self.isInputHidden) && !(IS_MAC ? e.metaKey : e.ctrlKey)) { + e.preventDefault(); + return; + } + }, + + /** + * Triggered on keyup. + * + * @param {object} e + * @returns {boolean} + */ + onKeyUp: function(e) { + var self = this; + + if (self.isLocked) return e && e.preventDefault(); + var value = self.$control_input.val() || ''; + if (self.lastValue !== value) { + self.lastValue = value; + self.onSearchChange(value); + self.refreshOptions(); + self.trigger('type', value); + } + }, + + /** + * Invokes the user-provide option provider / loader. + * + * Note: this function is debounced in the Selectize + * constructor (by `settings.loadThrottle` milliseconds) + * + * @param {string} value + */ + onSearchChange: function(value) { + var self = this; + var fn = self.settings.load; + if (!fn) return; + if (self.loadedSearches.hasOwnProperty(value)) return; + self.loadedSearches[value] = true; + self.load(function(callback) { + fn.apply(self, [value, callback]); + }); + }, + + /** + * Triggered on focus. + * + * @param {object} e (optional) + * @returns {boolean} + */ + onFocus: function(e) { + var self = this; + var wasFocused = self.isFocused; + + if (self.isDisabled) { + self.blur(); + e && e.preventDefault(); + return false; + } + + if (self.ignoreFocus) return; + self.isFocused = true; + if (self.settings.preload === 'focus') self.onSearchChange(''); + + if (!wasFocused) self.trigger('focus'); + + if (!self.$activeItems.length) { + self.showInput(); + self.setActiveItem(null); + self.refreshOptions(!!self.settings.openOnFocus); + } + + self.refreshState(); + }, + + /** + * Triggered on blur. + * + * @param {object} e + * @param {Element} dest + */ + onBlur: function(e, dest) { + var self = this; + if (!self.isFocused) return; + self.isFocused = false; + + if (self.ignoreFocus) { + return; + } else if (!self.ignoreBlur && document.activeElement === self.$dropdown_content[0]) { + // necessary to prevent IE closing the dropdown when the scrollbar is clicked + self.ignoreBlur = true; + self.onFocus(e); + return; + } + + var deactivate = function() { + self.close(); + self.setTextboxValue(''); + self.setActiveItem(null); + self.setActiveOption(null); + self.setCaret(self.items.length); + self.refreshState(); + + // IE11 bug: element still marked as active + dest && dest.focus && dest.focus(); + + self.ignoreFocus = false; + self.trigger('blur'); + }; + + self.ignoreFocus = true; + if (self.settings.create && self.settings.createOnBlur) { + self.createItem(null, false, deactivate); + } else { + deactivate(); + } + }, + + /** + * Triggered when the user rolls over + * an option in the autocomplete dropdown menu. + * + * @param {object} e + * @returns {boolean} + */ + onOptionHover: function(e) { + if (this.ignoreHover) return; + this.setActiveOption(e.currentTarget, false); + }, + + /** + * Triggered when the user clicks on an option + * in the autocomplete dropdown menu. + * + * @param {object} e + * @returns {boolean} + */ + onOptionSelect: function(e) { + var value, $target, $option, self = this; + + if (e.preventDefault) { + e.preventDefault(); + e.stopPropagation(); + } + + $target = $(e.currentTarget); + if ($target.hasClass('create')) { + self.createItem(null, function() { + if (self.settings.closeAfterSelect) { + self.close(); + } + }); + } else { + value = $target.attr('data-value'); + if (typeof value !== 'undefined') { + self.lastQuery = null; + self.setTextboxValue(''); + self.addItem(value); + if (self.settings.closeAfterSelect) { + self.close(); + } else if (!self.settings.hideSelected && e.type && /mouse/.test(e.type)) { + self.setActiveOption(self.getOption(value)); + } + } + } + }, + + /** + * Triggered when the user clicks on an item + * that has been selected. + * + * @param {object} e + * @returns {boolean} + */ + onItemSelect: function(e) { + var self = this; + + if (self.isLocked) return; + if (self.settings.mode === 'multi') { + e.preventDefault(); + self.setActiveItem(e.currentTarget, e); + } + }, + + /** + * Invokes the provided method that provides + * results to a callback---which are then added + * as options to the control. + * + * @param {function} fn + */ + load: function(fn) { + var self = this; + var $wrapper = self.$wrapper.addClass(self.settings.loadingClass); + + self.loading++; + fn.apply(self, [function(results) { + self.loading = Math.max(self.loading - 1, 0); + if (results && results.length) { + self.addOption(results); + self.refreshOptions(self.isFocused && !self.isInputHidden); + } + if (!self.loading) { + $wrapper.removeClass(self.settings.loadingClass); + } + self.trigger('load', results); + }]); + }, + + /** + * Sets the input field of the control to the specified value. + * + * @param {string} value + */ + setTextboxValue: function(value) { + var $input = this.$control_input; + var changed = $input.val() !== value; + if (changed) { + $input.val(value).triggerHandler('update'); + this.lastValue = value; + } + }, + + /** + * Returns the value of the control. If multiple items + * can be selected (e.g. or + * element to reflect the current state. + */ + updateOriginalInput: function(opts) { + var i, n, options, label, self = this; + opts = opts || {}; + + if (self.tagType === TAG_SELECT) { + options = []; + for (i = 0, n = self.items.length; i < n; i++) { + label = self.options[self.items[i]][self.settings.labelField] || ''; + options.push(''); + } + if (!options.length && !this.$input.attr('multiple')) { + options.push(''); + } + self.$input.html(options.join('')); + } else { + self.$input.val(self.getValue()); + self.$input.attr('value',self.$input.val()); + } + + if (self.isSetup) { + if (!opts.silent) { + self.trigger('change', self.$input.val()); + } + } + }, + + /** + * Shows/hide the input placeholder depending + * on if there items in the list already. + */ + updatePlaceholder: function() { + if (!this.settings.placeholder) return; + var $input = this.$control_input; + + if (this.items.length) { + $input.removeAttr('placeholder'); + } else { + $input.attr('placeholder', this.settings.placeholder); + } + $input.triggerHandler('update', {force: true}); + }, + + /** + * Shows the autocomplete dropdown containing + * the available options. + */ + open: function() { + var self = this; + + if (self.isLocked || self.isOpen || (self.settings.mode === 'multi' && self.isFull())) return; + self.focus(); + self.isOpen = true; + self.refreshState(); + self.$dropdown.css({visibility: 'hidden', display: 'block'}); + self.positionDropdown(); + self.$dropdown.css({visibility: 'visible'}); + self.trigger('dropdown_open', self.$dropdown); + }, + + /** + * Closes the autocomplete dropdown menu. + */ + close: function() { + var self = this; + var trigger = self.isOpen; + + if (self.settings.mode === 'single' && self.items.length) { + self.hideInput(); + self.$control_input.blur(); // close keyboard on iOS + } + + self.isOpen = false; + self.$dropdown.hide(); + self.setActiveOption(null); + self.refreshState(); + + if (trigger) self.trigger('dropdown_close', self.$dropdown); + }, + + /** + * Calculates and applies the appropriate + * position of the dropdown. + */ + positionDropdown: function() { + var $control = this.$control; + var offset = this.settings.dropdownParent === 'body' ? $control.offset() : $control.position(); + offset.top += $control.outerHeight(true); + + this.$dropdown.css({ + width : $control.outerWidth(), + top : offset.top, + left : offset.left + }); + }, + + /** + * Resets / clears all selected items + * from the control. + * + * @param {boolean} silent + */ + clear: function(silent) { + var self = this; + + if (!self.items.length) return; + self.$control.children(':not(input)').remove(); + self.items = []; + self.lastQuery = null; + self.setCaret(0); + self.setActiveItem(null); + self.updatePlaceholder(); + self.updateOriginalInput({silent: silent}); + self.refreshState(); + self.showInput(); + self.trigger('clear'); + }, + + /** + * A helper method for inserting an element + * at the current caret position. + * + * @param {object} $el + */ + insertAtCaret: function($el) { + var caret = Math.min(this.caretPos, this.items.length); + if (caret === 0) { + this.$control.prepend($el); + } else { + $(this.$control[0].childNodes[caret]).before($el); + } + this.setCaret(caret + 1); + }, + + /** + * Removes the current selected item(s). + * + * @param {object} e (optional) + * @returns {boolean} + */ + deleteSelection: function(e) { + var i, n, direction, selection, values, caret, option_select, $option_select, $tail; + var self = this; + + direction = (e && e.keyCode === KEY_BACKSPACE) ? -1 : 1; + selection = getSelection(self.$control_input[0]); + + if (self.$activeOption && !self.settings.hideSelected) { + option_select = self.getAdjacentOption(self.$activeOption, -1).attr('data-value'); + } + + // determine items that will be removed + values = []; + + if (self.$activeItems.length) { + $tail = self.$control.children('.active:' + (direction > 0 ? 'last' : 'first')); + caret = self.$control.children(':not(input)').index($tail); + if (direction > 0) { caret++; } + + for (i = 0, n = self.$activeItems.length; i < n; i++) { + values.push($(self.$activeItems[i]).attr('data-value')); + } + if (e) { + e.preventDefault(); + e.stopPropagation(); + } + } else if ((self.isFocused || self.settings.mode === 'single') && self.items.length) { + if (direction < 0 && selection.start === 0 && selection.length === 0) { + values.push(self.items[self.caretPos - 1]); + } else if (direction > 0 && selection.start === self.$control_input.val().length) { + values.push(self.items[self.caretPos]); + } + } + + // allow the callback to abort + if (!values.length || (typeof self.settings.onDelete === 'function' && self.settings.onDelete.apply(self, [values]) === false)) { + return false; + } + + // perform removal + if (typeof caret !== 'undefined') { + self.setCaret(caret); + } + while (values.length) { + self.removeItem(values.pop()); + } + + self.showInput(); + self.positionDropdown(); + self.refreshOptions(true); + + // select previous option + if (option_select) { + $option_select = self.getOption(option_select); + if ($option_select.length) { + self.setActiveOption($option_select); + } + } + + return true; + }, + + /** + * Selects the previous / next item (depending + * on the `direction` argument). + * + * > 0 - right + * < 0 - left + * + * @param {int} direction + * @param {object} e (optional) + */ + advanceSelection: function(direction, e) { + var tail, selection, idx, valueLength, cursorAtEdge, $tail; + var self = this; + + if (direction === 0) return; + if (self.rtl) direction *= -1; + + tail = direction > 0 ? 'last' : 'first'; + selection = getSelection(self.$control_input[0]); + + if (self.isFocused && !self.isInputHidden) { + valueLength = self.$control_input.val().length; + cursorAtEdge = direction < 0 + ? selection.start === 0 && selection.length === 0 + : selection.start === valueLength; + + if (cursorAtEdge && !valueLength) { + self.advanceCaret(direction, e); + } + } else { + $tail = self.$control.children('.active:' + tail); + if ($tail.length) { + idx = self.$control.children(':not(input)').index($tail); + self.setActiveItem(null); + self.setCaret(direction > 0 ? idx + 1 : idx); + } + } + }, + + /** + * Moves the caret left / right. + * + * @param {int} direction + * @param {object} e (optional) + */ + advanceCaret: function(direction, e) { + var self = this, fn, $adj; + + if (direction === 0) return; + + fn = direction > 0 ? 'next' : 'prev'; + if (self.isShiftDown) { + $adj = self.$control_input[fn](); + if ($adj.length) { + self.hideInput(); + self.setActiveItem($adj); + e && e.preventDefault(); + } + } else { + self.setCaret(self.caretPos + direction); + } + }, + + /** + * Moves the caret to the specified index. + * + * @param {int} i + */ + setCaret: function(i) { + var self = this; + + if (self.settings.mode === 'single') { + i = self.items.length; + } else { + i = Math.max(0, Math.min(self.items.length, i)); + } + + if(!self.isPending) { + // the input must be moved by leaving it in place and moving the + // siblings, due to the fact that focus cannot be restored once lost + // on mobile webkit devices + var j, n, fn, $children, $child; + $children = self.$control.children(':not(input)'); + for (j = 0, n = $children.length; j < n; j++) { + $child = $($children[j]).detach(); + if (j < i) { + self.$control_input.before($child); + } else { + self.$control.append($child); + } + } + } + + self.caretPos = i; + }, + + /** + * Disables user input on the control. Used while + * items are being asynchronously created. + */ + lock: function() { + this.close(); + this.isLocked = true; + this.refreshState(); + }, + + /** + * Re-enables user input on the control. + */ + unlock: function() { + this.isLocked = false; + this.refreshState(); + }, + + /** + * Disables user input on the control completely. + * While disabled, it cannot receive focus. + */ + disable: function() { + var self = this; + self.$input.prop('disabled', true); + self.$control_input.prop('disabled', true).prop('tabindex', -1); + self.isDisabled = true; + self.lock(); + }, + + /** + * Enables the control so that it can respond + * to focus and user input. + */ + enable: function() { + var self = this; + self.$input.prop('disabled', false); + self.$control_input.prop('disabled', false).prop('tabindex', self.tabIndex); + self.isDisabled = false; + self.unlock(); + }, + + /** + * Completely destroys the control and + * unbinds all event listeners so that it can + * be garbage collected. + */ + destroy: function() { + var self = this; + var eventNS = self.eventNS; + var revertSettings = self.revertSettings; + + self.trigger('destroy'); + self.off(); + self.$wrapper.remove(); + self.$dropdown.remove(); + + self.$input + .html('') + .append(revertSettings.$children) + .removeAttr('tabindex') + .removeClass('selectized') + .attr({tabindex: revertSettings.tabindex}) + .show(); + + self.$control_input.removeData('grow'); + self.$input.removeData('selectize'); + + $(window).off(eventNS); + $(document).off(eventNS); + $(document.body).off(eventNS); + + delete self.$input[0].selectize; + }, + + /** + * A helper method for rendering "item" and + * "option" templates, given the data. + * + * @param {string} templateName + * @param {object} data + * @returns {string} + */ + render: function(templateName, data) { + var value, id, label; + var html = ''; + var cache = false; + var self = this; + var regex_tag = /^[\t \r\n]*<([a-z][a-z0-9\-_]*(?:\:[a-z][a-z0-9\-_]*)?)/i; + + if (templateName === 'option' || templateName === 'item') { + value = hash_key(data[self.settings.valueField]); + cache = !!value; + } + + // pull markup from cache if it exists + if (cache) { + if (!isset(self.renderCache[templateName])) { + self.renderCache[templateName] = {}; + } + if (self.renderCache[templateName].hasOwnProperty(value)) { + return self.renderCache[templateName][value]; + } + } + + // render markup + html = $(self.settings.render[templateName].apply(this, [data, escape_html])); + + // add mandatory attributes + if (templateName === 'option' || templateName === 'option_create') { + html.attr('data-selectable', ''); + } + else if (templateName === 'optgroup') { + id = data[self.settings.optgroupValueField] || ''; + html.attr('data-group', id); + } + if (templateName === 'option' || templateName === 'item') { + html.attr('data-value', value || ''); + } + + // update cache + if (cache) { + self.renderCache[templateName][value] = html[0]; + } + + return html[0]; + }, + + /** + * Clears the render cache for a template. If + * no template is given, clears all render + * caches. + * + * @param {string} templateName + */ + clearCache: function(templateName) { + var self = this; + if (typeof templateName === 'undefined') { + self.renderCache = {}; + } else { + delete self.renderCache[templateName]; + } + }, + + /** + * Determines whether or not to display the + * create item prompt, given a user input. + * + * @param {string} input + * @return {boolean} + */ + canCreate: function(input) { + var self = this; + if (!self.settings.create) return false; + var filter = self.settings.createFilter; + return input.length + && (typeof filter !== 'function' || filter.apply(self, [input])) + && (typeof filter !== 'string' || new RegExp(filter).test(input)) + && (!(filter instanceof RegExp) || filter.test(input)); + } + + }); + + + Selectize.count = 0; + Selectize.defaults = { + options: [], + optgroups: [], + + plugins: [], + delimiter: ',', + splitOn: null, // regexp or string for splitting up values from a paste command + persist: true, + diacritics: true, + create: false, + createOnBlur: false, + createFilter: null, + highlight: true, + openOnFocus: true, + maxOptions: 1000, + maxItems: null, + hideSelected: null, + addPrecedence: false, + selectOnTab: false, + preload: false, + allowEmptyOption: false, + closeAfterSelect: false, + + scrollDuration: 60, + loadThrottle: 300, + loadingClass: 'loading', + + dataAttr: 'data-data', + optgroupField: 'optgroup', + valueField: 'value', + labelField: 'text', + optgroupLabelField: 'label', + optgroupValueField: 'value', + lockOptgroupOrder: false, + + sortField: '$order', + searchField: ['text'], + searchConjunction: 'and', + + mode: null, + wrapperClass: 'selectize-control', + inputClass: 'selectize-input', + dropdownClass: 'selectize-dropdown', + dropdownContentClass: 'selectize-dropdown-content', + + dropdownParent: null, + + copyClassesToDropdown: true, + + /* + load : null, // function(query, callback) { ... } + score : null, // function(search) { ... } + onInitialize : null, // function() { ... } + onChange : null, // function(value) { ... } + onItemAdd : null, // function(value, $item) { ... } + onItemRemove : null, // function(value) { ... } + onClear : null, // function() { ... } + onOptionAdd : null, // function(value, data) { ... } + onOptionRemove : null, // function(value) { ... } + onOptionClear : null, // function() { ... } + onOptionGroupAdd : null, // function(id, data) { ... } + onOptionGroupRemove : null, // function(id) { ... } + onOptionGroupClear : null, // function() { ... } + onDropdownOpen : null, // function($dropdown) { ... } + onDropdownClose : null, // function($dropdown) { ... } + onType : null, // function(str) { ... } + onDelete : null, // function(values) { ... } + */ + + render: { + /* + item: null, + optgroup: null, + optgroup_header: null, + option: null, + option_create: null + */ + } + }; + + + $.fn.selectize = function(settings_user) { + var defaults = $.fn.selectize.defaults; + var settings = $.extend({}, defaults, settings_user); + var attr_data = settings.dataAttr; + var field_label = settings.labelField; + var field_value = settings.valueField; + var field_optgroup = settings.optgroupField; + var field_optgroup_label = settings.optgroupLabelField; + var field_optgroup_value = settings.optgroupValueField; + + /** + * Initializes selectize from a element. + * + * @param {object} $input + * @param {object} settings_element + */ + var init_textbox = function($input, settings_element) { + var i, n, values, option; + + var data_raw = $input.attr(attr_data); + + if (!data_raw) { + var value = $.trim($input.val() || ''); + if (!settings.allowEmptyOption && !value.length) return; + values = value.split(settings.delimiter); + for (i = 0, n = values.length; i < n; i++) { + option = {}; + option[field_label] = values[i]; + option[field_value] = values[i]; + settings_element.options.push(option); + } + settings_element.items = values; + } else { + settings_element.options = JSON.parse(data_raw); + for (i = 0, n = settings_element.options.length; i < n; i++) { + settings_element.items.push(settings_element.options[i][field_value]); + } + } + }; + + /** + * Initializes selectize from a ').appendTo(c).attr("tabindex",u.is(":disabled")?"-1":m.tabIndex),h=a(n.dropdownParent||b),e=a("
    ").addClass(n.dropdownClass).addClass(i).hide().appendTo(h),g=a("
    ").addClass(n.dropdownContentClass).appendTo(e),(l=u.attr("id"))&&(d.attr("id",l+"-selectized"),a("label[for='"+l+"']").attr("for",l+"-selectized")),m.settings.copyClassesToDropdown&&e.addClass(j),b.css({width:u[0].style.width}),m.plugins.names.length&&(k="plugin-"+m.plugins.names.join(" plugin-"),b.addClass(k),e.addClass(k)),(null===n.maxItems||n.maxItems>1)&&m.tagType===v&&u.attr("multiple","multiple"),m.settings.placeholder&&d.attr("placeholder",n.placeholder),!m.settings.splitOn&&m.settings.delimiter){var w=m.settings.delimiter.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&");m.settings.splitOn=new RegExp("\\s*"+w+"+\\s*")}u.attr("autocorrect")&&d.attr("autocorrect",u.attr("autocorrect")),u.attr("autocapitalize")&&d.attr("autocapitalize",u.attr("autocapitalize")),m.$wrapper=b,m.$control=c,m.$control_input=d,m.$dropdown=e,m.$dropdown_content=g,e.on("mouseenter","[data-selectable]",function(){return m.onOptionHover.apply(m,arguments)}),e.on("mousedown click","[data-selectable]",function(){return m.onOptionSelect.apply(m,arguments)}),F(c,"mousedown","*:not(input)",function(){return m.onItemSelect.apply(m,arguments)}),J(d),c.on({mousedown:function(){return m.onMouseDown.apply(m,arguments)},click:function(){return m.onClick.apply(m,arguments)}}),d.on({mousedown:function(a){a.stopPropagation()},keydown:function(){return m.onKeyDown.apply(m,arguments)},keyup:function(){return m.onKeyUp.apply(m,arguments)},keypress:function(){return m.onKeyPress.apply(m,arguments)},resize:function(){m.positionDropdown.apply(m,[])},blur:function(){return m.onBlur.apply(m,arguments)},focus:function(){return m.ignoreBlur=!1,m.onFocus.apply(m,arguments)},paste:function(){return m.onPaste.apply(m,arguments)}}),q.on("keydown"+o,function(a){m.isCmdDown=a[f?"metaKey":"ctrlKey"],m.isCtrlDown=a[f?"altKey":"ctrlKey"],m.isShiftDown=a.shiftKey}),q.on("keyup"+o,function(a){a.keyCode===t&&(m.isCtrlDown=!1),a.keyCode===r&&(m.isShiftDown=!1),a.keyCode===s&&(m.isCmdDown=!1)}),q.on("mousedown"+o,function(a){if(m.isFocused){if(a.target===m.$dropdown[0]||a.target.parentNode===m.$dropdown[0])return!1;m.$control.has(a.target).length||a.target===m.$control[0]||m.blur(a.target)}}),p.on(["scroll"+o,"resize"+o].join(" "),function(){m.isOpen&&m.positionDropdown.apply(m,arguments)}),p.on("mousemove"+o,function(){m.ignoreHover=!1}),this.revertSettings={$children:u.children().detach(),tabindex:u.attr("tabindex")},u.attr("tabindex",-1).hide().after(m.$wrapper),a.isArray(n.items)&&(m.setValue(n.items),delete n.items),x&&u.on("invalid"+o,function(a){a.preventDefault(),m.isInvalid=!0,m.refreshState()}),m.updateOriginalInput(),m.refreshItems(),m.refreshState(),m.updatePlaceholder(),m.isSetup=!0,u.is(":disabled")&&m.disable(),m.on("change",this.onChange),u.data("selectize",m),u.addClass("selectized"),m.trigger("initialize"),n.preload===!0&&m.onSearchChange("")},setupTemplates:function(){var b=this,c=b.settings.labelField,d=b.settings.optgroupLabelField,e={optgroup:function(a){return'
    '+a.html+"
    "},optgroup_header:function(a,b){return'
    '+b(a[d])+"
    "},option:function(a,b){return'
    '+b(a[c])+"
    "},item:function(a,b){return'
    '+b(a[c])+"
    "},option_create:function(a,b){return'
    Add '+b(a.input)+"…
    "}};b.settings.render=a.extend({},e,b.settings.render)},setupCallbacks:function(){var a,b,c={initialize:"onInitialize",change:"onChange",item_add:"onItemAdd",item_remove:"onItemRemove",clear:"onClear",option_add:"onOptionAdd",option_remove:"onOptionRemove",option_clear:"onOptionClear",optgroup_add:"onOptionGroupAdd",optgroup_remove:"onOptionGroupRemove",optgroup_clear:"onOptionGroupClear",dropdown_open:"onDropdownOpen",dropdown_close:"onDropdownClose",type:"onType",load:"onLoad",focus:"onFocus",blur:"onBlur"};for(a in c)c.hasOwnProperty(a)&&(b=this.settings[c[a]],b&&this.on(a,b))},onClick:function(a){var b=this;b.isFocused||(b.focus(),a.preventDefault())},onMouseDown:function(b){var c=this,d=b.isDefaultPrevented();a(b.target);if(c.isFocused){if(b.target!==c.$control_input[0])return"single"===c.settings.mode?c.isOpen?c.close():c.open():d||c.setActiveItem(null),!1}else d||window.setTimeout(function(){c.focus()},0)},onChange:function(){this.$input.trigger("change")},onPaste:function(b){var c=this;return c.isFull()||c.isInputHidden||c.isLocked?void b.preventDefault():void(c.settings.splitOn&&setTimeout(function(){var b=c.$control_input.val();if(b.match(c.settings.splitOn))for(var d=a.trim(b).split(c.settings.splitOn),e=0,f=d.length;eh&&(j=g,g=h,h=j),e=g;e<=h;e++)i=l.$control[0].childNodes[e],l.$activeItems.indexOf(i)===-1&&(a(i).addClass("active"),l.$activeItems.push(i));c.preventDefault()}else"mousedown"===d&&l.isCtrlDown||"keydown"===d&&this.isShiftDown?b.hasClass("active")?(f=l.$activeItems.indexOf(b[0]),l.$activeItems.splice(f,1),b.removeClass("active")):l.$activeItems.push(b.addClass("active")[0]):(a(l.$activeItems).removeClass("active"),l.$activeItems=[b.addClass("active")[0]]);l.hideInput(),this.isFocused||l.focus()}},setActiveOption:function(b,c,d){var e,f,g,h,i,j=this;j.$activeOption&&j.$activeOption.removeClass("active"),j.$activeOption=null,b=a(b),b.length&&(j.$activeOption=b.addClass("active"),!c&&y(c)||(e=j.$dropdown_content.height(),f=j.$activeOption.outerHeight(!0),c=j.$dropdown_content.scrollTop()||0,g=j.$activeOption.offset().top-j.$dropdown_content.offset().top+c,h=g,i=g-e+f,g+f>e+c?j.$dropdown_content.stop().animate({scrollTop:i},d?j.settings.scrollDuration:0):g=0;c--)f.items.indexOf(z(d.items[c].id))!==-1&&d.items.splice(c,1);return d},refreshOptions:function(b){var c,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;"undefined"==typeof b&&(b=!0);var t=this,u=a.trim(t.$control_input.val()),v=t.search(u),w=t.$dropdown_content,x=t.$activeOption&&z(t.$activeOption.attr("data-value"));for(g=v.items.length,"number"==typeof t.settings.maxOptions&&(g=Math.min(g,t.settings.maxOptions)),h={},i=[],c=0;c0||p,t.hasOptions?(v.items.length>0?(r=x&&t.getOption(x),r&&r.length?q=r:"single"===t.settings.mode&&t.items.length&&(q=t.getOption(t.items[0])),q&&q.length||(q=s&&!t.settings.addPrecedence?t.getAdjacentOption(s,1):w.find("[data-selectable]:first"))):q=s,t.setActiveOption(q),b&&!t.isOpen&&t.open()):(t.setActiveOption(null),b&&t.isOpen&&t.close())},addOption:function(b){var c,d,e,f=this;if(a.isArray(b))for(c=0,d=b.length;c=0&&e0),b.$control_input.data("grow",!c&&!d)},isFull:function(){return null!==this.settings.maxItems&&this.items.length>=this.settings.maxItems},updateOriginalInput:function(a){var b,c,d,e,f=this;if(a=a||{},f.tagType===v){for(d=[],b=0,c=f.items.length;b'+A(e)+"");d.length||this.$input.attr("multiple")||d.push(''), +f.$input.html(d.join(""))}else f.$input.val(f.getValue()),f.$input.attr("value",f.$input.val());f.isSetup&&(a.silent||f.trigger("change",f.$input.val()))},updatePlaceholder:function(){if(this.settings.placeholder){var a=this.$control_input;this.items.length?a.removeAttr("placeholder"):a.attr("placeholder",this.settings.placeholder),a.triggerHandler("update",{force:!0})}},open:function(){var a=this;a.isLocked||a.isOpen||"multi"===a.settings.mode&&a.isFull()||(a.focus(),a.isOpen=!0,a.refreshState(),a.$dropdown.css({visibility:"hidden",display:"block"}),a.positionDropdown(),a.$dropdown.css({visibility:"visible"}),a.trigger("dropdown_open",a.$dropdown))},close:function(){var a=this,b=a.isOpen;"single"===a.settings.mode&&a.items.length&&(a.hideInput(),a.$control_input.blur()),a.isOpen=!1,a.$dropdown.hide(),a.setActiveOption(null),a.refreshState(),b&&a.trigger("dropdown_close",a.$dropdown)},positionDropdown:function(){var a=this.$control,b="body"===this.settings.dropdownParent?a.offset():a.position();b.top+=a.outerHeight(!0),this.$dropdown.css({width:a.outerWidth(),top:b.top,left:b.left})},clear:function(a){var b=this;b.items.length&&(b.$control.children(":not(input)").remove(),b.items=[],b.lastQuery=null,b.setCaret(0),b.setActiveItem(null),b.updatePlaceholder(),b.updateOriginalInput({silent:a}),b.refreshState(),b.showInput(),b.trigger("clear"))},insertAtCaret:function(b){var c=Math.min(this.caretPos,this.items.length);0===c?this.$control.prepend(b):a(this.$control[0].childNodes[c]).before(b),this.setCaret(c+1)},deleteSelection:function(b){var c,d,e,f,g,h,i,j,k,l=this;if(e=b&&b.keyCode===p?-1:1,f=G(l.$control_input[0]),l.$activeOption&&!l.settings.hideSelected&&(i=l.getAdjacentOption(l.$activeOption,-1).attr("data-value")),g=[],l.$activeItems.length){for(k=l.$control.children(".active:"+(e>0?"last":"first")),h=l.$control.children(":not(input)").index(k),e>0&&h++,c=0,d=l.$activeItems.length;c0&&f.start===l.$control_input.val().length&&g.push(l.items[l.caretPos]));if(!g.length||"function"==typeof l.settings.onDelete&&l.settings.onDelete.apply(l,[g])===!1)return!1;for("undefined"!=typeof h&&l.setCaret(h);g.length;)l.removeItem(g.pop());return l.showInput(),l.positionDropdown(),l.refreshOptions(!0),i&&(j=l.getOption(i),j.length&&l.setActiveOption(j)),!0},advanceSelection:function(a,b){var c,d,e,f,g,h,i=this;0!==a&&(i.rtl&&(a*=-1),c=a>0?"last":"first",d=G(i.$control_input[0]),i.isFocused&&!i.isInputHidden?(f=i.$control_input.val().length,g=a<0?0===d.start&&0===d.length:d.start===f,g&&!f&&i.advanceCaret(a,b)):(h=i.$control.children(".active:"+c),h.length&&(e=i.$control.children(":not(input)").index(h),i.setActiveItem(null),i.setCaret(a>0?e+1:e))))},advanceCaret:function(a,b){var c,d,e=this;0!==a&&(c=a>0?"next":"prev",e.isShiftDown?(d=e.$control_input[c](),d.length&&(e.hideInput(),e.setActiveItem(d),b&&b.preventDefault())):e.setCaret(e.caretPos+a))},setCaret:function(b){var c=this;if(b="single"===c.settings.mode?c.items.length:Math.max(0,Math.min(c.items.length,b)),!c.isPending){var d,e,f,g;for(f=c.$control.children(":not(input)"),d=0,e=f.length;d
    '+a.title+'×
    '}},b),c.setup=function(){var d=c.setup;return function(){d.apply(c,arguments),c.$dropdown_header=a(b.html(b)),c.$dropdown.prepend(c.$dropdown_header)}}()}),M.define("optgroup_columns",function(b){var c=this;b=a.extend({equalizeWidth:!0,equalizeHeight:!0},b),this.getAdjacentOption=function(b,c){var d=b.closest("[data-group]").find("[data-selectable]"),e=d.index(b)+c;return e>=0&&e
    ',a=a.firstChild,c.body.appendChild(a),b=d.width=a.offsetWidth-a.clientWidth,c.body.removeChild(a)),b},e=function(){var e,f,g,h,i,j,k;if(k=a("[data-group]",c.$dropdown_content),f=k.length,f&&c.$dropdown_content.width()){if(b.equalizeHeight){for(g=0,e=0;e1&&(i=j-h*(f-1),k.eq(f-1).css({width:i})))}};(b.equalizeHeight||b.equalizeWidth)&&(B.after(this,"positionDropdown",e),B.after(this,"refreshOptions",e))}),M.define("remove_button",function(b){b=a.extend({label:"×",title:"Remove",className:"remove",append:!0},b);var c=function(b,c){c.className="remove-single";var d=b,e=''+c.label+"",f=function(a,b){return a+b};b.setup=function(){var g=d.setup;return function(){if(c.append){var h=a(d.$input.context).attr("id"),i=(a("#"+h),d.settings.render.item);d.settings.render.item=function(a){return f(i.apply(b,arguments),e)}}g.apply(b,arguments),b.$control.on("click","."+c.className,function(a){a.preventDefault(),d.isLocked||d.clear()})}}()},d=function(b,c){var d=b,e=''+c.label+"",f=function(a,b){var c=a.search(/(<\/[^>]+>\s*)$/);return a.substring(0,c)+b+a.substring(c)};b.setup=function(){var g=d.setup;return function(){if(c.append){var h=d.settings.render.item;d.settings.render.item=function(a){return f(h.apply(b,arguments),e)}}g.apply(b,arguments),b.$control.on("click","."+c.className,function(b){if(b.preventDefault(),!d.isLocked){var c=a(b.currentTarget).parent();d.setActiveItem(c),d.deleteSelection()&&d.setCaret(d.items.length)}})}}()};return"single"===this.settings.mode?void c(this,b):void d(this,b)}),M.define("restore_on_backspace",function(a){var b=this;a.text=a.text||function(a){return a[this.settings.labelField]},this.onKeyDown=function(){var c=b.onKeyDown;return function(b){var d,e;return b.keyCode===p&&""===this.$control_input.val()&&!this.$activeItems.length&&(d=this.caretPos-1,d>=0&&d .selectize-input > div.ui-sortable-placeholder { + visibility: visible !important; + background: #f2f2f2 !important; + background: rgba(0,0,0,0.06) !important; + border: 0 none !important; + .selectize-box-shadow(inset 0 0 12px 4px #fff); + } + .ui-sortable-placeholder::after { + content: '!'; + visibility: hidden; + } + .ui-sortable-helper { + .selectize-box-shadow(0 2px 5px rgba(0,0,0,0.2)); + } +} \ No newline at end of file diff --git a/modoboa/bower_components/selectize/dist/less/plugins/dropdown_header.less b/modoboa/bower_components/selectize/dist/less/plugins/dropdown_header.less new file mode 100644 index 000000000..c3e777e16 --- /dev/null +++ b/modoboa/bower_components/selectize/dist/less/plugins/dropdown_header.less @@ -0,0 +1,20 @@ +.selectize-dropdown-header { + position: relative; + padding: @selectize-padding-dropdown-item-y @selectize-padding-dropdown-item-x; + border-bottom: 1px solid @selectize-color-border; + background: mix(@selectize-color-dropdown, @selectize-color-border, 85%); + .selectize-border-radius(@selectize-border-radius @selectize-border-radius 0 0); +} +.selectize-dropdown-header-close { + position: absolute; + right: @selectize-padding-dropdown-item-x; + top: 50%; + color: @selectize-color-text; + opacity: 0.4; + margin-top: -12px; + line-height: 20px; + font-size: 20px !important; +} +.selectize-dropdown-header-close:hover { + color: darken(@selectize-color-text, 25%); +} \ No newline at end of file diff --git a/modoboa/bower_components/selectize/dist/less/plugins/optgroup_columns.less b/modoboa/bower_components/selectize/dist/less/plugins/optgroup_columns.less new file mode 100644 index 000000000..5c72d7a0a --- /dev/null +++ b/modoboa/bower_components/selectize/dist/less/plugins/optgroup_columns.less @@ -0,0 +1,17 @@ +.selectize-dropdown.plugin-optgroup_columns { + .optgroup { + border-right: 1px solid #f2f2f2; + border-top: 0 none; + float: left; + .selectize-box-sizing(border-box); + } + .optgroup:last-child { + border-right: 0 none; + } + .optgroup:before { + display: none; + } + .optgroup-header { + border-top: 0 none; + } +} \ No newline at end of file diff --git a/modoboa/bower_components/selectize/dist/less/plugins/remove_button.less b/modoboa/bower_components/selectize/dist/less/plugins/remove_button.less new file mode 100644 index 000000000..b5303c559 --- /dev/null +++ b/modoboa/bower_components/selectize/dist/less/plugins/remove_button.less @@ -0,0 +1,43 @@ +.selectize-control.plugin-remove_button { + [data-value] { + position: relative; + padding-right: 24px !important; + } + [data-value] .remove { + z-index: 1; /* fixes ie bug (see #392) */ + position: absolute; + top: 0; + right: 0; + bottom: 0; + width: 17px; + text-align: center; + font-weight: bold; + font-size: 12px; + color: inherit; + text-decoration: none; + vertical-align: middle; + display: inline-block; + padding: @selectize-padding-item-y 0 0 0; + border-left: 1px solid @selectize-color-item-border; + .selectize-border-radius(0 2px 2px 0); + .selectize-box-sizing(border-box); + } + [data-value] .remove:hover { + background: rgba(0,0,0,0.05); + } + [data-value].active .remove { + border-left-color: @selectize-color-item-active-border; + } + .disabled [data-value] .remove:hover { + background: none; + } + .disabled [data-value] .remove { + border-left-color: lighten(desaturate(@selectize-color-item-border, 100%), @selectize-lighten-disabled-item-border); + } + .remove-single { + position: absolute; + right: 28px; + top: 6px; + font-size: 23px; + } +} diff --git a/modoboa/bower_components/selectize/dist/less/selectize.bootstrap2.less b/modoboa/bower_components/selectize/dist/less/selectize.bootstrap2.less new file mode 100644 index 000000000..d4dce713c --- /dev/null +++ b/modoboa/bower_components/selectize/dist/less/selectize.bootstrap2.less @@ -0,0 +1,161 @@ +/** + * selectize.bootstrap2.css (v0.12.4) - Bootstrap 2 Theme + * Copyright (c) 2013–2015 Brian Reavis & contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this + * file except in compliance with the License. You may obtain a copy of the License at: + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF + * ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + * + * @author Brian Reavis + */ + +@import "selectize"; + +@selectize-font-family: @baseFontFamily; +@selectize-font-size: @baseFontSize; +@selectize-line-height: @baseLineHeight; + +@selectize-color-text: @textColor; +@selectize-color-highlight: rgba(255,237,40,0.4); +@selectize-color-input: @inputBackground; +@selectize-color-input-full: @inputBackground; +@selectize-color-disabled: @inputBackground; +@selectize-color-item: @btnBackgroundHighlight; +@selectize-color-item-border: @btnBorder; +@selectize-color-item-active: @dropdownLinkBackgroundHover; +@selectize-color-item-active-text: @dropdownLinkColorHover; +@selectize-color-item-active-border: darken(@selectize-color-item-active, 5%); +@selectize-color-optgroup: @dropdownBackground; +@selectize-color-optgroup-text: @grayLight; +@selectize-color-optgroup-border: @dropdownDividerTop; +@selectize-color-dropdown: @dropdownBackground; +@selectize-color-dropdown-border: @inputBorder; +@selectize-color-dropdown-border-top: @dropdownDividerTop; +@selectize-color-dropdown-item-active: @dropdownLinkBackgroundHover; +@selectize-color-dropdown-item-active-text: @dropdownLinkColorHover; +@selectize-color-dropdown-item-create-active-text: @dropdownLinkColorHover; +@selectize-lighten-disabled-item: 8%; +@selectize-lighten-disabled-item-text: 8%; +@selectize-lighten-disabled-item-border: 8%; +@selectize-opacity-disabled: 0.5; +@selectize-shadow-input: none; +@selectize-shadow-input-focus: inset 0 1px 2px rgba(0,0,0,0.15); +@selectize-border-radius: @inputBorderRadius; + +@selectize-padding-x: 10px; +@selectize-padding-y: 7px; +@selectize-padding-dropdown-item-x: @selectize-padding-x; +@selectize-padding-dropdown-item-y: 3px; +@selectize-padding-item-x: 3px; +@selectize-padding-item-y: 1px; +@selectize-margin-item-x: 3px; +@selectize-margin-item-y: 3px; +@selectize-caret-margin: 0; + +@selectize-arrow-size: 5px; +@selectize-arrow-color: @black; +@selectize-arrow-offset: @selectize-padding-x + 5px; + +@selectize-width-item-border: 1px; + +.selectize-dropdown { + margin: 2px 0 0 0; + z-index: @zindexDropdown; + border: 1px solid @dropdownBorder; + border-radius: @baseBorderRadius; + .box-shadow(0 5px 10px rgba(0,0,0,.2)); + + .optgroup-header { + font-size: 11px; + font-weight: bold; + text-shadow: 0 1px 0 rgba(255,255,255,.5); + text-transform: uppercase; + } + .optgroup:first-child:before { + display: none; + } + .optgroup:before { + content: ' '; + display: block; + .nav-divider(); + margin-left: @selectize-padding-dropdown-item-x * -1; + margin-right: @selectize-padding-dropdown-item-x * -1; + } + + [data-selectable].active { + #gradient > .vertical(@dropdownLinkBackgroundHover, darken(@dropdownLinkBackgroundHover, 5%)); + } +} + +.selectize-dropdown-content { + padding: 5px 0; +} + +.selectize-dropdown-header { + padding: @selectize-padding-dropdown-item-y * 2 @selectize-padding-dropdown-item-x; +} + +.selectize-input { + .transition(~"border linear .2s, box-shadow linear .2s"); + + &.dropdown-active { + .selectize-border-radius(@selectize-border-radius); + } + &.dropdown-active::before { + display: none; + } + &.input-active, &.input-active:hover, .selectize-control.multi &.focus { + background: @selectize-color-input !important; + border-color: rgba(82,168,236,.8) !important; + outline: 0 !important; + outline: thin dotted \9 !important; + .box-shadow(~"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6)") !important; + } +} + +.selectize-control { + &.single { + .selectize-input { + .buttonBackground(@btnBackground, @btnBackgroundHighlight, @grayDark, 0 1px 1px rgba(255,255,255,.75)); + .box-shadow(~"inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05)"); + &:hover { + color: @grayDark; + text-decoration: none; + background-position: 0 -15px; + .transition(background-position .1s linear); + } + &.disabled { + background: @btnBackgroundHighlight !important; + .box-shadow(none); + } + } + } + &.multi { + .selectize-input { + .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); + &.has-items { + @padding-x: @selectize-padding-x - @selectize-padding-item-x; + padding-left: @padding-x; + padding-right: @padding-x; + } + } + .selectize-input > div { + .gradientBar(@btnBackground, @btnBackgroundHighlight, @selectize-color-item-text, none); + *background-color: @selectize-color-item; + border: @selectize-width-item-border solid @selectize-color-item-border; + .border-radius(@baseBorderRadius); + .box-shadow(~"inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05)"); + &.active { + .box-shadow(~"0 1px 2px rgba(0,0,0,.05)"); + .gradientBar(@selectize-color-item-active, @selectize-color-item-active-border, @selectize-color-item-active-text, none); + *background-color: @selectize-color-item-active; + border: @selectize-width-item-border solid @dropdownLinkBackgroundHover; + } + } + } +} \ No newline at end of file diff --git a/modoboa/bower_components/selectize/dist/less/selectize.bootstrap3.less b/modoboa/bower_components/selectize/dist/less/selectize.bootstrap3.less new file mode 100644 index 000000000..19b3ccd13 --- /dev/null +++ b/modoboa/bower_components/selectize/dist/less/selectize.bootstrap3.less @@ -0,0 +1,150 @@ +/** + * selectize.bootstrap3.css (v0.12.4) - Bootstrap 3 Theme + * Copyright (c) 2013–2015 Brian Reavis & contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this + * file except in compliance with the License. You may obtain a copy of the License at: + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF + * ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + * + * @author Brian Reavis + */ + +@import "selectize"; + +@selectize-font-family: inherit; +@selectize-font-size: inherit; +@selectize-line-height: @line-height-computed; + +@selectize-color-text: @text-color; +@selectize-color-highlight: rgba(255,237,40,0.4); +@selectize-color-input: @input-bg; +@selectize-color-input-full: @input-bg; +@selectize-color-input-error: @state-danger-text; +@selectize-color-input-error-focus: darken(@selectize-color-input-error, 10%); +@selectize-color-disabled: @input-bg; +@selectize-color-item: #efefef; +@selectize-color-item-border: rgba(0,0,0,0); +@selectize-color-item-active: @component-active-bg; +@selectize-color-item-active-text: #fff; +@selectize-color-item-active-border: rgba(0,0,0,0); +@selectize-color-optgroup: @dropdown-bg; +@selectize-color-optgroup-text: @dropdown-header-color; +@selectize-color-optgroup-border: @dropdown-divider-bg; +@selectize-color-dropdown: @dropdown-bg; +@selectize-color-dropdown-border-top: mix(@input-border, @input-bg, 0.8); +@selectize-color-dropdown-item-active: @dropdown-link-hover-bg; +@selectize-color-dropdown-item-active-text: @dropdown-link-hover-color; +@selectize-color-dropdown-item-create-active-text: @dropdown-link-hover-color; +@selectize-opacity-disabled: 0.5; +@selectize-shadow-input: none; +@selectize-shadow-input-focus: inset 0 1px 2px rgba(0,0,0,0.15); +@selectize-shadow-input-error: inset 0 1px 1px rgba(0, 0, 0, .075); +@selectize-shadow-input-error-focus: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px lighten(@selectize-color-input-error, 20%); +@selectize-border: 1px solid @input-border; +@selectize-border-radius: @input-border-radius; + +@selectize-width-item-border: 0; +@selectize-padding-x: @padding-base-horizontal; +@selectize-padding-y: @padding-base-vertical; +@selectize-padding-dropdown-item-x: @padding-base-horizontal; +@selectize-padding-dropdown-item-y: 3px; +@selectize-padding-item-x: 3px; +@selectize-padding-item-y: 1px; +@selectize-margin-item-x: 3px; +@selectize-margin-item-y: 3px; +@selectize-caret-margin: 0; + +@selectize-arrow-size: 5px; +@selectize-arrow-color: @selectize-color-text; +@selectize-arrow-offset: @selectize-padding-x + 5px; + +.selectize-dropdown, .selectize-dropdown.form-control { + height: auto; + padding: 0; + margin: 2px 0 0 0; + z-index: @zindex-dropdown; + background: @selectize-color-dropdown; + border: 1px solid @dropdown-fallback-border; + border: 1px solid @dropdown-border; + .selectize-border-radius(@border-radius-base); + .selectize-box-shadow(0 6px 12px rgba(0,0,0,.175)); +} + +.selectize-dropdown { + .optgroup-header { + font-size: @font-size-small; + line-height: @line-height-base; + } + .optgroup:first-child:before { + display: none; + } + .optgroup:before { + content: ' '; + display: block; + .nav-divider(); + margin-left: @selectize-padding-dropdown-item-x * -1; + margin-right: @selectize-padding-dropdown-item-x * -1; + } +} + +.selectize-dropdown-content { + padding: 5px 0; +} + +.selectize-dropdown-header { + padding: @selectize-padding-dropdown-item-y * 2 @selectize-padding-dropdown-item-x; +} + +.selectize-input { + min-height: @input-height-base; + + &.dropdown-active { + .selectize-border-radius(@selectize-border-radius); + } + &.dropdown-active::before { + display: none; + } + &.focus { + @color: @input-border-focus; + @color-rgba: rgba(red(@color), green(@color), blue(@color), .6); + border-color: @color; + outline: 0; + .selectize-box-shadow(~"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}"); + } +} + +.has-error .selectize-input { + border-color: @selectize-color-input-error; + .selectize-box-shadow(@selectize-shadow-input-error); + + &:focus { + border-color: @selectize-color-input-error-focus; + .selectize-box-shadow(@selectize-shadow-input-error-focus); + } +} + +.selectize-control { + &.multi { + .selectize-input.has-items { + padding-left: @selectize-padding-x - @selectize-padding-item-x; + padding-right: @selectize-padding-x - @selectize-padding-item-x; + } + .selectize-input > div { + .selectize-border-radius(@selectize-border-radius - 1px); + } + } +} + +.form-control.selectize-control { + padding: 0; + height: auto; + border: none; + background: none; + .selectize-box-shadow(none); + .selectize-border-radius(0); +} diff --git a/modoboa/bower_components/selectize/dist/less/selectize.default.less b/modoboa/bower_components/selectize/dist/less/selectize.default.less new file mode 100644 index 000000000..812c4eba2 --- /dev/null +++ b/modoboa/bower_components/selectize/dist/less/selectize.default.less @@ -0,0 +1,84 @@ +/** + * selectize.default.css (v0.12.4) - Default Theme + * Copyright (c) 2013–2015 Brian Reavis & contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this + * file except in compliance with the License. You may obtain a copy of the License at: + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF + * ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + * + * @author Brian Reavis + */ + +@import "selectize"; + +@selectize-color-item: #1da7ee; +@selectize-color-item-text: #fff; +@selectize-color-item-active-text: #fff; +@selectize-color-item-border: #0073bb; +@selectize-color-item-active: #92c836; +@selectize-color-item-active-border: #00578d; +@selectize-width-item-border: 1px; +@selectize-caret-margin: 0 1px; + +.selectize-control { + &.multi { + .selectize-input { + &.has-items { + @padding-x: @selectize-padding-x - 3px; + padding-left: @padding-x; + padding-right: @padding-x; + } + &.disabled [data-value] { + color: #999; + text-shadow: none; + background: none; + .selectize-box-shadow(none); + + &, .remove { + border-color: #e6e6e6; + } + .remove { + background: none; + } + } + [data-value] { + text-shadow: 0 1px 0 rgba(0,51,83,0.3); + .selectize-border-radius(3px); + .selectize-vertical-gradient(#1da7ee, #178ee9); + .selectize-box-shadow(~"0 1px 0 rgba(0,0,0,0.2),inset 0 1px rgba(255,255,255,0.03)"); + &.active { + .selectize-vertical-gradient(#008fd8, #0075cf); + } + } + } + } + &.single { + .selectize-input { + .selectize-box-shadow(~"0 1px 0 rgba(0,0,0,0.05), inset 0 1px 0 rgba(255,255,255,0.8)"); + .selectize-vertical-gradient(#fefefe, #f2f2f2); + } + } +} + +.selectize-control.single .selectize-input, .selectize-dropdown.single { + border-color: #b8b8b8; +} + +.selectize-dropdown { + .optgroup-header { + padding-top: @selectize-padding-dropdown-item-y + 2px; + font-weight: bold; + font-size: 0.85em; + } + .optgroup { + border-top: 1px solid @selectize-color-dropdown-border-top; + &:first-child { + border-top: 0 none; + } + } +} \ No newline at end of file diff --git a/modoboa/bower_components/selectize/dist/less/selectize.legacy.less b/modoboa/bower_components/selectize/dist/less/selectize.legacy.less new file mode 100644 index 000000000..2b7c7cbb2 --- /dev/null +++ b/modoboa/bower_components/selectize/dist/less/selectize.legacy.less @@ -0,0 +1,75 @@ +/** + * selectize.legacy.css (v0.12.4) - Default Theme + * Copyright (c) 2013–2015 Brian Reavis & contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this + * file except in compliance with the License. You may obtain a copy of the License at: + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF + * ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + * + * @author Brian Reavis + */ + +@import "selectize"; + +@selectize-font-size: 13px; +@selectize-line-height: 20px; + +@selectize-color-input-full: #f2f2f2; +@selectize-color-item: #b8e76f; +@selectize-color-item-text: #3d5d18; +@selectize-color-item-border: #74b21e; +@selectize-color-item-active: #92c836; +@selectize-color-item-active-border: #6f9839; +@selectize-color-highlight: rgba(255,237,40,0.4); +@selectize-color-dropdown-item-active: #fffceb; +@selectize-color-dropdown-item-active-text: @selectize-color-text; +@selectize-color-optgroup: #f8f8f8; +@selectize-color-optgroup-text: @selectize-color-text; +@selectize-width-item-border: 1px; + +@selectize-padding-x: 10px; +@selectize-padding-y: 10px; +@selectize-padding-item-x: 5px; +@selectize-padding-item-y: 1px; +@selectize-padding-dropdown-item-x: 10px; +@selectize-padding-dropdown-item-y: 7px; +@selectize-margin-item-x: 4px; +@selectize-margin-item-y: 4px; + +.selectize-control { + &.multi { + .selectize-input [data-value] { + text-shadow: 0 1px 0 rgba(255,255,255,0.1); + .selectize-border-radius(3px); + .selectize-vertical-gradient(#b8e76f, #a9e25c); + .selectize-box-shadow(0 1px 1px rgba(0,0,0,0.1)); + &.active { + .selectize-vertical-gradient(#92c836, #7abc2c); + } + } + } + &.single { + .selectize-input { + .selectize-box-shadow(~"inset 0 1px 0 rgba(255,255,255,0.8), 0 2px 0 #e0e0e0, 0 3px 0 #c8c8c8, 0 4px 1px rgba(0,0,0,0.1)"); + .selectize-vertical-gradient(#f5f5f5, #efefef); + } + } +} + +.selectize-control.single .selectize-input, .selectize-dropdown.single { + border-color: #b8b8b8; +} + +.selectize-dropdown { + .optgroup-header { + font-weight: bold; + font-size: 0.8em; + border-bottom: 1px solid @selectize-color-dropdown-border-top; + border-top: 1px solid @selectize-color-dropdown-border-top; + } +} \ No newline at end of file diff --git a/modoboa/bower_components/selectize/dist/less/selectize.less b/modoboa/bower_components/selectize/dist/less/selectize.less new file mode 100644 index 000000000..df1c41bcb --- /dev/null +++ b/modoboa/bower_components/selectize/dist/less/selectize.less @@ -0,0 +1,296 @@ +@import "plugins/drag_drop"; +@import "plugins/dropdown_header"; +@import "plugins/optgroup_columns"; +@import "plugins/remove_button"; + +// base styles + +@selectize-font-family: inherit; +@selectize-font-smoothing: inherit; +@selectize-font-size: 13px; +@selectize-line-height: 18px; + +@selectize-color-text: #303030; +@selectize-color-border: #d0d0d0; +@selectize-color-highlight: rgba(125,168,208,0.2); +@selectize-color-input: #fff; +@selectize-color-input-full: @selectize-color-input; +@selectize-color-disabled: #fafafa; +@selectize-color-item: #f2f2f2; +@selectize-color-item-text: @selectize-color-text; +@selectize-color-item-border: #d0d0d0; +@selectize-color-item-active: #e8e8e8; +@selectize-color-item-active-text: @selectize-color-text; +@selectize-color-item-active-border: #cacaca; +@selectize-color-dropdown: #fff; +@selectize-color-dropdown-border: @selectize-color-border; +@selectize-color-dropdown-border-top: #f0f0f0; +@selectize-color-dropdown-item-active: #f5fafd; +@selectize-color-dropdown-item-active-text: #495c68; +@selectize-color-dropdown-item-create-text: rgba(red(@selectize-color-text), green(@selectize-color-text), blue(@selectize-color-text), 0.5); +@selectize-color-dropdown-item-create-active-text: @selectize-color-dropdown-item-active-text; +@selectize-color-optgroup: @selectize-color-dropdown; +@selectize-color-optgroup-text: @selectize-color-text; +@selectize-lighten-disabled-item: 30%; +@selectize-lighten-disabled-item-text: 30%; +@selectize-lighten-disabled-item-border: 30%; +@selectize-opacity-disabled: 0.5; + +@selectize-shadow-input: inset 0 1px 1px rgba(0,0,0,0.1); +@selectize-shadow-input-focus: inset 0 1px 2px rgba(0,0,0,0.15); +@selectize-border: 1px solid @selectize-color-border; +@selectize-dropdown-border: 1px solid @selectize-color-dropdown-border; +@selectize-border-radius: 3px; + +@selectize-width-item-border: 0; +@selectize-max-height-dropdown: 200px; + +@selectize-padding-x: 8px; +@selectize-padding-y: 8px; +@selectize-padding-item-x: 6px; +@selectize-padding-item-y: 2px; +@selectize-padding-dropdown-item-x: @selectize-padding-x; +@selectize-padding-dropdown-item-y: 5px; +@selectize-margin-item-x: 3px; +@selectize-margin-item-y: 3px; + +@selectize-arrow-size: 5px; +@selectize-arrow-color: #808080; +@selectize-arrow-offset: 15px; + +@selectize-caret-margin: 0 2px 0 0; +@selectize-caret-margin-rtl: 0 4px 0 -2px; + +.selectize-border-radius (@radii) { + -webkit-border-radius: @radii; + -moz-border-radius: @radii; + border-radius: @radii; +} +.selectize-unselectable () { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.selectize-box-shadow (@shadow) { + -webkit-box-shadow: @shadow; + box-shadow: @shadow; +} +.selectize-box-sizing (@type: border-box) { + -webkit-box-sizing: @type; + -moz-box-sizing: @type; + box-sizing: @type; +} +.selectize-vertical-gradient (@color-top, @color-bottom) { + background-color: mix(@color-top, @color-bottom, 60%); + background-image: -moz-linear-gradient(top, @color-top, @color-bottom); // FF 3.6+ + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@color-top), to(@color-bottom)); // Safari 4+, Chrome 2+ + background-image: -webkit-linear-gradient(top, @color-top, @color-bottom); // Safari 5.1+, Chrome 10+ + background-image: -o-linear-gradient(top, @color-top, @color-bottom); // Opera 11.10 + background-image: linear-gradient(to bottom, @color-top, @color-bottom); // Standard, IE10 + background-repeat: repeat-x; + filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@color-top),argb(@color-bottom))); // IE9 and down +} + +.selectize-control { + position: relative; +} + +.selectize-dropdown, .selectize-input, .selectize-input input { + color: @selectize-color-text; + font-family: @selectize-font-family; + font-size: @selectize-font-size; + line-height: @selectize-line-height; + -webkit-font-smoothing: @selectize-font-smoothing; +} + +.selectize-input, .selectize-control.single .selectize-input.input-active { + background: @selectize-color-input; + cursor: text; + display: inline-block; +} + +.selectize-input { + border: @selectize-border; + padding: @selectize-padding-y @selectize-padding-x; + display: inline-block; + width: 100%; + overflow: hidden; + position: relative; + z-index: 1; + .selectize-box-sizing(border-box); + .selectize-box-shadow(@selectize-shadow-input); + .selectize-border-radius(@selectize-border-radius); + + .selectize-control.multi &.has-items { + @padding-x: @selectize-padding-x; + @padding-top: @selectize-padding-y - @selectize-padding-item-y - @selectize-width-item-border; + @padding-bottom: @selectize-padding-y - @selectize-padding-item-y - @selectize-margin-item-y - @selectize-width-item-border; + padding: @padding-top @padding-x @padding-bottom; + } + + &.full { + background-color: @selectize-color-input-full; + } + &.disabled, &.disabled * { + cursor: default !important; + } + &.focus { + .selectize-box-shadow(@selectize-shadow-input-focus); + } + &.dropdown-active { + .selectize-border-radius(@selectize-border-radius @selectize-border-radius 0 0); + } + + > * { + vertical-align: baseline; + display: -moz-inline-stack; + display: inline-block; + zoom: 1; + *display: inline; + } + .selectize-control.multi & > div { + cursor: pointer; + margin: 0 @selectize-margin-item-x @selectize-margin-item-y 0; + padding: @selectize-padding-item-y @selectize-padding-item-x; + background: @selectize-color-item; + color: @selectize-color-item-text; + border: @selectize-width-item-border solid @selectize-color-item-border; + + &.active { + background: @selectize-color-item-active; + color: @selectize-color-item-active-text; + border: @selectize-width-item-border solid @selectize-color-item-active-border; + } + } + .selectize-control.multi &.disabled > div { + &, &.active { + color: lighten(desaturate(@selectize-color-item-text, 100%), @selectize-lighten-disabled-item-text); + background: lighten(desaturate(@selectize-color-item, 100%), @selectize-lighten-disabled-item); + border: @selectize-width-item-border solid lighten(desaturate(@selectize-color-item-border, 100%), @selectize-lighten-disabled-item-border); + } + } + > input { + &::-ms-clear { + display: none; + } + display: inline-block !important; + padding: 0 !important; + min-height: 0 !important; + max-height: none !important; + max-width: 100% !important; + margin: @selectize-caret-margin !important; + text-indent: 0 !important; + border: 0 none !important; + background: none !important; + line-height: inherit !important; + -webkit-user-select: auto !important; + .selectize-box-shadow(none) !important; + &:focus { outline: none !important; } + } +} + +.selectize-input::after { + content: ' '; + display: block; + clear: left; +} + +.selectize-input.dropdown-active::before { + content: ' '; + display: block; + position: absolute; + background: @selectize-color-dropdown-border-top; + height: 1px; + bottom: 0; + left: 0; + right: 0; +} + +.selectize-dropdown { + position: absolute; + z-index: 10; + border: @selectize-dropdown-border; + background: @selectize-color-dropdown; + margin: -1px 0 0 0; + border-top: 0 none; + .selectize-box-sizing(border-box); + .selectize-box-shadow(0 1px 3px rgba(0,0,0,0.1)); + .selectize-border-radius(0 0 @selectize-border-radius @selectize-border-radius); + + [data-selectable] { + cursor: pointer; + overflow: hidden; + .highlight { + background: @selectize-color-highlight; + .selectize-border-radius(1px); + } + } + [data-selectable], .optgroup-header { + padding: @selectize-padding-dropdown-item-y @selectize-padding-dropdown-item-x; + } + .optgroup:first-child .optgroup-header { + border-top: 0 none; + } + .optgroup-header { + color: @selectize-color-optgroup-text; + background: @selectize-color-optgroup; + cursor: default; + } + .active { + background-color: @selectize-color-dropdown-item-active; + color: @selectize-color-dropdown-item-active-text; + &.create { + color: @selectize-color-dropdown-item-create-active-text; + } + } + .create { + color: @selectize-color-dropdown-item-create-text; + } +} + +.selectize-dropdown-content { + overflow-y: auto; + overflow-x: hidden; + max-height: @selectize-max-height-dropdown; + -webkit-overflow-scrolling: touch; +} + +.selectize-control.single .selectize-input { + &, input { cursor: pointer; } + &.input-active, &.input-active input { cursor: text; } + + &:after { + content: ' '; + display: block; + position: absolute; + top: 50%; + right: @selectize-arrow-offset; + margin-top: round((-1 * @selectize-arrow-size / 2)); + width: 0; + height: 0; + border-style: solid; + border-width: @selectize-arrow-size @selectize-arrow-size 0 @selectize-arrow-size; + border-color: @selectize-arrow-color transparent transparent transparent; + } + &.dropdown-active:after { + margin-top: @selectize-arrow-size * -0.8; + border-width: 0 @selectize-arrow-size @selectize-arrow-size @selectize-arrow-size; + border-color: transparent transparent @selectize-arrow-color transparent; + } +} + +.selectize-control.rtl { + &.single .selectize-input:after { + left: @selectize-arrow-offset; + right: auto; + } + .selectize-input > input { + margin: @selectize-caret-margin-rtl !important; + } +} + +.selectize-control .selectize-input.disabled { + opacity: @selectize-opacity-disabled; + background-color: @selectize-color-disabled; +} diff --git a/modoboa/bower_components/selectize/karma.conf.js b/modoboa/bower_components/selectize/karma.conf.js new file mode 100644 index 000000000..01d8902d2 --- /dev/null +++ b/modoboa/bower_components/selectize/karma.conf.js @@ -0,0 +1,107 @@ +module.exports = function(config) { + // workaround for https://github.com/karma-runner/karma-sauce-launcher/issues/40 + var saucelabsBatchID = Number(process.env.SAUCELABS_BATCH) - 1; + var saucelabsConcurrency = 4; + var saucelabsBrowsers = [ + // mobile + {platform: 'OS X 10.10', browserName: 'iPhone', version: '8.1'}, + //{platform: 'OS X 10.10 ', browserName: 'iPhone', version: '6.0'}, + {platform: 'OS X 10.10', browserName: 'iPad', version: '8.1'}, + //{platform: 'OS X 10.10', browserName: 'iPad', version: '6.0'}, + {platform: 'Linux', browserName: 'android', version: '4.4'}, + {platform: 'Linux', browserName: 'android', version: '4.3'}, + // desktop (safari) + {platform: 'OS X 10.8', browserName: 'safari', version: 6}, + {platform: 'OS X 10.9', browserName: 'safari', version: 7}, + {platform: 'OS X 10.10', browserName: 'safari', version: 8}, + // desktop (chrome) + {platform: 'OS X 10.10', browserName: 'chrome', version: 39}, + {platform: 'OS X 10.10', browserName: 'chrome', version: 38}, + {platform: 'OS X 10.10', browserName: 'chrome', version: 37}, + {platform: 'Windows 7', browserName: 'chrome', version: 39}, + {platform: 'Windows 7', browserName: 'chrome', version: 38}, + {platform: 'Windows 7', browserName: 'chrome', version: 37}, + // desktop (firefox) + {platform: 'Windows 7', browserName: 'firefox', version: 35}, + {platform: 'Windows 8', browserName: 'firefox', version: 35}, + {platform: 'OS X 10.10', browserName: 'firefox', version: 34}, + {platform: 'OS X 10.10', browserName: 'firefox', version: 33}, + {platform: 'OS X 10.10', browserName: 'firefox', version: 32}, + // desktop (internet explorer) + {platform: 'Windows 8', browserName: 'iexplore', version: 10}, + {platform: 'Windows 8.1', browserName: 'iexplore', version: 11}, + {platform: 'Windows 7', browserName: 'iexplore', version: 9} + ]; + + if (process.env.TARGET === 'saucelabs') { + saucelabsBrowsers = saucelabsBrowsers.slice(saucelabsBatchID * saucelabsConcurrency, saucelabsBatchID * saucelabsConcurrency + saucelabsConcurrency); + if (!saucelabsBrowsers.length) process.exit(0); + } + + var customLaunchers = {}; + saucelabsBrowsers.forEach(function(browser, i) { + browser.base = 'SauceLabs'; + customLaunchers['SL_' + i] = browser; + }); + + var targets = { + 'saucelabs': Object.keys(customLaunchers), + 'phantomjs': ['PhantomJS'] + }; + + var reporters = ['mocha']; + if (process.env.TRAVIS_CI) { + reporters = process.env.TARGET === 'saucelabs' + ? ['saucelabs', 'mocha'] + : ['mocha', 'coverage', 'coveralls'] + } + + var browsers = targets[process.env.TARGET || 'phantomjs']; + if (process.env.BROWSERS) { + browsers = process.env.BROWSERS.split(','); + } + + config.set({ + frameworks: ['mocha', 'chai'], + files: [ + 'dist/css/selectize.default.css', + 'bower_components/jquery/jquery.js', + 'bower_components/microplugin/src/microplugin.js', + 'bower_components/sifter/sifter.js', + 'test/support/*.js', + 'src/contrib/*.js', + 'src/constants.js', + 'src/utils.js', + 'src/selectize.js', + 'src/defaults.js', + 'src/selectize.jquery.js', + 'test/*.js' + ], + preprocessors: { + 'src/*.js': ['coverage'] + }, + coverageReporter: { + type: process.env.TRAVIS_CI && process.env.TARGET === 'phantomjs' ? 'lcov' : 'text-summary', + dir: 'coverage/' + }, + sauceLabs: { + recordVideo: false, + startConnect: true, + tunnelIdentifier: process.env.TRAVIS_JOB_NUMBER, + build: process.env.TRAVIS_BUILD_NUMBER, + testName: process.env.COMMIT_MESSAGE, + tags: ['selectize', 'test'] + }, + customLaunchers: customLaunchers, + reporters: reporters, + port: 8888, + colors: true, + captureTimeout: 0, + logLevel: config.LOG_INFO, + browsers: browsers, + browserDisconnectTolerance: 2, + browserDisconnectTimeout: 10000, + browserNoActivityTimeout: 120000, + singleRun: true + }); +}; \ No newline at end of file diff --git a/modoboa/bower_components/selectize/yarn.lock b/modoboa/bower_components/selectize/yarn.lock new file mode 100644 index 000000000..6ff315482 --- /dev/null +++ b/modoboa/bower_components/selectize/yarn.lock @@ -0,0 +1,4346 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 +abbrev@~1.0.4, abbrev@1, abbrev@1.0.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" + +accepts@~1.2.12, accepts@~1.2.13: + version "1.2.13" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.2.13.tgz#e5f1f3928c6d95fd96558c36ec3d9d0de4a6ecea" + dependencies: + mime-types "~2.1.6" + negotiator "0.5.3" + +accepts@~1.3.0, accepts@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca" + dependencies: + mime-types "~2.1.11" + negotiator "0.6.1" + +active-x-obfuscator@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/active-x-obfuscator/-/active-x-obfuscator-0.0.1.tgz#089b89b37145ff1d9ec74af6530be5526cae1f1a" + dependencies: + zeparser "0.0.5" + +adm-zip@~0.4.3: + version "0.4.7" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.7.tgz#8606c2cbf1c426ce8c8ec00174447fd49b6eafc1" + +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + +amdefine@>=0.0.4: + version "1.0.0" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.0.tgz#fd17474700cb5cc9c2b709f0be9d23ce3c198c33" + +ansi-regex@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-0.1.0.tgz#55ca60db6900857c423ae9297980026f941ed903" + +ansi-regex@^0.2.0, ansi-regex@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-0.2.1.tgz#0d8e946967a3d8143f93e24e298525fc1b2235f9" + +ansi-regex@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-1.1.1.tgz#41c847194646375e6a1a5d10c3ca054ef9fc980d" + +ansi-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.0.0.tgz#c5061b6e0ef8a81775e50f5d66151bf6bf371107" + +ansi-styles@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.1.0.tgz#eaecbf66cd706882760b2f4691582b8f55d7a7de" + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + +ansi-styles@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz#cb102df1c56f5123eab8b67cd7b98027a0279178" + +ansicolors@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.2.1.tgz#be089599097b74a5c9c4a84a0cdbcdb62bd87aef" + +anymatch@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" + dependencies: + arrify "^1.0.0" + micromatch "^2.1.5" + +aproba@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.0.4.tgz#2713680775e7614c8ba186c065d4e2e52d1072c0" + +archiver@~0.14.0: + version "0.14.4" + resolved "https://registry.yarnpkg.com/archiver/-/archiver-0.14.4.tgz#5b9ddb9f5ee1ceef21cb8f3b020e6240ecb4315c" + dependencies: + async "~0.9.0" + buffer-crc32 "~0.2.1" + glob "~4.3.0" + lazystream "~0.1.0" + lodash "~3.2.0" + readable-stream "~1.0.26" + tar-stream "~1.1.0" + zip-stream "~0.5.0" + +archy@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/archy/-/archy-0.0.2.tgz#910f43bf66141fc335564597abc189df44b3d35e" + +are-we-there-yet@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3" + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.0 || ^1.1.13" + +argparse@^1.0.7: + version "1.0.9" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" + dependencies: + sprintf-js "~1.0.2" + +"argparse@~ 0.1.11": + version "0.1.16" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-0.1.16.tgz#cfd01e0fbba3d6caed049fbd758d40f65196f57c" + dependencies: + underscore "~1.7.0" + underscore.string "~2.4.0" + +arr-diff@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + dependencies: + arr-flatten "^1.0.1" + +arr-flatten@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b" + +array-filter@~0.0.0: + version "0.0.1" + resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" + +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + +array-map@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" + +array-reduce@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" + +array-unique@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + +arrify@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + +asn1@~0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + +asn1@0.1.11: + version "0.1.11" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.1.11.tgz#559be18376d08a4ec4dbe80877d27818639b2df7" + +assert-plus@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.1.5.tgz#ee74009413002d84cec7219c6ac811812e723160" + +assert-plus@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" + +assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + +assertion-error@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.2.tgz#13ca515d86206da0bac66e834dd397d87581094c" + +async-each@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" + +async@^0.2.9, async@~0.2.6, async@~0.2.8, async@~0.2.9, async@0.2.x: + version "0.2.10" + resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" + +async@^0.9.0, async@~0.9.0: + version "0.9.2" + resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" + +async@^1.4.0, async@^1.5.0, async@^1.5.2, async@1.x: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + +async@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/async/-/async-2.1.1.tgz#e11b6d10043f2254efb61a21163d840ccddb8d28" + dependencies: + lodash "^4.14.0" + +async@~0.1.22: + version "0.1.22" + resolved "https://registry.yarnpkg.com/async/-/async-0.1.22.tgz#0fc1aaa088a0e3ef0ebe2d8831bab0dcf8845061" + +async@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async/-/async-1.0.0.tgz#f8fc04ca3a13784ade9e1641af98578cfbd647a9" + +async@0.1.15: + version "0.1.15" + resolved "https://registry.yarnpkg.com/async/-/async-0.1.15.tgz#2180eaca2cf2a6ca5280d41c0585bec9b3e49bd3" + +async@0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/async/-/async-0.9.0.tgz#ac3613b1da9bed1b47510bb4651b8931e47146c7" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + +aws-sign2@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.5.0.tgz#c57103f7a17fc037f02d7c2e64b602ea223f7d63" + +aws-sign2@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" + +aws4@^1.2.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.5.0.tgz#0a29ffb79c31c9e712eeb087e8e7a64b4a56d755" + +balanced-match@^0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" + +base64-url@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/base64-url/-/base64-url-1.2.1.tgz#199fd661702a0e7b7dcae6e0698bb089c52f6d78" + +base64-url@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/base64-url/-/base64-url-1.2.2.tgz#90af26ef8b0b67bc801b05eccf943345649008b3" + +base64id@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/base64id/-/base64id-0.1.0.tgz#02ce0fdeee0cef4f40080e1e73e834f0b1bfce3f" + +basic-auth-connect@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/basic-auth-connect/-/basic-auth-connect-1.0.0.tgz#fdb0b43962ca7b40456a7c2bb48fe173da2d2122" + +basic-auth@~1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-1.0.4.tgz#030935b01de7c9b94a824b29f3fccb750d3a5290" + +batch@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.5.3.tgz#3f3414f380321743bfc1042f9a83ff1d5824d464" + +bcrypt-pbkdf@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz#3ca76b85241c7170bf7d9703e7b9aa74630040d4" + dependencies: + tweetnacl "^0.14.3" + +binary-extensions@^1.0.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.7.0.tgz#6c1610db163abfb34edfe42fa423343a1e01185d" + +binary@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" + dependencies: + buffers "~0.1.1" + chainsaw "~0.1.0" + +bindings@1.2.x: + version "1.2.1" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.2.1.tgz#14ad6113812d2d37d72e67b4cacb4bb726505f11" + +bl@^0.9.0, bl@~0.9.0: + version "0.9.5" + resolved "https://registry.yarnpkg.com/bl/-/bl-0.9.5.tgz#c06b797af085ea00bc527afc8efcf11de2232054" + dependencies: + readable-stream "~1.0.26" + +bl@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/bl/-/bl-1.1.2.tgz#fdca871a99713aa00d19e3bbba41c44787a65398" + dependencies: + readable-stream "~2.0.5" + +block-stream@*: + version "0.0.9" + resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + dependencies: + inherits "~2.0.0" + +bluebird@^2.9.30: + version "2.11.0" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1" + +body-parser@~1.13.3: + version "1.13.3" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.13.3.tgz#c08cf330c3358e151016a05746f13f029c97fa97" + dependencies: + bytes "2.1.0" + content-type "~1.0.1" + debug "~2.2.0" + depd "~1.0.1" + http-errors "~1.3.1" + iconv-lite "0.4.11" + on-finished "~2.3.0" + qs "4.0.0" + raw-body "~2.1.2" + type-is "~1.6.6" + +body-parser@~1.14.0: + version "1.14.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.14.2.tgz#1015cb1fe2c443858259581db53332f8d0cf50f9" + dependencies: + bytes "2.2.0" + content-type "~1.0.1" + debug "~2.2.0" + depd "~1.1.0" + http-errors "~1.3.1" + iconv-lite "0.4.13" + on-finished "~2.3.0" + qs "5.2.0" + raw-body "~2.1.5" + type-is "~1.6.10" + +boom@0.4.x: + version "0.4.2" + resolved "https://registry.yarnpkg.com/boom/-/boom-0.4.2.tgz#7a636e9ded4efcefb19cef4947a3c67dfaee911b" + dependencies: + hoek "0.9.x" + +boom@2.x.x: + version "2.10.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" + dependencies: + hoek "2.x.x" + +bower-config@~0.5.0, bower-config@~0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/bower-config/-/bower-config-0.5.2.tgz#1f7d2e899e99b70c29a613e70d4c64590414b22e" + dependencies: + graceful-fs "~2.0.0" + mout "~0.9.0" + optimist "~0.6.0" + osenv "0.0.3" + +bower-endpoint-parser@~0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/bower-endpoint-parser/-/bower-endpoint-parser-0.2.2.tgz#00b565adbfab6f2d35addde977e97962acbcb3f6" + +bower-json@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/bower-json/-/bower-json-0.4.0.tgz#a99c3ccf416ef0590ed0ded252c760f1c6d93766" + dependencies: + deep-extend "~0.2.5" + graceful-fs "~2.0.0" + intersect "~0.0.3" + +bower-logger@~0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/bower-logger/-/bower-logger-0.2.2.tgz#39be07e979b2fc8e03a94634205ed9422373d381" + +bower-registry-client@~0.2.0: + version "0.2.4" + resolved "https://registry.yarnpkg.com/bower-registry-client/-/bower-registry-client-0.2.4.tgz#269fc7e898b627fb939d1144a593254d7fbbeebc" + dependencies: + async "~0.2.8" + bower-config "~0.5.0" + graceful-fs "~2.0.0" + lru-cache "~2.3.0" + mkdirp "~0.3.5" + request "~2.51.0" + request-replay "~0.2.0" + rimraf "~2.2.0" + +bower@~1.3.0: + version "1.3.12" + resolved "https://registry.yarnpkg.com/bower/-/bower-1.3.12.tgz#37de0edb3904baf90aee13384a1a379a05ee214c" + dependencies: + abbrev "~1.0.4" + archy "0.0.2" + bower-config "~0.5.2" + bower-endpoint-parser "~0.2.2" + bower-json "~0.4.0" + bower-logger "~0.2.2" + bower-registry-client "~0.2.0" + cardinal "0.4.0" + chalk "0.5.0" + chmodr "0.1.0" + decompress-zip "0.0.8" + fstream "~1.0.2" + fstream-ignore "~1.0.1" + glob "~4.0.2" + graceful-fs "~3.0.1" + handlebars "~2.0.0" + inquirer "0.7.1" + insight "0.4.3" + is-root "~1.0.0" + junk "~1.0.0" + lockfile "~1.0.0" + lru-cache "~2.5.0" + mkdirp "0.5.0" + mout "~0.9.0" + nopt "~3.0.0" + opn "~1.0.0" + osenv "0.1.0" + p-throttler "0.1.0" + promptly "0.2.0" + q "~1.0.1" + request "~2.42.0" + request-progress "0.3.0" + retry "0.6.0" + rimraf "~2.2.0" + semver "~2.3.0" + shell-quote "~1.4.1" + stringify-object "~1.0.0" + tar-fs "0.5.2" + tmp "0.0.23" + update-notifier "0.2.0" + which "~1.0.5" + +brace-expansion@^1.0.0: + version "1.1.6" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" + dependencies: + balanced-match "^0.4.1" + concat-map "0.0.1" + +braces@^1.8.2: + version "1.8.5" + resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + dependencies: + expand-range "^1.8.1" + preserve "^0.2.0" + repeat-element "^1.1.2" + +browser-stdout@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" + +browserify-zlib@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d" + dependencies: + pako "~0.2.0" + +buffer-crc32@~0.2.1: + version "0.2.5" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.5.tgz#db003ac2671e62ebd6ece78ea2c2e1b405736e91" + +buffer-shims@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" + +buffers@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" + +builtin-modules@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + +bytes@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.1.0.tgz#ac93c410e2ffc9cc7cf4b464b38289067f5e47b4" + +bytes@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.2.0.tgz#fd35464a403f6f9117c2de3609ecff9cae000588" + +bytes@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339" + +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + +camelcase@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + +cardinal@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-0.4.0.tgz#7d10aafb20837bde043c45e43a0c8c28cdaae45e" + dependencies: + redeyed "~0.4.0" + +cardinal@0.4.x: + version "0.4.4" + resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-0.4.4.tgz#ca5bb68a5b511b90fe93b9acea49bdee5c32bfe2" + dependencies: + ansicolors "~0.2.1" + redeyed "~0.4.0" + +caseless@~0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" + +caseless@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.6.0.tgz#8167c1ab8397fb5bb95f96d28e5a81c50f247ac4" + +caseless@~0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.8.0.tgz#5bca2881d41437f54b2407ebe34888c7b9ad4f7d" + +caseless@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.9.0.tgz#b7b65ce6bf1413886539cfd533f0b30effa9cf88" + +center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + +chai@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/chai/-/chai-3.5.0.tgz#4d02637b067fe958bdbfdd3a40ec56fef7373247" + dependencies: + assertion-error "^1.0.1" + deep-eql "^0.1.3" + type-detect "^1.0.0" + +chainsaw@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" + dependencies: + traverse ">=0.3.0 <0.4" + +chalk@^0.4.0, chalk@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f" + dependencies: + ansi-styles "~1.0.0" + has-color "~0.1.0" + strip-ansi "~0.1.0" + +chalk@^0.5.0, chalk@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.5.1.tgz#663b3a648b68b55d04690d49167aa837858f2174" + dependencies: + ansi-styles "^1.1.0" + escape-string-regexp "^1.0.0" + has-ansi "^0.1.0" + strip-ansi "^0.3.0" + supports-color "^0.2.0" + +chalk@^1.0.0, chalk@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.5.0.tgz#375dfccbc21c0a60a8b61bc5b78f3dc2a55c212f" + dependencies: + ansi-styles "^1.1.0" + escape-string-regexp "^1.0.0" + has-ansi "^0.1.0" + strip-ansi "^0.3.0" + supports-color "^0.2.0" + +chmodr@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/chmodr/-/chmodr-0.1.0.tgz#e09215a1d51542db2a2576969765bcf6125583eb" + +chokidar@^1.0.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.0.tgz#90c32ad4802901d7713de532dc284e96a63ad058" + dependencies: + anymatch "^1.3.0" + async-each "^1.0.0" + glob-parent "^2.0.0" + inherits "^2.0.1" + is-binary-path "^1.0.0" + is-glob "^2.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.0.0" + optionalDependencies: + fsevents "^1.0.0" + +clean-css@2.0.x: + version "2.0.8" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-2.0.8.tgz#e937cdfdcc5781a00817aec4079e85b3ec157a20" + dependencies: + commander "2.0.x" + +cli-color@~0.3.2: + version "0.3.3" + resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-0.3.3.tgz#12d5bdd158ff8a0b0db401198913c03df069f6f5" + dependencies: + d "~0.1.1" + es5-ext "~0.10.6" + memoizee "~0.3.8" + timers-ext "0.1" + +cliui@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + +code-point-at@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.0.1.tgz#1104cd34f9b5b45d3eba88f1babc1924e1ce35fb" + dependencies: + number-is-nan "^1.0.0" + +coffee-script@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/coffee-script/-/coffee-script-1.3.3.tgz#150d6b4cb522894369efed6a2101c20bc7f4a4f4" + +coffee-script@~1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/coffee-script/-/coffee-script-1.8.0.tgz#9c9f1d2b4a52a000ded15b659791703648263c1d" + dependencies: + mkdirp "~0.3.5" + +colors@^1.1.0, "colors@>= 0.3.0": + version "1.1.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" + +colors@~0.6.0-1, colors@~0.6.2, colors@0.x.x: + version "0.6.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-0.6.2.tgz#2423fe6678ac0c5dae8852e5d0e5be08c997abcc" + +combined-stream@^1.0.5, combined-stream@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" + dependencies: + delayed-stream "~1.0.0" + +combined-stream@~0.0.4, combined-stream@~0.0.5: + version "0.0.7" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-0.0.7.tgz#0137e657baa5a7541c57ac37ac5fc07d73b4dc1f" + dependencies: + delayed-stream "0.0.5" + +commander@^2.8.1, commander@^2.9.0, commander@2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" + dependencies: + graceful-readlink ">= 1.0.0" + +commander@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.1.0.tgz#d121bbae860d9992a3d517ba96f56588e47c6781" + +commander@2.0.x: + version "2.0.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.0.0.tgz#d1b86f901f8b64bd941bdeadaf924530393be928" + +compress-commons@~0.2.0: + version "0.2.9" + resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-0.2.9.tgz#422d927430c01abd06cd455b6dfc04cb4cf8003c" + dependencies: + buffer-crc32 "~0.2.1" + crc32-stream "~0.3.1" + node-int64 "~0.3.0" + readable-stream "~1.0.26" + +compressible@~2.0.5: + version "2.0.8" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.8.tgz#7162e6c46d3b9d200ffb45cb4e4a0f7832732503" + dependencies: + mime-db ">= 1.23.0 < 2" + +compression@~1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.5.2.tgz#b03b8d86e6f8ad29683cba8df91ddc6ffc77b395" + dependencies: + accepts "~1.2.12" + bytes "2.1.0" + compressible "~2.0.5" + debug "~2.2.0" + on-headers "~1.0.0" + vary "~1.0.1" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +concat-stream@^1.4.1: + version "1.5.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.2.tgz#708978624d856af41a5a741defdd261da752c266" + dependencies: + inherits "~2.0.1" + readable-stream "~2.0.0" + typedarray "~0.0.5" + +concat-stream@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.0.tgz#53f7d43c51c5e43f81c8fdd03321c631be68d611" + dependencies: + inherits "~2.0.1" + readable-stream "~2.0.0" + typedarray "~0.0.5" + +config-chain@~1.1.8: + version "1.1.11" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.11.tgz#aba09747dfbe4c3e70e766a6e41586e1859fc6f2" + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + +configstore@^0.3.0, configstore@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-0.3.2.tgz#25e4c16c3768abf75c5a65bc61761f495055b459" + dependencies: + graceful-fs "^3.0.1" + js-yaml "^3.1.0" + mkdirp "^0.5.0" + object-assign "^2.0.0" + osenv "^0.1.0" + user-home "^1.0.0" + uuid "^2.0.1" + xdg-basedir "^1.0.0" + +connect-livereload@^0.5.0: + version "0.5.4" + resolved "https://registry.yarnpkg.com/connect-livereload/-/connect-livereload-0.5.4.tgz#80157d1371c9f37cc14039ab1895970d119dc3bc" + +connect-timeout@~1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/connect-timeout/-/connect-timeout-1.6.2.tgz#de9a5ec61e33a12b6edaab7b5f062e98c599b88e" + dependencies: + debug "~2.2.0" + http-errors "~1.3.1" + ms "0.7.1" + on-headers "~1.0.0" + +connect@^2.29.2: + version "2.30.2" + resolved "https://registry.yarnpkg.com/connect/-/connect-2.30.2.tgz#8da9bcbe8a054d3d318d74dfec903b5c39a1b609" + dependencies: + basic-auth-connect "1.0.0" + body-parser "~1.13.3" + bytes "2.1.0" + compression "~1.5.2" + connect-timeout "~1.6.2" + content-type "~1.0.1" + cookie "0.1.3" + cookie-parser "~1.3.5" + cookie-signature "1.0.6" + csurf "~1.8.3" + debug "~2.2.0" + depd "~1.0.1" + errorhandler "~1.4.2" + express-session "~1.11.3" + finalhandler "0.4.0" + fresh "0.3.0" + http-errors "~1.3.1" + method-override "~2.3.5" + morgan "~1.6.1" + multiparty "3.3.2" + on-headers "~1.0.0" + parseurl "~1.3.0" + pause "0.1.0" + qs "4.0.0" + response-time "~2.3.1" + serve-favicon "~2.3.0" + serve-index "~1.7.2" + serve-static "~1.10.0" + type-is "~1.6.6" + utils-merge "1.0.0" + vhost "~3.0.1" + +connect@^3.4.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/connect/-/connect-3.5.0.tgz#b357525a0b4c1f50599cd983e1d9efeea9677198" + dependencies: + debug "~2.2.0" + finalhandler "0.5.0" + parseurl "~1.3.1" + utils-merge "1.0.0" + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + +content-type@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" + +cookie-parser@~1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.3.5.tgz#9d755570fb5d17890771227a02314d9be7cf8356" + dependencies: + cookie "0.1.3" + cookie-signature "1.0.6" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + +cookie@0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.1.3.tgz#e734a5c1417fce472d5aef82c381cabb64d1a435" + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + +coveralls@~2.11.2: + version "2.11.14" + resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-2.11.14.tgz#645a05ac72aa4f2ee811c667390d4ad36f0c2e26" + dependencies: + js-yaml "3.6.1" + lcov-parse "0.0.10" + log-driver "1.2.5" + minimist "1.2.0" + request "2.75.0" + +crc@3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/crc/-/crc-3.3.0.tgz#fa622e1bc388bf257309082d6b65200ce67090ba" + +crc32-stream@~0.3.1: + version "0.3.4" + resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-0.3.4.tgz#73bc25b45fac1db6632231a7bfce8927e9f06552" + dependencies: + buffer-crc32 "~0.2.1" + readable-stream "~1.0.24" + +cryptiles@0.2.x: + version "0.2.2" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-0.2.2.tgz#ed91ff1f17ad13d3748288594f8a48a0d26f325c" + dependencies: + boom "0.4.x" + +cryptiles@2.x.x: + version "2.0.5" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" + dependencies: + boom "2.x.x" + +csrf@~3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/csrf/-/csrf-3.0.3.tgz#69d13220de95762808bb120f7533a994fc4293b5" + dependencies: + base64-url "1.2.2" + rndm "1.2.0" + tsscmp "1.0.5" + uid-safe "2.1.1" + +csurf@~1.8.3: + version "1.8.3" + resolved "https://registry.yarnpkg.com/csurf/-/csurf-1.8.3.tgz#23f2a13bf1d8fce1d0c996588394442cba86a56a" + dependencies: + cookie "0.1.3" + cookie-signature "1.0.6" + csrf "~3.0.0" + http-errors "~1.3.1" + +csv-parse@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/csv-parse/-/csv-parse-1.1.7.tgz#6e4678f7967013ac823929a4303a3ce177115abc" + +ctype@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/ctype/-/ctype-0.5.3.tgz#82c18c2461f74114ef16c135224ad0b9144ca12f" + +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + dependencies: + array-find-index "^1.0.1" + +d@^0.1.1, d@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/d/-/d-0.1.1.tgz#da184c535d18d8ee7ba2aa229b914009fae11309" + dependencies: + es5-ext "~0.10.2" + +dashdash@^1.12.0: + version "1.14.0" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.0.tgz#29e486c5418bf0f356034a993d51686a33e84141" + dependencies: + assert-plus "^1.0.0" + +dateformat@~1.0.6: + version "1.0.12" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" + dependencies: + get-stdin "^4.0.1" + meow "^3.3.0" + +dateformat@1.0.2-1.2.3: + version "1.0.2-1.2.3" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.2-1.2.3.tgz#b0220c02de98617433b72851cf47de3df2cdbee9" + +debug@~2.2.0, debug@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" + dependencies: + ms "0.7.1" + +debug@0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39" + +decamelize@^1.0.0, decamelize@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + +decompress-zip@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/decompress-zip/-/decompress-zip-0.0.8.tgz#4a265b22c7b209d7b24fa66f2b2dfbced59044f3" + dependencies: + binary "~0.3.0" + graceful-fs "~3.0.0" + mkpath "~0.1.0" + nopt "~2.2.0" + q "~1.0.0" + readable-stream "~1.1.8" + touch "0.0.2" + +deep-eql@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2" + dependencies: + type-detect "0.1.1" + +deep-equal@*: + version "1.0.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" + +deep-extend@~0.2.5: + version "0.2.11" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.2.11.tgz#7a16ba69729132340506170494bc83f7076fe08f" + +deep-extend@~0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" + +deep-is@~0.1.2: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + +delayed-stream@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-0.0.5.tgz#d4b1f43a93e8296dfe02694f4680bc37a313c73f" + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + +depd@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.0.1.tgz#80aec64c9d6d97e65cc2a9caa93c0aa6abf73aaa" + +depd@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + +di@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" + +diff@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf" + +ecc-jsbn@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + dependencies: + jsbn "~0.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + +encodeurl@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" + +end-of-stream@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.1.0.tgz#e9353258baa9108965efc41cb0ef8ade2f3cfb07" + dependencies: + once "~1.3.0" + +end-of-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.0.0.tgz#d4596e702734a93e40e9af864319eabd99ff2f0e" + dependencies: + once "~1.3.0" + +error-ex@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.0.tgz#e67b43f3e82c96ea3a584ffee0b9fc3325d802d9" + dependencies: + is-arrayish "^0.2.1" + +errorhandler@~1.4.2: + version "1.4.3" + resolved "https://registry.yarnpkg.com/errorhandler/-/errorhandler-1.4.3.tgz#b7b70ed8f359e9db88092f2d20c0f831420ad83f" + dependencies: + accepts "~1.3.0" + escape-html "~1.0.3" + +es5-ext@^0.10.7, es5-ext@~0.10.11, es5-ext@~0.10.2, es5-ext@~0.10.5, es5-ext@~0.10.6, es5-ext@~0.10.7: + version "0.10.12" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.12.tgz#aa84641d4db76b62abba5e45fd805ecbab140047" + dependencies: + es6-iterator "2" + es6-symbol "~3.1" + +es6-iterator@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-0.1.3.tgz#d6f58b8c4fc413c249b4baa19768f8e4d7c8944e" + dependencies: + d "~0.1.1" + es5-ext "~0.10.5" + es6-symbol "~2.0.1" + +es6-iterator@2: + version "2.0.0" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.0.tgz#bd968567d61635e33c0b80727613c9cb4b096bac" + dependencies: + d "^0.1.1" + es5-ext "^0.10.7" + es6-symbol "3" + +es6-promise@~4.0.3: + version "4.0.5" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.0.5.tgz#7882f30adde5b240ccfa7f7d78c548330951ae42" + +es6-symbol@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-2.0.1.tgz#761b5c67cfd4f1d18afb234f691d678682cb3bf3" + dependencies: + d "~0.1.1" + es5-ext "~0.10.5" + +es6-symbol@~3.1, es6-symbol@3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.0.tgz#94481c655e7a7cad82eba832d97d5433496d7ffa" + dependencies: + d "~0.1.1" + es5-ext "~0.10.11" + +es6-weak-map@~0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-0.1.4.tgz#706cef9e99aa236ba7766c239c8b9e286ea7d228" + dependencies: + d "~0.1.1" + es5-ext "~0.10.6" + es6-iterator "~0.1.3" + es6-symbol "~2.0.1" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + +escape-html@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.2.tgz#d77d32fa98e38c2f41ae85e9278e0e0e6ba1022c" + +escape-string-regexp@^1.0.0, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5, escape-string-regexp@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +escodegen@1.7.x: + version "1.7.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.7.1.tgz#30ecfcf66ca98dc67cd2fd162abeb6eafa8ce6fc" + dependencies: + esprima "^1.2.2" + estraverse "^1.9.1" + esutils "^2.0.2" + optionator "^0.5.0" + optionalDependencies: + source-map "~0.2.0" + +esprima@^1.2.2, esprima@1.2.x: + version "1.2.5" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.2.5.tgz#0993502feaf668138325756f30f9a51feeec11e9" + +esprima@^2.6.0: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + +"esprima@~ 1.0.2", esprima@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.0.4.tgz#9f557e08fc3b4d26ece9dd34f8fbf476b62585ad" + +esprima@2.5.x: + version "2.5.0" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.5.0.tgz#f387a46fd344c1b1a39baf8c20bfb43b6d0058cc" + +estraverse@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" + +estraverse@~1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.8.0.tgz#3f1264fb62c8500dbae5e4f73705cd576d6af428" + +esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + +etag@~1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.7.0.tgz#03d30b5f67dd6e632d2945d30d6652731a34d5d8" + +event-emitter@~0.3.4: + version "0.3.4" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.4.tgz#8d63ddfb4cfe1fae3b32ca265c4c720222080bb5" + dependencies: + d "~0.1.1" + es5-ext "~0.10.7" + +eventemitter2@~0.4.13: + version "0.4.14" + resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-0.4.14.tgz#8f61b75cde012b2e9eb284d4545583b5643b61ab" + +exec-sh@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.0.tgz#14f75de3f20d286ef933099b2ce50a90359cef10" + dependencies: + merge "^1.1.3" + +exit@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + +expand-brackets@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + dependencies: + is-posix-bracket "^0.1.0" + +expand-range@^1.8.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + dependencies: + fill-range "^2.1.0" + +express-session@~1.11.3: + version "1.11.3" + resolved "https://registry.yarnpkg.com/express-session/-/express-session-1.11.3.tgz#5cc98f3f5ff84ed835f91cbf0aabd0c7107400af" + dependencies: + cookie "0.1.3" + cookie-signature "1.0.6" + crc "3.3.0" + debug "~2.2.0" + depd "~1.0.1" + on-headers "~1.0.0" + parseurl "~1.3.0" + uid-safe "~2.0.0" + utils-merge "1.0.0" + +extend@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" + +extglob@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + dependencies: + is-extglob "^1.0.0" + +extract-zip@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.5.0.tgz#92ccf6d81ef70a9fa4c1747114ccef6d8688a6c4" + dependencies: + concat-stream "1.5.0" + debug "0.7.4" + mkdirp "0.5.0" + yauzl "2.4.1" + +extsprintf@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" + +fast-levenshtein@~1.0.0: + version "1.0.7" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-1.0.7.tgz#0178dcdee023b92905193af0959e8a7639cfdcb9" + +faye-websocket@~0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + dependencies: + websocket-driver ">=0.5.1" + +fd-slicer@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65" + dependencies: + pend "~1.2.0" + +figures@^1.0.1, figures@^1.3.2: + version "1.7.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" + dependencies: + escape-string-regexp "^1.0.5" + object-assign "^4.1.0" + +filename-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775" + +fileset@0.1.x: + version "0.1.8" + resolved "https://registry.yarnpkg.com/fileset/-/fileset-0.1.8.tgz#506b91a9396eaa7e32fb42a84077c7a0c736b741" + dependencies: + glob "3.x" + minimatch "0.x" + +fileset@0.2.x: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fileset/-/fileset-0.2.1.tgz#588ef8973c6623b2a76df465105696b96aac8067" + dependencies: + glob "5.x" + minimatch "2.x" + +fill-range@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^1.1.3" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + +finalhandler@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-0.4.0.tgz#965a52d9e8d05d2b857548541fb89b53a2497d9b" + dependencies: + debug "~2.2.0" + escape-html "1.0.2" + on-finished "~2.3.0" + unpipe "~1.0.0" + +finalhandler@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-0.5.0.tgz#e9508abece9b6dba871a6942a1d7911b91911ac7" + dependencies: + debug "~2.2.0" + escape-html "~1.0.3" + on-finished "~2.3.0" + statuses "~1.3.0" + unpipe "~1.0.0" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +findup-sync@~0.1.0, findup-sync@~0.1.2: + version "0.1.3" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.1.3.tgz#7f3e7a97b82392c653bf06589bd85190e93c3683" + dependencies: + glob "~3.2.9" + lodash "~2.4.1" + +for-in@^0.1.5: + version "0.1.6" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8" + +for-own@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.4.tgz#0149b41a39088c7515f51ebe1c1386d45f935072" + dependencies: + for-in "^0.1.5" + +forever-agent@~0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.5.2.tgz#6d0e09c4921f94a27f63d3b49c5feff1ea4c5130" + +forever-agent@~0.6.0, forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + +form-data@~0.1.0: + version "0.1.4" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-0.1.4.tgz#91abd788aba9702b1aabfa8bc01031a2ac9e3b12" + dependencies: + async "~0.9.0" + combined-stream "~0.0.4" + mime "~1.2.11" + +form-data@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-0.2.0.tgz#26f8bc26da6440e299cbdcfb69035c4f77a6e466" + dependencies: + async "~0.9.0" + combined-stream "~0.0.4" + mime-types "~2.0.3" + +form-data@~1.0.0-rc4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-1.0.1.tgz#ae315db9a4907fa065502304a66d7733475ee37c" + dependencies: + async "^2.0.1" + combined-stream "^1.0.5" + mime-types "^2.1.11" + +form-data@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.0.0.tgz#6f0aebadcc5da16c13e1ecc11137d85f9b883b25" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.11" + +fresh@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.3.0.tgz#651f838e22424e7566de161d8358caa199f83d4f" + +fs-extra@~0.30.0: + version "0.30.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + klaw "^1.0.0" + path-is-absolute "^1.0.0" + rimraf "^2.2.8" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +fsevents@^1.0.0: + version "1.0.14" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.0.14.tgz#558e8cc38643d8ef40fe45158486d0d25758eee4" + dependencies: + nan "^2.3.0" + node-pre-gyp "^0.6.29" + +fstream-ignore@~1.0.1, fstream-ignore@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" + dependencies: + fstream "^1.0.0" + inherits "2" + minimatch "^3.0.0" + +fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10, fstream@~1.0.2: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.10.tgz#604e8a92fe26ffd9f6fae30399d4984e1ab22822" + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + +gauge@~2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.6.0.tgz#d35301ad18e96902b4751dcbbe40f4218b942a46" + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-color "^0.1.7" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +gaze@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.2.tgz#847224677adb8870d679257ed3388fdb61e40105" + dependencies: + globule "^1.0.0" + +generate-function@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" + +generate-object-property@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" + dependencies: + is-property "^1.0.0" + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + +getobject@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/getobject/-/getobject-0.1.0.tgz#047a449789fa160d018f5486ed91320b6ec7885c" + +getpass@^0.1.1: + version "0.1.6" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6" + dependencies: + assert-plus "^1.0.0" + +glob-base@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + +glob-parent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + dependencies: + is-glob "^2.0.0" + +glob@^5.0.6, glob@5.x: + version "5.0.15" + resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.5: + version "7.1.1" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.2" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@~3.1.21: + version "3.1.21" + resolved "https://registry.yarnpkg.com/glob/-/glob-3.1.21.tgz#d29e0a055dea5138f4d07ed40e8982e83c2066cd" + dependencies: + graceful-fs "~1.2.0" + inherits "1" + minimatch "~0.2.11" + +glob@~3.2.9, glob@3.x: + version "3.2.11" + resolved "https://registry.yarnpkg.com/glob/-/glob-3.2.11.tgz#4a973f635b9190f715d10987d5c00fd2815ebe3d" + dependencies: + inherits "2" + minimatch "0.3" + +glob@~4.0.2: + version "4.0.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-4.0.6.tgz#695c50bdd4e2fb5c5d370b091f388d3707e291a7" + dependencies: + graceful-fs "^3.0.2" + inherits "2" + minimatch "^1.0.0" + once "^1.3.0" + +glob@~4.3.0, glob@~4.3.4: + version "4.3.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-4.3.5.tgz#80fbb08ca540f238acce5d11d1e9bc41e75173d3" + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "^2.0.1" + once "^1.3.0" + +glob@~7.0.3: + version "7.0.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.6.tgz#211bafaf49e525b8cd93260d14ab136152b3f57a" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.2" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@7.0.5: + version "7.0.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.5.tgz#b4202a69099bbb4d292a7c1b95b6682b67ebdc95" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.2" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globule@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/globule/-/globule-1.0.0.tgz#f22aebaacce02be492453e979c3ae9b6983f1c6c" + dependencies: + glob "~7.0.3" + lodash "~4.9.0" + minimatch "~3.0.0" + +got@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/got/-/got-0.3.0.tgz#888ec66ca4bc735ab089dbe959496d0f79485493" + dependencies: + object-assign "^0.3.0" + +graceful-fs@^3.0.1, graceful-fs@^3.0.2, graceful-fs@^3.0.6, graceful-fs@~3.0.0, graceful-fs@~3.0.1: + version "3.0.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.11.tgz#7613c778a1afea62f25c630a086d7f3acbbdd818" + dependencies: + natives "^1.1.0" + +graceful-fs@^4.1.2, graceful-fs@^4.1.6: + version "4.1.9" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.9.tgz#baacba37d19d11f9d146d3578bc99958c3787e29" + +graceful-fs@~1.1: + version "1.1.14" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-1.1.14.tgz#07078db5f6377f6321fceaaedf497de124dc9465" + +graceful-fs@~1.2.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-1.2.3.tgz#15a4806a57547cb2d2dbf27f42e89a8c3451b364" + +graceful-fs@~2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-2.0.3.tgz#7cd2cdb228a4a3f36e95efa6cc142de7d1a136d0" + +"graceful-readlink@>= 1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" + +growl@1.9.2: + version "1.9.2" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" + +grunt-bower-task@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/grunt-bower-task/-/grunt-bower-task-0.4.0.tgz#daea0a55682a79a8c79db895b79be6f3ecb65817" + dependencies: + async "~0.1.22" + bower "~1.3.0" + colors "~0.6.0-1" + lodash "~0.10.0" + rimraf "~2.0.2" + wrench "~1.4.3" + +grunt-cli@^0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/grunt-cli/-/grunt-cli-0.1.13.tgz#e9ebc4047631f5012d922770c39378133cad10f4" + dependencies: + findup-sync "~0.1.0" + nopt "~1.0.10" + resolve "~0.3.1" + +grunt-contrib-clean@0.5.x: + version "0.5.0" + resolved "https://registry.yarnpkg.com/grunt-contrib-clean/-/grunt-contrib-clean-0.5.0.tgz#f53dfdee0849b1c7b40e9ebbba69f48c4c6079c5" + dependencies: + rimraf "~2.2.1" + +grunt-contrib-concat@0.3.x: + version "0.3.0" + resolved "https://registry.yarnpkg.com/grunt-contrib-concat/-/grunt-contrib-concat-0.3.0.tgz#48fa0d4336d29b653ad8225a6bd6f856b4483e32" + +grunt-contrib-connect@1.x: + version "1.0.2" + resolved "https://registry.yarnpkg.com/grunt-contrib-connect/-/grunt-contrib-connect-1.0.2.tgz#5cf933b91a67386044273c0b2444603cd98879ba" + dependencies: + async "^1.5.2" + connect "^3.4.0" + connect-livereload "^0.5.0" + http2 "^3.3.4" + morgan "^1.6.1" + opn "^4.0.0" + portscanner "^1.0.0" + serve-index "^1.7.1" + serve-static "^1.10.0" + +grunt-contrib-copy@0.4.x: + version "0.4.1" + resolved "https://registry.yarnpkg.com/grunt-contrib-copy/-/grunt-contrib-copy-0.4.1.tgz#f0753b40ae21bb706daefb0b299e03cdf5fa9d6e" + +grunt-contrib-less@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/grunt-contrib-less/-/grunt-contrib-less-0.9.0.tgz#af1e6e76511c2bc328ef8d284058643ca5887675" + dependencies: + chalk "~0.4.0" + grunt-lib-contrib "~0.6.1" + less "~1.6.0" + +grunt-contrib-uglify@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/grunt-contrib-uglify/-/grunt-contrib-uglify-1.0.2.tgz#ae67a46f9153edd4cb11813a55eb69c70d7db2fb" + dependencies: + chalk "^1.0.0" + lodash "^4.0.1" + maxmin "^1.1.0" + uglify-js "~2.6.2" + uri-path "^1.0.0" + +grunt-contrib-watch@1.x: + version "1.0.0" + resolved "https://registry.yarnpkg.com/grunt-contrib-watch/-/grunt-contrib-watch-1.0.0.tgz#84a1a7a1d6abd26ed568413496c73133e990018f" + dependencies: + async "^1.5.0" + gaze "^1.0.0" + lodash "^3.10.1" + tiny-lr "^0.2.1" + +grunt-legacy-log-utils@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/grunt-legacy-log-utils/-/grunt-legacy-log-utils-0.1.1.tgz#c0706b9dd9064e116f36f23fe4e6b048672c0f7e" + dependencies: + colors "~0.6.2" + lodash "~2.4.1" + underscore.string "~2.3.3" + +grunt-legacy-log@~0.1.0: + version "0.1.3" + resolved "https://registry.yarnpkg.com/grunt-legacy-log/-/grunt-legacy-log-0.1.3.tgz#ec29426e803021af59029f87d2f9cd7335a05531" + dependencies: + colors "~0.6.2" + grunt-legacy-log-utils "~0.1.1" + hooker "~0.2.3" + lodash "~2.4.1" + underscore.string "~2.3.3" + +grunt-legacy-util@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz#93324884dbf7e37a9ff7c026dff451d94a9e554b" + dependencies: + async "~0.1.22" + exit "~0.1.1" + getobject "~0.1.0" + hooker "~0.2.3" + lodash "~0.9.2" + underscore.string "~2.2.1" + which "~1.0.5" + +grunt-lib-contrib@^0.6.0, grunt-lib-contrib@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/grunt-lib-contrib/-/grunt-lib-contrib-0.6.1.tgz#3f56adb7da06e814795ee2415b0ebe5fb8903ebb" + dependencies: + zlib-browserify "0.0.1" + +grunt-lib-contrib@~0.5.1: + version "0.5.3" + resolved "https://registry.yarnpkg.com/grunt-lib-contrib/-/grunt-lib-contrib-0.5.3.tgz#e83f9ee5c8a06592d6e825821d91210782081338" + dependencies: + zlib-browserify "0.0.1" + +grunt-recess@0.5.x: + version "0.5.1" + resolved "https://registry.yarnpkg.com/grunt-recess/-/grunt-recess-0.5.1.tgz#7c2c06c37574c64cd01094585f2b2911f114bcb0" + dependencies: + async "^0.2.9" + chalk "^0.4.0" + grunt-lib-contrib "^0.6.0" + lodash "^2.4.1" + recess "^1.1.6" + +grunt-replace@0.4.x: + version "0.4.4" + resolved "https://registry.yarnpkg.com/grunt-replace/-/grunt-replace-0.4.4.tgz#18df9a330b9ed99c67dd0e5af03381ef3f0d0df5" + dependencies: + grunt-lib-contrib "~0.5.1" + +grunt@0.4.x: + version "0.4.5" + resolved "https://registry.yarnpkg.com/grunt/-/grunt-0.4.5.tgz#56937cd5194324adff6d207631832a9d6ba4e7f0" + dependencies: + async "~0.1.22" + coffee-script "~1.3.3" + colors "~0.6.2" + dateformat "1.0.2-1.2.3" + eventemitter2 "~0.4.13" + exit "~0.1.1" + findup-sync "~0.1.2" + getobject "~0.1.0" + glob "~3.1.21" + grunt-legacy-log "~0.1.0" + grunt-legacy-util "~0.2.0" + hooker "~0.2.3" + iconv-lite "~0.2.11" + js-yaml "~2.0.5" + lodash "~0.9.2" + minimatch "~0.2.12" + nopt "~1.0.10" + rimraf "~2.2.8" + underscore.string "~2.2.1" + which "~1.0.5" + +gzip-size@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-1.0.0.tgz#66cf8b101047227b95bace6ea1da0c177ed5c22f" + dependencies: + browserify-zlib "^0.1.4" + concat-stream "^1.4.1" + +handlebars@^4.0.1: + version "4.0.5" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.5.tgz#92c6ed6bb164110c50d4d8d0fbddc70806c6f8e7" + dependencies: + async "^1.4.0" + optimist "^0.6.1" + source-map "^0.4.4" + optionalDependencies: + uglify-js "^2.6" + +handlebars@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-2.0.0.tgz#6e9d7f8514a3467fa5e9f82cc158ecfc1d5ac76f" + dependencies: + optimist "~0.3" + optionalDependencies: + uglify-js "~2.3" + +har-validator@^1.4.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-1.8.0.tgz#d83842b0eb4c435960aeb108a067a3aa94c0eeb2" + dependencies: + bluebird "^2.9.30" + chalk "^1.0.0" + commander "^2.8.1" + is-my-json-valid "^2.12.0" + +har-validator@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" + dependencies: + chalk "^1.1.1" + commander "^2.9.0" + is-my-json-valid "^2.12.4" + pinkie-promise "^2.0.0" + +has-ansi@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-0.1.0.tgz#84f265aae8c0e6a88a12d7022894b7568894c62e" + dependencies: + ansi-regex "^0.2.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + dependencies: + ansi-regex "^2.0.0" + +has-color@^0.1.7, has-color@~0.1.0: + version "0.1.7" + resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + +hasha@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/hasha/-/hasha-2.2.0.tgz#78d7cbfc1e6d66303fe79837365984517b2f6ee1" + dependencies: + is-stream "^1.0.1" + pinkie-promise "^2.0.0" + +hawk@~2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-2.3.1.tgz#1e731ce39447fa1d0f6d707f7bceebec0fd1ec1f" + dependencies: + boom "2.x.x" + cryptiles "2.x.x" + hoek "2.x.x" + sntp "1.x.x" + +hawk@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" + dependencies: + boom "2.x.x" + cryptiles "2.x.x" + hoek "2.x.x" + sntp "1.x.x" + +hawk@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-1.1.1.tgz#87cd491f9b46e4e2aeaca335416766885d2d1ed9" + dependencies: + boom "0.4.x" + cryptiles "0.2.x" + hoek "0.9.x" + sntp "0.2.x" + +hoek@0.9.x: + version "0.9.1" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-0.9.1.tgz#3d322462badf07716ea7eb85baf88079cddce505" + +hoek@2.x.x: + version "2.16.3" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" + +hooker@~0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/hooker/-/hooker-0.2.3.tgz#b834f723cc4a242aa65963459df6d984c5d3d959" + +hosted-git-info@^2.1.4: + version "2.1.5" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.1.5.tgz#0ba81d90da2e25ab34a332e6ec77936e1598118b" + +http-errors@~1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.3.1.tgz#197e22cdebd4198585e8694ef6786197b91ed942" + dependencies: + inherits "~2.0.1" + statuses "1" + +http-errors@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.5.0.tgz#b1cb3d8260fd8e2386cad3189045943372d48211" + dependencies: + inherits "2.0.1" + setprototypeof "1.0.1" + statuses ">= 1.3.0 < 2" + +http-proxy@^0.10: + version "0.10.4" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-0.10.4.tgz#14ba0ceaa2197f89fa30dea9e7b09e19cd93c22f" + dependencies: + colors "0.x.x" + optimist "0.6.x" + pkginfo "0.3.x" + utile "~0.2.1" + +http-signature@~0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-0.10.1.tgz#4fbdac132559aa8323121e540779c0a012b27e66" + dependencies: + asn1 "0.1.11" + assert-plus "^0.1.5" + ctype "0.5.3" + +http-signature@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" + dependencies: + assert-plus "^0.2.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +http2@^3.3.4: + version "3.3.6" + resolved "https://registry.yarnpkg.com/http2/-/http2-3.3.6.tgz#7df06227e02b5b5a5841deea08239b3198d04bec" + +humanize@0.0.x: + version "0.0.9" + resolved "https://registry.yarnpkg.com/humanize/-/humanize-0.0.9.tgz#1994ffaecdfe9c441ed2bdac7452b7bb4c9e41a4" + +i@0.3.x: + version "0.3.5" + resolved "https://registry.yarnpkg.com/i/-/i-0.3.5.tgz#1d2b854158ec8169113c6cb7f6b6801e99e211d5" + +ibrik@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ibrik/-/ibrik-2.0.0.tgz#89a2434f2a5c82b92166c3d97de3b5636eea2e9c" + dependencies: + coffee-script "~1.8.0" + esprima "1.2.x" + estraverse "~1.8.0" + fileset "0.1.x" + istanbul "~0.3.2" + lodash "~2.4.1" + mkdirp "~0.5.0" + optimist "~0.6.1" + which "~1.0.5" + +iconv-lite@~0.2.11: + version "0.2.11" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.2.11.tgz#1ce60a3a57864a292d1321ff4609ca4bb965adc8" + +iconv-lite@0.4.11: + version "0.4.11" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.11.tgz#2ecb42fd294744922209a2e7c404dac8793d8ade" + +iconv-lite@0.4.13: + version "0.4.13" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" + +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + dependencies: + repeating "^2.0.0" + +inflight@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.5.tgz#db3204cd5a9de2e6cd890b85c6e2f66bcf4f620a" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1, inherits@2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +inherits@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-1.0.2.tgz#ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b" + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + +ini@^1.2.0, ini@^1.3.4, ini@~1.3.0: + version "1.3.4" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" + +inquirer@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.6.0.tgz#614d7bb3e48f9e6a8028e94a0c38f23ef29823d3" + dependencies: + chalk "^0.5.0" + cli-color "~0.3.2" + lodash "~2.4.1" + mute-stream "0.0.4" + readline2 "~0.1.0" + rx "^2.2.27" + through "~2.3.4" + +inquirer@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.7.1.tgz#b8acf140165bd581862ed1198fb6d26430091fac" + dependencies: + chalk "^0.5.0" + cli-color "~0.3.2" + figures "^1.3.2" + lodash "~2.4.1" + mute-stream "0.0.4" + readline2 "~0.1.0" + rx "^2.2.27" + through "~2.3.4" + +insight@0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/insight/-/insight-0.4.3.tgz#76d653c5c0d8048b03cdba6385a6948f74614af0" + dependencies: + async "^0.9.0" + chalk "^0.5.1" + configstore "^0.3.1" + inquirer "^0.6.0" + lodash.debounce "^2.4.1" + object-assign "^1.0.0" + os-name "^1.0.0" + request "^2.40.0" + tough-cookie "^0.12.1" + +intersect@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/intersect/-/intersect-0.0.3.tgz#c1a4a5e5eac6ede4af7504cc07e0ada7bc9f4920" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + dependencies: + binary-extensions "^1.0.0" + +is-buffer@^1.0.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b" + +is-builtin-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + dependencies: + builtin-modules "^1.0.0" + +is-dotfile@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" + +is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + dependencies: + is-primitive "^2.0.0" + +is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + +is-finite@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + dependencies: + number-is-nan "^1.0.0" + +is-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + dependencies: + is-extglob "^1.0.0" + +is-my-json-valid@^2.12.0, is-my-json-valid@^2.12.4: + version "2.15.0" + resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b" + dependencies: + generate-function "^2.0.0" + generate-object-property "^1.1.0" + jsonpointer "^4.0.0" + xtend "^4.0.0" + +is-number@^2.0.2, is-number@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + dependencies: + kind-of "^3.0.2" + +is-posix-bracket@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + +is-primitive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + +is-property@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" + +is-root@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-root/-/is-root-1.0.0.tgz#07b6c233bc394cd9d02ba15c966bd6660d6342d5" + +is-stream@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + +isarray@~1.0.0, isarray@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + +isexe@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0" + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + dependencies: + isarray "1.0.0" + +isstream@~0.1.1, isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + +istanbul@~0.3.0, istanbul@~0.3.2: + version "0.3.22" + resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.3.22.tgz#3e164d85021fe19c985d1f0e7ef0c3e22d012eb6" + dependencies: + abbrev "1.0.x" + async "1.x" + escodegen "1.7.x" + esprima "2.5.x" + fileset "0.2.x" + handlebars "^4.0.1" + js-yaml "3.x" + mkdirp "0.5.x" + nopt "3.x" + once "1.x" + resolve "1.1.x" + supports-color "^3.1.0" + which "^1.1.1" + wordwrap "^1.0.0" + +jodid25519@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" + dependencies: + jsbn "~0.1.0" + +js-yaml@^3.1.0, js-yaml@3.6.1, js-yaml@3.x: + version "3.6.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.6.1.tgz#6e5fe67d8b205ce4d22fad05b7781e8dadcc4b30" + dependencies: + argparse "^1.0.7" + esprima "^2.6.0" + +js-yaml@~2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-2.0.5.tgz#a25ae6509999e97df278c6719da11bd0687743a8" + dependencies: + argparse "~ 0.1.11" + esprima "~ 1.0.2" + +jsbn@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd" + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + +json-stringify-safe@~5.0.0, json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + +json3@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" + +jsonfile@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + +jsonpointer@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.0.tgz#6661e161d2fc445f19f98430231343722e1fcbd5" + +jsprim@^1.2.2: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252" + dependencies: + extsprintf "1.0.2" + json-schema "0.2.3" + verror "1.3.6" + +junk@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/junk/-/junk-1.0.3.tgz#87be63488649cbdca6f53ab39bec9ccd2347f592" + +karma-chai@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/karma-chai/-/karma-chai-0.1.0.tgz#bee5ad40400517811ae34bb945f762909108b79a" + +karma-chrome-launcher@^0.1.7: + version "0.1.12" + resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-0.1.12.tgz#0ac0e22e573650f6541312fdca795c3824ccf962" + dependencies: + which "^1.0.9" + +karma-coverage@^0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/karma-coverage/-/karma-coverage-0.2.7.tgz#f76740b275bbf30a0ab9f41d8cf56843a0994576" + dependencies: + dateformat "~1.0.6" + ibrik "~2.0.0" + istanbul "~0.3.0" + minimatch "~0.3.0" + +karma-coveralls@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/karma-coveralls/-/karma-coveralls-0.1.5.tgz#637c2be31376e855ab0e18b1d4fa4016c636e814" + dependencies: + coveralls "~2.11.2" + glob "~4.3.4" + +karma-firefox-launcher@^0.1.4: + version "0.1.7" + resolved "https://registry.yarnpkg.com/karma-firefox-launcher/-/karma-firefox-launcher-0.1.7.tgz#c05dd86533691e62f31952595098e8bd357d39f3" + +karma-mocha-reporter@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/karma-mocha-reporter/-/karma-mocha-reporter-0.3.2.tgz#fdd0c88d4c8885733f55786c7c43fbd4a8e77a86" + dependencies: + chalk "^0.5.1" + log-symbols "^1.0.1" + +karma-mocha@^0.1.10: + version "0.1.10" + resolved "https://registry.yarnpkg.com/karma-mocha/-/karma-mocha-0.1.10.tgz#29ed51d4b121af1373444ec555b20a905bf42b92" + +karma-phantomjs-launcher@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/karma-phantomjs-launcher/-/karma-phantomjs-launcher-1.0.2.tgz#19e1041498fd75563ed86730a22c1fe579fa8fb1" + dependencies: + lodash "^4.0.1" + phantomjs-prebuilt "^2.1.7" + +karma-safari-launcher@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/karma-safari-launcher/-/karma-safari-launcher-0.1.1.tgz#a6380accab60a583fdd624f41b9a3f10fdf41008" + +karma-sauce-launcher@^0.2.10: + version "0.2.14" + resolved "https://registry.yarnpkg.com/karma-sauce-launcher/-/karma-sauce-launcher-0.2.14.tgz#e42e412517c5f40534c8bba7d14bb4f10727b6a7" + dependencies: + q "~0.9.6" + sauce-connect-launcher "~0.11.1" + saucelabs "~0.1.0" + wd "~0.3.4" + +karma@^0.12.31: + version "0.12.37" + resolved "https://registry.yarnpkg.com/karma/-/karma-0.12.37.tgz#1a9f7fdeccd69de2e835e04edbac2ecd3fa645e4" + dependencies: + chokidar "^1.0.1" + colors "^1.1.0" + connect "^2.29.2" + di "^0.0.1" + glob "^5.0.6" + graceful-fs "^3.0.6" + http-proxy "^0.10" + lodash "^3.8.0" + log4js "^0.6.25" + mime "^1.3.4" + minimatch "^2.0.7" + optimist "^0.6.1" + q "^1.4.1" + rimraf "^2.3.3" + socket.io "0.9.16" + source-map "^0.4.2" + useragent "^2.1.6" + +kew@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/kew/-/kew-0.7.0.tgz#79d93d2d33363d6fdd2970b335d9141ad591d79b" + +kind-of@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.0.4.tgz#7b8ecf18a4e17f8269d73b501c9f232c96887a74" + dependencies: + is-buffer "^1.0.2" + +klaw@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.0.tgz#8857bfbc1d824badf13d3d0241d8bbe46fb12f73" + +latest-version@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-0.2.0.tgz#adaf898d5f22380d3f9c45386efdff0a1b5b7501" + dependencies: + package-json "^0.2.0" + +lazy-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + +lazystream@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-0.1.0.tgz#1b25d63c772a4c20f0a5ed0a9d77f484b6e16920" + dependencies: + readable-stream "~1.0.2" + +lcov-parse@0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.10.tgz#1b0b8ff9ac9c7889250582b70b71315d9da6d9a3" + +less@~1.3.0: + version "1.3.3" + resolved "https://registry.yarnpkg.com/less/-/less-1.3.3.tgz#7ee8f300a41080f3544c80c7a70cdf6a61280cf9" + optionalDependencies: + ycssmin ">=1.0.1" + +less@~1.6.0: + version "1.6.3" + resolved "https://registry.yarnpkg.com/less/-/less-1.6.3.tgz#71ce89ec30b774b3567f254c67958f2f2c193bde" + optionalDependencies: + clean-css "2.0.x" + mime "1.2.x" + mkdirp "~0.3.5" + request ">=2.12.0" + source-map "0.1.x" + +levn@~0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.2.5.tgz#ba8d339d0ca4a610e3a3f145b9caf48807155054" + dependencies: + prelude-ls "~1.1.0" + type-check "~0.3.1" + +livereload-js@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/livereload-js/-/livereload-js-2.2.2.tgz#6c87257e648ab475bc24ea257457edcc1f8d0bc2" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +lockfile@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.2.tgz#97e1990174f696cbe0a3acd58a43b84aa30c7c83" + +lodash._baseassign@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" + dependencies: + lodash._basecopy "^3.0.0" + lodash.keys "^3.0.0" + +lodash._basecopy@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" + +lodash._basecreate@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821" + +lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + +lodash._isiterateecall@^3.0.0: + version "3.0.9" + resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" + +lodash._isnative@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash._isnative/-/lodash._isnative-2.4.1.tgz#3ea6404b784a7be836c7b57580e1cdf79b14832c" + +lodash._objecttypes@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz#7c0b7f69d98a1f76529f890b0cdb1b4dfec11c11" + +lodash.create@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7" + dependencies: + lodash._baseassign "^3.0.0" + lodash._basecreate "^3.0.0" + lodash._isiterateecall "^3.0.0" + +lodash.debounce@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-2.4.1.tgz#d8cead246ec4b926e8b85678fc396bfeba8cc6fc" + dependencies: + lodash.isfunction "~2.4.1" + lodash.isobject "~2.4.1" + lodash.now "~2.4.1" + +lodash.isarguments@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + +lodash.isarray@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" + +lodash.isfunction@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash.isfunction/-/lodash.isfunction-2.4.1.tgz#2cfd575c73e498ab57e319b77fa02adef13a94d1" + +lodash.isobject@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-2.4.1.tgz#5a2e47fe69953f1ee631a7eba1fe64d2d06558f5" + dependencies: + lodash._objecttypes "~2.4.1" + +lodash.keys@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" + dependencies: + lodash._getnative "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + +lodash.now@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/lodash.now/-/lodash.now-2.4.1.tgz#6872156500525185faf96785bb7fe7fe15b562c6" + dependencies: + lodash._isnative "~2.4.1" + +lodash@^2.4.1, lodash@~2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-2.4.2.tgz#fadd834b9683073da179b3eae6d9c0d15053f73e" + +lodash@^3.10.1, lodash@^3.8.0: + version "3.10.1" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" + +lodash@^4.0.1, lodash@^4.14.0: + version "4.16.4" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.16.4.tgz#01ce306b9bad1319f2a5528674f88297aeb70127" + +lodash@~0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-0.10.0.tgz#5254bbc2c46c827f535a27d631fd4f2bff374ce7" + +lodash@~0.9.2: + version "0.9.2" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-0.9.2.tgz#8f3499c5245d346d682e5b0d3b40767e09f1a92c" + +lodash@~3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.2.0.tgz#4bf50a3243f9aeb0bac41a55d3d5990675a462fb" + +lodash@~3.9.3: + version "3.9.3" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.9.3.tgz#0159e86832feffc6d61d852b12a953b99496bd32" + +lodash@~4.9.0: + version "4.9.0" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.9.0.tgz#4c20d742f03ce85dc700e0dd7ab9bcab85e6fc14" + +lodash@3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.5.0.tgz#19bb3f4d51278f0b8c818ed145c74ecf9fe40e6d" + +log-driver@1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.5.tgz#7ae4ec257302fd790d557cb10c97100d857b0056" + +log-symbols@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" + dependencies: + chalk "^1.0.0" + +log4js@^0.6.25: + version "0.6.38" + resolved "https://registry.yarnpkg.com/log4js/-/log4js-0.6.38.tgz#2c494116695d6fb25480943d3fc872e662a522fd" + dependencies: + readable-stream "~1.0.2" + semver "~4.3.3" + +longest@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + +lru-cache@~2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.3.1.tgz#b3adf6b3d856e954e2c390e6cef22081245a53d6" + +lru-cache@~2.5.0: + version "2.5.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.5.2.tgz#1fddad938aae1263ce138680be1b3f591c0ab41c" + +lru-cache@2: + version "2.7.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" + +lru-cache@2.2.x: + version "2.2.4" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.2.4.tgz#6c658619becf14031d0d0b594b16042ce4dc063d" + +lru-queue@0.1: + version "0.1.0" + resolved "https://registry.yarnpkg.com/lru-queue/-/lru-queue-0.1.0.tgz#2738bd9f0d3cf4f84490c5736c48699ac632cda3" + dependencies: + es5-ext "~0.10.2" + +map-obj@^1.0.0, map-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + +maxmin@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/maxmin/-/maxmin-1.1.0.tgz#71365e84a99dd8f8b3f7d5fde2f00d1e7f73be61" + dependencies: + chalk "^1.0.0" + figures "^1.0.1" + gzip-size "^1.0.0" + pretty-bytes "^1.0.0" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + +memoizee@~0.3.8: + version "0.3.10" + resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.3.10.tgz#4eca0d8aed39ec9d017f4c5c2f2f6432f42e5c8f" + dependencies: + d "~0.1.1" + es5-ext "~0.10.11" + es6-weak-map "~0.1.4" + event-emitter "~0.3.4" + lru-queue "0.1" + next-tick "~0.2.2" + timers-ext "0.1" + +meow@^3.1.0, meow@^3.3.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + +merge@^1.1.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" + +method-override@~2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/method-override/-/method-override-2.3.6.tgz#209261cc588d45d9d5a022ff20d7d5eb8e92179e" + dependencies: + debug "~2.2.0" + methods "~1.1.2" + parseurl "~1.3.1" + vary "~1.1.0" + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + +micromatch@^2.1.5: + version "2.3.11" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + dependencies: + arr-diff "^2.0.0" + array-unique "^0.2.1" + braces "^1.8.2" + expand-brackets "^0.1.4" + extglob "^0.3.1" + filename-regex "^2.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.1" + kind-of "^3.0.2" + normalize-path "^2.0.1" + object.omit "^2.0.0" + parse-glob "^3.0.4" + regex-cache "^0.4.2" + +microplugin@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/microplugin/-/microplugin-0.0.3.tgz#1fc2e1bb7c9e19e82bd84bba9137bbe71250d8cd" + +microtime@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/microtime/-/microtime-2.1.1.tgz#654294b560e32fc97c4bf4b8156d5f2e4d5fd183" + dependencies: + bindings "1.2.x" + nan "2.3.x" + +"mime-db@>= 1.23.0 < 2", mime-db@~1.24.0: + version "1.24.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.24.0.tgz#e2d13f939f0016c6e4e9ad25a8652f126c467f0c" + +mime-db@~1.12.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.12.0.tgz#3d0c63180f458eb10d325aaa37d7c58ae312e9d7" + +mime-types@^2.1.11, mime-types@~2.1.11, mime-types@~2.1.6, mime-types@~2.1.7, mime-types@~2.1.9: + version "2.1.12" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.12.tgz#152ba256777020dd4663f54c2e7bc26381e71729" + dependencies: + mime-db "~1.24.0" + +mime-types@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-1.0.2.tgz#995ae1392ab8affcbfcb2641dd054e943c0d5dce" + +mime-types@~2.0.1, mime-types@~2.0.3: + version "2.0.14" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.0.14.tgz#310e159db23e077f8bb22b748dabfa4957140aa6" + dependencies: + mime-db "~1.12.0" + +mime@^1.3.4, mime@1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" + +mime@~1.2.11, mime@1.2.x: + version "1.2.11" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.11.tgz#58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10" + +minimatch@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-1.0.0.tgz#e0dd2120b49e1b724ce8d714c520822a9438576d" + dependencies: + lru-cache "2" + sigmund "~1.0.0" + +minimatch@^2.0.1, minimatch@^2.0.7, minimatch@2.x: + version "2.0.10" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7" + dependencies: + brace-expansion "^1.0.0" + +minimatch@^3.0.0, minimatch@^3.0.2, minimatch@~3.0.0, "minimatch@2 || 3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" + dependencies: + brace-expansion "^1.0.0" + +minimatch@~0.2.11, minimatch@~0.2.12: + version "0.2.14" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.2.14.tgz#c74e780574f63c6f9a090e90efbe6ef53a6a756a" + dependencies: + lru-cache "2" + sigmund "~1.0.0" + +minimatch@~0.3.0, minimatch@0.3: + version "0.3.0" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.3.0.tgz#275d8edaac4f1bb3326472089e7949c8394699dd" + dependencies: + lru-cache "2" + sigmund "~1.0.0" + +minimatch@0.x: + version "0.4.0" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.4.0.tgz#bd2c7d060d2c8c8fd7cde7f1f2ed2d5b270fdb1b" + dependencies: + lru-cache "2" + sigmund "~1.0.0" + +minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0, minimist@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + +minimist@~0.0.1: + version "0.0.10" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +mkdirp@^0.5.0, "mkdirp@>=0.5 0", mkdirp@~0.5.0, mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@0.x.x: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +mkdirp@~0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.5.tgz#de3e5f8961c88c787ee1368df849ac4413eca8d7" + +mkdirp@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.0.tgz#1d73076a6df986cd9344e15e71fcc05a4c9abf12" + dependencies: + minimist "0.0.8" + +mkpath@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/mkpath/-/mkpath-0.1.0.tgz#7554a6f8d871834cc97b5462b122c4c124d6de91" + +mocha@^3.1.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.1.2.tgz#51f93b432bf7e1b175ffc22883ccd0be32dba6b5" + dependencies: + browser-stdout "1.3.0" + commander "2.9.0" + debug "2.2.0" + diff "1.4.0" + escape-string-regexp "1.0.5" + glob "7.0.5" + growl "1.9.2" + json3 "3.3.2" + lodash.create "3.1.1" + mkdirp "0.5.1" + supports-color "3.1.2" + +morgan@^1.6.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.7.0.tgz#eb10ca8e50d1abe0f8d3dad5c0201d052d981c62" + dependencies: + basic-auth "~1.0.3" + debug "~2.2.0" + depd "~1.1.0" + on-finished "~2.3.0" + on-headers "~1.0.1" + +morgan@~1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.6.1.tgz#5fd818398c6819cba28a7cd6664f292fe1c0bbf2" + dependencies: + basic-auth "~1.0.3" + debug "~2.2.0" + depd "~1.0.1" + on-finished "~2.3.0" + on-headers "~1.0.0" + +mout@~0.9.0: + version "0.9.1" + resolved "https://registry.yarnpkg.com/mout/-/mout-0.9.1.tgz#84f0f3fd6acc7317f63de2affdcc0cee009b0477" + +ms@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" + +multiparty@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/multiparty/-/multiparty-3.3.2.tgz#35de6804dc19643e5249f3d3e3bdc6c8ce301d3f" + dependencies: + readable-stream "~1.1.9" + stream-counter "~0.2.0" + +mute-stream@~0.0.4: + version "0.0.6" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.6.tgz#48962b19e169fd1dfc240b3f1e7317627bbc47db" + +mute-stream@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.4.tgz#a9219960a6d5d5d046597aee51252c6655f7177e" + +nan@^2.3.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.4.0.tgz#fb3c59d45fe4effe215f0b890f8adf6eb32d2232" + +nan@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-1.0.0.tgz#ae24f8850818d662fcab5acf7f3b95bfaa2ccf38" + +nan@2.3.x: + version "2.3.5" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.3.5.tgz#822a0dc266290ce4cd3a12282ca3e7e364668a08" + +natives@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.0.tgz#e9ff841418a6b2ec7a495e939984f78f163e6e31" + +ncp@0.4.x: + version "0.4.2" + resolved "https://registry.yarnpkg.com/ncp/-/ncp-0.4.2.tgz#abcc6cbd3ec2ed2a729ff6e7c1fa8f01784a8574" + +negotiator@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.5.3.tgz#269d5c476810ec92edbe7b6c2f28316384f9a7e8" + +negotiator@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + +next-tick@~0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-0.2.2.tgz#75da4a927ee5887e39065880065b7336413b310d" + +node-int64@~0.3.0: + version "0.3.3" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.3.3.tgz#2d6e6b2ece5de8588b43d88d1bc41b26cd1fa84d" + +node-pre-gyp@^0.6.29: + version "0.6.30" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.30.tgz#64d3073a6f573003717ccfe30c89023297babba1" + dependencies: + mkdirp "~0.5.0" + nopt "~3.0.1" + npmlog "4.x" + rc "~1.1.0" + request "2.x" + rimraf "~2.5.0" + semver "~5.3.0" + tar "~2.2.0" + tar-pack "~3.1.0" + +node-uuid@~1.4.0, node-uuid@~1.4.7: + version "1.4.7" + resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.7.tgz#6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f" + +"nopt@>= 1.0.10", nopt@~3.0.0, nopt@~3.0.1, nopt@3.x: + version "3.0.6" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + dependencies: + abbrev "1" + +nopt@~1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" + dependencies: + abbrev "1" + +nopt@~2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-2.2.1.tgz#2aa09b7d1768487b3b89a9c5aa52335bff0baea7" + dependencies: + abbrev "1" + +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: + version "2.3.5" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.5.tgz#8d924f142960e1777e7ffe170543631cc7cb02df" + dependencies: + hosted-git-info "^2.1.4" + is-builtin-module "^1.0.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a" + +npmconf@^2.0.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/npmconf/-/npmconf-2.1.2.tgz#66606a4a736f1e77a059aa071a79c94ab781853a" + dependencies: + config-chain "~1.1.8" + inherits "~2.0.0" + ini "^1.2.0" + mkdirp "^0.5.0" + nopt "~3.0.1" + once "~1.3.0" + osenv "^0.1.0" + semver "2 || 3 || 4" + uid-number "0.0.5" + +npmlog@4.x: + version "4.0.0" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.0.tgz#e094503961c70c1774eb76692080e8d578a9f88f" + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.6.0" + set-blocking "~2.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + +oauth-sign@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.4.0.tgz#f22956f31ea7151a821e5f2fb32c113cad8b9f69" + +oauth-sign@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.5.0.tgz#d767f5169325620eab2e087ef0c472e773db6461" + +oauth-sign@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.6.0.tgz#7dbeae44f6ca454e1f168451d630746735813ce3" + +oauth-sign@~0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + +object-assign@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-0.3.1.tgz#060e2a2a27d7c0d77ec77b78f11aa47fd88008d2" + +object-assign@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-1.0.0.tgz#e65dc8766d3b47b4b8307465c8311da030b070a6" + +object-assign@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-2.1.1.tgz#43c36e5d569ff8e4816c4efa8be02d26967c18aa" + +object-assign@^4.0.1, object-assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0" + +object.omit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.0.tgz#868597333d54e60662940bb458605dd6ae12fe94" + dependencies: + for-own "^0.1.3" + is-extendable "^0.1.1" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.0, on-headers@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" + +once@^1.3.0, once@1.x: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +once@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.2.0.tgz#de1905c636af874a8fba862d9aabddd1f920461c" + +once@~1.3.0, once@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" + dependencies: + wrappy "1" + +opn@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/opn/-/opn-4.0.2.tgz#7abc22e644dff63b0a96d5ab7f2790c0f01abc95" + dependencies: + object-assign "^4.0.1" + pinkie-promise "^2.0.0" + +opn@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/opn/-/opn-1.0.2.tgz#b909643346d00a1abc977a8b96f3ce3c53d5cf5f" + +optimist@^0.6.1, optimist@~0.6.0, optimist@~0.6.1, optimist@0.6.x: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +optimist@~0.3, optimist@~0.3.5: + version "0.3.7" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.3.7.tgz#c90941ad59e4273328923074d2cf2e7cbc6ec0d9" + dependencies: + wordwrap "~0.0.2" + +optionator@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.5.0.tgz#b75a8995a2d417df25b6e4e3862f50aa88651368" + dependencies: + deep-is "~0.1.2" + fast-levenshtein "~1.0.0" + levn "~0.2.5" + prelude-ls "~1.1.1" + type-check "~0.3.1" + wordwrap "~0.0.2" + +options@>=0.0.5: + version "0.0.6" + resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + +os-name@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/os-name/-/os-name-1.0.3.tgz#1b379f64835af7c5a7f498b357cb95215c159edf" + dependencies: + osx-release "^1.0.0" + win-release "^1.0.0" + +os-tmpdir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + +osenv@^0.1.0: + version "0.1.3" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.3.tgz#83cf05c6d6458fc4d5ac6362ea325d92f2754217" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +osenv@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.0.3.tgz#cd6ad8ddb290915ad9e22765576025d411f29cb6" + +osenv@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.0.tgz#61668121eec584955030b9f470b1d2309504bfcb" + +osx-release@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/osx-release/-/osx-release-1.1.0.tgz#f217911a28136949af1bf9308b241e2737d3cd6c" + dependencies: + minimist "^1.1.0" + +p-throttler@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/p-throttler/-/p-throttler-0.1.0.tgz#1b16907942c333e6f1ddeabcb3479204b8c417c4" + dependencies: + q "~0.9.2" + +package-json@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-0.2.0.tgz#0316e177b8eb149985d34f706b4a5543b274bec5" + dependencies: + got "^0.3.0" + registry-url "^0.1.0" + +pako@~0.2.0: + version "0.2.9" + resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" + +parse-glob@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + dependencies: + error-ex "^1.2.0" + +parseurl@~1.3.0, parseurl@~1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56" + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + dependencies: + pinkie-promise "^2.0.0" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +pause@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/pause/-/pause-0.1.0.tgz#ebc8a4a8619ff0b8a81ac1513c3434ff469fdb74" + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + +phantomjs-prebuilt@^2.1.7: + version "2.1.13" + resolved "https://registry.yarnpkg.com/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.13.tgz#66556ad9e965d893ca5a7dc9e763df7e8697f76d" + dependencies: + es6-promise "~4.0.3" + extract-zip "~1.5.0" + fs-extra "~0.30.0" + hasha "~2.2.0" + kew "~0.7.0" + progress "~1.1.8" + request "~2.74.0" + request-progress "~2.0.1" + which "~1.2.10" + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + +pkginfo@0.3.x: + version "0.3.1" + resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.3.1.tgz#5b29f6a81f70717142e09e765bbeab97b4f81e21" + +policyfile@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/policyfile/-/policyfile-0.0.4.tgz#d6b82ead98ae79ebe228e2daf5903311ec982e4d" + +portscanner@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/portscanner/-/portscanner-1.0.0.tgz#3b5cfe393828b5160abc600e6270ebc2f1590558" + dependencies: + async "0.1.15" + +prelude-ls@~1.1.0, prelude-ls@~1.1.1, prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + +preserve@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + +pretty-bytes@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-1.0.4.tgz#0a22e8210609ad35542f8c8d5d2159aff0751c84" + dependencies: + get-stdin "^4.0.1" + meow "^3.1.0" + +process-nextick-args@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" + +progress@~1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" + +promptly@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/promptly/-/promptly-0.2.0.tgz#73ef200fa8329d5d3a8df41798950b8646ca46d9" + dependencies: + read "~1.0.4" + +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + +pump@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/pump/-/pump-0.3.5.tgz#ae5ff8c1f93ed87adc6530a97565b126f585454b" + dependencies: + end-of-stream "~1.0.0" + once "~1.2.0" + +punycode@>=0.2.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.0.0.tgz#9145b207b5228410ca17a10fe1cf4ba2c015f6d7" + +q@^1.4.1, q@~1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" + +q@~0.9.2, q@~0.9.6: + version "0.9.7" + resolved "https://registry.yarnpkg.com/q/-/q-0.9.7.tgz#4de2e6cb3b29088c9e4cbc03bf9d42fb96ce2f75" + +q@~1.0.0, q@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.0.1.tgz#11872aeedee89268110b10a718448ffb10112a14" + +qs@~1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-1.2.2.tgz#19b57ff24dc2a99ce1f8bdf6afcda59f8ef61f88" + +qs@~2.3.1: + version "2.3.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-2.3.3.tgz#e9e85adbe75da0bbe4c8e0476a086290f863b404" + +qs@~2.4.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-2.4.2.tgz#f7ce788e5777df0b5010da7f7c4e73ba32470f5a" + +qs@~5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-5.1.0.tgz#4d932e5c7ea411cca76a312d39a606200fd50cd9" + +qs@~6.2.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.1.tgz#ce03c5ff0935bc1d9d69a9f14cbd18e568d67625" + +qs@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-4.0.0.tgz#c31d9b74ec27df75e543a86c78728ed8d4623607" + +qs@5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-5.2.0.tgz#a9f31142af468cb72b25b30136ba2456834916be" + +random-bytes@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/random-bytes/-/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b" + +randomatic@^1.1.3: + version "1.1.5" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.5.tgz#5e9ef5f2d573c67bd2b8124ae90b5156e457840b" + dependencies: + is-number "^2.0.2" + kind-of "^3.0.2" + +range-parser@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.0.3.tgz#6872823535c692e2c2a0103826afd82c2e0ff175" + +range-parser@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + +raw-body@~2.1.2, raw-body@~2.1.5: + version "2.1.7" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.1.7.tgz#adfeace2e4fb3098058014d08c072dcc59758774" + dependencies: + bytes "2.4.0" + iconv-lite "0.4.13" + unpipe "1.0.0" + +rc@~1.1.0: + version "1.1.6" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.6.tgz#43651b76b6ae53b5c802f1151fa3fc3b059969c9" + dependencies: + deep-extend "~0.4.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~1.0.4" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +read@~1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" + dependencies: + mute-stream "~0.0.4" + +readable-stream@^1.0.27-1, readable-stream@~1.1.8, readable-stream@~1.1.9: + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +"readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.2, readable-stream@~2.1.4: + version "2.1.5" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" + dependencies: + buffer-shims "^1.0.0" + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + string_decoder "~0.10.x" + util-deprecate "~1.0.1" + +readable-stream@~1.0.2, readable-stream@~1.0.24, readable-stream@~1.0.26, readable-stream@~1.0.33: + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@~2.0.0, readable-stream@~2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + string_decoder "~0.10.x" + util-deprecate "~1.0.1" + +readdirp@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" + dependencies: + graceful-fs "^4.1.2" + minimatch "^3.0.2" + readable-stream "^2.0.2" + set-immediate-shim "^1.0.1" + +readline2@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/readline2/-/readline2-0.1.1.tgz#99443ba6e83b830ef3051bfd7dc241a82728d568" + dependencies: + mute-stream "0.0.4" + strip-ansi "^2.0.1" + +recess@^1.1.6: + version "1.1.9" + resolved "https://registry.yarnpkg.com/recess/-/recess-1.1.9.tgz#831c551f45df87d484c6123ffde91030bef1581a" + dependencies: + colors ">= 0.3.0" + less "~1.3.0" + nopt ">= 1.0.10" + underscore ">= 1.2.1" + watch ">= 0.5.1" + +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + +redeyed@~0.4.0: + version "0.4.4" + resolved "https://registry.yarnpkg.com/redeyed/-/redeyed-0.4.4.tgz#37e990a6f2b21b2a11c2e6a48fd4135698cba97f" + dependencies: + esprima "~1.0.4" + +redis@0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/redis/-/redis-0.7.3.tgz#ee57b7a44d25ec1594e44365d8165fa7d1d4811a" + +regex-cache@^0.4.2: + version "0.4.3" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" + dependencies: + is-equal-shallow "^0.1.3" + is-primitive "^2.0.0" + +registry-url@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-0.1.1.tgz#1739427b81b110b302482a1c7cd727ffcc82d5be" + dependencies: + npmconf "^2.0.1" + +repeat-element@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + +repeat-string@^1.5.2: + version "1.5.4" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.5.4.tgz#64ec0c91e0f4b475f90d5b643651e3e6e5b6c2d5" + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + dependencies: + is-finite "^1.0.0" + +request-progress@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-2.0.1.tgz#5d36bb57961c673aa5b788dbc8141fdf23b44e08" + dependencies: + throttleit "^1.0.0" + +request-progress@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-0.3.0.tgz#bdf2062bfc197c5d492500d44cb3aff7865b492e" + dependencies: + throttleit "~0.0.2" + +request-replay@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/request-replay/-/request-replay-0.2.0.tgz#9b693a5d118b39f5c596ead5ed91a26444057f60" + dependencies: + retry "~0.6.0" + +request@^2.40.0, request@>=2.12.0, request@2.75.0, request@2.x: + version "2.75.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.75.0.tgz#d2b8268a286da13eaa5d01adf5d18cc90f657d93" + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + bl "~1.1.2" + caseless "~0.11.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~2.0.0" + har-validator "~2.0.6" + hawk "~3.1.3" + http-signature "~1.1.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.7" + node-uuid "~1.4.7" + oauth-sign "~0.8.1" + qs "~6.2.0" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "~0.4.1" + +request@~2.42.0: + version "2.42.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.42.0.tgz#572bd0148938564040ac7ab148b96423a063304a" + dependencies: + bl "~0.9.0" + caseless "~0.6.0" + forever-agent "~0.5.0" + json-stringify-safe "~5.0.0" + mime-types "~1.0.1" + node-uuid "~1.4.0" + qs "~1.2.0" + tunnel-agent "~0.4.0" + optionalDependencies: + aws-sign2 "~0.5.0" + form-data "~0.1.0" + hawk "1.1.1" + http-signature "~0.10.0" + oauth-sign "~0.4.0" + stringstream "~0.0.4" + tough-cookie ">=0.12.0" + +request@~2.51.0: + version "2.51.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.51.0.tgz#35d00bbecc012e55f907b1bd9e0dbd577bfef26e" + dependencies: + aws-sign2 "~0.5.0" + bl "~0.9.0" + caseless "~0.8.0" + combined-stream "~0.0.5" + forever-agent "~0.5.0" + form-data "~0.2.0" + hawk "1.1.1" + http-signature "~0.10.0" + json-stringify-safe "~5.0.0" + mime-types "~1.0.1" + node-uuid "~1.4.0" + oauth-sign "~0.5.0" + qs "~2.3.1" + stringstream "~0.0.4" + tough-cookie ">=0.12.0" + tunnel-agent "~0.4.0" + +request@~2.55.0: + version "2.55.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.55.0.tgz#d75c1cdf679d76bb100f9bffe1fe551b5c24e93d" + dependencies: + aws-sign2 "~0.5.0" + bl "~0.9.0" + caseless "~0.9.0" + combined-stream "~0.0.5" + forever-agent "~0.6.0" + form-data "~0.2.0" + har-validator "^1.4.0" + hawk "~2.3.0" + http-signature "~0.10.0" + isstream "~0.1.1" + json-stringify-safe "~5.0.0" + mime-types "~2.0.1" + node-uuid "~1.4.0" + oauth-sign "~0.6.0" + qs "~2.4.0" + stringstream "~0.0.4" + tough-cookie ">=0.12.0" + tunnel-agent "~0.4.0" + +request@~2.74.0: + version "2.74.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.74.0.tgz#7693ca768bbb0ea5c8ce08c084a45efa05b892ab" + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + bl "~1.1.2" + caseless "~0.11.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~1.0.0-rc4" + har-validator "~2.0.6" + hawk "~3.1.3" + http-signature "~1.1.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.7" + node-uuid "~1.4.7" + oauth-sign "~0.8.1" + qs "~6.2.0" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "~0.4.1" + +resolve@~0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-0.3.1.tgz#34c63447c664c70598d1c9b126fc43b2a24310a4" + +resolve@1.1.x: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + +response-time@~2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/response-time/-/response-time-2.3.1.tgz#2bde19181de6c81ab95e3207a28d61d965b31797" + dependencies: + depd "~1.0.1" + on-headers "~1.0.0" + +retry@~0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.6.1.tgz#fdc90eed943fde11b893554b8cc63d0e899ba918" + +retry@0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.6.0.tgz#1c010713279a6fd1e8def28af0c3ff1871caa537" + +right-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + dependencies: + align-text "^0.1.1" + +rimraf@^2.2.8, rimraf@^2.3.3, rimraf@~2.5.0, rimraf@~2.5.1, rimraf@2, rimraf@2.x.x: + version "2.5.4" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" + dependencies: + glob "^7.0.5" + +rimraf@~2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.0.3.tgz#f50a2965e7144e9afd998982f15df706730f56a9" + optionalDependencies: + graceful-fs "~1.1" + +rimraf@~2.2.0, rimraf@~2.2.1, rimraf@~2.2.8: + version "2.2.8" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" + +rimraf@2.2.6: + version "2.2.6" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.6.tgz#c59597569b14d956ad29cacc42bdddf5f0ea4f4c" + +rndm@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/rndm/-/rndm-1.2.0.tgz#f33fe9cfb52bbfd520aa18323bc65db110a1b76c" + +rx@^2.2.27: + version "2.5.3" + resolved "https://registry.yarnpkg.com/rx/-/rx-2.5.3.tgz#21adc7d80f02002af50dae97fd9dbf248755f566" + +sauce-connect-launcher@~0.11.1: + version "0.11.1" + resolved "https://registry.yarnpkg.com/sauce-connect-launcher/-/sauce-connect-launcher-0.11.1.tgz#65f51d8891249fdabaaf17599734de1902476129" + dependencies: + adm-zip "~0.4.3" + async "0.9.0" + lodash "3.5.0" + rimraf "2.2.6" + +saucelabs@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/saucelabs/-/saucelabs-0.1.1.tgz#5e0ea1cf3d735d6ea15fde94b5bda6bc15d2c06d" + +semver-diff@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-0.1.0.tgz#4f6057ca3eba23cc484b51f64aaf88b131a3855d" + dependencies: + semver "^2.2.1" + +semver@^2.2.1, semver@~2.3.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-2.3.2.tgz#b9848f25d6cf36333073ec9ef8856d42f1233e52" + +semver@^5.0.1, semver@~5.3.0, "semver@2 || 3 || 4 || 5": + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + +semver@~4.3.3, "semver@2 || 3 || 4": + version "4.3.6" + resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" + +send@0.13.2: + version "0.13.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.13.2.tgz#765e7607c8055452bba6f0b052595350986036de" + dependencies: + debug "~2.2.0" + depd "~1.1.0" + destroy "~1.0.4" + escape-html "~1.0.3" + etag "~1.7.0" + fresh "0.3.0" + http-errors "~1.3.1" + mime "1.3.4" + ms "0.7.1" + on-finished "~2.3.0" + range-parser "~1.0.3" + statuses "~1.2.1" + +send@0.14.1: + version "0.14.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.14.1.tgz#a954984325392f51532a7760760e459598c89f7a" + dependencies: + debug "~2.2.0" + depd "~1.1.0" + destroy "~1.0.4" + encodeurl "~1.0.1" + escape-html "~1.0.3" + etag "~1.7.0" + fresh "0.3.0" + http-errors "~1.5.0" + mime "1.3.4" + ms "0.7.1" + on-finished "~2.3.0" + range-parser "~1.2.0" + statuses "~1.3.0" + +serve-favicon@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/serve-favicon/-/serve-favicon-2.3.0.tgz#aed36cc6834069a6f189cc7222c6a1a811dc5b39" + dependencies: + etag "~1.7.0" + fresh "0.3.0" + ms "0.7.1" + parseurl "~1.3.0" + +serve-index@^1.7.1: + version "1.8.0" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.8.0.tgz#7c5d96c13fb131101f93c1c5774f8516a1e78d3b" + dependencies: + accepts "~1.3.3" + batch "0.5.3" + debug "~2.2.0" + escape-html "~1.0.3" + http-errors "~1.5.0" + mime-types "~2.1.11" + parseurl "~1.3.1" + +serve-index@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.7.3.tgz#7a057fc6ee28dc63f64566e5fa57b111a86aecd2" + dependencies: + accepts "~1.2.13" + batch "0.5.3" + debug "~2.2.0" + escape-html "~1.0.3" + http-errors "~1.3.1" + mime-types "~2.1.9" + parseurl "~1.3.1" + +serve-static@^1.10.0: + version "1.11.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.11.1.tgz#d6cce7693505f733c759de57befc1af76c0f0805" + dependencies: + encodeurl "~1.0.1" + escape-html "~1.0.3" + parseurl "~1.3.1" + send "0.14.1" + +serve-static@~1.10.0: + version "1.10.3" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.10.3.tgz#ce5a6ecd3101fed5ec09827dac22a9c29bfb0535" + dependencies: + escape-html "~1.0.3" + parseurl "~1.3.1" + send "0.13.2" + +set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + +set-immediate-shim@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + +setprototypeof@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.1.tgz#52009b27888c4dc48f591949c0a8275834c1ca7e" + +shell-quote@~1.4.1: + version "1.4.3" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.4.3.tgz#952c44e0b1ed9013ef53958179cc643e8777466b" + dependencies: + array-filter "~0.0.0" + array-map "~0.0.0" + array-reduce "~0.0.0" + jsonify "~0.0.0" + +sifter@^0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/sifter/-/sifter-0.5.2.tgz#4702e3cee3036903da1f194b29e6dc7a4fb59abe" + dependencies: + async "0.2.x" + cardinal "0.4.x" + csv-parse "^1.1.7" + humanize "0.0.x" + optimist "0.6.x" + optionalDependencies: + microtime "^2.1.0" + +sigmund@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" + +signal-exit@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.1.tgz#5a4c884992b63a7acd9badb7894c3ee9cfccad81" + +sntp@0.2.x: + version "0.2.4" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-0.2.4.tgz#fb885f18b0f3aad189f824862536bceeec750900" + dependencies: + hoek "0.9.x" + +sntp@1.x.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" + dependencies: + hoek "2.x.x" + +socket.io-client@0.9.16: + version "0.9.16" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-0.9.16.tgz#4da7515c5e773041d1b423970415bcc430f35fc6" + dependencies: + active-x-obfuscator "0.0.1" + uglify-js "1.2.5" + ws "0.4.x" + xmlhttprequest "1.4.2" + +socket.io@0.9.16: + version "0.9.16" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-0.9.16.tgz#3bab0444e49b55fbbc157424dbd41aa375a51a76" + dependencies: + base64id "0.1.0" + policyfile "0.0.4" + socket.io-client "0.9.16" + optionalDependencies: + redis "0.7.3" + +source-map@^0.4.2, source-map@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + dependencies: + amdefine ">=0.0.4" + +source-map@~0.1.7, source-map@0.1.x: + version "0.1.43" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" + dependencies: + amdefine ">=0.0.4" + +source-map@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" + dependencies: + amdefine ">=0.0.4" + +source-map@~0.5.1: + version "0.5.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" + +spdx-correct@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" + dependencies: + spdx-license-ids "^1.0.2" + +spdx-expression-parse@~1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" + +spdx-license-ids@^1.0.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + +sshpk@^1.7.0: + version "1.10.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.10.1.tgz#30e1a5d329244974a1af61511339d595af6638b0" + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + dashdash "^1.12.0" + getpass "^0.1.1" + optionalDependencies: + bcrypt-pbkdf "^1.0.0" + ecc-jsbn "~0.1.1" + jodid25519 "^1.0.0" + jsbn "~0.1.0" + tweetnacl "~0.14.0" + +"statuses@>= 1.3.0 < 2", statuses@~1.3.0, statuses@1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.0.tgz#8e55758cb20e7682c1f4fce8dcab30bf01d1e07a" + +statuses@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.2.1.tgz#dded45cc18256d51ed40aec142489d5c61026d28" + +stream-counter@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/stream-counter/-/stream-counter-0.2.0.tgz#ded266556319c8b0e222812b9cf3b26fa7d947de" + dependencies: + readable-stream "~1.1.8" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + +string-length@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-0.1.2.tgz#ab04bb33867ee74beed7fb89bb7f089d392780f2" + dependencies: + strip-ansi "^0.2.1" + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +stringify-object@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-1.0.1.tgz#86d35e7dbfbce9aa45637d7ecdd7847e159db8a2" + +stringstream@~0.0.4: + version "0.0.5" + resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" + +strip-ansi@^0.2.1: + version "0.2.2" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.2.2.tgz#854d290c981525fc8c397a910b025ae2d54ffc08" + dependencies: + ansi-regex "^0.1.0" + +strip-ansi@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.3.0.tgz#25f48ea22ca79187f3174a4db8759347bb126220" + dependencies: + ansi-regex "^0.2.1" + +strip-ansi@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-2.0.1.tgz#df62c1aa94ed2f114e1d0f21fd1d50482b79a60e" + dependencies: + ansi-regex "^1.0.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.1.1.tgz#39e8a98d044d150660abe4a6808acf70bb7bc991" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + dependencies: + is-utf8 "^0.2.0" + +strip-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + dependencies: + get-stdin "^4.0.1" + +strip-json-comments@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" + +supports-color@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + +supports-color@^3.1.0, supports-color@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" + dependencies: + has-flag "^1.0.0" + +tar-fs@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-0.5.2.tgz#0f59424be7eeee45232316e302f66d3f6ea6db3e" + dependencies: + mkdirp "^0.5.0" + pump "^0.3.5" + tar-stream "^0.4.6" + +tar-pack@~3.1.0: + version "3.1.4" + resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.1.4.tgz#bc8cf9a22f5832739f12f3910dac1eb97b49708c" + dependencies: + debug "~2.2.0" + fstream "~1.0.10" + fstream-ignore "~1.0.5" + once "~1.3.3" + readable-stream "~2.1.4" + rimraf "~2.5.1" + tar "~2.2.1" + uid-number "~0.0.6" + +tar-stream@^0.4.6: + version "0.4.7" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-0.4.7.tgz#1f1d2ce9ebc7b42765243ca0e8f1b7bfda0aadcd" + dependencies: + bl "^0.9.0" + end-of-stream "^1.0.0" + readable-stream "^1.0.27-1" + xtend "^4.0.0" + +tar-stream@~1.1.0: + version "1.1.5" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.1.5.tgz#be9218c130c20029e107b0f967fb23de0579d13c" + dependencies: + bl "^0.9.0" + end-of-stream "^1.0.0" + readable-stream "~1.0.33" + xtend "^4.0.0" + +tar@~2.2.0, tar@~2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" + dependencies: + block-stream "*" + fstream "^1.0.2" + inherits "2" + +throttleit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" + +throttleit@~0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-0.0.2.tgz#cfedf88e60c00dd9697b61fdd2a8343a9b680eaf" + +through@~2.3.4: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + +timers-ext@0.1: + version "0.1.0" + resolved "https://registry.yarnpkg.com/timers-ext/-/timers-ext-0.1.0.tgz#00345a2ca93089d1251322054389d263e27b77e2" + dependencies: + es5-ext "~0.10.2" + next-tick "~0.2.2" + +tiny-lr@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/tiny-lr/-/tiny-lr-0.2.1.tgz#b3fdba802e5d56a33c2f6f10794b32e477ac729d" + dependencies: + body-parser "~1.14.0" + debug "~2.2.0" + faye-websocket "~0.10.0" + livereload-js "^2.2.0" + parseurl "~1.3.0" + qs "~5.1.0" + +tinycolor@0.x: + version "0.0.1" + resolved "https://registry.yarnpkg.com/tinycolor/-/tinycolor-0.0.1.tgz#320b5a52d83abb5978d81a3e887d4aefb15a6164" + +tmp@0.0.23: + version "0.0.23" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.23.tgz#de874aa5e974a85f0a32cdfdbd74663cb3bd9c74" + +touch@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/touch/-/touch-0.0.2.tgz#a65a777795e5cbbe1299499bdc42281ffb21b5f4" + dependencies: + nopt "~1.0.10" + +tough-cookie@^0.12.1: + version "0.12.1" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-0.12.1.tgz#8220c7e21abd5b13d96804254bd5a81ebf2c7d62" + dependencies: + punycode ">=0.2.0" + +tough-cookie@>=0.12.0, tough-cookie@~2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.1.tgz#99c77dfbb7d804249e8a299d4cb0fd81fef083fd" + +"traverse@>=0.3.0 <0.4": + version "0.3.9" + resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" + +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + +tsscmp@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.5.tgz#7dc4a33af71581ab4337da91d85ca5427ebd9a97" + +tunnel-agent@~0.4.0, tunnel-agent@~0.4.1: + version "0.4.3" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.3" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.3.tgz#3da382f670f25ded78d7b3d1792119bca0b7132d" + +type-check@~0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + dependencies: + prelude-ls "~1.1.2" + +type-detect@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-1.0.0.tgz#762217cc06db258ec48908a1298e8b95121e8ea2" + +type-detect@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822" + +type-is@~1.6.10, type-is@~1.6.6: + version "1.6.13" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.13.tgz#6e83ba7bc30cd33a7bb0b7fb00737a2085bf9d08" + dependencies: + media-typer "0.3.0" + mime-types "~2.1.11" + +typedarray@~0.0.5: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + +uglify-js@^2.6: + version "2.7.3" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.3.tgz#39b3a7329b89f5ec507e344c6e22568698ef4868" + dependencies: + async "~0.2.6" + source-map "~0.5.1" + uglify-to-browserify "~1.0.0" + yargs "~3.10.0" + +uglify-js@~2.3: + version "2.3.6" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.3.6.tgz#fa0984770b428b7a9b2a8058f46355d14fef211a" + dependencies: + async "~0.2.6" + optimist "~0.3.5" + source-map "~0.1.7" + +uglify-js@~2.6.2: + version "2.6.4" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.6.4.tgz#65ea2fb3059c9394692f15fed87c2b36c16b9adf" + dependencies: + async "~0.2.6" + source-map "~0.5.1" + uglify-to-browserify "~1.0.0" + yargs "~3.10.0" + +uglify-js@1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-1.2.5.tgz#b542c2c76f78efb34b200b20177634330ff702b6" + +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + +uid-number@~0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + +uid-number@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.5.tgz#5a3db23ef5dbd55b81fce0ec9a2ac6fccdebb81e" + +uid-safe@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.0.0.tgz#a7f3c6ca64a1f6a5d04ec0ef3e4c3d5367317137" + dependencies: + base64-url "1.2.1" + +uid-safe@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.1.1.tgz#3dbf9436b528be9f52882c05a6216c3763db3666" + dependencies: + base64-url "1.2.2" + random-bytes "~1.0.0" + +underscore.string@~2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-2.2.1.tgz#d7c0fa2af5d5a1a67f4253daee98132e733f0f19" + +underscore.string@~2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-2.3.3.tgz#71c08bf6b428b1133f37e78fa3a21c82f7329b0d" + +underscore.string@~2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-2.4.0.tgz#8cdd8fbac4e2d2ea1e7e2e8097c42f442280f85b" + +underscore.string@~3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-3.0.3.tgz#4617b8c1a250cf6e5064fbbb363d0fa96cf14552" + +"underscore@>= 1.2.1": + version "1.8.3" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022" + +underscore@~1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.7.0.tgz#6bbaf0877500d36be34ecaa584e0db9fef035209" + +unpipe@~1.0.0, unpipe@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + +update-notifier@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-0.2.0.tgz#a010c928adcf02090b8e0ce7fef6fb0a7cacc34a" + dependencies: + chalk "^0.5.0" + configstore "^0.3.0" + latest-version "^0.2.0" + semver-diff "^0.1.0" + string-length "^0.1.2" + +uri-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/uri-path/-/uri-path-1.0.0.tgz#9747f018358933c31de0fccfd82d138e67262e32" + +user-home@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" + +useragent@^2.1.6: + version "2.1.9" + resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.1.9.tgz#4dba2bc4dad1875777ab15de3ff8098b475000b7" + dependencies: + lru-cache "2.2.x" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + +utile@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/utile/-/utile-0.2.1.tgz#930c88e99098d6220834c356cbd9a770522d90d7" + dependencies: + async "~0.2.9" + deep-equal "*" + i "0.3.x" + mkdirp "0.x.x" + ncp "0.4.x" + rimraf "2.x.x" + +utils-merge@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" + +uuid@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" + +validate-npm-package-license@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" + dependencies: + spdx-correct "~1.0.0" + spdx-expression-parse "~1.0.0" + +vargs@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/vargs/-/vargs-0.1.0.tgz#6b6184da6520cc3204ce1b407cac26d92609ebff" + +vary@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.0.1.tgz#99e4981566a286118dfb2b817357df7993376d10" + +vary@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.0.tgz#e1e5affbbd16ae768dd2674394b9ad3022653140" + +verror@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" + dependencies: + extsprintf "1.0.2" + +vhost@~3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/vhost/-/vhost-3.0.2.tgz#2fb1decd4c466aa88b0f9341af33dc1aff2478d5" + +"watch@>= 0.5.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/watch/-/watch-1.0.1.tgz#37b7fc4b7bccafa9f6398dca56a2a45455db4aa2" + dependencies: + exec-sh "^0.2.0" + minimist "^1.2.0" + +wd@~0.3.4: + version "0.3.12" + resolved "https://registry.yarnpkg.com/wd/-/wd-0.3.12.tgz#3fb4f1d759f8c85dde5393d17334ffe03e9bb329" + dependencies: + archiver "~0.14.0" + async "~1.0.0" + lodash "~3.9.3" + q "~1.4.1" + request "~2.55.0" + underscore.string "~3.0.3" + vargs "~0.1.0" + +websocket-driver@>=0.5.1: + version "0.6.5" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" + dependencies: + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.1.tgz#76899499c184b6ef754377c2dbb0cd6cb55d29e7" + +which@^1.0.9, which@^1.1.1, which@~1.2.10: + version "1.2.11" + resolved "https://registry.yarnpkg.com/which/-/which-1.2.11.tgz#c8b2eeea6b8c1659fa7c1dd4fdaabe9533dc5e8b" + dependencies: + isexe "^1.1.1" + +which@~1.0.5: + version "1.0.9" + resolved "https://registry.yarnpkg.com/which/-/which-1.0.9.tgz#460c1da0f810103d0321a9b633af9e575e64486f" + +wide-align@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad" + dependencies: + string-width "^1.0.1" + +win-release@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/win-release/-/win-release-1.1.1.tgz#5fa55e02be7ca934edfc12665632e849b72e5209" + dependencies: + semver "^5.0.1" + +window-size@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + +wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + +wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +wrench@~1.4.3: + version "1.4.4" + resolved "https://registry.yarnpkg.com/wrench/-/wrench-1.4.4.tgz#7f523efdb71b0100e77dce834c06523cbe3d54e0" + +ws@0.4.x: + version "0.4.32" + resolved "https://registry.yarnpkg.com/ws/-/ws-0.4.32.tgz#787a6154414f3c99ed83c5772153b20feb0cec32" + dependencies: + commander "~2.1.0" + nan "~1.0.0" + options ">=0.0.5" + tinycolor "0.x" + +xdg-basedir@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-1.0.1.tgz#14ff8f63a4fdbcb05d5b6eea22b36f3033b9f04e" + dependencies: + user-home "^1.0.0" + +xmlhttprequest@1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.4.2.tgz#01453a1d9bed1e8f172f6495bbf4c8c426321500" + +xtend@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + +yargs@~3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0" + +yauzl@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005" + dependencies: + fd-slicer "~1.0.1" + +ycssmin@>=1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ycssmin/-/ycssmin-1.0.1.tgz#7cdde8db78cfab00d2901c3b2301e304faf4df16" + +zeparser@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/zeparser/-/zeparser-0.0.5.tgz#03726561bc268f2e5444f54c665b7fd4a8c029e2" + +zip-stream@~0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-0.5.2.tgz#32dcbc506d0dab4d21372625bd7ebaac3c2fff56" + dependencies: + compress-commons "~0.2.0" + lodash "~3.2.0" + readable-stream "~1.0.26" + +zlib-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/zlib-browserify/-/zlib-browserify-0.0.1.tgz#4fa6a45d00dbc15f318a4afa1d9afc0258e176cc" + diff --git a/modoboa/bower_components/sifter/.bower.json b/modoboa/bower_components/sifter/.bower.json new file mode 100644 index 000000000..9392ede96 --- /dev/null +++ b/modoboa/bower_components/sifter/.bower.json @@ -0,0 +1,44 @@ +{ + "name": "sifter", + "keywords": [ + "search", + "filter", + "sift", + "data", + "results", + "match", + "sort", + "autocomplete" + ], + "description": "A library for textually searching arrays and hashes of objects by property (or multiple properties). Designed specifically for autocomplete.", + "version": "0.5.2", + "license": "Apache License, Version 2.0", + "readmeFilename": "README.md", + "repository": { + "type": "git", + "url": "git://github.com/brianreavis/sifter.js.git" + }, + "main": [ + "sifter.js" + ], + "ignore": [ + "Makefile", + "test", + "lib", + "bin", + "benchmark", + "node_modules", + ".travis.yml" + ], + "dependencies": {}, + "homepage": "https://github.com/brianreavis/sifter.js", + "_release": "0.5.2", + "_resolution": { + "type": "version", + "tag": "v0.5.2", + "commit": "4ba7422542bf188c1fdb4bbc341fc4fcc1ff0680" + }, + "_source": "https://github.com/brianreavis/sifter.js.git", + "_target": "0.5.x", + "_originalSource": "sifter" +} \ No newline at end of file diff --git a/modoboa/bower_components/sifter/.gitignore b/modoboa/bower_components/sifter/.gitignore new file mode 100644 index 000000000..e0326fc99 --- /dev/null +++ b/modoboa/bower_components/sifter/.gitignore @@ -0,0 +1,3 @@ +.DS_store +node_modules +benchmark/report.json \ No newline at end of file diff --git a/modoboa/bower_components/sifter/.npmignore b/modoboa/bower_components/sifter/.npmignore new file mode 100644 index 000000000..452a8775d --- /dev/null +++ b/modoboa/bower_components/sifter/.npmignore @@ -0,0 +1,4 @@ +*.md +.git* +benchmark/ +test/ \ No newline at end of file diff --git a/modoboa/bower_components/sifter/README.md b/modoboa/bower_components/sifter/README.md new file mode 100644 index 000000000..60c48e2da --- /dev/null +++ b/modoboa/bower_components/sifter/README.md @@ -0,0 +1,155 @@ +# sifter.js +[![NPM version](http://img.shields.io/npm/v/sifter.svg?style=flat)](https://www.npmjs.org/package/sifter) +[![Installs](http://img.shields.io/npm/dm/sifter.svg?style=flat)](https://www.npmjs.org/package/sifter) +[![Build Status](https://travis-ci.org/brianreavis/sifter.js.svg)](https://travis-ci.org/brianreavis/sifter.js) +[![Coverage Status](http://img.shields.io/coveralls/brianreavis/sifter.js/master.svg?style=flat)](https://coveralls.io/r/brianreavis/sifter.js) + +Sifter is a client and server-side library (via [UMD](https://github.com/umdjs/umd)) for textually searching arrays and hashes of objects by property – or multiple properties. It's designed specifically for autocomplete. The process is three-step: *score*, *filter*, *sort*. + +* **Supports díåcritîçs.**
    For example, if searching for "montana" and an item in the set has a value of "montaña", it will still be matched. Sorting will also play nicely with diacritics. +* **Smart scoring.**
    Items are scored / sorted intelligently depending on where a match is found in the string (how close to the beginning) and what percentage of the string matches. +* **Multi-field sorting.**
    When scores aren't enough to go by – like when getting results for an empty query – it can sort by one or more fields. For example, sort by a person's first name and last name without actually merging the properties to a single string. +* **Nested properties.**
    Allows to search and sort on nested properties so you can perform search on complex objects without flattening them simply by using dot-notation to reference fields (ie. `nested.property`). + +```sh +$ npm install sifter # node.js +$ bower install sifter # browser +``` + +## Usage + +```js +var sifter = new Sifter([ + {title: 'Annapurna I', location: 'Nepal', continent: 'Asia'}, + {title: 'Annapurna II', location: 'Nepal', continent: 'Asia'}, + {title: 'Annapurna III', location: 'Nepal', continent: 'Asia'}, + {title: 'Eiger', location: 'Switzerland', continent: 'Europe'}, + {title: 'Everest', location: 'Nepal', continent: 'Asia'}, + {title: 'Gannett', location: 'Wyoming', continent: 'North America'}, + {title: 'Denali', location: 'Alaska', continent: 'North America'} +]); + +var result = sifter.search('anna', { + fields: ['title', 'location', 'continent'], + sort: [{field: 'title', direction: 'asc'}], + limit: 3 +}); +``` + +Seaching will provide back meta information and an "items" array that contains objects with the index (or key, if searching a hash) and a score that represents how good of a match the item was. Items that did not match will not be returned. + +``` +{"score": 0.2878787878787879, "id": 0}, +{"score": 0.27777777777777773, "id": 1}, +{"score": 0.2692307692307692, "id": 2} +``` + +Items are sorted by best-match, primarily. If two or more items have the same score (which will be the case when searching with an empty string), it will resort to the fields listed in the "sort" option. + +The full result comes back in the format of: + +```js +{ + "options": { + "fields": ["title", "location", "continent"], + "sort": [ + {"field": "title", "direction": "asc"} + ], + "limit": 3 + }, + "query": "anna", + "tokens": [{ + "string": "anna", + "regex": /[aÀÁÂÃÄÅàáâãäå][nÑñ][nÑñ][aÀÁÂÃÄÅàáâãäå]/ + }], + "total": 3, + "items": [ + {"score": 0.2878787878787879, "id": 0}, + {"score": 0.27777777777777773, "id": 1}, + {"score": 0.2692307692307692,"id": 2} + ] +} +``` + +### API + +#### #.search(query, options) + +Performs a search for `query` with the provided `options`. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    OptionTypeDescription
    fieldsarrayAn array of property names to be searched.
    limitintegerThe maximum number of results to return.
    sortarrayAn array of fields to sort by. Each item should be an object containing at least a "field" property. Optionally, direction can be set to "asc" or "desc". The order of the array defines the sort precedence.

    Unless present, a special "$score" property will be automatically added to the beginning of the sort list. This will make results sorted primarily by match quality (descending).
    sort_emptyarrayOptional. Defaults to "sort" setting. If provided, these sort settings are used when no query is present.
    filterbooleanIf false, items with a score of zero will not be filtered out of the result-set.
    conjunctionstringDetermines how multiple search terms are joined ("and" or "or", defaults to "or").
    nestingbooleanIf true, nested fields will be available for search and sort using dot-notation to reference them (e.g. nested.property)
    Warning: can reduce performance
    + +## CLI + +![CLI](http://i.imgur.com/fSQBnWZ.png) + +Sifter comes with a command line interface that's useful for testing on datasets. It accepts JSON and CSV data, either from a file or from stdin (unix pipes). If using CSV data, the first line of the file must be a header row. +```sh +$ npm install -g sifter +``` + +```sh +$ cat file.csv | sifter --query="ant" --fields=title +$ sifter --query="ant" --fields=title --file=file.csv +``` + +## Contributing + +Install the dependencies that are required to build and test: + +```sh +$ npm install +``` + +First build a copy with `make` then run the test suite with `make test`. + +When issuing a pull request, please exclude "sifter.js" and "sifter.min.js" in the project root. + +## License + +Copyright © 2013–2015 [Brian Reavis](http://twitter.com/brianreavis) & [Contributors](https://github.com/brianreavis/sifter.js/graphs/contributors) + +Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at: http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. diff --git a/modoboa/bower_components/sifter/bower.json b/modoboa/bower_components/sifter/bower.json new file mode 100644 index 000000000..1c4e9cefc --- /dev/null +++ b/modoboa/bower_components/sifter/bower.json @@ -0,0 +1,23 @@ +{ + "name": "sifter", + "keywords": ["search","filter","sift","data","results","match","sort","autocomplete"], + "description": "A library for textually searching arrays and hashes of objects by property (or multiple properties). Designed specifically for autocomplete.", + "version": "0.5.2", + "license": "Apache License, Version 2.0", + "readmeFilename": "README.md", + "repository": { + "type": "git", + "url": "git://github.com/brianreavis/sifter.js.git" + }, + "main": ["sifter.js"], + "ignore": [ + "Makefile", + "test", + "lib", + "bin", + "benchmark", + "node_modules", + ".travis.yml" + ], + "dependencies": {} +} diff --git a/modoboa/bower_components/sifter/package.json b/modoboa/bower_components/sifter/package.json new file mode 100644 index 000000000..f33347ba4 --- /dev/null +++ b/modoboa/bower_components/sifter/package.json @@ -0,0 +1,49 @@ +{ + "name": "sifter", + "keywords": [ + "search", + "filter", + "sift", + "data", + "results", + "match", + "sort", + "autocomplete" + ], + "description": "A library for textually searching arrays and hashes of objects by property (or multiple properties). Designed specifically for autocomplete.", + "version": "0.5.2", + "license": "Apache-2.0", + "author": "Brian Reavis ", + "main": "./sifter.js", + "repository": { + "type": "git", + "url": "git://github.com/brianreavis/sifter.js.git" + }, + "scripts": { + "test": "mocha -R list" + }, + "bin": { + "sifter": "./bin/sifter.js" + }, + "dependencies": { + "optimist": "0.6.x", + "cardinal": "0.4.x", + "async": "0.2.x", + "humanize": "0.0.x", + "csv-parse": "^1.1.7" + }, + "devDependencies": { + "mocha": "1.12.x", + "mocha-istanbul": "0.2.x", + "mocha-lcov-reporter": "0.0.x", + "coveralls": "2.3.x", + "uglify-js": "2.4.x", + "istanbul": "0.1.x" + }, + "optionalDependencies": { + "microtime": "^2.1.0" + }, + "engines": { + "node": "*" + } +} diff --git a/modoboa/bower_components/sifter/sifter.js b/modoboa/bower_components/sifter/sifter.js new file mode 100644 index 000000000..31adec6be --- /dev/null +++ b/modoboa/bower_components/sifter/sifter.js @@ -0,0 +1,498 @@ +/** + * sifter.js + * Copyright (c) 2013 Brian Reavis & contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this + * file except in compliance with the License. You may obtain a copy of the License at: + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF + * ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + * + * @author Brian Reavis + */ + +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + define(factory); + } else if (typeof exports === 'object') { + module.exports = factory(); + } else { + root.Sifter = factory(); + } +}(this, function() { + + /** + * Textually searches arrays and hashes of objects + * by property (or multiple properties). Designed + * specifically for autocomplete. + * + * @constructor + * @param {array|object} items + * @param {object} items + */ + var Sifter = function(items, settings) { + this.items = items; + this.settings = settings || {diacritics: true}; + }; + + /** + * Splits a search string into an array of individual + * regexps to be used to match results. + * + * @param {string} query + * @returns {array} + */ + Sifter.prototype.tokenize = function(query) { + query = trim(String(query || '').toLowerCase()); + if (!query || !query.length) return []; + + var i, n, regex, letter; + var tokens = []; + var words = query.split(/ +/); + + for (i = 0, n = words.length; i < n; i++) { + regex = escape_regex(words[i]); + if (this.settings.diacritics) { + for (letter in DIACRITICS) { + if (DIACRITICS.hasOwnProperty(letter)) { + regex = regex.replace(new RegExp(letter, 'g'), DIACRITICS[letter]); + } + } + } + tokens.push({ + string : words[i], + regex : new RegExp(regex, 'i') + }); + } + + return tokens; + }; + + /** + * Iterates over arrays and hashes. + * + * ``` + * this.iterator(this.items, function(item, id) { + * // invoked for each item + * }); + * ``` + * + * @param {array|object} object + */ + Sifter.prototype.iterator = function(object, callback) { + var iterator; + if (is_array(object)) { + iterator = Array.prototype.forEach || function(callback) { + for (var i = 0, n = this.length; i < n; i++) { + callback(this[i], i, this); + } + }; + } else { + iterator = function(callback) { + for (var key in this) { + if (this.hasOwnProperty(key)) { + callback(this[key], key, this); + } + } + }; + } + + iterator.apply(object, [callback]); + }; + + /** + * Returns a function to be used to score individual results. + * + * Good matches will have a higher score than poor matches. + * If an item is not a match, 0 will be returned by the function. + * + * @param {object|string} search + * @param {object} options (optional) + * @returns {function} + */ + Sifter.prototype.getScoreFunction = function(search, options) { + var self, fields, tokens, token_count, nesting; + + self = this; + search = self.prepareSearch(search, options); + tokens = search.tokens; + fields = search.options.fields; + token_count = tokens.length; + nesting = search.options.nesting; + + /** + * Calculates how close of a match the + * given value is against a search token. + * + * @param {mixed} value + * @param {object} token + * @return {number} + */ + var scoreValue = function(value, token) { + var score, pos; + + if (!value) return 0; + value = String(value || ''); + pos = value.search(token.regex); + if (pos === -1) return 0; + score = token.string.length / value.length; + if (pos === 0) score += 0.5; + return score; + }; + + /** + * Calculates the score of an object + * against the search query. + * + * @param {object} token + * @param {object} data + * @return {number} + */ + var scoreObject = (function() { + var field_count = fields.length; + if (!field_count) { + return function() { return 0; }; + } + if (field_count === 1) { + return function(token, data) { + return scoreValue(getattr(data, fields[0], nesting), token); + }; + } + return function(token, data) { + for (var i = 0, sum = 0; i < field_count; i++) { + sum += scoreValue(getattr(data, fields[i], nesting), token); + } + return sum / field_count; + }; + })(); + + if (!token_count) { + return function() { return 0; }; + } + if (token_count === 1) { + return function(data) { + return scoreObject(tokens[0], data); + }; + } + + if (search.options.conjunction === 'and') { + return function(data) { + var score; + for (var i = 0, sum = 0; i < token_count; i++) { + score = scoreObject(tokens[i], data); + if (score <= 0) return 0; + sum += score; + } + return sum / token_count; + }; + } else { + return function(data) { + for (var i = 0, sum = 0; i < token_count; i++) { + sum += scoreObject(tokens[i], data); + } + return sum / token_count; + }; + } + }; + + /** + * Returns a function that can be used to compare two + * results, for sorting purposes. If no sorting should + * be performed, `null` will be returned. + * + * @param {string|object} search + * @param {object} options + * @return function(a,b) + */ + Sifter.prototype.getSortFunction = function(search, options) { + var i, n, self, field, fields, fields_count, multiplier, multipliers, get_field, implicit_score, sort; + + self = this; + search = self.prepareSearch(search, options); + sort = (!search.query && options.sort_empty) || options.sort; + + /** + * Fetches the specified sort field value + * from a search result item. + * + * @param {string} name + * @param {object} result + * @return {mixed} + */ + get_field = function(name, result) { + if (name === '$score') return result.score; + return getattr(self.items[result.id], name, options.nesting); + }; + + // parse options + fields = []; + if (sort) { + for (i = 0, n = sort.length; i < n; i++) { + if (search.query || sort[i].field !== '$score') { + fields.push(sort[i]); + } + } + } + + // the "$score" field is implied to be the primary + // sort field, unless it's manually specified + if (search.query) { + implicit_score = true; + for (i = 0, n = fields.length; i < n; i++) { + if (fields[i].field === '$score') { + implicit_score = false; + break; + } + } + if (implicit_score) { + fields.unshift({field: '$score', direction: 'desc'}); + } + } else { + for (i = 0, n = fields.length; i < n; i++) { + if (fields[i].field === '$score') { + fields.splice(i, 1); + break; + } + } + } + + multipliers = []; + for (i = 0, n = fields.length; i < n; i++) { + multipliers.push(fields[i].direction === 'desc' ? -1 : 1); + } + + // build function + fields_count = fields.length; + if (!fields_count) { + return null; + } else if (fields_count === 1) { + field = fields[0].field; + multiplier = multipliers[0]; + return function(a, b) { + return multiplier * cmp( + get_field(field, a), + get_field(field, b) + ); + }; + } else { + return function(a, b) { + var i, result, a_value, b_value, field; + for (i = 0; i < fields_count; i++) { + field = fields[i].field; + result = multipliers[i] * cmp( + get_field(field, a), + get_field(field, b) + ); + if (result) return result; + } + return 0; + }; + } + }; + + /** + * Parses a search query and returns an object + * with tokens and fields ready to be populated + * with results. + * + * @param {string} query + * @param {object} options + * @returns {object} + */ + Sifter.prototype.prepareSearch = function(query, options) { + if (typeof query === 'object') return query; + + options = extend({}, options); + + var option_fields = options.fields; + var option_sort = options.sort; + var option_sort_empty = options.sort_empty; + + if (option_fields && !is_array(option_fields)) options.fields = [option_fields]; + if (option_sort && !is_array(option_sort)) options.sort = [option_sort]; + if (option_sort_empty && !is_array(option_sort_empty)) options.sort_empty = [option_sort_empty]; + + return { + options : options, + query : String(query || '').toLowerCase(), + tokens : this.tokenize(query), + total : 0, + items : [] + }; + }; + + /** + * Searches through all items and returns a sorted array of matches. + * + * The `options` parameter can contain: + * + * - fields {string|array} + * - sort {array} + * - score {function} + * - filter {bool} + * - limit {integer} + * + * Returns an object containing: + * + * - options {object} + * - query {string} + * - tokens {array} + * - total {int} + * - items {array} + * + * @param {string} query + * @param {object} options + * @returns {object} + */ + Sifter.prototype.search = function(query, options) { + var self = this, value, score, search, calculateScore; + var fn_sort; + var fn_score; + + search = this.prepareSearch(query, options); + options = search.options; + query = search.query; + + // generate result scoring function + fn_score = options.score || self.getScoreFunction(search); + + // perform search and sort + if (query.length) { + self.iterator(self.items, function(item, id) { + score = fn_score(item); + if (options.filter === false || score > 0) { + search.items.push({'score': score, 'id': id}); + } + }); + } else { + self.iterator(self.items, function(item, id) { + search.items.push({'score': 1, 'id': id}); + }); + } + + fn_sort = self.getSortFunction(search, options); + if (fn_sort) search.items.sort(fn_sort); + + // apply limits + search.total = search.items.length; + if (typeof options.limit === 'number') { + search.items = search.items.slice(0, options.limit); + } + + return search; + }; + + // utilities + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + var cmp = function(a, b) { + if (typeof a === 'number' && typeof b === 'number') { + return a > b ? 1 : (a < b ? -1 : 0); + } + a = asciifold(String(a || '')); + b = asciifold(String(b || '')); + if (a > b) return 1; + if (b > a) return -1; + return 0; + }; + + var extend = function(a, b) { + var i, n, k, object; + for (i = 1, n = arguments.length; i < n; i++) { + object = arguments[i]; + if (!object) continue; + for (k in object) { + if (object.hasOwnProperty(k)) { + a[k] = object[k]; + } + } + } + return a; + }; + + /** + * A property getter resolving dot-notation + * @param {Object} obj The root object to fetch property on + * @param {String} name The optionally dotted property name to fetch + * @param {Boolean} nesting Handle nesting or not + * @return {Object} The resolved property value + */ + var getattr = function(obj, name, nesting) { + if (!obj || !name) return; + if (!nesting) return obj[name]; + var names = name.split("."); + while(names.length && (obj = obj[names.shift()])); + return obj; + }; + + var trim = function(str) { + return (str + '').replace(/^\s+|\s+$|/g, ''); + }; + + var escape_regex = function(str) { + return (str + '').replace(/([.?*+^$[\]\\(){}|-])/g, '\\$1'); + }; + + var is_array = Array.isArray || (typeof $ !== 'undefined' && $.isArray) || function(object) { + return Object.prototype.toString.call(object) === '[object Array]'; + }; + + var DIACRITICS = { + 'a': '[aḀḁĂăÂâǍǎȺⱥȦȧẠạÄäÀàÁáĀāÃãÅåąĄÃąĄ]', + 'b': '[b␢βΒB฿𐌁ᛒ]', + 'c': '[cĆćĈĉČčĊċC̄c̄ÇçḈḉȻȼƇƈɕᴄCc]', + 'd': '[dĎďḊḋḐḑḌḍḒḓḎḏĐđD̦d̦ƉɖƊɗƋƌᵭᶁᶑȡᴅDdð]', + 'e': '[eÉéÈèÊêḘḙĚěĔĕẼẽḚḛẺẻĖėËëĒēȨȩĘęᶒɆɇȄȅẾếỀềỄễỂểḜḝḖḗḔḕȆȇẸẹỆệⱸᴇEeɘǝƏƐε]', + 'f': '[fƑƒḞḟ]', + 'g': '[gɢ₲ǤǥĜĝĞğĢģƓɠĠġ]', + 'h': '[hĤĥĦħḨḩẖẖḤḥḢḣɦʰǶƕ]', + 'i': '[iÍíÌìĬĭÎîǏǐÏïḮḯĨĩĮįĪīỈỉȈȉȊȋỊịḬḭƗɨɨ̆ᵻᶖİiIıɪIi]', + 'j': '[jȷĴĵɈɉʝɟʲ]', + 'k': '[kƘƙꝀꝁḰḱǨǩḲḳḴḵκϰ₭]', + 'l': '[lŁłĽľĻļĹĺḶḷḸḹḼḽḺḻĿŀȽƚⱠⱡⱢɫɬᶅɭȴʟLl]', + 'n': '[nŃńǸǹŇňÑñṄṅŅņṆṇṊṋṈṉN̈n̈ƝɲȠƞᵰᶇɳȵɴNnŊŋ]', + 'o': '[oØøÖöÓóÒòÔôǑǒŐőŎŏȮȯỌọƟɵƠơỎỏŌōÕõǪǫȌȍՕօ]', + 'p': '[pṔṕṖṗⱣᵽƤƥᵱ]', + 'q': '[qꝖꝗʠɊɋꝘꝙq̃]', + 'r': '[rŔŕɌɍŘřŖŗṘṙȐȑȒȓṚṛⱤɽ]', + 's': '[sŚśṠṡṢṣꞨꞩŜŝŠšŞşȘșS̈s̈]', + 't': '[tŤťṪṫŢţṬṭƮʈȚțṰṱṮṯƬƭ]', + 'u': '[uŬŭɄʉỤụÜüÚúÙùÛûǓǔŰűŬŭƯưỦủŪūŨũŲųȔȕ∪]', + 'v': '[vṼṽṾṿƲʋꝞꝟⱱʋ]', + 'w': '[wẂẃẀẁŴŵẄẅẆẇẈẉ]', + 'x': '[xẌẍẊẋχ]', + 'y': '[yÝýỲỳŶŷŸÿỸỹẎẏỴỵɎɏƳƴ]', + 'z': '[zŹźẐẑŽžŻżẒẓẔẕƵƶ]' + }; + + var asciifold = (function() { + var i, n, k, chunk; + var foreignletters = ''; + var lookup = {}; + for (k in DIACRITICS) { + if (DIACRITICS.hasOwnProperty(k)) { + chunk = DIACRITICS[k].substring(2, DIACRITICS[k].length - 1); + foreignletters += chunk; + for (i = 0, n = chunk.length; i < n; i++) { + lookup[chunk.charAt(i)] = k; + } + } + } + var regexp = new RegExp('[' + foreignletters + ']', 'g'); + return function(str) { + return str.replace(regexp, function(foreignletter) { + return lookup[foreignletter]; + }).toLowerCase(); + }; + })(); + + + // export + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + return Sifter; +})); + diff --git a/modoboa/bower_components/sifter/sifter.min.js b/modoboa/bower_components/sifter/sifter.min.js new file mode 100644 index 000000000..8757dd027 --- /dev/null +++ b/modoboa/bower_components/sifter/sifter.min.js @@ -0,0 +1,2 @@ +/*! sifter.js | https://github.com/brianreavis/sifter.js | Apache License (v2) */ +(function(r,t){if(typeof define==="function"&&define.amd){define(t)}else if(typeof exports==="object"){module.exports=t()}else{r.Sifter=t()}})(this,function(){var r=function(r,t){this.items=r;this.settings=t||{diacritics:true}};r.prototype.tokenize=function(r){r=i(String(r||"").toLowerCase());if(!r||!r.length)return[];var t,e,n,f;var s=[];var a=r.split(/ +/);for(t=0,e=a.length;t0){o.items.push({score:i,id:e})}})}else{e.iterator(e.items,function(r,t){o.items.push({score:1,id:t})})}u=e.getSortFunction(o,t);if(u)o.items.sort(u);o.total=o.items.length;if(typeof t.limit==="number"){o.items=o.items.slice(0,t.limit)}return o};var t=function(r,t){if(typeof r==="number"&&typeof t==="number"){return r>t?1:rt)return 1;if(t>r)return-1;return 0};var e=function(r,t){var e,n,i,o;for(e=1,n=arguments.length;e - + {% block extra_css %}{% endblock %} @@ -67,7 +67,7 @@ - + {% if LANGUAGE_CODE != "en" %}{% endif %} {% if TEMPLATE_DEBUG %} @@ -81,6 +81,7 @@