[TASK] [NPM] install choices.js (styling copy & paste)
This commit is contained in:
		| @@ -1,3 +1,13 @@ | |||||||
|  | import Choices from "choices.js"; | ||||||
|  |  | ||||||
|  | const selects = document.querySelectorAll('select[multiple]'); | ||||||
|  |   if(selects) { | ||||||
|  |     Array.prototype.forEach.call(selects, (select: HTMLInputElement) => { | ||||||
|  |       const choices = new Choices(select); | ||||||
|  |     }); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |  | ||||||
| /*document.addEventListener('DOMContentLoaded', function() { | /*document.addEventListener('DOMContentLoaded', function() { | ||||||
|   setDistance('.set-distance-js'); |   setDistance('.set-distance-js'); | ||||||
| }); | }); | ||||||
|   | |||||||
| @@ -16,5 +16,8 @@ | |||||||
|     "typescript": "^4.9.3", |     "typescript": "^4.9.3", | ||||||
|     "vite": "^4.2.0", |     "vite": "^4.2.0", | ||||||
|     "vite-plugin-static-copy": "^0.13.1" |     "vite-plugin-static-copy": "^0.13.1" | ||||||
|  |   }, | ||||||
|  |   "dependencies": { | ||||||
|  |     "choices.js": "^10.2.0" | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -11,3 +11,344 @@ select { | |||||||
|   -webkit-appearance: none;  |   -webkit-appearance: none;  | ||||||
|   appearance: none; |   appearance: none; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /* =============================== | ||||||
|  | =            Choices            = | ||||||
|  | =============================== */ | ||||||
|  | .choices { | ||||||
|  |   position: relative; | ||||||
|  |   overflow: hidden; | ||||||
|  |   margin-bottom: 24px; | ||||||
|  |   font-size: 16px; | ||||||
|  | } | ||||||
|  | .choices:focus { | ||||||
|  |   outline: none; | ||||||
|  | } | ||||||
|  | .choices:last-child { | ||||||
|  |   margin-bottom: 0; | ||||||
|  | } | ||||||
|  | .choices.is-open { | ||||||
|  |   overflow: visible; | ||||||
|  | } | ||||||
|  | .choices.is-disabled .choices__inner, | ||||||
|  | .choices.is-disabled .choices__input { | ||||||
|  |   background-color: #eaeaea; | ||||||
|  |   cursor: not-allowed; | ||||||
|  |   -webkit-user-select: none; | ||||||
|  |           user-select: none; | ||||||
|  | } | ||||||
|  | .choices.is-disabled .choices__item { | ||||||
|  |   cursor: not-allowed; | ||||||
|  | } | ||||||
|  | .choices [hidden] { | ||||||
|  |   display: none !important; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .choices[data-type*=select-one] { | ||||||
|  |   cursor: pointer; | ||||||
|  | } | ||||||
|  | .choices[data-type*=select-one] .choices__inner { | ||||||
|  |   padding-bottom: 7.5px; | ||||||
|  | } | ||||||
|  | .choices[data-type*=select-one] .choices__input { | ||||||
|  |   display: block; | ||||||
|  |   width: 100%; | ||||||
|  |   padding: 10px; | ||||||
|  |   border-bottom: 1px solid #ddd; | ||||||
|  |   background-color: #fff; | ||||||
|  |   margin: 0; | ||||||
|  | } | ||||||
|  | .choices[data-type*=select-one] .choices__button { | ||||||
|  |   background-image: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjEiIHZpZXdCb3g9IjAgMCAyMSAyMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSIjMDAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0yLjU5Mi4wNDRsMTguMzY0IDE4LjM2NC0yLjU0OCAyLjU0OEwuMDQ0IDIuNTkyeiIvPjxwYXRoIGQ9Ik0wIDE4LjM2NEwxOC4zNjQgMGwyLjU0OCAyLjU0OEwyLjU0OCAyMC45MTJ6Ii8+PC9nPjwvc3ZnPg=="); | ||||||
|  |   padding: 0; | ||||||
|  |   background-size: 8px; | ||||||
|  |   position: absolute; | ||||||
|  |   top: 50%; | ||||||
|  |   right: 0; | ||||||
|  |   margin-top: -10px; | ||||||
|  |   margin-right: 25px; | ||||||
|  |   height: 20px; | ||||||
|  |   width: 20px; | ||||||
|  |   border-radius: 10em; | ||||||
|  |   opacity: 0.25; | ||||||
|  | } | ||||||
|  | .choices[data-type*=select-one] .choices__button:hover, .choices[data-type*=select-one] .choices__button:focus { | ||||||
|  |   opacity: 1; | ||||||
|  | } | ||||||
|  | .choices[data-type*=select-one] .choices__button:focus { | ||||||
|  |   box-shadow: 0 0 0 2px #00bcd4; | ||||||
|  | } | ||||||
|  | .choices[data-type*=select-one] .choices__item[data-value=""] .choices__button { | ||||||
|  |   display: none; | ||||||
|  | } | ||||||
|  | .choices[data-type*=select-one]::after { | ||||||
|  |   content: ""; | ||||||
|  |   height: 0; | ||||||
|  |   width: 0; | ||||||
|  |   border-style: solid; | ||||||
|  |   border-color: #333 transparent transparent transparent; | ||||||
|  |   border-width: 5px; | ||||||
|  |   position: absolute; | ||||||
|  |   right: 11.5px; | ||||||
|  |   top: 50%; | ||||||
|  |   margin-top: -2.5px; | ||||||
|  |   pointer-events: none; | ||||||
|  | } | ||||||
|  | .choices[data-type*=select-one].is-open::after { | ||||||
|  |   border-color: transparent transparent #333 transparent; | ||||||
|  |   margin-top: -7.5px; | ||||||
|  | } | ||||||
|  | .choices[data-type*=select-one][dir=rtl]::after { | ||||||
|  |   left: 11.5px; | ||||||
|  |   right: auto; | ||||||
|  | } | ||||||
|  | .choices[data-type*=select-one][dir=rtl] .choices__button { | ||||||
|  |   right: auto; | ||||||
|  |   left: 0; | ||||||
|  |   margin-left: 25px; | ||||||
|  |   margin-right: 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .choices[data-type*=select-multiple] .choices__inner, | ||||||
|  | .choices[data-type*=text] .choices__inner { | ||||||
|  |   cursor: text; | ||||||
|  | } | ||||||
|  | .choices[data-type*=select-multiple] .choices__button, | ||||||
|  | .choices[data-type*=text] .choices__button { | ||||||
|  |   position: relative; | ||||||
|  |   display: inline-block; | ||||||
|  |   margin-top: 0; | ||||||
|  |   margin-right: -4px; | ||||||
|  |   margin-bottom: 0; | ||||||
|  |   margin-left: 8px; | ||||||
|  |   padding-left: 16px; | ||||||
|  |   border-left: 1px solid #008fa1; | ||||||
|  |   background-image: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjEiIHZpZXdCb3g9IjAgMCAyMSAyMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSIjRkZGIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0yLjU5Mi4wNDRsMTguMzY0IDE4LjM2NC0yLjU0OCAyLjU0OEwuMDQ0IDIuNTkyeiIvPjxwYXRoIGQ9Ik0wIDE4LjM2NEwxOC4zNjQgMGwyLjU0OCAyLjU0OEwyLjU0OCAyMC45MTJ6Ii8+PC9nPjwvc3ZnPg=="); | ||||||
|  |   background-size: 8px; | ||||||
|  |   width: 8px; | ||||||
|  |   line-height: 1; | ||||||
|  |   opacity: 0.75; | ||||||
|  |   border-radius: 0; | ||||||
|  | } | ||||||
|  | .choices[data-type*=select-multiple] .choices__button:hover, .choices[data-type*=select-multiple] .choices__button:focus, | ||||||
|  | .choices[data-type*=text] .choices__button:hover, | ||||||
|  | .choices[data-type*=text] .choices__button:focus { | ||||||
|  |   opacity: 1; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .choices__inner { | ||||||
|  |   display: inline-block; | ||||||
|  |   vertical-align: top; | ||||||
|  |   width: 100%; | ||||||
|  |   background-color: #f9f9f9; | ||||||
|  |   padding: 7.5px 7.5px 3.75px; | ||||||
|  |   border: 1px solid #ddd; | ||||||
|  |   border-radius: 2.5px; | ||||||
|  |   font-size: 14px; | ||||||
|  |   min-height: 44px; | ||||||
|  |   overflow: hidden; | ||||||
|  | } | ||||||
|  | .is-focused .choices__inner, .is-open .choices__inner { | ||||||
|  |   border-color: #b7b7b7; | ||||||
|  | } | ||||||
|  | .is-open .choices__inner { | ||||||
|  |   border-radius: 2.5px 2.5px 0 0; | ||||||
|  | } | ||||||
|  | .is-flipped.is-open .choices__inner { | ||||||
|  |   border-radius: 0 0 2.5px 2.5px; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .choices__list { | ||||||
|  |   margin: 0; | ||||||
|  |   padding-left: 0; | ||||||
|  |   list-style: none; | ||||||
|  | } | ||||||
|  | .choices__list--single { | ||||||
|  |   display: inline-block; | ||||||
|  |   padding: 4px 16px 4px 4px; | ||||||
|  |   width: 100%; | ||||||
|  | } | ||||||
|  | [dir=rtl] .choices__list--single { | ||||||
|  |   padding-right: 4px; | ||||||
|  |   padding-left: 16px; | ||||||
|  | } | ||||||
|  | .choices__list--single .choices__item { | ||||||
|  |   width: 100%; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .choices__list--multiple { | ||||||
|  |   display: inline; | ||||||
|  | } | ||||||
|  | .choices__list--multiple .choices__item { | ||||||
|  |   display: inline-block; | ||||||
|  |   vertical-align: middle; | ||||||
|  |   border-radius: 20px; | ||||||
|  |   padding: 4px 10px; | ||||||
|  |   font-size: 12px; | ||||||
|  |   font-weight: 500; | ||||||
|  |   margin-right: 3.75px; | ||||||
|  |   margin-bottom: 3.75px; | ||||||
|  |   background-color: #00bcd4; | ||||||
|  |   border: 1px solid #00a5bb; | ||||||
|  |   color: #fff; | ||||||
|  |   word-break: break-all; | ||||||
|  |   box-sizing: border-box; | ||||||
|  | } | ||||||
|  | .choices__list--multiple .choices__item[data-deletable] { | ||||||
|  |   padding-right: 5px; | ||||||
|  | } | ||||||
|  | [dir=rtl] .choices__list--multiple .choices__item { | ||||||
|  |   margin-right: 0; | ||||||
|  |   margin-left: 3.75px; | ||||||
|  | } | ||||||
|  | .choices__list--multiple .choices__item.is-highlighted { | ||||||
|  |   background-color: #00a5bb; | ||||||
|  |   border: 1px solid #008fa1; | ||||||
|  | } | ||||||
|  | .is-disabled .choices__list--multiple .choices__item { | ||||||
|  |   background-color: #aaaaaa; | ||||||
|  |   border: 1px solid #919191; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .choices__list--dropdown, .choices__list[aria-expanded] { | ||||||
|  |   visibility: hidden; | ||||||
|  |   z-index: 1; | ||||||
|  |   position: absolute; | ||||||
|  |   width: 100%; | ||||||
|  |   background-color: #fff; | ||||||
|  |   border: 1px solid #ddd; | ||||||
|  |   top: 100%; | ||||||
|  |   margin-top: -1px; | ||||||
|  |   border-bottom-left-radius: 2.5px; | ||||||
|  |   border-bottom-right-radius: 2.5px; | ||||||
|  |   overflow: hidden; | ||||||
|  |   word-break: break-all; | ||||||
|  |   will-change: visibility; | ||||||
|  | } | ||||||
|  | .is-active.choices__list--dropdown, .is-active.choices__list[aria-expanded] { | ||||||
|  |   visibility: visible; | ||||||
|  | } | ||||||
|  | .is-open .choices__list--dropdown, .is-open .choices__list[aria-expanded] { | ||||||
|  |   border-color: #b7b7b7; | ||||||
|  | } | ||||||
|  | .is-flipped .choices__list--dropdown, .is-flipped .choices__list[aria-expanded] { | ||||||
|  |   top: auto; | ||||||
|  |   bottom: 100%; | ||||||
|  |   margin-top: 0; | ||||||
|  |   margin-bottom: -1px; | ||||||
|  |   border-radius: 0.25rem 0.25rem 0 0; | ||||||
|  | } | ||||||
|  | .choices__list--dropdown .choices__list, .choices__list[aria-expanded] .choices__list { | ||||||
|  |   position: relative; | ||||||
|  |   max-height: 300px; | ||||||
|  |   overflow: auto; | ||||||
|  |   -webkit-overflow-scrolling: touch; | ||||||
|  |   will-change: scroll-position; | ||||||
|  | } | ||||||
|  | .choices__list--dropdown .choices__item, .choices__list[aria-expanded] .choices__item { | ||||||
|  |   position: relative; | ||||||
|  |   padding: 10px; | ||||||
|  |   font-size: 14px; | ||||||
|  | } | ||||||
|  | [dir=rtl] .choices__list--dropdown .choices__item, [dir=rtl] .choices__list[aria-expanded] .choices__item { | ||||||
|  |   text-align: right; | ||||||
|  | } | ||||||
|  | @media (min-width: 640px) { | ||||||
|  |   .choices__list--dropdown .choices__item--selectable, .choices__list[aria-expanded] .choices__item--selectable { | ||||||
|  |     padding-right: 100px; | ||||||
|  |   } | ||||||
|  |   .choices__list--dropdown .choices__item--selectable::after, .choices__list[aria-expanded] .choices__item--selectable::after { | ||||||
|  |     content: attr(data-select-text); | ||||||
|  |     font-size: 12px; | ||||||
|  |     opacity: 0; | ||||||
|  |     position: absolute; | ||||||
|  |     right: 10px; | ||||||
|  |     top: 50%; | ||||||
|  |     transform: translateY(-50%); | ||||||
|  |   } | ||||||
|  |   [dir=rtl] .choices__list--dropdown .choices__item--selectable, [dir=rtl] .choices__list[aria-expanded] .choices__item--selectable { | ||||||
|  |     text-align: right; | ||||||
|  |     padding-left: 100px; | ||||||
|  |     padding-right: 10px; | ||||||
|  |   } | ||||||
|  |   [dir=rtl] .choices__list--dropdown .choices__item--selectable::after, [dir=rtl] .choices__list[aria-expanded] .choices__item--selectable::after { | ||||||
|  |     right: auto; | ||||||
|  |     left: 10px; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | .choices__list--dropdown .choices__item--selectable.is-highlighted, .choices__list[aria-expanded] .choices__item--selectable.is-highlighted { | ||||||
|  |   background-color: #f2f2f2; | ||||||
|  | } | ||||||
|  | .choices__list--dropdown .choices__item--selectable.is-highlighted::after, .choices__list[aria-expanded] .choices__item--selectable.is-highlighted::after { | ||||||
|  |   opacity: 0.5; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .choices__item { | ||||||
|  |   cursor: default; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .choices__item--selectable { | ||||||
|  |   cursor: pointer; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .choices__item--disabled { | ||||||
|  |   cursor: not-allowed; | ||||||
|  |   -webkit-user-select: none; | ||||||
|  |           user-select: none; | ||||||
|  |   opacity: 0.5; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .choices__heading { | ||||||
|  |   font-weight: 600; | ||||||
|  |   font-size: 12px; | ||||||
|  |   padding: 10px; | ||||||
|  |   border-bottom: 1px solid #f7f7f7; | ||||||
|  |   color: gray; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .choices__button { | ||||||
|  |   text-indent: -9999px; | ||||||
|  |   -webkit-appearance: none; | ||||||
|  |           appearance: none; | ||||||
|  |   border: 0; | ||||||
|  |   background-color: transparent; | ||||||
|  |   background-repeat: no-repeat; | ||||||
|  |   background-position: center; | ||||||
|  |   cursor: pointer; | ||||||
|  | } | ||||||
|  | .choices__button:focus { | ||||||
|  |   outline: none; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .choices__input { | ||||||
|  |   display: inline-block; | ||||||
|  |   vertical-align: baseline; | ||||||
|  |   background-color: #f9f9f9; | ||||||
|  |   font-size: 14px; | ||||||
|  |   margin-bottom: 5px; | ||||||
|  |   border: 0; | ||||||
|  |   border-radius: 0; | ||||||
|  |   max-width: 100%; | ||||||
|  |   padding: 4px 0 4px 2px; | ||||||
|  | } | ||||||
|  | .choices__input:focus { | ||||||
|  |   outline: 0; | ||||||
|  | } | ||||||
|  | .choices__input::-webkit-search-decoration, .choices__input::-webkit-search-cancel-button, .choices__input::-webkit-search-results-button, .choices__input::-webkit-search-results-decoration { | ||||||
|  |   display: none; | ||||||
|  | } | ||||||
|  | .choices__input::-ms-clear, .choices__input::-ms-reveal { | ||||||
|  |   display: none; | ||||||
|  |   width: 0; | ||||||
|  |   height: 0; | ||||||
|  | } | ||||||
|  | [dir=rtl] .choices__input { | ||||||
|  |   padding-right: 2px; | ||||||
|  |   padding-left: 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .choices__placeholder { | ||||||
|  |   opacity: 0.5; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* =====  End of Choices  ====== */ | ||||||
|   | |||||||
| @@ -1,225 +0,0 @@ | |||||||
| var style = document.createElement('style'); |  | ||||||
| style.setAttribute("id","multiselect_dropdown_styles"); |  | ||||||
| style.innerHTML = ` |  | ||||||
| .multiselect-dropdown{ |  | ||||||
|   display: inline-block; |  | ||||||
|   border-radius: 4px; |  | ||||||
|   border: solid 1px #ced4da; |  | ||||||
|   background-color: white; |  | ||||||
|   position: relative; |  | ||||||
|   background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"); |  | ||||||
|   background-repeat: no-repeat; |  | ||||||
|   background-position: right .75rem center; |  | ||||||
|   background-size: 16px 12px; |  | ||||||
|   padding: 0.375rem 0.5rem; |  | ||||||
|   line-height: 1.5rem; |  | ||||||
| } |  | ||||||
| .multiselect-dropdown span.optext, .multiselect-dropdown span.placeholder{ |  | ||||||
|   margin-right:0.5em;  |  | ||||||
|   margin-bottom:2px; |  | ||||||
|   padding:1px 0;  |  | ||||||
|   border-radius: 4px;  |  | ||||||
|   display:inline-block; |  | ||||||
| } |  | ||||||
| .multiselect-dropdown span.optext{ |  | ||||||
|   background-color: rgba(226, 232, 240, 0.8); |  | ||||||
|   padding:1px 0.75em;  |  | ||||||
| } |  | ||||||
| .multiselect-dropdown span.optext .optdel { |  | ||||||
|   float: right; |  | ||||||
|   margin: 0 -6px 1px 5px; |  | ||||||
|   font-size: 1em; |  | ||||||
|   cursor: pointer; |  | ||||||
| } |  | ||||||
| .multiselect-dropdown span.optext .optdel:hover { color:#f43f5e;} |  | ||||||
| .multiselect-dropdown span.placeholder{ |  | ||||||
|   color:#ced4da; |  | ||||||
| } |  | ||||||
| .multiselect-dropdown-list-wrapper{ |  | ||||||
|   box-shadow: rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.1) 0px 1px 2px -1px; |  | ||||||
|   z-index: 100; |  | ||||||
|   padding:2px; |  | ||||||
|   border-radius: .375rem; |  | ||||||
|   border: solid 1px #ced4da; |  | ||||||
|   display: none; |  | ||||||
|   margin: -1px; |  | ||||||
|   position: absolute; |  | ||||||
|   top:0; |  | ||||||
|   left: 0; |  | ||||||
|   right: 0; |  | ||||||
|   background: white; |  | ||||||
| } |  | ||||||
| .multiselect-dropdown-list-wrapper .multiselect-dropdown-search{ |  | ||||||
|   margin-bottom:5px; |  | ||||||
|   padding: 0.375rem 0.5rem; |  | ||||||
|   line-height: 1.5rem; |  | ||||||
| } |  | ||||||
| .multiselect-dropdown-list{ |  | ||||||
|   padding:2px; |  | ||||||
|   height: 15rem; |  | ||||||
|   overflow-y:auto; |  | ||||||
|   overflow-x: hidden; |  | ||||||
| } |  | ||||||
| .multiselect-dropdown-list::-webkit-scrollbar { |  | ||||||
|   width: 6px; |  | ||||||
| } |  | ||||||
| .multiselect-dropdown-list::-webkit-scrollbar-thumb { |  | ||||||
|   background-color: rgba(226, 232, 240, 0.8); |  | ||||||
|   border-radius: .375rem; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .multiselect-dropdown-list div{ |  | ||||||
|   padding: 5px; |  | ||||||
| } |  | ||||||
| .multiselect-dropdown-list input{ |  | ||||||
|   height: 1.15em; |  | ||||||
|   width: 1.15em; |  | ||||||
|   margin-right: 0.35em;   |  | ||||||
| } |  | ||||||
| .multiselect-dropdown-list div.checked{ |  | ||||||
| } |  | ||||||
| .multiselect-dropdown-list div:hover{ |  | ||||||
|   background-color: rgba(226, 232, 240, 0.8); |  | ||||||
| } |  | ||||||
| .multiselect-dropdown span.maxselected {width:100%;} |  | ||||||
| .multiselect-dropdown-all-selector {border-bottom:solid 1px #999;} |  | ||||||
| `; |  | ||||||
| document.head.appendChild(style); |  | ||||||
|  |  | ||||||
| function MultiselectDropdown(options){ |  | ||||||
|   var config={ |  | ||||||
|     search:true, |  | ||||||
|     height:'15rem', |  | ||||||
|     placeholder:'Auswählen', |  | ||||||
|     txtSelected:'ausgewählt', |  | ||||||
|     txtAll:'Alle', |  | ||||||
|     txtRemove: 'Entfernen', |  | ||||||
|     txtSearch:'Suchen', |  | ||||||
|     ...options |  | ||||||
|   }; |  | ||||||
|   function newEl(tag,attrs){ |  | ||||||
|     var e=document.createElement(tag); |  | ||||||
|     if(attrs!==undefined) Object.keys(attrs).forEach(k=>{ |  | ||||||
|       if(k==='class') { Array.isArray(attrs[k]) ? attrs[k].forEach(o=>o!==''?e.classList.add(o):0) : (attrs[k]!==''?e.classList.add(attrs[k]):0)} |  | ||||||
|       else if(k==='style'){   |  | ||||||
|         Object.keys(attrs[k]).forEach(ks=>{ |  | ||||||
|           e.style[ks]=attrs[k][ks]; |  | ||||||
|         }); |  | ||||||
|        } |  | ||||||
|       else if(k==='text'){attrs[k]===''?e.innerHTML=' ':e.innerText=attrs[k]} |  | ||||||
|       else e[k]=attrs[k]; |  | ||||||
|     }); |  | ||||||
|     return e; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|    |  | ||||||
|   document.querySelectorAll("select[multiple]").forEach((el,k)=>{ |  | ||||||
|      |  | ||||||
|     var div=newEl('div',{class:'multiselect-dropdown',style:{width:config.style?.width??el.clientWidth+'px',padding:config.style?.padding??''}}); |  | ||||||
|     el.style.display='none'; |  | ||||||
|     el.parentNode.insertBefore(div,el.nextSibling); |  | ||||||
|     var listWrap=newEl('div',{class:'multiselect-dropdown-list-wrapper'}); |  | ||||||
|     var list=newEl('div',{class:'multiselect-dropdown-list',style:{height:config.height}}); |  | ||||||
|     var search=newEl('input',{class:['multiselect-dropdown-search'].concat([config.searchInput?.class??'form-control']),style:{width:'100%',display:el.attributes['multiselect-search']?.value==='true'?'block':'none'},placeholder:config.txtSearch}); |  | ||||||
|     listWrap.appendChild(search); |  | ||||||
|     div.appendChild(listWrap); |  | ||||||
|     listWrap.appendChild(list); |  | ||||||
|  |  | ||||||
|     el.loadOptions=()=>{ |  | ||||||
|       list.innerHTML=''; |  | ||||||
|        |  | ||||||
|       if(el.attributes['multiselect-select-all']?.value=='true'){ |  | ||||||
|         var op=newEl('div',{class:'multiselect-dropdown-all-selector'}) |  | ||||||
|         var ic=newEl('input',{type:'checkbox'}); |  | ||||||
|         op.appendChild(ic); |  | ||||||
|         op.appendChild(newEl('label',{text:config.txtAll})); |  | ||||||
|    |  | ||||||
|         op.addEventListener('click',()=>{ |  | ||||||
|           op.classList.toggle('checked'); |  | ||||||
|           op.querySelector("input").checked=!op.querySelector("input").checked; |  | ||||||
|            |  | ||||||
|           var ch=op.querySelector("input").checked; |  | ||||||
|           list.querySelectorAll(":scope > div:not(.multiselect-dropdown-all-selector)") |  | ||||||
|             .forEach(i=>{if(i.style.display!=='none'){i.querySelector("input").checked=ch; i.optEl.selected=ch}}); |  | ||||||
|    |  | ||||||
|           el.dispatchEvent(new Event('change')); |  | ||||||
|         }); |  | ||||||
|         ic.addEventListener('click',(ev)=>{ |  | ||||||
|           ic.checked=!ic.checked; |  | ||||||
|         }); |  | ||||||
|         el.addEventListener('change', (ev)=>{ |  | ||||||
|           let itms=Array.from(list.querySelectorAll(":scope > div:not(.multiselect-dropdown-all-selector)")).filter(e=>e.style.display!=='none') |  | ||||||
|           let existsNotSelected=itms.find(i=>!i.querySelector("input").checked); |  | ||||||
|           if(ic.checked && existsNotSelected) ic.checked=false; |  | ||||||
|           else if(ic.checked==false && existsNotSelected===undefined) ic.checked=true; |  | ||||||
|         }); |  | ||||||
|    |  | ||||||
|         list.appendChild(op); |  | ||||||
|       } |  | ||||||
|  |  | ||||||
|       Array.from(el.options).map(o=>{ |  | ||||||
|         var op=newEl('div',{class:o.selected?'checked':'',optEl:o}) |  | ||||||
|         var ic=newEl('input',{type:'checkbox',checked:o.selected}); |  | ||||||
|         op.appendChild(ic); |  | ||||||
|         op.appendChild(newEl('label',{text:o.text})); |  | ||||||
|  |  | ||||||
|         op.addEventListener('click',()=>{ |  | ||||||
|           op.classList.toggle('checked'); |  | ||||||
|           op.querySelector("input").checked=!op.querySelector("input").checked; |  | ||||||
|           op.optEl.selected=!!!op.optEl.selected; |  | ||||||
|           el.dispatchEvent(new Event('change')); |  | ||||||
|         }); |  | ||||||
|         ic.addEventListener('click',(ev)=>{ |  | ||||||
|           ic.checked=!ic.checked; |  | ||||||
|         }); |  | ||||||
|         o.listitemEl=op; |  | ||||||
|         list.appendChild(op); |  | ||||||
|       }); |  | ||||||
|       div.listEl=listWrap; |  | ||||||
|  |  | ||||||
|       div.refresh=()=>{ |  | ||||||
|         div.querySelectorAll('span.optext, span.placeholder').forEach(t=>div.removeChild(t)); |  | ||||||
|         var sels=Array.from(el.selectedOptions); |  | ||||||
|         if(sels.length>(el.attributes['multiselect-max-items']?.value??5)){ |  | ||||||
|           div.appendChild(newEl('span',{class:['optext','maxselected'],text:sels.length+' '+config.txtSelected}));           |  | ||||||
|         } |  | ||||||
|         else{ |  | ||||||
|           sels.map(x=>{ |  | ||||||
|             var c=newEl('span',{class:'optext',text:x.text, srcOption: x}); |  | ||||||
|             if((el.attributes['multiselect-hide-x']?.value !== 'true')) |  | ||||||
|               c.appendChild(newEl('span',{class:'optdel',text:'x',title:config.txtRemove, onclick:(ev)=>{c.srcOption.listitemEl.dispatchEvent(new Event('click'));div.refresh();ev.stopPropagation();}})); |  | ||||||
|  |  | ||||||
|             div.appendChild(c); |  | ||||||
|           }); |  | ||||||
|         } |  | ||||||
|         if(0==el.selectedOptions.length) div.appendChild(newEl('span',{class:'placeholder',text:el.attributes['placeholder']?.value??config.placeholder})); |  | ||||||
|       }; |  | ||||||
|       div.refresh(); |  | ||||||
|     } |  | ||||||
|     el.loadOptions(); |  | ||||||
|      |  | ||||||
|     search.addEventListener('input',()=>{ |  | ||||||
|       list.querySelectorAll(":scope div:not(.multiselect-dropdown-all-selector)").forEach(d=>{ |  | ||||||
|         var txt=d.querySelector("label").innerText.toUpperCase(); |  | ||||||
|         d.style.display=txt.includes(search.value.toUpperCase())?'block':'none'; |  | ||||||
|       }); |  | ||||||
|     }); |  | ||||||
|  |  | ||||||
|     div.addEventListener('click',()=>{ |  | ||||||
|       div.listEl.style.display='block'; |  | ||||||
|       search.focus(); |  | ||||||
|       search.select(); |  | ||||||
|     }); |  | ||||||
|      |  | ||||||
|     document.addEventListener('click', function(event) { |  | ||||||
|       if (!div.contains(event.target)) { |  | ||||||
|         listWrap.style.display='none'; |  | ||||||
|         div.refresh(); |  | ||||||
|       } |  | ||||||
|     });     |  | ||||||
|   }); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| window.addEventListener('load',()=>{ |  | ||||||
|   MultiselectDropdown(window.MultiselectDropdownOptions); |  | ||||||
| }); |  | ||||||
| @@ -105,7 +105,7 @@ | |||||||
|  |  | ||||||
| {% macro rower_select(id, selected, amount_seats='', class='') %} | {% macro rower_select(id, selected, amount_seats='', class='') %} | ||||||
| 	<div class="{{ class }}"> | 	<div class="{{ class }}"> | ||||||
| 		<select style="width: 100px;" multiple="multiple" name="rowers[]" multiselect-search="true" id="{{id}}" class="w-full"> | 		<select style="width: 100%;" multiple data-multi-select-plugin name="rowers[]" id="{{id}}" class="w-full"> | ||||||
| 			{% for user in users %} | 			{% for user in users %} | ||||||
| 				{% set_global sel = false %} | 				{% set_global sel = false %} | ||||||
| 				{% for rower in selected %} | 				{% for rower in selected %} | ||||||
|   | |||||||
| @@ -5,7 +5,9 @@ | |||||||
|  |  | ||||||
| {% block content %} | {% block content %} | ||||||
| 	{% if flash %} | 	{% if flash %} | ||||||
| 		{{ macros::alert(message=flash.1, type=flash.0, class="sm:col-span-2 lg:col-span-3") }} |     <div class="w-full"> | ||||||
|  | 		  {{ macros::alert(message=flash.1, type=flash.0, class="sm:col-span-2 lg:col-span-3") }} | ||||||
|  |     </div> | ||||||
| 	{% endif %} | 	{% endif %} | ||||||
|  |  | ||||||
| 	<div class="w-full"> | 	<div class="w-full"> | ||||||
| @@ -42,5 +44,4 @@ | |||||||
| 	{% include "dynamics/sidebar" %} | 	{% include "dynamics/sidebar" %} | ||||||
|  |  | ||||||
| 	<script src="/public/logbook.js"></script> | 	<script src="/public/logbook.js"></script> | ||||||
| 	<script src="/public/js/multiselect-dropdown.js"></script> |  | ||||||
| {% endblock content%} | {% endblock content%} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Marie Birner
					Marie Birner