Profile
+
Settings
Image
Password
Media Library
diff --git a/dashboard-ui/scripts/Itemdetailpage.js b/dashboard-ui/scripts/Itemdetailpage.js
index ead573bd24..2382413d57 100644
--- a/dashboard-ui/scripts/Itemdetailpage.js
+++ b/dashboard-ui/scripts/Itemdetailpage.js
@@ -20,9 +20,20 @@
LibraryBrowser.renderParentName(item, $('.parentName', page));
var context = getContext(item);
- setInitialCollapsibleState(page, item, context);
- renderDetails(page, item, context);
- LibraryBrowser.renderDetailPageBackdrop(page, item);
+
+ Dashboard.getCurrentUser().done(function (user) {
+
+ setInitialCollapsibleState(page, item, context, user);
+ renderDetails(page, item, context);
+ LibraryBrowser.renderDetailPageBackdrop(page, item);
+
+ if (user.Configuration.IsAdministrator) {
+ $('#editButtonContainer', page).show();
+ } else {
+ $('#editButtonContainer', page).hide();
+ }
+
+ });
if (item.LocationType == "Offline") {
@@ -33,7 +44,7 @@
}
var isMissingEpisode = false;
-
+
if (item.LocationType == "Virtual" && item.Type == "Episode") {
try {
if (item.PremiereDate && (new Date().getTime() >= parseISO8601Date(item.PremiereDate, { toLocal: true }).getTime())) {
@@ -43,7 +54,7 @@
}
}
-
+
if (isMissingEpisode) {
$('#missingIndicator', page).show();
@@ -58,16 +69,6 @@
$('#playButtonContainer', page).hide();
}
- Dashboard.getCurrentUser().done(function (user) {
-
- if (user.Configuration.IsAdministrator) {
- $('#editButtonContainer', page).show();
- } else {
- $('#editButtonContainer', page).hide();
- }
-
- });
-
$(".autoNumeric").autoNumeric('init');
setPeopleHeader(page, item);
@@ -150,11 +151,11 @@
}
}
- function setInitialCollapsibleState(page, item, context) {
+ function setInitialCollapsibleState(page, item, context, user) {
if (item.ChildCount) {
$('#childrenCollapsible', page).removeClass('hide');
- renderChildren(page, item);
+ renderChildren(page, item, user);
}
else {
$('#childrenCollapsible', page).addClass('hide');
@@ -235,7 +236,7 @@
$('.itemCommunityRating', page).hide();
}
- if (item.Type != "Episode" && item.Type != "Movie") {
+ if (item.Type != "Episode" && item.Type != "Movie" && item.Type != "Series") {
var premiereDateElem = $('#itemPremiereDate', page).show();
LibraryBrowser.renderPremiereDate(premiereDateElem, item);
} else {
@@ -445,14 +446,14 @@
}).join(',');
}
- if (item.Studios.length) {
- html += ' on
' + item.Studios[0].Name + '';
- }
-
if (item.AirTime) {
html += ' at ' + item.AirTime;
}
+ if (item.Studios.length) {
+ html += ' on
' + item.Studios[0].Name + '';
+ }
+
if (html) {
html = (item.Status == 'Ended' ? 'Aired ' : 'Airs ') + html;
@@ -481,17 +482,21 @@
}
}
- function renderChildren(page, item) {
+ function renderChildren(page, item, user) {
var sortBy = item.Type == "BoxSet" ? "ProductionYear,SortName" : "SortName";
- ApiClient.getItems(Dashboard.getCurrentUserId(), {
-
+ var query = {
ParentId: item.Id,
SortBy: sortBy,
Fields: "PrimaryImageAspectRatio,ItemCounts,DateCreated,AudioInfo"
+ };
- }).done(function (result) {
+ if (item.Type == "Series" || item.Type == "Season" && !user.Configuration.DisplayVirtualEpisodes) {
+ query.ExcludeLocationTypes = "virtual";
+ }
+
+ ApiClient.getItems(Dashboard.getCurrentUserId(), query).done(function (result) {
if (item.Type == "MusicAlbum") {
diff --git a/dashboard-ui/scripts/edituserpage.js b/dashboard-ui/scripts/edituserpage.js
index b181ab6de6..998b8b8b96 100644
--- a/dashboard-ui/scripts/edituserpage.js
+++ b/dashboard-ui/scripts/edituserpage.js
@@ -1,21 +1,5 @@
(function ($, window, document) {
- function populateLanguages(select, allCultures) {
-
- var html = "";
-
- html += "
";
-
- for (var i = 0, length = allCultures.length; i < length; i++) {
-
- var culture = allCultures[i];
-
- html += "
";
- }
-
- select.html(html).selectmenu("refresh");
- }
-
function populateRatings(allParentalRatings, page) {
var html = "";
@@ -32,7 +16,7 @@
if (ratings.length) {
var lastRating = ratings[ratings.length - 1];
-
+
if (lastRating.Value === rating.Value) {
lastRating.Name += "/" + rating.Name;
@@ -54,7 +38,7 @@
$('#selectMaxParentalRating', page).html(html).selectmenu("refresh");
}
- function loadUser(page, user, loggedInUser, parentalRatingsPromise, allCulturesPromise) {
+ function loadUser(page, user, loggedInUser, parentalRatingsPromise) {
if (!loggedInUser.Configuration.IsAdministrator) {
$('#parentalControlDiv', page).hide();
@@ -91,16 +75,6 @@
$('#selectMaxParentalRating', page).val(ratingValue).selectmenu("refresh");
});
- allCulturesPromise.done(function (allCultures) {
-
- populateLanguages($('#selectAudioLanguage', page), allCultures);
- populateLanguages($('#selectSubtitleLanguage', page), allCultures);
-
- $('#selectAudioLanguage', page).val(user.Configuration.AudioLanguagePreference || "").selectmenu("refresh");
- $('#selectSubtitleLanguage', page).val(user.Configuration.SubtitleLanguagePreference || "").selectmenu("refresh");
- });
-
- $('#chkForcedSubtitlesOnly', page).checked(user.Configuration.UseForcedSubtitlesOnly || false).checkboxradio("refresh");
$('#chkIsAdmin', page).checked(user.Configuration.IsAdministrator || false).checkboxradio("refresh");
$('#chkBlockNotRated', page).checked(user.Configuration.BlockNotRated || false).checkboxradio("refresh");
@@ -132,9 +106,6 @@
user.Configuration.IsAdministrator = $('#chkIsAdmin', page).checked();
- user.Configuration.AudioLanguagePreference = $('#selectAudioLanguage', page).val();
- user.Configuration.SubtitleLanguagePreference = $('#selectSubtitleLanguage', page).val();
- user.Configuration.UseForcedSubtitlesOnly = $('#chkForcedSubtitlesOnly', page).checked();
user.Configuration.BlockNotRated = $('#chkBlockNotRated', page).checked();
user.Configuration.IsHidden = $('#chkIsHidden', page).checked();
@@ -231,11 +202,9 @@
var parentalRatingsPromise = ApiClient.getParentalRatings();
- var allCulturesPromise = ApiClient.getCultures();
-
$.when(promise1, promise2).done(function (response1, response2) {
- loadUser(page, response1[0] || response1, response2[0], parentalRatingsPromise, allCulturesPromise);
+ loadUser(page, response1[0] || response1, response2[0], parentalRatingsPromise);
});
diff --git a/dashboard-ui/scripts/librarybrowser.js b/dashboard-ui/scripts/librarybrowser.js
index a2e712e616..8a8f1d2371 100644
--- a/dashboard-ui/scripts/librarybrowser.js
+++ b/dashboard-ui/scripts/librarybrowser.js
@@ -2027,8 +2027,7 @@
if (item.Genres && item.Genres.length) {
- var prefix = item.Genres.length > 1 ? "Genres" : "Genre";
- var html = prefix + ': ';
+ var html = '';
for (var i = 0, length = item.Genres.length; i < length; i++) {
diff --git a/dashboard-ui/scripts/usersettings.js b/dashboard-ui/scripts/usersettings.js
new file mode 100644
index 0000000000..f3b813cede
--- /dev/null
+++ b/dashboard-ui/scripts/usersettings.js
@@ -0,0 +1,146 @@
+(function ($, window, document) {
+
+ function populateLanguages(select, allCultures) {
+
+ var html = "";
+
+ html += "
";
+
+ for (var i = 0, length = allCultures.length; i < length; i++) {
+
+ var culture = allCultures[i];
+
+ html += "
";
+ }
+
+ select.html(html).selectmenu("refresh");
+ }
+
+ function loadUser(page, user, loggedInUser, allCulturesPromise) {
+
+ Dashboard.setPageTitle(user.Name);
+
+ allCulturesPromise.done(function (allCultures) {
+
+ populateLanguages($('#selectAudioLanguage', page), allCultures);
+ populateLanguages($('#selectSubtitleLanguage', page), allCultures);
+
+ $('#selectAudioLanguage', page).val(user.Configuration.AudioLanguagePreference || "").selectmenu("refresh");
+ $('#selectSubtitleLanguage', page).val(user.Configuration.SubtitleLanguagePreference || "").selectmenu("refresh");
+ });
+
+ $('#chkForcedSubtitlesOnly', page).checked(user.Configuration.UseForcedSubtitlesOnly || false).checkboxradio("refresh");
+ $('#chkDisplayVirtualEpisodes', page).checked(user.Configuration.DisplayVirtualEpisodes || false).checkboxradio("refresh");
+
+ Dashboard.hideLoadingMsg();
+ }
+
+ function onSaveComplete(page) {
+
+ Dashboard.hideLoadingMsg();
+
+ var userId = getParameterByName("userId");
+
+ Dashboard.validateCurrentUser(page);
+
+ if (userId) {
+ Dashboard.alert("Settings saved.");
+ } else {
+ Dashboard.navigate("userprofiles.html");
+ }
+ }
+
+ function saveUser(user, page) {
+
+ user.Configuration.AudioLanguagePreference = $('#selectAudioLanguage', page).val();
+ user.Configuration.SubtitleLanguagePreference = $('#selectSubtitleLanguage', page).val();
+ user.Configuration.UseForcedSubtitlesOnly = $('#chkForcedSubtitlesOnly', page).checked();
+ user.Configuration.DisplayVirtualEpisodes = $('#chkDisplayVirtualEpisodes', page).checked();
+
+ ApiClient.updateUser(user).done(function () {
+ onSaveComplete(page);
+ });
+ }
+
+ function userSettingsPage() {
+
+ var self = this;
+
+ self.onSubmit = function () {
+
+ var page = $(this).parents('.page');
+
+ Dashboard.showLoadingMsg();
+
+ var userId = getParameterByName("userId");
+
+ ApiClient.getUser(userId).done(function (result) {
+ saveUser(result, page);
+ });
+
+ // Disable default form submission
+ return false;
+ };
+ }
+
+ window.UserSettingsPage = new userSettingsPage();
+
+ $(document).on('pagebeforeshow', "#userSettingsPage", function () {
+
+ var page = this;
+
+ var userId = getParameterByName("userId");
+
+ if (userId) {
+ $('#userProfileNavigation', page).show();
+ } else {
+ $('#userProfileNavigation', page).hide();
+ }
+
+ Dashboard.getCurrentUser().done(function (loggedInUser) {
+
+ if (loggedInUser.Configuration.IsAdministrator) {
+ $('.lnkMediaLibrary', page).show().prev().removeClass('ui-last-child');
+ } else {
+ $('.lnkMediaLibrary', page).hide().prev().addClass('ui-last-child');
+ }
+ });
+
+ }).on('pageshow', "#userSettingsPage", function () {
+
+ var page = this;
+
+ Dashboard.showLoadingMsg();
+
+ var userId = getParameterByName("userId");
+
+ var promise1;
+
+ if (!userId) {
+
+ var deferred = $.Deferred();
+
+ deferred.resolveWith(null, [{
+ Configuration: {}
+ }]);
+
+ promise1 = deferred.promise();
+ } else {
+
+ promise1 = ApiClient.getUser(userId);
+ }
+
+ var promise2 = Dashboard.getCurrentUser();
+
+ var allCulturesPromise = ApiClient.getCultures();
+
+ $.when(promise1, promise2).done(function (response1, response2) {
+
+ loadUser(page, response1[0] || response1, response2[0], allCulturesPromise);
+
+ });
+
+ $("#userSettingsForm input:first").focus();
+ });
+
+})(jQuery, window, document);
\ No newline at end of file
diff --git a/dashboard-ui/updatepassword.html b/dashboard-ui/updatepassword.html
index bdfa61e6c4..9470ab0ea6 100644
--- a/dashboard-ui/updatepassword.html
+++ b/dashboard-ui/updatepassword.html
@@ -10,9 +10,10 @@