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();