create post from command line
This commit is contained in:
		
							parent
							
								
									643e26673c
								
							
						
					
					
						commit
						4a135bafb1
					
				@ -43,7 +43,7 @@ git submodule update
 | 
			
		||||
And now fire up Dear Desi to get started
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
desi serve -b ~/my-desirae-blog
 | 
			
		||||
desi serve -d ~/my-desirae-blog
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Now open up your evergreen browser to <http://local.dear.desi:65080>
 | 
			
		||||
@ -53,7 +53,7 @@ Commandline
 | 
			
		||||
 | 
			
		||||
Once you've done the initial setup in the browser, you can run `desi` from the commandline
 | 
			
		||||
 | 
			
		||||
**NOTE:** You can omit the `-b` if you are already in your blog directory.
 | 
			
		||||
**NOTE:** You can omit the `-d` if you are already in your blog directory.
 | 
			
		||||
 | 
			
		||||
Build Production Site
 | 
			
		||||
---------------------
 | 
			
		||||
@ -61,7 +61,7 @@ Build Production Site
 | 
			
		||||
You must set `base_path` and `base_url` in `site.yml` before attempting to build.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
desi build -b ~/my-desirae-blog
 | 
			
		||||
desi build -d ~/my-desirae-blog
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Outputs to `~/my-desirae-blog/compiled`
 | 
			
		||||
@ -70,7 +70,7 @@ Create a new Post
 | 
			
		||||
-----------------
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
desi post "My First Post" -b ~/my-desirae-blog
 | 
			
		||||
desi post "My First Post" -d ~/my-desirae-blog
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Outputs to `~/my-desirae-blog/posts/my-first-post.md`
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										123
									
								
								bin/deardesi.js
									
									
									
									
									
								
							
							
						
						
									
										123
									
								
								bin/deardesi.js
									
									
									
									
									
								
							@ -4,6 +4,7 @@ var PromiseA = require('bluebird')
 | 
			
		||||
  , fs = PromiseA.promisifyAll(require('fs'))
 | 
			
		||||
  , path = require('path')
 | 
			
		||||
  , cli = require('cli')
 | 
			
		||||
  , UUID = require('node-uuid')
 | 
			
		||||
  ;
 | 
			
		||||
 | 
			
		||||
cli.parse({
 | 
			
		||||
@ -19,8 +20,8 @@ function serve(blogdir) {
 | 
			
		||||
    ;
 | 
			
		||||
 | 
			
		||||
  server = http.createServer(app).listen(65080, function () {
 | 
			
		||||
    console.log("Listening from " + blogdir);
 | 
			
		||||
    console.log("Listening on http://local.dear.desi:" + server.address().port);
 | 
			
		||||
    console.info("Listening from " + blogdir);
 | 
			
		||||
    console.info("Listening on http://local.dear.desi:" + server.address().port);
 | 
			
		||||
  });
 | 
			
		||||
  //secureServer = https.createServer(app).listen(65043);
 | 
			
		||||
}
 | 
			
		||||
@ -41,25 +42,128 @@ function build(blogdir) {
 | 
			
		||||
 | 
			
		||||
    Desi.buildAll(desi, env).then(function () {
 | 
			
		||||
      Desi.write(desi, env).then(function () {
 | 
			
		||||
        console.log('Build Success!');
 | 
			
		||||
        console.info('Built and saved to ' + path.join(env.wolking_path, env.compiled_path));
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function createPost(originalDir, blogdir, title, extra) {
 | 
			
		||||
  if (!title) {
 | 
			
		||||
    console.error("Usage desi post \"My First Post\"");
 | 
			
		||||
    console.error("(you didn't specify a title)");
 | 
			
		||||
    process.exit(1);
 | 
			
		||||
  }
 | 
			
		||||
  if (extra) {
 | 
			
		||||
    console.error("Usage desi post \"My First Post\"");
 | 
			
		||||
    console.error("(too many arguments - maybe you didn't put your title in quotes?)");
 | 
			
		||||
    process.exit(1);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  var Desi = require('desirae').Desirae
 | 
			
		||||
    //, desi = {}
 | 
			
		||||
    , env = {}
 | 
			
		||||
    , post = {}
 | 
			
		||||
    , slug
 | 
			
		||||
    , filepath
 | 
			
		||||
    , displaypath
 | 
			
		||||
    ;
 | 
			
		||||
 | 
			
		||||
  env.working_path = env.blogdir = blogdir;
 | 
			
		||||
 | 
			
		||||
  Desi._initFileAdapter(env).then(function () {
 | 
			
		||||
  /*
 | 
			
		||||
  Desi.init(desi, env).then(function () {
 | 
			
		||||
    env.url = desi.site.base_url + desi.site.base_path.replace(/^\/$/, '');
 | 
			
		||||
    env.base_url = desi.site.base_url;
 | 
			
		||||
    env.base_path = desi.site.base_path;
 | 
			
		||||
    env.compiled_path = 'compiled';
 | 
			
		||||
    //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, '-')
 | 
			
		||||
      ;
 | 
			
		||||
   
 | 
			
		||||
    // 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');
 | 
			
		||||
    displaypath = path.join(originalDir, 'posts', slug + '.md').replace(/^\/(Users|home)\/[^\/]+\//, '~/').replace(/ /g, '\\ ');
 | 
			
		||||
 | 
			
		||||
    ['updated', 'theme', 'layout', 'swatch'].forEach(function (key) {
 | 
			
		||||
      if (!post[key]) {
 | 
			
		||||
        delete post[key];
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    return Desi.fsapi.putFiles([{
 | 
			
		||||
      path: filepath
 | 
			
		||||
    , contents: 
 | 
			
		||||
          '---\n'
 | 
			
		||||
        + Desi.YAML.stringify(post).trim()
 | 
			
		||||
        + '\n'
 | 
			
		||||
        + '---\n'
 | 
			
		||||
        + '\n'
 | 
			
		||||
        + '\n'
 | 
			
		||||
    }], { overwrite: false }).then(function (r) {
 | 
			
		||||
      var err
 | 
			
		||||
        ;
 | 
			
		||||
 | 
			
		||||
      if (r.error || r.errors.length) {
 | 
			
		||||
        err = r.error || r.errors[0];
 | 
			
		||||
        if (/exists/i.test(err.message)) {
 | 
			
		||||
          console.error('');
 | 
			
		||||
          console.error("Looks like that post already exists. Try a different name?");
 | 
			
		||||
          console.error('');
 | 
			
		||||
          console.error('');
 | 
			
		||||
        } else {
 | 
			
		||||
          throw err;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      console.log('');
 | 
			
		||||
      console.log(displaypath);
 | 
			
		||||
      console.log('');
 | 
			
		||||
      console.log('vim ' + displaypath);
 | 
			
		||||
      console.log('(or emacs ' + displaypath + ', if you swing that way)');
 | 
			
		||||
      console.log('');
 | 
			
		||||
      console.log('');
 | 
			
		||||
    });
 | 
			
		||||
  /*
 | 
			
		||||
  });
 | 
			
		||||
  */
 | 
			
		||||
  });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
cli.main(function (args, options) {
 | 
			
		||||
  var command = args[0]
 | 
			
		||||
    , blogdir = options.blog
 | 
			
		||||
    , blogdir = options.blogdir
 | 
			
		||||
    , originalDir = blogdir
 | 
			
		||||
    ;
 | 
			
		||||
  
 | 
			
		||||
  if (!blogdir) {
 | 
			
		||||
    blogdir = path.resolve('./');
 | 
			
		||||
    originalDir = './';
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (!fs.existsSync(path.join(options.blog, 'site.yml'))) {
 | 
			
		||||
    console.error("Usage: deardesi [serve|init|post] -b ~/path/to/blog");
 | 
			
		||||
  if (!fs.existsSync(path.join(options.blogdir, 'site.yml'))) {
 | 
			
		||||
    console.error("Usage: desi [serve|init|post] -d ~/path/to/blog");
 | 
			
		||||
    console.error("(if ~/path/to/blog doesn't yet exist or doesn't have config.yml, site.yml, etc, "
 | 
			
		||||
      + "try `deardesi init -b ~/path/to/blog'");
 | 
			
		||||
      + "try `deardesi init -d ~/path/to/blog'");
 | 
			
		||||
    process.exit(1);
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
@ -74,8 +178,7 @@ cli.main(function (args, options) {
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
  else if ('post' === command) {
 | 
			
		||||
    console.error("`post' not yet implemented");
 | 
			
		||||
    process.exit(1);
 | 
			
		||||
    createPost(originalDir, blogdir, args[1], args[2]);
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
  else if ('serve' === command) {
 | 
			
		||||
@ -83,7 +186,7 @@ cli.main(function (args, options) {
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
  else {
 | 
			
		||||
    console.error("Usage: deardesi [serve|init|post] -b ~/path/to/blog");
 | 
			
		||||
    console.error("Usage: desi [serve|init|post] -d ~/path/to/blog");
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
@ -7,8 +7,8 @@
 | 
			
		||||
    "test": "echo \"Error: no test specified\" && exit 1"
 | 
			
		||||
  },
 | 
			
		||||
  "bin": {
 | 
			
		||||
    "deardesi": "bin/deardesi.js"
 | 
			
		||||
  , "desi": "bin/deardesi.js"
 | 
			
		||||
    "deardesi": "bin/deardesi.js",
 | 
			
		||||
    "desi": "bin/deardesi.js"
 | 
			
		||||
  },
 | 
			
		||||
  "repository": {
 | 
			
		||||
    "type": "git",
 | 
			
		||||
@ -44,8 +44,9 @@
 | 
			
		||||
    "connect": "^3.3.4",
 | 
			
		||||
    "connect-query": "^0.2.0",
 | 
			
		||||
    "connect-send-json": "^1.0.0",
 | 
			
		||||
    "desirae": "^0.9.1",
 | 
			
		||||
    "desirae": "^0.9.2",
 | 
			
		||||
    "fs.extra": "^1.3.0",
 | 
			
		||||
    "node-uuid": "^1.4.2",
 | 
			
		||||
    "require-yaml": "0.0.1",
 | 
			
		||||
    "serve-static": "^1.8.0"
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@ -17,7 +17,8 @@
 | 
			
		||||
        <div class="row">
 | 
			
		||||
          <div class="col-lg-7">
 | 
			
		||||
            <br/>
 | 
			
		||||
            <iframe width="560" height="315" src="//www.youtube.com/embed/YZzhIIJmlE0" frameborder="0" allowfullscreen></iframe>
 | 
			
		||||
            <!--iframe width="560" height="315" src="//www.youtube.com/embed/YZzhIIJmlE0" frameborder="0" allowfullscreen></iframe-->
 | 
			
		||||
            <img src="http://dropsha.re/files/fly6+.8/desi-parker-2.jpg"/>
 | 
			
		||||
            <br/>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="col-lg-5">
 | 
			
		||||
 | 
			
		||||
@ -9,13 +9,13 @@ angular.module('myApp.post', ['ngRoute'])
 | 
			
		||||
}])
 | 
			
		||||
 | 
			
		||||
.controller('PostCtrl'
 | 
			
		||||
  , ['$scope', '$location', '$timeout', 'Desirae'
 | 
			
		||||
  , function ($scope, $location, $timeout, Desirae) {
 | 
			
		||||
  , ['$scope', '$location', '$timeout', 'DesiraeService'
 | 
			
		||||
  , function ($scope, $location, $timeout, DesiraeService) {
 | 
			
		||||
  var scope = this
 | 
			
		||||
    ;
 | 
			
		||||
 | 
			
		||||
  function init() {
 | 
			
		||||
    Desirae.meta().then(function (desi) {
 | 
			
		||||
    DesiraeService.meta().then(function (desi) {
 | 
			
		||||
      console.warn(desi);
 | 
			
		||||
      scope.blogdir = desi.blogdir.path.replace(/^\/(Users|home)\/[^\/]+\//, '~/');
 | 
			
		||||
      scope.site = desi.site;
 | 
			
		||||
@ -41,7 +41,7 @@ angular.module('myApp.post', ['ngRoute'])
 | 
			
		||||
        yml: {
 | 
			
		||||
          title: ""
 | 
			
		||||
        , permalink: "/article/new.html"
 | 
			
		||||
        , date: Desirae.toDesiDate(new Date())// "YYYY-MM-DD HH:MM pm" // TODO desirae
 | 
			
		||||
        , date: DesiraeService.toDesiDate(new Date())// "YYYY-MM-DD HH:MM pm" // TODO desirae
 | 
			
		||||
        , updated: null
 | 
			
		||||
        , description: ""
 | 
			
		||||
        , categories: []
 | 
			
		||||
@ -128,7 +128,7 @@ angular.module('myApp.post', ['ngRoute'])
 | 
			
		||||
    $timeout.cancel(scope.dtlock);
 | 
			
		||||
    scope.dtlock = $timeout(function () {
 | 
			
		||||
      if (scope.selected && scope.selected.date === scope.selected.post.yml.date) {
 | 
			
		||||
        scope.selected.date = scope.selected.post.yml.date = Desirae.toDesiDate(new Date());
 | 
			
		||||
        scope.selected.date = scope.selected.post.yml.date = DesiraeService.toDesiDate(new Date());
 | 
			
		||||
      }
 | 
			
		||||
      scope.onChange();
 | 
			
		||||
      updateDate();
 | 
			
		||||
@ -163,7 +163,7 @@ angular.module('myApp.post', ['ngRoute'])
 | 
			
		||||
        + scope.selected.post.body.trim()
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    Desirae.putFiles(files).then(function (results) {
 | 
			
		||||
    DesiraeService.putFiles(files).then(function (results) {
 | 
			
		||||
      console.log('TODO check for error');
 | 
			
		||||
      console.log(files);
 | 
			
		||||
      console.log(results);
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user