mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
Merge branch 'master' into where-no-module-has-gone-before
This commit is contained in:
commit
fedcc5fe56
14 changed files with 177 additions and 80 deletions
21
gulpfile.js
21
gulpfile.js
|
@ -19,13 +19,13 @@ const inject = require('gulp-inject');
|
|||
const postcss = require('gulp-postcss');
|
||||
const sass = require('gulp-sass');
|
||||
|
||||
sass.compiler = require('node-sass')
|
||||
|
||||
sass.compiler = require('node-sass');
|
||||
|
||||
let config;
|
||||
if (mode.production()) {
|
||||
var config = require('./webpack.prod.js');
|
||||
config = require('./webpack.prod.js');
|
||||
} else {
|
||||
var config = require('./webpack.dev.js');
|
||||
config = require('./webpack.dev.js');
|
||||
}
|
||||
|
||||
function serve() {
|
||||
|
@ -36,20 +36,20 @@ function serve() {
|
|||
port: 8080
|
||||
});
|
||||
|
||||
watch(['src/**/*.js', '!src/bundle.js'], javascript);
|
||||
watch(['src/**/*.js', '!src/bundle.js'], series(javascript, standalone));
|
||||
watch('src/bundle.js', webpack);
|
||||
watch('src/**/*.css', css);
|
||||
watch(['src/**/*.html', '!src/index.html'], html);
|
||||
watch(['src/**/*.png', 'src/**/*.jpg', 'src/**/*.gif', 'src/**/*.svg'], images);
|
||||
watch(['src/**/*.json', 'src/**/*.ico'], copy);
|
||||
watch('src/index.html', injectBundle);
|
||||
watch(['src/standalone.js', 'src/scripts/apploader.js'], standalone);
|
||||
}
|
||||
|
||||
function standalone() {
|
||||
return src(['src/standalone.js', 'src/scripts/apploader.js'], { base: './src/' })
|
||||
.pipe(concat('scripts/apploader.js'))
|
||||
.pipe(dest('dist/'));
|
||||
.pipe(dest('dist/'))
|
||||
.pipe(browserSync.stream());
|
||||
}
|
||||
|
||||
function clean() {
|
||||
|
@ -70,7 +70,6 @@ function javascript() {
|
|||
}))
|
||||
.pipe(mode.development(sourcemaps.write('.')))
|
||||
.pipe(dest('dist/'))
|
||||
.pipe(browserSync.stream());
|
||||
}
|
||||
|
||||
function webpack() {
|
||||
|
@ -118,6 +117,6 @@ function injectBundle() {
|
|||
.pipe(browserSync.stream());
|
||||
}
|
||||
|
||||
exports.default = series(clean, parallel(javascript, webpack, css, html, images, copy), injectBundle)
|
||||
exports.standalone = series(exports.default, standalone)
|
||||
exports.serve = series(exports.standalone, serve)
|
||||
exports.default = series(clean, parallel(javascript, webpack, css, html, images, copy), injectBundle);
|
||||
exports.standalone = series(exports.default, standalone);
|
||||
exports.serve = series(exports.standalone, serve);
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
}
|
||||
|
||||
.libraryPage {
|
||||
padding-top: 7em !important;
|
||||
padding-top: 7em;
|
||||
}
|
||||
|
||||
.itemDetailPage {
|
||||
|
@ -1119,3 +1119,7 @@ div:not(.sectionTitleContainer-cards) > .sectionTitle-cards {
|
|||
.itemsViewSettingsContainer > .button-flat {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.layout-mobile #myPreferencesMenuPage {
|
||||
padding-top: 3.75em;
|
||||
}
|
||||
|
|
|
@ -511,9 +511,16 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM
|
|||
return baseRoute;
|
||||
}
|
||||
|
||||
var popstateOccurred = false;
|
||||
window.addEventListener('popstate', function () {
|
||||
popstateOccurred = true;
|
||||
});
|
||||
|
||||
function getHandler(route) {
|
||||
return function (ctx, next) {
|
||||
ctx.isBack = popstateOccurred;
|
||||
handleRoute(ctx, next, route);
|
||||
popstateOccurred = false;
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
define(["apphost", "connectionManager", "listViewStyle", "emby-button"], function(appHost, connectionManager) {
|
||||
define(["apphost", "connectionManager", "layoutManager", "listViewStyle", "emby-button"], function(appHost, connectionManager, layoutManager) {
|
||||
"use strict";
|
||||
|
||||
return function(view, params) {
|
||||
|
@ -43,6 +43,12 @@ define(["apphost", "connectionManager", "listViewStyle", "emby-button"], functio
|
|||
page.querySelector(".adminSection").classList.add("hide");
|
||||
}
|
||||
|
||||
if (layoutManager.mobile) {
|
||||
page.querySelector(".headerUsername").classList.add("hide");
|
||||
page.querySelector(".adminSection").classList.add("hide");
|
||||
page.querySelector(".userSection").classList.add("hide");
|
||||
}
|
||||
|
||||
ApiClient.getUser(userId).then(function(user) {
|
||||
page.querySelector(".headerUsername").innerHTML = user.Name;
|
||||
if (!user.Policy.IsAdministrator) {
|
||||
|
|
|
@ -55,7 +55,7 @@
|
|||
height: 1.83em;
|
||||
margin: 0;
|
||||
overflow: hidden;
|
||||
border: 2px solid currentcolor;
|
||||
border: 0.14em solid currentcolor;
|
||||
border-radius: 0.14em;
|
||||
z-index: 2;
|
||||
display: flex;
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
display: inline-block;
|
||||
box-sizing: border-box;
|
||||
margin: 0;
|
||||
padding-left: 24px;
|
||||
}
|
||||
|
||||
.radio-label-block {
|
||||
|
@ -31,67 +30,82 @@
|
|||
border: none;
|
||||
}
|
||||
|
||||
.mdl-radio__outer-circle {
|
||||
position: absolute;
|
||||
top: 4px;
|
||||
left: 0;
|
||||
display: inline-block;
|
||||
box-sizing: border-box;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin: 0;
|
||||
cursor: pointer;
|
||||
border: 2px solid currentcolor;
|
||||
.mdl-radio__circles {
|
||||
position: relative;
|
||||
margin-right: 0.54em;
|
||||
width: 1.08em;
|
||||
height: 1.08em;
|
||||
border-radius: 50%;
|
||||
z-index: 2;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.mdl-radio__button:checked + .mdl-radio__label + .mdl-radio__outer-circle {
|
||||
border: 2px solid #00a4dc;
|
||||
.mdl-radio__circles svg {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 1;
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
.mdl-radio__button:disabled + .mdl-radio__label + .mdl-radio__outer-circle {
|
||||
border: 2px solid rgba(0, 0, 0, 0.26);
|
||||
.mdl-radio__button:disabled + .mdl-radio__circles {
|
||||
cursor: auto;
|
||||
}
|
||||
|
||||
.mdl-radio__button:disabled + .mdl-radio__circles .mdl-radio__outer-circle {
|
||||
color: rgba(0, 0, 0, 0.26);
|
||||
}
|
||||
|
||||
.mdl-radio.show-focus .mdl-radio__button:focus + .mdl-radio__circles .mdl-radio__outer-circle {
|
||||
color: #00a4dc;
|
||||
}
|
||||
|
||||
.mdl-radio__inner-circle {
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
margin: 0;
|
||||
top: 8px;
|
||||
left: 4px;
|
||||
box-sizing: border-box;
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
cursor: pointer;
|
||||
transition-duration: 0.28s;
|
||||
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
||||
transition-duration: 0.2s;
|
||||
transition-property: -webkit-transform;
|
||||
transition-property: transform;
|
||||
transition-property: transform, -webkit-transform;
|
||||
-webkit-transform: scale3d(0, 0, 0);
|
||||
transform: scale3d(0, 0, 0);
|
||||
-webkit-transform: scale(0);
|
||||
transform: scale(0);
|
||||
transform-origin: 50% 50%;
|
||||
}
|
||||
|
||||
.mdl-radio__button:checked + .mdl-radio__circles .mdl-radio__inner-circle {
|
||||
-webkit-transform: scale(1);
|
||||
transform: scale(1);
|
||||
}
|
||||
|
||||
.mdl-radio__button:disabled + .mdl-radio__circles .mdl-radio__inner-circle {
|
||||
color: rgba(0, 0, 0, 0.26);
|
||||
}
|
||||
|
||||
.mdl-radio.show-focus .mdl-radio__button:focus + .mdl-radio__circles .mdl-radio__inner-circle {
|
||||
color: #00a4dc;
|
||||
}
|
||||
|
||||
.mdl-radio__focus-circle {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
box-sizing: border-box;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
border-radius: 50%;
|
||||
background: #00a4dc;
|
||||
opacity: 0.26;
|
||||
transition-duration: 0.2s;
|
||||
transition-property: -webkit-transform;
|
||||
transition-property: transform;
|
||||
transition-property: transform, -webkit-transform;
|
||||
-webkit-transform: scale(0);
|
||||
transform: scale(0);
|
||||
}
|
||||
|
||||
.mdl-radio__button:checked + .mdl-radio__label + .mdl-radio__outer-circle + .mdl-radio__inner-circle {
|
||||
-webkit-transform: scale3d(1, 1, 1);
|
||||
transform: scale3d(1, 1, 1);
|
||||
}
|
||||
|
||||
.mdl-radio__button:disabled + .mdl-radio__label + .mdl-radio__outer-circle + .mdl-radio__inner-circle {
|
||||
background: rgba(0, 0, 0, 0.26);
|
||||
cursor: auto;
|
||||
}
|
||||
|
||||
.mdl-radio__button:focus + .mdl-radio__label + .mdl-radio__outer-circle + .mdl-radio__inner-circle {
|
||||
box-shadow: 0 0 0 10px rgba(255, 255, 255, 0.76);
|
||||
}
|
||||
|
||||
.mdl-radio__button:checked:focus + .mdl-radio__label + .mdl-radio__outer-circle + .mdl-radio__inner-circle {
|
||||
box-shadow: 0 0 0 10px rgba(0, 164, 220, 0.26);
|
||||
.mdl-radio.show-focus .mdl-radio__button:focus + .mdl-radio__circles .mdl-radio__focus-circle {
|
||||
-webkit-transform: scale(1.75);
|
||||
transform: scale(1.75);
|
||||
}
|
||||
|
||||
.mdl-radio__label {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
define(['css!./emby-radio', 'registerElement'], function () {
|
||||
define(['layoutManager', 'css!./emby-radio', 'registerElement'], function (layoutManager) {
|
||||
'use strict';
|
||||
|
||||
var EmbyRadioPrototype = Object.create(HTMLInputElement.prototype);
|
||||
|
@ -23,6 +23,7 @@ define(['css!./emby-radio', 'registerElement'], function () {
|
|||
}
|
||||
|
||||
EmbyRadioPrototype.attachedCallback = function () {
|
||||
var showFocus = !layoutManager.mobile;
|
||||
|
||||
if (this.getAttribute('data-radio') === 'true') {
|
||||
return;
|
||||
|
@ -37,13 +38,36 @@ define(['css!./emby-radio', 'registerElement'], function () {
|
|||
labelElement.classList.add('mdl-radio');
|
||||
labelElement.classList.add('mdl-js-radio');
|
||||
labelElement.classList.add('mdl-js-ripple-effect');
|
||||
if (showFocus) {
|
||||
labelElement.classList.add('show-focus');
|
||||
}
|
||||
|
||||
var labelTextElement = labelElement.querySelector('span');
|
||||
|
||||
labelTextElement.classList.add('radioButtonLabel');
|
||||
labelTextElement.classList.add('mdl-radio__label');
|
||||
|
||||
labelElement.insertAdjacentHTML('beforeend', '<span class="mdl-radio__outer-circle"></span><span class="mdl-radio__inner-circle"></span>');
|
||||
var html = '';
|
||||
|
||||
html += '<div class="mdl-radio__circles">';
|
||||
|
||||
html += '<svg>';
|
||||
html += '<defs>';
|
||||
html += '<clipPath id="cutoff">';
|
||||
html += '<circle cx="50%" cy="50%" r="50%" />';
|
||||
html += '</clipPath>';
|
||||
html += '</defs>';
|
||||
html += '<circle class="mdl-radio__outer-circle" cx="50%" cy="50%" r="50%" fill="none" stroke="currentcolor" stroke-width="0.26em" clip-path="url(#cutoff)" />';
|
||||
html += '<circle class="mdl-radio__inner-circle" cx="50%" cy="50%" r="25%" fill="currentcolor" />';
|
||||
html += '</svg>';
|
||||
|
||||
if (showFocus) {
|
||||
html += '<div class="mdl-radio__focus-circle"></div>';
|
||||
}
|
||||
|
||||
html += '</div>';
|
||||
|
||||
this.insertAdjacentHTML('afterend', html);
|
||||
|
||||
this.addEventListener('keydown', onKeyDown);
|
||||
};
|
||||
|
|
|
@ -243,15 +243,20 @@ define(["dom", "layoutManager", "inputManager", "connectionManager", "events", "
|
|||
html += '<a is="emby-linkbutton" class="navMenuOption lnkMediaFolder" data-itemid="selectserver" href="selectserver.html?showuser=1"><i class="material-icons navMenuOptionIcon">wifi</i><span class="navMenuOptionText">' + globalize.translate("ButtonSelectServer") + "</span></a>";
|
||||
}
|
||||
|
||||
html += '<a is="emby-linkbutton" class="navMenuOption lnkMediaFolder btnSettings" data-itemid="settings" href="#"><i class="material-icons navMenuOptionIcon settings"></i><span class="navMenuOptionText">' + globalize.translate("ButtonSettings") + "</span></a>";
|
||||
html += '<a is="emby-linkbutton" class="navMenuOption lnkMediaFolder btnLogout" data-itemid="logout" href="#"><i class="material-icons navMenuOptionIcon exit_to_app"></i><span class="navMenuOptionText">' + globalize.translate("ButtonSignOut") + "</span></a>";
|
||||
html += "</div>";
|
||||
}
|
||||
|
||||
// add buttons to navigation drawer
|
||||
navDrawerScrollContainer.innerHTML = html;
|
||||
// bind logout button click to method
|
||||
var btnLogout = navDrawerScrollContainer.querySelector(".btnLogout");
|
||||
|
||||
var btnSettings = navDrawerScrollContainer.querySelector(".btnSettings");
|
||||
if (btnSettings) {
|
||||
btnSettings.addEventListener("click", onSettingsClick);
|
||||
}
|
||||
|
||||
var btnLogout = navDrawerScrollContainer.querySelector(".btnLogout");
|
||||
if (btnLogout) {
|
||||
btnLogout.addEventListener("click", onLogoutClick);
|
||||
}
|
||||
|
@ -598,6 +603,10 @@ define(["dom", "layoutManager", "inputManager", "connectionManager", "events", "
|
|||
}
|
||||
}
|
||||
|
||||
function onSettingsClick() {
|
||||
Dashboard.navigate("mypreferencesmenu.html");
|
||||
}
|
||||
|
||||
function onLogoutClick() {
|
||||
Dashboard.logout();
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"Absolute": "Gesamt",
|
||||
"Absolute": "Absolut",
|
||||
"AccessRestrictedTryAgainLater": "Der Zugriff ist derzeit eingeschränkt. Bitte versuche es später erneut.",
|
||||
"Actor": "Darsteller(in)",
|
||||
"Add": "Hinzufügen",
|
||||
|
@ -1493,5 +1493,6 @@
|
|||
"NoCreatedLibraries": "Sieht so aus als hättest du bis jetzt keine Bibliothek erstellt. {0}Möchtest du jetzt eine Bibliothek erstellen?{1}",
|
||||
"AllowFfmpegThrottling": "Transkodierung drosseln",
|
||||
"PlaybackErrorNoCompatibleStream": "Es gab ein Problem bei der Erkennung des Wiedergabeprofils des Clients und der Server sendet kein kompatibles Format.",
|
||||
"AllowFfmpegThrottlingHelp": "Wenn eine Transkodierung oder ein Remux weit genug über die aktuelle Abspielposition fortgeschritten ist, pausiere sie sodass weniger Ressourcen verbraucht werden. Dies ist am nützlichsten, wenn wenig geskippt wird. Bei Wiedergabeproblemen sollte diese Option deaktiviert werden."
|
||||
"AllowFfmpegThrottlingHelp": "Wenn eine Transkodierung oder ein Remux weit genug über die aktuelle Abspielposition fortgeschritten ist, pausiere sie sodass weniger Ressourcen verbraucht werden. Dies ist am nützlichsten, wenn wenig geskippt wird. Bei Wiedergabeproblemen sollte diese Option deaktiviert werden.",
|
||||
"ClientSettings": "Client Einstellungen"
|
||||
}
|
||||
|
|
|
@ -257,7 +257,7 @@
|
|||
"DownloadsValue": "{0} latausta",
|
||||
"DrmChannelsNotImported": "Kanavia joissa on tekijänoikeusesto-ohjelmia, ei ladata.",
|
||||
"DropShadow": "Tiputa varjo",
|
||||
"EasyPasswordHelp": "Sinun helppoa PIN-koodia käytetään offline-käytössä tuetuissa Jellyfin-sovelluksissa, ja voidaan myös nopeuttaa verkkoon kirjautumista.",
|
||||
"EasyPasswordHelp": "Sinun helppoa PIN-koodia käytetään offline-käytössä tuetuissa Jellyfin-sovelluksissa, ja voi myös nopeuttaa lan yhteyden kautta kirjautumista.",
|
||||
"Edit": "Muokkaa",
|
||||
"EditImages": "Muokkaa kuvia",
|
||||
"EditMetadata": "Muokkaa metadataa",
|
||||
|
@ -310,5 +310,15 @@
|
|||
"Depressed": "Painettu",
|
||||
"CopyStreamURLError": "Verkko-osoitteen kopioinnissa tapahtui virhe.",
|
||||
"ButtonSplit": "jaa",
|
||||
"AskAdminToCreateLibrary": "Pyydä järjestelmän ylläpitäjää luomaan kirjasto."
|
||||
"AskAdminToCreateLibrary": "Pyydä järjestelmän ylläpitäjää luomaan kirjasto.",
|
||||
"EnableStreamLooping": "Auto-toista suoralähetykset",
|
||||
"EnableNextVideoInfoOverlayHelp": "Videon lopussa, näytä soittolistassa seuraavaksi toistettavan videon tiedot.",
|
||||
"ClientSettings": "Pääte-asetukset",
|
||||
"AllowFfmpegThrottlingHelp": "Kun uudelleenkoodaus tai remux ehtii tarpeeksi toiston edelle, keskeytä laskenta jotta laskentaresursseja kuluu vähemmän. Tämä on hyödyllistä jos katselet hyppimättä eri kohtiin. Älä käytä jos toiston kanssa ilmenee ongelmia.",
|
||||
"AllowFfmpegThrottling": "Rajoita uudelleenkoodaus",
|
||||
"ErrorDeletingItem": "Tiedostoa poistaessa Jellyfin Palvelimelta ilmeni virhe. Varmista, että Jellyfin Palvelimella on kirjoitusoikeudet mediakansioon ja kokeile uudestaan.",
|
||||
"ErrorAddingXmlTvFile": "XMLTV-tiedostoa käyttäessä tapahtui virhe. Varmista, että tiedosto on olemassa ja kokeile uudestaan.",
|
||||
"ErrorAddingTunerDevice": "Viritintä lisätessä ilmeni ongelma. Varmista, että se on kytketty oikein ja kokeile uudestaan.",
|
||||
"EnableThemeVideosHelp": "Soita tunnusvideoita taustalla, selatessasi kirjastoa.",
|
||||
"EnableThemeVideos": "Teeman videot"
|
||||
}
|
||||
|
|
|
@ -164,5 +164,8 @@
|
|||
"Songs": "Lieder",
|
||||
"Sync": "Synchronisation",
|
||||
"ValueSpecialEpisodeName": "Extra - {0}",
|
||||
"VersionNumber": "Version {0}"
|
||||
"VersionNumber": "Version {0}",
|
||||
"Absolute": "Absolut",
|
||||
"Actor": "Schauspiler",
|
||||
"AccessRestrictedTryAgainLater": "Zuegriff isch momentan beschränkt. Probier bitte später nomau. "
|
||||
}
|
||||
|
|
|
@ -705,7 +705,7 @@
|
|||
"LabelPublicHttpPortHelp": "映射到本地 HTTP 端口的公开端口号。",
|
||||
"LabelPublicHttpsPort": "公开 HTTPS 端口号:",
|
||||
"LabelPublicHttpsPortHelp": "映射到本地 HTTPS 端口的公开端口号。",
|
||||
"LabelReadHowYouCanContribute": "学习如何构建。",
|
||||
"LabelReadHowYouCanContribute": "了解如何做出贡献。",
|
||||
"LabelReasonForTranscoding": "转码原因:",
|
||||
"LabelRecord": "录制:",
|
||||
"LabelRecordingPath": "默认录制路径:",
|
||||
|
@ -1348,7 +1348,7 @@
|
|||
"HeaderFavoriteArtists": "最爱的艺术家",
|
||||
"HeaderKeepRecording": "继续录制",
|
||||
"HeaderKeepSeries": "保持系列",
|
||||
"HeaderMusicQuality": "音质",
|
||||
"HeaderMusicQuality": "音频质量",
|
||||
"HeaderNextEpisodePlayingInValue": "下一集在 {0} 后播放",
|
||||
"HeaderNextVideoPlayingInValue": "下一部影片在 {0} 后播放",
|
||||
"HeaderPlayOn": "播放在",
|
||||
|
@ -1474,5 +1474,8 @@
|
|||
"AskAdminToCreateLibrary": "请联系管理员以创建一个新的资料库。",
|
||||
"PlaybackErrorNoCompatibleStream": "客户端配置文件存在问题,服务器未发送兼容的媒体格式。",
|
||||
"AllowFfmpegThrottlingHelp": "当转码或再封装的进度大幅超过当前播放位置时,暂停该进程,以使其消耗更少的资源。在观看时不经常调整播放进度的情况下,这将非常有用。如果遇到播放问题,请关闭此功能。",
|
||||
"AllowFfmpegThrottling": "限制转码速度"
|
||||
"AllowFfmpegThrottling": "限制转码速度",
|
||||
"PreferEmbeddedEpisodeInfosOverFileNames": "优先使用内置的剧集信息而不是文件名",
|
||||
"PreferEmbeddedEpisodeInfosOverFileNamesHelp": "这将在内置元数据含剧集信息时使用内置信息。",
|
||||
"ClientSettings": "客户端设置"
|
||||
}
|
||||
|
|
|
@ -328,7 +328,7 @@
|
|||
"Art": "圖像",
|
||||
"Artists": "演出者",
|
||||
"AsManyAsPossible": "越多越好",
|
||||
"Ascending": "由少到多",
|
||||
"Ascending": "遞增",
|
||||
"AspectRatio": "長寬比",
|
||||
"AttributeNew": "新增",
|
||||
"Audio": "音訊",
|
||||
|
@ -552,7 +552,7 @@
|
|||
"EncoderPresetHelp": "速度越慢則會得到更好的壓縮編碼效率。",
|
||||
"HDPrograms": "HD節目",
|
||||
"HandledByProxy": "由反向代理處理",
|
||||
"HardwareAccelerationWarning": "啟動硬體加速可能在某些環境下導致系統不穩定。請確認你的作業系統和影片驅動程式是最新的。如果你在開啟此項後播放影片產生困難,那麼你需要將此選項設回”自動“。",
|
||||
"HardwareAccelerationWarning": "啟動硬體加速可能在某些環境下導致系統不穩定。請確認你的作業系統和影片驅動程式是最新的。如果你在開啟此項後播放影片產生困難,那麼你需要將此選項設回”無“。",
|
||||
"HeaderAccessSchedule": "存取時程",
|
||||
"HeaderAccessScheduleHelp": "建立一個存取時程以限制可存取的時段。",
|
||||
"HeaderActiveDevices": "運行中裝置",
|
||||
|
@ -1493,7 +1493,7 @@
|
|||
"RecordingPathChangeMessage": "更改錄製資料夾不會將現有錄製從舊位置遷移到新的,您需要手動移動它們。",
|
||||
"RestartPleaseWaitMessage": "Jellyfin 伺服器將重新啟動,這將花費幾分鐘時間。",
|
||||
"LabelEmbedAlbumArtDidl": "於 Didl 中嵌入專輯封面",
|
||||
"LabelEnableAutomaticPortMapHelp": "自動嘗試映射公共連接埠到 UPnP 本地連接埠。這可能無法用於某些路由器。",
|
||||
"LabelEnableAutomaticPortMapHelp": "自動嘗試映射公共連接埠到 UPnP 本地連接埠。這可能無法用於某些路由器。需重新啓動伺服器。",
|
||||
"LabelEmbedAlbumArtDidlHelp": "有些裝置使用這個方式來取得專輯封面,啟用這個選項可能導致其他設備播放失敗。",
|
||||
"SettingsWarning": "更改這些值可能會導致不穩定或連線故障。如果您遇到任何問題,建議將它們重新更改為預設值。",
|
||||
"LabelEnableSingleImageInDidlLimitHelp": "若在 Didl 中嵌入多個圖片,某些裝置可能無法正常顯示。",
|
||||
|
@ -1636,10 +1636,18 @@
|
|||
"LaunchWebAppOnStartupHelp": "伺服器啓動時在默認游覽器中打開網頁端。使用重啓伺服器功能時此項不生效。",
|
||||
"LabelVideoResolution": "視頻解析度:",
|
||||
"LabelStreamType": "串流類型:",
|
||||
"EnableFastImageFadeInHelp": "為已加載的圖片啓用更快的淡入動畫",
|
||||
"EnableFastImageFadeIn": "快速圖片淡入",
|
||||
"EnableFastImageFadeInHelp": "對已載入的圖片啟用更快的淡入動畫",
|
||||
"EnableFastImageFadeIn": "圖片快速淡入效果",
|
||||
"LabelPlayerDimensions": "播放器尺寸:",
|
||||
"LabelDroppedFrames": "丟棄的幀:",
|
||||
"LabelCorruptedFrames": "損壞的幀:",
|
||||
"ButtonSplit": "拆分"
|
||||
"ButtonSplit": "分割",
|
||||
"AskAdminToCreateLibrary": "如要建立資料庫,請求管理員。",
|
||||
"NoCreatedLibraries": "看來您還未創任何媒體庫。{0}立刻創一個新的嗎?{1}",
|
||||
"ClientSettings": "用戶設定",
|
||||
"AllowFfmpegThrottlingHelp": "當轉檔或重組進度大量超前目前播放進度時,將暫停轉檔節省消耗的資源。在不常跳播的時候最有效。如果遇到播放問題,請關閉此功能。",
|
||||
"AllowFfmpegThrottling": "限制轉檔",
|
||||
"PreferEmbeddedEpisodeInfosOverFileNamesHelp": "這將會使用內建劇集資料。",
|
||||
"PlaybackErrorNoCompatibleStream": "用戶端偵測出了問題,伺服器也未傳送相容的媒體格式。",
|
||||
"PreferEmbeddedEpisodeInfosOverFileNames": "優先使用內建劇集資訊而不是檔案名稱"
|
||||
}
|
||||
|
|
|
@ -382,7 +382,7 @@ a[data-role=button] {
|
|||
|
||||
.emby-checkbox:checked + span + .checkboxOutline {
|
||||
background-color: #030322;
|
||||
border: 2px solid rgb(72, 195, 200);
|
||||
border: 0.14em solid rgb(72, 195, 200);
|
||||
}
|
||||
|
||||
.emby-checkbox:checked + span + .checkboxOutline > .checkboxIcon-checked {
|
||||
|
@ -394,7 +394,7 @@ a[data-role=button] {
|
|||
}
|
||||
|
||||
.emby-checkbox:focus:not(:checked) + span + .checkboxOutline {
|
||||
border: 2px solid #ff77f1;
|
||||
border: 0.14em solid #ff77f1;
|
||||
}
|
||||
|
||||
.itemProgressBarForeground {
|
||||
|
@ -438,6 +438,15 @@ a[data-role=button] {
|
|||
color: #f8f8fe;
|
||||
}
|
||||
|
||||
.mdl-radio.show-focus .mdl-radio__button:focus + .mdl-radio__circles svg .mdl-radio__outer-circle,
|
||||
.mdl-radio.show-focus .mdl-radio__button:focus + .mdl-radio__circles svg .mdl-radio__inner-circle {
|
||||
color: #ff77f1;
|
||||
}
|
||||
|
||||
.mdl-radio.show-focus .mdl-radio__button:focus + .mdl-radio__circles .mdl-radio__focus-circle {
|
||||
background: #00a4dc;
|
||||
}
|
||||
|
||||
.emby-tab-button {
|
||||
color: #999;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue