';
- } else {
- html += '
';
- }
-
- var supportsImageAnalysis = appHost.supports('imageanalysis');
- var cardLayout = (appHost.preferVisualCards || supportsImageAnalysis) && section.showTitle;
-
- html += cardBuilder.getCardsHtml(result.Items, {
- preferThumb: section.preferThumb,
- shape: section.shape,
- centerText: section.centerText && !cardLayout,
- overlayText: section.overlayText !== false,
- showTitle: section.showTitle,
- showParentTitle: section.showParentTitle,
- scalable: true,
- overlayPlayButton: section.overlayPlayButton,
- overlayMoreButton: section.overlayMoreButton && !cardLayout,
- action: section.action,
- allowBottomPadding: !enableScrollX(),
- cardLayout: cardLayout,
- vibrant: supportsImageAnalysis && cardLayout
- });
-
- html += '
';
- }
-
- elem.innerHTML = html;
- imageLoader.lazyChildren(elem);
- });
- }
-
- function loadSections(page, userId, topParentId, types) {
-
- Dashboard.showLoadingMsg();
-
- var sections = getSections();
-
- var sectionid = getParameterByName('sectionid');
-
- if (sectionid) {
- sections = sections.filter(function (s) {
-
- return s.id == sectionid;
- });
- }
-
- if (types) {
- sections = sections.filter(function (s) {
-
- return types.indexOf(s.id) != -1;
- });
- }
-
- var i, length;
-
- var elem = page.querySelector('.favoriteSections');
-
- if (!elem.innerHTML) {
- var html = '';
- for (i = 0, length = sections.length; i < length; i++) {
-
- html += '
';
- }
-
- elem.innerHTML = html;
- }
-
- var promises = [];
-
- for (i = 0, length = sections.length; i < length; i++) {
-
- var section = sections[i];
-
- elem = page.querySelector('.section' + section.id);
-
- promises.push(loadSection(elem, userId, topParentId, section, sections.length == 1));
- }
-
- Promise.all(promises).then(function () {
- Dashboard.hideLoadingMsg();
- });
- }
-
- return {
- render: loadSections
- };
-
-});
\ No newline at end of file
+define(["libraryBrowser","cardBuilder","dom","apphost","imageLoader","scrollStyles","emby-itemscontainer"],function(libraryBrowser,cardBuilder,dom,appHost,imageLoader){"use strict";function enableScrollX(){return browserInfo.mobile}function getThumbShape(){return enableScrollX()?"overflowBackdrop":"backdrop"}function getPosterShape(){return enableScrollX()?"overflowPortrait":"portrait"}function getSquareShape(){return enableScrollX()?"overflowSquare":"square"}function getSections(){return[{name:"HeaderFavoriteMovies",types:"Movie",id:"favoriteMovies",shape:getPosterShape(),showTitle:!1,overlayPlayButton:!0},{name:"HeaderFavoriteShows",types:"Series",id:"favoriteShows",shape:getPosterShape(),showTitle:!1,overlayPlayButton:!0},{name:"HeaderFavoriteEpisodes",types:"Episode",id:"favoriteEpisode",shape:getThumbShape(),preferThumb:!1,showTitle:!0,showParentTitle:!0,overlayPlayButton:!0,overlayText:!1,centerText:!0},{name:"HeaderFavoriteGames",types:"Game",id:"favoriteGames",shape:getSquareShape(),preferThumb:!1,showTitle:!0},{name:"HeaderFavoriteArtists",types:"MusicArtist",id:"favoriteArtists",shape:getSquareShape(),preferThumb:!1,showTitle:!0,overlayText:!1,showParentTitle:!0,centerText:!0,overlayPlayButton:!0},{name:"HeaderFavoriteAlbums",types:"MusicAlbum",id:"favoriteAlbums",shape:getSquareShape(),preferThumb:!1,showTitle:!0,overlayText:!1,showParentTitle:!0,centerText:!0,overlayPlayButton:!0},{name:"HeaderFavoriteSongs",types:"Audio",id:"favoriteSongs",shape:getSquareShape(),preferThumb:!1,showTitle:!0,overlayText:!1,showParentTitle:!0,centerText:!0,overlayMoreButton:!0,action:"instantmix"}]}function loadSection(elem,userId,topParentId,section,isSingleSection){var screenWidth=dom.getWindowSize().innerWidth,options={SortBy:"SortName",SortOrder:"Ascending",Filters:"IsFavorite",Recursive:!0,Fields:"PrimaryImageAspectRatio,BasicSyncInfo",CollapseBoxSetItems:!1,ExcludeLocationTypes:"Virtual",EnableTotalRecordCount:!1};topParentId&&(options.ParentId=topParentId),isSingleSection||(options.Limit=screenWidth>=1920?10:screenWidth>=1440?8:6,enableScrollX()&&(options.Limit=20));var promise;return"MusicArtist"==section.types?promise=ApiClient.getArtists(userId,options):(options.IncludeItemTypes=section.types,promise=ApiClient.getItems(userId,options)),promise.then(function(result){var html="";if(result.Items.length){if(html+="
",html+='",options.Limit&&result.Items.length>=options.Limit){var href="secondaryitems.html?type="+section.types+"&filters=IsFavorite";html+='
'+Globalize.translate("ButtonMore")+" "}html+="
",html+=enableScrollX()?'
';elem.innerHTML=html}var promises=[];for(i=0,length=sections.length;i
' + s.Name + '';
-
- }).join('');
-
- existingSeriesHtml = ' ' + existingSeriesHtml;
-
- context.querySelector('#selectSeries').innerHTML = existingSeriesHtml;
-
- ApiClient.getVirtualFolders().then(function (result) {
-
- //var movieLocations = [];
- var seriesLocations = [];
-
- for (var n = 0; n < result.length; n++) {
-
- var virtualFolder = result[n];
-
- for (var i = 0, length = virtualFolder.Locations.length; i < length; i++) {
- var location = {
- value: virtualFolder.Locations[i],
- display: virtualFolder.Name + ': ' + virtualFolder.Locations[i]
- };
-
- //if (virtualFolder.CollectionType == 'movies') {
- // movieLocations.push(location);
- //}
- if (virtualFolder.CollectionType == 'tvshows') {
- seriesLocations.push(location);
- }
- }
- }
-
- seriesLocationsCount = seriesLocations.length;
-
- var seriesFolderHtml = seriesLocations.map(function (s) {
- return '' + s.display + ' ';
- }).join('');
-
- if (seriesLocations.length > 1) {
- // If the user has multiple folders, add an empty item to enforce a manual selection
- seriesFolderHtml = ' ' + seriesFolderHtml;
- }
-
- context.querySelector('#selectSeriesFolder').innerHTML = seriesFolderHtml;
-
- }, onApiFailure);
-
- }, onApiFailure);
- }
-
- function submitEpisodeForm(dlg) {
-
- Dashboard.showLoadingMsg();
-
- var resultId = dlg.querySelector('#hfResultId').value;
- var seriesId = dlg.querySelector('#selectSeries').value;
-
- var targetFolder = null;
- var newProviderIds = null;
- var newSeriesName = null;
- var newSeriesYear = null;
-
- if (seriesId == "##NEW##" && currentNewItem != null) {
- seriesId = null;
- newProviderIds = JSON.stringify(currentNewItem.ProviderIds);
- newSeriesName = currentNewItem.Name;
- newSeriesYear = currentNewItem.ProductionYear;
- targetFolder = dlg.querySelector('#selectSeriesFolder').value;
- }
-
- var options = {
-
- SeriesId: seriesId,
- SeasonNumber: dlg.querySelector('#txtSeason').value,
- EpisodeNumber: dlg.querySelector('#txtEpisode').value,
- EndingEpisodeNumber: dlg.querySelector('#txtEndingEpisode').value,
- RememberCorrection: dlg.querySelector('#chkRememberCorrection').checked,
- NewSeriesProviderIds: newProviderIds,
- NewSeriesName: newSeriesName,
- NewSeriesYear: newSeriesYear,
- TargetFolder: targetFolder
- };
-
- ApiClient.performEpisodeOrganization(resultId, options).then(function () {
-
- Dashboard.hideLoadingMsg();
-
- dlg.submitted = true;
- dialogHelper.close(dlg);
-
- }, onApiFailure);
- }
-
- function showNewSeriesDialog(dlg) {
-
- if (seriesLocationsCount == 0) {
-
- require(['alert'], function (alert) {
- alert({
- title: Globalize.translate('AutoOrganizeError'),
- text: Globalize.translate('NoTvFoldersConfigured')
- });
- });
- return;
- }
-
- require(['itemIdentifier'], function (itemIdentifier) {
-
- itemIdentifier.showFindNew(extractedName, extractedYear, 'Series', ApiClient.serverId()).then(function (newItem) {
-
- if (newItem != null) {
- currentNewItem = newItem;
- var seriesHtml = existingSeriesHtml;
- seriesHtml = seriesHtml + '' + currentNewItem.Name + ' ';
- dlg.querySelector('#selectSeries').innerHTML = seriesHtml;
- selectedSeriesChanged(dlg);
- }
- });
- });
- }
-
- function selectedSeriesChanged(dlg) {
- var seriesId = dlg.querySelector('#selectSeries').value;
-
- if (seriesId == "##NEW##") {
- dlg.querySelector('.fldSelectSeriesFolder').classList.remove('hide');
- dlg.querySelector('#selectSeriesFolder').setAttribute('required', 'required');
- }
- else {
- dlg.querySelector('.fldSelectSeriesFolder').classList.add('hide');
- dlg.querySelector('#selectSeriesFolder').removeAttribute('required');
- }
- }
-
- return {
- show: function (item) {
- return new Promise(function (resolve, reject) {
-
- extractedName = null;
- extractedYear = null;
- currentNewItem = null;
- existingSeriesHtml = null;
-
- var xhr = new XMLHttpRequest();
- xhr.open('GET', 'components/fileorganizer/fileorganizer.template.html', true);
-
- xhr.onload = function (e) {
-
- var template = this.response;
- var dlg = dialogHelper.createDialog({
- removeOnClose: true,
- size: 'small'
- });
-
- dlg.classList.add('ui-body-a');
- dlg.classList.add('background-theme-a');
-
- dlg.classList.add('formDialog');
-
- var html = '';
-
- html += Globalize.translateDocument(template);
-
- dlg.innerHTML = html;
-
- dlg.querySelector('.formDialogHeaderTitle').innerHTML = Globalize.translate('FileOrganizeManually');
-
- dialogHelper.open(dlg);
-
- dlg.addEventListener('close', function () {
-
- if (dlg.submitted) {
- resolve();
- } else {
- reject();
- }
- });
-
- dlg.querySelector('.btnCancel').addEventListener('click', function (e) {
-
- dialogHelper.close(dlg);
- });
-
- dlg.querySelector('form').addEventListener('submit', function (e) {
-
- submitEpisodeForm(dlg);
-
- e.preventDefault();
- return false;
- });
-
- dlg.querySelector('#btnNewSeries').addEventListener('click', function (e) {
-
- showNewSeriesDialog(dlg);
- });
-
- dlg.querySelector('#selectSeries').addEventListener('change', function (e) {
-
- selectedSeriesChanged(dlg);
- });
-
- initEpisodeForm(dlg, item);
- }
-
- xhr.send();
- });
- }
- };
-});
\ No newline at end of file
+define(["dialogHelper","emby-checkbox","emby-input","emby-button","emby-select","paper-icon-button-light","formDialogStyle"],function(dialogHelper){"use strict";function onApiFailure(e){Dashboard.hideLoadingMsg(),require(["alert"],function(alert){alert({title:Globalize.translate("AutoOrganizeError"),text:Globalize.translate("ErrorOrganizingFileWithErrorCode",e.headers.get("X-Application-Error-Code"))})})}function initEpisodeForm(context,item){!item.ExtractedName||item.ExtractedName.length<3?context.querySelector(".fldRemember").classList.add("hide"):context.querySelector(".fldRemember").classList.remove("hide"),context.querySelector(".inputFile").innerHTML=item.OriginalFileName,context.querySelector("#txtSeason").value=item.ExtractedSeasonNumber,context.querySelector("#txtEpisode").value=item.ExtractedEpisodeNumber,context.querySelector("#txtEndingEpisode").value=item.ExtractedEndingEpisodeNumber,extractedName=item.ExtractedName,extractedYear=item.ExtractedYear,context.querySelector("#chkRememberCorrection").checked=!1,context.querySelector("#hfResultId").value=item.Id,ApiClient.getItems(null,{recursive:!0,includeItemTypes:"Series",sortBy:"SortName"}).then(function(result){existingSeriesHtml=result.Items.map(function(s){return''+s.Name+" "}).join(""),existingSeriesHtml=' '+existingSeriesHtml,context.querySelector("#selectSeries").innerHTML=existingSeriesHtml,ApiClient.getVirtualFolders().then(function(result){for(var seriesLocations=[],n=0;n'+s.display+""}).join("");seriesLocations.length>1&&(seriesFolderHtml=' '+seriesFolderHtml),context.querySelector("#selectSeriesFolder").innerHTML=seriesFolderHtml},onApiFailure)},onApiFailure)}function submitEpisodeForm(dlg){Dashboard.showLoadingMsg();var resultId=dlg.querySelector("#hfResultId").value,seriesId=dlg.querySelector("#selectSeries").value,targetFolder=null,newProviderIds=null,newSeriesName=null,newSeriesYear=null;"##NEW##"==seriesId&&null!=currentNewItem&&(seriesId=null,newProviderIds=JSON.stringify(currentNewItem.ProviderIds),newSeriesName=currentNewItem.Name,newSeriesYear=currentNewItem.ProductionYear,targetFolder=dlg.querySelector("#selectSeriesFolder").value);var options={SeriesId:seriesId,SeasonNumber:dlg.querySelector("#txtSeason").value,EpisodeNumber:dlg.querySelector("#txtEpisode").value,EndingEpisodeNumber:dlg.querySelector("#txtEndingEpisode").value,RememberCorrection:dlg.querySelector("#chkRememberCorrection").checked,NewSeriesProviderIds:newProviderIds,NewSeriesName:newSeriesName,NewSeriesYear:newSeriesYear,TargetFolder:targetFolder};ApiClient.performEpisodeOrganization(resultId,options).then(function(){Dashboard.hideLoadingMsg(),dlg.submitted=!0,dialogHelper.close(dlg)},onApiFailure)}function showNewSeriesDialog(dlg){return 0==seriesLocationsCount?void require(["alert"],function(alert){alert({title:Globalize.translate("AutoOrganizeError"),text:Globalize.translate("NoTvFoldersConfigured")})}):void require(["itemIdentifier"],function(itemIdentifier){itemIdentifier.showFindNew(extractedName,extractedYear,"Series",ApiClient.serverId()).then(function(newItem){if(null!=newItem){currentNewItem=newItem;var seriesHtml=existingSeriesHtml;seriesHtml=seriesHtml+''+currentNewItem.Name+" ",dlg.querySelector("#selectSeries").innerHTML=seriesHtml,selectedSeriesChanged(dlg)}})})}function selectedSeriesChanged(dlg){var seriesId=dlg.querySelector("#selectSeries").value;"##NEW##"==seriesId?(dlg.querySelector(".fldSelectSeriesFolder").classList.remove("hide"),dlg.querySelector("#selectSeriesFolder").setAttribute("required","required")):(dlg.querySelector(".fldSelectSeriesFolder").classList.add("hide"),dlg.querySelector("#selectSeriesFolder").removeAttribute("required"))}var extractedName,extractedYear,currentNewItem,existingSeriesHtml,seriesLocationsCount=0;return{show:function(item){return new Promise(function(resolve,reject){extractedName=null,extractedYear=null,currentNewItem=null,existingSeriesHtml=null;var xhr=new XMLHttpRequest;xhr.open("GET","components/fileorganizer/fileorganizer.template.html",!0),xhr.onload=function(e){var template=this.response,dlg=dialogHelper.createDialog({removeOnClose:!0,size:"small"});dlg.classList.add("ui-body-a"),dlg.classList.add("background-theme-a"),dlg.classList.add("formDialog");var html="";html+=Globalize.translateDocument(template),dlg.innerHTML=html,dlg.querySelector(".formDialogHeaderTitle").innerHTML=Globalize.translate("FileOrganizeManually"),dialogHelper.open(dlg),dlg.addEventListener("close",function(){dlg.submitted?resolve():reject()}),dlg.querySelector(".btnCancel").addEventListener("click",function(e){dialogHelper.close(dlg)}),dlg.querySelector("form").addEventListener("submit",function(e){return submitEpisodeForm(dlg),e.preventDefault(),!1}),dlg.querySelector("#btnNewSeries").addEventListener("click",function(e){showNewSeriesDialog(dlg)}),dlg.querySelector("#selectSeries").addEventListener("change",function(e){selectedSeriesChanged(dlg)}),initEpisodeForm(dlg,item)},xhr.send()})}}});
\ No newline at end of file
diff --git a/dashboard-ui/components/filterdialog/filterdialog.js b/dashboard-ui/components/filterdialog/filterdialog.js
index 28ec10dc2a..2a01c51292 100644
--- a/dashboard-ui/components/filterdialog/filterdialog.js
+++ b/dashboard-ui/components/filterdialog/filterdialog.js
@@ -1,587 +1 @@
-define(['dialogHelper', 'events', 'browser', 'emby-checkbox', 'emby-collapse', 'css!components/filterdialog/style'], function (dialogHelper, events, browser) {
- 'use strict';
-
- function renderOptions(context, selector, cssClass, items, isCheckedFn) {
-
- var elem = context.querySelector(selector);
-
- if (items.length) {
-
- elem.classList.remove('hide');
-
- } else {
- elem.classList.add('hide');
- }
-
- var html = '';
-
- // style="margin: -.2em -.8em;"
- html += '';
-
- html += items.map(function (filter) {
-
- var itemHtml = '';
-
- var checkedHtml = isCheckedFn(filter) ? ' checked' : '';
- itemHtml += '';
- itemHtml += ' ';
- itemHtml += '' + filter + ' ';
- itemHtml += ' ';
-
- return itemHtml;
-
- }).join('');
-
- html += '
';
-
- elem.querySelector('.filterOptions').innerHTML = html;
- }
-
- function renderFilters(context, result, query) {
-
- // If there's a huge number of these they will be really show to render
- if (result.Tags) {
- result.Tags.length = Math.min(result.Tags.length, 50);
- }
-
- renderOptions(context, '.genreFilters', 'chkGenreFilter', result.Genres, function (i) {
- var delimeter = '|';
- return (delimeter + (query.Genres || '') + delimeter).indexOf(delimeter + i + delimeter) != -1;
- });
-
- renderOptions(context, '.officialRatingFilters', 'chkOfficialRatingFilter', result.OfficialRatings, function (i) {
- var delimeter = '|';
- return (delimeter + (query.OfficialRatings || '') + delimeter).indexOf(delimeter + i + delimeter) != -1;
- });
-
- renderOptions(context, '.tagFilters', 'chkTagFilter', result.Tags, function (i) {
- var delimeter = '|';
- return (delimeter + (query.Tags || '') + delimeter).indexOf(delimeter + i + delimeter) != -1;
- });
-
- renderOptions(context, '.yearFilters', 'chkYearFilter', result.Years, function (i) {
-
- var delimeter = ',';
- return (delimeter + (query.Years || '') + delimeter).indexOf(delimeter + i + delimeter) != -1;
- });
- }
-
- function loadDynamicFilters(context, userId, itemQuery) {
-
- return ApiClient.getJSON(ApiClient.getUrl('Items/Filters', {
-
- UserId: userId,
- ParentId: itemQuery.ParentId,
- IncludeItemTypes: itemQuery.IncludeItemTypes
-
-
- })).then(function (result) {
-
- renderFilters(context, result, itemQuery);
- });
-
- }
-
- function updateFilterControls(context, options) {
-
- var query = options.query;
-
- var elems, i, length;
-
- if (options.mode == 'livetvchannels') {
-
- context.querySelector('.chkFavorite').checked = query.IsFavorite == true;
- context.querySelector('.chkLikes').checked = query.IsLiked == true;
- context.querySelector('.chkDislikes').checked = query.IsDisliked == true;
-
- } else {
- elems = context.querySelectorAll('.chkStandardFilter');
- for (i = 0, length = elems.length; i < length; i++) {
-
- var chkStandardFilter = elems[i];
- var filters = "," + (query.Filters || "");
- var filterName = chkStandardFilter.getAttribute('data-filter');
-
- chkStandardFilter.checked = filters.indexOf(',' + filterName) != -1;
- }
- }
-
- elems = context.querySelectorAll('.chkVideoTypeFilter');
- for (i = 0, length = elems.length; i < length; i++) {
-
- var chkVideoTypeFilter = elems[i];
- var filters = "," + (query.VideoTypes || "");
- var filterName = chkVideoTypeFilter.getAttribute('data-filter');
-
- chkVideoTypeFilter.checked = filters.indexOf(',' + filterName) != -1;
- }
-
- context.querySelector('.chk3DFilter').checked = query.Is3D == true;
- context.querySelector('.chkHDFilter').checked = query.IsHD == true;
- context.querySelector('.chkSDFilter').checked = query.IsHD == true;
-
- context.querySelector('#chkSubtitle').checked = query.HasSubtitles == true;
- context.querySelector('#chkTrailer').checked = query.HasTrailer == true;
- context.querySelector('#chkThemeSong').checked = query.HasThemeSong == true;
- context.querySelector('#chkThemeVideo').checked = query.HasThemeVideo == true;
- context.querySelector('#chkSpecialFeature').checked = query.HasSpecialFeature == true;
-
- context.querySelector('#chkSpecialEpisode').checked = query.ParentIndexNumber == 0;
- context.querySelector('#chkMissingEpisode').checked = query.IsMissing == true;
- context.querySelector('#chkFutureEpisode').checked = query.IsUnaired == true;
-
- //context.querySelector('.playersRadioGroup').selected = query.MinPlayers == null ? 'all' : query.MinPlayers;
-
- for (i = 0, length = elems.length; i < length; i++) {
-
- var chkStatus = elems[i];
- var filters = "," + (query.SeriesStatus || "");
- var filterName = chkStatus.getAttribute('data-filter');
-
- chkStatus.checked = filters.indexOf(',' + filterName) != -1;
- }
-
- elems = context.querySelectorAll('.chkAirDays');
- for (i = 0, length = elems.length; i < length; i++) {
-
- var chkAirDays = elems[i];
- var filters = "," + (query.AirDays || "");
- var filterName = chkAirDays.getAttribute('data-filter');
-
- chkAirDays.checked = filters.indexOf(',' + filterName) != -1;
- }
- }
-
- function triggerChange(instance) {
-
- events.trigger(instance, 'filterchange');
- }
-
- function parentWithClass(elem, className) {
-
- while (!elem.classList || !elem.classList.contains(className)) {
- elem = elem.parentNode;
-
- if (!elem) {
- return null;
- }
- }
-
- return elem;
- }
-
- function setVisibility(context, options) {
-
- if (options.mode == 'livetvchannels' || options.mode == 'albums' || options.mode == 'artists' || options.mode == 'albumartists' || options.mode == 'songs') {
- hideByClass(context, 'videoStandard');
- }
-
- if (enableDynamicFilters(options.mode)) {
- context.querySelector('.genreFilters').classList.remove('hide');
- context.querySelector('.officialRatingFilters').classList.remove('hide');
- context.querySelector('.tagFilters').classList.remove('hide');
- context.querySelector('.yearFilters').classList.remove('hide');
- }
-
- if (options.mode == 'movies' || options.mode == 'episodes') {
- context.querySelector('.videoTypeFilters').classList.remove('hide');
- }
-
- if (options.mode == 'games') {
- //context.querySelector('.players').classList.remove('hide');
- }
-
- if (options.mode == 'movies' || options.mode == 'series' || options.mode == 'games' || options.mode == 'episodes') {
- context.querySelector('.features').classList.remove('hide');
- }
-
- if (options.mode == 'series') {
- context.querySelector('.airdays').classList.remove('hide');
- context.querySelector('.seriesStatus').classList.remove('hide');
- }
-
- if (options.mode == 'episodes') {
- showByClass(context, 'episodeFilter');
- }
- }
-
- function showByClass(context, className) {
-
- var elems = context.querySelectorAll('.' + className);
-
- for (var i = 0, length = elems.length; i < length; i++) {
- elems[i].classList.remove('hide');
- }
- }
-
- function hideByClass(context, className) {
-
- var elems = context.querySelectorAll('.' + className);
-
- for (var i = 0, length = elems.length; i < length; i++) {
- elems[i].classList.add('hide');
- }
- }
-
- function enableDynamicFilters(mode) {
- return mode == 'movies' || mode == 'games' || mode == 'series' || mode == 'albums' || mode == 'albumartists' || mode == 'artists' || mode == 'songs' || mode == 'episodes';
- }
-
- return function (options) {
-
- var self = this;
-
- function onFavoriteChange() {
- var query = options.query;
- query.StartIndex = 0;
- query.IsFavorite = this.checked ? true : null;
- triggerChange(self);
- }
-
- function onStandardFilterChange() {
-
- var query = options.query;
- var filterName = this.getAttribute('data-filter');
- var filters = query.Filters || "";
-
- filters = (',' + filters).replace(',' + filterName, '').substring(1);
-
- if (this.checked) {
- filters = filters ? (filters + ',' + filterName) : filterName;
- }
-
- query.StartIndex = 0;
- query.Filters = filters;
- triggerChange(self);
- }
-
- function onVideoTypeFilterChange() {
-
- var query = options.query;
- var filterName = this.getAttribute('data-filter');
- var filters = query.VideoTypes || "";
-
- filters = (',' + filters).replace(',' + filterName, '').substring(1);
-
- if (this.checked) {
- filters = filters ? (filters + ',' + filterName) : filterName;
- }
-
- query.StartIndex = 0;
- query.VideoTypes = filters;
-
- triggerChange(self);
- }
-
- function onStatusChange() {
- var query = options.query;
- var filterName = this.getAttribute('data-filter');
- var filters = query.SeriesStatus || "";
-
- filters = (',' + filters).replace(',' + filterName, '').substring(1);
-
- if (this.checked) {
- filters = filters ? (filters + ',' + filterName) : filterName;
- }
-
- query.SeriesStatus = filters;
- query.StartIndex = 0;
- triggerChange(self);
- }
-
- function onAirDayChange() {
-
- var query = options.query;
- var filterName = this.getAttribute('data-filter');
- var filters = query.AirDays || "";
-
- filters = (',' + filters).replace(',' + filterName, '').substring(1);
-
- if (this.checked) {
- filters = filters ? (filters + ',' + filterName) : filterName;
- }
-
- query.AirDays = filters;
- query.StartIndex = 0;
- triggerChange(self);
- }
-
- function bindEvents(context) {
-
- var query = options.query;
- var elems, i, length;
-
- if (options.mode == 'livetvchannels') {
-
- elems = context.querySelectorAll('.chkFavorite');
- for (i = 0, length = elems.length; i < length; i++) {
-
- elems[i].addEventListener('change', onFavoriteChange);
- }
-
-
- context.querySelector('.chkLikes').addEventListener('change', function () {
-
- query.StartIndex = 0;
- query.IsLiked = this.checked ? true : null;
- triggerChange(self);
- });
-
- context.querySelector('.chkDislikes').addEventListener('change', function () {
-
- query.StartIndex = 0;
- query.IsDisliked = this.checked ? true : null;
- triggerChange(self);
- });
-
- } else {
- elems = context.querySelectorAll('.chkStandardFilter');
- for (i = 0, length = elems.length; i < length; i++) {
- elems[i].addEventListener('change', onStandardFilterChange);
- }
- }
-
- elems = context.querySelectorAll('.chkVideoTypeFilter');
- for (i = 0, length = elems.length; i < length; i++) {
- elems[i].addEventListener('change', onVideoTypeFilterChange);
- }
-
- context.querySelector('.chk3DFilter').addEventListener('change', function () {
-
- query.StartIndex = 0;
- query.Is3D = this.checked ? true : null;
-
- triggerChange(self);
- });
-
- context.querySelector('.chkHDFilter').addEventListener('change', function () {
-
- query.StartIndex = 0;
- query.IsHD = this.checked ? true : null;
- triggerChange(self);
- });
-
- context.querySelector('.chkSDFilter').addEventListener('change', function () {
-
- query.StartIndex = 0;
- query.IsHD = this.checked ? false : null;
-
- triggerChange(self);
- });
-
- elems = context.querySelectorAll('.chkStatus');
- for (i = 0, length = elems.length; i < length; i++) {
- elems[i].addEventListener('change', onStatusChange);
- }
-
- elems = context.querySelectorAll('.chkAirDays');
- for (i = 0, length = elems.length; i < length; i++) {
- elems[i].addEventListener('change', onAirDayChange);
- }
-
- context.querySelector('#chkTrailer').addEventListener('change', function () {
- query.StartIndex = 0;
- query.HasTrailer = this.checked ? true : null;
-
- triggerChange(self);
- });
-
- context.querySelector('#chkThemeSong').addEventListener('change', function () {
- query.StartIndex = 0;
- query.HasThemeSong = this.checked ? true : null;
-
- triggerChange(self);
- });
-
- context.querySelector('#chkSpecialFeature').addEventListener('change', function () {
- query.StartIndex = 0;
- query.HasSpecialFeature = this.checked ? true : null;
-
- triggerChange(self);
- });
-
- context.querySelector('#chkThemeVideo').addEventListener('change', function () {
-
- query.StartIndex = 0;
- query.HasThemeVideo = this.checked ? true : null;
-
- triggerChange(self);
- });
-
- context.querySelector('#chkMissingEpisode').addEventListener('change', function () {
-
- query.StartIndex = 0;
- query.IsMissing = this.checked ? true : false;
-
- triggerChange(self);
- });
-
- context.querySelector('#chkSpecialEpisode').addEventListener('change', function () {
-
- query.StartIndex = 0;
- query.ParentIndexNumber = this.checked ? 0 : null;
-
- triggerChange(self);
- });
-
- context.querySelector('#chkFutureEpisode').addEventListener('change', function () {
-
- query.StartIndex = 0;
-
- if (this.checked) {
- query.IsUnaired = true;
- query.IsVirtualUnaired = null;
- } else {
- query.IsUnaired = null;
- query.IsVirtualUnaired = false;
- }
-
- triggerChange(self);
- });
-
- context.querySelector('#chkSubtitle').addEventListener('change', function () {
-
- query.StartIndex = 0;
- query.HasSubtitles = this.checked ? true : null;
-
- triggerChange(self);
- });
-
- //context.querySelector('.playersRadioGroup').addEventListener('iron-select', function (e) {
-
- // query.StartIndex = 0;
- // var val = e.target.selected;
- // var newValue = val == "all" ? null : val;
- // var changed = query.MinPlayers != newValue;
- // query.MinPlayers = newValue;
- // if (changed) {
- // triggerChange(self);
- // }
- //});
-
- context.addEventListener('change', function (e) {
-
- var chkGenreFilter = parentWithClass(e.target, 'chkGenreFilter');
- if (chkGenreFilter) {
- var filterName = chkGenreFilter.getAttribute('data-filter');
- var filters = query.Genres || "";
- var delimiter = '|';
-
- filters = (delimiter + filters).replace(delimiter + filterName, '').substring(1);
-
- if (chkGenreFilter.checked) {
- filters = filters ? (filters + delimiter + filterName) : filterName;
- }
-
- query.StartIndex = 0;
- query.Genres = filters;
-
- triggerChange(self);
- return;
- }
-
- var chkTagFilter = parentWithClass(e.target, 'chkTagFilter');
- if (chkTagFilter) {
- var filterName = chkTagFilter.getAttribute('data-filter');
- var filters = query.Tags || "";
- var delimiter = '|';
-
- filters = (delimiter + filters).replace(delimiter + filterName, '').substring(1);
-
- if (chkTagFilter.checked) {
- filters = filters ? (filters + delimiter + filterName) : filterName;
- }
-
- query.StartIndex = 0;
- query.Tags = filters;
-
- triggerChange(self);
- return;
- }
-
- var chkYearFilter = parentWithClass(e.target, 'chkYearFilter');
- if (chkYearFilter) {
- var filterName = chkYearFilter.getAttribute('data-filter');
- var filters = query.Years || "";
- var delimiter = ',';
-
- filters = (delimiter + filters).replace(delimiter + filterName, '').substring(1);
-
- if (chkYearFilter.checked) {
- filters = filters ? (filters + delimiter + filterName) : filterName;
- }
-
- query.StartIndex = 0;
- query.Years = filters;
-
- triggerChange(self);
- return;
- }
-
- var chkOfficialRatingFilter = parentWithClass(e.target, 'chkOfficialRatingFilter');
- if (chkOfficialRatingFilter) {
- var filterName = chkOfficialRatingFilter.getAttribute('data-filter');
- var filters = query.OfficialRatings || "";
- var delimiter = '|';
-
- filters = (delimiter + filters).replace(delimiter + filterName, '').substring(1);
-
- if (chkOfficialRatingFilter.checked) {
- filters = filters ? (filters + delimiter + filterName) : filterName;
- }
-
- query.StartIndex = 0;
- query.OfficialRatings = filters;
-
- triggerChange(self);
- return;
- }
- });
- }
-
- self.show = function () {
- return new Promise(function (resolve, reject) {
-
- var xhr = new XMLHttpRequest();
- xhr.open('GET', 'components/filterdialog/filterdialog.template.html', true);
-
- xhr.onload = function (e) {
-
- var template = this.response;
- var dlg = dialogHelper.createDialog({
- removeOnClose: true,
- modal: false,
- entryAnimationDuration: 160,
- exitAnimationDuration: 200,
- autoFocus: false
- });
-
- dlg.classList.add('ui-body-a');
- dlg.classList.add('background-theme-a');
-
- dlg.classList.add('formDialog');
- dlg.classList.add('filterDialog');
-
- dlg.innerHTML = Globalize.translateDocument(template);
-
- setVisibility(dlg, options);
-
- dialogHelper.open(dlg);
-
- dlg.addEventListener('close', resolve);
-
- updateFilterControls(dlg, options);
- bindEvents(dlg);
-
- if (enableDynamicFilters(options.mode)) {
- dlg.classList.add('dynamicFilterDialog');
- loadDynamicFilters(dlg, Dashboard.getCurrentUserId(), options.query);
- }
- }
-
- xhr.send();
- });
- };
-
- };
-});
\ No newline at end of file
+define(["dialogHelper","events","browser","emby-checkbox","emby-collapse","css!components/filterdialog/style"],function(dialogHelper,events,browser){"use strict";function renderOptions(context,selector,cssClass,items,isCheckedFn){var elem=context.querySelector(selector);items.length?elem.classList.remove("hide"):elem.classList.add("hide");var html="";html+='',html+=items.map(function(filter){var itemHtml="",checkedHtml=isCheckedFn(filter)?" checked":"";return itemHtml+="",itemHtml+=' ',itemHtml+=""+filter+" ",itemHtml+=" "}).join(""),html+="
",elem.querySelector(".filterOptions").innerHTML=html}function renderFilters(context,result,query){result.Tags&&(result.Tags.length=Math.min(result.Tags.length,50)),renderOptions(context,".genreFilters","chkGenreFilter",result.Genres,function(i){var delimeter="|";return(delimeter+(query.Genres||"")+delimeter).indexOf(delimeter+i+delimeter)!=-1}),renderOptions(context,".officialRatingFilters","chkOfficialRatingFilter",result.OfficialRatings,function(i){var delimeter="|";return(delimeter+(query.OfficialRatings||"")+delimeter).indexOf(delimeter+i+delimeter)!=-1}),renderOptions(context,".tagFilters","chkTagFilter",result.Tags,function(i){var delimeter="|";return(delimeter+(query.Tags||"")+delimeter).indexOf(delimeter+i+delimeter)!=-1}),renderOptions(context,".yearFilters","chkYearFilter",result.Years,function(i){var delimeter=",";return(delimeter+(query.Years||"")+delimeter).indexOf(delimeter+i+delimeter)!=-1})}function loadDynamicFilters(context,userId,itemQuery){return ApiClient.getJSON(ApiClient.getUrl("Items/Filters",{UserId:userId,ParentId:itemQuery.ParentId,IncludeItemTypes:itemQuery.IncludeItemTypes})).then(function(result){renderFilters(context,result,itemQuery)})}function updateFilterControls(context,options){var elems,i,length,query=options.query;if("livetvchannels"==options.mode)context.querySelector(".chkFavorite").checked=1==query.IsFavorite,context.querySelector(".chkLikes").checked=1==query.IsLiked,context.querySelector(".chkDislikes").checked=1==query.IsDisliked;else for(elems=context.querySelectorAll(".chkStandardFilter"),i=0,length=elems.length;i' + i.Name + ' ';
- return currentHtml;
-
- }).join('');
-
- context.querySelector('.librarySharingList').innerHTML = folderHtml;
- }
-
- function inviteUser(dlg) {
-
- Dashboard.showLoadingMsg();
-
- var shareExcludes = $(".chkShareFolder", dlg).get().filter(function (i) {
-
- return i.checked;
-
- }).map(function (i) {
-
- return i.getAttribute('data-folderid');
- });
-
- require(['connectHelper'], function (connectHelper) {
-
- connectHelper.inviteGuest({
- apiClient: ApiClient,
- guestOptions: {
-
- ConnectUsername: dlg.querySelector('#txtConnectUsername').value,
- EnabledLibraries: shareExcludes.join(','),
- SendingUserId: Dashboard.getCurrentUserId(),
- EnableLiveTv: false
- }
- }).then(function() {
-
- dlg.submitted = true;
- dialogHelper.close(dlg);
- });
- });
- }
-
- return {
- show: function () {
- return new Promise(function (resolve, reject) {
-
- var xhr = new XMLHttpRequest();
- xhr.open('GET', 'components/guestinviter/guestinviter.template.html', true);
-
- xhr.onload = function (e) {
-
- var template = this.response;
- var dlg = dialogHelper.createDialog({
- removeOnClose: true,
- size: 'small'
- });
-
- dlg.classList.add('ui-body-a');
- dlg.classList.add('background-theme-a');
-
- dlg.classList.add('formDialog');
-
- var html = '';
-
- html += Globalize.translateDocument(template);
-
- dlg.innerHTML = html;
-
- dialogHelper.open(dlg);
-
- dlg.addEventListener('close', function () {
-
- if (dlg.submitted) {
- resolve();
- } else {
- reject();
- }
- });
-
- dlg.querySelector('.btnCancel').addEventListener('click', function (e) {
-
- dialogHelper.close(dlg);
- });
-
- dlg.querySelector('form').addEventListener('submit', function (e) {
-
- inviteUser(dlg);
-
- e.preventDefault();
- return false;
- });
-
- ApiClient.getJSON(ApiClient.getUrl("Library/MediaFolders", { IsHidden: false })).then(function (result) {
-
- renderLibrarySharingList(dlg, result);
- });
- }
-
- xhr.send();
- });
- }
- };
-});
\ No newline at end of file
+define(["dialogHelper","jQuery","emby-input","emby-button","emby-checkbox","paper-icon-button-light","formDialogStyle"],function(dialogHelper,$){"use strict";function renderLibrarySharingList(context,result){var folderHtml="";folderHtml+=result.Items.map(function(i){var currentHtml="",isChecked=!0,checkedHtml=isChecked?' checked="checked"':"";return currentHtml+='"+i.Name+" "}).join(""),context.querySelector(".librarySharingList").innerHTML=folderHtml}function inviteUser(dlg){Dashboard.showLoadingMsg();var shareExcludes=$(".chkShareFolder",dlg).get().filter(function(i){return i.checked}).map(function(i){return i.getAttribute("data-folderid")});require(["connectHelper"],function(connectHelper){connectHelper.inviteGuest({apiClient:ApiClient,guestOptions:{ConnectUsername:dlg.querySelector("#txtConnectUsername").value,EnabledLibraries:shareExcludes.join(","),SendingUserId:Dashboard.getCurrentUserId(),EnableLiveTv:!1}}).then(function(){dlg.submitted=!0,dialogHelper.close(dlg)})})}return{show:function(){return new Promise(function(resolve,reject){var xhr=new XMLHttpRequest;xhr.open("GET","components/guestinviter/guestinviter.template.html",!0),xhr.onload=function(e){var template=this.response,dlg=dialogHelper.createDialog({removeOnClose:!0,size:"small"});dlg.classList.add("ui-body-a"),dlg.classList.add("background-theme-a"),dlg.classList.add("formDialog");var html="";html+=Globalize.translateDocument(template),dlg.innerHTML=html,dialogHelper.open(dlg),dlg.addEventListener("close",function(){dlg.submitted?resolve():reject()}),dlg.querySelector(".btnCancel").addEventListener("click",function(e){dialogHelper.close(dlg)}),dlg.querySelector("form").addEventListener("submit",function(e){return inviteUser(dlg),e.preventDefault(),!1}),ApiClient.getJSON(ApiClient.getUrl("Library/MediaFolders",{IsHidden:!1})).then(function(result){renderLibrarySharingList(dlg,result)})},xhr.send()})}}});
\ No newline at end of file
diff --git a/dashboard-ui/components/humanedate.js b/dashboard-ui/components/humanedate.js
index 71b631a058..5ce5e26445 100644
--- a/dashboard-ui/components/humanedate.js
+++ b/dashboard-ui/components/humanedate.js
@@ -1,65 +1 @@
-define(['datetime'], function (datetime) {
- 'use strict';
-
- /*
- * Javascript Humane Dates
- * Copyright (c) 2008 Dean Landolt (deanlandolt.com)
- * Re-write by Zach Leatherman (zachleat.com)
- *
- * Adopted from the John Resig's pretty.js
- * at http://ejohn.org/blog/javascript-pretty-date
- * and henrah's proposed modification
- * at http://ejohn.org/blog/javascript-pretty-date/#comment-297458
- *
- * Licensed under the MIT license.
- */
-
- function humane_date(date_str) {
- var time_formats = [[90, 'a minute'], // 60*1.5
- [3600, 'minutes', 60], // 60*60, 60
- [5400, 'an hour'], // 60*60*1.5
- [86400, 'hours', 3600], // 60*60*24, 60*60
- [129600, 'a day'], // 60*60*24*1.5
- [604800, 'days', 86400], // 60*60*24*7, 60*60*24
- [907200, 'a week'], // 60*60*24*7*1.5
- [2628000, 'weeks', 604800], // 60*60*24*(365/12), 60*60*24*7
- [3942000, 'a month'], // 60*60*24*(365/12)*1.5
- [31536000, 'months', 2628000], // 60*60*24*365, 60*60*24*(365/12)
- [47304000, 'a year'], // 60*60*24*365*1.5
- [3153600000, 'years', 31536000] // 60*60*24*365*100, 60*60*24*365
- ];
-
- var dt = new Date;
- var date = datetime.parseISO8601Date(date_str, true);
-
- var seconds = ((dt - date) / 1000);
- var token = ' ago';
- var i = 0;
- var format;
-
- if (seconds < 0) {
- seconds = Math.abs(seconds);
- //token = '';
- }
-
- while (format = time_formats[i++]) {
- if (seconds < format[0]) {
- if (format.length == 2) {
- return format[1] + token;
- } else {
- return Math.round(seconds / format[2]) + ' ' + format[1] + token;
- }
- }
- }
-
- // overflow for centuries
- if (seconds > 4730400000)
- return Math.round(seconds / 4730400000) + ' centuries' + token;
-
- return date_str;
- }
-
- window.humane_date = humane_date;
-
- return humane_date;
-});
\ No newline at end of file
+define(["datetime"],function(datetime){"use strict";function humane_date(date_str){var format,time_formats=[[90,"a minute"],[3600,"minutes",60],[5400,"an hour"],[86400,"hours",3600],[129600,"a day"],[604800,"days",86400],[907200,"a week"],[2628e3,"weeks",604800],[3942e3,"a month"],[31536e3,"months",2628e3],[47304e3,"a year"],[31536e5,"years",31536e3]],dt=new Date,date=datetime.parseISO8601Date(date_str,!0),seconds=(dt-date)/1e3,token=" ago",i=0;for(seconds<0&&(seconds=Math.abs(seconds));format=time_formats[i++];)if(seconds47304e5?Math.round(seconds/47304e5)+" centuries"+token:date_str}return window.humane_date=humane_date,humane_date});
\ No newline at end of file
diff --git a/dashboard-ui/components/iap.js b/dashboard-ui/components/iap.js
index 1063790866..d06a88d066 100644
--- a/dashboard-ui/components/iap.js
+++ b/dashboard-ui/components/iap.js
@@ -1,74 +1 @@
-define(['apphost', 'globalize', 'shell'], function (appHost, globalize, shell) {
- 'use strict';
-
- function getProductInfo(feature) {
- return null;
- }
-
- function showExternalPremiereInfo() {
- shell.openUrl('https://emby.media/premiere');
- }
-
- function beginPurchase(feature, email) {
- showExternalPremiereInfo();
- return Promise.reject();
- }
-
- function restorePurchase(id) {
- return Promise.reject();
- }
-
- function getSubscriptionOptions() {
-
- var options = [];
-
- options.push({
- id: 'embypremiere',
- title: globalize.translate('sharedcomponents#HeaderBecomeProjectSupporter'),
- requiresEmail: false
- });
-
- return Promise.resolve(options);
- }
-
- function isUnlockedByDefault(feature, options) {
-
- var autoUnlockedFeatures = appHost.unlockedFeatures ? appHost.unlockedFeatures() : [];
- if (autoUnlockedFeatures.indexOf(feature) != -1) {
-
- return Promise.resolve();
- }
-
- return Promise.reject();
- }
-
- function getAdminFeatureName(feature) {
-
- return feature;
- }
-
- function getRestoreButtonText() {
- return globalize.translate('sharedcomponents#ButtonAlreadyPaid');
- }
-
- function getPeriodicMessageIntervalMs(feature) {
-
- if (feature === 'playback') {
- return 43200000;
- }
-
- return 0;
- }
-
- return {
- getProductInfo: getProductInfo,
- beginPurchase: beginPurchase,
- restorePurchase: restorePurchase,
- getSubscriptionOptions: getSubscriptionOptions,
- isUnlockedByDefault: isUnlockedByDefault,
- getAdminFeatureName: getAdminFeatureName,
- getRestoreButtonText: getRestoreButtonText,
- getPeriodicMessageIntervalMs: getPeriodicMessageIntervalMs
- };
-
-});
\ No newline at end of file
+define(["apphost","globalize","shell"],function(appHost,globalize,shell){"use strict";function getProductInfo(feature){return null}function showExternalPremiereInfo(){shell.openUrl("https://emby.media/premiere")}function beginPurchase(feature,email){return showExternalPremiereInfo(),Promise.reject()}function restorePurchase(id){return Promise.reject()}function getSubscriptionOptions(){var options=[];return options.push({id:"embypremiere",title:globalize.translate("sharedcomponents#HeaderBecomeProjectSupporter"),requiresEmail:!1}),Promise.resolve(options)}function isUnlockedByDefault(feature,options){var autoUnlockedFeatures=appHost.unlockedFeatures?appHost.unlockedFeatures():[];return autoUnlockedFeatures.indexOf(feature)!=-1?Promise.resolve():Promise.reject()}function getAdminFeatureName(feature){return feature}function getRestoreButtonText(){return globalize.translate("sharedcomponents#ButtonAlreadyPaid")}function getPeriodicMessageIntervalMs(feature){return"playback"===feature?432e5:0}return{getProductInfo:getProductInfo,beginPurchase:beginPurchase,restorePurchase:restorePurchase,getSubscriptionOptions:getSubscriptionOptions,isUnlockedByDefault:isUnlockedByDefault,getAdminFeatureName:getAdminFeatureName,getRestoreButtonText:getRestoreButtonText,getPeriodicMessageIntervalMs:getPeriodicMessageIntervalMs}});
\ No newline at end of file
diff --git a/dashboard-ui/components/imagedownloader/imagedownloader.js b/dashboard-ui/components/imagedownloader/imagedownloader.js
index 0807f7357b..0559a8be9e 100644
--- a/dashboard-ui/components/imagedownloader/imagedownloader.js
+++ b/dashboard-ui/components/imagedownloader/imagedownloader.js
@@ -1,370 +1 @@
-define(['dialogHelper', 'imageLoader', 'emby-checkbox', 'emby-button', 'paper-icon-button-light', 'css!css/metadataeditor.css'], function (dialogHelper, imageLoader) {
- 'use strict';
-
- var currentItemId;
- var currentItemType;
- var currentResolve;
- var currentReject;
- var hasChanges = false;
-
- // These images can be large and we're seeing memory problems in safari
- var browsableImagePageSize = browserInfo.slow ? 6 : 30;
-
- var browsableImageStartIndex = 0;
- var browsableImageType = 'Primary';
- var selectedProvider;
-
- function getBaseRemoteOptions() {
-
- var options = {};
-
- options.itemId = currentItemId;
-
- return options;
- }
-
- function reloadBrowsableImages(page) {
-
- Dashboard.showLoadingMsg();
-
- var options = getBaseRemoteOptions();
-
- options.type = browsableImageType;
- options.startIndex = browsableImageStartIndex;
- options.limit = browsableImagePageSize;
- options.IncludeAllLanguages = page.querySelector('#chkAllLanguages').checked;
-
- var provider = selectedProvider || '';
-
- if (provider) {
- options.ProviderName = provider;
- }
-
- ApiClient.getAvailableRemoteImages(options).then(function (result) {
-
- renderRemoteImages(page, result, browsableImageType, options.startIndex, options.limit);
-
- page.querySelector('#selectBrowsableImageType').value = browsableImageType;
-
- var providersHtml = result.Providers.map(function (p) {
- return '' + p + ' ';
- });
-
- var selectImageProvider = page.querySelector('#selectImageProvider');
- selectImageProvider.innerHTML = '' + Globalize.translate('LabelAll') + ' ' + providersHtml;
- selectImageProvider.value = provider;
-
- Dashboard.hideLoadingMsg();
- });
-
- }
-
- function renderRemoteImages(page, imagesResult, imageType, startIndex, limit) {
-
- page.querySelector('.availableImagesPaging').innerHTML = getPagingHtml(startIndex, limit, imagesResult.TotalRecordCount);
-
- var html = '';
-
- for (var i = 0, length = imagesResult.Images.length; i < length; i++) {
-
- html += getRemoteImageHtml(imagesResult.Images[i], imageType);
- }
-
- var availableImagesList = page.querySelector('.availableImagesList');
- availableImagesList.innerHTML = html;
- imageLoader.lazyChildren(availableImagesList);
-
- var btnNextPage = page.querySelector('.btnNextPage');
- var btnPreviousPage = page.querySelector('.btnPreviousPage');
-
- if (btnNextPage) {
- btnNextPage.addEventListener('click', function () {
- browsableImageStartIndex += browsableImagePageSize;
- reloadBrowsableImages(page);
- });
- }
-
- if (btnPreviousPage) {
- btnPreviousPage.addEventListener('click', function () {
- browsableImageStartIndex -= browsableImagePageSize;
- reloadBrowsableImages(page);
- });
- }
-
- }
-
- function getPagingHtml(startIndex, limit, totalRecordCount) {
-
- var html = '';
-
- var recordsEnd = Math.min(startIndex + limit, totalRecordCount);
-
- // 20 is the minimum page size
- var showControls = totalRecordCount > limit;
-
- html += '';
-
- html += '
';
-
- var startAtDisplay = totalRecordCount ? startIndex + 1 : 0;
- html += startAtDisplay + '-' + recordsEnd + ' of ' + totalRecordCount;
-
- html += ' ';
-
- if (showControls) {
- html += '
';
-
- html += ' ';
- html += '= totalRecordCount ? 'disabled' : '') + '>arrow_forward ';
- html += '
';
- }
-
- html += '
';
-
- return html;
- }
-
- function parentWithClass(elem, className) {
-
- while (!elem.classList || !elem.classList.contains(className)) {
- elem = elem.parentNode;
-
- if (!elem) {
- return null;
- }
- }
-
- return elem;
- }
-
- function downloadRemoteImage(page, url, type, provider) {
-
- var options = getBaseRemoteOptions();
-
- options.Type = type;
- options.ImageUrl = url;
- options.ProviderName = provider;
-
- Dashboard.showLoadingMsg();
-
- ApiClient.downloadRemoteImage(options).then(function () {
-
- hasChanges = true;
- var dlg = parentWithClass(page, 'dialog');
- dialogHelper.close(dlg);
- });
- }
-
- function getDisplayUrl(url) {
- return ApiClient.getUrl("Images/Remote", { imageUrl: url });
- }
-
- function getRemoteImageHtml(image, imageType) {
-
- var html = '';
-
- html += '';
-
- var cssClass = "remoteImage lazy";
-
- if (imageType == "Backdrop" || imageType == "Art" || imageType == "Thumb" || imageType == "Logo") {
- cssClass += " remoteBackdropImage";
- }
- else if (imageType == "Banner") {
- cssClass += " remoteBannerImage";
- }
- else if (imageType == "Disc") {
- cssClass += " remoteDiscImage";
- }
- else {
-
- if (currentItemType == "Episode") {
- cssClass += " remoteBackdropImage";
- }
- else if (currentItemType == "MusicAlbum" || currentItemType == "MusicArtist") {
- cssClass += " remoteDiscImage";
- }
- else {
- cssClass += " remotePosterImage";
- }
- }
-
- var displayUrl = getDisplayUrl(image.ThumbnailUrl || image.Url);
-
- html += '
';
- html += ' ';
-
- html += '
';
-
- html += '
';
- html += image.ProviderName;
- html += '
';
-
- if (image.Width || image.Height || image.Language) {
-
- html += '
';
-
- if (image.Width && image.Height) {
- html += image.Width + ' x ' + image.Height;
-
- if (image.Language) {
-
- html += ' • ' + image.Language;
- }
- } else {
- if (image.Language) {
-
- html += image.Language;
- }
- }
-
- html += '
';
- }
-
- if (image.CommunityRating != null) {
-
- html += '
';
-
- if (image.RatingType == "Likes") {
- html += image.CommunityRating + (image.CommunityRating == 1 ? " like" : " likes");
- } else {
-
- if (image.CommunityRating) {
- html += image.CommunityRating.toFixed(1);
-
- if (image.VoteCount) {
- html += ' • ' + image.VoteCount + (image.VoteCount == 1 ? " vote" : " votes");
- }
- } else {
- html += "Unrated";
- }
- }
-
- html += '
';
- }
-
- html += '
cloud_download ';
-
- html += '
';
- html += '
';
-
- return html;
- }
-
- function initEditor(page) {
-
-
- page.querySelector('#selectBrowsableImageType').addEventListener('change', function () {
- browsableImageType = this.value;
- browsableImageStartIndex = 0;
- selectedProvider = null;
-
- reloadBrowsableImages(page);
- });
-
- page.querySelector('#selectImageProvider').addEventListener('change', function () {
-
- browsableImageStartIndex = 0;
- selectedProvider = this.value;
-
- reloadBrowsableImages(page);
- });
-
- page.querySelector('#chkAllLanguages').addEventListener('change', function () {
-
- browsableImageStartIndex = 0;
-
- reloadBrowsableImages(page);
- });
-
- page.addEventListener('click', function (e) {
-
- var btnDownloadRemoteImage = parentWithClass(e.target, 'btnDownloadRemoteImage');
- if (btnDownloadRemoteImage) {
- downloadRemoteImage(page, btnDownloadRemoteImage.getAttribute('data-imageurl'), btnDownloadRemoteImage.getAttribute('data-imagetype'), btnDownloadRemoteImage.getAttribute('data-imageprovider'));
- }
- });
- }
-
- function showEditor(itemId, itemType) {
-
- Dashboard.showLoadingMsg();
-
- var xhr = new XMLHttpRequest();
- xhr.open('GET', 'components/imagedownloader/imagedownloader.template.html', true);
-
- xhr.onload = function (e) {
-
- var template = this.response;
- currentItemId = itemId;
- currentItemType = itemType;
-
- var dlg = dialogHelper.createDialog({
- size: 'fullscreen-border',
- lockScroll: true,
- removeOnClose: true
- });
-
- var theme = 'b';
-
- dlg.classList.add('ui-body-' + theme);
- dlg.classList.add('background-theme-' + theme);
-
- var html = '';
- html += '';
-
- html += '';
- html += Globalize.translateDocument(template);
- html += '
';
-
- dlg.innerHTML = html;
-
- // Has to be assigned a z-index after the call to .open()
- dlg.addEventListener('close', onDialogClosed);
-
- dialogHelper.open(dlg);
-
- var editorContent = dlg.querySelector('.editorContent');
- initEditor(editorContent);
-
- dlg.querySelector('.btnCloseDialog').addEventListener('click', function () {
-
- dialogHelper.close(dlg);
- });
-
- reloadBrowsableImages(editorContent);
- }
-
- xhr.send();
- }
-
- function onDialogClosed() {
-
- Dashboard.hideLoadingMsg();
- if (hasChanges) {
- currentResolve();
- } else {
- currentReject();
- }
- }
-
- return {
- show: function (itemId, itemType, imageType) {
-
- return new Promise(function (resolve, reject) {
-
- currentResolve = resolve;
- currentReject = reject;
- hasChanges = false;
- browsableImageStartIndex = 0;
- browsableImageType = imageType || 'Primary';
- selectedProvider = null;
-
- showEditor(itemId, itemType);
- });
- }
- };
-});
\ No newline at end of file
+define(["dialogHelper","imageLoader","emby-checkbox","emby-button","paper-icon-button-light","css!css/metadataeditor.css"],function(dialogHelper,imageLoader){"use strict";function getBaseRemoteOptions(){var options={};return options.itemId=currentItemId,options}function reloadBrowsableImages(page){Dashboard.showLoadingMsg();var options=getBaseRemoteOptions();options.type=browsableImageType,options.startIndex=browsableImageStartIndex,options.limit=browsableImagePageSize,options.IncludeAllLanguages=page.querySelector("#chkAllLanguages").checked;var provider=selectedProvider||"";provider&&(options.ProviderName=provider),ApiClient.getAvailableRemoteImages(options).then(function(result){renderRemoteImages(page,result,browsableImageType,options.startIndex,options.limit),page.querySelector("#selectBrowsableImageType").value=browsableImageType;var providersHtml=result.Providers.map(function(p){return''+p+" "}),selectImageProvider=page.querySelector("#selectImageProvider");selectImageProvider.innerHTML=''+Globalize.translate("LabelAll")+" "+providersHtml,selectImageProvider.value=provider,Dashboard.hideLoadingMsg()})}function renderRemoteImages(page,imagesResult,imageType,startIndex,limit){page.querySelector(".availableImagesPaging").innerHTML=getPagingHtml(startIndex,limit,imagesResult.TotalRecordCount);for(var html="",i=0,length=imagesResult.Images.length;ilimit;html+='',html+='
';var startAtDisplay=totalRecordCount?startIndex+1:0;return html+=startAtDisplay+"-"+recordsEnd+" of "+totalRecordCount,html+=" ",showControls&&(html+='
',html+=' ',html+='=totalRecordCount?"disabled":"")+'>arrow_forward ',html+="
"),html+="
"}function parentWithClass(elem,className){for(;!elem.classList||!elem.classList.contains(className);)if(elem=elem.parentNode,!elem)return null;return elem}function downloadRemoteImage(page,url,type,provider){var options=getBaseRemoteOptions();options.Type=type,options.ImageUrl=url,options.ProviderName=provider,Dashboard.showLoadingMsg(),ApiClient.downloadRemoteImage(options).then(function(){hasChanges=!0;var dlg=parentWithClass(page,"dialog");dialogHelper.close(dlg)})}function getDisplayUrl(url){return ApiClient.getUrl("Images/Remote",{imageUrl:url})}function getRemoteImageHtml(image,imageType){var html="";html+='';var cssClass="remoteImage lazy";cssClass+="Backdrop"==imageType||"Art"==imageType||"Thumb"==imageType||"Logo"==imageType?" remoteBackdropImage":"Banner"==imageType?" remoteBannerImage":"Disc"==imageType?" remoteDiscImage":"Episode"==currentItemType?" remoteBackdropImage":"MusicAlbum"==currentItemType||"MusicArtist"==currentItemType?" remoteDiscImage":" remotePosterImage";var displayUrl=getDisplayUrl(image.ThumbnailUrl||image.Url);return html+='
',html+=" ",html+='
',html+='
',html+=image.ProviderName,html+="
",(image.Width||image.Height||image.Language)&&(html+='
',image.Width&&image.Height?(html+=image.Width+" x "+image.Height,image.Language&&(html+=" • "+image.Language)):image.Language&&(html+=image.Language),html+="
"),null!=image.CommunityRating&&(html+='
',"Likes"==image.RatingType?html+=image.CommunityRating+(1==image.CommunityRating?" like":" likes"):image.CommunityRating?(html+=image.CommunityRating.toFixed(1),image.VoteCount&&(html+=" • "+image.VoteCount+(1==image.VoteCount?" vote":" votes"))):html+="Unrated",html+="
"),html+='
cloud_download ',html+="
",html+="
"}function initEditor(page){page.querySelector("#selectBrowsableImageType").addEventListener("change",function(){browsableImageType=this.value,browsableImageStartIndex=0,selectedProvider=null,reloadBrowsableImages(page)}),page.querySelector("#selectImageProvider").addEventListener("change",function(){browsableImageStartIndex=0,selectedProvider=this.value,reloadBrowsableImages(page)}),page.querySelector("#chkAllLanguages").addEventListener("change",function(){browsableImageStartIndex=0,reloadBrowsableImages(page)}),page.addEventListener("click",function(e){var btnDownloadRemoteImage=parentWithClass(e.target,"btnDownloadRemoteImage");btnDownloadRemoteImage&&downloadRemoteImage(page,btnDownloadRemoteImage.getAttribute("data-imageurl"),btnDownloadRemoteImage.getAttribute("data-imagetype"),btnDownloadRemoteImage.getAttribute("data-imageprovider"))})}function showEditor(itemId,itemType){Dashboard.showLoadingMsg();var xhr=new XMLHttpRequest;xhr.open("GET","components/imagedownloader/imagedownloader.template.html",!0),xhr.onload=function(e){var template=this.response;currentItemId=itemId,currentItemType=itemType;var dlg=dialogHelper.createDialog({size:"fullscreen-border",lockScroll:!0,removeOnClose:!0}),theme="b";dlg.classList.add("ui-body-"+theme),dlg.classList.add("background-theme-"+theme);var html="";html+='",html+='',html+=Globalize.translateDocument(template),html+="
",dlg.innerHTML=html,dlg.addEventListener("close",onDialogClosed),dialogHelper.open(dlg);var editorContent=dlg.querySelector(".editorContent");initEditor(editorContent),dlg.querySelector(".btnCloseDialog").addEventListener("click",function(){dialogHelper.close(dlg)}),reloadBrowsableImages(editorContent)},xhr.send()}function onDialogClosed(){Dashboard.hideLoadingMsg(),hasChanges?currentResolve():currentReject()}var currentItemId,currentItemType,currentResolve,currentReject,selectedProvider,hasChanges=!1,browsableImagePageSize=browserInfo.slow?6:30,browsableImageStartIndex=0,browsableImageType="Primary";return{show:function(itemId,itemType,imageType){return new Promise(function(resolve,reject){currentResolve=resolve,currentReject=reject,hasChanges=!1,browsableImageStartIndex=0,browsableImageType=imageType||"Primary",selectedProvider=null,showEditor(itemId,itemType)})}}});
\ No newline at end of file
diff --git a/dashboard-ui/components/imageuploader/imageuploader.js b/dashboard-ui/components/imageuploader/imageuploader.js
index c28594d748..572f3c222c 100644
--- a/dashboard-ui/components/imageuploader/imageuploader.js
+++ b/dashboard-ui/components/imageuploader/imageuploader.js
@@ -1,200 +1 @@
-define(['dialogHelper', 'jQuery', 'emby-button', 'emby-select'], function (dialogHelper, $) {
- 'use strict';
-
- var currentItemId;
- var currentFile;
- var currentDeferred;
- var hasChanges = false;
-
- function onFileReaderError(evt) {
-
- Dashboard.hideLoadingMsg();
-
- switch (evt.target.error.code) {
- case evt.target.error.NOT_FOUND_ERR:
- require(['toast'], function (toast) {
- toast(Globalize.translate('MessageFileNotFound'));
- });
- break;
- case evt.target.error.ABORT_ERR:
- break; // noop
- default:
- require(['toast'], function (toast) {
- toast(Globalize.translate('MessageFileReadError'));
- });
- break;
- };
- }
-
- function setFiles(page, files) {
-
- var file = files[0];
-
- if (!file || !file.type.match('image.*')) {
- $('#imageOutput', page).html('');
- $('#fldUpload', page).hide();
- currentFile = null;
- return;
- }
-
- currentFile = file;
-
- var reader = new FileReader();
-
- reader.onerror = onFileReaderError;
- reader.onloadstart = function () {
- $('#fldUpload', page).hide();
- };
- reader.onabort = function () {
- Dashboard.hideLoadingMsg();
- console.log('File read cancelled');
- };
-
- // Closure to capture the file information.
- reader.onload = (function (theFile) {
- return function (e) {
-
- // Render thumbnail.
- var html = [' '].join('');
-
- $('#imageOutput', page).html(html);
- $('#fldUpload', page).show();
- };
- })(file);
-
- // Read in the image file as a data URL.
- reader.readAsDataURL(file);
- }
-
- function processImageChangeResult(page) {
-
- hasChanges = true;
- history.back();
- }
-
- function onSubmit() {
-
- var file = currentFile;
-
- if (!file) {
- return false;
- }
-
- if (file.type != "image/png" && file.type != "image/jpeg" && file.type != "image/jpeg") {
- return false;
- }
-
- Dashboard.showLoadingMsg();
-
- var page = $(this).parents('.dialog');
-
- var imageType = $('#selectImageType', page).val();
-
- ApiClient.uploadItemImage(currentItemId, imageType, file).then(function () {
-
- $('#uploadImage', page).val('').trigger('change');
- Dashboard.hideLoadingMsg();
- processImageChangeResult(page);
- });
-
- return false;
- }
-
- function initEditor(page) {
-
- $('form', page).off('submit', onSubmit).on('submit', onSubmit);
-
- $('#uploadImage', page).on("change", function () {
- setFiles(page, this.files);
- });
-
- $("#imageDropZone", page).on('dragover', function (e) {
-
- e.preventDefault();
-
- e.originalEvent.dataTransfer.dropEffect = 'Copy';
-
- return false;
-
- }).on('drop', function (e) {
-
- e.preventDefault();
-
- setFiles(page, e.originalEvent.dataTransfer.files);
-
- return false;
- });
- }
-
- function showEditor(itemId, options) {
-
- options = options || {};
-
- var xhr = new XMLHttpRequest();
- xhr.open('GET', 'components/imageuploader/imageuploader.template.html', true);
-
- xhr.onload = function (e) {
-
- var template = this.response;
- currentItemId = itemId;
-
- var dlg = dialogHelper.createDialog({
- size: 'fullscreen-border'
- });
-
- var theme = options.theme || 'b';
-
- dlg.classList.add('ui-body-' + theme);
- dlg.classList.add('background-theme-' + theme);
-
- var html = '';
- html += '';
-
- html += '';
- html += Globalize.translateDocument(template);
- html += '
';
-
- dlg.innerHTML = html;
-
- // Has to be assigned a z-index after the call to .open()
- $(dlg).on('close', onDialogClosed);
-
- dialogHelper.open(dlg);
-
- var editorContent = dlg.querySelector('.editorContent');
- initEditor(editorContent);
-
- $('#selectImageType', dlg).val(options.imageType || 'Primary');
-
- $('.btnCloseDialog', dlg).on('click', function () {
-
- dialogHelper.close(dlg);
- });
- }
-
- xhr.send();
- }
-
- function onDialogClosed() {
-
- $(this).remove();
- Dashboard.hideLoadingMsg();
- currentDeferred.resolveWith(null, [hasChanges]);
- }
-
- return {
- show: function (itemId, options) {
-
- var deferred = jQuery.Deferred();
-
- currentDeferred = deferred;
- hasChanges = false;
-
- showEditor(itemId, options);
- return deferred.promise();
- }
- };
-});
\ No newline at end of file
+define(["dialogHelper","jQuery","emby-button","emby-select"],function(dialogHelper,$){"use strict";function onFileReaderError(evt){switch(Dashboard.hideLoadingMsg(),evt.target.error.code){case evt.target.error.NOT_FOUND_ERR:require(["toast"],function(toast){toast(Globalize.translate("MessageFileNotFound"))});break;case evt.target.error.ABORT_ERR:break;default:require(["toast"],function(toast){toast(Globalize.translate("MessageFileReadError"))})}}function setFiles(page,files){var file=files[0];if(!file||!file.type.match("image.*"))return $("#imageOutput",page).html(""),$("#fldUpload",page).hide(),void(currentFile=null);currentFile=file;var reader=new FileReader;reader.onerror=onFileReaderError,reader.onloadstart=function(){$("#fldUpload",page).hide()},reader.onabort=function(){Dashboard.hideLoadingMsg(),console.log("File read cancelled")},reader.onload=function(theFile){return function(e){var html=[' '].join("");$("#imageOutput",page).html(html),$("#fldUpload",page).show()}}(file),reader.readAsDataURL(file)}function processImageChangeResult(page){hasChanges=!0,history.back()}function onSubmit(){var file=currentFile;if(!file)return!1;if("image/png"!=file.type&&"image/jpeg"!=file.type&&"image/jpeg"!=file.type)return!1;Dashboard.showLoadingMsg();var page=$(this).parents(".dialog"),imageType=$("#selectImageType",page).val();return ApiClient.uploadItemImage(currentItemId,imageType,file).then(function(){$("#uploadImage",page).val("").trigger("change"),Dashboard.hideLoadingMsg(),processImageChangeResult(page)}),!1}function initEditor(page){$("form",page).off("submit",onSubmit).on("submit",onSubmit),$("#uploadImage",page).on("change",function(){setFiles(page,this.files)}),$("#imageDropZone",page).on("dragover",function(e){return e.preventDefault(),e.originalEvent.dataTransfer.dropEffect="Copy",!1}).on("drop",function(e){return e.preventDefault(),setFiles(page,e.originalEvent.dataTransfer.files),!1})}function showEditor(itemId,options){options=options||{};var xhr=new XMLHttpRequest;xhr.open("GET","components/imageuploader/imageuploader.template.html",!0),xhr.onload=function(e){var template=this.response;currentItemId=itemId;var dlg=dialogHelper.createDialog({size:"fullscreen-border"}),theme=options.theme||"b";dlg.classList.add("ui-body-"+theme),dlg.classList.add("background-theme-"+theme);var html="";html+='",html+='',html+=Globalize.translateDocument(template),html+="
",dlg.innerHTML=html,$(dlg).on("close",onDialogClosed),dialogHelper.open(dlg);var editorContent=dlg.querySelector(".editorContent");initEditor(editorContent),$("#selectImageType",dlg).val(options.imageType||"Primary"),$(".btnCloseDialog",dlg).on("click",function(){dialogHelper.close(dlg)})},xhr.send()}function onDialogClosed(){$(this).remove(),Dashboard.hideLoadingMsg(),currentDeferred.resolveWith(null,[hasChanges])}var currentItemId,currentFile,currentDeferred,hasChanges=!1;return{show:function(itemId,options){var deferred=jQuery.Deferred();return currentDeferred=deferred,hasChanges=!1,showEditor(itemId,options),deferred.promise()}}});
\ No newline at end of file
diff --git a/dashboard-ui/components/libraryoptionseditor/libraryoptionseditor.js b/dashboard-ui/components/libraryoptionseditor/libraryoptionseditor.js
index 5a644f3698..07dab31d73 100644
--- a/dashboard-ui/components/libraryoptionseditor/libraryoptionseditor.js
+++ b/dashboard-ui/components/libraryoptionseditor/libraryoptionseditor.js
@@ -1,154 +1 @@
-define(['globalize', 'emby-checkbox', 'emby-select'], function (globalize) {
- 'use strict';
-
- function populateLanguages(select) {
-
- return ApiClient.getCultures().then(function (languages) {
-
- var html = "";
-
- html += " ";
-
- for (var i = 0, length = languages.length; i < length; i++) {
-
- var culture = languages[i];
-
- html += "" + culture.DisplayName + " ";
- }
-
- select.innerHTML = html;
- });
- }
-
- function populateCountries(select) {
-
- return ApiClient.getCountries().then(function (allCountries) {
-
- var html = "";
-
- html += " ";
-
- for (var i = 0, length = allCountries.length; i < length; i++) {
-
- var culture = allCountries[i];
-
- html += "" + culture.DisplayName + " ";
- }
-
- select.innerHTML = html;
- });
- }
-
- function embed(parent, contentType, libraryOptions) {
-
- return new Promise(function (resolve, reject) {
-
- var xhr = new XMLHttpRequest();
- xhr.open('GET', 'components/libraryoptionseditor/libraryoptionseditor.template.html', true);
-
- xhr.onload = function (e) {
-
- var template = this.response;
- parent.innerHTML = globalize.translateDocument(template);
-
- var promises = [
- populateLanguages(parent.querySelector('#selectLanguage')),
- populateCountries(parent.querySelector('#selectCountry'))
- ];
-
- Promise.all(promises).then(function () {
-
- setContentType(parent, contentType);
-
- if (libraryOptions) {
- setLibraryOptions(parent, libraryOptions);
- }
-
- resolve();
- });
- }
-
- xhr.send();
- });
- }
-
- function setContentType(parent, contentType) {
-
- if (contentType == 'homevideos' || contentType == 'photos') {
- parent.querySelector('.chkEnablePhotosContainer').classList.remove('hide');
- parent.querySelector('.chkDownloadImagesInAdvanceContainer').classList.add('hide');
- parent.querySelector('.chkEnableInternetProvidersContainer').classList.add('hide');
- parent.querySelector('.fldMetadataLanguage').classList.add('hide');
- parent.querySelector('.fldMetadataCountry').classList.add('hide');
- } else {
- parent.querySelector('.chkEnablePhotosContainer').classList.add('hide');
- parent.querySelector('.chkDownloadImagesInAdvanceContainer').classList.remove('hide');
- parent.querySelector('.chkEnableInternetProvidersContainer').classList.remove('hide');
- parent.querySelector('.fldMetadataLanguage').classList.remove('hide');
- parent.querySelector('.fldMetadataCountry').classList.remove('hide');
- }
-
- if (contentType == 'photos') {
- parent.querySelector('.chkSaveLocalContainer').classList.add('hide');
- } else {
- parent.querySelector('.chkSaveLocalContainer').classList.remove('hide');
- }
-
- if (contentType == 'tvshows' || contentType == 'movies' || contentType == 'homevideos' || contentType == 'musicvideos' || contentType == 'mixed' || !contentType) {
- parent.querySelector('.chapterSettingsSection').classList.remove('hide');
- } else {
- parent.querySelector('.chapterSettingsSection').classList.add('hide');
- }
-
- if (contentType == 'tvshows') {
- parent.querySelector('.chkImportMissingEpisodesContainer').classList.remove('hide');
- parent.querySelector('.chkAutomaticallyGroupSeriesContainer').classList.remove('hide');
- } else {
- parent.querySelector('.chkImportMissingEpisodesContainer').classList.add('hide');
- parent.querySelector('.chkAutomaticallyGroupSeriesContainer').classList.add('hide');
- }
- }
-
- function getLibraryOptions(parent) {
-
- var options = {
- EnableArchiveMediaFiles: false,
- EnablePhotos: parent.querySelector('.chkEnablePhotos').checked,
- EnableRealtimeMonitor: parent.querySelector('.chkEnableRealtimeMonitor').checked,
- ExtractChapterImagesDuringLibraryScan: parent.querySelector('.chkExtractChaptersDuringLibraryScan').checked,
- EnableChapterImageExtraction: parent.querySelector('.chkExtractChapterImages').checked,
- DownloadImagesInAdvance: parent.querySelector('#chkDownloadImagesInAdvance').checked,
- EnableInternetProviders: parent.querySelector('#chkEnableInternetProviders').checked,
- ImportMissingEpisodes: parent.querySelector('#chkImportMissingEpisodes').checked,
- SaveLocalMetadata: parent.querySelector('#chkSaveLocal').checked,
- EnableAutomaticSeriesGrouping: parent.querySelector('.chkAutomaticallyGroupSeries').checked,
- PreferredMetadataLanguage: parent.querySelector('#selectLanguage').value,
- MetadataCountryCode: parent.querySelector('#selectCountry').value
- };
-
- return options;
- }
-
- function setLibraryOptions(parent, options) {
-
- parent.querySelector('#selectLanguage').value = options.PreferredMetadataLanguage || '';
- parent.querySelector('#selectCountry').value = options.MetadataCountryCode || '';
-
- parent.querySelector('.chkEnablePhotos').checked = options.EnablePhotos;
- parent.querySelector('.chkEnableRealtimeMonitor').checked = options.EnableRealtimeMonitor;
- parent.querySelector('.chkExtractChaptersDuringLibraryScan').checked = options.ExtractChapterImagesDuringLibraryScan;
- parent.querySelector('.chkExtractChapterImages').checked = options.EnableChapterImageExtraction;
- parent.querySelector('#chkDownloadImagesInAdvance').checked = options.DownloadImagesInAdvance;
- parent.querySelector('#chkEnableInternetProviders').checked = options.EnableInternetProviders;
- parent.querySelector('#chkSaveLocal').checked = options.SaveLocalMetadata;
- parent.querySelector('#chkImportMissingEpisodes').checked = options.ImportMissingEpisodes;
- parent.querySelector('.chkAutomaticallyGroupSeries').checked = options.EnableAutomaticSeriesGrouping;
- }
-
- return {
- embed: embed,
- setContentType: setContentType,
- getLibraryOptions: getLibraryOptions,
- setLibraryOptions: setLibraryOptions
- };
-});
\ No newline at end of file
+define(["globalize","emby-checkbox","emby-select"],function(globalize){"use strict";function populateLanguages(select){return ApiClient.getCultures().then(function(languages){var html="";html+=" ";for(var i=0,length=languages.length;i"+culture.DisplayName+""}select.innerHTML=html})}function populateCountries(select){return ApiClient.getCountries().then(function(allCountries){var html="";html+=" ";for(var i=0,length=allCountries.length;i"+culture.DisplayName+""}select.innerHTML=html})}function embed(parent,contentType,libraryOptions){return new Promise(function(resolve,reject){var xhr=new XMLHttpRequest;xhr.open("GET","components/libraryoptionseditor/libraryoptionseditor.template.html",!0),xhr.onload=function(e){var template=this.response;parent.innerHTML=globalize.translateDocument(template);var promises=[populateLanguages(parent.querySelector("#selectLanguage")),populateCountries(parent.querySelector("#selectCountry"))];Promise.all(promises).then(function(){setContentType(parent,contentType),libraryOptions&&setLibraryOptions(parent,libraryOptions),resolve()})},xhr.send()})}function setContentType(parent,contentType){"homevideos"==contentType||"photos"==contentType?(parent.querySelector(".chkEnablePhotosContainer").classList.remove("hide"),parent.querySelector(".chkDownloadImagesInAdvanceContainer").classList.add("hide"),parent.querySelector(".chkEnableInternetProvidersContainer").classList.add("hide"),parent.querySelector(".fldMetadataLanguage").classList.add("hide"),parent.querySelector(".fldMetadataCountry").classList.add("hide")):(parent.querySelector(".chkEnablePhotosContainer").classList.add("hide"),parent.querySelector(".chkDownloadImagesInAdvanceContainer").classList.remove("hide"),parent.querySelector(".chkEnableInternetProvidersContainer").classList.remove("hide"),parent.querySelector(".fldMetadataLanguage").classList.remove("hide"),parent.querySelector(".fldMetadataCountry").classList.remove("hide")),"photos"==contentType?parent.querySelector(".chkSaveLocalContainer").classList.add("hide"):parent.querySelector(".chkSaveLocalContainer").classList.remove("hide"),"tvshows"!=contentType&&"movies"!=contentType&&"homevideos"!=contentType&&"musicvideos"!=contentType&&"mixed"!=contentType&&contentType?parent.querySelector(".chapterSettingsSection").classList.add("hide"):parent.querySelector(".chapterSettingsSection").classList.remove("hide"),"tvshows"==contentType?(parent.querySelector(".chkImportMissingEpisodesContainer").classList.remove("hide"),parent.querySelector(".chkAutomaticallyGroupSeriesContainer").classList.remove("hide")):(parent.querySelector(".chkImportMissingEpisodesContainer").classList.add("hide"),parent.querySelector(".chkAutomaticallyGroupSeriesContainer").classList.add("hide"))}function getLibraryOptions(parent){var options={EnableArchiveMediaFiles:!1,EnablePhotos:parent.querySelector(".chkEnablePhotos").checked,EnableRealtimeMonitor:parent.querySelector(".chkEnableRealtimeMonitor").checked,ExtractChapterImagesDuringLibraryScan:parent.querySelector(".chkExtractChaptersDuringLibraryScan").checked,EnableChapterImageExtraction:parent.querySelector(".chkExtractChapterImages").checked,DownloadImagesInAdvance:parent.querySelector("#chkDownloadImagesInAdvance").checked,EnableInternetProviders:parent.querySelector("#chkEnableInternetProviders").checked,ImportMissingEpisodes:parent.querySelector("#chkImportMissingEpisodes").checked,SaveLocalMetadata:parent.querySelector("#chkSaveLocal").checked,EnableAutomaticSeriesGrouping:parent.querySelector(".chkAutomaticallyGroupSeries").checked,PreferredMetadataLanguage:parent.querySelector("#selectLanguage").value,MetadataCountryCode:parent.querySelector("#selectCountry").value};return options}function setLibraryOptions(parent,options){parent.querySelector("#selectLanguage").value=options.PreferredMetadataLanguage||"",parent.querySelector("#selectCountry").value=options.MetadataCountryCode||"",parent.querySelector(".chkEnablePhotos").checked=options.EnablePhotos,parent.querySelector(".chkEnableRealtimeMonitor").checked=options.EnableRealtimeMonitor,parent.querySelector(".chkExtractChaptersDuringLibraryScan").checked=options.ExtractChapterImagesDuringLibraryScan,parent.querySelector(".chkExtractChapterImages").checked=options.EnableChapterImageExtraction,parent.querySelector("#chkDownloadImagesInAdvance").checked=options.DownloadImagesInAdvance,parent.querySelector("#chkEnableInternetProviders").checked=options.EnableInternetProviders,parent.querySelector("#chkSaveLocal").checked=options.SaveLocalMetadata,parent.querySelector("#chkImportMissingEpisodes").checked=options.ImportMissingEpisodes,parent.querySelector(".chkAutomaticallyGroupSeries").checked=options.EnableAutomaticSeriesGrouping}return{embed:embed,setContentType:setContentType,getLibraryOptions:getLibraryOptions,setLibraryOptions:setLibraryOptions}});
\ No newline at end of file
diff --git a/dashboard-ui/components/medialibrarycreator/medialibrarycreator.js b/dashboard-ui/components/medialibrarycreator/medialibrarycreator.js
index 58998154c3..e05aef05ba 100644
--- a/dashboard-ui/components/medialibrarycreator/medialibrarycreator.js
+++ b/dashboard-ui/components/medialibrarycreator/medialibrarycreator.js
@@ -1,273 +1 @@
-define(['dialogHelper', 'jQuery', 'components/libraryoptionseditor/libraryoptionseditor', 'emby-input', 'emby-select', 'paper-icon-button-light', 'listViewStyle', 'formDialogStyle'], function (dialogHelper, $, libraryoptionseditor) {
- 'use strict';
-
- var currentDeferred;
- var hasChanges;
- var currentOptions;
- var pathInfos = [];
-
- function onSubmit() {
-
- if (pathInfos.length == 0) {
- require(['alert'], function (alert) {
- alert({
- text: Globalize.translate('PleaseAddAtLeastOneFolder'),
- type: 'error'
- });
- });
- return false;
- }
-
- var form = this;
- var dlg = $(form).parents('.dialog')[0];
-
- var name = $('#txtValue', form).val();
- var type = $('#selectCollectionType', form).val();
-
- if (type == 'mixed') {
- type = null;
- }
-
- var libraryOptions = libraryoptionseditor.getLibraryOptions(dlg.querySelector('.libraryOptions'));
-
- libraryOptions.PathInfos = pathInfos;
-
- ApiClient.addVirtualFolder(name, type, currentOptions.refresh, libraryOptions).then(function () {
-
- hasChanges = true;
- dialogHelper.close(dlg);
-
- }, function () {
-
- require(['toast'], function (toast) {
- toast(Globalize.translate('ErrorAddingMediaPathToVirtualFolder'));
- });
- });
-
- return false;
- }
-
- function getCollectionTypeOptionsHtml(collectionTypeOptions) {
-
- return collectionTypeOptions.filter(function (i) {
-
- return i.isSelectable !== false;
-
- }).map(function (i) {
-
- return '' + i.name + ' ';
-
- }).join("");
- }
-
- function initEditor(page, collectionTypeOptions) {
-
- $('#selectCollectionType', page).html(getCollectionTypeOptionsHtml(collectionTypeOptions)).val('').on('change', function () {
-
- var value = this.value;
-
- var dlg = $(this).parents('.dialog')[0];
-
- libraryoptionseditor.setContentType(dlg.querySelector('.libraryOptions'), (value == 'mixed' ? '' : value));
-
- if (value) {
- dlg.querySelector('.libraryOptions').classList.remove('hide');
- } else {
- dlg.querySelector('.libraryOptions').classList.add('hide');
- }
-
- if (value == 'mixed') {
- return;
- }
-
- var index = this.selectedIndex;
- if (index != -1) {
-
- var name = this.options[index].innerHTML
- .replace('*', '')
- .replace('&', '&');
-
- $('#txtValue', dlg).val(name);
-
- var folderOption = collectionTypeOptions.filter(function (i) {
-
- return i.value == value;
-
- })[0];
-
- $('.collectionTypeFieldDescription', dlg).html(folderOption.message || '');
- }
-
- });
-
- $('.btnAddFolder', page).on('click', onAddButtonClick);
- $('form', page).off('submit', onSubmit).on('submit', onSubmit);
- }
-
- function onAddButtonClick() {
-
- var page = $(this).parents('.dlg-librarycreator')[0];
-
- require(['directorybrowser'], function (directoryBrowser) {
-
- var picker = new directoryBrowser();
-
- picker.show({
-
- enableNetworkSharePath: true,
- callback: function (path, networkSharePath) {
-
- if (path) {
- addMediaLocation(page, path, networkSharePath);
- }
- picker.close();
- }
-
- });
- });
- }
-
- function getFolderHtml(pathInfo, index) {
-
- var html = '';
-
- html += '';
-
- html += '
folder ';
-
- var cssClass = pathInfo.NetworkPath ? 'listItemBody two-line' : 'listItemBody';
-
- html += '
';
- html += '
' + pathInfo.Path + '
';
-
- if (pathInfo.NetworkPath) {
- html += '
' + pathInfo.NetworkPath + '
';
- }
- html += '
';
-
- html += '
remove_circle ';
-
- html += '
';
-
- return html;
- }
-
- function renderPaths(page) {
- var foldersHtml = pathInfos.map(getFolderHtml).join('');
-
- var folderList = page.querySelector('.folderList');
- folderList.innerHTML = foldersHtml;
-
- if (foldersHtml) {
- folderList.classList.remove('hide');
- } else {
- folderList.classList.add('hide');
- }
-
- $(page.querySelectorAll('.btnRemovePath')).on('click', onRemoveClick);
- }
-
- function addMediaLocation(page, path, networkSharePath) {
-
- if (pathInfos.filter(function (p) {
-
- return p.Path.toLowerCase() == path.toLowerCase();
-
- }).length == 0) {
-
- var pathInfo = {
- Path: path
- };
- if (networkSharePath) {
- pathInfo.NetworkPath = networkSharePath;
- }
- pathInfos.push(pathInfo);
- renderPaths(page);
- }
- }
-
- function onRemoveClick() {
-
- var button = this;
- var index = parseInt(button.getAttribute('data-index'));
-
- var location = pathInfos[index];
- pathInfos = pathInfos.filter(function (p) {
-
- return p.Path.toLowerCase() != location.toLowerCase();
- });
- var page = $(this).parents('.dlg-librarycreator')[0];
- renderPaths(page);
- }
-
- function onDialogClosed() {
-
- Dashboard.hideLoadingMsg();
- currentDeferred.resolveWith(null, [hasChanges]);
- }
-
- function initLibraryOptions(dlg) {
- libraryoptionseditor.embed(dlg.querySelector('.libraryOptions')).then(function () {
- $('#selectCollectionType', dlg).trigger('change');
- });
- }
-
- function editor() {
-
- var self = this;
-
- self.show = function (options) {
-
- var deferred = jQuery.Deferred();
-
- currentOptions = options;
- currentDeferred = deferred;
- hasChanges = false;
-
- var xhr = new XMLHttpRequest();
- xhr.open('GET', 'components/medialibrarycreator/medialibrarycreator.template.html', true);
-
- xhr.onload = function (e) {
-
- var template = this.response;
- var dlg = dialogHelper.createDialog({
- size: 'medium',
-
- // In (at least) chrome this is causing the text field to not be editable
- modal: false,
-
- removeOnClose: true,
- scrollY: false
- });
-
- dlg.classList.add('ui-body-a');
- dlg.classList.add('background-theme-a');
- dlg.classList.add('dlg-librarycreator');
- dlg.classList.add('formDialog');
-
- dlg.innerHTML = Globalize.translateDocument(template);
-
- initEditor(dlg, options.collectionTypeOptions);
-
- dlg.addEventListener('close', onDialogClosed);
-
- dialogHelper.open(dlg);
-
- dlg.querySelector('.btnCancel').addEventListener('click', function () {
-
- dialogHelper.close(dlg);
- });
-
- pathInfos = [];
- renderPaths(dlg);
- initLibraryOptions(dlg);
- }
-
- xhr.send();
-
- return deferred.promise();
- };
- }
-
- return editor;
-});
\ No newline at end of file
+define(["dialogHelper","jQuery","components/libraryoptionseditor/libraryoptionseditor","emby-input","emby-select","paper-icon-button-light","listViewStyle","formDialogStyle"],function(dialogHelper,$,libraryoptionseditor){"use strict";function onSubmit(){if(0==pathInfos.length)return require(["alert"],function(alert){alert({text:Globalize.translate("PleaseAddAtLeastOneFolder"),type:"error"})}),!1;var form=this,dlg=$(form).parents(".dialog")[0],name=$("#txtValue",form).val(),type=$("#selectCollectionType",form).val();"mixed"==type&&(type=null);var libraryOptions=libraryoptionseditor.getLibraryOptions(dlg.querySelector(".libraryOptions"));return libraryOptions.PathInfos=pathInfos,ApiClient.addVirtualFolder(name,type,currentOptions.refresh,libraryOptions).then(function(){hasChanges=!0,dialogHelper.close(dlg)},function(){require(["toast"],function(toast){toast(Globalize.translate("ErrorAddingMediaPathToVirtualFolder"))})}),!1}function getCollectionTypeOptionsHtml(collectionTypeOptions){return collectionTypeOptions.filter(function(i){return i.isSelectable!==!1}).map(function(i){return''+i.name+" "}).join("")}function initEditor(page,collectionTypeOptions){$("#selectCollectionType",page).html(getCollectionTypeOptionsHtml(collectionTypeOptions)).val("").on("change",function(){var value=this.value,dlg=$(this).parents(".dialog")[0];if(libraryoptionseditor.setContentType(dlg.querySelector(".libraryOptions"),"mixed"==value?"":value),value?dlg.querySelector(".libraryOptions").classList.remove("hide"):dlg.querySelector(".libraryOptions").classList.add("hide"),"mixed"!=value){var index=this.selectedIndex;if(index!=-1){var name=this.options[index].innerHTML.replace("*","").replace("&","&");$("#txtValue",dlg).val(name);var folderOption=collectionTypeOptions.filter(function(i){return i.value==value})[0];$(".collectionTypeFieldDescription",dlg).html(folderOption.message||"")}}}),$(".btnAddFolder",page).on("click",onAddButtonClick),$("form",page).off("submit",onSubmit).on("submit",onSubmit)}function onAddButtonClick(){var page=$(this).parents(".dlg-librarycreator")[0];require(["directorybrowser"],function(directoryBrowser){var picker=new directoryBrowser;picker.show({enableNetworkSharePath:!0,callback:function(path,networkSharePath){path&&addMediaLocation(page,path,networkSharePath),picker.close()}})})}function getFolderHtml(pathInfo,index){var html="";html+='',html+='
folder ';var cssClass=pathInfo.NetworkPath?"listItemBody two-line":"listItemBody";return html+='
',html+='
'+pathInfo.Path+"
",pathInfo.NetworkPath&&(html+='
'+pathInfo.NetworkPath+"
"),html+="
",html+='
remove_circle ',html+="
"}function renderPaths(page){var foldersHtml=pathInfos.map(getFolderHtml).join(""),folderList=page.querySelector(".folderList");folderList.innerHTML=foldersHtml,foldersHtml?folderList.classList.remove("hide"):folderList.classList.add("hide"),$(page.querySelectorAll(".btnRemovePath")).on("click",onRemoveClick)}function addMediaLocation(page,path,networkSharePath){if(0==pathInfos.filter(function(p){return p.Path.toLowerCase()==path.toLowerCase()}).length){var pathInfo={Path:path};networkSharePath&&(pathInfo.NetworkPath=networkSharePath),pathInfos.push(pathInfo),renderPaths(page)}}function onRemoveClick(){var button=this,index=parseInt(button.getAttribute("data-index")),location=pathInfos[index];pathInfos=pathInfos.filter(function(p){return p.Path.toLowerCase()!=location.toLowerCase()});var page=$(this).parents(".dlg-librarycreator")[0];renderPaths(page)}function onDialogClosed(){Dashboard.hideLoadingMsg(),currentDeferred.resolveWith(null,[hasChanges])}function initLibraryOptions(dlg){libraryoptionseditor.embed(dlg.querySelector(".libraryOptions")).then(function(){$("#selectCollectionType",dlg).trigger("change")})}function editor(){var self=this;self.show=function(options){var deferred=jQuery.Deferred();currentOptions=options,currentDeferred=deferred,hasChanges=!1;var xhr=new XMLHttpRequest;return xhr.open("GET","components/medialibrarycreator/medialibrarycreator.template.html",!0),xhr.onload=function(e){var template=this.response,dlg=dialogHelper.createDialog({size:"medium",modal:!1,removeOnClose:!0,scrollY:!1});dlg.classList.add("ui-body-a"),dlg.classList.add("background-theme-a"),dlg.classList.add("dlg-librarycreator"),dlg.classList.add("formDialog"),dlg.innerHTML=Globalize.translateDocument(template),initEditor(dlg,options.collectionTypeOptions),dlg.addEventListener("close",onDialogClosed),dialogHelper.open(dlg),dlg.querySelector(".btnCancel").addEventListener("click",function(){dialogHelper.close(dlg)}),pathInfos=[],renderPaths(dlg),initLibraryOptions(dlg)},xhr.send(),deferred.promise()}}var currentDeferred,hasChanges,currentOptions,pathInfos=[];return editor});
\ No newline at end of file
diff --git a/dashboard-ui/components/medialibraryeditor/medialibraryeditor.js b/dashboard-ui/components/medialibraryeditor/medialibraryeditor.js
index d2b91cc386..8963ecdd8e 100644
--- a/dashboard-ui/components/medialibraryeditor/medialibraryeditor.js
+++ b/dashboard-ui/components/medialibraryeditor/medialibraryeditor.js
@@ -1,296 +1 @@
-define(['dialogHelper', 'dom', 'components/libraryoptionseditor/libraryoptionseditor', 'emby-button', 'listViewStyle', 'paper-icon-button-light', 'formDialogStyle'], function (dialogHelper, dom, libraryoptionseditor) {
- 'use strict';
-
- var currentDeferred;
- var hasChanges;
- var currentOptions;
-
- function addMediaLocation(page, path, networkSharePath) {
-
- var virtualFolder = currentOptions.library;
-
- var refreshAfterChange = currentOptions.refresh;
-
- ApiClient.addMediaPath(virtualFolder.Name, path, networkSharePath, refreshAfterChange).then(function () {
-
- hasChanges = true;
- refreshLibraryFromServer(page);
-
- }, function () {
-
- require(['toast'], function (toast) {
- toast(Globalize.translate('ErrorAddingMediaPathToVirtualFolder'));
- });
- });
- }
-
- function updateMediaLocation(page, path, networkSharePath) {
- var virtualFolder = currentOptions.library;
- ApiClient.updateMediaPath(virtualFolder.Name, {
-
- Path: path,
- NetworkPath: networkSharePath
-
- }).then(function () {
-
- hasChanges = true;
- refreshLibraryFromServer(page);
-
- }, function () {
-
- require(['toast'], function (toast) {
- toast(Globalize.translate('ErrorAddingMediaPathToVirtualFolder'));
- });
- });
- }
-
- function onRemoveClick(btnRemovePath) {
-
- var button = btnRemovePath;
- var index = parseInt(button.getAttribute('data-index'));
-
- var virtualFolder = currentOptions.library;
-
- var location = virtualFolder.Locations[index];
-
- require(['confirm'], function (confirm) {
-
- confirm({
-
- title: Globalize.translate('HeaderRemoveMediaLocation'),
- text: Globalize.translate('MessageConfirmRemoveMediaLocation'),
- confirmText: Globalize.translate('ButtonDelete'),
- primary: 'cancel'
-
- }).then(function () {
-
- var refreshAfterChange = currentOptions.refresh;
-
- ApiClient.removeMediaPath(virtualFolder.Name, location, refreshAfterChange).then(function () {
-
- hasChanges = true;
- refreshLibraryFromServer(dom.parentWithClass(button, 'dlg-libraryeditor'));
-
- }, function () {
-
- require(['toast'], function (toast) {
- toast(Globalize.translate('DefaultErrorMessage'));
- });
- });
- });
- });
- }
-
- function onListItemClick(e) {
-
- var btnRemovePath = dom.parentWithClass(e.target, 'btnRemovePath');
- if (btnRemovePath) {
- onRemoveClick(btnRemovePath);
- return;
- }
-
- var listItem = dom.parentWithClass(e.target, 'listItem');
- if (!listItem) {
- return;
- }
-
- var index = parseInt(listItem.getAttribute('data-index'));
- var page = dom.parentWithClass(listItem, 'dlg-libraryeditor');
- showDirectoryBrowser(page, index);
- }
-
- function getFolderHtml(pathInfo, index) {
-
- var html = '';
-
- html += '';
-
- html += '
folder ';
-
- var cssClass = pathInfo.NetworkPath ? 'listItemBody two-line' : 'listItemBody';
-
- html += '
';
-
- html += '
';
- html += pathInfo.Path;
- html += ' ';
- if (pathInfo.NetworkPath) {
- html += '
' + pathInfo.NetworkPath + '
';
- }
- html += '
';
-
- html += '
remove_circle ';
-
- html += '
';
-
- return html;
- }
-
- function refreshLibraryFromServer(page) {
-
- ApiClient.getVirtualFolders().then(function (result) {
-
- var library = result.filter(function (f) {
-
- return f.Name == currentOptions.library.Name;
-
- })[0];
-
- if (library) {
- currentOptions.library = library;
- renderLibrary(page, currentOptions);
- }
- });
- }
-
- function renderLibrary(page, options) {
-
- var pathInfos = (options.library.LibraryOptions || {}).PathInfos || [];
-
- if (!pathInfos.length) {
- pathInfos = options.library.Locations.map(function (p) {
- return {
- Path: p
- };
- });
- }
-
- var foldersHtml = pathInfos.map(getFolderHtml).join('');
-
- page.querySelector('.folderList').innerHTML = foldersHtml;
-
- var listItems = page.querySelectorAll('.listItem');
- for (var i = 0, length = listItems.length; i < length; i++) {
- listItems[i].addEventListener('click', onListItemClick);
- }
- }
-
- function onAddButtonClick() {
-
- var page = dom.parentWithClass(this, 'dlg-libraryeditor');
-
- showDirectoryBrowser(page);
- }
-
- function showDirectoryBrowser(context, listIndex) {
-
- require(['directorybrowser'], function (directoryBrowser) {
-
- var picker = new directoryBrowser();
-
- var pathInfos = (currentOptions.library.LibraryOptions || {}).PathInfos || [];
- var pathInfo = listIndex == null ? {} : (pathInfos[listIndex] || {});
- // legacy
- var location = listIndex == null ? null : (currentOptions.library.Locations[listIndex]);
- var originalPath = pathInfo.Path || location;
-
- picker.show({
-
- enableNetworkSharePath: true,
- pathReadOnly: listIndex != null,
- path: originalPath,
- networkSharePath: pathInfo.NetworkPath,
- callback: function (path, networkSharePath) {
-
- if (path) {
- if (originalPath) {
- updateMediaLocation(context, originalPath, networkSharePath);
- } else {
- addMediaLocation(context, path, networkSharePath);
- }
- }
- picker.close();
- }
-
- });
- });
- }
-
- function initEditor(dlg, options) {
- renderLibrary(dlg, options);
-
- dlg.querySelector('.btnAddFolder').addEventListener('click', onAddButtonClick);
-
- libraryoptionseditor.embed(dlg.querySelector('.libraryOptions'), options.library.CollectionType, options.library.LibraryOptions);
- }
-
- function onDialogClosing() {
-
- var dlg = this;
-
- var libraryOptions = libraryoptionseditor.getLibraryOptions(dlg.querySelector('.libraryOptions'));
-
- libraryOptions = Object.assign(currentOptions.library.LibraryOptions || {}, libraryOptions);
-
- ApiClient.updateVirtualFolderOptions(currentOptions.library.ItemId, libraryOptions);
- }
-
- function onDialogClosed() {
-
- Dashboard.hideLoadingMsg();
-
- // hardcoding this to true for now until libraryOptions are taken into account
- hasChanges = true;
-
- currentDeferred.resolveWith(null, [hasChanges]);
- }
-
- function editor() {
-
- var self = this;
-
- self.show = function (options) {
-
- var deferred = jQuery.Deferred();
-
- currentOptions = options;
- currentDeferred = deferred;
- hasChanges = false;
-
- var xhr = new XMLHttpRequest();
- xhr.open('GET', 'components/medialibraryeditor/medialibraryeditor.template.html', true);
-
- xhr.onload = function (e) {
-
- var template = this.response;
- var dlg = dialogHelper.createDialog({
- size: 'medium',
-
- // In (at least) chrome this is causing the text field to not be editable
- modal: false,
- removeOnClose: true,
- scrollY: false
- });
-
- dlg.classList.add('dlg-libraryeditor');
- dlg.classList.add('ui-body-a');
- dlg.classList.add('background-theme-a');
- dlg.classList.add('formDialog');
-
- dlg.innerHTML = Globalize.translateDocument(template);
-
- dlg.querySelector('.formDialogHeaderTitle').innerHTML = options.library.Name;
-
- initEditor(dlg, options);
-
- dlg.addEventListener('closing', onDialogClosing);
- dlg.addEventListener('close', onDialogClosed);
-
- dialogHelper.open(dlg);
-
- dlg.querySelector('.btnCancel').addEventListener('click', function () {
-
- dialogHelper.close(dlg);
- });
-
- refreshLibraryFromServer(dlg);
- }
-
- xhr.send();
-
- return deferred.promise();
- };
- }
-
- return editor;
-});
\ No newline at end of file
+define(["dialogHelper","dom","components/libraryoptionseditor/libraryoptionseditor","emby-button","listViewStyle","paper-icon-button-light","formDialogStyle"],function(dialogHelper,dom,libraryoptionseditor){"use strict";function addMediaLocation(page,path,networkSharePath){var virtualFolder=currentOptions.library,refreshAfterChange=currentOptions.refresh;ApiClient.addMediaPath(virtualFolder.Name,path,networkSharePath,refreshAfterChange).then(function(){hasChanges=!0,refreshLibraryFromServer(page)},function(){require(["toast"],function(toast){toast(Globalize.translate("ErrorAddingMediaPathToVirtualFolder"))})})}function updateMediaLocation(page,path,networkSharePath){var virtualFolder=currentOptions.library;ApiClient.updateMediaPath(virtualFolder.Name,{Path:path,NetworkPath:networkSharePath}).then(function(){hasChanges=!0,refreshLibraryFromServer(page)},function(){require(["toast"],function(toast){toast(Globalize.translate("ErrorAddingMediaPathToVirtualFolder"))})})}function onRemoveClick(btnRemovePath){var button=btnRemovePath,index=parseInt(button.getAttribute("data-index")),virtualFolder=currentOptions.library,location=virtualFolder.Locations[index];require(["confirm"],function(confirm){confirm({title:Globalize.translate("HeaderRemoveMediaLocation"),text:Globalize.translate("MessageConfirmRemoveMediaLocation"),confirmText:Globalize.translate("ButtonDelete"),primary:"cancel"}).then(function(){var refreshAfterChange=currentOptions.refresh;ApiClient.removeMediaPath(virtualFolder.Name,location,refreshAfterChange).then(function(){hasChanges=!0,refreshLibraryFromServer(dom.parentWithClass(button,"dlg-libraryeditor"))},function(){require(["toast"],function(toast){toast(Globalize.translate("DefaultErrorMessage"))})})})})}function onListItemClick(e){var btnRemovePath=dom.parentWithClass(e.target,"btnRemovePath");if(btnRemovePath)return void onRemoveClick(btnRemovePath);var listItem=dom.parentWithClass(e.target,"listItem");if(listItem){var index=parseInt(listItem.getAttribute("data-index")),page=dom.parentWithClass(listItem,"dlg-libraryeditor");showDirectoryBrowser(page,index)}}function getFolderHtml(pathInfo,index){var html="";html+='',html+='
folder ';var cssClass=pathInfo.NetworkPath?"listItemBody two-line":"listItemBody";return html+='
',html+='
',html+=pathInfo.Path,html+=" ",pathInfo.NetworkPath&&(html+='
'+pathInfo.NetworkPath+"
"),html+="
",html+='
remove_circle ',html+="
"}function refreshLibraryFromServer(page){ApiClient.getVirtualFolders().then(function(result){var library=result.filter(function(f){return f.Name==currentOptions.library.Name})[0];library&&(currentOptions.library=library,renderLibrary(page,currentOptions))})}function renderLibrary(page,options){var pathInfos=(options.library.LibraryOptions||{}).PathInfos||[];pathInfos.length||(pathInfos=options.library.Locations.map(function(p){return{Path:p}}));var foldersHtml=pathInfos.map(getFolderHtml).join("");page.querySelector(".folderList").innerHTML=foldersHtml;for(var listItems=page.querySelectorAll(".listItem"),i=0,length=listItems.length;i 0) {
- draggingY = true;
- }
-
- if (!draggingX && !draggingY && (!isOpen || Math.abs(ev.deltaX) >= 10)) {
- draggingX = true;
- scrollContainer.addEventListener('scroll', disableEvent);
- self.showMask();
-
- } else if (!draggingY) {
- draggingY = true;
- }
-
- if (draggingX) {
- newPos = currentPos + ev.deltaX;
- self.changeMenuPos();
- }
- }
-
- function onPanEnd(ev) {
- options.target.classList.add('transition');
- scrollContainer.removeEventListener('scroll', disableEvent);
- draggingX = false;
- draggingY = false;
- currentPos = ev.deltaX;
- self.checkMenuState(ev.deltaX, ev.deltaY);
- }
-
- function initEdgeSwipe(Hammer) {
- if (options.disableEdgeSwipe) {
- return;
- }
- return;
- require(['hammer-main'], initEdgeSwipeInternal);
- }
-
- function initEdgeSwipeInternal(edgeHammer) {
- var isPeeking = false;
-
- edgeHammer.on('panstart panmove', function (ev) {
-
- if (isPeeking) {
- onPanMove(ev);
- } else {
- var srcEvent = ev.srcEvent;
- var clientX = srcEvent.clientX;
- if (!clientX) {
- var touches = srcEvent.touches;
- if (touches && touches.length) {
- clientX = touches[0].clientX;
- }
- }
- if (clientX <= options.handleSize) {
- isPeeking = true;
- onPanStart(ev);
- }
- }
- });
- edgeHammer.on('panend pancancel', function (ev) {
- if (isPeeking) {
- isPeeking = false;
- onPanEnd(ev);
- }
- });
-
- self.edgeHammer = edgeHammer;
- }
-
- function disableEvent(e) {
-
- e.preventDefault();
- e.stopPropagation();
- }
-
- TouchMenuLA.prototype.touchStartMenu = function () {
-
- menuHammer.on('panstart', function (ev) {
- onPanStart(ev);
- });
- menuHammer.on('panmove', function (ev) {
- onPanMove(ev);
- });
- };
-
- TouchMenuLA.prototype.animateToPosition = function (pos) {
-
- requestAnimationFrame(function () {
- if (pos) {
- options.target.style.transform = 'translate3d(' + pos + 'px, 0, 0)';
- } else {
- options.target.style.transform = 'none';
- }
- });
- };
-
- TouchMenuLA.prototype.changeMenuPos = function () {
- if (newPos <= options.width) {
- this.animateToPosition(newPos);
- }
- };
-
- TouchMenuLA.prototype.touchEndMenu = function () {
- menuHammer.on('panend pancancel', onPanEnd);
- };
-
- TouchMenuLA.prototype.clickMaskClose = function () {
- mask.addEventListener('click', function () {
- self.close();
- });
- };
-
- TouchMenuLA.prototype.checkMenuState = function (deltaX, deltaY) {
- if (velocity >= 1.0) {
- if (deltaX >= -80 || Math.abs(deltaY) >= 70) {
- self.open();
- } else {
- self.close();
- }
- } else {
- if (newPos >= 100) {
- self.open();
- } else {
- self.close();
- }
- }
- };
-
- TouchMenuLA.prototype.open = function () {
- this.animateToPosition(options.width);
-
- currentPos = options.width;
- this.isVisible = true;
- options.target.classList.add('open');
-
- self.showMask();
- self.invoke(options.onChange);
- };
-
- TouchMenuLA.prototype.close = function () {
- this.animateToPosition(0);
- currentPos = 0;
- self.isVisible = false;
- options.target.classList.remove('open');
-
- self.hideMask();
- self.invoke(options.onChange);
- };
-
- TouchMenuLA.prototype.toggle = function () {
- if (self.isVisible) {
- self.close();
- } else {
- self.open();
- }
- };
-
- TouchMenuLA.prototype.eventStartMask = function () {
- maskHammer.on('panstart panmove', function (ev) {
- if (ev.center.x <= options.width && self.isVisible) {
- countStart++;
-
- if (countStart == 1) {
- startPoint = ev.deltaX;
- }
-
- if (ev.deltaX < 0) {
- draggingX = true;
- newPos = (ev.deltaX - startPoint) + options.width;
- self.changeMenuPos();
- velocity = Math.abs(ev.velocity);
- }
- }
- });
- };
-
- TouchMenuLA.prototype.eventEndMask = function () {
- maskHammer.on('panend pancancel', function (ev) {
- self.checkMenuState(ev.deltaX);
- countStart = 0;
- });
- };
-
- TouchMenuLA.prototype.showMask = function () {
-
- mask.classList.add('backdrop');
- };
-
- TouchMenuLA.prototype.hideMask = function () {
-
- mask.classList.remove('backdrop');
- };
-
- TouchMenuLA.prototype.invoke = function (fn) {
- if (fn) {
- fn.apply(self);
- }
- };
-
- function initWithHammer(Hammer) {
-
- if (Hammer) {
- menuHammer = Hammer(options.target, null);
- }
-
- self.initElements(Hammer);
-
- if (Hammer) {
- self.touchStartMenu();
- self.touchEndMenu();
- self.eventStartMask();
- self.eventEndMask();
- initEdgeSwipe(Hammer);
- }
-
- if (!options.disableMask) {
- self.clickMaskClose();
- }
- }
-
- TouchMenuLA.prototype.initialize = function () {
-
- options = Object.assign(defaults, options || {});
-
- // Not ready yet
- if (browser.edge) {
- options.disableEdgeSwipe = true;
- }
-
- if (browser.touch) {
- require(['hammer'], initWithHammer);
- } else {
- initWithHammer();
- }
- };
-
- return new TouchMenuLA();
- };
-});
\ No newline at end of file
+define(["browser","css!./navdrawer","scrollStyles"],function(browser){"use strict";return function(options){function onPanStart(ev){options.target.classList.remove("transition"),options.target.classList.add("open"),velocity=Math.abs(ev.velocity)}function onPanMove(ev){velocity=Math.abs(ev.velocity);var isOpen=self.visible;isOpen&&!draggingX&&ev.deltaX>0&&(draggingY=!0),draggingX||draggingY||isOpen&&!(Math.abs(ev.deltaX)>=10)?draggingY||(draggingY=!0):(draggingX=!0,scrollContainer.addEventListener("scroll",disableEvent),self.showMask()),draggingX&&(newPos=currentPos+ev.deltaX,self.changeMenuPos())}function onPanEnd(ev){options.target.classList.add("transition"),scrollContainer.removeEventListener("scroll",disableEvent),draggingX=!1,draggingY=!1,currentPos=ev.deltaX,self.checkMenuState(ev.deltaX,ev.deltaY)}function initEdgeSwipe(Hammer){options.disableEdgeSwipe}function disableEvent(e){e.preventDefault(),e.stopPropagation()}function initWithHammer(Hammer){Hammer&&(menuHammer=Hammer(options.target,null)),self.initElements(Hammer),Hammer&&(self.touchStartMenu(),self.touchEndMenu(),self.eventStartMask(),self.eventEndMask(),initEdgeSwipe(Hammer)),options.disableMask||self.clickMaskClose()}var self,defaults,mask,maskHammer,menuHammer,newPos=0,currentPos=0,startPoint=0,countStart=0,velocity=0;options.target.classList.add("transition");var draggingX,draggingY,scrollContainer=options.target.querySelector(".scrollContainer");scrollContainer.classList.add("smoothScrollY");var TouchMenuLA=function(){self=this,defaults={width:260,handleSize:30,disableMask:!1,maxMaskOpacity:.5},this.isVisible=!1,this.initialize()};return TouchMenuLA.prototype.initElements=function(Hammer){options.target.classList.add("touch-menu-la"),options.target.style.width=options.width+"px",options.target.style.left=-options.width+"px",options.disableMask||(mask=document.createElement("div"),mask.className="tmla-mask",document.body.appendChild(mask),Hammer&&(maskHammer=new Hammer(mask,null)))},TouchMenuLA.prototype.touchStartMenu=function(){menuHammer.on("panstart",function(ev){onPanStart(ev)}),menuHammer.on("panmove",function(ev){onPanMove(ev)})},TouchMenuLA.prototype.animateToPosition=function(pos){requestAnimationFrame(function(){pos?options.target.style.transform="translate3d("+pos+"px, 0, 0)":options.target.style.transform="none"})},TouchMenuLA.prototype.changeMenuPos=function(){newPos<=options.width&&this.animateToPosition(newPos)},TouchMenuLA.prototype.touchEndMenu=function(){menuHammer.on("panend pancancel",onPanEnd)},TouchMenuLA.prototype.clickMaskClose=function(){mask.addEventListener("click",function(){self.close()})},TouchMenuLA.prototype.checkMenuState=function(deltaX,deltaY){velocity>=1?deltaX>=-80||Math.abs(deltaY)>=70?self.open():self.close():newPos>=100?self.open():self.close()},TouchMenuLA.prototype.open=function(){this.animateToPosition(options.width),currentPos=options.width,this.isVisible=!0,options.target.classList.add("open"),self.showMask(),self.invoke(options.onChange)},TouchMenuLA.prototype.close=function(){this.animateToPosition(0),currentPos=0,self.isVisible=!1,options.target.classList.remove("open"),self.hideMask(),self.invoke(options.onChange)},TouchMenuLA.prototype.toggle=function(){self.isVisible?self.close():self.open()},TouchMenuLA.prototype.eventStartMask=function(){maskHammer.on("panstart panmove",function(ev){ev.center.x<=options.width&&self.isVisible&&(countStart++,1==countStart&&(startPoint=ev.deltaX),ev.deltaX<0&&(draggingX=!0,newPos=ev.deltaX-startPoint+options.width,self.changeMenuPos(),velocity=Math.abs(ev.velocity)))})},TouchMenuLA.prototype.eventEndMask=function(){maskHammer.on("panend pancancel",function(ev){self.checkMenuState(ev.deltaX),countStart=0})},TouchMenuLA.prototype.showMask=function(){mask.classList.add("backdrop")},TouchMenuLA.prototype.hideMask=function(){mask.classList.remove("backdrop")},TouchMenuLA.prototype.invoke=function(fn){fn&&fn.apply(self)},TouchMenuLA.prototype.initialize=function(){options=Object.assign(defaults,options||{}),browser.edge&&(options.disableEdgeSwipe=!0),browser.touch?require(["hammer"],initWithHammer):initWithHammer()},new TouchMenuLA}});
\ No newline at end of file
diff --git a/dashboard-ui/components/remotecontrol.js b/dashboard-ui/components/remotecontrol.js
index 8bab8ee2bc..37648df5cc 100644
--- a/dashboard-ui/components/remotecontrol.js
+++ b/dashboard-ui/components/remotecontrol.js
@@ -1,954 +1 @@
-define(['browser', 'datetime', 'backdrop', 'libraryBrowser', 'listView', 'userdataButtons', 'imageLoader', 'playbackManager', 'nowPlayingHelper', 'events', 'connectionManager', 'apphost', 'globalize', 'cardStyle', 'emby-itemscontainer', 'css!css/nowplaying.css'], function (browser, datetime, backdrop, libraryBrowser, listView, userdataButtons, imageLoader, playbackManager, nowPlayingHelper, events, connectionManager, appHost, globalize) {
- 'use strict';
-
- function showSlideshowMenu(context) {
- require(['scripts/slideshow'], function () {
- SlideShow.showMenu();
- });
- }
-
- function showAudioMenu(context, player, button, item) {
-
- var currentIndex = playbackManager.getAudioStreamIndex(player);
-
- var streams = (item.MediaStreams || []).filter(function (i) {
-
- return i.Type == 'Audio';
- });
-
- var menuItems = streams.map(function (s) {
-
- var menuItem = {
- name: s.DisplayTitle,
- id: s.Index
- };
-
- if (s.Index == currentIndex) {
- menuItem.selected = true;
- }
-
- return menuItem;
- });
-
- require(['actionsheet'], function (actionsheet) {
-
- actionsheet.show({
- items: menuItems,
- positionTo: button,
- callback: function (id) {
-
- playbackManager.setAudioStreamIndex(parseInt(id), player);
- }
- });
-
- });
- }
-
- function showSubtitleMenu(context, player, button, item) {
-
- var currentIndex = playbackManager.getSubtitleStreamIndex(player);
-
- var streams = (item.MediaStreams || []).filter(function (i) {
-
- return i.Type == 'Subtitle';
- });
-
- var menuItems = streams.map(function (s) {
-
- var menuItem = {
- name: s.DisplayTitle,
- id: s.Index
- };
-
- if (s.Index == currentIndex) {
- menuItem.selected = true;
- }
-
- return menuItem;
- });
-
- menuItems.unshift({
- id: -1,
- name: globalize.translate('ButtonOff'),
- selected: currentIndex == null
- });
-
- require(['actionsheet'], function (actionsheet) {
-
- actionsheet.show({
- items: menuItems,
- positionTo: button,
- callback: function (id) {
-
- playbackManager.setSubtitleStreamIndex(parseInt(id), player);
- }
- });
-
- });
- }
-
- function showButton(button) {
- button.classList.remove('hide');
- }
-
- function hideButton(button) {
- button.classList.add('hide');
- }
-
- function hasStreams(item, type) {
- return item && item.MediaStreams && item.MediaStreams.filter(function (i) {
- return i.Type == type;
- }).length > 0;
- }
-
- function getNowPlayingNameHtml(nowPlayingItem, includeNonNameInfo) {
-
- var names = nowPlayingHelper.getNowPlayingNames(nowPlayingItem, includeNonNameInfo);
-
- return names.map(function (i) {
-
- return i.text;
-
- }).join(' ');
- }
-
- function seriesImageUrl(item, options) {
-
- if (item.Type !== 'Episode') {
- return null;
- }
-
- options = options || {};
- options.type = options.type || "Primary";
-
- if (options.type === 'Primary') {
-
- if (item.SeriesPrimaryImageTag) {
-
- options.tag = item.SeriesPrimaryImageTag;
-
- return connectionManager.getApiClient(item.ServerId).getScaledImageUrl(item.SeriesId, options);
- }
- }
-
- if (options.type === 'Thumb') {
-
- if (item.SeriesThumbImageTag) {
-
- options.tag = item.SeriesThumbImageTag;
-
- return connectionManager.getApiClient(item.ServerId).getScaledImageUrl(item.SeriesId, options);
- }
- if (item.ParentThumbImageTag) {
-
- options.tag = item.ParentThumbImageTag;
-
- return connectionManager.getApiClient(item.ServerId).getScaledImageUrl(item.ParentThumbItemId, options);
- }
- }
-
- return null;
- }
-
- function imageUrl(item, options) {
-
- options = options || {};
- options.type = options.type || "Primary";
-
- if (item.ImageTags && item.ImageTags[options.type]) {
-
- options.tag = item.ImageTags[options.type];
- return connectionManager.getApiClient(item.ServerId).getScaledImageUrl(item.PrimaryImageItemId || item.Id, options);
- }
-
- if (item.AlbumId && item.AlbumPrimaryImageTag) {
-
- options.tag = item.AlbumPrimaryImageTag;
- return connectionManager.getApiClient(item.ServerId).getScaledImageUrl(item.AlbumId, options);
- }
-
- return null;
- }
- var currentImgUrl;
- function updateNowPlayingInfo(context, state) {
-
- var item = state.NowPlayingItem;
- var displayName = item ? getNowPlayingNameHtml(item).replace(' ', ' - ') : '';
-
- context.querySelector('.nowPlayingPageTitle').innerHTML = displayName;
-
- if (displayName.length > 0) {
- context.querySelector('.nowPlayingPageTitle').classList.remove('hide');
- } else {
- context.querySelector('.nowPlayingPageTitle').classList.add('hide');
- }
-
- var url = item ? seriesImageUrl(item, {
-
- maxHeight: 300
-
- }) || imageUrl(item, {
- maxHeight: 300
-
- }) : null;
-
- if (url === currentImgUrl) {
- return;
- }
-
- setImageUrl(context, url);
-
- if (item) {
-
- backdrop.setBackdrops([item]);
-
- ApiClient.getItem(Dashboard.getCurrentUserId(), item.Id).then(function (fullItem) {
- userdataButtons.fill({
- item: fullItem,
- includePlayed: false,
- style: 'icon',
- element: context.querySelector('.nowPlayingPageUserDataButtons'),
- });
- });
- } else {
-
- backdrop.clear();
-
- userdataButtons.destroy({
- element: context.querySelector('.nowPlayingPageUserDataButtons')
- });
- }
- }
-
- function setImageUrl(context, url) {
- currentImgUrl = url;
-
- var imgContainer = context.querySelector('.nowPlayingPageImageContainer');
-
- if (url) {
- imgContainer.innerHTML = ' ';
- imgContainer.classList.remove('hide');
- } else {
- imgContainer.classList.add('hide');
- imgContainer.innerHTML = '';
- }
- }
-
- function buttonEnabled(btn, enabled) {
- btn.disabled = !enabled;
- }
-
- function buttonVisible(btn, enabled) {
- if (enabled) {
- btn.classList.remove('hide');
- } else {
- btn.classList.add('hide');
- }
- }
-
- function updateSupportedCommands(context, commands) {
-
- var all = context.querySelectorAll('.btnCommand');
-
- for (var i = 0, length = all.length; i < length; i++) {
- buttonEnabled(all[i], commands.indexOf(all[i].getAttribute('data-command')) != -1);
- }
- }
-
- return function () {
-
- var dlg;
- var currentPlayer;
- var currentPlayerSupportedCommands = [];
- var lastPlayerState;
- var lastUpdateTime = 0;
- var currentRuntimeTicks = 0;
-
- var self = this;
-
- function toggleRepeat(player) {
-
- if (player) {
- switch (playbackManager.getRepeatMode(player)) {
- case 'RepeatNone':
- playbackManager.setRepeatMode('RepeatAll', player);
- break;
- case 'RepeatAll':
- playbackManager.setRepeatMode('RepeatOne', player);
- break;
- case 'RepeatOne':
- playbackManager.setRepeatMode('RepeatNone', player);
- break;
- }
- }
- }
-
- function updatePlayerState(context, state) {
-
- lastPlayerState = state;
-
- var item = state.NowPlayingItem;
-
- var playerInfo = playbackManager.getPlayerInfo();
-
- var supportedCommands = playerInfo.supportedCommands;
- var playState = state.PlayState || {};
-
- buttonVisible(context.querySelector('.btnToggleFullscreen'), item && item.MediaType == 'Video' && supportedCommands.indexOf('ToggleFullscreen') != -1);
- buttonVisible(context.querySelector('.btnAudioTracks'), hasStreams(item, 'Audio') && supportedCommands.indexOf('SetAudioStreamIndex') != -1);
- buttonVisible(context.querySelector('.btnSubtitles'), hasStreams(item, 'Subtitle') && supportedCommands.indexOf('SetSubtitleStreamIndex') != -1);
-
- if (supportedCommands.indexOf('DisplayMessage') != -1) {
- context.querySelector('.sendMessageSection').classList.remove('hide');
- } else {
- context.querySelector('.sendMessageSection').classList.add('hide');
- }
- if (supportedCommands.indexOf('SendString') != -1) {
- context.querySelector('.sendTextSection').classList.remove('hide');
- } else {
- context.querySelector('.sendTextSection').classList.add('hide');
- }
-
- buttonVisible(context.querySelector('.btnStop'), item != null);
- buttonVisible(context.querySelector('.btnNextTrack'), item != null);
- buttonVisible(context.querySelector('.btnPreviousTrack'), item != null);
-
- var positionSlider = context.querySelector('.nowPlayingPositionSlider');
- if (positionSlider && !positionSlider.dragging) {
- positionSlider.disabled = !playState.CanSeek;
- }
-
- updatePlayPauseState(playState.IsPaused, item != null);
-
- var runtimeTicks = item ? item.RunTimeTicks : null;
- updateTimeDisplay(playState.PositionTicks, runtimeTicks);
- updatePlayerVolumeState(context, playState.IsMuted, playState.VolumeLevel);
-
- if (item && item.MediaType == 'Video') {
- context.classList.remove('hideVideoButtons');
- } else {
- context.classList.add('hideVideoButtons');
- }
-
- updateRepeatModeDisplay(playState.RepeatMode);
- updateNowPlayingInfo(context, state);
- }
-
- function updateRepeatModeDisplay(repeatMode) {
-
- var context = dlg;
- var toggleRepeatButton = context.querySelector('.repeatToggleButton');
-
- if (repeatMode == 'RepeatAll') {
- toggleRepeatButton.innerHTML = "repeat ";
- toggleRepeatButton.classList.add('nowPlayingPageRepeatActive');
- }
- else if (repeatMode == 'RepeatOne') {
- toggleRepeatButton.innerHTML = "repeat_one ";
- toggleRepeatButton.classList.add('nowPlayingPageRepeatActive');
- } else {
- toggleRepeatButton.innerHTML = "repeat ";
- toggleRepeatButton.classList.remove('nowPlayingPageRepeatActive');
- }
- }
-
- function updatePlayerVolumeState(context, isMuted, volumeLevel) {
-
- var view = context;
- var supportedCommands = currentPlayerSupportedCommands;
-
- var showMuteButton = true;
- var showVolumeSlider = true;
-
- if (supportedCommands.indexOf('Mute') === -1) {
- showMuteButton = false;
- }
-
- if (supportedCommands.indexOf('SetVolume') === -1) {
- showVolumeSlider = false;
- }
-
- if (currentPlayer.isLocalPlayer && appHost.supports('physicalvolumecontrol')) {
- showMuteButton = false;
- showVolumeSlider = false;
- }
-
- if (isMuted) {
- view.querySelector('.buttonMute').setAttribute('title', globalize.translate('Unmute'));
- view.querySelector('.buttonMute i').innerHTML = '';
- } else {
- view.querySelector('.buttonMute').setAttribute('title', globalize.translate('Mute'));
- view.querySelector('.buttonMute i').innerHTML = '';
- }
-
- if (showMuteButton) {
- view.querySelector('.buttonMute').classList.remove('hide');
- } else {
- view.querySelector('.buttonMute').classList.add('hide');
- }
-
- var nowPlayingVolumeSlider = context.querySelector('.nowPlayingVolumeSlider');
- var nowPlayingVolumeSliderContainer = context.querySelector('.nowPlayingVolumeSliderContainer');
-
- // See bindEvents for why this is necessary
- if (nowPlayingVolumeSlider) {
-
- if (showVolumeSlider) {
- nowPlayingVolumeSliderContainer.classList.remove('hide');
- } else {
- nowPlayingVolumeSliderContainer.classList.add('hide');
- }
-
- if (!nowPlayingVolumeSlider.dragging) {
- nowPlayingVolumeSlider.value = volumeLevel || 0;
- }
- }
- }
-
- function updatePlayPauseState(isPaused, isActive) {
-
- var context = dlg;
-
- var btnPlayPause = context.querySelector('.btnPlayPause');
- if (isPaused) {
- btnPlayPause.querySelector('i').innerHTML = 'play_arrow';
- } else {
- btnPlayPause.querySelector('i').innerHTML = 'pause';
- }
-
- buttonVisible(btnPlayPause, isActive);
- }
-
- function updateTimeDisplay(positionTicks, runtimeTicks) {
-
- // See bindEvents for why this is necessary
- var context = dlg;
- var positionSlider = context.querySelector('.nowPlayingPositionSlider');
-
- if (positionSlider && !positionSlider.dragging) {
- if (runtimeTicks) {
-
- var pct = positionTicks / runtimeTicks;
- pct *= 100;
-
- positionSlider.value = pct;
-
- } else {
-
- positionSlider.value = 0;
- }
- }
-
- if (positionTicks == null) {
- context.querySelector('.positionTime').innerHTML = '--:--';
- } else {
- context.querySelector('.positionTime').innerHTML = datetime.getDisplayRunningTime(positionTicks);
- }
-
- if (runtimeTicks != null) {
- context.querySelector('.runtime').innerHTML = datetime.getDisplayRunningTime(runtimeTicks);
- } else {
- context.querySelector('.runtime').innerHTML = '--:--';
- }
- }
-
- function getPlaylistItems(player) {
-
- return playbackManager.getPlaylist(player);
-
- return ApiClient.getItems(Dashboard.getCurrentUserId(), {
-
- SortBy: "SortName",
- SortOrder: "Ascending",
- IncludeItemTypes: "Audio",
- Recursive: true,
- Fields: "PrimaryImageAspectRatio,SortName,MediaSourceCount",
- StartIndex: 0,
- ImageTypeLimit: 1,
- EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
- Limit: 100
-
- }).then(function (result) {
-
- return result.Items;
- });
- }
-
- function loadPlaylist(context, player) {
-
- getPlaylistItems(player).then(function (items) {
-
- var html = '';
-
- html += listView.getListViewHtml({
- items: items,
- smallIcon: true,
- action: 'setplaylistindex',
- enableUserDataButtons: false,
- rightButtons: [
- {
- icon: '',
- title: globalize.translate('ButtonRemove'),
- id: 'remove'
- }],
- dragHandle: true
- });
-
- if (items.length) {
- context.querySelector('.playlistSection').classList.remove('hide');
- } else {
- context.querySelector('.playlistSection').classList.add('hide');
- }
-
- var itemsContainer = context.querySelector('.playlist');
-
- itemsContainer.innerHTML = html;
-
- var playlistItemId = playbackManager.getCurrentPlaylistItemId(player);
-
- if (playlistItemId) {
-
- var img = itemsContainer.querySelector('.listItem[data-playlistItemId="' + playlistItemId + '"] .listItemImage');
- if (img) {
-
- img.classList.remove('lazy');
- img.classList.add('playlistIndexIndicatorImage');
- }
- }
-
- imageLoader.lazyChildren(itemsContainer);
- });
- }
-
- function onPlaybackStart(e, state) {
-
- console.log('remotecontrol event: ' + e.type);
-
- var player = this;
- onStateChanged.call(player, e, state);
- }
-
- function onRepeatModeChange(e) {
-
- var player = this;
-
- updateRepeatModeDisplay(playbackManager.getRepeatMode(player));
- }
-
- function onPlaylistUpdate(e) {
-
- var player = this;
-
- loadPlaylist(dlg, player);
- }
-
- function onPlaylistItemRemoved(e, info) {
-
- var context = dlg;
-
- var playlistItemIds = info.playlistItemIds;
-
- for (var i = 0, length = playlistItemIds.length; i < length; i++) {
-
- var listItem = context.querySelector('.listItem[data-playlistItemId="' + playlistItemIds[i] + '"]');
-
- if (listItem) {
- listItem.parentNode.removeChild(listItem);
- }
- }
- }
-
- function onPlaybackStopped(e, stopInfo) {
-
- console.log('remotecontrol event: ' + e.type);
- var player = this;
-
- if (!stopInfo.nextMediaType) {
- updatePlayerState(dlg, {});
- loadPlaylist(dlg);
- }
- }
-
- function onPlayPauseStateChanged(e) {
-
- var player = this;
- updatePlayPauseState(player.paused(), true);
- }
-
- function onStateChanged(event, state) {
-
- //console.log('nowplaying event: ' + e.type);
- var player = this;
-
- updatePlayerState(dlg, state);
- loadPlaylist(dlg, player);
- }
-
- function onTimeUpdate(e) {
-
- // Try to avoid hammering the document with changes
- var now = new Date().getTime();
- if ((now - lastUpdateTime) < 700) {
-
- return;
- }
- lastUpdateTime = now;
-
- var player = this;
- currentRuntimeTicks = playbackManager.duration(player);
- updateTimeDisplay(playbackManager.currentTime(player), currentRuntimeTicks);
- }
-
- function onVolumeChanged(e) {
-
- var player = this;
-
- updatePlayerVolumeState(dlg, player.isMuted(), player.getVolume());
- }
-
- function releaseCurrentPlayer() {
-
- var player = currentPlayer;
-
- if (player) {
-
- events.off(player, 'playbackstart', onPlaybackStart);
- events.off(player, 'statechange', onStateChanged);
- events.off(player, 'repeatmodechange', onRepeatModeChange);
- events.off(player, 'playlistitemremove', onPlaylistUpdate);
- events.off(player, 'playlistitemmove', onPlaylistUpdate);
- events.off(player, 'playbackstop', onPlaybackStopped);
- events.off(player, 'volumechange', onVolumeChanged);
- events.off(player, 'pause', onPlayPauseStateChanged);
- events.off(player, 'playing', onPlayPauseStateChanged);
- events.off(player, 'timeupdate', onTimeUpdate);
-
- currentPlayer = null;
- }
- }
-
- function bindToPlayer(context, player) {
-
- releaseCurrentPlayer();
-
- currentPlayer = player;
-
- if (!player) {
- return;
- }
-
- playbackManager.getPlayerState(player).then(function (state) {
-
- onStateChanged.call(player, { type: 'init' }, state);
- });
-
- events.on(player, 'playbackstart', onPlaybackStart);
- events.on(player, 'statechange', onStateChanged);
- events.on(player, 'repeatmodechange', onRepeatModeChange);
- events.on(player, 'playlistitemremove', onPlaylistItemRemoved);
- events.on(player, 'playlistitemmove', onPlaylistUpdate);
- events.on(player, 'playbackstop', onPlaybackStopped);
- events.on(player, 'volumechange', onVolumeChanged);
- events.on(player, 'pause', onPlayPauseStateChanged);
- events.on(player, 'playing', onPlayPauseStateChanged);
- events.on(player, 'timeupdate', onTimeUpdate);
-
- var playerInfo = playbackManager.getPlayerInfo();
-
- var supportedCommands = playerInfo.supportedCommands;
- currentPlayerSupportedCommands = supportedCommands;
-
- updateSupportedCommands(context, supportedCommands);
- }
-
- function updateCastIcon(context) {
-
- var info = playbackManager.getPlayerInfo();
- var btnCast = context.querySelector('.btnCast');
-
- if (info && !info.isLocalPlayer) {
-
- btnCast.querySelector('i').innerHTML = 'cast_connected';
- btnCast.classList.add('btnActiveCast');
- } else {
- btnCast.querySelector('i').innerHTML = 'cast';
- btnCast.classList.remove('btnActiveCast');
- }
- }
-
- function onBtnCommandClick() {
- if (currentPlayer) {
-
- if (this.classList.contains('repeatToggleButton')) {
- toggleRepeat(currentPlayer);
- } else {
- playbackManager.sendCommand({
- Name: this.getAttribute('data-command')
-
- }, currentPlayer);
- }
- }
- }
-
- function getSaveablePlaylistItems() {
-
- return getPlaylistItems(currentPlayer).then(function (items) {
-
- return items.filter(function (i) {
- return i.Id && i.ServerId;
- });
- });
- }
-
- function savePlaylist() {
-
- require(['playlistEditor'], function (playlistEditor) {
-
- getSaveablePlaylistItems().then(function (items) {
-
- var serverId = items.length ? items[0].ServerId : ApiClient.serverId();
-
- new playlistEditor().show({
- items: items.map(function(i) {
- return i.Id;
- }),
- serverId: serverId,
- enableAddToPlayQueue: false,
- defaultValue: 'new'
- });
- });
- });
- }
-
- function bindEvents(context) {
-
- var btnCommand = context.querySelectorAll('.btnCommand');
- for (var i = 0, length = btnCommand.length; i < length; i++) {
- btnCommand[i].addEventListener('click', onBtnCommandClick);
- }
-
- context.querySelector('.btnToggleFullscreen').addEventListener('click', function (e) {
-
- if (currentPlayer) {
- playbackManager.sendCommand({
- Name: e.target.getAttribute('data-command')
-
- }, currentPlayer);
- }
- });
-
- context.querySelector('.btnAudioTracks').addEventListener('click', function (e) {
-
- if (currentPlayer && lastPlayerState && lastPlayerState.NowPlayingItem) {
-
- showAudioMenu(context, currentPlayer, e.target, lastPlayerState.NowPlayingItem);
- }
- });
-
- context.querySelector('.btnSubtitles').addEventListener('click', function (e) {
-
- if (currentPlayer && lastPlayerState && lastPlayerState.NowPlayingItem) {
-
- showSubtitleMenu(context, currentPlayer, e.target, lastPlayerState.NowPlayingItem);
- }
- });
-
- context.querySelector('.btnStop').addEventListener('click', function () {
-
- if (currentPlayer) {
- playbackManager.stop(currentPlayer);
- }
- });
-
- context.querySelector('.btnPlayPause').addEventListener('click', function () {
-
- if (currentPlayer) {
- playbackManager.playPause(currentPlayer);
- }
- });
-
- context.querySelector('.btnNextTrack').addEventListener('click', function () {
-
- if (currentPlayer) {
- playbackManager.nextTrack(currentPlayer);
- }
- });
-
- context.querySelector('.btnPreviousTrack').addEventListener('click', function () {
-
- if (currentPlayer) {
- playbackManager.previousTrack(currentPlayer);
- }
- });
-
- context.querySelector('.nowPlayingPositionSlider').addEventListener('change', function () {
-
- var value = this.value;
-
- if (currentPlayer) {
-
- var newPercent = parseFloat(value);
- playbackManager.seekPercent(newPercent, currentPlayer);
- }
- });
-
- context.querySelector('.nowPlayingPositionSlider').getBubbleText = function (value) {
-
- var state = lastPlayerState;
-
- if (!state || !state.NowPlayingItem || !currentRuntimeTicks) {
- return '--:--';
- }
-
- var ticks = currentRuntimeTicks;
- ticks /= 100;
- ticks *= value;
-
- return datetime.getDisplayRunningTime(ticks);
- };
-
- context.querySelector('.nowPlayingVolumeSlider').addEventListener('change', function () {
-
- playbackManager.setVolume(this.value, currentPlayer);
- });
-
- context.querySelector('.buttonMute').addEventListener('click', function () {
-
- playbackManager.toggleMute(currentPlayer);
- });
-
- var playlistContainer = context.querySelector('.playlist');
-
- playlistContainer.addEventListener('action-remove', function (e) {
-
- playbackManager.removeFromPlaylist([e.detail.playlistItemId], currentPlayer);
- });
- playlistContainer.addEventListener('itemdrop', function (e) {
-
- var newIndex = e.detail.newIndex;
- var playlistItemId = e.detail.playlistItemId;
-
- playbackManager.movePlaylistItem(playlistItemId, newIndex, currentPlayer);
- });
-
- context.querySelector('.btnSavePlaylist').addEventListener('click', savePlaylist);
- }
-
- function onPlayerChange() {
-
- var context = dlg;
- updateCastIcon(context);
- bindToPlayer(context, playbackManager.getCurrentPlayer());
- }
-
- function onMessageSubmit(e) {
-
- var form = e.target;
-
- playbackManager.sendCommand({
- Name: 'DisplayMessage',
- Arguments: {
-
- Header: form.querySelector('#txtMessageTitle').value,
- Text: form.querySelector('#txtMessageText', form).value
- }
-
- }, currentPlayer);
-
- form.querySelector('input').value = '';
- require(['toast'], function (toast) {
- toast('Message sent.');
- });
-
- e.preventDefault();
- e.stopPropagation();
- return false;
- }
-
- function onSendStringSubmit(e) {
-
- var form = e.target;
-
- playbackManager.sendCommand({
- Name: 'SendString',
- Arguments: {
-
- String: form.querySelector('#txtTypeText', form).value
- }
-
- }, currentPlayer);
-
- form.querySelector('input').value = '';
- require(['toast'], function (toast) {
- toast('Text sent.');
- });
-
- e.preventDefault();
- e.stopPropagation();
- return false;
- }
-
- function init(ownerView, context) {
-
- bindEvents(context);
-
- context.querySelector('.sendMessageForm').addEventListener('submit', onMessageSubmit);
- context.querySelector('.typeTextForm').addEventListener('submit', onSendStringSubmit);
-
- context.querySelector('.btnCast').addEventListener('click', function () {
- var btn = this;
- require(['playerSelectionMenu'], function (playerSelectionMenu) {
- playerSelectionMenu.show(btn);
- });
- });
-
- context.querySelector('.btnExitRemoteControl').addEventListener('click', function () {
- history.back();
- });
-
- //context.querySelector('.btnSlideshow').addEventListener('click', function () {
- // showSlideshowMenu(context);
- //});
-
- events.on(playbackManager, 'playerchange', onPlayerChange);
-
- if (appHost.supports('remotecontrol')) {
- context.querySelector('.btnCast').classList.remove('hide');
- }
- }
-
- function onDialogClosed(e) {
-
- releaseCurrentPlayer();
-
- events.off(playbackManager, 'playerchange', onPlayerChange);
-
- lastPlayerState = null;
- }
-
- function onShow(context, tab) {
-
- currentImgUrl = null;
-
- bindToPlayer(context, playbackManager.getCurrentPlayer());
-
- updateCastIcon(context);
- }
-
- self.init = function (ownerView, context) {
-
- dlg = context;
-
- init(ownerView, dlg);
- };
-
- self.onShow = function () {
- onShow(dlg, window.location.hash);
- };
-
- self.destroy = function () {
- onDialogClosed();
- };
-
- };
-});
\ No newline at end of file
+define(["browser","datetime","backdrop","libraryBrowser","listView","userdataButtons","imageLoader","playbackManager","nowPlayingHelper","events","connectionManager","apphost","globalize","cardStyle","emby-itemscontainer","css!css/nowplaying.css"],function(browser,datetime,backdrop,libraryBrowser,listView,userdataButtons,imageLoader,playbackManager,nowPlayingHelper,events,connectionManager,appHost,globalize){"use strict";function showAudioMenu(context,player,button,item){var currentIndex=playbackManager.getAudioStreamIndex(player),streams=(item.MediaStreams||[]).filter(function(i){return"Audio"==i.Type}),menuItems=streams.map(function(s){var menuItem={name:s.DisplayTitle,id:s.Index};return s.Index==currentIndex&&(menuItem.selected=!0),menuItem});require(["actionsheet"],function(actionsheet){actionsheet.show({items:menuItems,positionTo:button,callback:function(id){playbackManager.setAudioStreamIndex(parseInt(id),player)}})})}function showSubtitleMenu(context,player,button,item){var currentIndex=playbackManager.getSubtitleStreamIndex(player),streams=(item.MediaStreams||[]).filter(function(i){return"Subtitle"==i.Type}),menuItems=streams.map(function(s){var menuItem={name:s.DisplayTitle,id:s.Index};return s.Index==currentIndex&&(menuItem.selected=!0),menuItem});menuItems.unshift({id:-1,name:globalize.translate("ButtonOff"),selected:null==currentIndex}),require(["actionsheet"],function(actionsheet){actionsheet.show({items:menuItems,positionTo:button,callback:function(id){playbackManager.setSubtitleStreamIndex(parseInt(id),player)}})})}function hasStreams(item,type){return item&&item.MediaStreams&&item.MediaStreams.filter(function(i){return i.Type==type}).length>0}function getNowPlayingNameHtml(nowPlayingItem,includeNonNameInfo){var names=nowPlayingHelper.getNowPlayingNames(nowPlayingItem,includeNonNameInfo);return names.map(function(i){return i.text}).join(" ")}function seriesImageUrl(item,options){if("Episode"!==item.Type)return null;if(options=options||{},options.type=options.type||"Primary","Primary"===options.type&&item.SeriesPrimaryImageTag)return options.tag=item.SeriesPrimaryImageTag,connectionManager.getApiClient(item.ServerId).getScaledImageUrl(item.SeriesId,options);if("Thumb"===options.type){if(item.SeriesThumbImageTag)return options.tag=item.SeriesThumbImageTag,connectionManager.getApiClient(item.ServerId).getScaledImageUrl(item.SeriesId,options);if(item.ParentThumbImageTag)return options.tag=item.ParentThumbImageTag,connectionManager.getApiClient(item.ServerId).getScaledImageUrl(item.ParentThumbItemId,options)}return null}function imageUrl(item,options){return options=options||{},options.type=options.type||"Primary",item.ImageTags&&item.ImageTags[options.type]?(options.tag=item.ImageTags[options.type],connectionManager.getApiClient(item.ServerId).getScaledImageUrl(item.PrimaryImageItemId||item.Id,options)):item.AlbumId&&item.AlbumPrimaryImageTag?(options.tag=item.AlbumPrimaryImageTag,connectionManager.getApiClient(item.ServerId).getScaledImageUrl(item.AlbumId,options)):null}function updateNowPlayingInfo(context,state){var item=state.NowPlayingItem,displayName=item?getNowPlayingNameHtml(item).replace(" "," - "):"";context.querySelector(".nowPlayingPageTitle").innerHTML=displayName,displayName.length>0?context.querySelector(".nowPlayingPageTitle").classList.remove("hide"):context.querySelector(".nowPlayingPageTitle").classList.add("hide");var url=item?seriesImageUrl(item,{maxHeight:300})||imageUrl(item,{maxHeight:300}):null;url!==currentImgUrl&&(setImageUrl(context,url),item?(backdrop.setBackdrops([item]),ApiClient.getItem(Dashboard.getCurrentUserId(),item.Id).then(function(fullItem){userdataButtons.fill({item:fullItem,includePlayed:!1,style:"icon",element:context.querySelector(".nowPlayingPageUserDataButtons")})})):(backdrop.clear(),userdataButtons.destroy({element:context.querySelector(".nowPlayingPageUserDataButtons")})))}function setImageUrl(context,url){currentImgUrl=url;var imgContainer=context.querySelector(".nowPlayingPageImageContainer");url?(imgContainer.innerHTML=' ',imgContainer.classList.remove("hide")):(imgContainer.classList.add("hide"),imgContainer.innerHTML="")}function buttonEnabled(btn,enabled){btn.disabled=!enabled}function buttonVisible(btn,enabled){enabled?btn.classList.remove("hide"):btn.classList.add("hide")}function updateSupportedCommands(context,commands){for(var all=context.querySelectorAll(".btnCommand"),i=0,length=all.length;irepeat",toggleRepeatButton.classList.add("nowPlayingPageRepeatActive")):"RepeatOne"==repeatMode?(toggleRepeatButton.innerHTML="repeat_one ",toggleRepeatButton.classList.add("nowPlayingPageRepeatActive")):(toggleRepeatButton.innerHTML="repeat ",toggleRepeatButton.classList.remove("nowPlayingPageRepeatActive"))}function updatePlayerVolumeState(context,isMuted,volumeLevel){var view=context,supportedCommands=currentPlayerSupportedCommands,showMuteButton=!0,showVolumeSlider=!0;supportedCommands.indexOf("Mute")===-1&&(showMuteButton=!1),supportedCommands.indexOf("SetVolume")===-1&&(showVolumeSlider=!1),currentPlayer.isLocalPlayer&&appHost.supports("physicalvolumecontrol")&&(showMuteButton=!1,showVolumeSlider=!1),isMuted?(view.querySelector(".buttonMute").setAttribute("title",globalize.translate("Unmute")),view.querySelector(".buttonMute i").innerHTML=""):(view.querySelector(".buttonMute").setAttribute("title",globalize.translate("Mute")),view.querySelector(".buttonMute i").innerHTML=""),showMuteButton?view.querySelector(".buttonMute").classList.remove("hide"):view.querySelector(".buttonMute").classList.add("hide");var nowPlayingVolumeSlider=context.querySelector(".nowPlayingVolumeSlider"),nowPlayingVolumeSliderContainer=context.querySelector(".nowPlayingVolumeSliderContainer");nowPlayingVolumeSlider&&(showVolumeSlider?nowPlayingVolumeSliderContainer.classList.remove("hide"):nowPlayingVolumeSliderContainer.classList.add("hide"),nowPlayingVolumeSlider.dragging||(nowPlayingVolumeSlider.value=volumeLevel||0))}function updatePlayPauseState(isPaused,isActive){var context=dlg,btnPlayPause=context.querySelector(".btnPlayPause");isPaused?btnPlayPause.querySelector("i").innerHTML="play_arrow":btnPlayPause.querySelector("i").innerHTML="pause",buttonVisible(btnPlayPause,isActive)}function updateTimeDisplay(positionTicks,runtimeTicks){var context=dlg,positionSlider=context.querySelector(".nowPlayingPositionSlider");if(positionSlider&&!positionSlider.dragging)if(runtimeTicks){var pct=positionTicks/runtimeTicks;pct*=100,positionSlider.value=pct}else positionSlider.value=0;null==positionTicks?context.querySelector(".positionTime").innerHTML="--:--":context.querySelector(".positionTime").innerHTML=datetime.getDisplayRunningTime(positionTicks),null!=runtimeTicks?context.querySelector(".runtime").innerHTML=datetime.getDisplayRunningTime(runtimeTicks):context.querySelector(".runtime").innerHTML="--:--"}function getPlaylistItems(player){return playbackManager.getPlaylist(player)}function loadPlaylist(context,player){getPlaylistItems(player).then(function(items){var html="";html+=listView.getListViewHtml({items:items,smallIcon:!0,action:"setplaylistindex",enableUserDataButtons:!1,rightButtons:[{icon:"",title:globalize.translate("ButtonRemove"),id:"remove"}],dragHandle:!0}),items.length?context.querySelector(".playlistSection").classList.remove("hide"):context.querySelector(".playlistSection").classList.add("hide");var itemsContainer=context.querySelector(".playlist");itemsContainer.innerHTML=html;var playlistItemId=playbackManager.getCurrentPlaylistItemId(player);if(playlistItemId){var img=itemsContainer.querySelector('.listItem[data-playlistItemId="'+playlistItemId+'"] .listItemImage');img&&(img.classList.remove("lazy"),img.classList.add("playlistIndexIndicatorImage"))}imageLoader.lazyChildren(itemsContainer)})}function onPlaybackStart(e,state){console.log("remotecontrol event: "+e.type);var player=this;onStateChanged.call(player,e,state)}function onRepeatModeChange(e){var player=this;updateRepeatModeDisplay(playbackManager.getRepeatMode(player))}function onPlaylistUpdate(e){var player=this;loadPlaylist(dlg,player)}function onPlaylistItemRemoved(e,info){for(var context=dlg,playlistItemIds=info.playlistItemIds,i=0,length=playlistItemIds.length;i b.name) {
- return 1;
- }
- if (a.name < b.name) {
- return -1;
- }
- // a must be equal to b
- return 0;
- });
-
- $('#selectCountry', page).html(countryList.map(function (c) {
-
- return '' + c.name + ' ';
-
- }).join('')).val(info.Country || '');
-
- $(page.querySelector('.txtZipCode')).trigger('change');
-
- }, function () {
-
- Dashboard.alert({
- message: Globalize.translate('ErrorGettingTvLineups')
- });
- });
-
- Dashboard.hideLoadingMsg();
- }
-
- function submitLoginForm() {
-
- Dashboard.showLoadingMsg();
-
- require(["cryptojs-sha1"], function () {
-
- var info = {
- Type: 'SchedulesDirect',
- Username: page.querySelector('.txtUser').value,
- EnableAllTuners: true,
- Password: CryptoJS.SHA1(page.querySelector('.txtPass').value).toString()
- };
-
- var id = providerId;
-
- if (id) {
- info.Id = id;
- }
-
- ApiClient.ajax({
- type: "POST",
- url: ApiClient.getUrl('LiveTv/ListingProviders', {
- ValidateLogin: true
- }),
- data: JSON.stringify(info),
- contentType: "application/json",
- dataType: 'json'
-
- }).then(function (result) {
-
- Dashboard.processServerConfigurationUpdateResult();
- providerId = result.Id;
- reload();
-
- }, function () {
- Dashboard.alert({
- message: Globalize.translate('ErrorSavingTvProvider')
- });
- });
- });
- }
-
- function submitListingsForm() {
-
- var selectedListingsId = $('#selectListing', page).val();
-
- if (!selectedListingsId) {
- Dashboard.alert({
- message: Globalize.translate('ErrorPleaseSelectLineup')
- });
- return;
- }
-
- Dashboard.showLoadingMsg();
-
- var id = providerId;
-
- ApiClient.getNamedConfiguration("livetv").then(function (config) {
-
- var info = config.ListingProviders.filter(function (i) {
- return i.Id == id;
- })[0];
-
- info.ZipCode = page.querySelector('.txtZipCode').value;
- info.Country = $('#selectCountry', page).val();
- info.ListingsId = selectedListingsId;
- info.EnableAllTuners = page.querySelector('.chkAllTuners').checked;
- info.EnabledTuners = info.EnableAllTuners ? [] : $('.chkTuner', page).get().filter(function (i) {
- return i.checked;
- }).map(function (i) {
- return i.getAttribute('data-id');
- });
-
- ApiClient.ajax({
- type: "POST",
- url: ApiClient.getUrl('LiveTv/ListingProviders', {
- ValidateListings: true
- }),
- data: JSON.stringify(info),
- contentType: "application/json"
-
- }).then(function (result) {
-
- Dashboard.hideLoadingMsg();
- if (options.showConfirmation !== false) {
- Dashboard.processServerConfigurationUpdateResult();
- }
- Events.trigger(self, 'submitted');
-
- }, function () {
- Dashboard.hideLoadingMsg();
- Dashboard.alert({
- message: Globalize.translate('ErrorAddingListingsToSchedulesDirect')
- });
- });
-
- });
- }
-
- function refreshListings(value) {
-
- if (!value) {
- $('#selectListing', page).html('');
- return;
- }
-
- Dashboard.showLoadingMsg();
-
- ApiClient.ajax({
- type: "GET",
- url: ApiClient.getUrl('LiveTv/ListingProviders/Lineups', {
- Id: providerId,
- Location: value,
- Country: $('#selectCountry', page).val()
- }),
- dataType: 'json'
-
- }).then(function (result) {
-
- $('#selectListing', page).html(result.map(function (o) {
-
- return '' + o.Name + ' ';
-
- }));
-
- if (listingsId) {
- $('#selectListing', page).val(listingsId);
- }
-
- Dashboard.hideLoadingMsg();
-
- }, function (result) {
-
- Dashboard.alert({
- message: Globalize.translate('ErrorGettingTvLineups')
- });
- refreshListings('');
- Dashboard.hideLoadingMsg();
- });
- }
-
- function getTunerName(providerId) {
-
- providerId = providerId.toLowerCase();
-
- switch (providerId) {
-
- case 'm3u':
- return 'M3U Playlist';
- case 'hdhomerun':
- return 'HDHomerun';
- case 'satip':
- return 'DVB';
- default:
- return 'Unknown';
- }
- }
-
- function refreshTunerDevices(page, providerInfo, devices) {
-
- var html = '';
-
- for (var i = 0, length = devices.length; i < length; i++) {
-
- var device = devices[i];
-
- html += '';
-
- var enabledTuners = providerInfo.EnabledTuners || [];
- var isChecked = providerInfo.EnableAllTuners || enabledTuners.indexOf(device.Id) != -1;
- var checkedAttribute = isChecked ? ' checked' : '';
- html += '
';
-
- html += '
';
- html += '
';
- html += device.FriendlyName || getTunerName(device.Type);
- html += '
';
-
- html += '
';
- html += device.Url;
- html += '
';
- html += '
';
-
- html += '
';
- }
-
- page.querySelector('.tunerList').innerHTML = html;
- }
-
- self.submit = function () {
- page.querySelector('.btnSubmitListingsContainer').click();
- };
-
- self.init = function () {
-
- options = options || {};
-
- if (options.showCancelButton !== false) {
- page.querySelector('.btnCancel').classList.remove('hide');
- } else {
- page.querySelector('.btnCancel').classList.add('hide');
- }
-
- if (options.showSubmitButton !== false) {
- page.querySelector('.btnSubmitListings').classList.remove('hide');
- } else {
- page.querySelector('.btnSubmitListings').classList.add('hide');
- }
-
- $('.formLogin', page).on('submit', function () {
- submitLoginForm();
- return false;
- });
-
- $('.formListings', page).on('submit', function () {
- submitListingsForm();
- return false;
- });
-
- $('.txtZipCode', page).on('change', function () {
- refreshListings(this.value);
- });
-
- page.querySelector('.chkAllTuners').addEventListener('change', function (e) {
- if (e.target.checked) {
- page.querySelector('.selectTunersSection').classList.add('hide');
- } else {
- page.querySelector('.selectTunersSection').classList.remove('hide');
- }
- });
-
- $('.createAccountHelp', page).html(Globalize.translate('MessageCreateAccountAt', 'http://www.schedulesdirect.org '));
-
- reload();
- };
- }
-});
\ No newline at end of file
+define(["jQuery","emby-checkbox","listViewStyle","emby-input","emby-select"],function($){"use strict";return function(page,providerId,options){function reload(){Dashboard.showLoadingMsg(),ApiClient.getNamedConfiguration("livetv").then(function(config){var info=config.ListingProviders.filter(function(i){return i.Id==providerId})[0]||{};listingsId=info.ListingsId,$("#selectListing",page).val(info.ListingsId||""),page.querySelector(".txtUser").value=info.Username||"",page.querySelector(".txtPass").value="",page.querySelector(".txtZipCode").value=info.ZipCode||"",info.Username&&info.Password?page.querySelector(".listingsSection").classList.remove("hide"):page.querySelector(".listingsSection").classList.add("hide"),page.querySelector(".chkAllTuners").checked=info.EnableAllTuners,page.querySelector(".chkAllTuners").checked?page.querySelector(".selectTunersSection").classList.add("hide"):page.querySelector(".selectTunersSection").classList.remove("hide"),setCountry(info),refreshTunerDevices(page,info,config.TunerHosts)})}function setCountry(info){ApiClient.getJSON(ApiClient.getUrl("LiveTv/ListingProviders/SchedulesDirect/Countries")).then(function(result){var i,length,countryList=[];for(var region in result){var countries=result[region];if(countries.length&&"ZZZ"!==region)for(i=0,length=countries.length;ib.name?1:a.name'+c.name+""}).join("")).val(info.Country||""),$(page.querySelector(".txtZipCode")).trigger("change")},function(){Dashboard.alert({message:Globalize.translate("ErrorGettingTvLineups")})}),Dashboard.hideLoadingMsg()}function submitLoginForm(){Dashboard.showLoadingMsg(),require(["cryptojs-sha1"],function(){var info={Type:"SchedulesDirect",Username:page.querySelector(".txtUser").value,EnableAllTuners:!0,Password:CryptoJS.SHA1(page.querySelector(".txtPass").value).toString()},id=providerId;id&&(info.Id=id),ApiClient.ajax({type:"POST",url:ApiClient.getUrl("LiveTv/ListingProviders",{ValidateLogin:!0}),data:JSON.stringify(info),contentType:"application/json",dataType:"json"}).then(function(result){Dashboard.processServerConfigurationUpdateResult(),providerId=result.Id,reload()},function(){Dashboard.alert({message:Globalize.translate("ErrorSavingTvProvider")})})})}function submitListingsForm(){var selectedListingsId=$("#selectListing",page).val();if(!selectedListingsId)return void Dashboard.alert({message:Globalize.translate("ErrorPleaseSelectLineup")});Dashboard.showLoadingMsg();var id=providerId;ApiClient.getNamedConfiguration("livetv").then(function(config){var info=config.ListingProviders.filter(function(i){return i.Id==id})[0];info.ZipCode=page.querySelector(".txtZipCode").value,info.Country=$("#selectCountry",page).val(),info.ListingsId=selectedListingsId,info.EnableAllTuners=page.querySelector(".chkAllTuners").checked,info.EnabledTuners=info.EnableAllTuners?[]:$(".chkTuner",page).get().filter(function(i){return i.checked}).map(function(i){return i.getAttribute("data-id")}),ApiClient.ajax({type:"POST",url:ApiClient.getUrl("LiveTv/ListingProviders",{ValidateListings:!0}),data:JSON.stringify(info),contentType:"application/json"}).then(function(result){Dashboard.hideLoadingMsg(),options.showConfirmation!==!1&&Dashboard.processServerConfigurationUpdateResult(),Events.trigger(self,"submitted")},function(){Dashboard.hideLoadingMsg(),Dashboard.alert({message:Globalize.translate("ErrorAddingListingsToSchedulesDirect")})})})}function refreshListings(value){return value?(Dashboard.showLoadingMsg(),void ApiClient.ajax({type:"GET",url:ApiClient.getUrl("LiveTv/ListingProviders/Lineups",{Id:providerId,Location:value,Country:$("#selectCountry",page).val()}),dataType:"json"}).then(function(result){$("#selectListing",page).html(result.map(function(o){return''+o.Name+" "})),listingsId&&$("#selectListing",page).val(listingsId),Dashboard.hideLoadingMsg()},function(result){Dashboard.alert({message:Globalize.translate("ErrorGettingTvLineups")}),refreshListings(""),Dashboard.hideLoadingMsg()})):void $("#selectListing",page).html("")}function getTunerName(providerId){switch(providerId=providerId.toLowerCase()){case"m3u":return"M3U Playlist";case"hdhomerun":return"HDHomerun";case"satip":return"DVB";default:return"Unknown"}}function refreshTunerDevices(page,providerInfo,devices){for(var html="",i=0,length=devices.length;i';var enabledTuners=providerInfo.EnabledTuners||[],isChecked=providerInfo.EnableAllTuners||enabledTuners.indexOf(device.Id)!=-1,checkedAttribute=isChecked?" checked":"";html+=' ",html+='',html+='
',html+=device.FriendlyName||getTunerName(device.Type),html+="
",html+='
',html+=device.Url,html+="
",html+="
",html+=" "}page.querySelector(".tunerList").innerHTML=html}var listingsId,self=this;self.submit=function(){page.querySelector(".btnSubmitListingsContainer").click()},self.init=function(){options=options||{},options.showCancelButton!==!1?page.querySelector(".btnCancel").classList.remove("hide"):page.querySelector(".btnCancel").classList.add("hide"),options.showSubmitButton!==!1?page.querySelector(".btnSubmitListings").classList.remove("hide"):page.querySelector(".btnSubmitListings").classList.add("hide"),$(".formLogin",page).on("submit",function(){return submitLoginForm(),!1}),$(".formListings",page).on("submit",function(){return submitListingsForm(),!1}),$(".txtZipCode",page).on("change",function(){refreshListings(this.value)}),page.querySelector(".chkAllTuners").addEventListener("change",function(e){e.target.checked?page.querySelector(".selectTunersSection").classList.add("hide"):page.querySelector(".selectTunersSection").classList.remove("hide")}),$(".createAccountHelp",page).html(Globalize.translate("MessageCreateAccountAt",'