update app footer

This commit is contained in:
Luke Pulverenti 2016-08-31 15:17:11 -04:00
parent a96b9dcefa
commit 5cd71abd36
27 changed files with 432 additions and 127 deletions

View File

@ -14,12 +14,12 @@
}, },
"devDependencies": {}, "devDependencies": {},
"ignore": [], "ignore": [],
"version": "1.4.207", "version": "1.4.208",
"_release": "1.4.207", "_release": "1.4.208",
"_resolution": { "_resolution": {
"type": "version", "type": "version",
"tag": "1.4.207", "tag": "1.4.208",
"commit": "823ec6a2a31d712f1de9fb82f10e221c857c6650" "commit": "e7d9ca4dc8083c9dc63d5add4d73f0179369461a"
}, },
"_source": "https://github.com/MediaBrowser/emby-webcomponents.git", "_source": "https://github.com/MediaBrowser/emby-webcomponents.git",
"_target": "^1.2.1", "_target": "^1.2.1",

View File

@ -44,7 +44,10 @@
var pos = getOffsets([options.positionTo])[0]; var pos = getOffsets([options.positionTo])[0];
pos.top += options.positionTo.offsetHeight / 2; if (options.positionY != 'top') {
pos.top += options.positionTo.offsetHeight / 2;
}
pos.left += options.positionTo.offsetWidth / 2; pos.left += options.positionTo.offsetWidth / 2;
var height = dlg.offsetHeight || 300; var height = dlg.offsetHeight || 300;
@ -65,6 +68,9 @@
pos.top -= (overflowY + 20); pos.top -= (overflowY + 20);
} }
pos.top += (options.offsetTop || 0);
pos.left += (options.offsetLeft || 0);
// Do some boundary checking // Do some boundary checking
pos.top = Math.max(pos.top, 10); pos.top = Math.max(pos.top, 10);
pos.left = Math.max(pos.left, 10); pos.left = Math.max(pos.left, 10);
@ -88,7 +94,9 @@
var dialogOptions = { var dialogOptions = {
removeOnClose: true, removeOnClose: true,
enableHistory: options.enableHistory, enableHistory: options.enableHistory,
scrollY: false scrollY: false,
entryAnimation: options.entryAnimation,
exitAnimation: options.exitAnimation
}; };
var backButton = false; var backButton = false;
@ -102,8 +110,8 @@
} else { } else {
dialogOptions.modal = false; dialogOptions.modal = false;
dialogOptions.entryAnimationDuration = 140; dialogOptions.entryAnimationDuration = options.entryAnimationDuration || 140;
dialogOptions.exitAnimationDuration = 180; dialogOptions.exitAnimationDuration = options.exitAnimationDuration || 180;
dialogOptions.autoFocus = false; dialogOptions.autoFocus = false;
} }
@ -119,6 +127,10 @@
dlg.classList.add('actionSheet'); dlg.classList.add('actionSheet');
if (options.dialogClass) {
dlg.classList.add(options.dialogClass);
}
var html = ''; var html = '';
var scrollType = layoutManager.desktop ? 'smoothScrollY' : 'hiddenScrollY'; var scrollType = layoutManager.desktop ? 'smoothScrollY' : 'hiddenScrollY';
@ -173,6 +185,10 @@
var menuItemClass = browser.noFlex || browser.firefox ? 'actionSheetMenuItem actionSheetMenuItem-noflex' : 'actionSheetMenuItem'; var menuItemClass = browser.noFlex || browser.firefox ? 'actionSheetMenuItem actionSheetMenuItem-noflex' : 'actionSheetMenuItem';
if (options.menuItemClass) {
menuItemClass += ' ' + options.menuItemClass;
}
for (i = 0, length = options.items.length; i < length; i++) { for (i = 0, length = options.items.length; i < length; i++) {
option = options.items[i]; option = options.items[i];

View File

@ -618,7 +618,7 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'mediaInfo
tag: item.ImageTags.Thumb tag: item.ImageTags.Thumb
}); });
} else if (item.SeriesThumbImageTag) { } else if (item.SeriesThumbImageTag && options.inheritThumb !== false) {
imgUrl = apiClient.getScaledImageUrl(item.SeriesId, { imgUrl = apiClient.getScaledImageUrl(item.SeriesId, {
type: "Thumb", type: "Thumb",
@ -626,9 +626,9 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'mediaInfo
tag: item.SeriesThumbImageTag tag: item.SeriesThumbImageTag
}); });
} else if (item.ParentThumbItemId) { } else if (item.ParentThumbItemId && options.inheritThumb !== false) {
imgUrl = apiClient.getThumbImageUrl(item.ParentThumbItemId, { imgUrl = apiClient.getScaledImageUrl(item.ParentThumbItemId, {
type: "Thumb", type: "Thumb",
maxWidth: width, maxWidth: width,
tag: item.ParentThumbImageTag tag: item.ParentThumbImageTag

View File

@ -28,6 +28,8 @@
overflow: hidden; overflow: hidden;
font-weight: 500; font-weight: 500;
text-transform: uppercase; text-transform: uppercase;
/* Disable webkit tap highlighting */
-webkit-tap-highlight-color: rgba(0,0,0,0);
} }
.emby-button.raised, .emby-button.fab { .emby-button.raised, .emby-button.fab {
@ -142,7 +144,8 @@
overflow: hidden; overflow: hidden;
font-weight: 500; font-weight: 500;
border-radius: 50%; border-radius: 50%;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0); /* Disable webkit tap highlighting */
-webkit-tap-highlight-color: rgba(0,0,0,0);
justify-content: center; justify-content: center;
} }

View File

@ -5,7 +5,8 @@
bottom: 0; bottom: 0;
top: 0; top: 0;
background-color: rgba(0, 0, 0, .85); background-color: rgba(0, 0, 0, .85);
z-index: 998; /* Just enough to cover poster overlay buttons */
z-index: 1;
line-height: initial; line-height: initial;
font-size: initial; font-size: initial;
} }

View File

@ -1,6 +1,6 @@
{ {
"name": "hls.js", "name": "hls.js",
"version": "0.5.44", "version": "0.5.46",
"license": "Apache-2.0", "license": "Apache-2.0",
"description": "Media Source Extension - HLS library, by/for Dailymotion", "description": "Media Source Extension - HLS library, by/for Dailymotion",
"homepage": "https://github.com/dailymotion/hls.js", "homepage": "https://github.com/dailymotion/hls.js",
@ -16,11 +16,11 @@
"test", "test",
"tests" "tests"
], ],
"_release": "0.5.44", "_release": "0.5.46",
"_resolution": { "_resolution": {
"type": "version", "type": "version",
"tag": "v0.5.44", "tag": "v0.5.46",
"commit": "f3800e9a8b01157c73d5847a9102137a8d73dc8e" "commit": "27578acdf24ae3a6d6dcccb49765ac2b835f84dd"
}, },
"_source": "git://github.com/dailymotion/hls.js.git", "_source": "git://github.com/dailymotion/hls.js.git",
"_target": "~0.5.7", "_target": "~0.5.7",

View File

@ -1,6 +1,6 @@
{ {
"name": "hls.js", "name": "hls.js",
"version": "0.5.44", "version": "0.5.46",
"license": "Apache-2.0", "license": "Apache-2.0",
"description": "Media Source Extension - HLS library, by/for Dailymotion", "description": "Media Source Extension - HLS library, by/for Dailymotion",
"homepage": "https://github.com/dailymotion/hls.js", "homepage": "https://github.com/dailymotion/hls.js",

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,6 @@
{ {
"name": "hls.js", "name": "hls.js",
"version": "0.5.44", "version": "0.5.46",
"license": "Apache-2.0", "license": "Apache-2.0",
"description": "Media Source Extension - HLS library, by/for Dailymotion", "description": "Media Source Extension - HLS library, by/for Dailymotion",
"homepage": "https://github.com/dailymotion/hls.js", "homepage": "https://github.com/dailymotion/hls.js",

View File

@ -32,14 +32,14 @@
"web-component-tester": "^4.0.0", "web-component-tester": "^4.0.0",
"webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
}, },
"homepage": "https://github.com/polymerelements/iron-icon", "homepage": "https://github.com/PolymerElements/iron-icon",
"_release": "1.0.10", "_release": "1.0.10",
"_resolution": { "_resolution": {
"type": "version", "type": "version",
"tag": "v1.0.10", "tag": "v1.0.10",
"commit": "f4e146da4982ff96bb25db85290c09e8de4ec734" "commit": "f4e146da4982ff96bb25db85290c09e8de4ec734"
}, },
"_source": "git://github.com/polymerelements/iron-icon.git", "_source": "git://github.com/PolymerElements/iron-icon.git",
"_target": "^1.0.0", "_target": "^1.0.0",
"_originalSource": "polymerelements/iron-icon" "_originalSource": "PolymerElements/iron-icon"
} }

View File

@ -32,14 +32,14 @@
"iron-component-page": "polymerElements/iron-component-page#^1.1.6" "iron-component-page": "polymerElements/iron-component-page#^1.1.6"
}, },
"private": true, "private": true,
"homepage": "https://github.com/Polymer/polymer", "homepage": "https://github.com/polymer/polymer",
"_release": "1.6.1", "_release": "1.6.1",
"_resolution": { "_resolution": {
"type": "version", "type": "version",
"tag": "v1.6.1", "tag": "v1.6.1",
"commit": "1f197d9d7874b1e5808b2a5c26f34446a7d912fc" "commit": "1f197d9d7874b1e5808b2a5c26f34446a7d912fc"
}, },
"_source": "git://github.com/Polymer/polymer.git", "_source": "git://github.com/polymer/polymer.git",
"_target": "^1.1.0", "_target": "^1.1.0",
"_originalSource": "Polymer/polymer" "_originalSource": "polymer/polymer"
} }

View File

@ -1,12 +1,13 @@
.appfooter { .appfooter {
background: #1c1c1c; background: #1c1c1c;
/*background: #222326;*/
position: fixed; position: fixed;
left: 0; left: 0;
right: 0; right: 0;
z-index: 1; z-index: 1;
bottom: 0; bottom: 0;
transition: transform 180ms linear; transition: transform 180ms linear;
contain: layout style;
} }
.appfooter.headroom--unpinned { .appfooter.headroom--unpinned {

View File

@ -26,3 +26,19 @@
margin-bottom: .25em; margin-bottom: .25em;
font-size: 20px; font-size: 20px;
} }
.dockedtabs-dlg {
font-size: inherit !important;
background-color: #222 !important;
color: #eee;
}
.dockedtabs-dlg-menuitem:hover {
background-color: #333 !important;
}
@media all and (max-width: 800px) {
.dockedtab-midsize {
display: none !important;
}
}

View File

@ -1,9 +1,169 @@
define(['css!./dockedtabs', 'emby-tabs'], function () { define(['apphost', 'connectionManager', 'events', 'globalize', 'css!./dockedtabs', 'emby-tabs'], function (appHost, connectionManager, events, globalize) {
var currentUser = {};
var currentUserViews = [];
function showUserView(id) {
var view = currentUserViews.filter(function (current) {
return current.Id == id;
})[0];
if (view) {
Emby.Page.showItem(view);
}
}
function executeCommand(id) {
switch (id) {
case 'settings':
Emby.Page.showSettings();
break;
case 'signout':
Dashboard.logout();
break;
case 'selectserver':
Emby.Page.showSelectServer();
break;
case 'reports':
Dashboard.navigate('reports.html');
break;
case 'metadatamanager':
Dashboard.navigate('metadatamanager.html');
break;
case 'manageserver':
Dashboard.navigate('dashboard.html');
break;
case 'sync':
Dashboard.navigate('mysync.html');
break;
default:
showUserView(id);
break;
}
}
function showMenu(menuItems, button) {
require(['webActionSheet'], function (actionSheet) {
actionSheet.show({
items: menuItems,
positionTo: button,
entryAnimation: 'slideup',
exitAnimation: 'fadeout',
entryAnimationDuration: 160,
exitAnimationDuration: 100,
offsetTop: -30,
positionY: 'top',
dialogClass: 'dockedtabs-dlg',
menuItemClass: 'dockedtabs-dlg-menuitem'
}).then(executeCommand);
});
}
function showLibrariesMenu(button) {
var commands = currentUserViews.map(function (view) {
return {
name: view.Name,
id: view.Id
};
});
showMenu(commands, button);
}
function showMoreMenu(button) {
var commands = [];
// manage server, metadata manager, reports, sync to other devices
if (currentUser.Policy.IsAdministrator) {
commands.push({
name: globalize.translate('ButtonManageServer'),
id: 'manageserver'
});
commands.push({
name: globalize.translate('MetadataManager'),
id: 'metadatamanager'
});
commands.push({
name: globalize.translate('ButtonReports'),
id: 'reports'
});
}
if (Dashboard.isConnectMode()) {
commands.push({
name: globalize.translate('HeaderSelectServer'),
id: 'selectserver'
});
}
commands.push({
name: globalize.translate('TabSettings'),
id: 'settings'
});
if (currentUser.Policy.EnableSync) {
commands.push({
name: globalize.translate('SyncToOtherDevices'),
id: 'sync'
});
}
commands.push({
name: globalize.translate('ButtonSignOut'),
id: 'signout'
});
showMenu(commands, button);
}
function onTabClick(e) {
var index = parseInt(this.getAttribute('data-index'));
switch (index) {
case 0:
Emby.Page.goHome();
break;
case 1:
showLibrariesMenu(this);
e.preventDefault();
e.stopPropagation();
break;
case 2:
Emby.Page.showLiveTV();
break;
case 3:
Emby.Page.showFavorites();
break;
case 4:
Dashboard.navigate('mysync.html?mode=offline');
break;
case 5:
showMoreMenu(this);
e.preventDefault();
e.stopPropagation();
break;
default:
break;
}
}
function render(options) { function render(options) {
var elem = document.createElement('div'); var elem = document.createElement('div');
elem.classList.add('hide');
elem.classList.add('dockedtabs'); elem.classList.add('dockedtabs');
elem.classList.add('dockedtabs-bottom'); elem.classList.add('dockedtabs-bottom');
@ -15,43 +175,114 @@
var html = ''; var html = '';
var liveTVButtonClass = appHost.supports('sync') ? ' dockedtab-midsize' : '';
html += ' <div is="emby-tabs" class="dockedtabs-tabs" data-selectionbar="false">\ html += ' <div is="emby-tabs" class="dockedtabs-tabs" data-selectionbar="false">\
<button is="emby-button" class="dockedtabs-tab-button emby-tab-button emby-tab-button-active" data-index="0">\ <button is="emby-button" class="dockedtabs-tab-button emby-tab-button emby-tab-button-active" data-index="0">\
<div class="dockedtabs-tab-button-foreground emby-button-foreground"><i class="dockedtabs-tab-button-icon md-icon">home</i><div>Home</div></div>\ <div class="dockedtabs-tab-button-foreground emby-button-foreground"><i class="dockedtabs-tab-button-icon md-icon">home</i><div>' + globalize.translate('TabHome') + '</div></div>\
</button>\ </button>\
<button is="emby-button" class="dockedtabs-tab-button emby-tab-button" data-index="1">\ <button is="emby-button" class="dockedtabs-tab-button emby-tab-button" data-index="1">\
<div class="dockedtabs-tab-button-foreground emby-button-foreground"><i class="dockedtabs-tab-button-icon md-icon">dvr</i><div>Libraries</div></div>\ <div class="dockedtabs-tab-button-foreground emby-button-foreground"><i class="dockedtabs-tab-button-icon md-icon">dvr</i><div>' + globalize.translate('HeaderLibraries') + '</div></div>\
</button>\ </button>\
<button is="emby-button" class="dockedtabs-tab-button emby-tab-button homeFavoritesTab" data-index="2">\ <button is="emby-button" class="dockedtabs-tab-button emby-tab-button docked-tab-livetv' + liveTVButtonClass + '" data-index="2">\
<div class="dockedtabs-tab-button-foreground emby-button-foreground"><i class="dockedtabs-tab-button-icon md-icon">favorite</i><div>Favorites</div></div>\ <div class="dockedtabs-tab-button-foreground emby-button-foreground"><i class="dockedtabs-tab-button-icon md-icon">live_tv</i><div>' + globalize.translate('HeaderLiveTV') + '</div></div>\
</button>\ </button>\
<button is="emby-button" class="dockedtabs-tab-button emby-tab-button" data-index="3">\ <button is="emby-button" class="dockedtabs-tab-button emby-tab-button homeFavoritesTab" data-index="3">\
<div class="dockedtabs-tab-button-foreground emby-button-foreground"><i class="dockedtabs-tab-button-icon md-icon">file_download</i><div>Downloads</div></div>\ <div class="dockedtabs-tab-button-foreground emby-button-foreground"><i class="dockedtabs-tab-button-icon md-icon">favorite</i><div>' + globalize.translate('TabFavorites') + '</div></div>\
</button>\ </button>\
<button is="emby-button" class="dockedtabs-tab-button emby-tab-button" data-index="3">\ ';
<div class="dockedtabs-tab-button-foreground emby-button-foreground"><i class="dockedtabs-tab-button-icon md-icon">menu</i><div>More</div></div>\
if (appHost.supports('sync')) {
html += '<button is="emby-button" class="dockedtabs-tab-button emby-tab-button" data-index="4">\
<div class="dockedtabs-tab-button-foreground emby-button-foreground"><i class="dockedtabs-tab-button-icon md-icon">file_download</i><div>' + globalize.translate('Downloads') + '</div></div>\
</button>\
';
}
html += '<button is="emby-button" class="dockedtabs-tab-button emby-tab-button" data-index="5">\
<div class="dockedtabs-tab-button-foreground emby-button-foreground"><i class="dockedtabs-tab-button-icon md-icon">menu</i><div>' + globalize.translate('ButtonMore') + '</div></div>\
</button>\ </button>\
</div>\ </div>\
'; ';
elem.innerHTML = html; elem.innerHTML = html;
var buttons = elem.querySelectorAll('.emby-tab-button');
for (var i = 0, length = buttons.length; i < length; i++) {
buttons[i].addEventListener('click', onTabClick);
}
options.appFooter.add(elem); options.appFooter.add(elem);
return elem; return elem;
} }
function onUserViewResponse(user, views, element) {
if (views.filter(function (v) {
return v.CollectionType == 'livetv';
}).length) {
element.querySelector('.docked-tab-livetv').classList.remove('hide');
} else {
element.querySelector('.docked-tab-livetv').classList.add('hide');
}
}
function showUserTabs(user, element) {
currentUser = user;
var apiClient = ConnectionManager.getApiClient(user.ServerId);
apiClient.getUserViews({}, user.Id).then(function (result) {
currentUserViews = result.Items;
onUserViewResponse(user, result.Items, element);
}, function () {
currentUserViews = [];
onUserViewResponse(user, [], element);
});
}
function showCurrentUserTabs(element) {
if (!Dashboard.getCurrentUserId()) {
return;
}
Dashboard.getCurrentUser().then(function (user) {
showUserTabs(user, element);
});
}
function dockedTabs(options) { function dockedTabs(options) {
var self = this; var self = this;
self.element = render(options); self.element = render(options);
events.on(connectionManager, 'localusersignedin', function (e, user) {
self.element.classList.remove('hide');
showUserTabs(user, self.element);
});
events.on(connectionManager, 'localusersignedout', function () {
self.element.classList.add('hide');
});
showCurrentUserTabs(self.element);
} }
dockedTabs.prototype.destroy = function () { dockedTabs.prototype.destroy = function () {
var self = this; var self = this;
self.Element = null; var elem = self.element;
if (elem) {
}
self.element = null;
}; };
return dockedTabs; return dockedTabs;

View File

@ -7,7 +7,14 @@
var hasChanges = false; var hasChanges = false;
// These images can be large and we're seeing memory problems in safari // These images can be large and we're seeing memory problems in safari
var browsableImagePageSize = browserInfo.slow ? 6 : 30; var browsableImagePageSize;
// This can handle more
if (window.IntersectionObserver) {
browsableImagePageSize = 100;
} else {
browsableImagePageSize = browserInfo.slow ? 6 : 30;
}
var browsableImageStartIndex = 0; var browsableImageStartIndex = 0;
var browsableImageType = 'Primary'; var browsableImageType = 'Primary';
@ -276,7 +283,7 @@
reloadBrowsableImages(page); reloadBrowsableImages(page);
}); });
page.addEventListener('click', function(e) { page.addEventListener('click', function (e) {
var btnDownloadRemoteImage = parentWithClass(e.target, 'btnDownloadRemoteImage'); var btnDownloadRemoteImage = parentWithClass(e.target, 'btnDownloadRemoteImage');
if (btnDownloadRemoteImage) { if (btnDownloadRemoteImage) {

View File

@ -72,7 +72,7 @@
@media all and (min-width: 640px) { @media all and (min-width: 640px) {
.dashboardDocument .mainDrawer { .dashboardDocument .mainDrawer {
z-index: 998 !important; z-index: inherit !important;
top: 58px !important; top: 58px !important;
left: 0 !important; left: 0 !important;
transform: none !important; transform: none !important;
@ -87,7 +87,8 @@
} }
.dashboardDocument .libraryMenuButtonText { .dashboardDocument .libraryMenuButtonText {
font-size: 150%; font-size: 125%;
margin-left: 0;
} }
.dashboardDocument .mainDrawerPanelContent { .dashboardDocument .mainDrawerPanelContent {

View File

@ -35,10 +35,6 @@
z-index: -1; z-index: -1;
} }
.pageWithAbsoluteTabs neon-animatable {
z-index: 2;
}
.libraryPage .header { .libraryPage .header {
padding-bottom: 0; padding-bottom: 0;
} }

View File

@ -101,6 +101,7 @@
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
align-items: center; align-items: center;
margin-left: 1em;
} }
.viewMenuBar { .viewMenuBar {
@ -228,7 +229,7 @@
background-color: #1D1D20; background-color: #1D1D20;
} }
@media all and (max-width: 400px) { @media all and (max-width: 360px) {
.libraryMenuButtonText { .libraryMenuButtonText {
display: none; display: none;

View File

@ -52,18 +52,14 @@
/* Now playing bar */ /* Now playing bar */
.nowPlayingBar { .nowPlayingBar {
position: fixed;
bottom: 0;
left: 0;
right: 0;
/* Above everything, except for the video player and popup overlays */ /* Above everything, except for the video player and popup overlays */
z-index: 1097;
color: #fff; color: #fff;
background-color: #1C1C1F; background: #222326;
text-align: center; text-align: center;
/*box-shadow: 0 -2px 2px 0 rgba(0,0,0,.14),-1px 5px 1px rgba(0,0,0,.12);*/ /*box-shadow: 0 -2px 2px 0 rgba(0,0,0,.14),-1px 5px 1px rgba(0,0,0,.12);*/
will-change: transform; will-change: transform;
contain: layout style; contain: layout style;
font-size: 90%;
} }
.hiddenNowPlayingBar .nowPlayingBar { .hiddenNowPlayingBar .nowPlayingBar {
@ -105,17 +101,17 @@
vertical-align: bottom; vertical-align: bottom;
} }
.nowPlayingImage img { .nowPlayingImage img {
height: 64px; height: 56px;
} }
.nowPlayingBar .nowPlayingImage { .nowPlayingBar .nowPlayingImage {
width: 64px; width: 56px;
height: 64px; height: 56px;
background-position: center center; background-position: center center;
background-repeat: no-repeat; background-repeat: no-repeat;
background-size: contain; background-size: contain;
} }
.nowPlayingBarText { .nowPlayingBarText {
display: inline-block; display: inline-block;
@ -165,7 +161,7 @@
.nowPlayingBarCenter { .nowPlayingBarCenter {
vertical-align: middle; vertical-align: middle;
text-align: center; text-align: center;
margin-top: 6px; margin-top: 3px;
/* Need this to make sure it's on top of nowPlayingBarPositionContainer so that buttons are fully clickable */ /* Need this to make sure it's on top of nowPlayingBarPositionContainer so that buttons are fully clickable */
z-index: 2; z-index: 2;
position: absolute; position: absolute;
@ -176,7 +172,7 @@
.nowPlayingBarPositionContainer { .nowPlayingBarPositionContainer {
position: absolute !important; position: absolute !important;
left: 64px; left: 56px;
top: -8px; top: -8px;
right: 0; right: 0;
z-index: 1; z-index: 1;
@ -186,6 +182,10 @@
background: #333; background: #333;
} }
.headroom--unpinned .nowPlayingBarPositionContainer {
display: none;
}
.noMediaProgress .nowPlayingBarPositionContainer { .noMediaProgress .nowPlayingBarPositionContainer {
display: none; display: none;
} }

View File

@ -101,7 +101,6 @@
var context = params.context; var context = params.context;
LibraryMenu.setBackButtonVisible(true); LibraryMenu.setBackButtonVisible(true);
LibraryMenu.setMenuButtonVisible(false);
LibraryBrowser.renderName(item, page.querySelector('.itemName'), false, context); LibraryBrowser.renderName(item, page.querySelector('.itemName'), false, context);
LibraryBrowser.renderParentName(item, page.querySelector('.parentName'), context); LibraryBrowser.renderParentName(item, page.querySelector('.parentName'), context);
@ -1142,7 +1141,7 @@
overlayText: true, overlayText: true,
lazy: true, lazy: true,
showDetailsMenu: true, showDetailsMenu: true,
overlayPlayButton: AppInfo.enableAppLayouts, overlayPlayButton: AppInfo.enableAppLayouts
}); });
} }
else if (item.Type == "GameSystem") { else if (item.Type == "GameSystem") {

View File

@ -1,9 +1,14 @@
define(['imageLoader', 'layoutManager', 'viewManager', 'navdrawer', 'libraryBrowser', 'apphost', 'paper-icon-button-light', 'material-icons'], function (imageLoader, layoutManager, viewManager, navdrawer, libraryBrowser, appHost) { define(['imageLoader', 'layoutManager', 'viewManager', 'libraryBrowser', 'apphost', 'paper-icon-button-light', 'material-icons'], function (imageLoader, layoutManager, viewManager, libraryBrowser, appHost) {
var navDrawerElement = document.querySelector('.mainDrawer'); var enableBottomTabs = AppInfo.isNativeApp;
var navDrawerScrollContainer = navDrawerElement.querySelector('.scrollContainer'); var enableLibraryNavDrawer = !enableBottomTabs;
var navDrawerElement;
var navDrawerScrollContainer;
var navDrawerInstance; var navDrawerInstance;
var mainDrawerButton;
function renderHeader() { function renderHeader() {
var html = ''; var html = '';
@ -11,10 +16,10 @@
html += '<div class="primaryIcons">'; html += '<div class="primaryIcons">';
var backIcon = browserInfo.safari ? 'chevron_left' : '&#xE5C4;'; var backIcon = browserInfo.safari ? 'chevron_left' : '&#xE5C4;';
html += '<button type="button" is="paper-icon-button-light" class="headerButton headerButtonLeft headerBackButton hide autoSize"><i class="md-icon">' + backIcon + '</i></button>'; html += '<button type="button" is="paper-icon-button-light" class="headerButton headerButtonLeft headerBackButton hide"><i class="md-icon">' + backIcon + '</i></button>';
html += '<button type="button" is="paper-icon-button-light" class="headerButton mainDrawerButton barsMenuButton headerButtonLeft autoSize"><i class="md-icon">menu</i></button>'; html += '<button type="button" is="paper-icon-button-light" class="headerButton mainDrawerButton barsMenuButton headerButtonLeft hide"><i class="md-icon">menu</i></button>';
html += '<button type="button" is="paper-icon-button-light" class="headerButton headerAppsButton barsMenuButton headerButtonLeft autoSize"><i class="md-icon">home</i></button>'; html += '<button type="button" is="paper-icon-button-light" class="headerButton headerAppsButton barsMenuButton headerButtonLeft"><i class="md-icon">home</i></button>';
html += '<div class="libraryMenuButtonText headerButton">' + Globalize.translate('ButtonHome') + '</div>'; html += '<div class="libraryMenuButtonText headerButton">' + Globalize.translate('ButtonHome') + '</div>';
@ -179,7 +184,7 @@
function bindMenuEvents() { function bindMenuEvents() {
var mainDrawerButton = document.querySelector('.mainDrawerButton'); mainDrawerButton = document.querySelector('.mainDrawerButton');
if (mainDrawerButton) { if (mainDrawerButton) {
mainDrawerButton.addEventListener('click', toggleMainDrawer); mainDrawerButton.addEventListener('click', toggleMainDrawer);
@ -331,11 +336,13 @@
function refreshDashboardInfoInDrawer(page, user) { function refreshDashboardInfoInDrawer(page, user) {
if (!navDrawerScrollContainer.querySelector('.adminDrawerLogo')) { loadNavDrawer().then(function () {
createDashboardMenu(page); if (!navDrawerScrollContainer.querySelector('.adminDrawerLogo')) {
} else { createDashboardMenu(page);
updateDashboardMenuSelectedItem(); } else {
} updateDashboardMenuSelectedItem();
}
});
} }
function updateDashboardMenuSelectedItem() { function updateDashboardMenuSelectedItem() {
@ -707,18 +714,6 @@
} }
}, },
setMenuButtonVisible: function (visible) {
var mainDrawerButton = document.querySelector('.mainDrawerButton');
if (mainDrawerButton) {
if (!visible && browserInfo.mobile) {
mainDrawerButton.classList.remove('hide');
} else {
mainDrawerButton.classList.remove('hide');
}
}
},
setTransparentMenu: function (transparent) { setTransparentMenu: function (transparent) {
var viewMenuBar = document.querySelector('.viewMenuBar'); var viewMenuBar = document.querySelector('.viewMenuBar');
@ -861,9 +856,21 @@
var isDashboardPage = page.classList.contains('type-interior'); var isDashboardPage = page.classList.contains('type-interior');
if (isDashboardPage) { if (isDashboardPage) {
if (mainDrawerButton) {
mainDrawerButton.classList.remove('hide');
}
refreshDashboardInfoInDrawer(page); refreshDashboardInfoInDrawer(page);
} else { } else {
if (navDrawerElement.classList.contains('adminDrawer')) {
if (mainDrawerButton) {
if (enableLibraryNavDrawer) {
mainDrawerButton.classList.remove('hide');
} else {
mainDrawerButton.classList.add('hide');
}
}
if ((navDrawerElement && navDrawerElement.classList.contains('adminDrawer')) || (!navDrawerElement && enableLibraryNavDrawer)) {
refreshLibraryDrawer(); refreshLibraryDrawer();
} }
} }
@ -974,24 +981,34 @@
admin = true; admin = true;
} }
if (admin) { var enableNavDrawer = admin || enableLibraryNavDrawer;
navDrawerElement.classList.add('adminDrawer'); if (enableNavDrawer) {
navDrawerElement.classList.remove('darkDrawer'); loadNavDrawer().then(function () {
} else { if (admin) {
navDrawerElement.classList.add('darkDrawer'); navDrawerElement.classList.add('adminDrawer');
navDrawerElement.classList.remove('adminDrawer'); navDrawerElement.classList.remove('darkDrawer');
} else {
navDrawerElement.classList.add('darkDrawer');
navDrawerElement.classList.remove('adminDrawer');
}
});
} }
} }
function refreshLibraryDrawer(user) { function refreshLibraryDrawer(user) {
var promise = user ? Promise.resolve(user) : ConnectionManager.user(window.ApiClient); if (!enableLibraryNavDrawer) {
return;
}
promise.then(function (user) { loadNavDrawer().then(function () {
refreshLibraryInfoInDrawer(user); var promise = user ? Promise.resolve(user) : ConnectionManager.user(window.ApiClient);
document.dispatchEvent(new CustomEvent("libraryMenuCreated", {})); promise.then(function (user) {
updateLibraryMenu(user.localUser); refreshLibraryInfoInDrawer(user);
updateLibraryMenu(user.localUser);
});
}); });
} }
@ -1020,8 +1037,25 @@
}; };
} }
navDrawerInstance = new navdrawer(getNavDrawerOptions()); function loadNavDrawer() {
navDrawerElement.classList.remove('hide');
if (navDrawerInstance) {
return Promise.resolve(navDrawerInstance);
}
return new Promise(function (resolve, reject) {
navDrawerElement = document.querySelector('.mainDrawer');
navDrawerScrollContainer = navDrawerElement.querySelector('.scrollContainer');
require(['navdrawer'], function (navdrawer) {
navDrawerInstance = new navdrawer(getNavDrawerOptions());
navDrawerElement.classList.remove('hide');
resolve(navDrawerInstance);
});
});
}
renderHeader(); renderHeader();
Events.on(ConnectionManager, 'apiclientcreated', function (e, apiClient) { Events.on(ConnectionManager, 'apiclientcreated', function (e, apiClient) {
@ -1041,9 +1075,11 @@
setDrawerClass(); setDrawerClass();
//require(['appfooter-shared', 'dockedtabs'], function (footer, dockedtabs) { if (enableBottomTabs) {
// new dockedtabs({ require(['appfooter-shared', 'dockedtabs'], function (footer, dockedtabs) {
// appFooter: footer new dockedtabs({
// }); appFooter: footer
//}); });
});
}
}); });

View File

@ -1256,7 +1256,7 @@
errorMsg += '<br/>'; errorMsg += '<br/>';
errorMsg += Globalize.translate('MessageEnsureOpenTuner'); errorMsg += Globalize.translate('MessageEnsureOpenTuner');
} }
if (mediaSource && mediaSource.VideoType != "VideoFile") { else if (mediaSource && mediaSource.VideoType != "VideoFile") {
errorMsg += '<br/>'; errorMsg += '<br/>';
errorMsg += '<br/>'; errorMsg += '<br/>';
errorMsg += Globalize.translate('MessageFolderRipPlaybackExperimental'); errorMsg += Globalize.translate('MessageFolderRipPlaybackExperimental');

View File

@ -317,7 +317,7 @@
return; return;
} }
parentContainer.insertAdjacentHTML('beforeend', getNowPlayingBarHtml()); parentContainer.insertAdjacentHTML('afterbegin', getNowPlayingBarHtml());
nowPlayingBarElement = parentContainer.querySelector('.nowPlayingBar'); nowPlayingBarElement = parentContainer.querySelector('.nowPlayingBar');
if (browser.safari && browser.slow) { if (browser.safari && browser.slow) {

View File

@ -191,13 +191,11 @@
view.addEventListener('viewbeforeshow', function (e) { view.addEventListener('viewbeforeshow', function (e) {
document.body.classList.add('hiddenViewMenuBar'); document.body.classList.add('hiddenViewMenuBar');
LibraryMenu.setMenuButtonVisible(false);
}); });
view.addEventListener('viewbeforehide', function (e) { view.addEventListener('viewbeforehide', function (e) {
document.body.classList.remove('hiddenViewMenuBar'); document.body.classList.remove('hiddenViewMenuBar');
LibraryMenu.setMenuButtonVisible(true);
}); });
}; };

View File

@ -1248,6 +1248,8 @@ var AppInfo = {};
paths.serverdiscovery = apiClientBowerPath + "/serverdiscovery"; paths.serverdiscovery = apiClientBowerPath + "/serverdiscovery";
} }
define("webActionSheet", [embyWebComponentsBowerPath + "/actionsheet/actionsheet"], returnFirstDependency);
if (Dashboard.isRunningInCordova()) { if (Dashboard.isRunningInCordova()) {
paths.sharingMenu = "cordova/sharingwidget"; paths.sharingMenu = "cordova/sharingwidget";
paths.wakeonlan = "cordova/wakeonlan"; paths.wakeonlan = "cordova/wakeonlan";
@ -1256,7 +1258,7 @@ var AppInfo = {};
paths.wakeonlan = apiClientBowerPath + "/wakeonlan"; paths.wakeonlan = apiClientBowerPath + "/wakeonlan";
define("sharingMenu", [embyWebComponentsBowerPath + "/sharing/sharingmenu"], returnFirstDependency); define("sharingMenu", [embyWebComponentsBowerPath + "/sharing/sharingmenu"], returnFirstDependency);
define("actionsheet", [embyWebComponentsBowerPath + "/actionsheet/actionsheet"], returnFirstDependency); define("actionsheet", ["webActionSheet"], returnFirstDependency);
} }
define("libjass", [bowerPath + "/libjass/libjass.min", "css!" + bowerPath + "/libjass/libjass"], returnFirstDependency); define("libjass", [bowerPath + "/libjass/libjass.min", "css!" + bowerPath + "/libjass/libjass"], returnFirstDependency);
@ -1619,7 +1621,11 @@ var AppInfo = {};
}; };
embyRouter.showFavorites = function () { embyRouter.showFavorites = function () {
Dashboard.navigate('home.html?tab=3'); Dashboard.navigate('favorites.html');
};
embyRouter.showSettings = function () {
Dashboard.navigate('mypreferencesmenu.html');
}; };
function showItem(item, serverId, options) { function showItem(item, serverId, options) {
@ -2768,11 +2774,6 @@ var AppInfo = {};
postInitDependencies.push('scripts/nowplayingbar'); postInitDependencies.push('scripts/nowplayingbar');
if (AppInfo.isNativeApp && browserInfo.safari) {
postInitDependencies.push('cordova/ios/tabbar');
}
postInitDependencies.push('components/remotecontrolautoplay'); postInitDependencies.push('components/remotecontrolautoplay');
// Prefer custom font over Segoe if on desktop windows // Prefer custom font over Segoe if on desktop windows

View File

@ -2226,5 +2226,6 @@
"LabelVaapiDeviceHelp": "This is the render node that is used for hardware acceleration.", "LabelVaapiDeviceHelp": "This is the render node that is used for hardware acceleration.",
"HowToConnectFromEmbyApps": "How to Connect from Emby apps", "HowToConnectFromEmbyApps": "How to Connect from Emby apps",
"MessageFolderRipPlaybackExperimental": "Support for playback of folder rips and ISOs in this app is only expirimental. For best results, try an Emby app that supports these formats natively, or use plain video files.", "MessageFolderRipPlaybackExperimental": "Support for playback of folder rips and ISOs in this app is only expirimental. For best results, try an Emby app that supports these formats natively, or use plain video files.",
"OptionExtractChapterImage": "Enable chapter image extraction" "OptionExtractChapterImage": "Enable chapter image extraction",
"Downloads": "Downloads"
} }

View File

@ -20,14 +20,11 @@
<form id="supporterKeyForm"> <form id="supporterKeyForm">
<!-- Terrible, but this hidden field prevents the yellow background in chrome -->
<div style="height:0; overflow: hidden;"><input type="text" name="fakeusernameremembered" tabindex="-1" /><input type="password" name="fakepasswordremembered" tabindex="-1" /></div>
<div style="margin: 3em 0 1em;"> <div style="margin: 3em 0 1em;">
<h1>${TabSupporterKey}</h1> <h1>${TabSupporterKey}</h1>
<div class="inputContainer"> <div class="inputContainer">
<input is="emby-input" type="password" id="txtSupporterKey" label="${LabelSupporterKey}" autocomplete="off" /> <input is="emby-input" type="text" id="txtSupporterKey" label="${LabelSupporterKey}" autocomplete="off" />
<div class="fieldDescription"> <div class="fieldDescription">
${LabelSupporterKeyHelp} ${LabelSupporterKeyHelp}
</div> </div>