(function () { 'use strict'; /** * @copyright (C) 2018 Open Source Matters, Inc. * @license GNU General Public License version 2 or later; see LICENSE.txt */ if (!Joomla) { throw new Error('Joomla API is not properly initialised'); } var allowList = { button: ['type'], input: ['type', 'name', 'placeholder', 'inputmode'], select: ['name'], option: ['value', 'selected'] }; var webInstallerOptions = { view: 'dashboard', id: 0, ordering: '', version: 'current', list: 0, options: Joomla.getOptions('plg_installer_webinstaller', {}) }; var instance; var WebInstaller = /*#__PURE__*/function () { function WebInstaller() {} var _proto = WebInstaller.prototype; _proto.initialise = function initialise() { var _this = this; webInstallerOptions.loaded = 1; var cancelButton = document.getElementById('uploadform-web-cancel'); cancelButton.addEventListener('click', function () { document.getElementById('uploadform-web').classList.add('hidden'); if (webInstallerOptions.list && document.querySelector('.list-view')) { document.querySelector('.list-view').click(); } }); var installButton = document.getElementById('uploadform-web-install'); installButton.addEventListener('click', function () { if (webInstallerOptions.options.installFrom === 4) { _this.submitButtonUrl(); } else { _this.submitButtonWeb(); } }); this.loadweb(webInstallerOptions.options.base_url + "index.php?format=json&option=com_apps&view=dashboard"); this.clickforlinks(); }; _proto.loadweb = function loadweb(url) { var _this2 = this; if (!url) { return false; } // eslint-disable-next-line prefer-regex-literals var pattern1 = new RegExp(webInstallerOptions.options.base_url); var pattern2 = /^index\.php/; if (!(pattern1.test(url) || pattern2.test(url))) { window.open(url, '_blank'); return false; } var requestUrl = url + "&product=" + webInstallerOptions.options.product + "&release=" + webInstallerOptions.options.release + "&dev_level=" + webInstallerOptions.options.dev_level + "&list=" + (webInstallerOptions.list ? 'list' : 'grid') + "&lang=" + webInstallerOptions.options.language; var orderingSelect = document.getElementById('com-apps-ordering'); var versionSelect = document.getElementById('com-apps-filter-joomla-version'); if (webInstallerOptions.ordering !== '' && orderingSelect && orderingSelect.value) { webInstallerOptions.ordering = orderingSelect.value; requestUrl += "&ordering=" + webInstallerOptions.ordering; } if (webInstallerOptions.version !== '' && versionSelect && versionSelect.value) { webInstallerOptions.version = versionSelect.value; requestUrl += "&filter_version=" + webInstallerOptions.version; } WebInstaller.showLoadingLayer(); new Promise(function (resolve, reject) { Joomla.request({ url: requestUrl, onSuccess: function onSuccess(resp) { var response; try { response = JSON.parse(resp); } catch (error) { throw new Error('Failed to parse JSON'); } if (document.getElementById('web-loader')) { document.getElementById('web-loader').classList.add('hidden'); } var jedContainer = document.getElementById('jed-container'); jedContainer.innerHTML = Joomla.sanitizeHtml(response.data.html, allowList); document.getElementById('com-apps-searchbox').addEventListener('keypress', function (_ref) { var which = _ref.which; if (which === 13) { _this2.initiateSearch(); } }); document.getElementById('search-extensions').addEventListener('click', function () { _this2.initiateSearch(); }); document.getElementById('search-reset').addEventListener('click', function () { var searchBox = document.getElementById('com-apps-searchbox'); searchBox.value = ''; _this2.initiateSearch(); document.getElementById('search-reset').setAttribute('disabled', 'disabled'); }); if (document.getElementById('com-apps-searchbox').value === '') { document.getElementById('search-reset').setAttribute('disabled', 'disabled'); } document.getElementById('search-reset').innerHTML = Joomla.sanitizeHtml(Joomla.Text._('JSEARCH_FILTER_CLEAR')); // eslint-disable-next-line no-shadow var orderingSelect = document.getElementById('com-apps-ordering'); // eslint-disable-next-line no-shadow var versionSelect = document.getElementById('com-apps-filter-joomla-version'); if (orderingSelect) { orderingSelect.addEventListener('change', function () { var index = orderingSelect.selectedIndex; webInstallerOptions.ordering = orderingSelect.options[index].value; _this2.installfromwebajaxsubmit(); }); } if (versionSelect) { versionSelect.addEventListener('change', function () { var index = versionSelect.selectedIndex; webInstallerOptions.version = versionSelect.options[index].value; _this2.installfromwebajaxsubmit(); }); } if (webInstallerOptions.options.installfrom_url !== '') { WebInstaller.installfromweb(webInstallerOptions.options.installfrom_url); } resolve(); }, onError: function onError(request) { var errorContainer = document.getElementById('web-loader-error'); var loaderContainer = document.getElementById('web-loader'); if (request.responseText && errorContainer) { errorContainer.innerHTML = Joomla.sanitizeHtml(request.responseText); } if (loaderContainer) { loaderContainer.classList.add('hidden'); errorContainer.classList.remove('hidden'); } Joomla.renderMessages({ danger: [Joomla.Text._('PLG_INSTALLER_WEBINSTALLER_INSTALL_WEB_LOADING_ERROR')] }, '#web-loader-error'); reject(); } }); }).finally(function () { // Promise has been settled. // Run the following whether or not it was a success. var installAtField = document.getElementById('joomlaapsinstallatinput'); if (installAtField) { installAtField.value = webInstallerOptions.options.installat_url; } _this2.clickforlinks(); WebInstaller.clicker(); if (webInstallerOptions.view !== 'extension') { [].slice.call(document.querySelectorAll('div.load-extension')).forEach(function (element) { element.addEventListener('click', function (event) { event.preventDefault(); _this2.processLinkClick(element.getAttribute('data-url')); }); element.setAttribute('href', '#'); }); } if (webInstallerOptions.view === 'extension') { var installExtensionButton = document.getElementById('install-extension'); var installExtensionFromExternalButton = document.getElementById('install-extension-from-external'); if (installExtensionButton) { installExtensionButton.addEventListener('click', function () { WebInstaller.installfromweb(installExtensionButton.getAttribute('data-downloadurl'), installExtensionButton.getAttribute('data-name')); document.getElementById('uploadform-web-install').scrollIntoView({ behavior: 'smooth', block: 'start' }); }); } if (installExtensionFromExternalButton) { installExtensionFromExternalButton.addEventListener('click', function () { var redirectUrl = installExtensionFromExternalButton.getAttribute('data-downloadurl'); var redirectConfirm = window.confirm(Joomla.Text._('PLG_INSTALLER_WEBINSTALLER_REDIRECT_TO_EXTERNAL_SITE_TO_INSTALL').replace('[SITEURL]', redirectUrl)); if (redirectConfirm !== true) { return; } document.getElementById('adminForm').setAttribute('action', redirectUrl); document.querySelector('input[name=task]').setAttribute('disabled', true); document.querySelector('input[name=install_directory]').setAttribute('disabled', true); document.querySelector('input[name=install_url]').setAttribute('disabled', true); document.querySelector('input[name=installtype]').setAttribute('disabled', true); document.querySelector('input[name=filter_search]').setAttribute('disabled', true); document.getElementById('adminForm').submit(); }); } } if (webInstallerOptions.list && document.querySelector('.list-view')) { document.querySelector('.list-view').click(); } WebInstaller.hideLoadingLayer(); }); return true; }; _proto.clickforlinks = function clickforlinks() { var _this3 = this; [].slice.call(document.querySelectorAll('a.transcode')).forEach(function (element) { var ajaxurl = element.getAttribute('href'); element.addEventListener('click', function (event) { event.preventDefault(); _this3.processLinkClick(ajaxurl); }); element.setAttribute('href', '#'); }); }; _proto.initiateSearch = function initiateSearch() { document.getElementById('search-reset').removeAttribute('disabled'); webInstallerOptions.view = 'dashboard'; this.installfromwebajaxsubmit(); }; _proto.installfromwebajaxsubmit = function installfromwebajaxsubmit() { var tail = "&view=" + webInstallerOptions.view; if (webInstallerOptions.id) { tail += "&id=" + webInstallerOptions.id; } if (document.getElementById('com-apps-searchbox').value) { var value = encodeURI(document.getElementById('com-apps-searchbox').value.toLowerCase().replace(/ +/g, '_').replace(/[^a-z0-9-_]/g, '').trim()); tail += "&filter_search=" + value; } var orderingSelect = document.getElementById('com-apps-ordering'); var versionSelect = document.getElementById('com-apps-filter-joomla-version'); if (webInstallerOptions.ordering !== '' && orderingSelect && orderingSelect.value) { webInstallerOptions.ordering = orderingSelect.value; } if (webInstallerOptions.ordering) { tail += "&ordering=" + webInstallerOptions.ordering; } if (webInstallerOptions.version !== '' && versionSelect && versionSelect.value) { webInstallerOptions.version = versionSelect.value; } if (webInstallerOptions.version) { tail += "&filter_version=" + webInstallerOptions.version; } this.loadweb(webInstallerOptions.options.base_url + "index.php?format=json&option=com_apps" + tail); }; _proto.processLinkClick = function processLinkClick(url) { var pattern1 = new RegExp(webInstallerOptions.options.base_url); var pattern2 = /^index\.php/; if (pattern1.test(url) || pattern2.test(url)) { webInstallerOptions.view = url.replace(/^.+[&?]view=(\w+).*$/, '$1'); if (webInstallerOptions.view === 'dashboard') { webInstallerOptions.id = 0; } else if (webInstallerOptions.view === 'category') { webInstallerOptions.id = url.replace(/^.+[&?]id=(\d+).*$/, '$1'); } this.loadweb(webInstallerOptions.options.base_url + url); } else { this.loadweb(url); } }; WebInstaller.showLoadingLayer = function showLoadingLayer() { document.getElementById('web').appendChild(document.createElement('joomla-core-loader')); }; WebInstaller.hideLoadingLayer = function hideLoadingLayer() { var spinnerElement = document.querySelector('#web joomla-core-loader'); spinnerElement.parentNode.removeChild(spinnerElement); }; WebInstaller.clicker = function clicker() { if (document.querySelector('.grid-view')) { document.querySelector('.grid-view').addEventListener('click', function () { webInstallerOptions.list = 0; document.querySelector('.list-container').classList.add('hidden'); document.querySelector('.grid-container').classList.remove('hidden'); document.getElementById('btn-list-view').classList.remove('active'); document.getElementById('btn-grid-view').classList.remove('active'); }); } if (document.querySelector('.list-view')) { document.querySelector('.list-view').addEventListener('click', function () { webInstallerOptions.list = 1; document.querySelector('.grid-container').classList.add('hidden'); document.querySelector('.list-container').classList.remove('hidden'); document.getElementById('btn-grid-view').classList.remove('active'); document.getElementById('btn-list-view').classList.add('active'); }); } } /** * @param {string} installUrl * @param {string} name * @returns {boolean} */ ; WebInstaller.installfromweb = function installfromweb(installUrl, name) { if (name === void 0) { name = null; } if (!installUrl) { Joomla.renderMessages({ warning: [Joomla.Text._('PLG_INSTALLER_WEBINSTALLER_CANNOT_INSTALL_EXTENSION_IN_PLUGIN')] }); return false; } document.getElementById('install_url').value = installUrl; document.getElementById('uploadform-web-url').innerText = installUrl; if (name) { document.getElementById('uploadform-web-name').innerText = name; document.getElementById('uploadform-web-name-label').classList.remove('hidden'); } else { document.getElementById('uploadform-web-name-label').classList.add('hidden'); } document.getElementById('uploadform-web').classList.remove('hidden'); return true; } // eslint-disable-next-line class-methods-use-this ; _proto.submitButtonUrl = function submitButtonUrl() { var form = document.getElementById('adminForm'); // do field validation if (form.install_url.value === '' || form.install_url.value === 'http://' || form.install_url.value === 'https://') { Joomla.renderMessages({ warning: [Joomla.Text._('COM_INSTALLER_MSG_INSTALL_ENTER_A_URL')] }); } else { var loading = document.getElementById('loading'); if (loading) { loading.classList.remove('hidden'); } form.installtype.value = 'url'; form.submit(); } }; _proto.submitButtonWeb = function submitButtonWeb() { var form = document.getElementById('adminForm'); // do field validation if (form.install_url.value !== '' || form.install_url.value !== 'http://' || form.install_url.value !== 'https://') { this.submitButtonUrl(); } else if (form.install_url.value === '') { Joomla.renderMessages({ warning: [Joomla.apps.options.btntxt] }); } else { document.querySelector('#appsloading').classList.remove('hidden'); form.installtype.value = 'web'; form.submit(); } }; return WebInstaller; }(); customElements.whenDefined('joomla-tab').then(function () { var installerTabs = document.getElementById('myTab'); var link = installerTabs.querySelector('button[aria-controls=web]'); // Abort if the IFW tab cannot be found if (!link) { return; } if (webInstallerOptions.options.installfromon) { link.click(); } if (link.hasAttribute('aria-expanded') && link.getAttribute('aria-expanded') === 'true' && !instance) { instance = new WebInstaller(); instance.initialise(); } if (webInstallerOptions.options.installfrom_url !== '') { link.click(); } link.addEventListener('joomla.tab.shown', function () { if (!instance) { instance = new WebInstaller(); instance.initialise(); } }); }); })();