diff --git a/lib/fs2.js b/lib/fs2.js
index 554709b..3726236 100644
--- a/lib/fs2.js
+++ b/lib/fs2.js
@@ -70,7 +70,7 @@ fs2.dirToTree = function (dir) {
//Very similar to filesToTree. Builds your basic nested deal.
var _tree = Object.keys(dir).reduce(function (acc, p) {
- var ps = ("./"+path.normalize("./pages/"+p)).split("/");
+ var ps = (p).replace("//", "/").split("/");
traverse(acc).set(ps, {});
return acc;
@@ -81,17 +81,21 @@ fs2.dirToTree = function (dir) {
var ordered = function ordered (tree) {
var hash = Hash(tree).map(function (v) {
var files = [];
- Object.keys(v).forEach( function (sv) {
- // order-ify the next layer down
- ordered(v[sv]).forEach(function(o) {
- files.push(o);
- });
+ // order-ify the next layer down
+ ordered(v).forEach(function(o) {
+ files.push(o);
});
return files;
}).items;
var _tree = [];
- Object.keys(hash).forEach(function(k) {
+ Object.keys(hash).filter(function (k) {
+ if (k === "") {
+ console.log("One of the hash values is \"\". This should not be happening.");
+ return false;
+ }
+ return true;
+ }).forEach(function(k) {
var obj = {};
obj[k] = hash[k];
_tree.push(obj);
diff --git a/lib/generators/content.js b/lib/generators/content.js
index 4f26a60..e5e2037 100644
--- a/lib/generators/content.js
+++ b/lib/generators/content.js
@@ -19,11 +19,22 @@ content.weld = function(dom, pages) {
//
var $ = docs.window.$;
-
// Here, we build up the table of contents.
var toc = helpers.buildToc(docs.src);
- Object.keys(pages).forEach( function (i){
+ /*console.log((function () {
+ var sorts = {};
+ Object.keys(pages).forEach( function (i) {
+ if (pages[i].metadata && pages[i].metadata.order) {
+ Object.keys(pages[i].metadata.order).forEach(function (j) {
+ sorts[i+"/"+j] = pages[i].metadata.order[j];
+ });
+ }
+ });
+ return fs2.filesToTree(sorts);
+ })());*/
+
+ Object.keys(pages).forEach( function (i) {
// parse content if it exists
if (pages[i].content) {
@@ -134,7 +145,10 @@ content.weld = function(dom, pages) {
$('title', dom).html('node docs - ' + (metadata && metadata.title) || "");
//Add some meta tags
- $('meta[name=keywords]', dom).attr('content', (metadata && metadata.tags || []).concat(docs.config.get("tags") || []).join(','));
+ $('meta[name=keywords]', dom).attr('content',
+ (metadata && metadata.tags || [])
+ .concat(docs.config.get("tags") || []).join(',')
+ );
//
// Remark: perform code highlighting, convert only inside
diff --git a/lib/helpers.js b/lib/helpers.js
index 3c10a98..f7f0f5a 100644
--- a/lib/helpers.js
+++ b/lib/helpers.js
@@ -17,28 +17,31 @@ helpers.unresolve = function (base, abs) {
helpers.buildToc = function (src) {
- var p = helpers.unresolve(path.resolve(__dirname + "/../pages"), src);
+ console.log(src);
+ var src = "./pages";
- var _articles = findit.sync(src);
+ // get list of directories.
+ var _articles = fs2.readDirSync(src, true, function (a) {
+ return path.extname(a).length === 0;
+ });
- //
- // Filter out all non-markdown files
- //
- _articles = _articles.filter(function(a){
- a = path.resolve(a);
- if(a.match(/\./)){
- return false;
- } else {
- return true;
+ Object.keys(_articles).forEach(function (i) {
+ if (_articles[i].isDirectory) {
+ _articles[i] = "";
}
});
- _articles = _articles.map(function (a) {
- return helpers.unresolve(src, a);
- });
+ // build up the tree.
+ var toc = fs2.dirToTree(_articles);
+
+ // digs until there is a layer with >1 item in it.
+ while(toc.length === 1) {
+ var key = Object.keys(toc[0])[0];
+
+ toc = toc[0][key];
+ }
- // toc has an "undefined" value.
- var toc = fs2.filesToTree(_articles);
+ //console.log(JSON.stringify(toc, true, 2));
return helpers.treeToHTML(toc);
}
@@ -51,83 +54,69 @@ var isElement = helpers.isElement = function(xs, e) {
//
// Function to use with sorting the ToC.
-// ie. toc.sort(tocSort);
+// ie. tocSort(xs, order);
//
-helpers.tocSort = function (a, b) {
- // For future reference, here is the list from the top-level.
- /*[
- 'cryptography',
- 'advanced',
- 'intermediate',
- 'errors',
- 'file-system',
- 'javascript-conventions',
- 'child-processes',
- 'command-line',
- 'REPL',
- 'getting-started',
- 'HTTP' ]
- */
-
- // These items should be listed *first*.
- var first = [
- 'getting-started',
- 'javascript-conventions'
- ];
-
- // These items should be listed *last*.
- var last = [
- 'intermediate',
- 'advanced',
- 'cryptography'
- ];
-
- var aInFirst = isElement(first, a),
- bInFirst = isElement(first, b),
- aInLast = isElement(last,a),
- bInLast = isElement(last, b);
-
-
- // Handles the case where a and/or b is in the "first" list.
- if ( aInFirst || bInFirst ) {
- if (aInFirst && bInFirst) {
- return first.indexOf(a)-first.indexOf(b);
- } else {
- return aInFirst ? -1 : 1;
+helpers.tocSort = function (xs, order) {
+
+ Object.keys(order).forEach(function (t) {
+ if (order[t] < 0) {
+ // This is so you can use negative indices, like python
+ order[t] = xs.length + order[t];
+ }
+ })
+
+ return xs.sort( function (a, b) {
+
+ //console.log(path.basename(a));
+ //console.log(path.basename(b));
+ var aHasOrder = order.hasOwnProperty(path.basename(a)),
+ bHasOrder = order.hasOwnProperty(path.basename(b));
+
+ if (aHasOrder && bHasOrder) {
+ return order[a]-order[b];
+ } else if (aHasOrder) {
+ console.log("a: "+order[path.basename(a)]);
+ console.log("b: "+xs.indexOf(b));
+ return order[path.basename(a)] - xs.indexOf(b)
+ } else if (bHasOrder) {
+ console.log(path.basename(a)+": "+xs.indexOf(a));
+ console.log(path.basename(b)+": "+order[path.basename(b)]);
+ return order[path.basename(b)]; - xs.indexOf(a)
}
- }
- if ( aInLast || bInLast ) {
- if ( aInLast && bInLast) {
- return last.indexOf(a) - last.indexOf(b);
+ if (a > b) {
+ return 1;
+ } else if (a < b) {
+ return -1;
} else {
- return aInLast ? 1 : -1;
+ return 0;
}
- }
-
- if (a > b) {
- return 1;
- } else if (a < b) {
- return -1;
- } else {
- return 0;
- }
-
+ });
};
+// TODO: Use weld.
helpers.treeToHTML = function(values, parent) {
var str = '