⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 browserio.js

📁 基于Php和Mysql的项目管理软件
💻 JS
📖 第 1 页 / 共 2 页
字号:
/*	Copyright (c) 2004-2006, The Dojo Foundation	All Rights Reserved.	Licensed under the Academic Free License version 2.1 or above OR the	modified BSD license. For more information on Dojo licensing, see:		http://dojotoolkit.org/community/licensing.shtml*/dojo.provide("dojo.io.BrowserIO");dojo.require("dojo.io.common");dojo.require("dojo.lang.array");dojo.require("dojo.lang.func");dojo.require("dojo.string.extras");dojo.require("dojo.dom");dojo.require("dojo.undo.browser");if(!dj_undef("window")) {dojo.io.checkChildrenForFile = function(/*DOMNode*/node){	//summary: Checks any child nodes of node for an input type="file" element.	var hasFile = false;	var inputs = node.getElementsByTagName("input");	dojo.lang.forEach(inputs, function(input){		if(hasFile){ return; }		if(input.getAttribute("type")=="file"){			hasFile = true;		}	});	return hasFile; //boolean}dojo.io.formHasFile = function(/*DOMNode*/formNode){	//summary: Just calls dojo.io.checkChildrenForFile().	return dojo.io.checkChildrenForFile(formNode); //boolean}dojo.io.updateNode = function(/*DOMNode*/node, /*String or Object*/urlOrArgs){	//summary: Updates a DOMnode with the result of a dojo.io.bind() call.	//node: DOMNode	//urlOrArgs: String or Object	//		Either a String that has an URL, or an object containing dojo.io.bind()	//		arguments.	node = dojo.byId(node);	var args = urlOrArgs;	if(dojo.lang.isString(urlOrArgs)){		args = { url: urlOrArgs };	}	args.mimetype = "text/html";	args.load = function(t, d, e){		while(node.firstChild){			dojo.dom.destroyNode(node.firstChild);		}		node.innerHTML = d;	};	dojo.io.bind(args);}dojo.io.formFilter = function(/*DOMNode*/node) {	//summary: Returns true if the node is an input element that is enabled, has	//a name, and whose type is one of the following values: ["file", "submit", "image", "reset", "button"]	var type = (node.type||"").toLowerCase();	return !node.disabled && node.name		&& !dojo.lang.inArray(["file", "submit", "image", "reset", "button"], type); //boolean}// TODO: Move to htmlUtilsdojo.io.encodeForm = function(/*DOMNode*/formNode, /*String?*/encoding, /*Function?*/formFilter){	//summary: Converts the names and values of form elements into an URL-encoded	//string (name=value&name=value...).	//formNode: DOMNode	//encoding: String?	//		The encoding to use for the values. Specify a string that starts with	//		"utf" (for instance, "utf8"), to use encodeURIComponent() as the encoding	//		function. Otherwise, dojo.string.encodeAscii will be used.	//formFilter: Function?	//	A function used to filter out form elements. The element node will be passed	//	to the formFilter function, and a boolean result is expected (true indicating	//	indicating that the element should have its name/value included in the output).	//	If no formFilter is specified, then dojo.io.formFilter() will be used.	if((!formNode)||(!formNode.tagName)||(!formNode.tagName.toLowerCase() == "form")){		dojo.raise("Attempted to encode a non-form element.");	}	if(!formFilter) { formFilter = dojo.io.formFilter; }	var enc = /utf/i.test(encoding||"") ? encodeURIComponent : dojo.string.encodeAscii;	var values = [];	for(var i = 0; i < formNode.elements.length; i++){		var elm = formNode.elements[i];		if(!elm || elm.tagName.toLowerCase() == "fieldset" || !formFilter(elm)) { continue; }		var name = enc(elm.name);		var type = elm.type.toLowerCase();		if(type == "select-multiple"){			for(var j = 0; j < elm.options.length; j++){				if(elm.options[j].selected) {					values.push(name + "=" + enc(elm.options[j].value));				}			}		}else if(dojo.lang.inArray(["radio", "checkbox"], type)){			if(elm.checked){				values.push(name + "=" + enc(elm.value));			}		}else{			values.push(name + "=" + enc(elm.value));		}	}	// now collect input type="image", which doesn't show up in the elements array	var inputs = formNode.getElementsByTagName("input");	for(var i = 0; i < inputs.length; i++) {		var input = inputs[i];		if(input.type.toLowerCase() == "image" && input.form == formNode			&& formFilter(input)) {			var name = enc(input.name);			values.push(name + "=" + enc(input.value));			values.push(name + ".x=0");			values.push(name + ".y=0");		}	}	return values.join("&") + "&"; //String}dojo.io.FormBind = function(/*DOMNode or Object*/args) {	//summary: constructor for a dojo.io.FormBind object. See the Dojo Book for	//some information on usage: http://manual.dojotoolkit.org/WikiHome/DojoDotBook/Book23	//args: DOMNode or Object	//		args can either be the DOMNode for a form element, or an object containing	//		dojo.io.bind() arguments, one of which should be formNode with the value of	//		a form element DOMNode.	this.bindArgs = {};	if(args && args.formNode) {		this.init(args);	} else if(args) {		this.init({formNode: args});	}}dojo.lang.extend(dojo.io.FormBind, {	form: null,	bindArgs: null,	clickedButton: null,	init: function(/*DOMNode or Object*/args) {		//summary: Internal function called by the dojo.io.FormBind() constructor		//do not call this method directly.		var form = dojo.byId(args.formNode);		if(!form || !form.tagName || form.tagName.toLowerCase() != "form") {			throw new Error("FormBind: Couldn't apply, invalid form");		} else if(this.form == form) {			return;		} else if(this.form) {			throw new Error("FormBind: Already applied to a form");		}		dojo.lang.mixin(this.bindArgs, args);		this.form = form;		this.connect(form, "onsubmit", "submit");		for(var i = 0; i < form.elements.length; i++) {			var node = form.elements[i];			if(node && node.type && dojo.lang.inArray(["submit", "button"], node.type.toLowerCase())) {				this.connect(node, "onclick", "click");			}		}		var inputs = form.getElementsByTagName("input");		for(var i = 0; i < inputs.length; i++) {			var input = inputs[i];			if(input.type.toLowerCase() == "image" && input.form == form) {				this.connect(input, "onclick", "click");			}		}	},	onSubmit: function(/*DOMNode*/form) {		//summary: Function used to verify that the form is OK to submit.		//Override this function if you want specific form validation done.		return true; //boolean	},	submit: function(/*Event*/e) {		//summary: internal function that is connected as a listener to the		//form's onsubmit event.		e.preventDefault();		if(this.onSubmit(this.form)) {			dojo.io.bind(dojo.lang.mixin(this.bindArgs, {				formFilter: dojo.lang.hitch(this, "formFilter")			}));		}	},	click: function(/*Event*/e) {		//summary: internal method that is connected as a listener to the		//form's elements whose click event can submit a form.		var node = e.currentTarget;		if(node.disabled) { return; }		this.clickedButton = node;	},	formFilter: function(/*DOMNode*/node) {		//summary: internal function used to know which form element values to include		//		in the dojo.io.bind() request.		var type = (node.type||"").toLowerCase();		var accept = false;		if(node.disabled || !node.name) {			accept = false;		} else if(dojo.lang.inArray(["submit", "button", "image"], type)) {			if(!this.clickedButton) { this.clickedButton = node; }			accept = node == this.clickedButton;		} else {			accept = !dojo.lang.inArray(["file", "submit", "reset", "button"], type);		}		return accept; //boolean	},	// in case you don't have dojo.event.* pulled in	connect: function(/*Object*/srcObj, /*Function*/srcFcn, /*Function*/targetFcn) {		//summary: internal function used to connect event listeners to form elements		//that trigger events. Used in case dojo.event is not loaded.		if(dojo.evalObjPath("dojo.event.connect")) {			dojo.event.connect(srcObj, srcFcn, this, targetFcn);		} else {			var fcn = dojo.lang.hitch(this, targetFcn);			srcObj[srcFcn] = function(e) {				if(!e) { e = window.event; }				if(!e.currentTarget) { e.currentTarget = e.srcElement; }				if(!e.preventDefault) { e.preventDefault = function() { window.event.returnValue = false; } }				fcn(e);			}		}	}});dojo.io.XMLHTTPTransport = new function(){	//summary: The object that implements the dojo.io.bind transport for XMLHttpRequest.	var _this = this;	var _cache = {}; // FIXME: make this public? do we even need to?	this.useCache = false; // if this is true, we'll cache unless kwArgs.useCache = false	this.preventCache = false; // if this is true, we'll always force GET requests to cache	// FIXME: Should this even be a function? or do we just hard code it in the next 2 functions?	function getCacheKey(url, query, method) {		return url + "|" + query + "|" + method.toLowerCase();	}	function addToCache(url, query, method, http) {		_cache[getCacheKey(url, query, method)] = http;	}	function getFromCache(url, query, method) {		return _cache[getCacheKey(url, query, method)];	}	this.clearCache = function() {		_cache = {};	}	// moved successful load stuff here	function doLoad(kwArgs, http, url, query, useCache) {		if(	((http.status>=200)&&(http.status<300))|| 	// allow any 2XX response code			(http.status==304)|| 						// get it out of the cache			(location.protocol=="file:" && (http.status==0 || http.status==undefined))||			(location.protocol=="chrome:" && (http.status==0 || http.status==undefined))		){			var ret;			if(kwArgs.method.toLowerCase() == "head"){				var headers = http.getAllResponseHeaders();				ret = {};				ret.toString = function(){ return headers; }				var values = headers.split(/[\r\n]+/g);				for(var i = 0; i < values.length; i++) {					var pair = values[i].match(/^([^:]+)\s*:\s*(.+)$/i);					if(pair) {						ret[pair[1]] = pair[2];					}				}			}else if(kwArgs.mimetype == "text/javascript"){				try{					ret = dj_eval(http.responseText);				}catch(e){					dojo.debug(e);					dojo.debug(http.responseText);					ret = null;				}			}else if(kwArgs.mimetype == "text/json" || kwArgs.mimetype == "application/json"){				try{					ret = dj_eval("("+http.responseText+")");				}catch(e){					dojo.debug(e);					dojo.debug(http.responseText);					ret = false;				}			}else if((kwArgs.mimetype == "application/xml")||						(kwArgs.mimetype == "text/xml")){				ret = http.responseXML;				if(!ret || typeof ret == "string" || !http.getResponseHeader("Content-Type")) {					ret = dojo.dom.createDocumentFromText(http.responseText);				}			}else{				ret = http.responseText;			}			if(useCache){ // only cache successful responses				addToCache(url, query, kwArgs.method, http);			}			kwArgs[(typeof kwArgs.load == "function") ? "load" : "handle"]("load", ret, http, kwArgs);		}else{			var errObj = new dojo.io.Error("XMLHttpTransport Error: "+http.status+" "+http.statusText);			kwArgs[(typeof kwArgs.error == "function") ? "error" : "handle"]("error", errObj, http, kwArgs);		}	}	// set headers (note: Content-Type will get overriden if kwArgs.contentType is set)	function setHeaders(http, kwArgs){		if(kwArgs["headers"]) {			for(var header in kwArgs["headers"]) {				if(header.toLowerCase() == "content-type" && !kwArgs["contentType"]) {					kwArgs["contentType"] = kwArgs["headers"][header];				} else {					http.setRequestHeader(header, kwArgs["headers"][header]);				}			}		}	}	this.inFlight = [];	this.inFlightTimer = null;	this.startWatchingInFlight = function(){		//summary: internal method used to trigger a timer to watch all inflight		//XMLHttpRequests.		if(!this.inFlightTimer){

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -