dashboard-ui/modules/multiselect/multiselect.js
2023-08-31 15:30:17 +02:00

1 line
11 KiB
JavaScript

define(["exports","./../dom.js","./../common/playback/playbackmanager.js","./../emby-apiclient/connectionmanager.js","./../common/itemmanager/itemmanager.js","./../shortcuts.js","./../commandprocessor.js","./../common/textencoding.js"],function(_exports,_dom,_playbackmanager,_connectionmanager,_itemmanager,_shortcuts,_commandprocessor,_textencoding){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,require(["css!modules/multiselect/multiselect.css"]);var rangeSelectionInfo,currentSelectionCommandsPanel,currentHeader,selectedItems=[],selectedItemsMap={},appHeader=document.querySelector(".skinHeader");function getSelectedItemsMap(serverId){return selectedItemsMap[serverId=serverId||"0"]||(selectedItemsMap[serverId]={})}function hideSelections(){_dom.default.removeEventListener(window,"keydown",onKeyDown,{});var selectionCommandsPanel=currentSelectionCommandsPanel;if(selectionCommandsPanel){selectionCommandsPanel.parentNode.removeChild(selectionCommandsPanel),selectedItems=[],selectedItemsMap={},rangeSelectionInfo=currentSelectionCommandsPanel=null;for(var elems=document.querySelectorAll(".multi-select-active"),i=0,length=elems.length;i<length;i++)elems[i].classList.remove("multi-select-active"),_dom.default.removeEventListener(elems[i],"pointerenter",onPointerEnter,{passive:!0,capture:!0}),elems[i].dispatchEvent(new CustomEvent("multiselectinactive",{bubbles:!0,cancelable:!1,detail:{}}));for(i=0,length=(elems=document.querySelectorAll(".chkItemSelect:checked")).length;i<length;i++)elems[i].checked=!1,elems[i].classList.remove("chkItemSelect-selecthint");for(i=0,length=(elems=document.querySelectorAll(".item-multiselected")).length;i<length;i++)elems[i].classList.remove("item-multiselected")}currentHeader&&(currentHeader.classList.remove("headroomDisabled"),currentHeader=null)}function onCommandButtonClick(e){var items,e=e.target.closest("button");if(e)return items=selectedItems,_commandprocessor.default.executeCommand(e.getAttribute("data-command"),items,{}).then(hideSelections)}function mapApiClientArrayToObject(responses){for(var map={},i=0,length=responses.length;i<length;i++){var user=responses[i];map[user.ServerId]=user}return map}function showMenuForSelectedItems(e){var items=selectedItems,button=e.target.closest("button");return function(items){for(var promises=[],servers={},i=0,length=items.length;i<length;i++){var item=items[i],serverId=item.ServerId;serverId&&!servers[serverId]&&(servers[serverId]=!0,promises.push(_connectionmanager.default.getApiClient(item).getCurrentUser()))}return Promise.all(promises).then(mapApiClientArrayToObject)}(items).then(function(users){return require(["itemContextMenu"]).then(function(responses){return responses[0].show({items:items,hasItemIcon:!0,positionTo:button,users:users,multiSelect:!1,positionY:"bottom"}).then(hideSelections)})})}function getSelectedItemIdentifier(item){return item.PlaylistItemId||item.Id}function isPrimaryCommand(command){return!0===command.primaryCommand}function showHideQuickButtons(){var panel=currentSelectionCommandsPanel;if(panel){var panel=panel.querySelector(".multiSelectPrimaryButtons"),items=selectedItems;if(items.length){var user=_connectionmanager.default.getApiClient(items[0]).getCurrentUserCached();if(user){for(var commands=_itemmanager.default.getCommands({items:items,user:user}).filter(isPrimaryCommand),html="",buttonCount=0,i=0,length=commands.length;i<length&&buttonCount<3;i++){var command=commands[i],name=_textencoding.default.htmlEncode(command.name);html+='<button is="paper-icon-button-light" data-command="'+command.id+'" class="md-icon autortl" title="'+name+'" aria-label="'+name+'">'+command.icon+"</button>",buttonCount++}panel.innerHTML=html}else panel.innerHTML=""}else panel.innerHTML=""}}function addOrRemoveSelectedItem(item,itemElement,add){var serverId=item.ServerId,id=getSelectedItemIdentifier(item);add?(itemElement&&itemElement.classList.add("item-multiselected"),selectedItems.filter(function(i){return getSelectedItemIdentifier(i)===id&&i.ServerId===serverId}).length||(selectedItems.push(item),getSelectedItemsMap(serverId)[id]=!0)):(itemElement&&itemElement.classList.remove("item-multiselected"),selectedItems=selectedItems.filter(function(i){return getSelectedItemIdentifier(i)!==id||i.ServerId!==serverId}),getSelectedItemsMap(serverId)[id]=null)}function onPointerEnter(e){var target;rangeSelectionInfo&&(target=e.target).matches(this.getItemSelector())&&setRangeSelectionInfo(e,this,target,!0)}function showSelections(chkItemSelect,selected){chkItemSelect.classList.contains("chkItemSelect")||(chkItemSelect=chkItemSelect.querySelector(".chkItemSelect")),null==selected?selected=chkItemSelect.checked:chkItemSelect.checked=selected;var itemsContainer=chkItemSelect.closest("[is=emby-itemscontainer]"),itemElement=_shortcuts.default.getItemElementFromChildNode(chkItemSelect,!0,itemsContainer);addOrRemoveSelectedItem(_shortcuts.default.getItemFromChildNode(itemElement,null,itemsContainer),itemElement,selected),selectedItems.length?(_dom.default.removeEventListener(window,"keydown",onKeyDown,{}),_dom.default.addEventListener(window,"keydown",onKeyDown,{}),itemsContainer.classList.contains("multi-select-active")||_dom.default.addEventListener(itemsContainer,"pointerenter",onPointerEnter,{passive:!0,capture:!0}),itemsContainer.classList.add("multi-select-active"),itemsContainer.dispatchEvent(new CustomEvent("multiselectactive",{bubbles:!0,cancelable:!1,detail:{}})),function(chkItemSelect){var header,selectionCommandsPanel=currentSelectionCommandsPanel;selectionCommandsPanel||((selectionCommandsPanel=document.createElement("div")).classList.add("selectionCommandsPanel"),header=(null==(chkItemSelect=chkItemSelect.closest(".dialog"))?void 0:chkItemSelect.querySelector(".formDialogHeader"))||appHeader,(currentHeader=header).appendChild(selectionCommandsPanel),header.classList.add("headroomDisabled"),chkItemSelect&&(chkItemSelect.removeEventListener("close",hideSelections),chkItemSelect.addEventListener("close",hideSelections)),(currentSelectionCommandsPanel=selectionCommandsPanel).innerHTML='<button is="paper-icon-button-light" class="btnCloseSelectionPanel"><i class="md-icon">close</i></button><h1 class="itemSelectionCount"></h1><div class="multiSelectActionsContainer flex align-items-center"><div class="multiSelectPrimaryButtons flex align-items-center"></div><button is="paper-icon-button-light" class="btnSelectionPanelOptions md-icon">&#xE5D3;</button></div>',selectionCommandsPanel.querySelector(".btnCloseSelectionPanel").addEventListener("click",hideSelections),selectionCommandsPanel.querySelector(".multiSelectPrimaryButtons").addEventListener("click",onCommandButtonClick),header=selectionCommandsPanel.querySelector(".btnSelectionPanelOptions"),_dom.default.addEventListener(header,"click",showMenuForSelectedItems,{passive:!0}))}(chkItemSelect),(itemElement=document.querySelector(".itemSelectionCount"))&&(itemElement.innerHTML=selectedItems.length)):hideSelections(),showHideQuickButtons()}function onChange(e){var target=e.target,chkItemSelect=target.closest(".chkItemSelect");if(chkItemSelect)if(_shortcuts.default.getItemElementFromChildNode(target,!0,this))return showSelections(chkItemSelect,chkItemSelect.checked),e.preventDefault(),e.stopPropagation(),!1}var supportsTouchEvent="ontouchstart"in document.documentElement;function setRangeSelectionInfo(e,itemsContainer,target,isHintOnly){var pointerType=(pointerType=e.pointerType)||(supportsTouchEvent?"touch":"mouse");if("touch"!==pointerType){pointerType=_shortcuts.default.getItemElementFromChildNode(target,!0,itemsContainer);if(pointerType){target=itemsContainer.indexOfElement(pointerType),pointerType=rangeSelectionInfo;if(e.shiftKey&&pointerType)pointerType.itemsContainer===itemsContainer&&!function(rangeInfo,endIndex,isHintOnly){for(var previousEndIndex=rangeInfo.endIndex,startIndex=(isHintOnly||(rangeInfo.endIndex=endIndex),rangeInfo.startIndex),newRangeMin=Math.min(startIndex,endIndex),newRangeMax=Math.max(startIndex,endIndex),minIndexForUpdates=null==previousEndIndex?newRangeMin:Math.min(startIndex,Math.min(endIndex,previousEndIndex)),maxIndexForUpdates=null==previousEndIndex?newRangeMax:Math.max(startIndex,Math.max(endIndex,previousEndIndex)),itemsContainer=rangeInfo.itemsContainer,hinted=(console.log("changeSelectionRange: minIndexForUpdates: "+minIndexForUpdates+", maxIndexForUpdates: "+maxIndexForUpdates+", newRangeMin: "+newRangeMin+", newRangeMax: "+newRangeMax),[]),i=minIndexForUpdates;i<=maxIndexForUpdates;i++){var itemElement,isChecked,newChecked,item=itemsContainer.getItem(i);item&&(isChecked=(itemElement=null==(itemElement=itemsContainer.getElement(i))?void 0:itemElement.querySelector(".chkItemSelect"))?itemElement.checked:isSelected(item),newChecked=newRangeMin<=i&&i<=newRangeMax,isHintOnly?itemElement&&(newChecked&&!isChecked?(itemElement.classList.add("chkItemSelect-selecthint"),hinted.push(itemElement)):itemElement.classList.remove("chkItemSelect-selecthint")):isChecked!==newChecked&&(itemElement?(itemElement.checked=newChecked,itemElement.dispatchEvent(new CustomEvent("change",{bubbles:!0,cancelable:!1}))):addOrRemoveSelectedItem(item,null,newChecked)))}if(isHintOnly)for(var hintedElems=itemsContainer.querySelectorAll(".chkItemSelect-selecthint"),_i=0,length=hintedElems.length;_i<length;_i++){var elem=hintedElems[_i];hinted.includes(elem)||elem.classList.remove("chkItemSelect-selecthint")}showHideQuickButtons()}(pointerType,target,isHintOnly);else if(isHintOnly)for(var elems=document.querySelectorAll(".chkItemSelect-selecthint"),i=0,length=elems.length;i<length;i++)elems[i].classList.remove("chkItemSelect-selecthint");else rangeSelectionInfo=pointerType={itemsContainer:itemsContainer,startIndex:target}}}}function onKeyDown(e){var target;" "!==e.key||(target=e.target).closest("button,a")||(target=target.closest(".itemsContainer"))&&(e.preventDefault(),onContainerClick.call(target,e))}function onContainerClick(e){var target=e.target,chkItemSelectContainer=target.closest(".chkItemSelectContainer");if(chkItemSelectContainer)return setRangeSelectionInfo(e,this,target),!1;if(selectedItems.length){var itemElement=_shortcuts.default.getItemElementFromChildNode(target,!0,this);if(itemElement)if(!chkItemSelectContainer)return showSelections(chkItemSelectContainer=itemElement.querySelector(".chkItemSelect"),!chkItemSelectContainer.checked),setRangeSelectionInfo(e,this,target),e.preventDefault(),e.stopPropagation(),!1}}function MultiSelect(options){options.container.addEventListener("change",onChange)}function isSelected(item){var id=getSelectedItemIdentifier(item);return!!id&&getSelectedItemsMap(item.ServerId)[id]}document.addEventListener("viewbeforehide",hideSelections),MultiSelect.prototype.showSelections=showSelections,MultiSelect.prototype.onContainerClick=onContainerClick,MultiSelect.isSelected=isSelected,MultiSelect.canPlay=function(){for(var items=selectedItems,i=0,length=items.length;i<length;i++)if(_playbackmanager.default.canPlay(items[i]))return!0;return!1},MultiSelect.play=function(){var items=selectedItems;return hideSelections(),_commandprocessor.default.executeCommand("play",items,{})},_exports.default=MultiSelect});