120 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			120 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								'use strict';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								angular.module('myApp.authors', ['ngRoute'])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								.config(['$routeProvider', function($routeProvider) {
							 | 
						||
| 
								 | 
							
								  $routeProvider.when('/authors', {
							 | 
						||
| 
								 | 
							
								    templateUrl: 'views/authors/authors.html',
							 | 
						||
| 
								 | 
							
								    controller: 'AuthorsCtrl as Authors'
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								}])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								.controller('AuthorsCtrl'
							 | 
						||
| 
								 | 
							
								  , ['$scope', '$timeout', '$location', 'Desirae'
							 | 
						||
| 
								 | 
							
								  , function($scope, $timeout, $location, Desirae) {
							 | 
						||
| 
								 | 
							
								  var scope = this
							 | 
						||
| 
								 | 
							
								    ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  scope.newAuthor = function () {
							 | 
						||
| 
								 | 
							
								    console.log('new author');
							 | 
						||
| 
								 | 
							
								    scope.new = { filename: 'new' };
							 | 
						||
| 
								 | 
							
								    scope.selectAuthor(scope.new);
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  scope.selectAuthor = function (author) {
							 | 
						||
| 
								 | 
							
								    // TODO watch any change
							 | 
						||
| 
								 | 
							
								    scope.selectedAuthor = author || scope.selectedAuthor;
							 | 
						||
| 
								 | 
							
								    scope.updateHeadshotUrlNow();
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  scope.upsert = function () {
							 | 
						||
| 
								 | 
							
								    var author = scope.selectedAuthor
							 | 
						||
| 
								 | 
							
								      , files = []
							 | 
						||
| 
								 | 
							
								      , filename = author.filename
							 | 
						||
| 
								 | 
							
								      ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    delete author.filename;
							 | 
						||
| 
								 | 
							
								    if ('new' !== filename && filename !== author.handle) {
							 | 
						||
| 
								 | 
							
								      files.push({ path: 'authors/' + filename + '.yml', contents: '', delete: true });
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    files.push({ path: 'authors/' + author.handle + '.yml', contents: window.jsyaml.dump(author) });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    console.log(files);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Desirae.putFiles(files).then(function (results) {
							 | 
						||
| 
								 | 
							
								      console.log('updated author', results);
							 | 
						||
| 
								 | 
							
								      $location.path('/site');
							 | 
						||
| 
								 | 
							
								    }).catch(function (e) {
							 | 
						||
| 
								 | 
							
								      author.filename = filename;
							 | 
						||
| 
								 | 
							
								      console.error(e);
							 | 
						||
| 
								 | 
							
								      window.alert("Error Nation! :/");
							 | 
						||
| 
								 | 
							
								      throw e;
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  scope.updateHeadshotUrlNow = function () {
							 | 
						||
| 
								 | 
							
								    var gravatar = 'http://www.gravatar.com/avatar/' + window.md5((scope.selectedAuthor.email||'foo').toLowerCase()) + '?d=identicon'
							 | 
						||
| 
								 | 
							
								      ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (scope.selectedAuthor.headshot) {
							 | 
						||
| 
								 | 
							
								      scope.headshot = scope.selectedAuthor.headshot;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    else if (scope.selectedAuthor.email) {
							 | 
						||
| 
								 | 
							
								      scope.headshot = gravatar;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    else {
							 | 
						||
| 
								 | 
							
								      scope.headshot = 'http://www.gravatar.com/avatar/' + window.md5((scope.selectedAuthor.email||'foo').toLowerCase()) + '?d=mm';
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  scope.updateHeadshotUrl = function () {
							 | 
						||
| 
								 | 
							
								    $timeout.cancel(scope.hslock);
							 | 
						||
| 
								 | 
							
								    scope.hslock = $timeout(function () {
							 | 
						||
| 
								 | 
							
								      scope.updateHeadshotUrlNow();
							 | 
						||
| 
								 | 
							
								    }, 300);
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  function init() {
							 | 
						||
| 
								 | 
							
								    scope.newAuthor();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    console.log('desi loading');
							 | 
						||
| 
								 | 
							
								    Desirae.meta().then(function (desi) {
							 | 
						||
| 
								 | 
							
								      var filename
							 | 
						||
| 
								 | 
							
								        ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      scope.blogdir = desi.blogdir.path.replace(/^\/(Users|home)\/[^\/]+\//, '~/');
							 | 
						||
| 
								 | 
							
								      desi.authors = desi.authors || {};
							 | 
						||
| 
								 | 
							
								      desi.authors.new = scope.new;
							 | 
						||
| 
								 | 
							
								      scope.authors = desi.authors;
							 | 
						||
| 
								 | 
							
								      
							 | 
						||
| 
								 | 
							
								      Object.keys(desi.authors).forEach(function (filename) {
							 | 
						||
| 
								 | 
							
								        if ('new' === filename) {
							 | 
						||
| 
								 | 
							
								          return;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        desi.authors[filename].filename = filename;
							 | 
						||
| 
								 | 
							
								        desi.authors[filename].handle = desi.authors[filename].handle || filename;
							 | 
						||
| 
								 | 
							
								      });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      filename = Object.keys(desi.authors)[0];
							 | 
						||
| 
								 | 
							
								      scope.selectedAuthor = desi.authors[filename];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      scope.updateHeadshotUrlNow();
							 | 
						||
| 
								 | 
							
								    }).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;
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  init();
							 | 
						||
| 
								 | 
							
								  /*
							 | 
						||
| 
								 | 
							
								  $scope.$watch(angular.bind(this, function () { return this.selectedAuthor; }), function (newValue, oldValue) {
							 | 
						||
| 
								 | 
							
								  //$scope.$watch('Authors.selecteAuthor', function (newValue, oldValue) 
							 | 
						||
| 
								 | 
							
								    console.log(newValue, oldValue);
							 | 
						||
| 
								 | 
							
								    if(newValue !== oldValue) {
							 | 
						||
| 
								 | 
							
								      scope.dirty = true;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }, true);
							 | 
						||
| 
								 | 
							
								  */
							 | 
						||
| 
								 | 
							
								}]);
							 |