123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- /*
- Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
- Available via Academic Free License >= 2.1 OR the modified BSD license.
- see: http://dojotoolkit.org/license for details
- */
- if(!dojo._hasResource["dojox.grid.enhanced._Plugin"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
- dojo._hasResource["dojox.grid.enhanced._Plugin"] = true;
- dojo.provide("dojox.grid.enhanced._Plugin");
- dojo.require("dojox.grid.EnhancedGrid");
- dojo.declare("dojox.grid.enhanced._Plugin", null, {
- // summary:
- // Base class for all plugins.
- //
- // description:
- // Provides common plugin functionality and basic life cycle management.
- //
- // Each concrete plugin must have a name field and is responsible for registering itself to the global plugin registry
- // e.g. for dnd plugin:
- // | dojox.grid.EnhancedGrid.registerPlugin("dnd" /*plugin name*/,
- // | dojox.grid.enhanced.plugins.DnD /*full class name of a plugin*/
- // | {"preInit": false, "dependency": ["nestedSorting"]} /*properties*/);
- //
- // [Keywords] of plugin properties(case sensitive)
- // - "preInit": boolean, whether a plugin should be created before EnhancedGrid.postCreate(),
- // false by default(plugins are created after EnhancedGrid.postCreate()).
- // - "dependency": array or string, plugin(s) indicated by "dependency" will be created before the current one.
- // Note: recursive cycle dependencies are not supported e.g. following dependency is invalid:
- // pluginA -> pluginB -> pluginA
- //
- // example:
- // 1. Customize default DnD plugin
- // | dojo.declare("mygrid.MyDnD", dojox.grid.enhanced.plugins.DnD, {
- // | name:"dnd" //still reuse the plugin name
- // | constructor: function(inGrid, option){ ... }
- // | });
- // | dojox.grid.EnhancedGrid.registerPlugin("dnd", mygrid.MyDnD);
- //
- // 2. Add new plugin - PluginA
- // | dojo.declare("mygrid.PluginA", dojox.grid.enhanced._Plugin, {
- // | name: "pA",
- // | constructor: function(inGrid, option){ ... }
- // | });
- // | dojox.grid.EnhancedGrid.registerPlugin("pA",mygrid.PluginA);
- //
- // 3. Use plugins
- // | dojo.require("mygrid.MyDnD");
- // | dojo.require("mygrid.PluginA");
-
- // | <script type="text/javascript">
- // | var grid = new dojox.grid.EnhancedGrid(
- // | {plugins: {dnd:true, pA:true}, ... }, dojo.byId("gridDiv"));
- // | grid.startup();
- // | </script>
- //name: String
- // Plugin name, e.g. 'nestedSorting', 'dnd'...
- name: 'plugin',
-
- //grid: Object
- // Grid that the plugin belongs to
- grid: null,
- //option: Object
- // Plugin properties - leveraged with default and user specified properties.
- // e.g. for dnd plugin, it may look like {"class": dojox.grid.enhanced.plugins.DnD, "dependency": ["nestedSorting"], ...}
- option: {},
- //_connects: Array
- // List of all connections.
- _connects: [],
-
- //_subscribes: Array
- // List of all subscribes.
- _subscribes: [],
- //privates: Object
- // Private properties/methods shouldn't be mixin-ed anytime.
- privates: {},
-
- constructor: function(inGrid, option){
- this.grid = inGrid;
- this.option = option;
- this._connects = [];
- this._subscribes = [];
- this.privates = dojo.mixin({},dojox.grid.enhanced._Plugin.prototype);
- this.init();
- },
-
- init: function(){},
-
- onPreInit: function(){},
-
- onPostInit: function(){},
-
- onStartUp: function(){},
-
- connect: function(obj, event, method){
- // summary:
- // Connects specified obj/event to specified method of this object.
- // example:
- // | var plugin = new dojox.grid.enhanced._Plugin(grid,"myPlugin",{...});
- // | // when foo.bar() is called, call the listener in the scope of plugin
- // | plugin.connect(foo, "bar", function(){
- // | console.debug(this.xxx());//"this" - plugin scope
- // | });
- var conn = dojo.connect(obj, event, this, method);
- this._connects.push(conn);
- return conn;
- },
- disconnect: function(handle){
- // summary:
- // Disconnects handle and removes it from connection list.
- dojo.some(this._connects, function(conn, i, conns){
- if(conn == handle){
- dojo.disconnect(handle);
- conns.splice(i, 1);
- return true;
- }
- return false;
- });
- },
- subscribe: function(topic, method){
- // summary:
- // Subscribes to the specified topic and calls the specified method
- // of this object.
- // example:
- // | var plugin = new dojox.grid.enhanced._Plugin(grid,"myPlugin",{...});
- // | // when /my/topic is published, call the subscriber in the scope of plugin
- // | // with passed parameter - "v"
- // | plugin.subscribe("/my/topic", function(v){
- // | console.debug(this.xxx(v));//"this" - plugin scope
- // | });
- var subscribe = dojo.subscribe(topic, this, method);
- this._subscribes.push(subscribe);
- return subscribe;
- },
- unsubscribe: function(handle){
- // summary:
- // Un-subscribes handle and removes it from subscriptions list.
- dojo.some(this._subscribes, function(subscribe, i, subscribes){
- if(subscribe == handle){
- dojo.unsubscribe(handle);
- subscribes.splice(i, 1);
- return true;
- }
- return false;
- });
- },
- onSetStore: function(store){
- // summary:
- // Called when store is changed.
- },
- destroy: function(){
- // summary:
- // Destroy all resources.
- dojo.forEach(this._connects, dojo.disconnect);
- dojo.forEach(this._subscribes, dojo.unsubscribe);
- delete this._connects;
- delete this._subscribes;
- delete this.option;
- delete this.privates;
- //console.log('Plugin [', this.name, '].destroy() executed!');
- }
- });
- //Each plugin is responsible for registering itself
- // e.g. for DnD plugin(name:'dnd'):
- // | dojox.grid.EnhancedGrid.registerPlugin(dojox.grid.enhanced.plugins.DnD/*class*/,
- // | {"dependency": ["nestedSorting"]}/*Optional - properties*/);
- }
|