first commit
This commit is contained in:
110
media/plg_installer_webinstaller/css/client.css
Normal file
110
media/plg_installer_webinstaller/css/client.css
Normal file
@ -0,0 +1,110 @@
|
||||
.com-apps-container .badge {
|
||||
margin: 1px;
|
||||
}
|
||||
.com-apps-container .badge.badge-success {
|
||||
background-color: var(--success);
|
||||
}
|
||||
.com-apps-container .badge.badge-secondary {
|
||||
background-color: var(--secondary);
|
||||
}
|
||||
.com-apps-container .badge.badge-danger {
|
||||
background-color: var(--danger);
|
||||
}
|
||||
.com-apps-container .badge.badge-warning {
|
||||
background-color: var(--warning);
|
||||
}
|
||||
.com-apps-container .fader {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
margin-top: 5px;
|
||||
text-align: center;
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(70%, rgba(255, 255, 255, 0)), color-stop(95%, rgb(255, 255, 255)));
|
||||
background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0) 70%, rgb(255, 255, 255) 95%);
|
||||
}
|
||||
.com-apps-container .com-apps-sidebar .nav .nav {
|
||||
-webkit-padding-start: 15px;
|
||||
padding-inline-start: 15px;
|
||||
}
|
||||
.com-apps-container .com-apps-sidebar a:hover, .com-apps-container .com-apps-sidebar a.active {
|
||||
color: #fff;
|
||||
text-decoration: none;
|
||||
background-color: #33608f;
|
||||
}
|
||||
.com-apps-container .grid-container .card {
|
||||
height: 400px;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
.com-apps-container .grid-container .card:hover {
|
||||
background-color: var(--gray-200);
|
||||
}
|
||||
.com-apps-container .grid-container .card-img, .com-apps-container .grid-container .card-img-top {
|
||||
height: 6rem;
|
||||
overflow: hidden;
|
||||
border-top-left-radius: 0;
|
||||
border-top-right-radius: 0;
|
||||
}
|
||||
.com-apps-container .grid-container .card-text {
|
||||
height: 160px;
|
||||
overflow: hidden;
|
||||
}
|
||||
.com-apps-container .grid-container .card-body {
|
||||
padding: 0.5rem;
|
||||
cursor: pointer;
|
||||
}
|
||||
.com-apps-container .list-container {
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.com-apps-container .list-container .fader {
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0)), color-stop(25%, rgb(255, 255, 255)));
|
||||
background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0) 0%, rgb(255, 255, 255) 25%);
|
||||
}
|
||||
.com-apps-container .list-container .list-group-item {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.com-apps-container .list-container .list-group-item:hover {
|
||||
background-color: #f8f8f8;
|
||||
}
|
||||
.com-apps-container .list-container .list-group-item .row {
|
||||
cursor: pointer;
|
||||
}
|
||||
.com-apps-container .item-view {
|
||||
margin-top: 3rem;
|
||||
}
|
||||
.com-apps-container .item-view a[target=_blank] span.icon-download, .com-apps-container .item-view a[target=_blank] span.icon-list, .com-apps-container .item-view a[target=_blank] span.icon-share-alt {
|
||||
display: none;
|
||||
}
|
||||
.com-apps-container .form-row {
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
}
|
||||
.com-apps-container .form-row .col-md:first-child {
|
||||
-webkit-margin-end: 0.8rem;
|
||||
margin-inline-end: 0.8rem;
|
||||
}
|
||||
.com-apps-container .form-row .input-group .input-group-append button#search-extensions {
|
||||
border-start-start-radius: 0;
|
||||
border-end-start-radius: 0;
|
||||
}
|
||||
.com-apps-container .form-row .input-group .input-group-append button#search-reset {
|
||||
-webkit-margin-start: 0.8rem;
|
||||
margin-inline-start: 0.8rem;
|
||||
}
|
||||
|
||||
.ifw-busy {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.ifw-loading-container {
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 1000;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: url("../../system/images/ajax-loader.gif?v=144b8c") rgba(255, 255, 255, 0.7) 50% 10px no-repeat;
|
||||
opacity: 0.95;
|
||||
}
|
||||
1
media/plg_installer_webinstaller/css/client.min.css
vendored
Normal file
1
media/plg_installer_webinstaller/css/client.min.css
vendored
Normal file
@ -0,0 +1 @@
|
||||
.com-apps-container .badge{margin:1px}.com-apps-container .badge.badge-success{background-color:var(--success)}.com-apps-container .badge.badge-secondary{background-color:var(--secondary)}.com-apps-container .badge.badge-danger{background-color:var(--danger)}.com-apps-container .badge.badge-warning{background-color:var(--warning)}.com-apps-container .fader{background-image:-webkit-gradient(linear,left top,left bottom,color-stop(70%,hsla(0,0%,100%,0)),color-stop(95%,#fff));background-image:linear-gradient(180deg,hsla(0,0%,100%,0) 70%,#fff 95%);height:100%;left:0;margin-top:5px;position:absolute;text-align:center;top:0;width:100%}.com-apps-container .com-apps-sidebar .nav .nav{-webkit-padding-start:15px;padding-inline-start:15px}.com-apps-container .com-apps-sidebar a.active,.com-apps-container .com-apps-sidebar a:hover{background-color:#33608f;color:#fff;text-decoration:none}.com-apps-container .grid-container .card{height:400px;margin-bottom:2rem}.com-apps-container .grid-container .card:hover{background-color:var(--gray-200)}.com-apps-container .grid-container .card-img,.com-apps-container .grid-container .card-img-top{border-top-left-radius:0;border-top-right-radius:0;height:6rem;overflow:hidden}.com-apps-container .grid-container .card-text{height:160px;overflow:hidden}.com-apps-container .grid-container .card-body{cursor:pointer;padding:.5rem}.com-apps-container .list-container{-webkit-box-sizing:border-box;box-sizing:border-box}.com-apps-container .list-container .fader{background-image:-webkit-gradient(linear,left top,left bottom,from(hsla(0,0%,100%,0)),color-stop(25%,#fff));background-image:linear-gradient(180deg,hsla(0,0%,100%,0) 0,#fff 25%)}.com-apps-container .list-container .list-group-item{margin-bottom:10px}.com-apps-container .list-container .list-group-item:hover{background-color:#f8f8f8}.com-apps-container .list-container .list-group-item .row{cursor:pointer}.com-apps-container .item-view{margin-top:3rem}.com-apps-container .item-view a[target=_blank] span.icon-download,.com-apps-container .item-view a[target=_blank] span.icon-list,.com-apps-container .item-view a[target=_blank] span.icon-share-alt{display:none}.com-apps-container .form-row{display:-webkit-box;display:-ms-flexbox;display:flex}.com-apps-container .form-row .col-md:first-child{-webkit-margin-end:.8rem;margin-inline-end:.8rem}.com-apps-container .form-row .input-group .input-group-append button#search-extensions{border-end-start-radius:0;border-start-start-radius:0}.com-apps-container .form-row .input-group .input-group-append button#search-reset{-webkit-margin-start:.8rem;margin-inline-start:.8rem}.ifw-busy{overflow:hidden}.ifw-loading-container{background:url("../../system/images/ajax-loader.gif?v=144b8c") hsla(0,0%,100%,.7) 50% 10px no-repeat;height:100%;left:0;opacity:.95;top:0;width:100%;z-index:1000}
|
||||
BIN
media/plg_installer_webinstaller/css/client.min.css.gz
Normal file
BIN
media/plg_installer_webinstaller/css/client.min.css.gz
Normal file
Binary file not shown.
365
media/plg_installer_webinstaller/js/client.js
Normal file
365
media/plg_installer_webinstaller/js/client.js
Normal file
@ -0,0 +1,365 @@
|
||||
/**
|
||||
* @copyright (C) 2018 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
if (!Joomla) {
|
||||
throw new Error('Joomla API is not properly initialised');
|
||||
}
|
||||
const allowList = {
|
||||
button: ['type'],
|
||||
input: ['type', 'name', 'placeholder', 'inputmode'],
|
||||
select: ['name'],
|
||||
option: ['value', 'selected']
|
||||
};
|
||||
const webInstallerOptions = {
|
||||
view: 'dashboard',
|
||||
id: 0,
|
||||
ordering: '',
|
||||
version: 'current',
|
||||
list: 0,
|
||||
options: Joomla.getOptions('plg_installer_webinstaller', {})
|
||||
};
|
||||
let instance;
|
||||
class WebInstaller {
|
||||
initialise() {
|
||||
webInstallerOptions.loaded = 1;
|
||||
const cancelButton = document.getElementById('uploadform-web-cancel');
|
||||
cancelButton.addEventListener('click', () => {
|
||||
document.getElementById('uploadform-web').classList.add('hidden');
|
||||
if (webInstallerOptions.list && document.querySelector('.list-view')) {
|
||||
document.querySelector('.list-view').click();
|
||||
}
|
||||
});
|
||||
const installButton = document.getElementById('uploadform-web-install');
|
||||
installButton.addEventListener('click', () => {
|
||||
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();
|
||||
}
|
||||
loadweb(url) {
|
||||
if (!url) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// eslint-disable-next-line prefer-regex-literals
|
||||
const pattern1 = new RegExp(webInstallerOptions.options.base_url);
|
||||
const pattern2 = /^index\.php/;
|
||||
if (!(pattern1.test(url) || pattern2.test(url))) {
|
||||
window.open(url, '_blank');
|
||||
return false;
|
||||
}
|
||||
let 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}`;
|
||||
const orderingSelect = document.getElementById('com-apps-ordering');
|
||||
const 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((resolve, reject) => {
|
||||
Joomla.request({
|
||||
url: requestUrl,
|
||||
onSuccess: resp => {
|
||||
let 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');
|
||||
}
|
||||
const jedContainer = document.getElementById('jed-container');
|
||||
jedContainer.innerHTML = Joomla.sanitizeHtml(response.data.html, allowList);
|
||||
document.getElementById('com-apps-searchbox').addEventListener('keypress', ({
|
||||
which
|
||||
}) => {
|
||||
if (which === 13) {
|
||||
this.initiateSearch();
|
||||
}
|
||||
});
|
||||
document.getElementById('search-extensions').addEventListener('click', () => {
|
||||
this.initiateSearch();
|
||||
});
|
||||
document.getElementById('search-reset').addEventListener('click', () => {
|
||||
const searchBox = document.getElementById('com-apps-searchbox');
|
||||
searchBox.value = '';
|
||||
this.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
|
||||
const orderingSelect = document.getElementById('com-apps-ordering');
|
||||
// eslint-disable-next-line no-shadow
|
||||
const versionSelect = document.getElementById('com-apps-filter-joomla-version');
|
||||
if (orderingSelect) {
|
||||
orderingSelect.addEventListener('change', () => {
|
||||
const index = orderingSelect.selectedIndex;
|
||||
webInstallerOptions.ordering = orderingSelect.options[index].value;
|
||||
this.installfromwebajaxsubmit();
|
||||
});
|
||||
}
|
||||
if (versionSelect) {
|
||||
versionSelect.addEventListener('change', () => {
|
||||
const index = versionSelect.selectedIndex;
|
||||
webInstallerOptions.version = versionSelect.options[index].value;
|
||||
this.installfromwebajaxsubmit();
|
||||
});
|
||||
}
|
||||
if (webInstallerOptions.options.installfrom_url !== '') {
|
||||
WebInstaller.installfromweb(webInstallerOptions.options.installfrom_url);
|
||||
}
|
||||
resolve();
|
||||
},
|
||||
onError: request => {
|
||||
const errorContainer = document.getElementById('web-loader-error');
|
||||
const 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(() => {
|
||||
// Promise has been settled.
|
||||
// Run the following whether or not it was a success.
|
||||
|
||||
const installAtField = document.getElementById('joomlaapsinstallatinput');
|
||||
if (installAtField) {
|
||||
installAtField.value = webInstallerOptions.options.installat_url;
|
||||
}
|
||||
this.clickforlinks();
|
||||
WebInstaller.clicker();
|
||||
if (webInstallerOptions.view !== 'extension') {
|
||||
[].slice.call(document.querySelectorAll('div.load-extension')).forEach(element => {
|
||||
element.addEventListener('click', event => {
|
||||
event.preventDefault();
|
||||
this.processLinkClick(element.getAttribute('data-url'));
|
||||
});
|
||||
element.setAttribute('href', '#');
|
||||
});
|
||||
}
|
||||
if (webInstallerOptions.view === 'extension') {
|
||||
const installExtensionButton = document.getElementById('install-extension');
|
||||
const installExtensionFromExternalButton = document.getElementById('install-extension-from-external');
|
||||
if (installExtensionButton) {
|
||||
installExtensionButton.addEventListener('click', () => {
|
||||
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', () => {
|
||||
const redirectUrl = installExtensionFromExternalButton.getAttribute('data-downloadurl');
|
||||
const 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;
|
||||
}
|
||||
clickforlinks() {
|
||||
[].slice.call(document.querySelectorAll('a.transcode')).forEach(element => {
|
||||
const ajaxurl = element.getAttribute('href');
|
||||
element.addEventListener('click', event => {
|
||||
event.preventDefault();
|
||||
this.processLinkClick(ajaxurl);
|
||||
});
|
||||
element.setAttribute('href', '#');
|
||||
});
|
||||
}
|
||||
initiateSearch() {
|
||||
document.getElementById('search-reset').removeAttribute('disabled');
|
||||
webInstallerOptions.view = 'dashboard';
|
||||
this.installfromwebajaxsubmit();
|
||||
}
|
||||
installfromwebajaxsubmit() {
|
||||
let tail = `&view=${webInstallerOptions.view}`;
|
||||
if (webInstallerOptions.id) {
|
||||
tail += `&id=${webInstallerOptions.id}`;
|
||||
}
|
||||
if (document.getElementById('com-apps-searchbox').value) {
|
||||
const value = encodeURI(document.getElementById('com-apps-searchbox').value.toLowerCase().replace(/ +/g, '_').replace(/[^a-z0-9-_]/g, '').trim());
|
||||
tail += `&filter_search=${value}`;
|
||||
}
|
||||
const orderingSelect = document.getElementById('com-apps-ordering');
|
||||
const 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}`);
|
||||
}
|
||||
processLinkClick(url) {
|
||||
const pattern1 = new RegExp(webInstallerOptions.options.base_url);
|
||||
const 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);
|
||||
}
|
||||
}
|
||||
static showLoadingLayer() {
|
||||
document.getElementById('web').appendChild(document.createElement('joomla-core-loader'));
|
||||
}
|
||||
static hideLoadingLayer() {
|
||||
const spinnerElement = document.querySelector('#web joomla-core-loader');
|
||||
spinnerElement.parentNode.removeChild(spinnerElement);
|
||||
}
|
||||
static clicker() {
|
||||
if (document.querySelector('.grid-view')) {
|
||||
document.querySelector('.grid-view').addEventListener('click', () => {
|
||||
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', () => {
|
||||
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}
|
||||
*/
|
||||
static installfromweb(installUrl, 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
|
||||
submitButtonUrl() {
|
||||
const 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 {
|
||||
const loading = document.getElementById('loading');
|
||||
if (loading) {
|
||||
loading.classList.remove('hidden');
|
||||
}
|
||||
form.installtype.value = 'url';
|
||||
form.submit();
|
||||
}
|
||||
}
|
||||
submitButtonWeb() {
|
||||
const 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
customElements.whenDefined('joomla-tab').then(() => {
|
||||
const installerTabs = document.getElementById('myTab');
|
||||
const link = installerTabs.querySelector('button[aria-controls=web]');
|
||||
|
||||
// Stop 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', () => {
|
||||
if (!instance) {
|
||||
instance = new WebInstaller();
|
||||
instance.initialise();
|
||||
}
|
||||
});
|
||||
});
|
||||
1
media/plg_installer_webinstaller/js/client.min.js
vendored
Normal file
1
media/plg_installer_webinstaller/js/client.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
media/plg_installer_webinstaller/js/client.min.js.gz
Normal file
BIN
media/plg_installer_webinstaller/js/client.min.js.gz
Normal file
Binary file not shown.
158
media/plg_installer_webinstaller/scss/client.scss
Normal file
158
media/plg_installer_webinstaller/scss/client.scss
Normal file
@ -0,0 +1,158 @@
|
||||
// Bootstrap functions
|
||||
@import "../../../../media/vendor/bootstrap/scss/functions";
|
||||
|
||||
// Bootstrap other
|
||||
@import "../../../../media/vendor/bootstrap/scss/mixins";
|
||||
@import "../../../../media/vendor/bootstrap/scss/variables";
|
||||
|
||||
// Extension variables
|
||||
$extension-types: (
|
||||
"jcommercial": #f6c801,
|
||||
"jcomponent": #1e9e33,
|
||||
"jlanguage": $dark,
|
||||
"jmodule": #e20a0a,
|
||||
"jplugin": #57278e,
|
||||
"jspecific": #d69b34,
|
||||
"jtool": #333
|
||||
);
|
||||
|
||||
.com-apps-container {
|
||||
// Extension type badges
|
||||
.badge {
|
||||
margin: 1px;
|
||||
// BS5 Dropped all .badge-* color classes
|
||||
&.badge-success {
|
||||
background-color: var(--success);
|
||||
}
|
||||
&.badge-secondary {
|
||||
background-color: var(--secondary);
|
||||
}
|
||||
&.badge-danger {
|
||||
background-color: var(--danger);
|
||||
}
|
||||
&.badge-warning {
|
||||
background-color: var(--warning);
|
||||
}
|
||||
}
|
||||
|
||||
.fader {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
margin-top: 5px;
|
||||
text-align: center;
|
||||
@include gradient-y(rgba(255,255,255,0), rgba(255,255,255,1), 70%, 95%);
|
||||
}
|
||||
|
||||
.com-apps-sidebar {
|
||||
// Bootstrap 4 does not indent second level navigation
|
||||
.nav {
|
||||
.nav {
|
||||
padding-inline-start: 15px;
|
||||
}
|
||||
}
|
||||
|
||||
a {
|
||||
&:hover,
|
||||
&.active {
|
||||
color: $white;
|
||||
text-decoration: none;
|
||||
background-color: #33608f;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.grid-container {
|
||||
.card {
|
||||
height: 400px;
|
||||
margin-bottom: 2rem;
|
||||
|
||||
&:hover {
|
||||
background-color: var(--gray-200);
|
||||
}
|
||||
}
|
||||
|
||||
.card-img, .card-img-top {
|
||||
height: 6rem;
|
||||
overflow: hidden;
|
||||
border-top-left-radius: 0;
|
||||
border-top-right-radius: 0;
|
||||
}
|
||||
|
||||
.card-text {
|
||||
height: 160px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.card-body {
|
||||
padding: .5rem;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
.list-container {
|
||||
box-sizing: border-box;
|
||||
|
||||
// Override fader gradient
|
||||
.fader {
|
||||
@include gradient-y(rgba(255,255,255,0), rgba(255,255,255,1), 0%, 25%);
|
||||
}
|
||||
|
||||
.list-group-item {
|
||||
margin-bottom: 10px;
|
||||
|
||||
&:hover {
|
||||
background-color: #f8f8f8;
|
||||
}
|
||||
|
||||
.row {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.item-view {
|
||||
margin-top: 3rem;
|
||||
a[target="_blank"] {
|
||||
span.icon-download, span.icon-list, span.icon-share-alt {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
.form-row {
|
||||
display: flex;
|
||||
.col-md:first-child {
|
||||
margin-inline-end: .8rem;
|
||||
}
|
||||
|
||||
.input-group {
|
||||
.input-group-append {
|
||||
button#search-extensions {
|
||||
border-start-start-radius: 0;
|
||||
border-end-start-radius: 0;
|
||||
}
|
||||
|
||||
button#search-reset {
|
||||
margin-inline-start: .8rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Disallow scrolling when overlay is active
|
||||
.ifw-busy {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.ifw-loading-container {
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 1000;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: url("../../system/images/ajax-loader.gif") rgba(255,255,255,.7) 50% 10px no-repeat;
|
||||
opacity: .95;
|
||||
}
|
||||
Reference in New Issue
Block a user