first commit

This commit is contained in:
2026-02-09 10:48:21 +01:00
commit 15f28c0dd6
848 changed files with 107188 additions and 0 deletions

1
dashboard/dashboard.css Normal file
View 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
View 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">&#xe5ca;</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

File diff suppressed because one or more lines are too long

View 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>

View 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});

View 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
View 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

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB