var Loader = Class.create({
initialize: function(){
this.result="";
},
loadXml: function(docPath){
this.ajaxLoad(docPath);
},
ajaxLoad: function(docPath){
//bind the passed function to the original class
//the method (get) needs to be explicitly written in lowercase for the Safari browser!
new Ajax.Request(docPath, {asynchronous: false, onSuccess: this._callback.bind(this), method: "get",
onFailure: function(r){alert("load failed");}})
},
_callback: function(r){
this.result=r.responseXML;
},
doc: function(){
if (this.result==""){
alert("no doc");
}
return this.result;
}
});
var Transformer = Class.create({
initialize: function(){
this.processor = new XSLTProcessor();
this.paramNames=[];
this.paramValues=[];
this.xslPath="";
this.xmlPath="";
this.fileLoader = new Loader();
},
setXslt: function(xslPath){
this.xslPath = xslPath;
this.fileLoader.loadXml(xslPath);
this.stylesheet = this.fileLoader.doc();
},
setXml: function(docPath){
this.xmlPath = docPath;
this.fileLoader.loadXml(docPath);
this.xmlDoc = this.fileLoader.doc();
},
setParam: function(paramName, paramValue){
this.paramNames.push(paramName);
this.paramValues.push(paramValue);
},
exec: function(thisdoc){
this.processor.importStylesheet(this.stylesheet);
for (var i=0;i<this.paramValues.length;i++){
this.processor.setParameter("",this.paramNames[i], this.paramValues[i]);
}
var fragment = this.processor.transformToFragment(this.xmlDoc, thisdoc);
return fragment;
}
});
//global functions
function changeLinks(){
//take existing links in the div 'displayableModules' and add an id, and suppress the href link
var allLinks=$("displayableModules").getElementsByTagName("a");
for (var i=0;i var thisElement=$(allLinks[i]); var thisElementUrl=String(thisElement.href); var moduleId="module_".concat(thisElementUrl.substring(thisElementUrl.lastIndexOf('#') + 1)); thisElement.setAttribute("id", moduleId); thisElement.setAttribute("name", thisElementUrl.substring(0,thisElementUrl.lastIndexOf('#'))); thisElement.setAttribute("href",""); } listenToLinks(); }
function listenToLinks(){ //take existing links in the div 'displayableModules' and listen to them... var allLinks=$("displayableModules").getElementsByTagName("a"); for (var i=0;i var thisElement=$(allLinks[i]); var thisModule=String(thisElement.id); thisElement.observe('click',transform); } }
function transform(e) { var moduleElement=e.element(); var thisModule=moduleElement.id; var sourceFile=moduleElement.name; var transformer = new Transformer(); transformer.setXslt("./xsl/graph.xsl"); transformer.setXml(sourceFile); transformer.setParam("id",thisModule.substring(7)); w=window.open("",thisModule,"width=670,height=500"); w.document.open(); w.document.write(' Bad channels for module ' + thisModule.substring(7) + ' f=transformer.exec(w.document); w.document.getElementById('insert').appendChild(f); w.document.close(); } document.observe('dom:loaded', changeLinks);
No comments:
Post a Comment