define(['paperdialoghelper', 'jQuery', 'paper-fab', 'paper-item-body', 'paper-icon-item'], function (paperDialogHelper, $) { var currentDeferred; var hasChanges; var currentOptions; function addMediaLocation(page, path) { var virtualFolder = currentOptions.library; var refreshAfterChange = currentOptions.refresh; ApiClient.addMediaPath(virtualFolder.Name, path, refreshAfterChange).then(function () { hasChanges = true; refreshLibraryFromServer(page); }, function () { require(['toast'], function (toast) { toast(Globalize.translate('ErrorAddingMediaPathToVirtualFolder')); }); }); } function onRemoveClick() { var button = this; var index = parseInt(button.getAttribute('data-index')); var virtualFolder = currentOptions.library; var location = virtualFolder.Locations[index]; require(['confirm'], function (confirm) { confirm(Globalize.translate('MessageConfirmRemoveMediaLocation'), Globalize.translate('HeaderRemoveMediaLocation')).then(function () { var refreshAfterChange = currentOptions.refresh; ApiClient.removeMediaPath(virtualFolder.Name, location, refreshAfterChange).then(function () { hasChanges = true; refreshLibraryFromServer($(button).parents('.editorContent')[0]); }, function () { require(['toast'], function (toast) { toast(Globalize.translate('DefaultErrorMessage')); }); }); }); }); } function getFolderHtml(path, index) { var html = ''; html += ''; html += ''; html += ''; html += path; html += ''; html += ''; html += ''; return html; } function refreshLibraryFromServer(page) { ApiClient.getVirtualFolders().then(function (result) { var library = result.filter(function (f) { return f.Name == currentOptions.library.Name; })[0]; if (library) { currentOptions.library = library; renderLibrary(page, currentOptions); } }); } function renderLibrary(page, options) { var foldersHtml = options.library.Locations.map(getFolderHtml).join(''); page.querySelector('.folderList').innerHTML = foldersHtml; $(page.querySelectorAll('.btnRemovePath')).on('click', onRemoveClick); } function onAddButtonClick() { var page = $(this).parents('.editorContent')[0]; require(['directorybrowser'], function (directoryBrowser) { var picker = new directoryBrowser(); picker.show({ callback: function (path) { if (path) { addMediaLocation(page, path); } picker.close(); } }); }); } function initEditor(page, options) { renderLibrary(page, options); $('.btnAddFolder', page).on('click', onAddButtonClick); } function onDialogClosed() { $(this).remove(); Dashboard.hideLoadingMsg(); currentDeferred.resolveWith(null, [hasChanges]); } function editor() { var self = this; self.show = function (options) { var deferred = jQuery.Deferred(); currentOptions = options; currentDeferred = deferred; hasChanges = false; var xhr = new XMLHttpRequest(); xhr.open('GET', 'components/medialibraryeditor/medialibraryeditor.template.html', true); xhr.onload = function (e) { var template = this.response; var dlg = paperDialogHelper.createDialog({ size: 'small', // In (at least) chrome this is causing the text field to not be editable modal: false }); dlg.classList.add('ui-body-a'); dlg.classList.add('background-theme-a'); dlg.classList.add('popupEditor'); var html = ''; html += '

'; html += ''; html += '
' + options.library.Name + '
'; html += '

'; html += '
'; html += Globalize.translateDocument(template); html += '
'; dlg.innerHTML = html; document.body.appendChild(dlg); var editorContent = dlg.querySelector('.editorContent'); initEditor(editorContent, options); $(dlg).on('close', onDialogClosed); paperDialogHelper.open(dlg); $('.btnCloseDialog', dlg).on('click', function () { paperDialogHelper.close(dlg); }); refreshLibraryFromServer(editorContent); } xhr.send(); return deferred.promise(); }; } return editor; });