';
+ html += '';
+
+ dialog.innerHTML = html;
+ dialog.querySelector('.btnCancel').addEventListener('click', () => {
+ dialogHelper.close(dialog);
+ });
+
+ dialog.querySelector('.newPluginForm').addEventListener('submit', () => {
+ repositories.push({
+ Name: dialog.querySelector('#txtRepositoryName').value,
+ Url: dialog.querySelector('#txtRepositoryUrl').value,
+ Enabled: true
+ });
+
+ saveList(view);
+ dialogHelper.close(dialog);
+ return false;
+ });
+
+ dialogHelper.open(dialog);
+ });
+}
diff --git a/src/controllers/itemDetails.js b/src/controllers/itemDetails.js
index 67aa5f9407..c9b6b7fc1c 100644
--- a/src/controllers/itemDetails.js
+++ b/src/controllers/itemDetails.js
@@ -400,6 +400,7 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti
} else if (item.Album) {
parentNameHtml.push(item.Album);
}
+
// FIXME: This whole section needs some refactoring, so it becames easier to scale across all form factors. See GH #1022
var html = '';
var tvShowHtml = parentNameHtml[0];
@@ -415,9 +416,9 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti
}
} else {
if (layoutManager.mobile) {
- html = '
' + parentNameHtml.join('') + '
';
+ html = '
' + parentNameHtml.join('') + '
';
} else {
- html = '
' + tvShowHtml + '
';
+ html = '
' + tvShowHtml + '
';
}
}
}
@@ -425,20 +426,19 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti
var name = itemHelper.getDisplayName(item, {
includeParentInfo: false
});
- var offset = parentNameLast ? '.25em' : '.5em';
if (html && !parentNameLast) {
if (!layoutManager.mobile && tvSeasonHtml) {
- html += '
' + tvSeasonHtml + ' - ' + name + '
';
+ html += '
' + tvSeasonHtml + ' - ' + name + '
';
} else {
- html += '
' + name + '
';
+ html += '
' + name + '
';
}
} else {
- html = '
' + name + '
' + html;
+ html = '
' + name + '
' + html;
}
if (item.OriginalTitle && item.OriginalTitle != item.Name) {
- html += '
' + item.OriginalTitle + '
';
+ html += '
' + item.OriginalTitle + '
';
}
container.innerHTML = html;
@@ -1106,10 +1106,10 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti
var externalLinksElem = page.querySelector('.itemExternalLinks');
renderOverview([overview], item);
+
var i;
var itemMiscInfo;
itemMiscInfo = page.querySelectorAll('.itemMiscInfo-primary');
-
for (i = 0; i < itemMiscInfo.length; i++) {
mediaInfo.fillPrimaryMediaInfo(itemMiscInfo[i], item, {
interactive: true,
@@ -1125,7 +1125,6 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti
}
itemMiscInfo = page.querySelectorAll('.itemMiscInfo-secondary');
-
for (i = 0; i < itemMiscInfo.length; i++) {
mediaInfo.fillSecondaryMediaInfo(itemMiscInfo[i], item, {
interactive: true
diff --git a/src/elements/emby-input/emby-input.js b/src/elements/emby-input/emby-input.js
index 03ba2b93aa..1cef349bf0 100644
--- a/src/elements/emby-input/emby-input.js
+++ b/src/elements/emby-input/emby-input.js
@@ -109,9 +109,7 @@ define(['layoutManager', 'browser', 'dom', 'css!./emby-input', 'registerElement'
}
EmbyInputPrototype.attachedCallback = function () {
-
this.labelElement.htmlFor = this.id;
-
onChange.call(this);
};
diff --git a/src/itemdetails.html b/src/itemdetails.html
index 18de25845c..44ca561d40 100644
--- a/src/itemdetails.html
+++ b/src/itemdetails.html
@@ -10,8 +10,8 @@
-
-
+
+
diff --git a/src/repositories.html b/src/repositories.html
new file mode 100644
index 0000000000..ff3406fb95
--- /dev/null
+++ b/src/repositories.html
@@ -0,0 +1,19 @@
+
+
+
+
+
${TabRepositories}
+
+
+
+
+
+
+
${MessageNoRepositories}
+
${MessageAddRepository}
+
+
+
+
diff --git a/src/scripts/routes.js b/src/scripts/routes.js
index 6f13711b66..b5bb04683b 100644
--- a/src/scripts/routes.js
+++ b/src/scripts/routes.js
@@ -215,6 +215,12 @@ define([
roles: 'admin',
controller: 'dashboard/plugins/available'
});
+ defineRoute({
+ path: '/repositories.html',
+ autoFocus: false,
+ roles: 'admin',
+ controller: 'dashboard/plugins/repositories'
+ });
defineRoute({
path: '/home.html',
diff --git a/src/strings/en-us.json b/src/strings/en-us.json
index b8dfaccaf8..a1ec9d2b23 100644
--- a/src/strings/en-us.json
+++ b/src/strings/en-us.json
@@ -1024,6 +1024,13 @@
"MessageItemsAdded": "Items added.",
"MessageLeaveEmptyToInherit": "Leave empty to inherit settings from a parent item or the global default value.",
"MessageNoAvailablePlugins": "No available plugins.",
+ "MessageNoRepositories": "No repositories.",
+ "HeaderNewRepository": "New Repository",
+ "LabelRepositoryUrl": "Repository URL",
+ "LabelRepositoryUrlHelp": "The location of the repository manifest you want to include.",
+ "LabelRepositoryName": "Repository Name",
+ "LabelRepositoryNameHelp": "A custom name to distinguish this repository from any others added to your server.",
+ "MessageAddRepository": "If you wish to add a repository, click the button next to the header and fill out the requested information.",
"MessageNoCollectionsAvailable": "Collections allow you to enjoy personalized groupings of Movies, Series, and Albums. Click the + button to start creating collections.",
"MessageNoGenresAvailable": "Enable some metadata providers to pull genres from the internet.",
"MessageNoMovieSuggestionsAvailable": "No movie suggestions are currently available. Start watching and rating your movies, and then come back to view your recommendations.",
@@ -1415,6 +1422,7 @@
"TabAlbums": "Albums",
"TabArtists": "Artists",
"TabCatalog": "Catalog",
+ "TabRepositories": "Repositories",
"TabChannels": "Channels",
"TabCodecs": "Codecs",
"TabCollections": "Collections",