EmbyCrackedClient/web/modules/emby-elements/userdatabuttons/emby-playstatebutton.js
2025-06-25 11:46:04 +08:00

1 line
No EOL
3.5 KiB
JavaScript

import itemShortcuts from"./../../shortcuts.js";import connectionManager from"./../../emby-apiclient/connectionmanager.js";import events from"./../../emby-apiclient/events.js";import globalize from"./../../common/globalize.js";import serverNotifications from"./../../common/input/api.js";import EmbyButton from"./../emby-button/emby-button.js";function addNotificationEvent(instance,name,handler){handler=handler.bind(instance);events.on(serverNotifications,name,handler),instance[name]=handler}function removeNotificationEvent(instance,name){var handler=instance[name];handler&&(events.off(serverNotifications,name,handler),instance[name]=null)}function onClick(e){e.preventDefault();var e=getItemInfo(this),apiClient=connectionManager.getApiClient(e);"true"!==this.getAttribute("data-played")?(apiClient.markPlayed(apiClient.getCurrentUserId(),[e.Id]),setState(this,!0)):(apiClient.markUnplayed(apiClient.getCurrentUserId(),[e.Id]),setState(this,!1))}function onUserDataChanged(e,apiClient,userData){userData.ItemId===this.getAttribute("data-id")&&setState(this,userData.Played)}function setState(button,played,updateAttribute){setTitle(button,played);var icon=button.querySelector("i")||button;played?icon&&icon.classList.add("playstatebutton-icon","playstatebutton-icon-played"):icon&&(icon.classList.add("playstatebutton-icon"),icon.classList.remove("playstatebutton-icon-played")),!1!==updateAttribute&&button.setAttribute("data-played",played)}function setTitle(button,played){played=played?globalize.translate("HeaderMarkUnplayed"):globalize.translate("HeaderMarkPlayed"),button.title=played,button.setAttribute("aria-label",played),played=button.querySelector(".button-text");played&&(played.innerHTML=globalize.translate("Played"))}function clearEvents(button){button.removeEventListener("click",onClick),removeNotificationEvent(button,"UserDataChanged")}function bindEvents(button){button.addEventListener("click",onClick),button.hasAttribute("data-owned")||addNotificationEvent(button,"UserDataChanged",onUserDataChanged)}function getItemInfo(button){return button.hasAttribute("data-owned")?itemShortcuts.getItemFromChildNode(button,!0):{Id:button.getAttribute("data-id"),ServerId:button.getAttribute("data-serverid")}}class EmbyPlaystateButton extends EmbyButton{constructor(){return super()}connectedCallback(){EmbyButton.prototype.connectedCallback.call(this),bindEvents(this)}disconnectedCallback(){EmbyButton.prototype.disconnectedCallback.call(this),clearEvents(this)}setItem(item){item?(this.setAttribute("data-id",item.Id),this.setAttribute("data-serverid",item.ServerId),setState(this,item.UserData&&item.UserData.Played)):(this.removeAttribute("data-id"),this.removeAttribute("data-serverid"),this.removeAttribute("data-played"))}}EmbyPlaystateButton.getHtml=function(played,buttonClass,iconClass){iconClass?iconClass+=" playstatebutton-icon":iconClass="playstatebutton-icon",played&&(iconClass+=" playstatebutton-icon-played"),buttonClass?buttonClass+=" md-icon paper-icon-button-light":buttonClass="md-icon paper-icon-button-light",iconClass&&(buttonClass+=" "+iconClass);iconClass=played?globalize.translate("HeaderMarkUnplayed"):globalize.translate("HeaderMarkPlayed");return'<button title="'+iconClass+'" aria-label="'+iconClass+'" tabindex="-1" is="emby-playstatebutton" data-owned="true" type="button" data-action="none" class="'+buttonClass+'" data-played="'+played+'">&#xe86c;</button>'},customElements.define("emby-playstatebutton",EmbyPlaystateButton,{extends:"button"});export default EmbyPlaystateButton;