mirror of
				http://git.whoc.org.uk/git/password-manager.git
				synced 2025-10-30 19:07:35 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			326 lines
		
	
	
		
			9.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			326 lines
		
	
	
		
			9.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /**
 | |
|  * @class YAHOO.ext.grid.DefaultColumnModel
 | |
|  * @extends YAHOO.ext.grid.AbstractColumnModel
 | |
|  * This is the default implementation of a ColumnModel used by the Grid. It defines
 | |
|  * the columns in the grid.
 | |
|  * <br>Usage:<br>
 | |
|  <pre><code>
 | |
|  var sort = YAHOO.ext.grid.DefaultColumnModel.sortTypes;
 | |
|  var myColumns = [
 | |
| 	{header: "Ticker", width: 60, sortable: true, sortType: sort.asUCString}, 
 | |
| 	{header: "Company Name", width: 150, sortable: true, sortType: sort.asUCString}, 
 | |
| 	{header: "Market Cap.", width: 100, sortable: true, sortType: sort.asFloat}, 
 | |
| 	{header: "$ Sales", width: 100, sortable: true, sortType: sort.asFloat, renderer: money}, 
 | |
| 	{header: "Employees", width: 100, sortable: true, sortType: sort.asFloat}
 | |
|  ];
 | |
|  var colModel = new YAHOO.ext.grid.DefaultColumnModel(myColumns);
 | |
|  </code></pre>
 | |
|  * @constructor
 | |
|  * @param {Object} config The config object
 | |
| */
 | |
| YAHOO.ext.grid.DefaultColumnModel = function(config){
 | |
| 	YAHOO.ext.grid.DefaultColumnModel.superclass.constructor.call(this);
 | |
|     /**
 | |
|      * The config passed into the constructor
 | |
|      */
 | |
|     this.config = config;
 | |
|     
 | |
|     /**
 | |
|      * The width of columns which have no width specified (defaults to 100)
 | |
|      * @type Number
 | |
|      */
 | |
|     this.defaultWidth = 100;
 | |
|     /**
 | |
|      * Default sortable of columns which have no sortable specified (defaults to false)
 | |
|      * @type Boolean
 | |
|      */
 | |
|     this.defaultSortable = false;
 | |
| };
 | |
| YAHOO.extendX(YAHOO.ext.grid.DefaultColumnModel, YAHOO.ext.grid.AbstractColumnModel, {
 | |
|     
 | |
|     /**
 | |
|      * Returns the number of columns.
 | |
|      * @return {Number}
 | |
|      */
 | |
|     getColumnCount : function(){
 | |
|         return this.config.length;
 | |
|     },
 | |
|         
 | |
|     /**
 | |
|      * Returns true if the specified column is sortable.
 | |
|      * @param {Number} col The column index
 | |
|      * @return {Boolean}
 | |
|      */
 | |
|     isSortable : function(col){
 | |
|         if(typeof this.config[col].sortable == 'undefined'){
 | |
|             return this.defaultSortable;
 | |
|         }
 | |
|         return this.config[col].sortable;
 | |
|     },
 | |
|         
 | |
|     /**
 | |
|      * Returns the sorting comparison function defined for the column (defaults to sortTypes.none).
 | |
|      * @param {Number} col The column index
 | |
|      * @return {Function}
 | |
|      */
 | |
|     getSortType : function(col){
 | |
|         if(!this.dataMap){
 | |
|             // build a lookup so we don't search every time
 | |
|             var map = [];
 | |
|             for(var i = 0, len = this.config.length; i < len; i++){
 | |
|                 map[this.getDataIndex(i)] = i;
 | |
|             }
 | |
|             this.dataMap = map;
 | |
|         }
 | |
|         col = this.dataMap[col];
 | |
|         if(!this.config[col].sortType){
 | |
|             return YAHOO.ext.grid.DefaultColumnModel.sortTypes.none;
 | |
|         }
 | |
|         return this.config[col].sortType;
 | |
|     },
 | |
|         
 | |
|     /**
 | |
|      * Sets the sorting comparison function for a column.
 | |
|      * @param {Number} col The column index
 | |
|      * @param {Function} fn
 | |
|      */
 | |
|     setSortType : function(col, fn){
 | |
|         this.config[col].sortType = fn;
 | |
|     },
 | |
|         
 | |
|     
 | |
|     /**
 | |
|      * Returns the rendering (formatting) function defined for the column.
 | |
|      * @param {Number} col The column index
 | |
|      * @return {Function}
 | |
|      */
 | |
|     getRenderer : function(col){
 | |
|         if(!this.config[col].renderer){
 | |
|             return YAHOO.ext.grid.DefaultColumnModel.defaultRenderer;
 | |
|         }
 | |
|         return this.config[col].renderer;
 | |
|     },
 | |
|         
 | |
|     /**
 | |
|      * Sets the rendering (formatting) function for a column.
 | |
|      * @param {Number} col The column index
 | |
|      * @param {Function} fn
 | |
|      */
 | |
|     setRenderer : function(col, fn){
 | |
|         this.config[col].renderer = fn;
 | |
|     },
 | |
|         
 | |
|     /**
 | |
|      * Returns the width for the specified column.
 | |
|      * @param {Number} col The column index
 | |
|      * @return {Number}
 | |
|      */
 | |
|     getColumnWidth : function(col){
 | |
|         return this.config[col].width || this.defaultWidth;
 | |
|     },
 | |
|         
 | |
|     /**
 | |
|      * Sets the width for a column.
 | |
|      * @param {Number} col The column index
 | |
|      * @param {Number} width The new width
 | |
|      */
 | |
|     setColumnWidth : function(col, width, suppressEvent){
 | |
|         this.config[col].width = width;
 | |
|         this.totalWidth = null;
 | |
|         if(!suppressEvent){
 | |
|              this.onWidthChange.fireDirect(this, col, width);
 | |
|         }
 | |
|     },
 | |
|         
 | |
|     /**
 | |
|      * Returns the total width of all columns.
 | |
|      * @param {Boolean} includeHidden True to include hidden column widths
 | |
|      * @return {Number}
 | |
|      */
 | |
|     getTotalWidth : function(includeHidden){
 | |
|         if(!this.totalWidth){
 | |
|             this.totalWidth = 0;
 | |
|             for(var i = 0; i < this.config.length; i++){
 | |
|                 if(includeHidden || !this.isHidden(i)){
 | |
|                     this.totalWidth += this.getColumnWidth(i);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         return this.totalWidth;
 | |
|     },
 | |
|         
 | |
|     /**
 | |
|      * Returns the header for the specified column.
 | |
|      * @param {Number} col The column index
 | |
|      * @return {String}
 | |
|      */
 | |
|     getColumnHeader : function(col){
 | |
|         return this.config[col].header;
 | |
|     },
 | |
|          
 | |
|     /**
 | |
|      * Sets the header for a column.
 | |
|      * @param {Number} col The column index
 | |
|      * @param {String} header The new header
 | |
|      */
 | |
|     setColumnHeader : function(col, header){
 | |
|         this.config[col].header = header;
 | |
|         this.onHeaderChange.fireDirect(this, col, header);
 | |
|     },
 | |
|     
 | |
|     /**
 | |
|      * Returns the tooltip for the specified column.
 | |
|      * @param {Number} col The column index
 | |
|      * @return {String}
 | |
|      */
 | |
|     getColumnTooltip : function(col){
 | |
|             return this.config[col].tooltip;
 | |
|     },
 | |
|     /**
 | |
|      * Sets the tooltip for a column.
 | |
|      * @param {Number} col The column index
 | |
|      * @param {String} tooltip The new tooltip
 | |
|      */
 | |
|     setColumnTooltip : function(col, header){
 | |
|             this.config[col].tooltip = tooltip;
 | |
|     },
 | |
|         
 | |
|     /**
 | |
|      * Returns the dataIndex for the specified column.
 | |
|      * @param {Number} col The column index
 | |
|      * @return {Number}
 | |
|      */
 | |
|     getDataIndex : function(col){
 | |
|         if(typeof this.config[col].dataIndex != 'number'){
 | |
|             return col;
 | |
|         }
 | |
|         return this.config[col].dataIndex;
 | |
|     },
 | |
|          
 | |
|     /**
 | |
|      * Sets the dataIndex for a column.
 | |
|      * @param {Number} col The column index
 | |
|      * @param {Number} dataIndex The new dataIndex
 | |
|      */
 | |
|     setDataIndex : function(col, dataIndex){
 | |
|         this.config[col].dataIndex = dataIndex;
 | |
|     },
 | |
|     /**
 | |
|      * Returns true if the cell is editable.
 | |
|      * @param {Number} colIndex The column index
 | |
|      * @param {Number} rowIndex The row index
 | |
|      * @return {Boolean}
 | |
|      */
 | |
|     isCellEditable : function(colIndex, rowIndex){
 | |
|         return this.config[colIndex].editable || (typeof this.config[colIndex].editable == 'undefined' && this.config[colIndex].editor);
 | |
|     },
 | |
|     
 | |
|     /**
 | |
|      * Returns the editor defined for the cell/column.
 | |
|      * @param {Number} colIndex The column index
 | |
|      * @param {Number} rowIndex The row index
 | |
|      * @return {Object}
 | |
|      */
 | |
|     getCellEditor : function(colIndex, rowIndex){
 | |
|         return this.config[colIndex].editor;
 | |
|     },
 | |
|        
 | |
|     /**
 | |
|      * Sets if a column is editable.
 | |
|      * @param {Number} col The column index
 | |
|      * @param {Boolean} editable True if the column is editable
 | |
|      */
 | |
|     setEditable : function(col, editable){
 | |
|         this.config[col].editable = editable;
 | |
|     },
 | |
|     
 | |
|     
 | |
|     /**
 | |
|      * Returns true if the column is hidden.
 | |
|      * @param {Number} colIndex The column index
 | |
|      * @return {Boolean}
 | |
|      */
 | |
|     isHidden : function(colIndex){
 | |
|         return this.config[colIndex].hidden;
 | |
|     },
 | |
|     
 | |
|     
 | |
|     /**
 | |
|      * Returns true if the column width cannot be changed
 | |
|      */
 | |
|     isFixed : function(colIndex){
 | |
|         return this.config[colIndex].fixed;
 | |
|     },
 | |
|     
 | |
|     /**
 | |
|      * Returns true if the column cannot be resized
 | |
|      * @return {Boolean}
 | |
|      */
 | |
|     isResizable : function(colIndex){
 | |
|         return this.config[colIndex].resizable !== false;
 | |
|     },
 | |
|     /**
 | |
|      * Sets if a column is hidden.
 | |
|      * @param {Number} colIndex The column index
 | |
|      */
 | |
|     setHidden : function(colIndex, hidden){
 | |
|         this.config[colIndex].hidden = hidden;
 | |
|         this.totalWidth = null;
 | |
|         this.fireHiddenChange(colIndex, hidden);
 | |
|     },
 | |
|     
 | |
|     /**
 | |
|      * Sets the editor for a column.
 | |
|      * @param {Number} col The column index
 | |
|      * @param {Object} editor The editor object
 | |
|      */
 | |
|     setEditor : function(col, editor){
 | |
|         this.config[col].editor = editor;
 | |
|     }
 | |
| });
 | |
| 
 | |
| /**
 | |
|  * Defines the default sorting (casting?) comparison functions used when sorting data:
 | |
|  * <br>  sortTypes.none - sorts data as it is without casting or parsing (the default)
 | |
|  * <br>  sortTypes.asUCString - case insensitive string
 | |
|  * <br>  sortTypes.asDate - attempts to parse data as a date
 | |
|  * <br>  sortTypes.asFloat
 | |
|  * <br>  sortTypes.asInt
 | |
|  * @static
 | |
|  */
 | |
| YAHOO.ext.grid.DefaultColumnModel.sortTypes = {
 | |
|     none : function(s) {
 | |
|     	return s;
 | |
|     },
 | |
| 
 | |
|     asUCString : function(s) {
 | |
|     	return String(s).toUpperCase();
 | |
|     },
 | |
|     
 | |
|     asDate : function(s) {
 | |
|         if(s instanceof Date){
 | |
|             return s.getTime();
 | |
|         }
 | |
|     	return Date.parse(String(s));
 | |
|     },
 | |
|     
 | |
|     asFloat : function(s) {
 | |
|     	var val = parseFloat(String(s).replace(/,/g, ''));
 | |
|         if(isNaN(val)) val = 0;
 | |
|     	return val;
 | |
|     },
 | |
|     
 | |
|     asInt : function(s) {
 | |
|         var val = parseInt(String(s).replace(/,/g, ''));
 | |
|         if(isNaN(val)) val = 0;
 | |
|     	return val;
 | |
|     }
 | |
| };
 | |
| 
 | |
| YAHOO.ext.grid.DefaultColumnModel.defaultRenderer = function(value){
 | |
| 	if(typeof value == 'string' && value.length < 1){
 | |
| 	    return ' ';
 | |
| 	}
 | |
| 	return value;
 | |
| }
 | 
