2020-11-09 03:30:15 +00:00
"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 , DesiraeService ) {
var scope = this ,
path = window . path ;
function init ( ) {
DesiraeService . meta ( )
. then ( function ( desi ) {
/ *
2015-01-21 20:38:07 +00:00
if ( ! scope . site . base _url ) {
window . alert ( "Please go to the site tab and add a url first" ) ;
return ;
}
* /
2020-11-09 03:30:15 +00:00
scope . blogdir = desi . blogdir . path . replace (
/^\/(Users|home)\/[^\/]+\// ,
"~/"
) ;
scope . site = desi . site ;
scope . env = desi . site ;
newPost ( ) ;
if ( /dropbox/ . test ( scope . site . base _url ) ) {
scope . env . explicitIndexes = true ;
}
updateDate ( ) ;
} )
. 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 ;
} ) ;
2015-01-13 10:18:13 +00:00
2020-11-09 03:30:15 +00:00
scope . extensions = [ "md" , "html" ] ;
2015-01-21 20:38:07 +00:00
}
2020-11-09 03:30:15 +00:00
function newPost ( ) {
scope . selected = {
format : "md" ,
permalink : "/article/new.html" ,
uuid : window . uuid . v4 ( ) ,
abspath : scope . blogdir ,
sourcepath : "" ,
fileepath : "" ,
post : {
yml : {
title : "" ,
permalink : "/article/new.html" ,
date : DesiraeService . toDesiDate ( new Date ( ) ) , // "YYYY-MM-DD HH:MM pm" // TODO desirae
updated : null ,
description : "" ,
categories : [ ] ,
tags : [ ] ,
theme : null ,
layout : null ,
swatch : null ,
} ,
} ,
} ;
scope . selected . date = scope . selected . post . yml . date ;
scope . selected . post . frontmatter = window . jsyaml
. dump ( scope . selected . post . yml )
. trim ( ) ;
2015-01-13 10:18:13 +00:00
}
2020-11-09 03:30:15 +00:00
scope . onChange = function ( ) {
var post = scope . selected . post ,
selected = scope . selected ;
post . yml . title = post . yml . title || "" ;
selected . title = post . yml . title ;
post . yml . description = post . yml . description || "" ;
scope . slug = post . yml . title
. toLowerCase ( )
. replace ( /["']/g , "" )
. replace ( /\W/g , "-" )
. replace ( /^-+/g , "" )
. replace ( /-+$/g , "" )
. replace ( /--/g , "-" ) ;
if ( selected . permalink === post . yml . permalink ) {
selected . permalink = "/articles/" + scope . slug + "/" ;
// + '.html' //+ selected.format
post . yml . permalink = selected . permalink ;
}
/ *
2015-01-24 03:09:50 +00:00
if ( path . extname ( post . yml . permalink ) !== '.' + selected . format ) {
2015-01-13 10:18:13 +00:00
post . yml . permalink = post . yml . permalink . replace ( /\.\w+$/ , '.' + selected . format ) ;
}
2015-01-13 11:55:16 +00:00
* /
2015-01-13 10:18:13 +00:00
2020-11-09 03:30:15 +00:00
post . frontmatter = window . jsyaml . dump ( post . yml ) . trim ( ) ;
2015-01-13 10:18:13 +00:00
2020-11-09 03:30:15 +00:00
// TODO use some sort of filepath pattern in config.yml
selected . path = path . join (
scope . env . compiled _path || "compiled" ,
post . yml . permalink
) ;
if ( ! /\.html?$/ . test ( selected . path ) ) {
selected . path = path . join ( selected . path , "index.html" ) ;
}
2015-01-13 21:50:17 +00:00
2020-11-09 03:30:15 +00:00
selected . url = path . join (
scope . site . base _url +
path . join ( scope . site . base _path , post . yml . permalink )
) ;
if ( scope . env . explicitIndexes && /\/$/ . test ( selected . url ) ) {
selected . url += "index.html" ;
}
selected . markdown = "[" + selected . title + "](" + selected . url + ")" ;
selected . ahref =
'<a href="' + selected . url + '">' + selected . title + "</a>" ;
selected . abspath = path . join ( scope . blogdir , selected . path ) ;
selected . filepath = path . join (
selected . collection || "posts" ,
scope . slug + "." + selected . format
) ;
selected . sourcepath = path . join (
scope . blogdir ,
selected . collection || "posts" ,
scope . slug + "." + selected . format
) ;
} ;
scope . onFrontmatterChange = function ( ) {
var data , post ;
2015-01-13 11:55:16 +00:00
2020-11-09 03:30:15 +00:00
try {
if (
! scope . selected . post . frontmatter ||
! scope . selected . post . frontmatter . trim ( )
) {
throw new Error ( "deleted frontmatter" ) ;
}
data = window . jsyaml . load ( scope . selected . post . frontmatter ) ;
//scope.selected.format = data.permalink.replace(/.*\.(\w+$)/, '$1');
if ( ! data . permalink ) {
data = scope . selected . permalink ;
}
scope . selected . post . yml = data ;
2015-01-13 21:50:17 +00:00
2020-11-09 03:30:15 +00:00
post = scope . selected . post ;
2015-01-21 20:38:07 +00:00
2020-11-09 03:30:15 +00:00
scope . selected . path = path . join (
scope . env . compiled _path || "compiled" ,
post . yml . permalink
) ;
if ( ! /\.html?$/ . test ( path . basename ( post . yml . permalink ) ) ) {
scope . selected . path = path . join (
scope . selected . path . replace ( /\.w+$/ , "" ) ,
"index.html"
) ;
}
2015-01-13 10:18:13 +00:00
2020-11-09 03:30:15 +00:00
scope . selected . url = path . join (
scope . site . base _url +
path . join ( scope . site . base _path , post . yml . permalink )
) ;
if ( scope . env . explicitIndexes && /\/$/ . test ( scope . selected . url ) ) {
scope . selected . url += "index.html" ;
}
scope . selected . abspath = path . join (
scope . blogdir ,
scope . selected . path
) ;
scope . selected . sourcepath = path . join (
scope . blogdir ,
scope . selected . collection || "posts" ,
scope . slug + "." + scope . selected . format
) ;
scope . selected . filepath = path . join (
scope . selected . collection || "posts" ,
scope . slug + "." + scope . selected . format
) ;
} catch ( e ) {
console . error ( e ) ;
console . error ( "ignoring update that created parse error" ) ;
scope . selected . post . frontmatter = window . jsyaml
. dump ( scope . selected . post . yml )
. trim ( ) ;
}
} ;
2015-01-13 10:18:13 +00:00
2020-11-09 03:30:15 +00:00
function updateDate ( ) {
$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 = DesiraeService . toDesiDate (
new Date ( )
) ;
}
scope . onChange ( ) ;
updateDate ( ) ;
} , 60 * 1000 ) ;
2015-01-13 10:18:13 +00:00
}
2020-11-09 03:30:15 +00:00
scope . upsert = function ( ) {
if ( - 1 === scope . extensions . indexOf ( scope . selected . format ) ) {
window . alert (
"." +
scope . selected . format +
" is not a supported extension.\n\nPlease choose from: ." +
scope . extensions . join ( " ." )
) ;
return ;
}
scope . selected . post . yml . uuid = scope . selected . uuid ;
[ "updated" , "theme" , "layout" , "swatch" ] . forEach ( function ( key ) {
if ( ! scope . selected . post . yml [ key ] ) {
delete scope . selected . post . yml [ key ] ;
}
} ) ;
scope . onChange ( ) ;
var files = [ ] ;
files . push ( {
path : scope . selected . filepath ,
contents :
"---\n" +
scope . selected . post . frontmatter . trim ( ) +
"\n" +
"---\n" +
"\n" +
scope . selected . post . body . trim ( ) ,
} ) ;
DesiraeService . putFiles ( files )
. then ( function ( results ) {
console . log ( "TODO check for error" ) ;
console . log ( files ) ;
console . log ( results ) ;
$location . path ( "/build" ) ;
} )
. catch ( function ( e ) {
$timeout . cancel ( scope . dtlock ) ;
console . error ( scope . site ) ;
console . error ( e ) ;
window . alert ( "Error Nation! :/" ) ;
throw e ;
} ) ;
} ;
init ( ) ;
} ,
] ) ;