define(['components/paperdialoghelper', 'paper-item', 'paper-input', 'paper-fab', 'paper-item-body'], function (paperDialogHelper) { var systemInfo; function getSystemInfo() { var deferred = DeferredBuilder.Deferred(); if (systemInfo) { deferred.resolveWith(null, [systemInfo]); } else { ApiClient.getPublicSystemInfo().then(function (info) { systemInfo = info; deferred.resolveWith(null, [systemInfo]); }); } return deferred.promise(); } function onDialogClosed() { $(this).remove(); Dashboard.hideLoadingMsg(); } function refreshDirectoryBrowser(page, path, fileOptions) { if (path && typeof(path) !== 'string') { throw new Error('invalid path'); } Dashboard.showLoadingMsg(); if (path) { $('.networkHeadline').hide(); } else { $('.networkHeadline').show(); } var promises = []; if (path === "Network") { promises.push(ApiClient.getNetworkDevices()); } else if (path) { promises.push(ApiClient.getDirectoryContents(path, fileOptions)); promises.push(ApiClient.getParentPath(path)); } else { promises.push(ApiClient.getDrives()); } Promise.all(promises).then(function (responses) { var folders = responses[0]; var parentPath = responses[1] || ''; $('#txtDirectoryPickerPath', page).val(path || ""); var html = ''; if (path) { html += getItem("lnkPath lnkDirectory", "", parentPath, '...'); } for (var i = 0, length = folders.length; i < length; i++) { var folder = folders[i]; var cssClass = folder.Type == "File" ? "lnkPath lnkFile" : "lnkPath lnkDirectory"; html += getItem(cssClass, folder.Type, folder.Path, folder.Name); } if (!path) { html += getItem("lnkPath lnkDirectory", "", "Network", Globalize.translate('ButtonNetwork')); } $('.results', page).html(html); Dashboard.hideLoadingMsg(); }, function () { $('#txtDirectoryPickerPath', page).val(""); $('.results', page).html(''); Dashboard.hideLoadingMsg(); }); } function getItem(cssClass, type, path, name) { var html = ''; html += ''; html += ''; html += name; html += ''; html += ''; html += ''; return html; } 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().then(function (systemInfo) { 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.open(dlg); $('.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; });