news/plugins/admin/themes/grav/app/plugins/index.js

92 lines
3.3 KiB
JavaScript

import $ from 'jquery';
import packages from '../utils/packages';
import camelCase from 'mout/string/camelCase';
import debounce from 'debounce';
import contains from 'mout/string/contains';
// Plugins sliders details
$('.gpm-name, .gpm-actions').on('click', function(e) {
let element = $(this);
let target = $(e.target);
let tag = target.prop('tagName').toLowerCase();
if (tag === 'a' || element.parent('a').length || target.parent('a').length) { return true; }
let wrapper = element.siblings('.gpm-details').find('.table-wrapper');
wrapper.slideToggle({
duration: 350,
complete: () => {
let visible = wrapper.is(':visible');
wrapper
.closest('tr')
.find('.gpm-details-expand i')
.removeClass('fa-chevron-' + (visible ? 'down' : 'up'))
.addClass('fa-chevron-' + (visible ? 'up' : 'down'));
}
});
});
// Removing plugin
$(document).on('click', '[data-plugin-action="remove-package"]', (event) => {
packages.handleRemovingPackage('plugin', event);
});
// Reinstall plugin
$(document).on('click', '[data-plugin-action="reinstall-package"]', (event) => {
packages.handleReinstallPackage('plugin', event);
});
$(document).on('click', '[data-plugin-action="remove-dependency-package"]', (event) => {
packages.handleRemovingDependency('plugin', event);
});
// Trigger the add new plugin / update plugin modal
$(document).on('click', '[data-plugin-action="start-package-installation"]', (event) => {
packages.handleGettingPackageDependencies('plugin', event, 'install');
});
// Trigger the update all plugins modal
$(document).on('click', '[data-plugin-action="start-packages-update"]', (event) => {
packages.handleGettingPackageDependencies('plugin', event);
});
// Install a plugin dependencies and the plugin
$(document).on('click', '[data-plugin-action="install-dependencies-and-package"]', (event) => {
packages.handleInstallingDependenciesAndPackage('plugin', event);
});
// Install a plugin
$(document).on('click', '[data-plugin-action="install-package"]', (event) => {
packages.handleInstallingPackage('plugin', event);
});
// Sort plugins/themes dropdown
$(document).on('change', '.sort-actions select', (event) => {
let direction = $('.sort-actions .sort-icon .fa').hasClass('fa-sort-amount-desc') ? 'desc' : 'asc';
let sorting = $(event.currentTarget).val();
packages.Sort[camelCase(`by-${sorting}`)](direction);
});
// Sort plugins/themes icon
$(document).on('click', '.sort-icon', (event) => {
let icon = $(event.currentTarget).find('.fa');
let current = icon.hasClass('fa-sort-amount-asc') ? 'asc' : 'desc';
let opposite = current === 'asc' ? 'desc' : 'asc';
icon.removeClass(`fa-sort-amount-${current}`).addClass(`fa-sort-amount-${opposite}`);
$('.sort-actions select').trigger('change');
});
// Filter plugin/theme
$(document).on('input', '[data-gpm-filter]', debounce((event) => {
let value = $($(event.currentTarget)).val();
let items = $('[data-gpm-plugin], [data-gpm-theme]');
items.hide().filter((index, item) => {
item = $(item);
return contains(item.data('gpm-plugin'), value) || contains(item.data('gpm-theme'), value) || contains(item.data('gpm-name').toLowerCase(), value.toLowerCase());
}).show();
}, 250));