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);
 | 
						|
  */
 | 
						|
}]);
 |