mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
Merge pull request #1599 from MrTimscampi/dead-code-society
Remove dead code
This commit is contained in:
commit
454b81a037
144 changed files with 135 additions and 1625 deletions
|
@ -39,6 +39,8 @@ module.exports = {
|
||||||
'no-multi-spaces': ['error'],
|
'no-multi-spaces': ['error'],
|
||||||
'no-multiple-empty-lines': ['error', { 'max': 1 }],
|
'no-multiple-empty-lines': ['error', { 'max': 1 }],
|
||||||
'no-trailing-spaces': ['error'],
|
'no-trailing-spaces': ['error'],
|
||||||
|
'no-unused-expressions': ['error', { 'allowShortCircuit': true, 'allowTernary': true, 'allowTaggedTemplates': true }],
|
||||||
|
"no-unused-vars": ["error", { "vars": "all", "args": "none", "ignoreRestSiblings": true }],
|
||||||
'one-var': ['error', 'never'],
|
'one-var': ['error', 'never'],
|
||||||
'quotes': ['error', 'single', { 'avoidEscape': true, 'allowTemplateLiterals': false }],
|
'quotes': ['error', 'single', { 'avoidEscape': true, 'allowTemplateLiterals': false }],
|
||||||
'semi': ['error'],
|
'semi': ['error'],
|
||||||
|
@ -98,9 +100,8 @@ module.exports = {
|
||||||
},
|
},
|
||||||
rules: {
|
rules: {
|
||||||
// TODO: Fix warnings and remove these rules
|
// TODO: Fix warnings and remove these rules
|
||||||
'no-redeclare': ['warn'],
|
'no-redeclare': ['off'],
|
||||||
'no-unused-vars': ['warn'],
|
'no-useless-escape': ['off'],
|
||||||
'no-useless-escape': ['warn'],
|
|
||||||
// TODO: Remove after ES6 migration is complete
|
// TODO: Remove after ES6 migration is complete
|
||||||
'import/no-unresolved': ['off']
|
'import/no-unresolved': ['off']
|
||||||
},
|
},
|
||||||
|
|
|
@ -76,7 +76,6 @@
|
||||||
"query-string": "^6.13.1",
|
"query-string": "^6.13.1",
|
||||||
"resize-observer-polyfill": "^1.5.1",
|
"resize-observer-polyfill": "^1.5.1",
|
||||||
"screenfull": "^5.0.2",
|
"screenfull": "^5.0.2",
|
||||||
"shaka-player": "^2.5.13",
|
|
||||||
"sortablejs": "^1.10.2",
|
"sortablejs": "^1.10.2",
|
||||||
"swiper": "^5.4.5",
|
"swiper": "^5.4.5",
|
||||||
"webcomponents.js": "^0.7.24",
|
"webcomponents.js": "^0.7.24",
|
||||||
|
|
|
@ -78,12 +78,6 @@ _define('webcomponents', function() {
|
||||||
return webcomponents;
|
return webcomponents;
|
||||||
});
|
});
|
||||||
|
|
||||||
// shaka
|
|
||||||
var shaka = require('shaka-player');
|
|
||||||
_define('shaka', function() {
|
|
||||||
return shaka;
|
|
||||||
});
|
|
||||||
|
|
||||||
// libass-wasm
|
// libass-wasm
|
||||||
var libassWasm = require('libass-wasm');
|
var libassWasm = require('libass-wasm');
|
||||||
_define('JavascriptSubtitlesOctopus', function() {
|
_define('JavascriptSubtitlesOctopus', function() {
|
||||||
|
|
|
@ -255,8 +255,6 @@ export function show(options) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Seeing an issue in some non-chrome browsers where this is requiring a double click
|
|
||||||
//var eventName = browser.firefox ? 'mousedown' : 'click';
|
|
||||||
let selectedId;
|
let selectedId;
|
||||||
|
|
||||||
let timeout;
|
let timeout;
|
||||||
|
|
|
@ -3,7 +3,6 @@ import globalize from 'globalize';
|
||||||
import dom from 'dom';
|
import dom from 'dom';
|
||||||
import * as datefns from 'date-fns';
|
import * as datefns from 'date-fns';
|
||||||
import dfnshelper from 'dfnshelper';
|
import dfnshelper from 'dfnshelper';
|
||||||
import userSettings from 'userSettings';
|
|
||||||
import serverNotifications from 'serverNotifications';
|
import serverNotifications from 'serverNotifications';
|
||||||
import connectionManager from 'connectionManager';
|
import connectionManager from 'connectionManager';
|
||||||
import 'emby-button';
|
import 'emby-button';
|
||||||
|
@ -69,6 +68,7 @@ import 'listViewStyle';
|
||||||
const minDate = new Date();
|
const minDate = new Date();
|
||||||
const hasUserId = 'false' !== elem.getAttribute('data-useractivity');
|
const hasUserId = 'false' !== elem.getAttribute('data-useractivity');
|
||||||
|
|
||||||
|
// TODO: Use date-fns
|
||||||
if (hasUserId) {
|
if (hasUserId) {
|
||||||
minDate.setTime(minDate.getTime() - 24 * 60 * 60 * 1000); // one day back
|
minDate.setTime(minDate.getTime() - 24 * 60 * 60 * 1000); // one day back
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
import browser from 'browser';
|
|
||||||
import 'css!./appFooter';
|
import 'css!./appFooter';
|
||||||
|
|
||||||
function render(options) {
|
function render(options) {
|
||||||
|
|
|
@ -153,15 +153,10 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!isBackNav) {
|
if (!isBackNav) {
|
||||||
// Don't force a new view for home due to the back menu
|
|
||||||
//if (route.type !== 'home') {
|
|
||||||
onNewViewNeeded();
|
onNewViewNeeded();
|
||||||
return;
|
return;
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
viewManager.tryRestoreView(currentRequest, function () {
|
viewManager.tryRestoreView(currentRequest, function () {
|
||||||
|
|
||||||
// done
|
|
||||||
currentRouteInfo = {
|
currentRouteInfo = {
|
||||||
route: route,
|
route: route,
|
||||||
path: ctx.path
|
path: ctx.path
|
||||||
|
@ -309,33 +304,13 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro
|
||||||
|
|
||||||
page({
|
page({
|
||||||
click: options.click !== false,
|
click: options.click !== false,
|
||||||
hashbang: options.hashbang !== false,
|
hashbang: options.hashbang !== false
|
||||||
enableHistory: enableHistory()
|
|
||||||
});
|
});
|
||||||
}).catch().then(function() {
|
}).catch().then(function() {
|
||||||
loading.hide();
|
loading.hide();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function enableHistory() {
|
|
||||||
|
|
||||||
//if (browser.edgeUwp) {
|
|
||||||
// return false;
|
|
||||||
//}
|
|
||||||
|
|
||||||
// shows status bar on navigation
|
|
||||||
if (browser.xboxOne) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Does not support history
|
|
||||||
if (browser.orsay) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function enableNativeHistory() {
|
function enableNativeHistory() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -535,9 +510,7 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro
|
||||||
if (!document.querySelector('.dialogContainer') && startPages.indexOf(curr.type) !== -1) {
|
if (!document.querySelector('.dialogContainer') && startPages.indexOf(curr.type) !== -1) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (enableHistory()) {
|
|
||||||
return history.length > 1;
|
|
||||||
}
|
|
||||||
return (page.len || 0) > 0;
|
return (page.len || 0) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -257,12 +257,6 @@ define(['appSettings', 'browser', 'events', 'htmlMediaHelper', 'webSettings', 'g
|
||||||
features.push('fullscreenchange');
|
features.push('fullscreenchange');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (browser.chrome || browser.edge && !browser.slow) {
|
|
||||||
if (!browser.noAnimation && !browser.edgeUwp && !browser.xboxOne) {
|
|
||||||
features.push('imageanalysis');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (browser.tv || browser.xboxOne || browser.ps4 || browser.mobile) {
|
if (browser.tv || browser.xboxOne || browser.ps4 || browser.mobile) {
|
||||||
features.push('physicalvolumecontrol');
|
features.push('physicalvolumecontrol');
|
||||||
}
|
}
|
||||||
|
|
|
@ -1163,6 +1163,7 @@ import 'programStyles';
|
||||||
function importRefreshIndicator() {
|
function importRefreshIndicator() {
|
||||||
if (!refreshIndicatorLoaded) {
|
if (!refreshIndicatorLoaded) {
|
||||||
refreshIndicatorLoaded = true;
|
refreshIndicatorLoaded = true;
|
||||||
|
/* eslint-disable-next-line no-unused-expressions */
|
||||||
import('emby-itemrefreshindicator');
|
import('emby-itemrefreshindicator');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1498,6 +1499,7 @@ import 'programStyles';
|
||||||
const userData = item.UserData || {};
|
const userData = item.UserData || {};
|
||||||
|
|
||||||
if (itemHelper.canMarkPlayed(item)) {
|
if (itemHelper.canMarkPlayed(item)) {
|
||||||
|
/* eslint-disable-next-line no-unused-expressions */
|
||||||
import('emby-playstatebutton');
|
import('emby-playstatebutton');
|
||||||
html += '<button is="emby-playstatebutton" type="button" data-action="none" class="' + btnCssClass + '" data-id="' + item.Id + '" data-serverid="' + item.ServerId + '" data-itemtype="' + item.Type + '" data-played="' + (userData.Played) + '"><span class="material-icons cardOverlayButtonIcon cardOverlayButtonIcon-hover check"></span></button>';
|
html += '<button is="emby-playstatebutton" type="button" data-action="none" class="' + btnCssClass + '" data-id="' + item.Id + '" data-serverid="' + item.ServerId + '" data-itemtype="' + item.Type + '" data-played="' + (userData.Played) + '"><span class="material-icons cardOverlayButtonIcon cardOverlayButtonIcon-hover check"></span></button>';
|
||||||
}
|
}
|
||||||
|
@ -1506,6 +1508,7 @@ import 'programStyles';
|
||||||
|
|
||||||
const likes = userData.Likes == null ? '' : userData.Likes;
|
const likes = userData.Likes == null ? '' : userData.Likes;
|
||||||
|
|
||||||
|
/* eslint-disable-next-line no-unused-expressions */
|
||||||
import('emby-ratingbutton');
|
import('emby-ratingbutton');
|
||||||
html += '<button is="emby-ratingbutton" type="button" data-action="none" class="' + btnCssClass + '" data-id="' + item.Id + '" data-serverid="' + item.ServerId + '" data-itemtype="' + item.Type + '" data-likes="' + likes + '" data-isfavorite="' + (userData.IsFavorite) + '"><span class="material-icons cardOverlayButtonIcon cardOverlayButtonIcon-hover favorite"></span></button>';
|
html += '<button is="emby-ratingbutton" type="button" data-action="none" class="' + btnCssClass + '" data-id="' + item.Id + '" data-serverid="' + item.ServerId + '" data-itemtype="' + item.Type + '" data-likes="' + likes + '" data-isfavorite="' + (userData.IsFavorite) + '"><span class="material-icons cardOverlayButtonIcon cardOverlayButtonIcon-hover favorite"></span></button>';
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
import dom from 'dom';
|
import dom from 'dom';
|
||||||
import dialogHelper from 'dialogHelper';
|
import dialogHelper from 'dialogHelper';
|
||||||
import loading from 'loading';
|
import loading from 'loading';
|
||||||
import appHost from 'apphost';
|
|
||||||
import layoutManager from 'layoutManager';
|
import layoutManager from 'layoutManager';
|
||||||
import connectionManager from 'connectionManager';
|
import connectionManager from 'connectionManager';
|
||||||
import appRouter from 'appRouter';
|
import appRouter from 'appRouter';
|
||||||
|
@ -248,10 +247,6 @@ import 'flexStyles';
|
||||||
html += title;
|
html += title;
|
||||||
html += '</h3>';
|
html += '</h3>';
|
||||||
|
|
||||||
if (appHost.supports('externallinks')) {
|
|
||||||
html += `<a is="emby-linkbutton" class="button-link btnHelp flex align-items-center" href="https://web.archive.org/web/20181216120305/https://github.com/MediaBrowser/Wiki/wiki/Collections" target="_blank" style="margin-left:auto;margin-right:.5em;padding:.25em;" title="${globalize.translate('Help')}"><span class="material-icons info"></span><span style="margin-left:.25em;">${globalize.translate('Help')}</span></a>`;
|
|
||||||
}
|
|
||||||
|
|
||||||
html += '</div>';
|
html += '</div>';
|
||||||
|
|
||||||
html += getEditorHtml();
|
html += getEditorHtml();
|
||||||
|
|
|
@ -45,10 +45,6 @@ import 'flexStyles';
|
||||||
dlg.classList.add('dialog-fullscreen-lowres');
|
dlg.classList.add('dialog-fullscreen-lowres');
|
||||||
}
|
}
|
||||||
|
|
||||||
//dlg.querySelector('.btnCancel').addEventListener('click', function (e) {
|
|
||||||
// dialogHelper.close(dlg);
|
|
||||||
//});
|
|
||||||
|
|
||||||
if (options.title) {
|
if (options.title) {
|
||||||
dlg.querySelector('.formDialogHeaderTitle').innerHTML = options.title || '';
|
dlg.querySelector('.formDialogHeaderTitle').innerHTML = options.title || '';
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -154,8 +154,7 @@ define(['loading', 'libraryBrowser', 'cardBuilder', 'dom', 'apphost', 'imageLoad
|
||||||
html += '<div is="emby-itemscontainer" class="itemsContainer vertical-wrap padded-left padded-right">';
|
html += '<div is="emby-itemscontainer" class="itemsContainer vertical-wrap padded-left padded-right">';
|
||||||
}
|
}
|
||||||
|
|
||||||
var supportsImageAnalysis = appHost.supports('imageanalysis');
|
var cardLayout = appHost.preferVisualCards && section.autoCardLayout && section.showTitle;
|
||||||
var cardLayout = (appHost.preferVisualCards || supportsImageAnalysis) && section.autoCardLayout && section.showTitle;
|
|
||||||
cardLayout = false;
|
cardLayout = false;
|
||||||
html += cardBuilder.getCardsHtml(result.Items, {
|
html += cardBuilder.getCardsHtml(result.Items, {
|
||||||
preferThumb: section.preferThumb,
|
preferThumb: section.preferThumb,
|
||||||
|
|
|
@ -39,34 +39,11 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost',
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderDynamicFilters(context, result, options) {
|
function renderDynamicFilters(context, result, options) {
|
||||||
|
|
||||||
// If there's a huge number of these they will be really show to render
|
|
||||||
//if (result.Tags) {
|
|
||||||
// result.Tags.length = Math.min(result.Tags.length, 50);
|
|
||||||
//}
|
|
||||||
|
|
||||||
renderOptions(context, '.genreFilters', 'chkGenreFilter', result.Genres, function (i) {
|
renderOptions(context, '.genreFilters', 'chkGenreFilter', result.Genres, function (i) {
|
||||||
|
|
||||||
// Switching from | to ,
|
// Switching from | to ,
|
||||||
var delimeter = (options.settings.GenreIds || '').indexOf('|') === -1 ? ',' : '|';
|
var delimeter = (options.settings.GenreIds || '').indexOf('|') === -1 ? ',' : '|';
|
||||||
return (delimeter + (options.settings.GenreIds || '') + delimeter).indexOf(delimeter + i.Id + delimeter) !== -1;
|
return (delimeter + (options.settings.GenreIds || '') + delimeter).indexOf(delimeter + i.Id + delimeter) !== -1;
|
||||||
});
|
});
|
||||||
|
|
||||||
//renderOptions(context, '.officialRatingFilters', 'chkOfficialRatingFilter', result.OfficialRatings, function (i) {
|
|
||||||
// var delimeter = '|';
|
|
||||||
// return (delimeter + (query.OfficialRatings || '') + delimeter).indexOf(delimeter + i + delimeter) != -1;
|
|
||||||
//});
|
|
||||||
|
|
||||||
//renderOptions(context, '.tagFilters', 'chkTagFilter', result.Tags, function (i) {
|
|
||||||
// var delimeter = '|';
|
|
||||||
// return (delimeter + (query.Tags || '') + delimeter).indexOf(delimeter + i + delimeter) != -1;
|
|
||||||
//});
|
|
||||||
|
|
||||||
//renderOptions(context, '.yearFilters', 'chkYearFilter', result.Years, function (i) {
|
|
||||||
|
|
||||||
// var delimeter = ',';
|
|
||||||
// return (delimeter + (query.Years || '') + delimeter).indexOf(delimeter + i + delimeter) != -1;
|
|
||||||
//});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadDynamicFilters(context, options) {
|
function loadDynamicFilters(context, options) {
|
||||||
|
@ -81,11 +58,7 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost',
|
||||||
});
|
});
|
||||||
|
|
||||||
apiClient.getFilters(filterMenuOptions).then(function (result) {
|
apiClient.getFilters(filterMenuOptions).then(function (result) {
|
||||||
|
|
||||||
renderDynamicFilters(context, result, options);
|
renderDynamicFilters(context, result, options);
|
||||||
}, function () {
|
|
||||||
|
|
||||||
// older server
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -314,13 +287,7 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost',
|
||||||
var submitted;
|
var submitted;
|
||||||
|
|
||||||
dlg.querySelector('form').addEventListener('change', function () {
|
dlg.querySelector('form').addEventListener('change', function () {
|
||||||
|
|
||||||
submitted = true;
|
submitted = true;
|
||||||
//if (options.onChange) {
|
|
||||||
// saveValues(dlg, options.settings, options.settingsKey);
|
|
||||||
// options.onChange();
|
|
||||||
//}
|
|
||||||
|
|
||||||
}, true);
|
}, true);
|
||||||
|
|
||||||
dialogHelper.open(dlg).then(function () {
|
dialogHelper.open(dlg).then(function () {
|
||||||
|
|
|
@ -272,14 +272,10 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) {
|
||||||
var rect = getOffset(activeElement);
|
var rect = getOffset(activeElement);
|
||||||
|
|
||||||
// Get elements and work out x/y points
|
// Get elements and work out x/y points
|
||||||
var cache = [];
|
|
||||||
var point1x = parseFloat(rect.left) || 0;
|
var point1x = parseFloat(rect.left) || 0;
|
||||||
var point1y = parseFloat(rect.top) || 0;
|
var point1y = parseFloat(rect.top) || 0;
|
||||||
var point2x = parseFloat(point1x + rect.width - 1) || point1x;
|
var point2x = parseFloat(point1x + rect.width - 1) || point1x;
|
||||||
var point2y = parseFloat(point1y + rect.height - 1) || point1y;
|
var point2y = parseFloat(point1y + rect.height - 1) || point1y;
|
||||||
// Shortcuts to help with compression
|
|
||||||
var min = Math.min;
|
|
||||||
var max = Math.max;
|
|
||||||
|
|
||||||
var sourceMidX = rect.left + (rect.width / 2);
|
var sourceMidX = rect.left + (rect.width / 2);
|
||||||
var sourceMidY = rect.top + (rect.height / 2);
|
var sourceMidY = rect.top + (rect.height / 2);
|
||||||
|
@ -301,10 +297,6 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
//if (!isCurrentlyFocusableInternal(curr)) {
|
|
||||||
// continue;
|
|
||||||
//}
|
|
||||||
|
|
||||||
var elementRect = getOffset(curr);
|
var elementRect = getOffset(curr);
|
||||||
|
|
||||||
// not currently visible
|
// not currently visible
|
||||||
|
|
|
@ -43,11 +43,9 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
|
||||||
|
|
||||||
if (guideProgramName) {
|
if (guideProgramName) {
|
||||||
if (pctOfWidth > 0 && pctOfWidth <= 100) {
|
if (pctOfWidth > 0 && pctOfWidth <= 100) {
|
||||||
//guideProgramName.style.marginLeft = pctOfWidth + '%';
|
|
||||||
guideProgramName.style.transform = 'translateX(' + pctOfWidth + '%)';
|
guideProgramName.style.transform = 'translateX(' + pctOfWidth + '%)';
|
||||||
caret.classList.remove('hide');
|
caret.classList.remove('hide');
|
||||||
} else {
|
} else {
|
||||||
//guideProgramName.style.marginLeft = '0';
|
|
||||||
guideProgramName.style.transform = 'none';
|
guideProgramName.style.transform = 'none';
|
||||||
caret.classList.add('hide');
|
caret.classList.add('hide');
|
||||||
}
|
}
|
||||||
|
@ -121,7 +119,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
|
||||||
var cellCurationMinutes = 30;
|
var cellCurationMinutes = 30;
|
||||||
var cellDurationMs = cellCurationMinutes * 60 * 1000;
|
var cellDurationMs = cellCurationMinutes * 60 * 1000;
|
||||||
var msPerDay = 86400000;
|
var msPerDay = 86400000;
|
||||||
var totalRendererdMs = msPerDay;
|
|
||||||
|
|
||||||
var currentDate;
|
var currentDate;
|
||||||
var currentStartIndex = 0;
|
var currentStartIndex = 0;
|
||||||
|
@ -577,7 +574,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
|
||||||
html += '</div>';
|
html += '</div>';
|
||||||
|
|
||||||
if (program.IsHD && options.showHdIcon) {
|
if (program.IsHD && options.showHdIcon) {
|
||||||
//html += '<span class="guideHdIcon material-icons programIcon hd"></span>';
|
|
||||||
if (layoutManager.tv) {
|
if (layoutManager.tv) {
|
||||||
html += '<div class="programIcon guide-programTextIcon guide-programTextIcon-tv">HD</div>';
|
html += '<div class="programIcon guide-programTextIcon guide-programTextIcon-tv">HD</div>';
|
||||||
} else {
|
} else {
|
||||||
|
@ -866,6 +862,7 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
|
||||||
var dateTabsHtml = '';
|
var dateTabsHtml = '';
|
||||||
var tabIndex = 0;
|
var tabIndex = 0;
|
||||||
|
|
||||||
|
// TODO: Use date-fns
|
||||||
var date = new Date();
|
var date = new Date();
|
||||||
|
|
||||||
if (currentDate) {
|
if (currentDate) {
|
||||||
|
@ -873,7 +870,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
|
||||||
}
|
}
|
||||||
|
|
||||||
date.setHours(nowHours, 0, 0, 0);
|
date.setHours(nowHours, 0, 0, 0);
|
||||||
//start.setHours(0, 0, 0, 0);
|
|
||||||
|
|
||||||
var startTimeOfDayMs = (start.getHours() * 60 * 60 * 1000);
|
var startTimeOfDayMs = (start.getHours() * 60 * 60 * 1000);
|
||||||
startTimeOfDayMs += start.getMinutes() * 60 * 1000;
|
startTimeOfDayMs += start.getMinutes() * 60 * 1000;
|
||||||
|
@ -951,8 +947,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
|
||||||
var focusableElements;
|
var focusableElements;
|
||||||
var newRow;
|
var newRow;
|
||||||
|
|
||||||
var scrollX = false;
|
|
||||||
|
|
||||||
switch (e.detail.command) {
|
switch (e.detail.command) {
|
||||||
|
|
||||||
case 'up':
|
case 'up':
|
||||||
|
@ -1018,7 +1012,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
|
||||||
focusManager.moveLeft(target, {
|
focusManager.moveLeft(target, {
|
||||||
container: container
|
container: container
|
||||||
});
|
});
|
||||||
scrollX = true;
|
|
||||||
break;
|
break;
|
||||||
case 'right':
|
case 'right':
|
||||||
container = programCell ? dom.parentWithClass(programCell, 'channelPrograms') : null;
|
container = programCell ? dom.parentWithClass(programCell, 'channelPrograms') : null;
|
||||||
|
@ -1027,7 +1020,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
|
||||||
focusManager.moveRight(target, {
|
focusManager.moveRight(target, {
|
||||||
container: container
|
container: container
|
||||||
});
|
});
|
||||||
scrollX = true;
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -148,9 +148,7 @@ import 'emby-checkbox';
|
||||||
|
|
||||||
let html = '';
|
let html = '';
|
||||||
|
|
||||||
let index = 0;
|
html += result.Items.map((view) => {
|
||||||
|
|
||||||
html += result.Items.map(view => {
|
|
||||||
|
|
||||||
let currentHtml = '';
|
let currentHtml = '';
|
||||||
|
|
||||||
|
@ -171,7 +169,6 @@ import 'emby-checkbox';
|
||||||
|
|
||||||
currentHtml += '</div>';
|
currentHtml += '</div>';
|
||||||
|
|
||||||
index++;
|
|
||||||
return currentHtml;
|
return currentHtml;
|
||||||
|
|
||||||
}).join('');
|
}).join('');
|
||||||
|
@ -305,8 +302,6 @@ import 'emby-checkbox';
|
||||||
const viewItem = dom.parentWithClass(target, 'viewItem');
|
const viewItem = dom.parentWithClass(target, 'viewItem');
|
||||||
|
|
||||||
if (viewItem) {
|
if (viewItem) {
|
||||||
const ul = dom.parentWithClass(viewItem, 'paperList');
|
|
||||||
|
|
||||||
if (target.classList.contains('btnViewItemDown')) {
|
if (target.classList.contains('btnViewItemDown')) {
|
||||||
|
|
||||||
const next = viewItem.nextSibling;
|
const next = viewItem.nextSibling;
|
||||||
|
|
|
@ -1,13 +1,9 @@
|
||||||
import connectionManager from 'connectionManager';
|
import connectionManager from 'connectionManager';
|
||||||
import cardBuilder from 'cardBuilder';
|
import cardBuilder from 'cardBuilder';
|
||||||
import appSettings from 'appSettings';
|
|
||||||
import dom from 'dom';
|
import dom from 'dom';
|
||||||
import appHost from 'apphost';
|
|
||||||
import layoutManager from 'layoutManager';
|
import layoutManager from 'layoutManager';
|
||||||
import imageLoader from 'imageLoader';
|
import imageLoader from 'imageLoader';
|
||||||
import globalize from 'globalize';
|
import globalize from 'globalize';
|
||||||
import itemShortcuts from 'itemShortcuts';
|
|
||||||
import itemHelper from 'itemHelper';
|
|
||||||
import appRouter from 'appRouter';
|
import appRouter from 'appRouter';
|
||||||
import imageHelper from 'scripts/imagehelper';
|
import imageHelper from 'scripts/imagehelper';
|
||||||
import 'paper-icon-button-light';
|
import 'paper-icon-button-light';
|
||||||
|
@ -215,14 +211,6 @@ import 'css!./homesections';
|
||||||
imageLoader.lazyChildren(elem);
|
imageLoader.lazyChildren(elem);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns a random integer between min (inclusive) and max (inclusive)
|
|
||||||
* Using Math.round() will give you a non-uniform distribution!
|
|
||||||
*/
|
|
||||||
function getRandomInt(min, max) {
|
|
||||||
return Math.floor(Math.random() * (max - min + 1)) + min;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getFetchLatestItemsFn(serverId, parentId, collectionType) {
|
function getFetchLatestItemsFn(serverId, parentId, collectionType) {
|
||||||
return function () {
|
return function () {
|
||||||
const apiClient = connectionManager.getApiClient(serverId);
|
const apiClient = connectionManager.getApiClient(serverId);
|
||||||
|
@ -347,14 +335,6 @@ import 'css!./homesections';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getRequirePromise(deps) {
|
|
||||||
return new Promise(function (resolve, reject) {
|
|
||||||
import(deps).then(() => {
|
|
||||||
return resolve;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
export function loadLibraryTiles(elem, apiClient, user, userSettings, shape, userViews, allSections) {
|
export function loadLibraryTiles(elem, apiClient, user, userSettings, shape, userViews, allSections) {
|
||||||
let html = '';
|
let html = '';
|
||||||
if (userViews.length) {
|
if (userViews.length) {
|
||||||
|
@ -549,7 +529,6 @@ import 'css!./homesections';
|
||||||
}
|
}
|
||||||
|
|
||||||
function getOnNowItemsHtml(items) {
|
function getOnNowItemsHtml(items) {
|
||||||
const cardLayout = false;
|
|
||||||
return cardBuilder.getCardsHtml({
|
return cardBuilder.getCardsHtml({
|
||||||
items: items,
|
items: items,
|
||||||
preferThumb: 'auto',
|
preferThumb: 'auto',
|
||||||
|
@ -576,7 +555,6 @@ import 'css!./homesections';
|
||||||
return Promise.resolve();
|
return Promise.resolve();
|
||||||
}
|
}
|
||||||
|
|
||||||
const userId = user.Id;
|
|
||||||
return apiClient.getLiveTvRecommendedPrograms({
|
return apiClient.getLiveTvRecommendedPrograms({
|
||||||
userId: apiClient.getCurrentUserId(),
|
userId: apiClient.getCurrentUserId(),
|
||||||
IsAiring: true,
|
IsAiring: true,
|
||||||
|
@ -766,7 +744,6 @@ import 'css!./homesections';
|
||||||
|
|
||||||
function getLatestRecordingItemsHtml(activeRecordingsOnly) {
|
function getLatestRecordingItemsHtml(activeRecordingsOnly) {
|
||||||
return function (items) {
|
return function (items) {
|
||||||
const cardLayout = false;
|
|
||||||
return cardBuilder.getCardsHtml({
|
return cardBuilder.getCardsHtml({
|
||||||
items: items,
|
items: items,
|
||||||
shape: enableScrollX() ? 'autooverflow' : 'auto',
|
shape: enableScrollX() ? 'autooverflow' : 'auto',
|
||||||
|
|
|
@ -33,32 +33,6 @@ import events from 'events';
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function enableHlsShakaPlayer(item, mediaSource, mediaType) {
|
|
||||||
/* eslint-disable-next-line compat/compat */
|
|
||||||
if (!!window.MediaSource && !!MediaSource.isTypeSupported) {
|
|
||||||
|
|
||||||
if (canPlayNativeHls()) {
|
|
||||||
|
|
||||||
if (browser.edge && mediaType === 'Video') {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// simple playback should use the native support
|
|
||||||
if (mediaSource.RunTimeTicks) {
|
|
||||||
//if (!browser.edge) {
|
|
||||||
//return false;
|
|
||||||
//}
|
|
||||||
}
|
|
||||||
|
|
||||||
//return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function enableHlsJsPlayer(runTimeTicks, mediaType) {
|
export function enableHlsJsPlayer(runTimeTicks, mediaType) {
|
||||||
|
|
||||||
if (window.MediaSource == null) {
|
if (window.MediaSource == null) {
|
||||||
|
@ -170,7 +144,6 @@ import events from 'events';
|
||||||
var seconds = (ticks || 0) / 10000000;
|
var seconds = (ticks || 0) / 10000000;
|
||||||
|
|
||||||
if (seconds) {
|
if (seconds) {
|
||||||
var src = (instance.currentSrc() || '').toLowerCase();
|
|
||||||
|
|
||||||
// Appending #t=xxx to the query string doesn't seem to work with HLS
|
// Appending #t=xxx to the query string doesn't seem to work with HLS
|
||||||
// For plain video files, not all browsers support it either
|
// For plain video files, not all browsers support it either
|
||||||
|
@ -273,19 +246,6 @@ import events from 'events';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function destroyShakaPlayer(instance) {
|
|
||||||
var player = instance._shakaPlayer;
|
|
||||||
if (player) {
|
|
||||||
try {
|
|
||||||
player.destroy();
|
|
||||||
} catch (err) {
|
|
||||||
console.error(err);
|
|
||||||
}
|
|
||||||
|
|
||||||
instance._shakaPlayer = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export function destroyHlsPlayer(instance) {
|
export function destroyHlsPlayer(instance) {
|
||||||
var player = instance._hlsPlayer;
|
var player = instance._hlsPlayer;
|
||||||
if (player) {
|
if (player) {
|
||||||
|
@ -416,7 +376,6 @@ import events from 'events';
|
||||||
|
|
||||||
destroyHlsPlayer(instance);
|
destroyHlsPlayer(instance);
|
||||||
destroyFlvPlayer(instance);
|
destroyFlvPlayer(instance);
|
||||||
destroyShakaPlayer(instance);
|
|
||||||
destroyCastPlayer(instance);
|
destroyCastPlayer(instance);
|
||||||
|
|
||||||
var stopInfo = {
|
var stopInfo = {
|
||||||
|
|
|
@ -270,7 +270,6 @@ define(['dom', 'loading', 'apphost', 'dialogHelper', 'connectionManager', 'image
|
||||||
// end footer
|
// end footer
|
||||||
|
|
||||||
html += '</div>';
|
html += '</div>';
|
||||||
//html += '</div>';
|
|
||||||
|
|
||||||
html += '</' + tagName + '>';
|
html += '</' + tagName + '>';
|
||||||
|
|
||||||
|
|
|
@ -4,8 +4,6 @@ import connectionManager from 'connectionManager';
|
||||||
import itemHelper from 'itemHelper';
|
import itemHelper from 'itemHelper';
|
||||||
import appRouter from 'appRouter';
|
import appRouter from 'appRouter';
|
||||||
import playbackManager from 'playbackManager';
|
import playbackManager from 'playbackManager';
|
||||||
import loading from 'loading';
|
|
||||||
import appSettings from 'appSettings';
|
|
||||||
import browser from 'browser';
|
import browser from 'browser';
|
||||||
import actionsheet from 'actionsheet';
|
import actionsheet from 'actionsheet';
|
||||||
|
|
||||||
|
|
|
@ -270,8 +270,6 @@ import 'emby-playstatebutton';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!clickEntireItem && options.dragHandle) {
|
if (!clickEntireItem && options.dragHandle) {
|
||||||
//html += '<button is="paper-icon-button-light" class="listViewDragHandle listItemButton"><span class="material-icons drag_handle"></span></button>';
|
|
||||||
// Firefox and Edge are not allowing the button to be draggable
|
|
||||||
html += '<span class="listViewDragHandle material-icons listItemIcon listItemIcon-transparent drag_handle"></span>';
|
html += '<span class="listViewDragHandle material-icons listItemIcon listItemIcon-transparent drag_handle"></span>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,29 +8,10 @@ import 'emby-button';
|
||||||
|
|
||||||
let tabOwnerView;
|
let tabOwnerView;
|
||||||
const queryScope = document.querySelector('.skinHeader');
|
const queryScope = document.querySelector('.skinHeader');
|
||||||
let footerTabsContainer;
|
|
||||||
let headerTabsContainer;
|
let headerTabsContainer;
|
||||||
let tabsElem;
|
let tabsElem;
|
||||||
|
|
||||||
function enableTabsInFooter() {
|
function ensureElements() {
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getTabsContainerElem() {
|
|
||||||
}
|
|
||||||
|
|
||||||
function ensureElements(enableInFooter) {
|
|
||||||
|
|
||||||
if (enableInFooter) {
|
|
||||||
if (!footerTabsContainer) {
|
|
||||||
footerTabsContainer = document.createElement('div');
|
|
||||||
footerTabsContainer.classList.add('footerTabs');
|
|
||||||
footerTabsContainer.classList.add('sectionTabs');
|
|
||||||
footerTabsContainer.classList.add('hide');
|
|
||||||
//appFooter.add(footerTabsContainer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!headerTabsContainer) {
|
if (!headerTabsContainer) {
|
||||||
headerTabsContainer = queryScope.querySelector('.headerTabs');
|
headerTabsContainer = queryScope.querySelector('.headerTabs');
|
||||||
}
|
}
|
||||||
|
@ -75,7 +56,6 @@ import 'emby-button';
|
||||||
}
|
}
|
||||||
|
|
||||||
// implement without hammer
|
// implement without hammer
|
||||||
const pageCount = getTabContainersFn().length;
|
|
||||||
const onSwipeLeft = function (e, target) {
|
const onSwipeLeft = function (e, target) {
|
||||||
if (allowSwipe(target) && view.contains(target)) {
|
if (allowSwipe(target) && view.contains(target)) {
|
||||||
tabsElem.selectNext();
|
tabsElem.selectNext();
|
||||||
|
@ -102,9 +82,6 @@ import 'emby-button';
|
||||||
}
|
}
|
||||||
|
|
||||||
export function setTabs(view, selectedIndex, getTabsFn, getTabContainersFn, onBeforeTabChange, onTabChange, setSelectedIndex) {
|
export function setTabs(view, selectedIndex, getTabsFn, getTabContainersFn, onBeforeTabChange, onTabChange, setSelectedIndex) {
|
||||||
|
|
||||||
const enableInFooter = enableTabsInFooter();
|
|
||||||
|
|
||||||
if (!view) {
|
if (!view) {
|
||||||
if (tabOwnerView) {
|
if (tabOwnerView) {
|
||||||
|
|
||||||
|
@ -112,18 +89,13 @@ import 'emby-button';
|
||||||
headerTabsContainer = queryScope.querySelector('.headerTabs');
|
headerTabsContainer = queryScope.querySelector('.headerTabs');
|
||||||
}
|
}
|
||||||
|
|
||||||
ensureElements(enableInFooter);
|
ensureElements();
|
||||||
|
|
||||||
document.body.classList.remove('withSectionTabs');
|
document.body.classList.remove('withSectionTabs');
|
||||||
|
|
||||||
headerTabsContainer.innerHTML = '';
|
headerTabsContainer.innerHTML = '';
|
||||||
headerTabsContainer.classList.add('hide');
|
headerTabsContainer.classList.add('hide');
|
||||||
|
|
||||||
if (footerTabsContainer) {
|
|
||||||
footerTabsContainer.innerHTML = '';
|
|
||||||
footerTabsContainer.classList.add('hide');
|
|
||||||
}
|
|
||||||
|
|
||||||
tabOwnerView = null;
|
tabOwnerView = null;
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
|
@ -132,9 +104,9 @@ import 'emby-button';
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
ensureElements(enableInFooter);
|
ensureElements();
|
||||||
|
|
||||||
const tabsContainerElem = enableInFooter ? footerTabsContainer : headerTabsContainer;
|
const tabsContainerElem = headerTabsContainer;
|
||||||
|
|
||||||
if (!tabOwnerView) {
|
if (!tabOwnerView) {
|
||||||
tabsContainerElem.classList.remove('hide');
|
tabsContainerElem.classList.remove('hide');
|
||||||
|
@ -193,12 +165,6 @@ import 'emby-button';
|
||||||
|
|
||||||
const newPanel = tabContainers[e.detail.selectedTabIndex];
|
const newPanel = tabContainers[e.detail.selectedTabIndex];
|
||||||
|
|
||||||
//if (e.detail.previousIndex != null && e.detail.previousIndex != e.detail.selectedTabIndex) {
|
|
||||||
// if (newPanel.animate && (animateTabs || []).indexOf(e.detail.selectedTabIndex) != -1) {
|
|
||||||
// fadeInRight(newPanel);
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
if (newPanel) {
|
if (newPanel) {
|
||||||
newPanel.classList.add('is-active');
|
newPanel.classList.add('is-active');
|
||||||
}
|
}
|
||||||
|
@ -221,10 +187,6 @@ import 'emby-button';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//if (enableSwipe !== false) {
|
|
||||||
// libraryBrowser.configureSwipeTabs(ownerpage, tabs);
|
|
||||||
//}
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
tabsContainer: tabsContainerElem,
|
tabsContainer: tabsContainerElem,
|
||||||
tabs: tabsContainerElem.querySelector('[is="emby-tabs"]'),
|
tabs: tabsContainerElem.querySelector('[is="emby-tabs"]'),
|
||||||
|
|
|
@ -568,10 +568,6 @@ import 'emby-button';
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
//if (mediaSource.Container) {
|
|
||||||
// html += '<div class="mediaInfoIcon mediaInfoText">' + mediaSource.Container + '</div>';
|
|
||||||
//}
|
|
||||||
|
|
||||||
const resolutionText = getResolutionText(videoStream);
|
const resolutionText = getResolutionText(videoStream);
|
||||||
if (resolutionText) {
|
if (resolutionText) {
|
||||||
list.push({
|
list.push({
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
import itemHelper from 'itemHelper';
|
|
||||||
import dom from 'dom';
|
import dom from 'dom';
|
||||||
import layoutManager from 'layoutManager';
|
import layoutManager from 'layoutManager';
|
||||||
import dialogHelper from 'dialogHelper';
|
import dialogHelper from 'dialogHelper';
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
import dialogHelper from 'dialogHelper';
|
import dialogHelper from 'dialogHelper';
|
||||||
import layoutManager from 'layoutManager';
|
import layoutManager from 'layoutManager';
|
||||||
import globalize from 'globalize';
|
import globalize from 'globalize';
|
||||||
import require from 'require';
|
|
||||||
import 'paper-icon-button-light';
|
import 'paper-icon-button-light';
|
||||||
import 'emby-input';
|
import 'emby-input';
|
||||||
import 'emby-select';
|
import 'emby-select';
|
||||||
|
|
|
@ -580,10 +580,6 @@ import 'css!./multiSelect';
|
||||||
dom.removeEventListener(element, 'touchend', onTouchEnd, {
|
dom.removeEventListener(element, 'touchend', onTouchEnd, {
|
||||||
passive: true
|
passive: true
|
||||||
});
|
});
|
||||||
// this fires in safari due to magnifying class
|
|
||||||
//dom.removeEventListener(element, "touchcancel", onTouchEnd, {
|
|
||||||
// passive: true
|
|
||||||
//});
|
|
||||||
dom.removeEventListener(element, 'mousedown', onMouseDown, {
|
dom.removeEventListener(element, 'mousedown', onMouseDown, {
|
||||||
passive: true
|
passive: true
|
||||||
});
|
});
|
||||||
|
|
|
@ -101,11 +101,7 @@ define(['serverNotifications', 'playbackManager', 'events', 'globalize', 'requir
|
||||||
body: body,
|
body: body,
|
||||||
vibrate: true,
|
vibrate: true,
|
||||||
tag: 'newItem' + item.Id,
|
tag: 'newItem' + item.Id,
|
||||||
data: {
|
data: {}
|
||||||
//options: {
|
|
||||||
// url: LibraryBrowser.getHref(item)
|
|
||||||
//}
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
var imageTags = item.ImageTags || {};
|
var imageTags = item.ImageTags || {};
|
||||||
|
|
|
@ -1,6 +1,4 @@
|
||||||
import require from 'require';
|
|
||||||
import datetime from 'datetime';
|
import datetime from 'datetime';
|
||||||
import itemHelper from 'itemHelper';
|
|
||||||
import events from 'events';
|
import events from 'events';
|
||||||
import browser from 'browser';
|
import browser from 'browser';
|
||||||
import imageLoader from 'imageLoader';
|
import imageLoader from 'imageLoader';
|
||||||
|
|
|
@ -777,7 +777,6 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla
|
||||||
|
|
||||||
var players = [];
|
var players = [];
|
||||||
var currentTargetInfo;
|
var currentTargetInfo;
|
||||||
var lastLocalPlayer;
|
|
||||||
var currentPairingId = null;
|
var currentPairingId = null;
|
||||||
|
|
||||||
this._playNextAfterEnded = true;
|
this._playNextAfterEnded = true;
|
||||||
|
@ -1031,10 +1030,6 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla
|
||||||
console.debug('Active player: ' + JSON.stringify(targetInfo));
|
console.debug('Active player: ' + JSON.stringify(targetInfo));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (player && player.isLocalPlayer) {
|
|
||||||
lastLocalPlayer = player;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (previousPlayer) {
|
if (previousPlayer) {
|
||||||
self.endPlayerUpdates(previousPlayer);
|
self.endPlayerUpdates(previousPlayer);
|
||||||
}
|
}
|
||||||
|
@ -4076,8 +4071,7 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla
|
||||||
this.setSubtitleStreamIndex(parseInt(cmd.Arguments.Index), player);
|
this.setSubtitleStreamIndex(parseInt(cmd.Arguments.Index), player);
|
||||||
break;
|
break;
|
||||||
case 'SetMaxStreamingBitrate':
|
case 'SetMaxStreamingBitrate':
|
||||||
// todo
|
this.setMaxStreamingBitrate(parseInt(cmd.Arguments.Bitrate), player);
|
||||||
//this.setMaxStreamingBitrate(parseInt(cmd.Arguments.Bitrate), player);
|
|
||||||
break;
|
break;
|
||||||
case 'ToggleFullscreen':
|
case 'ToggleFullscreen':
|
||||||
this.toggleFullscreen(player);
|
this.toggleFullscreen(player);
|
||||||
|
|
|
@ -182,7 +182,6 @@ function disconnectFromPlayer(currentDeviceName) {
|
||||||
|
|
||||||
dialog({
|
dialog({
|
||||||
buttons: menuItems,
|
buttons: menuItems,
|
||||||
//positionTo: positionTo,
|
|
||||||
text: globalize.translate('ConfirmEndPlayerSession', currentDeviceName)
|
text: globalize.translate('ConfirmEndPlayerSession', currentDeviceName)
|
||||||
|
|
||||||
}).then(function (id) {
|
}).then(function (id) {
|
||||||
|
|
|
@ -88,8 +88,6 @@ function showRepeatModeMenu(player, btn) {
|
||||||
|
|
||||||
function getQualitySecondaryText(player) {
|
function getQualitySecondaryText(player) {
|
||||||
var state = playbackManager.getPlayerState(player);
|
var state = playbackManager.getPlayerState(player);
|
||||||
var isAutoEnabled = playbackManager.enableAutomaticBitrateDetection(player);
|
|
||||||
var currentMaxBitrate = playbackManager.getMaxStreamingBitrate(player);
|
|
||||||
|
|
||||||
var videoStream = playbackManager.currentMediaSource(player).MediaStreams.filter(function (stream) {
|
var videoStream = playbackManager.currentMediaSource(player).MediaStreams.filter(function (stream) {
|
||||||
return stream.Type === 'Video';
|
return stream.Type === 'Video';
|
||||||
|
@ -106,20 +104,6 @@ function getQualitySecondaryText(player) {
|
||||||
enableAuto: true
|
enableAuto: true
|
||||||
});
|
});
|
||||||
|
|
||||||
var menuItems = options.map(function (o) {
|
|
||||||
var opt = {
|
|
||||||
name: o.name,
|
|
||||||
id: o.bitrate,
|
|
||||||
asideText: o.secondaryText
|
|
||||||
};
|
|
||||||
|
|
||||||
if (o.selected) {
|
|
||||||
opt.selected = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return opt;
|
|
||||||
});
|
|
||||||
|
|
||||||
var selectedOption = options.filter(function (o) {
|
var selectedOption = options.filter(function (o) {
|
||||||
return o.selected;
|
return o.selected;
|
||||||
});
|
});
|
||||||
|
@ -168,7 +152,6 @@ function showAspectRatioMenu(player, btn) {
|
||||||
|
|
||||||
function showWithUser(options, player, user) {
|
function showWithUser(options, player, user) {
|
||||||
var supportedCommands = playbackManager.getSupportedCommands(player);
|
var supportedCommands = playbackManager.getSupportedCommands(player);
|
||||||
var mediaType = options.mediaType;
|
|
||||||
|
|
||||||
var menuItems = [];
|
var menuItems = [];
|
||||||
if (supportedCommands.indexOf('SetAspectRatio') !== -1) {
|
if (supportedCommands.indexOf('SetAspectRatio') !== -1) {
|
||||||
|
|
|
@ -5,7 +5,6 @@ import connectionManager from 'connectionManager';
|
||||||
import syncPlayManager from 'syncPlayManager';
|
import syncPlayManager from 'syncPlayManager';
|
||||||
import playMethodHelper from 'playMethodHelper';
|
import playMethodHelper from 'playMethodHelper';
|
||||||
import layoutManager from 'layoutManager';
|
import layoutManager from 'layoutManager';
|
||||||
import serverNotifications from 'serverNotifications';
|
|
||||||
import 'paper-icon-button-light';
|
import 'paper-icon-button-light';
|
||||||
import 'css!./playerstats';
|
import 'css!./playerstats';
|
||||||
|
|
||||||
|
@ -132,7 +131,6 @@ import 'css!./playerstats';
|
||||||
let audioChannels;
|
let audioChannels;
|
||||||
|
|
||||||
if (session.TranscodingInfo) {
|
if (session.TranscodingInfo) {
|
||||||
|
|
||||||
videoCodec = session.TranscodingInfo.VideoCodec;
|
videoCodec = session.TranscodingInfo.VideoCodec;
|
||||||
audioCodec = session.TranscodingInfo.AudioCodec;
|
audioCodec = session.TranscodingInfo.AudioCodec;
|
||||||
totalBitrate = session.TranscodingInfo.Bitrate;
|
totalBitrate = session.TranscodingInfo.Bitrate;
|
||||||
|
@ -140,7 +138,6 @@ import 'css!./playerstats';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (videoCodec) {
|
if (videoCodec) {
|
||||||
|
|
||||||
sessionStats.push({
|
sessionStats.push({
|
||||||
label: globalize.translate('LabelVideoCodec'),
|
label: globalize.translate('LabelVideoCodec'),
|
||||||
value: session.TranscodingInfo.IsVideoDirect ? (videoCodec.toUpperCase() + ' (direct)') : videoCodec.toUpperCase()
|
value: session.TranscodingInfo.IsVideoDirect ? (videoCodec.toUpperCase() + ' (direct)') : videoCodec.toUpperCase()
|
||||||
|
@ -148,20 +145,18 @@ import 'css!./playerstats';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (audioCodec) {
|
if (audioCodec) {
|
||||||
|
|
||||||
sessionStats.push({
|
sessionStats.push({
|
||||||
label: globalize.translate('LabelAudioCodec'),
|
label: globalize.translate('LabelAudioCodec'),
|
||||||
value: session.TranscodingInfo.IsAudioDirect ? (audioCodec.toUpperCase() + ' (direct)') : audioCodec.toUpperCase()
|
value: session.TranscodingInfo.IsAudioDirect ? (audioCodec.toUpperCase() + ' (direct)') : audioCodec.toUpperCase()
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
//if (audioChannels) {
|
if (audioChannels) {
|
||||||
|
sessionStats.push({
|
||||||
// sessionStats.push({
|
label: globalize.translate('LabelAudioChannels'),
|
||||||
// label: 'Audio channels:',
|
value: audioChannels
|
||||||
// value: audioChannels
|
});
|
||||||
// });
|
}
|
||||||
//}
|
|
||||||
|
|
||||||
if (displayPlayMethod === 'Transcode') {
|
if (displayPlayMethod === 'Transcode') {
|
||||||
if (totalBitrate) {
|
if (totalBitrate) {
|
||||||
|
|
|
@ -14,7 +14,6 @@ define(['globalize'], function (globalize) {
|
||||||
}
|
}
|
||||||
|
|
||||||
var maxAllowedWidth = videoWidth || 4096;
|
var maxAllowedWidth = videoWidth || 4096;
|
||||||
//var maxAllowedHeight = videoHeight || 2304;
|
|
||||||
|
|
||||||
var qualityOptions = [];
|
var qualityOptions = [];
|
||||||
|
|
||||||
|
|
|
@ -19,9 +19,6 @@ define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'c
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderTimer(context, item, apiClient) {
|
function renderTimer(context, item, apiClient) {
|
||||||
|
|
||||||
var program = item.ProgramInfo || {};
|
|
||||||
|
|
||||||
context.querySelector('#txtPrePaddingMinutes').value = item.PrePaddingSeconds / 60;
|
context.querySelector('#txtPrePaddingMinutes').value = item.PrePaddingSeconds / 60;
|
||||||
context.querySelector('#txtPostPaddingMinutes').value = item.PostPaddingSeconds / 60;
|
context.querySelector('#txtPostPaddingMinutes').value = item.PostPaddingSeconds / 60;
|
||||||
|
|
||||||
|
|
|
@ -20,8 +20,6 @@ define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'c
|
||||||
|
|
||||||
function renderTimer(context, item, apiClient) {
|
function renderTimer(context, item, apiClient) {
|
||||||
|
|
||||||
var program = item.ProgramInfo || {};
|
|
||||||
|
|
||||||
context.querySelector('#txtPrePaddingMinutes').value = item.PrePaddingSeconds / 60;
|
context.querySelector('#txtPrePaddingMinutes').value = item.PrePaddingSeconds / 60;
|
||||||
context.querySelector('#txtPostPaddingMinutes').value = item.PostPaddingSeconds / 60;
|
context.querySelector('#txtPostPaddingMinutes').value = item.PostPaddingSeconds / 60;
|
||||||
|
|
||||||
|
|
|
@ -222,7 +222,6 @@ define(['browser', 'datetime', 'backdrop', 'libraryBrowser', 'listView', 'imageL
|
||||||
}
|
}
|
||||||
|
|
||||||
function setImageUrl(context, state, url) {
|
function setImageUrl(context, state, url) {
|
||||||
currentImgUrl = url;
|
|
||||||
var item = state.NowPlayingItem;
|
var item = state.NowPlayingItem;
|
||||||
var imgContainer = context.querySelector('.nowPlayingPageImageContainer');
|
var imgContainer = context.querySelector('.nowPlayingPageImageContainer');
|
||||||
|
|
||||||
|
@ -257,7 +256,6 @@ define(['browser', 'datetime', 'backdrop', 'libraryBrowser', 'listView', 'imageL
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var currentImgUrl;
|
|
||||||
return function () {
|
return function () {
|
||||||
function toggleRepeat() {
|
function toggleRepeat() {
|
||||||
switch (playbackManager.getRepeatMode()) {
|
switch (playbackManager.getRepeatMode()) {
|
||||||
|
@ -909,7 +907,6 @@ define(['browser', 'datetime', 'backdrop', 'libraryBrowser', 'listView', 'imageL
|
||||||
}
|
}
|
||||||
|
|
||||||
function onShow(context, tab) {
|
function onShow(context, tab) {
|
||||||
currentImgUrl = null;
|
|
||||||
bindToPlayer(context, playbackManager.getCurrentPlayer());
|
bindToPlayer(context, playbackManager.getCurrentPlayer());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
// TODO: Check if needed and move to external dependency
|
||||||
// From https://github.com/parshap/node-sanitize-filename
|
// From https://github.com/parshap/node-sanitize-filename
|
||||||
|
|
||||||
const illegalRe = /[\/\?<>\\:\*\|":]/g;
|
const illegalRe = /[\/\?<>\\:\*\|":]/g;
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
import layoutManager from 'layoutManager';
|
import layoutManager from 'layoutManager';
|
||||||
import globalize from 'globalize';
|
import globalize from 'globalize';
|
||||||
import require from 'require';
|
|
||||||
import events from 'events';
|
|
||||||
import connectionManager from 'connectionManager';
|
import connectionManager from 'connectionManager';
|
||||||
import cardBuilder from 'cardBuilder';
|
import cardBuilder from 'cardBuilder';
|
||||||
import appRouter from 'appRouter';
|
import appRouter from 'appRouter';
|
||||||
|
|
|
@ -130,11 +130,6 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f
|
||||||
var hideTimeout;
|
var hideTimeout;
|
||||||
/** Last coordinates of the mouse pointer. */
|
/** Last coordinates of the mouse pointer. */
|
||||||
var lastMouseMoveData;
|
var lastMouseMoveData;
|
||||||
/** Visibility status of the OSD. */
|
|
||||||
var _osdOpen = false;
|
|
||||||
|
|
||||||
// Use autoplay on Chromecast since it is non-interactive.
|
|
||||||
if (browser.chromecast) options.interactive = false;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates the HTML markup for the dialog and the OSD.
|
* Creates the HTML markup for the dialog and the OSD.
|
||||||
|
@ -363,8 +358,6 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f
|
||||||
function getSwiperSlideHtmlFromItem(item) {
|
function getSwiperSlideHtmlFromItem(item) {
|
||||||
return getSwiperSlideHtmlFromSlide({
|
return getSwiperSlideHtmlFromSlide({
|
||||||
originalImage: getImgUrl(item, currentOptions.user),
|
originalImage: getImgUrl(item, currentOptions.user),
|
||||||
//title: item.Name,
|
|
||||||
//description: item.Overview
|
|
||||||
Id: item.Id,
|
Id: item.Id,
|
||||||
ServerId: item.ServerId
|
ServerId: item.ServerId
|
||||||
});
|
});
|
||||||
|
@ -545,7 +538,6 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_osdOpen = true;
|
|
||||||
element.classList.remove('hide');
|
element.classList.remove('hide');
|
||||||
|
|
||||||
var onFinish = function () {
|
var onFinish = function () {
|
||||||
|
@ -578,7 +570,6 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f
|
||||||
|
|
||||||
var onFinish = function () {
|
var onFinish = function () {
|
||||||
element.classList.add('hide');
|
element.classList.add('hide');
|
||||||
_osdOpen = false;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!element.animate) {
|
if (!element.animate) {
|
||||||
|
|
|
@ -90,13 +90,7 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'layoutMana
|
||||||
var submitted;
|
var submitted;
|
||||||
|
|
||||||
dlg.querySelector('form').addEventListener('change', function () {
|
dlg.querySelector('form').addEventListener('change', function () {
|
||||||
|
|
||||||
submitted = true;
|
submitted = true;
|
||||||
//if (options.onChange) {
|
|
||||||
// saveValues(dlg, options.settings, options.settingsKey);
|
|
||||||
// options.onChange();
|
|
||||||
//}
|
|
||||||
|
|
||||||
}, true);
|
}, true);
|
||||||
|
|
||||||
dialogHelper.open(dlg).then(function () {
|
dialogHelper.open(dlg).then(function () {
|
||||||
|
@ -106,11 +100,8 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'layoutMana
|
||||||
}
|
}
|
||||||
|
|
||||||
if (submitted) {
|
if (submitted) {
|
||||||
|
|
||||||
//if (!options.onChange) {
|
|
||||||
saveValues(dlg, options.settings, options.settingsKey);
|
saveValues(dlg, options.settings, options.settingsKey);
|
||||||
resolve();
|
resolve();
|
||||||
//}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,43 +4,6 @@ define(['dialogHelper', 'require', 'layoutManager', 'globalize', 'userSettings',
|
||||||
var currentItem;
|
var currentItem;
|
||||||
var hasChanges;
|
var hasChanges;
|
||||||
|
|
||||||
function showLocalSubtitles(context, index) {
|
|
||||||
|
|
||||||
loading.show();
|
|
||||||
|
|
||||||
var subtitleContent = context.querySelector('.subtitleContent');
|
|
||||||
subtitleContent.innerHTML = '';
|
|
||||||
|
|
||||||
var apiClient = connectionManager.getApiClient(currentItem.ServerId);
|
|
||||||
var url = 'Videos/' + currentItem.Id + '/Subtitles/' + index;
|
|
||||||
|
|
||||||
apiClient.ajax({
|
|
||||||
|
|
||||||
type: 'GET',
|
|
||||||
url: url
|
|
||||||
|
|
||||||
}).then(function (result) {
|
|
||||||
|
|
||||||
subtitleContent.innerHTML = result;
|
|
||||||
|
|
||||||
loading.hide();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function showRemoteSubtitles(context, id) {
|
|
||||||
|
|
||||||
loading.show();
|
|
||||||
|
|
||||||
var url = 'Providers/Subtitles/Subtitles/' + id;
|
|
||||||
|
|
||||||
ApiClient.get(ApiClient.getUrl(url)).then(function (result) {
|
|
||||||
|
|
||||||
// show result
|
|
||||||
|
|
||||||
loading.hide();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function downloadRemoteSubtitles(context, id) {
|
function downloadRemoteSubtitles(context, id) {
|
||||||
|
|
||||||
var url = 'Items/' + currentItem.Id + '/RemoteSearch/Subtitles/' + id;
|
var url = 'Items/' + currentItem.Id + '/RemoteSearch/Subtitles/' + id;
|
||||||
|
@ -170,14 +133,6 @@ define(['dialogHelper', 'require', 'layoutManager', 'globalize', 'userSettings',
|
||||||
elem.classList.add('hide');
|
elem.classList.add('hide');
|
||||||
}
|
}
|
||||||
elem.innerHTML = html;
|
elem.innerHTML = html;
|
||||||
|
|
||||||
//('.btnViewSubtitles', elem).on('click', function () {
|
|
||||||
|
|
||||||
// var index = this.getAttribute('data-index');
|
|
||||||
|
|
||||||
// showLocalSubtitles(context, index);
|
|
||||||
|
|
||||||
//});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function fillLanguages(context, apiClient, languages) {
|
function fillLanguages(context, apiClient, languages) {
|
||||||
|
@ -250,8 +205,6 @@ define(['dialogHelper', 'require', 'layoutManager', 'globalize', 'userSettings',
|
||||||
|
|
||||||
html += '<div class="listItemBody ' + bodyClass + '">';
|
html += '<div class="listItemBody ' + bodyClass + '">';
|
||||||
|
|
||||||
//html += '<a class="btnViewSubtitle" href="#" data-subid="' + result.Id + '">';
|
|
||||||
|
|
||||||
html += '<div>' + (result.Name) + '</div>';
|
html += '<div>' + (result.Name) + '</div>';
|
||||||
html += '<div class="secondary listItemBodyText">';
|
html += '<div class="secondary listItemBodyText">';
|
||||||
|
|
||||||
|
@ -272,8 +225,6 @@ define(['dialogHelper', 'require', 'layoutManager', 'globalize', 'userSettings',
|
||||||
html += '<div class="secondary listItemBodyText"><div class="inline-flex align-items-center justify-content-center" style="background:#3388cc;color:#fff;padding: .3em 1em;border-radius:1000em;">' + globalize.translate('PerfectMatch') + '</div></div>';
|
html += '<div class="secondary listItemBodyText"><div class="inline-flex align-items-center justify-content-center" style="background:#3388cc;color:#fff;padding: .3em 1em;border-radius:1000em;">' + globalize.translate('PerfectMatch') + '</div></div>';
|
||||||
}
|
}
|
||||||
|
|
||||||
//html += '</a>';
|
|
||||||
|
|
||||||
html += '</div>';
|
html += '</div>';
|
||||||
|
|
||||||
if (!layoutManager.tv) {
|
if (!layoutManager.tv) {
|
||||||
|
@ -290,12 +241,6 @@ define(['dialogHelper', 'require', 'layoutManager', 'globalize', 'userSettings',
|
||||||
var elem = context.querySelector('.subtitleResults');
|
var elem = context.querySelector('.subtitleResults');
|
||||||
elem.innerHTML = html;
|
elem.innerHTML = html;
|
||||||
|
|
||||||
//('.btnViewSubtitle', elem).on('click', function () {
|
|
||||||
|
|
||||||
// var id = this.getAttribute('data-subid');
|
|
||||||
// showRemoteSubtitles(context, id);
|
|
||||||
//});
|
|
||||||
|
|
||||||
loading.hide();
|
loading.hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -369,11 +314,10 @@ define(['dialogHelper', 'require', 'layoutManager', 'globalize', 'userSettings',
|
||||||
}
|
}
|
||||||
|
|
||||||
function onSubtitleResultsClick(e) {
|
function onSubtitleResultsClick(e) {
|
||||||
|
|
||||||
var btnOptions = dom.parentWithClass(e.target, 'btnOptions');
|
|
||||||
var subtitleId;
|
var subtitleId;
|
||||||
var context;
|
var context;
|
||||||
|
|
||||||
|
var btnOptions = dom.parentWithClass(e.target, 'btnOptions');
|
||||||
if (btnOptions) {
|
if (btnOptions) {
|
||||||
subtitleId = btnOptions.getAttribute('data-subid');
|
subtitleId = btnOptions.getAttribute('data-subid');
|
||||||
context = dom.parentWithClass(btnOptions, 'subtitleEditorDialog');
|
context = dom.parentWithClass(btnOptions, 'subtitleEditorDialog');
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
import require from 'require';
|
|
||||||
import globalize from 'globalize';
|
import globalize from 'globalize';
|
||||||
import appHost from 'apphost';
|
import appHost from 'apphost';
|
||||||
import appSettings from 'appSettings';
|
import appSettings from 'appSettings';
|
||||||
|
|
|
@ -1,589 +0,0 @@
|
||||||
define(['playbackManager', 'userSettings', 'alphaPicker', 'alphaNumericShortcuts', 'connectionManager', 'focusManager', 'loading', 'globalize'], function (playbackManager, userSettings, AlphaPicker, AlphaNumericShortcuts, connectionManager, focusManager, loading, globalize) {
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
function trySelectValue(instance, scroller, view, value) {
|
|
||||||
|
|
||||||
var card;
|
|
||||||
|
|
||||||
// If it's the symbol just pick the first card
|
|
||||||
if (value === '#') {
|
|
||||||
|
|
||||||
card = view.querySelector('.card');
|
|
||||||
|
|
||||||
if (card) {
|
|
||||||
scroller.toStart(card, false);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
card = view.querySelector('.card[data-prefix^=\'' + value + '\']');
|
|
||||||
|
|
||||||
if (card) {
|
|
||||||
scroller.toStart(card, false);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// go to the previous letter
|
|
||||||
var values = instance.alphaPicker.values();
|
|
||||||
var index = values.indexOf(value);
|
|
||||||
|
|
||||||
if (index < values.length - 2) {
|
|
||||||
trySelectValue(instance, scroller, view, values[index + 1]);
|
|
||||||
} else {
|
|
||||||
var all = view.querySelectorAll('.card');
|
|
||||||
card = all.length ? all[all.length - 1] : null;
|
|
||||||
|
|
||||||
if (card) {
|
|
||||||
scroller.toStart(card, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function onAlphaValueChanged() {
|
|
||||||
|
|
||||||
var value = this.alphaPicker.value();
|
|
||||||
var scroller = this.scroller;
|
|
||||||
|
|
||||||
trySelectValue(this, scroller, this.itemsContainer, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
function initAlphaPicker(instance, view) {
|
|
||||||
|
|
||||||
instance.itemsContainer = view.querySelector('.itemsContainer');
|
|
||||||
|
|
||||||
instance.alphaPicker = new AlphaPicker.default({
|
|
||||||
element: instance.alphaPickerElement,
|
|
||||||
itemsContainer: instance.itemsContainer,
|
|
||||||
itemClass: 'card'
|
|
||||||
});
|
|
||||||
|
|
||||||
instance.alphaPicker.on('alphavaluechanged', onAlphaValueChanged.bind(instance));
|
|
||||||
}
|
|
||||||
|
|
||||||
function showFilterMenu() {
|
|
||||||
|
|
||||||
var instance = this;
|
|
||||||
|
|
||||||
require(['filterMenu'], function (FilterMenu) {
|
|
||||||
|
|
||||||
new FilterMenu().show({
|
|
||||||
|
|
||||||
settingsKey: instance.getSettingsKey(),
|
|
||||||
settings: instance.getFilters(),
|
|
||||||
visibleSettings: instance.getVisibleFilters(),
|
|
||||||
onChange: instance.itemsContainer.refreshItems.bind(instance.itemsContainer),
|
|
||||||
parentId: instance.params.parentId,
|
|
||||||
itemTypes: instance.getItemTypes ? instance.getItemTypes() : [],
|
|
||||||
serverId: instance.apiClient.serverId(),
|
|
||||||
filterMenuOptions: instance.getFilterMenuOptions()
|
|
||||||
|
|
||||||
}).then(function () {
|
|
||||||
|
|
||||||
instance.itemsContainer.refreshItems();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function updateAlphaPickerState(instance) {
|
|
||||||
|
|
||||||
if (!instance.alphaPicker) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var alphaPicker = instance.alphaPickerElement;
|
|
||||||
if (!alphaPicker) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var values = instance.getSortValues();
|
|
||||||
|
|
||||||
if (values.sortBy === 'SortName' && values.sortOrder === 'Ascending') {
|
|
||||||
alphaPicker.classList.remove('hide');
|
|
||||||
} else {
|
|
||||||
alphaPicker.classList.add('hide');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function showSortMenu() {
|
|
||||||
var instance = this;
|
|
||||||
require(['sortMenu'], function (SortMenu) {
|
|
||||||
new SortMenu().show({
|
|
||||||
settingsKey: instance.getSettingsKey(),
|
|
||||||
settings: instance.getSortValues(),
|
|
||||||
onChange: instance.itemsContainer.refreshItems.bind(instance.itemsContainer),
|
|
||||||
serverId: instance.params.serverId,
|
|
||||||
sortOptions: instance.getSortMenuOptions()
|
|
||||||
}).then(function () {
|
|
||||||
updateSortText(instance);
|
|
||||||
updateAlphaPickerState(instance);
|
|
||||||
instance.itemsContainer.refreshItems();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function showViewSettingsMenu() {
|
|
||||||
|
|
||||||
var instance = this;
|
|
||||||
|
|
||||||
require(['viewSettings'], function (ViewSettings) {
|
|
||||||
|
|
||||||
new ViewSettings().show({
|
|
||||||
|
|
||||||
settingsKey: instance.getSettingsKey(),
|
|
||||||
settings: instance.getViewSettings(),
|
|
||||||
visibleSettings: instance.getVisibleViewSettings()
|
|
||||||
|
|
||||||
}).then(function () {
|
|
||||||
|
|
||||||
updateItemsContainerForViewType(instance);
|
|
||||||
instance.itemsContainer.refreshItems();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function updateItemsContainerForViewType(instance) {
|
|
||||||
|
|
||||||
var settings = instance.getViewSettings();
|
|
||||||
|
|
||||||
if (settings.imageType === 'list') {
|
|
||||||
|
|
||||||
instance.itemsContainer.classList.remove('vertical-wrap');
|
|
||||||
instance.itemsContainer.classList.add('vertical-list');
|
|
||||||
|
|
||||||
} else {
|
|
||||||
instance.itemsContainer.classList.add('vertical-wrap');
|
|
||||||
instance.itemsContainer.classList.remove('vertical-list');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function updateSortText(instance) {
|
|
||||||
|
|
||||||
var btnSortText = instance.btnSortText;
|
|
||||||
if (!btnSortText) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var options = instance.getSortMenuOptions();
|
|
||||||
var values = instance.getSortValues();
|
|
||||||
|
|
||||||
var sortBy = values.sortBy;
|
|
||||||
|
|
||||||
for (var i = 0, length = options.length; i < length; i++) {
|
|
||||||
|
|
||||||
if (sortBy === options[i].value) {
|
|
||||||
|
|
||||||
btnSortText.innerHTML = globalize.translate('SortByValue', options[i].name);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var btnSortIcon = instance.btnSortIcon;
|
|
||||||
if (!btnSortIcon) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
btnSortIcon.classList.remove('arrow_downward', 'arrow_upward');
|
|
||||||
btnSortIcon.classList.add(values.sortOrder === 'Descending' ? 'arrow_downward' : 'arrow_upward');
|
|
||||||
}
|
|
||||||
|
|
||||||
function bindAll(elems, eventName, fn) {
|
|
||||||
for (var i = 0, length = elems.length; i < length; i++) {
|
|
||||||
|
|
||||||
elems[i].addEventListener(eventName, fn);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function play() {
|
|
||||||
|
|
||||||
this.fetchData().then(function (result) {
|
|
||||||
playbackManager.play({
|
|
||||||
items: result.Items || result
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function shuffle() {
|
|
||||||
|
|
||||||
this.fetchData().then(function (result) {
|
|
||||||
playbackManager.play({
|
|
||||||
items: result.Items || result
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function hideOrShowAll(elems, hide) {
|
|
||||||
|
|
||||||
for (var i = 0, length = elems.length; i < length; i++) {
|
|
||||||
|
|
||||||
if (hide) {
|
|
||||||
elems[i].classList.add('hide');
|
|
||||||
} else {
|
|
||||||
elems[i].classList.remove('hide');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function ItemsTab(view, params) {
|
|
||||||
this.view = view;
|
|
||||||
this.params = params;
|
|
||||||
|
|
||||||
if (params.serverId) {
|
|
||||||
this.apiClient = connectionManager.getApiClient(params.serverId);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.itemsContainer = view.querySelector('.itemsContainer');
|
|
||||||
this.scroller = view.querySelector('.scrollFrameY');
|
|
||||||
|
|
||||||
this.itemsContainer.fetchData = this.fetchData.bind(this);
|
|
||||||
this.itemsContainer.getItemsHtml = this.getItemsHtml.bind(this);
|
|
||||||
|
|
||||||
if (params.parentId) {
|
|
||||||
this.itemsContainer.setAttribute('data-parentid', params.parentId);
|
|
||||||
}
|
|
||||||
|
|
||||||
var i;
|
|
||||||
var length;
|
|
||||||
|
|
||||||
var btnViewSettings = view.querySelectorAll('.btnViewSettings');
|
|
||||||
for (i = 0, length = btnViewSettings.length; i < length; i++) {
|
|
||||||
|
|
||||||
btnViewSettings[i].addEventListener('click', showViewSettingsMenu.bind(this));
|
|
||||||
}
|
|
||||||
|
|
||||||
var filterButtons = view.querySelectorAll('.btnFilter');
|
|
||||||
this.filterButtons = filterButtons;
|
|
||||||
var hasVisibleFilters = this.getVisibleFilters().length;
|
|
||||||
for (i = 0, length = filterButtons.length; i < length; i++) {
|
|
||||||
|
|
||||||
var btnFilter = filterButtons[i];
|
|
||||||
btnFilter.addEventListener('click', showFilterMenu.bind(this));
|
|
||||||
|
|
||||||
if (hasVisibleFilters) {
|
|
||||||
btnFilter.classList.remove('hide');
|
|
||||||
} else {
|
|
||||||
btnFilter.classList.add('hide');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var sortButtons = view.querySelectorAll('.btnSort');
|
|
||||||
this.sortButtons = sortButtons;
|
|
||||||
for (i = 0, length = sortButtons.length; i < length; i++) {
|
|
||||||
|
|
||||||
var sortButton = sortButtons[i];
|
|
||||||
sortButton.addEventListener('click', showSortMenu.bind(this));
|
|
||||||
|
|
||||||
if (params.type !== 'nextup') {
|
|
||||||
sortButton.classList.remove('hide');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this.btnSortText = view.querySelector('.btnSortText');
|
|
||||||
this.btnSortIcon = view.querySelector('.btnSortIcon');
|
|
||||||
|
|
||||||
this.alphaPickerElement = view.querySelector('.alphaPicker');
|
|
||||||
|
|
||||||
hideOrShowAll(view.querySelectorAll('.btnShuffle'), true);
|
|
||||||
|
|
||||||
bindAll(view.querySelectorAll('.btnPlay'), 'click', play.bind(this));
|
|
||||||
bindAll(view.querySelectorAll('.btnShuffle'), 'click', shuffle.bind(this));
|
|
||||||
}
|
|
||||||
|
|
||||||
function getSettingValue(key, defaultValue) {
|
|
||||||
}
|
|
||||||
|
|
||||||
ItemsTab.prototype.getViewSettings = function () {
|
|
||||||
|
|
||||||
var basekey = this.getSettingsKey();
|
|
||||||
|
|
||||||
return {
|
|
||||||
showTitle: userSettings.get(basekey + '-showTitle') !== 'false',
|
|
||||||
showYear: userSettings.get(basekey + '-showYear') !== 'false',
|
|
||||||
imageType: userSettings.get(basekey + '-imageType') || this.getDefaultImageType()
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
ItemsTab.prototype.getDefaultImageType = function () {
|
|
||||||
|
|
||||||
return 'primary';
|
|
||||||
};
|
|
||||||
|
|
||||||
ItemsTab.prototype.getSettingsKey = function () {
|
|
||||||
|
|
||||||
return this.params.parentId + '-1';
|
|
||||||
};
|
|
||||||
|
|
||||||
ItemsTab.prototype.onResume = function (options) {
|
|
||||||
|
|
||||||
if (options && options.refresh) {
|
|
||||||
updateSortText(this);
|
|
||||||
updateItemsContainerForViewType(this);
|
|
||||||
loading.show();
|
|
||||||
}
|
|
||||||
|
|
||||||
var view = this.view;
|
|
||||||
|
|
||||||
var scroller = this.scroller;
|
|
||||||
if (scroller && scroller.resume) {
|
|
||||||
scroller.resume();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.enableAlphaPicker && !this.alphaPicker) {
|
|
||||||
initAlphaPicker(this, view);
|
|
||||||
updateAlphaPickerState(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.enableAlphaNumericShortcuts !== false) {
|
|
||||||
this.alphaNumericShortcuts = new AlphaNumericShortcuts.default({
|
|
||||||
itemsContainer: this.itemsContainer
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
var instance = this;
|
|
||||||
var autoFocus = options.autoFocus;
|
|
||||||
|
|
||||||
this.itemsContainer.resume(options).then(function (result) {
|
|
||||||
|
|
||||||
loading.hide();
|
|
||||||
|
|
||||||
if (autoFocus) {
|
|
||||||
focusManager.autoFocus(instance.itemsContainer);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
ItemsTab.prototype.getVisibleViewSettings = function () {
|
|
||||||
|
|
||||||
return [
|
|
||||||
'showTitle',
|
|
||||||
'showYear',
|
|
||||||
'imageType'
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
ItemsTab.prototype.getFilters = function () {
|
|
||||||
|
|
||||||
var basekey = this.getSettingsKey();
|
|
||||||
|
|
||||||
return {
|
|
||||||
IsPlayed: userSettings.getFilter(basekey + '-filter-IsPlayed') === 'true',
|
|
||||||
IsUnplayed: userSettings.getFilter(basekey + '-filter-IsUnplayed') === 'true',
|
|
||||||
IsFavorite: userSettings.getFilter(basekey + '-filter-IsFavorite') === 'true',
|
|
||||||
IsResumable: userSettings.getFilter(basekey + '-filter-IsResumable') === 'true',
|
|
||||||
Is4K: userSettings.getFilter(basekey + '-filter-Is4K') === 'true',
|
|
||||||
IsHD: userSettings.getFilter(basekey + '-filter-IsHD') === 'true',
|
|
||||||
IsSD: userSettings.getFilter(basekey + '-filter-IsSD') === 'true',
|
|
||||||
Is3D: userSettings.getFilter(basekey + '-filter-Is3D') === 'true',
|
|
||||||
VideoTypes: userSettings.getFilter(basekey + '-filter-VideoTypes'),
|
|
||||||
SeriesStatus: userSettings.getFilter(basekey + '-filter-SeriesStatus'),
|
|
||||||
HasSubtitles: userSettings.getFilter(basekey + '-filter-HasSubtitles'),
|
|
||||||
HasTrailer: userSettings.getFilter(basekey + '-filter-HasTrailer'),
|
|
||||||
HasSpecialFeature: userSettings.getFilter(basekey + '-filter-HasSpecialFeature'),
|
|
||||||
HasThemeSong: userSettings.getFilter(basekey + '-filter-HasThemeSong'),
|
|
||||||
HasThemeVideo: userSettings.getFilter(basekey + '-filter-HasThemeVideo'),
|
|
||||||
GenreIds: userSettings.getFilter(basekey + '-filter-GenreIds')
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
ItemsTab.prototype.getSortValues = function () {
|
|
||||||
|
|
||||||
var basekey = this.getSettingsKey();
|
|
||||||
|
|
||||||
return {
|
|
||||||
sortBy: userSettings.getFilter(basekey + '-sortby') || this.getSortMenuOptions()[0].value,
|
|
||||||
sortOrder: userSettings.getFilter(basekey + '-sortorder') === 'Descending' ? 'Descending' : 'Ascending'
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
ItemsTab.prototype.getVisibleFilters = function () {
|
|
||||||
|
|
||||||
return [
|
|
||||||
'IsUnplayed',
|
|
||||||
'IsPlayed',
|
|
||||||
'IsFavorite',
|
|
||||||
'IsResumable',
|
|
||||||
'VideoType',
|
|
||||||
'HasSubtitles',
|
|
||||||
'HasTrailer',
|
|
||||||
'HasSpecialFeature',
|
|
||||||
'HasThemeSong',
|
|
||||||
'HasThemeVideo'
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
ItemsTab.prototype.getDefaultSortBy = function () {
|
|
||||||
|
|
||||||
return 'SortName';
|
|
||||||
};
|
|
||||||
|
|
||||||
ItemsTab.prototype.getSortMenuOptions = function () {
|
|
||||||
|
|
||||||
var sortBy = [];
|
|
||||||
|
|
||||||
var option = this.getNameSortOption();
|
|
||||||
if (option) {
|
|
||||||
sortBy.push(option);
|
|
||||||
}
|
|
||||||
|
|
||||||
option = this.getCommunityRatingSortOption();
|
|
||||||
if (option) {
|
|
||||||
sortBy.push(option);
|
|
||||||
}
|
|
||||||
|
|
||||||
option = this.getCriticRatingSortOption();
|
|
||||||
|
|
||||||
if (option) {
|
|
||||||
sortBy.push(option);
|
|
||||||
}
|
|
||||||
|
|
||||||
sortBy.push({
|
|
||||||
name: globalize.translate('DateAdded'),
|
|
||||||
value: 'DateCreated,SortName'
|
|
||||||
});
|
|
||||||
|
|
||||||
option = this.getDatePlayedSortOption();
|
|
||||||
if (option) {
|
|
||||||
sortBy.push(option);
|
|
||||||
}
|
|
||||||
|
|
||||||
sortBy.push({
|
|
||||||
name: globalize.translate('ParentalRating'),
|
|
||||||
value: 'OfficialRating,SortName'
|
|
||||||
});
|
|
||||||
|
|
||||||
option = this.getPlayCountSortOption();
|
|
||||||
if (option) {
|
|
||||||
sortBy.push(option);
|
|
||||||
}
|
|
||||||
|
|
||||||
sortBy.push({
|
|
||||||
name: globalize.translate('ReleaseDate'),
|
|
||||||
value: 'PremiereDate,ProductionYear,SortName'
|
|
||||||
});
|
|
||||||
|
|
||||||
sortBy.push({
|
|
||||||
name: globalize.translate('Runtime'),
|
|
||||||
value: 'Runtime,SortName'
|
|
||||||
});
|
|
||||||
|
|
||||||
return sortBy;
|
|
||||||
};
|
|
||||||
|
|
||||||
ItemsTab.prototype.getNameSortOption = function () {
|
|
||||||
|
|
||||||
return {
|
|
||||||
name: globalize.translate('Name'),
|
|
||||||
value: 'SortName'
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
ItemsTab.prototype.getPlayCountSortOption = function () {
|
|
||||||
|
|
||||||
return {
|
|
||||||
name: globalize.translate('PlayCount'),
|
|
||||||
value: 'PlayCount,SortName'
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
ItemsTab.prototype.getDatePlayedSortOption = function () {
|
|
||||||
|
|
||||||
return {
|
|
||||||
name: globalize.translate('DatePlayed'),
|
|
||||||
value: 'DatePlayed,SortName'
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
ItemsTab.prototype.getCriticRatingSortOption = function () {
|
|
||||||
|
|
||||||
return {
|
|
||||||
name: globalize.translate('CriticRating'),
|
|
||||||
value: 'CriticRating,SortName'
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
ItemsTab.prototype.getCommunityRatingSortOption = function () {
|
|
||||||
|
|
||||||
return {
|
|
||||||
name: globalize.translate('CommunityRating'),
|
|
||||||
value: 'CommunityRating,SortName'
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
ItemsTab.prototype.getFilterMenuOptions = function () {
|
|
||||||
|
|
||||||
var params = this.params;
|
|
||||||
|
|
||||||
return {
|
|
||||||
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
ItemsTab.prototype.getItemTypes = function () {
|
|
||||||
|
|
||||||
return [];
|
|
||||||
};
|
|
||||||
|
|
||||||
ItemsTab.prototype.setFilterStatus = function (hasFilters) {
|
|
||||||
|
|
||||||
this.hasFilters = hasFilters;
|
|
||||||
|
|
||||||
var filterButtons = this.filterButtons;
|
|
||||||
if (!filterButtons.length) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (var i = 0, length = filterButtons.length; i < length; i++) {
|
|
||||||
|
|
||||||
var btnFilter = filterButtons[i];
|
|
||||||
|
|
||||||
var bubble = btnFilter.querySelector('.filterButtonBubble');
|
|
||||||
if (!bubble) {
|
|
||||||
|
|
||||||
if (!hasFilters) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
btnFilter.insertAdjacentHTML('afterbegin', '<div class="filterButtonBubble">!</div>');
|
|
||||||
btnFilter.classList.add('btnFilterWithBubble');
|
|
||||||
bubble = btnFilter.querySelector('.filterButtonBubble');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hasFilters) {
|
|
||||||
bubble.classList.remove('hide');
|
|
||||||
} else {
|
|
||||||
bubble.classList.add('hide');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ItemsTab.prototype.onPause = function () {
|
|
||||||
var scroller = this.scroller;
|
|
||||||
if (scroller && scroller.pause) {
|
|
||||||
scroller.pause();
|
|
||||||
}
|
|
||||||
|
|
||||||
var alphaNumericShortcuts = this.alphaNumericShortcuts;
|
|
||||||
if (alphaNumericShortcuts) {
|
|
||||||
alphaNumericShortcuts.default.destroy();
|
|
||||||
this.alphaNumericShortcuts = null;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ItemsTab.prototype.destroy = function () {
|
|
||||||
this.view = null;
|
|
||||||
this.itemsContainer = null;
|
|
||||||
this.params = null;
|
|
||||||
this.apiClient = null;
|
|
||||||
this.scroller = null;
|
|
||||||
this.filterButtons = null;
|
|
||||||
|
|
||||||
if (this.alphaPicker) {
|
|
||||||
this.alphaPicker.destroy();
|
|
||||||
this.alphaPicker = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.sortButtons = null;
|
|
||||||
this.btnSortText = null;
|
|
||||||
this.btnSortIcon = null;
|
|
||||||
this.alphaPickerElement = null;
|
|
||||||
};
|
|
||||||
|
|
||||||
return ItemsTab;
|
|
||||||
});
|
|
|
@ -100,12 +100,12 @@ define(['playbackManager', 'userSettings', 'connectionManager'], function (playb
|
||||||
|
|
||||||
}, true);
|
}, true);
|
||||||
|
|
||||||
//Events.on(playbackManager, 'playbackstart', function (e, player) {
|
Events.on(playbackManager, 'playbackstart', function (e, player) {
|
||||||
// var item = playbackManager.currentItem(player);
|
var item = playbackManager.currentItem(player);
|
||||||
// // User played something manually
|
// User played something manually
|
||||||
// if (currentThemeIds.indexOf(item.Id) == -1) {
|
if (currentThemeIds.indexOf(item.Id) == -1) {
|
||||||
// currentOwnerId = null;
|
currentOwnerId = null;
|
||||||
// }
|
}
|
||||||
//});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
|
@ -112,22 +112,6 @@ define(['connectionManager', 'globalize', 'dom', 'itemHelper', 'paper-icon-butto
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//var tooltipLike = globalize.translate('Like');
|
|
||||||
//var tooltipDislike = globalize.translate('Dislike');
|
|
||||||
|
|
||||||
//if (typeof userData.Likes == "undefined") {
|
|
||||||
// html += getUserDataButtonHtml('markDislike', itemId, serverId, btnCssClass + ' btnUserData btnDislike', 'thumb-down', tooltipDislike);
|
|
||||||
// html += getUserDataButtonHtml('markLike', itemId, serverId, btnCssClass + ' btnUserData btnLike', 'thumb-up', tooltipLike);
|
|
||||||
//}
|
|
||||||
//else if (userData.Likes) {
|
|
||||||
// html += getUserDataButtonHtml('markDislike', itemId, serverId, btnCssClass + ' btnUserData btnDislike', 'thumb-down', tooltipDislike);
|
|
||||||
// html += getUserDataButtonHtml('markLike', itemId, serverId, btnCssClass + ' btnUserData btnLike btnUserDataOn', 'thumb-up', tooltipLike);
|
|
||||||
//}
|
|
||||||
//else {
|
|
||||||
// html += getUserDataButtonHtml('markDislike', itemId, serverId, btnCssClass + ' btnUserData btnDislike btnUserDataOn', 'thumb-down', tooltipDislike);
|
|
||||||
// html += getUserDataButtonHtml('markLike', itemId, serverId, btnCssClass + ' btnUserData btnLike', 'thumb-up', tooltipLike);
|
|
||||||
//}
|
|
||||||
|
|
||||||
var tooltipFavorite = globalize.translate('Favorite');
|
var tooltipFavorite = globalize.translate('Favorite');
|
||||||
if (userData.IsFavorite) {
|
if (userData.IsFavorite) {
|
||||||
|
|
||||||
|
|
|
@ -21,11 +21,10 @@ define(['viewContainer', 'focusManager', 'queryString', 'layoutManager'], functi
|
||||||
if (!newView.initComplete) {
|
if (!newView.initComplete) {
|
||||||
newView.initComplete = true;
|
newView.initComplete = true;
|
||||||
|
|
||||||
var controller;
|
|
||||||
if (typeof options.controllerFactory === 'function') {
|
if (typeof options.controllerFactory === 'function') {
|
||||||
controller = new options.controllerFactory(newView, eventDetail.detail.params);
|
new options.controllerFactory(newView, eventDetail.detail.params);
|
||||||
} else if (options.controllerFactory && typeof options.controllerFactory.default === 'function') {
|
} else if (options.controllerFactory && typeof options.controllerFactory.default === 'function') {
|
||||||
controller = new options.controllerFactory.default(newView, eventDetail.detail.params);
|
new options.controllerFactory.default(newView, eventDetail.detail.params);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!options.controllerFactory || dispatchPageEvents) {
|
if (!options.controllerFactory || dispatchPageEvents) {
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import datetime from 'datetime';
|
import datetime from 'datetime';
|
||||||
import loading from 'loading';
|
import loading from 'loading';
|
||||||
import libraryMenu from 'libraryMenu';
|
|
||||||
import dom from 'dom';
|
import dom from 'dom';
|
||||||
import globalize from 'globalize';
|
import globalize from 'globalize';
|
||||||
import 'emby-button';
|
import 'emby-button';
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
import loading from 'loading';
|
import loading from 'loading';
|
||||||
import libraryMenu from 'libraryMenu';
|
|
||||||
import dom from 'dom';
|
import dom from 'dom';
|
||||||
import 'emby-input';
|
import 'emby-input';
|
||||||
import 'emby-button';
|
import 'emby-button';
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import loading from 'loading';
|
import loading from 'loading';
|
||||||
import dom from 'dom';
|
import dom from 'dom';
|
||||||
import libraryMenu from 'libraryMenu';
|
|
||||||
import globalize from 'globalize';
|
import globalize from 'globalize';
|
||||||
import imageHelper from 'scripts/imagehelper';
|
import imageHelper from 'scripts/imagehelper';
|
||||||
import * as datefns from 'date-fns';
|
import * as datefns from 'date-fns';
|
||||||
|
|
|
@ -1,11 +1,9 @@
|
||||||
import $ from 'jQuery';
|
import $ from 'jQuery';
|
||||||
import appHost from 'apphost';
|
|
||||||
import taskButton from 'scripts/taskbutton';
|
import taskButton from 'scripts/taskbutton';
|
||||||
import loading from 'loading';
|
import loading from 'loading';
|
||||||
import libraryMenu from 'libraryMenu';
|
import libraryMenu from 'libraryMenu';
|
||||||
import globalize from 'globalize';
|
import globalize from 'globalize';
|
||||||
import dom from 'dom';
|
import dom from 'dom';
|
||||||
import indicators from 'indicators';
|
|
||||||
import imageHelper from 'scripts/imagehelper';
|
import imageHelper from 'scripts/imagehelper';
|
||||||
import 'cardStyle';
|
import 'cardStyle';
|
||||||
import 'emby-itemrefreshindicator';
|
import 'emby-itemrefreshindicator';
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
import $ from 'jQuery';
|
import $ from 'jQuery';
|
||||||
import dom from 'dom';
|
|
||||||
import loading from 'loading';
|
import loading from 'loading';
|
||||||
import libraryMenu from 'libraryMenu';
|
import libraryMenu from 'libraryMenu';
|
||||||
import globalize from 'globalize';
|
import globalize from 'globalize';
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
import loading from 'loading';
|
import loading from 'loading';
|
||||||
import libraryMenu from 'libraryMenu';
|
|
||||||
import globalize from 'globalize';
|
import globalize from 'globalize';
|
||||||
import 'emby-checkbox';
|
import 'emby-checkbox';
|
||||||
import 'emby-select';
|
import 'emby-select';
|
||||||
|
|
|
@ -34,7 +34,6 @@ define(['loading', 'libraryMenu', 'globalize', 'cardStyle', 'emby-button', 'emby
|
||||||
var availablePlugins = options.availablePlugins;
|
var availablePlugins = options.availablePlugins;
|
||||||
var installedPlugins = options.installedPlugins;
|
var installedPlugins = options.installedPlugins;
|
||||||
|
|
||||||
var categories = [];
|
|
||||||
availablePlugins.forEach(function (plugin, index, array) {
|
availablePlugins.forEach(function (plugin, index, array) {
|
||||||
plugin.category = plugin.category || 'General';
|
plugin.category = plugin.category || 'General';
|
||||||
plugin.categoryDisplayName = getHeaderText(plugin.category);
|
plugin.categoryDisplayName = getHeaderText(plugin.category);
|
||||||
|
|
|
@ -155,102 +155,12 @@ import 'flexStyles';
|
||||||
page.querySelector('.localUsers').innerHTML = getUserSectionHtml(users, true);
|
page.querySelector('.localUsers').innerHTML = getUserSectionHtml(users, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
function showPendingUserMenu(elem) {
|
|
||||||
const menuItems = [];
|
|
||||||
menuItems.push({
|
|
||||||
name: globalize.translate('ButtonCancel'),
|
|
||||||
id: 'delete',
|
|
||||||
icon: 'delete'
|
|
||||||
});
|
|
||||||
|
|
||||||
import('actionsheet').then(({default: actionsheet}) => {
|
|
||||||
const card = dom.parentWithClass(elem, 'card');
|
|
||||||
const page = dom.parentWithClass(card, 'page');
|
|
||||||
const id = card.getAttribute('data-id');
|
|
||||||
actionsheet.show({
|
|
||||||
items: menuItems,
|
|
||||||
positionTo: card,
|
|
||||||
callback: function (menuItemId) {
|
|
||||||
switch (menuItemId) {
|
|
||||||
case 'delete':
|
|
||||||
cancelAuthorization(page, id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function getPendingUserHtml(user) {
|
|
||||||
let html = '';
|
|
||||||
html += "<div data-id='" + user.Id + "' class='card squareCard scalableCard squareCard-scalable'>";
|
|
||||||
html += '<div class="cardBox cardBox-bottompadded visualCardBox">';
|
|
||||||
html += '<div class="cardScalable visualCardBox-cardScalable">';
|
|
||||||
html += '<div class="cardPadder cardPadder-square"></div>';
|
|
||||||
html += '<a class="cardContent cardImageContainer" is="emby-linkbutton" href="#">';
|
|
||||||
|
|
||||||
if (user.ImageUrl) {
|
|
||||||
html += '<div class="cardImage" style="background-image:url(\'' + user.ImageUrl + "');\">";
|
|
||||||
html += '</div>';
|
|
||||||
} else {
|
|
||||||
html += '<span class="cardImageIcon material-icons person"></span>';
|
|
||||||
}
|
|
||||||
|
|
||||||
html += '</a>';
|
|
||||||
html += '</div>';
|
|
||||||
html += '<div class="cardFooter visualCardBox-cardFooter">';
|
|
||||||
html += '<div class="cardText" style="text-align:right; float:right;padding:0;">';
|
|
||||||
html += '<button type="button" is="paper-icon-button-light" class="btnUserMenu"><span class="material-icons more_vert"></span></button>';
|
|
||||||
html += '</div>';
|
|
||||||
html += '<div class="cardText" style="padding-top:10px;padding-bottom:10px;">';
|
|
||||||
html += user.UserName;
|
|
||||||
html += '</div>';
|
|
||||||
html += '</div>';
|
|
||||||
html += '</div>';
|
|
||||||
return html + '</div>';
|
|
||||||
}
|
|
||||||
|
|
||||||
function renderPendingGuests(page, users) {
|
|
||||||
if (users.length) {
|
|
||||||
page.querySelector('.sectionPendingGuests').classList.remove('hide');
|
|
||||||
} else {
|
|
||||||
page.querySelector('.sectionPendingGuests').classList.add('hide');
|
|
||||||
}
|
|
||||||
|
|
||||||
page.querySelector('.pending').innerHTML = users.map(getPendingUserHtml).join('');
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO cvium: maybe reuse for invitation system
|
|
||||||
function cancelAuthorization(page, id) {
|
|
||||||
loading.show();
|
|
||||||
ApiClient.ajax({
|
|
||||||
type: 'DELETE',
|
|
||||||
url: ApiClient.getUrl('Connect/Pending', {
|
|
||||||
Id: id
|
|
||||||
})
|
|
||||||
}).then(function () {
|
|
||||||
loadData(page);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function loadData(page) {
|
function loadData(page) {
|
||||||
loading.show();
|
loading.show();
|
||||||
ApiClient.getUsers().then(function (users) {
|
ApiClient.getUsers().then(function (users) {
|
||||||
renderUsers(page, users);
|
renderUsers(page, users);
|
||||||
loading.hide();
|
loading.hide();
|
||||||
});
|
});
|
||||||
// TODO cvium
|
|
||||||
renderPendingGuests(page, []);
|
|
||||||
// ApiClient.getJSON(ApiClient.getUrl("Connect/Pending")).then(function (pending) {
|
|
||||||
//
|
|
||||||
// });
|
|
||||||
}
|
|
||||||
|
|
||||||
function showInvitePopup(page) {
|
|
||||||
import('components/guestinviter/guestinviter').then(({default: guestinviter}) => {
|
|
||||||
guestinviter.show().then(function () {
|
|
||||||
loadData(page);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pageIdOn('pageinit', 'userProfilesPage', function () {
|
pageIdOn('pageinit', 'userProfilesPage', function () {
|
||||||
|
@ -265,14 +175,8 @@ import 'flexStyles';
|
||||||
showUserMenu(btnUserMenu);
|
showUserMenu(btnUserMenu);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
page.querySelector('.pending').addEventListener('click', function (e__r) {
|
|
||||||
const btnUserMenu = dom.parentWithClass(e__r.target, 'btnUserMenu');
|
|
||||||
|
|
||||||
if (btnUserMenu) {
|
|
||||||
showPendingUserMenu(btnUserMenu);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
pageIdOn('pagebeforeshow', 'userProfilesPage', function () {
|
pageIdOn('pagebeforeshow', 'userProfilesPage', function () {
|
||||||
loadData(this);
|
loadData(this);
|
||||||
});
|
});
|
||||||
|
|
|
@ -170,8 +170,7 @@ define(['appRouter', 'cardBuilder', 'dom', 'globalize', 'connectionManager', 'ap
|
||||||
|
|
||||||
function getItemsHtmlFn(section) {
|
function getItemsHtmlFn(section) {
|
||||||
return function (items) {
|
return function (items) {
|
||||||
var supportsImageAnalysis = appHost.supports('imageanalysis');
|
var cardLayout = appHost.preferVisualCards && section.autoCardLayout && section.showTitle;
|
||||||
var cardLayout = (appHost.preferVisualCards || supportsImageAnalysis) && section.autoCardLayout && section.showTitle;
|
|
||||||
cardLayout = false;
|
cardLayout = false;
|
||||||
var serverId = this.apiClient.serverId();
|
var serverId = this.apiClient.serverId();
|
||||||
var leadingButtons = layoutManager.tv ? [{
|
var leadingButtons = layoutManager.tv ? [{
|
||||||
|
|
|
@ -1652,7 +1652,6 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti
|
||||||
html += '<h2 class="sectionTitle sectionTitle-cards">';
|
html += '<h2 class="sectionTitle sectionTitle-cards">';
|
||||||
html += '<span>' + type.name + '</span>';
|
html += '<span>' + type.name + '</span>';
|
||||||
html += '</h2>';
|
html += '</h2>';
|
||||||
html += '<button class="btnAddToCollection sectionTitleButton" type="button" is="paper-icon-button-light" style="margin-left:1em;"><span class="material-icons add"></span></button>';
|
|
||||||
html += '</div>';
|
html += '</div>';
|
||||||
html += '<div is="emby-itemscontainer" class="itemsContainer collectionItemsContainer vertical-wrap padded-left padded-right">';
|
html += '<div is="emby-itemscontainer" class="itemsContainer collectionItemsContainer vertical-wrap padded-left padded-right">';
|
||||||
var shape = 'MusicAlbum' == type.type ? getSquareShape(false) : getPortraitShape(false);
|
var shape = 'MusicAlbum' == type.type ? getSquareShape(false) : getPortraitShape(false);
|
||||||
|
@ -1674,14 +1673,6 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti
|
||||||
var collectionItems = page.querySelector('.collectionItems');
|
var collectionItems = page.querySelector('.collectionItems');
|
||||||
collectionItems.insertAdjacentHTML('beforeend', html);
|
collectionItems.insertAdjacentHTML('beforeend', html);
|
||||||
imageLoader.lazyChildren(collectionItems);
|
imageLoader.lazyChildren(collectionItems);
|
||||||
collectionItems.querySelector('.btnAddToCollection').addEventListener('click', function () {
|
|
||||||
require(['alert'], function (alert) {
|
|
||||||
alert.default({
|
|
||||||
text: globalize.translate('AddItemToCollectionHelp'),
|
|
||||||
html: globalize.translate('AddItemToCollectionHelp') + '<br/><br/><a is="emby-linkbutton" class="button-link" target="_blank" href="https://web.archive.org/web/20181216120305/https://github.com/MediaBrowser/Wiki/wiki/Collections">' + globalize.translate('ButtonLearnMore') + '</a>'
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderMusicVideos(page, item, user) {
|
function renderMusicVideos(page, item, user) {
|
||||||
|
|
|
@ -24,7 +24,6 @@ define(['layoutManager', 'loading', 'cardBuilder', 'apphost', 'imageLoader', 'sc
|
||||||
recordingItems.classList.add('vertical-wrap');
|
recordingItems.classList.add('vertical-wrap');
|
||||||
}
|
}
|
||||||
|
|
||||||
appHost.supports('imageanalysis');
|
|
||||||
recordingItems.innerHTML = cardBuilder.getCardsHtml(Object.assign({
|
recordingItems.innerHTML = cardBuilder.getCardsHtml(Object.assign({
|
||||||
items: recordings,
|
items: recordings,
|
||||||
shape: scrollX ? 'autooverflow' : 'auto',
|
shape: scrollX ? 'autooverflow' : 'auto',
|
||||||
|
|
|
@ -30,17 +30,14 @@ define(['layoutManager', 'cardBuilder', 'apphost', 'imageLoader', 'loading', 'sc
|
||||||
recordingItems.classList.add('vertical-wrap');
|
recordingItems.classList.add('vertical-wrap');
|
||||||
}
|
}
|
||||||
|
|
||||||
var supportsImageAnalysis = appHost.supports('imageanalysis');
|
|
||||||
var cardLayout = appHost.preferVisualCards || supportsImageAnalysis;
|
|
||||||
cardLayout = false;
|
|
||||||
recordingItems.innerHTML = cardBuilder.getCardsHtml(Object.assign({
|
recordingItems.innerHTML = cardBuilder.getCardsHtml(Object.assign({
|
||||||
items: recordings,
|
items: recordings,
|
||||||
shape: enableScrollX() ? 'autooverflow' : 'auto',
|
shape: enableScrollX() ? 'autooverflow' : 'auto',
|
||||||
showTitle: true,
|
showTitle: true,
|
||||||
showParentTitle: true,
|
showParentTitle: true,
|
||||||
coverImage: true,
|
coverImage: true,
|
||||||
cardLayout: cardLayout,
|
cardLayout: false,
|
||||||
centerText: !cardLayout,
|
centerText: true,
|
||||||
allowBottomPadding: !enableScrollX(),
|
allowBottomPadding: !enableScrollX(),
|
||||||
preferThumb: 'auto'
|
preferThumb: 'auto'
|
||||||
}, cardOptions || {}));
|
}, cardOptions || {}));
|
||||||
|
|
|
@ -3,7 +3,6 @@ define(['datetime', 'cardBuilder', 'imageLoader', 'apphost', 'loading', 'paper-i
|
||||||
|
|
||||||
function renderTimers(context, timers) {
|
function renderTimers(context, timers) {
|
||||||
var html = '';
|
var html = '';
|
||||||
appHost.supports('imageanalysis');
|
|
||||||
html += cardBuilder.getCardsHtml({
|
html += cardBuilder.getCardsHtml({
|
||||||
items: timers,
|
items: timers,
|
||||||
shape: 'auto',
|
shape: 'auto',
|
||||||
|
|
|
@ -75,7 +75,6 @@ define(['layoutManager', 'loading', 'libraryBrowser', 'cardBuilder', 'lazyLoader
|
||||||
ParentId: params.topParentId
|
ParentId: params.topParentId
|
||||||
};
|
};
|
||||||
ApiClient.getItems(ApiClient.getCurrentUserId(), query).then(function (result) {
|
ApiClient.getItems(ApiClient.getCurrentUserId(), query).then(function (result) {
|
||||||
var supportsImageAnalysis = appHost.supports('imageanalysis');
|
|
||||||
|
|
||||||
if (viewStyle == 'Thumb') {
|
if (viewStyle == 'Thumb') {
|
||||||
cardBuilder.buildCards(result.Items, {
|
cardBuilder.buildCards(result.Items, {
|
||||||
|
|
|
@ -346,8 +346,6 @@ define(['events', 'layoutManager', 'inputManager', 'userSettings', 'libraryMenu'
|
||||||
function loadTab(page, index) {
|
function loadTab(page, index) {
|
||||||
currentTabIndex = index;
|
currentTabIndex = index;
|
||||||
getTabController(page, index, function (controller) {
|
getTabController(page, index, function (controller) {
|
||||||
initialTabIndex = null;
|
|
||||||
|
|
||||||
if (renderedTabs.indexOf(index) == -1) {
|
if (renderedTabs.indexOf(index) == -1) {
|
||||||
renderedTabs.push(index);
|
renderedTabs.push(index);
|
||||||
controller.renderTab();
|
controller.renderTab();
|
||||||
|
@ -370,10 +368,8 @@ define(['events', 'layoutManager', 'inputManager', 'userSettings', 'libraryMenu'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var isViewRestored;
|
|
||||||
var self = this;
|
var self = this;
|
||||||
var currentTabIndex = parseInt(params.tab || getDefaultTabIndex(params.topParentId));
|
var currentTabIndex = parseInt(params.tab || getDefaultTabIndex(params.topParentId));
|
||||||
var initialTabIndex = currentTabIndex;
|
|
||||||
var suggestionsTabIndex = 1;
|
var suggestionsTabIndex = 1;
|
||||||
|
|
||||||
self.initTab = function () {
|
self.initTab = function () {
|
||||||
|
@ -389,7 +385,8 @@ define(['events', 'layoutManager', 'inputManager', 'userSettings', 'libraryMenu'
|
||||||
var tabControllers = [];
|
var tabControllers = [];
|
||||||
var renderedTabs = [];
|
var renderedTabs = [];
|
||||||
view.addEventListener('viewshow', function (e) {
|
view.addEventListener('viewshow', function (e) {
|
||||||
if (isViewRestored = e.detail.isRestored, initTabs(), !view.getAttribute('data-title')) {
|
initTabs();
|
||||||
|
if (!view.getAttribute('data-title')) {
|
||||||
var parentId = params.topParentId;
|
var parentId = params.topParentId;
|
||||||
|
|
||||||
if (parentId) {
|
if (parentId) {
|
||||||
|
|
|
@ -41,8 +41,7 @@ define(['browser', 'layoutManager', 'userSettings', 'inputManager', 'loading', '
|
||||||
};
|
};
|
||||||
ApiClient.getJSON(ApiClient.getUrl('Users/' + userId + '/Items/Latest', options)).then(function (items) {
|
ApiClient.getJSON(ApiClient.getUrl('Users/' + userId + '/Items/Latest', options)).then(function (items) {
|
||||||
var elem = page.querySelector('#recentlyAddedSongs');
|
var elem = page.querySelector('#recentlyAddedSongs');
|
||||||
var supportsImageAnalysis = appHost.supports('imageanalysis');
|
|
||||||
supportsImageAnalysis = false;
|
|
||||||
elem.innerHTML = cardBuilder.getCardsHtml({
|
elem.innerHTML = cardBuilder.getCardsHtml({
|
||||||
items: items,
|
items: items,
|
||||||
showUnplayedIndicator: false,
|
showUnplayedIndicator: false,
|
||||||
|
@ -51,10 +50,10 @@ define(['browser', 'layoutManager', 'userSettings', 'inputManager', 'loading', '
|
||||||
showTitle: true,
|
showTitle: true,
|
||||||
showParentTitle: true,
|
showParentTitle: true,
|
||||||
lazy: true,
|
lazy: true,
|
||||||
centerText: !supportsImageAnalysis,
|
centerText: true,
|
||||||
overlayPlayButton: !supportsImageAnalysis,
|
overlayPlayButton: true,
|
||||||
allowBottomPadding: !enableScrollX(),
|
allowBottomPadding: !enableScrollX(),
|
||||||
cardLayout: supportsImageAnalysis,
|
cardLayout: false,
|
||||||
coverImage: true
|
coverImage: true
|
||||||
});
|
});
|
||||||
imageLoader.lazyChildren(elem);
|
imageLoader.lazyChildren(elem);
|
||||||
|
@ -90,8 +89,6 @@ define(['browser', 'layoutManager', 'userSettings', 'inputManager', 'loading', '
|
||||||
}
|
}
|
||||||
|
|
||||||
var itemsContainer = elem.querySelector('.itemsContainer');
|
var itemsContainer = elem.querySelector('.itemsContainer');
|
||||||
var supportsImageAnalysis = appHost.supports('imageanalysis');
|
|
||||||
supportsImageAnalysis = false;
|
|
||||||
itemsContainer.innerHTML = cardBuilder.getCardsHtml({
|
itemsContainer.innerHTML = cardBuilder.getCardsHtml({
|
||||||
items: result.Items,
|
items: result.Items,
|
||||||
showUnplayedIndicator: false,
|
showUnplayedIndicator: false,
|
||||||
|
@ -100,10 +97,10 @@ define(['browser', 'layoutManager', 'userSettings', 'inputManager', 'loading', '
|
||||||
showParentTitle: true,
|
showParentTitle: true,
|
||||||
action: 'instantmix',
|
action: 'instantmix',
|
||||||
lazy: true,
|
lazy: true,
|
||||||
centerText: !supportsImageAnalysis,
|
centerText: true,
|
||||||
overlayMoreButton: !supportsImageAnalysis,
|
overlayMoreButton: true,
|
||||||
allowBottomPadding: !enableScrollX(),
|
allowBottomPadding: !enableScrollX(),
|
||||||
cardLayout: supportsImageAnalysis,
|
cardLayout: false,
|
||||||
coverImage: true
|
coverImage: true
|
||||||
});
|
});
|
||||||
imageLoader.lazyChildren(itemsContainer);
|
imageLoader.lazyChildren(itemsContainer);
|
||||||
|
@ -134,8 +131,6 @@ define(['browser', 'layoutManager', 'userSettings', 'inputManager', 'loading', '
|
||||||
}
|
}
|
||||||
|
|
||||||
var itemsContainer = elem.querySelector('.itemsContainer');
|
var itemsContainer = elem.querySelector('.itemsContainer');
|
||||||
var supportsImageAnalysis = appHost.supports('imageanalysis');
|
|
||||||
supportsImageAnalysis = false;
|
|
||||||
itemsContainer.innerHTML = cardBuilder.getCardsHtml({
|
itemsContainer.innerHTML = cardBuilder.getCardsHtml({
|
||||||
items: result.Items,
|
items: result.Items,
|
||||||
showUnplayedIndicator: false,
|
showUnplayedIndicator: false,
|
||||||
|
@ -144,10 +139,10 @@ define(['browser', 'layoutManager', 'userSettings', 'inputManager', 'loading', '
|
||||||
showParentTitle: true,
|
showParentTitle: true,
|
||||||
action: 'instantmix',
|
action: 'instantmix',
|
||||||
lazy: true,
|
lazy: true,
|
||||||
centerText: !supportsImageAnalysis,
|
centerText: true,
|
||||||
overlayMoreButton: !supportsImageAnalysis,
|
overlayMoreButton: true,
|
||||||
allowBottomPadding: !enableScrollX(),
|
allowBottomPadding: !enableScrollX(),
|
||||||
cardLayout: supportsImageAnalysis,
|
cardLayout: false,
|
||||||
coverImage: true
|
coverImage: true
|
||||||
});
|
});
|
||||||
imageLoader.lazyChildren(itemsContainer);
|
imageLoader.lazyChildren(itemsContainer);
|
||||||
|
@ -339,8 +334,6 @@ define(['browser', 'layoutManager', 'userSettings', 'inputManager', 'loading', '
|
||||||
function loadTab(page, index) {
|
function loadTab(page, index) {
|
||||||
currentTabIndex = index;
|
currentTabIndex = index;
|
||||||
getTabController(page, index, function (controller) {
|
getTabController(page, index, function (controller) {
|
||||||
initialTabIndex = null;
|
|
||||||
|
|
||||||
if (renderedTabs.indexOf(index) == -1) {
|
if (renderedTabs.indexOf(index) == -1) {
|
||||||
renderedTabs.push(index);
|
renderedTabs.push(index);
|
||||||
controller.renderTab();
|
controller.renderTab();
|
||||||
|
@ -356,10 +349,8 @@ define(['browser', 'layoutManager', 'userSettings', 'inputManager', 'loading', '
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var isViewRestored;
|
|
||||||
var self = this;
|
var self = this;
|
||||||
var currentTabIndex = parseInt(params.tab || getDefaultTabIndex(params.topParentId));
|
var currentTabIndex = parseInt(params.tab || getDefaultTabIndex(params.topParentId));
|
||||||
var initialTabIndex = currentTabIndex;
|
|
||||||
|
|
||||||
self.initTab = function () {
|
self.initTab = function () {
|
||||||
var tabContent = view.querySelector(".pageTabContent[data-index='0']");
|
var tabContent = view.querySelector(".pageTabContent[data-index='0']");
|
||||||
|
@ -377,7 +368,6 @@ define(['browser', 'layoutManager', 'userSettings', 'inputManager', 'loading', '
|
||||||
var tabControllers = [];
|
var tabControllers = [];
|
||||||
var renderedTabs = [];
|
var renderedTabs = [];
|
||||||
view.addEventListener('viewshow', function (e) {
|
view.addEventListener('viewshow', function (e) {
|
||||||
isViewRestored = e.detail.isRestored;
|
|
||||||
initTabs();
|
initTabs();
|
||||||
if (!view.getAttribute('data-title')) {
|
if (!view.getAttribute('data-title')) {
|
||||||
var parentId = params.topParentId;
|
var parentId = params.topParentId;
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
import focusManager from 'focusManager';
|
|
||||||
import SearchFields from 'searchFields';
|
import SearchFields from 'searchFields';
|
||||||
import SearchResults from 'searchResults';
|
import SearchResults from 'searchResults';
|
||||||
import events from 'events';
|
import events from 'events';
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import appSettings from 'appSettings';
|
import appSettings from 'appSettings';
|
||||||
import loading from 'loading';
|
import loading from 'loading';
|
||||||
import browser from 'browser';
|
|
||||||
import globalize from 'globalize';
|
import globalize from 'globalize';
|
||||||
import 'emby-button';
|
import 'emby-button';
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,6 @@ import appRouter from 'appRouter';
|
||||||
import layoutManager from 'layoutManager';
|
import layoutManager from 'layoutManager';
|
||||||
import libraryMenu from 'libraryMenu';
|
import libraryMenu from 'libraryMenu';
|
||||||
import appSettings from 'appSettings';
|
import appSettings from 'appSettings';
|
||||||
import appHost from 'apphost';
|
|
||||||
import focusManager from 'focusManager';
|
import focusManager from 'focusManager';
|
||||||
import connectionManager from 'connectionManager';
|
import connectionManager from 'connectionManager';
|
||||||
import globalize from 'globalize';
|
import globalize from 'globalize';
|
||||||
|
@ -95,11 +94,6 @@ import 'emby-button';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function showGeneralError() {
|
|
||||||
loading.hide();
|
|
||||||
alertText(globalize.translate('DefaultErrorMessage'));
|
|
||||||
}
|
|
||||||
|
|
||||||
function alertText(text) {
|
function alertText(text) {
|
||||||
alertTextWithOptions({
|
alertTextWithOptions({
|
||||||
text: text
|
text: text
|
||||||
|
|
|
@ -3,10 +3,8 @@ import loading from 'loading';
|
||||||
import libraryBrowser from 'libraryBrowser';
|
import libraryBrowser from 'libraryBrowser';
|
||||||
import cardBuilder from 'cardBuilder';
|
import cardBuilder from 'cardBuilder';
|
||||||
import lazyLoader from 'lazyLoader';
|
import lazyLoader from 'lazyLoader';
|
||||||
import appHost from 'apphost';
|
|
||||||
import globalize from 'globalize';
|
import globalize from 'globalize';
|
||||||
import appRouter from 'appRouter';
|
import appRouter from 'appRouter';
|
||||||
import dom from 'dom';
|
|
||||||
import 'emby-button';
|
import 'emby-button';
|
||||||
|
|
||||||
/* eslint-disable indent */
|
/* eslint-disable indent */
|
||||||
|
@ -85,8 +83,6 @@ import 'emby-button';
|
||||||
ParentId: params.topParentId
|
ParentId: params.topParentId
|
||||||
};
|
};
|
||||||
ApiClient.getItems(ApiClient.getCurrentUserId(), query).then(function (result) {
|
ApiClient.getItems(ApiClient.getCurrentUserId(), query).then(function (result) {
|
||||||
const supportsImageAnalysis = appHost.supports('imageanalysis');
|
|
||||||
|
|
||||||
if (viewStyle == 'Thumb') {
|
if (viewStyle == 'Thumb') {
|
||||||
cardBuilder.buildCards(result.Items, {
|
cardBuilder.buildCards(result.Items, {
|
||||||
itemsContainer: elem,
|
itemsContainer: elem,
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
import loading from 'loading';
|
import loading from 'loading';
|
||||||
import groupedcards from 'components/groupedcards';
|
import groupedcards from 'components/groupedcards';
|
||||||
import cardBuilder from 'cardBuilder';
|
import cardBuilder from 'cardBuilder';
|
||||||
import appHost from 'apphost';
|
|
||||||
import imageLoader from 'imageLoader';
|
import imageLoader from 'imageLoader';
|
||||||
|
|
||||||
/* eslint-disable indent */
|
/* eslint-disable indent */
|
||||||
|
@ -24,7 +23,6 @@ import imageLoader from 'imageLoader';
|
||||||
function loadLatest(context, params, promise) {
|
function loadLatest(context, params, promise) {
|
||||||
promise.then(function (items) {
|
promise.then(function (items) {
|
||||||
let html = '';
|
let html = '';
|
||||||
appHost.supports('imageanalysis');
|
|
||||||
html += cardBuilder.getCardsHtml({
|
html += cardBuilder.getCardsHtml({
|
||||||
items: items,
|
items: items,
|
||||||
shape: 'backdrop',
|
shape: 'backdrop',
|
||||||
|
|
|
@ -269,8 +269,6 @@ import 'emby-button';
|
||||||
function loadTab(page, index) {
|
function loadTab(page, index) {
|
||||||
currentTabIndex = index;
|
currentTabIndex = index;
|
||||||
getTabController(page, index, function (controller) {
|
getTabController(page, index, function (controller) {
|
||||||
initialTabIndex = null;
|
|
||||||
|
|
||||||
if (renderedTabs.indexOf(index) == -1) {
|
if (renderedTabs.indexOf(index) == -1) {
|
||||||
renderedTabs.push(index);
|
renderedTabs.push(index);
|
||||||
controller.renderTab();
|
controller.renderTab();
|
||||||
|
@ -301,10 +299,8 @@ import 'emby-button';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let isViewRestored;
|
|
||||||
const self = this;
|
const self = this;
|
||||||
let currentTabIndex = parseInt(params.tab || getDefaultTabIndex(params.topParentId));
|
let currentTabIndex = parseInt(params.tab || getDefaultTabIndex(params.topParentId));
|
||||||
let initialTabIndex = currentTabIndex;
|
|
||||||
|
|
||||||
self.initTab = function () {
|
self.initTab = function () {
|
||||||
const tabContent = self.tabContent;
|
const tabContent = self.tabContent;
|
||||||
|
@ -319,7 +315,6 @@ import 'emby-button';
|
||||||
let renderedTabs = [];
|
let renderedTabs = [];
|
||||||
setScrollClasses(view.querySelector('#resumableItems'), enableScrollX());
|
setScrollClasses(view.querySelector('#resumableItems'), enableScrollX());
|
||||||
view.addEventListener('viewshow', function (e) {
|
view.addEventListener('viewshow', function (e) {
|
||||||
isViewRestored = e.detail.isRestored;
|
|
||||||
initTabs();
|
initTabs();
|
||||||
if (!view.getAttribute('data-title')) {
|
if (!view.getAttribute('data-title')) {
|
||||||
const parentId = params.topParentId;
|
const parentId = params.topParentId;
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
import layoutManager from 'layoutManager';
|
|
||||||
import loading from 'loading';
|
import loading from 'loading';
|
||||||
import events from 'events';
|
import events from 'events';
|
||||||
import libraryBrowser from 'libraryBrowser';
|
import libraryBrowser from 'libraryBrowser';
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
import loading from 'loading';
|
import loading from 'loading';
|
||||||
import libraryBrowser from 'libraryBrowser';
|
import libraryBrowser from 'libraryBrowser';
|
||||||
import cardBuilder from 'cardBuilder';
|
import cardBuilder from 'cardBuilder';
|
||||||
import appHost from 'apphost';
|
|
||||||
|
|
||||||
/* eslint-disable indent */
|
/* eslint-disable indent */
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,7 @@
|
||||||
import layoutManager from 'layoutManager';
|
import layoutManager from 'layoutManager';
|
||||||
import loading from 'loading';
|
import loading from 'loading';
|
||||||
import datetime from 'datetime';
|
import datetime from 'datetime';
|
||||||
import libraryBrowser from 'libraryBrowser';
|
|
||||||
import cardBuilder from 'cardBuilder';
|
import cardBuilder from 'cardBuilder';
|
||||||
import appHost from 'apphost';
|
|
||||||
import imageLoader from 'imageLoader';
|
import imageLoader from 'imageLoader';
|
||||||
import globalize from 'globalize';
|
import globalize from 'globalize';
|
||||||
import 'scrollStyles';
|
import 'scrollStyles';
|
||||||
|
@ -106,8 +104,6 @@ import 'emby-itemscontainer';
|
||||||
html += '<div is="emby-itemscontainer" class="itemsContainer vertical-wrap padded-left padded-right">';
|
html += '<div is="emby-itemscontainer" class="itemsContainer vertical-wrap padded-left padded-right">';
|
||||||
}
|
}
|
||||||
|
|
||||||
let supportsImageAnalysis = appHost.supports('imageanalysis');
|
|
||||||
supportsImageAnalysis = false;
|
|
||||||
html += cardBuilder.getCardsHtml({
|
html += cardBuilder.getCardsHtml({
|
||||||
items: group.items,
|
items: group.items,
|
||||||
showLocationTypeIndicator: false,
|
showLocationTypeIndicator: false,
|
||||||
|
@ -116,11 +112,11 @@ import 'emby-itemscontainer';
|
||||||
preferThumb: true,
|
preferThumb: true,
|
||||||
lazy: true,
|
lazy: true,
|
||||||
showDetailsMenu: true,
|
showDetailsMenu: true,
|
||||||
centerText: !supportsImageAnalysis,
|
centerText: true,
|
||||||
showParentTitle: true,
|
showParentTitle: true,
|
||||||
overlayText: false,
|
overlayText: false,
|
||||||
allowBottomPadding: allowBottomPadding,
|
allowBottomPadding: allowBottomPadding,
|
||||||
cardLayout: supportsImageAnalysis,
|
cardLayout: false,
|
||||||
overlayMoreButton: true,
|
overlayMoreButton: true,
|
||||||
missingIndicator: false
|
missingIndicator: false
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,7 +1,4 @@
|
||||||
import HomescreenSettings from 'homescreenSettings';
|
import HomescreenSettings from 'homescreenSettings';
|
||||||
import dom from 'dom';
|
|
||||||
import globalize from 'globalize';
|
|
||||||
import loading from 'loading';
|
|
||||||
import * as userSettings from 'userSettings';
|
import * as userSettings from 'userSettings';
|
||||||
import autoFocuser from 'autoFocuser';
|
import autoFocuser from 'autoFocuser';
|
||||||
import 'listViewStyle';
|
import 'listViewStyle';
|
||||||
|
|
|
@ -1,6 +1,4 @@
|
||||||
import appHost from 'apphost';
|
import appHost from 'apphost';
|
||||||
import connectionManager from 'connectionManager';
|
|
||||||
import layoutManager from 'layoutManager';
|
|
||||||
import 'listViewStyle';
|
import 'listViewStyle';
|
||||||
import 'emby-button';
|
import 'emby-button';
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,4 @@
|
||||||
import PlaybackSettings from 'playbackSettings';
|
import PlaybackSettings from 'playbackSettings';
|
||||||
import dom from 'dom';
|
|
||||||
import globalize from 'globalize';
|
|
||||||
import loading from 'loading';
|
|
||||||
import * as userSettings from 'userSettings';
|
import * as userSettings from 'userSettings';
|
||||||
import autoFocuser from 'autoFocuser';
|
import autoFocuser from 'autoFocuser';
|
||||||
import 'listViewStyle';
|
import 'listViewStyle';
|
||||||
|
|
|
@ -5,7 +5,6 @@
|
||||||
<div class="verticalSection">
|
<div class="verticalSection">
|
||||||
<div class="sectionTitleContainer flex align-items-center">
|
<div class="sectionTitleContainer flex align-items-center">
|
||||||
<h2 class="sectionTitle">${HeaderProfileInformation}</h2>
|
<h2 class="sectionTitle">${HeaderProfileInformation}</h2>
|
||||||
<a is="emby-linkbutton" rel="noopener noreferrer" class="raised button-alt headerHelpButton" target="_blank" href="https://web.archive.org/web/20181216120305/https://github.com/MediaBrowser/Wiki/wiki/Dlna-profiles">${Help}</a>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div data-role="controlgroup" data-type="horizontal" data-mini="true">
|
<div data-role="controlgroup" data-type="horizontal" data-mini="true">
|
||||||
|
|
|
@ -11,7 +11,6 @@
|
||||||
<a is="emby-linkbutton" href="dlnaprofile.html" class="fab submit" style="margin:0 0 0 1em">
|
<a is="emby-linkbutton" href="dlnaprofile.html" class="fab submit" style="margin:0 0 0 1em">
|
||||||
<span class="material-icons add"></span>
|
<span class="material-icons add"></span>
|
||||||
</a>
|
</a>
|
||||||
<a is="emby-linkbutton" style="margin-left:2em!important;" rel="noopener noreferrer" class="raised button-alt headerHelpButton" target="_blank" href="https://web.archive.org/web/20181216120305/https://github.com/MediaBrowser/Wiki/wiki/Dlna-profiles">${Help}</a>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p>${CustomDlnaProfilesHelp}</p>
|
<p>${CustomDlnaProfilesHelp}</p>
|
||||||
|
|
|
@ -7,51 +7,51 @@ import 'emby-button';
|
||||||
const EmbyButtonPrototype = Object.create(HTMLDivElement.prototype);
|
const EmbyButtonPrototype = Object.create(HTMLDivElement.prototype);
|
||||||
|
|
||||||
function slideDownToShow(button, elem) {
|
function slideDownToShow(button, elem) {
|
||||||
|
requestAnimationFrame(() => {
|
||||||
elem.classList.remove('hide');
|
elem.classList.remove('hide');
|
||||||
elem.classList.add('expanded');
|
elem.classList.add('expanded');
|
||||||
elem.style.height = 'auto';
|
|
||||||
const height = elem.offsetHeight + 'px';
|
|
||||||
elem.style.height = '0';
|
|
||||||
|
|
||||||
// trigger reflow
|
|
||||||
const newHeight = elem.offsetHeight;
|
|
||||||
elem.style.height = height;
|
|
||||||
|
|
||||||
setTimeout(function () {
|
|
||||||
if (elem.classList.contains('expanded')) {
|
|
||||||
elem.classList.remove('hide');
|
|
||||||
} else {
|
|
||||||
elem.classList.add('hide');
|
|
||||||
}
|
|
||||||
elem.style.height = 'auto';
|
elem.style.height = 'auto';
|
||||||
}, 300);
|
const height = elem.offsetHeight + 'px';
|
||||||
|
elem.style.height = '0';
|
||||||
|
// trigger reflow
|
||||||
|
// TODO: Find a better way to do this
|
||||||
|
const newHeight = elem.offsetHeight; /* eslint-disable-line no-unused-vars */
|
||||||
|
elem.style.height = height;
|
||||||
|
|
||||||
const icon = button.querySelector('.material-icons');
|
setTimeout(function () {
|
||||||
//icon.innerHTML = 'expand_less';
|
if (elem.classList.contains('expanded')) {
|
||||||
icon.classList.add('emby-collapse-expandIconExpanded');
|
elem.classList.remove('hide');
|
||||||
|
} else {
|
||||||
|
elem.classList.add('hide');
|
||||||
|
}
|
||||||
|
elem.style.height = 'auto';
|
||||||
|
}, 300);
|
||||||
|
|
||||||
|
const icon = button.querySelector('.material-icons');
|
||||||
|
icon.classList.add('emby-collapse-expandIconExpanded');
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function slideUpToHide(button, elem) {
|
function slideUpToHide(button, elem) {
|
||||||
|
requestAnimationFrame(() => {
|
||||||
|
elem.style.height = elem.offsetHeight + 'px';
|
||||||
|
// trigger reflow
|
||||||
|
// TODO: Find a better way to do this
|
||||||
|
const newHeight = elem.offsetHeight; /* eslint-disable-line no-unused-vars */
|
||||||
|
elem.classList.remove('expanded');
|
||||||
|
elem.style.height = '0';
|
||||||
|
|
||||||
elem.style.height = elem.offsetHeight + 'px';
|
setTimeout(function () {
|
||||||
// trigger reflow
|
if (elem.classList.contains('expanded')) {
|
||||||
const newHeight = elem.offsetHeight;
|
elem.classList.remove('hide');
|
||||||
|
} else {
|
||||||
|
elem.classList.add('hide');
|
||||||
|
}
|
||||||
|
}, 300);
|
||||||
|
|
||||||
elem.classList.remove('expanded');
|
const icon = button.querySelector('.material-icons');
|
||||||
elem.style.height = '0';
|
icon.classList.remove('emby-collapse-expandIconExpanded');
|
||||||
|
});
|
||||||
setTimeout(function () {
|
|
||||||
if (elem.classList.contains('expanded')) {
|
|
||||||
elem.classList.remove('hide');
|
|
||||||
} else {
|
|
||||||
elem.classList.add('hide');
|
|
||||||
}
|
|
||||||
}, 300);
|
|
||||||
|
|
||||||
const icon = button.querySelector('.material-icons');
|
|
||||||
//icon.innerHTML = 'expand_more';
|
|
||||||
icon.classList.remove('emby-collapse-expandIconExpanded');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function onButtonClick(e) {
|
function onButtonClick(e) {
|
||||||
|
|
|
@ -40,7 +40,7 @@ import 'webcomponents';
|
||||||
this.classList.add('hide');
|
this.classList.add('hide');
|
||||||
}
|
}
|
||||||
|
|
||||||
this.setProgress(progress);
|
this.setAttribute('data-progress', progress);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,6 @@ import 'webcomponents';
|
||||||
|
|
||||||
function onClick(e) {
|
function onClick(e) {
|
||||||
const itemsContainer = this;
|
const itemsContainer = this;
|
||||||
const target = e.target;
|
|
||||||
let multiSelect = itemsContainer.multiSelect;
|
let multiSelect = itemsContainer.multiSelect;
|
||||||
|
|
||||||
if (multiSelect) {
|
if (multiSelect) {
|
||||||
|
|
|
@ -13,23 +13,22 @@ import 'webcomponents';
|
||||||
import('text!./emby-progressring.template.html').then(({default: template}) => {
|
import('text!./emby-progressring.template.html').then(({default: template}) => {
|
||||||
instance.innerHTML = template;
|
instance.innerHTML = template;
|
||||||
|
|
||||||
//if (window.MutationObserver) {
|
if (window.MutationObserver) {
|
||||||
// // create an observer instance
|
// create an observer instance
|
||||||
// var observer = new MutationObserver(function (mutations) {
|
var observer = new MutationObserver(function (mutations) {
|
||||||
// mutations.forEach(function (mutation) {
|
mutations.forEach(function (mutation) {
|
||||||
|
instance.setProgress(parseFloat(instance.getAttribute('data-progress') || '0'));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
// instance.setProgress(parseFloat(instance.getAttribute('data-progress') || '0'));
|
// configuration of the observer:
|
||||||
// });
|
var config = { attributes: true, childList: false, characterData: false };
|
||||||
// });
|
|
||||||
|
|
||||||
// // configuration of the observer:
|
// pass in the target node, as well as the observer options
|
||||||
// var config = { attributes: true, childList: false, characterData: false };
|
observer.observe(instance, config);
|
||||||
|
|
||||||
// // pass in the target node, as well as the observer options
|
instance.observer = observer;
|
||||||
// observer.observe(instance, config);
|
}
|
||||||
|
|
||||||
// instance.observer = observer;
|
|
||||||
//}
|
|
||||||
|
|
||||||
instance.setProgress(parseFloat(instance.getAttribute('data-progress') || '0'));
|
instance.setProgress(parseFloat(instance.getAttribute('data-progress') || '0'));
|
||||||
});
|
});
|
||||||
|
|
|
@ -37,7 +37,6 @@ import 'webcomponents';
|
||||||
this.classList.add('mdl-radio__button');
|
this.classList.add('mdl-radio__button');
|
||||||
|
|
||||||
let labelElement = this.parentNode;
|
let labelElement = this.parentNode;
|
||||||
//labelElement.classList.add('"mdl-radio mdl-js-radio mdl-js-ripple-effect');
|
|
||||||
labelElement.classList.add('mdl-radio');
|
labelElement.classList.add('mdl-radio');
|
||||||
labelElement.classList.add('mdl-js-radio');
|
labelElement.classList.add('mdl-js-radio');
|
||||||
labelElement.classList.add('mdl-js-ripple-effect');
|
labelElement.classList.add('mdl-js-ripple-effect');
|
||||||
|
|
|
@ -78,7 +78,6 @@ import EmbyButtonPrototype from 'emby-button';
|
||||||
if (icon) {
|
if (icon) {
|
||||||
icon.classList.add('favorite');
|
icon.classList.add('favorite');
|
||||||
icon.classList.remove('ratingbutton-icon-withrating');
|
icon.classList.remove('ratingbutton-icon-withrating');
|
||||||
//icon.innerHTML = 'thumb_up';
|
|
||||||
}
|
}
|
||||||
button.classList.remove('ratingbutton-withrating');
|
button.classList.remove('ratingbutton-withrating');
|
||||||
|
|
||||||
|
@ -87,7 +86,6 @@ import EmbyButtonPrototype from 'emby-button';
|
||||||
if (icon) {
|
if (icon) {
|
||||||
icon.classList.add('favorite');
|
icon.classList.add('favorite');
|
||||||
icon.classList.remove('ratingbutton-icon-withrating');
|
icon.classList.remove('ratingbutton-icon-withrating');
|
||||||
//icon.innerHTML = 'thumb_down';
|
|
||||||
}
|
}
|
||||||
button.classList.remove('ratingbutton-withrating');
|
button.classList.remove('ratingbutton-withrating');
|
||||||
|
|
||||||
|
@ -96,7 +94,6 @@ import EmbyButtonPrototype from 'emby-button';
|
||||||
if (icon) {
|
if (icon) {
|
||||||
icon.classList.add('favorite');
|
icon.classList.add('favorite');
|
||||||
icon.classList.remove('ratingbutton-icon-withrating');
|
icon.classList.remove('ratingbutton-icon-withrating');
|
||||||
//icon.innerHTML = 'thumbs_up_down';
|
|
||||||
}
|
}
|
||||||
button.classList.remove('ratingbutton-withrating');
|
button.classList.remove('ratingbutton-withrating');
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,6 +36,7 @@ const EmbyScrollButtonsPrototype = Object.create(HTMLDivElement.prototype);
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateScrollButtons(scrollButtons, scrollSize, scrollPos, scrollWidth) {
|
function updateScrollButtons(scrollButtons, scrollSize, scrollPos, scrollWidth) {
|
||||||
|
// TODO: Check if hack is really needed
|
||||||
// hack alert add twenty for rounding errors
|
// hack alert add twenty for rounding errors
|
||||||
if (scrollWidth <= scrollSize + 20) {
|
if (scrollWidth <= scrollSize + 20) {
|
||||||
scrollButtons.scrollButtonsLeft.classList.add('hide');
|
scrollButtons.scrollButtonsLeft.classList.add('hide');
|
||||||
|
@ -122,7 +123,6 @@ const EmbyScrollButtonsPrototype = Object.create(HTMLDivElement.prototype);
|
||||||
const direction = this.getAttribute('data-direction');
|
const direction = this.getAttribute('data-direction');
|
||||||
const scrollSize = getScrollSize(scroller);
|
const scrollSize = getScrollSize(scroller);
|
||||||
const scrollPos = getScrollPosition(scroller);
|
const scrollPos = getScrollPosition(scroller);
|
||||||
const scrollWidth = getScrollWidth(scroller);
|
|
||||||
|
|
||||||
let newPos;
|
let newPos;
|
||||||
if (direction === 'left') {
|
if (direction === 'left') {
|
||||||
|
|
|
@ -12,8 +12,6 @@ import 'emby-input';
|
||||||
|
|
||||||
let supportsValueSetOverride = false;
|
let supportsValueSetOverride = false;
|
||||||
|
|
||||||
let enableWidthWithTransform;
|
|
||||||
|
|
||||||
if (Object.getOwnPropertyDescriptor && Object.defineProperty) {
|
if (Object.getOwnPropertyDescriptor && Object.defineProperty) {
|
||||||
|
|
||||||
const descriptor = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value');
|
const descriptor = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value');
|
||||||
|
@ -104,12 +102,8 @@ import 'emby-input';
|
||||||
if (backgroundLower) {
|
if (backgroundLower) {
|
||||||
let fraction = (value - range.min) / (range.max - range.min);
|
let fraction = (value - range.min) / (range.max - range.min);
|
||||||
|
|
||||||
if (enableWidthWithTransform) {
|
fraction *= 100;
|
||||||
backgroundLower.style.transform = 'scaleX(' + (fraction) + ')';
|
backgroundLower.style.width = fraction + '%';
|
||||||
} else {
|
|
||||||
fraction *= 100;
|
|
||||||
backgroundLower.style.width = fraction + '%';
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -146,10 +140,6 @@ import 'emby-input';
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (enableWidthWithTransform == null) {
|
|
||||||
//enableWidthWithTransform = browser.supportsCssAnimation();
|
|
||||||
}
|
|
||||||
|
|
||||||
this.setAttribute('data-embyslider', 'true');
|
this.setAttribute('data-embyslider', 'true');
|
||||||
|
|
||||||
this.classList.add('mdl-slider');
|
this.classList.add('mdl-slider');
|
||||||
|
@ -177,11 +167,7 @@ import 'emby-input';
|
||||||
// the more of these, the more ranges we can display
|
// the more of these, the more ranges we can display
|
||||||
htmlToInsert += '<div class="mdl-slider-background-upper"></div>';
|
htmlToInsert += '<div class="mdl-slider-background-upper"></div>';
|
||||||
|
|
||||||
if (enableWidthWithTransform) {
|
htmlToInsert += '<div class="mdl-slider-background-lower"></div>';
|
||||||
htmlToInsert += '<div class="mdl-slider-background-lower mdl-slider-background-lower-withtransform"></div>';
|
|
||||||
} else {
|
|
||||||
htmlToInsert += '<div class="mdl-slider-background-lower"></div>';
|
|
||||||
}
|
|
||||||
|
|
||||||
htmlToInsert += '</div>';
|
htmlToInsert += '</div>';
|
||||||
htmlToInsert += '</div>';
|
htmlToInsert += '</div>';
|
||||||
|
|
|
@ -29,13 +29,6 @@ import 'scrollStyles';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function addActivePanelClass(tabs, index) {
|
|
||||||
let tabPanel = getTabPanel(tabs, index);
|
|
||||||
if (tabPanel) {
|
|
||||||
tabPanel.classList.add('is-active');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function fadeInRight(elem) {
|
function fadeInRight(elem) {
|
||||||
|
|
||||||
const pct = browser.mobile ? '4%' : '0.5%';
|
const pct = browser.mobile ? '4%' : '0.5%';
|
||||||
|
@ -263,7 +256,6 @@ import 'scrollStyles';
|
||||||
onClick.call(tabs, {
|
onClick.call(tabs, {
|
||||||
target: tabButtons[selected]
|
target: tabButtons[selected]
|
||||||
});
|
});
|
||||||
//tabButtons[selected].click();
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -330,8 +322,6 @@ import 'scrollStyles';
|
||||||
};
|
};
|
||||||
|
|
||||||
EmbyTabs.setTabEnabled = function (index, enabled) {
|
EmbyTabs.setTabEnabled = function (index, enabled) {
|
||||||
|
|
||||||
const tabs = this;
|
|
||||||
const btn = this.querySelector('.emby-tab-button[data-index="' + index + '"]');
|
const btn = this.querySelector('.emby-tab-button[data-index="' + index + '"]');
|
||||||
|
|
||||||
if (enabled) {
|
if (enabled) {
|
||||||
|
|
|
@ -47,7 +47,6 @@ import 'emby-input';
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let newHeight = 0;
|
let newHeight = 0;
|
||||||
let hasGrown = false;
|
|
||||||
|
|
||||||
if ((textarea.scrollHeight - offset) > self.maxAllowedHeight) {
|
if ((textarea.scrollHeight - offset) > self.maxAllowedHeight) {
|
||||||
textarea.style.overflowY = 'scroll';
|
textarea.style.overflowY = 'scroll';
|
||||||
|
@ -56,7 +55,6 @@ import 'emby-input';
|
||||||
textarea.style.overflowY = 'hidden';
|
textarea.style.overflowY = 'hidden';
|
||||||
textarea.style.height = 'auto';
|
textarea.style.height = 'auto';
|
||||||
newHeight = textarea.scrollHeight/* - offset*/;
|
newHeight = textarea.scrollHeight/* - offset*/;
|
||||||
hasGrown = true;
|
|
||||||
}
|
}
|
||||||
$('.customCssContainer').css('height', newHeight + 'px');
|
$('.customCssContainer').css('height', newHeight + 'px');
|
||||||
textarea.style.height = newHeight + 'px';
|
textarea.style.height = newHeight + 'px';
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
// TODO: Move to external library (https://github.com/calvellido/focus-options-polyfill)
|
||||||
// Polyfill to add support for preventScroll by focus function
|
// Polyfill to add support for preventScroll by focus function
|
||||||
|
|
||||||
if (HTMLElement.prototype.nativeFocus === undefined) {
|
if (HTMLElement.prototype.nativeFocus === undefined) {
|
||||||
|
|
|
@ -872,13 +872,6 @@ define(['browser', 'layoutManager', 'dom', 'focusManager', 'ResizeObserver', 'sc
|
||||||
if (item === undefined) {
|
if (item === undefined) {
|
||||||
this.slideTo(this._pos[location], immediate);
|
this.slideTo(this._pos[location], immediate);
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
//if (!transform) {
|
|
||||||
|
|
||||||
// item.scrollIntoView();
|
|
||||||
// return;
|
|
||||||
//}
|
|
||||||
|
|
||||||
var itemPos = this.getPos(item);
|
var itemPos = this.getPos(item);
|
||||||
|
|
||||||
if (itemPos) {
|
if (itemPos) {
|
||||||
|
|
|
@ -1,14 +1,7 @@
|
||||||
define(['connectionManager', 'globalize', 'userSettings', 'apphost'], function (connectionManager, globalize, userSettings, appHost) {
|
define(['connectionManager', 'globalize', 'userSettings', 'apphost'], function (connectionManager, globalize, userSettings, appHost) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
function getRequirePromise(deps) {
|
// TODO: Replace with date-fns
|
||||||
|
|
||||||
return new Promise(function (resolve, reject) {
|
|
||||||
|
|
||||||
require(deps, resolve);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// https://stackoverflow.com/questions/6117814/get-week-of-year-in-javascript-like-in-php
|
// https://stackoverflow.com/questions/6117814/get-week-of-year-in-javascript-like-in-php
|
||||||
function getWeek(date) {
|
function getWeek(date) {
|
||||||
var d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));
|
var d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));
|
||||||
|
@ -26,6 +19,7 @@ define(['connectionManager', 'globalize', 'userSettings', 'apphost'], function (
|
||||||
|
|
||||||
var now = new Date();
|
var now = new Date();
|
||||||
|
|
||||||
|
// TODO: Use date-fns
|
||||||
userSettingsKey += now.getFullYear() + '-w' + getWeek(now);
|
userSettingsKey += now.getFullYear() + '-w' + getWeek(now);
|
||||||
|
|
||||||
if (userSettings.get(userSettingsKey, false) === '1') {
|
if (userSettings.get(userSettingsKey, false) === '1') {
|
||||||
|
|
|
@ -140,8 +140,6 @@ define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelp
|
||||||
xhrSetup: function(xhr, url) {
|
xhrSetup: function(xhr, url) {
|
||||||
xhr.withCredentials = true;
|
xhr.withCredentials = true;
|
||||||
}
|
}
|
||||||
//appendErrorMaxRetry: 6,
|
|
||||||
//debug: true
|
|
||||||
});
|
});
|
||||||
hls.loadSource(val);
|
hls.loadSource(val);
|
||||||
hls.attachMedia(elem);
|
hls.attachMedia(elem);
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
|
|
||||||
define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackManager', 'appRouter', 'appSettings', 'connectionManager', 'htmlMediaHelper', 'itemHelper', 'screenfull', 'globalize'], function (browser, require, events, appHost, loading, dom, playbackManager, appRouter, appSettings, connectionManager, htmlMediaHelper, itemHelper, screenfull, globalize) {
|
define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackManager', 'appRouter', 'appSettings', 'connectionManager', 'htmlMediaHelper', 'itemHelper', 'screenfull', 'globalize'], function (browser, require, events, appHost, loading, dom, playbackManager, appRouter, appSettings, connectionManager, htmlMediaHelper, itemHelper, screenfull, globalize) {
|
||||||
'use strict';
|
'use strict';
|
||||||
/* globals cast */
|
|
||||||
|
|
||||||
var mediaManager;
|
|
||||||
|
|
||||||
function tryRemoveElement(elem) {
|
function tryRemoveElement(elem) {
|
||||||
var parentNode = elem.parentNode;
|
var parentNode = elem.parentNode;
|
||||||
|
@ -17,25 +15,6 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var _supportsTextTracks;
|
|
||||||
function supportsTextTracks() {
|
|
||||||
|
|
||||||
if (_supportsTextTracks == null) {
|
|
||||||
_supportsTextTracks = document.createElement('video').textTracks != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// For now, until ready
|
|
||||||
return _supportsTextTracks;
|
|
||||||
}
|
|
||||||
|
|
||||||
function supportsCanvas() {
|
|
||||||
return !!document.createElement('canvas').getContext;
|
|
||||||
}
|
|
||||||
|
|
||||||
function supportsWebWorkers() {
|
|
||||||
return !!window.Worker;
|
|
||||||
}
|
|
||||||
|
|
||||||
function enableNativeTrackSupport(currentSrc, track) {
|
function enableNativeTrackSupport(currentSrc, track) {
|
||||||
|
|
||||||
if (track) {
|
if (track) {
|
||||||
|
@ -50,13 +29,6 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// subs getting blocked due to CORS
|
|
||||||
if (browser.chromecast) {
|
|
||||||
if ((currentSrc || '').toLowerCase().indexOf('.m3u8') !== -1) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (browser.ps4) {
|
if (browser.ps4) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -129,11 +101,6 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
|
||||||
return useHtml ? result.replace(/\n/gi, '<br>') : result;
|
return useHtml ? result.replace(/\n/gi, '<br>') : result;
|
||||||
}
|
}
|
||||||
|
|
||||||
function setTracks(elem, tracks, item, mediaSource) {
|
|
||||||
|
|
||||||
elem.innerHTML = getTracksHtml(tracks, item, mediaSource);
|
|
||||||
}
|
|
||||||
|
|
||||||
function getTextTrackUrl(track, item, format) {
|
function getTextTrackUrl(track, item, format) {
|
||||||
|
|
||||||
if (itemHelper.isLocalItem(item) && track.Path) {
|
if (itemHelper.isLocalItem(item) && track.Path) {
|
||||||
|
@ -148,22 +115,6 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
|
||||||
return url;
|
return url;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getTracksHtml(tracks, item, mediaSource) {
|
|
||||||
return tracks.map(function (t) {
|
|
||||||
|
|
||||||
if (t.DeliveryMethod !== 'External') {
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
|
|
||||||
var defaultAttribute = mediaSource.DefaultSubtitleStreamIndex === t.Index ? ' default' : '';
|
|
||||||
|
|
||||||
var language = t.Language || 'und';
|
|
||||||
var label = t.Language || 'und';
|
|
||||||
return '<track id="textTrack' + t.Index + '" label="' + label + '" kind="subtitles" src="' + getTextTrackUrl(t, item) + '" srclang="' + language + '"' + defaultAttribute + '></track>';
|
|
||||||
|
|
||||||
}).join('');
|
|
||||||
}
|
|
||||||
|
|
||||||
function getDefaultProfile() {
|
function getDefaultProfile() {
|
||||||
|
|
||||||
return new Promise(function (resolve, reject) {
|
return new Promise(function (resolve, reject) {
|
||||||
|
@ -191,12 +142,9 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
|
||||||
|
|
||||||
var videoDialog;
|
var videoDialog;
|
||||||
|
|
||||||
var winJsPlaybackItem;
|
|
||||||
|
|
||||||
var subtitleTrackIndexToSetOnPlaying;
|
var subtitleTrackIndexToSetOnPlaying;
|
||||||
var audioTrackIndexToSetOnPlaying;
|
var audioTrackIndexToSetOnPlaying;
|
||||||
|
|
||||||
var lastCustomTrackMs = 0;
|
|
||||||
var currentClock;
|
var currentClock;
|
||||||
var currentSubtitlesOctopus;
|
var currentSubtitlesOctopus;
|
||||||
var currentAssRenderer;
|
var currentAssRenderer;
|
||||||
|
@ -334,8 +282,6 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
|
||||||
xhrSetup: function(xhr, xhr_url) {
|
xhrSetup: function(xhr, xhr_url) {
|
||||||
xhr.withCredentials = true;
|
xhr.withCredentials = true;
|
||||||
}
|
}
|
||||||
//appendErrorMaxRetry: 6,
|
|
||||||
//debug: true
|
|
||||||
});
|
});
|
||||||
hls.loadSource(url);
|
hls.loadSource(url);
|
||||||
hls.attachMedia(elem);
|
hls.attachMedia(elem);
|
||||||
|
@ -350,155 +296,6 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function onShakaError(event) {
|
|
||||||
|
|
||||||
var error = event.detail;
|
|
||||||
console.error('Error code', error.code, 'object', error);
|
|
||||||
}
|
|
||||||
|
|
||||||
function setSrcWithShakaPlayer(instance, elem, options, url) {
|
|
||||||
|
|
||||||
return new Promise(function (resolve, reject) {
|
|
||||||
|
|
||||||
require(['shaka'], function () {
|
|
||||||
/* globals shaka */
|
|
||||||
|
|
||||||
var player = new shaka.Player(elem);
|
|
||||||
|
|
||||||
//player.configure({
|
|
||||||
// abr: {
|
|
||||||
// enabled: false
|
|
||||||
// },
|
|
||||||
// streaming: {
|
|
||||||
|
|
||||||
// failureCallback: function () {
|
|
||||||
// alert(2);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//});
|
|
||||||
|
|
||||||
//shaka.log.setLevel(6);
|
|
||||||
|
|
||||||
// Listen for error events.
|
|
||||||
player.addEventListener('error', onShakaError);
|
|
||||||
|
|
||||||
// Try to load a manifest.
|
|
||||||
// This is an asynchronous process.
|
|
||||||
player.load(url).then(function () {
|
|
||||||
|
|
||||||
// This runs if the asynchronous load is successful.
|
|
||||||
resolve();
|
|
||||||
|
|
||||||
}, reject);
|
|
||||||
|
|
||||||
self._shakaPlayer = player;
|
|
||||||
|
|
||||||
// This is needed in setCurrentTrackElement
|
|
||||||
self._currentSrc = url;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function setCurrentSrcChromecast(instance, elem, options, url) {
|
|
||||||
|
|
||||||
elem.autoplay = true;
|
|
||||||
|
|
||||||
var lrd = new cast.receiver.MediaManager.LoadRequestData();
|
|
||||||
lrd.currentTime = (options.playerStartPositionTicks || 0) / 10000000;
|
|
||||||
lrd.autoplay = true;
|
|
||||||
lrd.media = new cast.receiver.media.MediaInformation();
|
|
||||||
|
|
||||||
lrd.media.contentId = url;
|
|
||||||
lrd.media.contentType = options.mimeType;
|
|
||||||
lrd.media.streamType = cast.receiver.media.StreamType.OTHER;
|
|
||||||
lrd.media.customData = options;
|
|
||||||
|
|
||||||
console.debug('loading media url into media manager');
|
|
||||||
|
|
||||||
try {
|
|
||||||
mediaManager.load(lrd);
|
|
||||||
// This is needed in setCurrentTrackElement
|
|
||||||
self._currentSrc = url;
|
|
||||||
|
|
||||||
return Promise.resolve();
|
|
||||||
} catch (err) {
|
|
||||||
|
|
||||||
console.debug('media manager error: ' + err);
|
|
||||||
return Promise.reject();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Adapted from : https://github.com/googlecast/CastReferencePlayer/blob/master/player.js
|
|
||||||
function onMediaManagerLoadMedia(event) {
|
|
||||||
|
|
||||||
if (self._castPlayer) {
|
|
||||||
self._castPlayer.unload(); // Must unload before starting again.
|
|
||||||
}
|
|
||||||
self._castPlayer = null;
|
|
||||||
|
|
||||||
var data = event.data;
|
|
||||||
|
|
||||||
var media = event.data.media || {};
|
|
||||||
var url = media.contentId;
|
|
||||||
var contentType = media.contentType.toLowerCase();
|
|
||||||
var options = media.customData;
|
|
||||||
|
|
||||||
var protocol;
|
|
||||||
var ext = 'm3u8';
|
|
||||||
|
|
||||||
var mediaElement = self._mediaElement;
|
|
||||||
|
|
||||||
var host = new cast.player.api.Host({
|
|
||||||
'url': url,
|
|
||||||
'mediaElement': mediaElement
|
|
||||||
});
|
|
||||||
|
|
||||||
if (ext === 'm3u8' ||
|
|
||||||
contentType === 'application/x-mpegurl' ||
|
|
||||||
contentType === 'application/vnd.apple.mpegurl') {
|
|
||||||
protocol = cast.player.api.CreateHlsStreamingProtocol(host);
|
|
||||||
} else if (ext === 'mpd' ||
|
|
||||||
contentType === 'application/dash+xml') {
|
|
||||||
protocol = cast.player.api.CreateDashStreamingProtocol(host);
|
|
||||||
} else if (url.indexOf('.ism') > -1 ||
|
|
||||||
contentType === 'application/vnd.ms-sstr+xml') {
|
|
||||||
protocol = cast.player.api.CreateSmoothStreamingProtocol(host);
|
|
||||||
}
|
|
||||||
|
|
||||||
console.debug('loading playback url: ' + url);
|
|
||||||
console.debug('content type: ' + contentType);
|
|
||||||
|
|
||||||
host.onError = function (errorCode) {
|
|
||||||
console.error('fatal Error - ' + errorCode);
|
|
||||||
};
|
|
||||||
|
|
||||||
mediaElement.autoplay = false;
|
|
||||||
|
|
||||||
self._castPlayer = new cast.player.api.Player(host);
|
|
||||||
|
|
||||||
self._castPlayer.load(protocol, data.currentTime || 0);
|
|
||||||
|
|
||||||
self._castPlayer.playWhenHaveEnoughData();
|
|
||||||
}
|
|
||||||
|
|
||||||
function initMediaManager() {
|
|
||||||
|
|
||||||
mediaManager.defaultOnLoad = mediaManager.onLoad.bind(mediaManager);
|
|
||||||
mediaManager.onLoad = onMediaManagerLoadMedia.bind(self);
|
|
||||||
|
|
||||||
//mediaManager.defaultOnPlay = mediaManager.onPlay.bind(mediaManager);
|
|
||||||
//mediaManager.onPlay = function (event) {
|
|
||||||
// // TODO ???
|
|
||||||
// mediaManager.defaultOnPlay(event);
|
|
||||||
//};
|
|
||||||
|
|
||||||
mediaManager.defaultOnStop = mediaManager.onStop.bind(mediaManager);
|
|
||||||
mediaManager.onStop = function (event) {
|
|
||||||
playbackManager.stop();
|
|
||||||
mediaManager.defaultOnStop(event);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function setCurrentSrc(elem, options) {
|
function setCurrentSrc(elem, options) {
|
||||||
|
|
||||||
elem.removeEventListener('error', onError);
|
elem.removeEventListener('error', onError);
|
||||||
|
@ -516,8 +313,6 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
|
||||||
htmlMediaHelper.destroyFlvPlayer(self);
|
htmlMediaHelper.destroyFlvPlayer(self);
|
||||||
htmlMediaHelper.destroyCastPlayer(self);
|
htmlMediaHelper.destroyCastPlayer(self);
|
||||||
|
|
||||||
var tracks = getMediaStreamTextTracks(options.mediaSource);
|
|
||||||
|
|
||||||
subtitleTrackIndexToSetOnPlaying = options.mediaSource.DefaultSubtitleStreamIndex == null ? -1 : options.mediaSource.DefaultSubtitleStreamIndex;
|
subtitleTrackIndexToSetOnPlaying = options.mediaSource.DefaultSubtitleStreamIndex == null ? -1 : options.mediaSource.DefaultSubtitleStreamIndex;
|
||||||
if (subtitleTrackIndexToSetOnPlaying != null && subtitleTrackIndexToSetOnPlaying >= 0) {
|
if (subtitleTrackIndexToSetOnPlaying != null && subtitleTrackIndexToSetOnPlaying >= 0) {
|
||||||
var initialSubtitleStream = options.mediaSource.MediaStreams[subtitleTrackIndexToSetOnPlaying];
|
var initialSubtitleStream = options.mediaSource.MediaStreams[subtitleTrackIndexToSetOnPlaying];
|
||||||
|
@ -535,16 +330,7 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
|
||||||
elem.crossOrigin = crossOrigin;
|
elem.crossOrigin = crossOrigin;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*if (htmlMediaHelper.enableHlsShakaPlayer(options.item, options.mediaSource, 'Video') && val.indexOf('.m3u8') !== -1) {
|
if (htmlMediaHelper.enableHlsJsPlayer(options.mediaSource.RunTimeTicks, 'Video') && val.indexOf('.m3u8') !== -1) {
|
||||||
|
|
||||||
setTracks(elem, tracks, options.item, options.mediaSource);
|
|
||||||
|
|
||||||
return setSrcWithShakaPlayer(self, elem, options, val);
|
|
||||||
|
|
||||||
} else*/ if (browser.chromecast && val.indexOf('.m3u8') !== -1 && options.mediaSource.RunTimeTicks) {
|
|
||||||
|
|
||||||
return setCurrentSrcChromecast(self, elem, options, val);
|
|
||||||
} else if (htmlMediaHelper.enableHlsJsPlayer(options.mediaSource.RunTimeTicks, 'Video') && val.indexOf('.m3u8') !== -1) {
|
|
||||||
return setSrcWithHlsJs(self, elem, options, val);
|
return setSrcWithHlsJs(self, elem, options, val);
|
||||||
} else if (options.playMethod !== 'Transcode' && options.mediaSource.Container === 'flv') {
|
} else if (options.playMethod !== 'Transcode' && options.mediaSource.Container === 'flv') {
|
||||||
|
|
||||||
|
@ -1062,7 +848,6 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
|
||||||
destroyCustomTrack(videoElement);
|
destroyCustomTrack(videoElement);
|
||||||
customTrackIndex = track.Index;
|
customTrackIndex = track.Index;
|
||||||
renderTracksEvents(videoElement, track, item);
|
renderTracksEvents(videoElement, track, item);
|
||||||
lastCustomTrackMs = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderSsaAss(videoElement, track, item) {
|
function renderSsaAss(videoElement, track, item) {
|
||||||
|
@ -1320,10 +1105,6 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
|
||||||
var html = '';
|
var html = '';
|
||||||
var cssClass = 'htmlvideoplayer';
|
var cssClass = 'htmlvideoplayer';
|
||||||
|
|
||||||
if (!browser.chromecast) {
|
|
||||||
cssClass += ' htmlvideoplayer-moveupsubtitles';
|
|
||||||
}
|
|
||||||
|
|
||||||
// Can't autoplay in these browsers so we need to use the full controls, at least until playback starts
|
// Can't autoplay in these browsers so we need to use the full controls, at least until playback starts
|
||||||
if (!appHost.supports('htmlvideoautoplay')) {
|
if (!appHost.supports('htmlvideoautoplay')) {
|
||||||
html += '<video class="' + cssClass + '" preload="metadata" autoplay="autoplay" controls="controls" webkit-playsinline playsinline>';
|
html += '<video class="' + cssClass + '" preload="metadata" autoplay="autoplay" controls="controls" webkit-playsinline playsinline>';
|
||||||
|
@ -1355,14 +1136,6 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
|
||||||
videoDialog = dlg;
|
videoDialog = dlg;
|
||||||
self._mediaElement = videoElement;
|
self._mediaElement = videoElement;
|
||||||
|
|
||||||
if (mediaManager) {
|
|
||||||
if (!mediaManager.embyInit) {
|
|
||||||
initMediaManager();
|
|
||||||
mediaManager.embyInit = true;
|
|
||||||
}
|
|
||||||
mediaManager.setMediaElement(videoElement);
|
|
||||||
}
|
|
||||||
|
|
||||||
// don't animate on smart tv's, too slow
|
// don't animate on smart tv's, too slow
|
||||||
if (options.fullscreen && browser.supportsCssAnimation() && !browser.slow) {
|
if (options.fullscreen && browser.supportsCssAnimation() && !browser.slow) {
|
||||||
zoomIn(dlg).then(function () {
|
zoomIn(dlg).then(function () {
|
||||||
|
@ -1785,7 +1558,7 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
|
||||||
link = null;
|
link = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this._hlsPlayer || this._shakaPlayer) {
|
if (this._hlsPlayer) {
|
||||||
mediaCategory.stats.push({
|
mediaCategory.stats.push({
|
||||||
label: globalize.translate('LabelStreamType'),
|
label: globalize.translate('LabelStreamType'),
|
||||||
value: 'HLS'
|
value: 'HLS'
|
||||||
|
@ -1860,9 +1633,5 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
if (browser.chromecast) {
|
|
||||||
mediaManager = new cast.receiver.MediaManager(document.createElement('video'));
|
|
||||||
}
|
|
||||||
|
|
||||||
return HtmlVideoPlayer;
|
return HtmlVideoPlayer;
|
||||||
});
|
});
|
||||||
|
|
|
@ -59,23 +59,6 @@ define(['pluginManager'], function (pluginManager) {
|
||||||
return elem.animate(keyframes, timing);
|
return elem.animate(keyframes, timing);
|
||||||
}
|
}
|
||||||
|
|
||||||
function shake(elem, iterations) {
|
|
||||||
var keyframes = [
|
|
||||||
{ transform: 'translate3d(0, 0, 0)', offset: 0 },
|
|
||||||
{ transform: 'translate3d(-10px, 0, 0)', offset: 0.1 },
|
|
||||||
{ transform: 'translate3d(10px, 0, 0)', offset: 0.2 },
|
|
||||||
{ transform: 'translate3d(-10px, 0, 0)', offset: 0.3 },
|
|
||||||
{ transform: 'translate3d(10px, 0, 0)', offset: 0.4 },
|
|
||||||
{ transform: 'translate3d(-10px, 0, 0)', offset: 0.5 },
|
|
||||||
{ transform: 'translate3d(10px, 0, 0)', offset: 0.6 },
|
|
||||||
{ transform: 'translate3d(-10px, 0, 0)', offset: 0.7 },
|
|
||||||
{ transform: 'translate3d(10px, 0, 0)', offset: 0.8 },
|
|
||||||
{ transform: 'translate3d(-10px, 0, 0)', offset: 0.9 },
|
|
||||||
{ transform: 'translate3d(0, 0, 0)', offset: 1 }];
|
|
||||||
var timing = { duration: 900, iterations: iterations };
|
|
||||||
return elem.animate(keyframes, timing);
|
|
||||||
}
|
|
||||||
|
|
||||||
function swing(elem, iterations) {
|
function swing(elem, iterations) {
|
||||||
var keyframes = [
|
var keyframes = [
|
||||||
{ transform: 'translate(0%)', offset: 0 },
|
{ transform: 'translate(0%)', offset: 0 },
|
||||||
|
@ -118,7 +101,6 @@ define(['pluginManager'], function (pluginManager) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function rotateIn(elem, iterations) {
|
function rotateIn(elem, iterations) {
|
||||||
var transformOrigin = elem.style['transform-origin'];
|
|
||||||
var keyframes = [{ transform: 'rotate3d(0, 0, 1, -200deg)', opacity: '0', transformOrigin: 'center', offset: 0 },
|
var keyframes = [{ transform: 'rotate3d(0, 0, 1, -200deg)', opacity: '0', transformOrigin: 'center', offset: 0 },
|
||||||
{ transform: 'none', opacity: '1', transformOrigin: 'center', offset: 1 }];
|
{ transform: 'none', opacity: '1', transformOrigin: 'center', offset: 1 }];
|
||||||
var timing = { duration: 900, iterations: iterations };
|
var timing = { duration: 900, iterations: iterations };
|
||||||
|
@ -126,7 +108,6 @@ define(['pluginManager'], function (pluginManager) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function rotateOut(elem, iterations) {
|
function rotateOut(elem, iterations) {
|
||||||
var transformOrigin = elem.style['transform-origin'];
|
|
||||||
var keyframes = [{ transform: 'none', opacity: '1', transformOrigin: 'center', offset: 0 },
|
var keyframes = [{ transform: 'none', opacity: '1', transformOrigin: 'center', offset: 0 },
|
||||||
{ transform: 'rotate3d(0, 0, 1, 200deg)', opacity: '0', transformOrigin: 'center', offset: 1 }];
|
{ transform: 'rotate3d(0, 0, 1, 200deg)', opacity: '0', transformOrigin: 'center', offset: 1 }];
|
||||||
var timing = { duration: 900, iterations: iterations };
|
var timing = { duration: 900, iterations: iterations };
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
import require from 'require';
|
|
||||||
import events from 'events';
|
import events from 'events';
|
||||||
import browser from 'browser';
|
import browser from 'browser';
|
||||||
import appRouter from 'appRouter';
|
import appRouter from 'appRouter';
|
||||||
|
|
|
@ -101,10 +101,7 @@ define([], function () {
|
||||||
}
|
}
|
||||||
|
|
||||||
var animation = false;
|
var animation = false;
|
||||||
var animationstring = 'animation';
|
|
||||||
var keyframeprefix = '';
|
|
||||||
var domPrefixes = ['Webkit', 'O', 'Moz'];
|
var domPrefixes = ['Webkit', 'O', 'Moz'];
|
||||||
var pfx = '';
|
|
||||||
var elm = document.createElement('div');
|
var elm = document.createElement('div');
|
||||||
|
|
||||||
if (elm.style.animationName !== undefined) {
|
if (elm.style.animationName !== undefined) {
|
||||||
|
@ -114,9 +111,6 @@ define([], function () {
|
||||||
if (animation === false && allowPrefix) {
|
if (animation === false && allowPrefix) {
|
||||||
for (var i = 0; i < domPrefixes.length; i++) {
|
for (var i = 0; i < domPrefixes.length; i++) {
|
||||||
if (elm.style[domPrefixes[i] + 'AnimationName'] !== undefined) {
|
if (elm.style[domPrefixes[i] + 'AnimationName'] !== undefined) {
|
||||||
pfx = domPrefixes[i];
|
|
||||||
animationstring = pfx + 'Animation';
|
|
||||||
keyframeprefix = '-' + pfx.toLowerCase() + '-';
|
|
||||||
animation = true;
|
animation = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -259,7 +253,5 @@ define([], function () {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
browser.chromecast = browser.chrome && userAgent.toLowerCase().indexOf('crkey') !== -1;
|
|
||||||
|
|
||||||
return browser;
|
return browser;
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
import datetime from 'datetime';
|
|
||||||
import $ from 'jQuery';
|
import $ from 'jQuery';
|
||||||
import globalize from 'globalize';
|
import globalize from 'globalize';
|
||||||
import 'material-icons';
|
import 'material-icons';
|
||||||
|
@ -303,6 +302,7 @@ import 'material-icons';
|
||||||
$(document).on('itemsaved', '.metadataEditorPage', function (e, item) {
|
$(document).on('itemsaved', '.metadataEditorPage', function (e, item) {
|
||||||
updateEditorNode(this, item);
|
updateEditorNode(this, item);
|
||||||
}).on('pagebeforeshow', '.metadataEditorPage', function () {
|
}).on('pagebeforeshow', '.metadataEditorPage', function () {
|
||||||
|
/* eslint-disable-next-line no-unused-expressions */
|
||||||
import('css!assets/css/metadataeditor.css');
|
import('css!assets/css/metadataeditor.css');
|
||||||
}).on('pagebeforeshow', '.metadataEditorPage', function () {
|
}).on('pagebeforeshow', '.metadataEditorPage', function () {
|
||||||
var page = this;
|
var page = this;
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
/* eslint-disable indent */
|
|
||||||
|
|
||||||
import browser from 'browser';
|
/* eslint-disable indent */
|
||||||
|
|
||||||
export function getDeviceIcon(device) {
|
export function getDeviceIcon(device) {
|
||||||
var baseUrl = 'assets/img/devices/';
|
var baseUrl = 'assets/img/devices/';
|
||||||
|
|
|
@ -155,6 +155,7 @@ export function enable() {
|
||||||
function attachGamepadScript(e) {
|
function attachGamepadScript(e) {
|
||||||
console.log('Gamepad connected! Attaching gamepadtokey.js script');
|
console.log('Gamepad connected! Attaching gamepadtokey.js script');
|
||||||
window.removeEventListener('gamepadconnected', attachGamepadScript);
|
window.removeEventListener('gamepadconnected', attachGamepadScript);
|
||||||
|
/* eslint-disable-next-line no-unused-expressions */
|
||||||
import('scripts/gamepadtokey');
|
import('scripts/gamepadtokey');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -229,7 +229,6 @@ define(['dom', 'layoutManager', 'inputManager', 'connectionManager', 'events', '
|
||||||
|
|
||||||
function openMainDrawer() {
|
function openMainDrawer() {
|
||||||
navDrawerInstance.open();
|
navDrawerInstance.open();
|
||||||
lastOpenTime = new Date().getTime();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function onMainDrawerOpened() {
|
function onMainDrawerOpened() {
|
||||||
|
@ -575,15 +574,12 @@ define(['dom', 'layoutManager', 'inputManager', 'connectionManager', 'events', '
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateLibraryMenu(user) {
|
function updateLibraryMenu(user) {
|
||||||
// FIXME: Potential equivalent might be
|
|
||||||
// showBySelector(".lnkSyncToOtherDevices", !!user.Policy.EnableContentDownloading);
|
|
||||||
if (!user) {
|
if (!user) {
|
||||||
showBySelector('.libraryMenuDownloads', false);
|
showBySelector('.libraryMenuDownloads', false);
|
||||||
showBySelector('.lnkSyncToOtherDevices', false);
|
showBySelector('.lnkSyncToOtherDevices', false);
|
||||||
return void showBySelector('.userMenuOptions', false);
|
return void showBySelector('.userMenuOptions', false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: Potentially the same as above
|
|
||||||
if (user.Policy.EnableContentDownloading) {
|
if (user.Policy.EnableContentDownloading) {
|
||||||
showBySelector('.lnkSyncToOtherDevices', true);
|
showBySelector('.lnkSyncToOtherDevices', true);
|
||||||
} else {
|
} else {
|
||||||
|
@ -838,7 +834,6 @@ define(['dom', 'layoutManager', 'inputManager', 'connectionManager', 'events', '
|
||||||
var enableLibraryNavDrawerHome = !layoutManager.tv;
|
var enableLibraryNavDrawerHome = !layoutManager.tv;
|
||||||
var skinHeader = document.querySelector('.skinHeader');
|
var skinHeader = document.querySelector('.skinHeader');
|
||||||
var requiresUserRefresh = true;
|
var requiresUserRefresh = true;
|
||||||
var lastOpenTime = new Date().getTime();
|
|
||||||
window.LibraryMenu = {
|
window.LibraryMenu = {
|
||||||
getTopParentId: getTopParentId,
|
getTopParentId: getTopParentId,
|
||||||
onHardwareMenuButtonClick: function () {
|
onHardwareMenuButtonClick: function () {
|
||||||
|
|
|
@ -64,10 +64,7 @@ define(['layoutManager', 'datetime', 'cardBuilder', 'apphost'], function (layout
|
||||||
|
|
||||||
for (i = 0, length = groups.length; i < length; i++) {
|
for (i = 0, length = groups.length; i < length; i++) {
|
||||||
var group = groups[i];
|
var group = groups[i];
|
||||||
var supportsImageAnalysis = appHost.supports('imageanalysis');
|
|
||||||
var cardLayout = appHost.preferVisualCards || supportsImageAnalysis;
|
|
||||||
|
|
||||||
cardLayout = true;
|
|
||||||
if (group.name) {
|
if (group.name) {
|
||||||
html += '<div class="verticalSection">';
|
html += '<div class="verticalSection">';
|
||||||
html += '<h2 class="sectionTitle sectionTitle-cards padded-left">' + group.name + '</h2>';
|
html += '<h2 class="sectionTitle sectionTitle-cards padded-left">' + group.name + '</h2>';
|
||||||
|
@ -86,21 +83,21 @@ define(['layoutManager', 'datetime', 'cardBuilder', 'apphost'], function (layout
|
||||||
|
|
||||||
html += cardBuilder.getCardsHtml({
|
html += cardBuilder.getCardsHtml({
|
||||||
items: group.items,
|
items: group.items,
|
||||||
shape: cardLayout ? getBackdropShape() : enableScrollX() ? 'autoOverflow' : 'autoVertical',
|
shape: getBackdropShape(),
|
||||||
showParentTitleOrTitle: true,
|
showParentTitleOrTitle: true,
|
||||||
showAirTime: true,
|
showAirTime: true,
|
||||||
showAirEndTime: true,
|
showAirEndTime: true,
|
||||||
showChannelName: !cardLayout,
|
showChannelName: false,
|
||||||
cardLayout: cardLayout,
|
cardLayout: true,
|
||||||
centerText: !cardLayout,
|
centerText: false,
|
||||||
action: 'edit',
|
action: 'edit',
|
||||||
cardFooterAside: 'none',
|
cardFooterAside: 'none',
|
||||||
preferThumb: !!cardLayout || 'auto',
|
preferThumb: true,
|
||||||
defaultShape: cardLayout ? null : 'portrait',
|
defaultShape: null,
|
||||||
coverImage: true,
|
coverImage: true,
|
||||||
allowBottomPadding: false,
|
allowBottomPadding: false,
|
||||||
overlayText: false,
|
overlayText: false,
|
||||||
showChannelLogo: cardLayout
|
showChannelLogo: true
|
||||||
});
|
});
|
||||||
html += '</div>';
|
html += '</div>';
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,6 @@ import listView from 'listView';
|
||||||
import cardBuilder from 'cardBuilder';
|
import cardBuilder from 'cardBuilder';
|
||||||
import libraryMenu from 'libraryMenu';
|
import libraryMenu from 'libraryMenu';
|
||||||
import libraryBrowser from 'libraryBrowser';
|
import libraryBrowser from 'libraryBrowser';
|
||||||
import appHost from 'apphost';
|
|
||||||
import imageLoader from 'imageLoader';
|
import imageLoader from 'imageLoader';
|
||||||
import userSettings from 'userSettings';
|
import userSettings from 'userSettings';
|
||||||
import 'emby-itemscontainer';
|
import 'emby-itemscontainer';
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue