📄 contentpane.js
字号:
if(!dojo._hasResource["dojox.layout.ContentPane"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.dojo._hasResource["dojox.layout.ContentPane"] = true;dojo.provide("dojox.layout.ContentPane");dojo.require("dijit.layout.ContentPane");(function(){ // private scope, sort of a namespace // TODO: should these methods be moved to dojox.html.cssPathAdjust or something? // css at-rules must be set before any css declarations according to CSS spec // match: // @import 'http://dojotoolkit.org/dojo.css'; // @import 'you/never/thought/' print; // @import url("it/would/work") tv, screen; // @import url(/did/you/now.css); // but not: // @namespace dojo "http://dojotoolkit.org/dojo.css"; /* namespace URL should always be a absolute URI */ // @charset 'utf-8'; // @media print{ #menuRoot {display:none;} } // we adjust all paths that dont start on '/' or contains ':' //(?![a-z]+:|\/) if(dojo.isIE){ var alphaImageLoader = /(AlphaImageLoader\([^)]*?src=(['"]))(?![a-z]+:|\/)([^\r\n;}]+?)(\2[^)]*\)\s*[;}]?)/g; } var cssPaths = /(?:(?:@import\s*(['"])(?![a-z]+:|\/)([^\r\n;{]+?)\1)|url\(\s*(['"]?)(?![a-z]+:|\/)([^\r\n;]+?)\3\s*\))([a-z, \s]*[;}]?)/g; function adjustCssPaths(cssUrl, cssText){ // summary: // adjusts relative paths in cssText to be relative to cssUrl // a path is considered relative if it doesn't start with '/' and not contains ':' // description: // Say we fetch a HTML page from level1/page.html // It has some inline CSS: // @import "css/page.css" tv, screen; // ... // background-image: url(images/aplhaimage.png); // // as we fetched this HTML and therefore this CSS // from level1/page.html, these paths needs to be adjusted to: // @import 'level1/css/page.css' tv, screen; // ... // background-image: url(level1/images/alphaimage.png); // // In IE it will also adjust relative paths in AlphaImageLoader() // filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/alphaimage.png'); // will be adjusted to: // filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='level1/images/alphaimage.png'); // // Please note that any relative paths in AlphaImageLoader in external css files wont work, as // the paths in AlphaImageLoader is MUST be declared relative to the HTML page, // not relative to the CSS file that declares it if(!cssText || !cssUrl){ return; } // support the ImageAlphaFilter if it exists, most people use it in IE 6 for transparent PNGs // We are NOT going to kill it in IE 7 just because the PNGs work there. Somebody might have // other uses for it. // If user want to disable css filter in IE6 he/she should // unset filter in a declaration that just IE 6 doesn't understands // like * > .myselector { filter:none; } if(alphaImageLoader){ cssText = cssText.replace(alphaImageLoader, function(ignore, pre, delim, url, post){ return pre + (new dojo._Url(cssUrl, './'+url).toString()) + post; }); } return cssText.replace(cssPaths, function(ignore, delimStr, strUrl, delimUrl, urlUrl, media){ if(strUrl){ return '@import "' + (new dojo._Url(cssUrl, './'+strUrl).toString()) + '"' + media; }else{ return 'url(' + (new dojo._Url(cssUrl, './'+urlUrl).toString()) + ')' + media; } }); } // attributepaths one tag can have multiple paths, example: // <input src="..." style="url(..)"/> or <a style="url(..)" href=".."> // <img style='filter:progid...AlphaImageLoader(src="noticeTheSrcHereRunsThroughHtmlSrc")' src="img"> var htmlAttrPaths = /(<[a-z][a-z0-9]*\s[^>]*)(?:(href|src)=(['"]?)([^>]*?)\3|style=(['"]?)([^>]*?)\5)([^>]*>)/gi; function adjustHtmlPaths(htmlUrl, cont){ var url = htmlUrl || "./"; return cont.replace(htmlAttrPaths, function(tag, start, name, delim, relUrl, delim2, cssText, end){ return start + (name ? (name + '=' + delim + (new dojo._Url(url, relUrl).toString()) + delim) : ('style=' + delim2 + adjustCssPaths(url, cssText) + delim2) ) + end; } ); } function secureForInnerHtml(cont){ /********* remove <!DOCTYPE.. and <title>..</title> tag **********/ // khtml is picky about dom faults, you can't attach a <style> or <title> node as child of body // must go into head, so we need to cut out those tags return cont.replace(/(?:\s*<!DOCTYPE\s[^>]+>|<title[^>]*>[\s\S]*?<\/title>)/ig, ""); } function snarfStyles(/*String*/cssUrl, /*String*/cont, /*Array*/styles){ /**************** cut out all <style> and <link rel="stylesheet" href=".."> **************/ // also return any attributes from this tag (might be a media attribute) // if cssUrl is set it will adjust paths accordingly styles.attributes = []; return cont.replace(/(?:<style([^>]*)>([\s\S]*?)<\/style>|<link\s+(?=[^>]*rel=['"]?stylesheet)([^>]*?href=(['"])([^>]*?)\4[^>\/]*)\/?>)/gi, function(ignore, styleAttr, cssText, linkAttr, delim, href){ // trim attribute var i, attr = (styleAttr||linkAttr||"").replace(/^\s*([\s\S]*?)\s*$/i, "$1"); if(cssText){ i = styles.push(cssUrl ? adjustCssPaths(cssUrl, cssText) : cssText); }else{ i = styles.push('@import "' + href + '";') attr = attr.replace(/\s*(?:rel|href)=(['"])?[^\s]*\1\s*/gi, ""); // remove rel=... and href=... } if(attr){ attr = attr.split(/\s+/);// split on both "\n", "\t", " " etc var atObj = {}, tmp; for(var j = 0, e = attr.length; j < e; j++){ tmp = attr[j].split('=')// split name='value' atObj[tmp[0]] = tmp[1].replace(/^\s*['"]?([\s\S]*?)['"]?\s*$/, "$1"); // trim and remove '' } styles.attributes[i - 1] = atObj; } return ""; // squelsh the <style> or <link> } ); } function snarfScripts(cont, byRef){ // summary // strips out script tags from cont // invoke with // byRef = {errBack:function(){/*add your download error code here*/, downloadRemote: true(default false)}} // byRef will have {code: 'jscode'} when this scope leaves byRef.code = ""; function download(src){ if(byRef.downloadRemote){ // console.debug('downloading',src); dojo.xhrGet({ url: src, sync: true, load: function(code){ byRef.code += code+";"; }, error: byRef.errBack }); } } // match <script>, <script type="text/..., but not <script type="dojo(/method)... return cont.replace(/<script\s*(?![^>]*type=['"]?dojo)(?:[^>]*?(?:src=(['"]?)([^>]*?)\1[^>]*)?)*>([\s\S]*?)<\/script>/gi, function(ignore, delim, src, code){ if(src){ download(src); }else{ byRef.code += code; } return ""; } ); } function evalInGlobal(code, appendNode){ // we do our own eval here as dojo.eval doesn't eval in global crossbrowser // This work X browser but but it relies on a DOM // plus it doesn't return anything, thats unrelevant here but not for dojo core appendNode = appendNode || dojo.doc.body; var n = appendNode.ownerDocument.createElement('script'); n.type = "text/javascript"; appendNode.appendChild(n); n.text = code; // DOM 1 says this should work } /*===== dojox.layout.ContentPane.DeferredHandle = { // cancel: Function cancel: function(){ // summary: cancel a in flight download }, addOnLoad: function(func){ // summary: add a callback to the onLoad chain // func: Function }, addOnUnload: function(func){ // summary: add a callback to the onUnload chain // func: Function } } =====*/dojo.declare("dojox.layout.ContentPane", dijit.layout.ContentPane, { // summary: // An extended version of dijit.layout.ContentPane // Supports infile scrips and external ones declared by <script src='' // relative path adjustments (content fetched from a different folder) // <style> and <link rel='stylesheet' href='..'> tags, // css paths inside cssText is adjusted (if you set adjustPaths = true) // // NOTE that dojo.require in script in the fetched file isn't recommended // Many widgets need to be required at page load to work properly // adjustPaths: Boolean // Adjust relative paths in html string content to point to this page // Only usefull if you grab content from a another folder then the current one adjustPaths: false, // cleanContent: Boolean // summary: // cleans content to make it less likly to generate DOM/JS errors. // description: // usefull if you send contentpane a complete page, instead of a html fragment // scans for // // * style nodes, inserts in Document head // * title Node, remove // * DOCTYPE tag, remove // * `<!-- *JS code here* -->` // * `<![CDATA[ *JS code here* ]]>` cleanContent: false, // renderStyles: Boolean // trigger/load styles in the content renderStyles: false, // executeScripts: Boolean // Execute (eval) scripts that is found in the content executeScripts: true, // scriptHasHooks: Boolean
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -