Plugin.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  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. Object.defineProperty(_exports, "__esModule", {
  16. value: true
  17. });
  18. _exports.getPluginAPI = getPluginAPI;
  19. _exports.getPlugin = getPlugin;
  20. _exports.getDefaults = getDefaults;
  21. _exports.pluginFactory = pluginFactory;
  22. _exports.default = _exports.Plugin = void 0;
  23. _jquery = babelHelpers.interopRequireDefault(_jquery);
  24. var plugins = {};
  25. var apis = {};
  26. var Plugin =
  27. /*#__PURE__*/
  28. function () {
  29. function Plugin($el) {
  30. var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  31. babelHelpers.classCallCheck(this, Plugin);
  32. this.name = this.getName();
  33. this.$el = $el;
  34. this.options = options;
  35. this.isRendered = false;
  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 (_jquery.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. plugins[name] = obj;
  72. if (typeof obj.api !== 'undefined') {
  73. Plugin.registerApi(name, obj);
  74. }
  75. }
  76. }, {
  77. key: "registerApi",
  78. value: function registerApi(name, obj) {
  79. var api = obj.api();
  80. if (typeof api === 'string') {
  81. var _api = obj.api().split('|');
  82. var event = "".concat(_api[0], ".plugin.").concat(name);
  83. var func = _api[1] || 'render';
  84. var callback = function callback(e) {
  85. var $el = (0, _jquery.default)(this);
  86. var plugin = $el.data('pluginInstance');
  87. if (!plugin) {
  88. plugin = new obj($el, _jquery.default.extend(true, {}, getDefaults(name), $el.data()));
  89. plugin.initialize();
  90. $el.data('pluginInstance', plugin);
  91. }
  92. plugin[func](e);
  93. };
  94. apis[name] = function (selector, context) {
  95. if (context) {
  96. (0, _jquery.default)(context).off(event);
  97. (0, _jquery.default)(context).on(event, selector, callback);
  98. } else {
  99. (0, _jquery.default)(selector).on(event, callback);
  100. }
  101. };
  102. } else if (typeof api === 'function') {
  103. apis[name] = api;
  104. }
  105. }
  106. }]);
  107. return Plugin;
  108. }();
  109. _exports.Plugin = Plugin;
  110. function getPluginAPI(name) {
  111. if (typeof name === 'undefined') {
  112. return apis;
  113. }
  114. return apis[name];
  115. }
  116. function getPlugin(name) {
  117. if (typeof plugins[name] !== 'undefined') {
  118. return plugins[name];
  119. }
  120. console.warn("Plugin:".concat(name, " has no warpped class."));
  121. return false;
  122. }
  123. function getDefaults(name) {
  124. var PluginClass = getPlugin(name);
  125. if (PluginClass) {
  126. return PluginClass.getDefaults();
  127. }
  128. return {};
  129. }
  130. function pluginFactory(name, $el) {
  131. var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
  132. var PluginClass = getPlugin(name);
  133. if (PluginClass && typeof PluginClass.api === 'undefined') {
  134. return new PluginClass($el, _jquery.default.extend(true, {}, getDefaults(name), options));
  135. } else if (_jquery.default.fn[name]) {
  136. var plugin = new Plugin($el, options);
  137. plugin.getName = function () {
  138. return name;
  139. };
  140. plugin.name = name;
  141. return plugin;
  142. } else if (typeof PluginClass.api !== 'undefined') {
  143. // console.log('Plugin:' + name + ' use api render.');
  144. return false;
  145. }
  146. console.warn("Plugin:".concat(name, " script is not loaded."));
  147. return false;
  148. }
  149. var _default = Plugin;
  150. _exports.default = _default;
  151. });