378 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			378 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /*
 | |
| Product Name: dhtmlxSuite 
 | |
| Version: 5.2.0 
 | |
| Edition: Professional 
 | |
| License: content of this file is covered by DHTMLX Commercial or Enterprise license. Usage without proper license is prohibited. To obtain it contact sales@dhtmlx.com
 | |
| Copyright UAB Dinamenta http://www.dhtmlx.com
 | |
| */
 | |
| 
 | |
| dhx4.attachEvent("onGridCreated", function(grid){
 | |
| 	if (!window.dhx_globalImgPath) window.dhx_globalImgPath = grid.imgURL;
 | |
| 	
 | |
| 	grid._col_combos = [];
 | |
| 	for (var i=0; i<grid._cCount; i++) {
 | |
| 		if(grid.cellType[i].indexOf("combo") == 0) {
 | |
| 			grid._col_combos[i] = eXcell_combo.prototype.initCombo.call({grid:grid},i);
 | |
| 		}
 | |
| 	}
 | |
| 	
 | |
| 	if (!grid._loading_handler_set) {
 | |
| 		grid._loading_handler_set = grid.attachEvent("onXLE", function(a,b,c,xml,type){
 | |
| 				if (type != "xml") return;
 | |
| 				eXcell_combo.prototype.fillColumnCombos(this,xml);
 | |
| 				this.detachEvent(this._loading_handler_set);
 | |
| 				this._loading_handler_set = null;
 | |
| 		});
 | |
| 	}
 | |
| });
 | |
| 
 | |
| 
 | |
| function eXcell_combo(cell) {
 | |
| 	
 | |
| 	if (!cell) return;
 | |
| 	
 | |
| 	this.cell = cell;
 | |
| 	this.grid = cell.parentNode.grid;
 | |
| 	this._combo_pre = "";
 | |
| 	
 | |
| 	this.edit = function(){
 | |
| 		if (!window.dhx_globalImgPath) window.dhx_globalImgPath = this.grid.imgURL;
 | |
| 		
 | |
| 		this.val = this.getValue();
 | |
| 		var val = this.getText();
 | |
| 		if (this.cell._clearCell) val="";
 | |
| 		this.cell.innerHTML = "";
 | |
| 		
 | |
| 		if (!this.cell._brval) {
 | |
| 			this.combo = (this.grid._realfake?this.grid._fake:this.grid)._col_combos[this.cell._cellIndex];
 | |
| 		} else {
 | |
| 			this.combo = this.cell._brval;
 | |
| 		}
 | |
| 		this.cell.appendChild(this.combo.DOMParent);
 | |
| 
 | |
| 		this.combo.DOMParent.style.margin = "0";
 | |
| 		
 | |
| 		this.combo.DOMelem_input.focus();
 | |
| 		this.combo.setSize(this.cell.offsetWidth-2);
 | |
| 
 | |
| 		var index = -1;
 | |
| 		if (!this.combo._xml) {
 | |
| 			if (this.combo.getIndexByValue(this.cell.combo_value)!=-1) {
 | |
| 				index = this.combo.getIndexByValue(this.cell.combo_value);
 | |
| 				this.combo.selectOption(index);
 | |
| 			} else {
 | |
| 				if (this.combo.getOptionByLabel(val)) {
 | |
| 					index = this.combo.getIndexByValue(this.combo.getOptionByLabel(val).value);
 | |
| 					this.combo.selectOption(index);
 | |
| 				} else {
 | |
| 					if (this.combo.conf.f_url){
 | |
| 						this.combo.setComboText(val);			
 | |
| 					} else {
 | |
| 						this.combo.unSelectOption();
 | |
| 					}
 | |
| 				}
 | |
| 			}
 | |
| 		} else {
 | |
| 			this.combo.setComboText(val);
 | |
| 		}
 | |
| 
 | |
| 		this.combo.conf.f_server_last = NaN;
 | |
| 		if (!this.combo.conf.ro_mode)
 | |
| 			this.combo._filterOpts();
 | |
| 		this.combo.openSelect();
 | |
| 
 | |
| 		if (index >= 0)
 | |
| 			this.combo.list.scrollTop = index * 32;
 | |
| 	}
 | |
| 	
 | |
| 	this.selectComboOption = function(val,obj){
 | |
| 		obj.selectOption(obj.getIndexByValue(obj.getOptionByLabel(val).value));
 | |
| 	}
 | |
| 	
 | |
| 	this.getValue = function(val){
 | |
| 		return this.cell.combo_value||"";
 | |
| 	}
 | |
| 	
 | |
| 	this.getText = function(val){
 | |
| 		var c = this.cell;
 | |
| 		if (this._combo_pre == "" && c.childNodes[1]) {
 | |
| 			c = c.childNodes[1];
 | |
| 		} else {
 | |
| 			c.childNodes[0].childNodes[1];
 | |
| 		}
 | |
| 		return (_isIE ? c.innerText : c.textContent);
 | |
| 	}
 | |
| 	
 | |
| 	this.setValue = function(val){
 | |
| 		if (typeof(val) == "object"){
 | |
| 			
 | |
| 			this.cell._brval = this.initCombo();
 | |
| 			var index = this.cell._cellIndex;
 | |
| 			var idd = this.cell.parentNode.idd;
 | |
| 			if (!val.firstChild) {
 | |
| 				this.cell.combo_value = " ";
 | |
| 				this.cell._clearCell = true;
 | |
| 			} else {
 | |
| 				this.cell.combo_value = val.firstChild.data;
 | |
| 			}
 | |
| 			this.setComboOptions(this.cell._brval, val, this.grid, index, idd);
 | |
| 			
 | |
| 		} else {
 | |
| 			this.cell.combo_value = val;
 | |
| 			var cm = null;
 | |
| 			if ((cm = this.cell._brval) && (typeof(this.cell._brval) == "object")) {
 | |
| 				val = (cm.getOption(val)||{}).text||val;
 | |
| 			} else if (cm = this.grid._col_combos[this.cell._cellIndex]||((this.grid._fake) && (cm = this.grid._fake._col_combos[this.cell._cellIndex]))) {
 | |
| 				var option = cm.getOption(val)||{};
 | |
| 				val = (cm.getOption(val)||{}).text||val;
 | |
| 				if (typeof val === "object"){
 | |
| 					val = option.text_input;
 | |
| 				}
 | |
| 			}
 | |
| 			
 | |
| 			if ((val||"").toString()._dhx_trim()=="") val = null;
 | |
| 			
 | |
| 			if (val !== null) {
 | |
| 				this.setComboCValue(val);
 | |
| 			} else {
 | |
| 				this.setComboCValue(" ", "");
 | |
| 				this.cell._clearCell = true;
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 	
 | |
| 	this.detach = function(){
 | |
| 		var p = this.combo.getParent();
 | |
| 		if (p.parentNode == this.cell) {
 | |
| 			this.cell.removeChild(p);
 | |
| 		} else {
 | |
| 			return false;
 | |
| 		}
 | |
| 		var val = this.cell.combo_value;
 | |
| 		this.combo._confirmSelect("blur");
 | |
| 		
 | |
| 		if (!this.combo.getComboText() || this.combo.getComboText().toString()._dhx_trim()=="") {
 | |
| 			this.setComboCValue(" ");
 | |
| 			this.cell._clearCell=true;
 | |
| 		} else {
 | |
| 			this.setComboCValue(this.combo.getComboText().replace(/\&/g,"&").replace(/</g,"<").replace(/>/g,">"),this.combo.getActualValue());
 | |
| 			this.cell._clearCell = false;
 | |
| 		}
 | |
| 		
 | |
| 		this.cell.combo_value = this.combo.getActualValue();
 | |
| 		this.combo.closeAll();
 | |
| 		this.grid._still_active=true;
 | |
| 		this.grid.setActive(1);
 | |
| 		return val!=this.cell.combo_value;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| 
 | |
| eXcell_combo.prototype = new eXcell;
 | |
| eXcell_combo_v = function(cell){
 | |
| 	var combo = new eXcell_combo(cell);
 | |
| 	combo._combo_pre = "<img src='"+(window.dhx_globalImgPath?window.dhx_globalImgPath:this.grid.imgURL)+"combo_select.gif' class='dhxgrid_combo_icon'/>";
 | |
| 	return combo;
 | |
| };
 | |
| 
 | |
| eXcell_combo.prototype.initCombo = function(index){
 | |
| 	
 | |
| 	var container = document.createElement("DIV");
 | |
| 	container.className = "dhxcombo_in_grid_parent";
 | |
| 	var type = this.grid.defVal[arguments.length?index:this.cell._cellIndex];
 | |
| 	var combo = new dhtmlXCombo(container, "combo", 0, type);
 | |
| 	this.grid.defVal[arguments.length?index:this.cell._cellIndex] = "";
 | |
| 	
 | |
| 	var grid = this.grid;
 | |
| 	combo.DOMelem.onmousedown = combo.DOMelem.onclick = function(e){
 | |
| 		e = e||event;
 | |
| 		e.cancelBubble = true;
 | |
| 	};
 | |
| 	combo.DOMelem.onselectstart = function(e){
 | |
| 		e = e||event;
 | |
| 		e.cancelBubble = true;
 | |
| 		return true;
 | |
| 	};
 | |
| 	
 | |
| 	this.grid.attachEvent("onScroll", function(){
 | |
| 		if (combo._isListVisible()) combo._hideList();
 | |
| 	});
 | |
| 	
 | |
| 	combo.attachEvent("onKeyPressed",function(ev){
 | |
| 		if (ev==13 || ev==27) {
 | |
| 			grid.editStop();
 | |
| 			if (grid._fake) grid._fake.editStop();
 | |
| 		}
 | |
| 	});
 | |
| 	
 | |
| 	return combo;
 | |
| 	
 | |
| };
 | |
| 
 | |
| eXcell_combo.prototype.fillColumnCombos = function(grid,xml){
 | |
| 	if (!xml) return;
 | |
| 	var top  = dhx4.ajax.xmltop("rows", xml, -1);
 | |
| 	if (top && top.tagName !== "DIV"){
 | |
| 		grid.combo_columns = grid.combo_columns||[];
 | |
| 		columns = dhx4.ajax.xpath("//column", top);
 | |
| 		for (var i=0; i<columns.length; i++) {
 | |
| 			if ((columns[i].getAttribute("type")||"").indexOf("combo") == 0) {
 | |
| 				grid.combo_columns[grid.combo_columns.length] = i;
 | |
| 				this.setComboOptions(grid._col_combos[i], columns[i], grid, i);
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| };
 | |
| 
 | |
| eXcell_combo.prototype.setComboCValue = function(value, value2) {
 | |
|    	if (this._combo_pre != "") {
 | |
| 		var height = (this.cell.offsetHeight?this.cell.offsetHeight+"px":0);
 | |
|    		value = "<div style='width:100%;position:relative;height:100%;overflow:hidden;'>"+this._combo_pre+"<span>"+value+"</span></div>";
 | |
|    	}
 | |
|    	if (arguments.length > 1) {
 | |
|   		this.setCValue(value,value2);
 | |
| 	} else {
 | |
| 		this.setCValue(value);
 | |
| 	}
 | |
| };
 | |
| 
 | |
| eXcell_combo.prototype.setComboOptions = function(combo, obj, grid, index, idd) {
 | |
| 	
 | |
| 	if (window.dhx4.s2b(obj.getAttribute("xmlcontent"))) {
 | |
| 		
 | |
| 		if (!obj.getAttribute("source")) {
 | |
| 			options = obj.childNodes;
 | |
| 			var _optArr = [];
 | |
| 			for (var i=0; i < options.length; i++){
 | |
| 				if(options[i].tagName =="option"){
 | |
| 					var text_opt = options[i].firstChild? options[i].firstChild.data:"";
 | |
| 					_optArr[_optArr.length]= [options[i].getAttribute("value"),text_opt, (options[i].getAttribute("css")||"")];
 | |
| 				}
 | |
| 			}
 | |
| 			combo.addOption(_optArr)
 | |
| 			if(arguments.length == 4){
 | |
| 				grid.forEachRowA(function(id){
 | |
| 						var c = grid.cells(id,index);
 | |
| 						if(!c.cell._brval&&!c.cell._cellType&&(c.cell._cellIndex==index)){
 | |
| 							if(c.cell.combo_value=="") c.setComboCValue(" ","");
 | |
| 							else{
 | |
| 								if(!combo.getOption(c.cell.combo_value))
 | |
| 									c.setComboCValue(c.cell.combo_value);
 | |
| 								else c.setComboCValue(combo.getOption(c.cell.combo_value).text, c.cell.combo_value);
 | |
| 							}
 | |
| 						}
 | |
| 				});	
 | |
| 			}
 | |
| 			else {
 | |
| 				var c = (this.cell)?this:grid.cells(idd,index);
 | |
| 				if(obj.getAttribute("text")) {
 | |
| 					if(obj.getAttribute("text")._dhx_trim()=="") c.setComboCValue(" ",""); 
 | |
| 					else c.setComboCValue(obj.getAttribute("text")); 
 | |
| 				}
 | |
| 				else{
 | |
| 					if((!c.cell.combo_value)||(c.cell.combo_value._dhx_trim()=="")) c.setComboCValue(" ","");
 | |
| 					else{
 | |
| 						if(!combo.getOption(c.cell.combo_value))
 | |
| 							c.setComboCValue(c.cell.combo_value);
 | |
| 						else c.setComboCValue(combo.getOption(c.cell.combo_value).text, c.cell.combo_value);
 | |
| 					}
 | |
| 				}
 | |
| 			}
 | |
| 			
 | |
| 		}
 | |
| 	}
 | |
| 	
 | |
| 	if (obj.getAttribute("source")) {
 | |
| 		if (obj.getAttribute("auto") && window.dhx4.s2b(obj.getAttribute("auto"))) {
 | |
| 			
 | |
| 			if (obj.getAttribute("xmlcontent")) {
 | |
| 				var c = (this.cell)?this:grid.cells(idd,index);
 | |
| 				if (obj.getAttribute("text")) c.setComboCValue(obj.getAttribute("text"));
 | |
| 			} else {
 | |
| 				grid.forEachRowA(function(id){
 | |
| 					var c = grid.cells(id,index);
 | |
| 					if (!c.cell._brval && !c.cell._cellType) {
 | |
| 						var str = c.cell.combo_value.toString();
 | |
| 						if (str.indexOf("^") != -1) {
 | |
| 							var arr = str.split("^");
 | |
| 							c.cell.combo_value = arr[0];
 | |
| 							c.setComboCValue(arr[1]);
 | |
| 						}
 | |
| 					}
 | |
| 				});
 | |
| 			}
 | |
| 			combo.enableFilteringMode(true, obj.getAttribute("source"), window.dhx4.s2b(obj.getAttribute("cache")||true), window.dhx4.s2b(obj.getAttribute("sub")||false));
 | |
| 			
 | |
| 		} else {
 | |
| 			
 | |
| 			var that = this;
 | |
| 			var length = arguments.length; 
 | |
| 			combo.load(obj.getAttribute("source"), function(){
 | |
| 				if (length == 4) {
 | |
| 					grid.forEachRow(function(id){
 | |
| 						var c = grid.cells(id,index);
 | |
| 						if (!c.cell._brval && !c.cell._cellType) {
 | |
| 							if (combo.getOption(c.cell.combo_value)) {
 | |
| 								c.setComboCValue(combo.getOption(c.cell.combo_value).text, c.cell.combo_value);
 | |
| 							} else {
 | |
| 								if ((c.cell.combo_value||"").toString()._dhx_trim() == "") {
 | |
| 									c.setComboCValue(" ","");
 | |
| 									c.cell._clearCell=true;
 | |
| 								} else {
 | |
| 									c.setComboCValue(c.cell.combo_value);
 | |
| 								}
 | |
| 							}
 | |
| 						}
 | |
| 					});
 | |
| 				} else {
 | |
| 					//var c = (that.cell)? that : grid.cells(idd,index);
 | |
| 					var c = grid.cells(idd,index);
 | |
| 					//c.setCValue(obj.getAttribute("text"));
 | |
| 					if (combo.getOption(c.cell.combo_value)) {
 | |
| 						c.setComboCValue(combo.getOption(c.cell.combo_value).text, c.cell.combo_value);
 | |
| 					} else {
 | |
| 						c.setComboCValue(c.cell.combo_value);
 | |
| 					}
 | |
| 				}
 | |
| 			});
 | |
| 
 | |
| 			combo.enableFilteringMode(true);
 | |
| 			
 | |
| 		}
 | |
| 	}
 | |
| 	if (!obj.getAttribute("auto") || !window.dhx4.s2b(obj.getAttribute("auto"))) {
 | |
| 		if (obj.getAttribute("editable") && !window.dhx4.s2b(obj.getAttribute("editable"))) combo.readonly(true);
 | |
| 		if (obj.getAttribute("filter") && window.dhx4.s2b(obj.getAttribute("filter"))) combo.enableFilteringMode(true);
 | |
| 	}
 | |
| 	
 | |
| };
 | |
| 
 | |
| eXcell_combo.prototype.getCellCombo = function() {
 | |
| 	
 | |
| 	if (this.cell._brval) return this.cell._brval;
 | |
| 	
 | |
| 	this.cell._brval = this.initCombo();
 | |
| 	return this.cell._brval;
 | |
| 	
 | |
| };
 | |
| 
 | |
| eXcell_combo.prototype.refreshCell = function() {
 | |
| 	this.setValue(this.getValue());
 | |
| };
 | |
| 
 | |
| dhtmlXGridObject.prototype.getColumnCombo = function(index) {
 | |
| 	if (this._col_combos && this._col_combos[index]) return this._col_combos[index];
 | |
| 	
 | |
| 	if (!this._col_combos) this._col_combos = [];
 | |
| 	this._col_combos[index] = eXcell_combo.prototype.initCombo.call({grid:this},index);
 | |
| 	return this._col_combos[index];
 | |
| 	
 | |
| };
 | |
| 
 | |
| dhtmlXGridObject.prototype.refreshComboColumn = function(index) {
 | |
| 	this.forEachRow(function(id){
 | |
| 		if (this.cells(id,index).refreshCell) this.cells(id,index).refreshCell();
 | |
| 	});
 | |
| };
 | |
| 
 |