partkeepr

fork of partkeepr
git clone https://git.e1e0.net/partkeepr.git
Log | Files | Refs | Submodules | README | LICENSE

Ext.grid.Column-multipleRendererSupport.js (2568B)


      1 /**
      2  * Enhances grid columns to support multiple renderers.
      3  */
      4 Ext.define("PartKeepr.ExtJS.Enhancements.Grid.MultipleRendererSupport", {
      5     override: "Ext.grid.Column",
      6 
      7     rendererInstances: [],
      8 
      9     initComponent: function ()
     10     {
     11         var i, rendererDef, rendererClass;
     12 
     13         if (this.$className !== "Ext.grid.column.Column") {
     14             return this.callParent(arguments);
     15         }
     16 
     17         this.originalRenderer = this.renderer;
     18         this.originalScope = this.scope;
     19         this.scope = this;
     20         this.renderer = this.doRender;
     21 
     22 
     23         this.callParent(arguments);
     24 
     25 
     26         if (!this.renderers)
     27         {
     28             this.renderers = [];
     29         }
     30 
     31 
     32         if (!(this.renderers instanceof Array))
     33         {
     34             this.renderers = [this.renderers];
     35         }
     36 
     37         this.rendererInstances = [];
     38 
     39         for (i = 0; i < this.renderers.length; i++)
     40         {
     41             rendererDef = this.renderers[i];
     42 
     43             if (typeof(rendererDef) === "string")
     44             {
     45                 rendererClass = PartKeepr.Components.Grid.Renderers.RendererRegistry.lookupRenderer(rendererDef);
     46 
     47                 this.rendererInstances.push(Ext.create(rendererClass));
     48                 continue;
     49             }
     50 
     51             if (typeof(rendererDef) === "object" && rendererDef.rtype)
     52             {
     53                 rendererClass = PartKeepr.Components.Grid.Renderers.RendererRegistry.lookupRenderer(rendererDef.rtype);
     54                 this.rendererInstances.push(Ext.create(rendererClass, rendererDef));
     55                 continue;
     56             }
     57 
     58             if (rendererDef instanceof PartKeepr.Components.Grid.Renderers.AbstractRenderer)
     59             {
     60                 Ext.raise("Passing a renderer instance is prohibited!");
     61                 continue;
     62             }
     63 
     64             Ext.raise("No valid renderers definition found for entry:");
     65             Ext.raise(rendererDef);
     66         }
     67     },
     68     doRender: function (value, metaData, record, rowIndex, colIndex, store, view)
     69     {
     70         var i;
     71 
     72         value = Ext.util.Format.htmlEncode(value);
     73 
     74         for (i = 0; i < this.rendererInstances.length; i++)
     75         {
     76             value = this.rendererInstances[i].renderer.call(this.originalScope, value, metaData, record, rowIndex, colIndex, store, view, this.rendererInstances[i]);
     77         }
     78 
     79         if (typeof(this.originalRenderer) === "function")
     80         {
     81             return this.originalRenderer.call(this.originalScope, value, metaData, record, rowIndex, colIndex, store, view);
     82         } else {
     83             return value;
     84         }
     85     }
     86 });