Changeset 23859 for lang/javascript/document.write.dom
- Timestamp:
- 11/17/08 00:43:41 (5 years ago)
- Files:
-
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
lang/javascript/document.write.dom/document.write.dom.2.js
r23851 r23859 1 // Author: Naoki Okamura (Nyarla) <thotep@nyarla.net> 2 // This script is in the public domain. 3 4 (function () { 5 6 if ( typeof window.DOMParser == 'undefined' ) { 1 /** 2 * Original author: Naoki Okamura (Nyarla) <thotep@nyarla.net> 3 * Adapter: drry 4 * This script is in the public domain. 5 */ 6 (function() { 7 var appxhtml = "application/xhtml+xml"; 8 if (typeof window.DOMParser == "undefined" || 9 typeof document.contentType == "string" && 10 document.contentType != appxhtml) { 7 11 return; 8 } 9 10 var parser = new DOMParser; 11 var generateHTMLDOM = function ( text ) { 12 var div = '<div xmlns="http://www.w3.org/1999/xhtml">' + text + '</div>'; 12 } 13 var parser = new DOMParser; 14 var generateHTMLDOM = function(text) { 15 text = '<div xmlns="http://www.w3.org/1999/xhtml">' + text + "</div>"; 13 16 var dom, root; 14 15 17 try { 16 dom = parser.parseFromString( div, 'application/xhtml+xml' ); 17 root = dom.documentElement; 18 dom = parser.parseFromString(text, appxhtml); 19 root = dom.documentElement; 20 } catch (e) { 21 return null; 18 22 } 19 catch ( e) {20 return false;23 if (root.nodeName == "parsererror") { 24 return null; 21 25 } 22 23 if ( root.nodeName == 'parsererror' ) {24 return false;25 }26 27 26 return root; 28 }; 29 30 var buffer = []; 31 var lastNode = false; 32 33 var getReferenceNode = function ( node ) { 34 if ( node && node.nodeName && node.nodeName == 'script' ) { 35 return node; 27 }; 28 var lastNode = null; 29 var getReferenceNode = function(node) { 30 if (node && node.nodeName && node.nodeName == "script") { 31 return node; 36 32 } 37 33 var element; 38 if ( node.lastChild ) element = arguments.callee( node.lastChild ); 39 40 if ( element ) { 41 return element; 34 if (node.lastChild && (element = arguments.callee(node.lastChild))) { 35 return element; 42 36 } 43 37 return lastNode; 44 };45 46 var writeHTML = function ( content, refNode) {47 if ( lastNode && lastNode != refNode) {48 refNode = lastNode;38 }; 39 var buffer = []; 40 var writeHTML = function(contents, refNode) { 41 if (lastNode && lastNode != refNode) { 42 refNode = lastNode; 49 43 } 50 51 buffer = buffer.concat( content ); 52 var dom = generateHTMLDOM( buffer.join( '' ) ); 53 var parent; 54 55 if ( dom ) { 56 buffer = []; 57 parent = refNode.parentNode; 58 Array.prototype.slice.call( dom.childNodes ).forEach( function ( node ) { 59 if ( !node ) return; 60 61 parent.insertBefore( node, refNode.nextSibling ); 62 refNode = node; 63 } ); 44 buffer = buffer.concat(contents); 45 var dom = generateHTMLDOM(buffer.join("")); 46 var parent, node, length, i = 0; 47 if (dom) { 48 buffer = []; 49 parent = refNode.parentNode; 50 length = dom.childNodes.length; 51 while (i < length) { 52 if (node = dom.childNodes.item(i++).cloneNode(true)) { 53 parent.insertBefore(node, refNode.nextSibling); 54 refNode = node; 55 } 56 } 64 57 } 65 66 58 lastNode = refNode; 67 68 return; 69 }; 70 71 document.write = function () { 72 var content = Array.prototype.slice.call( arguments ); 73 writeHTML( content, getReferenceNode( document ) ); 74 }; 75 76 document.writeln = function () { 77 var content = Array.prototype.slice.call( arguments ); 78 content[content.length] = '\n'; 79 writeHTML( content, getReferenceNode( document ) ); 80 }; 81 59 }; 60 document.write = function() { 61 writeHTML(Array.prototype.slice.call(arguments), 62 getReferenceNode(document)); 63 }; 64 document.writeln = function() { 65 writeHTML(Array.prototype.slice.call(arguments).concat("\n"), 66 getReferenceNode(document)); 67 }; 82 68 })();
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)