diff --git a/dashboard-ui/scripts/edititemmetadata.js b/dashboard-ui/scripts/edititemmetadata.js
index 69a91aab84..d99c2f9284 100644
--- a/dashboard-ui/scripts/edititemmetadata.js
+++ b/dashboard-ui/scripts/edititemmetadata.js
@@ -1,52 +1,38 @@
-define(['historyManager', 'jQuery'], function (historyManager, $) {
+define(['loading'], function (loading) {
'use strict';
- var currentItemId;
+ function reload(context, itemId) {
- function reload(page) {
-
- page = $(page)[0];
-
- Dashboard.showLoadingMsg();
-
- var itemId = MetadataEditor.getCurrentItemId();
- currentItemId = itemId;
+ loading.show();
if (itemId) {
require(['metadataEditor'], function (metadataEditor) {
- metadataEditor.embed(page.querySelector('.editPageInnerContent'), itemId, ApiClient.serverInfo().Id);
+ metadataEditor.embed(context.querySelector('.editPageInnerContent'), itemId, ApiClient.serverInfo().Id);
});
} else {
- page.querySelector('.editPageInnerContent').innerHTML = '';
- Dashboard.hideLoadingMsg();
+ context.querySelector('.editPageInnerContent').innerHTML = '';
+ loading.hide();
}
}
- $(document).on('pageinit', "#editItemMetadataPage", function () {
+ return function (view, params) {
- var page = this;
+ view.addEventListener('viewshow', function () {
+ reload(this, MetadataEditor.getCurrentItemId());
+ });
MetadataEditor.setCurrentItemId(null);
- $('.libraryTree', page).on('itemclicked', function (event, data) {
+ view.querySelector('.libraryTree').addEventListener('itemclicked', function (event) {
- if (data.id != currentItemId) {
+ var data = event.detail;
+
+ if (data.id != MetadataEditor.getCurrentItemId()) {
MetadataEditor.setCurrentItemId(data.id);
- reload(page);
+ reload(view, data.id);
}
});
-
- }).on('pageshow', "#editItemMetadataPage", function () {
-
- var page = this;
-
- reload(page);
-
- }).on('pagebeforehide', "#editItemMetadataPage", function () {
-
- var page = this;
- });
-
+ };
});
diff --git a/dashboard-ui/scripts/editorsidebar.js b/dashboard-ui/scripts/editorsidebar.js
index 85f1e640a9..fd47d3970e 100644
--- a/dashboard-ui/scripts/editorsidebar.js
+++ b/dashboard-ui/scripts/editorsidebar.js
@@ -14,7 +14,10 @@
selected: selected
},
- li_attr: {}
+ li_attr: {
+ serveritemtype: item.Type,
+ collectiontype: item.CollectionType
+ }
};
if (item.IsFolder) {
@@ -272,11 +275,18 @@
var eventData = {
id: node.id,
- itemType: node.li_attr.itemtype
+ itemType: node.li_attr.itemtype,
+ serverItemType: node.li_attr.serveritemtype,
+ collectionType: node.li_attr.collectiontype
};
- if (eventData.itemType != 'livetv' && eventData.itemType != 'mediafolders') {
- $(this).trigger('itemclicked', [eventData]);
+ if (eventData.itemType != 'livetv' && eventData.itemType != 'mediafolders' && eventData.serverItemType != 'UserView' && eventData.serverItemType != 'CollectionFolder' && !eventData.collectionType) {
+
+ this.dispatchEvent(new CustomEvent('itemclicked', {
+ detail: eventData,
+ bubbles: true,
+ cancelable: false
+ }));
}
}
diff --git a/dashboard-ui/scripts/medialibrarypage.js b/dashboard-ui/scripts/medialibrarypage.js
index d0856c6d5e..ba025fe83c 100644
--- a/dashboard-ui/scripts/medialibrarypage.js
+++ b/dashboard-ui/scripts/medialibrarypage.js
@@ -443,6 +443,14 @@
href: 'librarydisplay.html',
name: Globalize.translate('TabDisplay')
},
+ {
+ href: 'metadataimages.html',
+ name: Globalize.translate('TabMetadata')
+ },
+ {
+ href: 'metadatanfo.html',
+ name: Globalize.translate('TabNfoSettings')
+ },
{
href: 'librarysettings.html',
name: Globalize.translate('TabAdvanced')
diff --git a/dashboard-ui/scripts/metadataconfigurationpage.js b/dashboard-ui/scripts/metadataconfigurationpage.js
deleted file mode 100644
index 2cb39c0af6..0000000000
--- a/dashboard-ui/scripts/metadataconfigurationpage.js
+++ /dev/null
@@ -1,145 +0,0 @@
-define(['jQuery', 'fnchecked'], function ($) {
- 'use strict';
-
- function load(page, config, allCultures, allCountries) {
- if (!config || !allCultures || !allCountries) {
- return;
- }
-
- $('#selectLanguage', page).val(config.PreferredMetadataLanguage);
- $('#selectCountry', page).val(config.MetadataCountryCode);
-
- Dashboard.hideLoadingMsg();
- }
-
- function onSubmit() {
- var form = this;
-
- Dashboard.showLoadingMsg();
-
- ApiClient.getServerConfiguration().then(function (config) {
-
- config.PreferredMetadataLanguage = $('#selectLanguage', form).val();
- config.MetadataCountryCode = $('#selectCountry', form).val();
-
- ApiClient.updateServerConfiguration(config).then(function() {
- Dashboard.processServerConfigurationUpdateResult();
-
- showConfirmMessage(config);
- });
- });
-
- // Disable default form submission
- return false;
- }
-
- function showConfirmMessage(config) {
-
- var msg = [];
-
- msg.push(Globalize.translate('MetadataSettingChangeHelp'));
-
- if (config.DownloadImagesInAdvance) {
- msg.push(Globalize.translate('DownloadImagesInAdvanceWarning'));
- }
-
- if (!msg.length) {
- return;
- }
-
- require(['alert'], function (alert) {
- alert({
- text: msg.join('
')
- });
- });
- }
-
- function getTabs() {
- return [
- {
- href: 'metadata.html',
- name: Globalize.translate('TabSettings')
- },
- {
- href: 'metadataimages.html',
- name: Globalize.translate('TabServices')
- },
- {
- href: 'metadatanfo.html',
- name: Globalize.translate('TabNfoSettings')
- }];
- }
-
- $(document).on('pageinit', "#metadataConfigurationPage", function () {
-
- Dashboard.showLoadingMsg();
-
- $('.metadataConfigurationForm').off('submit', onSubmit).on('submit', onSubmit);
-
- }).on('pageshow', "#metadataConfigurationPage", function () {
-
- LibraryMenu.setTabs('metadata', 0, getTabs);
- Dashboard.showLoadingMsg();
-
- var page = this;
-
- var config;
- var allCultures;
- var allCountries;
-
- ApiClient.getServerConfiguration().then(function (result) {
-
- config = result;
- load(page, config, allCultures, allCountries);
- });
-
- function populateLanguages(select, languages) {
-
- var html = "";
-
- html += "
";
-
- for (var i = 0, length = languages.length; i < length; i++) {
-
- var culture = languages[i];
-
- html += "
";
- }
-
- select.innerHTML = html;
- }
-
- function populateCountries(select, allCountries) {
-
- var html = "";
-
- html += "
";
-
- for (var i = 0, length = allCountries.length; i < length; i++) {
-
- var culture = allCountries[i];
-
- html += "
";
- }
-
- select.innerHTML = html;
- }
-
- ApiClient.getCultures().then(function (result) {
-
- populateLanguages(page.querySelector('#selectLanguage'), result);
-
- allCultures = result;
- load(page, config, allCultures, allCountries);
- });
-
- ApiClient.getCountries().then(function (result) {
-
- populateCountries(page.querySelector('#selectCountry'), result);
-
- allCountries = result;
- load(page, config, allCultures, allCountries);
- });
- });
-
-});
\ No newline at end of file
diff --git a/dashboard-ui/scripts/metadataimagespage.js b/dashboard-ui/scripts/metadataimagespage.js
index 1c1f7ced53..5da557524e 100644
--- a/dashboard-ui/scripts/metadataimagespage.js
+++ b/dashboard-ui/scripts/metadataimagespage.js
@@ -3,6 +3,44 @@
var currentType;
+ 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 += "
";
+ }
+
+ 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 += "
";
+ }
+
+ select.innerHTML = html;
+ });
+ }
+
function loadTabs(page, tabs) {
var html = '';
@@ -363,6 +401,19 @@
function loadPage(page) {
+ var promises = [
+ ApiClient.getServerConfiguration(),
+ populateLanguages(page.querySelector('#selectLanguage')),
+ populateCountries(page.querySelector('#selectCountry'))
+ ];
+
+ Promise.all(promises).then(function (responses) {
+
+ var config = responses[0];
+ page.querySelector('#selectLanguage').value = config.PreferredMetadataLanguage || '';
+ page.querySelector('#selectCountry').value = config.MetadataCountryCode || '';
+ });
+
loadTabs(page, [
{ name: 'OptionMovies', type: 'Movie' },
@@ -473,6 +524,9 @@
if (metadataOptions) {
+ config.PreferredMetadataLanguage = form.querySelector('#selectLanguage').value;
+ config.MetadataCountryCode = form.querySelector('#selectCountry').value;
+
saveSettingsIntoConfig(form, metadataOptions);
ApiClient.updateServerConfiguration(config).then(Dashboard.processServerConfigurationUpdateResult);
@@ -496,16 +550,24 @@
function getTabs() {
return [
{
- href: 'metadata.html',
- name: Globalize.translate('TabSettings')
+ href: 'library.html',
+ name: Globalize.translate('HeaderLibraries')
},
+ {
+ href: 'librarydisplay.html',
+ name: Globalize.translate('TabDisplay')
+ },
{
href: 'metadataimages.html',
- name: Globalize.translate('TabServices')
+ name: Globalize.translate('TabMetadata')
},
{
href: 'metadatanfo.html',
name: Globalize.translate('TabNfoSettings')
+ },
+ {
+ href: 'librarysettings.html',
+ name: Globalize.translate('TabAdvanced')
}];
}
@@ -551,7 +613,7 @@
}).on('pageshow', "#metadataImagesConfigurationPage", function () {
- LibraryMenu.setTabs('metadata', 1, getTabs);
+ LibraryMenu.setTabs('metadata', 2, getTabs);
Dashboard.showLoadingMsg();
var page = this;
diff --git a/dashboard-ui/scripts/metadatanfo.js b/dashboard-ui/scripts/metadatanfo.js
index 6cd72ca901..ed740b06f7 100644
--- a/dashboard-ui/scripts/metadatanfo.js
+++ b/dashboard-ui/scripts/metadatanfo.js
@@ -62,16 +62,24 @@
function getTabs() {
return [
{
- href: 'metadata.html',
- name: Globalize.translate('TabSettings')
+ href: 'library.html',
+ name: Globalize.translate('HeaderLibraries')
},
+ {
+ href: 'librarydisplay.html',
+ name: Globalize.translate('TabDisplay')
+ },
{
href: 'metadataimages.html',
- name: Globalize.translate('TabServices')
+ name: Globalize.translate('TabMetadata')
},
{
href: 'metadatanfo.html',
name: Globalize.translate('TabNfoSettings')
+ },
+ {
+ href: 'librarysettings.html',
+ name: Globalize.translate('TabAdvanced')
}];
}
@@ -81,7 +89,7 @@
}).on('pageshow', "#metadataNfoPage", function () {
- LibraryMenu.setTabs('metadata', 2, getTabs);
+ LibraryMenu.setTabs('metadata', 3, getTabs);
Dashboard.showLoadingMsg();
var page = this;
diff --git a/dashboard-ui/scripts/site.js b/dashboard-ui/scripts/site.js
index a5930f0d02..556ec96bd7 100644
--- a/dashboard-ui/scripts/site.js
+++ b/dashboard-ui/scripts/site.js
@@ -466,15 +466,9 @@ var Dashboard = {
divider: true,
name: Globalize.translate('TabLibrary'),
href: "library.html",
- pageIds: ['mediaLibraryPage', 'librarySettingsPage', 'libraryDisplayPage'],
+ pageIds: ['mediaLibraryPage', 'librarySettingsPage', 'libraryDisplayPage', 'metadataImagesConfigurationPage', 'metadataNfoPage'],
icon: 'folder',
color: '#38c'
- }, {
- name: Globalize.translate('TabMetadata'),
- href: "metadata.html",
- pageIds: ['metadataConfigurationPage', 'metadataImagesConfigurationPage', 'metadataNfoPage'],
- icon: 'insert_drive_file',
- color: '#FF9800'
}, {
name: Globalize.translate('TabSubtitles'),
href: "metadatasubtitles.html",
@@ -1704,6 +1698,7 @@ var AppInfo = {};
defineRoute({
path: '/edititemmetadata.html',
dependencies: [],
+ controller: 'scripts/edititemmetadata',
autoFocus: false
});
@@ -1909,13 +1904,6 @@ var AppInfo = {};
controller: 'scripts/loginpage'
});
- defineRoute({
- path: '/metadata.html',
- dependencies: [],
- autoFocus: false,
- roles: 'admin'
- });
-
defineRoute({
path: '/metadataadvanced.html',
dependencies: [],
diff --git a/dashboard-ui/strings/en-US.json b/dashboard-ui/strings/en-US.json
index a3f47a05b7..5a11e43c9d 100644
--- a/dashboard-ui/strings/en-US.json
+++ b/dashboard-ui/strings/en-US.json
@@ -296,6 +296,7 @@
"LabelRunServerAtStartupHelp": "This will start the tray icon on windows startup. To start the windows service, uncheck this and run the service from the windows control panel. Please note that you cannot run both at the same time, so you will need to exit the tray icon before starting the service.",
"ButtonSelectDirectory": "Select Directory",
"LabelCachePath": "Cache path:",
+ "DefaultMetadataLangaugeDescription": "These are your defaults and can be customized on a per-library basis.",
"LabelCachePathHelp": "Specify a custom location for server cache files, such as images. Leave blank to use the server default.",
"LabelRecordingPath": "Default recording path:",
"LabelMovieRecordingPath": "Movie recording path (optional):",
@@ -316,7 +317,7 @@
"LabelFanartApiKey": "Personal api key:",
"LabelFanartApiKeyHelp": "Requests to fanart without a personal API key return images that were approved over 7 days ago. With a personal API key that drops to 48 hours and if you are also a fanart VIP member that will further drop to around 10 minutes.",
"ExtractChapterImagesHelp": "Extracting chapter images will allow Emby apps to display graphical scene selection menus. The process can be slow, cpu-intensive and may require several gigabytes of space. It runs when videos are discovered, and also as a nightly scheduled task. The schedule is configurable in the scheduled tasks area. It is not recommended to run this task during peak usage hours.",
- "LabelMetadataDownloadLanguage": "Preferred download language:",
+ "LabelMetadataDownloadLanguage": "Preferred metadata download language:",
"ButtonSignIn": "Sign In",
"TitleSignIn": "Sign In",
"HeaderPleaseSignIn": "Please sign in",
@@ -1026,6 +1027,8 @@
"TitleDevices": "Devices",
"TabCameraUpload": "Camera Upload",
"TabDevices": "Devices",
+ "HeaderLibrarySettings": "Library Settings",
+ "HeaderChapterSettings": "Chapter Settings",
"HeaderCameraUploadHelp": "Automatically upload photos and videos taken from your mobile devices into Emby.",
"MessageNoDevicesSupportCameraUpload": "You currently don't have any devices that support camera upload.",
"LabelCameraUploadPath": "Camera upload path:",
diff --git a/dashboard-ui/wizardsettings.html b/dashboard-ui/wizardsettings.html
index 10302705ae..d91520ffac 100644
--- a/dashboard-ui/wizardsettings.html
+++ b/dashboard-ui/wizardsettings.html
@@ -6,6 +6,8 @@