de-IIFE; minor refactoring

This commit is contained in:
Jeff Williams 2013-01-25 22:49:03 -08:00
parent a1799b6bbe
commit 92ba112ece

View File

@ -1,139 +1,134 @@
(function() { var hasOwnProp = Object.prototype.hasOwnProperty;
var doop = require("jsdoc/util/doop").doop,
hasOwnProp = Object.prototype.hasOwnProperty;
exports.addInherited = function(docs) { function mapDependencies(index) {
var dependencies = mapDependencies(docs.index); var doclets, doc, len, dependencies = {};
var sorted = sort(dependencies); for (var name in index) {
var longnames = []; if ( hasOwnProp.call(index, name) ) {
doclets = index[name];
// only build the list of longnames if we'll actually need it for (var i=0, ii=doclets.length; i<ii; ++i) {
if (sorted.length) { doc = doclets[i];
longnames = docs.map(function(doc) { if (doc.kind === "class" || doc.kind === "external") {
if (doc.longname) { dependencies[name] = {};
return doc.longname; len = doc.augments && doc.augments.length || 0;
for (var j=0; j<len; ++j) {
dependencies[name][doc.augments[j]] = true;
}
} }
}); }
} }
}
return dependencies;
}
sorted.forEach(function(name) { function Sorter(dependencies) {
var doclets = docs.index[name]; this.dependencies = dependencies;
var additions = getAdditions(doclets, docs, longnames); this.visited = {};
additions.forEach(function(doc) { this.sorted = [];
var name = doc.longname; }
if ( !hasOwnProp.call(docs.index, name) ) {
docs.index[name] = []; Sorter.prototype.visit = function(key) {
if (!(key in this.visited)) {
this.visited[key] = true;
for (var path in this.dependencies[key]) {
if (hasOwnProp.call(this.dependencies[key], path)) {
this.visit(path);
}
}
this.sorted.push(key);
}
};
Sorter.prototype.sort = function() {
for (var key in this.dependencies) {
if (hasOwnProp.call(this.dependencies, key)) {
this.visit(key);
}
}
return this.sorted;
};
function sort(dependencies) {
var sorter = new Sorter(dependencies);
return sorter.sort();
}
function getMembers(longname, docs) {
var candidate, members = [];
for (var i=0, ii=docs.length; i<ii; ++i) {
candidate = docs[i];
if (candidate.memberof === longname && candidate.scope === "instance") {
members.push(candidate);
}
}
return members;
}
function getAdditions(doclets, docs, longnames) {
var doop = require("jsdoc/util/doop").doop;
var additions = [];
var doc;
var parents;
var members;
var member;
var parts;
// doclets will be undefined if the inherited symbol isn't documented
doclets = doclets || [];
for (var i = 0, ii = doclets.length; i < ii; i++) {
doc = doclets[i];
parents = doc.augments;
if (parents && doc.kind === "class") {
for (var j = 0, jj = parents.length; j < jj; j++) {
members = getMembers(parents[j], docs);
for (var k = 0, kk = members.length; k < kk; k++) {
member = doop(members[k]);
member.inherits = member.longname;
member.inherited = true;
member.memberof = doc.longname;
parts = member.longname.split("#");
parts[0] = doc.longname;
member.longname = parts.join("#");
// if the child doesn't override the parent member, add the parent member
if (longnames.indexOf(member.longname) === -1) {
additions.push(member);
}
} }
docs.index[name].push(doc); }
docs.push(doc); }
}); }
return additions;
}
exports.addInherited = function(docs) {
var dependencies = mapDependencies(docs.index);
var sorted = sort(dependencies);
var longnames = [];
// only build the list of longnames if we'll actually need it
if (sorted.length) {
longnames = docs.map(function(doc) {
if (doc.longname) {
return doc.longname;
}
}); });
};
function mapDependencies(index) {
var doclets, doc, len, dependencies = {};
for (var name in index) {
if ( hasOwnProp.call(index, name) ) {
doclets = index[name];
for (var i=0, ii=doclets.length; i<ii; ++i) {
doc = doclets[i];
if (doc.kind === "class" || doc.kind === "external") {
dependencies[name] = {};
len = doc.augments && doc.augments.length || 0;
for (var j=0; j<len; ++j) {
dependencies[name][doc.augments[j]] = true;
}
}
}
}
}
return dependencies;
} }
function getAdditions(doclets, docs, longnames) { sorted.forEach(function(name) {
var additions = [], var doclets = docs.index[name];
doc, var additions = getAdditions(doclets, docs, longnames);
parents, additions.forEach(function(doc) {
members, var name = doc.longname;
member, if ( !hasOwnProp.call(docs.index, name) ) {
parts; docs.index[name] = [];
// doclets will be undefined if the inherited symbol isn't documented
doclets = doclets || [];
for (var i=0, ii=doclets.length; i<ii; ++i) {
doc = doclets[i];
parents = doc.augments;
if (parents && doc.kind === "class") {
for (var j=0, jj=parents.length; j<jj; ++j) {
members = getMembers(parents[j], docs);
for (var k=0, kk=members.length; k<kk; ++k) {
member = doop(members[k]);
member.inherits = member.longname;
member.inherited = true;
member.memberof = doc.longname;
parts = member.longname.split("#");
parts[0] = doc.longname;
member.longname = parts.join("#");
// if the child doesn't override the parent member, add the parent member
if ( longnames.indexOf(member.longname) === -1 ) {
additions.push(member);
}
}
}
} }
} docs.index[name].push(doc);
return additions; docs.push(doc);
} });
});
function getMembers(longname, docs) { };
var candidate, members = [];
for (var i=0, ii=docs.length; i<ii; ++i) {
candidate = docs[i];
if (candidate.memberof === longname && candidate.scope === "instance") {
members.push(candidate);
}
}
return members;
}
var Sorter = function(dependencies) {
this.dependencies = dependencies;
this.visited = {};
this.sorted = [];
};
Sorter.prototype = {
sort: function() {
for (var key in this.dependencies) {
if ( hasOwnProp.call(this.dependencies, key) ) {
this.visit(key);
}
}
return this.sorted;
},
visit: function(key) {
if (!(key in this.visited)) {
this.visited[key] = true;
for (var path in this.dependencies[key]) {
if ( hasOwnProp.call(this.dependencies[key], path) ) {
this.visit(path);
}
}
this.sorted.push(key);
}
}
};
function sort(dependencies) {
var sorter = new Sorter(dependencies);
return sorter.sort();
}
}());