base.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. define(function(require, exports, module) {
  2. "use strict";
  3. var Util = require('./util');
  4. var Events = require('./events');
  5. /**
  6. @constructor
  7. @mixes Events
  8. */
  9. var Base = function() {}
  10. Util.mix(Base.prototype, Events);
  11. Util.mix(Base.prototype, {
  12. /**
  13. * @memberof Base
  14. * @param {object} plugin plug a plugin
  15. */
  16. plug: function(plugin) {
  17. var self = this;
  18. if (!plugin || !plugin.pluginId) return;
  19. if (!self.__plugins) {
  20. self.__plugins = [];
  21. }
  22. var __plugin = self.getPlugin(plugin.pluginId);
  23. __plugin && self.unplug(plugin.pluginId);
  24. plugin.pluginInitializer(self);
  25. self.__plugins.push(plugin);
  26. return self;
  27. },
  28. /**
  29. * @memberof Base
  30. * @param {object|string} plugin unplug a plugin by pluginId or plugin instance
  31. */
  32. unplug: function(plugin) {
  33. var self = this;
  34. if (!plugin || !self.__plugins) return;
  35. var _plugin = typeof plugin == "string" ? self.getPlugin(plugin) : plugin;
  36. _plugin.pluginDestructor(self);
  37. for (var i = 0, l = self.__plugins.length;i < l;i++) {
  38. if (self.__plugins[i] == _plugin) {
  39. return self.__plugins.splice(i, 1);
  40. }
  41. }
  42. },
  43. /**
  44. * @memberof Base
  45. * @param {object|string} plugin get plugin by pluginId
  46. */
  47. getPlugin: function(pluginId) {
  48. var self = this;
  49. var plugins = [];
  50. if(!self.__plugins) return;
  51. for (var i = 0, l = self.__plugins.length;i < l;i++) {
  52. if (self.__plugins[i] && self.__plugins[i].pluginId == pluginId) {
  53. plugins.push(self.__plugins[i])
  54. }
  55. }
  56. return plugins.length > 1 ? plugins : plugins[0] || null;
  57. }
  58. });
  59. if (typeof module == 'object' && module.exports) {
  60. module.exports = Base;
  61. }
  62. /** ignored by jsdoc **/
  63. else {
  64. return Base;
  65. }
  66. });