+
-
diff --git a/dashboard-ui/bower_components/emby-webcomponents/.bower.json b/dashboard-ui/bower_components/emby-webcomponents/.bower.json
index 79419a1a0b..e757b139c8 100644
--- a/dashboard-ui/bower_components/emby-webcomponents/.bower.json
+++ b/dashboard-ui/bower_components/emby-webcomponents/.bower.json
@@ -15,12 +15,12 @@
},
"devDependencies": {},
"ignore": [],
- "version": "1.4.63",
- "_release": "1.4.63",
+ "version": "1.4.69",
+ "_release": "1.4.69",
"_resolution": {
"type": "version",
- "tag": "1.4.63",
- "commit": "c557118405664924ccb91634f8dcf9aa2667bcb1"
+ "tag": "1.4.69",
+ "commit": "24a5ea44282dc2e0a537c6245aedd88877ebb9ad"
},
"_source": "https://github.com/MediaBrowser/emby-webcomponents.git",
"_target": "^1.2.0",
diff --git a/dashboard-ui/bower_components/emby-webcomponents/alphapicker/alphapicker.js b/dashboard-ui/bower_components/emby-webcomponents/alphapicker/alphapicker.js
index 8f790d7a77..db53a6583a 100644
--- a/dashboard-ui/bower_components/emby-webcomponents/alphapicker/alphapicker.js
+++ b/dashboard-ui/bower_components/emby-webcomponents/alphapicker/alphapicker.js
@@ -24,8 +24,9 @@ define(['focusManager', 'css!./style.css', 'clearButtonStyle', 'paper-icon-butto
html += '
';
if (options.mode == 'keyboard') {
+ // space_bar icon
html += '';
} else {
letters = ['#'];
@@ -36,8 +37,9 @@ define(['focusManager', 'css!./style.css', 'clearButtonStyle', 'paper-icon-butto
html += letters.map(getLetterButton).join('');
if (options.mode == 'keyboard') {
+ // backspace icon
html += '';
html += '
';
diff --git a/dashboard-ui/bower_components/emby-webcomponents/browser.js b/dashboard-ui/bower_components/emby-webcomponents/browser.js
index 476da407a0..bb64e7b349 100644
--- a/dashboard-ui/bower_components/emby-webcomponents/browser.js
+++ b/dashboard-ui/bower_components/emby-webcomponents/browser.js
@@ -28,6 +28,40 @@
return false;
}
+ function isStyleSupported(prop, value) {
+ // If no value is supplied, use "inherit"
+ value = arguments.length === 2 ? value : 'inherit';
+ // Try the native standard method first
+ if ('CSS' in window && 'supports' in window.CSS) {
+ return window.CSS.supports(prop, value);
+ }
+ // Check Opera's native method
+ if ('supportsCSS' in window) {
+ return window.supportsCSS(prop, value);
+ }
+
+ // need try/catch because it's failing on tizen
+
+ try {
+ // Convert to camel-case for DOM interactions
+ var camel = prop.replace(/-([a-z]|[0-9])/ig, function (all, letter) {
+ return (letter + '').toUpperCase();
+ });
+ // Check if the property is supported
+ var support = (camel in el.style);
+ // Create test element
+ var el = document.createElement('div');
+ // Assign the property and value to invoke
+ // the CSS interpreter
+ el.style.cssText = prop + ':' + value;
+ // Ensure both the property and value are
+ // supported and return
+ return support && (el.style[camel] !== '');
+ } catch (err) {
+ return false;
+ }
+ }
+
var uaMatch = function (ua) {
ua = ua.toLowerCase();
@@ -106,7 +140,11 @@
browser.tv = isTv();
browser.operaTv = browser.tv && userAgent.toLowerCase().indexOf('opr/') != -1;
- browser.noFlex = (browser.tv && !browser.chrome && !browser.operaTv) || browser.ps4;
+ if (!isStyleSupported('display', 'flex')) {
+ browser.noFlex = true;
+ }
+
+ //browser.noFlex = (browser.tv && !browser.chrome && !browser.operaTv) || browser.ps4;
return browser;
});
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/emby-webcomponents/dialoghelper/dialoghelper.css b/dashboard-ui/bower_components/emby-webcomponents/dialoghelper/dialoghelper.css
index e2e982b3d6..6ad6be829a 100644
--- a/dashboard-ui/bower_components/emby-webcomponents/dialoghelper/dialoghelper.css
+++ b/dashboard-ui/bower_components/emby-webcomponents/dialoghelper/dialoghelper.css
@@ -71,7 +71,7 @@
.dialog .buttons {
position: relative;
- padding: 8px 8px 0 24px;
+ padding: 8px 8px 8px 24px;
margin: 0;
color: #3f51b5;
display: -ms-flexbox;
diff --git a/dashboard-ui/bower_components/emby-webcomponents/emby-slider/emby-slider.css b/dashboard-ui/bower_components/emby-webcomponents/emby-slider/emby-slider.css
index ccbb2325f4..12be938ee0 100644
--- a/dashboard-ui/bower_components/emby-webcomponents/emby-slider/emby-slider.css
+++ b/dashboard-ui/bower_components/emby-webcomponents/emby-slider/emby-slider.css
@@ -153,11 +153,13 @@ _:-ms-input-placeholder, :root .mdl-slider.mdl-slider {
}
.layout-tv .mdl-slider::-webkit-slider-thumb {
- display: none;
+ width: 0;
+ height: 0;
}
.layout-tv .mdl-slider:hover::-webkit-slider-thumb {
- display: block;
+ width: 16px;
+ height: 16px;
}
.mdl-slider.is-lowest-value::-webkit-slider-thumb {
diff --git a/dashboard-ui/bower_components/emby-webcomponents/emby-slider/emby-slider.js b/dashboard-ui/bower_components/emby-webcomponents/emby-slider/emby-slider.js
index 20a21c28ca..7e1ef758cb 100644
--- a/dashboard-ui/bower_components/emby-webcomponents/emby-slider/emby-slider.js
+++ b/dashboard-ui/bower_components/emby-webcomponents/emby-slider/emby-slider.js
@@ -22,18 +22,20 @@
// range.classList.remove('is-lowest-value');
//}
- if (backgroundLower) {
- var fraction = (range.value - range.min) / (range.max - range.min);
+ var value = range.value;
+ requestAnimationFrame(function () {
- backgroundLower.style.flex = fraction;
- backgroundLower.style.webkitFlex = fraction;
- backgroundUpper.style.flex = 1 - fraction;
- backgroundUpper.style.webkitFlex = 1 - fraction;
- }
+ if (backgroundLower) {
+ var fraction = (value - range.min) / (range.max - range.min);
+
+ backgroundLower.style.flex = fraction;
+ backgroundUpper.style.flex = 1 - fraction;
+ }
+ });
}
function updateBubble(range, bubble) {
-
+
var value = range.value;
bubble.style.left = (value - 1) + '%';
@@ -71,15 +73,22 @@
var backgroundUpper = containerElement.querySelector('.mdl-slider__background-upper');
var sliderBubble = containerElement.querySelector('.sliderBubble');
+ var hasHideClass = sliderBubble.classList.contains('hide');
+
this.addEventListener('input', function (e) {
this.dragging = true;
updateBubble(this, sliderBubble);
- sliderBubble.classList.remove('hide');
+
+ if (hasHideClass) {
+ sliderBubble.classList.remove('hide');
+ hasHideClass = false;
+ }
});
this.addEventListener('change', function () {
this.dragging = false;
updateValues(this, backgroundLower, backgroundUpper);
sliderBubble.classList.add('hide');
+ hasHideClass = true;
});
if (!supportsNativeProgressStyle) {
diff --git a/dashboard-ui/bower_components/emby-webcomponents/inputmanager.js b/dashboard-ui/bower_components/emby-webcomponents/inputmanager.js
new file mode 100644
index 0000000000..d1b4b2b2a7
--- /dev/null
+++ b/dashboard-ui/bower_components/emby-webcomponents/inputmanager.js
@@ -0,0 +1,242 @@
+define(['playbackManager', 'focusManager', 'embyRouter'], function (playbackManager, focusManager, embyRouter) {
+
+ var lastInputTime = new Date().getTime();
+
+ function notify() {
+ lastInputTime = new Date().getTime();
+ }
+
+ function idleTime() {
+ return new Date().getTime() - lastInputTime;
+ }
+
+ function select(sourceElement) {
+
+ sourceElement.click();
+ }
+
+ var eventListenerCount = 0;
+ function on(scope, fn) {
+ eventListenerCount++;
+ scope.addEventListener('command', fn);
+ }
+
+ function off(scope, fn) {
+
+ if (eventListenerCount) {
+ eventListenerCount--;
+ }
+
+ scope.removeEventListener('command', fn);
+ }
+
+ var commandTimes = {};
+
+ function checkCommandTime(command) {
+
+ var last = commandTimes[command] || 0;
+ var now = new Date().getTime();
+
+ if ((now - last) < 1000) {
+ return false;
+ }
+
+ commandTimes[command] = now;
+ return true;
+ }
+
+ function handleCommand(name, options) {
+
+ notify();
+
+ var sourceElement = (options ? options.sourceElement : null);
+
+ if (sourceElement) {
+ sourceElement = focusManager.focusableParent(sourceElement);
+ }
+
+ sourceElement = sourceElement || document.activeElement || window;
+
+ if (eventListenerCount) {
+ var customEvent = new CustomEvent("command", {
+ detail: {
+ command: name
+ },
+ bubbles: true,
+ cancelable: true
+ });
+
+ var eventResult = sourceElement.dispatchEvent(customEvent);
+ if (!eventResult) {
+ // event cancelled
+ return;
+ }
+ }
+
+ switch (name) {
+
+ case 'up':
+ focusManager.moveUp(sourceElement);
+ break;
+ case 'down':
+ focusManager.moveDown(sourceElement);
+ break;
+ case 'left':
+ focusManager.moveLeft(sourceElement);
+ break;
+ case 'right':
+ focusManager.moveRight(sourceElement);
+ break;
+ case 'home':
+ embyRouter.goHome();
+ break;
+ case 'settings':
+ embyRouter.showSettings();
+ break;
+ case 'back':
+ embyRouter.back();
+ break;
+ case 'forward':
+ // TODO
+ break;
+ case 'select':
+ select(sourceElement);
+ break;
+ case 'pageup':
+ // TODO
+ break;
+ case 'pagedown':
+ // TODO
+ break;
+ case 'end':
+ // TODO
+ break;
+ case 'menu':
+ case 'info':
+ // TODO
+ break;
+ case 'next':
+ if (playbackManager.isPlayingVideo()) {
+ playbackManager.nextChapter();
+ } else if (playbackManager.isPlaying()) {
+ playbackManager.nextTrack();
+ }
+ break;
+ case 'previous':
+
+ if (playbackManager.isPlayingVideo()) {
+ playbackManager.previousChapter();
+ } else if (playbackManager.isPlaying()) {
+ playbackManager.previousTrack();
+ }
+ break;
+ case 'guide':
+ embyRouter.showGuide();
+ break;
+ case 'recordedtv':
+ embyRouter.showRecordedTV();
+ break;
+ case 'record':
+ // TODO
+ break;
+ case 'livetv':
+ embyRouter.showLiveTV();
+ break;
+ case 'mute':
+ playbackManager.mute();
+ break;
+ case 'unmute':
+ playbackManager.unMute();
+ break;
+ case 'togglemute':
+ playbackManager.toggleMute();
+ break;
+ case 'volumedown':
+ playbackManager.volumeDown();
+ break;
+ case 'volumeup':
+ playbackManager.volumeUp();
+ break;
+ case 'play':
+ playbackManager.unpause();
+ break;
+ case 'pause':
+ playbackManager.pause();
+ break;
+ case 'playpause':
+ playbackManager.playPause();
+ break;
+ case 'stop':
+ if (checkCommandTime('stop')) {
+ playbackManager.stop();
+ }
+ break;
+ case 'changezoom':
+ // TODO
+ break;
+ case 'changeaudiotrack':
+ // TODO
+ break;
+ case 'changesubtitletrack':
+ break;
+ case 'search':
+ embyRouter.showSearch();
+ break;
+ case 'favorites':
+ embyRouter.showFavorites();
+ break;
+ case 'fastforward':
+ playbackManager.fastForward();
+ break;
+ case 'rewind':
+ playbackManager.rewind();
+ break;
+ case 'togglefullscreen':
+ // TODO
+ break;
+ case 'disabledisplaymirror':
+ playbackManager.enableDisplayMirroring(false);
+ break;
+ case 'enabledisplaymirror':
+ playbackManager.enableDisplayMirroring(true);
+ break;
+ case 'toggledisplaymirror':
+ playbackManager.toggleDisplayMirroring();
+ break;
+ case 'movies':
+ // TODO
+ break;
+ case 'music':
+ // TODO
+ break;
+ case 'tv':
+ // TODO
+ break;
+ case 'latestepisodes':
+ // TODO
+ break;
+ case 'nowplaying':
+ // TODO
+ break;
+ case 'upcomingtv':
+ // TODO
+ break;
+ case 'nextup':
+ // TODO
+ break;
+ default:
+ break;
+ }
+ }
+
+ document.addEventListener('click', notify);
+
+ return {
+ trigger: handleCommand,
+ handle: handleCommand,
+ notify: notify,
+ idleTime: idleTime,
+ on: on,
+ off: off
+ };
+});
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/emby-webcomponents/listview/listview.css b/dashboard-ui/bower_components/emby-webcomponents/listview/listview.css
index 20d11ca02f..4b6d505654 100644
--- a/dashboard-ui/bower_components/emby-webcomponents/listview/listview.css
+++ b/dashboard-ui/bower_components/emby-webcomponents/listview/listview.css
@@ -11,7 +11,7 @@ button.listItem {
}
.listItem {
- display: flex;
+ display: block;
align-items: center;
text-align: left;
padding: 0 1em !important;
@@ -26,12 +26,16 @@ button.listItem {
flex-shrink: 0;
}
+ .listItem > * {
+ display: inline-block;
+ vertical-align: middle;
+ }
+
.listItemBody {
flex-grow: 1;
padding: 0 1.15em;
overflow: hidden;
text-overflow: ellipsis;
- display: flex;
flex-direction: column;
vertical-align: middle;
justify-content: center;
@@ -128,3 +132,11 @@ button.listItem {
box-shadow: none !important;
background-color: transparent !important;
}
+
+
+@supports (display: flex) {
+
+ .listItem, .listItemBody {
+ display: flex;
+ }
+}
diff --git a/dashboard-ui/bower_components/emby-webcomponents/router.js b/dashboard-ui/bower_components/emby-webcomponents/router.js
index dfee07d3dc..78c235c773 100644
--- a/dashboard-ui/bower_components/emby-webcomponents/router.js
+++ b/dashboard-ui/bower_components/emby-webcomponents/router.js
@@ -19,11 +19,20 @@ define(['loading', 'viewManager', 'skinManager', 'pluginManager', 'backdrop', 'b
showSearch: function () {
skinManager.getCurrentSkin().search();
},
+ showGenre: function (options) {
+ skinManager.getCurrentSkin().showGenre(options);
+ },
showGuide: function () {
skinManager.getCurrentSkin().showGuide();
},
showLiveTV: function () {
skinManager.getCurrentSkin().showLiveTV();
+ },
+ showRecordedTV: function () {
+ skinManager.getCurrentSkin().showRecordedTV();
+ },
+ showFavorites: function () {
+ skinManager.getCurrentSkin().showFavorites();
}
};
diff --git a/dashboard-ui/bower_components/emby-webcomponents/slideshow/slideshow.js b/dashboard-ui/bower_components/emby-webcomponents/slideshow/slideshow.js
index cd89096aab..c42a776ad7 100644
--- a/dashboard-ui/bower_components/emby-webcomponents/slideshow/slideshow.js
+++ b/dashboard-ui/bower_components/emby-webcomponents/slideshow/slideshow.js
@@ -21,26 +21,6 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f
options.tag = item.AlbumPrimaryImageTag;
return apiClient.getScaledImageUrl(item.AlbumId, options);
}
-
- //else if (item.AlbumId && item.SeriesPrimaryImageTag) {
-
- // imgUrl = ApiClient.getScaledImageUrl(item.SeriesId, {
- // type: "Primary",
- // width: downloadWidth,
- // tag: item.SeriesPrimaryImageTag,
- // minScale: minScale
- // });
-
- //}
- //else if (item.ParentPrimaryImageTag) {
-
- // imgUrl = ApiClient.getImageUrl(item.ParentPrimaryImageItemId, {
- // type: "Primary",
- // width: downloadWidth,
- // tag: item.ParentPrimaryImageTag,
- // minScale: minScale
- // });
- //}
}
return null;
diff --git a/dashboard-ui/bower_components/emby-webcomponents/strings/en-US.json b/dashboard-ui/bower_components/emby-webcomponents/strings/en-US.json
index 5d4ee9e1c5..5d410526e3 100644
--- a/dashboard-ui/bower_components/emby-webcomponents/strings/en-US.json
+++ b/dashboard-ui/bower_components/emby-webcomponents/strings/en-US.json
@@ -86,5 +86,11 @@
"ReplaceAllMetadata": "Replace all metadata",
"SearchForMissingMetadata": "Search for missing metadata",
"LabelRefreshMode": "Refresh mode:",
+ "NoItemsFound": "No items found.",
+ "HeaderSaySomethingLike": "Say Something Like...",
+ "ButtonTryAgain": "Try Again",
+ "HeaderYouSaid": "You Said...",
+ "MessageWeDidntRecognizeCommand": "We're sorry, we didn't recognize that command.",
+ "MessageIfYouBlockedVoice": "If you denied voice access to the app you'll need to reconfigure before trying again.",
"RefreshDialogHelp": "Metadata is refreshed based on settings and internet services that are enabled in the Emby Server dashboard."
}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/emby-webcomponents/viewmanager/viewmanager.js b/dashboard-ui/bower_components/emby-webcomponents/viewmanager/viewmanager.js
index 0dcd7f9b6c..c47efcc62d 100644
--- a/dashboard-ui/bower_components/emby-webcomponents/viewmanager/viewmanager.js
+++ b/dashboard-ui/bower_components/emby-webcomponents/viewmanager/viewmanager.js
@@ -1,4 +1,4 @@
-define(['viewcontainer', 'focusManager', 'queryString', 'connectionManager', 'events'], function (viewcontainer, focusManager, queryString, connectionManager, events) {
+define(['viewcontainer', 'focusManager', 'queryString', 'layoutManager'], function (viewcontainer, focusManager, queryString, layoutManager) {
var currentView;
var dispatchPageEvents;
@@ -51,7 +51,7 @@ define(['viewcontainer', 'focusManager', 'queryString', 'connectionManager', 'ev
focusManager.autoFocus(view);
}
}
- else {
+ else if (!layoutManager.mobile) {
if (view.activeElement && document.body.contains(view.activeElement) && focusManager.isCurrentlyFocusable(view.activeElement)) {
focusManager.focus(view.activeElement);
} else {
diff --git a/dashboard-ui/voice/Readme.md b/dashboard-ui/bower_components/emby-webcomponents/voice/Readme.md
similarity index 100%
rename from dashboard-ui/voice/Readme.md
rename to dashboard-ui/bower_components/emby-webcomponents/voice/Readme.md
diff --git a/dashboard-ui/bower_components/emby-webcomponents/voice/commands/controlcommands.js b/dashboard-ui/bower_components/emby-webcomponents/voice/commands/controlcommands.js
new file mode 100644
index 0000000000..c1b46cc0e7
--- /dev/null
+++ b/dashboard-ui/bower_components/emby-webcomponents/voice/commands/controlcommands.js
@@ -0,0 +1,10 @@
+define(['playbackManager'], function (playbackManager) {
+
+ return function (result) {
+ result.success = true;
+ if (result.properties.devicename) {
+ playbackManager.trySetActiveDeviceName(result.properties.devicename);
+ }
+ return;
+ }
+});
\ No newline at end of file
diff --git a/dashboard-ui/voice/commands/disablecommands.js b/dashboard-ui/bower_components/emby-webcomponents/voice/commands/disablecommands.js
similarity index 61%
rename from dashboard-ui/voice/commands/disablecommands.js
rename to dashboard-ui/bower_components/emby-webcomponents/voice/commands/disablecommands.js
index 6338fecd5f..20f1e004f6 100644
--- a/dashboard-ui/voice/commands/disablecommands.js
+++ b/dashboard-ui/bower_components/emby-webcomponents/voice/commands/disablecommands.js
@@ -1,11 +1,10 @@
-
-define([], function () {
+define(['inputManager'], function (inputManager) {
- return function (result) {
+ return function (result) {
result.success = true;
switch (result.item.deviceid) {
case 'displaymirroring':
- MediaController.enableDisplayMirroring(false);
+ inputManager.trigger('disabledisplaymirror');
break;
default:
result.success = false;
diff --git a/dashboard-ui/voice/commands/enablecommands.js b/dashboard-ui/bower_components/emby-webcomponents/voice/commands/enablecommands.js
similarity index 69%
rename from dashboard-ui/voice/commands/enablecommands.js
rename to dashboard-ui/bower_components/emby-webcomponents/voice/commands/enablecommands.js
index e790731f48..af88c8e432 100644
--- a/dashboard-ui/voice/commands/enablecommands.js
+++ b/dashboard-ui/bower_components/emby-webcomponents/voice/commands/enablecommands.js
@@ -1,11 +1,10 @@
-
-define([], function () {
+define(['inputManager'], function (inputManager) {
return function (result) {
result.success = true;
switch (result.item.deviceid) {
case 'displaymirroring':
- MediaController.enableDisplayMirroring(true);
+ inputManager.trigger('enabledisplaymirror');
break;
default:
result.success = false;
diff --git a/dashboard-ui/voice/commands/playcommands.js b/dashboard-ui/bower_components/emby-webcomponents/voice/commands/playcommands.js
similarity index 85%
rename from dashboard-ui/voice/commands/playcommands.js
rename to dashboard-ui/bower_components/emby-webcomponents/voice/commands/playcommands.js
index ce2b500fde..7aedf49c6f 100644
--- a/dashboard-ui/voice/commands/playcommands.js
+++ b/dashboard-ui/bower_components/emby-webcomponents/voice/commands/playcommands.js
@@ -1,5 +1,4 @@
-
-define([], function () {
+define(['connectionManager', 'playbackManager', 'globalize'], function (connectionManager, playbackManager, globalize) {
///
Play items.
///
The items.
@@ -16,13 +15,13 @@ define([], function () {
});
if (items.length) {
- MediaController.play({
+ playbackManager.play({
ids: items
});
}
else {
require(['toast'], function (toast) {
- toast(Globalize.translate('MessageNoItemsFound'));
+ toast(globalize.translate('sharedcomponents#NoItemsFound'));
});
}
}
@@ -63,9 +62,10 @@ define([], function () {
query.IncludeItemTypes = result.item.itemType;
}
+ var apiClient = connectionManager.currentApiClient();
if (result.item.sourceid === 'nextup') {
- ApiClient.getNextUpEpisodes(query).then(function (queryResult) {
+ apiClient.getNextUpEpisodes(query).then(function (queryResult) {
playItems(queryResult.Items, result.item.shuffle);
@@ -93,7 +93,7 @@ define([], function () {
}
- ApiClient.getItems(Dashboard.getCurrentUserId(), query).then(function (queryResult) {
+ apiClient.getItems(apiClient.getCurrentUserId(), query).then(function (queryResult) {
playItems(queryResult.Items, result.item.shuffle);
});
diff --git a/dashboard-ui/bower_components/emby-webcomponents/voice/commands/searchcommands.js b/dashboard-ui/bower_components/emby-webcomponents/voice/commands/searchcommands.js
new file mode 100644
index 0000000000..715114f9ca
--- /dev/null
+++ b/dashboard-ui/bower_components/emby-webcomponents/voice/commands/searchcommands.js
@@ -0,0 +1,11 @@
+define(['inputManager'], function (inputManager) {
+
+ return function (result) {
+ switch (result.item.deviceid) {
+ default:
+ result.success = false;
+ return;
+ }
+ }
+
+});
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/emby-webcomponents/voice/commands/showcommands.js b/dashboard-ui/bower_components/emby-webcomponents/voice/commands/showcommands.js
new file mode 100644
index 0000000000..4446af9b53
--- /dev/null
+++ b/dashboard-ui/bower_components/emby-webcomponents/voice/commands/showcommands.js
@@ -0,0 +1,98 @@
+define(['inputManager', 'connectionManager', 'embyRouter'], function (inputManager, connectionManager, embyRouter) {
+
+ return function (result) {
+ result.success = true;
+ switch (result.item.sourceid) {
+ case 'music':
+ inputManager.trigger('music');
+ break;
+ case 'movies':
+ if (result.properties.movieName) {
+
+ //TODO: Find a way to display movie
+ var query = {
+ Limit: 1,
+ UserId: result.userId,
+ ExcludeLocationTypes: "Virtual",
+ NameStartsWith: result.item.itemType
+ };
+
+ if (result.item.itemType) {
+ query.IncludeItemTypes = result.item.itemType;
+ }
+
+ var apiClient = connectionManager.currentApiClient();
+ apiClient.getItems(apiClient.getCurrentUserId(), query).then(function (queryResult) {
+
+ if (queryResult.Items.length) {
+ embyRouter.showItem(queryResult.Items[0]);
+ }
+ });
+
+ } else {
+ inputManager.trigger('movies');
+ }
+
+ break;
+ case 'tvseries':
+ inputManager.trigger('tv');
+ break;
+ case 'livetv':
+ var act = result.item.menuid;
+ if (act) {
+ if (act.indexOf('livetv') != -1) {
+ inputManager.trigger('livetv');
+ } else if (act.indexOf('guide') != -1) {
+ inputManager.trigger('guide');
+ } else if (act.indexOf('channels') != -1) {
+ inputManager.trigger('livetv');
+ } else if (act.indexOf('recordings') != -1) {
+ inputManager.trigger('recordedtv');
+ } else if (act.indexOf('scheduled') != -1) {
+ inputManager.trigger('recordedtv');
+ } else if (act.indexOf('series') != -1) {
+ inputManager.trigger('recordedtv');
+ } else {
+ inputManager.trigger('livetv');
+ }
+ } else {
+ inputManager.trigger('livetv');
+ }
+ break;
+ case 'recordings':
+ inputManager.trigger('recordedtv');
+ break;
+ case 'latestepisodes':
+ inputManager.trigger('latestepisodes');
+ case 'home':
+ var act = result.item.menuid;
+ if (act) {
+ if (act.indexOf('home') != -1) {
+ inputManager.trigger('home');
+ }
+ else if (act.indexOf('nextup') != -1) {
+ inputManager.trigger('nextup');
+ }
+ else if (act.indexOf('favorites') != -1) {
+ inputManager.trigger('favorites');
+ } else if (act.indexOf('upcoming') != -1) {
+ inputManager.trigger('upcomingtv');
+ }
+ else if (act.indexOf('nowplaying') != -1) {
+ inputManager.trigger('nowplaying');
+ }
+ else {
+ inputManager.trigger('home');
+ }
+ } else {
+ inputManager.trigger('home');
+ }
+ case 'group':
+ break;
+ default:
+ result.success = false;
+ return;
+ }
+
+ }
+});
\ No newline at end of file
diff --git a/dashboard-ui/voice/commands/togglecommands.js b/dashboard-ui/bower_components/emby-webcomponents/voice/commands/togglecommands.js
similarity index 69%
rename from dashboard-ui/voice/commands/togglecommands.js
rename to dashboard-ui/bower_components/emby-webcomponents/voice/commands/togglecommands.js
index 526668229c..9fa7382bd0 100644
--- a/dashboard-ui/voice/commands/togglecommands.js
+++ b/dashboard-ui/bower_components/emby-webcomponents/voice/commands/togglecommands.js
@@ -1,16 +1,14 @@
-
-define([], function () {
+define(['inputManager'], function (inputManager) {
return function (result) {
result.success = true;
switch (result.item.deviceid) {
case 'displaymirroring':
- MediaController.toggleDisplayMirroring();
+ inputManager.trigger('toggledisplaymirror');
break;
default:
result.success = false;
return;
}
}
-
});
\ No newline at end of file
diff --git a/dashboard-ui/voice/grammar/en-US.json b/dashboard-ui/bower_components/emby-webcomponents/voice/grammar/en-US.json
similarity index 99%
rename from dashboard-ui/voice/grammar/en-US.json
rename to dashboard-ui/bower_components/emby-webcomponents/voice/grammar/en-US.json
index 7c3e4f07e9..5c79188a01 100644
--- a/dashboard-ui/voice/grammar/en-US.json
+++ b/dashboard-ui/bower_components/emby-webcomponents/voice/grammar/en-US.json
@@ -139,7 +139,7 @@
"commandtemplates": [
"Play music",
"Play my music",
- "Listen to my music "
+ "Listen to my music"
]
},
{
@@ -188,7 +188,7 @@
"commandtemplates": [
"Play music",
"Play my music",
- "Listen to my music "
+ "Listen to my music"
]
},
{
@@ -200,7 +200,7 @@
"commandtemplates": [
"Play music",
"Play my music",
- "Listen to my music ",
+ "Listen to my music",
"shuffle my favorite songs"
]
}
diff --git a/dashboard-ui/voice/grammar/grammar.json b/dashboard-ui/bower_components/emby-webcomponents/voice/grammar/grammar.json
similarity index 100%
rename from dashboard-ui/voice/grammar/grammar.json
rename to dashboard-ui/bower_components/emby-webcomponents/voice/grammar/grammar.json
diff --git a/dashboard-ui/voice/grammarprocessor.js b/dashboard-ui/bower_components/emby-webcomponents/voice/grammarprocessor.js
similarity index 100%
rename from dashboard-ui/voice/grammarprocessor.js
rename to dashboard-ui/bower_components/emby-webcomponents/voice/grammarprocessor.js
diff --git a/dashboard-ui/voice/voice.css b/dashboard-ui/bower_components/emby-webcomponents/voice/voice.css
similarity index 91%
rename from dashboard-ui/voice/voice.css
rename to dashboard-ui/bower_components/emby-webcomponents/voice/voice.css
index 307b3e0036..a155574a86 100644
--- a/dashboard-ui/voice/voice.css
+++ b/dashboard-ui/bower_components/emby-webcomponents/voice/voice.css
@@ -1,5 +1,5 @@
.voiceHelpContent {
- max-width: 600px;
+ max-width: 700px;
margin: auto;
}
diff --git a/dashboard-ui/voice/voicecommands.js b/dashboard-ui/bower_components/emby-webcomponents/voice/voicecommands.js
similarity index 56%
rename from dashboard-ui/voice/voicecommands.js
rename to dashboard-ui/bower_components/emby-webcomponents/voice/voicecommands.js
index 26f25c4b40..0463cdf6e1 100644
--- a/dashboard-ui/voice/voicecommands.js
+++ b/dashboard-ui/bower_components/emby-webcomponents/voice/voicecommands.js
@@ -1,6 +1,6 @@
//
09.10.2015
//
voicecommands class
-define([], function () {
+define(['require'], function (require) {
///
Process the command.
///
Full pathname of the command file.
@@ -28,28 +28,28 @@ define([], function () {
switch (result.item.actionid) {
case 'show':
- processCommand('voice/commands/showcommands.js', result).then(function (result) { resolve(result); });
+ processCommand('./commands/showcommands.js', result).then(function (result) { resolve(result); });
break;
case 'play':
- processCommand('voice/commands/playcommands.js', result).then(function (result) { resolve(result); });
+ processCommand('./commands/playcommands.js', result).then(function (result) { resolve(result); });
break;
case 'shuffle':
- processCommand('voice/commands/playcommands.js', result).then(function (result) { resolve(result); });
+ processCommand('./commands/playcommands.js', result).then(function (result) { resolve(result); });
break;
case 'search':
- processCommand('voice/commands/searchcommands.js', result).then(function (result) { resolve(result); });
+ processCommand('./commands/searchcommands.js', result).then(function (result) { resolve(result); });
break;
case 'control':
- processCommand('voice/commands/controlcommands.js', result).then(function (result) { resolve(result); });
+ processCommand('./commands/controlcommands.js', result).then(function (result) { resolve(result); });
break;
case 'enable':
- processCommand('voice/commands/enablecommands.js', result).then(function (result) { resolve(result); });
+ processCommand('./commands/enablecommands.js', result).then(function (result) { resolve(result); });
break;
case 'disable':
- processCommand('voice/commands/disablecommands.js', result).then(function (result) { resolve(result); });
+ processCommand('./commands/disablecommands.js', result).then(function (result) { resolve(result); });
break;
case 'toggle':
- processCommand('voice/commands/togglecommands.js', result).then(function (result) { resolve(result); });
+ processCommand('./commands/togglecommands.js', result).then(function (result) { resolve(result); });
break;
default:
reject();
diff --git a/dashboard-ui/bower_components/emby-webcomponents/voice/voicedialog.js b/dashboard-ui/bower_components/emby-webcomponents/voice/voicedialog.js
new file mode 100644
index 0000000000..a7347339bc
--- /dev/null
+++ b/dashboard-ui/bower_components/emby-webcomponents/voice/voicedialog.js
@@ -0,0 +1,272 @@
+define(['dialogHelper', './voicereceiver', './voiceprocessor', 'globalize', 'emby-button', 'css!./voice.css', 'material-icons', 'css!./../formdialog'], function (dialogHelper, voicereceiver, voiceprocessor, globalize) {
+
+ var lang = 'en-US';
+
+ ///
Shuffle array.
+ ///
The array.
+ ///
array
+ function shuffleArray(array) {
+ var currentIndex = array.length, temporaryValue, randomIndex;
+
+ // While there remain elements to shuffle...
+ while (0 !== currentIndex) {
+
+ // Pick a remaining element...
+ randomIndex = Math.floor(Math.random() * currentIndex);
+ currentIndex -= 1;
+
+ // And swap it with the current element.
+ temporaryValue = array[currentIndex];
+ array[currentIndex] = array[randomIndex];
+ array[randomIndex] = temporaryValue;
+ }
+
+ return array;
+ }
+
+ ///
Gets sample commands.
+ ///
The sample commands.
+ function getSampleCommands(groupid) {
+
+ return voiceprocessor.getCommandGroups().then(function (commandGroups) {
+ groupid = typeof (groupid) !== 'undefined' ? groupid : '';
+
+ var commands = [];
+ commandGroups.map(function (group) {
+ if ((group.items && group.items.length > 0) && (groupid == group.groupid || groupid == '')) {
+
+ group.items.map(function (item) {
+
+ if (item.commandtemplates && item.commandtemplates.length > 0) {
+
+ item.commandtemplates.map(function (templates) {
+ commands.push(templates);
+ });
+ }
+
+ });
+ }
+ });
+
+ return shuffleArray(commands);
+ });
+ }
+
+ ///
Gets command group.
+ ///
The groupid.
+ ///
The command group.
+ function getCommandGroup(groupid) {
+ return voicereceiver.getCommandGroups()
+ .then(function (commandgroups) {
+ if (commandgroups) {
+ var idx = -1;
+
+ idx = commandgroups.map(function (e) { return e.groupid; }).indexOf(groupid);
+
+ if (idx > -1)
+ return commandgroups[idx];
+ else
+ return null;
+ } else
+ return null;
+ });
+ }
+
+ ///
Renders the sample commands.
+ ///
The element.
+ ///
The commands.
+ ///
.
+ function renderSampleCommands(elem, commands) {
+
+ commands.length = Math.min(commands.length, 4);
+
+ commands = commands.map(function (c) {
+
+ return '
"' + c + '"
';
+
+ }).join('');
+
+ elem.querySelector('.exampleCommands').innerHTML = commands;
+ }
+
+ var currentDialog;
+ ///
Shows the voice help.
+ ///
.
+ function showVoiceHelp(groupid, title) {
+
+ console.log("Showing Voice Help", groupid, title);
+
+ var isNewDialog = false;
+ var dlg;
+
+ if (!currentDialog) {
+
+ isNewDialog = true;
+
+ dlg = dialogHelper.createDialog({
+ size: 'medium',
+ removeOnClose: true
+ });
+
+ dlg.classList.add('ui-body-b');
+ dlg.classList.add('background-theme-b');
+
+ var html = '';
+ html += '';
+
+ html += '
';
+
+ html += '
';
+ html += '
';
+ html += '
';
+
+ html += '
';
+
+ html += '
' + globalize.translate('sharedcomponents#HeaderSaySomethingLike') + '
';
+
+ html += '
';
+ html += '
';
+
+ // defaultVoiceHelp
+ html += '
';
+
+ html += '
';
+ html += '
' + globalize.translate('sharedcomponents#HeaderYouSaid') + '
';
+ html +=
+ '
';
+ html += '
' + globalize.translate('sharedcomponents#MessageWeDidntRecognizeCommand') + '
';
+
+ html += '
';
+ html += '
';
+ html += '
' +
+ globalize.translate('sharedcomponents#MessageIfYouBlockedVoice') +
+ '
';
+
+ html += '
';
+
+ html +=
+ '
';
+
+ html += '
';
+ html += '
';
+ html += '
';
+
+ html += '
';
+
+ dlg.innerHTML = html;
+ document.body.appendChild(dlg);
+
+ dialogHelper.open(dlg);
+ currentDialog = dlg;
+
+ dlg.addEventListener('close', function () {
+ currentDialog = null;
+ });
+
+ function onCancelClick() {
+ voicereceiver.cancel();
+ dialogHelper.close(dlg);
+ }
+
+ var closeButtons = dlg.querySelectorAll('.btnCancelVoiceInput');
+ for (var i = 0, length = closeButtons.length; i < length; i++) {
+ closeButtons[i].addEventListener('click', onCancelClick);
+ }
+
+ dlg.querySelector('.btnRetry').addEventListener('click', function () {
+ dlg.querySelector('.unrecognizedCommand').classList.add('hide');
+ dlg.querySelector('.defaultVoiceHelp').classList.remove('hide');
+ listen();
+ });
+ }
+
+ dlg = currentDialog;
+
+ if (groupid) {
+ getCommandGroup(groupid)
+ .then(
+ function (grp) {
+ dlg.querySelector('#voiceDialogGroupName').innerText = ' ' + grp.name;
+ });
+
+
+ getSampleCommands(groupid)
+ .then(function (commands) {
+ renderSampleCommands(currentDialog, commands);
+ listen();
+ })
+ .catch(function (e) { console.log("Error", e); });
+ } else if (isNewDialog) {
+ getSampleCommands()
+ .then(function (commands) {
+ renderSampleCommands(currentDialog, commands);
+ });
+
+ }
+ }
+ function processInput(input) {
+ return voiceprocessor.processTranscript(input);
+ }
+
+ ///
Shows the unrecognized command help.
+ ///
.
+ function showUnrecognizedCommandHelp(command) {
+ //speak("I don't understend this command");
+ if (command)
+ currentDialog.querySelector('.voiceInputText').innerText = command;
+ currentDialog.querySelector('.unrecognizedCommand').classList.remove('hide');
+ currentDialog.querySelector('.defaultVoiceHelp').classList.add('hide');
+ }
+
+ ///
Shows the commands.
+ ///
The create user interface.
+ ///
.
+ function showCommands(result) {
+ //speak('Hello, what can I do for you?');
+ if (result)
+ showVoiceHelp(result.groupid, result.name);
+ else
+ showVoiceHelp();
+ }
+
+ function resetDialog() {
+ if (currentDialog) {
+ currentDialog.querySelector('.unrecognizedCommand').classList.add('hide');
+ currentDialog.querySelector('.defaultVoiceHelp').classList.remove('hide');
+ }
+ }
+ function showDialog() {
+ resetDialog();
+ showCommands();
+ listen();
+ }
+ function listen() {
+ voicereceiver.listenForCommand(lang || "en-US").then(processInput).then(function (data) {
+
+ closeDialog();
+
+ }, function (result) {
+ if (result.error == 'group') {
+ showVoiceHelp(result.item.groupid, result.groupName);
+ return;
+ }
+ showUnrecognizedCommandHelp(result.text || '');
+ });
+ }
+ function closeDialog() {
+ dialogHelper.close(currentDialog);
+ voicereceiver.cancel();
+ }
+
+ ///
An enum constant representing the window. voice input manager option.
+ return {
+ showDialog: showDialog
+ };
+
+});
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/emby-webcomponents/voice/voiceprocessor.js b/dashboard-ui/bower_components/emby-webcomponents/voice/voiceprocessor.js
new file mode 100644
index 0000000000..d193937b92
--- /dev/null
+++ b/dashboard-ui/bower_components/emby-webcomponents/voice/voiceprocessor.js
@@ -0,0 +1,55 @@
+define(['./voicecommands.js', './grammarprocessor.js', 'require'], function (voicecommands, grammarprocessor, require) {
+
+ var commandgroups;
+
+ function getCommandGroups() {
+
+ if (commandgroups) {
+ return Promise.resolve(commandgroups);
+ }
+
+ return new Promise(function (resolve, reject) {
+
+ var file = "grammar";
+
+ require(['text!./grammar/' + file + '.json'], function (response) {
+ commandgroups = JSON.parse(response);
+ resolve(commandgroups);
+ });
+ });
+ }
+ ///
Process the transcript described by text.
+ ///
The text.
+ ///
.
+ function processTranscript(text) {
+ if (text) {
+ var processor = grammarprocessor(commandgroups, text);
+ if (processor && processor.command) {
+ console.log("Command from Grammar Processor", processor);
+ return voicecommands(processor)
+ .then(function (result) {
+ console.log("Result of executed command", result);
+ if (result.item.actionid === 'show' && result.item.sourceid === 'group') {
+ return Promise.resolve({ error: "group", item: result.item, groupName: result.name });
+ } else {
+ return Promise.resolve({ item: result.item });
+ }
+ }, function () {
+ return Promise.reject({ error: "unrecognized-command", text: text });
+ });
+ } else {
+ return Promise.reject({ error: "unrecognized-command", text: text });
+ }
+
+ } else {
+ return Promise.reject({ error: "empty" });
+ }
+ }
+
+ ///
An enum constant representing the window. voice input manager option.
+ return {
+ processTranscript: processTranscript,
+ getCommandGroups: getCommandGroups
+ };
+
+});
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/emby-webcomponents/voice/voicereceiver.js b/dashboard-ui/bower_components/emby-webcomponents/voice/voicereceiver.js
new file mode 100644
index 0000000000..d25bd115fb
--- /dev/null
+++ b/dashboard-ui/bower_components/emby-webcomponents/voice/voicereceiver.js
@@ -0,0 +1,57 @@
+define([], function () {
+ var currentRecognition = null;
+
+
+ ///
Starts listening for voice commands
+ ///
.
+ function listenForCommand(lang) {
+ return new Promise(function (resolve, reject) {
+ cancelListener();
+
+ var recognition = new (window.SpeechRecognition ||
+ window.webkitSpeechRecognition ||
+ window.mozSpeechRecognition ||
+ window.oSpeechRecognition ||
+ window.msSpeechRecognition)();
+ recognition.lang = lang;
+
+ recognition.onresult = function (event) {
+ console.log(event);
+ if (event.results.length > 0) {
+ var resultInput = event.results[0][0].transcript || '';
+ resolve(resultInput);
+ }
+ };
+
+ recognition.onerror = function () {
+ reject({ error: event.error, message: event.message });
+ };
+
+ recognition.onnomatch = function () {
+ reject({ error: "no-match" });
+ };
+ currentRecognition = recognition;
+
+ currentRecognition.start();
+ });
+ }
+
+
+ ///
Cancel listener.
+ ///
.
+ function cancelListener() {
+
+ if (currentRecognition) {
+ currentRecognition.abort();
+ currentRecognition = null;
+ }
+
+ }
+
+ ///
An enum constant representing the window. voice input manager option.
+ return {
+ listenForCommand: listenForCommand,
+ cancel: cancelListener
+ };
+
+});
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/iron-icon/.bower.json b/dashboard-ui/bower_components/iron-icon/.bower.json
index f0167baf13..9784e3a3b7 100644
--- a/dashboard-ui/bower_components/iron-icon/.bower.json
+++ b/dashboard-ui/bower_components/iron-icon/.bower.json
@@ -32,14 +32,14 @@
"web-component-tester": "^4.0.0",
"webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
},
- "homepage": "https://github.com/polymerelements/iron-icon",
+ "homepage": "https://github.com/PolymerElements/iron-icon",
"_release": "1.0.8",
"_resolution": {
"type": "version",
"tag": "v1.0.8",
"commit": "f36b38928849ef3853db727faa8c9ef104d611eb"
},
- "_source": "git://github.com/polymerelements/iron-icon.git",
+ "_source": "git://github.com/PolymerElements/iron-icon.git",
"_target": "^1.0.0",
- "_originalSource": "polymerelements/iron-icon"
+ "_originalSource": "PolymerElements/iron-icon"
}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/iron-selector/.bower.json b/dashboard-ui/bower_components/iron-selector/.bower.json
index 01c5a1084b..955c9dc566 100644
--- a/dashboard-ui/bower_components/iron-selector/.bower.json
+++ b/dashboard-ui/bower_components/iron-selector/.bower.json
@@ -36,7 +36,7 @@
"tag": "v1.5.2",
"commit": "18e8e12dcd9a4560de480562f65935feed334b86"
},
- "_source": "git://github.com/polymerelements/iron-selector.git",
+ "_source": "git://github.com/PolymerElements/iron-selector.git",
"_target": "^1.0.0",
- "_originalSource": "polymerelements/iron-selector"
+ "_originalSource": "PolymerElements/iron-selector"
}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/polymer/polymer.html b/dashboard-ui/bower_components/polymer/polymer.html
index ff9405c9af..3e158701bb 100644
--- a/dashboard-ui/bower_components/polymer/polymer.html
+++ b/dashboard-ui/bower_components/polymer/polymer.html
@@ -768,7 +768,7 @@ prevent = dy > dx;
prevent = dx > dy;
}
if (prevent) {
-//ev.preventDefault();
+ev.preventDefault();
} else {
Gestures.prevent('track');
}
diff --git a/dashboard-ui/components/apphost.js b/dashboard-ui/components/apphost.js
index 0410a4ff24..6fc05e515b 100644
--- a/dashboard-ui/components/apphost.js
+++ b/dashboard-ui/components/apphost.js
@@ -75,6 +75,14 @@ define(['appStorage', 'browser'], function (appStorage, browser) {
return deviceName;
}
+ function supportsVoiceInput() {
+ return window.SpeechRecognition ||
+ window.webkitSpeechRecognition ||
+ window.mozSpeechRecognition ||
+ window.oSpeechRecognition ||
+ window.msSpeechRecognition;
+ }
+
var appInfo;
var version = window.dashboardVersion || '3.0';
@@ -96,6 +104,12 @@ define(['appStorage', 'browser'], function (appStorage, browser) {
'sharing'
];
+ features.push('externallinks');
+
+ if (supportsVoiceInput()) {
+ features.push('voiceinput');
+ }
+
return features.indexOf(command.toLowerCase()) != -1;
},
appInfo: function () {
diff --git a/dashboard-ui/components/tvproviders/xmltv.js b/dashboard-ui/components/tvproviders/xmltv.js
index 60d3a5e196..a63f26034a 100644
--- a/dashboard-ui/components/tvproviders/xmltv.js
+++ b/dashboard-ui/components/tvproviders/xmltv.js
@@ -159,7 +159,7 @@
}
self.submit = function () {
- page.querySelector('.btnSubmitListingsContainer').click();
+ page.querySelector('.btnSubmitListings').click();
};
function onSelectPathClick(e) {
diff --git a/dashboard-ui/components/viewcontainer-lite.js b/dashboard-ui/components/viewcontainer-lite.js
index 4cd059f0ae..252679a48c 100644
--- a/dashboard-ui/components/viewcontainer-lite.js
+++ b/dashboard-ui/components/viewcontainer-lite.js
@@ -50,13 +50,12 @@ define(['browser'], function (browser) {
dependencies.push('legacy/dashboard');
dependencies.push('legacy/selectmenu');
dependencies.push('jqmcontrolgroup');
+ dependencies.push('jqmlistview');
}
if (isPluginpage || (newView.classList && newView.classList.contains('type-interior'))) {
- dependencies.push('jqmlistview');
dependencies.push('scripts/notifications');
dependencies.push('dashboardcss');
- dependencies.push('emby-icons');
}
return new Promise(function (resolve, reject) {
diff --git a/dashboard-ui/css/librarybrowser.css b/dashboard-ui/css/librarybrowser.css
index 0c97cf0589..98f46c3219 100644
--- a/dashboard-ui/css/librarybrowser.css
+++ b/dashboard-ui/css/librarybrowser.css
@@ -1200,7 +1200,7 @@ span.itemCommunityRating:not(:empty) + .userDataIcons {
@media all and (max-width: 1200px) {
.listViewUserDataButtons {
- display: none;
+ display: none !important;
}
}
diff --git a/dashboard-ui/css/librarymenu.css b/dashboard-ui/css/librarymenu.css
index e7052af336..74a2430c2b 100644
--- a/dashboard-ui/css/librarymenu.css
+++ b/dashboard-ui/css/librarymenu.css
@@ -135,25 +135,11 @@
.libraryViewNav {
overflow: hidden;
- position: fixed;
- right: 0;
- left: 0;
- top: 50px;
z-index: 999;
text-align: center;
text-transform: uppercase;
white-space: nowrap;
padding: 0 0 0;
- box-shadow: 0 2px 2px 0 rgba(0,0,0,.14),1px 5px 1px rgba(0,0,0,.12);
-}
-
- .libraryViewNav.bottom {
- top: auto !important;
- bottom: 0;
- }
-
-
-.libraryViewNav {
display: flex;
display: block;
text-align: center;
@@ -161,32 +147,45 @@
align-items: center;
}
- .libraryViewNav .pageTabButton {
- background: transparent;
- border: 0 !important;
- cursor: pointer;
- outline: none !important;
- width: auto;
- font-family: inherit;
- font-size: inherit;
- color: #aaa !important;
- display: inline-block;
- vertical-align: middle;
- flex-shrink: 0;
- margin: 0;
- padding: 1.2em .9em;
- transition: none !important;
- position: relative;
- text-transform: uppercase;
- font-weight: bold !important;
- height: auto;
- min-width: initial;
- line-height: initial;
- border-radius: 0 !important;
- overflow: hidden;
- }
+.ui-body-b .libraryViewNav {
+ box-shadow: 0 2px 2px 0 rgba(0,0,0,.14),1px 5px 1px rgba(0,0,0,.12);
+ position: fixed;
+ right: 0;
+ left: 0;
+ top: 50px;
+}
- /*.libraryViewNav .pageTabButton:hover {
+.libraryViewNav.bottom {
+ top: auto !important;
+ bottom: 0;
+}
+
+.pageTabButton {
+ background: transparent;
+ border: 0 !important;
+ cursor: pointer;
+ outline: none !important;
+ width: auto;
+ font-family: inherit;
+ font-size: inherit;
+ color: #aaa !important;
+ display: inline-block;
+ vertical-align: middle;
+ flex-shrink: 0;
+ margin: 0;
+ padding: 1.2em .9em;
+ transition: none !important;
+ position: relative;
+ text-transform: uppercase;
+ font-weight: bold !important;
+ height: auto;
+ min-width: initial;
+ line-height: initial;
+ border-radius: 0 !important;
+ overflow: hidden;
+}
+
+ /*.libraryViewNav .pageTabButton:hover {
background-color: transparent;
}
@@ -194,13 +193,13 @@
background-color: rgba(100,100,100, 0.20);
}*/
- .libraryViewNav .pageTabButton:focus {
- font-weight: bold !important;
- }
+ .pageTabButton:focus {
+ font-weight: bold !important;
+ }
- .libraryViewNav .pageTabButton.is-active {
- color: #52B54B !important;
- }
+ .pageTabButton.is-active {
+ color: #52B54B !important;
+ }
.pageTabButtonSelectionBar {
position: absolute;
@@ -218,7 +217,7 @@
background: #52B54B;
}
-.viewMenuBar, .libraryViewNav {
+.viewMenuBar, .ui-body-b .libraryViewNav {
background-color: #2b2b2b;
color: #fff;
}
@@ -252,63 +251,15 @@
width: 100%;
}
- .viewMenuBarTabs paper-tabs {
- background: none;
- box-shadow: none;
- }
-
- .viewMenuBarTabs .paperTabLink {
- align-items: center;
- justify-content: center;
- display: flex;
- }
-
-
- .viewMenuBarTabs #tabsContent {
- display: block !important;
- width: 100%;
- }
-
- .viewMenuBarTabs #tabsContainer {
- margin: auto;
- -ms-flex: none;
- -webkit-flex: none;
- flex: none;
- flex-shrink: 0;
- flex-grow: 1;
- touch-action: auto !important;
- }
-
- .viewMenuBarTabs paper-tabs {
- overflow: visible !important;
- }
-
.viewMenuBarTabs .paperTabLink {
padding-left: 1.5em;
padding-right: 1.5em;
}
-.viewMenuBar paper-icon-button.paper-tabs {
- display: none !important;
-}
-
.viewMenuBar.semiTransparent {
background-color: rgba(15, 15, 15, .3);
}
-.paperLibraryViewNav {
- background-color: transparent !important;
-}
-
-.libraryViewNav iron-icon {
- display: none;
-}
-
-.libraryViewNav::-webkit-scrollbar {
- height: 0 !important;
- display: none;
-}
-
.viewMenuLink {
text-decoration: none;
color: #eee !important;
@@ -469,13 +420,9 @@ body:not(.dashboardDocument) .headerAppsButton {
padding-left: 272px;
}
- .mainDrawerPanel .viewMenuBarTabs paper-tab {
- width: auto !important;
- }
-
- .mainDrawerPanel .viewMenuBarTabs .tab-content {
- display: block !important;
- }
+ .viewMenuBarTabs .libraryViewNav {
+ text-align: left !important;
+ }
.dashboardDocument .mainDrawer {
z-index: 998 !important;
diff --git a/dashboard-ui/css/site.css b/dashboard-ui/css/site.css
index 311442bf64..673f2b5eec 100644
--- a/dashboard-ui/css/site.css
+++ b/dashboard-ui/css/site.css
@@ -226,16 +226,11 @@ div[data-role='page'] {
transform: translateY(-100%);
}
-.libraryViewNav:not(.paperLibraryViewNav).headroom--unpinned:not(.headroomDisabled) {
+.libraryViewNav.headroom--unpinned:not(.headroomDisabled) {
-webkit-transform: translateY(-210%);
transform: translateY(-210%);
}
-.paperLibraryViewNav.headroom--unpinned:not(.headroomDisabled) {
- -webkit-transform: translateY(-240%);
- transform: translateY(-240%);
-}
-
.checkboxContainer {
white-space: nowrap;
}
diff --git a/dashboard-ui/device.html b/dashboard-ui/device.html
index ab2367e3ab..953f831c82 100644
--- a/dashboard-ui/device.html
+++ b/dashboard-ui/device.html
@@ -1,4 +1,4 @@
-
+
diff --git a/dashboard-ui/devices/ios/ios.css b/dashboard-ui/devices/ios/ios.css
index 733b87cb74..74d5bfffa6 100644
--- a/dashboard-ui/devices/ios/ios.css
+++ b/dashboard-ui/devices/ios/ios.css
@@ -40,7 +40,7 @@ body:not(.dashboardDocument) .mainDrawerButton {
height: 50px;
}
-.viewMenuBar, .libraryViewNav, paper-tabs {
+.viewMenuBar, .libraryViewNav {
background-color: #000;
}
diff --git a/dashboard-ui/devicesupload.html b/dashboard-ui/devicesupload.html
index 19c7912d78..8827d4a55f 100644
--- a/dashboard-ui/devicesupload.html
+++ b/dashboard-ui/devicesupload.html
@@ -1,4 +1,4 @@
-
+
diff --git a/dashboard-ui/dlnaprofile.html b/dashboard-ui/dlnaprofile.html
index 171290af13..0353733da8 100644
--- a/dashboard-ui/dlnaprofile.html
+++ b/dashboard-ui/dlnaprofile.html
@@ -1,4 +1,4 @@
-
+
diff --git a/dashboard-ui/dlnasettings.html b/dashboard-ui/dlnasettings.html
index 0f83e85b92..c40e6e89ed 100644
--- a/dashboard-ui/dlnasettings.html
+++ b/dashboard-ui/dlnasettings.html
@@ -1,4 +1,4 @@
-
+
diff --git a/dashboard-ui/encodingsettings.html b/dashboard-ui/encodingsettings.html
index 7baa62f5ae..dc64beaee4 100644
--- a/dashboard-ui/encodingsettings.html
+++ b/dashboard-ui/encodingsettings.html
@@ -9,7 +9,7 @@
${LabelHardwareAccelerationTypeHelp}
diff --git a/dashboard-ui/livetvseriestimer.html b/dashboard-ui/livetvseriestimer.html
index 7b84f943b2..77d3671803 100644
--- a/dashboard-ui/livetvseriestimer.html
+++ b/dashboard-ui/livetvseriestimer.html
@@ -1,4 +1,4 @@
-
+
@@ -42,9 +42,8 @@
${OptionRecordOnAllChannels}
-
-
${HeaderAdvanced}
-
+
+
diff --git a/dashboard-ui/livetvsettings.html b/dashboard-ui/livetvsettings.html
index 0000d56db7..f0043a98c9 100644
--- a/dashboard-ui/livetvsettings.html
+++ b/dashboard-ui/livetvsettings.html
@@ -1,4 +1,4 @@
-