diff --git a/dashboard-ui/bower_components/emby-webcomponents/.bower.json b/dashboard-ui/bower_components/emby-webcomponents/.bower.json index 8e7dfb90e3..ade6bfe7cf 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/.bower.json +++ b/dashboard-ui/bower_components/emby-webcomponents/.bower.json @@ -16,12 +16,12 @@ }, "devDependencies": {}, "ignore": [], - "version": "1.3.26", - "_release": "1.3.26", + "version": "1.3.27", + "_release": "1.3.27", "_resolution": { "type": "version", - "tag": "1.3.26", - "commit": "094d2fc7c9e0c008e1c44744da95a69d1aa6516f" + "tag": "1.3.27", + "commit": "d50eb817e00a23afb8fd5c5fe5a08745de291951" }, "_source": "https://github.com/MediaBrowser/emby-webcomponents.git", "_target": "^1.2.0", diff --git a/dashboard-ui/bower_components/emby-webcomponents/strings/kk.json b/dashboard-ui/bower_components/emby-webcomponents/strings/kk.json new file mode 100644 index 0000000000..121a5115f9 --- /dev/null +++ b/dashboard-ui/bower_components/emby-webcomponents/strings/kk.json @@ -0,0 +1,53 @@ +{ + "ValueSpecialEpisodeName": "\u0410\u0440\u043d\u0430\u0439\u044b - {0}", + "Share": "\u041e\u0440\u0442\u0430\u049b\u0442\u0430\u0441\u0443", + "ServerUpdateNeeded": "\u041e\u0441\u044b Emby Server \u0436\u0430\u04a3\u0430\u0440\u0442\u044b\u043b\u0443\u044b \u049b\u0430\u0436\u0435\u0442. \u0421\u043e\u04a3\u0493\u044b \u043d\u04b1\u0441\u049b\u0430\u0441\u044b\u043d \u0436\u04af\u043a\u0442\u0435\u043f \u0430\u043b\u0443 \u04af\u0448\u0456\u043d, {0} \u043a\u0456\u0440\u0456\u04a3\u0456\u0437", + "LiveTvGuideRequiresUnlock": "\u042d\u0444\u0438\u0440\u043b\u0456\u043a \u0422\u0435\u043b\u0435\u0433\u0438\u0434\u0442\u0435 \u049b\u0430\u0437\u0456\u0440\u0433\u0456 \u0443\u0430\u049b\u044b\u0442\u0442\u0430 {0} \u0430\u0440\u043d\u0430\u043b\u0430\u0440 \u0448\u0435\u043a\u0442\u0435\u043b\u0435\u0434\u0456. \u0422\u043e\u043b\u044b\u049b \u0442\u04d9\u0436\u0440\u0438\u0431\u0435 \u0430\u043b\u0443\u0493\u0430 \u04af\u0439\u0440\u0435\u043d\u0443 \u04af\u0448\u0456\u043d \u049a\u04b1\u0440\u0441\u0430\u0443\u044b\u043d \u0431\u043e\u0441\u0430\u0442\u0443 \u0442\u04af\u0439\u043c\u0435\u0448\u0456\u0433\u0456\u043d \u0431\u0430\u0441\u044b\u04a3\u044b\u0437.", + "AttributeNew": "\u0416\u0430\u04a3\u0430", + "AttributePremiere": "\u0422\u04b1\u0441\u0430\u0443\u043a\u0435\u0441\u0435\u0440\u0456", + "AttributeLive": "\u0422\u0456\u043a\u0435\u043b\u0435\u0439", + "TrackCount": "{0} \u0436\u043e\u043b\u0448\u044b\u049b", + "ItemCount": "{0} \u0442\u0430\u0440\u043c\u0430\u049b", + "ValueSeriesYearToPresent": "{0} - \u049b\u0430\u0437\u0456\u0440\u0434\u0435", + "ReleaseYearValue": "\u0428\u044b\u0493\u0430\u0440\u0443 \u0436\u043e\u043b\u044b: {0}", + "OriginalAirDateValue": "\u0411\u0430\u0441\u0442\u0430\u043f\u049b\u044b \u044d\u0444\u0438\u0440: {0}", + "EndsAtValue": "\u0410\u044f\u049b\u0442\u0430\u043b\u0443\u044b: {0}", + "OptionSundayShort": "\u0436\u0435\u043a", + "OptionMondayShort": "\u0434\u04af\u0439", + "OptionTuesdayShort": "\u0441\u0435\u0439", + "OptionWednesdayShort": "\u0441\u04d9\u0440", + "OptionThursdayShort": "\u0431\u0435\u0439", + "OptionFridayShort": "\u0436\u04b1\u043c", + "OptionSaturdayShort": "\u0441\u0435\u043d", + "HeaderSelectDate": "\u041a\u0435\u0437\u0434\u0456 \u0442\u0430\u04a3\u0434\u0430\u0443", + "ButtonOk": "\u0416\u0430\u0440\u0430\u0439\u0434\u044b", + "ButtonCancel": "\u0411\u043e\u043b\u0434\u044b\u0440\u043c\u0430\u0443", + "ButtonGotIt": "\u0422\u04af\u0441\u0456\u043d\u0456\u043a\u0442\u0456", + "RecordingScheduled": "\u0416\u0430\u0437\u0443 \u0436\u043e\u0441\u043f\u0430\u0440\u043b\u0430\u0493\u0430\u043d.", + "HeaderNewRecording": "\u0416\u0430\u04a3\u0430 \u0436\u0430\u0437\u0443", + "Sunday": "\u0436\u0435\u043a\u0441\u0435\u043d\u0431\u0456", + "Monday": "\u0434\u04af\u0439\u0441\u0435\u043d\u0431\u0456", + "Tuesday": "\u0441\u0435\u0439\u0441\u0435\u043d\u0431\u0456", + "Wednesday": "\u0441\u04d9\u0440\u0441\u0435\u043d\u0431\u0456", + "Thursday": "\u0431\u0435\u0439\u0441\u0435\u043d\u0431\u0456", + "Friday": "\u0436\u04b1\u043c\u0430", + "Saturday": "\u0441\u0435\u043d\u0431\u0456", + "Days": "\u041a\u04af\u043d\u0434\u0435\u0440", + "RecordSeries": "\u0422\u0435\u043b\u0435\u0445\u0438\u043a\u0430\u044f\u043d\u044b \u0436\u0430\u0437\u0443", + "PrePaddingMinutes": "\u0410\u043b\u0493\u0430 \u0448\u0435\u0433\u0456\u043d\u0456\u0441, \u043c\u0438\u043d:", + "PostPaddingMinutes": "\u0410\u0440\u0442\u049b\u0430 \u0448\u0435\u0433\u0456\u043d\u0456\u0441, \u043c\u0438\u043d", + "RecordOnAllChannels": "\u0411\u0430\u0440\u043b\u044b\u049b \u0430\u0440\u043d\u0430\u043b\u0430\u0440\u0434\u0430\u043d \u0436\u0430\u0437\u044b\u043f \u0430\u043b\u0443", + "RecordAnytime": "\u04d8\u0440 \u0443\u0430\u049b\u044b\u0442\u0442\u0430 \u0436\u0430\u0437\u044b\u043f \u0430\u043b\u0443", + "RecordOnlyNewEpisodes": "\u0422\u0435\u043a \u049b\u0430\u043d\u0430 \u0436\u0430\u04a3\u0430 \u0431\u04e9\u043b\u0456\u043c\u0434\u0435\u0440\u0434\u0456 \u0436\u0430\u0437\u044b\u043f \u0430\u043b\u0443", + "HeaderBecomeProjectSupporter": "Emby Premiere \u0430\u043b\u0443", + "HeaderEnjoyDayTrial": "\u0422\u0435\u0433\u0456\u043d \u0441\u044b\u043d\u0430\u0443\u0434\u044b 14 \u043a\u04af\u043d \u0442\u0430\u043c\u0430\u0448\u0430\u043b\u0430\u04a3\u044b\u0456\u0437", + "MessageActiveSubscriptionRequiredSeriesRecordings": "\u0422\u0435\u043b\u0435\u0445\u0438\u043a\u0430\u044f\u043b\u0430\u0440\u0434\u044b\u04a3 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0442\u044b \u0436\u0430\u0437\u0431\u0430\u0441\u044b\u043d \u0436\u0430\u0441\u0430\u0443 \u04af\u0448\u0456\u043d \u0431\u0435\u043b\u0441\u0435\u043d\u0434\u0456 Emby Premiere \u0436\u0430\u0437\u044b\u043b\u044b\u043c\u044b \u049b\u0430\u0436\u0435\u0442.", + "OptionConvertRecordingsToStreamingFormat": "\u0416\u0430\u0437\u0443\u043b\u0430\u0440\u0434\u044b \u0442\u0430\u0440\u0430\u0442\u0443 \u04af\u0448\u0456\u043d \u043e\u04a3\u0430\u0439 \u043f\u0456\u0448\u0456\u043c\u0433\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0442\u044b \u0442\u04af\u0440\u0434\u0435 \u0442\u04af\u0440\u043b\u0435\u043d\u0434\u0456\u0440\u0443", + "OptionConvertRecordingsToStreamingFormatHelp": "\u0416\u0430\u0437\u0431\u0430\u043b\u0430\u0440 \u049b\u04b1\u0440\u044b\u043b\u0493\u044b\u043b\u0430\u0440\u044b\u04a3\u044b\u0437\u0434\u0430 \u043e\u04a3\u0430\u0439 \u043e\u0439\u043d\u0430\u0442\u0443 \u04af\u0448\u0456\u043d \u043d\u0430\u049b\u0442\u044b \u0443\u0430\u049b\u044b\u0442\u0442\u0430 MP4 \u043f\u0456\u0448\u0456\u043c\u0456\u043d\u0435 \u0442\u04af\u0440\u043b\u0435\u043d\u0434\u0456\u0440\u0456\u043b\u0435\u0434\u0456.", + "FeatureRequiresEmbyPremiere": "\u041e\u0441\u044b \u049b\u04b1\u0440\u0430\u043c\u0434\u0430\u0441 \u04af\u0448\u0456\u043d \u0431\u0435\u043b\u0441\u0435\u043d\u0434\u0456 Emby Premiere \u0436\u0430\u0437\u044b\u043b\u044b\u043c\u044b \u049b\u0430\u0436\u0435\u0442", + "Record": "\u0416\u0430\u0437\u0443", + "Download": "\u0416\u04af\u043a\u0442\u0435\u043f \u0430\u043b\u0443", + "Advanced": "\u041a\u0435\u04a3\u0435\u0439\u0442\u0456\u043b\u0433\u0435\u043d", + "Refresh": "\u0416\u0430\u04a3\u0493\u044b\u0440\u0442\u0443", + "RefreshQueued": "\u0416\u0430\u04a3\u0493\u044b\u0440\u0442\u0443 \u043a\u0435\u0437\u0435\u043a\u0442\u0435" +} \ No newline at end of file diff --git a/dashboard-ui/bower_components/emby-webcomponents/strings/ru.json b/dashboard-ui/bower_components/emby-webcomponents/strings/ru.json new file mode 100644 index 0000000000..2c14e3066a --- /dev/null +++ b/dashboard-ui/bower_components/emby-webcomponents/strings/ru.json @@ -0,0 +1,53 @@ +{ + "ValueSpecialEpisodeName": "\u0421\u043f\u0435\u0446\u044d\u043f\u0438\u0437\u043e\u0434 - {0}", + "Share": "\u041f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f", + "ServerUpdateNeeded": "\u0414\u0430\u043d\u043d\u044b\u0439 Emby \u0421\u0435\u0440\u0432\u0435\u0440 \u043d\u0443\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438. \u0427\u0442\u043e\u0431\u044b \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0432\u0435\u0440\u0441\u0438\u044e, \u043f\u043e\u0441\u0435\u0442\u0438\u0442\u0435 {0}", + "LiveTvGuideRequiresUnlock": "\u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0442\u0435\u043b\u0435\u0433\u0438\u0434 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d {0} \u043a\u0430\u043d\u0430\u043b(\u043e\u043c\/\u0430\u043c\u0438). \u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 \u0420\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0443\u0437\u043d\u0430\u0442\u044c \u043a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442.", + "AttributeNew": "\u041d\u043e\u0432\u043e\u0435", + "AttributePremiere": "\u041f\u0440\u0435\u043c\u044c\u0435\u0440\u0430", + "AttributeLive": "\u042d\u0444\u0438\u0440", + "TrackCount": "{0} \u0434\u043e\u0440\u043e\u0436(\u043a\u0438\/\u0435\u043a)", + "ItemCount": "{0} \u044d\u043b\u0435\u043c\u0435\u043d\u0442(\u0430\/\u043e\u0432)", + "ValueSeriesYearToPresent": "{0} - \u041d.\u0412.", + "ReleaseYearValue": "\u0413\u043e\u0434 \u0432\u044b\u043f\u0443\u0441\u043a\u0430: {0}", + "OriginalAirDateValue": "\u0414\u0430\u0442\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u044d\u0444\u0438\u0440\u0430: {0}", + "EndsAtValue": "\u041a\u043e\u043d\u0447\u0430\u0435\u0442\u0441\u044f \u0432 {0}", + "OptionSundayShort": "\u0432\u0441\u043a", + "OptionMondayShort": "\u043f\u043d\u0434", + "OptionTuesdayShort": "\u0432\u0442\u0440", + "OptionWednesdayShort": "\u0441\u0440\u0434", + "OptionThursdayShort": "\u0447\u0442\u0432", + "OptionFridayShort": "\u043f\u0442\u043d", + "OptionSaturdayShort": "\u0441\u0431\u0442", + "HeaderSelectDate": "\u0412\u044b\u0431\u043e\u0440 \u0434\u0430\u0442\u044b", + "ButtonOk": "\u041e\u043a", + "ButtonCancel": "\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c", + "ButtonGotIt": "\u041f\u043e\u043d\u044f\u0442\u043d\u043e", + "RecordingScheduled": "\u0417\u0430\u043f\u0438\u0441\u044c \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430.", + "HeaderNewRecording": "\u041d\u043e\u0432\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c", + "Sunday": "\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435", + "Monday": "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a", + "Tuesday": "\u0432\u0442\u043e\u0440\u043d\u0438\u043a", + "Wednesday": "\u0441\u0440\u0435\u0434\u0430", + "Thursday": "\u0447\u0435\u0442\u0432\u0435\u0440\u0433", + "Friday": "\u043f\u044f\u0442\u043d\u0438\u0446\u0430", + "Saturday": "\u0441\u0443\u0431\u0431\u043e\u0442\u0430", + "Days": "\u0414\u043d\u0438", + "RecordSeries": "\u0417\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0435\u0440\u0438\u0430\u043b", + "PrePaddingMinutes": "\u041d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u043e\u0442\u0431\u0438\u0432\u043a\u0430, \u043c\u0438\u043d:", + "PostPaddingMinutes": "\u041a\u043e\u043d\u0435\u0447\u043d\u0430\u044f \u043e\u0442\u0431\u0438\u0432\u043a\u0430, \u043c\u0438\u043d:", + "RecordOnAllChannels": "\u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0441\u043e \u0432\u0441\u0435\u0445 \u043a\u0430\u043d\u0430\u043b\u043e\u0432", + "RecordAnytime": "\u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u0435 \u0432\u0440\u0435\u043c\u044f", + "RecordOnlyNewEpisodes": "\u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u043e\u0432\u044b\u0435 \u044d\u043f\u0438\u0437\u043e\u0434\u044b", + "HeaderBecomeProjectSupporter": "\u041f\u0440\u0438\u043e\u0431\u0440\u0435\u0441\u0442\u0438 Emby Premiere", + "HeaderEnjoyDayTrial": "\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u043d\u0430 14 \u0434\u043d\u0435\u0439", + "MessageActiveSubscriptionRequiredSeriesRecordings": "\u0414\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 Emby Premiere \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0441\u0435\u0440\u0438\u0439.", + "OptionConvertRecordingsToStreamingFormat": "\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0434\u043b\u044f \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438 \u0444\u043e\u0440\u043c\u0430\u0442", + "OptionConvertRecordingsToStreamingFormatHelp": "\u0417\u0430\u043f\u0438\u0441\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432 MP4 \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043d\u0430 \u0432\u0430\u0448\u0438\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445.", + "FeatureRequiresEmbyPremiere": "\u0414\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 Emby Premiere.", + "Record": "\u0417\u0430\u043f\u0438\u0441\u0430\u0442\u044c", + "Download": "\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c", + "Advanced": "\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0435", + "Refresh": "\u041f\u043e\u0434\u043d\u043e\u0432\u0438\u0442\u044c", + "RefreshQueued": "\u041f\u043e\u0434\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438" +} \ No newline at end of file diff --git a/dashboard-ui/bower_components/iron-a11y-announcer/.bower.json b/dashboard-ui/bower_components/iron-a11y-announcer/.bower.json index d0996a0614..1baafa9707 100644 --- a/dashboard-ui/bower_components/iron-a11y-announcer/.bower.json +++ b/dashboard-ui/bower_components/iron-a11y-announcer/.bower.json @@ -30,14 +30,14 @@ "web-component-tester": "polymer/web-component-tester#^3.4.0" }, "ignore": [], - "homepage": "https://github.com/PolymerElements/iron-a11y-announcer", + "homepage": "https://github.com/polymerelements/iron-a11y-announcer", "_release": "1.0.4", "_resolution": { "type": "version", "tag": "v1.0.4", "commit": "5ce3eb8c4282bb53cd72e348858dc6be6b4c50b9" }, - "_source": "git://github.com/PolymerElements/iron-a11y-announcer.git", + "_source": "git://github.com/polymerelements/iron-a11y-announcer.git", "_target": "^1.0.0", - "_originalSource": "PolymerElements/iron-a11y-announcer" + "_originalSource": "polymerelements/iron-a11y-announcer" } \ No newline at end of file diff --git a/dashboard-ui/bower_components/polymer/.bower.json b/dashboard-ui/bower_components/polymer/.bower.json index 3e8a4009a3..bbad7fe7ba 100644 --- a/dashboard-ui/bower_components/polymer/.bower.json +++ b/dashboard-ui/bower_components/polymer/.bower.json @@ -34,6 +34,6 @@ "commit": "11c987b2eb3c73b388a79fc8aaea8ca01624f514" }, "_source": "git://github.com/Polymer/polymer.git", - "_target": "^1.0.0", + "_target": "^1.1.0", "_originalSource": "Polymer/polymer" } \ No newline at end of file diff --git a/dashboard-ui/css/librarymenu.css b/dashboard-ui/css/librarymenu.css index 3a406d6c80..0293642d50 100644 --- a/dashboard-ui/css/librarymenu.css +++ b/dashboard-ui/css/librarymenu.css @@ -185,7 +185,6 @@ text-transform: uppercase; white-space: nowrap; padding: 0 0 0; - box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.2); } .libraryViewNav.bottom { @@ -195,7 +194,6 @@ .libraryViewNav { - justify-content: center; display: flex; display: block; text-align: center; @@ -224,8 +222,17 @@ height: auto; min-width: initial; line-height: initial; + border-radius: 0 !important; } + .libraryViewNav .pageTabButton:hover { + background-color: transparent; + } + + .libraryViewNav .pageTabButton:active { + background-color: rgba(100,100,100, 0.20); + } + .libraryViewNav .pageTabButton:focus { font-weight: 500 !important; } @@ -234,19 +241,21 @@ color: #fff !important; } - .libraryViewNav .pageTabButton:before { + .libraryViewNav .pageTabButton:after { content: ''; position: absolute; left: 0; border: 0; bottom: 0; height: 2px; - transition: all .12s cubic-bezier(.4,0,1,1); + transition: all .2s cubic-bezier(.4,0,1,1); right: 0; transform: translateX(-100%); + border-radius: 0; + z-index: 1; } - .libraryViewNav .pageTabButton.is-active:before { + .libraryViewNav .pageTabButton.is-active:after { transform: none; background: #52B54B; } @@ -448,6 +457,9 @@ body:not(.dashboardDocument) .btnNotifications { .darkDrawerPanel #drawer { background-color: #212121 !important; + /*background-color: rgba(40,40,40,.8) !important; + -webkit-backdrop-filter: blur(5px); + backdrop-filter: blur(5px);*/ box-shadow: none !important; } diff --git a/dashboard-ui/css/site.css b/dashboard-ui/css/site.css index fa181cf066..39b4e4b138 100644 --- a/dashboard-ui/css/site.css +++ b/dashboard-ui/css/site.css @@ -1562,12 +1562,12 @@ emby-collapsible > .style-scope { .ui-body-b .emby-collapsible-button { border: 1px solid #222; - background-color: #444; + background-color: #383838; text-transform: none; } .ui-body-b .emby-collapsible-title { - margin: .25em 0; + margin: 0; color: #fff; padding: 0 0 0 .5em; font-weight: 500; diff --git a/dashboard-ui/devices/android/android.css b/dashboard-ui/devices/android/android.css index 30c942594d..e10e5c746a 100644 --- a/dashboard-ui/devices/android/android.css +++ b/dashboard-ui/devices/android/android.css @@ -10,6 +10,10 @@ font-weight: bold !important; } +/*.libraryViewNav { + box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.2); +}*/ + @media all and (min-width: 300px) { .libraryViewNav { diff --git a/dashboard-ui/devices/ios/ios.css b/dashboard-ui/devices/ios/ios.css index 8e7276211c..664a22df2e 100644 --- a/dashboard-ui/devices/ios/ios.css +++ b/dashboard-ui/devices/ios/ios.css @@ -52,20 +52,18 @@ body:not(.dashboardDocument) .mainDrawerButton { box-shadow: none; } - .libraryViewNav a { + .libraryViewNav .pageTabButton { font-weight: 400; text-transform: none; - color: #ccc !important; - padding: 12px 13px 8px; } - .libraryViewNav .pageTabButton.is-active:after { - display: none !important; - } + .libraryViewNav .pageTabButton.is-active:after { + display: none !important; + } - .libraryViewNav .pageTabButton.is-active { - color: #52B54B !important; - } + .libraryViewNav .pageTabButton.is-active { + color: #52B54B !important; + } .ui-body-b .paperList:not(.criticReviewPaperList) { background-color: transparent; diff --git a/dashboard-ui/devices/windowsphone/wp.css b/dashboard-ui/devices/windowsphone/wp.css index 3b6400ec7c..80a2922017 100644 --- a/dashboard-ui/devices/windowsphone/wp.css +++ b/dashboard-ui/devices/windowsphone/wp.css @@ -17,14 +17,10 @@ background: #161616; } -.libraryViewNav .mdl-tabs__tab.is-active { +.libraryViewNav .pageTabButton.is-active { color: #52B54B !important; } - .libraryViewNav .mdl-tabs__tab.is-active:after { - background-color: transparent !important; - } - .libraryPage:not(.noSecondaryNavPage) { padding-top: 105px !important; } diff --git a/dashboard-ui/livetv.html b/dashboard-ui/livetv.html index 45e978a896..de77b5c242 100644 --- a/dashboard-ui/livetv.html +++ b/dashboard-ui/livetv.html @@ -1,4 +1,4 @@ -
+
diff --git a/dashboard-ui/music.html b/dashboard-ui/music.html index 8c4be880dc..f2067c60f9 100644 --- a/dashboard-ui/music.html +++ b/dashboard-ui/music.html @@ -1,4 +1,4 @@ -
+
diff --git a/dashboard-ui/scripts/channels.js b/dashboard-ui/scripts/channels.js index 908fe66101..124616ee80 100644 --- a/dashboard-ui/scripts/channels.js +++ b/dashboard-ui/scripts/channels.js @@ -76,7 +76,7 @@ var mdlTabs = page.querySelector('.libraryViewNav'); - libraryBrowser.configurePaperLibraryTabs(page, mdlTabs, page.querySelectorAll('.pageTabContent')); + libraryBrowser.configurePaperLibraryTabs(page, mdlTabs, page.querySelectorAll('.pageTabContent'), true); mdlTabs.addEventListener('tabchange', function (e) { loadTab(page, parseInt(e.detail.selectedTabIndex)); diff --git a/dashboard-ui/scripts/indexpage.js b/dashboard-ui/scripts/indexpage.js index d9761e7f23..1342d0c41b 100644 --- a/dashboard-ui/scripts/indexpage.js +++ b/dashboard-ui/scripts/indexpage.js @@ -249,7 +249,7 @@ var mdlTabs = view.querySelector('.libraryViewNav'); - libraryBrowser.configurePaperLibraryTabs(view, mdlTabs, view.querySelectorAll('.pageTabContent')); + libraryBrowser.configurePaperLibraryTabs(view, mdlTabs, view.querySelectorAll('.pageTabContent'), true); var tabControllers = []; var renderedTabs = []; diff --git a/dashboard-ui/scripts/librarybrowser.js b/dashboard-ui/scripts/librarybrowser.js index fecf0ed023..3e63539d9e 100644 --- a/dashboard-ui/scripts/librarybrowser.js +++ b/dashboard-ui/scripts/librarybrowser.js @@ -225,7 +225,7 @@ }); }, - configurePaperLibraryTabs: function (ownerpage, tabs, panels) { + configurePaperLibraryTabs: function (ownerpage, tabs, panels, animate) { if (!browserInfo.safari) { LibraryBrowser.configureSwipeTabs(ownerpage, tabs); @@ -235,6 +235,8 @@ for (var i = 0, length = buttons.length; i < length; i++) { buttons[i].classList.add('mdl-button'); buttons[i].classList.add('mdl-js-button'); + buttons[i].classList.add('mdl-js-ripple-effect'); + componentHandler.upgradeElement(buttons[i], 'MaterialButton'); } tabs.classList.add('hiddenScrollX'); @@ -275,9 +277,9 @@ panels[index].classList.add('is-active'); - //if (browserInfo.animate) { - // fadeInRight(panels[index]); - //} + if (browserInfo.animate && animate) { + fadeInRight(panels[index]); + } // If toCenter is called syncronously within the click event, it sometimes ends up canceling it //setTimeout(function() { @@ -1905,7 +1907,8 @@ var showTitle = options.showTitle == 'auto' ? true : options.showTitle; - if (item.Type == 'PhotoAlbum') { + // Force the title for these + if (item.Type == 'PhotoAlbum' || item.Type == 'Folder') { showTitle = true; } var coverImage = options.coverImage; diff --git a/dashboard-ui/scripts/livetvchannels.js b/dashboard-ui/scripts/livetvchannels.js index 016be14667..1006fc83ea 100644 --- a/dashboard-ui/scripts/livetvchannels.js +++ b/dashboard-ui/scripts/livetvchannels.js @@ -1,122 +1,126 @@ -define(['jQuery'], function ($) { - - var data = {}; - - function getPageData(context) { - var key = getSavedQueryKey(context); - var pageData = data[key]; - - if (!pageData) { - pageData = data[key] = { - query: { - StartIndex: 0, - EnableFavoriteSorting: true, - Limit: LibraryBrowser.getDefaultPageSize() - } - }; - - LibraryBrowser.loadSavedQueryValues(key, pageData.query); - } - return pageData; - } - - function getQuery(context) { - - return getPageData(context).query; - } - - function getSavedQueryKey(context) { - - if (!context.savedQueryKey) { - context.savedQueryKey = LibraryBrowser.getSavedQueryKey('channels'); - } - return context.savedQueryKey; - } - - function getChannelsHtml(channels) { - - return LibraryBrowser.getPosterViewHtml({ - items: channels, - shape: "square", - showTitle: true, - lazy: true, - cardLayout: true, - showDetailsMenu: true - }); - } - - function renderChannels(page, result) { - - var query = getQuery(page); - - $('.listTopPaging', page).html(LibraryBrowser.getQueryPagingHtml({ - startIndex: query.StartIndex, - limit: query.Limit, - totalRecordCount: result.TotalRecordCount, - showLimit: false, - updatePageSizeSetting: false, - filterButton: true - })); - - var html = getChannelsHtml(result.Items); - - var elem = page.querySelector('#items'); - elem.innerHTML = html; - ImageLoader.lazyChildren(elem); - - $('.btnNextPage', page).on('click', function () { - query.StartIndex += query.Limit; - reloadItems(page); - }); - - $('.btnPreviousPage', page).on('click', function () { - query.StartIndex -= query.Limit; - reloadItems(page); - }); - - $('.btnFilter', page).on('click', function () { - showFilterMenu(page); - }); - - LibraryBrowser.saveQueryValues(getSavedQueryKey(page), query); - } - - function showFilterMenu(page) { - - require(['components/filterdialog/filterdialog'], function (filterDialogFactory) { - - var filterDialog = new filterDialogFactory({ - query: getQuery(page), - mode: 'livetvchannels' - }); - - Events.on(filterDialog, 'filterchange', function () { - reloadItems(page); - }); - - filterDialog.show(); - }); - } - - function reloadItems(page) { - - Dashboard.showLoadingMsg(); - - var query = getQuery(page); - - query.UserId = Dashboard.getCurrentUserId(); - - ApiClient.getLiveTvChannels(query).then(function (result) { - - renderChannels(page, result); - - Dashboard.hideLoadingMsg(); - }); - } - - window.LiveTvPage.renderChannelsTab = function (page, tabContent) { - - reloadItems(tabContent); - }; - +define(['jQuery'], function ($) { + + return function (view, params, tabContent) { + + var self = this; + var data = {}; + + function getPageData(context) { + var key = getSavedQueryKey(context); + var pageData = data[key]; + + if (!pageData) { + pageData = data[key] = { + query: { + StartIndex: 0, + EnableFavoriteSorting: true, + Limit: LibraryBrowser.getDefaultPageSize() + } + }; + + LibraryBrowser.loadSavedQueryValues(key, pageData.query); + } + return pageData; + } + + function getQuery(context) { + + return getPageData(context).query; + } + + function getSavedQueryKey(context) { + + if (!context.savedQueryKey) { + context.savedQueryKey = LibraryBrowser.getSavedQueryKey('channels'); + } + return context.savedQueryKey; + } + + function getChannelsHtml(channels) { + + return LibraryBrowser.getPosterViewHtml({ + items: channels, + shape: "square", + showTitle: true, + lazy: true, + cardLayout: true, + showDetailsMenu: true + }); + } + + function renderChannels(context, result) { + + var query = getQuery(context); + + $('.listTopPaging', context).html(LibraryBrowser.getQueryPagingHtml({ + startIndex: query.StartIndex, + limit: query.Limit, + totalRecordCount: result.TotalRecordCount, + showLimit: false, + updatePageSizeSetting: false, + filterButton: true + })); + + var html = getChannelsHtml(result.Items); + + var elem = context.querySelector('#items'); + elem.innerHTML = html; + ImageLoader.lazyChildren(elem); + + $('.btnNextPage', context).on('click', function () { + query.StartIndex += query.Limit; + reloadItems(context); + }); + + $('.btnPreviousPage', context).on('click', function () { + query.StartIndex -= query.Limit; + reloadItems(context); + }); + + $('.btnFilter', context).on('click', function () { + showFilterMenu(context); + }); + + LibraryBrowser.saveQueryValues(getSavedQueryKey(context), query); + } + + function showFilterMenu(context) { + + require(['components/filterdialog/filterdialog'], function (filterDialogFactory) { + + var filterDialog = new filterDialogFactory({ + query: getQuery(context), + mode: 'livetvchannels' + }); + + Events.on(filterDialog, 'filterchange', function () { + reloadItems(context); + }); + + filterDialog.show(); + }); + } + + function reloadItems(context) { + + Dashboard.showLoadingMsg(); + + var query = getQuery(context); + + query.UserId = Dashboard.getCurrentUserId(); + + ApiClient.getLiveTvChannels(query).then(function (result) { + + renderChannels(context, result); + + Dashboard.hideLoadingMsg(); + }); + } + + self.renderTab = function () { + + reloadItems(tabContent); + }; + }; + }); \ No newline at end of file diff --git a/dashboard-ui/scripts/livetvguide.js b/dashboard-ui/scripts/livetvguide.js index d13286fddb..37f5dc286e 100644 --- a/dashboard-ui/scripts/livetvguide.js +++ b/dashboard-ui/scripts/livetvguide.js @@ -1,17 +1,15 @@ -define(['tvguide'], function (tvguide) { - - window.LiveTvPage.initGuideTab = function (page, tabContent) { - - }; - - window.LiveTvPage.renderGuideTab = function (page, tabContent) { - - if (!page.guideInstance) { - - page.guideInstance = new tvguide({ - element: tabContent - }); - } - }; - +define(['tvguide'], function (tvguide) { + + return function (view, params, tabContent) { + + var self = this; + var guideInstance; + self.renderTab = function () { + if (!guideInstance) { + guideInstance = new tvguide({ + element: tabContent + }); + } + }; + }; }); \ No newline at end of file diff --git a/dashboard-ui/scripts/livetvrecordings.js b/dashboard-ui/scripts/livetvrecordings.js index 0c87aaa064..76d69490da 100644 --- a/dashboard-ui/scripts/livetvrecordings.js +++ b/dashboard-ui/scripts/livetvrecordings.js @@ -1,170 +1,170 @@ -define(['jQuery'], function ($) { - - function getRecordingGroupHtml(group) { - - var html = ''; - - html += ''; - - html += ''; - - html += ''; - html += ''; - - html += '
'; - html += group.Name; - html += '
'; - - html += '
'; - if (group.RecordingCount == 1) { - html += Globalize.translate('ValueItemCount', group.RecordingCount); - } else { - html += Globalize.translate('ValueItemCountPlural', group.RecordingCount); - } - html += '
'; - - html += '
'; - html += '
'; - html += '
'; - - return html; - } - - function renderRecordingGroups(page, groups) { - - if (groups.length) { - $('#recordingGroups', page).show(); - } else { - $('#recordingGroups', page).hide(); - } - - var html = ''; - - html += '
'; - - for (var i = 0, length = groups.length; i < length; i++) { - - html += getRecordingGroupHtml(groups[i]); - } - - html += '
'; - - page.querySelector('#recordingGroupItems').innerHTML = html; - - Dashboard.hideLoadingMsg(); - } - - function renderRecordings(elem, recordings) { - - if (recordings.length) { - elem.classList.remove('hide'); - } else { - elem.classList.add('hide'); - } - - var recordingItems = elem.querySelector('.recordingItems'); - recordingItems.innerHTML = LibraryBrowser.getPosterViewHtml({ - items: recordings, - shape: "auto", - showTitle: true, - showParentTitle: true, - centerText: true, - coverImage: true, - lazy: true, - overlayPlayButton: true - - }); - - ImageLoader.lazyChildren(recordingItems); - } - - function renderActiveRecordings(page) { - - ApiClient.getLiveTvRecordings({ - - userId: Dashboard.getCurrentUserId(), - IsInProgress: true, - Fields: 'CanDelete' - - }).then(function (result) { - - renderRecordings(page.querySelector('#activeRecordings'), result.Items); - - }); - } - - function renderLatestRecordings(page) { - - ApiClient.getLiveTvRecordings({ - - userId: Dashboard.getCurrentUserId(), - limit: 4, - IsInProgress: false, - Fields: 'CanDelete,PrimaryImageAspectRatio' - - }).then(function (result) { - - renderRecordings(page.querySelector('#latestRecordings'), result.Items); - }); - } - - function renderTimers(page, timers) { - - LiveTvHelpers.getTimersHtml(timers).then(function (html) { - - var elem = page.querySelector('#upcomingRecordings'); - - if (html) { - elem.classList.remove('hide'); - } else { - elem.classList.add('hide'); - } - - elem.querySelector('.recordingItems').innerHTML = html; - - ImageLoader.lazyChildren(elem); - $(elem).createCardMenus(); - }); - } - - function renderUpcomingRecordings(page) { - - ApiClient.getLiveTvTimers().then(function (result) { - - renderTimers(page, result.Items); - }); - } - - function reload(page) { - - Dashboard.showLoadingMsg(); - - renderUpcomingRecordings(page); - renderActiveRecordings(page); - renderLatestRecordings(page); - - ApiClient.getLiveTvRecordingGroups({ - - userId: Dashboard.getCurrentUserId() - - }).then(function (result) { - - require(['paper-fab', 'paper-item-body', 'paper-icon-item'], function () { - renderRecordingGroups(page, result.Items); - }); - }); - } - - window.LiveTvPage.initRecordingsTab = function (page, tabContent) { - - tabContent.querySelector('#upcomingRecordings .recordingItems').addEventListener('timercancelled', function () { - reload(tabContent); - }); - }; - - window.LiveTvPage.renderRecordingsTab = function (page, tabContent) { - - reload(tabContent); - }; - +define(['jQuery', 'scripts/livetvcomponents'], function ($) { + + function getRecordingGroupHtml(group) { + + var html = ''; + + html += ''; + + html += ''; + + html += ''; + html += ''; + + html += '
'; + html += group.Name; + html += '
'; + + html += '
'; + if (group.RecordingCount == 1) { + html += Globalize.translate('ValueItemCount', group.RecordingCount); + } else { + html += Globalize.translate('ValueItemCountPlural', group.RecordingCount); + } + html += '
'; + + html += '
'; + html += '
'; + html += '
'; + + return html; + } + + function renderRecordingGroups(context, groups) { + + if (groups.length) { + $('#recordingGroups', context).show(); + } else { + $('#recordingGroups', context).hide(); + } + + var html = ''; + + html += '
'; + + for (var i = 0, length = groups.length; i < length; i++) { + + html += getRecordingGroupHtml(groups[i]); + } + + html += '
'; + + context.querySelector('#recordingGroupItems').innerHTML = html; + + Dashboard.hideLoadingMsg(); + } + + function renderRecordings(elem, recordings) { + + if (recordings.length) { + elem.classList.remove('hide'); + } else { + elem.classList.add('hide'); + } + + var recordingItems = elem.querySelector('.recordingItems'); + recordingItems.innerHTML = LibraryBrowser.getPosterViewHtml({ + items: recordings, + shape: "auto", + showTitle: true, + showParentTitle: true, + centerText: true, + coverImage: true, + lazy: true, + overlayPlayButton: true + + }); + + ImageLoader.lazyChildren(recordingItems); + } + + function renderActiveRecordings(context) { + + ApiClient.getLiveTvRecordings({ + + userId: Dashboard.getCurrentUserId(), + IsInProgress: true, + Fields: 'CanDelete' + + }).then(function (result) { + + renderRecordings(context.querySelector('#activeRecordings'), result.Items); + + }); + } + + function renderLatestRecordings(context) { + + ApiClient.getLiveTvRecordings({ + + userId: Dashboard.getCurrentUserId(), + limit: 4, + IsInProgress: false, + Fields: 'CanDelete,PrimaryImageAspectRatio' + + }).then(function (result) { + + renderRecordings(context.querySelector('#latestRecordings'), result.Items); + }); + } + + function renderTimers(context, timers) { + + LiveTvHelpers.getTimersHtml(timers).then(function (html) { + + var elem = context.querySelector('#upcomingRecordings'); + + if (html) { + elem.classList.remove('hide'); + } else { + elem.classList.add('hide'); + } + + elem.querySelector('.recordingItems').innerHTML = html; + + ImageLoader.lazyChildren(elem); + $(elem).createCardMenus(); + }); + } + + function renderUpcomingRecordings(context) { + + ApiClient.getLiveTvTimers().then(function (result) { + + renderTimers(context, result.Items); + }); + } + + function reload(context) { + + Dashboard.showLoadingMsg(); + + renderUpcomingRecordings(context); + renderActiveRecordings(context); + renderLatestRecordings(context); + + ApiClient.getLiveTvRecordingGroups({ + + userId: Dashboard.getCurrentUserId() + + }).then(function (result) { + + require(['paper-fab', 'paper-item-body', 'paper-icon-item'], function () { + renderRecordingGroups(context, result.Items); + }); + }); + } + + return function (view, params, tabContent) { + + var self = this; + tabContent.querySelector('#upcomingRecordings .recordingItems').addEventListener('timercancelled', function () { + reload(tabContent); + }); + + self.renderTab = function () { + reload(tabContent); + }; + }; + }); \ No newline at end of file diff --git a/dashboard-ui/scripts/livetvseriestimers.js b/dashboard-ui/scripts/livetvseriestimers.js index f1dd1dc6da..2f8f6ed81c 100644 --- a/dashboard-ui/scripts/livetvseriestimers.js +++ b/dashboard-ui/scripts/livetvseriestimers.js @@ -1,119 +1,123 @@ -define(['datetime', 'jQuery', 'paper-icon-button-light'], function (datetime, $) { - - var query = { - - SortBy: "SortName", - SortOrder: "Ascending" - }; - - function deleteSeriesTimer(page, id) { - - require(['confirm'], function (confirm) { - - confirm(Globalize.translate('MessageConfirmSeriesCancellation'), Globalize.translate('HeaderConfirmSeriesCancellation')).then(function () { - - Dashboard.showLoadingMsg(); - - ApiClient.cancelLiveTvSeriesTimer(id).then(function () { - - require(['toast'], function (toast) { - toast(Globalize.translate('MessageSeriesCancelled')); - }); - - reload(page); - }); - }); - }); - } - - function renderTimers(page, timers) { - - var html = ''; - - if (timers.length) { - html += ''; - } - - var elem = $('#items', page).html(html); - - $('.btnCancelSeries', elem).on('click', function () { - - deleteSeriesTimer(page, this.getAttribute('data-seriestimerid')); - - }); - - Dashboard.hideLoadingMsg(); - } - - function reload(page) { - - Dashboard.showLoadingMsg(); - - ApiClient.getLiveTvSeriesTimers(query).then(function (result) { - - require(['paper-fab', 'paper-item-body', 'paper-icon-item'], function () { - renderTimers(page, result.Items); - }); - }); - } - - window.LiveTvPage.renderSeriesTimersTab = function (page, tabContent) { - - reload(tabContent); - }; - +define(['datetime', 'jQuery', 'paper-icon-button-light'], function (datetime, $) { + + var query = { + + SortBy: "SortName", + SortOrder: "Ascending" + }; + + function deleteSeriesTimer(context, id) { + + require(['confirm'], function (confirm) { + + confirm(Globalize.translate('MessageConfirmSeriesCancellation'), Globalize.translate('HeaderConfirmSeriesCancellation')).then(function () { + + Dashboard.showLoadingMsg(); + + ApiClient.cancelLiveTvSeriesTimer(id).then(function () { + + require(['toast'], function (toast) { + toast(Globalize.translate('MessageSeriesCancelled')); + }); + + reload(context); + }); + }); + }); + } + + function renderTimers(context, timers) { + + var html = ''; + + if (timers.length) { + html += ''; + } + + var elem = $('#items', context).html(html); + + $('.btnCancelSeries', elem).on('click', function () { + + deleteSeriesTimer(context, this.getAttribute('data-seriestimerid')); + + }); + + Dashboard.hideLoadingMsg(); + } + + function reload(context) { + + Dashboard.showLoadingMsg(); + + ApiClient.getLiveTvSeriesTimers(query).then(function (result) { + + require(['paper-fab', 'paper-item-body', 'paper-icon-item'], function () { + renderTimers(context, result.Items); + }); + }); + } + + return function (view, params, tabContent) { + + var self = this; + self.renderTab = function () { + + reload(tabContent); + }; + }; + }); \ No newline at end of file diff --git a/dashboard-ui/scripts/livetvsuggested.js b/dashboard-ui/scripts/livetvsuggested.js index 84522948ce..029afaf1bf 100644 --- a/dashboard-ui/scripts/livetvsuggested.js +++ b/dashboard-ui/scripts/livetvsuggested.js @@ -125,106 +125,110 @@ ImageLoader.lazyChildren(elem); } - function initSuggestedTab(page, tabContent) { + return function (view, params) { - if (enableScrollX()) { - $('.itemsContainer', tabContent).addClass('hiddenScrollX').createCardMenus(); - } else { - $('.itemsContainer', tabContent).removeClass('hiddenScrollX').createCardMenus(); - } - } + var self = this; - function renderSuggestedTab(page, tabContent) { + self.initTab = function () { - reload(tabContent); - } + var tabContent = view.querySelector('.pageTabContent[data-index=\'' + 0 + '\']'); + if (enableScrollX()) { + $('.itemsContainer', tabContent).addClass('hiddenScrollX').createCardMenus(); + } else { + $('.itemsContainer', tabContent).removeClass('hiddenScrollX').createCardMenus(); + } + }; - function loadTab(page, index) { + self.renderTab = function () { + var tabContent = view.querySelector('.pageTabContent[data-index=\'' + 0 + '\']'); + reload(tabContent); + }; - var tabContent = page.querySelector('.pageTabContent[data-index=\'' + index + '\']'); - var depends = []; - var scope = 'LiveTvPage'; - var renderMethod = ''; - var initMethod = ''; + var tabControllers = []; + var renderedTabs = []; - var viewMenuBar = document.querySelector('.viewMenuBar'); + function loadTab(page, index) { - switch (index) { + var tabContent = page.querySelector('.pageTabContent[data-index=\'' + index + '\']'); + var depends = []; - case 0: - renderMethod = 'renderSuggestedTab'; - initMethod = 'initSuggestedTab'; - break; - case 1: - depends.push('registrationservices'); - depends.push('scripts/livetvguide'); - renderMethod = 'renderGuideTab'; - initMethod = 'initGuideTab'; - break; - case 2: - depends.push('scripts/livetvchannels'); - depends.push('paper-icon-item'); - depends.push('paper-item-body'); - renderMethod = 'renderChannelsTab'; - break; - case 3: - depends.push('scripts/livetvrecordings'); - initMethod = 'initRecordingsTab'; - renderMethod = 'renderRecordingsTab'; - break; - case 4: - depends.push('scripts/livetvseriestimers'); - renderMethod = 'renderSeriesTimersTab'; - break; - default: - break; - } + switch (index) { - require(depends, function () { - - if (initMethod && !tabContent.initComplete) { - - window[scope][initMethod](page, tabContent); - tabContent.initComplete = true; + case 0: + break; + case 1: + depends.push('scripts/livetvguide'); + break; + case 2: + depends.push('scripts/livetvchannels'); + depends.push('paper-icon-item'); + depends.push('paper-item-body'); + break; + case 3: + depends.push('scripts/livetvrecordings'); + break; + case 4: + depends.push('scripts/livetvseriestimers'); + break; + default: + break; } - window[scope][renderMethod](page, tabContent); + require(depends, function (controllerFactory) { - }); - } + if (index == 0) { + self.tabContent = tabContent; + } + var controller = tabControllers[index]; + if (!controller) { + controller = index ? new controllerFactory(view, params, tabContent) : self; + tabControllers[index] = controller; - pageIdOn('pageinit', "liveTvSuggestedPage", function () { + if (controller.initTab) { + controller.initTab(); + } + } - var page = this; + if (renderedTabs.indexOf(index) == -1) { + renderedTabs.push(index); + controller.renderTab(); + } + }); + } - var mdlTabs = page.querySelector('.libraryViewNav'); + var mdlTabs = view.querySelector('.libraryViewNav'); - libraryBrowser.configurePaperLibraryTabs(page, mdlTabs, page.querySelectorAll('.pageTabContent')); + var baseUrl = 'tv.html'; + var topParentId = params.topParentId; + if (topParentId) { + baseUrl += '?topParentId=' + topParentId; + } + + libraryBrowser.configurePaperLibraryTabs(view, mdlTabs, view.querySelectorAll('.pageTabContent'), true); mdlTabs.addEventListener('tabchange', function (e) { - loadTab(page, parseInt(e.detail.selectedTabIndex)); + loadTab(view, parseInt(e.detail.selectedTabIndex)); }); - }); - pageIdOn('viewshow', "liveTvSuggestedPage", function () { + view.addEventListener('viewshow', function (e) { - var page = this; + // Needed on the guide tab + // Ideally this should be moved to the guide tab on show/hide + document.body.classList.add('autoScrollY'); + }); - // Needed on the guide tab - // Ideally this should be moved to the guide tab on show/hide - document.body.classList.add('autoScrollY'); - }); + view.addEventListener('viewbeforehide', function (e) { - pageIdOn('viewbeforehide', "liveTvSuggestedPage", function () { + document.body.classList.remove('autoScrollY'); + }); - var page = this; + view.addEventListener('viewdestroy', function (e) { - document.body.classList.remove('autoScrollY'); - }); - - window.LiveTvPage = { - renderSuggestedTab: renderSuggestedTab, - initSuggestedTab: initSuggestedTab + tabControllers.forEach(function (t) { + if (t.destroy) { + t.destroy(); + } + }); + }); }; - }); \ No newline at end of file diff --git a/dashboard-ui/scripts/musicalbumartists.js b/dashboard-ui/scripts/musicalbumartists.js index 8409ef2ea0..f05469d4a8 100644 --- a/dashboard-ui/scripts/musicalbumartists.js +++ b/dashboard-ui/scripts/musicalbumartists.js @@ -1,161 +1,163 @@ define(['jQuery'], function ($) { - var data = {}; - function getPageData(context) { - var key = getSavedQueryKey(context); - var pageData = data[key]; + return function (view, params, tabContent) { - if (!pageData) { - pageData = data[key] = { - query: { - SortBy: "SortName", - SortOrder: "Ascending", - Recursive: true, - Fields: "PrimaryImageAspectRatio,SortName,DateCreated,SyncInfo,ItemCounts", - StartIndex: 0, - ImageTypeLimit: 1, - EnableImageTypes: "Primary,Backdrop,Banner,Thumb", - Limit: LibraryBrowser.getDefaultPageSize() - }, - view: LibraryBrowser.getSavedView(key) || LibraryBrowser.getDefaultItemsView('Poster', 'Poster') - }; + var self = this; - pageData.query.ParentId = LibraryMenu.getTopParentId(); - LibraryBrowser.loadSavedQueryValues(key, pageData.query); + var data = {}; + function getPageData(context) { + var key = getSavedQueryKey(context); + var pageData = data[key]; + + if (!pageData) { + pageData = data[key] = { + query: { + SortBy: "SortName", + SortOrder: "Ascending", + Recursive: true, + Fields: "PrimaryImageAspectRatio,SortName,DateCreated,SyncInfo,ItemCounts", + StartIndex: 0, + ImageTypeLimit: 1, + EnableImageTypes: "Primary,Backdrop,Banner,Thumb", + Limit: LibraryBrowser.getDefaultPageSize() + }, + view: LibraryBrowser.getSavedView(key) || LibraryBrowser.getDefaultItemsView('Poster', 'Poster') + }; + + pageData.query.ParentId = LibraryMenu.getTopParentId(); + LibraryBrowser.loadSavedQueryValues(key, pageData.query); + } + return pageData; } - return pageData; - } - function getQuery(context) { + function getQuery(context) { - return getPageData(context).query; - } - - function getSavedQueryKey(context) { - - if (!context.savedQueryKey) { - context.savedQueryKey = LibraryBrowser.getSavedQueryKey('albumartists'); + return getPageData(context).query; } - return context.savedQueryKey; - } - function reloadItems(page) { + function getSavedQueryKey(context) { - Dashboard.showLoadingMsg(); - - var query = getQuery(page); - - ApiClient.getAlbumArtists(Dashboard.getCurrentUserId(), query).then(function (result) { - - // Scroll back up so they can see the results from the beginning - window.scrollTo(0, 0); - - var view = getPageData(page).view; - - var html = ''; - var pagingHtml = LibraryBrowser.getQueryPagingHtml({ - startIndex: query.StartIndex, - limit: query.Limit, - totalRecordCount: result.TotalRecordCount, - showLimit: false, - updatePageSizeSetting: false, - addLayoutButton: true, - currentLayout: view, - filterButton: true - }); - - page.querySelector('.listTopPaging').innerHTML = pagingHtml; - - updateFilterControls(page); - - if (view == "List") { - - html = LibraryBrowser.getListViewHtml({ - items: result.Items, - context: 'music', - sortBy: query.SortBy - }); + if (!context.savedQueryKey) { + context.savedQueryKey = LibraryBrowser.getSavedQueryKey('albumartists'); } - else if (view == "Poster") { - html = LibraryBrowser.getPosterViewHtml({ - items: result.Items, - shape: "square", - context: 'music', - showTitle: true, - coverImage: true, - lazy: true, - centerText: true, - overlayPlayButton: true + return context.savedQueryKey; + } + + function reloadItems(page) { + + Dashboard.showLoadingMsg(); + + var query = getQuery(page); + + ApiClient.getAlbumArtists(Dashboard.getCurrentUserId(), query).then(function (result) { + + // Scroll back up so they can see the results from the beginning + window.scrollTo(0, 0); + + var view = getPageData(page).view; + + var html = ''; + var pagingHtml = LibraryBrowser.getQueryPagingHtml({ + startIndex: query.StartIndex, + limit: query.Limit, + totalRecordCount: result.TotalRecordCount, + showLimit: false, + updatePageSizeSetting: false, + addLayoutButton: true, + currentLayout: view, + filterButton: true }); - } - else if (view == "PosterCard") { - html = LibraryBrowser.getPosterViewHtml({ - items: result.Items, - shape: "square", - context: 'music', - showTitle: true, - coverImage: true, - lazy: true, - cardLayout: true, - showSongCount: true + page.querySelector('.listTopPaging').innerHTML = pagingHtml; + + updateFilterControls(page); + + if (view == "List") { + + html = LibraryBrowser.getListViewHtml({ + items: result.Items, + context: 'music', + sortBy: query.SortBy + }); + } + else if (view == "Poster") { + html = LibraryBrowser.getPosterViewHtml({ + items: result.Items, + shape: "square", + context: 'music', + showTitle: true, + coverImage: true, + lazy: true, + centerText: true, + overlayPlayButton: true + }); + } + else if (view == "PosterCard") { + + html = LibraryBrowser.getPosterViewHtml({ + items: result.Items, + shape: "square", + context: 'music', + showTitle: true, + coverImage: true, + lazy: true, + cardLayout: true, + showSongCount: true + }); + } + + var elem = page.querySelector('#items'); + elem.innerHTML = html + pagingHtml; + ImageLoader.lazyChildren(elem); + + $('.btnNextPage', page).on('click', function () { + query.StartIndex += query.Limit; + reloadItems(page); }); - } - var elem = page.querySelector('#items'); - elem.innerHTML = html + pagingHtml; - ImageLoader.lazyChildren(elem); + $('.btnPreviousPage', page).on('click', function () { + query.StartIndex -= query.Limit; + reloadItems(page); + }); - $('.btnNextPage', page).on('click', function () { - query.StartIndex += query.Limit; - reloadItems(page); + $('.btnChangeLayout', page).on('layoutchange', function (e, layout) { + getPageData(page).view = layout; + LibraryBrowser.saveViewSetting(getSavedQueryKey(page), layout); + reloadItems(page); + }); + + $('.btnFilter', page).on('click', function () { + showFilterMenu(page); + }); + + LibraryBrowser.saveQueryValues(getSavedQueryKey(page), query); + Dashboard.hideLoadingMsg(); }); + } - $('.btnPreviousPage', page).on('click', function () { - query.StartIndex -= query.Limit; - reloadItems(page); + function showFilterMenu(page) { + + require(['components/filterdialog/filterdialog'], function (filterDialogFactory) { + + var filterDialog = new filterDialogFactory({ + query: getQuery(page), + mode: 'albumartists' + }); + + Events.on(filterDialog, 'filterchange', function () { + reloadItems(page); + }); + + filterDialog.show(); }); + } - $('.btnChangeLayout', page).on('layoutchange', function (e, layout) { - getPageData(page).view = layout; - LibraryBrowser.saveViewSetting(getSavedQueryKey(page), layout); - reloadItems(page); - }); + function updateFilterControls(tabContent) { - $('.btnFilter', page).on('click', function () { - showFilterMenu(page); - }); + var query = getQuery(tabContent); - LibraryBrowser.saveQueryValues(getSavedQueryKey(page), query); - Dashboard.hideLoadingMsg(); - }); - } - - function showFilterMenu(page) { - - require(['components/filterdialog/filterdialog'], function (filterDialogFactory) { - - var filterDialog = new filterDialogFactory({ - query: getQuery(page), - mode: 'albumartists' - }); - - Events.on(filterDialog, 'filterchange', function () { - reloadItems(page); - }); - - filterDialog.show(); - }); - } - - function updateFilterControls(tabContent) { - - var query = getQuery(tabContent); - - $('.alphabetPicker', tabContent).alphaValue(query.NameStartsWithOrGreater); - } - - function initPage(tabContent) { + $('.alphabetPicker', tabContent).alphaValue(query.NameStartsWithOrGreater); + } $('.alphabetPicker', tabContent).on('alphaselect', function (e, character) { @@ -174,16 +176,11 @@ reloadItems(tabContent); }); - } - window.MusicPage.initAlbumArtistsTab = function (page, tabContent) { + self.renderTab = function () { - initPage(tabContent); - }; - - window.MusicPage.renderAlbumArtistsTab = function (page, tabContent) { - - reloadItems(tabContent); + reloadItems(tabContent); + }; }; }); \ No newline at end of file diff --git a/dashboard-ui/scripts/musicalbums.js b/dashboard-ui/scripts/musicalbums.js index d04ec5aeb9..55de337146 100644 --- a/dashboard-ui/scripts/musicalbums.js +++ b/dashboard-ui/scripts/musicalbums.js @@ -1,214 +1,216 @@ define(['jQuery'], function ($) { - var data = {}; - function getPageData(context) { - var key = getSavedQueryKey(context); - var pageData = data[key]; + return function (view, params, tabContent) { - if (!pageData) { - pageData = data[key] = { - query: { - SortBy: "SortName", - SortOrder: "Ascending", - IncludeItemTypes: "MusicAlbum", - Recursive: true, - Fields: "PrimaryImageAspectRatio,SortName,SyncInfo", - StartIndex: 0, - ImageTypeLimit: 1, - EnableImageTypes: "Primary,Backdrop,Banner,Thumb", - Limit: LibraryBrowser.getDefaultPageSize() - }, - view: LibraryBrowser.getSavedView(key) || LibraryBrowser.getDefaultItemsView('Poster', 'Poster') - }; + var self = this; - pageData.query.ParentId = LibraryMenu.getTopParentId(); - LibraryBrowser.loadSavedQueryValues(key, pageData.query); + var data = {}; + function getPageData(context) { + var key = getSavedQueryKey(context); + var pageData = data[key]; + + if (!pageData) { + pageData = data[key] = { + query: { + SortBy: "SortName", + SortOrder: "Ascending", + IncludeItemTypes: "MusicAlbum", + Recursive: true, + Fields: "PrimaryImageAspectRatio,SortName,SyncInfo", + StartIndex: 0, + ImageTypeLimit: 1, + EnableImageTypes: "Primary,Backdrop,Banner,Thumb", + Limit: LibraryBrowser.getDefaultPageSize() + }, + view: LibraryBrowser.getSavedView(key) || LibraryBrowser.getDefaultItemsView('Poster', 'Poster') + }; + + pageData.query.ParentId = LibraryMenu.getTopParentId(); + LibraryBrowser.loadSavedQueryValues(key, pageData.query); + } + return pageData; } - return pageData; - } - function getQuery(context) { + function getQuery(context) { - return getPageData(context).query; - } - - function getSavedQueryKey(context) { - - if (!context.savedQueryKey) { - context.savedQueryKey = LibraryBrowser.getSavedQueryKey('albums'); + return getPageData(context).query; } - return context.savedQueryKey; - } - function reloadItems(page) { + function getSavedQueryKey(context) { - Dashboard.showLoadingMsg(); - - var query = getQuery(page); - - ApiClient.getItems(Dashboard.getCurrentUserId(), query).then(function (result) { - - // Scroll back up so they can see the results from the beginning - window.scrollTo(0, 0); - - var html = ''; - var view = getPageData(page).view; - var pagingHtml = LibraryBrowser.getQueryPagingHtml({ - startIndex: query.StartIndex, - limit: query.Limit, - totalRecordCount: result.TotalRecordCount, - showLimit: false, - sortButton: true, - addLayoutButton: true, - currentLayout: view, - updatePageSizeSetting: false, - layouts: 'List,Poster,PosterCard,Timeline', - filterButton: true - }); - - page.querySelector('.listTopPaging').innerHTML = pagingHtml; - - updateFilterControls(page); - - if (view == "Poster") { - html = LibraryBrowser.getPosterViewHtml({ - items: result.Items, - shape: "square", - context: 'music', - showTitle: true, - showParentTitle: true, - lazy: true, - centerText: true, - overlayPlayButton: true - }); + if (!context.savedQueryKey) { + context.savedQueryKey = LibraryBrowser.getSavedQueryKey('albums'); } - else if (view == "PosterCard") { + return context.savedQueryKey; + } - html = LibraryBrowser.getPosterViewHtml({ - items: result.Items, - shape: "square", - context: 'music', - showTitle: true, - coverImage: true, - showParentTitle: true, - lazy: true, - cardLayout: true + function reloadItems(page) { + + Dashboard.showLoadingMsg(); + + var query = getQuery(page); + + ApiClient.getItems(Dashboard.getCurrentUserId(), query).then(function (result) { + + // Scroll back up so they can see the results from the beginning + window.scrollTo(0, 0); + + var html = ''; + var view = getPageData(page).view; + var pagingHtml = LibraryBrowser.getQueryPagingHtml({ + startIndex: query.StartIndex, + limit: query.Limit, + totalRecordCount: result.TotalRecordCount, + showLimit: false, + sortButton: true, + addLayoutButton: true, + currentLayout: view, + updatePageSizeSetting: false, + layouts: 'List,Poster,PosterCard,Timeline', + filterButton: true }); - } - else if (view == "List") { - html = LibraryBrowser.getListViewHtml({ - items: result.Items, - context: 'music', - sortBy: query.SortBy - }); - } - else if (view == "Timeline") { - html = LibraryBrowser.getPosterViewHtml({ - items: result.Items, - shape: "square", - context: 'music', - showTitle: true, - showParentTitle: true, - timeline: true, - lazy: true - }); - } + page.querySelector('.listTopPaging').innerHTML = pagingHtml; - var elem = page.querySelector('#items'); - elem.innerHTML = html + pagingHtml; - ImageLoader.lazyChildren(elem); + updateFilterControls(page); - $('.btnNextPage', page).on('click', function () { - query.StartIndex += query.Limit; - reloadItems(page); - }); + if (view == "Poster") { + html = LibraryBrowser.getPosterViewHtml({ + items: result.Items, + shape: "square", + context: 'music', + showTitle: true, + showParentTitle: true, + lazy: true, + centerText: true, + overlayPlayButton: true + }); + } + else if (view == "PosterCard") { - $('.btnPreviousPage', page).on('click', function () { - query.StartIndex -= query.Limit; - reloadItems(page); - }); + html = LibraryBrowser.getPosterViewHtml({ + items: result.Items, + shape: "square", + context: 'music', + showTitle: true, + coverImage: true, + showParentTitle: true, + lazy: true, + cardLayout: true + }); + } + else if (view == "List") { - $('.btnFilter', page).on('click', function () { - showFilterMenu(page); - }); - - $('.btnChangeLayout', page).on('layoutchange', function (e, layout) { - - if (layout == 'Timeline') { - getQuery(page).SortBy = 'ProductionYear,PremiereDate,SortName'; - getQuery(page).SortOrder = 'Descending'; + html = LibraryBrowser.getListViewHtml({ + items: result.Items, + context: 'music', + sortBy: query.SortBy + }); + } + else if (view == "Timeline") { + html = LibraryBrowser.getPosterViewHtml({ + items: result.Items, + shape: "square", + context: 'music', + showTitle: true, + showParentTitle: true, + timeline: true, + lazy: true + }); } - getPageData(page).view = layout; - LibraryBrowser.saveViewSetting(getSavedQueryKey(page), layout); - reloadItems(page); - }); + var elem = page.querySelector('#items'); + elem.innerHTML = html + pagingHtml; + ImageLoader.lazyChildren(elem); - // On callback make sure to set StartIndex = 0 - $('.btnSort', page).on('click', function () { - LibraryBrowser.showSortMenu({ - items: [{ - name: Globalize.translate('OptionNameSort'), - id: 'SortName' - }, - { - name: Globalize.translate('OptionAlbumArtist'), - id: 'AlbumArtist,SortName' - }, - { - name: Globalize.translate('OptionCommunityRating'), - id: 'CommunityRating,SortName' - }, - { - name: Globalize.translate('OptionCriticRating'), - id: 'CriticRating,SortName' - }, - { - name: Globalize.translate('OptionDateAdded'), - id: 'DateCreated,SortName' - }, - { - name: Globalize.translate('OptionReleaseDate'), - id: 'ProductionYear,PremiereDate,SortName' - }], - callback: function () { - reloadItems(page); - }, - query: query + $('.btnNextPage', page).on('click', function () { + query.StartIndex += query.Limit; + reloadItems(page); }); + + $('.btnPreviousPage', page).on('click', function () { + query.StartIndex -= query.Limit; + reloadItems(page); + }); + + $('.btnFilter', page).on('click', function () { + showFilterMenu(page); + }); + + $('.btnChangeLayout', page).on('layoutchange', function (e, layout) { + + if (layout == 'Timeline') { + getQuery(page).SortBy = 'ProductionYear,PremiereDate,SortName'; + getQuery(page).SortOrder = 'Descending'; + } + + getPageData(page).view = layout; + LibraryBrowser.saveViewSetting(getSavedQueryKey(page), layout); + reloadItems(page); + }); + + // On callback make sure to set StartIndex = 0 + $('.btnSort', page).on('click', function () { + LibraryBrowser.showSortMenu({ + items: [{ + name: Globalize.translate('OptionNameSort'), + id: 'SortName' + }, + { + name: Globalize.translate('OptionAlbumArtist'), + id: 'AlbumArtist,SortName' + }, + { + name: Globalize.translate('OptionCommunityRating'), + id: 'CommunityRating,SortName' + }, + { + name: Globalize.translate('OptionCriticRating'), + id: 'CriticRating,SortName' + }, + { + name: Globalize.translate('OptionDateAdded'), + id: 'DateCreated,SortName' + }, + { + name: Globalize.translate('OptionReleaseDate'), + id: 'ProductionYear,PremiereDate,SortName' + }], + callback: function () { + reloadItems(page); + }, + query: query + }); + }); + + LibraryBrowser.saveQueryValues(getSavedQueryKey(page), query); + Dashboard.hideLoadingMsg(); }); + } - LibraryBrowser.saveQueryValues(getSavedQueryKey(page), query); - Dashboard.hideLoadingMsg(); - }); - } + function showFilterMenu(page) { - function showFilterMenu(page) { + require(['components/filterdialog/filterdialog'], function (filterDialogFactory) { - require(['components/filterdialog/filterdialog'], function (filterDialogFactory) { + var filterDialog = new filterDialogFactory({ + query: getQuery(page), + mode: 'albums' + }); - var filterDialog = new filterDialogFactory({ - query: getQuery(page), - mode: 'albums' + Events.on(filterDialog, 'filterchange', function () { + reloadItems(page); + }); + + filterDialog.show(); }); + } - Events.on(filterDialog, 'filterchange', function () { - reloadItems(page); - }); + function updateFilterControls(page) { - filterDialog.show(); - }); - } + var query = getQuery(page); - function updateFilterControls(page) { - - var query = getQuery(page); - - $('.alphabetPicker', page).alphaValue(query.NameStartsWithOrGreater); - } - - function initPage(tabContent) { + $('.alphabetPicker', page).alphaValue(query.NameStartsWithOrGreater); + } $('.alphabetPicker', tabContent).on('alphaselect', function (e, character) { @@ -235,16 +237,10 @@ reloadItems(tabContent); }); - } - window.MusicPage.initAlbumsTab = function (page, tabContent) { + self.renderTab = function () { - initPage(tabContent); + reloadItems(tabContent); + }; }; - - window.MusicPage.renderAlbumsTab = function (page, tabContent) { - - reloadItems(tabContent); - }; - }); \ No newline at end of file diff --git a/dashboard-ui/scripts/musicartists.js b/dashboard-ui/scripts/musicartists.js index 7801715516..3fa00ba7a3 100644 --- a/dashboard-ui/scripts/musicartists.js +++ b/dashboard-ui/scripts/musicartists.js @@ -1,189 +1,184 @@ -define(['jQuery'], function ($) { - - var data = {}; - function getPageData(context) { - var key = getSavedQueryKey(context); - var pageData = data[key]; - - if (!pageData) { - pageData = data[key] = { - query: { - SortBy: "SortName", - SortOrder: "Ascending", - Recursive: true, - Fields: "PrimaryImageAspectRatio,SortName,DateCreated,SyncInfo,ItemCounts", - StartIndex: 0, - ImageTypeLimit: 1, - EnableImageTypes: "Primary,Backdrop,Banner,Thumb", - Limit: LibraryBrowser.getDefaultPageSize() - }, - view: LibraryBrowser.getSavedView(key) || LibraryBrowser.getDefaultItemsView('Poster', 'Poster') - }; - - pageData.query.ParentId = LibraryMenu.getTopParentId(); - LibraryBrowser.loadSavedQueryValues(key, pageData.query); - } - return pageData; - } - - function getQuery(context) { - - return getPageData(context).query; - } - - function getSavedQueryKey(context) { - - if (!context.savedQueryKey) { - context.savedQueryKey = LibraryBrowser.getSavedQueryKey('artists'); - } - return context.savedQueryKey; - } - - function reloadItems(page) { - - Dashboard.showLoadingMsg(); - - var query = getQuery(page); - - ApiClient.getArtists(Dashboard.getCurrentUserId(), query).then(function (result) { - - // Scroll back up so they can see the results from the beginning - window.scrollTo(0, 0); - - var view = getPageData(page).view; - - var html = ''; - var pagingHtml = LibraryBrowser.getQueryPagingHtml({ - startIndex: query.StartIndex, - limit: query.Limit, - totalRecordCount: result.TotalRecordCount, - showLimit: false, - updatePageSizeSetting: false, - addLayoutButton: true, - currentLayout: view, - filterButton: true - }); - - page.querySelector('.listTopPaging').innerHTML = pagingHtml; - - updateFilterControls(page); - - if (view == "List") { - - html = LibraryBrowser.getListViewHtml({ - items: result.Items, - context: 'music', - sortBy: query.SortBy - }); - } - else if (view == "Poster") { - html = LibraryBrowser.getPosterViewHtml({ - items: result.Items, - shape: "square", - context: 'music', - showTitle: true, - coverImage: true, - lazy: true, - centerText: true, - overlayPlayButton: true - }); - } - else if (view == "PosterCard") { - - html = LibraryBrowser.getPosterViewHtml({ - items: result.Items, - shape: "square", - context: 'music', - showTitle: true, - coverImage: true, - lazy: true, - cardLayout: true, - showSongCount: true - }); - } - - var elem = page.querySelector('#items'); - elem.innerHTML = html + pagingHtml; - ImageLoader.lazyChildren(elem); - - $('.btnNextPage', page).on('click', function () { - query.StartIndex += query.Limit; - reloadItems(page); - }); - - $('.btnPreviousPage', page).on('click', function () { - query.StartIndex -= query.Limit; - reloadItems(page); - }); - - $('.btnChangeLayout', page).on('layoutchange', function (e, layout) { - getPageData(page).view = layout; - LibraryBrowser.saveViewSetting(getSavedQueryKey(page), layout); - reloadItems(page); - }); - - $('.btnFilter', page).on('click', function () { - showFilterMenu(page); - }); - - LibraryBrowser.saveQueryValues(getSavedQueryKey(page), query); - Dashboard.hideLoadingMsg(); - }); - } - - function showFilterMenu(page) { - - require(['components/filterdialog/filterdialog'], function (filterDialogFactory) { - - var filterDialog = new filterDialogFactory({ - query: getQuery(page), - mode: 'artists' - }); - - Events.on(filterDialog, 'filterchange', function () { - reloadItems(page); - }); - - filterDialog.show(); - }); - } - - function updateFilterControls(tabContent) { - - var query = getQuery(tabContent); - - $('.alphabetPicker', tabContent).alphaValue(query.NameStartsWithOrGreater); - } - - function initPage(tabContent) { - - $('.alphabetPicker', tabContent).on('alphaselect', function (e, character) { - - var query = getQuery(tabContent); - - query.NameStartsWithOrGreater = character; - query.StartIndex = 0; - - reloadItems(tabContent); - - }).on('alphaclear', function (e) { - - var query = getQuery(tabContent); - - query.NameStartsWithOrGreater = ''; - - reloadItems(tabContent); - }); - } - - window.MusicPage.initArtistsTab = function (page, tabContent) { - - initPage(tabContent); - }; - - window.MusicPage.renderArtistsTab = function (page, tabContent) { - - reloadItems(tabContent); - }; - +define(['jQuery'], function ($) { + + return function (view, params, tabContent) { + + var self = this; + + var data = {}; + function getPageData(context) { + var key = getSavedQueryKey(context); + var pageData = data[key]; + + if (!pageData) { + pageData = data[key] = { + query: { + SortBy: "SortName", + SortOrder: "Ascending", + Recursive: true, + Fields: "PrimaryImageAspectRatio,SortName,DateCreated,SyncInfo,ItemCounts", + StartIndex: 0, + ImageTypeLimit: 1, + EnableImageTypes: "Primary,Backdrop,Banner,Thumb", + Limit: LibraryBrowser.getDefaultPageSize() + }, + view: LibraryBrowser.getSavedView(key) || LibraryBrowser.getDefaultItemsView('Poster', 'Poster') + }; + + pageData.query.ParentId = LibraryMenu.getTopParentId(); + LibraryBrowser.loadSavedQueryValues(key, pageData.query); + } + return pageData; + } + + function getQuery(context) { + + return getPageData(context).query; + } + + function getSavedQueryKey(context) { + + if (!context.savedQueryKey) { + context.savedQueryKey = LibraryBrowser.getSavedQueryKey('artists'); + } + return context.savedQueryKey; + } + + function reloadItems(page) { + + Dashboard.showLoadingMsg(); + + var query = getQuery(page); + + ApiClient.getArtists(Dashboard.getCurrentUserId(), query).then(function (result) { + + // Scroll back up so they can see the results from the beginning + window.scrollTo(0, 0); + + var view = getPageData(page).view; + + var html = ''; + var pagingHtml = LibraryBrowser.getQueryPagingHtml({ + startIndex: query.StartIndex, + limit: query.Limit, + totalRecordCount: result.TotalRecordCount, + showLimit: false, + updatePageSizeSetting: false, + addLayoutButton: true, + currentLayout: view, + filterButton: true + }); + + page.querySelector('.listTopPaging').innerHTML = pagingHtml; + + updateFilterControls(page); + + if (view == "List") { + + html = LibraryBrowser.getListViewHtml({ + items: result.Items, + context: 'music', + sortBy: query.SortBy + }); + } + else if (view == "Poster") { + html = LibraryBrowser.getPosterViewHtml({ + items: result.Items, + shape: "square", + context: 'music', + showTitle: true, + coverImage: true, + lazy: true, + centerText: true, + overlayPlayButton: true + }); + } + else if (view == "PosterCard") { + + html = LibraryBrowser.getPosterViewHtml({ + items: result.Items, + shape: "square", + context: 'music', + showTitle: true, + coverImage: true, + lazy: true, + cardLayout: true, + showSongCount: true + }); + } + + var elem = page.querySelector('#items'); + elem.innerHTML = html + pagingHtml; + ImageLoader.lazyChildren(elem); + + $('.btnNextPage', page).on('click', function () { + query.StartIndex += query.Limit; + reloadItems(page); + }); + + $('.btnPreviousPage', page).on('click', function () { + query.StartIndex -= query.Limit; + reloadItems(page); + }); + + $('.btnChangeLayout', page).on('layoutchange', function (e, layout) { + getPageData(page).view = layout; + LibraryBrowser.saveViewSetting(getSavedQueryKey(page), layout); + reloadItems(page); + }); + + $('.btnFilter', page).on('click', function () { + showFilterMenu(page); + }); + + LibraryBrowser.saveQueryValues(getSavedQueryKey(page), query); + Dashboard.hideLoadingMsg(); + }); + } + + function showFilterMenu(page) { + + require(['components/filterdialog/filterdialog'], function (filterDialogFactory) { + + var filterDialog = new filterDialogFactory({ + query: getQuery(page), + mode: 'artists' + }); + + Events.on(filterDialog, 'filterchange', function () { + reloadItems(page); + }); + + filterDialog.show(); + }); + } + + function updateFilterControls(tabContent) { + + var query = getQuery(tabContent); + + $('.alphabetPicker', tabContent).alphaValue(query.NameStartsWithOrGreater); + } + + $('.alphabetPicker', tabContent).on('alphaselect', function (e, character) { + + var query = getQuery(tabContent); + + query.NameStartsWithOrGreater = character; + query.StartIndex = 0; + + reloadItems(tabContent); + + }).on('alphaclear', function (e) { + + var query = getQuery(tabContent); + + query.NameStartsWithOrGreater = ''; + + reloadItems(tabContent); + }); + self.renderTab = function () { + + reloadItems(tabContent); + }; + }; }); \ No newline at end of file diff --git a/dashboard-ui/scripts/musicfolders.js b/dashboard-ui/scripts/musicfolders.js index 6247ec1a16..c1d4ef3ea5 100644 --- a/dashboard-ui/scripts/musicfolders.js +++ b/dashboard-ui/scripts/musicfolders.js @@ -1,107 +1,107 @@ -define(['jQuery'], function ($) { - - var data = {}; - function getPageData() { - var key = getSavedQueryKey(); - var pageData = data[key]; - - if (!pageData) { - pageData = data[key] = { - query: { - SortBy: "SortName", - SortOrder: "Ascending", - Fields: "PrimaryImageAspectRatio,SortName,SyncInfo", - StartIndex: 0, - ImageTypeLimit: 1, - EnableImageTypes: "Primary,Backdrop,Banner,Thumb", - Limit: LibraryBrowser.getDefaultPageSize() - }, - view: LibraryBrowser.getSavedView(key) || LibraryBrowser.getDefaultItemsView('Poster', 'Poster') - }; - - pageData.query.ParentId = LibraryMenu.getTopParentId(); - LibraryBrowser.loadSavedQueryValues(key, pageData.query); - } - return pageData; - } - - function getQuery() { - - return getPageData().query; - } - - function getSavedQueryKey() { - - return LibraryBrowser.getSavedQueryKey('folders'); - } - - function reloadItems(page, viewPanel) { - - Dashboard.showLoadingMsg(); - - var query = getQuery(); - ApiClient.getItems(Dashboard.getCurrentUserId(), query).then(function (result) { - - // Scroll back up so they can see the results from the beginning - window.scrollTo(0, 0); - - var html = ''; - var view = getPageData().view; - var pagingHtml = LibraryBrowser.getQueryPagingHtml({ - startIndex: query.StartIndex, - limit: query.Limit, - totalRecordCount: result.TotalRecordCount, - viewButton: false, - showLimit: false, - sortButton: false, - addLayoutButton: false, - currentLayout: view, - updatePageSizeSetting: false, - viewIcon: 'filter-list', - layouts: 'List,Poster,PosterCard,Timeline' - }); - - page.querySelector('.listTopPaging').innerHTML = pagingHtml; - - if (view == "Poster") { - html = LibraryBrowser.getPosterViewHtml({ - items: result.Items, - shape: "square", - context: 'folders', - showTitle: true, - showParentTitle: true, - lazy: true, - centerText: true, - overlayPlayButton: true - }); - } - - var elem = page.querySelector('#items'); - elem.innerHTML = html + pagingHtml; - ImageLoader.lazyChildren(elem); - - $('.btnNextPage', page).on('click', function () { - query.StartIndex += query.Limit; - reloadItems(page, viewPanel); - }); - - $('.btnPreviousPage', page).on('click', function () { - query.StartIndex -= query.Limit; - reloadItems(page, viewPanel); - }); - - LibraryBrowser.saveQueryValues(getSavedQueryKey(), query); - Dashboard.hideLoadingMsg(); - }); - } - - window.MusicPage.initFoldersTab = function (page, tabContent) { - - }; - - window.MusicPage.renderFoldersTab = function (page, tabContent) { - - reloadItems(tabContent); - }; - +define(['jQuery'], function ($) { + + return function (view, params, tabContent) { + + var self = this; + + var data = {}; + function getPageData() { + var key = getSavedQueryKey(); + var pageData = data[key]; + + if (!pageData) { + pageData = data[key] = { + query: { + SortBy: "SortName", + SortOrder: "Ascending", + Fields: "PrimaryImageAspectRatio,SortName,SyncInfo", + StartIndex: 0, + ImageTypeLimit: 1, + EnableImageTypes: "Primary,Backdrop,Banner,Thumb", + Limit: LibraryBrowser.getDefaultPageSize() + }, + view: LibraryBrowser.getSavedView(key) || LibraryBrowser.getDefaultItemsView('Poster', 'Poster') + }; + + pageData.query.ParentId = LibraryMenu.getTopParentId(); + LibraryBrowser.loadSavedQueryValues(key, pageData.query); + } + return pageData; + } + + function getQuery() { + + return getPageData().query; + } + + function getSavedQueryKey() { + + return LibraryBrowser.getSavedQueryKey('folders'); + } + + function reloadItems(context) { + + Dashboard.showLoadingMsg(); + + var query = getQuery(); + ApiClient.getItems(Dashboard.getCurrentUserId(), query).then(function (result) { + + // Scroll back up so they can see the results from the beginning + window.scrollTo(0, 0); + + var html = ''; + var view = getPageData().view; + var pagingHtml = LibraryBrowser.getQueryPagingHtml({ + startIndex: query.StartIndex, + limit: query.Limit, + totalRecordCount: result.TotalRecordCount, + viewButton: false, + showLimit: false, + sortButton: false, + addLayoutButton: false, + currentLayout: view, + updatePageSizeSetting: false, + viewIcon: 'filter-list', + layouts: 'List,Poster,PosterCard,Timeline' + }); + + context.querySelector('.listTopPaging').innerHTML = pagingHtml; + + if (view == "Poster") { + html = LibraryBrowser.getPosterViewHtml({ + items: result.Items, + shape: "square", + context: 'folders', + showTitle: true, + showParentTitle: true, + lazy: true, + centerText: true, + overlayPlayButton: true + }); + } + + var elem = context.querySelector('#items'); + elem.innerHTML = html + pagingHtml; + ImageLoader.lazyChildren(elem); + + $('.btnNextPage', context).on('click', function () { + query.StartIndex += query.Limit; + reloadItems(context); + }); + + $('.btnPreviousPage', context).on('click', function () { + query.StartIndex -= query.Limit; + reloadItems(context); + }); + + LibraryBrowser.saveQueryValues(getSavedQueryKey(), query); + Dashboard.hideLoadingMsg(); + }); + } + self.renderTab = function () { + + reloadItems(tabContent); + }; + }; + }); \ No newline at end of file diff --git a/dashboard-ui/scripts/musicgenres.js b/dashboard-ui/scripts/musicgenres.js index f628135f3c..741c0e7182 100644 --- a/dashboard-ui/scripts/musicgenres.js +++ b/dashboard-ui/scripts/musicgenres.js @@ -1,131 +1,136 @@ define(['jQuery'], function ($) { - var data = {}; - function getPageData() { - var key = getSavedQueryKey(); - var pageData = data[key]; + return function (view, params, tabContent) { - if (!pageData) { - pageData = data[key] = { - query: { - SortBy: "SortName", - SortOrder: "Ascending", - IncludeItemTypes: "Audio,MusicVideo", - Recursive: true, - Fields: "DateCreated,SyncInfo,ItemCounts", - StartIndex: 0, - Limit: LibraryBrowser.getDefaultPageSize() - }, - view: LibraryBrowser.getSavedView(key) || LibraryBrowser.getDefaultItemsView('Thumb', 'Thumb') - }; + var self = this; - pageData.query.ParentId = LibraryMenu.getTopParentId(); - LibraryBrowser.loadSavedQueryValues(key, pageData.query); + var data = {}; + function getPageData() { + var key = getSavedQueryKey(); + var pageData = data[key]; + + if (!pageData) { + pageData = data[key] = { + query: { + SortBy: "SortName", + SortOrder: "Ascending", + IncludeItemTypes: "Audio,MusicVideo", + Recursive: true, + Fields: "DateCreated,SyncInfo,ItemCounts", + StartIndex: 0, + Limit: LibraryBrowser.getDefaultPageSize() + }, + view: LibraryBrowser.getSavedView(key) || LibraryBrowser.getDefaultItemsView('Thumb', 'Thumb') + }; + + pageData.query.ParentId = LibraryMenu.getTopParentId(); + LibraryBrowser.loadSavedQueryValues(key, pageData.query); + } + return pageData; } - return pageData; - } - function getQuery() { + function getQuery() { - return getPageData().query; - } + return getPageData().query; + } - function getSavedQueryKey() { + function getSavedQueryKey() { - return LibraryBrowser.getSavedQueryKey('genres'); - } + return LibraryBrowser.getSavedQueryKey('genres'); + } - function reloadItems(page) { + function reloadItems(context) { - Dashboard.showLoadingMsg(); + Dashboard.showLoadingMsg(); - var query = getQuery(); + var query = getQuery(); - ApiClient.getMusicGenres(Dashboard.getCurrentUserId(), query).then(function (result) { + ApiClient.getMusicGenres(Dashboard.getCurrentUserId(), query).then(function (result) { - // Scroll back up so they can see the results from the beginning - window.scrollTo(0, 0); + // Scroll back up so they can see the results from the beginning + window.scrollTo(0, 0); - var html = ''; + var html = ''; - var view = getPageData().view; + var view = getPageData().view; - $('.listTopPaging', page).html(LibraryBrowser.getQueryPagingHtml({ - startIndex: query.StartIndex, - limit: query.Limit, - totalRecordCount: result.TotalRecordCount, - showLimit: false, - updatePageSizeSetting: false, - addLayoutButton: true, - currentLayout: view + $('.listTopPaging', context).html(LibraryBrowser.getQueryPagingHtml({ + startIndex: query.StartIndex, + limit: query.Limit, + totalRecordCount: result.TotalRecordCount, + showLimit: false, + updatePageSizeSetting: false, + addLayoutButton: true, + currentLayout: view - })); + })); - if (view == "Thumb") { - html = LibraryBrowser.getPosterViewHtml({ - items: result.Items, - shape: "backdrop", - preferThumb: true, - showItemCounts: true, - context: 'music', - lazy: true, - centerText: true, - overlayPlayButton: true + if (view == "Thumb") { + html = LibraryBrowser.getPosterViewHtml({ + items: result.Items, + shape: "backdrop", + preferThumb: true, + showItemCounts: true, + context: 'music', + lazy: true, + centerText: true, + overlayPlayButton: true + }); + } + else if (view == "ThumbCard") { + + html = LibraryBrowser.getPosterViewHtml({ + items: result.Items, + shape: "backdrop", + preferThumb: true, + context: 'music', + showItemCounts: true, + cardLayout: true, + lazy: true, + showTitle: true + }); + } + else if (view == "Poster") { + html = LibraryBrowser.getPosterViewHtml({ + items: result.Items, + shape: "portrait", + context: 'music', + centerText: true, + showItemCounts: true, + lazy: true + }); + } + + var elem = context.querySelector('#items'); + elem.innerHTML = html; + ImageLoader.lazyChildren(elem); + + $('.btnNextPage', context).on('click', function () { + query.StartIndex += query.Limit; + reloadItems(context); }); - } - else if (view == "ThumbCard") { - html = LibraryBrowser.getPosterViewHtml({ - items: result.Items, - shape: "backdrop", - preferThumb: true, - context: 'music', - showItemCounts: true, - cardLayout: true, - lazy: true, - showTitle: true + $('.btnPreviousPage', context).on('click', function () { + query.StartIndex -= query.Limit; + reloadItems(context); }); - } - else if (view == "Poster") { - html = LibraryBrowser.getPosterViewHtml({ - items: result.Items, - shape: "portrait", - context: 'music', - centerText: true, - showItemCounts: true, - lazy: true + + $('.btnChangeLayout', context).on('layoutchange', function (e, layout) { + getPageData().view = layout; + LibraryBrowser.saveViewSetting(getSavedQueryKey(), layout); + reloadItems(context); }); - } - var elem = page.querySelector('#items'); - elem.innerHTML = html; - ImageLoader.lazyChildren(elem); + LibraryBrowser.saveQueryValues(getSavedQueryKey(), query); - $('.btnNextPage', page).on('click', function () { - query.StartIndex += query.Limit; - reloadItems(page); + Dashboard.hideLoadingMsg(); }); + } - $('.btnPreviousPage', page).on('click', function () { - query.StartIndex -= query.Limit; - reloadItems(page); - }); + self.renderTab = function () { - $('.btnChangeLayout', page).on('layoutchange', function (e, layout) { - getPageData().view = layout; - LibraryBrowser.saveViewSetting(getSavedQueryKey(), layout); - reloadItems(page); - }); - - LibraryBrowser.saveQueryValues(getSavedQueryKey(), query); - - Dashboard.hideLoadingMsg(); - }); - } - - window.MusicPage.renderGenresTab = function (page, tabContent) { - - reloadItems(tabContent); + reloadItems(tabContent); + }; }; }); \ No newline at end of file diff --git a/dashboard-ui/scripts/musicrecommended.js b/dashboard-ui/scripts/musicrecommended.js index ae98d3aa93..5d5731bfb9 100644 --- a/dashboard-ui/scripts/musicrecommended.js +++ b/dashboard-ui/scripts/musicrecommended.js @@ -185,18 +185,6 @@ }); } - function initSuggestedTab(page, tabContent) { - - var containers = tabContent.querySelectorAll('.itemsContainer'); - if (enableScrollX()) { - $(containers).addClass('hiddenScrollX'); - } else { - $(containers).removeClass('hiddenScrollX'); - } - - $(containers).createCardMenus(); - } - function loadSuggestionsTab(page, tabContent) { var parentId = LibraryMenu.getTopParentId(); @@ -214,93 +202,6 @@ }); } - function loadTab(page, index) { - - var tabContent = page.querySelector('.pageTabContent[data-index=\'' + index + '\']'); - var depends = []; - var scope = 'MusicPage'; - var renderMethod = ''; - var initMethod = ''; - - switch (index) { - - case 0: - initMethod = 'initSuggestedTab'; - renderMethod = 'renderSuggestedTab'; - break; - case 1: - depends.push('scripts/musicalbums'); - renderMethod = 'renderAlbumsTab'; - initMethod = 'initAlbumsTab'; - break; - case 2: - depends.push('scripts/musicalbumartists'); - renderMethod = 'renderAlbumArtistsTab'; - initMethod = 'initAlbumArtistsTab'; - break; - case 3: - depends.push('scripts/musicartists'); - renderMethod = 'renderArtistsTab'; - initMethod = 'initArtistsTab'; - break; - case 4: - depends.push('scripts/songs'); - renderMethod = 'renderSongsTab'; - depends.push('paper-icon-item'); - depends.push('paper-item-body'); - break; - case 5: - depends.push('scripts/musicgenres'); - renderMethod = 'renderGenresTab'; - break; - case 6: - depends.push('scripts/musicfolders'); - renderMethod = 'renderFoldersTab'; - initMethod = 'initFoldersTab'; - break; - default: - break; - } - - require(depends, function () { - - if (initMethod && !tabContent.initComplete) { - - window[scope][initMethod](page, tabContent); - tabContent.initComplete = true; - } - - window[scope][renderMethod](page, tabContent); - - }); - } - - window.MusicPage = window.MusicPage || {}; - window.MusicPage.renderSuggestedTab = loadSuggestionsTab; - window.MusicPage.initSuggestedTab = initSuggestedTab; - - pageIdOn('pageinit', "musicRecommendedPage", function () { - - var page = this; - - $('.recommendations', page).createCardMenus(); - - var mdlTabs = page.querySelector('.libraryViewNav'); - - var baseUrl = 'music.html'; - var topParentId = LibraryMenu.getTopParentId(); - if (topParentId) { - baseUrl += '?topParentId=' + topParentId; - } - - libraryBrowser.configurePaperLibraryTabs(page, mdlTabs, page.querySelectorAll('.pageTabContent')); - - mdlTabs.addEventListener('tabchange', function (e) { - loadTab(page, parseInt(e.detail.selectedTabIndex)); - }); - - }); - pageIdOn('pagebeforeshow', "musicRecommendedPage", function () { var page = this; @@ -326,5 +227,124 @@ }); + return function (view, params) { + + var self = this; + + function reload() { + + Dashboard.showLoadingMsg(); + + var tabContent = view.querySelector('.pageTabContent[data-index=\'' + 0 + '\']'); + loadSuggestionsTab(view, tabContent); + } + + function enableScrollX() { + return browserInfo.mobile && AppInfo.enableAppLayouts; + } + + function getThumbShape() { + return enableScrollX() ? 'overflowBackdrop' : 'backdrop'; + } + + self.initTab = function () { + + var tabContent = view.querySelector('.pageTabContent[data-index=\'' + 0 + '\']'); + + var containers = tabContent.querySelectorAll('.itemsContainer'); + if (enableScrollX()) { + $(containers).addClass('hiddenScrollX'); + } else { + $(containers).removeClass('hiddenScrollX'); + } + + $(containers).createCardMenus(); + }; + + self.renderTab = function () { + reload(); + }; + + var tabControllers = []; + var renderedTabs = []; + + function loadTab(page, index) { + + var tabContent = page.querySelector('.pageTabContent[data-index=\'' + index + '\']'); + var depends = []; + + switch (index) { + + case 0: + break; + case 1: + depends.push('scripts/musicalbums'); + break; + case 2: + depends.push('scripts/musicalbumartists'); + break; + case 3: + depends.push('scripts/musicartists'); + break; + case 4: + depends.push('scripts/songs'); + depends.push('paper-icon-item'); + depends.push('paper-item-body'); + break; + case 5: + depends.push('scripts/musicgenres'); + break; + case 6: + depends.push('scripts/musicfolders'); + break; + default: + break; + } + + require(depends, function (controllerFactory) { + + if (index == 0) { + self.tabContent = tabContent; + } + var controller = tabControllers[index]; + if (!controller) { + controller = index ? new controllerFactory(view, params, tabContent) : self; + tabControllers[index] = controller; + + if (controller.initTab) { + controller.initTab(); + } + } + + if (renderedTabs.indexOf(index) == -1) { + renderedTabs.push(index); + controller.renderTab(); + } + }); + } + + var mdlTabs = view.querySelector('.libraryViewNav'); + + var baseUrl = 'music.html'; + var topParentId = params.topParentId; + if (topParentId) { + baseUrl += '?topParentId=' + topParentId; + } + + libraryBrowser.configurePaperLibraryTabs(view, mdlTabs, view.querySelectorAll('.pageTabContent')); + + mdlTabs.addEventListener('tabchange', function (e) { + loadTab(view, parseInt(e.detail.selectedTabIndex)); + }); + + view.addEventListener('viewdestroy', function (e) { + + tabControllers.forEach(function (t) { + if (t.destroy) { + t.destroy(); + } + }); + }); + }; }); \ No newline at end of file diff --git a/dashboard-ui/scripts/site.js b/dashboard-ui/scripts/site.js index b8180bddf4..fb4b3d0795 100644 --- a/dashboard-ui/scripts/site.js +++ b/dashboard-ui/scripts/site.js @@ -2281,7 +2281,7 @@ var AppInfo = {}; var baseUrl = 'bower_components/emby-webcomponents/strings/'; - var languages = ['en-US']; + var languages = ['en-US', 'kk', 'ru']; var translations = languages.map(function (i) { return { @@ -2613,7 +2613,8 @@ var AppInfo = {}; defineRoute({ path: '/livetv.html', - dependencies: ['paper-button'], + dependencies: ['paper-button', 'livetvcss'], + controller: 'scripts/livetvsuggested', autoFocus: false }); @@ -2735,7 +2736,8 @@ var AppInfo = {}; defineRoute({ path: '/music.html', - dependencies: [], + dependencies: ['scripts/alphapicker'], + controller: 'scripts/musicrecommended', autoFocus: false }); diff --git a/dashboard-ui/scripts/songs.js b/dashboard-ui/scripts/songs.js index 716f407bc1..d838064b35 100644 --- a/dashboard-ui/scripts/songs.js +++ b/dashboard-ui/scripts/songs.js @@ -1,166 +1,171 @@ -define(['jQuery'], function ($) { - - var defaultSortBy = "Album,SortName"; - - var data = {}; - function getPageData(context) { - var key = getSavedQueryKey(context); - var pageData = data[key]; - - if (!pageData) { - pageData = data[key] = { - query: { - SortBy: defaultSortBy, - SortOrder: "Ascending", - IncludeItemTypes: "Audio", - Recursive: true, - Fields: "AudioInfo,ParentId,SyncInfo", - Limit: 100, - StartIndex: 0, - ImageTypeLimit: 1, - EnableImageTypes: "Primary,Backdrop,Banner,Thumb" - } - }; - - pageData.query.ParentId = LibraryMenu.getTopParentId(); - LibraryBrowser.loadSavedQueryValues(key, pageData.query); - } - return pageData; - } - - function getQuery(context) { - - return getPageData(context).query; - } - - function getSavedQueryKey(context) { - - if (!context.savedQueryKey) { - context.savedQueryKey = LibraryBrowser.getSavedQueryKey('songs'); - } - return context.savedQueryKey; - } - - function reloadItems(page) { - - Dashboard.showLoadingMsg(); - - var query = getQuery(page); - ApiClient.getItems(Dashboard.getCurrentUserId(), query).then(function (result) { - - // Scroll back up so they can see the results from the beginning - window.scrollTo(0, 0); - - var html = ''; - var pagingHtml = LibraryBrowser.getQueryPagingHtml({ - startIndex: query.StartIndex, - limit: query.Limit, - totalRecordCount: result.TotalRecordCount, - showLimit: false, - sortButton: true, - updatePageSizeSetting: false, - filterButton: true - }); - - page.querySelector('.listTopPaging').innerHTML = pagingHtml; - - html += LibraryBrowser.getListViewHtml({ - items: result.Items, - showIndex: true, - defaultAction: 'play', - smallIcon: true - }); - - var elem = page.querySelector('#items'); - elem.innerHTML = html + pagingHtml; - ImageLoader.lazyChildren(elem); - - $('.btnNextPage', page).on('click', function () { - query.StartIndex += query.Limit; - reloadItems(page); - }); - - $('.btnPreviousPage', page).on('click', function () { - query.StartIndex -= query.Limit; - reloadItems(page); - }); - - $('.btnFilter', page).on('click', function () { - showFilterMenu(page); - }); - - // On callback make sure to set StartIndex = 0 - $('.btnSort', page).on('click', function () { - LibraryBrowser.showSortMenu({ - items: [{ - name: Globalize.translate('OptionTrackName'), - id: 'Name' - }, - { - name: Globalize.translate('OptionAlbum'), - id: 'Album,SortName' - }, - { - name: Globalize.translate('OptionAlbumArtist'), - id: 'AlbumArtist,Album,SortName' - }, - { - name: Globalize.translate('OptionArtist'), - id: 'Artist,Album,SortName' - }, - { - name: Globalize.translate('OptionDateAdded'), - id: 'DateCreated,SortName' - }, - { - name: Globalize.translate('OptionDatePlayed'), - id: 'DatePlayed,SortName' - }, - { - name: Globalize.translate('OptionPlayCount'), - id: 'PlayCount,SortName' - }, - { - name: Globalize.translate('OptionReleaseDate'), - id: 'PremiereDate,AlbumArtist,Album,SortName' - }, - { - name: Globalize.translate('OptionRuntime'), - id: 'Runtime,AlbumArtist,Album,SortName' - }], - callback: function () { - reloadItems(page); - }, - query: query - }); - }); - - LibraryBrowser.saveQueryValues(getSavedQueryKey(page), query); - - Dashboard.hideLoadingMsg(); - }); - } - - function showFilterMenu(page) { - - require(['components/filterdialog/filterdialog'], function (filterDialogFactory) { - - var filterDialog = new filterDialogFactory({ - query: getQuery(page), - mode: 'songs' - }); - - Events.on(filterDialog, 'filterchange', function () { - reloadItems(page); - }); - - filterDialog.show(); - }); - } - - window.MusicPage.renderSongsTab = function (page, tabContent) { - - reloadItems(tabContent); - }; - +define(['jQuery'], function ($) { + + + return function (view, params, tabContent) { + + var self = this; + + var defaultSortBy = "Album,SortName"; + + var data = {}; + function getPageData(context) { + var key = getSavedQueryKey(context); + var pageData = data[key]; + + if (!pageData) { + pageData = data[key] = { + query: { + SortBy: defaultSortBy, + SortOrder: "Ascending", + IncludeItemTypes: "Audio", + Recursive: true, + Fields: "AudioInfo,ParentId,SyncInfo", + Limit: 100, + StartIndex: 0, + ImageTypeLimit: 1, + EnableImageTypes: "Primary,Backdrop,Banner,Thumb" + } + }; + + pageData.query.ParentId = LibraryMenu.getTopParentId(); + LibraryBrowser.loadSavedQueryValues(key, pageData.query); + } + return pageData; + } + + function getQuery(context) { + + return getPageData(context).query; + } + + function getSavedQueryKey(context) { + + if (!context.savedQueryKey) { + context.savedQueryKey = LibraryBrowser.getSavedQueryKey('songs'); + } + return context.savedQueryKey; + } + + function reloadItems(context) { + + Dashboard.showLoadingMsg(); + + var query = getQuery(context); + ApiClient.getItems(Dashboard.getCurrentUserId(), query).then(function (result) { + + // Scroll back up so they can see the results from the beginning + window.scrollTo(0, 0); + + var html = ''; + var pagingHtml = LibraryBrowser.getQueryPagingHtml({ + startIndex: query.StartIndex, + limit: query.Limit, + totalRecordCount: result.TotalRecordCount, + showLimit: false, + sortButton: true, + updatePageSizeSetting: false, + filterButton: true + }); + + context.querySelector('.listTopPaging').innerHTML = pagingHtml; + + html += LibraryBrowser.getListViewHtml({ + items: result.Items, + showIndex: true, + defaultAction: 'play', + smallIcon: true + }); + + var elem = context.querySelector('#items'); + elem.innerHTML = html + pagingHtml; + ImageLoader.lazyChildren(elem); + + $('.btnNextPage', context).on('click', function () { + query.StartIndex += query.Limit; + reloadItems(context); + }); + + $('.btnPreviousPage', context).on('click', function () { + query.StartIndex -= query.Limit; + reloadItems(context); + }); + + $('.btnFilter', context).on('click', function () { + showFilterMenu(context); + }); + + // On callback make sure to set StartIndex = 0 + $('.btnSort', context).on('click', function () { + LibraryBrowser.showSortMenu({ + items: [{ + name: Globalize.translate('OptionTrackName'), + id: 'Name' + }, + { + name: Globalize.translate('OptionAlbum'), + id: 'Album,SortName' + }, + { + name: Globalize.translate('OptionAlbumArtist'), + id: 'AlbumArtist,Album,SortName' + }, + { + name: Globalize.translate('OptionArtist'), + id: 'Artist,Album,SortName' + }, + { + name: Globalize.translate('OptionDateAdded'), + id: 'DateCreated,SortName' + }, + { + name: Globalize.translate('OptionDatePlayed'), + id: 'DatePlayed,SortName' + }, + { + name: Globalize.translate('OptionPlayCount'), + id: 'PlayCount,SortName' + }, + { + name: Globalize.translate('OptionReleaseDate'), + id: 'PremiereDate,AlbumArtist,Album,SortName' + }, + { + name: Globalize.translate('OptionRuntime'), + id: 'Runtime,AlbumArtist,Album,SortName' + }], + callback: function () { + reloadItems(context); + }, + query: query + }); + }); + + LibraryBrowser.saveQueryValues(getSavedQueryKey(context), query); + + Dashboard.hideLoadingMsg(); + }); + } + + function showFilterMenu(context) { + + require(['components/filterdialog/filterdialog'], function (filterDialogFactory) { + + var filterDialog = new filterDialogFactory({ + query: getQuery(context), + mode: 'songs' + }); + + Events.on(filterDialog, 'filterchange', function () { + reloadItems(context); + }); + + filterDialog.show(); + }); + } + self.renderTab = function () { + + reloadItems(tabContent); + }; + }; + }); \ No newline at end of file