dojo.provide("dojox.highlight.widget.Code");
dojo.require("dijit._Widget");
dojo.require("dijit._Templated");
dojo.require("dojox.highlight");
// A simple source code formatting widget that adds line numbering, alternating line colors
// and line range support on top of dojox.highlight module.
dojo.declare("highlight.Code",[dijit._Widget, dijit._Templated],{
url: "",
range:null,
style:"",
listType:"1",
lang:"",
// Note: If more control over formatting is required, the order list items can be replaced
// with a table implementation instead... Excercise is left for those that need it...
templateString:
'
',
postCreate: function(){
this.inherited(arguments);
if(this.url){
// load from a url
dojo.xhrGet({
url: this.url,
// then poopulate:
load: dojo.hitch(this,"_populate"),
error: dojo.hitch(this,"_loadError")
});
}else{
// or just populate from our internal content
this._populate(this.containerNode.innerHTML);
}
},
_populate: function(data){
// put the content in a common node
this.containerNode.innerHTML =
"
" +
data.replace(/\ "
";
// highlight it
dojo.query("pre > code",this.containerNode).forEach(dojox.highlight.init);
// FIXME: in ie7, the innerHTML in a real
isn't split by \n's ?
// split the content into lines
var lines = this.containerNode.innerHTML.split("\n");
dojo.forEach(lines,function(line,i){
// setup all the lines of the content as
's
var li = dojo.doc.createElement('li');
// add some style sugar:
dojo.addClass(li, (i % 2 !== 0 ? "even" : "odd"));
line = "" + line + "
";
line = line.replace(/\t/g," ");
li.innerHTML = line;
this.codeList.appendChild(li);
},this);
// save our data
this._lines = dojo.query("li",this.codeList);
this._updateView();