JAVASCRIPT   13

Plugin

Guest on 29th April 2022 01:20:46 AM

  1. (function (global, factory) {
  2.   if (typeof define === "function" && define.amd) {
  3.     define('/Plugin', ['exports', 'jquery'], factory);
  4.   } else if (typeof exports !== "undefined") {
  5.     factory(exports, require('jquery'));
  6.   } else {
  7.     var mod = {
  8.       exports: {}
  9.     };
  10.     factory(mod.exports, global.jQuery);
  11.     global.Plugin = mod.exports;
  12.   }
  13. })(this, function (exports, _jquery) {
  14.   'use strict';
  15.  
  16.   Object.defineProperty(exports, "__esModule", {
  17.     value: true
  18.   });
  19.   exports.pluginFactory = exports.getDefaults = exports.getPlugin = exports.getPluginAPI = exports.Plugin = undefined;
  20.  
  21.   var _jquery2 = babelHelpers.interopRequireDefault(_jquery);
  22.  
  23.   var plugins = {};
  24.   var apis = {};
  25.  
  26.   var Plugin = function () {
  27.     function Plugin($el) {
  28.       var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  29.       babelHelpers.classCallCheck(this, Plugin);
  30.  
  31.       this.name = this.getName();
  32.       this.$el = $el;
  33.       this.options = options;
  34.       this.isRendered = false;
  35.     }
  36.  
  37.     babelHelpers.createClass(Plugin, [{
  38.       key: 'getName',
  39.       value: function getName() {
  40.         return 'plugin';
  41.       }
  42.     }, {
  43.       key: 'render',
  44.       value: function render() {
  45.         if (_jquery2.default.fn[this.name]) {
  46.           this.$el[this.name](this.options);
  47.         } else {
  48.           return false;
  49.         }
  50.       }
  51.     }, {
  52.       key: 'initialize',
  53.       value: function initialize() {
  54.         if (this.isRendered) {
  55.           return false;
  56.         }
  57.         this.render();
  58.         this.isRendered = true;
  59.       }
  60.     }], [{
  61.       key: 'getDefaults',
  62.       value: function getDefaults() {
  63.         return {};
  64.       }
  65.     }, {
  66.       key: 'register',
  67.       value: function register(name, obj) {
  68.         if (typeof obj === 'undefined') {
  69.           return;
  70.         }
  71.  
  72.         plugins[name] = obj;
  73.  
  74.         if (typeof obj.api !== 'undefined') {
  75.           Plugin.registerApi(name, obj);
  76.         }
  77.       }
  78.     }, {
  79.       key: 'registerApi',
  80.       value: function registerApi(name, obj) {
  81.         var api = obj.api();
  82.  
  83.         if (typeof api === 'string') {
  84.           (function () {
  85.             var api = obj.api().split('|');
  86.             var event = api[0] + ('.plugin.' + name);
  87.             var func = api[1] || 'render';
  88.  
  89.             var callback = function callback(e) {
  90.               var $el = (0, _jquery2.default)(this);
  91.               var plugin = $el.data('pluginInstance');
  92.  
  93.               if (!plugin) {
  94.                 plugin = new obj($el, _jquery2.default.extend(true, {}, getDefaults(name), $el.data()));
  95.                 plugin.initialize();
  96.                 $el.data('pluginInstance', plugin);
  97.               }
  98.  
  99.               plugin[func](e);
  100.             };
  101.  
  102.             apis[name] = function (selector, context) {
  103.               if (context) {
  104.                 (0, _jquery2.default)(context).off(event);
  105.                 (0, _jquery2.default)(context).on(event, selector, callback);
  106.               } else {
  107.                 (0, _jquery2.default)(selector).on(event, callback);
  108.               }
  109.             };
  110.           })();
  111.         } else if (typeof api === 'function') {
  112.           apis[name] = api;
  113.         }
  114.       }
  115.     }]);
  116.     return Plugin;
  117.   }();
  118.  
  119.   exports.default = Plugin;
  120.  
  121.  
  122.   function getPluginAPI(name) {
  123.     if (typeof name === 'undefined') {
  124.       return apis;
  125.     } else {
  126.       return apis[name];
  127.     }
  128.   }
  129.  
  130.   function getPlugin(name) {
  131.     if (typeof plugins[name] !== 'undefined') {
  132.       return plugins[name];
  133.     } else {
  134.       console.warn('Plugin:' + name + ' has no warpped class.');
  135.       return false;
  136.     }
  137.   }
  138.  
  139.   function getDefaults(name) {
  140.     var PluginClass = getPlugin(name);
  141.  
  142.     if (PluginClass) {
  143.       return PluginClass.getDefaults();
  144.     } else {
  145.       return {};
  146.     }
  147.   }
  148.  
  149.   function pluginFactory(name, $el) {
  150.     var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
  151.  
  152.     var PluginClass = getPlugin(name);
  153.  
  154.     if (PluginClass && typeof PluginClass.api === 'undefined') {
  155.       return new PluginClass($el, _jquery2.default.extend(true, {}, getDefaults(name), options));
  156.     } else if (_jquery2.default.fn[name]) {
  157.       var plugin = new Plugin($el, options);
  158.       plugin.getName = function () {
  159.         return name;
  160.       };
  161.       plugin.name = name;
  162.       return plugin;
  163.     } else if (typeof PluginClass.api !== 'undefined') {
  164.       // console.log('Plugin:' + name + ' use api render.');
  165.       return false;
  166.     } else {
  167.       console.warn('Plugin:' + name + ' script is not loaded.');
  168.       return false;
  169.     }
  170.   }
  171.  
  172.   exports.Plugin = Plugin;
  173.   exports.getPluginAPI = getPluginAPI;
  174.   exports.getPlugin = getPlugin;
  175.   exports.getDefaults = getDefaults;
  176.   exports.pluginFactory = pluginFactory;
  177. });

Raw Paste


Login or Register to edit or fork this paste. It's free.