diff --git a/bin/deardesi.js b/bin/deardesi.js index 863c4a1..f318e53 100755 --- a/bin/deardesi.js +++ b/bin/deardesi.js @@ -24,8 +24,80 @@ cli.parse({ function init() { Desi = require('desirae').Desirae; + // + // 1. Transform (yml, slug, etc) + // + Desi.registerTransform( + 'lint' + , require('desirae/lib/transform-core').DesiraeTransformCore.lint + , { collections: true } + ); + Desi.registerTransform( + 'root' + , require('desirae/lib/transform-core').DesiraeTransformCore.root + , { root: true } + ); + Desi.registerTransform( + 'normalize' + , require('desirae/lib/transform-core').DesiraeTransformCore.normalize + , { root: true, collections: true } + ); + Desi.registerTransform( + 'disqus' + , require('desirae/lib/transform-core').DesiraeTransformCore.disqus + , { collections: true } + ); + + // + // 2. Aggregate (rss, categories, tags, etc) + // + Desi.registerAggregator(require('desirae/lib/aggregate-core').DesiraeAggregateCore.collate); + + // + // 3. Datamap (ruhoh, desirae, jade, mustache, liquid) + // + Desi.registerDataMapper('desirae', require('desirae/lib/datamap-core').DesiraeDatamapCore); + Desi.registerDataMapper('desirae@1.0', require('desirae/lib/datamap-core').DesiraeDatamapCore); + Desi.registerDataMapper('ruhoh', require('desirae-datamap-ruhoh').DesiraeDatamapRuhoh); Desi.registerDataMapper('ruhoh@2.6', require('desirae-datamap-ruhoh').DesiraeDatamapRuhoh); + + // + // 4. Render (md -> html, less -> css, etc) + // + Desi.registerRenderer( + 'js' + , require('desirae/lib/render-core').DesiraeRenderCss + , { themes: true, assets: true } + ); + Desi.registerRenderer( + 'css' + , require('desirae/lib/render-core').DesiraeRenderCss + , { themes: true, assets: true } + ); + + ['html', 'htm', 'xhtm', 'xhtml'].forEach(function (ext) { + Desi.registerRenderer( + ext + , require('desirae/lib/render-core').DesiraeRenderHtml + , { root: true, collections: true, themes: true, assets: true } + ); + }); + + ['md', 'markdown', 'mdown', 'mkdn', 'mkd', 'mdwn', 'mdtxt', 'mdtext'].forEach(function (ext) { + Desi.registerRenderer( + ext + , require('desirae/lib/render-core').DesiraeRenderMarkdown + , { root: true, collections: true } + ); + }); + + Desi.registerRenderer( + 'jade' + , require('desirae/lib/render-core').DesiraeRenderJade + // TODO how to support jade in place of Mustache for layouts? + , { root: true, collections: true, themes: true } + ); } function serve(displayDir, blogdir) { @@ -60,6 +132,7 @@ function build(blogdir) { ; env.working_path = env.blogdir = blogdir; + Desi.init(desi, env).then(function () { env.url = desi.site.base_url + desi.site.base_path.replace(/^\/$/, ''); env.base_url = desi.site.base_url; @@ -68,7 +141,14 @@ function build(blogdir) { //env.since = 0; Desi.buildAll(desi, env).then(function () { - Desi.write(desi, env).then(function () { + Desi.write(desi, env).then(function (info) { + console.info( + 'wrote ' + info.numFiles + + ' files (' + info.size && (info.size / (1024 * 1024)).toFixed(2) || 'unkown' + + ' MiB) in ' + + ((info.start - info.end) / 1000).toFixed(3) + 's' + ); + console.info('Built and saved to ' + path.join(env.working_path, env.compiled_path)); }); }); @@ -98,6 +178,12 @@ function createPost(originalDir, blogdir, title, extra) { env.working_path = env.blogdir = blogdir; Desi.init(desi, env).then(function () { + // TODO move this 'create new post' logic to desirae proper + var collectionname = Object.keys(desi.config.collections)[0] + , collection = desi.config.collections[collectionname] + , entity = {} + ; + /* Desi.init(desi, env).then(function () { env.url = desi.site.base_url + desi.site.base_path.replace(/^\/$/, ''); @@ -107,25 +193,17 @@ function createPost(originalDir, blogdir, title, extra) { //env.since = 0; */ - // TODO move this logic to desirae post.title = title; post.description = ""; post.date = Desi.toLocaleDate(new Date()); // TODO use site.permalink or collection.permalink or something like that - slug = post.title.toLowerCase() - .replace(/["']/g, '') - .replace(/\W/g, '-') - .replace(/^-+/g, '') - .replace(/-+$/g, '') - .replace(/--/g, '-') - ; + slug = Desi.slugify(post.title); // TODO as per config - post.permalink = path.join('/', 'articles', slug + '.html'); post.uuid = UUID.v4(); // TODO as per config for default collection and default format (jade, md, etc) - filepath = path.join(blogdir, (/*config.collection ||*/ 'posts'), slug + '.md'); + filepath = path.join(blogdir, collectionname, slug + '.md'); displaypath = path.join(originalDir, 'posts', slug + '.md').replace(/^\/(Users|home)\/[^\/]+\//, '~/').replace(/ /g, '\\ '); ['updated', 'theme', 'layout', 'swatch'].forEach(function (key) { @@ -134,6 +212,16 @@ function createPost(originalDir, blogdir, title, extra) { } }); + + Object.keys(post).forEach(function (key) { + entity[key] = post[key]; + }); + entity.slug = slug; + + post.permalink = Desi.permalinkify( + desi + , collection.fallback_permalink || collection.permalink + , entity); return Desi.fsapi.putFiles([{ path: filepath , contents: diff --git a/index.html b/index.html index 7a9b84b..982c1b5 100644 --- a/index.html +++ b/index.html @@ -95,6 +95,7 @@ + @@ -108,6 +109,10 @@ + + + +