├── .eslintignore ├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── PULL_REQUEST_TEMPLATE.md ├── move.yml └── workflows │ ├── cypress.yml │ ├── linting.yml │ └── publishing.yml ├── .gitignore ├── CHANGELOG.md ├── CONTRIBUTING.md ├── Gruntfile.js ├── LICENSE ├── README.md ├── bower.json ├── composer.json ├── cypress.json ├── cypress ├── integration │ ├── basic.spec.js │ └── max-options.spec.js ├── plugins │ └── index.js └── support │ ├── commands.js │ └── index.js ├── docs ├── custom_theme │ ├── ajax │ │ └── libs │ │ │ └── highlight.js │ │ │ └── 9.15.6 │ │ │ ├── css │ │ │ └── github.min.css │ │ │ └── js │ │ │ └── highlight.pack.js │ ├── css │ │ └── base.css │ ├── js │ │ └── base.js │ ├── main.html │ ├── nav.html │ └── toc.html ├── docs │ ├── css │ │ └── custom.css │ ├── dist │ │ ├── css │ │ │ ├── bootstrap-select.css │ │ │ ├── bootstrap-select.css.map │ │ │ └── bootstrap-select.min.css │ │ └── js │ │ │ ├── bootstrap-select.js │ │ │ ├── bootstrap-select.js.map │ │ │ ├── bootstrap-select.min.js │ │ │ ├── bootstrap-select.min.js.map │ │ │ └── i18n │ │ │ ├── defaults-am_ET.js │ │ │ ├── defaults-am_ET.js.map │ │ │ ├── defaults-am_ET.min.js │ │ │ ├── defaults-ar_AR.js │ │ │ ├── defaults-ar_AR.js.map │ │ │ ├── defaults-ar_AR.min.js │ │ │ ├── defaults-bg_BG.js │ │ │ ├── defaults-bg_BG.js.map │ │ │ ├── defaults-bg_BG.min.js │ │ │ ├── defaults-cs_CZ.js │ │ │ ├── defaults-cs_CZ.js.map │ │ │ ├── defaults-cs_CZ.min.js │ │ │ ├── defaults-da_DK.js │ │ │ ├── defaults-da_DK.js.map │ │ │ ├── defaults-da_DK.min.js │ │ │ ├── defaults-de_DE.js │ │ │ ├── defaults-de_DE.js.map │ │ │ ├── defaults-de_DE.min.js │ │ │ ├── defaults-en_US.js │ │ │ ├── defaults-en_US.js.map │ │ │ ├── defaults-en_US.min.js │ │ │ ├── defaults-es_CL.js │ │ │ ├── defaults-es_CL.js.map │ │ │ ├── defaults-es_CL.min.js │ │ │ ├── defaults-es_ES.js │ │ │ ├── defaults-es_ES.js.map │ │ │ ├── defaults-es_ES.min.js │ │ │ ├── defaults-et_EE.js │ │ │ ├── defaults-et_EE.js.map │ │ │ ├── defaults-et_EE.min.js │ │ │ ├── defaults-eu.js │ │ │ ├── defaults-eu.js.map │ │ │ ├── defaults-eu.min.js │ │ │ ├── defaults-fa_IR.js │ │ │ ├── defaults-fa_IR.js.map │ │ │ ├── defaults-fa_IR.min.js │ │ │ ├── defaults-fi_FI.js │ │ │ ├── defaults-fi_FI.js.map │ │ │ ├── defaults-fi_FI.min.js │ │ │ ├── defaults-fr_FR.js │ │ │ ├── defaults-fr_FR.js.map │ │ │ ├── defaults-fr_FR.min.js │ │ │ ├── defaults-hr_HR.js │ │ │ ├── defaults-hr_HR.js.map │ │ │ ├── defaults-hr_HR.min.js │ │ │ ├── defaults-hu_HU.js │ │ │ ├── defaults-hu_HU.js.map │ │ │ ├── defaults-hu_HU.min.js │ │ │ ├── defaults-id_ID.js │ │ │ ├── defaults-id_ID.js.map │ │ │ ├── defaults-id_ID.min.js │ │ │ ├── defaults-it_IT.js │ │ │ ├── defaults-it_IT.js.map │ │ │ ├── defaults-it_IT.min.js │ │ │ ├── defaults-ja_JP.js │ │ │ ├── defaults-ja_JP.js.map │ │ │ ├── defaults-ja_JP.min.js │ │ │ ├── defaults-kh_KM.js │ │ │ ├── defaults-kh_KM.js.map │ │ │ ├── defaults-kh_KM.min.js │ │ │ ├── defaults-ko_KR.js │ │ │ ├── defaults-ko_KR.js.map │ │ │ ├── defaults-ko_KR.min.js │ │ │ ├── defaults-lt_LT.js │ │ │ ├── defaults-lt_LT.js.map │ │ │ ├── defaults-lt_LT.min.js │ │ │ ├── defaults-lv_LV.js │ │ │ ├── defaults-lv_LV.js.map │ │ │ ├── defaults-lv_LV.min.js │ │ │ ├── defaults-nb_NO.js │ │ │ ├── defaults-nb_NO.js.map │ │ │ ├── defaults-nb_NO.min.js │ │ │ ├── defaults-nl_NL.js │ │ │ ├── defaults-nl_NL.js.map │ │ │ ├── defaults-nl_NL.min.js │ │ │ ├── defaults-pl_PL.js │ │ │ ├── defaults-pl_PL.js.map │ │ │ ├── defaults-pl_PL.min.js │ │ │ ├── defaults-pt_BR.js │ │ │ ├── defaults-pt_BR.js.map │ │ │ ├── defaults-pt_BR.min.js │ │ │ ├── defaults-pt_PT.js │ │ │ ├── defaults-pt_PT.js.map │ │ │ ├── defaults-pt_PT.min.js │ │ │ ├── defaults-ro_RO.js │ │ │ ├── defaults-ro_RO.js.map │ │ │ ├── defaults-ro_RO.min.js │ │ │ ├── defaults-ru_RU.js │ │ │ ├── defaults-ru_RU.js.map │ │ │ ├── defaults-ru_RU.min.js │ │ │ ├── defaults-sk_SK.js │ │ │ ├── defaults-sk_SK.js.map │ │ │ ├── defaults-sk_SK.min.js │ │ │ ├── defaults-sl_SI.js │ │ │ ├── defaults-sl_SI.js.map │ │ │ ├── defaults-sl_SI.min.js │ │ │ ├── defaults-sr_SP.js │ │ │ ├── defaults-sr_SP.js.map │ │ │ ├── defaults-sr_SP.min.js │ │ │ ├── defaults-sv_SE.js │ │ │ ├── defaults-sv_SE.js.map │ │ │ ├── defaults-sv_SE.min.js │ │ │ ├── defaults-th_TH.js │ │ │ ├── defaults-th_TH.js.map │ │ │ ├── defaults-th_TH.min.js │ │ │ ├── defaults-tr_TR.js │ │ │ ├── defaults-tr_TR.js.map │ │ │ ├── defaults-tr_TR.min.js │ │ │ ├── defaults-ua_UA.js │ │ │ ├── defaults-ua_UA.js.map │ │ │ ├── defaults-ua_UA.min.js │ │ │ ├── defaults-vi_VN.js │ │ │ ├── defaults-vi_VN.js.map │ │ │ ├── defaults-vi_VN.min.js │ │ │ ├── defaults-zh_CN.js │ │ │ ├── defaults-zh_CN.js.map │ │ │ ├── defaults-zh_CN.min.js │ │ │ ├── defaults-zh_TW.js │ │ │ ├── defaults-zh_TW.js.map │ │ │ └── defaults-zh_TW.min.js │ ├── examples.md │ ├── index.md │ ├── methods.md │ ├── options.md │ └── playground │ │ ├── 3 │ │ └── index.html │ │ ├── 5 │ │ └── index.html │ │ ├── index.html │ │ └── plnkrOpener.js └── mkdocs.yml ├── js ├── .eslintrc.json ├── bootstrap-select.js ├── i18n │ ├── defaults-am_ET.js │ ├── defaults-ar_AR.js │ ├── defaults-bg_BG.js │ ├── defaults-cs_CZ.js │ ├── defaults-da_DK.js │ ├── defaults-de_DE.js │ ├── defaults-en_US.js │ ├── defaults-es_CL.js │ ├── defaults-es_ES.js │ ├── defaults-et_EE.js │ ├── defaults-eu.js │ ├── defaults-fa_IR.js │ ├── defaults-fi_FI.js │ ├── defaults-fr_FR.js │ ├── defaults-hr_HR.js │ ├── defaults-hu_HU.js │ ├── defaults-id_ID.js │ ├── defaults-it_IT.js │ ├── defaults-ja_JP.js │ ├── defaults-kh_KM.js │ ├── defaults-ko_KR.js │ ├── defaults-lt_LT.js │ ├── defaults-lv_LV.js │ ├── defaults-nb_NO.js │ ├── defaults-nl_NL.js │ ├── defaults-pl_PL.js │ ├── defaults-pt_BR.js │ ├── defaults-pt_PT.js │ ├── defaults-ro_RO.js │ ├── defaults-ru_RU.js │ ├── defaults-sk_SK.js │ ├── defaults-sl_SI.js │ ├── defaults-sr_SP.js │ ├── defaults-sv_SE.js │ ├── defaults-th_TH.js │ ├── defaults-tk_TK.js │ ├── defaults-tr_TR.js │ ├── defaults-ua_UA.js │ ├── defaults-vi_VN.js │ ├── defaults-zh_CN.js │ └── defaults-zh_TW.js ├── umd-intro.js └── umd-outro.js ├── less ├── bootstrap-select.less └── variables.less ├── nuget ├── MyGet.ps1 └── bootstrap-select.nuspec ├── package-lock.json ├── package.json ├── sass ├── bootstrap-select.scss └── variables.scss └── tests ├── bootstrap4.html ├── bootstrap5.html ├── index.html └── main.js /.eslintignore: -------------------------------------------------------------------------------- 1 | js/umd-intro.js 2 | js/umd-outro.js -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: [caseyjhol] -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: bug 6 | assignees: '' 7 | 8 | --- 9 | 10 | A bug is a _demonstrable problem_ that is caused by the code in the repository. 11 | 12 | Guidelines for bug reports: 13 | 14 | 1. **Use the GitHub issue search.** Check if the issue has already been 15 | reported. 16 | 17 | 2. **Check if the issue has been fixed.** Try to reproduce it using the 18 | latest `master` or development branch in the repository. 19 | 20 | 3. **Provide environment details.** Provide your operating system, browser(s), 21 | jQuery version, Bootstrap version, and bootstrap-select version. 22 | 23 | 4. **Create an isolated and reproducible test case.** Create a reduced test 24 | case and include a link to a live example. Use [this Plunker debugging template](https://developer.snapappointments.com/bootstrap-select/playground/) to share your isolated test cases. 25 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | Make sure to target the `dev` branch! 2 | -------------------------------------------------------------------------------- /.github/move.yml: -------------------------------------------------------------------------------- 1 | # Configuration for move-issues - https://github.com/dessant/move-issues 2 | 3 | # Delete the command comment when it contains no other content 4 | deleteCommand: true 5 | 6 | # Close the source issue after moving 7 | closeSourceIssue: true 8 | 9 | # Lock the source issue after moving 10 | lockSourceIssue: false 11 | 12 | # Mention issue and comment authors 13 | mentionAuthors: true 14 | 15 | # Preserve mentions in the issue content 16 | keepContentMentions: true 17 | 18 | # Set custom aliases for targets 19 | # aliases: 20 | # r: repo 21 | # or: owner/repo 22 | 23 | # Repository to extend settings from 24 | # _extends: repo -------------------------------------------------------------------------------- /.github/workflows/cypress.yml: -------------------------------------------------------------------------------- 1 | name: Cypress Tests 2 | on: [push, pull_request] 3 | jobs: 4 | cypress-run: 5 | runs-on: ubuntu-latest 6 | steps: 7 | - name: Checkout 8 | uses: actions/checkout@v2 9 | # Install NPM dependencies, cache them correctly 10 | # and run all Cypress tests 11 | - name: Cypress run 12 | uses: cypress-io/github-action@v2 13 | with: 14 | build: grunt build 15 | -------------------------------------------------------------------------------- /.github/workflows/linting.yml: -------------------------------------------------------------------------------- 1 | name: lint 2 | on: [push, pull_request] 3 | jobs: 4 | run-lint: 5 | runs-on: ubuntu-latest 6 | strategy: 7 | matrix: 8 | node: [ '14', '16' ] 9 | name: Node ${{ matrix.node }} test 10 | steps: 11 | - uses: actions/checkout@v2 12 | - name: Setup node 13 | uses: actions/setup-node@v2 14 | with: 15 | node-version: ${{ matrix.node }} 16 | cache: 'npm' 17 | - name: Install dependencies 18 | run: npm ci 19 | - name: Run lint 20 | run: grunt lint 21 | -------------------------------------------------------------------------------- /.github/workflows/publishing.yml: -------------------------------------------------------------------------------- 1 | name: publish 2 | on: 3 | release: 4 | types: [published] 5 | jobs: 6 | publish: 7 | runs-on: ubuntu-latest 8 | name: Publish latest release 9 | steps: 10 | - uses: actions/checkout@v2 11 | - name: Setup node 12 | uses: actions/setup-node@v2 13 | with: 14 | node-version: '16.x' 15 | cache: 'npm' 16 | registry-url: 'https://registry.npmjs.org' 17 | - name: Install dependencies 18 | run: npm ci 19 | - name: Build package 20 | run: grunt build 21 | - name: Publish npm package 22 | run: npm publish 23 | env: 24 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} 25 | - name: Publish NuGet package 26 | id: publish_nuget 27 | uses: laget-se/publish-nuget@v2 28 | with: 29 | NUGET_KEY: ${{ secrets.NUGET_API_KEY }} 30 | NUSPEC_FILE: nuget/bootstrap-select.nuspec 31 | PACKAGE_NAME: bootstrap-select 32 | VERSION_FILE_PATH: nuget/bootstrap-select.nuspec 33 | VERSION_REGEX: ^\s*(.*)<\/version>\s*$ 34 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # OS or Editor folders 2 | .DS_Store 3 | .idea 4 | 5 | # Folders to ignore 6 | node_modules 7 | bower_components 8 | .sass-cache 9 | 10 | # Dist zip 11 | bootstrap-select-*.zip 12 | dist/ 13 | 14 | docs/site 15 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2012-2018 SnapAppointments, LLC 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bootstrap-select", 3 | "description": "The jQuery plugin that brings select elements into the 21st century with intuitive multiselection, searching, and much more.", 4 | "main": [ 5 | "./less/bootstrap-select.less", 6 | "./dist/css/bootstrap-select.css", 7 | "./dist/js/bootstrap-select.js" 8 | ], 9 | "homepage": "https://developer.snapappointments.com/bootstrap-select", 10 | "authors": [ 11 | { 12 | "name": "Casey Holzer", 13 | "homepage": "https://github.com/caseyjhol" 14 | }, 15 | { 16 | "name": "Silvio Moreto", 17 | "homepage": "https://github.com/silviomoreto" 18 | }, 19 | { 20 | "name": "SnapAppointments, LLC", 21 | "homepage": "https://snapappointments.com" 22 | } 23 | ], 24 | "repository": { 25 | "type": "git", 26 | "url": "git://github.com/snapappointments/bootstrap-select.git" 27 | }, 28 | "keywords": [ 29 | "javascript", 30 | "jquery", 31 | "form", 32 | "bootstrap", 33 | "dropdown", 34 | "select", 35 | "replacement" 36 | ], 37 | "dependencies": { 38 | "jquery": "1.9.1 - 3", 39 | "bootstrap": ">=3.0.0" 40 | }, 41 | "license": "MIT", 42 | "ignore": [ 43 | ".eslintignore", 44 | ".gitignore", 45 | "CONTRIBUTING.md", 46 | "Gruntfile.js", 47 | "composer.json", 48 | ".github", 49 | "docs", 50 | "js", 51 | "!dist/js", 52 | "nuget", 53 | "tests" 54 | ] 55 | } 56 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "snapappointments/bootstrap-select", 3 | "description": "The jQuery plugin that brings select elements into the 21st century with intuitive multiselection, searching, and much more. Now with Bootstrap 4 support.", 4 | "keywords": [ 5 | "javascript", 6 | "jquery", 7 | "form", 8 | "bootstrap", 9 | "dropdown", 10 | "select", 11 | "replacement" 12 | ], 13 | "homepage": "https://developer.snapappointments.com/bootstrap-select", 14 | "authors": [ 15 | { 16 | "name": "Casey Holzer", 17 | "homepage": "https://github.com/caseyjhol" 18 | }, 19 | { 20 | "name": "Silvio Moreto", 21 | "homepage": "https://github.com/silviomoreto" 22 | }, 23 | { 24 | "name": "SnapAppointments, LLC", 25 | "homepage": "https://snapappointments.com" 26 | } 27 | ], 28 | "license": "MIT", 29 | "suggest": { 30 | "components/jquery": "1.9.1 - 3", 31 | "twbs/bootstrap": ">=3.0.0" 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /cypress.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /cypress/plugins/index.js: -------------------------------------------------------------------------------- 1 | /// 2 | // *********************************************************** 3 | // This example plugins/index.js can be used to load plugins 4 | // 5 | // You can change the location of this file or turn off loading 6 | // the plugins file with the 'pluginsFile' configuration option. 7 | // 8 | // You can read more here: 9 | // https://on.cypress.io/plugins-guide 10 | // *********************************************************** 11 | 12 | // This function is called when a project is opened or re-opened (e.g. due to 13 | // the project's config changing) 14 | 15 | /** 16 | * @type {Cypress.PluginConfig} 17 | */ 18 | // eslint-disable-next-line no-unused-vars 19 | module.exports = (on, config) => { 20 | // `on` is used to hook into various events Cypress emits 21 | // `config` is the resolved Cypress config 22 | } 23 | -------------------------------------------------------------------------------- /cypress/support/commands.js: -------------------------------------------------------------------------------- 1 | import {v4 as uuidv4} from 'uuid'; 2 | 3 | Cypress.Commands.add('selectpicker', ({options, attrs, selector, html}) => { 4 | let id; 5 | if (!selector) { 6 | id = uuidv4(); 7 | selector = `#${id}`; 8 | } 9 | 10 | cy.window().then(window => { 11 | const $ = window.$; 12 | 13 | if (html) { 14 | const $select = $(html); 15 | 16 | if (id && !$select[0].id) { 17 | $select.attr('id', id); 18 | } 19 | $('body').append($select); 20 | } else if (id) { 21 | $('body').append(`