mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00

WebOS 4 apparently has a ligature bug that prevents icons with an underscore from working as intended. This replaces them with either the corresponding CSS class or unicode escape code, depending on context. Refactoring is needed in order to be able to use CSS classes everywhere, so in the interest of time, this does the best available currently. Fixes #678
175 lines
5.8 KiB
JavaScript
175 lines
5.8 KiB
JavaScript
define(['shell', 'dialogHelper', 'loading', 'layoutManager', 'connectionManager', 'appRouter', 'globalize', 'emby-input', 'emby-checkbox', 'paper-icon-button-light', 'emby-select', 'material-icons', 'css!./../formdialog', 'emby-button'], function (shell, dialogHelper, loading, layoutManager, connectionManager, appRouter, globalize) {
|
|
'use strict';
|
|
|
|
function parentWithClass(elem, className) {
|
|
|
|
while (!elem.classList || !elem.classList.contains(className)) {
|
|
elem = elem.parentNode;
|
|
|
|
if (!elem) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
return elem;
|
|
}
|
|
|
|
function getEditorHtml() {
|
|
|
|
var html = '';
|
|
|
|
html += '<div class="formDialogContent smoothScrollY" style="padding-top:2em;">';
|
|
html += '<div class="dialogContentInner dialog-content-centered">';
|
|
html += '<form style="margin:auto;">';
|
|
|
|
html += '<div class="fldSelectPlaylist selectContainer">';
|
|
html += '<select is="emby-select" id="selectMetadataRefreshMode" label="' + globalize.translate('LabelRefreshMode') + '">';
|
|
html += '<option value="scan">' + globalize.translate('ScanForNewAndUpdatedFiles') + '</option>';
|
|
html += '<option value="missing">' + globalize.translate('SearchForMissingMetadata') + '</option>';
|
|
html += '<option value="all" selected>' + globalize.translate('ReplaceAllMetadata') + '</option>';
|
|
html += '</select>';
|
|
html += '</div>';
|
|
|
|
html += '<label class="checkboxContainer hide fldReplaceExistingImages">';
|
|
html += '<input type="checkbox" is="emby-checkbox" class="chkReplaceImages" />';
|
|
html += '<span>' + globalize.translate('ReplaceExistingImages') + '</span>';
|
|
html += '</label>';
|
|
|
|
html += '<div class="fieldDescription">';
|
|
html += globalize.translate('RefreshDialogHelp');
|
|
html += '</div>';
|
|
|
|
html += '<input type="hidden" class="fldSelectedItemIds" />';
|
|
|
|
html += '<br />';
|
|
html += '<div class="formDialogFooter">';
|
|
html += '<button is="emby-button" type="submit" class="raised btnSubmit block formDialogFooterItem button-submit">' + globalize.translate('Refresh') + '</button>';
|
|
html += '</div>';
|
|
|
|
html += '</form>';
|
|
html += '</div>';
|
|
html += '</div>';
|
|
|
|
return html;
|
|
}
|
|
|
|
function centerFocus(elem, horiz, on) {
|
|
require(['scrollHelper'], function (scrollHelper) {
|
|
var fn = on ? 'on' : 'off';
|
|
scrollHelper.centerFocus[fn](elem, horiz);
|
|
});
|
|
}
|
|
|
|
function onSubmit(e) {
|
|
|
|
loading.show();
|
|
|
|
var instance = this;
|
|
var dlg = parentWithClass(e.target, 'dialog');
|
|
var options = instance.options;
|
|
|
|
var apiClient = connectionManager.getApiClient(options.serverId);
|
|
|
|
var replaceAllMetadata = dlg.querySelector('#selectMetadataRefreshMode').value === 'all';
|
|
|
|
var mode = dlg.querySelector('#selectMetadataRefreshMode').value === 'scan' ? 'Default' : 'FullRefresh';
|
|
var replaceAllImages = mode === 'FullRefresh' && dlg.querySelector('.chkReplaceImages').checked;
|
|
|
|
options.itemIds.forEach(function (itemId) {
|
|
apiClient.refreshItem(itemId, {
|
|
|
|
Recursive: true,
|
|
ImageRefreshMode: mode,
|
|
MetadataRefreshMode: mode,
|
|
ReplaceAllImages: replaceAllImages,
|
|
ReplaceAllMetadata: replaceAllMetadata
|
|
});
|
|
});
|
|
|
|
dialogHelper.close(dlg);
|
|
|
|
require(['toast'], function (toast) {
|
|
toast(globalize.translate('RefreshQueued'));
|
|
});
|
|
|
|
loading.hide();
|
|
|
|
e.preventDefault();
|
|
return false;
|
|
}
|
|
|
|
function RefreshDialog(options) {
|
|
this.options = options;
|
|
}
|
|
|
|
RefreshDialog.prototype.show = function () {
|
|
|
|
var dialogOptions = {
|
|
removeOnClose: true,
|
|
scrollY: false
|
|
};
|
|
|
|
if (layoutManager.tv) {
|
|
dialogOptions.size = 'fullscreen';
|
|
} else {
|
|
dialogOptions.size = 'small';
|
|
}
|
|
|
|
var dlg = dialogHelper.createDialog(dialogOptions);
|
|
|
|
dlg.classList.add('formDialog');
|
|
|
|
var html = '';
|
|
var title = globalize.translate('RefreshMetadata');
|
|
|
|
html += '<div class="formDialogHeader">';
|
|
html += '<button is="paper-icon-button-light" class="btnCancel autoSize" tabindex="-1"><i class="material-icons arrow_back"></i></button>';
|
|
html += '<h3 class="formDialogHeaderTitle">';
|
|
html += title;
|
|
html += '</h3>';
|
|
|
|
html += '</div>';
|
|
|
|
html += getEditorHtml();
|
|
|
|
dlg.innerHTML = html;
|
|
|
|
dlg.querySelector('form').addEventListener('submit', onSubmit.bind(this));
|
|
|
|
dlg.querySelector('#selectMetadataRefreshMode').addEventListener('change', function () {
|
|
|
|
if (this.value === 'scan') {
|
|
dlg.querySelector('.fldReplaceExistingImages').classList.add('hide');
|
|
} else {
|
|
dlg.querySelector('.fldReplaceExistingImages').classList.remove('hide');
|
|
}
|
|
});
|
|
|
|
if (this.options.mode) {
|
|
dlg.querySelector('#selectMetadataRefreshMode').value = this.options.mode;
|
|
}
|
|
|
|
dlg.querySelector('#selectMetadataRefreshMode').dispatchEvent(new CustomEvent('change'));
|
|
|
|
dlg.querySelector('.btnCancel').addEventListener('click', function () {
|
|
|
|
dialogHelper.close(dlg);
|
|
});
|
|
|
|
if (layoutManager.tv) {
|
|
centerFocus(dlg.querySelector('.formDialogContent'), false, true);
|
|
}
|
|
|
|
return new Promise(function (resolve, reject) {
|
|
|
|
if (layoutManager.tv) {
|
|
centerFocus(dlg.querySelector('.formDialogContent'), false, false);
|
|
}
|
|
|
|
dlg.addEventListener('close', resolve);
|
|
dialogHelper.open(dlg);
|
|
});
|
|
};
|
|
|
|
return RefreshDialog;
|
|
});
|