{"version":3,"sources":["../../src/ToolsJs.js","../../src/ToolsDom.js","../../src/ToolsStyling.js","../../src/FilterManagerAspect.js","../../src/Wraps.js","../../src/MultiSelectInlineLayoutAspect.js","../../src/BsMultiSelect.js","../../src/CreateElementAspect.js","../../src/NavigateAspect.js","../../src/PickButtonAspect.js","../../src/ComponentPropertiesAspect.js","../../src/OptionsAspect.js","../../src/CreateWrapAspect.js","../../src/CountableChoicesListInsertAspect.js","../../src/ChoicesEnumerableAspect.js","../../src/PicksDomFactory.js","../../src/FilterDomFactory.js","../../src/ChoicesDomFactory.js","../../src/PickDomFactory.js","../../src/ChoiceDomFactory.js","../../src/StaticDomFactory.js","../../src/ChoicesVisibilityAspect.js","../../src/PicksElementAspect.js","../../src/SpecialPicksEventsAspect.js","../../src/ResetFilterListAspect.js","../../src/BuildPickAspect.js","../../src/InputAspect.js","../../src/BuildChoiceAspect.js","../../src/ResetLayoutAspect.js","../../src/OptionsLoopAspect.js","../../src/UpdateDataAspect.js","../../src/LoadAspect.js","../../src/AfterInputAspect.js","../../src/PluginManager.js","../../src/BsMultiSelectDepricatedParameters.js","../../src/MultiSelectBuilder.js","../../src/CreateForJQuery.js","../../src/AddToJQueryPrototype.js","../../src/plugins/BsAppearancePlugin.js","../../src/plugins/BsAppearanceBs5Plugin.js","../../src/plugins/BsAppearanceBs5CssPatchPlugin.js","../../src/plugins/LabelForAttributePlugin.js","../../src/plugins/RtlPlugin.js","../../src/plugins/FormResetPlugin.js","../../src/plugins/ValidationApiPlugin.js","../../src/plugins/HiddenOptionPlugin.js","../../src/plugins/CssPatchPlugin.js","../../src/plugins/CssPatchBs5Plugin.js","../../src/plugins/JQueryMethodsPlugin.js","../../src/plugins/OptionsApiPlugin.js","../../src/plugins/FormRestoreOnBackwardPlugin.js","../../src/plugins/SelectElementPlugin.js","../../src/plugins/SelectedOptionPlugin.js","../../src/plugins/DisabledOptionPlugin.js","../../src/plugins/PicksApiPlugin.js","../../src/plugins/PicksPlugin.js","../../src/plugins/CreatePopperPlugin.js","../../src/plugins/ChoicesDynamicStylingPlugin.js","../../src/plugins/HighlightPlugin.js","../../src/plugins/CustomChoiceStylingsPlugin.js","../../src/plugins/CustomPickStylingsPlugin.js","../../src/plugins/UpdateAppearancePlugin.js","../../src/plugins/DisableComponentPlugin.js","../../src/plugins/PlaceholderPlugin.js","../../src/plugins/PlaceholderCssPatchPlugin.js","../../src/plugins/FloatingLabelPlugin.js","../../src/plugins/FloatingLabelCssPatchBs5Plugin.js","../../src/plugins/WarningCssPatchPlugin.js","../../src/plugins/WarningPlugin.js","../../src/plugins/WarningBs5Plugin.js","../../src/PluginSet.js","../../src/DomFactories.js","../../src/ToolSet.js"],"names":["value","String","extendIfUndefined","source","destination","property","undefined","shallowClearClone","v","sources","_len","arguments","length","Array","_key","forEach","s","_property","_v","hasOwnProperty","forEachRecursion","f","e","goOn","prev","index","indexRecursion","tail","count","add","next","remove","node","getTail","getCount","isEmpty","head","getPrev","setPrev","getNext","setNext","getHead","composeSync","functions","_len2","_key2","defCall","_len3","_key3","_i","_functions","Function","tmp","list","func","List","getValue","attach","reset","element","tagName","i","children","closest","className","classList","contains","otherNode","tmp1","prefix","name","tmp2","predicate","parentNode","isRtl","closestByAttribute","attributeName","attribute","getAttribute","bind","addEventListener","eventName","handler","push","removeEventListener","EventTumbler","on","backupStyling","styling","classes","styles","style","isF","force","isOn","addStyling","removeStyling","isString","out","param","actionStr","actionArr","isRemoveEmptyClasses","c","success","extendClasses","Object","actionObj","extend","a","slice","o","freeze","isReplace","params","extendInt","p","concat","Styling","stylings1","stylings2","param1","param2","createStyling","navigate","wrap","down","Wraps","wrapsCollection","listFacade_reset","listFacade_remove","listFacade_add","insert","_push","key","_insert","clear","dispose","forLoop","window","environment","filterDom","choicesDom","choicesVisibilityAspect","hoveredChoiceAspect","navigateAspect","filterManagerAspect","focusInAspect","optionToggleAspect","createPickHandlersAspect","picksList","inputAspect","specialPicksEventsAspect","buildChoiceAspect","resetLayoutAspect","picksElementAspect","afterInputAspect","disposeAspect","document","choicesElement","eventLoopFlag","EventLoopProlongableFlag","skipFocusout","pr","get","flag","set","timeout","clearTimeout","setTimeout","getSkipFocusout","resetSkipFocusout","skipoutMousedown","documentMouseup","event","resetLayout","setFocus","target","containsAndSelf","setFocusIn","isChoicesVisible","setChoicesVisible","documentMouseupEventTumbler","choicesElementMousedownEventTumbler","off","preventDefaultClickEvent","skipoutAndResetMousedown","processUncheck","setSelectedFalse","uncheckOption","resetMouseCandidateChoice","EventBinder","choice","isHoverIn","hoverIn","showChoices","onKeyDown","empty","preventDefault","keyCode","indexOf","pick","backSpace","hideChoices","keyDownArrow","stopPropagation","onKeyUp","hoveredWrap","getNavigateManager","hoveredToSelected","getHoveredChoice","toggle","init","onFocusIn","onFocusOut","filterInputValue","visibleCount","processEmptyInput","afterInput","notVisible","onClick","onMousedown","origCreatePickHandlers","createPickHandlers","pickHandlers","removeOnButton","handleOnRemoveButton","buildChoice","removeAndDispose","unbindChoiceElement","choiceElement","overAndLeaveEventBinder","mouseCandidateEventBinder","mouseOverToHoveredAndReset","resetHoveredChoice","unbind","adoptChoiceElement","containerClass","configuration","MSInputMethodContext","documentMode","createElementFromHtml","buttonHTML","getDisabled","options","getText","triggerAspect","componentPropertiesAspect","trigger","_trigger","ComponentPropertiesAspect","onChangeAspect","onChange","OnChangeAspect","optionsAspect","isChoiceSelectableAspect","getOptions","IsChoiceSelectableAspect","createWrapAspect","option","text","CreateWrapAspect","createChoiceBaseAspect","isSelectable","addPickAspect","removePickAspect","createChoiceBase","optionPropertiesAspect","searchText","filteredNext","toLowerCase","trim","setVisible","setHoverIn","isChoiceElementAttached","choiceDom","choiceElementAttach","itemPrev","itemNext","RemovePickAspect","createElementAspect","addPick","producePick","removePick","html","ArrayFacade","createElement","innerHTML","splice","start","countableChoicesList","DoublyLinkedList","warp","countableChoicesListInsertAspect","countableChoicesListInsert","choiceNext","CountableChoicesListInsertAspect","choicesEnumerableAspect","ChoicesEnumerableAspect","filteredChoicesList","filteredPrev","emptyNavigateManager","NavigateManager","filterPredicate","filteredNavigateManager","filterPredicateAspect","showEmptyFilter","getFilter","setFilter","filterText","NavigateAspect","setHoveredChoice","hoveredChoice","_navigate","wraps","w","picksDomFactory","choicesDomFactory","css","create","pickFilterElement","picksElement","picks","disableToggleStyling","toggleStyling","focusToggleStyling","picks_focus","isFocusIn","createPickElement","pickElement","insertBefore","beforeElement","detach","removeChild","isComponentDisabled","getIsFocusIn","newIsFocusIn","isDisposablePicksElementFlag","PicksDomFactory","ChoicesDomFactory","pickButtonAspect","filterInputElement","setAttribute","filterInput","setEmpty","setWidth","focus","width","setFocusIfNotTarget","onInput","onFilterInputInput","_onFocusIn","_onFocusOut","onfilterInputKeyDown","onFilterInputKeyUp","eventBinder","PickButtonAspect","pickDomFactory","choicesListElement","appendChild","display","choices","choicesList","createChoiceElement","isVisible","PickDomFactory","eventHandlers","getButtonHTML","pickContentElement","querySelector","pickButtonElement","pickContent","disableToggle","updateData","pickButton","pickDom","pickDomManagerHandlers","updateDisabled","isOptionDisabled","pluginManager","createHandlers","choiceCheckBoxElement","choiceContentElement","choiceLabelElement","choiceContent","choiceCheckBox","choiceSelectedToggle","isOptionSelected","choice_selected","choiceCursorDisabledToggle","choice_disabled","choiceCheckBox_disabled","choiceLabel_disabled","cursor","updateHoverIn","choice_disabled_hover","choice_hover","choiceDomManagerHandlers","choiceLabelDisabledToggle","choiceCheckBoxDisabledToggle","disabled","isCheckBoxDisabled","updateSelected","choiceHoverToggle","_choiceContentElement","updateDataInternal","plugStaticDomFactories","filterDomFactory","choiceDomFactory","staticDomFactory","createStaticDom","showError","backgroundColor","color","Error","message","removableContainerClass","containerElement","picksDom","staticDom","initialElement","appendToContainer","plugStaticDom","skipoutAndResetMousedownEventBinder","componentDisabledEventBinder","_createStaticDom","staticManager","resetFilterListAspect","resetFilterAspect","visible","updatePopupLocation","forceResetFilter","FocusInAspect","buildPickAspect","resetFilter","BuildPickAspect","producePickAspect","setIsFocusIn","toggleFocusStyling","ProducePickAspect","buildPick","_picksDom$createPickE","updateComponentDisabled","pickElementAttach","CreatePickHandlersAspect","fixSelectedFalse","removeFromPicksList","OptionToggleAspect","fullMatchAspect","FullMatchAspect","InputAspect","choiceClickAspect","fullMatch","ChoiceClickAspect","processInput","fullMatchWrap","BuildChoiceAspect","buildAndAttachChoiceAspect","choiceClick","BuildAndAttachChoiceAspect","_choicesDom$createCho","_choiceDomFactory$cre","isFilteredIn","ResetLayoutAspect","buildAndAttachChoice","getNextElement","optionAttachAspect","OptionAttachAspect","updateDataAspect","createWrap","UpdateDataAspect","optionsLoopAspect","updateAspect","loop","UpdateAspect","loadAspect","LoadAspect","update","PicksElementAspect","load","AfterInputAspect","multiSelectInlineLayoutAspect","MultiSelectInlineLayoutAspect","onClickUnbind","panelIsVisble","_eventHandlers$layout","component","api","mergeList","plugins","defaults","pluged","plug","merge","buildAspectsList","settings","buildAspects","plugedList","j","newAspects","aspects","eh","buildApi","_instances$i","_instances$i$buildApi","instances","call","disposes","_instances$_i2$dispos","_instances$_i","_eventHandlers$i$valu","_eventHandlers$i$valu2","_eventHandlers$i$valu3","_eventHandlers$i$valu4","preLayoutBus","some","preLayout","after","instance","_eventHandlers$_i3$va2","_eventHandlers$_i3$va","_i3","layout","_eventHandlers$i$valu5","_eventHandlers$i$valu6","PluginManager","opt","old","transformClasses","defaultCss","pluginManagerFactory","defaultSettings","console","log","buildConfiguration","cssPatch","selectedPanelFocusBorderColor","boxShadow","borderColor","selectedPanelFocusBoxShadow","pick_disabled","getIsValid","getIsInValid","createCss","_settings","BsMultiSelect$1","onInit","isJQyery","hasAttribute","$","body","Event","dispatchEvent","initCustomEvent","MultiSelectBuilder","globalPopper","object","arr","ObjectValuesEx","createForUmd","_MultiSelectBuilder","Default","multiSelect","prototypable","charAt","createPlugin","firstCharLower","firstChar","pluginName","noConflictPrototypable","prototypableName","noConflictPrototypableForInstance","dataKey","optionsRef","$e","removeData","data","output","this","each","isMethodName","createInstance","lMethodName","methodName","result","fn","noConflict","prototypableForInstance","addToJQueryPrototype","removeInstanceData","plug$o","getLabelAspect","selectElement","getDefaultLabel","origLabelAspectGetLabel","getLabel","updateSize","validationApiAspect","updateAppearanceAspect","floatingLabelAspect","getValidity","getSize","useCssPatch","composeGetSize","isFloatingLabel","composeGetValidity","picks_sm","picks_def","picks_lg","picks_floating_def","picksLgStyling","picksSmStyling","picksDefStyling","updateSizeJsPicks","size","updateSizeClasses","updateSizeJsForAdapter","updateSizeForAdapter","origToggleFocusStyling","validity","picks_focus_invalid","picks_focus_valid","wasUpdatedObservable","ObservableLambda","closestByClassName","getManualValidationObservable","validationApiObservable","validationObservable","invalidMessages","siblings","l","filter","validMessages","getMessagesElements","updateValidity","map","updateAppearance","updateWasValidated","detachAll","inputGroupElement","query","p1","parentElement","id","plug$n","createFilterInputElementIdAspect","filterInputElementId","createFilterInputElementId","labelElement","backupedForAttribute","inputId","RtlPlugin","plug$m","isBoolean","forceRtlOnContainer","getIsRtl","attributeBackup","currentAtribute","removeAttribute","popperRtlAspect","dirAttributeValue","plug$l","FormResetPlugin","closestByTagName","form","eventBuilder","getValueRequired","preset","plug$k","getValueRequiredAspect","valueMissingMessage","required","getIsValueMissing","optionsArray","isValueMissingObservable","newValue","ValidationApiAspect","visibleElement","customValidationMessage","validationMessage","willValidate","valueMissing","valid","ValidityApi","customError","setCustomValidity","onValid","setMessage","checkValidity","reportValidity","validationApi","plug$j","HiddenOptionPlugin","isOptionHidden","buildHiddenChoice","origBuildAndAttachChoice","origIsSelectable","getIsOptionHidden","origCreateWrap","updateOptionsHidden","updateChoiceHidden","getNextNonHidden","updateOptionHidden","newIsOptionHidden","nextChoice","plug$i","PickDomFactoryPlugCssPatchBs5","PicksDomFactoryPlugCssPatchBs5","FilterDomFactoryPlugCssPatch","CssPatchPlugin","JQueryMethodsPlugin","getContainer","getChoicesList","getFilterInput","getPicks","picksCount","plug$g","OptionsApiPlugin","updateOptionAdded","updateOptionRemoved","plug$f","FormRestoreOnBackwardPlugin","updateOptionsSelectedAspect","readyState","plug$e","SelectElementPlugin","optGroupAspect","origStaticDomFactoryCreate","findDirectChildByTagName","origCreateStaticDom","disposableContainerElement","backupDisplay","backupedRequired","fieldsetElement","optGroup","origCreateFilterInputElementId","nextSibling","origLoadAspectLoop","domContentLoadedHandler","plug$d","getIsOptionSelected","getSelected","setIsOptionSelected","setSelected","selected","getSelectedAspect","setSelectedAspect","updateOptionsSelected","updateChoiceSelected","UpdateOptionsSelectedAspect","composeUpdateSelected","booleanValue","trySetWrapSelected","origBuildChoice","origAddPick","selectAll","deselectAll","setOptionSelected","newIsSelected","DisabledOptionPlugin","getIsOptionDisabled","origToggle","origFilterPredicate","origBuildPick","choiceUpdateDisabledBackup","updateOptionDisabled","newIsDisabled","updateChoiceDisabled","PicksApiPlugin","forEachPeak","_picksList$getTail","countPeaks","getTailPeak","PicksPlugin","plug$a","origAdd","_origAdd","origReset","addOptionPicked","CreatePopperPlugin","plug$9","createPopperConstructor","Popper","createPopperVX","createPopper","popperConfiguration","createModifiersVX","CreateModifiersV1","CreateModifiersV2","anchorElement","createPopperConfigurationAspect","popper","preventOverflow","placement","modifiers","destroy","CreatePopperConfigurationAspect","createPopperAspect","createConfiguration","CreatePopperAspect","pop","CreatePopper_ConstrunctorAspect","origBackSpace","enabled","hide","flip","fallbackPlacements","ChoicesDynamicStylingPlugin","choicesDynamicStyling","plug$8","useChoicesDynamicStyling","minimalChoicesDynamicStylingMaxHeight","origSetChoicesVisible","g","clientHeight","getBoundingClientRect","top","max","Math","round","new_y","getElementsByTagName","msHeight","documentElement","origNavigateAspectNavigate","plug$7","origSetVisible","HighlightPlugin","highlightAspect","getHighlighter","highlighter","guarded","replace","regex","RegExp","HighlightAspect","origCreateChoiceDomFactory","updateHighlighted","textContent","origProcessEmptyInput","origSetFilter","CustomChoiceStylingsPlugin","customChoiceStylings","plug$6","customChoiceStylingsAspect","origChoiceDomFactoryCreate","customChoiceStylingsClosure","custom","CustomChoiceStylingsAspect","handlers","ExtendChoiceDomFactory","customize","customPickStylings","plug$5","CustomPickStylingsPlugin","customPickStylingsAspect","origPickDomFactoryCreate","customPickStylingsClosure","CustomPickStylingsAspect","ExtendPickDomFactory","UpdateAppearancePlugin","plug$4","DisableComponentPlugin","plug$3","origCreatePickDomFactory","disableComponent","newIsComponentDisabled","PlaceholderPlugin","plug$2","resetableFlag","isIE11","placeholder","ignoreNextInputResetableFlag","setPlaceholder","placeholderStopInputAspect","origOnInput","setPlaceholderOrig","emptyToggleStyling","filterInput_empty","setEmptyInputWidth","showPlacehodler","updateEmptyInputWidth","origDisable","disable","setDisabled","updatePlacehodlerVisibility","returnValue","PlaceholderCssPatchPlugin","FloatingLabelPlugin","picks_floating_lifted","plug$1","label_floating_lifted","liftedLabel","liftToggleStyling1","liftToggleStyling2","updateLiftedLabel","WarningCssPatchPlugin","warning","paddingLeft","zIndex","FloatingLabelAspect","fontSize","paddingTop","paddingBottom","paddingRight","noResultsWarning","isNoResultsWarningEnabled","pop2","warningElement","origAppendToContainer","origVisible","ExtendAfterInputAspect","warningAspect","origNotVisible","WarningAspect","show","defNoResultsWarningMessage","origWarningAspectShow","FloatingLabelCssPatchBs5Plugin","opacity","float","pickContent_disabled","verticalAlign","lineHeight","PickDomFactoryPlugCssPatchBs4","listStyleType","flexWrap","height","marginBottom","paddingInlineStart","paddingInlineEnd","justifyContent","choiceLabel","ChoiceDomFactoryPlugCssPatch","ChoicesDomFactoryPlugCssPatch","border","padding","margin","outline","backgroundImage","BsAppearanceBs4CssPatchPlugin","minHeight","LabelForAttributePlugin","ValidationApiPlugin","plug2","preset2","BsAppearanceBs5Plugin","WarningBs5Plugin","CssPatchBs5Plugin","BsAppearanceBs5CssPatchPlugin","SelectedOptionPlugin","PickDomFactoryPlugCss","pickFilter","picks_disabled","ChoiceDomFactoryPlugCssBs5","ChoiceDomFactoryPlugCss","createDefaultCssBs4","FilterDomFactoryPlugCss","jQuery","createForJQuery","Bs4PluginSet","multiSelectPlugins","$__default","Popper__default","BsPicks","createDefaultCssBs5","PickDomFactoryPlugCssBs5","picksPlugins","PicksDomFactoryPlugCss","MultiSelectTools","utilities","allPlugins"],"mappings":"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","sourcesContent":["export function isBoolean(value){\r\n return value === true || value === false;\r\n}\r\n\r\nexport function isString(value){\r\n return value instanceof String || typeof(value) === 'string';\r\n}\r\n\r\nexport function extendIfUndefined(destination, source) {\r\n for (let property in source)\r\n if (destination[property] === undefined)\r\n destination[property] = source[property];\r\n}\r\n\r\nexport function shallowClearClone(source, ...sources) { // override previous, no null and undefined\r\n var destination = {};\r\n for (let property in source){ // TODO: Object.assign (need polyfill for IE11)\r\n let v = source[property];\r\n if (!(v === null || v===undefined))\r\n destination[property] = v;\r\n }\r\n if(sources)\r\n sources.forEach(\r\n s=>{\r\n for(let property in s){\r\n let v = s[property];\r\n if (!(v === null || v===undefined))\r\n destination[property] = v;\r\n else\r\n if (destination.hasOwnProperty(property)){\r\n delete destination[property];\r\n }\r\n }\r\n }\r\n )\r\n return destination;\r\n}\r\n\r\nfunction forEachRecursion(f, e){\r\n if (!e)\r\n return;\r\n let goOn = f(e.value); \r\n if (!(goOn===false))\r\n forEachRecursion(f, e.prev);\r\n}\r\n\r\nfunction indexRecursion(index, e){\r\n if (!e.prev)\r\n return index;\r\n indexRecursion(++index, e.prev);\r\n}\r\n\r\nexport function List(){\r\n var tail = null;\r\n var count = 0;\r\n return {\r\n add(e){\r\n if (tail){\r\n tail.next = {value:e, prev:tail, next:null};\r\n tail = tail.next;\r\n } else \r\n tail = {value:e, prev:null, next:null}\r\n count++;\r\n let node = tail;\r\n function remove(){\r\n if (node.prev){\r\n (node.prev).next = node.next;\r\n }\r\n if (node.next){\r\n (node.next).prev = node.prev;\r\n }\r\n if (tail == node){\r\n tail = node.prev;\r\n }\r\n count--;\r\n }\r\n function index(){\r\n return indexRecursion(0, node);\r\n }\r\n return {remove, index};\r\n },\r\n forEach(f){\r\n forEachRecursion(f, tail);\r\n },\r\n getTail(){ return (tail)?tail.value:null },\r\n getCount(){ return count },\r\n isEmpty(){ return count==0 },\r\n reset(){ tail=null; count = 0 }\r\n }\r\n}\r\n\r\nexport function DoublyLinkedList(getPrev, setPrev, getNext, setNext){\r\n var head = null, tail = null;\r\n var count = 0;\r\n return {\r\n add(e, next){\r\n if (!tail){\r\n head = tail = e;\r\n setPrev(e, null);\r\n setNext(e, null);\r\n }\r\n else {\r\n if (!next){\r\n setPrev(e, tail);\r\n setNext(e, null);\r\n setNext(tail, e);\r\n tail = e;\r\n } \r\n else{\r\n if (next===head)\r\n head=e;\r\n let prev = getPrev(next);\r\n setNext(e, next);\r\n setPrev(next, e);\r\n if (prev){\r\n setPrev(e, prev);\r\n setNext(prev, e);\r\n } else {\r\n setPrev(e, null);\r\n }\r\n } \r\n }\r\n count++;\r\n },\r\n remove(e){\r\n let next = getNext(e);\r\n let prev = getPrev(e);\r\n if (prev) {\r\n setNext(prev, next)\r\n }\r\n if (next) {\r\n setPrev(next, prev)\r\n }\r\n if (tail == e) {\r\n tail = prev;\r\n }\r\n if (head == e) {\r\n head = next; \r\n }\r\n count--;\r\n }, \r\n getHead(){ return head },\r\n getTail(){ return tail },\r\n getCount(){ return count },\r\n isEmpty(){ return count==0 },\r\n reset(){ \r\n tail=head=null; \r\n count = 0; }\r\n }\r\n}\r\n\r\nexport function DoublyLinkedCollection(getPrev, setPrev, getNext, setNext){\r\n var list = [];\r\n var head = null, tail = null;\r\n return {\r\n push(e){\r\n list.push(e);\r\n if (!tail){\r\n head = tail = e;\r\n setPrev(e, null);\r\n setNext(e, null);\r\n }\r\n else {\r\n setPrev(e, tail);\r\n setNext(e, null);\r\n setNext(tail, e);\r\n tail = e;\r\n }\r\n },\r\n add(e, key){\r\n list.splice(key, 0, e);\r\n if (!tail){\r\n head = tail = e;\r\n setPrev(e, null);\r\n setNext(e, null);\r\n }\r\n else {\r\n let next = list[key];\r\n if (!next) {\r\n setPrev(e, tail);\r\n setNext(e, null);\r\n setNext(tail, e);\r\n tail = e;\r\n } \r\n else {\r\n if (next===head)\r\n head=e;\r\n let prev = getPrev(next);\r\n setNext(e, next);\r\n setPrev(next, e);\r\n if (prev){\r\n setPrev(e, prev);\r\n setNext(prev, e);\r\n } else {\r\n setPrev(e, null);\r\n }\r\n } \r\n }\r\n },\r\n get: (key) => list[key],\r\n remove(key){\r\n var e = list[key];\r\n list.splice(key, 1);\r\n let next = getNext(e);\r\n let prev = getPrev(e);\r\n if (prev) {\r\n setNext(prev, next)\r\n }\r\n if (next) {\r\n setPrev(next, prev)\r\n }\r\n if (tail == e) {\r\n tail = prev;\r\n }\r\n if (head == e) {\r\n head = next; \r\n }\r\n return e;\r\n }, \r\n forLoop(f){\r\n for(let i=0; i list[key],\r\n getNext: (key, predicate) => {\r\n let count = list.length;\r\n let start = key+1;\r\n if (key \r\n functions.forEach(\r\n (f) => {\r\n if (f)\r\n f();\r\n }\r\n )\r\n}\r\n\r\nexport function defCall(...functions){\r\n for (let f of functions) \r\n if (f) {\r\n if (f instanceof Function){\r\n let tmp = f();\r\n if (tmp)\r\n return tmp;\r\n }\r\n else\r\n return f \r\n }\r\n}\r\n\r\nexport function ObservableValue(value){\r\n var list = List();\r\n return {\r\n getValue(){\r\n return value;\r\n },\r\n setValue(newValue){\r\n value = newValue;\r\n list.forEach(f=>f(newValue));\r\n },\r\n attach(f){\r\n return list.add(f)\r\n },\r\n detachAll(){\r\n list.reset();\r\n }\r\n }\r\n}\r\n\r\nexport function ObservableLambda(func){\r\n var list = List();\r\n var value = func();\r\n return {\r\n getValue(){\r\n return value;\r\n },\r\n call(){\r\n value = func();\r\n list.forEach(f=>f(value));\r\n },\r\n attach(f){\r\n return list.add(f)\r\n },\r\n detachAll(){\r\n list.reset();\r\n }\r\n }\r\n}\r\n\r\n// export function ObjectValues(object){ // Object.values(plugins) - problem for IE11; full impementation of polifill is mor complex, but for our purpose this is enough\r\n// var arr = [];\r\n// \tfor (var key in object) {\r\n// arr.push(object[key]);\r\n// \t}\r\n// \treturn arr;\r\n// }\r\n\r\nexport function ObjectValuesEx(object){ \r\n var arr = [];\r\n\tfor (var key in object) {\r\n arr.push({key:key, value:object[key]});\r\n\t}\r\n\treturn arr;\r\n}","export function findDirectChildByTagName(element, tagName){\r\n let value = null;\r\n for (let i = 0; i{ \r\n var event = new window.Event(eventName);\r\n e.dispatchEvent(event);\r\n }\r\n }\r\n else\r\n trigger = (e, eventName) => { // IE 11 polyfill\r\n let event = window.document.createEvent(\"CustomEvent\");\r\n event.initCustomEvent(eventName, false, false, undefined);\r\n e.dispatchEvent(event);\r\n }\r\n return trigger;\r\n}\r\n\r\nexport function closestByTagName(element, tagName){\r\n return closest(element, e => e.tagName === tagName) // TODO support xhtml? e.tagName.toUpperCase() ?\r\n}\r\n\r\nexport function closestByClassName(element, className){\r\n return closest(element, e => e.classList.contains(className))\r\n}\r\n\r\nexport function closestByAttribute(element, attributeName, attribute){\r\n return closest(element, e => e.getAttribute(attributeName)===attribute )\r\n}\r\n\r\nexport function containsAndSelf(node, otherNode ){\r\n return node === otherNode || node.contains(otherNode); \r\n}\r\n\r\nexport function getDataGuardedWithPrefix(element, prefix, name){\r\n var tmp1 = element.getAttribute('data-' + prefix + '-' + name);\r\n if (tmp1) {\r\n return tmp1;\r\n } else {\r\n var tmp2 = element.getAttribute('data-' + name);\r\n if (tmp2)\r\n return tmp2;\r\n }\r\n return null;\r\n}\r\n\r\nfunction closest(element, predicate){\r\n if (!element || !(element instanceof Element)) return null; // should be element, not document (TODO: check iframe)\r\n \r\n if (predicate(element)) return element;\r\n return closest(element.parentNode, predicate);\r\n}\r\n\r\nexport function siblingsAsArray(element){\r\n var value = []\r\n if (element.parentNode){\r\n var children = element.parentNode.children;\r\n var l = element.parentNode.children.length;\r\n if (children.length>1){\r\n for (var i=0; i < l; ++i){\r\n var e = children[i];\r\n if (e!=element)\r\n value.push(e);\r\n \r\n }\r\n }\r\n }\r\n return value;\r\n}\r\n\r\nexport function getIsRtl(element){\r\n var isRtl = false;\r\n var e = closestByAttribute(element,\"dir\",\"rtl\");\r\n if (e)\r\n isRtl = true;\r\n return isRtl;\r\n}\r\n\r\nexport function EventBinder(){\r\n var list = [];\r\n return {\r\n bind(element, eventName, handler) {\r\n element.addEventListener(eventName, handler)\r\n list.push( {element, eventName, handler} )\r\n },\r\n unbind() {\r\n list.forEach( e=> {\r\n let {element, eventName, handler}=e;\r\n element.removeEventListener(eventName, handler)\r\n })\r\n }\r\n }\r\n}\r\n\r\nexport function EventTumbler(element, eventName, handler){\r\n return {\r\n on() {\r\n element.addEventListener(eventName, handler)\r\n },\r\n off() {\r\n element.removeEventListener(eventName, handler)\r\n }\r\n }\r\n}\r\n\r\nexport function AttributeBackup(){\r\n var list = [];\r\n return {\r\n set(element, attributeName, attribute){\r\n var currentAtribute = element.getAttribute(attributeName); \r\n list.push( {element, currentAtribute, attribute} )\r\n element.setAttribute(attributeName, attribute)\r\n },\r\n restore(){\r\n list.forEach(e=>{\r\n let {element, attributeName, attribute} = e;\r\n if (attributeName)\r\n element.setAttribute(attributeName, attribute)\r\n else\r\n element.removeAttribute(attributeName)\r\n })\r\n }\r\n }\r\n}\r\n\r\nexport function EventLoopFlag(window) {\r\n var flag = false;\r\n return {\r\n get(){\r\n return flag;\r\n },\r\n set(){\r\n flag = true;\r\n pr = window.setTimeout( \r\n () => { \r\n flag = false;\r\n })\r\n \r\n }\r\n }\r\n}\r\n\r\nexport function EventLoopProlongableFlag(window) {\r\n var flag = false;\r\n var pr = null;\r\n return {\r\n get(){\r\n return flag;\r\n },\r\n set(timeout){\r\n if (flag && pr){\r\n window.clearTimeout(pr);\r\n }\r\n flag = true;\r\n pr = window.setTimeout( \r\n () => { \r\n flag = false;\r\n pr=null;\r\n }, timeout?timeout:0)\r\n \r\n }\r\n }\r\n}\r\n\r\nexport function ResetableFlag() {\r\n var flag = false;\r\n return {\r\n get(){\r\n return flag;\r\n },\r\n set(){\r\n flag = true;\r\n },\r\n reset(){\r\n flag = false;\r\n }\r\n }\r\n}","import {shallowClearClone, isString} from './ToolsJs';\r\n\r\nexport function addStyling(element, styling){\r\n var backupStyling = {classes:[], styles:{}}\r\n if (styling) {\r\n var {classes, styles} = styling;\r\n classes.forEach(e => element.classList.add(e)) // todo use add(classes)\r\n backupStyling.classes = classes.slice();\r\n for (let property in styles){\r\n backupStyling.styles[property] = element.style[property];\r\n element.style[property] = styles[property]; // todo use Object.assign (need polyfill for IE11)\r\n }\r\n }\r\n return backupStyling;\r\n}\r\n\r\nfunction removeStyling(element, styling){\r\n if (styling) {\r\n var {classes, styles} = styling;\r\n classes.forEach(e=>element.classList.remove(e)) // todo use remove(classes)\r\n for (let property in styles)\r\n element.style[property] = styles[property]; // todo use Object.assign (need polyfill for IE11)\r\n }\r\n}\r\n\r\nexport function toggleStyling(element, styling){\r\n var backupStyling = {classes:[], styles:{}};\r\n var isOn=false;\r\n var isF = styling instanceof Function;\r\n return (value, force)=>{\r\n if (value) {\r\n if (isOn===false){\r\n backupStyling = addStyling(element, isF?styling():styling)\r\n isOn=true;\r\n } else if (force){\r\n removeStyling(element, backupStyling);\r\n backupStyling =addStyling(element, isF?styling():styling)\r\n }\r\n } else {\r\n if (isOn===true || force===true){\r\n removeStyling(element, backupStyling);\r\n isOn=false;\r\n } \r\n }\r\n }\r\n}\r\n\r\nfunction extendClasses(out, param, actionStr, actionArr, isRemoveEmptyClasses){\r\n if (isString(param)){\r\n if (param === \"\"){\r\n if (isRemoveEmptyClasses){\r\n out.classes = [];\r\n }\r\n } else {\r\n let c = param.split(' ');\r\n out.classes = actionStr(c);\r\n }\r\n return true;\r\n } else if (param instanceof Array){\r\n if (param.length==0){\r\n if (isRemoveEmptyClasses){\r\n out.classes = [];\r\n }\r\n }\r\n else{\r\n out.classes = actionArr(param);\r\n }\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nfunction extend(value, param, actionStr, actionArr, actionObj, isRemoveEmptyClasses){\r\n var success = extendClasses(value, param, actionStr, actionArr, isRemoveEmptyClasses);\r\n if (success === false){\r\n if (param instanceof Object){\r\n var {classes, styles} = param;\r\n extendClasses(value, classes, actionStr, actionArr, isRemoveEmptyClasses);\r\n \r\n if (styles) {\r\n value.styles = actionObj(styles);\r\n } else if (!classes) {\r\n value.styles = actionObj(param)\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function Styling(param){\r\n var value = {classes:[], styles:{}};\r\n if (param){\r\n extend(value, param, a=>a, a=>a.slice(), o=>shallowClearClone(o), true);\r\n }\r\n return Object.freeze(value);\r\n}\r\n\r\nfunction createStyling(isReplace, param, ...params){\r\n var value = {classes:[], styles:{}};\r\n if (param){\r\n extend(value, param, a=>a, a=>a.slice(), o=>shallowClearClone(o),true);\r\n if (params){\r\n var {classes, styles} = value;\r\n var extendInt = isReplace? (p)=>extend(value, p, s=>s, a=>a.slice(), o=> shallowClearClone(styles, o),true):\r\n (p)=>extend(value, p, a=>classes.concat(a), a=>classes.concat(a), o=>shallowClearClone(styles, o),false)\r\n params.forEach(p=> extendInt(p));\r\n }\r\n }\r\n return Styling(value);\r\n}\r\n\r\nexport function createCss(stylings1, stylings2){\r\n var destination = {};\r\n for (let property in stylings1) {\r\n let param1 = stylings1[property];\r\n\r\n let param2 = stylings2?stylings2[property]:undefined;\r\n if (param2===undefined)\r\n destination[property] = Styling(param1)\r\n else{\r\n destination[property] = createStyling(true, param1, param2); \r\n }\r\n }\r\n if (stylings2)\r\n for (let property in stylings2) {\r\n if (!stylings1[property])\r\n destination[property] = Styling(stylings2[property])\r\n }\r\n return destination;\r\n}\r\n\r\nexport function extendCss(stylings1, stylings2){\r\n for (let property in stylings2) {\r\n let param2 = stylings2[property];\r\n let param1 = stylings1[property];\r\n if (param1 === undefined)\r\n stylings1[property] = Styling(param2)\r\n else{\r\n stylings1[property] = createStyling(false, param1, param2); \r\n }\r\n }\r\n}","export function NavigateManager(\r\n list, getPrev, getNext\r\n){\r\n return {\r\n navigate(down, wrap /* hoveredChoice */){ \r\n if (down) {\r\n return wrap?getNext(wrap): list.getHead();\r\n } else {\r\n return wrap?getPrev(wrap): list.getTail();\r\n }\r\n },\r\n getCount(){\r\n return list.getCount()\r\n },\r\n getHead(){\r\n return list.getHead()\r\n }\r\n }\r\n}\r\n\r\nexport function FilterPredicateAspect(){\r\n return {\r\n filterPredicate: (wrap, text) => \r\n wrap.choice.searchText.indexOf(text) >= 0 \r\n }\r\n}\r\n\r\nexport function FilterManagerAspect(\r\n emptyNavigateManager,\r\n filteredNavigateManager,\r\n filteredChoicesList, \r\n choicesEnumerableAspect,\r\n filterPredicateAspect\r\n ) {\r\n let showEmptyFilter=true;\r\n let filterText = \"\";\r\n return {\r\n getNavigateManager(){\r\n return (showEmptyFilter)?emptyNavigateManager:filteredNavigateManager;\r\n },\r\n processEmptyInput(){ // redefined in PlaceholderPulgin, HighlightPlugin\r\n showEmptyFilter =true;\r\n filterText =\"\";\r\n choicesEnumerableAspect.forEach( (wrap)=>{\r\n wrap.choice.setVisible(true);\r\n });\r\n },\r\n getFilter(){\r\n return filterText;\r\n },\r\n setFilter(text){ // redefined in HighlightPlugin\r\n showEmptyFilter =false;\r\n filterText = text;\r\n filteredChoicesList.reset();\r\n choicesEnumerableAspect.forEach( (wrap)=>{\r\n wrap.choice.filteredPrev = wrap.choice.filteredNext = null;\r\n var v = filterPredicateAspect.filterPredicate(wrap, text)\r\n if (v)\r\n filteredChoicesList.add(wrap);\r\n wrap.choice.setVisible(v);\r\n });\r\n }\r\n }\r\n}\r\n\r\n\r\n","export function Wraps(wrapsCollection, \r\n listFacade_reset, listFacade_remove, listFacade_add) \r\n{\r\n return {\r\n push: (wrap) => push(wrap, wrapsCollection, listFacade_add),\r\n insert: (key, wrap) => insert(key, wrap, wrapsCollection, listFacade_add),\r\n remove: (key) => {\r\n var wrap = wrapsCollection.remove(key);\r\n listFacade_remove(wrap);\r\n return wrap;\r\n },\r\n clear: () => {\r\n wrapsCollection.reset();\r\n listFacade_reset();\r\n }, \r\n dispose: () => wrapsCollection.forLoop(wrap => wrap.dispose()) \r\n }\r\n}\r\n\r\nfunction push(wrap, wrapsCollection, listFacade_add){\r\n wrapsCollection.push(wrap);\r\n listFacade_add(wrap);\r\n}\r\n\r\nfunction insert(key, wrap, wrapsCollection, listFacade_add){\r\n if (key>=wrapsCollection.getCount()) {\r\n push(wrap, wrapsCollection, listFacade_add);\r\n }\r\n else {\r\n wrapsCollection.add(wrap, key);\r\n listFacade_add(wrap, key);\r\n }\r\n}","import {composeSync} from './ToolsJs';\r\nimport {EventBinder, EventLoopProlongableFlag, EventTumbler, containsAndSelf} from './ToolsDom'\r\n\r\nexport function MultiSelectInlineLayoutAspect (\r\n environment, filterDom, choicesDom, \r\n choicesVisibilityAspect, \r\n hoveredChoiceAspect, navigateAspect, filterManagerAspect,\r\n focusInAspect, optionToggleAspect,\r\n createPickHandlersAspect,\r\n picksList,\r\n inputAspect, specialPicksEventsAspect, buildChoiceAspect, \r\n resetLayoutAspect,\r\n\r\n picksElementAspect,\r\n \r\n afterInputAspect,\r\n disposeAspect\r\n ) \r\n{\r\n let choicesElement = choicesDom.choicesElement;\r\n var window = environment.window;\r\n var document = window.document;\r\n var eventLoopFlag =EventLoopProlongableFlag(window); \r\n var skipFocusout = false; // state\r\n \r\n function getSkipFocusout() {\r\n return skipFocusout;\r\n };\r\n function resetSkipFocusout() {\r\n skipFocusout = false;\r\n };\r\n function setSkipFocusout() {\r\n skipFocusout = true;\r\n };\r\n\r\n // we want to escape the closing of the menu (because of focus out from) on a user's click inside the container\r\n var skipoutMousedown = function() {\r\n setSkipFocusout();\r\n }\r\n\r\n // add listeners that manages close dropdown on click outside container\r\n var choicesElementMousedownEventTumbler = EventTumbler(choicesElement, \"mousedown\", skipoutMousedown);\r\n var documentMouseupEventTumbler = EventTumbler(document, \"mouseup\", documentMouseup);\r\n\r\n var documentMouseup = function(event) {\r\n // if we would left without focus then \"close the drop\" do not remove focus border\r\n if (choicesElement == event.target) \r\n filterDom.setFocus()\r\n\r\n // if click outside container - close dropdown\r\n else if ( !containsAndSelf(choicesElement, event.target) && !picksElementAspect.containsAndSelf(event.target)) {\r\n resetLayoutAspect.resetLayout();\r\n focusInAspect.setFocusIn(false);\r\n }\r\n }\r\n\r\n function showChoices() {\r\n if ( !choicesVisibilityAspect.isChoicesVisible() )\r\n {\r\n choicesVisibilityAspect.updatePopupLocation();\r\n eventLoopFlag.set();\r\n choicesVisibilityAspect.setChoicesVisible(true);\r\n \r\n // TODO: move to scroll plugin\r\n choicesElement.scrollTop = 0;\r\n \r\n choicesElementMousedownEventTumbler.on();\r\n documentMouseupEventTumbler.on();\r\n }\r\n }\r\n\r\n function hideChoices() {\r\n resetMouseCandidateChoice();\r\n hoveredChoiceAspect.resetHoveredChoice();\r\n if (choicesVisibilityAspect.isChoicesVisible())\r\n {\r\n // COOMENT OUT DEBUGGING popup layout\r\n choicesVisibilityAspect.setChoicesVisible(false);\r\n \r\n choicesElementMousedownEventTumbler.off();\r\n documentMouseupEventTumbler.off();\r\n }\r\n }\r\n\r\n var preventDefaultClickEvent = null;\r\n\r\n // TODO: remove setTimeout: set on start of mouse event reset on end\r\n function skipoutAndResetMousedown(){\r\n skipoutMousedown();\r\n window.setTimeout(()=>resetSkipFocusout());\r\n }\r\n\r\n function processUncheck(uncheckOption, event){\r\n // we can't remove item on \"click\" in the same loop iteration - it is unfrendly for 3PP event handlers (they will get detached element)\r\n // never remove elements in the same event iteration\r\n window.setTimeout(()=>uncheckOption())\r\n preventDefaultClickEvent = event; // setPreventDefaultMultiSelectEvent\r\n }\r\n\r\n // function handleOnRemoveButton(onRemove, setSelectedFalse){\r\n // // processRemoveButtonClick removes the item\r\n // // what is a problem with calling 'remove' directly (not using setTimeout('remove', 0)):\r\n // // consider situation \"MultiSelect\" on DROPDOWN (that should be closed on the click outside dropdown)\r\n // // therefore we aslo have document's click's handler where we decide to close or leave the DROPDOWN open.\r\n // // because of the event's bubling process 'remove' runs first. \r\n // // that means the event's target element on which we click (the x button) will be removed from the DOM together with badge \r\n // // before we could analize is it belong to our dropdown or not.\r\n // // important 1: we can't just the stop propogation using stopPropogate because click outside dropdown on the similar \r\n // // component that use stopPropogation will not close dropdown (error, dropdown should be closed)\r\n // // important 2: we can't change the dropdown's event handler to leave dropdown open if event's target is null because of\r\n // // the situation described above: click outside dropdown on the same component.\r\n // // Alternatively it could be possible to use stopPropogate but together create custom click event setting new target \r\n // // that belomgs to DOM (e.g. panel)\r\n\r\n\r\n // onRemove(event => {\r\n // processUncheck(setSelectedFalse, event);\r\n // hideChoices();\r\n // resetFilterAspect.resetFilter(); \r\n // });\r\n // }\r\n \r\n function handleOnRemoveButton(setSelectedFalse){ return (event) => {\r\n processUncheck(setSelectedFalse, event);\r\n resetLayoutAspect.resetLayout(); \r\n }}\r\n \r\n let mouseCandidateEventBinder = EventBinder();\r\n var resetMouseCandidateChoice = () => {\r\n mouseCandidateEventBinder.unbind();\r\n };\r\n\r\n var mouseOverToHoveredAndReset = (wrap) => {\r\n \r\n if (!wrap.choice.isHoverIn)\r\n navigateAspect.hoverIn(wrap);\r\n resetMouseCandidateChoice();\r\n };\r\n \r\n function adoptChoiceElement(wrap){\r\n let choiceElement = wrap.choice.choiceElement;\r\n // in chrome it happens on \"become visible\" so we need to skip it, \r\n // for IE11 and edge it doesn't happens, but for IE11 and Edge it doesn't happens on small \r\n // mouse moves inside the item. \r\n // https://stackoverflow.com/questions/59022563/browser-events-mouseover-doesnt-happen-when-you-make-element-visible-and-mous\r\n \r\n var onChoiceElementMouseover = () => \r\n {\r\n if (eventLoopFlag.get() )\r\n {\r\n resetMouseCandidateChoice();\r\n mouseCandidateEventBinder.bind(choiceElement, 'mousemove', ()=>mouseOverToHoveredAndReset(wrap));\r\n mouseCandidateEventBinder.bind(choiceElement, 'mousedown', ()=>mouseOverToHoveredAndReset(wrap));\r\n }\r\n else\r\n {\r\n if (!wrap.choice.isHoverIn)\r\n {\r\n // NOTE: mouseleave is not enough to guarantee remove hover styles in situations\r\n // when style was setuped without mouse (keyboard arrows)\r\n // therefore force reset manually (done inside hoverIn)\r\n navigateAspect.hoverIn(wrap);\r\n } \r\n }\r\n }\r\n \r\n // note 1: mouseleave preferred to mouseout - which fires on each descendant\r\n // note 2: since I want add aditional info panels to the dropdown put mouseleave on dropdwon would not work\r\n var onChoiceElementMouseleave = () => {\r\n if (!eventLoopFlag.get()) {\r\n hoveredChoiceAspect.resetHoveredChoice();\r\n }\r\n }\r\n var overAndLeaveEventBinder = EventBinder();\r\n overAndLeaveEventBinder.bind(choiceElement, 'mouseover', onChoiceElementMouseover);\r\n overAndLeaveEventBinder.bind(choiceElement, 'mouseleave', onChoiceElementMouseleave);\r\n\r\n return overAndLeaveEventBinder.unbind;\r\n }\r\n\r\n \r\n\r\n\r\n // it can be initated by 3PP functionality\r\n // sample (1) BS functionality - input x button click - clears input\r\n // sample (2) BS functionality - esc keydown - clears input\r\n // and there could be difference in processing: (2) should hide the menu, then reset , when (1) should just reset without hiding.\r\n\r\n function afterInput(){\r\n let visibleCount = filterManagerAspect.getNavigateManager().getCount();\r\n\r\n if (visibleCount > 0){\r\n afterInputAspect.visible(showChoices, visibleCount);\r\n }else{\r\n afterInputAspect.notVisible(hideChoices);\r\n }\r\n }\r\n\r\n function keyDownArrow(down) {\r\n let wrap = navigateAspect.navigate(down); \r\n if (wrap)\r\n {\r\n // TODO: next line should be moved to planned \"HeightAndScroll\" plugin, actual only for scrolling with keyDown functionality\r\n eventLoopFlag.set(400); // means disable mouse handlers that set hovered choice item; arrowDown can intiate scrolling when scrolling can itiate mouse leave on hovered item; this stops it\r\n navigateAspect.hoverIn(wrap); // !\r\n showChoices(); \r\n }\r\n }\r\n\r\n function hoveredToSelected(){\r\n let hoveredWrap = hoveredChoiceAspect.getHoveredChoice(); \r\n if (hoveredWrap){\r\n let wasToggled = optionToggleAspect.toggle(hoveredWrap); \r\n if (wasToggled) {\r\n resetLayoutAspect.resetLayout();\r\n }\r\n }\r\n }\r\n\r\n // TODO: bind it more declarative way? (compact code)\r\n var onKeyDown = (event) => {\r\n let keyCode = event.which;\r\n var empty = filterDom.isEmpty();\r\n if ([ 13,\r\n 27 // '27-esc' there is \"just in case\", I can imagine that there are user agents that do UNDO\r\n ].indexOf(keyCode)>=0 \r\n || (keyCode == 9 && !empty) // otherwice there are no keyup (true at least for '9-tab'),\r\n ) {\r\n event.preventDefault(); \r\n \r\n // '13-enter' - prevention against form's default button \r\n // but doesn't help with bootsrap modal ESC or ENTER (close behaviour);\r\n }\r\n if ([ 38, 40 ].indexOf(keyCode) >= 0 )\r\n event.preventDefault(); \r\n if (keyCode == 8 /*backspace*/) {\r\n // NOTE: this will process backspace only if there are no text in the input field\r\n // If user will find this inconvinient, we will need to calculate something like this\r\n // let isBackspaceAtStartPoint = (this.filterInput.selectionStart == 0 && this.filterInput.selectionEnd == 0);\r\n if (empty) {\r\n let pick = picksList.getTail();\r\n if (pick){ \r\n specialPicksEventsAspect.backSpace(pick);\r\n }\r\n }\r\n }\r\n // ---------------------------------------------------------------------------------\r\n // NOTE: no preventDefault called in case of empty for 9-tab\r\n else if (keyCode == 9 /*tab*/) { // NOTE: no keydown for this (without preventDefaul after TAB keyup event will be targeted another element) \r\n if (empty) { \r\n hideChoices(); // hideChoices inside (and no filter reset since it is empty) \r\n }\r\n }\r\n else if (keyCode == 27 /*esc*/ ) { // NOTE: forbid the ESC to close the modal (in case the nonempty or dropdown is open)\r\n if (!empty || choicesVisibilityAspect.isChoicesVisible())\r\n event.stopPropagation()\r\n }\r\n else if (keyCode == 38) {\r\n keyDownArrow(false); // up\r\n }\r\n else if (keyCode == 40) {\r\n keyDownArrow(true); // down\r\n }\r\n }\r\n var onKeyUp = (event) => {\r\n let keyCode = event.which;\r\n //var handler = keyUp[event.which/* key code */];\r\n //handler(); \r\n if (keyCode == 9 /*tab*/) {\r\n if (choicesVisibilityAspect.isChoicesVisible()) {\r\n keyDownArrow(true);\r\n } else {\r\n if (filterManagerAspect.getNavigateManager().getCount()>0){\r\n showChoices();\r\n }\r\n }\r\n }\r\n else if (keyCode == 13 ) {\r\n if (choicesVisibilityAspect.isChoicesVisible()) {\r\n hoveredToSelected();\r\n } else {\r\n if (filterManagerAspect.getNavigateManager().getCount()>0){\r\n showChoices();\r\n }\r\n }\r\n }\r\n else if (keyCode == 27) { // escape\r\n // is it always empty (bs x can still it) \r\n resetLayoutAspect.resetLayout();\r\n }\r\n }\r\n\r\n function clickToShowChoices(event){\r\n filterDom.setFocusIfNotTarget(event.target);\r\n if (preventDefaultClickEvent != event) {\r\n if (choicesVisibilityAspect.isChoicesVisible()){\r\n hideChoices() \r\n } else {\r\n if (filterManagerAspect.getNavigateManager().getCount()>0)\r\n showChoices();\r\n }\r\n }\r\n preventDefaultClickEvent=null;\r\n }\r\n\r\n return {\r\n init(){\r\n filterDom.onFocusIn(()=>focusInAspect.setFocusIn(true));\r\n filterDom.onFocusOut(() => { \r\n if (!getSkipFocusout()){ // skip initiated by mouse click (we manage it different way)\r\n resetLayoutAspect.resetLayout(); // if do not do this we will return to filtered list without text filter in input\r\n focusInAspect.setFocusIn(false);\r\n }\r\n resetSkipFocusout();\r\n }\r\n );\r\n \r\n filterDom.onInput(() => {\r\n let {filterInputValue, isEmpty} = inputAspect.processInput();\r\n if (isEmpty)\r\n filterManagerAspect.processEmptyInput();\r\n else\r\n filterDom.setWidth(filterInputValue); \r\n eventLoopFlag.set(); // means disable mouse handlers that set hovered item; otherwise we will get \"Hover On MouseEnter\" when filter's changes should remove hover\r\n afterInput();\r\n }); \r\n filterDom.onKeyDown(onKeyDown); \r\n filterDom.onKeyUp(onKeyUp);\r\n \r\n picksElementAspect.onClick(clickToShowChoices);\r\n picksElementAspect.onMousedown(skipoutAndResetMousedown);\r\n \r\n resetLayoutAspect.resetLayout = composeSync(\r\n hideChoices,\r\n resetLayoutAspect.resetLayout // resetFilter by default\r\n );\r\n \r\n let origCreatePickHandlers = createPickHandlersAspect.createPickHandlers;\r\n createPickHandlersAspect.createPickHandlers = (wrap) => {\r\n let pickHandlers = origCreatePickHandlers(wrap);\r\n pickHandlers.removeOnButton = handleOnRemoveButton(pickHandlers.removeOnButton);\r\n return pickHandlers;\r\n } \r\n \r\n let origBuildChoice = buildChoiceAspect.buildChoice;\r\n buildChoiceAspect.buildChoice = (wrap) => {\r\n origBuildChoice(wrap);\r\n let pickHandlers = createPickHandlersAspect.createPickHandlers(wrap);\r\n \r\n wrap.choice.remove = composeSync(wrap.choice.remove, () => {\r\n if (pickHandlers.removeAndDispose) {\r\n pickHandlers.removeAndDispose();\r\n pickHandlers.removeAndDispose=null;\r\n }\r\n })\r\n \r\n let unbindChoiceElement = adoptChoiceElement(wrap);\r\n wrap.choice.dispose = composeSync(unbindChoiceElement, wrap.choice.dispose);\r\n }\r\n\r\n disposeAspect.dispose = composeSync(disposeAspect.dispose, resetMouseCandidateChoice, () => picksElementAspect.unbind() );\r\n }\r\n }\r\n}\r\n","import {composeSync, List} from './ToolsJs';\r\nimport {PickDomFactory} from './PickDomFactory';\r\nimport {ChoiceDomFactory} from './ChoiceDomFactory';\r\n\r\nimport {StaticDomFactory} from './StaticDomFactory';\r\n\r\nimport {CreateElementAspect} from './CreateElementAspect';\r\n\r\nimport {PicksDomFactory} from './PicksDomFactory';\r\nimport {FilterDomFactory} from './FilterDomFactory';\r\n\r\nimport {ChoicesDomFactory} from './ChoicesDomFactory';\r\nimport {ChoicesVisibilityAspect} from './ChoicesVisibilityAspect';\r\nimport {SpecialPicksEventsAspect} from './SpecialPicksEventsAspect';\r\n \r\nimport {ComponentPropertiesAspect, TriggerAspect, OnChangeAspect} from './ComponentPropertiesAspect';\r\nimport {OptionsAspect, OptionPropertiesAspect} from './OptionsAspect';\r\n\r\nimport {ChoicesEnumerableAspect } from './ChoicesEnumerableAspect'\r\nimport {FilterManagerAspect, NavigateManager, FilterPredicateAspect} from './FilterManagerAspect'\r\nimport {BuildAndAttachChoiceAspect, BuildChoiceAspect} from './BuildChoiceAspect'\r\nimport {OptionsLoopAspect, OptionAttachAspect} from './OptionsLoopAspect'\r\n\r\nimport {UpdateDataAspect } from './UpdateDataAspect'\r\nimport {UpdateAspect } from './UpdateDataAspect'\r\nimport {CreateWrapAspect, CreateChoiceBaseAspect, OptionToggleAspect, CreatePickHandlersAspect, RemovePickAspect, \r\n AddPickAspect, FullMatchAspect, ChoiceClickAspect, IsChoiceSelectableAspect, ProducePickAspect} from './CreateWrapAspect.js'\r\nimport {NavigateAspect, HoveredChoiceAspect} from './NavigateAspect'\r\nimport {Wraps} from './Wraps'\r\n\r\nimport {PickButtonAspect} from './PickButtonAspect'\r\n\r\nimport {BuildPickAspect} from './BuildPickAspect'\r\nimport {InputAspect} from './InputAspect'\r\nimport {ResetFilterAspect, FocusInAspect, ResetFilterListAspect} from './ResetFilterListAspect'\r\n\r\nimport {MultiSelectInlineLayoutAspect} from './MultiSelectInlineLayoutAspect'\r\n\r\nimport {ResetLayoutAspect} from './ResetLayoutAspect'\r\n\r\nimport {LoadAspect} from './LoadAspect'\r\nimport {DoublyLinkedList, ArrayFacade} from './ToolsJs'\r\nimport {CountableChoicesListInsertAspect} from './CountableChoicesListInsertAspect'\r\n\r\nimport {PicksElementAspect} from './PicksElementAspect'\r\nimport {AfterInputAspect} from './AfterInputAspect'\r\n\r\n\r\n/// environment - common for many; configuration for concreate\r\nexport function BsMultiSelect(element, environment, pluginManager, configuration, onInit){\r\n var {window} = environment;\r\n environment.isIE11 = !!window.MSInputMethodContext && !!document.documentMode;\r\n\r\n let { containerClass,\r\n css, \r\n getDisabled,\r\n options, \r\n getText\r\n } = configuration;\r\n \r\n let disposeAspect = {dispose(){}};\r\n let triggerAspect = TriggerAspect(element, environment.trigger);\r\n let onChangeAspect = OnChangeAspect(triggerAspect, 'dashboardcode.multiselect:change');\r\n let componentPropertiesAspect = ComponentPropertiesAspect(getDisabled??(() => false));\r\n let optionsAspect = OptionsAspect(options); \r\n let optionPropertiesAspect = OptionPropertiesAspect(getText);\r\n let isChoiceSelectableAspect = IsChoiceSelectableAspect();\r\n let createWrapAspect = CreateWrapAspect();\r\n let createChoiceBaseAspect = CreateChoiceBaseAspect(optionPropertiesAspect);\r\n \r\n let addPickAspect = AddPickAspect();\r\n let removePickAspect = RemovePickAspect();\r\n \r\n let createElementAspect = CreateElementAspect(name => window.document.createElement(name), (element, html) => element.innerHTML = html );\r\n \r\n let wrapsCollection = ArrayFacade();\r\n \r\n\r\n let countableChoicesList = DoublyLinkedList(\r\n (wrap)=>wrap.choice.itemPrev, \r\n (warp, v)=>warp.choice.itemPrev=v, \r\n (wrap)=>wrap.choice.itemNext, \r\n (wrap, v)=>wrap.choice.itemNext=v\r\n );\r\n \r\n let countableChoicesListInsertAspect = CountableChoicesListInsertAspect(countableChoicesList, wrapsCollection);\r\n\r\n let choicesEnumerableAspect = ChoicesEnumerableAspect(countableChoicesList, wrap=>wrap.choice.itemNext)\r\n \r\n let filteredChoicesList = DoublyLinkedList(\r\n (wrap)=>wrap.choice.filteredPrev, \r\n (wrap, v)=>wrap.choice.filteredPrev=v, \r\n (wrap)=>wrap.choice.filteredNext, \r\n (wrap, v)=>wrap.choice.filteredNext=v\r\n );\r\n \r\n let emptyNavigateManager = NavigateManager(\r\n countableChoicesList,\r\n (wrap)=>wrap.choice.itemPrev,\r\n (wrap)=>wrap.choice.itemNext \r\n \r\n ); \r\n let filteredNavigateManager = NavigateManager(\r\n filteredChoicesList, \r\n (wrap)=>wrap.choice.filteredPrev,\r\n (wrap)=>wrap.choice.filteredNext ); \r\n\r\n let filterPredicateAspect = FilterPredicateAspect()\r\n\r\n let filterManagerAspect = FilterManagerAspect(\r\n emptyNavigateManager,\r\n filteredNavigateManager,\r\n \r\n filteredChoicesList, \r\n choicesEnumerableAspect,\r\n filterPredicateAspect\r\n );\r\n\r\n let hoveredChoiceAspect = HoveredChoiceAspect()\r\n let navigateAspect = NavigateAspect(hoveredChoiceAspect, \r\n (down, hoveredChoice)=>filterManagerAspect.getNavigateManager().navigate(down, hoveredChoice));\r\n let picksList = List();\r\n let wraps = Wraps(\r\n wrapsCollection,\r\n ()=>countableChoicesList.reset(), \r\n (w)=>countableChoicesList.remove(w),\r\n (w, key)=>countableChoicesListInsertAspect.countableChoicesListInsert(w, key));\r\n\r\n let picksDomFactory = PicksDomFactory (css, createElementAspect);\r\n let filterDomFactory = FilterDomFactory (css, createElementAspect);\r\n let choicesDomFactory = ChoicesDomFactory(css, createElementAspect);\r\n\r\n let pickButtonAspect = PickButtonAspect(configuration.pickButtonHTML);\r\n let pickDomFactory = PickDomFactory (css, createElementAspect, optionPropertiesAspect, pickButtonAspect);\r\n let choiceDomFactory = ChoiceDomFactory (css, createElementAspect, optionPropertiesAspect);\r\n var eventHandlers = pluginManager.createHandlers();\r\n eventHandlers.plugStaticDomFactories(\r\n {\r\n environment, configuration, disposeAspect, \r\n \r\n triggerAspect, onChangeAspect, componentPropertiesAspect, \r\n countableChoicesList, countableChoicesListInsertAspect, optionPropertiesAspect, createElementAspect,\r\n wrapsCollection, choicesEnumerableAspect, filteredChoicesList, \r\n filterPredicateAspect, isChoiceSelectableAspect, \r\n \r\n hoveredChoiceAspect, navigateAspect, \r\n \r\n choicesDomFactory, filterDomFactory, picksDomFactory, \r\n pickDomFactory, choiceDomFactory, \r\n \r\n filterManagerAspect,\r\n \r\n optionsAspect, createWrapAspect, createChoiceBaseAspect, \r\n picksList, wraps, addPickAspect, removePickAspect\r\n }\r\n );\r\n\r\n\r\n let staticDomFactory = StaticDomFactory(createElementAspect);\r\n\r\n eventHandlers.plugStaticDom(\r\n {staticDomFactory}\r\n ); // apply cssPatch to css, apply selectElement support; \r\n\r\n let {createStaticDom} = staticDomFactory.create(choicesDomFactory, filterDomFactory, picksDomFactory); // overrided in SelectElementPlugin\r\n\r\n let {staticDom, filterDom, picksDom, staticManager, choicesDom} = createStaticDom(element, containerClass);\r\n\r\n // after this we can use staticDom (means generated DOM elements) in plugin construtctor, what simplifies parameters passing a lot \r\n\r\n\r\n let specialPicksEventsAspect = SpecialPicksEventsAspect();\r\n\r\n let choicesVisibilityAspect = ChoicesVisibilityAspect(choicesDom.choicesElement);\r\n let resetFilterListAspect = ResetFilterListAspect(filterDom, filterManagerAspect);\r\n let resetFilterAspect = ResetFilterAspect(filterDom, resetFilterListAspect);\r\n\r\n let focusInAspect = FocusInAspect(picksDom);\r\n \r\n let buildPickAspect = BuildPickAspect(picksDom, pickDomFactory);\r\n \r\n let producePickAspect = ProducePickAspect(picksList, removePickAspect, buildPickAspect);\r\n let createPickHandlersAspect = CreatePickHandlersAspect(producePickAspect);\r\n \r\n let optionToggleAspect = OptionToggleAspect(createPickHandlersAspect, addPickAspect);\r\n let fullMatchAspect = FullMatchAspect(createPickHandlersAspect, addPickAspect);\r\n let inputAspect = InputAspect(filterDom, filterManagerAspect, fullMatchAspect); \r\n let choiceClickAspect = ChoiceClickAspect(optionToggleAspect, filterDom);\r\n \r\n let buildChoiceAspect = BuildChoiceAspect(choicesDom, choiceDomFactory, choiceClickAspect);\r\n \r\n let buildAndAttachChoiceAspect = BuildAndAttachChoiceAspect(buildChoiceAspect);\r\n let resetLayoutAspect = ResetLayoutAspect(() => resetFilterAspect.resetFilter());\r\n\r\n let optionAttachAspect = OptionAttachAspect(createWrapAspect, createChoiceBaseAspect, buildAndAttachChoiceAspect, wraps);\r\n let optionsLoopAspect = OptionsLoopAspect(optionsAspect, optionAttachAspect);\r\n let updateDataAspect = UpdateDataAspect(choicesDom, wraps, picksList, optionsLoopAspect, resetLayoutAspect);\r\n let updateAspect = UpdateAspect(updateDataAspect);\r\n\r\n let loadAspect = LoadAspect(optionsLoopAspect);\r\n\r\n let picksElementAspect = PicksElementAspect(picksDom.picksElement);\r\n let afterInputAspect = AfterInputAspect(filterManagerAspect, navigateAspect, choicesVisibilityAspect, hoveredChoiceAspect);\r\n\r\n let multiSelectInlineLayoutAspect = MultiSelectInlineLayoutAspect(\r\n environment, filterDom, choicesDom, \r\n choicesVisibilityAspect, \r\n hoveredChoiceAspect, navigateAspect, filterManagerAspect,\r\n focusInAspect, optionToggleAspect,\r\n createPickHandlersAspect,\r\n picksList,\r\n inputAspect, specialPicksEventsAspect, buildChoiceAspect, \r\n resetLayoutAspect, \r\n picksElementAspect,\r\n afterInputAspect,\r\n disposeAspect\r\n );\r\n \r\n eventHandlers.layout(\r\n {\r\n staticDom, picksDom, choicesDom, filterDom, resetLayoutAspect, \r\n choicesVisibilityAspect, staticManager, buildChoiceAspect, optionToggleAspect, choiceClickAspect, \r\n buildAndAttachChoiceAspect, optionsLoopAspect, optionAttachAspect,\r\n buildPickAspect, producePickAspect, createPickHandlersAspect, inputAspect, resetFilterListAspect, resetFilterAspect, \r\n specialPicksEventsAspect,\r\n resetLayoutAspect, focusInAspect, \r\n loadAspect, updateDataAspect, updateAspect, \r\n fullMatchAspect,\r\n picksElementAspect, afterInputAspect,\r\n multiSelectInlineLayoutAspect }\r\n );\r\n multiSelectInlineLayoutAspect.init();\r\n eventHandlers.attach();\r\n\r\n let api = {component: \"BsMultiSelect.api\"} // key to use in memory leak analyzes\r\n eventHandlers.buildApi(api);\r\n\r\n // after this we can pass aspects methods call without wrapping - there should be no more overridings. TODO freeze aspects?\r\n api.dispose = composeSync(\r\n resetLayoutAspect.resetLayout,\r\n ()=>{disposeAspect.dispose()},\r\n eventHandlers.dispose, \r\n ()=>{picksList.forEach(pick=>pick.dispose());},\r\n wraps.dispose,\r\n staticManager.dispose, picksDom.dispose, filterDom.dispose );\r\n \r\n api.updateData = () => { \r\n updateDataAspect.updateData();\r\n };\r\n api.update = () => {\r\n updateAspect.update()\r\n }\r\n \r\n \r\n // TODO api.updateOption = (key) => {/* all updates: selected, disabled, hidden, text */}\r\n\r\n onInit?.(api, pluginManager.aspects);\r\n picksDom.pickFilterElement.appendChild(filterDom.filterInputElement);\r\n picksDom.picksElement.appendChild(picksDom.pickFilterElement); \r\n staticManager.appendToContainer();\r\n loadAspect.load();\r\n return api;\r\n}\r\n","export function CreateElementAspect(createElement, createElementFromHtml){\r\n return {\r\n createElement,\r\n createElementFromHtml\r\n }\r\n}","export function HoveredChoiceAspect(){\r\n let hoveredChoice=null;\r\n return {\r\n getHoveredChoice: () => hoveredChoice,\r\n setHoveredChoice: (wrap) => {hoveredChoice = wrap},\r\n resetHoveredChoice() {\r\n if (hoveredChoice) {\r\n hoveredChoice.choice.setHoverIn(false)\r\n hoveredChoice = null;\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function NavigateAspect(hoveredChoiceAspect, navigate){\r\n return {\r\n hoverIn(wrap){\r\n hoveredChoiceAspect.resetHoveredChoice(); \r\n hoveredChoiceAspect.setHoveredChoice(wrap);\r\n wrap.choice.setHoverIn(true);\r\n },\r\n navigate: (down) => navigate(down, hoveredChoiceAspect.getHoveredChoice()), \r\n }\r\n}","export function PickButtonAspect(buttonHTML){\r\n return {\r\n getButtonHTML : () => buttonHTML\r\n }\r\n}","export function TriggerAspect(element, trigger) {\r\n return {\r\n trigger: (eventName) => {\r\n trigger(element, eventName)\r\n }\r\n }\r\n}\r\n\r\nexport function OnChangeAspect(triggerAspect, name) {\r\n return {\r\n onChange(){\r\n triggerAspect.trigger(name)\r\n }\r\n }\r\n}\r\n\r\nexport function ComponentPropertiesAspect(getDisabled) {\r\n return {\r\n getDisabled\r\n }\r\n}\r\n\r\n","export function OptionsAspect(options){\r\n return {\r\n getOptions : () => options\r\n }\r\n}\r\n\r\nexport function OptionPropertiesAspect(getText){\r\n if (!getText){\r\n getText = (option) => option.text;\r\n }\r\n return {\r\n getText\r\n }\r\n}\r\n","import {composeSync} from './ToolsJs';\r\n\r\nexport function IsChoiceSelectableAspect(){ // TODO rename to IsSelectableByUserAspect ?\r\n return {\r\n isSelectable: (wrap)=>true \r\n }\r\n}\r\n\r\n// todo: remove?\r\nexport function ChoiceClickAspect(optionToggleAspect, filterDom){\r\n return {\r\n choiceClick: (wrap) => {\r\n optionToggleAspect.toggle(wrap);\r\n filterDom.setFocus();\r\n }\r\n }\r\n}\r\n\r\n// // fullMatchAspect trySetWrapSelected(fullMatchWrap.option, composeUpdateSelected(fullMatchWrap, true), true);\r\n\r\nexport function OptionToggleAspect(createPickHandlersAspect, addPickAspect /*, setOptionSelectedAspect*/){\r\n return {\r\n toggle: (wrap) => {\r\n let pickHandlers = createPickHandlersAspect.createPickHandlers(wrap);\r\n addPickAspect.addPick(wrap, pickHandlers);\r\n return true; // TODO: process setOptionSelectedAspect\r\n }\r\n }\r\n}\r\n\r\nexport function AddPickAspect(){\r\n return {\r\n addPick(wrap, pickHandlers){\r\n return pickHandlers.producePick();\r\n }\r\n }\r\n}\r\n\r\nexport function FullMatchAspect(createPickHandlersAspect, addPickAspect){\r\n return {\r\n fullMatch(wrap){\r\n let pickHandlers = createPickHandlersAspect.createPickHandlers(wrap);\r\n addPickAspect.addPick(wrap, pickHandlers);\r\n return true; // TODO: process setOptionSelectedAspect\r\n }\r\n }\r\n}\r\n\r\nexport function RemovePickAspect(){\r\n return {\r\n removePick(wrap, pick){\r\n pick.dispose(); // overrided in SelectedOptionPlugin with trySetWrapSelected(wrap, false);\r\n }\r\n }\r\n}\r\n\r\nexport function ProducePickAspect(picksList, removePickAspect, buildPickAspect){\r\n return {\r\n producePick(wrap, pickHandlers){\r\n let pick = buildPickAspect.buildPick(wrap, (event)=>pickHandlers.removeOnButton(event));\r\n \r\n let fixSelectedFalse = () => removePickAspect.removePick(wrap, pick)\r\n\r\n pickHandlers.removeOnButton = fixSelectedFalse;\r\n \r\n pick.pickElementAttach();\r\n let {remove: removeFromPicksList} = picksList.add(pick);\r\n pick.setSelectedFalse = fixSelectedFalse;\r\n pick.wrap = wrap; \r\n pick.dispose = composeSync(\r\n removeFromPicksList,\r\n ()=>{\r\n pick.setSelectedFalse=null;\r\n pick.wrap = null;\r\n }, \r\n pick.dispose);\r\n pickHandlers.removeAndDispose = () => pick.dispose();\r\n return pick;\r\n }\r\n }\r\n}\r\n\r\n// redefined in MultiSelectInlineLayout to redefine handlers removeOnButton\r\n// redefined in SelectedOptionPlugin to compose wrap.updateSelected\r\nexport function CreatePickHandlersAspect(producePickAspect){\r\n return{\r\n createPickHandlers(wrap){\r\n let pickHandlers = { \r\n producePick: null, // not redefined directly, but redefined in addPickAspect\r\n removeAndDispose: null, // not redefined, \r\n removeOnButton: null // redefined in MultiSelectInlineLayout\r\n }\r\n \r\n pickHandlers.producePick = () => producePickAspect.producePick(wrap, pickHandlers);\r\n return pickHandlers;\r\n }\r\n }\r\n}\r\n\r\nexport function CreateChoiceBaseAspect(optionPropertiesAspect){\r\n return {\r\n createChoiceBase(option){\r\n return {\r\n \r\n //updateDisabled:null, \r\n //updateHidden:null,\r\n \r\n // navigation and filter support\r\n filteredPrev: null, \r\n filteredNext: null, \r\n searchText: optionPropertiesAspect.getText(option).toLowerCase().trim(), // TODO make an index abstraction\r\n \r\n // internal state handlers, so they do not have \"update semantics\"\r\n isHoverIn: false,\r\n isFilteredIn: false,\r\n \r\n setVisible: null,\r\n setHoverIn: null,\r\n \r\n // TODO: is it a really sense to have them there?\r\n isChoiceElementAttached: false,\r\n choiceElement: null,\r\n choiceDom:null,\r\n choiceElementAttach: null,\r\n \r\n itemPrev: null,\r\n itemNext: null,\r\n \r\n remove: null,\r\n \r\n dispose: null\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function CreateWrapAspect(){\r\n return {\r\n createWrap(option){\r\n return {\r\n option: option\r\n }\r\n }\r\n }\r\n}","export function CountableChoicesListInsertAspect(countableChoicesList, wrapsCollection){\r\n return {\r\n countableChoicesListInsert(wrap, key){\r\n let choiceNext = wrapsCollection.getNext(key);\r\n countableChoicesList.add(wrap, choiceNext)\r\n }\r\n }\r\n}","export function ChoicesEnumerableAspect(countableChoicesList, getNext){\r\n return {\r\n forEach(f){\r\n let wrap = countableChoicesList.getHead(); \r\n while(wrap){\r\n f(wrap);\r\n wrap = getNext(wrap);\r\n }\r\n }\r\n }\r\n}","import {addStyling, toggleStyling} from './ToolsStyling';\r\n\r\nexport function PicksDomFactory(css, createElementAspect){\r\n return {\r\n create(picksElement, isDisposablePicksElementFlag){\r\n var pickFilterElement = createElementAspect.createElement('LI');\r\n \r\n addStyling(picksElement, css.picks);\r\n addStyling(pickFilterElement, css.pickFilter);\r\n \r\n let disableToggleStyling = toggleStyling(picksElement, css.picks_disabled);\r\n let focusToggleStyling = toggleStyling(picksElement, css.picks_focus);\r\n let isFocusIn = false;\r\n \r\n return {\r\n picksElement,\r\n pickFilterElement,\r\n\r\n createPickElement(){\r\n var pickElement = createElementAspect.createElement('LI');\r\n addStyling(pickElement, css.pick);\r\n return {\r\n pickElement, \r\n attach: (beforeElement) => picksElement.insertBefore(pickElement, beforeElement??pickFilterElement),\r\n detach: () => picksElement.removeChild(pickElement)\r\n };\r\n },\r\n disable(isComponentDisabled){\r\n disableToggleStyling(isComponentDisabled)\r\n },\r\n toggleFocusStyling(){\r\n focusToggleStyling(isFocusIn)\r\n },\r\n getIsFocusIn(){\r\n return isFocusIn;\r\n },\r\n setIsFocusIn(newIsFocusIn){\r\n isFocusIn = newIsFocusIn\r\n }, \r\n dispose(){\r\n if (!isDisposablePicksElementFlag){\r\n disableToggleStyling(false)\r\n focusToggleStyling(false)\r\n\r\n if (pickFilterElement.parentNode)\r\n pickFilterElement.parentNode.removeChild(pickFilterElement)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function PicksDomFactoryPlugCss(css){\r\n css.picks = 'form-control';\r\n css.pickFilter = '';\r\n css.picks_disabled = 'disabled';\r\n css.picks_focus = 'focus';\r\n css.pick = 'badge';\r\n}\r\n\r\nfunction PicksDomFactoryPlugCssPatch(cssPatch){\r\n cssPatch.picks = {listStyleType:'none', display:'flex', flexWrap:'wrap', height: 'auto', marginBottom: '0',cursor: 'text'},\r\n cssPatch.picks_disabled = {backgroundColor: '#e9ecef'};\r\n cssPatch.picks_focus = {borderColor: '#80bdff', boxShadow: '0 0 0 0.2rem rgba(0, 123, 255, 0.25)'};\r\n}\r\n\r\nexport function PicksDomFactoryPlugCssPatchBs4(cssPatch){\r\n PicksDomFactoryPlugCssPatch(cssPatch)\r\n cssPatch.pick = {paddingLeft: '0', paddingRight: '.5rem', paddingInlineStart:'0', paddingInlineEnd:'0.5rem', lineHeight: '1.5em'};\r\n}\r\n\r\nexport function PicksDomFactoryPlugCssPatchBs5(cssPatch){\r\n PicksDomFactoryPlugCssPatch(cssPatch)\r\n cssPatch.pick = {paddingLeft: '0', paddingRight: '.5rem', paddingInlineStart:'0', paddingInlineEnd:'0.5rem', color:'var(--bs-dark)'};\r\n}","import {addStyling} from './ToolsStyling';\r\nimport {EventBinder} from './ToolsDom';\r\n\r\nexport function FilterDomFactory(css, createElementAspect){\r\n return {\r\n create(isDisposablePicksElementFlag){\r\n var filterInputElement = createElementAspect.createElement('INPUT');\r\n addStyling(filterInputElement, css.filterInput);\r\n \r\n filterInputElement.setAttribute(\"type\",\"search\");\r\n filterInputElement.setAttribute(\"autocomplete\",\"off\");\r\n var eventBinder = EventBinder();\r\n\r\n return {\r\n filterInputElement,\r\n isEmpty(){return filterInputElement.value ? false : true},\r\n setEmpty(){\r\n filterInputElement.value ='';\r\n },\r\n getValue(){\r\n return filterInputElement.value;\r\n },\r\n setFocus(){\r\n filterInputElement.focus();\r\n },\r\n setWidth(text){\r\n filterInputElement.style.width = text.length * 1.3 + 2 + \"ch\"\r\n },\r\n // TODO: check why I need this comparision? \r\n setFocusIfNotTarget(target){\r\n if (target != filterInputElement)\r\n filterInputElement.focus();\r\n },\r\n onInput(onFilterInputInput){\r\n eventBinder.bind(filterInputElement,'input', onFilterInputInput);\r\n },\r\n onFocusIn(onFocusIn){\r\n eventBinder.bind(filterInputElement,'focusin', onFocusIn);\r\n },\r\n onFocusOut(onFocusOut){\r\n eventBinder.bind(filterInputElement,'focusout', onFocusOut);\r\n },\r\n onKeyDown(onfilterInputKeyDown){\r\n eventBinder.bind(filterInputElement,'keydown', onfilterInputKeyDown); \r\n },\r\n onKeyUp(onFilterInputKeyUp){\r\n eventBinder.bind(filterInputElement,'keyup', onFilterInputKeyUp);\r\n },\r\n dispose(){\r\n eventBinder.unbind();\r\n if (!isDisposablePicksElementFlag){\r\n if (filterInputElement.parentNode)\r\n filterInputElement.parentNode.removeChild(filterInputElement)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function FilterDomFactoryPlugCss(css){\r\n css.filterInput = '';\r\n}\r\n\r\nexport function FilterDomFactoryPlugCssPatch(cssPatch){\r\n cssPatch.filterInput = {\r\n border:'0px', height: 'auto', boxShadow:'none', \r\n padding:'0', margin:'0', \r\n outline:'none', backgroundColor:'transparent',\r\n backgroundImage: 'none' // otherwise BS .was-validated set its image\r\n };\r\n}\r\n","import {addStyling} from './ToolsStyling';\r\n\r\nexport function ChoicesDomFactory(css, createElementAspect) {\r\n return {\r\n create(){\r\n var choicesElement = createElementAspect.createElement('DIV');\r\n var choicesListElement = createElementAspect.createElement('UL');\r\n \r\n choicesElement.appendChild(choicesListElement);\r\n choicesElement.style.display = 'none';\r\n\r\n addStyling(choicesElement, css.choices);\r\n addStyling(choicesListElement, css.choicesList);\r\n \r\n return {\r\n choicesElement,\r\n choicesListElement,\r\n createChoiceElement(){\r\n var choiceElement = createElementAspect.createElement('LI');\r\n addStyling(choiceElement, css.choice);\r\n return {\r\n choiceElement,\r\n setVisible: (isVisible) => choiceElement.style.display = isVisible ? 'block': 'none',\r\n attach: (beforeElement) => choicesListElement.insertBefore(choiceElement, beforeElement),\r\n detach: () => choicesListElement.removeChild(choiceElement)\r\n };\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n\r\nexport function ChoicesDomFactoryPlugCss(css){\r\n css.choices = 'dropdown-menu';\r\n css.choicesList = '';\r\n css.choice = '';\r\n}\r\n\r\nexport function ChoicesDomFactoryPlugCssPatch(cssPatch){\r\n cssPatch.choicesList = {listStyleType:'none', paddingLeft:'0', paddingRight:'0', marginBottom:'0'};\r\n cssPatch.choice = {classes:'px-md-2 px-1', styles:{cursor:'pointer'}};\r\n}\r\n\r\n","import {EventBinder} from './ToolsDom';\r\nimport {addStyling, toggleStyling} from './ToolsStyling';\r\n\r\nfunction PickDomFactoryPlugCss(css){\r\n css.pickContent = '';\r\n css.pickContent_disabled = 'disabled';\r\n}\r\n\r\nexport function PickDomFactoryPlugCssBs4(css){\r\n PickDomFactoryPlugCss(css)\r\n css.pickButton = 'close';\r\n}\r\n\r\nexport function PickDomFactoryPlugCssBs5(css){\r\n PickDomFactoryPlugCss(css)\r\n css.pickButton = 'btn-close';\r\n}\r\n\r\nfunction PickDomFactoryPlugCssPatch(cssPatch){\r\n cssPatch.pickContent_disabled = {opacity: '.65'};\r\n}\r\n\r\nexport function PickDomFactoryPlugCssPatchBs4(cssPatch){\r\n PickDomFactoryPlugCssPatch(cssPatch);\r\n cssPatch.pickButton = {float : \"none\", fontSize:'1.5em', lineHeight: '.9em', };\r\n}\r\n\r\nexport function PickDomFactoryPlugCssPatchBs5(cssPatch){\r\n PickDomFactoryPlugCssPatch(cssPatch);\r\n cssPatch.pickButton = {float : \"none\", fontSize:'0.8em', verticalAlign: \"text-top\"};\r\n}\r\n\r\nexport function PickDomFactory(css, createElementAspect, optionPropertiesAspect, pickButtonAspect){\r\n return { \r\n create(pickElement, wrap, remove){\r\n let buttonHTML = pickButtonAspect.getButtonHTML();\r\n createElementAspect.createElementFromHtml(pickElement, ''+buttonHTML);\r\n let pickContentElement = pickElement.querySelector('SPAN');\r\n let pickButtonElement = pickElement.querySelector('BUTTON');\r\n let eventBinder = EventBinder();\r\n eventBinder.bind(pickButtonElement, \"click\", remove);\r\n \r\n addStyling(pickContentElement, css.pickContent);\r\n addStyling(pickButtonElement, css.pickButton);\r\n let disableToggle = toggleStyling(pickContentElement, css.pickContent_disabled);\r\n\r\n function updateData(){\r\n pickContentElement.textContent = optionPropertiesAspect.getText(wrap.option); \r\n }\r\n function updateDisabled(){\r\n disableToggle(wrap.isOptionDisabled)\r\n }\r\n\r\n return {\r\n pickDom:{\r\n pickContentElement,\r\n pickButtonElement,\r\n },\r\n pickDomManagerHandlers:{\r\n updateData,\r\n updateDisabled,\r\n },\r\n dispose(){\r\n eventBinder.unbind();\r\n }\r\n }\r\n }\r\n }\r\n}","import {EventBinder} from './ToolsDom';\r\nimport {addStyling, toggleStyling} from './ToolsStyling';\r\n\r\nexport function ChoiceDomFactory(css, createElementAspect, optionPropertiesAspect){\r\n var updateDataInternal = function(wrap, element){\r\n element.textContent = optionPropertiesAspect.getText(wrap.option);\r\n }\r\n //TODO move check which aspects availbale like wrap.hasOwnProperty(\"isOptionSelected\") to there\r\n return {\r\n create(choiceElement, wrap, toggle){\r\n let choiceDom = null;\r\n let choiceDomManagerHandlers = null;\r\n let eventBinder = EventBinder();\r\n eventBinder.bind(choiceElement, \"click\", toggle);\r\n \r\n if (wrap.hasOwnProperty(\"isOptionSelected\")){\r\n createElementAspect.createElementFromHtml(choiceElement, '
');\r\n \r\n let choiceContentElement = choiceElement.querySelector('DIV');\r\n let choiceCheckBoxElement = choiceContentElement.querySelector('INPUT');\r\n let choiceLabelElement = choiceContentElement.querySelector('LABEL');\r\n \r\n addStyling(choiceContentElement, css.choiceContent); \r\n addStyling(choiceCheckBoxElement, css.choiceCheckBox); \r\n addStyling(choiceLabelElement, css.choiceLabel); \r\n\r\n choiceDom = {\r\n choiceElement,\r\n choiceContentElement,\r\n choiceCheckBoxElement,\r\n choiceLabelElement\r\n };\r\n \r\n let choiceSelectedToggle = toggleStyling(choiceElement, css.choice_selected);\r\n let updateSelected = function(){ \r\n choiceSelectedToggle(wrap.isOptionSelected);\r\n choiceCheckBoxElement.checked = wrap.isOptionSelected;\r\n if (wrap.isOptionDisabled || wrap.choice.isHoverIn){\r\n choiceHoverToggle(wrap.choice.isHoverIn, true);\r\n }\r\n }\r\n\r\n let choiceDisabledToggle = toggleStyling(choiceElement, css.choice_disabled);\r\n let choiceCheckBoxDisabledToggle = toggleStyling(choiceCheckBoxElement, css.choiceCheckBox_disabled);\r\n let choiceLabelDisabledToggle = toggleStyling(choiceLabelElement, css.choiceLabel_disabled);\r\n let choiceCursorDisabledToggle = toggleStyling(choiceElement, {classes:[], styles:{cursor:\"default\"}}); \r\n let updateDisabled = function(){\r\n choiceDisabledToggle(wrap.isOptionDisabled);\r\n choiceCheckBoxDisabledToggle(wrap.isOptionDisabled);\r\n choiceLabelDisabledToggle(wrap.isOptionDisabled);\r\n \r\n // do not desable checkBox if option is selected! there should be possibility to unselect \"disabled\"\r\n let isCheckBoxDisabled = wrap.isOptionDisabled && !wrap.isOptionSelected;\r\n choiceCheckBoxElement.disabled = isCheckBoxDisabled;\r\n choiceCursorDisabledToggle(isCheckBoxDisabled);\r\n }\r\n\r\n let choiceHoverToggle = toggleStyling(choiceElement, ()=>{\r\n if (css.choice_disabled_hover && wrap.isOptionDisabled===true && wrap.isOptionSelected===false)\r\n return css.choice_disabled_hover;\r\n else\r\n return css.choice_hover;\r\n });\r\n let updateHoverIn = function(){\r\n choiceHoverToggle(wrap.choice.isHoverIn);\r\n }\r\n\r\n choiceDomManagerHandlers = {\r\n updateData: ()=>updateDataInternal(wrap, choiceLabelElement),\r\n updateHoverIn,\r\n updateDisabled,\r\n updateSelected, \r\n }\r\n }else{\r\n let choiceHoverToggle = toggleStyling(choiceElement, ()=>\r\n (wrap.isOptionDisabled && css.choice_disabled_hover)?css.choice_disabled_hover:css.choice_hover);\r\n \r\n let updateHoverIn = function(){\r\n choiceHoverToggle(wrap.choice.isHoverIn);\r\n }\r\n choiceElement.innerHTML = '';\r\n let choiceContentElement = choiceElement.querySelector('SPAN');\r\n choiceDom = {\r\n choiceElement,\r\n choiceContentElement,\r\n };\r\n choiceDomManagerHandlers = {\r\n updateData: ()=>updateDataInternal(wrap, choiceContentElement),\r\n updateHoverIn\r\n }\r\n }\r\n \r\n return {\r\n choiceDom,\r\n choiceDomManagerHandlers, \r\n dispose(){\r\n eventBinder.unbind();\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction ChoiceDomFactoryPlugCss(css){\r\n css.choiceCheckBox_disabled = 'disabled'; // not bs, in scss as 'ul.form-control li .custom-control-input.disabled ~ .custom-control-label'\r\n css.choiceLabel_disabled = '';\r\n css.choice_disabled_hover = '';\r\n css.choice_hover = 'hover'; // not bs, in scss as 'ul.dropdown-menu li.hover'\r\n}\r\n\r\nexport function ChoiceDomFactoryPlugCssBs4(css){\r\n ChoiceDomFactoryPlugCss(css)\r\n css.choiceCheckBox = 'custom-control-input';\r\n css.choiceContent = 'custom-control custom-checkbox d-flex';\r\n css.choiceLabel = 'custom-control-label justify-content-start';\r\n css.choice_selected = '';\r\n css.choice_disabled = '';\r\n}\r\n\r\nexport function ChoiceDomFactoryPlugCssBs5(css){\r\n ChoiceDomFactoryPlugCss(css)\r\n css.choiceCheckBox = 'form-check-input'; // bs\r\n css.choiceContent = 'form-check'; // bs d-flex required for rtl to align items\r\n css.choiceLabel = 'form-check-label';\r\n css.choice_selected = 'selected'; // not bs,\r\n css.choice_disabled = 'disabled'; // not bs,\r\n}\r\n\r\nexport function ChoiceDomFactoryPlugCssPatch(cssPatch){\r\n cssPatch.choiceCheckBox = {color: 'inherit', cursor:'inherit'};\r\n cssPatch.choiceContent = {justifyContent: 'flex-start', cursor:'inherit'}; // BS problem: without this on inline form menu items justified center\r\n cssPatch.choiceLabel = {color: 'inherit', cursor:'inherit'}; // otherwise BS .was-validated set its color\r\n cssPatch.choiceLabel_disabled = {opacity: '.65'}; // more flexible than {color: '#6c757d'}; note: avoid opacity on pickElement's border; TODO write to BS4 \r\n cssPatch.choice_disabled_hover = 'bg-light';\r\n cssPatch.choice_hover = 'text-primary bg-light';\r\n}\r\n\r\n","import {findDirectChildByTagName, closestByClassName} from './ToolsDom';\r\n\r\nexport function StaticDomFactory(createElementAspect){\r\n return {\r\n create(choicesDomFactory, filterDomFactory, picksDomFactory){\r\n let choicesDom = choicesDomFactory.create();\r\n return { \r\n createStaticDom(element, containerClass){\r\n function showError(message){\r\n element.style.backgroundColor = 'red';\r\n element.style.color = 'white';\r\n throw new Error(message);\r\n }\r\n \r\n let containerElement, picksElement;\r\n let removableContainerClass= false;\r\n if (element.tagName == 'DIV') {\r\n containerElement = element;\r\n if (!containerElement.classList.contains(containerClass)){\r\n containerElement.classList.add(containerClass);\r\n removableContainerClass = true;\r\n }\r\n picksElement = findDirectChildByTagName(containerElement, 'UL');\r\n }\r\n else if (element.tagName == 'UL') {\r\n picksElement = element;\r\n containerElement = closestByClassName(element, containerClass);\r\n if (!containerElement){\r\n showError('BsMultiSelect: defined on UL but precedentant DIV for container not found; class='+containerClass);\r\n }\r\n } \r\n else if (element.tagName==\"INPUT\"){\r\n showError('BsMultiSelect: INPUT element is not supported');\r\n }\r\n let isDisposablePicksElementFlag=false;\r\n if (!picksElement) {\r\n picksElement = createElementAspect.createElement('UL');\r\n isDisposablePicksElementFlag = true; \r\n }\r\n\r\n let filterDom = filterDomFactory.create(isDisposablePicksElementFlag);\r\n let picksDom = picksDomFactory.create(picksElement, isDisposablePicksElementFlag);\r\n \r\n return {\r\n choicesDom,\r\n filterDom,\r\n picksDom,\r\n staticDom: {\r\n initialElement:element,\r\n containerElement,\r\n picksElement,\r\n isDisposablePicksElementFlag\r\n },\r\n staticManager: {\r\n appendToContainer(){ \r\n containerElement.appendChild(choicesDom.choicesElement); \r\n if (isDisposablePicksElementFlag)\r\n containerElement.appendChild(picksElement)\r\n },\r\n dispose(){ \r\n containerElement.removeChild(choicesDom.choicesElement); \r\n if (removableContainerClass)\r\n containerElement.classList.remove(containerClass);\r\n if (isDisposablePicksElementFlag)\r\n containerElement.removeChild(picksElement)\r\n }\r\n }\r\n };\r\n }\r\n }\r\n }\r\n }\r\n}","export function ChoicesVisibilityAspect(choicesElement) {\r\n\r\n return {\r\n isChoicesVisible(){ \r\n return choicesElement.style.display != 'none'},\r\n setChoicesVisible(visible){\r\n choicesElement.style.display = visible ? 'block' : 'none';\r\n },\r\n updatePopupLocation(){\r\n\r\n }\r\n }\r\n}\r\n","import {EventBinder, containsAndSelf} from './ToolsDom';\r\n\r\nexport function PicksElementAspect(picksElement){\r\n var componentDisabledEventBinder = EventBinder();\r\n var skipoutAndResetMousedownEventBinder = EventBinder();\r\n return {\r\n containsAndSelf(element){\r\n return containsAndSelf(picksElement, element);\r\n },\r\n onClickUnbind(){\r\n componentDisabledEventBinder.unbind();\r\n },\r\n onClick(handler){\r\n componentDisabledEventBinder.bind(picksElement, \"click\", handler);\r\n },\r\n onMousedown(handler){\r\n skipoutAndResetMousedownEventBinder.bind(picksElement, \"mousedown\", handler);\r\n },\r\n unbind(){\r\n skipoutAndResetMousedownEventBinder.unbind();\r\n componentDisabledEventBinder.unbind();\r\n }\r\n }\r\n}","export function SpecialPicksEventsAspect(){\r\n return {\r\n backSpace(pick){ \r\n pick.setSelectedFalse(); \r\n }\r\n }\r\n}","export function ResetFilterListAspect(filterDom, filterManagerAspect){\r\n return {\r\n forceResetFilter(){ // over in PlaceholderPlugin\r\n filterDom.setEmpty();\r\n filterManagerAspect.processEmptyInput(); // over in PlaceholderPlugin\r\n }\r\n }\r\n}\r\n\r\nexport function ResetFilterAspect(filterDom, resetFilterListAspect){\r\n return {\r\n resetFilter(){ // call in OptionsApiPlugin\r\n if (!filterDom.isEmpty()) // call in Placeholder\r\n resetFilterListAspect.forceResetFilter(); // over in Placeholder\r\n }\r\n }\r\n}\r\n\r\nexport function FocusInAspect(picksDom){\r\n return {\r\n setFocusIn(focus){ // call in OptionsApiPlugin\r\n picksDom.setIsFocusIn(focus) // unique call, call BsAppearancePlugin\r\n picksDom.toggleFocusStyling() // over BsAppearancePlugin\r\n }\r\n }\r\n}\r\n\r\n","export function BuildPickAspect(\r\n picksDom, \r\n pickDomFactory\r\n){\r\n return {\r\n buildPick(wrap, removeOnButton){\r\n let {pickElement, attach, detach} = picksDom.createPickElement(); \r\n let {dispose, pickDom, pickDomManagerHandlers} = pickDomFactory.create(pickElement, wrap, removeOnButton); \r\n \r\n pickDomManagerHandlers.updateData();\r\n if (pickDomManagerHandlers.updateDisabled)\r\n pickDomManagerHandlers.updateDisabled();\r\n if (pickDomManagerHandlers.updateComponentDisabled)\r\n pickDomManagerHandlers.updateComponentDisabled();\r\n let pick = {\r\n pickDom,\r\n pickDomManagerHandlers,\r\n pickElementAttach: attach,\r\n dispose: () => { \r\n detach(); \r\n dispose(); \r\n pick.pickDomManagerHandlers = null;\r\n pick.pickDom = pickDom;\r\n pick.pickElementAttach = null;\r\n pick.dispose = null;\r\n }\r\n }\r\n return pick;\r\n }\r\n }\r\n}","export function InputAspect(\r\n filterDom,\r\n filterManagerAspect,\r\n fullMatchAspect\r\n ){\r\n\r\n return {\r\n // overrided in SelectedOptionPlugin\r\n processInput(){ \r\n let filterInputValue = filterDom.getValue();\r\n let text = filterInputValue.trim();\r\n var isEmpty=false;\r\n if (text == '')\r\n isEmpty=true;\r\n else\r\n {\r\n filterManagerAspect.setFilter(text.toLowerCase());\r\n }\r\n \r\n if (!isEmpty)\r\n {\r\n if ( filterManagerAspect.getNavigateManager().getCount() == 1)\r\n {\r\n // todo: move exact match to filterManager\r\n let fullMatchWrap = filterManagerAspect.getNavigateManager().getHead();\r\n let text = filterManagerAspect.getFilter();\r\n if (fullMatchWrap.choice.searchText == text)\r\n {\r\n let success = fullMatchAspect.fullMatch(fullMatchWrap); \r\n if (success) {\r\n filterDom.setEmpty();\r\n isEmpty = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return {filterInputValue, isEmpty};\r\n }\r\n }\r\n}","export function BuildAndAttachChoiceAspect(\r\n buildChoiceAspect,\r\n ){\r\n return {\r\n buildAndAttachChoice(\r\n wrap,\r\n getNextElement \r\n )\r\n {\r\n buildChoiceAspect.buildChoice(wrap);\r\n wrap.choice.choiceElementAttach(getNextElement?.());\r\n }\r\n }\r\n}\r\n\r\nexport function BuildChoiceAspect(\r\n choicesDom,\r\n choiceDomFactory,\r\n choiceClickAspect\r\n ) {\r\n return {\r\n buildChoice(wrap) {\r\n var {choiceElement, setVisible, attach, detach} = choicesDom.createChoiceElement();\r\n wrap.choice.choiceElement = choiceElement;\r\n wrap.choice.choiceElementAttach = attach;\r\n wrap.choice.isChoiceElementAttached = true;\r\n \r\n let {dispose, choiceDom, choiceDomManagerHandlers} = choiceDomFactory.create(choiceElement, wrap, () => choiceClickAspect.choiceClick(wrap));\r\n wrap.choice.choiceDom=choiceDom;\r\n choiceDomManagerHandlers.updateData();\r\n if (choiceDomManagerHandlers.updateSelected) \r\n choiceDomManagerHandlers.updateSelected();\r\n if (choiceDomManagerHandlers.updateDisabled) \r\n choiceDomManagerHandlers.updateDisabled();\r\n \r\n\r\n wrap.choice.choiceDomManagerHandlers = choiceDomManagerHandlers;\r\n \r\n wrap.choice.remove = () => {\r\n detach();\r\n };\r\n \r\n wrap.choice.isFilteredIn = true;\r\n \r\n wrap.choice.setHoverIn = (v) => {\r\n wrap.choice.isHoverIn =v ;\r\n choiceDomManagerHandlers.updateHoverIn();\r\n }\r\n \r\n wrap.choice.setVisible = (v) => {\r\n wrap.choice.isFilteredIn = v;\r\n setVisible(wrap.choice.isFilteredIn)\r\n }\r\n \r\n wrap.choice.dispose = () => {\r\n wrap.choice.choiceDomManagerHandlers = null;\r\n dispose();\r\n \r\n wrap.choice.choiceElement = null;\r\n wrap.choice.choiceDom = null;\r\n wrap.choice.choiceElementAttach = null;\r\n wrap.choice.isChoiceElementAttached = false;\r\n wrap.choice.remove = null; \r\n \r\n // not real data manipulation but internal state\r\n wrap.choice.setVisible = null; // TODO: refactor it there should be 3 types of not visibility: for hidden, for filtered out, for optgroup, for message item\r\n wrap.choice.setHoverIn = null;\r\n \r\n wrap.choice.dispose = null;\r\n }\r\n\r\n wrap.dispose = () => {\r\n wrap.choice.dispose();\r\n wrap.dispose = null;\r\n }\r\n }\r\n }\r\n}","export function ResetLayoutAspect(resetLayout){\r\n return {\r\n resetLayout\r\n }\r\n}","export function OptionAttachAspect(createWrapAspect, createChoiceBaseAspect, buildAndAttachChoiceAspect, wraps){\r\n return {\r\n attach(option){\r\n let wrap = createWrapAspect.createWrap(option);\r\n wrap.choice = createChoiceBaseAspect.createChoiceBase(option);\r\n\r\n // let optGroup = optGroupAspect.getOptionOptGroup(option);\r\n // if (prevOptGroup != optGroup){\r\n // currentOptGroup = optGroup;\r\n // var optGroupWrap = optGroupBuildAspect.wrapAndAttachOptGroupItem(option);\r\n // }\r\n // wrap.optGroup = currentOptGroup;\r\n \r\n \r\n wraps.push(wrap); // note: before attach because attach need it for navigation management\r\n buildAndAttachChoiceAspect.buildAndAttachChoice(wrap);\r\n //wraps.push(wrap);\r\n }\r\n }\r\n}\r\n\r\nexport function OptionsLoopAspect(optionsAspect, optionAttachAspect){ \r\n return{\r\n loop(){\r\n let options = optionsAspect.getOptions();\r\n for(let i = 0; ipick.dispose());\r\n picksList.reset();\r\n optionsLoopAspect.loop();\r\n }\r\n }\r\n}\r\n\r\nexport function UpdateAspect(updateDataAspect){\r\n return {\r\n update(){\r\n updateDataAspect.updateData();\r\n }\r\n }\r\n}","\r\nexport function LoadAspect(optionsLoopAspect){\r\n return{\r\n load(){ // redriven in AppearancePlugin, FormRestoreOnBackwardPlugin\r\n optionsLoopAspect.loop();\r\n }\r\n }\r\n}","export function AfterInputAspect(filterManagerAspect, navigateAspect, choicesVisibilityAspect, hoveredChoiceAspect){\r\n return {\r\n visible(showChoices, visibleCount){\r\n let panelIsVisble = choicesVisibilityAspect.isChoicesVisible();\r\n if (!panelIsVisble) {\r\n showChoices(); \r\n }\r\n if (visibleCount == 1) {\r\n navigateAspect.hoverIn(filterManagerAspect.getNavigateManager().getHead())\r\n } else {\r\n if (panelIsVisble)\r\n hoveredChoiceAspect.resetHoveredChoice();\r\n } \r\n },\r\n notVisible(hideChoices){\r\n if (choicesVisibilityAspect.isChoicesVisible()){\r\n hideChoices();\r\n }\r\n }\r\n }\r\n}","import {extendIfUndefined} from './ToolsJs';\r\n\r\nexport function ComposePluginManagerFactory(plugins, defaults){ \r\n let plugedList = [];\r\n let mergeList = [];\r\n for(let i = 0; i {\r\n let buildAspectsList = [];\r\n for(let i = 0; i {\r\n extendIfUndefined(aspects, newAspects)\r\n let instances = [];\r\n let disposes = [];\r\n \r\n var eventHandlers = [];\r\n for(let j = 0; j c.key===a.preLayoutBus.after)) // only check, not order\r\n a.preLayoutBus.preLayout?.(aspects);\r\n }\r\n }\r\n \r\n for(let i = 0; i{\r\n if (settings[i.old]){\r\n console.log(`DashboarCode.BsMultiSelect: ${i.old} is depricated, use - cssPatch:{${i.opt}:{${i.style}:'myValue'}}`);\r\n if(!settings[i.opt]){\r\n let opt = {}\r\n opt[i.style] = settings[i.old]\r\n settings.cssPatch[i.opt]=opt;\r\n }\r\n delete settings[i.old];\r\n }\r\n }\r\n )\r\n \r\n transformClasses.forEach( (i) => {\r\n if (settings[i.old]){\r\n console.log(`DashboarCode.BsMultiSelect: ${i.old} is depricated, use - css:{${i.opt}:'myValue'}`);\r\n if(!css[i.opt]){\r\n css[i.opt]= settings[i.old]\r\n }\r\n delete settings[i.old];\r\n }\r\n })\r\n \r\n if (settings.inputColor){\r\n console.log(\"DashboarCode.BsMultiSelect: inputColor is depricated, remove parameter\");\r\n delete settings.inputColor;\r\n }\r\n\r\n if (settings.useCss){\r\n console.log(\"DashboarCode.BsMultiSelect: 'useCss: true' is depricated, use - 'useCssPatch: false'\");\r\n if(!css.pick_disabled){\r\n settings.useCssPatch = !settings.useCss\r\n }\r\n delete settings.useCss;\r\n } \r\n\r\n if (settings.getIsValid || settings.getIsInValid){\r\n throw \"DashboarCode.BsMultiSelect: parameters getIsValid and getIsInValid are depricated and removed, use - getValidity that should return (true|false|null) \"\r\n } \r\n}","import {BsMultiSelect} from './BsMultiSelect'\r\nimport {ComposePluginManagerFactory} from './PluginManager'\r\n\r\nimport {adjustLegacySettings} from './BsMultiSelectDepricatedParameters'\r\n\r\nimport {extendIfUndefined} from './ToolsJs'\r\n\r\nimport {createCss} from './ToolsStyling'\r\n\r\n// TODO: remove environment - replace it with plugins\r\nexport function MultiSelectBuilder(environment, plugins, defaultCss) \r\n{\r\n const defaults = {containerClass: \"dashboardcode-bsmultiselect\", css: defaultCss}\r\n\r\n var pluginManagerFactory = ComposePluginManagerFactory(plugins, defaults);\r\n\r\n let create = (element, options) => { \r\n if (options && options.plugins)\r\n console.log(\"DashboarCode.BsMultiSelect: 'options.plugins' is depricated, use - MultiSelectBuilder(environment, plugins) instead\");\r\n \r\n let buildConfiguration;\r\n let settings;\r\n if (options instanceof Function) {\r\n buildConfiguration = options;\r\n settings = null;\r\n } else {\r\n buildConfiguration = options?.buildConfiguration;\r\n settings = options;\r\n }\r\n if (settings){\r\n adjustLegacySettings(settings);\r\n }\r\n let configuration = {};\r\n \r\n // TODO: move to each plugin that add css (as plugMergeSettings) \r\n configuration.css = createCss(defaults.css, settings?.css);\r\n \r\n extendIfUndefined(configuration, settings);\r\n extendIfUndefined(configuration, defaults);\r\n let onInit = buildConfiguration?.(element, configuration); \r\n var pluginManager = pluginManagerFactory(configuration, settings); // merge settings.cssPatch and defaults.cssPatch and merge defaults.css and defaults.cssPatch \r\n Object.freeze(configuration);\r\n let multiSelect = BsMultiSelect(element, environment, pluginManager, configuration, onInit); // onInit(api, aspects) - before load data\r\n return multiSelect;\r\n }\r\n \r\n return {create, defaultSettings: defaults}\r\n}","import {addToJQueryPrototype} from './AddToJQueryPrototype'\r\n\r\nimport {composeSync, ObjectValuesEx, isString} from './ToolsJs'\r\nimport {composeEventTrigger} from './ToolsDom'\r\n\r\nimport {MultiSelectBuilder} from './MultiSelectBuilder'\r\n\r\nexport function createForJQuery(window, $, globalPopper, name, plugins, defaultCss){\r\n let trigger = null;\r\n let isJQyery = false;\r\n if (isJQyery) {\r\n trigger = (e, eventName) => $(e).trigger(eventName);\r\n } else {\r\n trigger = composeEventTrigger(window);\r\n }\r\n\r\n let environment = {trigger, window, globalPopper}\r\n let pluginsArray = ObjectValuesEx(plugins)\r\n let {create, defaultSettings} = MultiSelectBuilder(environment, pluginsArray, defaultCss);\r\n let createForUmd = (element, settings) => {\r\n if (isString(element))\r\n element = window.document.querySelector(element);\r\n return create(element, settings);\r\n }\r\n createForUmd.Default = defaultSettings;\r\n\r\n if (isJQyery) {\r\n let constructorForJquery = (element, settings, removeInstanceData) => {let multiSelect = create(element, settings); multiSelect.dispose = composeSync(multiSelect.dispose, removeInstanceData); return multiSelect;} \r\n let prototypable = addToJQueryPrototype(name, constructorForJquery, $);\r\n \r\n prototypable.defaults = defaultSettings;\r\n }\r\n return createForUmd; \r\n}\r\n","export function addToJQueryPrototype(pluginName, createPlugin, $){\r\n const firstChar = pluginName.charAt(0);\r\n const firstCharLower = firstChar.toLowerCase();\r\n if (firstCharLower == firstChar) {\r\n throw new Error(`Plugin name '${pluginName}' should be started from upper case char`)\r\n }\r\n const prototypableName = firstCharLower + pluginName.slice(1)\r\n const noConflictPrototypable = $.fn[prototypableName];\r\n const noConflictPrototypableForInstance = $.fn[pluginName];\r\n const dataKey = `DashboardCode.${pluginName}`;\r\n\r\n function createInstance(options, e, $e){\r\n const optionsRef = (typeof options === 'object') || options instanceof Function ? options:null;\r\n let instance = createPlugin(e, optionsRef,\r\n () => {\r\n $e.removeData(dataKey)\r\n });\r\n $e.data(dataKey, instance);\r\n return instance;\r\n }\r\n\r\n function prototypable(options){\r\n let output=[];\r\n this.each( function (i, e) {\r\n let $e = $(e);\r\n let instance = $e.data(dataKey)\r\n let isMethodName = typeof options === 'string';\r\n if (!instance) {\r\n if (isMethodName && /Dispose/.test(options)) \r\n return;\r\n instance = createInstance(options, e, $e);\r\n }\r\n if (isMethodName) {\r\n let methodName = options;\r\n if (typeof instance[methodName] === 'undefined') {\r\n let lMethodName = methodName.charAt(0).toLowerCase() + methodName.slice(1)\r\n if ( typeof instance[lMethodName] === 'undefined') {\r\n throw new Error(`No method named '${methodName}'`)\r\n } else {\r\n methodName = lMethodName;\r\n }\r\n }\r\n let result = instance[methodName]();\r\n if (result !== undefined){\r\n output.push(result);\r\n }\r\n }\r\n })\r\n if (output.length==0)\r\n return this;\r\n else if (output.length==1)\r\n return output[0];\r\n else\r\n return output;\r\n }\r\n\r\n function prototypableForInstance(options){\r\n let instance = this.data(dataKey);\r\n if (instance)\r\n return instance;\r\n else if (this.length === 1){\r\n return createInstance(options, this.get(0), this);\r\n } else if (this.length > 1){\r\n let output=[];\r\n this.each(function(i, e){\r\n output.push(createInstance(options, e, $(e)));\r\n })\r\n return output;\r\n }\r\n }\r\n \r\n $.fn[prototypableName] = prototypable;\r\n $.fn[prototypableName].noConflict = function () {\r\n $.fn[prototypableName] = noConflictPrototypable\r\n return prototypable;\r\n }\r\n\r\n $.fn[pluginName] = prototypableForInstance;\r\n $.fn[pluginName].noConflict = function () {\r\n $.fn[pluginName] = noConflictPrototypableForInstance\r\n return prototypableForInstance;\r\n }\r\n\r\n return prototypable;\r\n}","import {closestByClassName, siblingsAsArray} from '../ToolsDom';\r\nimport {addStyling} from '../ToolsStyling'\r\nimport {ObservableLambda, composeSync} from '../ToolsJs';\r\n\r\nexport function BsAppearancePlugin(){\r\n return {\r\n plug\r\n }\r\n}\r\n\r\nexport function plug(configuration){ \r\n return (aspects) => {\r\n return {\r\n // TODO, LabelElement should be moved to StaticDomFactory and staticDom \r\n preLayoutBus: {\r\n after: \"LabelForAttributePlugin\",\r\n preLayout: () => {\r\n var {getLabelAspect, staticDom, configuration} = aspects; \r\n var {selectElement} = staticDom;\r\n var {getDefaultLabel} = configuration;\r\n let origLabelAspectGetLabel = getLabelAspect.getLabel; \r\n getLabelAspect.getLabel = () => {\r\n var e = origLabelAspectGetLabel();\r\n if (e)\r\n return e;\r\n else{\r\n if (selectElement){\r\n let labelElement = getDefaultLabel(selectElement);\r\n return labelElement;\r\n }\r\n }\r\n }\r\n }\r\n },\r\n layout: () => {\r\n let {validationApiAspect, \r\n picksDom, staticDom, updateAppearanceAspect, componentPropertiesAspect, floatingLabelAspect} = aspects;\r\n let {getValidity, getSize, useCssPatch, css, composeGetSize} = configuration;\r\n \r\n let selectElement = staticDom.selectElement;\r\n \r\n let initialElement = staticDom.initialElement;\r\n \r\n let isFloatingLabel = false;\r\n if (floatingLabelAspect){\r\n isFloatingLabel = closestByClassName(initialElement, 'form-floating');\r\n floatingLabelAspect.isFloatingLabel = () => isFloatingLabel\r\n }\r\n \r\n if (staticDom.selectElement) {\r\n if(!getValidity)\r\n getValidity = composeGetValidity(selectElement)\r\n if(!getSize) \r\n getSize = composeGetSize(selectElement)\r\n } else {\r\n if (!getValidity)\r\n getValidity = () => null\r\n if (!getSize)\r\n getSize = () => null\r\n }\r\n \r\n componentPropertiesAspect.getSize=getSize;\r\n \r\n componentPropertiesAspect.getValidity=getValidity;\r\n \r\n var updateSize;\r\n if (!useCssPatch){\r\n updateSize= () => updateSizeForAdapter(picksDom.picksElement, getSize)\r\n }\r\n else{\r\n let {picks_lg, picks_sm, picks_def, picks_floating_def} = css;\r\n if (isFloatingLabel)\r\n picks_lg = picks_sm = picks_def = picks_floating_def;\r\n updateSize = () => updateSizeJsForAdapter(picksDom.picksElement, picks_lg, picks_sm, picks_def, getSize);\r\n }\r\n \r\n if (useCssPatch){\r\n var origToggleFocusStyling = picksDom.toggleFocusStyling;\r\n picksDom.toggleFocusStyling = () => {\r\n var validity = validationObservable.getValue();\r\n var isFocusIn = picksDom.getIsFocusIn();\r\n origToggleFocusStyling(isFocusIn)\r\n if (isFocusIn){\r\n if (validity===false) { \r\n // but not toggle events (I know it will be done in future)\r\n picksDom.setIsFocusIn(isFocusIn);\r\n \r\n addStyling(picksDom.picksElement, css.picks_focus_invalid)\r\n } else if (validity===true) {\r\n // but not toggle events (I know it will be done in future)\r\n picksDom.setIsFocusIn(isFocusIn);\r\n \r\n addStyling(picksDom.picksElement, css.picks_focus_valid) \r\n } \r\n }\r\n }\r\n }\r\n \r\n var getWasValidated = () => {\r\n var wasValidatedElement = closestByClassName(staticDom.initialElement, 'was-validated');\r\n return wasValidatedElement?true:false;\r\n }\r\n var wasUpdatedObservable = ObservableLambda(()=>getWasValidated());\r\n var getManualValidationObservable = ObservableLambda(()=>getValidity());\r\n let validationApiObservable = validationApiAspect?.validationApiObservable;\r\n \r\n var validationObservable = ObservableLambda(\r\n () => wasUpdatedObservable.getValue()?validationApiObservable.getValue():getManualValidationObservable.getValue()\r\n )\r\n \r\n validationObservable.attach(\r\n (value)=>{\r\n var {validMessages, invalidMessages} = getMessagesElements(staticDom.containerElement);\r\n updateValidity( picksDom.picksElement, validMessages, invalidMessages, value);\r\n picksDom.toggleFocusStyling();\r\n }\r\n )\r\n wasUpdatedObservable.attach(\r\n ()=>validationObservable.call()\r\n )\r\n if (validationApiObservable)\r\n validationApiObservable.attach(\r\n ()=>validationObservable.call()\r\n )\r\n getManualValidationObservable.attach(\r\n ()=>validationObservable.call()\r\n )\r\n \r\n updateAppearanceAspect.updateAppearance = composeSync(\r\n updateAppearanceAspect.updateAppearance, \r\n updateSize, \r\n validationObservable.call, \r\n getManualValidationObservable.call);\r\n \r\n return {\r\n buildApi(api){\r\n api.updateSize = updateSize;\r\n api.updateValidity = ()=> getManualValidationObservable.call();\r\n api.updateWasValidated = ()=>wasUpdatedObservable.call();\r\n },\r\n dispose(){\r\n wasUpdatedObservable.detachAll();\r\n validationObservable.detachAll();\r\n getManualValidationObservable.detachAll();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction updateValidity(picksElement, validMessages, invalidMessages, validity){\r\n if (validity===false){\r\n picksElement.classList.add('is-invalid');\r\n picksElement.classList.remove('is-valid');\r\n invalidMessages.map(e=>e.style.display='block'); \r\n validMessages.map(e=>e.style.display='none'); \r\n }\r\n else if (validity===true){\r\n picksElement.classList.remove('is-invalid');\r\n picksElement.classList.add('is-valid');\r\n invalidMessages.map(e=>e.style.display='none'); \r\n validMessages.map(e=>e.style.display='block'); \r\n }else {\r\n picksElement.classList.remove('is-invalid');\r\n picksElement.classList.remove('is-valid');\r\n invalidMessages.map(e=>e.style.display=''); \r\n validMessages.map(e=>e.style.display=''); \r\n }\r\n}\r\n\r\nfunction updateSizeClasses(picksElement, size){\r\n if (size==\"lg\"){\r\n picksElement.classList.add('form-control-lg');\r\n picksElement.classList.remove('form-control-sm');\r\n }\r\n else if (size==\"sm\"){\r\n picksElement.classList.remove('form-control-lg');\r\n picksElement.classList.add('form-control-sm');\r\n }\r\n else{\r\n picksElement.classList.remove('form-control-lg');\r\n picksElement.classList.remove('form-control-sm');\r\n }\r\n}\r\n\r\nfunction updateSizeJsPicks(picksElement, picksLgStyling, picksSmStyling, picksDefStyling, size){\r\n if (size==\"lg\"){\r\n addStyling(picksElement, picksLgStyling);\r\n } else if (size==\"sm\"){\r\n addStyling(picksElement, picksSmStyling);\r\n } else {\r\n addStyling(picksElement, picksDefStyling);\r\n }\r\n}\r\n\r\nfunction updateSizeJs(picksElement, picksLgStyling, picksSmStyling, picksDefStyling, size){\r\n updateSizeClasses(picksElement, size);\r\n updateSizeJsPicks(picksElement, picksLgStyling, picksSmStyling, picksDefStyling, size)\r\n}\r\n\r\nfunction updateSizeForAdapter(picksElement, getSize){\r\n updateSizeClasses(picksElement, getSize())\r\n}\r\n\r\nfunction updateSizeJsForAdapter(picksElement, picksLgStyling, picksSmStyling, picksDefStyling, getSize){\r\n updateSizeJs(picksElement, picksLgStyling, picksSmStyling, picksDefStyling, getSize())\r\n}\r\n\r\nfunction getMessagesElements(containerElement){\r\n var siblings = siblingsAsArray(containerElement);\r\n var invalidMessages = siblings.filter(e=>e.classList.contains('invalid-feedback') || \r\n e.classList.contains('invalid-tooltip'));\r\n var validMessages = siblings.filter(e=>e.classList.contains('valid-feedback') || \r\n e.classList.contains('valid-tooltip'));\r\n return {validMessages, invalidMessages} \r\n} \r\n\r\nfunction composeGetValidity(selectElement){\r\n var getValidity = () => \r\n selectElement.classList.contains('is-invalid')?false:\r\n (selectElement.classList.contains('is-valid')?true:null);\r\n return getValidity;\r\n}","import {closestByClassName} from '../ToolsDom'\r\nimport {BsAppearancePlugin} from './BsAppearancePlugin'\r\n\r\nexport function BsAppearanceBs5Plugin(defaults) {\r\n defaults.pickButtonHTML = ''; // used in PickDomFactory\r\n defaults.composeGetSize = composeGetSize; // BsAppearancePlugin\r\n defaults.getDefaultLabel = getDefaultLabel; // FloatingLabelPlugin, BsAppearancePlugin\r\n return BsAppearancePlugin();\r\n}\r\n\r\nfunction composeGetSize(element){\r\n let inputGroupElement = closestByClassName(element, 'input-group');\r\n let getSize = null;\r\n if (inputGroupElement){\r\n getSize = function(){\r\n var value = null;\r\n if (inputGroupElement.classList.contains('input-group-lg'))\r\n value = 'lg';\r\n else if (inputGroupElement.classList.contains('input-group-sm'))\r\n value = 'sm';\r\n return value;\r\n }\r\n }\r\n else{ \r\n getSize = function(){\r\n var value = null;\r\n if (element.classList.contains('form-select-lg') || element.classList.contains('form-control-lg')) // changed for BS\r\n value = 'lg';\r\n else if (element.classList.contains('form-select-sm') || element.classList.contains('form-control-sm'))\r\n value = 'sm'; \r\n return value;\r\n }\r\n }\r\n return getSize;\r\n}\r\n\r\nfunction getDefaultLabel(element){\r\n let value = null;\r\n let query = `label[for=\"${element.id}\"]`;\r\n let p1 = element.parentElement;\r\n value = p1.querySelector(query); // label can be wrapped into col-auto\r\n if (!value){\r\n let p2 = p1.parentElement;\r\n value = p2.querySelector(query);\r\n }\r\n return value;\r\n}","export function BsAppearanceBs5CssPatchPlugin(defaults){\r\n let cssPatch = defaults.cssPatch;\r\n cssPatch.picks_def = {minHeight: 'calc(2.25rem + 2px)'};\r\n cssPatch.picks_lg = {minHeight: 'calc(2.875rem + 2px)'};\r\n cssPatch.picks_sm = {minHeight: 'calc(1.8125rem + 2px)'};\r\n cssPatch.picks_floating_def = {minHeight: 'calc(3.5rem + 2px)'};\r\n\r\n cssPatch.picks_focus_valid = {borderColor: '', boxShadow: '0 0 0 0.2rem rgba(40, 167, 69, 0.25)'};\r\n cssPatch.picks_focus_invalid = {borderColor: '', boxShadow: '0 0 0 0.2rem rgba(220, 53, 69, 0.25)'}; \r\n}","import {defCall, composeSync} from '../ToolsJs';\r\n\r\nexport function LabelForAttributePlugin(defaults){\r\n defaults.label = null;\r\n return {\r\n plug\r\n }\r\n}\r\n\r\nexport function plug(configuration){\r\n var getLabelAspect = {getLabel : ()=>defCall(configuration.label)}\r\n var createFilterInputElementIdAspect = {\r\n createFilterInputElementId : ()=>defCall(configuration.filterInputElementId),\r\n }; \r\n return (aspects) => {\r\n aspects.getLabelAspect = getLabelAspect;\r\n aspects.createFilterInputElementIdAspect = createFilterInputElementIdAspect;\r\n return {\r\n layout: () => {\r\n var {filterDom, loadAspect, disposeAspect, staticDom} = aspects;\r\n\r\n loadAspect.load = composeSync(loadAspect.load, ()=>{\r\n let {filterInputElement} = filterDom;\r\n\r\n let labelElement = getLabelAspect.getLabel(); \r\n if (labelElement){\r\n let backupedForAttribute = labelElement.getAttribute('for');\r\n var inputId = createFilterInputElementIdAspect.createFilterInputElementId();\r\n \r\n if (!inputId){\r\n let {containerClass} = configuration;\r\n let {containerElement} = staticDom;\r\n inputId =`${containerClass}-generated-filter-${containerElement.id}` \r\n }\r\n filterInputElement.setAttribute('id', inputId);\r\n labelElement.setAttribute('for',inputId);\r\n if (backupedForAttribute){\r\n disposeAspect.dispose = composeSync(\r\n disposeAspect.dispose, \r\n () =>labelElement.setAttribute('for', backupedForAttribute)\r\n )\r\n }\r\n }\r\n })\r\n }\r\n }\r\n }\r\n}","\r\nimport {getIsRtl, AttributeBackup} from '../ToolsDom';\r\nimport {isBoolean} from '../ToolsJs';\r\n\r\nexport function RtlPlugin(){\r\n return {\r\n plug\r\n }\r\n}\r\n\r\nexport function plug(configuration){\r\n return (aspects) => {\r\n return {\r\n layout: () => {\r\n let {popperRtlAspect, staticDom} = aspects;\r\n let {isRtl} = configuration;\r\n let forceRtlOnContainer = false; \r\n if (isBoolean(isRtl))\r\n forceRtlOnContainer = true;\r\n else\r\n isRtl = getIsRtl(staticDom.initialElement);\r\n \r\n var attributeBackup = AttributeBackup();\r\n if (forceRtlOnContainer){\r\n attributeBackup.set(staticDom.containerElement, \"dir\", \"rtl\");\r\n }\r\n else if (staticDom.selectElement){\r\n var dirAttributeValue = staticDom.selectElement.getAttribute(\"dir\");\r\n if (dirAttributeValue){\r\n attributeBackup.set(staticDom.containerElement, \"dir\", dirAttributeValue);\r\n }\r\n }\r\n \r\n if (popperRtlAspect)\r\n popperRtlAspect.getIsRtl = () => isRtl;\r\n \r\n return {\r\n dispose(){\r\n attributeBackup.restore();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}","import {EventBinder, closestByTagName} from '../ToolsDom';\r\n\r\nexport function FormResetPlugin(){\r\n return {\r\n plug\r\n }\r\n}\r\n\r\nexport function plug(){\r\n return (aspects) => {\r\n return {\r\n layout: () => {\r\n var {staticDom, updateDataAspect, environment} = aspects;\r\n\r\n var eventBuilder = EventBinder();\r\n if (staticDom.selectElement){\r\n var form = closestByTagName(staticDom.selectElement, 'FORM');\r\n if (form) {\r\n eventBuilder.bind(form, \r\n 'reset', \r\n () => environment.window.setTimeout( ()=>updateDataAspect.updateData() ) );\r\n }\r\n }\r\n return {\r\n dispose(){\r\n eventBuilder.unbind();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}","import {ObservableValue, ObservableLambda, defCall, isBoolean, composeSync} from '../ToolsJs';\r\nimport {getDataGuardedWithPrefix} from '../ToolsDom';\r\n\r\nconst defValueMissingMessage = 'Please select an item in the list'\r\n\r\nexport function ValidationApiPlugin(o){\r\n preset(o);\r\n return {\r\n plug\r\n }\r\n}\r\n\r\nexport function preset(o){o.getValueRequired=() => false; o.valueMissingMessage='';}\r\n\r\nexport function plug(configuration){\r\n return (aspects) => {\r\n var getValueRequiredAspect = GetValueRequiredAspect(configuration.getValueRequired);\r\n aspects.getValueRequiredAspect = getValueRequiredAspect;\r\n return {\r\n layout: () => {\r\n var {triggerAspect, onChangeAspect, optionsAspect, \r\n staticDom, filterDom, updateDataAspect} = aspects;\r\n // TODO: required could be a function\r\n let {getIsValueMissing, valueMissingMessage, required} = configuration;\r\n if (!isBoolean(required))\r\n required = getValueRequiredAspect.getValueRequired(); \r\n valueMissingMessage = defCall(valueMissingMessage,\r\n ()=> getDataGuardedWithPrefix(staticDom.initialElement,\"bsmultiselect\",\"value-missing-message\"),\r\n defValueMissingMessage)\r\n \r\n if (!getIsValueMissing) {\r\n getIsValueMissing = () => {\r\n let count = 0;\r\n let optionsArray = optionsAspect.getOptions();\r\n for (var i=0; i < optionsArray.length; i++) {\r\n if (optionsArray[i].selected) \r\n count++;\r\n }\r\n return count===0;\r\n }\r\n }\r\n\r\n var isValueMissingObservable = ObservableLambda(()=>required && getIsValueMissing());\r\n var validationApiObservable = ObservableValue(!isValueMissingObservable.getValue());\r\n \r\n onChangeAspect.onChange = composeSync(isValueMissingObservable.call, onChangeAspect.onChange);\r\n updateDataAspect.updateData = composeSync(isValueMissingObservable.call, updateDataAspect.updateData);\r\n \r\n aspects.validationApiAspect = ValidationApiAspect(validationApiObservable);\r\n \r\n return {\r\n buildApi(api){\r\n api.validationApi = ValidityApi(\r\n filterDom.filterInputElement, \r\n isValueMissingObservable, \r\n valueMissingMessage,\r\n (isValid)=>validationApiObservable.setValue(isValid),\r\n triggerAspect.trigger\r\n );\r\n },\r\n dispose(){\r\n isValueMissingObservable.detachAll(); \r\n validationApiObservable.detachAll();\r\n }\r\n }\r\n },\r\n layoutInit: () => {\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction GetValueRequiredAspect(getValueRequired){\r\n return {\r\n getValueRequired\r\n }\r\n}\r\n\r\nfunction ValidationApiAspect(validationApiObservable){\r\n return {\r\n validationApiObservable\r\n }\r\n}\r\n\r\nfunction ValidityApi(visibleElement, isValueMissingObservable, valueMissingMessage, onValid, trigger){\r\n var customValidationMessage = \"\";\r\n var validationMessage = \"\";\r\n var validity = null;\r\n var willValidate = true;\r\n \r\n function setMessage(valueMissing, customError){\r\n validity = Object.freeze({\r\n valueMissing,\r\n customError,\r\n valid: !(valueMissing || customError),\r\n });\r\n validationMessage = customError?customValidationMessage:(valueMissing?valueMissingMessage:\"\")\r\n visibleElement.setCustomValidity(validationMessage);\r\n onValid(validity.valid);\r\n }\r\n\r\n setMessage(isValueMissingObservable.getValue(), false);\r\n\r\n isValueMissingObservable.attach(\r\n (value) => {\r\n setMessage(value, validity.customError);\r\n }\r\n );\r\n var checkValidity = () => {\r\n if (!validity.valid)\r\n trigger('dashboardcode.multiselect:invalid')\r\n return validity.valid;\r\n }\r\n return {\r\n validationMessage,\r\n willValidate,\r\n validity,\r\n setCustomValidity(message){\r\n customValidationMessage = message;\r\n setMessage(validity.valueMissing, customValidationMessage?true:false);\r\n },\r\n checkValidity,\r\n reportValidity(){\r\n visibleElement.reportValidity();\r\n return checkValidity();\r\n }\r\n }\r\n}","export function HiddenOptionPlugin(){\r\n return {\r\n plug\r\n }\r\n}\r\n\r\nexport function plug(configuration){\r\n return (aspects) => {\r\n return {\r\n layout: () => {\r\n let {createWrapAspect, isChoiceSelectableAspect,\r\n wrapsCollection, buildChoiceAspect, buildAndAttachChoiceAspect,\r\n countableChoicesListInsertAspect, countableChoicesList} = aspects;\r\n \r\n countableChoicesListInsertAspect.countableChoicesListInsert = (wrap, key) => {\r\n if ( !wrap.isOptionHidden ){\r\n let choiceNext = wrapsCollection.getNext(key, c=>!c.isOptionHidden );\r\n countableChoicesList.add(wrap, choiceNext)\r\n }\r\n }\r\n \r\n let origBuildAndAttachChoice = buildAndAttachChoiceAspect.buildAndAttachChoice;\r\n buildAndAttachChoiceAspect.buildAndAttachChoice=(wrap, getNextElement)=>{\r\n if (wrap.isOptionHidden){ \r\n buildHiddenChoice(wrap);\r\n }\r\n else{ \r\n origBuildAndAttachChoice(wrap, getNextElement);\r\n }\r\n }\r\n \r\n var origIsSelectable = isChoiceSelectableAspect.isSelectable;\r\n isChoiceSelectableAspect.isSelectable = (wrap) => origIsSelectable(wrap) && !wrap.isOptionHidden;\r\n \r\n let {getIsOptionHidden, options} = configuration;\r\n if (options) {\r\n if (!getIsOptionHidden)\r\n getIsOptionHidden = (option) => (option.hidden===undefined)?false:option.hidden; \r\n } else {\r\n if (!getIsOptionHidden)\r\n getIsOptionHidden = (option) => {\r\n return option.hidden; \r\n } \r\n }\r\n\r\n var origCreateWrap = createWrapAspect.createWrap;\r\n createWrapAspect.createWrap = (option) => {\r\n let wrap = origCreateWrap(option);\r\n wrap.isOptionHidden = getIsOptionHidden(option);\r\n return wrap;\r\n };\r\n \r\n return {\r\n buildApi(api){ \r\n let getNextNonHidden = (key) => wrapsCollection.getNext(key, c => !c.isOptionHidden );\r\n \r\n api.updateOptionsHidden = () => \r\n wrapsCollection.forLoop( (wrap, key) => \r\n updateChoiceHidden(wrap, key, getNextNonHidden, countableChoicesList, getIsOptionHidden, buildChoiceAspect)\r\n );\r\n \r\n api.updateOptionHidden = (key) => \r\n updateChoiceHidden(wrapsCollection.get(key), key, getNextNonHidden, countableChoicesList, getIsOptionHidden, buildChoiceAspect);\r\n // TODO create updateHidden ? \r\n // it is too complex since we need to find the next non hidden, when this depends on key \r\n // there should be the backreference \"wrap -> index\" invited before\r\n // api.updateOptionHidden = (key) => wrapsCollection.get(key).updateHidden();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction buildHiddenChoice(wrap){\r\n wrap.updateSelected = () => void 0;\r\n \r\n wrap.choice.isChoiceElementAttached = false;\r\n wrap.choice.choiceElement = null;\r\n wrap.choice.choiceElementAttach = null;\r\n wrap.choice.setVisible = null; \r\n wrap.choice.setHoverIn = null;\r\n wrap.choice.remove = null; \r\n \r\n wrap.choice.dispose = () => { \r\n wrap.choice.dispose = null;\r\n };\r\n\r\n wrap.dispose = () => { \r\n wrap.choice.dispose();\r\n wrap.dispose = null;\r\n };\r\n}\r\n\r\nfunction updateChoiceHidden(wrap, key, getNextNonHidden, countableChoicesList, getIsOptionHidden, buildChoiceAspect){\r\n let newIsOptionHidden = getIsOptionHidden(wrap.option);\r\n if (newIsOptionHidden != wrap.isOptionHidden)\r\n {\r\n wrap.isOptionHidden= newIsOptionHidden;\r\n if (wrap.isOptionHidden) {\r\n\r\n countableChoicesList.remove(wrap);\r\n wrap.choice.remove(); \r\n buildHiddenChoice(wrap);\r\n } else {\r\n let nextChoice = getNextNonHidden(key);\r\n countableChoicesList.add(wrap, nextChoice);\r\n buildChoiceAspect.buildChoice(wrap);\r\n wrap.choice.choiceElementAttach(nextChoice?.choice.choiceElement);\r\n }\r\n }\r\n}","import {createCss, extendCss} from '../ToolsStyling';\r\nimport {isBoolean} from '../ToolsJs';\r\n\r\nexport function CssPatchPlugin(defaults){\r\n defaults.useCssPatch = true;\r\n return {\r\n merge(configuration, settings){\r\n let cssPatch = settings?.cssPatch;\r\n if (isBoolean(cssPatch))\r\n throw new Error(\"BsMultiSelect: 'cssPatch' was used instead of 'useCssPatch'\") // often type of error\r\n configuration.cssPatch = createCss(defaults.cssPatch, cssPatch); // replace classes, merge styles\r\n },\r\n plug\r\n }\r\n}\r\n\r\nexport function plug(configuration){\r\n if (configuration.useCssPatch)\r\n extendCss(configuration.css, configuration.cssPatch);\r\n}\r\n\r\nconst _cssPatchBs5 = {\r\n choicesList: {listStyleType:'none', paddingLeft:'0', paddingRight:'0', marginBottom:'0'},\r\n picks: {listStyleType:'none', display:'flex', flexWrap:'wrap', height: 'auto', marginBottom: '0', cursor: 'text'},\r\n choice: {classes:'px-md-2 px-1', styles:{cursor:'pointer'}},\r\n //choice_selected: 'selected', // remove,\r\n //choice_disabled: 'disabled', // remove,\r\n choice_hover: 'text-primary bg-light', \r\n choice_disabled_hover: 'bg-light', // actually 'disabled, not selected'\r\n filterInput: {\r\n border:'0px', height: 'auto', boxShadow:'none', \r\n padding:'0', margin:'0', \r\n outline:'none', backgroundColor:'transparent',\r\n backgroundImage: 'none' // otherwise BS .was-validated set its image\r\n },\r\n filterInput_empty: 'form-control', // need for placeholder, TODO test form-control-plaintext\r\n\r\n // used in PicksDom\r\n picks_disabled: {backgroundColor: '#e9ecef'},\r\n\r\n picks_focus: {borderColor: '#80bdff', boxShadow: '0 0 0 0.2rem rgba(0, 123, 255, 0.25)'},\r\n picks_focus_valid: {borderColor: '', boxShadow: '0 0 0 0.2rem rgba(40, 167, 69, 0.25)'},\r\n picks_focus_invalid: {borderColor: '', boxShadow: '0 0 0 0.2rem rgba(220, 53, 69, 0.25)'},\r\n \r\n // used in BsAppearancePlugin\r\n picks_def: {minHeight: 'calc(2.25rem + 2px)'},\r\n picks_lg: {minHeight: 'calc(2.875rem + 2px)'},\r\n picks_sm: {minHeight: 'calc(1.8125rem + 2px)'},\r\n picks_floating_def: {minHeight: 'calc(3.5rem + 2px)'},\r\n \r\n // used in pickContentGenerator\r\n pick: {paddingLeft: '0', paddingRight: '.5rem', paddingInlineStart:'0', paddingInlineEnd:'0.5rem', color:'var(--bs-dark)'},\r\n pickButton: {fontSize:'0.8em', float : \"none\", verticalAlign: \"text-top\"},\r\n pickContent_disabled: {opacity: '.65'}, \r\n \r\n // used in choiceContentGenerator\r\n choiceContent: {justifyContent: 'flex-start', cursor:'inherit'}, // BS problem: without this on inline form menu items justified center\r\n choiceLabel: {color: 'inherit', cursor:'inherit'}, // otherwise BS .was-validated set its color\r\n choiceCheckBox: {color: 'inherit', cursor:'inherit'},\r\n choiceLabel_disabled: {opacity: '.65'}, // more flexible than {color: '#6c757d'}; note: avoid opacity on pickElement's border; TODO write to BS \r\n\r\n // floating plugin\r\n label_floating_lifted: {opacity: '.65', transform : 'scale(.85) translateY(-.5rem) translateX(.15rem)'},\r\n picks_floating_lifted: {paddingTop: '1.625rem', paddingLeft:'0.8rem', paddingBottom : '0'},\r\n\r\n warning: {paddingLeft: '.25rem', paddingRight: '.25rem', zIndex: 4, fontSize:'small', backgroundColor:'var(--bs-warning)'} // zIndex=4 since the input-group zIndex=3\r\n}\r\n\r\nconst _cssPatchBs4 = {\r\n choicesList: {listStyleType:'none', paddingLeft:'0', paddingRight:'0', marginBottom:'0'},\r\n picks: {listStyleType:'none', display:'flex', flexWrap:'wrap', height: 'auto', marginBottom: '0',cursor: 'text'},\r\n choice: {classes:'px-md-2 px-1', styles:{cursor:'pointer'}}, \r\n choice_hover: 'text-primary bg-light', \r\n choice_disabled_hover: 'bg-light',\r\n filterInput: {border:'0px', height: 'auto', boxShadow:'none', \r\n padding:'0', margin:'0', \r\n outline:'none', backgroundColor:'transparent',\r\n backgroundImage: 'none' // otherwise BS .was-validated set its image\r\n },\r\n filterInput_empty: 'form-control', // need for placeholder, TODO test form-control-plaintext\r\n\r\n // used in PicksDom\r\n picks_disabled: {backgroundColor: '#e9ecef'},\r\n\r\n picks_focus: {borderColor: '#80bdff', boxShadow: '0 0 0 0.2rem rgba(0, 123, 255, 0.25)'},\r\n picks_focus_valid: {borderColor: '', boxShadow: '0 0 0 0.2rem rgba(40, 167, 69, 0.25)'},\r\n picks_focus_invalid: {borderColor: '', boxShadow: '0 0 0 0.2rem rgba(220, 53, 69, 0.25)'},\r\n \r\n // used in BsAppearancePlugin\r\n picks_def: {minHeight: 'calc(2.25rem + 2px)'},\r\n picks_lg: {minHeight: 'calc(2.875rem + 2px)'},\r\n picks_sm: {minHeight: 'calc(1.8125rem + 2px)'},\r\n \r\n // used in pickContentGenerator\r\n pick: {lineHeight: '1.5em', paddingLeft: '0', paddingRight: '.5rem', paddingInlineStart:'0', paddingInlineEnd:'0.5rem'},\r\n pickButton: {fontSize:'1.5em', lineHeight: '.9em', float : \"none\"},\r\n pickContent_disabled: {opacity: '.65'}, \r\n \r\n // used in choiceContentGenerator\r\n choiceContent: {justifyContent: 'flex-start', cursor:'inherit'}, // BS problem: without this on inline form menu items justified center\r\n choiceLabel: {color: 'inherit', cursor:'inherit'}, // otherwise BS .was-validated set its color\r\n choiceCheckBox: {color: 'inherit', cursor:'inherit'},\r\n choiceLabel_disabled: {opacity: '.65'}, // more flexible than {color: '#6c757d'}; note: avoid opacity on pickElement's border; TODO write to BS4 \r\n\r\n warning: {paddingLeft: '.25rem', paddingRight: '.25rem', zIndex: 4, fontSize:'small', backgroundColor: 'var(--bs-warning)'}, // zIndex=4 since the input-group zIndex=3\r\n}\r\n\r\nconst _cssBs4 = {\r\n choices: 'dropdown-menu', // bs4, in bsmultiselect.scss as ul.dropdown-menu\r\n choicesList: '', // bs4, in bsmultiselect.scss as div.dropdown-menu>ul (first child)\r\n choice_hover: 'hover', // not bs4, in scss as 'ul.dropdown-menu li.hover'\r\n choice_selected: '', \r\n choice_disabled: '', \r\n\r\n picks: 'form-control', // bs4, in scss 'ul.form-control'\r\n picks_focus: 'focus', // not bs4, in scss 'ul.form-control.focus'\r\n picks_disabled: 'disabled', // not bs4, in scss 'ul.form-control.disabled'\r\n pick_disabled: '', \r\n \r\n pickFilter: '', \r\n filterInput: '',\r\n\r\n // used in pickContentGenerator\r\n pick: 'badge', // bs4\r\n pickContent: '',\r\n pickContent_disabled: 'disabled', // not bs4, in scss 'ul.form-control li span.disabled'\r\n pickButton: 'close', // bs4\r\n\r\n // used in choiceContentGenerator\r\n // choice: 'dropdown-item', // it seems like hover should be managed manually since there should be keyboard support\r\n choiceCheckBox_disabled: 'disabled', // not bs4, in scss as 'ul.form-control li .custom-control-input.disabled ~ .custom-control-label'\r\n choiceContent: 'custom-control custom-checkbox d-flex', // bs4 d-flex required for rtl to align items\r\n choiceCheckBox: 'custom-control-input', // bs4\r\n choiceLabel: 'custom-control-label justify-content-start',\r\n choiceLabel_disabled: '',\r\n\r\n warning: 'alert-warning bg-warning'\r\n}\r\n\r\nconst _cssBs5 = {\r\n choices: 'dropdown-menu', // bs, in bsmultiselect.scss as div.dropdown-menu\r\n choicesList: '', // bs, in bsmultiselect.scss as div.dropdown-menu>ul (first child)\r\n choice_hover: 'hover', // not bs, in scss as 'ul.dropdown-menu li.hover'\r\n choice_selected: 'selected', // not bs,\r\n choice_disabled: 'disabled', // not bs,\r\n picks: 'form-control', // bs, in scss 'ul.form-control'\r\n picks_focus: 'focus', // not bs, in scss 'ul.form-control.focus'\r\n picks_disabled: 'disabled', // not bs, in scss 'ul.form-control.disabled'\r\n pick_disabled: '', \r\n \r\n pickFilter: '', \r\n filterInput: '',\r\n\r\n // used in pickContentGenerator\r\n pick: {classes:'badge'}, // bs\r\n pickContent: '',\r\n pickContent_disabled: 'disabled', // not bs, in scss 'ul.form-control li span.disabled'\r\n pickButton: 'btn-close', // bs\r\n\r\n // used in choiceContentGenerator\r\n // choice: 'dropdown-item', // it seems like hover should be managed manually since there should be keyboard support\r\n choiceCheckBox_disabled: 'disabled', // not bs, in scss as 'ul.form-control li .custom-control-input.disabled ~ .custom-control-label'\r\n choiceContent: 'form-check', // bs d-flex required for rtl to align items\r\n choiceCheckBox: 'form-check-input', // bs\r\n choiceLabel: 'form-check-label',\r\n choiceLabel_disabled: '',\r\n\r\n label_floating_lifted: 'floating-lifted',\r\n picks_floating_lifted: 'floating-lifted',\r\n\r\n warning: 'alert-warning'\r\n}","import {CssPatchPlugin} from './CssPatchPlugin';\r\n\r\nimport {PickDomFactoryPlugCssPatchBs5} from '../PickDomFactory'\r\nimport {PicksDomFactoryPlugCssPatchBs5} from '../PicksDomFactory'\r\nimport {ChoiceDomFactoryPlugCssPatch} from '../ChoiceDomFactory'\r\nimport {ChoicesDomFactoryPlugCssPatch} from '../ChoicesDomFactory'\r\nimport {FilterDomFactoryPlugCssPatch} from '../FilterDomFactory'\r\n\r\nexport function CssPatchBs5Plugin(defaults){\r\n var cssPatch = {};\r\n \r\n PickDomFactoryPlugCssPatchBs5(cssPatch);\r\n PicksDomFactoryPlugCssPatchBs5(cssPatch);\r\n ChoiceDomFactoryPlugCssPatch(cssPatch);\r\n ChoicesDomFactoryPlugCssPatch(cssPatch);\r\n FilterDomFactoryPlugCssPatch(cssPatch);\r\n\r\n defaults.cssPatch = cssPatch;\r\n return CssPatchPlugin(defaults)\r\n}","export function JQueryMethodsPlugin(){\r\n return {\r\n plug\r\n }\r\n}\r\n\r\nexport function plug(){ \r\n return (aspects) => {\r\n return {\r\n layout: () => {\r\n let {staticDom, choicesDom, filterDom, picksList, picksDom} = aspects;\r\n return {\r\n buildApi(api){\r\n api.getContainer = () => staticDom.containerElement;\r\n api.getChoices = () => choicesDom.choicesElement;\r\n api.getChoicesList = () => choicesDom.choicesListElement;\r\n api.getFilterInput = () => filterDom.filterInputElement;\r\n api.getPicks = () => picksDom.picksElement;\r\n api.picksCount = () => picksList.getCount();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}","export function OptionsApiPlugin(){\r\n return {\r\n plug\r\n }\r\n}\r\n\r\nexport function plug(){\r\n return (aspects) => {\r\n return {\r\n layout: () => {\r\n let {buildAndAttachChoiceAspect, wraps, wrapsCollection, createWrapAspect, createChoiceBaseAspect,\r\n optionsAspect, resetLayoutAspect} = aspects;\r\n return {\r\n buildApi(api){\r\n \r\n api.updateOptionAdded = (key) => { // TODO: generalize index as key \r\n let options = optionsAspect.getOptions();\r\n let option = options[key];\r\n\r\n let wrap = createWrapAspect.createWrap(option);\r\n wrap.choice= createChoiceBaseAspect.createChoiceBase(option);\r\n wraps.insert(key, wrap);\r\n let nextChoice = ()=> wrapsCollection.getNext(key, c => c.choice.choiceElement);\r\n \r\n buildAndAttachChoiceAspect.buildAndAttachChoice(\r\n wrap,\r\n () => nextChoice()?.choice.choiceElement\r\n )\r\n }\r\n \r\n api.updateOptionRemoved = (key) => { // TODO: generalize index as key \r\n resetLayoutAspect.resetLayout(); // always hide 1st, then reset filter\r\n\r\n var wrap = wraps.remove(key);\r\n wrap.choice.remove?.();\r\n wrap.dispose?.();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}","import {composeSync} from '../ToolsJs';\r\n\r\nexport function FormRestoreOnBackwardPlugin(){\r\n return {\r\n plug\r\n }\r\n}\r\n\r\nexport function plug(){\r\n return (aspects) => {\r\n return {\r\n layout: () => {\r\n let {staticDom, environment, loadAspect, updateOptionsSelectedAspect} = aspects;\r\n let window = environment.window;\r\n \r\n if (staticDom.selectElement && updateOptionsSelectedAspect){\r\n loadAspect.load = composeSync(loadAspect.load,\r\n function(){\r\n // support browser's \"step backward\" and form's values restore\r\n if (window.document.readyState !=\"complete\"){\r\n window.setTimeout(function(){\r\n updateOptionsSelectedAspect.updateOptionsSelected();\r\n // there are no need to add more updates as api.updateWasValidated() because backward never trigger .was-validate\r\n // also backward never set the state to invalid\r\n });\r\n }\r\n })\r\n }\r\n }\r\n }\r\n }\r\n}","import {closestByTagName, findDirectChildByTagName, closestByClassName} from '../ToolsDom';\r\nimport {composeSync} from '../ToolsJs';\r\n\r\nexport function SelectElementPlugin(){\r\n return {plug}\r\n}\r\n\r\nexport function plug(configuration){\r\n return (aspects) => {\r\n return {\r\n plugStaticDom: ()=> {\r\n let {staticDomFactory, createElementAspect,\r\n componentPropertiesAspect, onChangeAspect, triggerAspect, optionsAspect, optGroupAspect, disposeAspect, getValueRequiredAspect} = aspects;\r\n\r\n let origStaticDomFactoryCreate = staticDomFactory.create;\r\n staticDomFactory.create = (choicesDomFactory, filterDomFactory, picksDomFactory) => {\r\n let {createStaticDom: origCreateStaticDom} = origStaticDomFactoryCreate(choicesDomFactory, filterDomFactory, picksDomFactory);\r\n return { \r\n createStaticDom(element, containerClass){\r\n let selectElement = null;\r\n let containerElement = null;\r\n let picksElement = null;\r\n if (element.tagName == 'SELECT') {\r\n selectElement = element;\r\n if (containerClass){\r\n containerElement = closestByClassName(selectElement, containerClass)\r\n if (containerElement)\r\n picksElement = findDirectChildByTagName(containerElement, 'UL');\r\n }\r\n } else if (element.tagName == 'DIV') {\r\n selectElement = findDirectChildByTagName(element, 'SELECT');\r\n if (selectElement) {\r\n if (containerClass){\r\n containerElement = closestByClassName(element, containerClass);\r\n if (containerElement)\r\n picksElement = findDirectChildByTagName(containerElement, 'UL');\r\n }\r\n } else {\r\n return origCreateStaticDom(element, containerClass);\r\n } \r\n }\r\n \r\n let disposableContainerElement = false;\r\n if (!containerElement) {\r\n containerElement = createElementAspect.createElement('DIV');\r\n containerElement.classList.add(containerClass);\r\n disposableContainerElement= true;\r\n }\r\n \r\n let isDisposablePicksElementFlag = false;\r\n if (!picksElement) {\r\n picksElement = createElementAspect.createElement('UL');\r\n isDisposablePicksElementFlag = true; \r\n }\r\n \r\n if (selectElement){\r\n var backupDisplay = selectElement.style.display;\r\n selectElement.style.display = 'none';\r\n var backupedRequired = selectElement.required;\r\n \r\n if (getValueRequiredAspect)\r\n getValueRequiredAspect.getValueRequired = function(){\r\n return backupedRequired;\r\n }\r\n \r\n if(selectElement.required===true)\r\n selectElement.required = false;\r\n \r\n let {getDisabled} = configuration;\r\n \r\n if(!getDisabled) {\r\n var fieldsetElement = closestByTagName(selectElement, 'FIELDSET');\r\n if (fieldsetElement) {\r\n componentPropertiesAspect.getDisabled = () => selectElement.disabled || fieldsetElement.disabled;\r\n } else {\r\n componentPropertiesAspect.getDisabled = () => selectElement.disabled;\r\n }\r\n }\r\n onChangeAspect.onChange = composeSync(() => triggerAspect.trigger('change'), onChangeAspect.onChange) \r\n optionsAspect.getOptions = () => selectElement.options;\r\n\r\n if (optGroupAspect){\r\n optGroupAspect.getOptionOptGroup = (option) => option.parentNode;\r\n optGroupAspect.getOptGroupText = (optGroup) => optGroup.label;\r\n optGroupAspect.getOptGroupId = (optGroup) => optGroup.id;\r\n }\r\n \r\n if (selectElement && aspects.createFilterInputElementIdAspect){\r\n var origCreateFilterInputElementId = aspects.createFilterInputElementIdAspect.createFilterInputElementId;\r\n \r\n aspects.createFilterInputElementIdAspect.createFilterInputElementId = () =>\r\n { \r\n let id = origCreateFilterInputElementId();\r\n if (!id) {\r\n id =`${containerClass}-generated-input-${((selectElement.id)?selectElement.id:selectElement.name).toLowerCase()}-id`;\r\n }\r\n return id;\r\n }\r\n }\r\n \r\n disposeAspect.dispose = composeSync(disposeAspect.dispose, () => {\r\n selectElement.required = backupedRequired;\r\n selectElement.style.display = backupDisplay;\r\n });\r\n }\r\n let choicesDom = choicesDomFactory.create();\r\n let filterDom = filterDomFactory.create(isDisposablePicksElementFlag);\r\n let picksDom = picksDomFactory.create(picksElement, isDisposablePicksElementFlag);\r\n \r\n let {choicesElement} = choicesDom; \r\n\r\n return {\r\n choicesDom,\r\n filterDom,\r\n picksDom,\r\n \r\n staticDom:{\r\n initialElement:element,\r\n containerElement,\r\n picksElement,\r\n isDisposablePicksElementFlag,\r\n selectElement\r\n }, \r\n \r\n staticManager:{\r\n appendToContainer(){ \r\n if (disposableContainerElement){\r\n selectElement.parentNode.insertBefore(containerElement, selectElement.nextSibling) \r\n containerElement.appendChild(choicesElement)\r\n }else {\r\n selectElement.parentNode.insertBefore(choicesElement, selectElement.nextSibling)\r\n }\r\n if (isDisposablePicksElementFlag)\r\n containerElement.appendChild(picksElement)\r\n },\r\n dispose(){ \r\n choicesElement.parentNode.removeChild(choicesElement);\r\n if (disposableContainerElement)\r\n selectElement.parentNode.removeChild(containerElement) \r\n if (isDisposablePicksElementFlag)\r\n containerElement.removeChild(picksElement)\r\n }\r\n }\r\n };\r\n }\r\n }\r\n }\r\n \r\n },\r\n layout: ()=>{\r\n var {loadAspect, environment} = aspects;\r\n var document = environment.window.document;\r\n\r\n var origLoadAspectLoop = loadAspect.loop;\r\n loadAspect.loop = function(){\r\n // browsers can change select value as part of \"autocomplete\" (IE11) at load time\r\n // or \"show preserved on go back\" (Chrome) after page is loaded but before \"ready\" event;\r\n // mote: they never \"restore\" selected-disabled options.\r\n // TODO: make the FROM Validation for 'selected-disabled' easy.\r\n if (document.readyState != 'loading'){\r\n origLoadAspectLoop();\r\n }else{\r\n var domContentLoadedHandler = function(){\r\n origLoadAspectLoop();\r\n document.removeEventListener(\"DOMContentLoaded\", domContentLoadedHandler);\r\n }\r\n document.addEventListener('DOMContentLoaded', domContentLoadedHandler); // IE9+\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import {composeSync} from '../ToolsJs';\r\n\r\n// TODO: there should be two new \"independent aspects\" AddPickAspect and RemovePickAspect \r\n// plugin should overdrive them : call setWrapSelected and etc\r\n// therefore there should new component API methods\r\n// addOptionPick(key) -> call addPick(pick) which returns removePick() \r\n// SetOptionSelectedAspect, OptionToggleAspect should be moved there \r\n// OptionToggleAspect overrided in DisabledOptionPlugin\r\n\r\nexport function SelectedOptionPlugin(){\r\n return {\r\n plug\r\n }\r\n}\r\n\r\nexport function plug(configuration){ \r\n return (aspects) => {\r\n let {getSelected : getIsOptionSelected, setSelected : setIsOptionSelected, options} = configuration;\r\n \r\n if (options) {\r\n if (!setIsOptionSelected){\r\n setIsOptionSelected = (option, value) => {option.selected = value};\r\n }\r\n if (!getIsOptionSelected)\r\n getIsOptionSelected = (option) => option.selected; \r\n } else { // selectElement\r\n if (!getIsOptionSelected){\r\n getIsOptionSelected = (option) => option.selected;\r\n }\r\n if (!setIsOptionSelected){\r\n setIsOptionSelected = (option, value) => {option.selected = value};\r\n // NOTE: adding this (setAttribute) break Chrome's html form reset functionality:\r\n // if (value) option.setAttribute('selected','');\r\n // else option.removeAttribute('selected');\r\n }\r\n }\r\n \r\n var getSelectedAspect = {getSelected: getIsOptionSelected};\r\n var setSelectedAspect = {setSelected: setIsOptionSelected};\r\n aspects.getSelectedAspect=getSelectedAspect;\r\n aspects.setSelectedAspect=setSelectedAspect;\r\n\r\n return {\r\n plugStaticDom: ()=> {\r\n // TODO: move to createEventHandlers\r\n let {wrapsCollection} = aspects;\r\n aspects.updateOptionsSelectedAspect = UpdateOptionsSelectedAspect(wrapsCollection, getSelectedAspect);\r\n },\r\n layout: () => {\r\n let {wrapsCollection, updateOptionsSelectedAspect,\r\n createWrapAspect, buildChoiceAspect, removePickAspect,\r\n resetLayoutAspect, picksList, isChoiceSelectableAspect, optionToggleAspect,\r\n /*inputAspect, filterDom, filterManagerAspect,*/ createPickHandlersAspect, addPickAspect, fullMatchAspect, \r\n onChangeAspect, filterPredicateAspect\r\n } = aspects;\r\n \r\n let origFilterPredicate = filterPredicateAspect.filterPredicate;\r\n filterPredicateAspect.filterPredicate = (wrap, text) =>\r\n !wrap.isOptionSelected && origFilterPredicate(wrap, text)\r\n \r\n \r\n let origBuildChoice = buildChoiceAspect.buildChoice;\r\n buildChoiceAspect.buildChoice= (wrap) => {\r\n origBuildChoice(wrap);\r\n wrap.updateSelected = () => {\r\n wrap.choice.choiceDomManagerHandlers.updateSelected();\r\n onChangeAspect.onChange();\r\n }\r\n wrap.dispose = composeSync( ()=>{wrap.updateSelected = null}, wrap.dispose)\r\n }\r\n \r\n // TODO: test this instead of wrap.updateSelected\r\n // function updateSelected(wrap){\r\n // if (wrap.pick){\r\n // if (wrap.isOptionSelected)\r\n // pickHandlers.producePick();\r\n // else {\r\n // pickHandlers.removeAndDispose();\r\n // pickHandlers.removeAndDispose=null;\r\n // }\r\n // }\r\n // wrap.choice.choiceDomManagerHandlers.updateSelected();\r\n // onChangeAspect.onChange();\r\n // }\r\n \r\n \r\n function composeUpdateSelected(wrap, booleanValue){\r\n return () => {\r\n wrap.isOptionSelected = booleanValue;\r\n wrap.updateSelected();\r\n }\r\n }\r\n \r\n function trySetWrapSelected(option, updateSelected, booleanValue){ // wrap.option\r\n let success = false;\r\n var confirmed = setSelectedAspect.setSelected(option, booleanValue); \r\n if (!(confirmed===false)) {\r\n updateSelected(); \r\n success = true;\r\n }\r\n return success;\r\n }\r\n \r\n let origCreateWrap = createWrapAspect.createWrap;\r\n createWrapAspect.createWrap = (option)=>{\r\n let wrap = origCreateWrap(option);\r\n wrap.isOptionSelected = getSelectedAspect.getSelected(option);\r\n wrap.updateSelected = null; // can it be combined ?\r\n return wrap;\r\n }\r\n \r\n \r\n let origToggle = optionToggleAspect.toggle; // TODO: improve design, no replace\r\n optionToggleAspect.toggle= (wrap) => {\r\n return trySetWrapSelected(wrap.option, composeUpdateSelected(wrap, !wrap.isOptionSelected), !wrap.isOptionSelected)\r\n }\r\n \r\n let origFullMatch = fullMatchAspect.fullMatch;\r\n fullMatchAspect.fullMatch = (wrap) => {\r\n return trySetWrapSelected(wrap.option, composeUpdateSelected(wrap, true), true);\r\n }\r\n \r\n let removePickOrig = removePickAspect.removePick; // TODO: improve design, no replace\r\n removePickAspect.removePick = (wrap, pick) => { // TODO: try remove pick\r\n return trySetWrapSelected(wrap.option, composeUpdateSelected(wrap, false), false);\r\n }\r\n \r\n \r\n let origCreatePickHandlers = createPickHandlersAspect.createPickHandlers;\r\n createPickHandlersAspect.createPickHandlers = (wrap)=>{\r\n let pickHandlers = origCreatePickHandlers(wrap);\r\n wrap.updateSelected = composeSync(\r\n ()=>{\r\n if (wrap.isOptionSelected){\r\n let pick = pickHandlers.producePick();\r\n wrap.pick = pick;\r\n pick.dispose = composeSync(pick.dispose, ()=>{wrap.pick=null;});\r\n }\r\n else {\r\n pickHandlers.removeAndDispose();\r\n pickHandlers.removeAndDispose=null;\r\n }\r\n },\r\n wrap.updateSelected\r\n )\r\n \r\n addPickAspect.addPick(wrap, pickHandlers); \r\n return pickHandlers;\r\n }\r\n \r\n let origAddPick = addPickAspect.addPick;\r\n addPickAspect.addPick = (wrap, pickHandlers) => {\r\n if (wrap.isOptionSelected){\r\n let pick = origAddPick(wrap, pickHandlers);\r\n wrap.pick = pick;\r\n pick.dispose = composeSync(pick.dispose, ()=>{wrap.pick=null;});\r\n return pick;\r\n }\r\n }\r\n \r\n \r\n return {\r\n buildApi(api){\r\n api.selectAll= ()=>{\r\n resetLayoutAspect.resetLayout(); // always hide 1st\r\n wrapsCollection.forLoop(\r\n wrap => {\r\n if (isChoiceSelectableAspect.isSelectable(wrap) && !wrap.isOptionSelected)\r\n trySetWrapSelected(wrap.option, composeUpdateSelected(wrap, true), true)\r\n }\r\n ); \r\n }\r\n \r\n api.deselectAll= ()=>{\r\n resetLayoutAspect.resetLayout(); // always hide 1st\r\n picksList.forEach(pick=>pick.setSelectedFalse())\r\n }\r\n \r\n api.setOptionSelected = (key, value) => {\r\n let wrap = wrapsCollection.get(key);\r\n return trySetWrapSelected(wrap.option, composeUpdateSelected(wrap, value), value);\r\n }\r\n \r\n // used in FormRestoreOnBackwardPlugin\r\n api.updateOptionsSelected = () => updateOptionsSelectedAspect.updateOptionsSelected();\r\n api.updateOptionSelected = (key) => updateChoiceSelected(wrapsCollection.get(key), getSelectedAspect)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction UpdateOptionsSelectedAspect(wrapsCollection, getSelectedAspect){\r\n return {\r\n updateOptionsSelected(){\r\n wrapsCollection.forLoop( wrap => updateChoiceSelected(wrap, getSelectedAspect));\r\n }\r\n }\r\n}\r\n\r\nfunction updateChoiceSelected(wrap, getSelectedAspect){\r\n let newIsSelected = getSelectedAspect.getSelected(wrap.option);\r\n if (newIsSelected != wrap.isOptionSelected)\r\n {\r\n wrap.isOptionSelected = newIsSelected;\r\n wrap.updateSelected?.(); // some hidden oesn't have element (and need to be updated)\r\n }\r\n}","import {composeSync} from '../ToolsJs';\r\n\r\nexport function DisabledOptionPlugin(){\r\n return {\r\n plug \r\n }\r\n}\r\n\r\nexport function plug(configuration){\r\n return (aspects) => {\r\n return {\r\n layout: () => {\r\n let {isChoiceSelectableAspect, createWrapAspect, buildChoiceAspect,\r\n filterPredicateAspect, wrapsCollection, optionToggleAspect, buildPickAspect } = aspects;\r\n \r\n let {getIsOptionDisabled, options} = configuration;\r\n if (options) {\r\n if (!getIsOptionDisabled)\r\n getIsOptionDisabled = (option) => (option.disabled===undefined) ? false : option.disabled; \r\n } else { // selectElement\r\n if (!getIsOptionDisabled)\r\n getIsOptionDisabled = (option) => option.disabled;\r\n }\r\n \r\n // TODO check this instead of wrap.updateDisabled\r\n // function updateDisabled(wrap){\r\n // wrap?.choice?.choiceDomManagerHandlers?.updateDisabled?.();\r\n // wrap?.pick?.pickDomManagerHandlers?.updateDisabled?.();\r\n // }\r\n \r\n let origCreateWrap = createWrapAspect.createWrap;\r\n createWrapAspect.createWrap = (option) => {\r\n let wrap = origCreateWrap(option);\r\n wrap.isOptionDisabled = getIsOptionDisabled(option); // TODO: remove usage wrap.isOptionDisabled\r\n wrap.updateDisabled = null; \r\n return wrap;\r\n };\r\n \r\n let origToggle = optionToggleAspect.toggle;\r\n optionToggleAspect.toggle = (wrap) => {\r\n let success = false;\r\n if (wrap.isOptionSelected!==undefined){\r\n if (wrap.isOptionSelected || !wrap.isOptionDisabled) // TODO: declare dependency on SelectedOptionPlugin\r\n success = origToggle(wrap);\r\n }\r\n else{\r\n if (!wrap.isOptionDisabled) {\r\n success = origToggle(wrap);\r\n }\r\n }\r\n return success;\r\n };\r\n \r\n let origIsSelectable = isChoiceSelectableAspect.isSelectable;\r\n isChoiceSelectableAspect.isSelectable = (wrap) => {\r\n return origIsSelectable(wrap) && !wrap.isOptionDisabled;\r\n };\r\n \r\n let origFilterPredicate = filterPredicateAspect.filterPredicate;\r\n filterPredicateAspect.filterPredicate = (wrap, text) => {\r\n return !wrap.isOptionDisabled && origFilterPredicate(wrap, text) ;\r\n };\r\n \r\n let origBuildChoice = buildChoiceAspect.buildChoice;\r\n buildChoiceAspect.buildChoice = (wrap) => {\r\n origBuildChoice(wrap);\r\n wrap.updateDisabled = wrap.choice.choiceDomManagerHandlers.updateDisabled\r\n wrap.choice.dispose = composeSync(()=>{wrap.updateDisabled=null;}, wrap.choice.dispose);\r\n }\r\n \r\n let origBuildPick = buildPickAspect.buildPick;\r\n buildPickAspect.buildPick = (wrap, removeOnButton) => {\r\n let pick = origBuildPick(wrap, removeOnButton);\r\n \r\n pick.updateDisabled = () => pick.pickDomManagerHandlers.updateDisabled();\r\n pick.dispose = composeSync(pick.dispose, ()=>{pick.updateDisabled=null});\r\n \r\n let choiceUpdateDisabledBackup = wrap.updateDisabled;\r\n wrap.updateDisabled = composeSync(choiceUpdateDisabledBackup, pick.updateDisabled); // add pickDisabled\r\n pick.dispose = composeSync(pick.dispose, \r\n ()=>{\r\n wrap.updateDisabled = choiceUpdateDisabledBackup; // remove pickDisabled\r\n wrap.updateDisabled(); // make \"true disabled\" without it checkbox only looks disabled\r\n }\r\n )\r\n return pick;\r\n }\r\n \r\n return {\r\n buildApi(api){\r\n api.updateOptionsDisabled = () => wrapsCollection.forLoop( wrap => updateChoiceDisabled(wrap, getIsOptionDisabled))\r\n api.updateOptionDisabled = (key) => updateChoiceDisabled(wrapsCollection.get(key), getIsOptionDisabled)\r\n }\r\n };\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction updateChoiceDisabled(wrap, getIsOptionDisabled){\r\n let newIsDisabled = getIsOptionDisabled(wrap.option);\r\n if (newIsDisabled != wrap.isOptionDisabled)\r\n {\r\n wrap.isOptionDisabled= newIsDisabled;\r\n wrap.updateDisabled?.(); // some hidden oesn't have element (and need to be updated)\r\n }\r\n}","export function PicksApiPlugin(){\r\n return {\r\n plug\r\n }\r\n}\r\n\r\nexport function plug(){\r\n return (aspects) => {\r\n return {\r\n layout: () => {\r\n let {picksList, createWrapAspect, createPickHandlersAspect, addPickAspect} = aspects;\r\n return {\r\n buildApi(api){\r\n api.forEachPeak = (f) => \r\n picksList.forEach(wrap=>f(wrap.option));\r\n // TODO: getHeadPeak\r\n api.getTailPeak = () => picksList.getTail()?.option;\r\n api.countPeaks = () => picksList.getCount();\r\n api.isEmptyPeaks = () => picksList.isEmpty();\r\n\r\n api.addPick = (option) => {\r\n let wrap = createWrapAspect.createWrap(option);\r\n // TODO should be moved to specific plugins\r\n wrap.updateDisabled = ()=>{};\r\n wrap.updateHidden = ()=>{};\r\n let pickHandlers = createPickHandlersAspect.createPickHandlers(wrap);\r\n addPickAspect.addPick(wrap, pickHandlers);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}","import {composeSync} from '../ToolsJs';\r\n\r\nexport function PicksPlugin(){\r\n return {\r\n plug\r\n }\r\n}\r\n\r\nexport function plug(configuration){\r\n return (aspects) => {\r\n return {\r\n plugStaticDom: ()=> {\r\n let {configuration, picksList} = aspects;\r\n let {picks} = configuration;\r\n if (picks) {\r\n let {add: origAdd, reset: origReset} = picksList;\r\n \r\n picksList.add = (e) => {\r\n let {remove, index} = origAdd(e);\r\n picks.push(e);\r\n return { remove: composeSync(remove, () => void picks.splice(index(), 1)), index};\r\n }\r\n \r\n picksList.reset = () => {\r\n origReset();\r\n picks.length = 0;\r\n }\r\n }\r\n },\r\n layout: () => {\r\n let {inputAspect, filterDom, filterManagerAspect} = aspects;\r\n let {picks, addOptionPicked} = configuration;\r\n /*\r\n if (!addOptionPicked){\r\n addOptionPicked = (option, index, value) => {\r\n if (value)\r\n picks.push(option);\r\n else\r\n picks.splice(index, 1);\r\n return true;\r\n };\r\n }\r\n \r\n function trySetWrapSelected(option, updateSelected, booleanValue){\r\n let success = false;\r\n var confirmed = setIsOptionSelected(option, booleanValue);\r\n if (!(confirmed===false)) {\r\n updateSelected();\r\n success = true;\r\n }\r\n return success;\r\n }\r\n \r\n let origProcessInput = inputAspect.processInput;\r\n inputAspect.processInput = () => {\r\n let origResult = origProcessInput();\r\n if (!origResult.isEmpty)\r\n {\r\n if ( filterManagerAspect.getNavigateManager().getCount() == 1)\r\n {\r\n // todo: move exact match to filterManager\r\n let fullMatchWrap = filterManagerAspect.getNavigateManager().getHead();\r\n let text = filterManagerAspect.getFilter();\r\n if (fullMatchWrap.choice.searchText == text)\r\n {\r\n let success = trySetWrapSelected(fullMatchWrap, true);\r\n if (success) {\r\n filterDom.setEmpty();\r\n origResult.isEmpty = true;\r\n }\r\n }\r\n }\r\n }\r\n return origResult;\r\n }*/\r\n }\r\n }\r\n }\r\n}","import {composeSync} from '../ToolsJs';\r\n\r\nexport function CreatePopperPlugin(){\r\n return {\r\n plug\r\n }\r\n}\r\n\r\nexport function plug(){ \r\n return (aspects) => {\r\n return {\r\n plugStaticDom(){\r\n let {environment} = aspects;\r\n var popperRtlAspect = PopperRtlAspect();\r\n aspects.popperRtlAspect = popperRtlAspect;\r\n\r\n let {createPopper, Popper, globalPopper} = environment;\r\n let createModifiersVX = null;\r\n let createPopperVX = null;\r\n if (Popper) { // V2\r\n createPopperVX = createPopper = (function(createPopperConstructor) {\r\n return function(anchorElement, element, popperConfiguration) {\r\n return new createPopperConstructor(anchorElement, element, popperConfiguration);\r\n }\r\n })(Popper);;\r\n createModifiersVX = CreateModifiersV1;\r\n } else if (createPopper) {\r\n createPopperVX = createPopper;\r\n createModifiersVX = CreateModifiersV2;\r\n } else if (globalPopper) {\r\n if (globalPopper.createPopper) {\r\n createPopperVX = globalPopper.createPopper;\r\n createModifiersVX = CreateModifiersV2;\r\n } else {\r\n createPopperVX = createPopper = (function(createPopperConstructor) {\r\n return function(anchorElement, element, popperConfiguration) {\r\n return new createPopperConstructor(anchorElement, element, popperConfiguration);\r\n }\r\n })(globalPopper);\r\n createModifiersVX = CreateModifiersV1;\r\n }\r\n } else {\r\n throw new Error(\"BsMultiSelect: Popper component (https://popper.js.org) is required\");\r\n }\r\n var createPopperConfigurationAspect = CreatePopperConfigurationAspect(createModifiersVX);\r\n aspects.createPopperAspect = CreatePopperAspect(createPopperVX, popperRtlAspect, createPopperConfigurationAspect); \r\n },\r\n attach(){\r\n let {createPopperAspect, filterDom, choicesDom, disposeAspect, staticManager, choicesVisibilityAspect, specialPicksEventsAspect} = aspects;\r\n CreatePopper_ConstrunctorAspect(createPopperAspect, filterDom, choicesDom, disposeAspect, staticManager, choicesVisibilityAspect, specialPicksEventsAspect);\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction CreatePopper_ConstrunctorAspect(createPopperAspect, filterDom, choicesDom, disposeAspect, staticManager, choicesVisibilityAspect, specialPicksEventsAspect){\r\n let filterInputElement = filterDom.filterInputElement;\r\n let choicesElement = choicesDom.choicesElement;\r\n\r\n let pop = createPopperAspect.createPopper(choicesElement, filterInputElement, true);\r\n\r\n staticManager.appendToContainer = composeSync(staticManager.appendToContainer, pop.init);\r\n\r\n var origBackSpace = specialPicksEventsAspect.backSpace;\r\n specialPicksEventsAspect.backSpace = (pick) => {origBackSpace(pick); pop.update();};\r\n\r\n disposeAspect.dispose = composeSync(disposeAspect.dispose, pop.dispose);\r\n\r\n choicesVisibilityAspect.updatePopupLocation = composeSync(\r\n choicesVisibilityAspect.updatePopupLocation, \r\n function(){pop.update();}\r\n );\r\n}\r\n\r\nfunction PopperRtlAspect(){\r\n return {\r\n getIsRtl(){\r\n return false;\r\n }\r\n }\r\n}\r\n\r\n// CreatePopperPlugin.attach = (aspects)=> {\r\n// let {createPopperAspect, filterDom, choicesDom, disposeAspect, staticManager, choicesVisibilityAspect, specialPicksEventsAspect} = aspects;\r\n// CreatePopper_ConstrunctorAspect(createPopperAspect, filterDom, choicesDom, disposeAspect, staticManager, choicesVisibilityAspect, specialPicksEventsAspect);\r\n// }\r\n\r\n// CreatePopperPlugin.plugStaticDom = (aspects) => {\r\n// let {environment} = aspects;\r\n// var popperRtlAspect = PopperRtlAspect();\r\n// aspects.popperRtlAspect = popperRtlAspect;\r\n\r\n// let {createPopper, Popper, globalPopper} = environment;\r\n// let createModifiersVX = null;\r\n// let createPopperVX = null;\r\n// if (Popper) { // V2\r\n// createPopperVX = createPopper = (function(createPopperConstructor) {\r\n// return function(anchorElement, element, popperConfiguration) {\r\n// return new createPopperConstructor(anchorElement, element, popperConfiguration);\r\n// }\r\n// })(Popper);;\r\n// createModifiersVX = CreateModifiersV1;\r\n// } else if (createPopper) {\r\n// createPopperVX = createPopper;\r\n// createModifiersVX = CreateModifiersV2;\r\n// } else if (globalPopper) {\r\n// if (globalPopper.createPopper) {\r\n// createPopperVX = globalPopper.createPopper;\r\n// createModifiersVX = CreateModifiersV2;\r\n// } else {\r\n// createPopperVX = createPopper = (function(createPopperConstructor) {\r\n// return function(anchorElement, element, popperConfiguration) {\r\n// return new createPopperConstructor(anchorElement, element, popperConfiguration);\r\n// }\r\n// })(globalPopper);\r\n// createModifiersVX = CreateModifiersV1;\r\n// }\r\n// } else {\r\n// throw new Error(\"BsMultiSelect: Popper component (https://popper.js.org) is required\");\r\n// }\r\n// var createPopperConfigurationAspect = CreatePopperConfigurationAspect(createModifiersVX);\r\n// aspects.createPopperAspect = CreatePopperAspect(createPopperVX, popperRtlAspect, createPopperConfigurationAspect);\r\n// }\r\n\r\nfunction CreateModifiersV1(preventOverflow){\r\n return {\r\n preventOverflow: {enabled:preventOverflow},\r\n hide: {enabled:false},\r\n flip: {enabled:false}\r\n };\r\n}\r\n\r\nfunction CreateModifiersV2(preventOverflow){\r\n var modifiers = [{\r\n name: 'flip',\r\n options: {\r\n fallbackPlacements: ['bottom'],\r\n },\r\n }\r\n ];\r\n if (preventOverflow) {\r\n modifiers.push({name: 'preventOverflow'});\r\n }\r\n return modifiers;\r\n}\r\n\r\nfunction CreatePopperAspect(createPopperVX, popperRtlAspect, createPopperConfigurationAspect){\r\n return {\r\n createPopper(element, anchorElement, preventOverflow){\r\n let popper = null;\r\n return {\r\n init(){\r\n var isRtl = popperRtlAspect.getIsRtl();\r\n var popperConfiguration = createPopperConfigurationAspect.createConfiguration(preventOverflow, isRtl);\r\n popper = createPopperVX(anchorElement, element, popperConfiguration); \r\n\r\n },\r\n update(){ \r\n popper.update(); // become async in popper 2; use forceUpdate if sync is needed? \r\n },\r\n dispose(){\r\n popper.destroy();\r\n }\r\n }\r\n }\r\n } \r\n}\r\n\r\nfunction CreatePopperConfigurationAspect(createModifiersVX){\r\n return {\r\n createConfiguration(preventOverflow, isRtl){\r\n let modifiers = createModifiersVX(preventOverflow);\r\n \r\n let popperConfiguration = {\r\n placement: 'bottom-start',\r\n modifiers: modifiers\r\n };\r\n\r\n if (isRtl){\r\n popperConfiguration.placement = 'bottom-end';\r\n }\r\n return popperConfiguration;\r\n }\r\n } \r\n}","// aka auto height and scrolling\r\nexport function ChoicesDynamicStylingPlugin(defaults){\r\n defaults.useChoicesDynamicStyling = false;\r\n defaults.choicesDynamicStyling = choicesDynamicStyling;\r\n defaults.minimalChoicesDynamicStylingMaxHeight = 20;\r\n return {\r\n plug\r\n }\r\n}\r\n\r\nexport function plug(configuration){ \r\n return (aspects) => {\r\n return {\r\n layout: () => {\r\n let {choicesDynamicStyling, useChoicesDynamicStyling} = configuration;\r\n if (useChoicesDynamicStyling) {\r\n let {choicesVisibilityAspect, specialPicksEventsAspect} = aspects;\r\n var origSetChoicesVisible = choicesVisibilityAspect.setChoicesVisible;\r\n choicesVisibilityAspect.setChoicesVisible = \r\n function(visible){\r\n if (visible)\r\n choicesDynamicStyling(aspects);\r\n origSetChoicesVisible(visible);\r\n };\r\n var origBackSpace = specialPicksEventsAspect.backSpace;\r\n specialPicksEventsAspect.backSpace = (pick) => { origBackSpace(pick); choicesDynamicStyling(aspects);};\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction choicesDynamicStyling(aspects){\r\n let {configuration, environment, choicesDom, navigateAspect} = aspects;\r\n let window = environment.window;\r\n let choicesElement = choicesDom.choicesElement;\r\n let minimalChoicesDynamicStylingMaxHeight = configuration.minimalChoicesDynamicStylingMaxHeight;\r\n\r\n //find height of the browser window\r\n var g = window.document.getElementsByTagName('body')[0],\r\n e = window.document.documentElement,\r\n y = window.innerHeight || e.clientHeight || g.clientHeight;\r\n \r\n //find position of choicesElement, if it's at the bottom of the page make the choicesElement shorter\r\n var pos = choicesElement.parentNode.getBoundingClientRect();\r\n var new_y = y - pos.top;\r\n \r\n //calculate multi select max-height\r\n var msHeight = Math.max(minimalChoicesDynamicStylingMaxHeight, Math.round((new_y * 0.85))); // Michalek: 0.85 is empiric value, without it list was longer than footer height ; TODO: propose better way\r\n \r\n //add css height value\r\n choicesElement.style.setProperty(\"max-height\", msHeight+\"px\");\r\n choicesElement.style.setProperty(\"overflow-y\", \"auto\");\r\n\r\n if (!choicesDom.ChoicesDynamicStylingPlugin_scrollHandle){\r\n choicesDom.ChoicesDynamicStylingPlugin_scrollHandle = true;\r\n var origNavigateAspectNavigate = navigateAspect.navigate;\r\n navigateAspect.navigate = function(down){\r\n var wrap = origNavigateAspectNavigate(down);\r\n if (wrap!= null && wrap.choice!=null && wrap.choice.choiceElement!=null)\r\n wrap.choice.choiceElement.scrollIntoView(false); // alignTo false - scroll to the top bottom of dropdown first\r\n // TODO: BUG if mouse left on the dropdow scroll to bottom and one after doesn't work properly\r\n return wrap;\r\n }\r\n }\r\n}\r\n","export function HighlightPlugin(defaults){\r\n defaults.useHighlighting = false;\r\n return {\r\n plug\r\n }\r\n}\r\n\r\nexport function plug(configuration){\r\n return (aspects) => {\r\n return {\r\n plugStaticDom(){\r\n if (configuration.useHighlighting)\r\n aspects.highlightAspect = HighlightAspect();\r\n },\r\n plugStaticDomFactories(){\r\n var {choiceDomFactory, optionPropertiesAspect} = aspects;\r\n \r\n var origCreateChoiceDomFactory = choiceDomFactory.create;\r\n choiceDomFactory.create = (choiceElement, wrap, toggle) => {\r\n var value = origCreateChoiceDomFactory(choiceElement, wrap, toggle);\r\n value.choiceDomManagerHandlers.updateHighlighted = ()=>{\r\n var text = optionPropertiesAspect.getText(wrap.option);\r\n var highlighter = aspects.highlightAspect.getHighlighter();\r\n if (highlighter)\r\n highlighter(choiceElement, value.choiceDom, text); \r\n else\r\n choiceElement.textContent = text;\r\n };\r\n return value;\r\n } \r\n },\r\n layout(){\r\n let {highlightAspect, filterManagerAspect, buildChoiceAspect} = aspects;\r\n if (highlightAspect){\r\n let origProcessEmptyInput = filterManagerAspect.processEmptyInput;\r\n filterManagerAspect.processEmptyInput = function(){\r\n highlightAspect.reset();\r\n origProcessEmptyInput(); \r\n }\r\n let origSetFilter = filterManagerAspect.setFilter;\r\n filterManagerAspect.setFilter = function(text){\r\n highlightAspect.set(text);\r\n origSetFilter(text);\r\n }\r\n let origBuildChoice = buildChoiceAspect.buildChoice;\r\n buildChoiceAspect.buildChoice = function(wrap){\r\n origBuildChoice(wrap);\r\n let origSetVisible = wrap.choice.setVisible;\r\n wrap.choice.setVisible = function(v){\r\n origSetVisible(v);\r\n wrap.choice.choiceDomManagerHandlers.updateHighlighted();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction HighlightAspect(){\r\n let highlighter = null;\r\n return {\r\n getHighlighter(){\r\n return highlighter;\r\n },\r\n set(filter){\r\n var guarded = filter.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n var regex = new RegExp(\"(\"+guarded+\")\",\"gi\");\r\n highlighter = function(e, choiceDom, text){\r\n // TODO replace with\r\n // var pos = text.indexOf(filter);\r\n e.innerHTML = text.replace(regex,\"$1\");\r\n // TODO to method\r\n // var nodes = e.querySelectorAll('u');\r\n // var array = Array.prototype.slice.call(nodes);\r\n // if (choiceDom.highlightedElements)\r\n // choiceDom.highlightedElements.concat(array);\r\n // else\r\n // choiceDom.highlightedElements = array;\r\n }\r\n },\r\n reset(){\r\n highlighter = null;\r\n }\r\n }\r\n}","import { composeSync } from \"../ToolsJs\";\r\n\r\nexport function CustomChoiceStylingsPlugin(defaults){\r\n defaults.customChoiceStylings = null;\r\n return {\r\n plug\r\n }\r\n}\r\n\r\nexport function plug(configuration){\r\n return (aspects) => {\r\n return {\r\n plugStaticDom: ()=> {\r\n let {choiceDomFactory} = aspects;\r\n let customChoiceStylings = configuration.customChoiceStylings;\r\n if (customChoiceStylings) {\r\n\r\n let customChoiceStylingsAspect = CustomChoiceStylingsAspect(customChoiceStylings);\r\n ExtendChoiceDomFactory(choiceDomFactory, customChoiceStylingsAspect);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction ExtendChoiceDomFactory(choiceDomFactory, customChoiceStylingsAspect){\r\n let origChoiceDomFactoryCreate = choiceDomFactory.create;\r\n choiceDomFactory.create = function(choiceElement, wrap, toggle){\r\n var o = origChoiceDomFactoryCreate(choiceElement, wrap, toggle);\r\n customChoiceStylingsAspect.customize(wrap, o.choiceDom, o.choiceDomManagerHandlers);\r\n return o;\r\n }\r\n}\r\n\r\nfunction CustomChoiceStylingsAspect(customChoiceStylings){\r\n return {\r\n customize(wrap, choiceDom, choiceDomManagerHandlers){\r\n var handlers = customChoiceStylings(choiceDom, wrap.option);\r\n\r\n if (handlers){\r\n function customChoiceStylingsClosure(custom){\r\n return function() {\r\n custom({\r\n isOptionSelected: wrap.isOptionSelected,\r\n isOptionDisabled: wrap.isOptionDisabled,\r\n isHoverIn: wrap.choice.isHoverIn,\r\n //isHighlighted: wrap.choice.isHighlighted // TODO isHighlighted should be developed\r\n });\r\n }\r\n }\r\n if (choiceDomManagerHandlers.updateHoverIn && handlers.updateHoverIn) \r\n choiceDomManagerHandlers.updateHoverIn \r\n = composeSync(choiceDomManagerHandlers.updateHoverIn, customChoiceStylingsClosure(handlers.updateHoverIn) );\r\n if (choiceDomManagerHandlers.updateSelected && handlers.updateSelected) \r\n choiceDomManagerHandlers.updateSelected \r\n = composeSync(choiceDomManagerHandlers.updateSelected, customChoiceStylingsClosure(handlers.updateSelected));\r\n if (choiceDomManagerHandlers.updateDisabled && handlers.updateDisabled) \r\n choiceDomManagerHandlers.updateDisabled\r\n = composeSync(choiceDomManagerHandlers.updateDisabled, customChoiceStylingsClosure(handlers.updateDisabled));\r\n if (choiceDomManagerHandlers.updateHighlighted && handlers.updateHighlighted) \r\n choiceDomManagerHandlers.updateHighlighted\r\n = composeSync(choiceDomManagerHandlers.updateHighlighted, customChoiceStylingsClosure(handlers.updateHighlighted));\r\n }\r\n }\r\n }\r\n}","import { composeSync } from \"../ToolsJs\";\r\n\r\nexport function CustomPickStylingsPlugin(defaults){\r\n defaults.customPickStylings = null;\r\n return {\r\n plug\r\n }\r\n}\r\n\r\nexport function plug(configuration){\r\n return (aspects) => {\r\n return {\r\n plugStaticDom: ()=> {\r\n let {componentPropertiesAspect, pickDomFactory} = aspects;\r\n let customPickStylings = configuration.customPickStylings;\r\n let customPickStylingsAspect = CustomPickStylingsAspect(componentPropertiesAspect, customPickStylings);\r\n ExtendPickDomFactory(pickDomFactory, customPickStylingsAspect);\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction ExtendPickDomFactory(pickDomFactory, customPickStylingsAspect){\r\n \r\n let origPickDomFactoryCreate = pickDomFactory.create;\r\n pickDomFactory.create = function(pickElement, wrap, removeOnButton){\r\n var o = origPickDomFactoryCreate(pickElement, wrap, removeOnButton);\r\n customPickStylingsAspect.customize(wrap, o.pickDom, o.pickDomManagerHandlers);\r\n return o;\r\n }\r\n}\r\n\r\nfunction CustomPickStylingsAspect(componentPropertiesAspect, customPickStylings){\r\n return {\r\n customize(wrap, pickDom, pickDomManagerHandlers){\r\n if (customPickStylings){\r\n var handlers = customPickStylings(pickDom, wrap.option);\r\n\r\n if (handlers){\r\n function customPickStylingsClosure(custom){\r\n return function() {\r\n custom({\r\n isOptionDisabled: wrap.isOptionDisabled,\r\n isComponentDisabled: componentPropertiesAspect.getDisabled()\r\n });\r\n }\r\n }\r\n if (pickDomManagerHandlers.updateDisabled && handlers.updateDisabled) \r\n pickDomManagerHandlers.updateDisabled \r\n = composeSync(pickDomManagerHandlers.updateDisabled, customPickStylingsClosure(handlers.updateDisabled));\r\n if (pickDomManagerHandlers.updateComponentDisabled && handlers.updateComponentDisabled) \r\n pickDomManagerHandlers.updateComponentDisabled \r\n = composeSync(pickDomManagerHandlers.updateComponentDisabled, customPickStylingsClosure(handlers.updateComponentDisabled));\r\n }\r\n }\r\n }\r\n }\r\n}","import {composeSync} from '../ToolsJs';\r\n\r\nexport function UpdateAppearancePlugin(){\r\n return {\r\n plug\r\n }\r\n}\r\n\r\nexport function plug(){\r\n return (aspects) => {\r\n return {\r\n layout: () => {\r\n var {updateAppearanceAspect, updateAspect, loadAspect} = aspects;\r\n\r\n updateAspect.update = composeSync(updateAspect.update, ()=>updateAppearanceAspect.updateAppearance())\r\n loadAspect.load = composeSync(loadAspect.load, ()=>updateAppearanceAspect.updateAppearance())\r\n\r\n return{\r\n buildApi(api){\r\n api.updateAppearance = ()=>updateAppearanceAspect.updateAppearance();\r\n }\r\n }\r\n },\r\n plugStaticDom: ()=> {\r\n aspects.updateAppearanceAspect = UpdateAppearanceAspect();\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction UpdateAppearanceAspect(){\r\n return {\r\n updateAppearance(){}\r\n }\r\n}","import {composeSync} from '../ToolsJs';\r\n\r\nexport function DisableComponentPlugin(){\r\n return {\r\n plug\r\n }\r\n}\r\n\r\nexport function plug(){ \r\n return (aspects) => {\r\n return {\r\n plugStaticDomFactories: () => {\r\n var {pickDomFactory, componentPropertiesAspect} = aspects;\r\n\r\n var origCreatePickDomFactory = pickDomFactory.create;\r\n pickDomFactory.create = (pickElement, wrap, remove) => {\r\n var value = origCreatePickDomFactory(pickElement, wrap, remove);\r\n value.pickDomManagerHandlers.updateComponentDisabled = () => {\r\n value.pickDom.pickButtonElement.disabled = componentPropertiesAspect.getDisabled()\r\n };\r\n return value;\r\n }\r\n },\r\n layout: () => {\r\n var {updateAppearanceAspect, picksList, picksDom, componentPropertiesAspect, picksElementAspect} = aspects;\r\n\r\n var origOnClick = picksElementAspect.onClick;\r\n\r\n var disableComponent = (isComponentDisabled)=>{\r\n picksList.forEach(pick=>pick.pickDomManagerHandlers.updateComponentDisabled())\r\n picksDom.disable(isComponentDisabled);\r\n }\r\n \r\n picksElementAspect.onClick = (handler)=>{\r\n disableComponent = (isComponentDisabled)=>{\r\n picksList.forEach(pick=>pick.pickDomManagerHandlers.updateComponentDisabled())\r\n picksDom.disable(isComponentDisabled);\r\n if (isComponentDisabled)\r\n picksElementAspect.onClickUnbind(); //componentDisabledEventBinder.unbind();\r\n else\r\n origOnClick(handler); //componentDisabledEventBinder.bind(picksElement, \"click\", handler); \r\n }\r\n } \r\n \r\n let isComponentDisabled; // state! \r\n function updateDisabled(){\r\n let newIsComponentDisabled = componentPropertiesAspect.getDisabled();\r\n if (isComponentDisabled!==newIsComponentDisabled){\r\n isComponentDisabled=newIsComponentDisabled;\r\n disableComponent(newIsComponentDisabled);\r\n }\r\n }\r\n \r\n updateAppearanceAspect.updateAppearance = composeSync(updateAppearanceAspect.updateAppearance, updateDisabled);\r\n \r\n return{\r\n buildApi(api){\r\n api.updateDisabled = updateDisabled;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}","import {composeSync} from '../ToolsJs';\r\nimport {getDataGuardedWithPrefix} from '../ToolsDom';\r\nimport {toggleStyling} from '../ToolsStyling';\r\nimport {ResetableFlag} from '../ToolsDom'\r\n\r\nexport function PlaceholderPlugin(){\r\n return {\r\n plug\r\n }\r\n}\r\n\r\nexport function plug(configuration){\r\n return (aspects) => {\r\n return {\r\n layout: () => {\r\n let {staticManager, picksList, picksDom, filterDom, staticDom, updateDataAspect,\r\n resetFilterListAspect, filterManagerAspect, environment} = aspects;\r\n let isIE11 = environment.isIE11;\r\n let {placeholder, css} = configuration;\r\n let {picksElement} = picksDom;\r\n let filterInputElement = filterDom.filterInputElement;\r\n \r\n function setPlaceholder(placeholder){\r\n filterInputElement.placeholder = placeholder;\r\n }\r\n if (isIE11){\r\n var ignoreNextInputResetableFlag = ResetableFlag(); \r\n let placeholderStopInputAspect = PlaceholderStopInputAspect(ignoreNextInputResetableFlag);\r\n var setPlaceholderOrig = setPlaceholder;\r\n setPlaceholder = function(placeholder){\r\n ignoreNextInputResetableFlag.set();\r\n setPlaceholderOrig(placeholder);\r\n }\r\n var origOnInput = filterDom.onInput;\r\n filterDom.onInput = (handler) => {\r\n origOnInput(\r\n ()=>{if (placeholderStopInputAspect.get()){\r\n placeholderStopInputAspect.reset();\r\n } else {\r\n handler();\r\n }\r\n });\r\n }\r\n }\r\n \r\n if (!placeholder){\r\n placeholder = getDataGuardedWithPrefix(staticDom.initialElement,\"bsmultiselect\",\"placeholder\");\r\n }\r\n \r\n function setEmptyInputWidth(isVisible){\r\n if(isVisible)\r\n filterInputElement.style.width ='100%';\r\n else \r\n filterInputElement.style.width ='2ch';\r\n }\r\n var emptyToggleStyling = toggleStyling(filterInputElement, css.filterInput_empty);\r\n function showPlacehodler(isVisible){\r\n if (isVisible)\r\n {\r\n setPlaceholder(placeholder?placeholder:'');\r\n picksElement.style.display = 'block';\r\n }\r\n else\r\n {\r\n setPlaceholder('');\r\n picksElement.style.display = 'flex';\r\n }\r\n emptyToggleStyling(isVisible);\r\n setEmptyInputWidth(isVisible);\r\n }\r\n showPlacehodler(true);\r\n \r\n function setDisabled(isComponentDisabled){ \r\n filterInputElement.disabled = isComponentDisabled;\r\n };\r\n let isEmpty = () => picksList.isEmpty() && filterDom.isEmpty()\r\n \r\n function updatePlacehodlerVisibility(){\r\n showPlacehodler(isEmpty());\r\n };\r\n function updateEmptyInputWidth(){\r\n setEmptyInputWidth(isEmpty())\r\n };\r\n \r\n let origDisable = picksDom.disable;\r\n picksDom.disable = (isComponentDisabled)=>{\r\n setDisabled(isComponentDisabled);\r\n origDisable(isComponentDisabled);\r\n };\r\n \r\n staticManager.appendToContainer = composeSync(staticManager.appendToContainer, updateEmptyInputWidth);\r\n \r\n filterManagerAspect.processEmptyInput = composeSync(updateEmptyInputWidth, filterManagerAspect.processEmptyInput);\r\n resetFilterListAspect.forceResetFilter = composeSync(resetFilterListAspect.forceResetFilter, updatePlacehodlerVisibility);\r\n \r\n let origAdd = picksList.add;\r\n picksList.add = (pick) => { \r\n let returnValue = origAdd(pick);\r\n if (picksList.getCount()==1 ){ // make flex\r\n if (filterDom.isEmpty()){\r\n setPlaceholder('');\r\n picksElement.style.display = 'flex';\r\n emptyToggleStyling(false);\r\n filterInputElement.style.width ='2ch';\r\n } else {\r\n picksElement.style.display = 'flex';\r\n }\r\n }\r\n pick.dispose = composeSync(pick.dispose, function()\r\n { \r\n if (isEmpty()) {\r\n showPlacehodler(true);\r\n }\r\n });\r\n return returnValue;\r\n };\r\n \r\n updateDataAspect.updateData = composeSync(updateDataAspect.updateData, updatePlacehodlerVisibility);\r\n }\r\n }\r\n }\r\n}\r\n\r\n// ie11 support\r\nfunction PlaceholderStopInputAspect(resetableFlag){\r\n return{\r\n get(){\r\n return resetableFlag.get();\r\n },\r\n reset(){\r\n return resetableFlag.reset();\r\n } \r\n }\r\n}","export function PlaceholderCssPatchPlugin(defaults){\r\n defaults.cssPatch.filterInput_empty = 'form-control'\r\n}","import {composeSync} from '../ToolsJs';\r\nimport {toggleStyling} from '../ToolsStyling';\r\n\r\nexport function FloatingLabelPlugin(defaults){\r\n defaults.css.label_floating_lifted = 'floating-lifted';\r\n defaults.css.picks_floating_lifted = 'floating-lifted'; \r\n return {\r\n plug\r\n }\r\n}\r\n\r\nexport function plug(configuration){ \r\n return (aspects) => {\r\n return {\r\n plugStaticDom: (aspects)=> {\r\n aspects.floatingLabelAspect = FloatingLabelAspect();\r\n },\r\n layout: () => {\r\n let {picksList, picksDom, filterDom, \r\n updateDataAspect, resetFilterListAspect, floatingLabelAspect, getLabelAspect} = aspects;\r\n let {css} = configuration;\r\n \r\n if (floatingLabelAspect.isFloatingLabel() ){\r\n let labelElement = getLabelAspect.getLabel(); \r\n let picksElement = picksDom.picksElement;\r\n \r\n var liftToggleStyling1 = toggleStyling(labelElement, css.label_floating_lifted);\r\n var liftToggleStyling2 = toggleStyling(picksElement, css.picks_floating_lifted);\r\n \r\n function liftedLabel(isEmpty){\r\n liftToggleStyling1(isEmpty);\r\n liftToggleStyling2(isEmpty);\r\n }\r\n \r\n let isEmpty = () => picksList.isEmpty() && filterDom.isEmpty() && !picksDom.getIsFocusIn();;\r\n \r\n function updateLiftedLabel(){\r\n liftedLabel(!isEmpty());\r\n };\r\n \r\n updateLiftedLabel();\r\n \r\n resetFilterListAspect.forceResetFilter = composeSync(resetFilterListAspect.forceResetFilter, updateLiftedLabel);\r\n \r\n let origAdd = picksList.add;\r\n picksList.add = (pick) => { \r\n let returnValue = origAdd(pick);\r\n if (picksList.getCount()==1) \r\n updateLiftedLabel()\r\n pick.dispose = composeSync(pick.dispose, ()=>\r\n { \r\n if (picksList.getCount()==0) \r\n updateLiftedLabel()\r\n })\r\n return returnValue;\r\n };\r\n \r\n var origToggleFocusStyling = picksDom.toggleFocusStyling;\r\n picksDom.toggleFocusStyling = () => {\r\n var isFocusIn = picksDom.getIsFocusIn();\r\n origToggleFocusStyling(isFocusIn);\r\n updateLiftedLabel();\r\n }\r\n \r\n updateDataAspect.updateData = composeSync(updateDataAspect.updateData, updateLiftedLabel);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction FloatingLabelAspect() {\r\n return {\r\n isFloatingLabel(){},\r\n }\r\n}","export function FloatingLabelCssPatchBs5Plugin(defaults){\r\n let cssPatch = defaults.cssPatch;\r\n cssPatch.label_floating_lifted = {opacity: '.65', transform : 'scale(.85) translateY(-.5rem) translateX(.15rem)'};\r\n cssPatch.picks_floating_lifted = {paddingTop: '1.625rem', paddingLeft:'0.8rem', paddingBottom : '0'};\r\n}","export function WarningCssPatchPlugin(defaults){\r\n defaults.cssPatch.warning = {paddingLeft: '.25rem', paddingRight: '.25rem', zIndex: 4, fontSize:'small', backgroundColor: 'var(--bs-warning)'}\r\n}","import {addStyling} from \"../ToolsStyling\";\r\nimport {composeSync} from '../ToolsJs';\r\n\r\nconst defNoResultsWarningMessage = 'No results found';\r\n\r\nexport function preset(o){o.noResultsWarning=defNoResultsWarningMessage; o.isNoResultsWarningEnabled=false;}\r\n\r\nexport function plug(configuration){\r\n return (aspects) => {\r\n return {\r\n layout: () => {\r\n let {choicesDom, createElementAspect, staticManager, afterInputAspect, filterManagerAspect, resetLayoutAspect} = aspects;\r\n let {css, noResultsWarning} = configuration;\r\n\r\n if (configuration.isNoResultsWarningEnabled){\r\n let warningAspect = WarningAspect(choicesDom, createElementAspect, staticManager, css);\r\n aspects.warningAspect = warningAspect;\r\n \r\n ExtendAfterInputAspect(afterInputAspect, warningAspect, filterManagerAspect, noResultsWarning);\r\n \r\n resetLayoutAspect.resetLayout = composeSync(() => warningAspect.hide(), resetLayoutAspect.resetLayout);\r\n }\r\n },\r\n attach: ()=> {\r\n let {createPopperAspect, filterDom, warningAspect, staticManager, disposeAspect} = aspects;\r\n if (warningAspect){\r\n let filterInputElement = filterDom.filterInputElement;\r\n\r\n let pop2 = createPopperAspect.createPopper(warningAspect.warningElement, filterInputElement, false);\r\n staticManager.appendToContainer = composeSync(staticManager.appendToContainer, pop2.init);\r\n\r\n var origWarningAspectShow = warningAspect.show;\r\n warningAspect.show = (msg) => {\r\n pop2.update();\r\n origWarningAspectShow(msg);\r\n }\r\n disposeAspect.dispose = composeSync(disposeAspect.dispose, pop2.dispose); \r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction ExtendAfterInputAspect(afterInputAspect, warningAspect, filterManagerAspect, noResultsWarning){\r\n var origVisible = afterInputAspect.visible;\r\n afterInputAspect.visible = (showChoices, visibleCount) => {\r\n warningAspect.hide(); \r\n origVisible(showChoices, visibleCount)\r\n }\r\n\r\n var origNotVisible = afterInputAspect.notVisible;\r\n afterInputAspect.notVisible = (hideChoices) => {\r\n origNotVisible(hideChoices);\r\n \r\n if (filterManagerAspect.getFilter())\r\n warningAspect.show(noResultsWarning); \r\n else\r\n warningAspect.hide();\r\n }\r\n}\r\n\r\nfunction WarningAspect(choicesDom, createElementAspect, staticManager, css){\r\n let choicesElement = choicesDom.choicesElement;\r\n\r\n var warningElement = createElementAspect.createElement('DIV'); \r\n \r\n var origAppendToContainer = staticManager.appendToContainer;\r\n staticManager.appendToContainer = function(){\r\n origAppendToContainer();\r\n choicesElement.parentNode.insertBefore(warningElement, choicesElement.nextSibling); // insert after\r\n }\r\n\r\n warningElement.style.display = 'none';\r\n addStyling(warningElement, css.warning);\r\n\r\n\r\n return {\r\n warningElement,\r\n show(message){\r\n warningElement.style.display = 'block';\r\n warningElement.innerHTML = message;\r\n },\r\n hide(){\r\n warningElement.style.display = 'none';\r\n warningElement.innerHTML = \"\";\r\n }\r\n }\r\n}","import {plug as plug2, preset as preset2} from './WarningPlugin';\r\n\r\nexport function WarningBs5Plugin(defaults){\r\n preset(defaults);\r\n return {plug:plug2};\r\n}\r\n\r\nexport function preset(defaults){\r\n defaults.css.warning = 'alert-warning';\r\n preset2(defaults);\r\n}\r\n","import {\r\n BsAppearanceBs4Plugin, BsAppearanceBs5Plugin, \r\n \r\n CssPatchBs4Plugin, CssPatchBs5Plugin,\r\n BsAppearanceBs4CssPatchPlugin, BsAppearanceBs5CssPatchPlugin,\r\n \r\n SelectElementPlugin, \r\n LabelForAttributePlugin, ValidationApiPlugin, \r\n UpdateAppearancePlugin, \r\n \r\n DisableComponentPlugin,\r\n FormResetPlugin, CreatePopperPlugin, RtlPlugin, PlaceholderPlugin, PlaceholderCssPatchPlugin, \r\n OptionsApiPlugin, \r\n JQueryMethodsPlugin, \r\n SelectedOptionPlugin, FormRestoreOnBackwardPlugin, \r\n DisabledOptionPlugin, PicksApiPlugin, HighlightPlugin,\r\n ChoicesDynamicStylingPlugin, CustomPickStylingsPlugin, CustomChoiceStylingsPlugin,\r\n \r\n FloatingLabelPlugin, FloatingLabelCssPatchBs5Plugin, \r\n \r\n WarningCssPatchPlugin, WarningBs4Plugin, WarningBs5Plugin,\r\n\r\n PicksPlugin,\r\n\r\n HiddenOptionPlugin,\r\n /*HiddenOptionAltPlugin as HiddenOptionPlugin*/} from './plugins/index'\r\n\r\nimport {shallowClearClone} from './ToolsJs'\r\n\r\n\r\nexport let Bs4PluginSet = {BsAppearanceBs4Plugin, WarningBs4Plugin, CssPatchBs4Plugin, BsAppearanceBs4CssPatchPlugin }\r\n\r\nexport let Bs5PluginSet = {BsAppearanceBs5Plugin, WarningBs5Plugin, CssPatchBs5Plugin, BsAppearanceBs5CssPatchPlugin, FloatingLabelCssPatchBs5Plugin }\r\n\r\nexport let multiSelectPlugins = {SelectElementPlugin, \r\n LabelForAttributePlugin, HiddenOptionPlugin, ValidationApiPlugin, \r\n UpdateAppearancePlugin, \r\n DisableComponentPlugin,\r\n FormResetPlugin, CreatePopperPlugin, WarningCssPatchPlugin, RtlPlugin, PlaceholderPlugin, PlaceholderCssPatchPlugin, FloatingLabelPlugin, OptionsApiPlugin, \r\n JQueryMethodsPlugin, \r\n SelectedOptionPlugin, FormRestoreOnBackwardPlugin, \r\n DisabledOptionPlugin, PicksApiPlugin, HighlightPlugin,\r\n ChoicesDynamicStylingPlugin, CustomPickStylingsPlugin, CustomChoiceStylingsPlugin};\r\n\r\nexport let picksPlugins = {PicksPlugin, \r\n LabelForAttributePlugin, ValidationApiPlugin, \r\n UpdateAppearancePlugin, \r\n DisableComponentPlugin, \r\n CreatePopperPlugin, WarningCssPatchPlugin, RtlPlugin, PlaceholderPlugin, PlaceholderCssPatchPlugin, FloatingLabelPlugin, OptionsApiPlugin, \r\n JQueryMethodsPlugin, PicksApiPlugin, HighlightPlugin,\r\n ChoicesDynamicStylingPlugin, CustomPickStylingsPlugin, CustomChoiceStylingsPlugin};\r\n\r\nexport let allPlugins = shallowClearClone(multiSelectPlugins, {PicksPlugin});\r\n\r\n\r\n\r\n\r\n// var defaultConfig = {\r\n// plugins: multiSelectPlugins\r\n// }\r\n\r\n// var picksConfig = {\r\n// plugins: picksPlugins\r\n// }\r\n\r\n// export function createConfig(arg){\r\n// return config;\r\n// }","import {PickDomFactoryPlugCssBs5, PickDomFactoryPlugCssBs4} from './PickDomFactory'\r\nimport {PicksDomFactoryPlugCss} from './PicksDomFactory'\r\nimport {ChoiceDomFactoryPlugCssBs5, ChoiceDomFactoryPlugCssBs4} from './ChoiceDomFactory'\r\nimport {ChoicesDomFactoryPlugCss} from './ChoicesDomFactory'\r\nimport {FilterDomFactoryPlugCss} from './FilterDomFactory'\r\n\r\nexport function createDefaultCssBs5(){\r\n var defaultCss={};\r\n PickDomFactoryPlugCssBs5(defaultCss)\r\n PicksDomFactoryPlugCss(defaultCss)\r\n ChoiceDomFactoryPlugCssBs5(defaultCss)\r\n ChoicesDomFactoryPlugCss(defaultCss)\r\n FilterDomFactoryPlugCss(defaultCss)\r\n return defaultCss;\r\n}\r\n\r\nexport function createDefaultCssBs4(){ \r\n var defaultCss={}\r\n PickDomFactoryPlugCssBs4(defaultCss)\r\n PicksDomFactoryPlugCss(defaultCss)\r\n ChoiceDomFactoryPlugCssBs4(defaultCss)\r\n ChoicesDomFactoryPlugCss(defaultCss)\r\n FilterDomFactoryPlugCss(defaultCss)\r\n return defaultCss;\r\n}","import {composeSync} from './ToolsJs'\r\nimport {EventBinder} from './ToolsDom'\r\nimport {addStyling, toggleStyling} from './ToolsStyling'\r\n\r\nexport let utilities = {composeSync, EventBinder, addStyling, toggleStyling}"]}