102 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			3.6 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
 | |
| */
 | |
| 
 | |
| // validation
 | |
| if (typeof(window.dhtmlxValidation) != "undefined") {
 | |
| 	dhtmlxValidation.trackInput = function(el,rule,callback_error,callback_correct) {
 | |
| 		dhtmlxEvent(el, "keyup", function(e){
 | |
| 			if (dhtmlxValidation._timer) {
 | |
| 				window.clearTimeout(dhtmlxValidation._timer);
 | |
| 				dhtmlxValidation._timer = null;
 | |
| 			}
 | |
| 			dhtmlxValidation._timer = window.setTimeout(function(){
 | |
| 				if (!dhtmlxValidation.checkInput(el,rule)){
 | |
| 					if (!callback_error || callback_error(el,el.value,rule)) el.className += " dhtmlx_live_validation_error";
 | |
| 				} else {
 | |
| 					el.className=el.className.replace(/[ ]*dhtmlx_live_validation_error/g,"");
 | |
| 					if (callback_correct) callback_correct(el, el.value, rule);
 | |
| 				}
 | |
| 			},250);
 | |
| 		});
 | |
| 	};
 | |
| 	dhtmlxValidation.checkInput = function(input,rule) {
 | |
| 		return dhtmlxValidation.checkValue(input.value,rule);
 | |
| 	};
 | |
| 	dhtmlxValidation.checkValue = function(value,rule) {
 | |
| 		if (typeof rule=="string") rule = rule.split(",");
 | |
| 		var final_res = true;
 | |
| 		for (var i=0; i<rule.length; i++) {
 | |
| 			if (!this["is"+rule[i]]) {
 | |
| 				alert("Incorrect validation rule: "+rule[i]);
 | |
| 			} else {
 | |
| 				final_res = final_res && this["is"+rule[i]](value);
 | |
| 			}
 | |
| 		}
 | |
| 		return final_res;
 | |
| 	};
 | |
| };
 | |
| // extension for the grid
 | |
| dhtmlXGridObject.prototype.enableValidation=function(mode,live){
 | |
| 	mode=dhx4.s2b(mode);
 | |
| 	if (mode) this._validators = {data:[]}; else this._validators = false;
 | |
| 	if (arguments.length>1) this._validators._live=live;
 | |
| 	if (!this._validators._event) this._validators._event=this.attachEvent("onEditCell",this.validationEvent);
 | |
| };
 | |
| dhtmlXGridObject.prototype.setColValidators=function(vals){
 | |
| 	if (!this._validators) this.enableValidation(true);
 | |
| 	if (typeof vals == "string") vals=vals.split(this.delim);
 | |
| 	this._validators.data=vals;
 | |
| };
 | |
| dhtmlXGridObject.prototype.validationEvent=function(stage,id,ind,newval,oldval){
 | |
| 	var v=this._validators;
 | |
| 	if (!v) return true; // validators disabled
 | |
| 	var rule=(v.data[ind]||this.cells(id,ind).getAttribute("validate"))||"";
 | |
| 	
 | |
| 	if (stage==1 && rule) {
 | |
| 		var ed = this.editor||(this._fake||{}).editor;
 | |
| 		if (!ed || !ed.getInput()) return true; //event was trigered by checkbox
 | |
| 		ed.cell.className=ed.cell.className.replace(/[ ]*dhtmlx_validation_error/g,"");
 | |
| 		if (v._live){
 | |
| 			var grid=this;
 | |
| 			dhtmlxValidation.trackInput(ed.getInput(),rule,function(element,value,rule){
 | |
| 				return grid.callEvent("onLiveValidationError",[id,ind,value,element,rule]);
 | |
| 			}, function(element,value,rule){
 | |
| 				return grid.callEvent("onLiveValidationCorrect",[id,ind,value,element,rule]);
 | |
| 			});
 | |
| 		}
 | |
| 	}
 | |
| 	
 | |
| 	if (stage==2) this.validateCell(id,ind,rule,newval);
 | |
| 	
 | |
| 	return true;
 | |
| };
 | |
| 
 | |
| dhtmlXGridObject.prototype.validateCell=function(id,ind,rule,value){
 | |
| 	rule=rule||(this._validators.data[ind]||this.cells(id,ind).getAttribute("validate"));
 | |
| 	value=value||this.cells(id,ind).getValue();
 | |
| 	if (!rule) return;
 | |
| 	var cell = this.cells(id,ind).cell;
 | |
| 	
 | |
| 	var result = true;
 | |
| 	if (typeof rule == "string")
 | |
| 		rule = rule.split(this.delim);
 | |
| 	
 | |
| 	for (var i=0; i < rule.length; i++) {
 | |
| 		if (!dhtmlxValidation.checkValue(value,rule[i])){
 | |
| 			if (this.callEvent("onValidationError",[id,ind,value,rule[i]]))
 | |
| 				cell.className+=" dhtmlx_validation_error";
 | |
| 			result = false;
 | |
| 		}
 | |
| 	}
 | |
| 	if (result){
 | |
| 		this.callEvent("onValidationCorrect",[id,ind,value,rule]);
 | |
| 		cell.className=cell.className.replace(/[ ]*dhtmlx_validation_error/g,"");		
 | |
| 	}
 | |
| 	return result;
 | |
| };
 |