99 lines
2.9 KiB
JavaScript
99 lines
2.9 KiB
JavaScript
|
'use strict';
|
||
|
angular.module('myApp.post', ['ngRoute'])
|
||
|
|
||
|
.config(['$routeProvider', function($routeProvider) {
|
||
|
$routeProvider.when('/post', {
|
||
|
templateUrl: 'views/post/post.html',
|
||
|
controller: 'PostCtrl as Post'
|
||
|
});
|
||
|
}])
|
||
|
|
||
|
.controller('PostCtrl'
|
||
|
, ['$scope', '$location', '$timeout', 'Desirae'
|
||
|
, function ($scope, $location, $timeout, Desirae) {
|
||
|
var scope = this
|
||
|
;
|
||
|
|
||
|
function init() {
|
||
|
console.log('desi loading');
|
||
|
Desirae.meta().then(function (desi) {
|
||
|
scope.blogdir = desi.blogdir.path.replace(/^\/(Users|home)\/[^\/]+\//, '~/');
|
||
|
scope.site = desi.site;
|
||
|
}).catch(function (e) {
|
||
|
window.alert("An Error Occured. Most errors that occur in the init phase are parse errors in the config files or permissions errors on files or directories, but check the error console for details.");
|
||
|
console.error(e);
|
||
|
throw e;
|
||
|
});
|
||
|
}
|
||
|
|
||
|
scope.selected = {
|
||
|
title: ""
|
||
|
, format: 'md'
|
||
|
, description: ""
|
||
|
, permalink: "/article/new.md"
|
||
|
, post: {
|
||
|
yml: {
|
||
|
title: ""
|
||
|
, description: ""
|
||
|
, uuid: window.uuid.v4()
|
||
|
, date: "YYYY-MM-DD HH:MM pm" // TODO desirae
|
||
|
, permalink: "/article/new.md"
|
||
|
, categories: []
|
||
|
, tags: []
|
||
|
, theme: null
|
||
|
, layout: null
|
||
|
, swatch: null
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
scope.selected.post.frontmatter = window.jsyaml.dump(scope.selected.post.yml);
|
||
|
|
||
|
scope.onChange = function () {
|
||
|
scope.selected.post.yml.title = scope.selected.title;
|
||
|
scope.selected.post.yml.description = scope.selected.description;
|
||
|
if (scope.selected.permalink === scope.selected.post.yml.permalink) {
|
||
|
scope.selected.permalink = '/articles/' + scope.selected.title.toLowerCase()
|
||
|
.replace(/["']/g, '')
|
||
|
.replace(/\W/g, '-')
|
||
|
+ '.' + scope.selected.format
|
||
|
;
|
||
|
scope.selected.post.yml.permalink = scope.selected.permalink;
|
||
|
}
|
||
|
scope.selected.post.frontmatter = window.jsyaml.dump(scope.selected.post.yml);
|
||
|
};
|
||
|
scope.onFrontmatterChange = function () {
|
||
|
scope.selected.post.yml = window.jsyaml.load(scope.selected.post.frontmatter);
|
||
|
scope.selected.title = scope.selected.post.yml.title;
|
||
|
scope.selected.description = scope.selected.post.yml.description;
|
||
|
};
|
||
|
|
||
|
$timeout(function () {
|
||
|
if (scope.selected && scope.selected.date === scope.selected.post.yml.date) {
|
||
|
scope.selected.date = scope.selected.post.yml.date = new Date().toISOString();
|
||
|
}
|
||
|
scope.onChange();
|
||
|
}, 60 * 1000);
|
||
|
|
||
|
scope.upsert = function () {
|
||
|
console.log(scope.selected.format)
|
||
|
var files = []
|
||
|
;
|
||
|
|
||
|
files.push({ path: 'site.yml', contents: scope.site });
|
||
|
|
||
|
console.log(files);
|
||
|
Desirae.putFiles(files).then(function (results) {
|
||
|
console.log('TODO check for error');
|
||
|
console.log(results);
|
||
|
$location.path('/post');
|
||
|
}).catch(function (e) {
|
||
|
console.error(scope.site);
|
||
|
console.error(e);
|
||
|
window.alert("Error Nation! :/");
|
||
|
throw e;
|
||
|
});
|
||
|
};
|
||
|
|
||
|
init();
|
||
|
}]);
|