diff --git a/dashboard-ui/bower_components/font-roboto/roboto.html b/dashboard-ui/bower_components/font-roboto/roboto.html index e73ba34772..e4f155e231 100644 --- a/dashboard-ui/bower_components/font-roboto/roboto.html +++ b/dashboard-ui/bower_components/font-roboto/roboto.html @@ -8,4 +8,4 @@ Code distributed by Google as part of the polymer project is also subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt --> - + diff --git a/dashboard-ui/bower_components/iron-meta/.bower.json b/dashboard-ui/bower_components/iron-meta/.bower.json index 8119ebcf41..9e650790be 100644 --- a/dashboard-ui/bower_components/iron-meta/.bower.json +++ b/dashboard-ui/bower_components/iron-meta/.bower.json @@ -25,14 +25,14 @@ "web-component-tester": "*", "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" }, - "homepage": "https://github.com/polymerelements/iron-meta", + "homepage": "https://github.com/PolymerElements/iron-meta", "_release": "1.0.3", "_resolution": { "type": "version", "tag": "v1.0.3", "commit": "91529259262b0d8f33fed44bc3fd47aedf35cb04" }, - "_source": "git://github.com/polymerelements/iron-meta.git", + "_source": "git://github.com/PolymerElements/iron-meta.git", "_target": "^1.0.0", - "_originalSource": "polymerelements/iron-meta" + "_originalSource": "PolymerElements/iron-meta" } \ No newline at end of file diff --git a/dashboard-ui/cordova/chromecast.js b/dashboard-ui/cordova/chromecast.js index 8d0935c17a..3e06575988 100644 --- a/dashboard-ui/cordova/chromecast.js +++ b/dashboard-ui/cordova/chromecast.js @@ -265,7 +265,8 @@ "SetVolume", "SetAudioStreamIndex", "SetSubtitleStreamIndex", - "DisplayContent" + "DisplayContent", + "SetRepeatMode" ]; return target; @@ -372,6 +373,15 @@ }); }; + self.setRepeatMode = function (mode) { + sendMessageToDevice({ + options: { + RepeatMode: mode + }, + command: 'SetRepeatMode' + }); + }; + self.volumeUp = function () { sendMessageToDevice({ diff --git a/dashboard-ui/css/mediaplayer.css b/dashboard-ui/css/mediaplayer.css index 448b451dea..162ede6f42 100644 --- a/dashboard-ui/css/mediaplayer.css +++ b/dashboard-ui/css/mediaplayer.css @@ -48,10 +48,6 @@ font-weight: normal; } -.volumeButton { - margin-right: .5em !important; -} - .mediaPlayerAudioContainer { position: fixed; top: 40%; diff --git a/dashboard-ui/css/nowplaying.css b/dashboard-ui/css/nowplaying.css index d1906452e8..1f6d1c3e9e 100644 --- a/dashboard-ui/css/nowplaying.css +++ b/dashboard-ui/css/nowplaying.css @@ -42,6 +42,10 @@ z-index: 1000; } +.nowPlayingPageRepeatActive { + color: #2ad !important; +} + .chapterMenuInner { padding: 1em 0; text-align: center; @@ -193,6 +197,7 @@ display: none; } } + .nowPlayingPageUserDataButtons iron-icon { width: 40px; height: 40px; diff --git a/dashboard-ui/css/nowplayingbar.css b/dashboard-ui/css/nowplayingbar.css index 81118595a1..bc7e80d1f7 100644 --- a/dashboard-ui/css/nowplayingbar.css +++ b/dashboard-ui/css/nowplayingbar.css @@ -6,7 +6,7 @@ } .hiddenNowPlayingBar .nowPlayingBar { - display: none!important; + display: none !important; } .mediaButton, .nowPlayingBarUserDataButtons .btnUserItemRating { @@ -15,14 +15,15 @@ margin: 0; text-align: center; } -.mediaButton iron-icon { - height: 40px; - width: 40px; -} -.mediaButton.remoteControlButton iron-icon, .mediaButton.muteButton iron-icon, .mediaButton.unmuteButton iron-icon { - height: 26px; -} + .mediaButton iron-icon { + height: 40px; + width: 40px; + } + + .mediaButton.remoteControlButton iron-icon, .mediaButton.muteButton iron-icon, .mediaButton.unmuteButton iron-icon { + height: 26px; + } .nowPlayingDoubleText { top: -3px; @@ -61,6 +62,14 @@ max-width: 130px; } +.toggleRepeatButton iron-icon { + height: 32px; +} + +.repeatActive { + color: #3367d6; +} + @media (min-width: 500px) { .nowPlayingBarText { max-width: 180px; @@ -222,6 +231,10 @@ .nowPlayingBarPositionSlider #sliderKnob { top: -15px !important; } + + .toggleRepeatButton { + display: none; + } } @media all and (min-width: 800px) { diff --git a/dashboard-ui/css/site.css b/dashboard-ui/css/site.css index 5c2eb0d972..ca70832df7 100644 --- a/dashboard-ui/css/site.css +++ b/dashboard-ui/css/site.css @@ -3,7 +3,7 @@ font-family: 'Roboto'; font-style: normal; font-weight: 100; - src: local('Roboto Thin'), local('Roboto-Thin'), url(fonts/roboto/ty9dfvLAziwdqQ2dHoyjphTbgVql8nDJpwnrE27mub0.woff2) format('woff2'), url(fonts/Roboto/RobotoThin.woff) format('woff'); + src: local('Roboto Thin'), local('Roboto-Thin'), url(fonts/roboto/ty9dfvLAziwdqQ2dHoyjphTbgVql8nDJpwnrE27mub0.woff2) format('woff2'), url(fonts/roboto/RobotoThin.woff) format('woff'); unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; } /* cyrillic */ @@ -11,7 +11,7 @@ font-family: 'Roboto'; font-style: normal; font-weight: 100; - src: local('Roboto Thin'), local('Roboto-Thin'), url(fonts/roboto/frNV30OaYdlFRtH2VnZZdhTbgVql8nDJpwnrE27mub0.woff2) format('woff2'), url(fonts/Roboto/RobotoThin.woff) format('woff'); + src: local('Roboto Thin'), local('Roboto-Thin'), url(fonts/roboto/frNV30OaYdlFRtH2VnZZdhTbgVql8nDJpwnrE27mub0.woff2) format('woff2'), url(fonts/roboto/RobotoThin.woff) format('woff'); unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; } /* greek-ext */ @@ -19,7 +19,7 @@ font-family: 'Roboto'; font-style: normal; font-weight: 100; - src: local('Roboto Thin'), local('Roboto-Thin'), url(fonts/roboto/gwVJDERN2Amz39wrSoZ7FxTbgVql8nDJpwnrE27mub0.woff2) format('woff2'), url(fonts/Roboto/RobotoThin.woff) format('woff'); + src: local('Roboto Thin'), local('Roboto-Thin'), url(fonts/roboto/gwVJDERN2Amz39wrSoZ7FxTbgVql8nDJpwnrE27mub0.woff2) format('woff2'), url(fonts/roboto/RobotoThin.woff) format('woff'); unicode-range: U+1F00-1FFF; } /* greek */ @@ -27,7 +27,7 @@ font-family: 'Roboto'; font-style: normal; font-weight: 100; - src: local('Roboto Thin'), local('Roboto-Thin'), url(fonts/roboto/aZMswpodYeVhtRvuABJWvBTbgVql8nDJpwnrE27mub0.woff2) format('woff2'), url(fonts/Roboto/RobotoThin.woff) format('woff'); + src: local('Roboto Thin'), local('Roboto-Thin'), url(fonts/roboto/aZMswpodYeVhtRvuABJWvBTbgVql8nDJpwnrE27mub0.woff2) format('woff2'), url(fonts/roboto/RobotoThin.woff) format('woff'); unicode-range: U+0370-03FF; } /* vietnamese */ @@ -35,7 +35,7 @@ font-family: 'Roboto'; font-style: normal; font-weight: 100; - src: local('Roboto Thin'), local('Roboto-Thin'), url(fonts/roboto/VvXUGKZXbHtX_S_VCTLpGhTbgVql8nDJpwnrE27mub0.woff2) format('woff2'), url(fonts/Roboto/RobotoThin.woff) format('woff'); + src: local('Roboto Thin'), local('Roboto-Thin'), url(fonts/roboto/VvXUGKZXbHtX_S_VCTLpGhTbgVql8nDJpwnrE27mub0.woff2) format('woff2'), url(fonts/roboto/RobotoThin.woff) format('woff'); unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB; } /* latin-ext */ @@ -43,7 +43,7 @@ font-family: 'Roboto'; font-style: normal; font-weight: 100; - src: local('Roboto Thin'), local('Roboto-Thin'), url(fonts/roboto/e7MeVAyvogMqFwwl61PKhBTbgVql8nDJpwnrE27mub0.woff2) format('woff2'), url(fonts/Roboto/RobotoThin.woff) format('woff'); + src: local('Roboto Thin'), local('Roboto-Thin'), url(fonts/roboto/e7MeVAyvogMqFwwl61PKhBTbgVql8nDJpwnrE27mub0.woff2) format('woff2'), url(fonts/roboto/RobotoThin.woff) format('woff'); unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; } /* latin */ @@ -51,7 +51,7 @@ font-family: 'Roboto'; font-style: normal; font-weight: 100; - src: local('Roboto Thin'), local('Roboto-Thin'), url(fonts/roboto/2tsd397wLxj96qwHyNIkxPesZW2xOQ-xsNqO47m55DA.woff2) format('woff2'), url(fonts/Roboto/RobotoThin.woff) format('woff'); + src: local('Roboto Thin'), local('Roboto-Thin'), url(fonts/roboto/2tsd397wLxj96qwHyNIkxPesZW2xOQ-xsNqO47m55DA.woff2) format('woff2'), url(fonts/roboto/RobotoThin.woff) format('woff'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000; } /* cyrillic-ext */ @@ -59,7 +59,7 @@ font-family: 'Roboto'; font-style: normal; font-weight: 300; - src: local('Roboto Light'), local('Roboto-Light'), url(fonts/roboto/0eC6fl06luXEYWpBSJvXCBJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'), url(fonts/Roboto/RobotoLight.woff) format('woff'); + src: local('Roboto Light'), local('Roboto-Light'), url(fonts/roboto/0eC6fl06luXEYWpBSJvXCBJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'), url(fonts/roboto/RobotoLight.woff) format('woff'); unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; } /* cyrillic */ @@ -67,7 +67,7 @@ font-family: 'Roboto'; font-style: normal; font-weight: 300; - src: local('Roboto Light'), local('Roboto-Light'), url(fonts/roboto/Fl4y0QdOxyyTHEGMXX8kcRJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'), url(fonts/Roboto/RobotoLight.woff) format('woff'); + src: local('Roboto Light'), local('Roboto-Light'), url(fonts/roboto/Fl4y0QdOxyyTHEGMXX8kcRJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'), url(fonts/roboto/RobotoLight.woff) format('woff'); unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; } /* greek-ext */ @@ -75,7 +75,7 @@ font-family: 'Roboto'; font-style: normal; font-weight: 300; - src: local('Roboto Light'), local('Roboto-Light'), url(fonts/roboto/-L14Jk06m6pUHB-5mXQQnRJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'), url(fonts/Roboto/RobotoLight.woff) format('woff'); + src: local('Roboto Light'), local('Roboto-Light'), url(fonts/roboto/-L14Jk06m6pUHB-5mXQQnRJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'), url(fonts/roboto/RobotoLight.woff) format('woff'); unicode-range: U+1F00-1FFF; } /* greek */ @@ -83,7 +83,7 @@ font-family: 'Roboto'; font-style: normal; font-weight: 300; - src: local('Roboto Light'), local('Roboto-Light'), url(fonts/roboto/I3S1wsgSg9YCurV6PUkTORJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'), url(fonts/Roboto/RobotoLight.woff) format('woff'); + src: local('Roboto Light'), local('Roboto-Light'), url(fonts/roboto/I3S1wsgSg9YCurV6PUkTORJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'), url(fonts/roboto/RobotoLight.woff) format('woff'); unicode-range: U+0370-03FF; } /* vietnamese */ @@ -91,7 +91,7 @@ font-family: 'Roboto'; font-style: normal; font-weight: 300; - src: local('Roboto Light'), local('Roboto-Light'), url(fonts/roboto/NYDWBdD4gIq26G5XYbHsFBJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'), url(fonts/Roboto/RobotoLight.woff) format('woff'); + src: local('Roboto Light'), local('Roboto-Light'), url(fonts/roboto/NYDWBdD4gIq26G5XYbHsFBJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'), url(fonts/roboto/RobotoLight.woff) format('woff'); unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB; } /* latin-ext */ @@ -99,7 +99,7 @@ font-family: 'Roboto'; font-style: normal; font-weight: 300; - src: local('Roboto Light'), local('Roboto-Light'), url(fonts/roboto/Pru33qjShpZSmG3z6VYwnRJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'), url(fonts/Roboto/RobotoLight.woff) format('woff'); + src: local('Roboto Light'), local('Roboto-Light'), url(fonts/roboto/Pru33qjShpZSmG3z6VYwnRJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'), url(fonts/roboto/RobotoLight.woff) format('woff'); unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; } /* latin */ @@ -107,7 +107,7 @@ font-family: 'Roboto'; font-style: normal; font-weight: 300; - src: local('Roboto Light'), local('Roboto-Light'), url(fonts/roboto/Hgo13k-tfSpn0qi1SFdUfVtXRa8TVwTICgirnJhmVJw.woff2) format('woff2'), url(fonts/Roboto/RobotoLight.woff) format('woff'); + src: local('Roboto Light'), local('Roboto-Light'), url(fonts/roboto/Hgo13k-tfSpn0qi1SFdUfVtXRa8TVwTICgirnJhmVJw.woff2) format('woff2'), url(fonts/roboto/RobotoLight.woff) format('woff'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000; } /* cyrillic-ext */ @@ -115,7 +115,7 @@ font-family: 'Roboto'; font-style: normal; font-weight: 400; - src: local('Roboto'), local('Roboto-Regular'), url(http://fonts.gstatic.com/s/roboto/v15/ek4gzZ-GeXAPcSbHtCeQI_esZW2xOQ-xsNqO47m55DA.woff2) format('woff2'), url(fonts/Roboto/RobotoRegular.woff) format('woff'); + src: local('Roboto'), local('Roboto-Regular'), url(http://fonts.gstatic.com/s/roboto/v15/ek4gzZ-GeXAPcSbHtCeQI_esZW2xOQ-xsNqO47m55DA.woff2) format('woff2'), url(fonts/roboto/RobotoRegular.woff) format('woff'); unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; } /* cyrillic */ @@ -123,7 +123,7 @@ font-family: 'Roboto'; font-style: normal; font-weight: 400; - src: local('Roboto'), local('Roboto-Regular'), url(http://fonts.gstatic.com/s/roboto/v15/mErvLBYg_cXG3rLvUsKT_fesZW2xOQ-xsNqO47m55DA.woff2) format('woff2'), url(fonts/Roboto/RobotoRegular.woff) format('woff'); + src: local('Roboto'), local('Roboto-Regular'), url(http://fonts.gstatic.com/s/roboto/v15/mErvLBYg_cXG3rLvUsKT_fesZW2xOQ-xsNqO47m55DA.woff2) format('woff2'), url(fonts/roboto/RobotoRegular.woff) format('woff'); unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; } /* greek-ext */ @@ -131,7 +131,7 @@ font-family: 'Roboto'; font-style: normal; font-weight: 400; - src: local('Roboto'), local('Roboto-Regular'), url(http://fonts.gstatic.com/s/roboto/v15/-2n2p-_Y08sg57CNWQfKNvesZW2xOQ-xsNqO47m55DA.woff2) format('woff2'), url(fonts/Roboto/RobotoRegular.woff) format('woff'); + src: local('Roboto'), local('Roboto-Regular'), url(http://fonts.gstatic.com/s/roboto/v15/-2n2p-_Y08sg57CNWQfKNvesZW2xOQ-xsNqO47m55DA.woff2) format('woff2'), url(fonts/roboto/RobotoRegular.woff) format('woff'); unicode-range: U+1F00-1FFF; } /* greek */ @@ -139,7 +139,7 @@ font-family: 'Roboto'; font-style: normal; font-weight: 400; - src: local('Roboto'), local('Roboto-Regular'), url(http://fonts.gstatic.com/s/roboto/v15/u0TOpm082MNkS5K0Q4rhqvesZW2xOQ-xsNqO47m55DA.woff2) format('woff2'), url(fonts/Roboto/RobotoRegular.woff) format('woff'); + src: local('Roboto'), local('Roboto-Regular'), url(http://fonts.gstatic.com/s/roboto/v15/u0TOpm082MNkS5K0Q4rhqvesZW2xOQ-xsNqO47m55DA.woff2) format('woff2'), url(fonts/roboto/RobotoRegular.woff) format('woff'); unicode-range: U+0370-03FF; } /* vietnamese */ @@ -147,7 +147,7 @@ font-family: 'Roboto'; font-style: normal; font-weight: 400; - src: local('Roboto'), local('Roboto-Regular'), url(http://fonts.gstatic.com/s/roboto/v15/NdF9MtnOpLzo-noMoG0miPesZW2xOQ-xsNqO47m55DA.woff2) format('woff2'), url(fonts/Roboto/RobotoRegular.woff) format('woff'); + src: local('Roboto'), local('Roboto-Regular'), url(http://fonts.gstatic.com/s/roboto/v15/NdF9MtnOpLzo-noMoG0miPesZW2xOQ-xsNqO47m55DA.woff2) format('woff2'), url(fonts/roboto/RobotoRegular.woff) format('woff'); unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB; } /* latin-ext */ @@ -155,7 +155,7 @@ font-family: 'Roboto'; font-style: normal; font-weight: 400; - src: local('Roboto'), local('Roboto-Regular'), url(fonts/roboto/Fcx7Wwv8OzT71A3E1XOAjvesZW2xOQ-xsNqO47m55DA.woff2) format('woff2'), url(fonts/Roboto/RobotoRegular.woff) format('woff'); + src: local('Roboto'), local('Roboto-Regular'), url(fonts/roboto/Fcx7Wwv8OzT71A3E1XOAjvesZW2xOQ-xsNqO47m55DA.woff2) format('woff2'), url(fonts/roboto/RobotoRegular.woff) format('woff'); unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; } /* latin */ @@ -163,7 +163,7 @@ font-family: 'Roboto'; font-style: normal; font-weight: 400; - src: local('Roboto'), local('Roboto-Regular'), url(fonts/roboto/CWB0XYA8bzo0kSThX0UTuA.woff2) format('woff2'), url(fonts/Roboto/RobotoRegular.woff) format('woff'); + src: local('Roboto'), local('Roboto-Regular'), url(fonts/roboto/CWB0XYA8bzo0kSThX0UTuA.woff2) format('woff2'), url(fonts/roboto/RobotoRegular.woff) format('woff'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000; } /* cyrillic-ext */ @@ -171,7 +171,7 @@ font-family: 'Roboto'; font-style: normal; font-weight: 500; - src: local('Roboto Medium'), local('Roboto-Medium'), url(http://fonts.gstatic.com/s/roboto/v15/ZLqKeelYbATG60EpZBSDyxJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'), url(fonts/Roboto/RobotoMedium.woff) format('woff'); + src: local('Roboto Medium'), local('Roboto-Medium'), url(http://fonts.gstatic.com/s/roboto/v15/ZLqKeelYbATG60EpZBSDyxJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'), url(fonts/roboto/RobotoMedium.woff) format('woff'); unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; } /* cyrillic */ @@ -179,7 +179,7 @@ font-family: 'Roboto'; font-style: normal; font-weight: 500; - src: local('Roboto Medium'), local('Roboto-Medium'), url(http://fonts.gstatic.com/s/roboto/v15/oHi30kwQWvpCWqAhzHcCSBJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'), url(fonts/Roboto/RobotoMedium.woff) format('woff'); + src: local('Roboto Medium'), local('Roboto-Medium'), url(http://fonts.gstatic.com/s/roboto/v15/oHi30kwQWvpCWqAhzHcCSBJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'), url(fonts/roboto/RobotoMedium.woff) format('woff'); unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; } /* greek-ext */ @@ -187,7 +187,7 @@ font-family: 'Roboto'; font-style: normal; font-weight: 500; - src: local('Roboto Medium'), local('Roboto-Medium'), url(http://fonts.gstatic.com/s/roboto/v15/rGvHdJnr2l75qb0YND9NyBJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'), url(fonts/Roboto/RobotoMedium.woff) format('woff'); + src: local('Roboto Medium'), local('Roboto-Medium'), url(http://fonts.gstatic.com/s/roboto/v15/rGvHdJnr2l75qb0YND9NyBJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'), url(fonts/roboto/RobotoMedium.woff) format('woff'); unicode-range: U+1F00-1FFF; } /* greek */ @@ -195,7 +195,7 @@ font-family: 'Roboto'; font-style: normal; font-weight: 500; - src: local('Roboto Medium'), local('Roboto-Medium'), url(http://fonts.gstatic.com/s/roboto/v15/mx9Uck6uB63VIKFYnEMXrRJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'), url(fonts/Roboto/RobotoMedium.woff) format('woff'); + src: local('Roboto Medium'), local('Roboto-Medium'), url(http://fonts.gstatic.com/s/roboto/v15/mx9Uck6uB63VIKFYnEMXrRJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'), url(fonts/roboto/RobotoMedium.woff) format('woff'); unicode-range: U+0370-03FF; } /* vietnamese */ @@ -203,7 +203,7 @@ font-family: 'Roboto'; font-style: normal; font-weight: 500; - src: local('Roboto Medium'), local('Roboto-Medium'), url(http://fonts.gstatic.com/s/roboto/v15/mbmhprMH69Zi6eEPBYVFhRJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'), url(fonts/Roboto/RobotoMedium.woff) format('woff'); + src: local('Roboto Medium'), local('Roboto-Medium'), url(http://fonts.gstatic.com/s/roboto/v15/mbmhprMH69Zi6eEPBYVFhRJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'), url(fonts/roboto/RobotoMedium.woff) format('woff'); unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB; } /* latin-ext */ @@ -211,7 +211,7 @@ font-family: 'Roboto'; font-style: normal; font-weight: 500; - src: local('Roboto Medium'), local('Roboto-Medium'), url(fonts/roboto/oOeFwZNlrTefzLYmlVV1UBJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'), url(fonts/Roboto/RobotoMedium.woff) format('woff'); + src: local('Roboto Medium'), local('Roboto-Medium'), url(fonts/roboto/oOeFwZNlrTefzLYmlVV1UBJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'), url(fonts/roboto/RobotoMedium.woff) format('woff'); unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; } /* latin */ @@ -219,7 +219,7 @@ font-family: 'Roboto'; font-style: normal; font-weight: 500; - src: local('Roboto Medium'), local('Roboto-Medium'), url(fonts/roboto/RxZJdnzeo3R5zSexge8UUVtXRa8TVwTICgirnJhmVJw.woff2) format('woff2'), url(fonts/Roboto/RobotoMedium.woff) format('woff'); + src: local('Roboto Medium'), local('Roboto-Medium'), url(fonts/roboto/RxZJdnzeo3R5zSexge8UUVtXRa8TVwTICgirnJhmVJw.woff2) format('woff2'), url(fonts/roboto/RobotoMedium.woff) format('woff'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000; } /* cyrillic-ext */ @@ -227,7 +227,7 @@ font-family: 'Roboto'; font-style: normal; font-weight: 700; - src: local('Roboto Bold'), local('Roboto-Bold'), url(http://fonts.gstatic.com/s/roboto/v15/77FXFjRbGzN4aCrSFhlh3hJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'), url(fonts/Roboto/RobotoBold.woff) format('woff'); + src: local('Roboto Bold'), local('Roboto-Bold'), url(http://fonts.gstatic.com/s/roboto/v15/77FXFjRbGzN4aCrSFhlh3hJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'), url(fonts/roboto/RobotoBold.woff) format('woff'); unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; } /* cyrillic */ @@ -235,7 +235,7 @@ font-family: 'Roboto'; font-style: normal; font-weight: 700; - src: local('Roboto Bold'), local('Roboto-Bold'), url(http://fonts.gstatic.com/s/roboto/v15/isZ-wbCXNKAbnjo6_TwHThJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'), url(fonts/Roboto/RobotoBold.woff) format('woff'); + src: local('Roboto Bold'), local('Roboto-Bold'), url(http://fonts.gstatic.com/s/roboto/v15/isZ-wbCXNKAbnjo6_TwHThJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'), url(fonts/roboto/RobotoBold.woff) format('woff'); unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; } /* greek-ext */ @@ -243,7 +243,7 @@ font-family: 'Roboto'; font-style: normal; font-weight: 700; - src: local('Roboto Bold'), local('Roboto-Bold'), url(http://fonts.gstatic.com/s/roboto/v15/UX6i4JxQDm3fVTc1CPuwqhJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'), url(fonts/Roboto/RobotoBold.woff) format('woff'); + src: local('Roboto Bold'), local('Roboto-Bold'), url(http://fonts.gstatic.com/s/roboto/v15/UX6i4JxQDm3fVTc1CPuwqhJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'), url(fonts/roboto/RobotoBold.woff) format('woff'); unicode-range: U+1F00-1FFF; } /* greek */ @@ -251,7 +251,7 @@ font-family: 'Roboto'; font-style: normal; font-weight: 700; - src: local('Roboto Bold'), local('Roboto-Bold'), url(http://fonts.gstatic.com/s/roboto/v15/jSN2CGVDbcVyCnfJfjSdfBJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'), url(fonts/Roboto/RobotoBold.woff) format('woff'); + src: local('Roboto Bold'), local('Roboto-Bold'), url(http://fonts.gstatic.com/s/roboto/v15/jSN2CGVDbcVyCnfJfjSdfBJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'), url(fonts/roboto/RobotoBold.woff) format('woff'); unicode-range: U+0370-03FF; } /* vietnamese */ @@ -259,7 +259,7 @@ font-family: 'Roboto'; font-style: normal; font-weight: 700; - src: local('Roboto Bold'), local('Roboto-Bold'), url(http://fonts.gstatic.com/s/roboto/v15/PwZc-YbIL414wB9rB1IAPRJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'), url(fonts/Roboto/RobotoBold.woff) format('woff'); + src: local('Roboto Bold'), local('Roboto-Bold'), url(http://fonts.gstatic.com/s/roboto/v15/PwZc-YbIL414wB9rB1IAPRJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'), url(fonts/roboto/RobotoBold.woff) format('woff'); unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB; } /* latin-ext */ @@ -267,7 +267,7 @@ font-family: 'Roboto'; font-style: normal; font-weight: 700; - src: local('Roboto Bold'), local('Roboto-Bold'), url(fonts/roboto/97uahxiqZRoncBaCEI3aWxJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'), url(fonts/Roboto/RobotoBold.woff) format('woff'); + src: local('Roboto Bold'), local('Roboto-Bold'), url(fonts/roboto/97uahxiqZRoncBaCEI3aWxJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'), url(fonts/roboto/RobotoBold.woff) format('woff'); unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; } /* latin */ @@ -275,7 +275,7 @@ font-family: 'Roboto'; font-style: normal; font-weight: 700; - src: local('Roboto Bold'), local('Roboto-Bold'), url(fonts/roboto/d-6IYplOFocCacKzxwXSOFtXRa8TVwTICgirnJhmVJw.woff2) format('woff2'), url(fonts/Roboto/RobotoBold.woff) format('woff'); + src: local('Roboto Bold'), local('Roboto-Bold'), url(fonts/roboto/d-6IYplOFocCacKzxwXSOFtXRa8TVwTICgirnJhmVJw.woff2) format('woff2'), url(fonts/roboto/RobotoBold.woff) format('woff'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000; } diff --git a/dashboard-ui/livetvtunerprovider-hdhomerun.html b/dashboard-ui/livetvtunerprovider-hdhomerun.html index 12227bccd7..82f6dd3dea 100644 --- a/dashboard-ui/livetvtunerprovider-hdhomerun.html +++ b/dashboard-ui/livetvtunerprovider-hdhomerun.html @@ -22,7 +22,7 @@
- +

diff --git a/dashboard-ui/mypreferencesdisplay.html b/dashboard-ui/mypreferencesdisplay.html index 54fb586d93..1008d401ef 100644 --- a/dashboard-ui/mypreferencesdisplay.html +++ b/dashboard-ui/mypreferencesdisplay.html @@ -74,13 +74,9 @@

-
-
- -
- -
- +
+ +
diff --git a/dashboard-ui/nowplaying.html b/dashboard-ui/nowplaying.html index a52dcdc012..e99631f961 100644 --- a/dashboard-ui/nowplaying.html +++ b/dashboard-ui/nowplaying.html @@ -44,16 +44,19 @@
- - - - -
-
- + +
+
+ +
+
+ + + +
diff --git a/dashboard-ui/scripts/appsettings.js b/dashboard-ui/scripts/appsettings.js index e132c3d234..4159b540d1 100644 --- a/dashboard-ui/scripts/appsettings.js +++ b/dashboard-ui/scripts/appsettings.js @@ -56,13 +56,13 @@ return appStorage.getItem('enableFullScreen') == 'true'; }, - syncPath: function (val) { + enableSyncToExternalStorage: function (val) { if (val != null) { - update('syncPath', val.toString()); + update('enableSyncToExternalStorage', val.toString()); } - return appStorage.getItem('syncPath'); + return appStorage.getItem('enableSyncToExternalStorage') == 'true'; }, displayPreferencesKey: function() { diff --git a/dashboard-ui/scripts/chromecast.js b/dashboard-ui/scripts/chromecast.js index 99074b1e7d..847ea51842 100644 --- a/dashboard-ui/scripts/chromecast.js +++ b/dashboard-ui/scripts/chromecast.js @@ -628,6 +628,15 @@ self.setVolume(getCurrentVolume() + 2); }; + self.setRepeatMode = function (mode) { + castPlayer.sendMessage({ + options: { + RepeatMode: mode + }, + command: 'SetRepeatMode' + }); + }; + self.toggleMute = function () { var state = self.lastPlayerData || {}; @@ -676,7 +685,8 @@ "SetVolume", "SetAudioStreamIndex", "SetSubtitleStreamIndex", - "DisplayContent"] + "DisplayContent", + "SetRepeatMode"] }; }; diff --git a/dashboard-ui/scripts/librarybrowser.js b/dashboard-ui/scripts/librarybrowser.js index 40e55ad497..1141b1bc6d 100644 --- a/dashboard-ui/scripts/librarybrowser.js +++ b/dashboard-ui/scripts/librarybrowser.js @@ -156,7 +156,7 @@ return true; } - $(ownerpage).on('swipeleft', function (e) { + $(pages).on('swipeleft', function (e) { if (allowSwipe(e)) { var selected = parseInt(pages.selected || '0'); @@ -168,7 +168,7 @@ } }); - $(ownerpage).on('swiperight', function (e) { + $(pages).on('swiperight', function (e) { if (allowSwipe(e)) { var selected = parseInt(pages.selected || '0'); diff --git a/dashboard-ui/scripts/mediacontroller.js b/dashboard-ui/scripts/mediacontroller.js index 34634d4cd0..47e3ef4d75 100644 --- a/dashboard-ui/scripts/mediacontroller.js +++ b/dashboard-ui/scripts/mediacontroller.js @@ -573,6 +573,10 @@ currentPlayer.volumeUp(); }; + self.setRepeatMode = function (mode) { + currentPlayer.setRepeatMode(mode); + }; + self.playlist = function () { return currentPlayer.playlist || []; }; @@ -586,6 +590,9 @@ Logger.log('MediaController received command: ' + cmd.Name); switch (cmd.Name) { + case 'SetRepeatMode': + player.setRepeatMode(cmd.Arguments.RepeatMode); + break; case 'VolumeUp': player.volumeUp(); break; diff --git a/dashboard-ui/scripts/mediaplayer.js b/dashboard-ui/scripts/mediaplayer.js index c2ca114edd..749369b41e 100644 --- a/dashboard-ui/scripts/mediaplayer.js +++ b/dashboard-ui/scripts/mediaplayer.js @@ -1127,7 +1127,24 @@ self.nextTrack = function () { - var newIndex = currentPlaylistIndex + 1; + var newIndex; + + switch (self.getRepeatMode()) { + + case 'RepeatOne': + newIndex = currentPlaylistIndex; + break; + case 'RepeatAll': + newIndex = currentPlaylistIndex + 1; + if (newIndex >= self.playlist.length) { + newIndex = 0; + } + break; + default: + newIndex = currentPlaylistIndex + 1; + break; + } + var newItem = self.playlist[newIndex]; if (newItem) { @@ -1498,6 +1515,7 @@ state.PlayState.IsMuted = mediaRenderer.volume() == 0; state.PlayState.IsPaused = mediaRenderer.paused(); state.PlayState.PositionTicks = self.getCurrentTicks(mediaRenderer); + state.PlayState.RepeatMode = self.getRepeatMode(); var currentSrc = mediaRenderer.currentSrc(); @@ -1751,6 +1769,15 @@ return true; }; + var repeatMode = 'RepeatNone'; + self.getRepeatMode = function () { + return repeatMode; + }; + + self.setRepeatMode = function (mode) { + repeatMode = mode; + }; + function onTimeUpdate() { var currentTicks = self.getCurrentTicks(this); diff --git a/dashboard-ui/scripts/musicrecommended.js b/dashboard-ui/scripts/musicrecommended.js index 1b0058d35d..1208c69742 100644 --- a/dashboard-ui/scripts/musicrecommended.js +++ b/dashboard-ui/scripts/musicrecommended.js @@ -39,10 +39,11 @@ showLatestItemsPopup: false, shape: getSquareShape(), showTitle: true, + defaultAction: 'play', showParentTitle: true, lazy: true, centerText: true, - overlayPlayButton: true + overlayMoreButton: true }); ImageLoader.lazyChildren(elem); diff --git a/dashboard-ui/scripts/mypreferencesdisplay.js b/dashboard-ui/scripts/mypreferencesdisplay.js index ee02385408..4f3740bd55 100644 --- a/dashboard-ui/scripts/mypreferencesdisplay.js +++ b/dashboard-ui/scripts/mypreferencesdisplay.js @@ -16,7 +16,7 @@ $('#chkEnableFullScreen', page).checked(AppSettings.enableFullScreen()).checkboxradio("refresh"); - $('#txtSyncPath', page).val(AppSettings.syncPath()); + $('#chkSyncToExternalCard', page).checked(AppSettings.enableSyncToExternalStorage()).checkboxradio("refresh"); Dashboard.hideLoadingMsg(); } @@ -34,7 +34,7 @@ appStorage.setItem('enableThemeSongs-' + user.Id, $('#selectThemeSong', page).val()); appStorage.setItem('enableBackdrops-' + user.Id, $('#selectBackdrop', page).val()); - AppSettings.syncPath($('#txtSyncPath', page).val()); + AppSettings.enableSyncToExternalStorage($('#chkSyncToExternalCard', page).checked()); ApiClient.updateUserConfiguration(user.Id, user.Configuration).done(function () { Dashboard.alert(Globalize.translate('SettingsSaved')); diff --git a/dashboard-ui/scripts/nowplayingbar.js b/dashboard-ui/scripts/nowplayingbar.js index 70eb923a64..a5cce1d79d 100644 --- a/dashboard-ui/scripts/nowplayingbar.js +++ b/dashboard-ui/scripts/nowplayingbar.js @@ -12,6 +12,7 @@ var unpauseButton; var pauseButton; var positionSlider; + var toggleRepeatButton; var lastPlayerState; @@ -53,6 +54,8 @@ html += ''; + html += ''; + html += '
'; html += '
'; @@ -135,8 +138,26 @@ }); }); + toggleRepeatButton = $('.toggleRepeatButton', elem).on('click', function () { + + if (currentPlayer && lastPlayerState) { + var state = lastPlayerState; + switch ((state.PlayState || {}).RepeatMode) { + case 'RepeatNone': + currentPlayer.setRepeatMode('RepeatAll'); + break; + case 'RepeatAll': + currentPlayer.setRepeatMode('RepeatOne'); + break; + case 'RepeatOne': + currentPlayer.setRepeatMode('RepeatNone'); + break; + } + } + })[0]; + // Unfortunately this is necessary because the polymer elements might not be ready immediately and there doesn't seem to be an event-driven way to find out when - setTimeout(function() { + setTimeout(function () { volumeSlider = $('.nowPlayingBarVolumeSlider', elem).on('change', function () { if (currentPlayer) { @@ -314,6 +335,24 @@ showUnmuteButton = false; } + if (supportedCommands.indexOf('SetRepeatMode') == -1) { + toggleRepeatButton.classList.add('hide'); + } else { + toggleRepeatButton.classList.remove('hide'); + } + + if (playState.RepeatMode == 'RepeatAll') { + toggleRepeatButton.icon = "repeat"; + toggleRepeatButton.classList.add('repeatActive'); + } + else if (playState.RepeatMode == 'RepeatOne') { + toggleRepeatButton.icon = "repeat-one"; + toggleRepeatButton.classList.add('repeatActive'); + } else { + toggleRepeatButton.icon = "repeat"; + toggleRepeatButton.classList.remove('repeatActive'); + } + if (supportedCommands.indexOf('SetVolume') == -1) { showVolumeSlider = false; } diff --git a/dashboard-ui/scripts/nowplayingpage.js b/dashboard-ui/scripts/nowplayingpage.js index 6573827ff0..d0673b7321 100644 --- a/dashboard-ui/scripts/nowplayingpage.js +++ b/dashboard-ui/scripts/nowplayingpage.js @@ -208,6 +208,24 @@ }); } + function toggleRepeat(player) { + + if (player && lastPlayerState) { + var state = lastPlayerState; + switch ((state.PlayState || {}).RepeatMode) { + case 'RepeatNone': + player.setRepeatMode('RepeatAll'); + break; + case 'RepeatAll': + player.setRepeatMode('RepeatOne'); + break; + case 'RepeatOne': + player.setRepeatMode('RepeatNone'); + break; + } + } + } + function bindEvents(page) { $('.tabButton', page).on('click', function () { @@ -240,10 +258,15 @@ $('.btnCommand,.btnToggleFullscreen', page).on('click', function () { if (currentPlayer) { - MediaController.sendCommand({ - Name: this.getAttribute('data-command') - }, currentPlayer); + if (this.classList.contains('repeatToggleButton')) { + toggleRepeat(currentPlayer); + } else { + MediaController.sendCommand({ + Name: this.getAttribute('data-command') + + }, currentPlayer); + } } }); @@ -490,11 +513,13 @@ if (playerInfo.isLocalPlayer && AppInfo.hasPhysicalVolumeButtons) { $('.volumeButton', page).css('visibility', 'hidden'); + $('.nowPlayingPageVolumeControl', page).hide(); } else { $('.volumeButton', page).css('visibility', 'visible'); + $('.nowPlayingPageVolumeControl', page).show(); } - if (playerInfo.isLocalPlayer && AppInfo.hasPhysicalVolumeButtons && item && item.MediaType == 'Audio') { + if (item && item.MediaType == 'Audio') { $('.buttonsRow2', page).hide(); $('.buttonsRow3', page).hide(); } else { @@ -502,6 +527,20 @@ $('.buttonsRow3', page).show(); } + var toggleRepeatButton = page.querySelector('.repeatToggleButton'); + + if (playState.RepeatMode == 'RepeatAll') { + toggleRepeatButton.icon = "repeat"; + toggleRepeatButton.classList.add('nowPlayingPageRepeatActive'); + } + else if (playState.RepeatMode == 'RepeatOne') { + toggleRepeatButton.icon = "repeat-one"; + toggleRepeatButton.classList.add('nowPlayingPageRepeatActive'); + } else { + toggleRepeatButton.icon = "repeat"; + toggleRepeatButton.classList.remove('nowPlayingPageRepeatActive'); + } + updateNowPlayingInfo(page, state); } diff --git a/dashboard-ui/scripts/remotecontrol.js b/dashboard-ui/scripts/remotecontrol.js index 7027a0dfe5..a198c7a79d 100644 --- a/dashboard-ui/scripts/remotecontrol.js +++ b/dashboard-ui/scripts/remotecontrol.js @@ -125,9 +125,7 @@ self.setVolume = function (vol) { sendCommandByName('SetVolume', { - Volume: vol - }); }; @@ -155,6 +153,13 @@ }); }; + self.setRepeatMode = function (mode) { + + sendCommandByName('SetRepeatMode', { + RepeatMode: mode + }); + }; + self.displayContent = function (options) { sendCommandByName('DisplayContent', options); diff --git a/dashboard-ui/scripts/site.js b/dashboard-ui/scripts/site.js index 68754c0b15..823305902e 100644 --- a/dashboard-ui/scripts/site.js +++ b/dashboard-ui/scripts/site.js @@ -1065,6 +1065,7 @@ var Dashboard = { case 'SetAudioStreamIndex': case 'SetSubtitleStreamIndex': case 'ToggleFullscreen': + case 'SetRepeatMode': break; default: Logger.log('Unrecognized command: ' + cmd.Name); @@ -1430,7 +1431,8 @@ var Dashboard = { "SetSubtitleStreamIndex", "DisplayContent", "GoToSearch", - "DisplayMessage" + "DisplayMessage", + "SetRepeatMode" ]; }, diff --git a/dashboard-ui/scripts/tvrecommended.js b/dashboard-ui/scripts/tvrecommended.js index 735daac847..308b161cd0 100644 --- a/dashboard-ui/scripts/tvrecommended.js +++ b/dashboard-ui/scripts/tvrecommended.js @@ -166,7 +166,8 @@ context: 'tv', showDetailsMenu: true, overlayPlayButton: true, - preferThumb: true + preferThumb: true, + centerText: true }); } diff --git a/dashboard-ui/thirdparty/emby-icons.html b/dashboard-ui/thirdparty/emby-icons.html index d7746988e7..ca406bbcb8 100644 --- a/dashboard-ui/thirdparty/emby-icons.html +++ b/dashboard-ui/thirdparty/emby-icons.html @@ -123,6 +123,8 @@ See [iron-iconset](#iron-iconset) and [iron-iconset-svg](#iron-iconset-svg) for + + diff --git a/dashboard-ui/vulcanize-out.html b/dashboard-ui/vulcanize-out.html index 21d5a859e7..4bba1732bd 100644 --- a/dashboard-ui/vulcanize-out.html +++ b/dashboard-ui/vulcanize-out.html @@ -6854,7 +6854,6 @@ this.fire('dom-change'); -