diff --git a/themes/grav/app/plugins/index.js b/themes/grav/app/plugins/index.js index 6d691daa..1ea16443 100644 --- a/themes/grav/app/plugins/index.js +++ b/themes/grav/app/plugins/index.js @@ -1,7 +1,7 @@ /* eslint-disable */ import $ from 'jquery'; import { config } from 'grav-config'; -import request from '../utils/request'; +import packages from '../utils/packages'; // Plugins sliders details $('.gpm-name, .gpm-actions').on('click', function(e) { @@ -27,80 +27,21 @@ $('.gpm-name, .gpm-actions').on('click', function(e) { }); // Removing plugin flow - -// Step 1: remove the actual plugin that I want to remove $(document).on('click', '[data-plugin-action="remove-plugin"]', (event) => { let slug = $(event.target).data('plugin-slug'); - let url = `${config.base_url_relative}/plugins.json/task${config.param_sep}removePlugin/admin-nonce${config.param_sep}${config.admin_nonce}`; event.preventDefault(); event.stopPropagation(); - request(url, { - method: 'post', - body: { - plugin: slug - } - }, (response) => { - if (response.status == 'success') { - $('.remove-plugin-confirm').addClass('hidden'); - - if (response.dependencies.length > 0) { - addDependenciesToList(response.dependencies); - $('.remove-plugin-dependencies').removeClass('hidden'); - } else { - $('.remove-plugin-done').removeClass('hidden'); - getBackToPluginsList(); - } - - //The plugin was removed. When the modal closes, move to the plugins list - $(document).on('closing', '[data-remodal-id="delete-plugin"]', function (e) { - getBackToPluginsList(); - }); - } - }); + packages.removePackage(slug); }); -var getBackToPluginsList = function getBackToPluginsList() { - window.location.href = `${config.base_url_relative}/plugins`; -}; - -var addDependencyToList = function addDependencyToList(dependency, slug = '') { - var container = $('.plugin-dependencies-container'); - var text = `${dependency} Remove`; - if (slug) { - text += ` (was needed by ${slug})`; - } - - container.append(`
  • ${text}
  • `); -}; - -var addDependenciesToList = function addDependenciesToList(dependencies, slug = '') { - dependencies.forEach(function(dependency) { - addDependencyToList(dependency, slug); - }); -}; - $(document).on('click', '[data-plugin-action="remove-dependency"]', (event) => { let slug = $(event.target).data('dependency-slug'); - let url = `${config.base_url_relative}/plugins.json/task${config.param_sep}removePlugin/admin-nonce${config.param_sep}${config.admin_nonce}`; + let button = $(event.target); event.preventDefault(); event.stopPropagation(); - request(url, { - method: 'post', - body: { - plugin: slug - } - }, (response) => { - if (response.status == 'success') { - $(event.target).removeClass('button'); - $(event.target).replaceWith($('Removed successfully')); - - if (response.dependencies.length > 0) { - addDependenciesToList(response.dependencies, slug); - } - } - }); + packages.removeDependency(slug, button); }); diff --git a/themes/grav/app/utils/packages.js b/themes/grav/app/utils/packages.js new file mode 100644 index 00000000..08c7ec3e --- /dev/null +++ b/themes/grav/app/utils/packages.js @@ -0,0 +1,77 @@ +/* eslint-disable */ +import { config } from 'grav-config'; +import request from '../utils/request'; + +class Packages { + + getBackToPluginsList() { + window.location.href = `${config.base_url_relative}/plugins`; + } + + addDependencyToList(dependency, slug = '') { + let container = $('.plugin-dependencies-container'); + let text = `${dependency} Remove`; + + if (slug) { + text += ` (was needed by ${slug})`; + } + + container.append(`
  • ${text}
  • `); + } + + addDependenciesToList(dependencies, slug = '') { + dependencies.forEach((dependency) => { + this.addDependencyToList(dependency, slug); + }); + } + + removePackage(slug) { + let url = `${config.base_url_relative}/plugins.json/task${config.param_sep}removePlugin/admin-nonce${config.param_sep}${config.admin_nonce}`; + + request(url, { + method: 'post', + body: { + plugin: slug + } + }, (response) => { + if (response.status == 'success') { + $('.remove-plugin-confirm').addClass('hidden'); + + if (response.dependencies.length > 0) { + this.addDependenciesToList(response.dependencies); + $('.remove-plugin-dependencies').removeClass('hidden'); + } else { + $('.remove-plugin-done').removeClass('hidden'); + this.getBackToPluginsList(); + } + + //The plugin was removed. When the modal closes, move to the plugins list + $(document).on('closing', '[data-remodal-id="delete-plugin"]', (e) => { + this.getBackToPluginsList(); + }); + } + }); + } + + removeDependency(slug, button) { + let url = `${config.base_url_relative}/plugins.json/task${config.param_sep}removePlugin/admin-nonce${config.param_sep}${config.admin_nonce}`; + + request(url, { + method: 'post', + body: { + plugin: slug + } + }, (response) => { + if (response.status == 'success') { + button.removeClass('button'); + button.replaceWith($('Removed successfully')); + + if (response.dependencies.length > 0) { + this.addDependenciesToList(response.dependencies, slug); + } + } + }); + } +} + +export default new Packages();