2015-01-13 10:18:13 +00:00
'use strict' ;
angular . module ( 'myApp.build' , [ 'ngRoute' ] )
. config ( [ '$routeProvider' , function ( $routeProvider ) {
$routeProvider . when ( '/build' , {
templateUrl : 'views/build/build.html' ,
controller : 'BuildCtrl as Build'
} ) ;
} ] )
. controller ( 'BuildCtrl'
, [ '$scope' , '$location' , '$timeout' , 'Desirae'
, function ( $scope , $location , $timeout , DesiraeService ) {
var scope = this
, path = window . path
;
function init ( ) {
2015-01-21 09:41:12 +00:00
scope . extensions = [ 'md' , 'html' ] ;
return DesiraeService . meta ( ) . then ( function ( desi ) {
2015-01-13 10:18:13 +00:00
scope . blogdir = desi . blogdir . path . replace ( /^\/(Users|home)\/[^\/]+\// , '~/' ) ;
scope . site = desi . site ;
2015-01-16 04:56:14 +00:00
if ( ! desi . site . base _url || ! desi . site . base _path ) {
window . alert ( "Please go back to the site config and enter any mandatory missing fields (base_url, base_path)." ) ;
return ;
}
2015-01-21 20:31:07 +00:00
scope . display _url = scope . production _url = desi . site . base _url + path . join ( '/' , desi . site . base _path ) ;
if ( /dropbox/ . test ( scope . display _url ) ) {
scope . display _url += '/index.html' ;
}
2015-01-13 10:18:13 +00:00
// this is the responsibility of the build system (Dear Desi), not the library (Desirae)
scope . development _url = location . href . replace ( /\/(#.*)?$/ , '' ) + path . join ( '/' , 'compiled_dev' ) ;
2015-01-21 09:41:12 +00:00
return desi ;
2015-01-13 10:18:13 +00:00
} ) . 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 . onError = function ( e ) {
console . error ( e ) ;
if ( window . confirm ( "Encountered an error. Please inspect the console.\n\nWould you like to ignore the error and continue?" ) ) {
return window . Promise . resolve ( ) ;
} else {
return window . Promise . reject ( ) ;
}
} ;
scope . buildOne = function ( envstr ) {
2015-01-21 09:41:12 +00:00
return DesiraeService . reset ( ) . then ( function ( ) {
return init ( ) . then ( function ( ) {
var env
;
2015-01-13 10:18:13 +00:00
2015-01-21 09:41:12 +00:00
// TODO is there a legitimate case where in addition to base_path (root of the blog)
// a user would need owner_base? i.e. school.edu/~/rogers/blog school.edu/~/rogers/assets
if ( 'production' === envstr ) {
env = {
url : scope . production _url
, base _url : scope . production _url . replace ( /(https?:\/\/[^\/#?]+).*/ , '$1' )
, base _path : scope . production _url . replace ( /https?:\/\/[^\/#?]+/ , '' )
, compiled _path : 'compiled'
, since : 0
, onError : scope . onError
} ;
} else {
env = {
url : scope . development _url
, base _url : scope . development _url . replace ( /(https?:\/\/[^\/#?]+).*/ , '$1' )
, base _path : scope . development _url . replace ( /https?:\/\/[^\/#?]+/ , '' )
, compiled _path : 'compiled_dev'
, since : 0
, onError : scope . onError
} ;
}
2015-01-13 10:18:13 +00:00
2015-01-21 09:41:12 +00:00
return DesiraeService . build ( env ) . then ( function ( ) {
DesiraeService . write ( env ) ;
} ) ;
} ) ;
2015-01-13 10:18:13 +00:00
} ) ;
} ;
scope . build = function ( envs ) {
window . forEachAsync ( envs , function ( env ) {
return scope . buildOne ( env ) ;
} ) . then ( function ( ) {
window . alert ( 'Build(s) Complete' ) ;
} ) ;
} ;
init ( ) ;
} ] ) ;