define([], function () { var systemInfo; function getSystemInfo() { var deferred = DeferredBuilder.Deferred(); if (systemInfo) { deferred.resolveWith(null, [systemInfo]); } else { ApiClient.getPublicSystemInfo().done(function (info) { systemInfo = info; deferred.resolveWith(null, [systemInfo]); }); } return deferred.promise(); } function onDialogClosed() { $(this).remove(); Dashboard.hideLoadingMsg(); } function refreshDirectoryBrowser(page, path, fileOptions) { Dashboard.showLoadingMsg(); if (path) { $('.networkHeadline').hide(); } else { $('.networkHeadline').show(); } var promise; var parentPathPromise = null; if (path === "Network") { promise = ApiClient.getNetworkDevices(); } else if (path) { promise = ApiClient.getDirectoryContents(path, fileOptions); parentPathPromise = ApiClient.getParentPath(path); } else { promise = ApiClient.getDrives(); } if (!parentPathPromise) { parentPathPromise = $.Deferred(); parentPathPromise.resolveWith(null, []); parentPathPromise = parentPathPromise.promise(); } $.when(promise, parentPathPromise).done(function (response1, response2) { var folders = response1[0]; var parentPath = response2 && response2.length ? response2[0] || '' : ''; $('#txtDirectoryPickerPath', page).val(path || ""); var html = ''; if (path) { html += ''; html += ''; html += '...'; html += ''; html += ''; html += ''; } for (var i = 0, length = folders.length; i < length; i++) { var folder = folders[i]; var cssClass = folder.Type == "File" ? "lnkPath lnkFile" : "lnkPath lnkDirectory"; html += ''; html += ''; html += folder.Name; html += ''; html += ''; html += ''; } if (!path) { html += ''; html += ''; html += Globalize.translate('ButtonNetwork'); html += ''; html += ''; html += ''; } $('.results', page).html(html); Dashboard.hideLoadingMsg(); }).fail(function () { $('#txtDirectoryPickerPath', page).val(""); $('.results', page).html(''); Dashboard.hideLoadingMsg(); }); } function getEditorHtml(options, systemInfo) { var html = ''; var instruction = options.instruction ? options.instruction + '

' : ''; html += '

'; html += instruction; html += Globalize.translate('MessageDirectoryPickerInstruction') .replace('{0}', '\\\\server') .replace('{1}', '\\\\192.168.1.101'); if (systemInfo.OperatingSystem.toLowerCase() == 'bsd') { html += '
'; html += '
'; html += Globalize.translate('MessageDirectoryPickerBSDInstruction'); html += '
'; html += '' + Globalize.translate('ButtonMoreInformation') + ''; } else if (systemInfo.OperatingSystem.toLowerCase() == 'linux') { html += '
'; html += '
'; html += Globalize.translate('MessageDirectoryPickerLinuxInstruction'); html += '
'; html += '' + Globalize.translate('ButtonMoreInformation') + ''; } html += '

'; html += '
'; html += '
'; html += ''; html += ''; html += '
'; html += '
'; html += '
'; html += ''; html += '
'; html += '
'; html += ''; return html; } function initEditor(content, options, fileOptions) { $(content).on("click", ".lnkPath", function () { var path = this.getAttribute('data-path'); if ($(this).hasClass('lnkFile')) { $('#txtDirectoryPickerPath', content).val(path); } else { refreshDirectoryBrowser(content, path, fileOptions); } }).on("click", ".btnRefreshDirectories", function () { var path = $('#txtDirectoryPickerPath', content).val(); refreshDirectoryBrowser(content, path, fileOptions); }).on("change", "#txtDirectoryPickerPath", function () { refreshDirectoryBrowser(content, this.value, fileOptions); }); $('form', content).on('submit', function () { if (options.callback) { options.callback(this.querySelector('#txtDirectoryPickerPath').value); } return false; }); } function directoryBrowser() { var self = this; var currentDialog; self.show = function (options) { options = options || {}; var fileOptions = { includeDirectories: true }; if (options.includeDirectories != null) { fileOptions.includeDirectories = options.includeDirectories; } if (options.includeFiles != null) { fileOptions.includeFiles = options.includeFiles; } getSystemInfo().done(function (systemInfo) { require(['components/paperdialoghelper'], function () { var dlg = PaperDialogHelper.createDialog({ theme: 'a', size: 'medium' }); dlg.classList.add('directoryPicker'); var html = ''; html += '

'; html += ''; html += '
' + (options.header || Globalize.translate('HeaderSelectPath')) + '
'; html += '

'; html += '
'; html += getEditorHtml(options, systemInfo); html += '
'; dlg.innerHTML = html; document.body.appendChild(dlg); var editorContent = dlg.querySelector('.editorContent'); initEditor(editorContent, options, fileOptions); // Has to be assigned a z-index after the call to .open() $(dlg).on('iron-overlay-opened', function () { this.querySelector('#txtDirectoryPickerPath input').focus(); }); $(dlg).on('iron-overlay-closed', onDialogClosed); PaperDialogHelper.openWithHash(dlg, 'directorybrowser'); $('.btnCloseDialog', dlg).on('click', function () { PaperDialogHelper.close(dlg); }); currentDialog = dlg; var txtCurrentPath = $('#txtDirectoryPickerPath', editorContent); if (options.path) { txtCurrentPath.val(options.path); } refreshDirectoryBrowser(editorContent, txtCurrentPath.val()); }); }); }; self.close = function () { if (currentDialog) { PaperDialogHelper.close(currentDialog); } }; } return directoryBrowser; });