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('
'<span style="color: #000000"> + thisModule + </span>'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);