firedoc
Version:
API Doc generator rewritten from [YUIDoc](https://github.com/yui/yuidoc). We use this tool to document a large JavaScript game engine [Fireball](http://github.com/fireball-x/fireball) at [docs-zh.fireball-x.com/api](http://docs-zh.fireball-x.com/api/) and
127 lines (116 loc) • 3.1 kB
JavaScript
$(document).ready(function () {
'use strict';
var movedItems = [];
var itemsCont = $('#api-items');
var itemsList = $('#api-items>li>.api-list-item-clickable');
itemsList.on(
'click',
function onclick () {
$(this).parent().find('.members-list').toggleClass('hidden');
}
);
var inputing = false;
var searchBox = $('#api-tabview-filter>input[type=search]');
searchBox.on(
'input',
function (e) {
clearTimeout(inputing);
inputing = setTimeout(function () {
filter($(this).val());
}.bind(this), 300);
}
);
$(document).on('keyup', function (e) {
// shortcut 's' -> search
if (e.keyCode === 83) {
searchBox.focus();
}
});
var records = [];
itemsCont.find('.module').each(
getAppendor('module')
);
itemsCont.find('.class').each(
getAppendor('class')
);
itemsCont.find('.enum').each(
getAppendor('enum')
);
var firstRecords = records.filter(function (r) {
return r.type !== 'member';
});
function getAppendor (type) {
return function () {
var $this = $(this);
var name = $this.text().trim().replace(/\n\r/, '');
records.push(
appendMmebers({
'this': $this.parent().parent(),
'ns': name.toLowerCase(),
'name': name,
'type': type
})
);
};
}
function appendMmebers (parent) {
$(parent.this).find('.members>li').each(function () {
var $this = $(this);
var $ul = $this.parent('ul');
var $h3 = $ul.prev('h3');
var name = $this.find('.name').text().trim().replace(/\n\r/, '');
var namespace = [parent.name, name].join('.').toLowerCase();
records.push({
'parent': parent,
'ns': namespace,
'name': name,
'type': 'member',
'this': $this,
'$ul': $ul,
'$h3': $h3
});
});
return parent;
}
function clearMoved () {
var reset = movedItems.shift();
if (reset) {
reset();
clearMoved();
}
}
function filter (keyword) {
clearMoved();
records.filter(function (r) {
r.this.show().addClass('visible');
if (r.ns.search(keyword.toLowerCase()) === -1) {
r.this.hide().removeClass('visible');
} else {
if (keyword) {
if (r.type !== 'member') {
r.this.find('.members-list').removeClass('hidden');
itemsCont.prepend(r.this);
// set the reset stuff
var index = firstRecords.indexOf(r);
movedItems.push(function reset () {
if (index > 0)
r.this.insertAfter(firstRecords[index - 1].this);
else
r.this.insertBefore(firstRecords[0].this);
});
} else {
r.parent.this.find('.members-list').removeClass('hidden');
}
} else {
r.this.find('.members-list').addClass('hidden');
}
return true;
}
}).map(function (r) {
if (r.parent) {
r.parent.this.show();
}
return r;
});
}
});