mirror of
https://github.com/svg/svgo.git
synced 2025-12-03 21:11:14 +03:00
go!
This commit is contained in:
84
lib/plugins.js
Normal file
84
lib/plugins.js
Normal file
@@ -0,0 +1,84 @@
|
||||
var INHERIT = require('inherit');
|
||||
|
||||
module.exports = function(json, plugins, pluginsEngine) {
|
||||
|
||||
var engine = new (pluginsEngine || PluginsEngine)();
|
||||
|
||||
json = engine.pass(json, plugins.directPass);
|
||||
json = engine.pass(json, plugins.reversePass, true);
|
||||
|
||||
return json;
|
||||
|
||||
};
|
||||
|
||||
var PluginsEngine = exports.PluginsEngine = INHERIT({
|
||||
|
||||
_makePluginsList: function(arr) {
|
||||
|
||||
return arr.map(function(plugin) {
|
||||
plugin.fn = require('../plugins/' + plugin.name)[plugin.name];
|
||||
|
||||
return plugin;
|
||||
});
|
||||
|
||||
},
|
||||
|
||||
pass: function(json, plugins, reverse) {
|
||||
|
||||
plugins = this._makePluginsList(plugins);
|
||||
|
||||
function monkeys(data) {
|
||||
|
||||
data.content = data.content.filter(function(item) {
|
||||
|
||||
if (reverse && item.content) {
|
||||
monkeys.call(this, item);
|
||||
}
|
||||
|
||||
var filter = true;
|
||||
|
||||
plugins.forEach(function(plugin) {
|
||||
if (plugin.active && plugin.fn(item, plugin.params) === false) {
|
||||
filter = false;
|
||||
}
|
||||
});
|
||||
|
||||
if (!reverse && item.content) {
|
||||
monkeys.call(this, item);
|
||||
}
|
||||
|
||||
return filter;
|
||||
|
||||
}, this);
|
||||
|
||||
return data;
|
||||
|
||||
};
|
||||
|
||||
return monkeys.call(this, json);
|
||||
|
||||
},
|
||||
|
||||
full: function() {
|
||||
|
||||
this.fullList.forEach(function(plugin) {
|
||||
if (plugin.active) {
|
||||
json = plugin.fn(json, plugin.params);
|
||||
}
|
||||
});
|
||||
|
||||
return json;
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
/*
|
||||
var MyPluginsEngine = INHERIT(PluginsEngine, {
|
||||
|
||||
__constructor: function(options) {
|
||||
this.__base();
|
||||
}
|
||||
|
||||
});
|
||||
*/
|
||||
Reference in New Issue
Block a user