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

📄 contentpane.js

📁 dojo-0.3.0-ajax开 源 项 目
💻 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.widget.html.ContentPane");dojo.require("dojo.widget.*");dojo.require("dojo.io.*");dojo.require("dojo.widget.HtmlWidget");dojo.require("dojo.widget.ContentPane");dojo.require("dojo.string");dojo.require("dojo.string.extras");dojo.require("dojo.style");dojo.widget.html.ContentPane = function(){	dojo.widget.HtmlWidget.call(this);}dojo.inherits(dojo.widget.html.ContentPane, dojo.widget.HtmlWidget);dojo.lang.extend(dojo.widget.html.ContentPane, {	widgetType: "ContentPane",	isContainer: true,	// remote loading options	href: "",	extractContent: true,	parseContent: true,	cacheContent: true,	preload: false,			// force load of data even if pane is hidden	refreshOnShow: false,	handler: "",			// generate pane content from a java function	executeScripts: false,	// if true scripts in content will be evaled after content is set and parsed	scriptScope: null,		// scopeContainer for downloaded scripts		// If the user want a global in the remote script he/she just omitts the var		// examples:		//--------------------------		// these gets collected by scriptScope and is reached by dojo.widget.byId('..').scriptScope.myCustomproperty		//	this.myString = "dojo is a great javascript toolkit!";		//		//	this.alertMyString = function(){		//		alert(myString);		//	}		// -------------------------		// these go into the global namespace (window) notice lack of var, equiv to window.myString		//	myString = "dojo is a javascript toolkit!";		//		//	alertMyString = function(){		//		alert(myString);		// }	// private	_remoteStyles: null,	// array of stylenodes inserted to document head							// by remote content, used when we clean up for new content	_callOnUnLoad: false,		// used by setContent and _handleDefults, makes sure onUnLoad is only called once	postCreate: function(args, frag, parentComp){		if ( this.handler != "" ){			this.setHandler(this.handler);		}		if(this.isShowing()||this.preload){ this.loadContents(); }	},	show: function(){		// if refreshOnShow is true, reload the contents every time; otherwise, load only the first time		if(this.refreshOnShow){			this.refresh();		}else{			this.loadContents();		}		dojo.widget.html.ContentPane.superclass.show.call(this);	},	refresh: function(){		this.isLoaded=false;		this.loadContents();	},	loadContents: function() {		if ( this.isLoaded ){			return;		}		this.isLoaded=true;		if ( dojo.lang.isFunction(this.handler)) {			this._runHandler();		} else if ( this.href != "" ) {			this._downloadExternalContent(this.href, this.cacheContent);		}	},		setUrl: function(/*String*/ url) {		// summary:		// 	Reset the (external defined) content of this pane and replace with new url		this.href = url;		this.isLoaded = false;		if ( this.preload || this.isShowing() ){			this.loadContents();		}	},	_downloadExternalContent: function(url, useCache) {		this._handleDefaults("Loading...", "onDownloadStart");		var self = this;		dojo.io.bind({			url: url,			useCache: useCache,			preventCache: !useCache,			mimetype: "text/html",			handler: function(type, data, e) {				if(type == "load") {					self.onDownloadEnd.call(self, url, data);				} else {					// works best when from a live serveer instead of from file system					self._handleDefaults.call(self, "Error loading '" + url + "' (" + e.status + " "+  e.statusText + ")", "onDownloadError");					self.onLoad();				}			}		});	},	// called when setContent is finished	onLoad: function(e){ /*stub*/ },	// called before old content is cleared	onUnLoad: function(e){ 			this.scriptScope = null;	},	destroy: function(){		// make sure we call onUnLoad		this.onUnLoad();		dojo.widget.html.ContentPane.superclass.destroy.call(this);	},	// called when content script eval error or Java error occurs, preventDefault-able	onExecError: function(e){ /*stub*/ },	// called on DOM faults, require fault etc in content, preventDefault-able	onContentError: function(e){ /*stub*/ },	// called when download error occurs, preventDefault-able	onDownloadError: function(e){ /*stub*/ },	// called before download starts, preventDefault-able	onDownloadStart: function(e){ /*stub*/ },	// called when download is finished	onDownloadEnd: function(url, data){		data = this.splitAndFixPaths(data, url);		this.setContent(data);	},	// usefull if user wants to prevent default behaviour ie: _setContent("Error...")	_handleDefaults: function(e, handler, useAlert){		if(!handler){ handler = "onContentError"; }		if(dojo.lang.isString(e)){			e = {				"text": e,				"toString": function(){ return this.text; }			}		}		if(typeof e.returnValue != "boolean"){			e.returnValue = true; 		}		if(typeof e.preventDefault != "function"){			e.preventDefault = function(){				this.returnValue = false;			}		}		// call our handler		this[handler](e);		if(e.returnValue){			if(useAlert){				alert(e.toString());			}else{				if(this._callOnUnLoad){					this.onUnLoad(); // makes sure scripts can clean up after themselves, before we setContent				}				this._callOnUnLoad = false; // makes sure we dont try to call onUnLoad again on this event,											// ie onUnLoad before 'Loading...' but not before clearing 'Loading...'				this._setContent(e.toString());			}		}	},		splitAndFixPaths: function(/*String*/s, /*dojo.uri.Uri?*/url){		// summary:		// 	fixes all remote paths in (hopefully) all cases for example images, remote scripts, links etc.		// 	splits up content in different pieces, scripts, title, style, link and whats left becomes .xml		if(!url) { url = "./"; } // point to this page if not set		if(!s) { return ""; }		// fix up paths in data		var titles = []; var scripts = []; var linkStyles = [];		var styles = []; var remoteScripts = []; var requires = [];		// khtml is much more picky about dom faults, you can't for example attach a style node under body of document		// must go into head, as does a title node, so we need to cut out those tags		// cut out title tags		var match = [];		while(match){			match = s.match(/<title[^>]*>([\s\S]*?)<\/title>/i); // can't match with dot as that 			if(!match){ break;}					//doesnt match newline in js			titles.push(match[1]);			s = s.replace(/<title[^>]*>[\s\S]*?<\/title>/i, "");		}		// cut out <style> url(...) </style>, as that bails out in khtml		var match = [];		while(match){			match = s.match(/<style[^>]*>([\s\S]*?)<\/style>/i);			if(!match){ break; }			styles.push(dojo.style.fixPathsInCssText(match[1], url));			s = s.replace(/<style[^>]*?>[\s\S]*?<\/style>/i, "");		}		// attributepaths one tag can have multiple paths example:		// <input src="..." style="url(..)"/> or <a style="url(..)" href="..">		// strip out the tag and run fix on that.		// this guarantees that we won't run replace another tag's attribute + it was easier do		var pos = 0; var pos2 = 0; var stop = 0 ;var str = ""; var fixedPath = "";		var attr = []; var fix = ""; var tagFix = ""; var tag = ""; var regex = ""; 		while(pos>-1){			pos = s.search(/<[a-z][a-z0-9]*[^>]*\s(?:(?:src|href|style)=[^>])+[^>]*>/i);			if(pos==-1){ break; }			str += s.substring(0, pos);			s = s.substring(pos, s.length);			tag = s.match(/^<[a-z][a-z0-9]*[^>]*>/i)[0];			s = s.substring(tag.length, s.length);			// loop through attributes			pos2 = 0; tagFix = ""; fix = ""; regex = ""; var regexlen = 0;			while(pos2!=-1){				// slices up before next attribute check, values from previous loop				tagFix += tag.substring(0, pos2) + fix;				tag = tag.substring(pos2+regexlen, tag.length);				// fix next attribute or bail out when done				// hopefully this charclass covers most urls				attr = tag.match(/ (src|href|style)=(['"]?)([\w()\[\]\/.,\\'"-:;#=&?\s@]+?)\2/i);				if(!attr){ break; }				switch(attr[1].toLowerCase()){

⌨️ 快捷键说明

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