1 line
No EOL
9.6 KiB
JavaScript
1 line
No EOL
9.6 KiB
JavaScript
import commandProcessor from"./commandprocessor.js";import inputManager from"./common/inputmanager.js";import connectionManager from"./emby-apiclient/connectionmanager.js";import playbackManager from"./common/playback/playbackmanager.js";import itemManager from"./common/itemmanager/itemmanager.js";import layoutManager from"./layoutmanager.js";function getVirtualFolder(apiClient,id){return apiClient.getVirtualFolders().then(function(result){return result.Items.filter(function(u){return u.ItemId===id})[0]})}function getItemFromChildNode(child,isMainElement,itemsContainer){child=getItemElementFromChildNode(child,isMainElement,itemsContainer);return child?getItemFromElement(child,itemsContainer):null}function getItemElementFromChildNode(child,isMainElement,itemsContainer){let itemSelector=itemsContainer?.getItemSelector();return itemSelector=itemSelector||".card,.listItem,.epgRow,.dataGridItem",isMainElement?child.closest(itemSelector):child.closest("[data-type],"+itemSelector)}function getItemFromElement(element,itemsContainer){let item;return itemsContainer=itemsContainer||element.closest(".itemsContainer"),item=itemsContainer&&(item=itemsContainer.getItemFromElement(element))?item:{Type:element.getAttribute("data-type"),Id:element.getAttribute("data-id"),ServerId:element.getAttribute("data-serverid"),IsFolder:"true"===element.getAttribute("data-isfolder"),Status:element.getAttribute("data-status")||null,MediaType:element.getAttribute("data-mediatype")||null,ChannelId:element.getAttribute("data-channelid")||null,TimerId:element.getAttribute("data-timerid")||null,SeriesTimerId:element.getAttribute("data-seriestimerid")||null}}function getItem(button,itemsContainer){let itemFromElement=getItemFromElement(button=getItemElementFromChildNode(button,null,itemsContainer),itemsContainer);button=itemFromElement.Type;if(!itemManager.getItemController(button).isSingleItemFetchRequired(button))return Promise.resolve(itemFromElement);var id=itemFromElement.Id;if(!id)return Promise.resolve(itemFromElement);var apiClient=connectionManager.getApiClient(itemFromElement);switch(button){case"VirtualFolder":return getVirtualFolder(apiClient,id);case"User":return apiClient.getUser(id);case"Timer":return apiClient.getLiveTvTimer(id);case"SeriesTimer":return apiClient.getLiveTvSeriesTimer(id)}itemsContainer=["ShareLevel"];return itemsContainer.push("SyncStatus"),itemsContainer.push("ContainerSyncStatus"),apiClient.getItem(apiClient.getCurrentUserId(),id,{fields:itemsContainer.join(","),ExcludeFields:"Chapters,Overview,People,MediaStreams,Subviews"}).then(function(fullItem){return fullItem.PlaylistItemId=itemFromElement.PlaylistItemId,fullItem.CollectionId=itemFromElement.CollectionId,fullItem.PlaylistId=itemFromElement.PlaylistId,fullItem})}function getUser(item){item=connectionManager.getApiClient(item);return item?.getCurrentUserId()?item.getCurrentUser():Promise.resolve(null)}function showContextMenu(itemElement,options){options.itemsContainer||(options.itemsContainer=itemElement.closest(".itemsContainer"));let itemsContainer=options.itemsContainer;return Promise.all([getItem(itemElement,itemsContainer),Emby.importModule("./modules/itemcontextmenu.js")]).then(function(responses){let item=responses[0];return getUser(item).then(function(user){options.positionTo&&!options.itemElement&&(options.itemElement=itemElement);var commandOptions=Object.assign({},itemsContainer.getCommandOptions(item));return responses[1].show(Object.assign(commandOptions,{items:[item],play:!0,queue:!0,playAllFromHere:!item.IsFolder,queueAllFromHere:!item.IsFolder,user:user,multiSelect:((itemsContainer.currentListOptions||{}).options||{}).multiSelect,programInfo:!0},options))})})}function notifyItemsContainerOfCommandResult(itemsContainer,result){itemsContainer.onCommandResult(result)}function getResolverWithAction(command,itemsContainer){return function(result){return itemsContainer&¬ifyItemsContainerOfCommandResult(itemsContainer,{command:command,result:result}),Promise.resolve(result)}}function getResolver(itemsContainer){return function(result){return itemsContainer&¬ifyItemsContainerOfCommandResult(itemsContainer,result),Promise.resolve(result)}}function executeAction(originalEvent,itemElement,itemsContainer,target,action){if(target=target||itemElement,itemElement=getItemElementFromChildNode(itemElement,null,itemsContainer)){var item=getItemFromElement(itemElement,itemsContainer);if("custom"!==action){var options={positionTo:target,itemElement:itemElement,itemsContainer:itemsContainer,eventType:originalEvent.type,eventTarget:originalEvent.target};switch(action){case"togglecheckbox":if(originalEvent?.target.closest(".dragHandle"))return;break;case"menu":case"info":originalEvent&&"click"===originalEvent.type?(options.positionY=layoutManager.tv?"top":"bottom",options.positionX=layoutManager.tv?"right":"after"):originalEvent.detail?.originalEvent&&(options.positionY=layoutManager.tv?"top":"bottom",options.positionX="after",options.positionClientX=originalEvent.detail.originalEvent.clientX,options.positionClientY=originalEvent.detail.originalEvent.clientY);let resolver=getResolver(itemsContainer);return showContextMenu(itemElement,options).then(resolver),Promise.resolve();case"link":itemsContainer&&(options.context=((itemsContainer.currentListOptions||{}).options||{}).context)}target=getResolverWithAction(action,itemsContainer);return commandProcessor.executeCommand(action,[item],options).then(target)}itemElement.dispatchEvent(new CustomEvent("action-null",{detail:{item:item,originalEvent:originalEvent},cancelable:!1,bubbles:!0}))}return Promise.resolve()}function onClick(e){var target=e.target,itemElement=target.closest(".itemAction");if(itemElement){let actionElement=itemElement,action=actionElement.getAttribute("data-action");if(action||(actionElement=actionElement.closest("[data-action]"))&&(action=actionElement.getAttribute("data-action")),action){var itemsContainer=target.closest(".itemsContainer");switch(action){case"openlink":case"default":case"none":break;default:executeAction(e,itemElement,itemsContainer,actionElement,action)}switch(action){case"multiselect":case"openlink":case"toggleitemchecked":break;default:return"default"!==action&&e.preventDefault(),e.stopPropagation(),!1}}}}function onCommand(e){var cmd=e.detail.command;let target,itemsContainer,scroller,itemElement;switch(cmd){case"play":case"playpause":target=e.target,itemsContainer=target.closest(".itemsContainer"),!(itemElement=getItemElementFromChildNode(target,null,itemsContainer))||itemsContainer&&"true"===itemsContainer.getAttribute("data-skipplaycommands")||playbackManager.isPlayingMediaType(["Audio","Video"])||(e.preventDefault(),e.stopPropagation(),executeAction(e,itemElement,itemsContainer,itemElement,cmd));break;case"resume":case"record":case"menu":case"info":target=e.target,itemsContainer=target.closest(".itemsContainer"),(itemElement=getItemElementFromChildNode(target,null,itemsContainer))&&(e.preventDefault(),e.stopPropagation(),executeAction(e,itemElement,itemsContainer,itemElement,cmd));break;case"pageup":target=e.target,(itemsContainer=target.closest(".itemsContainer"))&&(scroller=itemsContainer.closest("[is=emby-scroller]"))&&"false"===scroller.getAttribute("data-horizontal")&&(itemsContainer.pageUp(target),e.preventDefault(),e.stopPropagation());break;case"pagedown":target=e.target,(itemsContainer=target.closest(".itemsContainer"))&&(scroller=itemsContainer.closest("[is=emby-scroller]"))&&"false"===scroller.getAttribute("data-horizontal")&&(itemsContainer.pageDown(target),e.preventDefault(),e.stopPropagation());break;case"end":target=e.target,(itemsContainer=target.closest(".itemsContainer"))&&(scroller=itemsContainer.closest("[is=emby-scroller]"))&&"false"===scroller.getAttribute("data-horizontal")&&(itemsContainer.focusLast(),e.preventDefault(),e.stopPropagation());break;case"select":"DIV"===(target=e.target).tagName&&!target.closest("a,button,.itemAction")&&(itemsContainer=target.closest(".itemsContainer"),itemElement=getItemElementFromChildNode(target,null,itemsContainer))&&((itemElement.querySelector(".itemAction")||itemElement).click(),e.preventDefault(),e.stopPropagation())}}function on(context,options){!1!==(options=options||{}).click&&context.addEventListener("click",onClick),!1!==options.command&&inputManager.on(context,onCommand)}function off(context,options){options=options||{},context.removeEventListener("click",onClick),!1!==options.command&&inputManager.off(context,onCommand)}function getShortcutAttributes(item,options){var type,dataAttributes=[];return!options.isBoundListItem&&((type=item.Type)&&dataAttributes.push({name:"data-type",value:type}),(type=item.ServerId||options.serverId)&&dataAttributes.push({name:"data-serverid",value:type}),(type=item.MediaType)&&dataAttributes.push({name:"data-mediatype",value:type}),type=item.ChannelId)&&dataAttributes.push({name:"data-channelid",value:type}),options.isVirtualList||(type=item.Id||item.ItemId)&&dataAttributes.push({name:"data-id",value:type}),dataAttributes}function getShortcutAttributesHtml(item,options){let dataAttributes="";var type;return!options.isBoundListItem&&((type=item.Type)&&(dataAttributes+=' data-type="'+type+'"'),(type=item.ServerId||options.serverId)&&(dataAttributes+=' data-serverid="'+type+'"'),(type=item.MediaType)&&(dataAttributes+=' data-mediatype="'+type+'"'),type=item.ChannelId)&&(dataAttributes+=' data-channelid="'+type+'"'),options.isVirtualList||(type=item.Id||item.ItemId)&&(dataAttributes+=' data-id="'+type+'"'),dataAttributes}export default{on:on,off:off,onClick:onClick,getShortcutAttributesHtml:getShortcutAttributesHtml,getShortcutAttributes:getShortcutAttributes,getItemElementFromChildNode:getItemElementFromChildNode,getItemFromChildNode:getItemFromChildNode,getItemFromElement:getItemFromElement}; |