[TASK] [NPM] install choices.js (styling copy & paste)
This commit is contained in:
parent
5730d27149
commit
2abd483a3f
@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,4 +10,345 @@ select {
|
|||||||
background-color: white;
|
background-color: white;
|
||||||
-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%}
|
||||||
|
Loading…
Reference in New Issue
Block a user