1
if (typeof XDocController == "undefined" || !XDocController) {
    /**
     * The XDocController global namespace object.  If XDocController is already defined, the
     * existing XDocController object will not be overwritten so that defined
     * namespaces are preserved.
     */
    var XDocController = {};
}
XDocController.util = {};
/***
* transform string to JSON object
* @param string: string which represents json
* @return string in JSON Format
***/
XDocController.util.stringToJSON = function(string){
if (!string) return;
var json = YAHOO.lang.JSON.parse(string);
return json;
};
/***
* transform string to XML
* @param string: string which represents xml
* @return string in XML Format
***/
XDocController.util.stringToXML = function(string){
if (!string) return;
var xml;
//& is not authorized in xml
string = string.replace(/&/g,"&amp;");
if (document.implementation.createDocument){
// Mozilla, create a new DOMParser
var parser = new DOMParser();
xml = parser.parseFromString("<root>"+string+"</root>", "text/xml");
} else if (window.ActiveXObject){
// Internet Explorer, create a new XML document using ActiveX
// and use loadXML as a DOM parser.
xml = new ActiveXObject("Microsoft.XMLDOM");
xml.async ="false";
//add root node
xml.loadXML("<root>"+string+"</root>");
}
return xml;
};
/***
* transform xml in string
* @param xmlObject: xml
* @return string which represents xml
***/
XDocController.util.XMLToString = function(xmlObject){
var xmlString;
if (document.implementation.createDocument){
xmlString = (new XMLSerializer()).serializeToString(xmlObject);
} else if (window.ActiveXObject){
xmlString = xmlObject.xml;
}
//replace &amp; in & (cf stringToXML function)
xmlString = xmlString.replace(/&amp;/ig,"&");
//Firefox transform <div></div> in <div/> (in XMLSerializer constructor)
var pattern = /<([^>]*)\/>/g;
xmlString = xmlString.replace(pattern,"<$1></$1>");
//remove root tag
var rootPattern = /^<root>(.*)<\/root>$/;
xmlString = xmlString.replace(rootPattern,"$1");
return xmlString;
};
/***
* remove tag in xml stream
* @param xml: xml stream
* @tagName: tag name
***/
XDocController.util.removeTagFromXML = function(xml, tagName){
for (var i=0;i<xml.getElementsByTagName(tagName).length;i++){
var tag = xml.getElementsByTagName(tagName)[i];
tag.parentNode.removeChild(tag);
i--;
}
};
/***
* import head elements
* @param htmlString: string which represents HTML code
***/
XDocController.util.importHeadElements = function(htmlString){
if (!htmlString) return;
var html = XDocController.util.stringToXML(htmlString);
//title
var title = html.getElementsByTagName("title");
if ((title)&&(title.length>0)){
XDocController.util.setTitle(title[0]);
}
//js files
var jsFiles = html.getElementsByTagName("script");
if ((jsFiles)&&(jsFiles.length>0)){
XDocController.util.addJsScripts(jsFiles);
}
//css files
var cssFiles = html.getElementsByTagName("link");
if ((cssFiles)&&(cssFiles.length>0)){
XDocController.util.addCssFiles(cssFiles);
}
//inline css
var inLineCss = html.getElementsByTagName("style");
if ((inLineCss)&&(inLineCss.length>0)){
XDocController.util.addInLineCss(inLineCss);
}
};
/***
* import body elements
* @param htmlString: string which represents HTML code
***/
XDocController.util.importBodyElements = function(htmlString){
if (!htmlString) return;
var xml = XDocController.util.stringToXML(htmlString);
//js files
var jsFiles = xml.getElementsByTagName("script");
if ((jsFiles)&&(jsFiles.length>0)){
XDocController.util.addJsScripts(jsFiles);
}
//inline css
var inLineCss = xml.getElementsByTagName("style");
if ((inLineCss)&&(inLineCss.length>0)){
XDocController.util.addInLineCss(inLineCss);
}
//remove useless tag
XDocController.util.removeTagFromXML(xml, "script");
XDocController.util.removeTagFromXML(xml, "style");
return xml;
};
/***
* set window title
* @param title: title
***/
XDocController.util.setTitle = function(title){
if (title.firstChild){
window.document.title = title.firstChild.nodeValue;
}
};
/***
* add JS scripts to page
* @param scripts: JS scripts
***/
XDocController.util.addJsScripts = function(scripts){
var head = document.getElementsByTagName("head").item(0);
var body = document.getElementsByTagName("body").item(0);
for (var i=0; i<scripts.length; i++){
var script = document.createElement("script");
script.setAttribute("type","text/javascript");
var src = scripts[i].getAttribute("src");
if (!src){
script.text = scripts[i].firstChild.nodeValue;
//add script to body
body.appendChild(script);
}else{
script.setAttribute("src",src);
//add script to head
head.appendChild(script);
}
}
};
/***
* add CSS files to page
* @param scripts: CSS links
***/
XDocController.util.addCssFiles = function(links){
var head = document.getElementsByTagName("head").item(0);
for (var i=0; i<links.length; i++){
var pattern = /text\/css/i;
var type = links[i].getAttribute("type");
if (pattern.test(type)){
var link = document.createElement("link");
link.setAttribute("type","text/css");
link.setAttribute("rel","stylesheet");
link.setAttribute("href",links[i].getAttribute("href"));
head.appendChild(link);
}
}
};
/***
* add inline CSS to page
* @param styles: CSS styles
***/
XDocController.util.addInLineCss = function(styles){
var head = document.getElementsByTagName("head").item(0);
for (var i=0; i<styles.length; i++){
var style= document.createElement("style");
style.setAttribute("type","text/css");
if (style.styleSheet){
style.styleSheet.cssText = styles[i].firstChild.nodeValue;
}else{
var t = document.createTextNode(styles[i].firstChild.nodeValue);
style.appendChild(t);
}
head.appendChild(style);
}
};
