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
|
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>
|
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
|
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
|
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.
|
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`
|
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`
|
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'))
|
, fs = PromiseA.promisifyAll(require('fs'))
|
||||||
, path = require('path')
|
, path = require('path')
|
||||||
, cli = require('cli')
|
, cli = require('cli')
|
||||||
|
, UUID = require('node-uuid')
|
||||||
;
|
;
|
||||||
|
|
||||||
cli.parse({
|
cli.parse({
|
||||||
|
@ -19,8 +20,8 @@ function serve(blogdir) {
|
||||||
;
|
;
|
||||||
|
|
||||||
server = http.createServer(app).listen(65080, function () {
|
server = http.createServer(app).listen(65080, function () {
|
||||||
console.log("Listening from " + blogdir);
|
console.info("Listening from " + blogdir);
|
||||||
console.log("Listening on http://local.dear.desi:" + server.address().port);
|
console.info("Listening on http://local.dear.desi:" + server.address().port);
|
||||||
});
|
});
|
||||||
//secureServer = https.createServer(app).listen(65043);
|
//secureServer = https.createServer(app).listen(65043);
|
||||||
}
|
}
|
||||||
|
@ -41,25 +42,128 @@ function build(blogdir) {
|
||||||
|
|
||||||
Desi.buildAll(desi, env).then(function () {
|
Desi.buildAll(desi, env).then(function () {
|
||||||
Desi.write(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) {
|
cli.main(function (args, options) {
|
||||||
var command = args[0]
|
var command = args[0]
|
||||||
, blogdir = options.blog
|
, blogdir = options.blogdir
|
||||||
|
, originalDir = blogdir
|
||||||
;
|
;
|
||||||
|
|
||||||
if (!blogdir) {
|
if (!blogdir) {
|
||||||
blogdir = path.resolve('./');
|
blogdir = path.resolve('./');
|
||||||
|
originalDir = './';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!fs.existsSync(path.join(options.blog, 'site.yml'))) {
|
if (!fs.existsSync(path.join(options.blogdir, 'site.yml'))) {
|
||||||
console.error("Usage: deardesi [serve|init|post] -b ~/path/to/blog");
|
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, "
|
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);
|
process.exit(1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -74,8 +178,7 @@ cli.main(function (args, options) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if ('post' === command) {
|
else if ('post' === command) {
|
||||||
console.error("`post' not yet implemented");
|
createPost(originalDir, blogdir, args[1], args[2]);
|
||||||
process.exit(1);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if ('serve' === command) {
|
else if ('serve' === command) {
|
||||||
|
@ -83,7 +186,7 @@ cli.main(function (args, options) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
console.error("Usage: deardesi [serve|init|post] -b ~/path/to/blog");
|
console.error("Usage: desi [serve|init|post] -d ~/path/to/blog");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -7,8 +7,8 @@
|
||||||
"test": "echo \"Error: no test specified\" && exit 1"
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
"deardesi": "bin/deardesi.js"
|
"deardesi": "bin/deardesi.js",
|
||||||
, "desi": "bin/deardesi.js"
|
"desi": "bin/deardesi.js"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
@ -44,8 +44,9 @@
|
||||||
"connect": "^3.3.4",
|
"connect": "^3.3.4",
|
||||||
"connect-query": "^0.2.0",
|
"connect-query": "^0.2.0",
|
||||||
"connect-send-json": "^1.0.0",
|
"connect-send-json": "^1.0.0",
|
||||||
"desirae": "^0.9.1",
|
"desirae": "^0.9.2",
|
||||||
"fs.extra": "^1.3.0",
|
"fs.extra": "^1.3.0",
|
||||||
|
"node-uuid": "^1.4.2",
|
||||||
"require-yaml": "0.0.1",
|
"require-yaml": "0.0.1",
|
||||||
"serve-static": "^1.8.0"
|
"serve-static": "^1.8.0"
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,8 @@
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-lg-7">
|
<div class="col-lg-7">
|
||||||
<br/>
|
<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/>
|
<br/>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-5">
|
<div class="col-lg-5">
|
||||||
|
|
|
@ -9,13 +9,13 @@ angular.module('myApp.post', ['ngRoute'])
|
||||||
}])
|
}])
|
||||||
|
|
||||||
.controller('PostCtrl'
|
.controller('PostCtrl'
|
||||||
, ['$scope', '$location', '$timeout', 'Desirae'
|
, ['$scope', '$location', '$timeout', 'DesiraeService'
|
||||||
, function ($scope, $location, $timeout, Desirae) {
|
, function ($scope, $location, $timeout, DesiraeService) {
|
||||||
var scope = this
|
var scope = this
|
||||||
;
|
;
|
||||||
|
|
||||||
function init() {
|
function init() {
|
||||||
Desirae.meta().then(function (desi) {
|
DesiraeService.meta().then(function (desi) {
|
||||||
console.warn(desi);
|
console.warn(desi);
|
||||||
scope.blogdir = desi.blogdir.path.replace(/^\/(Users|home)\/[^\/]+\//, '~/');
|
scope.blogdir = desi.blogdir.path.replace(/^\/(Users|home)\/[^\/]+\//, '~/');
|
||||||
scope.site = desi.site;
|
scope.site = desi.site;
|
||||||
|
@ -41,7 +41,7 @@ angular.module('myApp.post', ['ngRoute'])
|
||||||
yml: {
|
yml: {
|
||||||
title: ""
|
title: ""
|
||||||
, permalink: "/article/new.html"
|
, 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
|
, updated: null
|
||||||
, description: ""
|
, description: ""
|
||||||
, categories: []
|
, categories: []
|
||||||
|
@ -128,7 +128,7 @@ angular.module('myApp.post', ['ngRoute'])
|
||||||
$timeout.cancel(scope.dtlock);
|
$timeout.cancel(scope.dtlock);
|
||||||
scope.dtlock = $timeout(function () {
|
scope.dtlock = $timeout(function () {
|
||||||
if (scope.selected && scope.selected.date === scope.selected.post.yml.date) {
|
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();
|
scope.onChange();
|
||||||
updateDate();
|
updateDate();
|
||||||
|
@ -163,7 +163,7 @@ angular.module('myApp.post', ['ngRoute'])
|
||||||
+ scope.selected.post.body.trim()
|
+ 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('TODO check for error');
|
||||||
console.log(files);
|
console.log(files);
|
||||||
console.log(results);
|
console.log(results);
|
||||||
|
|
Loading…
Reference in New Issue