initial commit
This commit is contained in:
+173
@@ -0,0 +1,173 @@
|
||||
(function (global, factory) {
|
||||
if (typeof define === "function" && define.amd) {
|
||||
define('/Plugin', ['exports', 'jquery'], factory);
|
||||
} else if (typeof exports !== "undefined") {
|
||||
factory(exports, require('jquery'));
|
||||
} else {
|
||||
var mod = {
|
||||
exports: {}
|
||||
};
|
||||
factory(mod.exports, global.jQuery);
|
||||
global.Plugin = mod.exports;
|
||||
}
|
||||
})(this, function (exports, _jquery) {
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.pluginFactory = exports.getDefaults = exports.getPlugin = exports.getPluginAPI = exports.Plugin = undefined;
|
||||
|
||||
var _jquery2 = babelHelpers.interopRequireDefault(_jquery);
|
||||
|
||||
var plugins = {};
|
||||
var apis = {};
|
||||
|
||||
var Plugin = function () {
|
||||
function Plugin($el) {
|
||||
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
||||
babelHelpers.classCallCheck(this, Plugin);
|
||||
|
||||
this.name = this.getName();
|
||||
this.$el = $el;
|
||||
this.options = options;
|
||||
this.isRendered = false;
|
||||
}
|
||||
|
||||
babelHelpers.createClass(Plugin, [{
|
||||
key: 'getName',
|
||||
value: function getName() {
|
||||
return 'plugin';
|
||||
}
|
||||
}, {
|
||||
key: 'render',
|
||||
value: function render() {
|
||||
if (_jquery2.default.fn[this.name]) {
|
||||
this.$el[this.name](this.options);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}, {
|
||||
key: 'initialize',
|
||||
value: function initialize() {
|
||||
if (this.isRendered) {
|
||||
return false;
|
||||
}
|
||||
this.render();
|
||||
this.isRendered = true;
|
||||
}
|
||||
}], [{
|
||||
key: 'getDefaults',
|
||||
value: function getDefaults() {
|
||||
return {};
|
||||
}
|
||||
}, {
|
||||
key: 'register',
|
||||
value: function register(name, obj) {
|
||||
if (typeof obj === 'undefined') {
|
||||
return;
|
||||
}
|
||||
|
||||
plugins[name] = obj;
|
||||
|
||||
if (typeof obj.api !== 'undefined') {
|
||||
Plugin.registerApi(name, obj);
|
||||
}
|
||||
}
|
||||
}, {
|
||||
key: 'registerApi',
|
||||
value: function registerApi(name, obj) {
|
||||
var api = obj.api();
|
||||
|
||||
if (typeof api === 'string') {
|
||||
var _api = obj.api().split('|');
|
||||
var event = _api[0] + ('.plugin.' + name);
|
||||
var func = _api[1] || 'render';
|
||||
|
||||
var callback = function callback(e) {
|
||||
var $el = (0, _jquery2.default)(this);
|
||||
var plugin = $el.data('pluginInstance');
|
||||
|
||||
if (!plugin) {
|
||||
plugin = new obj($el, _jquery2.default.extend(true, {}, getDefaults(name), $el.data()));
|
||||
plugin.initialize();
|
||||
$el.data('pluginInstance', plugin);
|
||||
}
|
||||
|
||||
plugin[func](e);
|
||||
};
|
||||
|
||||
apis[name] = function (selector, context) {
|
||||
if (context) {
|
||||
(0, _jquery2.default)(context).off(event);
|
||||
(0, _jquery2.default)(context).on(event, selector, callback);
|
||||
} else {
|
||||
(0, _jquery2.default)(selector).on(event, callback);
|
||||
}
|
||||
};
|
||||
} else if (typeof api === 'function') {
|
||||
apis[name] = api;
|
||||
}
|
||||
}
|
||||
}]);
|
||||
return Plugin;
|
||||
}();
|
||||
|
||||
function getPluginAPI(name) {
|
||||
if (typeof name === 'undefined') {
|
||||
return apis;
|
||||
} else {
|
||||
return apis[name];
|
||||
}
|
||||
}
|
||||
|
||||
function getPlugin(name) {
|
||||
if (typeof plugins[name] !== 'undefined') {
|
||||
return plugins[name];
|
||||
} else {
|
||||
console.warn('Plugin:' + name + ' has no warpped class.');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function getDefaults(name) {
|
||||
var PluginClass = getPlugin(name);
|
||||
|
||||
if (PluginClass) {
|
||||
return PluginClass.getDefaults();
|
||||
} else {
|
||||
return {};
|
||||
}
|
||||
}
|
||||
|
||||
function pluginFactory(name, $el) {
|
||||
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
||||
|
||||
var PluginClass = getPlugin(name);
|
||||
|
||||
if (PluginClass && typeof PluginClass.api === 'undefined') {
|
||||
return new PluginClass($el, _jquery2.default.extend(true, {}, getDefaults(name), options));
|
||||
} else if (_jquery2.default.fn[name]) {
|
||||
var plugin = new Plugin($el, options);
|
||||
plugin.getName = function () {
|
||||
return name;
|
||||
};
|
||||
plugin.name = name;
|
||||
return plugin;
|
||||
} else if (typeof PluginClass.api !== 'undefined') {
|
||||
// console.log('Plugin:' + name + ' use api render.');
|
||||
return false;
|
||||
} else {
|
||||
console.warn('Plugin:' + name + ' script is not loaded.');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
exports.Plugin = Plugin;
|
||||
exports.getPluginAPI = getPluginAPI;
|
||||
exports.getPlugin = getPlugin;
|
||||
exports.getDefaults = getDefaults;
|
||||
exports.pluginFactory = pluginFactory;
|
||||
exports.default = Plugin;
|
||||
});
|
||||
Reference in New Issue
Block a user