EmbyCrackedClient/web/modules/emby-elements/userdatabuttons/emby-ratingbutton.js

1 line
3.9 KiB
JavaScript
Raw Permalink Normal View History

2025-06-25 11:46:04 +08:00
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 showToast(options){return Emby.importModule("./modules/toast/toast.js").then(function(toast){return toast(options)})}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 showPicker(button,apiClient,itemId,isFavorite){let newValue=!isFavorite;return apiClient.updateFavoriteStatus(apiClient.getCurrentUserId(),[itemId],newValue).then(function(){newValue?showToast({text:globalize.translate("Favorited"),icon:"&#xe87D;"}):showToast({text:globalize.translate("Unfavorited"),icon:"&#xe87D;",iconStrikeThrough:!0})})}function onClick(e){e.preventDefault();var isFavorite,e=getItemInfo(this),id=e.Id,e=e.ServerId;id&&e&&(e=connectionManager.getApiClient(e),isFavorite="true"===this.getAttribute("data-isfavorite"),showPicker(this,e,id,isFavorite))}function onUserDataChanged(e,apiClient,userData){userData.ItemId===this.getAttribute("data-id")&&setState(this,userData.IsFavorite)}function setState(button,isFavorite,updateAttribute){setTitle(button,isFavorite);var icon=button.querySelector("i")||button;isFavorite?icon&&(icon.innerHTML="&#xe87D;",icon.classList.add("ratingbutton-icon-withrating","md-icon-fill")):icon&&(icon.innerHTML="&#xe87D;",icon.classList.remove("ratingbutton-icon-withrating","md-icon-fill")),!1!==updateAttribute&&button.setAttribute("data-isfavorite",isFavorite)}function setTitle(button,isFavorite){isFavorite=isFavorite?globalize.translate("HeaderRemoveFromFavorites"):globalize.translate("HeaderAddToFavorites"),button.title=isFavorite,button.setAttribute("aria-label",isFavorite),isFavorite=button.querySelector(".button-text");isFavorite&&(isFavorite.innerHTML=globalize.translate("Favorite"))}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 EmbyRatingButton 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||{}).IsFavorite)):(this.removeAttribute("data-id"),this.removeAttribute("data-serverid"),this.removeAttribute("data-isfavorite"))}}EmbyRatingButton.getHtml=function(isFavorite,buttonClass,iconClass){iconClass=iconClass||"",isFavorite&&(iconClass+=" ratingbutton-icon-withrating md-icon-fill"),buttonClass?buttonClass+=" md-icon paper-icon-button-light":buttonClass="md-icon paper-icon-button-light",iconClass&&(buttonClass+=" "+iconClass);iconClass=isFavorite?globalize.translate("HeaderRemoveFromFavorites"):globalize.translate("HeaderAddToFavorites");return'<button title="'+iconClass+'" aria-label="'+iconClass+'" tabindex="-1" is="emby-ratingbutton" data-owned="true" type="button" data-action="none" class="'+buttonClass+'" data-isfavorite="'+isFavorite+'">&#xe87D;</button>'},customElements.define("emby-ratingbutton",EmbyRatingButton,{extends:"button"});export default EmbyRatingButton;