var Docs = {
anchorsPath: '../Docs/index.html',
scriptsJson: '../scripts.json',
start: function(){
if (location.protocol == 'file:') Docs.local();
Docs.loadScripts();
},
loadScripts: function(){
Docs.Scripts = new Hash();
new Request({ link: 'cancel', onSuccess: function(json){
var scripts = JSON.decode(json);
$each(scripts, function(files, dir) {
Docs.Scripts.set(dir, $H(files).getKeys());
});
Docs.process();
}
}).get(Docs.scriptsJson);
},
process: function(){
var menu = $('menu-wrapper'), elements = [], files;
var request = new Request({ link: 'cancel', onSuccess: Docs.update });
// selectors buggy, hack varible current
var current;
////
Docs.Scripts.each(function(scripts, folder){
var head = new Element('h2', { 'text': folder });
var list = new Element('ul', { 'class': 'folder' });
list.adopt(scripts.map(function(script){
var file = new Element('h3').adopt(new Element('a', {
'text': script,
'href': '#' + folder + '/' + script,
'events': {
'click': function(){
$('docs-wrapper').empty().set('html', '
Loading...
');
files.removeClass('selected');
file.addClass('selected');
request.get(this.get('href').split('#')[1] + '.md');
}
}
}));
/////
if(('#' + folder + '/' + script) == window.location.hash){
current=file.getFirst();
}
/////
return new Element('li').adopt(file);
}));
elements.push(head);
elements.push(list);
});
files = menu.adopt(elements).getElements('h3');
////
(current || document.getElement('#menu a[href=' + window.location.hash + ']') || document.getElement('#menu a')).fireEvent('click');
},
local: function() {
Request.implement({
getXHR: function(){
return (window.ActiveXObject) ? new ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest();
},
isSuccess: function() {
return (!this.status || (this.status >= 200) && (this.status < 300));
}
});
},
update: function(markdown){
var wrapper = $('docs-wrapper'), submenu = $('submenu');
if (!submenu) submenu = new Element('div').set('id', 'submenu');
var parse = Docs.parse(markdown);
wrapper.set('html', parse.innerHTML);
document.getElement('#menu-wrapper h3.selected').getParent().grab(submenu.empty());
var methods = Docs.methods(parse, submenu);
Docs.scroll();
},
parse: function(markdown){
var html = ShowDown(markdown);
var temp = new Element('div').set('html', html);
var anchor = (/\{#(.*)\}/);
temp.getElements('h1, h2, h3, h4, h5, h6').each(function(h){
var matches = h.innerHTML.match(anchor);
if (matches) h.set('id', matches[1]);
h.innerHTML = h.innerHTML.replace(anchor, '');
});
var heading = temp.getElement('h1');
if (heading) heading.set('class', 'first');
return temp;
},
methods: function(parse, wrapper) {
var headers = parse.getElements('h1');
var anchors = parse.getElements('h2[id]');
headers.each(function(header, i) {
var group = new Element('ul').inject(wrapper);
var head = header.get('text').split(':');
head = (head.length == 1) ? head[0] : head[1];
var section = header.id.split(':')[0];
var lnk = '' + head + '';
new Element('li').set('html', lnk).inject(group);
var subgroup = new Element('ul', {'class': 'subgroup'}).inject(group);
anchors.each(function(anchor) {
var sep = anchor.id.match(':');
var subSection = anchor.id.split(':')[0];
if (section == subSection || (!i && !sep)) {
var method = anchor.get('text').replace(section, '');
lnk = '' + method + '';
new Element('li').set('html', lnk).inject(subgroup);
}
});
});
},
scroll: function() {
if (!Docs.scrolling) Docs.scrolling = new Fx.Scroll('docs', {'offset': {x: 0, y: -4}});
$$('#submenu a').each(function(anchor) {
anchor.addEvent('click', function(e) {
e.stop();
var lnk = $(anchor.href.split('#')[1]);
Docs.scrolling.toElement(lnk);
});
});
}
};
var ShowDown = function(text){
return new Showdown.converter().makeHtml(text);
};
window.addEvent('domready', Docs.start);