first commit
1
apikeys/apikeys.js
Normal file
@@ -0,0 +1 @@
|
||||
define(["exports","./../list/list.js","./../modules/common/globalize.js","./../modules/emby-elements/emby-input/emby-input.js","./../modules/emby-elements/emby-button/emby-button.js","./../modules/emby-elements/emby-select/emby-select.js","./../modules/emby-elements/emby-scroller/emby-scroller.js"],function(_exports,_list,_globalize,_embyInput,_embyButton,_embySelect,_embyScroller){function showNewKeyPrompt(){var options,instance=this;options={title:_globalize.default.translate("HeaderNewApiKey"),label:_globalize.default.translate("AppName"),description:_globalize.default.translate("ValueExample","Sickbeard, NzbDrone")},Emby.importModule("./modules/prompt/prompt.js").then(function(prompt){return prompt(options)}).then(function(value){instance.getApiClient().createApiKey({App:value})})}function ApiKeysPage(view,params){this.hasOtherViewButtons=!0,this.enableAlphaNumericShortcuts=!1,_list.default.call(this,view,params),function(view){view.querySelector(".listTotalRecordCount").insertAdjacentHTML("afterend",'<button is="emby-button" type="button" class="itemsViewSettingsContainer-button raised raised-mini btnAdd submit" title="'+_globalize.default.translate("HeaderNewApiKey")+'" aria-label="'+_globalize.default.translate("HeaderNewApiKey")+'"><i class="md-icon button-icon button-icon-left"></i><span class="emby-button-text">'+_globalize.default.translate("HeaderNewApiKey")+"</span></button>")}(view),view.querySelector(".btnAdd").addEventListener("click",showNewKeyPrompt.bind(this)),this.itemsContainer.setAttribute("data-monitor","ApiKeys")}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,require(["flexStyles"]),Object.assign(ApiKeysPage.prototype,_list.default.prototype),ApiKeysPage.prototype.getItemTypes=function(){return["ApiKey"]},ApiKeysPage.prototype.getApiClientQueryMethodName=function(){return"getApiKeys"},ApiKeysPage.prototype.getBaseListRendererOptions=function(){var options=_list.default.prototype.getBaseListRendererOptions.apply(this,arguments);return options.draggable=!1,options.action="none",options.playQueueIndicator=!1,options},ApiKeysPage.prototype.getCardOptions=function(items,settings){var options=_list.default.prototype.getCardOptions.apply(this,arguments);return options.shape="backdrop",options},ApiKeysPage.prototype.getListViewOptions=function(items,settings){var options=_list.default.prototype.getListViewOptions.apply(this,arguments);return options.enableDefaultIcon=!0,options.transparentIcon=!0,options.draggableXActions=!1,options},ApiKeysPage.prototype.getSettingsKey=function(){return"apikeys"},ApiKeysPage.prototype.setTitle=function(){};_exports.default=ApiKeysPage});
|
||||
1
apploader.js
Normal file
@@ -0,0 +1 @@
|
||||
var globalThis;void 0===globalThis&&(globalThis=self),function(){"use strict";globalThis.Emby={};var docElem,appMode,supportsModules="noModule"in document.createElement("script"),usesModules=!1;function loadScript(src){return new Promise(function(resolve,reject){var doc=document,script=doc.createElement("script");globalThis.urlCacheParam&&(src+="?"+globalThis.urlCacheParam),usesModules&&supportsModules&&(script.type="module"),script.onload=resolve,script.onerror=reject,script.src=src,doc.head.appendChild(script)})}function catchAndResolve(err){return console.log("error registering service worker: "+err),Promise.resolve()}function loadRequire(){return loadScript("./modules/alameda/alameda"+globalThis.Emby.jsExtension)}function loadApp(){var baseRoute,config={urlArgs:globalThis.urlCacheParam,renameJsExtension:".js"===globalThis.Emby.jsExtension?null:globalThis.Emby.jsExtension};return"android"!==globalThis.appMode&&((baseRoute=(baseRoute=globalThis.location.href.split("?")[0].replace("/index.html","")).split("#")[0]).lastIndexOf("/")===baseRoute.length-1&&(baseRoute=baseRoute.substring(0,baseRoute.length-1)),console.log("Setting require baseUrl to "+baseRoute),config.baseUrl=baseRoute),require.config(config),loadScript("./app"+globalThis.Emby.jsExtension)}function onPromiseLoaded(){!function(){if("file:"===globalThis.location.protocol)return Promise.resolve();switch(globalThis.appMode){case"ios":case"android":case"tizen":case"webos":case"chromecast":case"embyclient":return Promise.resolve()}return"undefined"!=typeof caches&&navigator.serviceWorker?caches.open("embyappinfo").then(function(cache){return cache.put("appversion",new Response(globalThis.dashboardVersion||"")).then(function(){try{var serviceWorkerOptions={};return usesModules&&supportsModules&&(serviceWorkerOptions.type="module"),navigator.serviceWorker.register("serviceworker.js",serviceWorkerOptions).then(function(){return navigator.serviceWorker.ready.then(function(){"standalone"===globalThis.appMode&&(globalThis.urlCacheParam=null),Emby.serviceWorkerEnabled=!0})},catchAndResolve).then(function(reg){return reg&®.sync?reg.sync.register("emby-sync"):Promise.resolve()})}catch(err){console.log("Error registering serviceWorker: "+err)}},catchAndResolve)},catchAndResolve):Promise.resolve()}().then(loadRequire,loadRequire).then(loadApp,loadApp)}globalThis.Emby.requiresClassesPolyfill=!!1,globalThis.Emby.jsExtension=".js",docElem=document.documentElement,(appMode=docElem.getAttribute("data-appmode"))&&(globalThis.appMode=appMode),(docElem=docElem.getAttribute("data-appversion"))&&(globalThis.dashboardVersion=docElem),docElem?globalThis.urlCacheParam="v="+docElem:appMode||(globalThis.urlCacheParam="v="+Date.now()),function(onDone){var doc,script,src;globalThis.Promise&&globalThis.Promise.all?onDone():(script=(doc=document).createElement("script"),src="./modules/polyfills/native-promise-only"+globalThis.Emby.jsExtension,globalThis.urlCacheParam&&(src+="?"+globalThis.urlCacheParam),script.onload=onDone,script.src=src,doc.head.appendChild(script))}(onPromiseLoaded)}();
|
||||
18
books/books.html
Normal file
@@ -0,0 +1,18 @@
|
||||
<div class="view flex flex-direction-column withTabs">
|
||||
|
||||
<div class="tabContent tabContent-positioned flex flex-grow" data-index="0" data-swapnode="itemstab">
|
||||
|
||||
</div>
|
||||
<div class="tabContent tabContent-positioned flex flex-grow" data-index="1" data-swapnode="itemstab">
|
||||
|
||||
</div>
|
||||
<div class="tabContent tabContent-positioned flex flex-grow" data-index="2" data-swapnode="itemstab">
|
||||
|
||||
</div>
|
||||
<div class="tabContent tabContent-positioned flex flex-grow" data-index="3" data-swapnode="itemstab">
|
||||
|
||||
</div>
|
||||
<div class="tabContent tabContent-positioned flex flex-grow" data-index="4" data-swapnode="itemstab">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
1
books/books.js
Normal file
@@ -0,0 +1 @@
|
||||
define(["exports","./../modules/tabbedview/tabbedview.js","./../modules/common/globalize.js","./../modules/emby-elements/emby-itemscontainer/emby-itemscontainer.js","./../modules/emby-elements/emby-button/emby-button.js","./../modules/emby-elements/emby-scroller/emby-scroller.js"],function(_exports,_tabbedview,_globalize,_embyItemscontainer,_embyButton,_embyScroller){function BooksView(view,params){_tabbedview.default.apply(this,arguments)}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,Object.assign(BooksView.prototype,_tabbedview.default.prototype),BooksView.prototype.getTabs=function(){var subviews=this.item.Subviews||[];return[{name:_globalize.default.translate("Books"),id:"books",enabled:subviews.includes("books")},{name:_globalize.default.translate("Collections"),id:"collections",enabled:subviews.includes("collections")},{name:_globalize.default.translate("Genres"),id:"genres",enabled:subviews.includes("genres")},{name:_globalize.default.translate("Tags"),id:"tags",enabled:subviews.includes("tags")},{name:_globalize.default.translate("Folders"),id:"folders"}]},BooksView.prototype.getAutoBackdropItemTypes=function(){return["Book"]},BooksView.prototype.loadTabController=function(id){switch(id){case"collections":return Emby.importModule("./modules/tabbedview/collectionstab.js");case"genres":return Emby.importModule("./modules/tabbedview/genrestab.js");case"tags":return Emby.importModule("./modules/tabbedview/tagstab.js");case"folders":return Emby.importModule("./modules/tabbedview/folderstab.js");case"books":return Emby.importModule("./books/bookstab.js");default:throw new Error("tab not found: "+id)}},BooksView.prototype.getTabControllerOptions=function(id){var options=_tabbedview.default.prototype.getTabControllerOptions.apply(this,arguments);return"genres"!==id&&"tags"!==id||(options.queryIncludeItemTypes=["Book"]),options};_exports.default=BooksView});
|
||||
1
books/bookstab.js
Normal file
@@ -0,0 +1 @@
|
||||
define(["exports","./../modules/tabbedview/itemstab.js"],function(_exports,_itemstab){function BooksTab(view,params,options){_itemstab.default.apply(this,arguments)}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,Object.assign(BooksTab.prototype,_itemstab.default.prototype),BooksTab.prototype.loadTemplate=function(){return this.loadItemsTemplate()},BooksTab.prototype.getSettingsKey=function(){return _itemstab.default.prototype.getSettingsKey.call(this)+"-books"},BooksTab.prototype.getItemTypes=function(){return["Book"]};_exports.default=BooksTab});
|
||||
BIN
bower_components/javascriptsubtitlesoctopus/dist/default.woff2
vendored
Normal file
14
bower_components/javascriptsubtitlesoctopus/dist/subtitles-octopus-worker-legacy.js
vendored
Normal file
1
bower_components/javascriptsubtitlesoctopus/dist/subtitles-octopus-worker.js
vendored
Normal file
BIN
bower_components/javascriptsubtitlesoctopus/dist/subtitles-octopus-worker.wasm
vendored
Normal file
1
bower_components/javascriptsubtitlesoctopus/dist/subtitles-octopus.js
vendored
Normal file
1
components/accessschedule/accessschedule.js
Normal file
@@ -0,0 +1 @@
|
||||
define(["exports","./../../modules/common/globalize.js","./../../modules/dialoghelper/dialoghelper.js","./../../modules/common/datetime.js","./../../modules/emby-elements/emby-button/paper-icon-button-light.js","./../../modules/emby-elements/emby-select/emby-select.js","./../../modules/emby-elements/emby-dialogclosebutton/emby-dialogclosebutton.js"],function(_exports,_globalize,_dialoghelper,_datetime,_paperIconButtonLight,_embySelect,_embyDialogclosebutton){function getDisplayTime(hours){var minutes=0,pct=hours%1;return pct&&(minutes=parseInt(60*pct)),_datetime.default.getDisplayTime(new Date(2e3,1,1,hours,minutes,0,0))}function submitSchedule(context,options){var updatedSchedule={DayOfWeek:context.querySelector(".selectDay").value,StartHour:context.querySelector(".selectStart").value,EndHour:context.querySelector(".selectEnd").value};parseFloat(updatedSchedule.StartHour)>=parseFloat(updatedSchedule.EndHour)?function(options){Emby.importModule("./modules/common/dialogs/alert.js").then(function(alert){return alert(options)})}(_globalize.default.translate("ErrorMessageStartHourGreaterThanEnd")):(context.submitted=!0,options.schedule=Object.assign(options.schedule,updatedSchedule),_dialoghelper.default.close(context))}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,require(["formDialogStyle"]);_exports.default={show:function(options){return new Promise(function(resolve,reject){require(["text!./components/accessschedule/accessschedule.template.html"]).then(function(responses){var responses=responses[0],dlg=_dialoghelper.default.createDialog({removeOnClose:!0,size:"small"}),html=(dlg.classList.add("formDialog"),"");html+=_globalize.default.translateDocument(responses),dlg.innerHTML=html,function(context){for(var html="",i=0;i<24;i++)html+='<option value="'+i+'">'+getDisplayTime(i)+"</option>";html+='<option value="24">'+getDisplayTime(0)+"</option>",context.querySelector(".selectStart").innerHTML=html,context.querySelector(".selectEnd").innerHTML=html}(dlg),responses=dlg,html=options.schedule,responses.querySelector(".selectDay").value=html.DayOfWeek||"Sunday",responses.querySelector(".selectStart").value=html.StartHour||0,responses.querySelector(".selectEnd").value=html.EndHour||0,_dialoghelper.default.open(dlg),dlg.addEventListener("close",function(){dlg.submitted?resolve(options.schedule):reject()}),dlg.querySelector("form").addEventListener("submit",function(e){return submitSchedule(dlg,options),e.preventDefault(),!1})})})}}});
|
||||
36
components/accessschedule/accessschedule.template.html
Normal file
@@ -0,0 +1,36 @@
|
||||
<div class="formDialogHeader">
|
||||
<button type="button" is="emby-dialogclosebutton"></button>
|
||||
<h3 class="formDialogHeaderTitle">
|
||||
${HeaderAccessSchedule}
|
||||
</h3>
|
||||
</div>
|
||||
<div class="formDialogContent scrollY">
|
||||
<div class="dialogContentInner dialog-content-centered padded-left padded-right">
|
||||
<form class="scheduleForm" style="margin:auto;">
|
||||
|
||||
<div class="selectContainer">
|
||||
<select is="emby-select" class="selectDay" label="${LabelDay}">
|
||||
<option value="Sunday">Sunday</option>
|
||||
<option value="Monday">Monday</option>
|
||||
<option value="Tuesday">Tuesday</option>
|
||||
<option value="Wednesday">Wednesday</option>
|
||||
<option value="Thursday">Thursday</option>
|
||||
<option value="Friday">Friday</option>
|
||||
<option value="Saturday">Saturday</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="selectContainer">
|
||||
<select is="emby-select" class="selectHour selectStart" label="${LabelStartTime}"></select>
|
||||
</div>
|
||||
<div class="selectContainer">
|
||||
<select is="emby-select" class="selectHour selectEnd" label="${LabelEndTime}"></select>
|
||||
</div>
|
||||
|
||||
<div class="formDialogFooter">
|
||||
<button is="emby-button" type="submit" class="raised button-submit block formDialogFooterItem">
|
||||
<span>${ButtonAdd}</span>
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
1
components/activitylog.js
Normal file
@@ -0,0 +1 @@
|
||||
define(["exports","./../modules/listview/listview.js","./../modules/common/input/api.js","./../modules/emby-apiclient/events.js","./../modules/emby-apiclient/connectionmanager.js","./../modules/emby-elements/emby-button/emby-button.js"],function(_exports,_listview,_api,_events,_connectionmanager,_embyButton){function getActivityListViewOptions(items){var options={playQueueIndicator:!1,moreButton:!1,action:"none",enableDefaultIcon:!0,overviewButton:!0,roundImage:!0,multiSelect:!1,contextMenu:!1,draggable:!1,draggableXActions:!1,fields:["Name","ShortOverview","Date"]};return _listview.default.setListOptions(items,options),{renderer:_listview.default,options:options,virtualScrollLayout:"vertical-list"}}function ActivityLog(options){var element=(this.options=options).element,options=(element.fetchData=function(){var limit=parseInt(this.getAttribute("data-activitylimit")||"7"),minDate=new Date,hasUserId=(minDate.setTime(minDate.getTime()-6048e5),"false"!==this.getAttribute("data-useractivity"));return ApiClient.getActivityLog({StartIndex:0,Limit:limit,MinDate:minDate.toISOString(),hasUserId:hasUserId,EnableTotalRecordCount:!1})}.bind(element),element.getListOptions=getActivityListViewOptions,element.parentContainer=element.closest(".activityContainer"),element.setAttribute("data-alwaysshowseeall","true"),_connectionmanager.default.getApiClient(options.serverId)),onUpdate=function(e,apiClient,data){var options=this.options;options&&options.serverId===apiClient.serverId()&&options.element.notifyRefreshNeeded()}.bind(this);this.updateFn=onUpdate,_events.default.on(_api.default,"ActivityLogEntry",onUpdate),options.startMessageListener("ActivityLogEntry","0,1500"),element.resume({refresh:!0})}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,ActivityLog.prototype.pause=function(){},ActivityLog.prototype.resume=function(options){},ActivityLog.prototype.destroy=function(){var options=this.options,options=(options&&_connectionmanager.default.getApiClient(options.serverId).stopMessageListener("ActivityLogEntry"),this.updateFn);options&&_events.default.off(_api.default,"ActivityLogEntry",options),this.items=null,this.options=null};_exports.default=ActivityLog});
|
||||
1
components/imageoptionseditor/imageoptionseditor.js
Normal file
@@ -0,0 +1 @@
|
||||
define(["exports","./../../modules/common/globalize.js","./../../modules/dialoghelper/dialoghelper.js","./../../modules/emby-elements/emby-toggle/emby-toggle.js","./../../modules/emby-elements/emby-button/emby-button.js","./../../modules/emby-elements/emby-button/paper-icon-button-light.js","./../../modules/emby-elements/emby-select/emby-select.js","./../../modules/emby-elements/emby-input/emby-input.js","./../../modules/emby-elements/emby-dialogclosebutton/emby-dialogclosebutton.js"],function(_exports,_globalize,_dialoghelper,_embyToggle,_embyButton,_paperIconButtonLight,_embySelect,_embyInput,_embyDialogclosebutton){function findImageOptions(imageOptions,type){return imageOptions.filter(function(i){return i.Type===type})[0]}function getImageConfig(options,availableOptions,imageType){return findImageOptions(options.ImageOptions||[],imageType)||findImageOptions(availableOptions.DefaultImageOptions||[],imageType)||{Type:imageType,MinWidth:0,Limit:"Primary"===imageType?1:0}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;_exports.default=function(){this.show=function(itemType,options,availableOptions){return new Promise(function(resolve,reject){var xhr=new XMLHttpRequest;xhr.open("GET","components/imageoptionseditor/imageoptionseditor.template.html",!0),xhr.onload=function(e){var template=this.response,dlg=_dialoghelper.default.createDialog({size:"medium-tall",removeOnClose:!0,scrollY:!1});dlg.classList.add("formDialog"),dlg.innerHTML=_globalize.default.translateDocument(template),dlg.addEventListener("close",function(){!function(context,options){options.ImageOptions=Array.prototype.map.call(context.querySelectorAll(".imageType:not(.hide)"),function(c){return{Type:c.getAttribute("data-imagetype"),Limit:c.checked?1:0,MinWidth:0}}),options.ImageOptions.push({Type:"Backdrop",Limit:context.querySelector(".selectMaxBackdrops").value,MinWidth:context.querySelector(".selectMinBackdropDownloadWidth").value})}(dlg,options)}),function(context,options,availableOptions){var supportedImageTypes=availableOptions.SupportedImageTypes||[],elem=(elem=context.querySelector(".backdropFields"),-1!==supportedImageTypes.indexOf("Backdrop")?(elem.classList.remove("hide"),elem.querySelector("select").setAttribute("required","required")):(elem.classList.add("hide"),elem.querySelector("select").setAttribute("required",""),elem.querySelector("select").removeAttribute("required")),Array.prototype.forEach.call(context.querySelectorAll(".imageType"),function(i){var imageType=i.getAttribute("data-imagetype"),container=i.closest("LABEL");-1===supportedImageTypes.indexOf(imageType)?container.classList.add("hide"):container.classList.remove("hide"),getImageConfig(options,availableOptions,imageType).Limit?i.checked=!0:i.checked=!1}),getImageConfig(options,availableOptions,"Backdrop"));context.querySelector(".selectMaxBackdrops").value=elem.Limit,context.querySelector(".selectMinBackdropDownloadWidth").value=elem.MinWidth}(dlg,options,availableOptions),_dialoghelper.default.open(dlg).then(resolve,resolve)},xhr.send()})}}});
|
||||
102
components/imageoptionseditor/imageoptionseditor.template.html
Normal file
@@ -0,0 +1,102 @@
|
||||
<div class="formDialogHeader">
|
||||
<button type="button" is="emby-dialogclosebutton" closetype="done"></button>
|
||||
<h3 class="formDialogHeaderTitle">
|
||||
${HeaderImageOptions}
|
||||
</h3>
|
||||
</div>
|
||||
|
||||
<div is="emby-scroller" data-horizontal="false" data-forcescrollbar="true" data-focusscroll="true" class="formDialogContent">
|
||||
<div class="scrollSlider">
|
||||
<form class="dialogContentInner dialog-content-centered padded-left padded-right fieldsets" style="padding-top:0;">
|
||||
|
||||
<fieldset>
|
||||
<legend>${HeaderFetchImages}</legend>
|
||||
|
||||
<div class="imageSelections fieldset-fields fieldset-fields-listitems">
|
||||
|
||||
<label class="toggleContainer toggleContainer-listItem fieldset-field">
|
||||
<input type="checkbox" is="emby-toggle" class="imageType" data-imagetype="Primary" />
|
||||
<span>${Primary}</span>
|
||||
</label>
|
||||
|
||||
<label class="toggleContainer toggleContainer-listItem fieldset-field">
|
||||
<input type="checkbox" is="emby-toggle" class="imageType" data-imagetype="Art" />
|
||||
<span>${Art}</span>
|
||||
</label>
|
||||
<label class="toggleContainer toggleContainer-listItem fieldset-field">
|
||||
<input type="checkbox" is="emby-toggle" class="imageType" data-imagetype="Banner" />
|
||||
<span>${Banner}</span>
|
||||
</label>
|
||||
<label class="toggleContainer toggleContainer-listItem fieldset-field">
|
||||
<input type="checkbox" is="emby-toggle" class="imageType" data-imagetype="Box" />
|
||||
<span>${Box}</span>
|
||||
</label>
|
||||
<label class="toggleContainer toggleContainer-listItem fieldset-field">
|
||||
<input type="checkbox" is="emby-toggle" class="imageType" data-imagetype="BoxRear" />
|
||||
<span>${BoxRear}</span>
|
||||
</label>
|
||||
|
||||
<label class="toggleContainer toggleContainer-listItem fieldset-field">
|
||||
<input type="checkbox" is="emby-toggle" class="imageType" data-imagetype="Disc" />
|
||||
<span>${Disc}</span>
|
||||
</label>
|
||||
<label class="toggleContainer toggleContainer-listItem fieldset-field">
|
||||
<input type="checkbox" is="emby-toggle" class="imageType" data-imagetype="Logo" />
|
||||
<span>${Logo}</span>
|
||||
</label>
|
||||
<label class="toggleContainer toggleContainer-listItem fieldset-field">
|
||||
<input type="checkbox" is="emby-toggle" class="imageType" data-imagetype="Menu" />
|
||||
<span>${Menu}</span>
|
||||
</label>
|
||||
<label class="toggleContainer toggleContainer-listItem fieldset-field">
|
||||
<input type="checkbox" is="emby-toggle" class="imageType" data-imagetype="Thumb" />
|
||||
<span>${Thumb}</span>
|
||||
</label>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="backdropFields">
|
||||
|
||||
<legend class="hide">${HeaderImageOptions}</legend>
|
||||
|
||||
<div class="fieldset-fields">
|
||||
<div class="selectContainer fieldset-field">
|
||||
<select is="emby-select" class="selectMaxBackdrops" required="required" label="${LabelMaxBackdropsPerItem}">
|
||||
<option value="0">0</option>
|
||||
<option value="1">1</option>
|
||||
<option value="2">2</option>
|
||||
<option value="3">3</option>
|
||||
<option value="4">4</option>
|
||||
<option value="5">5</option>
|
||||
<option value="6">6</option>
|
||||
<option value="7">7</option>
|
||||
<option value="8">8</option>
|
||||
<option value="9">9</option>
|
||||
<option value="10">10</option>
|
||||
<option value="11">11</option>
|
||||
<option value="12">12</option>
|
||||
<option value="13">13</option>
|
||||
<option value="14">14</option>
|
||||
<option value="15">15</option>
|
||||
<option value="16">16</option>
|
||||
<option value="17">17</option>
|
||||
<option value="18">18</option>
|
||||
<option value="19">19</option>
|
||||
<option value="20">20</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="selectContainer fieldset-field">
|
||||
<select is="emby-select" class="selectMinBackdropDownloadWidth" required="required" label="${LabelMinBackdropDownloadWidth}">
|
||||
<option value="0">0</option>
|
||||
<option value="480">480</option>
|
||||
<option value="720">720</option>
|
||||
<option value="1280">1280</option>
|
||||
<option value="1920">1920</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
1
components/libraryoptionseditor/libraryoptionseditor.js
Normal file
@@ -0,0 +1,460 @@
|
||||
<fieldset class="additionalFolderOptionsSection hide">
|
||||
<div class="fieldset-fields">
|
||||
<div class="selectContainer fieldset-field fldselectMusicFolderStructure">
|
||||
<select is="emby-select" class="selectMusicFolderStructure" label="${LabelMusicFolderStructure}">
|
||||
<option value="">${OtherOrUnstructured}</option>
|
||||
<option class="selectMusicFolderStructure_artist_album_track" value="artist_album_track">${PerfectArtistAlbumTrack}</option>
|
||||
<option class="selectMusicFolderStructure_album_track" value="album_track">${PerfectAlbumTrack}</option>
|
||||
</select>
|
||||
<div class="fieldDescription">${LabelMusicFolderStructureHelp}</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>${HeaderLibrarySettings}</legend>
|
||||
|
||||
<div class="fieldset-fields">
|
||||
<div class="selectContainer fldMetadataLanguage hide fieldset-field">
|
||||
<select is="emby-select" class="selectLanguage" label="${LabelMetadataDownloadLanguage}"></select>
|
||||
</div>
|
||||
<div class="selectContainer fldMetadataCountry hide fieldset-field">
|
||||
<select is="emby-select" class="selectCountry" label="${LabelCertificationCountry}"></select>
|
||||
<div class="fieldDescription">${CertificationCountryHelp}</div>
|
||||
</div>
|
||||
<div class="selectContainer fldImageLanguage hide fieldset-field">
|
||||
<select is="emby-select" class="selectImageLanguage" label="${LabelImageDownloadLanguage}"></select>
|
||||
</div>
|
||||
<div class="toggleContainer chkEnablePhotosContainer fieldset-field">
|
||||
<label>
|
||||
<input type="checkbox" is="emby-toggle" class="chkEnablePhotos" checked />
|
||||
<span>${EnablePhotos}</span>
|
||||
</label>
|
||||
<div class="fieldDescription toggleFieldDescription">${EnablePhotosHelp}</div>
|
||||
</div>
|
||||
<div class="toggleContainer fldImportPlaylists fieldset-field">
|
||||
<label>
|
||||
<input type="checkbox" is="emby-toggle" class="chkImportPlaylists" checked />
|
||||
<span>${ImportPlaylists}</span>
|
||||
</label>
|
||||
<div class="fieldDescription toggleFieldDescription">${ImportPlaylistsHelp}</div>
|
||||
</div>
|
||||
|
||||
<div class="toggleContainer chkEnableEmbeddedTitlesContainer hide advanced fieldset-field">
|
||||
<label>
|
||||
<input is="emby-toggle" type="checkbox" class="chkEnableEmbeddedTitles" />
|
||||
<span>${PreferEmbeddedTitlesOverFileNames}</span>
|
||||
</label>
|
||||
<div class="fieldDescription toggleFieldDescription">${PreferEmbeddedTitlesOverFileNamesHelp}</div>
|
||||
</div>
|
||||
|
||||
<div class="toggleContainer fldRealtimeMonitor hide fieldset-field">
|
||||
<label>
|
||||
<input type="checkbox" is="emby-toggle" class="chkEnableRealtimeMonitor" checked />
|
||||
<span>${LabelEnableRealtimeMonitor}</span>
|
||||
</label>
|
||||
<div class="fieldDescription toggleFieldDescription">${LabelEnableRealtimeMonitorHelp}</div>
|
||||
</div>
|
||||
|
||||
<div class="toggleContainer fldExcludeFromSearch hide fieldset-field">
|
||||
<label>
|
||||
<input type="checkbox" is="emby-toggle" class="chkExcludeFromSearch" />
|
||||
<span>${ExcludeFromGlobalSearch}</span>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="toggleContainer fieldset-field fldMergeFolders hide">
|
||||
<label>
|
||||
<input type="checkbox" is="emby-toggle" class="chkMergeFoldersInFolderView" />
|
||||
<span>${MergeTopFoldersInFolderView}</span>
|
||||
</label>
|
||||
<div class="fieldDescription toggleFieldDescription">${MergeTopFoldersInFolderViewHelp}</div>
|
||||
</div>
|
||||
|
||||
<div class="selectContainer fldFolderScanMode hide fieldset-field">
|
||||
<select is="emby-select" class="selectFolderScanMode" label="${LabelFolderScanningMode}" data-menu="custom">
|
||||
<option value="">${Default}</option>
|
||||
<option value="legacy" data-description="${LegacyFolderScanningModeHelp}">${Legacy}</option>
|
||||
</select>
|
||||
<div class="fieldDescription">${FolderScanningModeHelp}</div>
|
||||
</div>
|
||||
|
||||
<div class="toggleContainer hide fieldset-field">
|
||||
<label>
|
||||
<input type="checkbox" is="emby-toggle" class="chkEnableAudioResume" />
|
||||
<span>${LabelEnableRealtimeMonitor}</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="ignoreSection hide">
|
||||
<legend>${HeaderIgnoreFiles}</legend>
|
||||
|
||||
<div class="fieldset-fields">
|
||||
<div class="inputContainer fldIgnoreSample hide fieldset-field">
|
||||
<div class="flex align-items-center">
|
||||
<div class="flex-grow">
|
||||
<input is="emby-input" type="number" class="txtIgnoreSampleFiles flex-grow" name="txtIgnoreSampleFiles" inputmode="numeric" min="0" value="300" label="${LabelIgnoreSampleFiles}" />
|
||||
</div>
|
||||
<div class="align-self-flex-end" style="margin-inline-start:.35em;margin-bottom: .25em;">MB</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="toggleContainer fldEnablePlexIgnore hide fieldset-field">
|
||||
<label>
|
||||
<input type="checkbox" is="emby-toggle" class="chkEnablePlexIgnore" checked />
|
||||
<span>${EnablePlexIgnoreAlias}</span>
|
||||
</label>
|
||||
<div class="fieldDescription toggleFieldDescription">
|
||||
<a is="emby-linkbutton" class="button-link" href="https://emby.media/support/articles/Excluding-Files-Folders.html" target="_blank">${LearnMore}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="groupingSection hide">
|
||||
<legend>${HeaderAutomaticGrouping}</legend>
|
||||
<div class="fieldset-fields">
|
||||
|
||||
<div class="toggleContainer chkAutomaticallyGroupSeriesContainer hide fieldset-field">
|
||||
<label>
|
||||
<input type="checkbox" is="emby-toggle" class="chkAutomaticallyGroupSeries" checked />
|
||||
<span>${OptionAutomaticallyGroupSeries}</span>
|
||||
</label>
|
||||
<div class="fieldDescription toggleFieldDescription">${OptionAutomaticallyGroupSeriesHelp}</div>
|
||||
</div>
|
||||
|
||||
<div class="toggleContainer hide fieldset-field fldMultiPart">
|
||||
<label>
|
||||
<input type="checkbox" is="emby-toggle" class="chkEnableMultiPart" checked />
|
||||
<span>${LabelEnableMultiPartItems}</span>
|
||||
</label>
|
||||
<div class="fieldDescription toggleFieldDescription">${EnableMultiPartItemsHelp}</div>
|
||||
<div class="fieldDescription toggleFieldDescription fldMultiPartTVHelp hide">${EnableMultiPartItemsTVHelp}</div>
|
||||
<div class="fieldDescription toggleFieldDescription">
|
||||
<a is="emby-linkbutton" class="button-link" href="https://emby.media/support/articles/Movie-Naming.html#split-video-files-file-stacking" target="_blank">${LearnMore}</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="selectContainer fldMultiVersion hide fieldset-field">
|
||||
<select is="emby-select" class="selectMultiVersionGrouping" label="${LabelMultiVersionItemsDetection}">
|
||||
<option value="both" class="hide" selected>${MultiVersionItemsDetectionBoth}</option>
|
||||
<option value="files">${MultiVersionItemsDetectionFiles}</option>
|
||||
<option value="metadata" class="hide">${MultiVersionItemsDetectionMetadata}</option>
|
||||
<option value="none">${None}</option>
|
||||
</select>
|
||||
<div class="fieldDescription toggleFieldDescription">${MultiVersionItemsDetectionHelp}</div>
|
||||
<div class="fieldDescription toggleFieldDescription hide MultiVersionMoviesDetectionHelp">${MultiVersionMoviesDetectionHelp}</div>
|
||||
<div class="fieldDescription">
|
||||
<a is="emby-linkbutton" class="button-link" href="https://emby.media/support/articles/Movie-Naming.html#multi-version-movies" target="_blank">${LearnMore}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="metadataReaders hide">
|
||||
<legend>${HeaderMetadataReaders}</legend>
|
||||
<p class="legendDescription">${LabelMetadataReadersHelp}</p>
|
||||
<div class="fieldset-fields fieldset-fields-fieldmargins itemsContainer metadataReaderItemsContainer" is="emby-itemscontainer">
|
||||
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<div class="metadataFetchers hide fieldsets">
|
||||
</div>
|
||||
|
||||
<fieldset class="importCollectionsSection hide">
|
||||
|
||||
<legend>${Collections}</legend>
|
||||
|
||||
<div class="fieldset-fields">
|
||||
<div class="toggleContainer fldImportCollections hide fieldset-field">
|
||||
<label>
|
||||
<input type="checkbox" is="emby-toggle" class="chkImportCollections" />
|
||||
<span>${LabelImportCollections}</span>
|
||||
</label>
|
||||
<div class="fieldDescription toggleFieldDescription">${LabelImportCollectionsHelp}</div>
|
||||
</div>
|
||||
|
||||
<div class="selectContainer fldMinCollectionSize hide fieldset-field">
|
||||
<select is="emby-select" class="selectMinCollectionSize" label="${LabelMinCollectionSize}">
|
||||
<option value="1">1</option>
|
||||
<option value="2" selected>2</option>
|
||||
<option value="3">3</option>
|
||||
<option value="4">4</option>
|
||||
</select>
|
||||
<div class="fieldDescription">${MinCollectionSizeHelp}</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
|
||||
<div class="fieldset-fields">
|
||||
<div class="toggleContainer fldAdult hide fieldset-field">
|
||||
<label>
|
||||
<input type="checkbox" is="emby-toggle" class="chkAdult" />
|
||||
<span>${LabelAllowAdultMetadata}</span>
|
||||
</label>
|
||||
<div class="fieldDescription toggleFieldDescription">${LabelAllowAdultMetadataHelp}</div>
|
||||
</div>
|
||||
|
||||
<div class="selectContainer fldAutoRefreshInterval hide fieldset-field">
|
||||
<select is="emby-select" class="selectAutoRefreshInterval" label="${LabelAutomaticallyRefreshInternetMetadataEvery}"></select>
|
||||
<div class="fieldDescription">${MessageEnablingOptionLongerScans}</div>
|
||||
</div>
|
||||
<div class="selectContainer fldPlaceholderMetadataRefreshInterval hide fieldset-field">
|
||||
<select is="emby-select" class="selectPlaceholderMetadataRefreshInterval" label="${LabelPlaceholderMetadataRefreshInternetMetadataEvery}"></select>
|
||||
<div class="fieldDescription">${MessageEnablingOptionLongerScans}</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="metadataSavers hide">
|
||||
<legend>${HeaderMetadataSavers}</legend>
|
||||
<div class="fieldset-fields fieldset-fields-fieldmargins metadataSaversList">
|
||||
|
||||
</div>
|
||||
<div class="fieldset-fields-fieldDescription fieldDescription">${LabelMetadataSaversHelp}</div>
|
||||
</fieldset>
|
||||
<div class="imageFetchers hide fieldsets">
|
||||
</div>
|
||||
|
||||
<fieldset>
|
||||
|
||||
<div class="fieldset-fields">
|
||||
<div class="toggleContainer chkSaveLocalContainer hide fieldset-field">
|
||||
<label>
|
||||
<input is="emby-toggle" type="checkbox" class="chkSaveLocal" />
|
||||
<span>${LabelSaveLocalMetadata}</span>
|
||||
</label>
|
||||
<div class="fieldDescription toggleFieldDescription">${LabelSaveLocalMetadataHelp}</div>
|
||||
</div>
|
||||
<div class="toggleContainer fldCacheImages hide fieldset-field">
|
||||
<label>
|
||||
<input is="emby-toggle" type="checkbox" class="chkCacheImages" />
|
||||
<span>${CacheImagesInServerData}</span>
|
||||
</label>
|
||||
<div class="fieldDescription toggleFieldDescription">${CacheImagesInServerDataHelp}</div>
|
||||
</div>
|
||||
|
||||
<div class="toggleContainer fldSaveMetadataHidden hide advanced fieldset-field">
|
||||
<label>
|
||||
<input type="checkbox" is="emby-toggle" class="chkSaveMetadataHidden" />
|
||||
<span>${OptionSaveMetadataAsHidden}</span>
|
||||
</label>
|
||||
<div class="fieldDescription toggleFieldDescription">${OptionSaveMetadataAsHiddenHelp}</div>
|
||||
</div>
|
||||
|
||||
<div class="toggleContainer hide chkDownloadImagesInAdvanceContainer advanced fieldset-field">
|
||||
<label>
|
||||
<input is="emby-toggle" type="checkbox" class="chkDownloadImagesInAdvance" />
|
||||
<span>${OptionDownloadImagesInAdvance}</span>
|
||||
</label>
|
||||
<div class="fieldDescription toggleFieldDescription">${OptionDownloadImagesInAdvanceHelp}</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="chaptersSection hide">
|
||||
<legend>${Chapters}</legend>
|
||||
|
||||
<div class="fieldset-fields">
|
||||
<div class="toggleContainer fldGenerateChapters hide fieldset-field">
|
||||
<label>
|
||||
<input type="checkbox" is="emby-toggle" class="chkGenerateChapters" checked />
|
||||
<span>${GenerateChaptersForVideos}</span>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="selectContainer fldChapterInterval hide fieldset-field">
|
||||
<label>
|
||||
<select is="emby-select" class="selectChapterInterval" label="${GeneratedChapterInterval}"></select>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="thumbnailSettingsSection hide">
|
||||
<legend>${HeaderVideoPreviewThumbnails}</legend>
|
||||
|
||||
<div class="fieldset-fields">
|
||||
<div class="selectContainer fieldset-field">
|
||||
<select is="emby-select" class="selectThumbnailImages" label="${LabelGenerateVideoPreviewThumbnails}">
|
||||
<option value="">${Never}</option>
|
||||
<option value="task">${AsAScheduledTask}</option>
|
||||
<option value="scanandtask">${AsAScheduledTaskAndMediaAdded}</option>
|
||||
</select>
|
||||
<div class="fieldDescription">${GenerateVideoPreviewThumbnailsHelp}</div>
|
||||
</div>
|
||||
|
||||
<div class="selectContainer fldThumbnailInterval hide fieldset-field">
|
||||
<label>
|
||||
<select is="emby-select" class="selectThumbnailInterval" label="${LabelThumbnailImagesInterval}"></select>
|
||||
</label>
|
||||
<div class="fieldDescription">${ThumbnailImagesIntervalHelp}</div>
|
||||
</div>
|
||||
|
||||
<div class="toggleContainer fldSaveThumbnailSetsLocally hide fieldset-field">
|
||||
<label>
|
||||
<input type="checkbox" is="emby-toggle" class="chkLocalThumbnailSets" />
|
||||
<span>${SaveThumbnailImagesIntoMediaFolders}</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="introDetectionSection hide">
|
||||
<legend>${Markers}</legend>
|
||||
|
||||
<div class="fieldset-fields">
|
||||
<div class="selectContainer fieldset-field">
|
||||
<select is="emby-select" class="selectIntroDetection" label="${LabelGenerateIntroVideoMarkers}">
|
||||
<option value="">${Never}</option>
|
||||
<option value="task">${AsAScheduledTask}</option>
|
||||
<option value="scanandtask">${AsAScheduledTaskAndMediaAdded}</option>
|
||||
</select>
|
||||
<div class="fieldDescription">${GenerateIntroVideoMarkersHelp}</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<div class="subtitleDownloadSettings hide fieldsets">
|
||||
|
||||
<fieldset>
|
||||
<legend>
|
||||
${HeaderSubtitleDownloaders}
|
||||
</legend>
|
||||
<p class="legendDescription">${SubtitleDownloadersHelp}</p>
|
||||
|
||||
<div class="itemsContainer subtitleFetchersItemsContainer fieldset-fields fieldset-fields-fieldmargins" is="emby-itemscontainer">
|
||||
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>${HeaderAutomaticSubtitleDownloads}</legend>
|
||||
|
||||
<div class="fieldset-fields">
|
||||
<div class="selectContainer fieldset-field">
|
||||
<label>
|
||||
<select is="emby-select" class="selectSubtitleLanguages" label="${HeaderDownloadLanguages}" data-autoallany="false" data-empty-is-all="false" multiple></select>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="toggleContainer fieldset-field">
|
||||
<label>
|
||||
<input is="emby-toggle" type="checkbox" class="chkRequireHashMatch" checked />
|
||||
<span>${RequireHashMatch}</span>
|
||||
</label>
|
||||
<div class="fieldDescription toggleFieldDescription">${RequireHashMatchHelp}</div>
|
||||
</div>
|
||||
|
||||
<div class="toggleContainer fieldset-field">
|
||||
<label>
|
||||
<input is="emby-toggle" type="checkbox" class="chkForcedSubtitlesOnly" checked />
|
||||
<span>${SearchForForcedSubtitlesOnly}</span>
|
||||
</label>
|
||||
<div class="fieldDescription toggleFieldDescription">${SearchForForcedSubtitlesOnlyHelp}</div>
|
||||
</div>
|
||||
|
||||
<div class="selectContainer fldSubtitleDownloadMaxAge fieldset-field">
|
||||
<label>
|
||||
<select is="emby-select" class="selectSubtitleDownloadMaxAge" label="${LabelSubtitleDownloadMaxAge}"></select>
|
||||
</label>
|
||||
<div class="fieldDescription">${SubtitleDownloadMaxAgeHelp}</div>
|
||||
</div>
|
||||
|
||||
<div class="toggleContainer fieldset-field">
|
||||
<label>
|
||||
<input is="emby-toggle" type="checkbox" class="chkSkipIfAudioTrackPresent" />
|
||||
<span>${LabelSkipIfAudioTrackPresent}</span>
|
||||
</label>
|
||||
<div class="fieldDescription toggleFieldDescription">${LabelSkipIfAudioTrackPresentHelp}</div>
|
||||
</div>
|
||||
<div class="toggleContainer fieldset-field">
|
||||
<label>
|
||||
<input is="emby-toggle" type="checkbox" class="chkSkipIfGraphicalSubsPresent" />
|
||||
<span>${LabelSkipIfGraphicalSubsPresent}</span>
|
||||
</label>
|
||||
<div class="fieldDescription toggleFieldDescription">${LabelSkipIfGraphicalSubsPresentHelp}</div>
|
||||
</div>
|
||||
|
||||
<div class="toggleContainer fieldset-field">
|
||||
<label>
|
||||
<input type="checkbox" is="emby-toggle" class="chkSaveSubtitlesLocally" checked />
|
||||
<span>${SaveSubtitlesIntoMediaFolders}</span>
|
||||
</label>
|
||||
<div class="fieldDescription toggleFieldDescription">${SaveSubtitlesIntoMediaFoldersHelp}</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="lyricsDownloadSettings hide fieldsets">
|
||||
|
||||
<fieldset>
|
||||
<legend>
|
||||
${HeaderSubtitleDownloaders}
|
||||
</legend>
|
||||
<p class="legendDescription">${SubtitleDownloadersHelp}</p>
|
||||
|
||||
<div class="itemsContainer lyricsFetchersItemsContainer fieldset-fields fieldset-fields-fieldmargins" is="emby-itemscontainer">
|
||||
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>${HeaderAutomaticSubtitleDownloads}</legend>
|
||||
|
||||
<div class="fieldset-fields">
|
||||
<div class="selectContainer fieldset-field">
|
||||
<label>
|
||||
<select is="emby-select" class="selectLyricsLanguages" label="${HeaderDownloadLanguages}" data-autoallany="false" data-empty-is-all="false" multiple></select>
|
||||
</label>
|
||||
</div>
|
||||
<div class="selectContainer fldLyricsDownloadMaxAge fieldset-field">
|
||||
<label>
|
||||
<select is="emby-select" class="selectLyricsDownloadMaxAge" label="${LabelLyricsDownloadMaxAge}"></select>
|
||||
</label>
|
||||
<div class="fieldDescription">${LyricsDownloadMaxAgeHelp}</div>
|
||||
</div>
|
||||
|
||||
<div class="toggleContainer fieldset-field">
|
||||
<label>
|
||||
<input type="checkbox" is="emby-toggle" class="chkSaveLyricsLocally" checked />
|
||||
<span>${SaveLyricsIntoMediaFolders}</span>
|
||||
</label>
|
||||
<div class="fieldDescription toggleFieldDescription">${SaveLyricsIntoMediaFoldersHelp}</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
<fieldset class="playbackSettings hide">
|
||||
|
||||
<legend>${Playback}</legend>
|
||||
|
||||
<div class="fieldset-fields">
|
||||
<div class="inputContainer fieldset-field">
|
||||
<input is="emby-input" type="number" class="txtMinResumePct" name="txtMinResumePct" inputmode="numeric" required min="0" max="100" label="${LabelMinResumePercentage}" value="3" />
|
||||
<div class="fieldDescription">
|
||||
${LabelMinResumePercentageHelp}
|
||||
</div>
|
||||
</div>
|
||||
<div class="inputContainer fieldset-field">
|
||||
<input is="emby-input" type="number" class="txtMaxResumePct" name="txtMaxResumePct" inputmode="numeric" required min="1" max="100" label="${LabelMaxResumePercentage}" value="90" />
|
||||
<div class="fieldDescription">
|
||||
${LabelMaxResumePercentageHelp}
|
||||
</div>
|
||||
</div>
|
||||
<div class="inputContainer fieldset-field">
|
||||
<input is="emby-input" type="number" class="txtMinResumeDuration" name="txtMinResumeDuration" inputmode="numeric" required min="0" label="${LabelMinResumeDuration}" value="120" />
|
||||
<div class="fieldDescription">
|
||||
${LabelMinResumeDurationHelp}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
1
components/medialibrarycreator/medialibrarycreator.js
Normal file
@@ -0,0 +1,47 @@
|
||||
<div class="formDialogHeader">
|
||||
<button type="button" is="emby-dialogclosebutton"></button>
|
||||
<h3 class="formDialogHeaderTitle">
|
||||
${HeaderNewLibrary}
|
||||
</h3>
|
||||
</div>
|
||||
|
||||
<div is="emby-scroller" data-horizontal="false" data-forcescrollbar="true" data-focusscroll="true" class="formDialogContent">
|
||||
<div class="scrollSlider dialogContentInner dialog-content-centered padded-left padded-right">
|
||||
<form style="margin:auto;" class="fieldsets">
|
||||
|
||||
<fieldset>
|
||||
<div class="fieldset-fields">
|
||||
<div class="fldCollectionType selectContainer fieldset-field">
|
||||
<select is="emby-select" class="selectCollectionType" required="required" label="${LabelContentType}"></select>
|
||||
<div class="collectionTypeFieldDescription fieldDescription">
|
||||
</div>
|
||||
</div>
|
||||
<div class="inputContainer fieldset-field">
|
||||
<input is="emby-input" type="text" class="txtValue" required="required" label="${LabelDisplayName}" />
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="folders">
|
||||
<legend class="legendWithContent">
|
||||
<div class="legendText">${Folders}</div>
|
||||
<div class="legendActions">
|
||||
<button is="emby-button" type="button" class="raised raised-mini btnAddFolder submit">
|
||||
<i class="md-icon button-icon button-icon button-icon-left"></i>
|
||||
<span>${Add}</span>
|
||||
</button>
|
||||
</div>
|
||||
</legend>
|
||||
<div class="folderList sectionContent itemsContainer vertical-list fieldset-fields fieldset-fields-fieldmargins" style="margin-bottom:1em;" is="emby-itemscontainer"></div>
|
||||
</fieldset>
|
||||
|
||||
<div class="libraryOptions hide"></div>
|
||||
|
||||
<div class="formDialogFooter">
|
||||
<button is="emby-button" type="submit" class="raised button-submit block formDialogFooterItem">
|
||||
<span>${ButtonOk}</span>
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
1
components/medialibraryeditor/medialibraryeditor.js
Normal file
@@ -0,0 +1,28 @@
|
||||
<div class="formDialogHeader">
|
||||
<button type="button" is="emby-dialogclosebutton" closetype="done"></button>
|
||||
<h3 class="formDialogHeaderTitle"></h3>
|
||||
</div>
|
||||
|
||||
<div is="emby-scroller" data-horizontal="false" data-forcescrollbar="true" data-focusscroll="true" class="formDialogContent">
|
||||
<div class="scrollSlider dialogContentInner dialog-content-centered padded-left padded-right fieldsets">
|
||||
|
||||
<div class="infoBanner warningBanner fieldsets-item">
|
||||
${ChangingMetadataImageSettingsNewContent}
|
||||
</div>
|
||||
|
||||
<fieldset class="folders">
|
||||
<legend class="legendWithContent">
|
||||
<div class="legendText">${Folders}</div>
|
||||
<div class="legendActions">
|
||||
<button is="emby-button" type="button" class="raised raised-mini btnAddFolder submit">
|
||||
<i class="md-icon button-icon button-icon button-icon-left"></i>
|
||||
<span>${Add}</span>
|
||||
</button>
|
||||
</div>
|
||||
</legend>
|
||||
<div class="folderList sectionContent itemsContainer vertical-list fieldset-fields fieldset-fields-fieldmargins" style="margin-bottom:1em;" is="emby-itemscontainer"></div>
|
||||
</fieldset>
|
||||
|
||||
<div class="libraryOptions"></div>
|
||||
</div>
|
||||
</div>
|
||||
1
components/taskbutton.js
Normal file
@@ -0,0 +1 @@
|
||||
define(["exports","./../modules/emby-apiclient/connectionmanager.js","./../modules/common/globalize.js","./../modules/emby-apiclient/events.js","./../modules/common/input/api.js","./../modules/common/methodtimer.js","./../modules/emby-elements/emby-button/emby-button.js","./../modules/emby-elements/emby-progressbar/emby-progressbar.js"],function(_exports,_connectionmanager,_globalize,_events,_api,_methodtimer,_embyButton,_embyProgressbar){function updateTasks(instance,tasks){var wasRunning,options=instance.options,instance=options.button,tasks=tasks.filter(function(t){return t.Key===options.taskKey})[0];options.panel&&(tasks?options.panel.classList.remove("hide"):options.panel.classList.add("hide")),tasks&&("Idle"===tasks.State?(wasRunning=instance.hasAttribute("disabled"),instance.removeAttribute("disabled"),wasRunning&&options.onStatusChange&&options.onStatusChange()):instance.setAttribute("disabled","disabled"),instance.setAttribute("data-taskid",tasks.Id),wasRunning=(tasks.CurrentProgressPercentage||0).toFixed(1),options.progressElem&&(options.progressElem.innerHTML='<div class="itemProgressBarForeground itemProgressBarForegroundRound" style="width:'+wasRunning+'%;"></div>',"Running"===tasks.State?options.progressElem.classList.remove("hide"):options.progressElem.classList.add("hide")),options.lastResultElem)&&("Failed"===(instance=tasks.LastExecutionResult?tasks.LastExecutionResult.Status:"")?options.lastResultElem.html('<span style="color:#FF0000;">('+_globalize.default.translate("Failed")+")</span>"):"Cancelled"===instance?options.lastResultElem.html('<span style="color:#0026FF;">('+_globalize.default.translate("Cancelled")+")</span>"):"Aborted"===instance?options.lastResultElem.html('<span style="color:#FF0000;">'+_globalize.default.translate("LabelAbortedByServerShutdown")+"</span>"):options.lastResultElem.html(instance))}function pollTasks(instance){_connectionmanager.default.getApiClient(instance.options.serverId).getScheduledTasks({IsEnabled:!0}).then(function(result){updateTasks(instance,result)})}function onButtonClick(e){!function(instance,taskId){_connectionmanager.default.getApiClient(instance.options.serverId).startScheduledTask(taskId).then(function(){return pollTasks(instance)})}(this,e.target.closest("button").getAttribute("data-taskid"))}function stopInterval(instance){var interval=instance.pollInterval;interval&&interval.destroy(),instance.pollInterval=null}function TaskButton(options){var instance=this||new TaskButton(options);(instance.options=options).serverId||(options.serverId=_connectionmanager.default.currentApiClient().serverId()),options.panel&&options.panel.classList.add("hide"),instance.paused=!0,instance.boundOnButtonClick=onButtonClick.bind(instance),instance.boundonScheduledTasksUpdate=function(e,apiClient,info){apiClient.serverId()===this.options.serverId&&updateTasks(this,info)}.bind(instance),instance.boundonPollIntervalFired=function(){_connectionmanager.default.getApiClient(this.options.serverId).isMessageChannelOpen()||pollTasks(this)}.bind(instance),"on"===options.mode?instance.resume({}):"off"===options.mode&&instance.pause()}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,TaskButton.prototype.resume=function(options){var instance,apiClient;this.paused&&(this.paused=!1,this.options.button.addEventListener("click",this.boundOnButtonClick),pollTasks(this),instance=this,apiClient=_connectionmanager.default.getApiClient(instance.options.serverId),stopInterval(instance),apiClient.startMessageListener("ScheduledTasksInfo","1000,1000"),instance.pollInterval=new _methodtimer.default({onInterval:instance.boundonPollIntervalFired,timeoutMs:1e4,type:"interval"}),_events.default.on(_api.default,"ScheduledTasksInfo",this.boundonScheduledTasksUpdate))},TaskButton.prototype.pause=function(){var instance;this.paused=!0,this.boundOnButtonClick&&this.options.button.removeEventListener("click",this.boundOnButtonClick),this.boundonScheduledTasksUpdate&&_events.default.off(_api.default,"ScheduledTasksInfo",this.boundonScheduledTasksUpdate),instance=this,_connectionmanager.default.getApiClient(instance.options.serverId).stopMessageListener("ScheduledTasksInfo"),stopInterval(instance)},TaskButton.prototype.destroy=function(){this.pause(),this.options=null,this.boundOnButtonClick=null,this.boundonScheduledTasksUpdate=null,this.boundonPollIntervalFired=null};_exports.default=TaskButton});
|
||||
1
components/tunerpicker.js
Normal file
1
dashboard/dashboard.css
Normal file
@@ -0,0 +1 @@
|
||||
:root{--dashboardColumnGap:3em}.dashboardFooter{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;-webkit-flex-wrap:wrap;flex-wrap:wrap;-webkit-column-gap:2em;column-gap:2em}.dashboardSections{display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;-webkit-flex-wrap:wrap;flex-wrap:wrap;-webkit-flex-direction:row;flex-direction:row;-webkit-column-gap:var(--dashboardColumnGap);column-gap:var(--dashboardColumnGap)}.dashboardSection{-webkit-flex-shrink:0;flex-shrink:0;margin:0 0 1em;max-width:100%;min-width:min(80ch,80%);-webkit-flex-basis:50%;flex-basis:50%;-webkit-flex-basis:calc(50% - var(--dashboardColumnGap));flex-basis:calc(50% - var(--dashboardColumnGap));-webkit-flex-grow:1;flex-grow:1}.dashboardSection h2{margin-top:.5em;margin-bottom:.5em}.dashboardSection-mini{min-width:min(65ch,80%);-webkit-flex-basis:33.334%;flex-basis:33.334%;-webkit-flex-basis:calc(33.334% - var(--dashboardColumnGap));flex-basis:calc(33.334% - var(--dashboardColumnGap))}.nowPlayingSessions{display:grid;grid-template-columns:repeat(auto-fill,minmax(22em,1fr));grid-gap:0}.activeSession{width:initial!important;max-width:100%}.activeSession .innerCardFooter{top:5.4em;bottom:initial;z-index:1}.sessionTranscodingProgress .itemProgressBarForeground{background:#dd4919!important}.activeSession .cardBox-sideFooter{-webkit-flex-wrap:wrap;flex-wrap:wrap}.activeSession .cardFooterContent{box-sizing:border-box;max-width:calc(100% - 6em)}.activeSession-bottomsections{display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;font-size:92%;text-align:start}.activeSession-bottomsection{padding:1em 1em;display:-webkit-flex;display:flex;-webkit-flex-direction:row;flex-direction:row}.activeSession-bottomsection-title{margin-top:0;margin-bottom:0;-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:1em;margin-inline-end:1em;font-weight:700}.activeSession-commandsection{-webkit-justify-content:center;justify-content:center}.activeSessionStreamIcon{-webkit-margin-end:.5em;margin-inline-end:.5em;font-size:1.2em}.activeSessionUserImage{height:1.82em;border-radius:100%;-webkit-margin-end:.5em;margin-inline-end:.5em}.activeSession-hwaccelIcon{font-size:1.3em;color:#52b54b;-webkit-margin-start:.25em;margin-inline-start:.25em}.activeSession-deviceSection,.activeSession-usersection{cursor:pointer}.activeSession-deviceimage{width:2.8em;height:4.4em;-webkit-margin-end:1em;margin-inline-end:1em;border-radius:.42em;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;-webkit-flex-shrink:0;flex-shrink:0;background-position:center center;background-size:auto 60%;background-repeat:no-repeat}.activeSession-deviceimage-icon{font-size:300%}.serverNameHeader{-webkit-margin-end:.5em;margin-inline-end:.5em}.supporterIconContainer{-webkit-margin-start:.75em;margin-inline-start:.75em}.supporterPromotionContainer{margin:0 0 2em}@media all and (min-width:48em){.supporterPromotionContainer{display:none;-webkit-flex-direction:row-reverse;flex-direction:row-reverse}}.serverUpToDateCheckIcon{background-color:#52b54b;border-radius:.25em;color:#fff;-webkit-margin-end:.5em;margin-inline-end:.5em;padding:.25em;font-size:110%}
|
||||
142
dashboard/dashboard.html
Normal file
@@ -0,0 +1,142 @@
|
||||
<div is="emby-scroller" class="view flex flex-direction-column scrollFrameY flex-grow" data-mousewheel="true" data-horizontal="false" data-focusscroll="true" data-bindheader="true">
|
||||
<div class="scrollSlider flex-grow flex-direction-column padded-left padded-left-page padded-right padded-top-page padded-bottom-page dashboardContainer">
|
||||
|
||||
<div class="dashboardSections">
|
||||
|
||||
<div class="dashboardSection maintenanceModeSection hide" style="flex-basis:100%;">
|
||||
<div class="warningBanner">
|
||||
<div class="infoBannerContent">
|
||||
${ServerInMaintenanceMode}
|
||||
|
||||
<button is="paper-icon-button-light" type="button" class="btnConfigureMaintenanceMode" title="${Settings}">
|
||||
<i class="md-icon">settings</i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="dashboardSection dashboardSection-mini">
|
||||
<div class="flex align-items-center">
|
||||
|
||||
<h2 class="serverNameHeader"></h2>
|
||||
|
||||
<button is="paper-icon-button-light" type="button" class="btnServerMoreMenu">
|
||||
<i class="md-icon">more_horiz</i>
|
||||
</button>
|
||||
|
||||
<button is="paper-icon-button-light" type="button" class="btnRestartMenu">
|
||||
<i class="md-icon">power_settings_new</i>
|
||||
</button>
|
||||
|
||||
<div class="supporterIconContainer flex align-items-center">
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="infoBanner restartInfoBanner hide flex align-items-center" style="margin:0 0 1em;">
|
||||
|
||||
<div class="infoBannerIconContainer">
|
||||
<i class="md-icon infoBannerIcon">notification_important</i>
|
||||
</div>
|
||||
<div class="infoBannerContent">
|
||||
${MessagePleaseRestartServerToFinishUpdating}
|
||||
</div>
|
||||
</div>
|
||||
<div class="infoBanner" style="margin:0;">
|
||||
<div class="infoBannerContent">
|
||||
<p class="appVersionNumber" style="margin-top:0;">
|
||||
</p>
|
||||
<p class="pUpToDate hide flex align-items-center">
|
||||
<i class="md-icon serverUpToDateCheckIcon"></i>
|
||||
${ServerUpToDate}
|
||||
</p>
|
||||
<div class="pUpdateNow hide">
|
||||
<p class="newVersionText" style="font-weight:bold;">
|
||||
</p>
|
||||
<button class="btnUpdateApplication raised block btnUpdateServer" is="emby-button" type="button">
|
||||
<span>${ButtonUpdateNow}</span>
|
||||
</button>
|
||||
<div class="btnManualUpdateContainer">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<p class="ports"></p>
|
||||
|
||||
<p class="localUrl"></p>
|
||||
<p class="externalUrl"></p>
|
||||
|
||||
<a is="emby-linkbutton" class="raised raised-mini button-submit" style="margin:0;font-size:96%;" href="https://support.emby.media/support/solutions/articles/44001849007-connectivity" target="_blank">
|
||||
<i class="md-icon button-icon button-icon-left">wifi</i>
|
||||
<span>${HeaderConnectionHelp}</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div style="margin:.5em 0 0;" class="flex betaInfo hide">
|
||||
<div class="betaInfoBanner">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="runningTasksContainer hide dashboardSection dashboardSection-mini">
|
||||
<h2>${HeaderRunningTasks}</h2>
|
||||
<div class="divRunningTasks" style="padding-top: .5em;padding-bottom: .5em;">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="dashboardSection serverActivitySection activityContainer hide dashboardSection-mini">
|
||||
|
||||
<div class="sectionTitleContainer">
|
||||
<a href="serveractivity?useractivity=false" is="emby-sectiontitle" class="noautofocus button-link button-link-color-inherit sectionTitleTextButton sectionTitleTextButton-link">
|
||||
<h2 class="sectionTitle">${Alerts}</h2>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div is="emby-itemscontainer" class="serverActivityItems itemsContainer flex-direction-column flex flex-grow" data-activitylimit="4" data-useractivity="false">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="dashboardSection activeRecordingsSection hide">
|
||||
<div class="sectionTitleContainer sectionTitleContainer-cards">
|
||||
<h2 class="sectionTitle sectionTitle-cards">${HeaderActiveRecordings}</h2>
|
||||
</div>
|
||||
<div class="activeRecordingItems vertical-wrap itemsContainer itemsContainer-defaultCardSize" is="emby-itemscontainer" data-monitor="RecordingStarted,RecordingEnded">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="dashboardSection" style="flex-basis:100%;"></div>
|
||||
|
||||
<div class="dashboardSection">
|
||||
<div class="sectionTitleContainer sectionTitleContainer-cards">
|
||||
<h2 class="sectionTitle sectionTitle-cards">${HeaderNowPlaying}</h2>
|
||||
</div>
|
||||
|
||||
<div is="emby-itemscontainer" class="nowPlayingSessions itemsContainer vertical-wrap itemsContainer-defaultCardSize" data-domdiff="true">
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="dashboardSection">
|
||||
<div class="sectionTitleContainer">
|
||||
<a href="serveractivity?useractivity=true" is="emby-sectiontitle" class="noautofocus button-link button-link-color-inherit sectionTitleTextButton sectionTitleTextButton-link">
|
||||
<h2 class="sectionTitle">${HeaderActivity}</h2>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div is="emby-itemscontainer" class="userActivityItems itemsContainer flex-direction-column flex flex-grow" data-activitylimit="10" data-useractivity="true">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="dashboardFooter hide padded-top">
|
||||
|
||||
<a is="emby-linkbutton" class="button-link" href="https://emby.media" target="_blank">Emby</a>
|
||||
<a is="emby-linkbutton" class="button-link" href="https://emby.media/community/index.php?/blog/1-emby-blog" target="_blank">${HeaderEmbyNews}</a>
|
||||
<a is="emby-linkbutton" class="button-link" href="https://emby.media/community" target="_blank">${Community}</a>
|
||||
<a is="emby-linkbutton" class="button-link" href="https://github.com/MediaBrowser" target="_blank">GitHub</a>
|
||||
<a is="emby-linkbutton" class="button-link swaggerLink hide" target="_blank" href="#">API</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
1
dashboard/dashboard.js
Normal file
18
dashboard/releasenotes.html
Normal file
@@ -0,0 +1,18 @@
|
||||
<div is="emby-scroller" class="view flex flex-direction-column scrollFrameY flex-grow" data-mousewheel="true" data-horizontal="false" data-forcescrollbar="true" data-focusscroll="true" data-bindheader="true">
|
||||
<div class="scrollSlider flex-grow flex-direction-column padded-left padded-left-page padded-right padded-top-page padded-bottom-page settingsContainer">
|
||||
<div class="readOnlyContent auto-center">
|
||||
<h2>${HeaderEmbyServerReleaseNotes}</h2>
|
||||
|
||||
<form>
|
||||
|
||||
<div class="selectContainer">
|
||||
<select is="emby-select" class="selectVersion" label="${Version}">
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<pre class="releaseNotes" style="font-family:inherit;font-size:inherit;">
|
||||
</pre>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
1
dashboard/releasenotes.js
Normal file
@@ -0,0 +1 @@
|
||||
define(["exports","./../modules/emby-elements/emby-select/emby-select.js","./../modules/viewmanager/basesettingsview.js"],function(_exports,_embySelect,_basesettingsview){function View(view,params){_basesettingsview.default.apply(this,arguments),view.querySelector(".selectVersion").addEventListener("change",function(e){var apiClient=this.getApiClient(),value=e.target.value;value&&apiClient.getJSON(apiClient.getUrl("System/ReleaseNotes",{Version:value})).then(function(releaseNotes){e.target.closest("form").querySelector(".releaseNotes").innerHTML=releaseNotes.description})}.bind(this))}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,Object.assign(View.prototype,_basesettingsview.default.prototype),View.prototype.loadSettingsInternal=function(){var view=this.view,params=this.params,apiClient=this.getApiClient();return apiClient.getJSON(apiClient.getUrl("System/ReleaseNotes/Versions")).then(function(versions){var selectVersion=view.querySelector(".selectVersion"),currentVersion=params.version||"";selectVersion.innerHTML=versions.map(function(v){return"<option"+(v.versionStr===currentVersion?" selected":"")+' value="'+v.versionStr+'">'+v.name+"</option>"}).join(""),selectVersion.dispatchEvent(new CustomEvent("change",{bubbles:!0}))})};_exports.default=View});
|
||||
1
dashboard/serveractivity.js
Normal file
@@ -0,0 +1 @@
|
||||
define(["exports","./../modules/common/globalize.js","./../modules/appheader/appheader.js","./../list/list.js","./../modules/listview/listview.js"],function(_exports,_globalize,_appheader,_list,_listview){function ServerActivityPage(view,params){this.supportsViewSettings=!1,this.enableTotalRecordCountDisplay=!1,_list.default.call(this,view,params)}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,Object.assign(ServerActivityPage.prototype,_list.default.prototype),ServerActivityPage.prototype.getItemTypes=function(){return["ActivityLogEntry"]},ServerActivityPage.prototype.getApiClientQueryMethodName=function(){return"true"===this.params.useractivity?"getUserActivityLog":"getActivityLog"},ServerActivityPage.prototype.getBaseListRendererOptions=function(){var options=_list.default.prototype.getBaseListRendererOptions.apply(this,arguments);return options.draggable=!1,options.draggableXActions=!1,options.multiSelect=!1,options},ServerActivityPage.prototype.getListViewOptions=function(items,settings){var options=_list.default.prototype.getListViewOptions.apply(this,arguments);return options.moreButton=!1,options.action="none",options.enableDefaultIcon=!0,options.overviewButton=!0,options.roundImage=!0,options.contextMenu=!1,options.fields=["Name","ShortOverview","Date"],_listview.default.setListOptions(items,options),options},ServerActivityPage.prototype.getSettingsKey=function(){return"logs"},ServerActivityPage.prototype.setTitle=function(){var title="true"===this.params.useractivity?_globalize.default.translate("Activity"):_globalize.default.translate("Alerts");_appheader.default.setTitle(title||"")},ServerActivityPage.prototype.getViewSettings=function(){var viewSettings=_list.default.prototype.getViewSettings.apply(this,arguments);return viewSettings.imageType="list",viewSettings};_exports.default=ServerActivityPage});
|
||||
114
dashboard/settings.html
Normal file
@@ -0,0 +1,114 @@
|
||||
<div is="emby-scroller" class="view flex flex-direction-column scrollFrameY flex-grow" data-mousewheel="true" data-horizontal="false" data-forcescrollbar="true" data-focusscroll="true" data-bindheader="true">
|
||||
<div class="scrollSlider flex-grow flex-direction-column padded-left padded-left-page padded-right padded-top-page padded-bottom-page settingsContainer">
|
||||
<form class="dashboardGeneralForm auto-center padded-top fieldsets">
|
||||
|
||||
<fieldset>
|
||||
<div class="fieldset-fields">
|
||||
<div class="selectContainer fieldset-field">
|
||||
<select is="emby-select" class="selectLocalizationLanguage" label="${LabelPreferredDisplayLanguage}"></select>
|
||||
<div class="fieldDescription">
|
||||
<div>${LabelPreferredDisplayLanguageHelp}</div>
|
||||
<div>
|
||||
<a is="emby-linkbutton" class="button-link" href="https://emby.media/community/index.php?/topic/5727-join-our-translation-team/" target="_blank">${LabelReadHowYouCanContribute}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="fldRunAtStartup toggleContainer hide fieldset-field">
|
||||
<label>
|
||||
<input is="emby-toggle" type="checkbox" class="chkRunAtStartup" />
|
||||
<span>${LabelRunServerAtStartup}</span>
|
||||
</label>
|
||||
<div class="windowsStartupDescription fieldDescription toggleFieldDescription hide">
|
||||
${LabelRunServerAtStartupHelp}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="fldRunWebAppAtStartup toggleContainer hide fieldset-field">
|
||||
<label>
|
||||
<input is="emby-toggle" type="checkbox" class="chkRunWebAppAtStartup" />
|
||||
<span>${LaunchWebAppOnStartup}</span>
|
||||
</label>
|
||||
<div class="fieldDescription toggleFieldDescription">
|
||||
${LaunchWebAppOnStartupHelp}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="sectionMaintenanceMode hide">
|
||||
<legend>${HeaderMaintenanceMode}</legend>
|
||||
<div class="fieldset-fields">
|
||||
<div class="toggleContainer fieldset-field">
|
||||
<label>
|
||||
<input is="emby-toggle" type="checkbox" class="chkMaintenanceMode" />
|
||||
<span>${OptionEnableMaintenanceMode}</span>
|
||||
</label>
|
||||
<div class="fieldDescription toggleFieldDescription">
|
||||
${EnableMaintenanceModeHelp}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="inputContainer fieldset-field fldMaintenanceModeMessage hide">
|
||||
<input is="emby-input" type="text" class="txtMaintenanceModeMessage" label="${MaintenanceModeMessage}" />
|
||||
<div class="fieldDescription">${MaintenanceModeMessageHelp}</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>${Advanced}</legend>
|
||||
<div class="fieldset-fields">
|
||||
<div class="inputContainer fieldset-field">
|
||||
<div class="flex align-items-center">
|
||||
<div class="flex-grow">
|
||||
<input is="emby-input" class="txtCachePath" label="${LabelCachePath}" autocomplete="off" />
|
||||
</div>
|
||||
<button type="button" is="paper-icon-button-light" title="${ButtonSelectDirectory}" aria-label="${ButtonSelectDirectory}" class="btnSelectCachePath emby-input-iconbutton"><i class="md-icon">search</i></button>
|
||||
</div>
|
||||
<div class="fieldDescription">${LabelCachePathHelp}</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="autoUpdatesContainer hide">
|
||||
<legend>${HeaderAutomaticUpdates}</legend>
|
||||
<div class="fieldset-fields">
|
||||
<label class="fldAutomaticUpdates toggleContainer fieldset-field">
|
||||
<input is="emby-toggle" type="checkbox" class="chkEnableAutomaticServerUpdates" />
|
||||
<span>${OptionEnableAutomaticServerUpdates}</span>
|
||||
</label>
|
||||
<div class="fldEnableAutomaticRestart toggleContainer hide fieldset-field">
|
||||
<label>
|
||||
<input is="emby-toggle" type="checkbox" class="chkEnableAutomaticRestart" />
|
||||
<span class="autoRestartLabel">${LabelAllowServerAutoRestartPlugin}</span>
|
||||
</label>
|
||||
<div class="fieldDescription toggleFieldDescription">${LabelAllowServerAutoRestartHelp}</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<div class="fieldset-fields">
|
||||
<div class="inputContainer fieldset-field">
|
||||
<input is="emby-input" type="text" class="txtLoginDisclaimer" label="${LabelLoginDisclaimer}" />
|
||||
<div class="fieldDescription">${LabelLoginDisclaimerHelp}</div>
|
||||
</div>
|
||||
<div class="inputContainer fieldset-field">
|
||||
<label>
|
||||
<textarea is="emby-textarea" label="${LabelCustomCss}" class="txtCustomCss textarea-mono"></textarea>
|
||||
</label>
|
||||
<div class="fieldDescription">${LabelCustomCssHelp}</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<div>
|
||||
<button is="emby-button" type="submit" class="raised button-submit block">
|
||||
<span>${Save}</span>
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
1
dashboard/settings.js
Normal file
BIN
dashboard/supporterbadge.png
Normal file
|
After Width: | Height: | Size: 9.2 KiB |
38
devices/cameraupload.html
Normal file
@@ -0,0 +1,38 @@
|
||||
<div is="emby-scroller" class="view flex flex-direction-column scrollFrameY flex-grow" data-mousewheel="true" data-horizontal="false" data-forcescrollbar="true" data-focusscroll="true" data-bindheader="true">
|
||||
<div class="scrollSlider flex-grow flex-direction-column padded-left padded-left-page padded-right padded-top-page padded-bottom-page settingsContainer">
|
||||
<form class="devicesUploadForm auto-center fieldsets padded-top">
|
||||
|
||||
<div class="fieldsets-item">
|
||||
<div>${HeaderCameraUploadHelp}</div>
|
||||
<div is="emby-premierecontainer" class="premiereInfo"></div>
|
||||
</div>
|
||||
|
||||
<fieldset>
|
||||
<div class="fieldset-fields">
|
||||
<div class="inputContainer fieldset-field">
|
||||
<div class="flex align-items-center">
|
||||
<div class="flex-grow">
|
||||
<input is="emby-input" class="txtUploadPath" label="${LabelCameraUploadPath}" autocomplete="off" />
|
||||
</div>
|
||||
<button type="button" is="paper-icon-button-light" title="${ButtonSelectDirectory}" aria-label="${ButtonSelectDirectory}" class="btnSelectUploadPath emby-input-iconbutton"><i class="md-icon">search</i></button>
|
||||
</div>
|
||||
<div class="fieldDescription">${DefaultCameraUploadPathHelp}</div>
|
||||
</div>
|
||||
<div class="toggleContainer fieldset-field">
|
||||
<label>
|
||||
<input type="checkbox" is="emby-toggle" class="chkSubfolder" />
|
||||
<span>${LabelCreateCameraUploadSubfolder}</span>
|
||||
</label>
|
||||
<div class="fieldDescription toggleFieldDescription">${LabelCreateCameraUploadSubfolderHelp}</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<div>
|
||||
<button is="emby-button" type="submit" class="raised button-submit block">
|
||||
<span>${Save}</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
1
devices/cameraupload.js
Normal file
@@ -0,0 +1 @@
|
||||
define(["exports","./../modules/viewmanager/basesettingsview.js","./../modules/emby-elements/emby-input/emby-input.js","./../modules/emby-elements/emby-button/emby-button.js","./../modules/emby-elements/emby-toggle/emby-toggle.js","./../modules/emby-elements/emby-premierecontainer/emby-premierecontainer.js","./../modules/common/responsehelper.js","./../modules/loading/loading.js","./../modules/common/globalize.js"],function(_exports,_basesettingsview,_embyInput,_embyButton,_embyToggle,_embyPremierecontainer,_responsehelper,_loading,_globalize){function loadData(page,apiClient){return _loading.default.show(),apiClient.getNamedConfiguration("devices").then(function(config){!function(page,config){page.querySelector(".txtUploadPath").value=config.CameraUploadPath||"",page.querySelector(".chkSubfolder").checked=config.EnableCameraUploadSubfolders}(page,config),_loading.default.hide()})}function onSubmit(e){return function(form,instance){var apiClient=instance.getApiClient();apiClient.getNamedConfiguration("devices").then(function(config){config.CameraUploadPath=form.querySelector(".txtUploadPath").value,config.EnableCameraUploadSubfolders=form.querySelector(".chkSubfolder").checked,apiClient.updateNamedConfiguration("devices",config).then(_responsehelper.default.handleConfigurationSavedResponse)})}(e.target,this),e.stopPropagation(),e.preventDefault(),!1}function View(view,params){_basesettingsview.default.apply(this,arguments),view.querySelector(".btnSelectUploadPath").addEventListener("click",function(){Emby.importModule("./modules/directorybrowser/directorybrowser.js").then(function(directoryBrowser){var picker=new directoryBrowser;picker.show({callback:function(path){path&&(view.querySelector(".txtUploadPath").value=path),picker.close()},validateWriteable:!0,header:_globalize.default.translate("HeaderSelectUploadPath")})})}),view.querySelector(".devicesUploadForm").addEventListener("submit",onSubmit.bind(this)),view.querySelector(".premiereInfo").innerHTML=_globalize.default.translate("FeatureRequiresEmbyPremiere",'<a href="https://emby.media/premiere" data-preset="premiereinfo" is="emby-linkbutton" type="button" class="button-link">',"</a>")}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,Object.assign(View.prototype,_basesettingsview.default.prototype),View.prototype.loadSettingsInternal=function(){return loadData(this.view,this.getApiClient())};_exports.default=View});
|
||||
22
devices/device.html
Normal file
@@ -0,0 +1,22 @@
|
||||
<div is="emby-scroller" class="view flex flex-direction-column scrollFrameY flex-grow" data-mousewheel="true" data-horizontal="false" data-forcescrollbar="true" data-focusscroll="true" data-bindheader="true">
|
||||
<div class="scrollSlider flex-grow flex-direction-column padded-left padded-left-page padded-right padded-top-page padded-bottom-page settingsContainer">
|
||||
<form class="deviceForm auto-center fieldsets">
|
||||
|
||||
<fieldset>
|
||||
<legend class="reportedName">
|
||||
|
||||
</legend>
|
||||
<div class="fieldset-fields">
|
||||
<div class="inputContainer fieldset-field">
|
||||
<input is="emby-input" type="text" class="txtCustomName" label="${LabelDisplayName}" />
|
||||
<div class="fieldDescription">${LabelCustomDeviceDisplayNameHelp}</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<div>
|
||||
<button is="emby-button" type="submit" class="raised button-submit block"><span>${Save}</span></button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
1
devices/device.js
Normal file
@@ -0,0 +1 @@
|
||||
define(["exports","./../modules/viewmanager/basesettingsview.js","./../modules/emby-elements/emby-input/emby-input.js","./../modules/emby-elements/emby-button/emby-button.js","./../modules/common/responsehelper.js","./../modules/loading/loading.js"],function(_exports,_basesettingsview,_embyInput,_embyButton,_responsehelper,_loading){function loadData(page,params,apiClient){_loading.default.show();var params=params.id,promise1=apiClient.getJSON(apiClient.getUrl("Devices/Info",{Id:params})),apiClient=apiClient.getJSON(apiClient.getUrl("Devices/Options",{Id:params}));return Promise.all([promise1,apiClient]).then(function(responses){!function(page,device,deviceOptions){page.querySelector(".txtCustomName").value=deviceOptions.CustomName||"",page.querySelector(".reportedName").textContent=device.Name||""}(page,responses[0],responses[1]),_loading.default.hide()})}function onSubmit(e){return function(form,instance){var id=instance.params.id;(instance=instance.getApiClient()).ajax({url:instance.getUrl("Devices/Options",{Id:id}),type:"POST",data:JSON.stringify({CustomName:form.querySelector(".txtCustomName").value}),contentType:"application/json"}).then(_responsehelper.default.handleConfigurationSavedResponse)}(e.target,this),e.preventDefault(),!1}function View(view,params){_basesettingsview.default.apply(this,arguments),view.querySelector("form").addEventListener("submit",onSubmit.bind(this))}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,Object.assign(View.prototype,_basesettingsview.default.prototype),View.prototype.loadSettingsInternal=function(){return loadData(this.view,this.params,this.getApiClient())};_exports.default=View});
|
||||
1
devices/devices.js
Normal file
@@ -0,0 +1 @@
|
||||
define(["exports","./../list/list.js","./../modules/common/globalize.js","./../modules/emby-elements/emby-input/emby-input.js","./../modules/emby-elements/emby-button/emby-button.js","./../modules/emby-elements/emby-scroller/emby-scroller.js"],function(_exports,_list,_globalize,_embyInput,_embyButton,_embyScroller){function DevicesPage(view,params){this.enableAlphaNumericShortcuts=!1,_list.default.call(this,view,params),this.itemsContainer.setAttribute("data-monitor","Devices")}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,Object.assign(DevicesPage.prototype,_list.default.prototype),DevicesPage.prototype.getItemTypes=function(){return["Device"]},DevicesPage.prototype.getSettingsKey=function(){return"devices"},DevicesPage.prototype.getItemCountText=function(numItems){return 1===numItems?_globalize.default.translate("OneDevice"):_globalize.default.translate("DeviceCountValue",numItems)},DevicesPage.prototype.setTitle=function(){},DevicesPage.prototype.getBaseListRendererOptions=function(){var options=_list.default.prototype.getBaseListRendererOptions.apply(this,arguments);return options.draggable=!1,options.draggableXActions=!0,options.playQueueIndicator=!1,options},DevicesPage.prototype.getCardOptions=function(items,settings){var options=_list.default.prototype.getCardOptions.apply(this,arguments);return(options=Object.assign(options,{paddedImage:!0,defaultBackground:!0,shape:"backdrop"})).fields.includes("Name")&&options.fields.push("DeviceUserInfo"),options},DevicesPage.prototype.getListViewOptions=function(items,settings){var options=_list.default.prototype.getListViewOptions.apply(this,arguments);return options.enableDefaultIcon=!0,options.fields.includes("Name")&&options.fields.push("DeviceUserInfo"),options};_exports.default=DevicesPage});
|
||||
82
embypremiere/embypremiere.html
Normal file
@@ -0,0 +1,82 @@
|
||||
<div is="emby-scroller" class="view flex flex-direction-column scrollFrameY flex-grow" data-mousewheel="true" data-horizontal="false" data-forcescrollbar="true" data-focusscroll="true" data-bindheader="true">
|
||||
<div class="scrollSlider flex-grow flex-direction-column padded-left padded-left-page padded-right padded-top-page padded-bottom-page settingsContainer">
|
||||
<div class="readOnlyContent auto-center">
|
||||
<style>
|
||||
.expiredBackground {
|
||||
background: #cc3333 !important;
|
||||
}
|
||||
|
||||
.nearExpiredBackground {
|
||||
background: orange !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div>
|
||||
<h2>${HeaderSupportTheTeam}</h2>
|
||||
<p>${HeaderSupportTheTeamHelp}</p>
|
||||
|
||||
<p class="benefits"></p>
|
||||
|
||||
<div class="supporterContainer hide">
|
||||
<br />
|
||||
<a class="raised block button-submit" href="https://emby.media/premiere" target="_blank" is="emby-linkbutton">
|
||||
<span>${HeaderBecomeProjectSupporter}</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<form class="supporterKeyForm">
|
||||
|
||||
<div style="margin: 3em 0 1em;">
|
||||
|
||||
<h2>${TabSupporterKey}</h2>
|
||||
<div class="inputContainer">
|
||||
<input is="emby-input" type="text" class="txtSupporterKey" label="${LabelSupporterKey}" autocomplete="off" />
|
||||
<div class="fieldDescription">
|
||||
${LabelSupporterKeyHelp}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="hide notSupporter">
|
||||
<p>
|
||||
<span style="color:red;">${MessageInvalidKey}</span>
|
||||
<br/>
|
||||
<a is="emby-linkbutton" data-autohide="true" class="button-link" target="_blank" href="https://support.emby.media/support/solutions/articles/44001173116-my-emby-key-says-it-is-invalid-or-missing">${HeaderGetHelp}</a>
|
||||
</p>
|
||||
<p>
|
||||
${ErrorMessageInvalidKey}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<p style="text-align:center;">
|
||||
<button is="emby-button" type="submit" class="mbLegacyKeyBtn raised block button-submit">
|
||||
<span>${Save}</span>
|
||||
</button>
|
||||
<button is="emby-button" type="button" class="btnForgotKey button-link" style="margin-top:.25em;">
|
||||
<span>${HeaderForgotKey}</span>
|
||||
</button>
|
||||
</p>
|
||||
</form>
|
||||
|
||||
<div class="hide isSupporter" style="margin: 2em 0;">
|
||||
<h2 style="margin:0;">${HeaderStatus}</h2>
|
||||
|
||||
<div class="status-indicator flex align-items-center flex-direction-row" style="margin: 1em 0;">
|
||||
<div>
|
||||
<i class="md-icon statusIcon" style="font-size: 200%;"></i>
|
||||
</div>
|
||||
<div style="margin: 0 1em;">
|
||||
<div class="premiere-status"></div>
|
||||
<div class="secondaryText hide extended-plans"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="premiere-subs hide" style="margin: 2em 0;">
|
||||
<h2 style="margin:0 0 .5em;">${Subscriptions}</h2>
|
||||
<div class="premiere-subs-content"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
1
embypremiere/embypremiere.js
Normal file
BIN
favicon.ico
Normal file
|
After Width: | Height: | Size: 48 KiB |
21
games/games.html
Normal file
@@ -0,0 +1,21 @@
|
||||
<div class="view flex flex-direction-column withTabs">
|
||||
|
||||
<div class="tabContent tabContent-positioned flex flex-grow" data-index="0" data-swapnode="itemstab">
|
||||
|
||||
</div>
|
||||
<div class="tabContent tabContent-positioned flex flex-grow" data-index="1" data-swapnode="itemstab">
|
||||
|
||||
</div>
|
||||
<div class="tabContent tabContent-positioned flex flex-grow" data-index="2" data-swapnode="itemstab">
|
||||
|
||||
</div>
|
||||
<div class="tabContent tabContent-positioned flex flex-grow" data-index="3" data-swapnode="itemstab">
|
||||
|
||||
</div>
|
||||
<div class="tabContent tabContent-positioned flex flex-grow" data-index="4" data-swapnode="itemstab">
|
||||
|
||||
</div>
|
||||
<div class="tabContent tabContent-positioned flex flex-grow" data-index="5" data-swapnode="itemstab">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
1
games/games.js
Normal file
@@ -0,0 +1 @@
|
||||
define(["exports","./../modules/tabbedview/tabbedview.js","./../modules/common/globalize.js","./../modules/emby-elements/emby-itemscontainer/emby-itemscontainer.js","./../modules/emby-elements/emby-button/emby-button.js","./../modules/emby-elements/emby-scroller/emby-scroller.js"],function(_exports,_tabbedview,_globalize,_embyItemscontainer,_embyButton,_embyScroller){function GamesView(view,params){_tabbedview.default.apply(this,arguments)}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,Object.assign(GamesView.prototype,_tabbedview.default.prototype),GamesView.prototype.getTabs=function(){var subviews=this.item.Subviews||[];return[{name:_globalize.default.translate("Systems"),id:"gamesystems",enabled:!0},{name:_globalize.default.translate("Games"),id:"games",enabled:subviews.includes("games")},{name:_globalize.default.translate("Collections"),id:"collections",enabled:subviews.includes("collections")},{name:_globalize.default.translate("Genres"),id:"genres",enabled:subviews.includes("genres")},{name:_globalize.default.translate("Tags"),id:"tags",enabled:subviews.includes("tags")},{name:_globalize.default.translate("Folders"),id:"folders"}]},GamesView.prototype.supportsHorizontalTabScroll=function(){return!0},GamesView.prototype.getAutoBackdropItemTypes=function(){return["Game"]},GamesView.prototype.loadTabController=function(id){switch(id){case"collections":return Emby.importModule("./modules/tabbedview/collectionstab.js");case"genres":return Emby.importModule("./modules/tabbedview/genrestab.js");case"tags":return Emby.importModule("./modules/tabbedview/tagstab.js");case"folders":return Emby.importModule("./modules/tabbedview/folderstab.js");case"gamesystems":return Emby.importModule("./games/gamesystems.js");case"games":return Emby.importModule("./games/gamestab.js");default:throw new Error("tab not found: "+id)}},GamesView.prototype.getTabControllerOptions=function(id){var options=_tabbedview.default.prototype.getTabControllerOptions.apply(this,arguments);return"genres"!==id&&"tags"!==id||(options.queryIncludeItemTypes=["Game"]),options};_exports.default=GamesView});
|
||||
1
games/gamestab.js
Normal file
@@ -0,0 +1 @@
|
||||
define(["exports","./../modules/tabbedview/itemstab.js"],function(_exports,_itemstab){function GamesTab(view,params,options){_itemstab.default.apply(this,arguments)}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,Object.assign(GamesTab.prototype,_itemstab.default.prototype),GamesTab.prototype.loadTemplate=function(){return this.loadItemsTemplate()},GamesTab.prototype.getSettingsKey=function(){return _itemstab.default.prototype.getSettingsKey.call(this)+"-games"},GamesTab.prototype.getItemTypes=function(){return["Game"]};_exports.default=GamesTab});
|
||||
1
games/gamesystems.js
Normal file
@@ -0,0 +1 @@
|
||||
define(["exports","./../modules/tabbedview/itemstab.js"],function(_exports,_itemstab){function GameSystemsTab(view,params,options){_itemstab.default.apply(this,arguments)}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,Object.assign(GameSystemsTab.prototype,_itemstab.default.prototype),GameSystemsTab.prototype.loadTemplate=function(){return this.loadItemsTemplate()},GameSystemsTab.prototype.getSettingsKey=function(){return _itemstab.default.prototype.getSettingsKey.call(this)+"-gamesystems"},GameSystemsTab.prototype.getItemTypes=function(){return["GameSystem"]};_exports.default=GameSystemsTab});
|
||||
1
home/favorites.js
Normal file
10
home/home.html
Normal file
@@ -0,0 +1,10 @@
|
||||
<div class="view flex flex-direction-column withTabs">
|
||||
|
||||
<div class="tabContent tabContent-positioned flex flex-grow" data-index="0" data-swapnode="sectionstab">
|
||||
|
||||
</div>
|
||||
<div class="tabContent tabContent-positioned flex flex-grow" data-index="1" data-swapnode="sectionstab">
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
1
home/home.js
Normal file
@@ -0,0 +1 @@
|
||||
define(["exports","./../modules/tabbedview/tabbedview.js","./../modules/common/globalize.js","./../modules/maintabsmanager.js","./../modules/layoutmanager.js","./../modules/common/usersettings/usersettings.js","./../modules/emby-elements/emby-scroller/emby-scroller.js","./../modules/emby-elements/emby-button/emby-button.js"],function(_exports,_tabbedview,_globalize,_maintabsmanager,_layoutmanager,_usersettings,_embyScroller,_embyButton){function HomeView(view,params){_tabbedview.default.apply(this,arguments),this.enableBackMenu=!0}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,Object.assign(HomeView.prototype,_tabbedview.default.prototype),HomeView.prototype.getTabs=function(){return[{name:_globalize.default.translate("Home"),id:"home"},{name:_globalize.default.translate("Favorites"),id:"favorites"}]},HomeView.prototype.getAutoBackdropItemTypes=function(){return["Movie","Series","Game","Book"]},HomeView.prototype.setTitle=function(){},HomeView.prototype.supportsHorizontalTabScroll=function(){return!0},HomeView.prototype.tabScrollDirection=function(){return this.supportsHorizontalTabScroll()&&_layoutmanager.default.tv&&"horizontal"===_usersettings.default.tvHome()?"x":"y"},HomeView.prototype.onPause=function(){_tabbedview.default.prototype.onPause.call(this)},HomeView.prototype.destroy=function(){_tabbedview.default.prototype.destroy.apply(this,arguments)},HomeView.prototype.loadTabController=function(id){switch(id){case"home":return Emby.importModule("./home/hometab.js");case"favorites":return Emby.importModule("./home/favorites.js");default:throw new Error("tab not found: "+id)}},HomeView.prototype.onWindowInputCommand=function(e){"home"===e.detail.command?(_maintabsmanager.default.selectedTabIndex(0),e.preventDefault()):_tabbedview.default.prototype.onWindowInputCommand.apply(this,arguments)};_exports.default=HomeView});
|
||||
1
home/hometab.js
Normal file
3
home_horiz/home.html
Normal file
@@ -0,0 +1,3 @@
|
||||
<div class="view flex flex-direction-column withTabs home-horiz">
|
||||
|
||||
</div>
|
||||
1
home_horiz/home.js
Normal file
@@ -0,0 +1 @@
|
||||
define(["exports","./../modules/tabbedview/tabbedview.js","./../modules/emby-elements/emby-scroller/emby-scroller.js","./../modules/emby-elements/emby-button/emby-button.js","./../modules/emby-apiclient/connectionmanager.js","./../modules/maintabsmanager.js"],function(_exports,_tabbedview,_embyScroller,_embyButton,_connectionmanager,_maintabsmanager){function HomeView(view,params){_tabbedview.default.apply(this,arguments),this.selectedItemInfoElement=view.querySelector(".selectedItemInfoInner"),this.enableBackMenu=!0}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,Object.assign(HomeView.prototype,_tabbedview.default.prototype),HomeView.prototype.getTabs=function(){var items=this.item.UserViews;return function(instance){if(!instance.tabsCreated){instance.tabsCreated=!0;for(var html="",items=instance.item.UserViews,i=0,length=items.length;i<length;i++)switch(items[i].CollectionType){case"livetv":case"music":case"audiobooks":case"movies":case"tvshows":html+='<div style="overflow:hidden;" class="tabContent tabContent-positioned home-horiz-tabContent flex focuscontainer-x" data-index="'+i+'" data-swapnode="sectionstab"></div>';break;default:html+='<div style="overflow:hidden;" class="tabContent tabContent-positioned home-horiz-tabContent flex focuscontainer-x" data-index="'+i+'" data-swapnode="itemstab"></div>'}instance.view.insertAdjacentHTML("afterbegin",html)}}(this),items.map(function(i){return{name:i.Name,id:i.Id+"_"+(i.CollectionType||"")}})},HomeView.prototype.getAutoBackdropItemTypes=function(){return["Movie","Series","Game","Book"]},HomeView.prototype.fetchItem=function(){var apiClient=_connectionmanager.default.currentApiClient();return apiClient.getUserViews({},apiClient.getCurrentUserId()).then(function(result){return{UserViews:result.Items||result}})},HomeView.prototype.setTitle=function(){},HomeView.prototype.loadTabController=function(id){switch(id.split("_")[1]){case"movies":return Emby.importModule("./videos/moviesuggestions.js");case"music":case"audiobooks":return Emby.importModule("./music/suggestions.js");case"tvshows":return Emby.importModule("./tv/suggestions.js");case"livetv":return Emby.importModule("./livetv/suggestions.js");default:return Emby.importModule("./modules/tabbedview/folderstab.js")}},HomeView.prototype.getTabControllerParams=function(id){var params=_tabbedview.default.prototype.getTabControllerParams.apply(this,arguments);return id=id.split("_")[0],params.parentId=id,params},HomeView.prototype.getTabControllerOptions=function(id){var _this$item,options=_tabbedview.default.prototype.getTabControllerOptions.apply(this,arguments);return id=id.split("_")[0],options.item=null==(_this$item=this.item)?void 0:_this$item.UserViews.filter(function(i){return i.Id===id})[0],options.addCategories=!0,options},HomeView.prototype.supportsHorizontalTabScroll=function(){return!0},HomeView.prototype.tabScrollDirection=function(){return"x"},HomeView.prototype.onWindowInputCommand=function(e){"home"===e.detail.command?(_maintabsmanager.default.selectedTabIndex(0),e.preventDefault()):_tabbedview.default.prototype.onWindowInputCommand.apply(this,arguments)};_exports.default=HomeView});
|
||||
BIN
images/icon-128x128.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
images/icon-144x144.png
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
images/icon-152x152.png
Normal file
|
After Width: | Height: | Size: 3.5 KiB |
BIN
images/icon-192x192.png
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
BIN
images/icon-384x384.png
Normal file
|
After Width: | Height: | Size: 7.1 KiB |
BIN
images/icon-512x512.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
images/icon-72x72.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
images/icon-96x96.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
images/splash.png
Normal file
|
After Width: | Height: | Size: 7.8 KiB |
264
index.html
Normal file
@@ -0,0 +1,264 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
|
||||
<meta name="viewport" content="viewport-fit=cover, width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no">
|
||||
<link rel="manifest" href="manifest.json">
|
||||
<meta name="description" content="Emby Server">
|
||||
<meta name="format-detection" content="telephone=no">
|
||||
<meta name="msapplication-tap-highlight" content="no">
|
||||
|
||||
<meta http-equiv="X-UA-Compatibility" content="IE=Edge">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<meta name="mobile-web-app-capable" content="yes">
|
||||
<meta name="application-name" content="Emby">
|
||||
<meta name="robots" content="noindex, nofollow, noarchive">
|
||||
<meta property="og:title" content="Emby">
|
||||
<meta property="og:site_name" content="Emby">
|
||||
<meta property="og:url" content="https://emby.media">
|
||||
<meta property="og:description" content="Energize your media.">
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="fb:app_id" content="1618309211750238">
|
||||
<meta name="apple-itunes-app" content="app-id=992180193">
|
||||
<link rel="apple-touch-icon" href="images/icon-192x192.png">
|
||||
<link rel="apple-touch-icon" sizes="72x72" href="images/icon-72x72.png">
|
||||
<link rel="apple-touch-icon" sizes="144x144" href="images/icon-144x144.png">
|
||||
<link rel="apple-touch-icon" sizes="152x152" href="images/icon-152x152.png">
|
||||
<link rel="apple-touch-icon" sizes="192x192" href="images/icon-192x192.png">
|
||||
<link rel="apple-touch-icon" sizes="384x384" href="images/icon-384x384.png">
|
||||
<link rel="apple-touch-icon" sizes="512x512" href="images/icon-512x512.png">
|
||||
<link rel="apple-touch-startup-image" href="images/splash.png">
|
||||
<link rel="shortcut icon" href="favicon.ico">
|
||||
<meta name="msapplication-TileImage" content="images/icon-144x144.png">
|
||||
<meta name="msapplication-TileColor" content="#333333">
|
||||
<meta name="theme-color" content="#43A047">
|
||||
|
||||
<script type="importmap">
|
||||
{
|
||||
"imports": {
|
||||
"medialibraryeditor": "./components/medialibraryeditor/medialibraryeditor.js",
|
||||
"medialibrarycreator": "./components/medialibrarycreator/medialibrarycreator.js",
|
||||
"taskButton": "./components/taskbutton.js",
|
||||
"itemShortcuts": "./modules/shortcuts.js",
|
||||
"pageJs": "./modules/pagejs/page.js",
|
||||
"howler": "./modules/howlerjs/howler.core.js",
|
||||
"skinManager": "./modules/skinmanager.js",
|
||||
"playQueueManager": "./modules/common/playback/playqueuemanager.js",
|
||||
"playbackManager": "./modules/common/playback/playbackmanager.js",
|
||||
"focusManager": "./modules/focusmanager.js",
|
||||
"browserdeviceprofile": "./modules/browserdeviceprofile.js",
|
||||
"skinViewManager": "./modules/skinviewmanager.js",
|
||||
"events": "./modules/emby-apiclient/events.js",
|
||||
"connectionManager": "./modules/emby-apiclient/connectionmanager.js",
|
||||
"ApiClient": "./modules/emby-apiclient/apiclient.js",
|
||||
"urlProvider": "./modules/emby-apiclient/urlprovider.js",
|
||||
"loading": "./modules/loading/loading.js",
|
||||
"webvtt": "./modules/webvtt/vtt.js",
|
||||
"humanedate": "./modules/humanedate/humanedate.js",
|
||||
"serviceLocator": "./modules/common/servicelocator.js",
|
||||
"globalize": "./modules/common/globalize.js",
|
||||
"datetime": "./modules/common/datetime.js",
|
||||
"backdrop": "./modules/backdrop/backdrop.js",
|
||||
"qualityOptions": "./modules/common/qualityoptions.js",
|
||||
"pluginManager": "./modules/common/pluginmanager.js",
|
||||
"dataFormatter": "./modules/common/dataformatter.js",
|
||||
"itemHelper": "./modules/common/itemhelper.js",
|
||||
"itemManager": "./modules/common/itemmanager/itemmanager.js",
|
||||
"BaseItemController": "./modules/common/itemmanager/baseitemcontroller.js",
|
||||
"recordingHelper": "./modules/common/recordinghelper.js",
|
||||
"imageLoader": "./modules/common/imagehelper.js",
|
||||
"imageHelper": "./modules/common/imagehelper.js",
|
||||
"gamepadtokey": "./modules/input/gamepadtokey.js",
|
||||
"virtual-scroller": "./modules/virtual-scroller/virtual-scroller.js",
|
||||
"commandProcessor": "./modules/commandprocessor.js",
|
||||
"cssVars": "./modules/css-vars-ponyfill/css-vars-ponyfill.js",
|
||||
"browser": "./modules/browser.js",
|
||||
"backMenu": "./modules/backmenu/backmenu.js",
|
||||
"soundEffectsManager": "./modules/soundeffects/soundeffectsmanager.js",
|
||||
"soundEffectsPlayer": "./modules/soundeffects/soundeffectsplayer.js",
|
||||
"currentPlayer": "./modules/playback/currentplayer.js",
|
||||
"mediaSession": "./modules/playback/mediasession.js",
|
||||
"mainTabsManager": "./modules/maintabsmanager.js",
|
||||
"dragDropTouch": "./modules/polyfills/dragdroptouch.js",
|
||||
"appHeader": "./modules/appheader/appheader.js",
|
||||
"chromecastHelper": "./modules/chromecast/chromecasthelpers.js",
|
||||
"directorybrowser": "./modules/directorybrowser/directorybrowser.js",
|
||||
"metadataEditor": "./modules/metadataeditor/metadataeditor.js",
|
||||
"personEditor": "./modules/metadataeditor/personeditor.js",
|
||||
"playerSelectionMenu": "./modules/playback/playerselection.js",
|
||||
"playerSettingsMenu": "./modules/common/playback/playersettingsmenu.js",
|
||||
"emby-collapse": "./modules/emby-elements/emby-collapse/emby-collapse.js",
|
||||
"emby-button": "./modules/emby-elements/emby-button/emby-button.js",
|
||||
"emby-linkbutton": "./modules/emby-elements/emby-button/emby-button.js",
|
||||
"emby-itemscontainer": "./modules/emby-elements/emby-itemscontainer/emby-itemscontainer.js",
|
||||
"alphaNumericShortcuts": "./modules/alphanumericshortcuts/alphanumericshortcuts.js",
|
||||
"emby-dialogclosebutton": "./modules/emby-elements/emby-dialogclosebutton/emby-dialogclosebutton.js",
|
||||
"emby-scroller": "./modules/emby-elements/emby-scroller/emby-scroller.js",
|
||||
"emby-tabs": "./modules/emby-elements/emby-tabs/emby-tabs.js",
|
||||
"emby-scrollbuttons": "./modules/emby-elements/emby-scrollbuttons/emby-scrollbuttons.js",
|
||||
"emby-progressring": "./modules/emby-elements/emby-progressring/emby-progressring.js",
|
||||
"emby-itemrefreshindicator": "./modules/emby-elements/emby-itemrefreshindicator/emby-itemrefreshindicator.js",
|
||||
"multiSelect": "./modules/multiselect/multiselect.js",
|
||||
"alphaPicker": "./modules/alphapicker/alphapicker.js",
|
||||
"paper-icon-button-light": "./modules/emby-elements/emby-button/paper-icon-button-light.js",
|
||||
"tabbedView": "./modules/tabbedview/tabbedview.js",
|
||||
"itemsTab": "./modules/tabbedview/itemstab.js",
|
||||
"baseView": "./modules/viewmanager/baseview.js",
|
||||
"baseTab": "./modules/tabbedview/basetab.js",
|
||||
"ListPage": "./list/list.js",
|
||||
"connectHelper": "./modules/emby-connect/connecthelper.js",
|
||||
"addToList": "./modules/addtolist/addtolist.js",
|
||||
"ItemAccessDialog": "./modules/itemaccessdialog/itemaccessdialog.js",
|
||||
"dom": "./modules/dom.js",
|
||||
"textEncoding": "./modules/common/textencoding.js",
|
||||
"playerStats": "./modules/playerstats/playerstats.js",
|
||||
"subtitleOffsetDialog": "./modules/subtitleoffsetdialog/subtitleoffsetdialog.js",
|
||||
"subtitleAppearanceHelper": "./modules/common/subtitleappearancehelper.js",
|
||||
"recordingEditor": "./modules/recordingcreator/recordingeditor.js",
|
||||
"seriesRecordingEditor": "./modules/recordingcreator/seriesrecordingeditor.js",
|
||||
"recordingFields": "./modules/recordingcreator/recordingfields.js",
|
||||
"recordingButton": "./modules/recordingcreator/recordingbutton.js",
|
||||
"subtitleEditor": "./modules/subtitleeditor/subtitleeditor.js",
|
||||
"itemIdentifier": "./modules/itemidentifier/itemidentifier.js",
|
||||
"imageEditor": "./modules/imageeditor/imageeditor.js",
|
||||
"imageDownloader": "./modules/imagedownloader/imagedownloader.js",
|
||||
"itemContextMenu": "./modules/itemcontextmenu.js",
|
||||
"emby-input": "./modules/emby-elements/emby-input/emby-input.js",
|
||||
"emby-select": "./modules/emby-elements/emby-select/emby-select.js",
|
||||
"emby-multilineselect": "./modules/emby-elements/emby-multilineselect/emby-multilineselect.js",
|
||||
"emby-slider": "./modules/emby-elements/emby-slider/emby-slider.js",
|
||||
"emby-checkbox": "./modules/emby-elements/emby-checkbox/emby-checkbox.js",
|
||||
"emby-progressbar": "./modules/emby-elements/emby-progressbar/emby-progressbar.js",
|
||||
"emby-radio": "./modules/emby-elements/emby-radio/emby-radio.js",
|
||||
"emby-toggle": "./modules/emby-elements/emby-toggle/emby-toggle.js",
|
||||
"emby-textarea": "./modules/emby-elements/emby-textarea/emby-textarea.js",
|
||||
"emby-downloadbutton": "./modules/emby-elements/sync/emby-downloadbutton.js",
|
||||
"emby-playstatebutton": "./modules/emby-elements/userdatabuttons/emby-playstatebutton.js",
|
||||
"emby-ratingbutton": "./modules/emby-elements/userdatabuttons/emby-ratingbutton.js",
|
||||
"guide-settings-dialog": "./modules/emby-elements/guide/guide-settings.js",
|
||||
"tvguide": "./modules/emby-elements/guide/guide.js",
|
||||
"emby-premierecontainer": "./modules/emby-elements/emby-premierecontainer/emby-premierecontainer.js",
|
||||
"serverRestartDialog": "./modules/serverrestartdialog/serverrestartdialog.js",
|
||||
"channelRecordingCreator": "./modules/recordingcreator/channelrecordingcreator.js",
|
||||
"refreshDialog": "./modules/refreshdialog/refreshdialog.js",
|
||||
"cardBuilder": "./modules/cardbuilder/cardbuilder.js",
|
||||
"mouseManager": "./modules/input/mouse.js",
|
||||
"keyboardManager": "./modules/input/keyboard.js",
|
||||
"loadingDialog": "./modules/loadingdialog/loadingdialog.js",
|
||||
"syncDialog": "./modules/sync/sync.js",
|
||||
"syncJobEditor": "./modules/sync/syncjobeditor.js",
|
||||
"morphdom": "./modules/morphdom/morphdom.js",
|
||||
"viewManager": "./modules/viewmanager/viewmanager.js",
|
||||
"responseHelper": "./modules/common/responsehelper.js",
|
||||
"formHelper": "./modules/common/responsehelper.js",
|
||||
"slideshow": "./modules/slideshow/slideshow.js",
|
||||
"listView": "./modules/listview/listview.js",
|
||||
"indicators": "./modules/indicators/indicators.js",
|
||||
"mediaInfo": "./modules/mediainfo/mediainfo.js",
|
||||
"viewSettings": "./modules/viewsettings/viewsettings.js",
|
||||
"filterMenu": "./modules/filtermenu/filtermenu.js",
|
||||
"genericedit": "./modules/genericedit/genericedit.js",
|
||||
"registrationServices": "./modules/registrationservices/registrationservices.js",
|
||||
"serversync": "./modules/sync/serversync.js",
|
||||
"multiserversync": "./modules/sync/multiserversync.js",
|
||||
"scroller": "./modules/scroller/smoothscroller.js",
|
||||
"toast": "./modules/toast/toast.js",
|
||||
"layoutManager": "./modules/layoutmanager.js",
|
||||
"appSettings": "./modules/common/appsettings.js",
|
||||
"userSettings": "./modules/common/usersettings/usersettings.js",
|
||||
"userSettingsBuilder": "./modules/common/usersettings/usersettingsbuilder.js",
|
||||
"imageUploader": "./modules/imageuploader/imageuploader.js",
|
||||
"dockedTabs": "./modules/dockedtabs/dockedtabs.js",
|
||||
"navdrawer": "./modules/navdrawer/navdrawer.js",
|
||||
"navDrawerContent": "./modules/navdrawer/navdrawercontent.js",
|
||||
"queryString": "./modules/common/querystring.js",
|
||||
"alert": "./modules/common/dialogs/alert.js",
|
||||
"confirm": "./modules/common/dialogs/confirm.js",
|
||||
"dialog": "./modules/dialog/dialog.js",
|
||||
"dialogHelper": "./modules/dialoghelper/dialoghelper.js",
|
||||
"prompt": "./modules/prompt/prompt.js",
|
||||
"screensaverManager": "./modules/screensavermanager.js",
|
||||
"serverNotifications": "./modules/common/input/api.js",
|
||||
"headroom": "./modules/headroom/headroom.js",
|
||||
"appFooter": "./modules/appfooter/appfooter.js",
|
||||
"appRouter": "./modules/approuter.js",
|
||||
"actionsheet": "./modules/actionsheet/actionsheet.js",
|
||||
"multi-download": "./modules/multidownload.js",
|
||||
"localassetmanager": "./modules/localdatabase/localassetmanager.js",
|
||||
"inputManager": "./modules/common/inputmanager.js"
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<title>Emby</title>
|
||||
|
||||
<style>
|
||||
.app-splash-container {
|
||||
background-color: #000;
|
||||
position: fixed;
|
||||
z-index: 99999;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
contain: strict;
|
||||
}
|
||||
|
||||
.app-splash {
|
||||
background-image: url(modules/themes/logowhite.png);
|
||||
background-position: center top;
|
||||
background-repeat: no-repeat;
|
||||
background-size: contain;
|
||||
position: fixed;
|
||||
top: 1.8em;
|
||||
left: .9em;
|
||||
width: 6.6em;
|
||||
height: 2em;
|
||||
contain: strict;
|
||||
z-index: 99999;
|
||||
}
|
||||
|
||||
.app-splash-expanded {
|
||||
top: 30%;
|
||||
left: 30%;
|
||||
right: 30%;
|
||||
height: 20%;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.hide {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
@media (orientation: landscape) {
|
||||
|
||||
.app-splash-expanded {
|
||||
left: 37.5%;
|
||||
right: 37.5%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
</head>
|
||||
<body class="mainAnimatedPages skinBody">
|
||||
<div class="backdropContainer"></div>
|
||||
<div class="backgroundContainer"></div>
|
||||
<div class="mainDrawer hide focuscontainer padded-bottom-page" is="emby-scroller" data-miniscrollbar="true" data-horizontal="false" data-focusscroll="true" data-navcommands="card" data-bindheader="false">
|
||||
<div class="scrollSlider mainDrawerScrollSlider"></div>
|
||||
</div>
|
||||
<div class="skinHeader focuscontainer-x focuscontainer-up headroom flex align-items-center flex-grow headerTop">
|
||||
<div class="headerLeft headerSection focuscontainer-x navout-x">
|
||||
</div>
|
||||
<div class="headerMiddle headerSection sectionTabs">
|
||||
</div>
|
||||
<div class="headerRight headerSection focuscontainer-x navout-x">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="app-splash-container">
|
||||
<div class="app-splash app-splash-expanded"></div>
|
||||
</div>
|
||||
|
||||
<script src="apploader.js" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
1
item/item.css
Normal file
387
item/item.html
Normal file
@@ -0,0 +1,387 @@
|
||||
<div is="emby-scroller" data-horizontal="false" data-focusscroll="true" data-navcommands="card" data-forcescrollbar="true" class="itemView darkContentContainer-item view flex flex-direction-column scrollFrameY flex-grow" data-bindheader="true">
|
||||
<div class="scrollSlider flex-grow padded-top-page itemMainScrollSlider verticalSections">
|
||||
|
||||
<div class="topDetailsContainer flex flex-direction-row verticalSections-item">
|
||||
<div class="item-fixed-side padded-left padded-left-page hide flex flex-direction-column flex-shrink-zero">
|
||||
|
||||
<div is="emby-itemscontainer" class="detailImageContainer detailImageContainer-side justify-content-center">
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="flex-grow topDetailsMain flex flex-direction-column padded-bottom-focusscale">
|
||||
<div class="itemBackdropContainer">
|
||||
<div class="itemBackdrop" loading="lazy" decoding="async">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="detailMainContainerParent verticalSections verticalSections-condensed">
|
||||
<div class="padded-left padded-left-page padded-right verticalSection detailMainContainer flex flex-direction-row align-items-flex-start">
|
||||
<div is="emby-itemscontainer" class="detailImageContainer detailImageContainer-main flex flex-direction-column justify-content-center">
|
||||
</div>
|
||||
|
||||
<div class="flex-grow detailTextContainer verticalFieldItems">
|
||||
|
||||
<div class="detailNameContainer focuscontainer-x verticalFieldItem verticalFieldItems detail-lineItem">
|
||||
|
||||
</div>
|
||||
<div class="mediaInfo verticalFieldItem detail-mediaInfoPrimary flex align-items-center flex-wrap-wrap reduce-font-size-tv mediaInfoItems readOnlyContent hide detail-lineItem">
|
||||
|
||||
</div>
|
||||
|
||||
<div class="verticalFieldItem mediaInfo detail-mediaInfoSecondary flex align-items-center flex-wrap-wrap reduce-font-size-tv mediaInfoItems hide detail-lineItem" style="margin: .25em 0 0;">
|
||||
|
||||
</div>
|
||||
|
||||
<form class="verticalFieldItem trackSelections fieldItems flex align-items-center flex-wrap-wrap hide focuscontainer-x reduce-font-size-tv detail-lineItem" style="padding: 0;max-width:initial;">
|
||||
<div class="selectContainer selectContainer-inline selectSourceContainer hide trackSelectionFieldContainer fieldItems-item flex-shrink-zero">
|
||||
<select is="emby-select" class="selectSource detailTrackSelect emby-select-inline" label="${Version}" data-menu="custom" data-autofullscreen="false"></select>
|
||||
</div>
|
||||
<div class="selectContainer selectContainer-inline selectVideoContainer hide trackSelectionFieldContainer fieldItems-item flex-shrink-zero">
|
||||
<select is="emby-select" class="selectVideo detailTrackSelect emby-select-inline" label="${Video}" data-menu="custom" data-autofullscreen="false"></select>
|
||||
</div>
|
||||
<div class="selectContainer selectContainer-inline selectAudioContainer hide trackSelectionFieldContainer fieldItems-item flex-shrink-zero">
|
||||
<select is="emby-select" class="selectAudio detailTrackSelect emby-select-inline" label="${Audio}" data-menu="custom" data-autofullscreen="false"></select>
|
||||
</div>
|
||||
<div class="selectContainer selectContainer-inline selectSubtitlesContainer hide trackSelectionFieldContainer fieldItems-item">
|
||||
<select is="emby-select" class="selectSubtitles detailTrackSelect emby-select-inline" label="${Subtitles}" data-menu="custom" data-autofullscreen="false"></select>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div class="verticalFieldItem detailButtons mainDetailButtons flex align-items-flex-start flex-wrap-wrap focuscontainer-x detail-lineItem">
|
||||
|
||||
<button is="emby-button" type="button" class="btnResume raised detailButton hide" data-mode="resume" title="${Resume}">
|
||||
<i class="md-icon md-icon-fill button-icon button-icon-left autortl"></i>
|
||||
<span class="resumeButtonText detailButton-lowres">${Resume}</span>
|
||||
<span class="resumeButtonText detailButton-highres">${Resume}</span>
|
||||
</button>
|
||||
|
||||
<button is="emby-button" type="button" class="btnPlay btnMainPlay hide raised detailButton" data-mode="play" title="${Play}">
|
||||
<i class="md-icon md-icon-fill button-icon button-icon-left autortl"></i>
|
||||
<span class="playButtonText">${Play}</span>
|
||||
</button>
|
||||
|
||||
<button is="emby-button" type="button" class="btnPlayTrailer btnPlayTrailer-main hide raised detailButton" title="${Trailer}" aria-label="${Trailer}">
|
||||
<i class="md-icon button-icon button-icon-left"></i>
|
||||
<span>${Trailer}</span>
|
||||
</button>
|
||||
|
||||
<button is="emby-button" type="button" class="btnShuffle hide raised detailButton" title="${Shuffle}">
|
||||
<i class="md-icon button-icon button-icon-left"></i>
|
||||
<span>${Shuffle}</span>
|
||||
</button>
|
||||
|
||||
<button is="emby-button" type="button" class="btnCancelSeriesTimer hide raised detailButton" title="${HeaderCancelSeries}">
|
||||
<i class="md-icon md-icon-fill button-icon button-icon-left recordingIcon-active"></i>
|
||||
<span>${HeaderCancelSeries}</span>
|
||||
</button>
|
||||
|
||||
<button is="emby-button" type="button" class="btnCancelTimer hide raised detailButton" title="${HeaderStopRecording}">
|
||||
<i class="md-icon md-icon-fill button-icon button-icon-left recordingIcon-active"></i>
|
||||
<span>${HeaderStopRecording}</span>
|
||||
</button>
|
||||
|
||||
<button is="emby-button" type="button" class="btnManualRecording hide raised detailButton" title="${HeaderCreateRecording}">
|
||||
<i class="md-icon md-icon-fill button-icon button-icon-left"></i>
|
||||
<span>${HeaderCreateRecording}</span>
|
||||
</button>
|
||||
|
||||
<button is="emby-downloadbutton" type="button" class="btnSyncDownload hide fab detailButton detailButton-autotext" title="${Download}">
|
||||
<i class="md-icon detailButton-autotext-icon fab-icon"></i>
|
||||
<div class="detailButton-autotext-text secondaryText button-text">${Download}</div>
|
||||
</button>
|
||||
|
||||
<button is="emby-playstatebutton" type="button" class="btnPlaystate hide fab detailButton detailButton-autotext">
|
||||
<i class="md-icon detailButtonIcon detailButton-autotext-icon fab-icon"></i>
|
||||
<div class="detailButton-autotext-text secondaryText button-text"></div>
|
||||
</button>
|
||||
|
||||
<button is="emby-button" type="button" class="btnSortItems hide fab detailButton detailButton-autotext" title="${HeaderSortBy}" aria-label="${HeaderSortBy}">
|
||||
<i class="md-icon detailButton-autotext-icon fab-icon"></i>
|
||||
<div class="detailButton-autotext-text secondaryText btnSortText">${HeaderSortBy}</div>
|
||||
</button>
|
||||
|
||||
<button is="emby-button" type="button" class="btnGroupBy hide fab detailButton detailButton-autotext" title="${HeaderGroupBy}" aria-label="${HeaderGroupBy}">
|
||||
<i class="md-icon detailButton-autotext-icon fab-icon"></i>
|
||||
<div class="detailButton-autotext-text secondaryText btnSortText">${HeaderGroupBy}</div>
|
||||
</button>
|
||||
|
||||
<button is="emby-ratingbutton" type="button" class="btnUserRating hide fab detailButton detailButton-autotext">
|
||||
<i class="md-icon detailButton-autotext-icon fab-icon"></i>
|
||||
<div class="detailButton-autotext-text secondaryText button-text"></div>
|
||||
</button>
|
||||
|
||||
<button is="emby-button" type="button" class="btnDeleteItem hide fab detailButton detailButton-autotext" title="${Delete}" aria-label="${Delete}">
|
||||
<i class="md-icon detailButton-autotext-icon fab-icon"></i>
|
||||
<div class="detailButton-autotext-text secondaryText">${Delete}</div>
|
||||
</button>
|
||||
|
||||
<button is="emby-button" type="button" class="btnMoreCommands hide fab detailButton detailButton-autotext" title="${More}" aria-label="${More}">
|
||||
<i class="md-icon detailButton-autotext-icon fab-icon"></i>
|
||||
<div class="detailButton-autotext-text secondaryText">${More}</div>
|
||||
</button>
|
||||
|
||||
<button is="emby-button" type="button" class="seriesRecordingButton detailButton raised hide" title="${HeaderRecordSeries}">
|
||||
<i class="md-icon md-icon-fill button-icon button-icon-left recordingIcon"></i>
|
||||
<span class="button-text seriesRecordingButtonText">${HeaderRecordSeries}</span>
|
||||
</button>
|
||||
|
||||
<button is="emby-button" type="button" class="manageRecordingButton btnManageSeriesRecording hide detailButton raised" title="${SeriesSettings}">
|
||||
<i class="md-icon button-icon button-icon-left recordingIcon"></i>
|
||||
<span class="button-text seriesRecordingButtonText">${SeriesSettings}</span>
|
||||
</button>
|
||||
|
||||
<button is="emby-button" type="button" class="singleRecordingButton detailButton hide raised" title="${Record}">
|
||||
<i class="md-icon md-icon-fill button-icon button-icon-left recordingIcon"></i>
|
||||
<span class="button-text singleRecordingButtonText">${Record}</span>
|
||||
</button>
|
||||
|
||||
<button is="emby-button" type="button" class="manageRecordingButton btnManageRecording hide detailButton raised" title="${Settings}">
|
||||
<i class="md-icon button-icon button-icon-left recordingIcon"></i>
|
||||
<span class="button-text seriesRecordingButtonText">${Settings}</span>
|
||||
</button>
|
||||
|
||||
<div class="detailResumeInfo flex flex-wrap-wrap flex-direction-column hide">
|
||||
<div class="resumeInfoDetail verticalFieldItems">
|
||||
<div class="resumeName verticalFieldItem hide readOnlyContent" style="overflow:hidden;text-overflow:ellipsis;"></div>
|
||||
<div class="resumeProgress verticalFieldItem hide flex align-items-center">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h3 class="verticalFieldItem tagline hide readOnlyContent detail-lineItem detailText-moveup"></h3>
|
||||
<div class="verticalFieldItem birthDate hide detail-lineItem detailText-moveup">
|
||||
|
||||
</div>
|
||||
<div class="verticalFieldItem birthLocation hide detail-lineItem detailText-moveup">
|
||||
|
||||
</div>
|
||||
<div class="verticalFieldItem deathDate hide detail-lineItem detailText-moveup">
|
||||
|
||||
</div>
|
||||
|
||||
<div class="verticalFieldItem overview-container hide flex flex-direction-row align-items-flex-end focuscontainer-x detail-lineItem detailText-moveup">
|
||||
|
||||
<button disabled type="button" is="emby-button" class="button-link button-link-color-inherit btnOverviewText text-align-start" style="opacity:initial;">
|
||||
<div class="overview-text readOnlyContent"></div>
|
||||
</button>
|
||||
<a href="#" is="emby-linkbutton" class="button-link btnReadMore hide flex-shrink-zero secondaryText">${HeaderReadMore}</a>
|
||||
</div>
|
||||
|
||||
<div class="verticalFieldItem directors hide focuscontainer-x readOnlyContent reduce-font-size-tv secondaryText detail-lineItem">
|
||||
|
||||
</div>
|
||||
|
||||
<div class="verticalFieldItem recordingEditor hide detail-lineItem">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="trackListSection padded-left padded-left-page padded-right hide">
|
||||
<div class="trackList vertical-list padded-bottom focuscontainer-x verticalSection" is="emby-itemscontainer">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="details-additionalContent padded-bottom-page verticalSections verticalSections-item">
|
||||
|
||||
<div class="programGuideSection hide padded-left padded-left-page padded-right trackList-marginleftcards verticalSection">
|
||||
<div is="emby-itemscontainer" class="itemsContainer programGuideItemsContainer vertical-list focuscontainer-x padded-bottom-page" data-virtualscrolllayout="vertical-grid" data-monitor="Timers,SeriesTimers"></div>
|
||||
</div>
|
||||
|
||||
<div class="verticalSection verticalSection-cards additionalPartsSection hide">
|
||||
<h2 class="sectionTitle sectionTitle-cards padded-left padded-left-page padded-right">${HeaderAdditionalParts}</h2>
|
||||
|
||||
<div is="emby-scroller" class="emby-scroller padded-top-focusscale padded-bottom-focusscale padded-left padded-left-page padded-right" data-mousewheel="false" data-focusscroll="true" data-horizontal="true">
|
||||
|
||||
<div is="emby-itemscontainer" class="scrollSlider focuscontainer-x itemsContainer additionalPartsItemsContainer focusable" data-focusabletype="nearest" data-virtualscrolllayout="horizontal-grid"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="verticalSection verticalSection-cards verticalSection-extrabottompadding artistSongsSection hide">
|
||||
<div class="sectionTitleContainer sectionTitleContainer-cards padded-left padded-left-page padded-right artistSongsItemsHeader"></div>
|
||||
|
||||
<div is="emby-scroller" class="emby-scroller padded-top-focusscale padded-bottom-focusscale padded-left padded-left-page padded-right" data-mousewheel="false" data-focusscroll="true" data-horizontal="true">
|
||||
|
||||
<div is="emby-itemscontainer" class="scrollSlider focuscontainer-x itemsContainer focusable artistSongsItemsContainer itemsContainer-sideFooters" data-focusabletype="nearest" data-virtualscrolllayout="horizontal-grid"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="verticalSection verticalSection-cards seriesItemsSection hide">
|
||||
<div class="sectionTitleContainer sectionTitleContainer-cards padded-left padded-left-page padded-right">
|
||||
<h2 class="sectionTitle sectionTitle-cards"></h2>
|
||||
<div class="selectContainer selectContainer-inline sectionTitle-cards detailSelectSeasonContainer hide" style="margin-top:0!important;margin-bottom:.4em!important;">
|
||||
<select is="emby-select" class="detailSelectSeason emby-select-inline emby-select-inline-getitems" label="${Season}" data-dialogclass="detailSeasonSelect-actionsheet" data-hasitemimage="true" data-overview="true" data-virtualscroll="false" data-listitemcontentclass="detailSeasonSelect-actionsheet-listItem-content" data-menu="custom"></select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="seasonTabs hide focuscontainer-x">
|
||||
|
||||
</div>
|
||||
<div is="emby-scroller" class="emby-scroller childrenItemsScroller padded-top-focusscale padded-bottom-focusscale padded-left padded-left-page padded-right" data-mousewheel="false" data-focusscroll="true" data-horizontal="true">
|
||||
<div is="emby-itemscontainer" class="scrollSlider focuscontainer-x childrenItemsContainer generalItemsContainer itemsContainer focusable" data-focusabletype="nearest" data-virtualscrolllayout="horizontal-grid"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="verticalSection verticalSection-cards artistAlbumsSection hide">
|
||||
<div class="sectionTitleContainer sectionTitleContainer-cards padded-left padded-left-page padded-right">
|
||||
<a is="emby-sectiontitle" href="#" class="button-link button-link-color-inherit sectionTitleTextButton">
|
||||
<h2 class="sectionTitle sectionTitle-cards">${Albums}</h2>
|
||||
</a>
|
||||
</div>
|
||||
<div is="emby-scroller" class="emby-scroller padded-top-focusscale padded-bottom-focusscale padded-left padded-left-page padded-right" data-mousewheel="false" data-focusscroll="true" data-horizontal="true">
|
||||
<div is="emby-itemscontainer" class="scrollSlider focuscontainer-x generalItemsContainer itemsContainer focusable" data-focusabletype="nearest" data-virtualscrolllayout="horizontal-grid"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="verticalSection verticalSection-cards collectionItemsSection hide">
|
||||
<h2 class="sectionTitle sectionTitle-cards padded-left padded-left-page padded-right">${Items}</h2>
|
||||
<div is="emby-itemscontainer" class="itemsContainer vertical-wrap collectionItemsContainer generalItemsContainer focuscontainer-x padded-left padded-left-page padded-right"></div>
|
||||
</div>
|
||||
|
||||
<div class="verticalSection verticalSection-cards moreFromSeasonSection hide">
|
||||
<h2 class="sectionTitle sectionTitle-cards padded-left padded-left-page padded-right"></h2>
|
||||
|
||||
<div is="emby-scroller" class="emby-scroller padded-top-focusscale padded-bottom-focusscale padded-left padded-left-page padded-right" data-mousewheel="false" data-focusscroll="true" data-horizontal="true">
|
||||
|
||||
<div is="emby-itemscontainer" class="scrollSlider focuscontainer-x itemsContainer moreFromSeasonItemsContainer focusable" data-focusabletype="nearest" data-virtualscrolllayout="horizontal-grid"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="verticalSection verticalSection-cards specialsSection hide">
|
||||
<h2 class="sectionTitle sectionTitle-cards padded-left padded-left-page padded-right">${Specials}</h2>
|
||||
|
||||
<div is="emby-scroller" class="emby-scroller padded-top-focusscale padded-bottom-focusscale padded-left padded-left-page padded-right" data-mousewheel="false" data-focusscroll="true" data-horizontal="true">
|
||||
|
||||
<div is="emby-itemscontainer" class="scrollSlider focuscontainer-x itemsContainer specialsItemsContainer focusable" data-focusabletype="nearest" data-virtualscrolllayout="horizontal-grid"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="verticalSection verticalSection-cards peopleSection hide">
|
||||
<h2 class="sectionTitle sectionTitle-cards padded-left padded-left-page padded-right">${HeaderCastCrew}</h2>
|
||||
|
||||
<div is="emby-scroller" class="emby-scroller padded-top-focusscale padded-bottom-focusscale padded-left padded-left-page padded-right" data-mousewheel="false" data-focusscroll="true" data-horizontal="true">
|
||||
|
||||
<div is="emby-itemscontainer" class="scrollSlider focuscontainer-x itemsContainer focusable peopleItemsContainer" data-focusabletype="nearest" data-virtualscrolllayout="horizontal-grid"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="verticalSection verticalSection-cards extrasSection hide">
|
||||
<h2 class="sectionTitle sectionTitle-cards padded-left padded-left-page padded-right">${Extras}</h2>
|
||||
|
||||
<div is="emby-scroller" class="emby-scroller padded-top-focusscale padded-bottom-focusscale padded-left padded-left-page padded-right" data-mousewheel="false" data-focusscroll="true" data-horizontal="true">
|
||||
|
||||
<div is="emby-itemscontainer" class="scrollSlider focuscontainer-x itemsContainer extrasItemsContainer focusable" data-focusabletype="nearest" data-virtualscrolllayout="horizontal-grid"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="verticalSection verticalSection-cards chaptersSection hide">
|
||||
<div class="sectionTitleContainer sectionTitleContainer-cards">
|
||||
<h2 class="sectionTitle sectionTitle-cards padded-left padded-left-page padded-right">${Chapters}</h2>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="verticalSection verticalSection-cards moreFromArtistSection hide">
|
||||
<h2 class="sectionTitle sectionTitle-cards padded-left padded-left-page padded-right"></h2>
|
||||
<div is="emby-scroller" class="emby-scroller padded-top-focusscale padded-bottom-focusscale padded-left padded-left-page padded-right" data-mousewheel="false" data-focusscroll="true" data-horizontal="true">
|
||||
|
||||
<div is="emby-itemscontainer" class="scrollSlider focuscontainer-x itemsContainer moreFromArtistItemsContainer focusable" data-focusabletype="nearest" data-virtualscrolllayout="horizontal-grid"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="verticalSection verticalSection-cards albumsAsComposerSection hide">
|
||||
<h2 class="sectionTitle sectionTitle-cards padded-left padded-left-page padded-right">${HeaderAlbumsAsComposer}</h2>
|
||||
<div is="emby-scroller" class="emby-scroller padded-top-focusscale padded-bottom-focusscale padded-left padded-left-page padded-right" data-mousewheel="false" data-focusscroll="true" data-horizontal="true">
|
||||
|
||||
<div is="emby-itemscontainer" class="scrollSlider focuscontainer-x itemsContainer albumsAsComposerItemsContainer focusable" data-focusabletype="nearest" data-virtualscrolllayout="horizontal-grid"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="verticalSection verticalSection-cards seriesScheduleSection hide">
|
||||
<h2 class="sectionTitle sectionTitle-cards padded-left padded-left-page padded-right">${HeaderUpcomingOnTV}</h2>
|
||||
|
||||
<div is="emby-scroller" class="emby-scroller padded-top-focusscale padded-bottom-focusscale padded-left padded-left-page padded-right" data-mousewheel="false" data-focusscroll="true" data-horizontal="true">
|
||||
|
||||
<div is="emby-itemscontainer" class="scrollSlider focuscontainer-x itemsContainer focusable seriesScheduleItemsContainer" data-monitor="Timers,SeriesTimers" data-focusabletype="nearest" data-virtualscrolllayout="horizontal-grid"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="verticalSection verticalSection-cards appearsOnListsSection hide">
|
||||
<h2 class="sectionTitle sectionTitle-cards padded-left padded-left-page padded-right">${HeaderIncludedIn}</h2>
|
||||
|
||||
<div is="emby-scroller" class="emby-scroller padded-top-focusscale padded-bottom-focusscale padded-left padded-left-page padded-right" data-mousewheel="false" data-focusscroll="true" data-horizontal="true">
|
||||
|
||||
<div is="emby-itemscontainer" class="scrollSlider focuscontainer-x itemsContainer appearsOnListsItemsContainer focusable" data-focusabletype="nearest" data-virtualscrolllayout="horizontal-grid"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="linkedItems hide verticalSections verticalSections-item">
|
||||
|
||||
</div>
|
||||
|
||||
<div class="verticalSection verticalSection-cards similarSection hide">
|
||||
<h2 class="sectionTitle sectionTitle-cards padded-left padded-left-page padded-right">${HeaderMoreLikeThis}</h2>
|
||||
|
||||
<div is="emby-scroller" class="emby-scroller padded-top-focusscale padded-bottom-focusscale padded-left padded-left-page padded-right" data-mousewheel="false" data-focusscroll="true" data-horizontal="true">
|
||||
|
||||
<div is="emby-itemscontainer" class="scrollSlider focuscontainer-x itemsContainer focusable similarItemsContainer" data-focusabletype="nearest" data-virtualscrolllayout="horizontal-grid"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="verticalSection verticalSection-cards similarOnLiveTVCollapsible hide">
|
||||
<h2 class="sectionTitle sectionTitle-cards padded-left padded-left-page padded-right">${HeaderMoreLikeThisOnLiveTV}</h2>
|
||||
|
||||
<div is="emby-scroller" class="emby-scroller padded-top-focusscale padded-bottom-focusscale padded-left padded-left-page padded-right" data-mousewheel="false" data-focusscroll="true" data-horizontal="true">
|
||||
|
||||
<div is="emby-itemscontainer" class="scrollSlider focuscontainer-x itemsContainer focusable similarOnLiveTVItemsContainer" data-focusabletype="nearest" data-virtualscrolllayout="horizontal-grid"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="verticalSection verticalSection-cards seriesTimerScheduleSection padded-left padded-left-page padded-right hide">
|
||||
<h2 class="sectionTitle" style="margin-bottom: 0;">
|
||||
${Schedule}
|
||||
</h2>
|
||||
<div is="emby-itemscontainer" class="itemsContainer seriesTimerScheduleItemsContainer vertical-list focuscontainer-x" data-monitor="Timers"></div>
|
||||
</div>
|
||||
|
||||
<div class="verticalSection verticalSection-cards aboutSection hide" style="font-size:92%;">
|
||||
|
||||
<h2 class="sectionTitle sectionTitle-cards padded-left padded-left-page padded-right" style="margin-bottom:1em;">${About}</h2>
|
||||
|
||||
|
||||
<div class="flex flex-direction-column verticalSections verticalSections-condensed">
|
||||
|
||||
<div class="verticalSection verticalSection-cards genresSection hide">
|
||||
<h4 class="sectionTitle sectionTitle-cards padded-left padded-left-page padded-right">${Genres}</h4>
|
||||
<div class="sectionTitle sectionTitle-cards itemGenres padded-left padded-left-page padded-right focusable focuscontainer-x secondaryText textItems" data-focusabletype="nearest"></div>
|
||||
</div>
|
||||
|
||||
<div class="verticalSection verticalSection-cards tagsSection hide">
|
||||
<h4 class="sectionTitle sectionTitle-cards padded-left padded-left-page padded-right" style="margin-bottom: .1em;">${Tags}</h4>
|
||||
<div class="sectionTitle sectionTitle-cards itemTags padded-left padded-left-page padded-right focusable focuscontainer-x secondaryText textItems" data-focusabletype="nearest"></div>
|
||||
</div>
|
||||
|
||||
<div class="verticalSection verticalSection-cards studiosSection hide">
|
||||
<h4 class="sectionTitle sectionTitle-cards padded-left padded-left-page padded-right" style="margin-bottom: .1em;">${Studios}</h4>
|
||||
<div class="sectionTitle sectionTitle-cards itemStudios padded-left padded-left-page padded-right focusable focuscontainer-x secondaryText textItems" data-focusabletype="nearest"></div>
|
||||
</div>
|
||||
|
||||
<div class="verticalSection verticalSection-cards linksSection hide">
|
||||
<h4 class="sectionTitle sectionTitle-cards padded-left padded-left-page padded-right" style="margin-bottom: .1em;">${Links}</h4>
|
||||
<div class="sectionTitle sectionTitle-cards itemLinks padded-left padded-left-page padded-right focusable focuscontainer-x secondaryText textItems" data-focusabletype="nearest"></div>
|
||||
</div>
|
||||
|
||||
<div class="verticalSection verticalSection-cards audioVideoMediaInfo hide mediainfo-forcehide" style="margin-top:.5em;">
|
||||
<h4 class="padded-left padded-left-page padded-right sectionTitle sectionTitle-cards mediaInfoHeader" style="margin-bottom:.1em;">${HeaderMediaInfo}</h4>
|
||||
|
||||
<div class="splitVersionContainer padded-top padded-bottom padded-left padded-left-page padded-right">
|
||||
<button is="emby-button" type="button" class="raised btnSplitVersions subdued">${HeaderSplitVersionsApart}</button>
|
||||
</div>
|
||||
|
||||
<div class="mediaSources"></div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
1
item/item.js
Normal file
1
item/linkeditems.js
Normal file
1
legacy/dashboard.css
Normal file
@@ -0,0 +1 @@
|
||||
.paperList{margin:.5em auto;border-radius:.42em}.checkboxList-paperList{padding:.25em 1em!important}.paperList .listItemImageContainer{-webkit-margin-start:1em;margin-inline-start:1em;-webkit-margin-end:.25em;margin-inline-end:.25em}.paperList .listItem:last-child{border-bottom-style:none}
|
||||
1
legacy/dashboard.js
Normal file
@@ -0,0 +1 @@
|
||||
define(["./../modules/dom.js","./../modules/common/globalize.js","./../modules/loading/loading.js","./../modules/common/responsehelper.js","./../modules/common/pluginmanager.js"],function(_dom,_globalize,_loading,_responsehelper,_pluginmanager){function getWindowLocationSearch(win){var index,win=(win||globalThis).location.search;return win||-1!==(index=globalThis.location.href.indexOf("?"))&&(win=globalThis.location.href.substring(index)),win||""}globalThis.getWindowLocationSearch=getWindowLocationSearch,globalThis.getParameterByName=function(name,url){name=name.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");name=new RegExp("[\\?&]"+name+"=([^&#]*)","i").exec(url||getWindowLocationSearch());return null==name?"":decodeURIComponent(name[1].replace(/\+/g," "))};var Dashboard=globalThis.Dashboard||(globalThis.Dashboard={});Dashboard.confirm=function(message,title,callback){var options;options={title:title,text:message},Emby.importModule("./modules/common/dialogs/confirm.js").then(function(confirm){return confirm(options)}).then(function(){callback(!0)},function(){callback(!1)})},Dashboard.showLoadingMsg=function(){_loading.default.show()},Dashboard.hideLoadingMsg=function(){_loading.default.hide()},Dashboard.getCurrentUser=function(){return ApiClient.getCurrentUser()},Dashboard.getCurrentUserId=function(){return ApiClient.getCurrentUserId()},Dashboard.navigate=function(url,preserveQueryString){var queryString;if(url)return queryString=getWindowLocationSearch(),preserveQueryString&&queryString&&(url+=queryString),Emby.importModule("./modules/approuter.js").then(function(appRouter){return appRouter.show(url)});throw new Error("url cannot be null or empty")},Dashboard.processPluginConfigurationUpdateResult=function(){_loading.default.hide(),_responsehelper.default.handleConfigurationSavedResponse()},Dashboard.getConfigurationPageUrl=function(name){return _pluginmanager.default.getConfigurationPageUrl(name)},Dashboard.getConfigurationResourceUrl=function(name){return _pluginmanager.default.getConfigurationResourceUrl(name)},Dashboard.alert=function(options){"string"==typeof options?function(options){Emby.importModule("./modules/toast/toast.js").then(function(toast){return toast(options)})}({text:options}):function(options){return Emby.importModule("./modules/common/dialogs/alert.js").then(function(alert){return alert(options)})}({title:options.title||_globalize.default.translate("HeaderAlert"),text:options.message}).then(options.callback||function(){})},Dashboard.processServerConfigurationUpdateResult=function(response){return _responsehelper.default.handleConfigurationSavedResponse(response)},Dashboard.processErrorResponse=function(response){return _responsehelper.default.handleErrorResponse(response)},globalThis.pageClassOn=function(eventName,className,fn){document.addEventListener(eventName,function(e){var target=e.target;target.classList.contains(className)&&fn.call(target,e)})},globalThis.pageIdOn=function(eventName,id,fn){document.addEventListener(eventName,function(e){var target=e.target;target.id===id&&fn.call(target,e)})},_dom.default.parentWithClass=function(elem,classNames){return Array.isArray(classNames)?elem.closest("."+classNames.join(",.")):elem.closest("."+classNames)}});
|
||||
66
librarysetup/advancedtab.html
Normal file
@@ -0,0 +1,66 @@
|
||||
<div is="emby-scroller" data-horizontal="false" data-focusscroll="true" data-navcommands="card" data-forcescrollbar="true" class="scrollFrameY flex flex-direction-column flex-grow" data-bindheader="true">
|
||||
<div class="scrollSlider flex-grow padded-top-page padded-left padded-right padded-bottom-page">
|
||||
<div class="readOnlyContent auto-center padded-top">
|
||||
|
||||
<form class="fieldsets">
|
||||
|
||||
<fieldset>
|
||||
<div class="fieldset-fields">
|
||||
<div class="selectContainer fieldset-field">
|
||||
<select is="emby-select" class="selectDateAdded" label="${LabelDateAddedBehavior}">
|
||||
<option value="0">${OptionDateAddedImportTime}</option>
|
||||
<option value="1">${OptionDateAddedFileTime}</option>
|
||||
</select>
|
||||
<div class="fieldDescription">${LabelDateAddedBehaviorHelp}</div>
|
||||
</div>
|
||||
<div class="inputContainer fieldset-field">
|
||||
<div class="flex align-items-center">
|
||||
<div class="flex-grow">
|
||||
<input is="emby-input" class="txtMetadataPath" label="${LabelMetadataPath}" autocomplete="off" />
|
||||
</div>
|
||||
<button type="button" is="paper-icon-button-light" title="${ButtonSelectDirectory}" class="btnSelectMetadataPath emby-input-iconbutton"><i class="md-icon">search</i></button>
|
||||
</div>
|
||||
<div class="fieldDescription metadataPathDescription"></div>
|
||||
<input type="hidden" class="txtMetadataNetworkPath" />
|
||||
</div>
|
||||
|
||||
<div class="toggleContainer fldPeopleMetadata hide fieldset-field">
|
||||
<label>
|
||||
<input class="chkPeopleMetadata" type="checkbox" is="emby-toggle" />
|
||||
<span>${EnableReadingAndWritingPeopleMetadata}</span>
|
||||
</label>
|
||||
<div class="fieldDescription toggleFieldDescription">${EnableReadingAndWritingPeopleMetadataHelp}</div>
|
||||
</div>
|
||||
|
||||
<div class="toggleContainer fieldset-field">
|
||||
<label>
|
||||
<input class="chkExternalContentInSuggestions" type="checkbox" is="emby-toggle" />
|
||||
<span>${OptionEnableExternalContentInSuggestions}</span>
|
||||
</label>
|
||||
<div class="fieldDescription toggleFieldDescription">${OptionEnableExternalContentInSuggestionsHelp}</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>${HeaderPreferredMetadataLanguage}</legend>
|
||||
|
||||
<p class="legendDescription">${DefaultMetadataLangaugeDescription}</p>
|
||||
|
||||
<div class="fieldset-fields">
|
||||
<div class="selectContainer fieldset-field">
|
||||
<select is="emby-select" class="selectLanguage" required="required" label="${LabelMetadataDownloadLanguage}"></select>
|
||||
</div>
|
||||
|
||||
<div class="selectContainer fieldset-field">
|
||||
<select is="emby-select" class="selectCountry" required="required" label="${LabelCertificationCountry}"></select>
|
||||
<div class="fieldDescription">${CertificationCountryHelp}</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<button is="emby-button" type="submit" class="raised button-submit block"><span>${Save}</span></button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
1
librarysetup/advancedtab.js
Normal file
1
librarysetup/librariescontroller.js
Normal file
@@ -0,0 +1 @@
|
||||
define(["exports","./../modules/common/globalize.js","./../modules/common/itemmanager/itemmanager.js","./../modules/emby-apiclient/connectionmanager.js"],function(_exports,_globalize,_itemmanager,_connectionmanager){function addVirtualFolder(e){var options,view=this.view;_connectionmanager.default.currentApiClient().isMinServerVersion("4.9.0.70")?Emby.importModule("./components/medialibrarycreator/medialibrarycreator.js").then(function(medialibrarycreator){(new medialibrarycreator).show({collectionTypeOptions:function(){var options=[{name:"",value:""},{value:"movies",message:getLink("MovieLibraryHelp","https://github.com/MediaBrowser/Wiki/wiki/Movie%20naming")},{value:"music"},{value:"tvshows",message:getLink("TvLibraryHelp","https://github.com/MediaBrowser/Wiki/wiki/TV%20naming")}];options.push({value:"audiobooks"}),options.push({value:"books",message:getLink("BookLibraryHelp","https://github.com/MediaBrowser/Wiki/wiki/Book%20naming")}),options.push({value:"games",message:_globalize.default.translate("MessageGamePluginRequired")}),options.push({value:"musicvideos"}),options.push({value:"homevideos"}),options.push({name:_globalize.default.translate("MixedContent"),value:"mixed"});for(var i=1,length=options.length;i<length;i++)options[i].name||(options[i].name=_itemmanager.default.getContentTypeName(options[i].value));return options}().filter(function(f){return!f.hidden}),refresh:"true"===view.getAttribute("data-refreshlibrary")}).then(function(hasChanges){hasChanges&&view.querySelector(".itemsContainer").notifyRefreshNeeded(!0)})}):(options="Please use the Emby web app built into your server to manage your libraries, or update to Emby Server 4.9 or greater.",Emby.importModule("./modules/common/dialogs/alert.js").then(function(alert){return alert(options)}))}function getLink(text,url){return _globalize.default.translate(text,'<a is="emby-linkbutton" class="button-link" href="'+url+'" target="_blank" data-autohide="true">',"</a>")}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;_exports.default={addButtons:function(instance,addScanButton){var view=instance.view,sibling=view.querySelector(".listTotalRecordCount"),html='<button is="emby-button" type="button" class="itemsViewSettingsContainer-button raised raised-mini btnNewLibrary submit" title="'+_globalize.default.translate("HeaderNewLibrary")+'" aria-label="'+_globalize.default.translate("HeaderNewLibrary")+'"><i class="md-icon button-icon button-icon-left"></i><span class="emby-button-text">'+_globalize.default.translate("HeaderNewLibrary")+"</span></button>";addScanButton&&(html=html+('<button is="emby-button" type="button" class="itemsViewSettingsContainer-button raised raised-mini btnRefresh submit" title="'+_globalize.default.translate("HeaderScanLibraryFiles")+'" aria-label="'+_globalize.default.translate("HeaderScanLibraryFiles")+'"><i class="md-icon button-icon button-icon-left">refresh</i><span class="emby-button-text">'+_globalize.default.translate("HeaderScanLibraryFiles"))+'</span></button><div class="itemsViewSettingsContainer-button refreshProgress itemProgressBar itemProgressBarRound hide" style="width:10em;"></div>'),sibling.insertAdjacentHTML("afterend",html),view.querySelector(".btnNewLibrary").addEventListener("click",addVirtualFolder.bind(instance))}}});
|
||||
9
librarysetup/librarysetup.html
Normal file
@@ -0,0 +1,9 @@
|
||||
<div class="view flex flex-direction-column withTabs">
|
||||
|
||||
<div class="tabContent tabContent-positioned flex flex-grow" data-index="0" data-refreshlibrary="true">
|
||||
</div>
|
||||
|
||||
<div class="tabContent tabContent-positioned flex flex-grow" data-index="1">
|
||||
</div>
|
||||
|
||||
</div>
|
||||
1
librarysetup/librarysetup.js
Normal file
@@ -0,0 +1 @@
|
||||
define(["exports","./../modules/common/globalize.js","./../modules/tabbedview/tabbedview.js"],function(_exports,_globalize,_tabbedview){function LibrarySetupView(view,params){_tabbedview.default.apply(this,arguments)}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,Object.assign(LibrarySetupView.prototype,_tabbedview.default.prototype),LibrarySetupView.prototype.getTabs=function(){return[{name:_globalize.default.translate("Library"),id:"library"},{name:_globalize.default.translate("Advanced"),id:"advanced"}]},LibrarySetupView.prototype.loadTabController=function(id){return Emby.importModule("./librarysetup/"+id+"tab.js")};_exports.default=LibrarySetupView});
|
||||
1
librarysetup/librarytab.js
Normal file
@@ -0,0 +1 @@
|
||||
define(["exports","./../modules/tabbedview/itemstab.js","./../modules/emby-elements/emby-button/emby-button.js","./../modules/emby-elements/emby-scroller/emby-scroller.js","./../modules/emby-elements/emby-itemscontainer/emby-itemscontainer.js","./../modules/common/globalize.js","./../components/taskbutton.js","./librariescontroller.js"],function(_exports,_itemstab,_embyButton,_embyScroller,_embyItemscontainer,_globalize,_taskbutton,_librariescontroller){function LibraryTab(view,params){this.supportsViewSettings=!1,this.hasOtherViewButtons=!0,this.enableAlphaNumericShortcuts=!1,_itemstab.default.apply(this,arguments)}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,Object.assign(LibraryTab.prototype,_itemstab.default.prototype),LibraryTab.prototype.onTemplateLoaded=function(){_itemstab.default.prototype.onTemplateLoaded.apply(this,arguments),this.itemsContainer.refreshOnItemUpdated=!0,_librariescontroller.default.addButtons(this,!0);var btnRefresh=this.view.querySelector(".btnRefresh");btnRefresh&&(this.libraryScanTaskButton=new _taskbutton.default({progressElem:this.view.querySelector(".refreshProgress"),taskKey:"RefreshLibrary",button:btnRefresh}))},LibraryTab.prototype.onResume=function(options){var _this$libraryScanTask;_itemstab.default.prototype.onResume.apply(this,arguments),null!=(_this$libraryScanTask=this.libraryScanTaskButton)&&_this$libraryScanTask.resume({})},LibraryTab.prototype.onPause=function(){var _this$libraryScanTask2;_itemstab.default.prototype.onPause.apply(this,arguments),null!=(_this$libraryScanTask2=this.libraryScanTaskButton)&&_this$libraryScanTask2.pause()},LibraryTab.prototype.loadTemplate=function(){return this.loadItemsTemplate()},LibraryTab.prototype.getItems=function(query){return this.getApiClient().getVirtualFolders(query)},LibraryTab.prototype.getItemTypes=function(){return["VirtualFolder"]},LibraryTab.prototype.getSettingsKey=function(){return"libraries"},LibraryTab.prototype.getEmptyListMessage=function(){return Promise.resolve("")},LibraryTab.prototype.getItemCountText=function(numItems){return 1===numItems?_globalize.default.translate("OneLibrary"):_globalize.default.translate("LibraryCountValue",numItems)},LibraryTab.prototype.getContext=function(){return null},LibraryTab.prototype.getBaseListRendererOptions=function(){var options=_itemstab.default.prototype.getBaseListRendererOptions.apply(this,arguments);return options.draggable=!1,options.draggableXActions=!0,options.multiSelect=!1,options.action="edit",options.playQueueIndicator=!1,options},LibraryTab.prototype.getCardOptions=function(items,settings){var options=_itemstab.default.prototype.getCardOptions.apply(this,arguments);return Object.assign(options,{shape:"backdrop",fields:["Name","CollectionType","LibraryFolders"],cardLayout:!0,hoverPlayButton:!1,defaultBackground:!0,linkButtonAction:"edit"})},LibraryTab.prototype.getSortMenuOptions=function(){return[]},LibraryTab.prototype.destroy=function(){var _this$libraryScanTask3;_itemstab.default.prototype.destroy.apply(this,arguments),null!=(_this$libraryScanTask3=this.libraryScanTaskButton)&&_this$libraryScanTask3.destroy(),this.libraryScanTaskButton=null};_exports.default=LibraryTab});
|
||||
57
list/list.html
Normal file
@@ -0,0 +1,57 @@
|
||||
<div is="emby-scroller" data-canrefresh="true" data-horizontal="false" data-focusscroll="true" data-navcommands="card" data-forcescrollbar="true" class="viewScroller scrollFrameY view flex flex-direction-row virtualScrollerScrollContainer" data-bindheader="true">
|
||||
|
||||
<div class="alphaPicker alphaPicker-vertical alphaPicker-fixed focuscontainer-y hide"></div>
|
||||
|
||||
<div class="scrollSlider flex-grow padded-top-page padded-left padded-left-page padded-right">
|
||||
|
||||
<div class="align-items-center justify-content-center focuscontainer-x padded-bottom searchContainer hide">
|
||||
<div class="searchFields padded-bottom" style="margin-bottom:.5em;"></div>
|
||||
<div class="searchTabs hide" style="text-align:center;">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex align-items-center justify-content-center focuscontainer-x itemsViewSettingsContainer padded-top padded-bottom">
|
||||
<div class="listTotalRecordCount">
|
||||
</div>
|
||||
|
||||
<button is="emby-button" class="itemsViewSettingsContainer-button btnPlay raised raised-mini hide listTextButton-autohide">
|
||||
<i class="md-icon md-icon-fill button-icon button-icon-left autortl"></i>
|
||||
<span class="emby-button-text">${Play}</span>
|
||||
</button>
|
||||
<button is="paper-icon-button-light" class="itemsViewSettingsContainer-button btnPlay listIconButton-autohide">
|
||||
<i class="md-icon md-icon-fill autortl"></i>
|
||||
</button>
|
||||
<button is="emby-button" class="itemsViewSettingsContainer-button btnShuffle raised raised-mini hide listTextButton-autohide">
|
||||
<i class="md-icon button-icon button-icon-left"></i>
|
||||
<span class="emby-button-text">${Shuffle}</span>
|
||||
</button>
|
||||
<button is="paper-icon-button-light" class="itemsViewSettingsContainer-button btnShuffle hide listIconButton-autohide">
|
||||
<i class="md-icon"></i>
|
||||
</button>
|
||||
|
||||
<button is="emby-button" class="itemsViewSettingsContainer-button btnSort hide raised raised-mini listTextButton-autohide">
|
||||
<i class="md-icon button-icon button-icon-left autortl"></i>
|
||||
<span class="btnSortText emby-button-text"></span>
|
||||
<i class="md-icon btnSortIcon button-icon button-icon-right"></i>
|
||||
</button>
|
||||
<button is="paper-icon-button-light" class="itemsViewSettingsContainer-button btnSort hide listIconButton-autohide">
|
||||
<i class="md-icon autortl"></i>
|
||||
</button>
|
||||
<button is="emby-button" class="itemsViewSettingsContainer-button btnFilter fab fab-mini listTextButton-autohide hide" title="${Filter}">
|
||||
<i class="md-icon button-icon"></i>
|
||||
</button>
|
||||
<button is="paper-icon-button-light" class="itemsViewSettingsContainer-button btnFilter listIconButton-autohide hide" title="${Filter}">
|
||||
<i class="md-icon"></i>
|
||||
</button>
|
||||
<button is="emby-button" class="itemsViewSettingsContainer-button btnViewSettings fab fab-mini listTextButton-autohide hide" title="${Settings}">
|
||||
<i class="md-icon button-icon"></i>
|
||||
</button>
|
||||
<button is="paper-icon-button-light" class="itemsViewSettingsContainer-button btnViewSettings hide listIconButton-autohide" title="${Settings}">
|
||||
<i class="md-icon"></i>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div is="emby-itemscontainer" class="itemsContainer flex flex-grow vertical-wrap centered padded-bottom-page focuscontainer-x focuscontainer-y navout-up navout-x" data-focusabletype="nearest" data-virtualscrolllayout="vertical-grid" data-alphanumericshortcuts="true">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
1
list/list.js
Normal file
1
livetv/channels.js
Normal file
@@ -0,0 +1 @@
|
||||
define(["exports","./../modules/tabbedview/itemstab.js","./../modules/emby-elements/emby-itemscontainer/emby-itemscontainer.js","./../modules/emby-elements/emby-button/emby-button.js","./../modules/emby-elements/emby-scroller/emby-scroller.js","./../modules/common/usersettings/usersettings.js","./../modules/common/globalize.js"],function(_exports,_itemstab,_embyItemscontainer,_embyButton,_embyScroller,_usersettings,_globalize){function ChannelsTab(view,params,options){_itemstab.default.apply(this,arguments)}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,Object.assign(ChannelsTab.prototype,_itemstab.default.prototype),ChannelsTab.prototype.getItemTypes=function(){return["TvChannel"]},ChannelsTab.prototype.getSettingsKey=function(){return"livetvchannels"},ChannelsTab.prototype.saveSortingOnServer=function(){return!0},ChannelsTab.prototype.getCardOptions=function(items){var options=_itemstab.default.prototype.getCardOptions.apply(this,arguments);return-1!==(this.getSortValues().sortBy||"").toLowerCase().indexOf("channelnumber,sortname")&&(options.channelNumberFirst=!0),options},ChannelsTab.prototype.getSortBySettingsKey=function(sortMenuOptions){return _usersettings.default.getLiveTvChannelSortSettingsKey()},ChannelsTab.prototype.getSortMenuOptions=function(){return _usersettings.default.getLiveTvChannelSortOrders(_globalize.default)},ChannelsTab.prototype.getDefaultSorting=function(){var query={};return _usersettings.default.addLiveTvChannelSortingToQuery(query,_globalize.default),{sortBy:query.SortBy,sortOrder:query.SortOrder}},ChannelsTab.prototype.getSortByValue=function(){var query={};return _usersettings.default.addLiveTvChannelSortingToQuery(query,_globalize.default),query.SortBy},ChannelsTab.prototype.loadTemplate=function(){return this.loadItemsTemplate()};_exports.default=ChannelsTab});
|
||||
1
livetv/guide.css
Normal file
@@ -0,0 +1 @@
|
||||
.guideSelectedInfo{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;height:36%;padding-top:0;padding-bottom:0;margin-top:-3em;margin-bottom:.25em}.guide-focusPreviewOverview{-webkit-line-clamp:1}@media (min-width:60em){.page-withDockedDrawer .guideContainer{-webkit-padding-start:3.5rem;padding-inline-start:3.5rem}}@media (min-width:90em){.page-withDockedDrawer .guideContainer{-webkit-padding-start:4rem;padding-inline-start:4rem}}
|
||||
1
livetv/guide.js
Normal file
@@ -0,0 +1 @@
|
||||
define(["exports","./../modules/tabbedview/basetab.js","./../modules/emby-elements/emby-itemscontainer/emby-itemscontainer.js","./../modules/emby-elements/emby-button/emby-button.js","./../modules/emby-elements/emby-scroller/emby-scroller.js","./../modules/emby-apiclient/connectionmanager.js","./../modules/emby-apiclient/events.js","./../modules/appheader/appheader.js","./../modules/layoutmanager.js","./../modules/backdrop/backdrop.js","./../modules/emby-elements/guide/guide.js"],function(_exports,_basetab,_embyItemscontainer,_embyButton,_embyScroller,_connectionmanager,_events,_appheader,_layoutmanager,_backdrop,_guide){function GuideTab(view,params){_basetab.default.apply(this,arguments),this.apiClient=_connectionmanager.default.getApiClient(params.serverId),this.view=view,this.params=params,_layoutmanager.default.tv&&view.classList.add("guideContainer-tv"),this.boundonGuideFocus=function(e,detail){this._lastFocusInfo=detail,this.onFocusIn(detail.element)}.bind(this),this.boundonGuideFocusOut=function(e,detail){this._lastFocusInfo=null,this.onFocusOut()}.bind(this)}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,require(["css!livetv/guide.css"]),Object.assign(GuideTab.prototype,_basetab.default.prototype),GuideTab.prototype.getFocusPreviewItem=function(element){var focusInfo=this._lastFocusInfo;return(null==focusInfo?void 0:focusInfo.element)===element?focusInfo.item:null},GuideTab.prototype.refetchItemForFocusPreview=function(){return!0},GuideTab.prototype.enableFocusPreview=function(){return!!_layoutmanager.default.tv},GuideTab.prototype.createFocusPreviewElement=function(){var elem=this.view.querySelector(".guideSelectedInfo");return this.fillFocusPreviewContainer(elem),elem.querySelector(".focusPreviewOverview").classList.add("guide-focusPreviewOverview"),elem},GuideTab.prototype.onResume=function(options){_basetab.default.prototype.onResume.apply(this,arguments),options=options||{},_appheader.default.ensureVisible(),_backdrop.default.clear();var isNew,promise,guideInstance=this.guideInstance,guideContainer=this.view,focusGuideOnLoad=options.autoFocus||guideContainer.contains(document.activeElement),guideContainer=(guideInstance||(isNew=!0,guideInstance=this.guideInstance=new _guide.default({element:guideContainer,serverId:this.params.serverId,condensed:_layoutmanager.default.tv}),_layoutmanager.default.tv&&(_events.default.on(this.guideInstance,"focus",this.boundonGuideFocus),guideContainer.addEventListener("focusout",this.boundonGuideFocusOut),this.view.querySelector(".guideSelectedInfo").classList.remove("hide")),options.refresh=!0),_layoutmanager.default.tv?this.view.classList.add("liveGuideTab-tv"):this.view.classList.remove("liveGuideTab-tv"),this.getApiClient());return(promise=(promise=isNew&&_layoutmanager.default.tv?guideContainer.getItems(guideContainer.getCurrentUserId(),{IncludeItemTypes:"TvChannel",EnableTotalRecordCount:!1,Limit:1,SortBy:"DatePlayed",SortOrder:"Descending",Fields:"UserDataPlayCount",Recursive:!0,EnableImages:!1,AddCurrentProgram:!1}):promise)||Promise.resolve({Items:[]})).then(function(result){var _lastPlayedChannel$Us,result=result.Items[0];return null!=result&&null!=(_lastPlayedChannel$Us=result.UserData)&&_lastPlayedChannel$Us.PlayCount&&(options.scrollToChannelId=result.Id,options.focusOnScroll=focusGuideOnLoad,options.scrollBehavior="instant"),options.resetScroll="true"!==(null==(_lastPlayedChannel$Us=options.previousViewInfo)||null==(_lastPlayedChannel$Us=_lastPlayedChannel$Us.params)?void 0:_lastPlayedChannel$Us.asDialog),guideInstance.resume(options)})},GuideTab.prototype.enableFocusPreviewImage=function(){return!0},GuideTab.prototype.hideFocusPreviewElementUsingDisplay=function(){return!1},GuideTab.prototype.onPause=function(){_basetab.default.prototype.onPause.apply(this,arguments);var guideInstance=this.guideInstance;guideInstance&&guideInstance.pause()},GuideTab.prototype.destroy=function(){var view=this.view,guideInstance=(_basetab.default.prototype.destroy.apply(this,arguments),this.guideInstance);guideInstance&&(this.boundonGuideFocus&&(_events.default.off(guideInstance,"focus",this.boundonGuideFocus),this.boundonGuideFocus=null),this.boundonGuideFocusOut&&(null!=view&&view.removeEventListener("focusout",this.boundonGuideFocusOut),this.boundonGuideFocusOut=null),guideInstance.destroy()),this._lastFocusInfo=null,this.guideInstance=null};_exports.default=GuideTab});
|
||||
44
livetv/livetv.html
Normal file
@@ -0,0 +1,44 @@
|
||||
<div class="view flex flex-direction-column withTabs">
|
||||
|
||||
<div class="unlockContainer hide padded-left padded-left-page padded-right padded-top padded-top-page padded-bottom padded-bottom-page">
|
||||
|
||||
<div class="padded-left padded-right">
|
||||
<p class="unlockText" style="text-align:center;margin-top:0;"></p>
|
||||
|
||||
<button is="emby-button" type="button" class="raised button-submit block btnUnlock">
|
||||
<span class="btnUnlockText">${HeaderBecomeProjectSupporter}</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="tabContent tabContent-positioned flex flex-grow" data-index="0" data-swapnode="sectionstab">
|
||||
|
||||
</div>
|
||||
|
||||
<div class="tabContent tabContent-positioned flex flex-direction-column flex-grow padded-top-page guideContainer flex-grow padded-left padded-left-page" data-index="1" style="box-sizing:border-box;">
|
||||
|
||||
<div class="guideSelectedInfo flex-shrink-zero hide padded-left padded-left-page padded-right">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="tabContent tabContent-positioned flex flex-grow" data-index="2" data-swapnode="itemstab">
|
||||
|
||||
</div>
|
||||
|
||||
<div class="tabContent tabContent-positioned flex flex-grow" data-index="3" data-swapnode="itemstab">
|
||||
|
||||
</div>
|
||||
|
||||
<div class="tabContent tabContent-positioned flex flex-grow" data-index="4" data-swapnode="sectionstab">
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="tabContent tabContent-positioned flex flex-grow" data-index="5" data-swapnode="sectionstab">
|
||||
|
||||
</div>
|
||||
|
||||
<div class="tabContent tabContent-positioned flex flex-grow" data-index="6" data-swapnode="itemstab">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
1
livetv/livetv.js
Normal file
@@ -0,0 +1 @@
|
||||
define(["exports","./../modules/tabbedview/tabbedview.js","./../modules/common/globalize.js","./../modules/emby-elements/emby-itemscontainer/emby-itemscontainer.js","./../modules/emby-elements/emby-button/emby-button.js","./../modules/emby-elements/emby-scroller/emby-scroller.js","./../modules/focusmanager.js","./../modules/registrationservices/registrationservices.js","./../modules/common/usersettings/usersettings.js","./../modules/maintabsmanager.js"],function(_exports,_tabbedview,_globalize,_embyItemscontainer,_embyButton,_embyScroller,_focusmanager,_registrationservices,_usersettings,_maintabsmanager){function hideShowAll(view,className,hide){for(var elems=view.querySelectorAll("."+className),i=0,length=elems.length;i<length;i++)hide?elems[i].classList.add("hide"):elems[i].classList.remove("hide")}function validateUnlock(view,showDialog){return _registrationservices.default.validateFeature("livetv",{showDialog:showDialog,viewOnly:!0}).then(function(){hideShowAll(view,"tabContent",!1),view.querySelector(".unlockContainer").classList.add("hide")},function(){hideShowAll(view,"tabContent",!0),view.querySelector(".unlockContainer").classList.remove("hide"),_focusmanager.default.focus(view.querySelector(".btnUnlock"))})}function LiveTVView(view,params){_tabbedview.default.apply(this,arguments),view.querySelector(".unlockText").innerHTML=_globalize.default.translate("DvrSubscriptionRequired","",""),view.querySelector(".btnUnlockText").innerHTML=_globalize.default.translate("HeaderBecomeProjectSupporter"),validateUnlock(view,!1),view.querySelector(".btnUnlock").addEventListener("click",function(){validateUnlock(view,!0)})}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,Object.assign(LiveTVView.prototype,_tabbedview.default.prototype),LiveTVView.prototype.getTabs=function(){var item=(null==(item=this.item)?void 0:item.Subviews)||[];return[{name:_globalize.default.translate("Programs"),id:"suggestions"},{name:_globalize.default.translate("Guide"),id:"guide"},{name:_globalize.default.translate("Channels"),id:"channels"},{name:_globalize.default.translate("Tags"),id:"tags",enabled:item.includes("tags")},{name:_globalize.default.translate("Recordings"),id:"recordings"},{name:_globalize.default.translate("Schedule"),id:"schedule"},{name:_globalize.default.translate("Series"),id:"series"}]},LiveTVView.prototype.validateTabLoad=function(index){return validateUnlock(this.view,!1)},LiveTVView.prototype.supportsHorizontalTabScroll=function(){return!0},LiveTVView.prototype.getDefaultTabUserSettingsValue=function(folderId){return _usersettings.default.get("landing-livetv")},LiveTVView.prototype.loadTabController=function(id){switch(id){case"collections":return Emby.importModule("./modules/tabbedview/collectionstab.js");case"genres":return Emby.importModule("./modules/tabbedview/genrestab.js");case"tags":return Emby.importModule("./modules/tabbedview/tagstab.js");case"suggestions":return Emby.importModule("./livetv/suggestions.js");case"guide":return Emby.importModule("./livetv/guide.js");case"channels":return Emby.importModule("./livetv/channels.js");case"recordings":return Emby.importModule("./livetv/recordings.js");case"schedule":return Emby.importModule("./livetv/schedule.js");case"series":return Emby.importModule("./livetv/series.js");default:throw new Error("tab not found: "+id)}},LiveTVView.prototype.fetchItem=function(){var apiClient=this.getApiClient();return apiClient.getJSON(apiClient.getUrl("LiveTV/Folder"))},LiveTVView.prototype.getTabControllerOptions=function(id){var options=_tabbedview.default.prototype.getTabControllerOptions.apply(this,arguments);return"tags"===id&&(options.tagsApiClientMethod="getLiveTvChannelTags",options.prefixesApiClientMethod="getLiveTvChannelTagPrefixes"),options},LiveTVView.prototype.enableWindowInputCommands=function(){return!0},LiveTVView.prototype.onWindowInputCommand=function(e){switch(e.detail.command){case"livetv":return void e.preventDefault();case"recordedtv":return _maintabsmanager.default.selectedTabIndex(4),void e.preventDefault();case"guide":return _maintabsmanager.default.selectedTabIndex(1),void e.preventDefault()}_tabbedview.default.prototype.onWindowInputCommand.apply(this,arguments)};_exports.default=LiveTVView});
|
||||
1
livetv/recordings.js
Normal file
@@ -0,0 +1 @@
|
||||
define(["exports","./../modules/tabbedview/basetab.js","./../modules/common/globalize.js","./../modules/emby-elements/emby-itemscontainer/emby-itemscontainer.js","./../modules/emby-elements/emby-button/emby-button.js","./../modules/emby-elements/emby-scroller/emby-scroller.js","./../modules/tabbedview/sectionscontroller.js"],function(_exports,_basetab,_globalize,_embyItemscontainer,_embyButton,_embyScroller,_sectionscontroller){function LiveTvSuggestionsTab(view,params){_basetab.default.apply(this,arguments),_sectionscontroller.default.apply(this,arguments),this.view=view,this.params=params}function onAddRecordingClick(e){var instance=this;return Emby.importModule("./modules/recordingcreator/channelrecordingcreator.js").then(function(channelRecordingCreator){return channelRecordingCreator.createRecordingForChannel(null,{serverId:instance.getApiClient().serverId(),positionTo:e.target.closest("button")})})}function getListOptions(options){return Object.assign({preferThumb:"auto",inheritThumb:!1,shape:"autooverflow",centerText:!0,programsAsSeries:!0},options)}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,Object.assign(LiveTvSuggestionsTab.prototype,_basetab.default.prototype),Object.assign(LiveTvSuggestionsTab.prototype,_sectionscontroller.default.prototype),LiveTvSuggestionsTab.prototype.fetchSections=function(){var sections=[],serverId=this.serverId(),enableFocusPreview=this.enableFocusPreview(),supportsGrouping=this.getApiClient().isMinServerVersion("4.9.1.32");return sections.push({Id:"Buttons",CollectionType:"livetv",ViewType:"content",Monitor:[],ContentButtons:[{Name:_globalize.default.translate("HeaderAddRecording"),Icon:"add",OnClick:onAddRecordingClick.bind(this)}],CenterContentButtons:!0}),sections.push({Id:"LatestRecordings",Name:_globalize.default.translate("HeaderLatestRecordings"),CollectionType:"livetv",SectionType:"recordings",Monitor:[],RefreshInterval:3e5,ListOptions:getListOptions({fields:enableFocusPreview?[]:["Name","ParentName","ChannelName","AirTime"],preferThumb:"auto",showAirEndTime:!0}),QueryOptions:{GroupItems:!1,SortBy:"DateCreated",SortOrder:"Descending"},CommandOptions:{}}),supportsGrouping&§ions.push({Id:"AllRecordings",Name:_globalize.default.translate("HeaderAllRecordings"),CollectionType:"livetv",SectionType:"recordings",Monitor:[],ListOptions:getListOptions({fields:enableFocusPreview?[]:["ParentName","Name","ProductionYear","ChannelName","AirTime"]}),QueryOptions:{GroupItems:!0,SortBy:"DateLastContentAdded,SortName",SortOrder:"Descending"},Href:"list/list.html?type=Recordings&GroupItems=true&serverId="+serverId}),Promise.resolve(sections)},LiveTvSuggestionsTab.prototype.onTemplateLoaded1=function(){_basetab.default.prototype.onTemplateLoaded.apply(this,arguments);var elem=this.view.querySelector(".listTotalRecordCount"),html=(html=(html=(html="")+'<button is="emby-button" class="itemsViewSettingsContainer-button btnCreateRecording raised raised-mini listTextButton-autohide hide">'+'<i class="md-icon button-icon button-icon-left"></i>')+("<span>"+_globalize.default.translate("HeaderAddRecording")+"</span>")+"</button>")+('<button title="'+_globalize.default.translate("HeaderAddRecording")+'" is="paper-icon-button-light" class="itemsViewSettingsContainer-button btnCreateRecording listIconButton-autohide hide">');elem.insertAdjacentHTML("afterend",html=html+'<i class="md-icon autortl"></i>'+"</button>"),function(instance){for(var btnCreateRecordings=instance.view.querySelectorAll(".btnCreateRecording"),boundOnAddRecordingClick=onAddRecordingClick.bind(instance),i=0,length=btnCreateRecordings.length;i<length;i++)btnCreateRecordings[i].addEventListener("click",boundOnAddRecordingClick)}(this),this.itemsContainer.setAttribute("data-monitor","RecordingStarted,RecordingEnded"),this.getApiClient().getCurrentUser().then(function(user){for(var btnCreateRecordings=elem.parentNode.querySelectorAll(".btnCreateRecording"),i=0,length=btnCreateRecordings.length;i<length;i++)user.Policy.EnableLiveTvManagement?btnCreateRecordings[i].classList.remove("hide"):btnCreateRecordings[i].classList.add("hide")})},LiveTvSuggestionsTab.prototype.onResume=function(options){return _basetab.default.prototype.onResume.apply(this,arguments),_sectionscontroller.default.prototype.onResume.apply(this,arguments)},LiveTvSuggestionsTab.prototype.onPause=function(){_basetab.default.prototype.onPause.apply(this,arguments),_sectionscontroller.default.prototype.onPause.apply(this,arguments)},LiveTvSuggestionsTab.prototype.destroy=function(){_basetab.default.prototype.destroy.apply(this,arguments),_sectionscontroller.default.prototype.destroy.apply(this,arguments)};_exports.default=LiveTvSuggestionsTab});
|
||||
1
livetv/schedule.js
Normal file
@@ -0,0 +1 @@
|
||||
define(["exports","./../modules/tabbedview/basetab.js","./../modules/emby-elements/emby-itemscontainer/emby-itemscontainer.js","./../modules/emby-elements/emby-button/emby-button.js","./../modules/emby-elements/emby-scroller/emby-scroller.js","./../modules/common/datetime.js","./../modules/common/globalize.js","./../modules/emby-apiclient/connectionmanager.js","./../modules/emby-apiclient/events.js","./../modules/common/imagehelper.js","./../modules/common/input/api.js","./../modules/tabbedview/sectionscontroller.js"],function(_exports,_basetab,_embyItemscontainer,_embyButton,_embyScroller,_datetime,_globalize,_connectionmanager,_events,_imagehelper,_api,_sectionscontroller){function LiveTvScheduleTab(view,params){_basetab.default.apply(this,arguments),_sectionscontroller.default.apply(this,arguments),this.view=view,this.params=params,this.apiClient=_connectionmanager.default.getApiClient(params.serverId)}function pushSection(sections,name,enableFocusPreview,items){var cardLayout=1.5<=(_imagehelper.default.getPrimaryImageAspectRatio(items)||1);sections.push({Name:name,CollectionType:"livetv",Monitor:[],ListOptions:{shape:"autooverflow",fields:enableFocusPreview?[]:["ParentNameOrName","ChannelName","AirTime"],showAirEndTime:!0,cardLayout:cardLayout,centerText:!cardLayout,action:"edit",cardFooterAside:!1,showChannelLogo:cardLayout,preferThumb:cardLayout||null,multiSelect:!1},QueryOptions:{},Items:items})}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,Object.assign(LiveTvScheduleTab.prototype,_basetab.default.prototype),Object.assign(LiveTvScheduleTab.prototype,_sectionscontroller.default.prototype),LiveTvScheduleTab.prototype.fetchSections=function(){var enableFocusPreview=this.enableFocusPreview(),apiClient=this.getApiClient();return apiClient.getLiveTvTimers({IsActive:!1,IsScheduled:!0}).then(function(result){for(var sections=[],items=(sections.push({Name:_globalize.default.translate("HeaderActiveRecordings"),CollectionType:"livetv",SectionType:"recordings",Monitor:["RecordingStarted","RecordingEnded"],RefreshInterval:3e5,ListOptions:{shape:"autooverflow",cardLayout:!1,fields:["ParentNameOrName","ChannelName","AirTime"],showAirEndTime:!0,preferThumb:"auto",centerText:!0,multiSelect:!1},QueryOptions:{UserId:apiClient.getCurrentUserId(),IsInProgress:!0,Recursive:!0}}),result.Items),currentGroupName="",currentGroup=[],i=0,length=items.length;i<length;i++){var item=items[i],dateText="";if(item.StartDate)try{var premiereDate=_datetime.default.parseISO8601Date(item.StartDate),dateText=_datetime.default.toLocaleDateString(premiereDate,{weekday:"long",month:"short",day:"numeric"})}catch(err){}dateText!==currentGroupName?(currentGroup.length&&pushSection(sections,currentGroupName,enableFocusPreview,currentGroup),currentGroupName=dateText,currentGroup=[item]):currentGroup.push(item)}return currentGroup.length&&pushSection(sections,currentGroupName,enableFocusPreview,currentGroup),sections})},LiveTvScheduleTab.prototype.onResume=function(options){var serverNotificationHandler;return _basetab.default.prototype.onResume.apply(this,arguments),this.serverNotificationHandler||(serverNotificationHandler=function(){this.paused?this.needsSectionsRefresh=!0:this.onResume({refresh:!0,refreshSections:!0})}.bind(this),_events.default.on(_api.default,"TimerCreated",serverNotificationHandler),_events.default.on(_api.default,"TimerCancelled",serverNotificationHandler),_events.default.on(_api.default,"RecordingStarted",serverNotificationHandler),_events.default.on(_api.default,"RecordingEnded",serverNotificationHandler),this.serverNotificationHandler=serverNotificationHandler),_sectionscontroller.default.prototype.onResume.apply(this,arguments)},LiveTvScheduleTab.prototype.onPause=function(){_basetab.default.prototype.onPause.apply(this,arguments),_sectionscontroller.default.prototype.onPause.apply(this,arguments)},LiveTvScheduleTab.prototype.destroy=function(){_basetab.default.prototype.destroy.apply(this,arguments);var serverNotificationHandler=this.serverNotificationHandler;serverNotificationHandler&&(_events.default.off(_api.default,"TimerCreated",serverNotificationHandler),_events.default.off(_api.default,"TimerCancelled",serverNotificationHandler),_events.default.off(_api.default,"RecordingStarted",serverNotificationHandler),_events.default.off(_api.default,"RecordingEnded",serverNotificationHandler),this.serverNotificationHandler=null),_sectionscontroller.default.prototype.destroy.apply(this,arguments)};_exports.default=LiveTvScheduleTab});
|
||||
1
livetv/series.js
Normal file
@@ -0,0 +1 @@
|
||||
define(["exports","./../modules/tabbedview/itemstab.js","./../modules/emby-elements/emby-itemscontainer/emby-itemscontainer.js","./../modules/emby-elements/emby-button/emby-button.js","./../modules/emby-elements/emby-scroller/emby-scroller.js"],function(_exports,_itemstab,_embyItemscontainer,_embyButton,_embyScroller){function SeriesTab(view,params,options){this.supportsViewSettings=!1,this.enableTotalRecordCountDisplay=!1,_itemstab.default.apply(this,arguments,options)}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,Object.assign(SeriesTab.prototype,_itemstab.default.prototype),SeriesTab.prototype.onTemplateLoaded=function(){_itemstab.default.prototype.onTemplateLoaded.apply(this,arguments),this.itemsContainer.setAttribute("data-monitor","SeriesTimers")},SeriesTab.prototype.getSortMenuOptions=function(){return[]},SeriesTab.prototype.getItemTypes=function(){return["SeriesTimer"]},SeriesTab.prototype.getItems=function(){return this.apiClient.getLiveTvSeriesTimers({SortBy:"SortName",SortOrder:"Ascending"})},SeriesTab.prototype.getBaseListRendererOptions=function(){var options=_itemstab.default.prototype.getBaseListRendererOptions.apply(this,arguments);return options.draggable=!1,options.draggableXActions=!0,options.multiSelect=!1,options},SeriesTab.prototype.getSettingsKey=function(){return"livetvseries"},SeriesTab.prototype.loadTemplate=function(){return this.loadItemsTemplate()};_exports.default=SeriesTab});
|
||||
1
livetv/suggestions.js
Normal file
160
livetvsetup/advancedtab.html
Normal file
@@ -0,0 +1,160 @@
|
||||
<div is="emby-scroller" data-horizontal="false" data-focusscroll="true" data-navcommands="card" data-forcescrollbar="true" class="scrollFrameY flex flex-direction-column flex-grow" data-bindheader="true">
|
||||
<div class="scrollSlider flex-grow padded-top-page padded-left padded-right padded-bottom-page">
|
||||
<div class="readOnlyContent auto-center padded-top">
|
||||
|
||||
<form class="liveTvSettingsForm fieldsets">
|
||||
|
||||
<fieldset>
|
||||
<div class="fieldset-fields">
|
||||
<div class="selectContainer fldBufferSize hide fieldset-field">
|
||||
<select is="emby-select" class="selectBufferSize" label="${LiveBufferSizeHours}">
|
||||
<option value="0">${Unlimited}</option>
|
||||
<option value="1">1</option>
|
||||
<option value="2">2</option>
|
||||
<option value="3">3</option>
|
||||
<option value="4">4</option>
|
||||
<option value="5">5</option>
|
||||
<option value="6">6</option>
|
||||
<option value="7">7</option>
|
||||
<option value="8">8</option>
|
||||
<option value="9">9</option>
|
||||
<option value="10">10</option>
|
||||
</select>
|
||||
<div class="fieldDescription">${LiveBufferSizeHoursHelp}</div>
|
||||
</div>
|
||||
<div class="selectContainer fieldset-field">
|
||||
<select is="emby-select" class="selectGuideDays" label="${LabelNumberOfGuideDays}">
|
||||
<option value="">${Auto}</option>
|
||||
<option value="1">1</option>
|
||||
<option value="2">2</option>
|
||||
<option value="3">3</option>
|
||||
<option value="4">4</option>
|
||||
<option value="5">5</option>
|
||||
<option value="6">6</option>
|
||||
<option value="7">7</option>
|
||||
<option value="8">8</option>
|
||||
<option value="9">9</option>
|
||||
<option value="10">10</option>
|
||||
<option value="11">11</option>
|
||||
<option value="12">12</option>
|
||||
<option value="13">13</option>
|
||||
<option value="14">14</option>
|
||||
</select>
|
||||
<div class="fieldDescription">${LabelNumberOfGuideDaysHelp}</div>
|
||||
</div>
|
||||
<div class="toggleContainer fldWakeServer hide fieldset-field">
|
||||
<label>
|
||||
<input type="checkbox" is="emby-toggle" class="chkWakeServer" />
|
||||
<span>${LabelAutomaticallyWakeServerForRecordings}</span>
|
||||
</label>
|
||||
<div class="fieldDescription toggleFieldDescription">${LabelAutomaticallyWakeServerForRecordingsHelp}</div>
|
||||
</div>
|
||||
|
||||
<div class="selectContainer fldRecordingFolder hide fldRecordingFolderById fieldset-field">
|
||||
<label>
|
||||
<select is="emby-select" label="${LabelDefaultRecordingFolder}" class="selectRecordingFolder" data-itemsecondarytext="true" data-virtualscroll="false">
|
||||
</select>
|
||||
</label>
|
||||
<div class="fieldDescription">${RecordingFolderHelp}</div>
|
||||
</div>
|
||||
|
||||
<div class="selectContainer fldMovieRecordingFolder hide fldRecordingFolderById fieldset-field">
|
||||
<label>
|
||||
<select is="emby-select" label="${LabelMovieRecordingFolder}" class="selectMovieRecordingFolder" data-itemsecondarytext="true" data-virtualscroll="false">
|
||||
</select>
|
||||
</label>
|
||||
<div class="fieldDescription">${MovieRecordingFolderHelp}</div>
|
||||
</div>
|
||||
|
||||
<div class="selectContainer fldSeriesRecordingFolder hide fldRecordingFolderById fieldset-field">
|
||||
<label>
|
||||
<select is="emby-select" label="${LabelSeriesRecordingFolder}" class="selectSeriesRecordingFolder" data-itemsecondarytext="true" data-virtualscroll="false">
|
||||
</select>
|
||||
</label>
|
||||
<div class="fieldDescription">${SeriesRecordingFolderHelp}</div>
|
||||
</div>
|
||||
|
||||
<div class="inputContainer hide fldRecordingFolderByPath fieldset-field">
|
||||
<div class="flex align-items-center">
|
||||
<div class="flex-grow">
|
||||
<input is="emby-input" class="txtRecordingPath" label="${LabelDefaultRecordingFolder}" autocomplete="off" />
|
||||
</div>
|
||||
<button type="button" is="paper-icon-button-light" title="${ButtonSelectDirectory}" aria-label="${ButtonSelectDirectory}" class="btnSelectRecordingPath emby-input-iconbutton"><i class="md-icon">search</i></button>
|
||||
</div>
|
||||
<div class="fieldDescription">${RecordingFolderHelp}</div>
|
||||
</div>
|
||||
<div class="inputContainer hide fldRecordingFolderByPath fieldset-field">
|
||||
<div class="flex align-items-center">
|
||||
<div class="flex-grow">
|
||||
<input is="emby-input" class="txtMovieRecordingPath" label="${LabelMovieRecordingFolder}" autocomplete="off" />
|
||||
</div>
|
||||
<button type="button" is="paper-icon-button-light" title="${ButtonSelectDirectory}" aria-label="${ButtonSelectDirectory}" class="btnSelectMovieRecordingPath emby-input-iconbutton"><i class="md-icon">search</i></button>
|
||||
</div>
|
||||
<div class="fieldDescription">${MovieRecordingFolderHelp}</div>
|
||||
</div>
|
||||
<div class="inputContainer hide fldRecordingFolderByPath fieldset-field">
|
||||
<div class="flex align-items-center">
|
||||
<div class="flex-grow">
|
||||
<input is="emby-input" class="txtSeriesRecordingPath" label="${LabelSeriesRecordingFolder}" autocomplete="off" />
|
||||
</div>
|
||||
<button type="button" is="paper-icon-button-light" title="${ButtonSelectDirectory}" aria-label="${ButtonSelectDirectory}" class="btnSelectSeriesRecordingPath emby-input-iconbutton"><i class="md-icon">search</i></button>
|
||||
</div>
|
||||
<div class="fieldDescription">${SeriesRecordingFolderHelp}</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>${HeaderDefaultRecordingSettings}</legend>
|
||||
<div class="fieldset-fields">
|
||||
<div class="inputContainer fieldset-field">
|
||||
<div class="flex align-items-center">
|
||||
<div class="flex-grow">
|
||||
<input is="emby-input" type="number" class="txtPrePaddingMinutes" inputmode="numeric" required="required" min="-15" step="1" label="${LabelStartWhenPossible}" />
|
||||
</div>
|
||||
<div class="fieldDescription" style="margin:1.7em .5em 0;font-size:90%;">
|
||||
${MinutesBefore}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="inputContainer fieldset-field">
|
||||
<div class="flex align-items-center">
|
||||
<div class="flex-grow">
|
||||
<input is="emby-input" type="number" class="txtPostPaddingMinutes" inputmode="numeric" required="required" min="-15" step="1" label="${LabelStopWhenPossible}" />
|
||||
</div>
|
||||
<div class="fieldDescription" style="margin:1.7em .5em 0;font-size:90%;">
|
||||
${MinutesAfter}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend class="sectionTitle">${HeaderRecordingPostProcessing}</legend>
|
||||
|
||||
<div class="fieldset-fields">
|
||||
<div class="inputContainer fieldset-field">
|
||||
<div class="flex align-items-center">
|
||||
<div class="flex-grow">
|
||||
<input is="emby-input" type="text" class="txtPostProcessor" label="${LabelPostProcessor}" />
|
||||
</div>
|
||||
<button type="button" is="paper-icon-button-light" class="btnSelectPostProcessorPath emby-input-iconbutton"><i class="md-icon">search</i></button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="inputContainer fieldset-field">
|
||||
<input is="emby-input" type="text" class="txtPostProcessorArguments" label="${LabelPostProcessorArguments}" />
|
||||
<div class="fieldDescription">${PostProcessorArgumentsHelp}</div>
|
||||
<div class="fieldDescription postProcessorArgument">${DvrPostProcessorPathArgument}</div>
|
||||
<div class="fieldDescription extraPostProcessingArgs hide"></div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<div>
|
||||
<button is="emby-button" type="submit" class="raised button-submit block"><span>${Save}</span></button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
1
livetvsetup/advancedtab.js
Normal file
1
livetvsetup/channelstab.js
Normal file
@@ -0,0 +1 @@
|
||||
define(["exports","./../modules/tabbedview/itemstab.js","./../modules/emby-elements/emby-input/emby-input.js","./../modules/emby-elements/emby-button/emby-button.js","./../modules/emby-elements/emby-select/emby-select.js","./../modules/layoutmanager.js","./../modules/commandprocessor.js","./../modules/loading/loading.js","./../modules/emby-apiclient/connectionmanager.js"],function(_exports,_itemstab,_embyInput,_embyButton,_embySelect,_layoutmanager,_commandprocessor,_loading,_connectionmanager){function LiveTVSetupView(view,params){this.supportsViewSettings=!1,this.enableTotalRecordCountDisplay=!1,_itemstab.default.apply(this,arguments)}function onItemsChecked(options){var items=options.items,options=options.checked,item=items[0],items=_connectionmanager.default.getApiClient(item),disabled=(_loading.default.show(),!options);return items.setChannelDisabled(item,disabled).then(function(updatedChannel){item.Disabled=disabled,_loading.default.hide()})}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,Object.assign(LiveTVSetupView.prototype,_itemstab.default.prototype),LiveTVSetupView.prototype.onResume=function(options){_itemstab.default.prototype.onResume.apply(this,arguments)},LiveTVSetupView.prototype.onPause=function(){_itemstab.default.prototype.onPause.apply(this,arguments)},LiveTVSetupView.prototype.getApiClientQueryMethodName=function(){return"getLiveTvChannelsForManagement"},LiveTVSetupView.prototype.getBaseListRendererOptions=function(){var options=_itemstab.default.prototype.getBaseListRendererOptions.apply(this,arguments);return options.action=_layoutmanager.default.tv?"menu":"custom",options.multiSelect=!1,options},LiveTVSetupView.prototype.getListViewOptions=function(items,settings){var options=_itemstab.default.prototype.getListViewOptions.apply(this,arguments),enableDragReordering=!this.getQueryInfo().hasFilters;return Object.assign(options,{fields:["Name","ItemCheckbox","TunerName","MappedChannelInfo"],draggable:enableDragReordering,dragReorder:enableDragReordering,image:!0,roundCheckbox:!0,checkboxAction:onItemsChecked})},LiveTVSetupView.prototype.getCardOptions=function(items,settings){var options=_itemstab.default.prototype.getCardOptions.apply(this,arguments);return Object.assign(options,{draggable:!1,draggableXActions:!1,fields:["Name","TunerName"]})},LiveTVSetupView.prototype.getSettingsKey=function(){return"managechannels"},LiveTVSetupView.prototype.getSortMenuOptions=function(){return[]},LiveTVSetupView.prototype.getDefaultSorting=function(){return{sortBy:"DefaultChannelOrder",sortOrder:"Ascending"}},LiveTVSetupView.prototype.getVisibleFilters=function(){return["ChannelMappingStatus"]},LiveTVSetupView.prototype.getItemTypes=function(){return["ChannelManagementInfo"]},LiveTVSetupView.prototype.setTitle=function(){},LiveTVSetupView.prototype.loadTemplate=function(){return this.loadItemsTemplate()},LiveTVSetupView.prototype.onTemplateLoaded=function(){_itemstab.default.prototype.onTemplateLoaded.apply(this,arguments);var itemsContainer=this.itemsContainer;itemsContainer.setAttribute("data-monitor","ChannelManagementInfoUpdated"),itemsContainer.addEventListener("action-null",function(e){var item=e.detail.item;item.Disabled||_commandprocessor.default.executeCommand("edit",[item],{}).then(function(){e.target.closest(".itemsContainer").notifyRefreshNeeded(!0)})}.bind(this))};_exports.default=LiveTVSetupView});
|
||||
22
livetvsetup/guideprovider.html
Normal file
@@ -0,0 +1,22 @@
|
||||
<div is="emby-scroller" class="view flex flex-direction-column scrollFrameY flex-grow" data-mousewheel="true" data-horizontal="false" data-forcescrollbar="true" data-focusscroll="true" data-bindheader="true">
|
||||
<div class="scrollSlider flex-grow flex-direction-column padded-left padded-left-page padded-right padded-top-page padded-bottom-page settingsContainer">
|
||||
<form class="auto-center">
|
||||
|
||||
<h2>
|
||||
${HeaderAddGuideSource}
|
||||
</h2>
|
||||
|
||||
<div class="selectContainer">
|
||||
<select is="emby-select" class="selectCountry" required="required" label="${LabelCountry}"></select>
|
||||
</div>
|
||||
<div class="selectContainer fldGuideProvider hide">
|
||||
<select is="emby-select" class="selectProvider" required="required" label="${GuideDataSource}"></select>
|
||||
</div>
|
||||
|
||||
<div class="flex justify-content-flex-end">
|
||||
<button is="emby-button" type="submit" class="raised button-submit btnSubmit"><span>${Next}</span><i class="md-icon button-icon button-icon-right autortl"></i></button>
|
||||
<button is="emby-button" type="button" class="raised button-cancel btnCancel"><span>${Cancel}</span></button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
1
livetvsetup/guideprovider.js
Normal file
@@ -0,0 +1 @@
|
||||
define(["exports","./../modules/viewmanager/basesettingsview.js","./../modules/loading/loading.js","./../modules/emby-elements/emby-select/emby-select.js","./../modules/approuter.js"],function(_exports,_basesettingsview,_loading,_embySelect,_approuter){function onCountryChange(e){var e=e.target,country=e.value,e=e.closest("FORM").querySelector(".fldGuideProvider"),selectProvider=(country?e.classList.remove("hide"):(e.classList.add("hide"),_loading.default.hide()),e.querySelector(".selectProvider"));selectProvider.innerHTML="",country&&(_loading.default.show(),(e=this.getApiClient()).getJSON(e.getUrl("LiveTv/ListingProviders/Available",{Country:country})).then(function(options){!function(select,options){select.innerHTML='<option value=""></option>'+options.map(function(o){return'<option data-url="'+o.SetupUrl+'" value="'+o.Id+'">'+o.Name+"</option>"}).join("")}(selectProvider,options),_loading.default.hide()}))}function cancel(){_approuter.default.back()}function onSubmit(e){var selectProvider=this.querySelector(".selectProvider"),country=this.querySelector(".selectCountry").value,selectProvider=selectProvider.options[selectProvider.selectedIndex].getAttribute("data-url");selectProvider.includes("?")?selectProvider+="&":selectProvider+="?",_approuter.default.show(selectProvider+="country="+country),e.preventDefault(),e.stopPropagation()}function View(view,params){_basesettingsview.default.apply(this,arguments),view.querySelector("form").addEventListener("submit",onSubmit),view.querySelector(".btnCancel").addEventListener("click",cancel),view.querySelector(".selectCountry").addEventListener("change",onCountryChange.bind(this))}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,Object.assign(View.prototype,_basesettingsview.default.prototype),View.prototype.loadSettingsInternal=function(){var select,selectCountry=this.view.querySelector(".selectCountry");return select=selectCountry,this.getApiClient().getCountries().then(function(allCountries){var html="";html+="<option value=''></option>";for(var i=0,length=allCountries.length;i<length;i++){var culture=allCountries[i];html+="<option value='"+culture.ThreeLetterISORegionName+"'>"+culture.DisplayName+"</option>"}select.innerHTML=html})};_exports.default=View});
|
||||
12
livetvsetup/livetvsetup.html
Normal file
@@ -0,0 +1,12 @@
|
||||
<div class="view flex flex-direction-column withTabs">
|
||||
|
||||
<div class="tabContent tabContent-positioned flex flex-grow" data-index="0">
|
||||
</div>
|
||||
|
||||
<div class="tabContent tabContent-positioned flex flex-grow" data-index="1">
|
||||
</div>
|
||||
|
||||
<div class="tabContent tabContent-positioned flex flex-grow" data-index="2">
|
||||
</div>
|
||||
|
||||
</div>
|
||||
1
livetvsetup/livetvsetup.js
Normal file
@@ -0,0 +1 @@
|
||||
define(["exports","./../modules/common/globalize.js","./../modules/tabbedview/tabbedview.js"],function(_exports,_globalize,_tabbedview){function LiveTVSetupView(view,params){_tabbedview.default.apply(this,arguments)}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,Object.assign(LiveTVSetupView.prototype,_tabbedview.default.prototype),LiveTVSetupView.prototype.getTabs=function(){return[{name:_globalize.default.translate("Setup"),id:"setup"},{name:_globalize.default.translate("Channels"),id:"channels"},{name:_globalize.default.translate("Advanced"),id:"advanced"}]},LiveTVSetupView.prototype.loadTabController=function(id){return Emby.importModule("./livetvsetup/"+id+"tab.js")};_exports.default=LiveTVSetupView});
|
||||
70
livetvsetup/livetvtuner.html
Normal file
@@ -0,0 +1,70 @@
|
||||
<div is="emby-scroller" class="view flex flex-direction-column scrollFrameY flex-grow" data-mousewheel="true" data-horizontal="false" data-forcescrollbar="true" data-focusscroll="true" data-bindheader="true">
|
||||
<div class="scrollSlider flex-grow flex-direction-column padded-left padded-left-page padded-right padded-top-page padded-bottom-page settingsContainer">
|
||||
<form class="auto-center fieldsets padded-top">
|
||||
|
||||
<fieldset>
|
||||
|
||||
<legend class="typeName" style="margin-bottom:0;"></legend>
|
||||
|
||||
<button is="emby-button" type="button" class="raised button-cancel block btnDetect hide" style="margin-bottom:2em;">${HeaderDetectMyDevices}</button>
|
||||
|
||||
<div class="fieldset-fields">
|
||||
<div class="inputContainer fldFriendlyName hide fieldset-field">
|
||||
<input is="emby-input" type="text" class="txtFriendlyName" label="${LabelFriendlyName}" autocomplete="off" />
|
||||
</div>
|
||||
|
||||
<div class="inputContainer fldPath hide fieldset-field">
|
||||
<div class="flex align-items-center">
|
||||
<div class="flex-grow">
|
||||
<input is="emby-input" type="text" class="txtDevicePath" label="${LabelFileOrUrl}" required="required" autocomplete="off" />
|
||||
</div>
|
||||
<button type="button" is="paper-icon-button-light" class="btnSelectPath hide emby-input-iconbutton"><i class="md-icon">search</i></button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="inputContainer fldUserAgent fieldset-field">
|
||||
<input is="emby-input" type="text" class="txtUserAgent" label="${LabelUserAgentHeader}" autocomplete="off" />
|
||||
<div class="fieldDescription">${SupplyCustomValueIfNeeded}</div>
|
||||
</div>
|
||||
|
||||
<div class="inputContainer fldReferrer fieldset-field">
|
||||
<input is="emby-input" type="text" class="txtReferrer" label="${LabelReferrerHeader}" autocomplete="off" />
|
||||
<div class="fieldDescription">${SupplyCustomValueIfNeeded}</div>
|
||||
</div>
|
||||
|
||||
<div class="inputContainer fldTunerCount hide fieldset-field">
|
||||
<input is="emby-input" type="number" inputmode="numeric" required="required" min="0" step="1" class="txtTunerCount" label="${LabelSimultaneousConnectionLimit}" autocomplete="off" value="0" />
|
||||
<div class="fieldDescription">${SimultaneousConnectionLimitHelp}</div>
|
||||
</div>
|
||||
|
||||
<div class="toggleContainer fldFavorites hide fieldset-field">
|
||||
<label>
|
||||
<input type="checkbox" is="emby-toggle" class="chkFavorite" />
|
||||
<span>${LabelImportOnlyFavoriteChannels}</span>
|
||||
</label>
|
||||
<div class="fieldDescription toggleFieldDescription">${ImportFavoriteChannelsHelp}</div>
|
||||
</div>
|
||||
<div class="toggleContainer fldTranscode hide fieldset-field">
|
||||
<label>
|
||||
<input type="checkbox" is="emby-toggle" class="chkTranscode" />
|
||||
<span>${LabelAllowHWTranscoding}</span>
|
||||
</label>
|
||||
<div class="fieldDescription toggleFieldDescription">${AllowHWTranscodingHelp}</div>
|
||||
</div>
|
||||
</div>
|
||||
<p class="drmMessage hide fieldDescription fieldset-fields-fieldDescription">${DrmChannelsNotImported}</p>
|
||||
</fieldset>
|
||||
|
||||
|
||||
<div>
|
||||
<input type="hidden" class="fldDeviceId" />
|
||||
<button is="emby-button" type="submit" class="raised button-submit block">
|
||||
<span class="saveButtonText"></span>
|
||||
</button>
|
||||
<button is="emby-button" type="button" class="raised button-cancel block btnCancel">
|
||||
<span>${Cancel}</span>
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
1
livetvsetup/livetvtuner.js
Normal file
40
livetvsetup/setuptab.html
Normal file
@@ -0,0 +1,40 @@
|
||||
<div is="emby-scroller" data-horizontal="false" data-focusscroll="true" data-navcommands="card" data-forcescrollbar="true" class="scrollFrameY flex flex-grow" data-bindheader="true">
|
||||
<div class="scrollSlider flex-grow padded-top-page padded-left padded-right verticalSections">
|
||||
|
||||
<div is="emby-premierecontainer" class="verticalSection padded-bottom padded-top premiereInfo sectionTitle-cards" style="margin-top:0;">
|
||||
|
||||
</div>
|
||||
|
||||
<div class="verticalSection">
|
||||
<div class="sectionTitleContainer sectionTitleContainer-cards flex align-items-center flex-wrap-wrap">
|
||||
<h2 class="sectionTitle sectionTitle-cards">
|
||||
<span>${HeaderTVSources}</span>
|
||||
</h2>
|
||||
<button is="emby-button" type="button" class="raised raised-mini btnAddDevice submit sectionTitleButton">
|
||||
<i class="md-icon button-icon button-icon button-icon-left"></i>
|
||||
<span>${HeaderAddTvSource}</span>
|
||||
</button>
|
||||
|
||||
<button is="emby-button" type="button" class="raised raised-mini btnRefresh button-cancel sectionTitleButton">
|
||||
<i class="md-icon button-icon button-icon-left">refresh</i>
|
||||
<span>${ButtonRefreshGuideData}</span>
|
||||
</button>
|
||||
<div class="refreshGuideProgress itemProgressBar itemProgressBarRound hide sectionTitleButton" style="width:10em;"></div>
|
||||
|
||||
</div>
|
||||
<div class="devicesList itemsContainer vertical-wrap itemsContainer-defaultCardSize" is="emby-itemscontainer" style="margin-top: .5em;" data-monitor="LiveTVTunerDevices"></div>
|
||||
</div>
|
||||
|
||||
<div class="verticalSection">
|
||||
<div class="sectionTitleContainer sectionTitleContainer-cards flex align-items-center flex-wrap-wrap">
|
||||
<h2 class="sectionTitle sectionTitle-cards">${HeaderGuideProviders}</h2>
|
||||
<button is="emby-button" type="button" class="raised raised-mini btnAddProvider submit sectionTitleButton">
|
||||
<i class="md-icon button-icon button-icon button-icon-left"></i>
|
||||
<span>${HeaderAddGuideSource}</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="providerList itemsContainer vertical-wrap" is="emby-itemscontainer" style="margin-top: .5em;" data-monitor="LiveTVGuideSources"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
1
livetvsetup/setuptab.js
Normal file
17
logs/applogsettingstab.html
Normal file
@@ -0,0 +1,17 @@
|
||||
<div is="emby-scroller" data-horizontal="false" data-focusscroll="true" data-navcommands="card" data-forcescrollbar="true" class="scrollFrameY flex flex-direction-column flex-grow" data-bindheader="true">
|
||||
<div class="scrollSlider flex-grow padded-top-page padded-left padded-right padded-bottom-page">
|
||||
|
||||
<div class="readOnlyContent auto-center padded-top">
|
||||
|
||||
<form>
|
||||
<div class="toggleContainer">
|
||||
<label>
|
||||
<input is="emby-toggle" type="checkbox" label="${EnableAppLogging}" class="chkEnableLogging autoSetting autoSave" data-settingmethod="enableLogging" data-settingowner="appsettings" />
|
||||
</label>
|
||||
<div class="fieldDescription toggleFieldDescription">${EnableAppLoggingHelp}</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
1
logs/applogsettingstab.js
Normal file
@@ -0,0 +1 @@
|
||||
define(["exports","./../modules/tabbedview/basesettingstab.js","./../modules/emby-elements/emby-input/emby-input.js","./../modules/emby-elements/emby-button/emby-button.js","./../modules/emby-elements/emby-select/emby-select.js","./../modules/emby-elements/emby-toggle/emby-toggle.js","./../modules/emby-elements/emby-scroller/emby-scroller.js","./../modules/emby-elements/emby-itemscontainer/emby-itemscontainer.js"],function(_exports,_basesettingstab,_embyInput,_embyButton,_embySelect,_embyToggle,_embyScroller,_embyItemscontainer){function LogSettingsTab(view,params){_basesettingstab.default.apply(this,arguments)}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,require(["flexStyles","material-icons"]),Object.assign(LogSettingsTab.prototype,_basesettingstab.default.prototype),LogSettingsTab.prototype.loadTemplate=function(){return require(["text!logs/applogsettingstab.html"])},LogSettingsTab.prototype.loadSettingsInternal=function(){return this.loadAutoSettings()};_exports.default=LogSettingsTab});
|
||||
1
logs/log.css
Normal file
@@ -0,0 +1 @@
|
||||
.logViewScroller{overflow-x:scroll!important}.logView .virtual-scroller{contain:layout size!important;contain:style size!important;container-type:initial!important}.logView .listItem{width:auto;min-width:100%}
|
||||
1
logs/log.js
Normal file
12
logs/logs.html
Normal file
@@ -0,0 +1,12 @@
|
||||
<div class="view flex flex-direction-column withTabs">
|
||||
|
||||
<div class="tabContent tabContent-positioned flex flex-grow" data-index="0">
|
||||
</div>
|
||||
|
||||
<div class="tabContent tabContent-positioned flex flex-grow" data-index="1">
|
||||
</div>
|
||||
|
||||
<div class="tabContent tabContent-positioned flex flex-grow" data-index="2">
|
||||
</div>
|
||||
|
||||
</div>
|
||||