diff --git a/src/components/libraryoptionseditor/libraryoptionseditor.js b/src/components/libraryoptionseditor/libraryoptionseditor.js
index 0b0f66b61e..6785dafe1f 100644
--- a/src/components/libraryoptionseditor/libraryoptionseditor.js
+++ b/src/components/libraryoptionseditor/libraryoptionseditor.js
@@ -23,8 +23,7 @@ function populateLanguages(parent) {
function populateLanguagesIntoSelect(select, languages) {
let html = '';
html += "";
- for (let i = 0; i < languages.length; i++) {
- const culture = languages[i];
+ for (const culture of languages) {
html += ``;
}
select.innerHTML = html;
@@ -32,8 +31,7 @@ function populateLanguagesIntoSelect(select, languages) {
function populateLanguagesIntoList(element, languages) {
let html = '';
- for (let i = 0; i < languages.length; i++) {
- const culture = languages[i];
+ for (const culture of languages) {
html += ``;
}
element.innerHTML = html;
@@ -43,8 +41,7 @@ function populateCountries(select) {
return ApiClient.getCountries().then(allCountries => {
let html = '';
html += "";
- for (let i = 0; i < allCountries.length; i++) {
- const culture = allCountries[i];
+ for (const culture of allCountries) {
html += ``;
}
select.innerHTML = html;
@@ -109,8 +106,7 @@ function renderMetadataSavers(page, metadataSavers) {
}
html += `
${globalize.translate('LabelMetadataSavers')}
`;
html += '
';
- for (let i = 0; i < metadataSavers.length; i++) {
- const plugin = metadataSavers[i];
+ for (const plugin of metadataSavers) {
html += ``;
}
html += '
';
@@ -157,8 +153,7 @@ function getMetadataFetchersForTypeHtml(availableTypeOptions, libraryOptionsForT
function getTypeOptions(allOptions, type) {
const allTypeOptions = allOptions.TypeOptions || [];
- for (let i = 0; i < allTypeOptions.length; i++) {
- const typeOptions = allTypeOptions[i];
+ for (const typeOptions of allTypeOptions) {
if (typeOptions.Type === type) return typeOptions;
}
return null;
@@ -167,8 +162,7 @@ function getTypeOptions(allOptions, type) {
function renderMetadataFetchers(page, availableOptions, libraryOptions) {
let html = '';
const elem = page.querySelector('.metadataFetchers');
- for (let i = 0; i < availableOptions.TypeOptions.length; i++) {
- const availableTypeOptions = availableOptions.TypeOptions[i];
+ for (const availableTypeOptions of availableOptions.TypeOptions) {
html += getMetadataFetchersForTypeHtml(availableTypeOptions, getTypeOptions(libraryOptions, availableTypeOptions.Type) || {});
}
elem.innerHTML = html;
@@ -262,8 +256,7 @@ function getImageFetchersForTypeHtml(availableTypeOptions, libraryOptionsForType
function renderImageFetchers(page, availableOptions, libraryOptions) {
let html = '';
const elem = page.querySelector('.imageFetchers');
- for (let i = 0; i < availableOptions.TypeOptions.length; i++) {
- const availableTypeOptions = availableOptions.TypeOptions[i];
+ for (const availableTypeOptions of availableOptions.TypeOptions) {
html += getImageFetchersForTypeHtml(availableTypeOptions, getTypeOptions(libraryOptions, availableTypeOptions.Type) || {});
}
elem.innerHTML = html;
@@ -454,8 +447,7 @@ function setSubtitleFetchersIntoOptions(parent, options) {
function setMetadataFetchersIntoOptions(parent, options) {
const sections = parent.querySelectorAll('.metadataFetcher');
- for (let i = 0; i < sections.length; i++) {
- const section = sections[i];
+ for (const section of sections) {
const type = section.getAttribute('data-type');
let typeOptions = getTypeOptions(options, type);
if (!typeOptions) {
@@ -478,8 +470,7 @@ function setMetadataFetchersIntoOptions(parent, options) {
function setImageFetchersIntoOptions(parent, options) {
const sections = parent.querySelectorAll('.imageFetcher');
- for (let i = 0; i < sections.length; i++) {
- const section = sections[i];
+ for (const section of sections) {
const type = section.getAttribute('data-type');
let typeOptions = getTypeOptions(options, type);
if (!typeOptions) {
@@ -503,8 +494,7 @@ function setImageFetchersIntoOptions(parent, options) {
function setImageOptionsIntoOptions(options) {
const originalTypeOptions = (currentLibraryOptions || {}).TypeOptions || [];
- for (let i = 0; i < originalTypeOptions.length; i++) {
- const originalTypeOption = originalTypeOptions[i];
+ for (const originalTypeOption of originalTypeOptions) {
let typeOptions = getTypeOptions(options, originalTypeOption.Type);
if (!typeOptions) {
diff --git a/src/components/metadataEditor/metadataEditor.js b/src/components/metadataEditor/metadataEditor.js
index 422f3c964d..dfe7a99237 100644
--- a/src/components/metadataEditor/metadataEditor.js
+++ b/src/components/metadataEditor/metadataEditor.js
@@ -955,8 +955,7 @@ function populatePeople(context, people) {
function getLockedFieldsHtml(fields, currentFields) {
let html = '';
- for (let i = 0; i < fields.length; i++) {
- const field = fields[i];
+ for (const field of fields) {
const name = field.name;
const value = field.value || field.name;
const checkedHtml = currentFields.indexOf(value) === -1 ? ' checked' : '';
diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js
index 392c6ceafb..879b5fe36f 100644
--- a/src/components/playback/playbackmanager.js
+++ b/src/components/playback/playbackmanager.js
@@ -853,11 +853,9 @@ class PlaybackManager {
user: user
});
- for (let i = 0; i < responses.length; i++) {
- const subTargets = responses[i];
-
- for (let j = 0; j < subTargets.length; j++) {
- targets.push(subTargets[j]);
+ for (const subTargets of responses) {
+ for (const subTarget of subTargets) {
+ targets.push(subTarget);
}
}
diff --git a/src/controllers/dashboard/plugins/add/index.js b/src/controllers/dashboard/plugins/add/index.js
index 150fe3e1fd..62ae70ab4f 100644
--- a/src/controllers/dashboard/plugins/add/index.js
+++ b/src/controllers/dashboard/plugins/add/index.js
@@ -28,8 +28,7 @@ function populateVersions(packageInfo, page, installedPlugin) {
return b.timestamp < a.timestamp ? -1 : 1;
});
- for (let i = 0; i < packageInfo.versions.length; i++) {
- const version = packageInfo.versions[i];
+ for (const version of packageInfo.versions) {
html += '';
}
diff --git a/src/controllers/dashboard/plugins/available/index.js b/src/controllers/dashboard/plugins/available/index.js
index 4dc172450f..78368b2c14 100644
--- a/src/controllers/dashboard/plugins/available/index.js
+++ b/src/controllers/dashboard/plugins/available/index.js
@@ -66,8 +66,7 @@ function populateList(options) {
let currentCategory = null;
let html = '';
- for (let i = 0; i < availablePlugins.length; i++) {
- const plugin = availablePlugins[i];
+ for (const plugin of availablePlugins) {
const category = plugin.categoryDisplayName;
if (category != currentCategory) {
if (currentCategory) {
diff --git a/src/controllers/dashboard/scheduledtasks/scheduledtasks.js b/src/controllers/dashboard/scheduledtasks/scheduledtasks.js
index c074331aa1..8ae447aabc 100644
--- a/src/controllers/dashboard/scheduledtasks/scheduledtasks.js
+++ b/src/controllers/dashboard/scheduledtasks/scheduledtasks.js
@@ -133,8 +133,7 @@ function updateTaskButton(elem, state) {
export default function(view) {
function updateTasks(tasks) {
- for (let i = 0; i < tasks.length; i++) {
- const task = tasks[i];
+ for (const task of tasks) {
view.querySelector('#taskProgress' + task.Id).innerHTML = getTaskProgressHtml(task);
updateTaskButton(view.querySelector('#btnTask' + task.Id), task.State);
}
diff --git a/src/controllers/session/login/index.js b/src/controllers/session/login/index.js
index 0f2d18580c..6e75af6f08 100644
--- a/src/controllers/session/login/index.js
+++ b/src/controllers/session/login/index.js
@@ -135,9 +135,7 @@ function showManualForm(context, showCancel, focusPassword) {
function loadUserList(context, apiClient, users) {
let html = '';
- for (let i = 0; i < users.length; i++) {
- const user = users[i];
-
+ for (const user of users) {
// TODO move card creation code to Card component
let cssClass = 'card squareCard scalableCard squareCard-scalable';
diff --git a/src/elements/emby-textarea/emby-textarea.js b/src/elements/emby-textarea/emby-textarea.js
index 4acf38b594..04ce1a42d9 100644
--- a/src/elements/emby-textarea/emby-textarea.js
+++ b/src/elements/emby-textarea/emby-textarea.js
@@ -13,8 +13,8 @@ function calculateOffset(textarea) {
const props = ['paddingTop', 'paddingBottom'];
let offset = 0;
- for (let i = 0; i < props.length; i++) {
- offset += parseInt(style[props[i]], 10);
+ for (const prop of props) {
+ offset += parseInt(style[prop], 10);
}
return offset;
}
diff --git a/src/scripts/autocast.js b/src/scripts/autocast.js
index a118022513..854403b4da 100644
--- a/src/scripts/autocast.js
+++ b/src/scripts/autocast.js
@@ -33,9 +33,9 @@ function onOpen() {
const playerId = localStorage.getItem('autocastPlayerId');
playbackManager.getTargets().then(function (targets) {
- for (let i = 0; i < targets.length; i++) {
- if (targets[i].id == playerId) {
- playbackManager.trySetActivePlayer(targets[i].playerName, targets[i]);
+ for (const target of targets) {
+ if (target.id == playerId) {
+ playbackManager.trySetActivePlayer(target.playerName, target);
break;
}
}
diff --git a/src/scripts/browser.js b/src/scripts/browser.js
index 7540d0c684..47b0635d52 100644
--- a/src/scripts/browser.js
+++ b/src/scripts/browser.js
@@ -167,8 +167,8 @@ function supportsCssAnimation(allowPrefix) {
}
if (animation === false && allowPrefix) {
- for (let i = 0; i < domPrefixes.length; i++) {
- if (elm.style[domPrefixes[i] + 'AnimationName'] !== undefined) {
+ for (const domPrefix of domPrefixes) {
+ if (elm.style[domPrefix + 'AnimationName'] !== undefined) {
animation = true;
break;
}
diff --git a/src/scripts/libraryMenu.js b/src/scripts/libraryMenu.js
index 0a8ba07831..ec7f26a0b2 100644
--- a/src/scripts/libraryMenu.js
+++ b/src/scripts/libraryMenu.js
@@ -591,13 +591,10 @@ function getToolsLinkHtml(item) {
function getToolsMenuHtml(apiClient) {
return getToolsMenuLinks(apiClient).then(function (items) {
- let item;
let menuHtml = '';
menuHtml += '
';
- for (let i = 0; i < items.length; i++) {
- item = items[i];
-
+ for (const item of items) {
if (item.href) {
menuHtml += getToolsLinkHtml(item);
} else if (item.name) {