/* metalsmith-meta adds further meta information to metalsmith files: root - the absolute or relative website root folder layout - sets from default from collection isPage - is an index page mainCollection - the primary collection name navmain - array of main navigation pages navsub - array of secondary navigation pages */ module.exports = function() { 'use strict'; return function(files, metalsmith, done) { var meta = metalsmith.metadata(), file, f, page, p, c, thisCol, layout; for (f in files) { file = files[f]; // calculate root file.root = file.root || meta.rootpath || (file.path ? '../'.repeat(file.path.split('/').length) : ''); // get first non-page collection file.mainCollection = null; file.isPage = false; c = 0; while (c < file.collection.length) { if (file.collection[c] == 'page') { file.isPage = true; } else { file.mainCollection = file.mainCollection || file.collection[c]; } c++; } // main navigation file.navmain = []; for (p = 0; p < meta.collections.page.length; p++) { page = meta.collections.page[p]; if (!p || page.path != meta.collections.page[p-1].path) { file.navmain.push({ title: page.title || 'Home', description: page.description || '', image: file.root + page.image || '', path: file.root + page.path + (page.path ? '/' : ''), dateFormat: page.dateFormat, active: page.path == file.path || page.collection.indexOf(file.mainCollection) >= 0 }); } } if (file.mainCollection) { // get collection metadata thisCol = meta.collections[file.mainCollection]; // layout from page, collection, default layout = file.layout || (thisCol.metadata && thisCol.metadata.layout) || null; if (layout) file.layout = layout; // secondary navigation file.navsub = []; for (p = 0; p < thisCol.length; p++) { page = thisCol[p]; if (page.collection.indexOf('page') < 0 && (!p || page.path != thisCol[p-1].path)) { file.navsub.push({ title: page.title || 'Home', description: page.description || '', image: file.root + page.image || '', path: file.root + page.path + (page.path ? '/' : ''), dateFormat: page.dateFormat, active: page.path == file.path }); } } } } done(); }; };