diff --git a/genPhotos.js b/genPhotos.js deleted file mode 100644 index de8fe01..0000000 --- a/genPhotos.js +++ /dev/null @@ -1,91 +0,0 @@ -var fs = require('fs'); -var gm = require('gm'); -var mkdirp = require('mkdirp'); -var markdown = require( "markdown" ).markdown; -var jade = require('jade'); - - -var config = require('./config.js').config; -var db = require('./db.js'); - -var generatePhotoSizesById = function generatePhotoSizesById(id, cb) { - db.getPhotoById(id, function (photo) { - if (photo) console.log('Got photo record for: '+photo.slug); - var shortDate = helper.epochToShortDateString(photo.photoDate); - var failure = false; - - var folder = config.genDir+'/photos/'+photo.slug; - - mkdirp(folder, function(err) { - if (err) console.log(err); - for (var size in config.imageSizes) { - console.log('Generating '+size+' for '+photo.slug); - - var file = folder + '/'+size+'.'+photo.extension; - - (function(size){ - gm(photo.path) - .autoOrient() - .resize(config.imageSizes[size], config.imageSizes[size]) - .write(file, - function(err) { - if (err) { - console.log(photo.slug+' resize failed.'); - failure = true; - } - else { - console.log(photo.slug+' '+size+' generated.'); - } - } - ); - })(size); - - } - - }); - - cb(failure); - }); -} - -exports.generatePhotoSizesById = generatePhotoSizesById; - -var generatePhotoPage = function (id, cb) { - db.getPhotoById(id, function(photo) { - console.log('Fetching photo id: '+id); - var description = markdown.toHTML(photo.description); - var photoDate = helper.epochToShortDateString(photo.photoDate); - var url = '/photos/'+photo.slug+'/'; - var filepath = config.genDir+url; - var filename = filepath+'index.html'; - var options = { - pretty: false, - title: photo.title, - description: description, - slug: photo.slug, - url: url, - extension: photo.extension, - postDate: photo.photoDate - }; - - console.log('Rendering photo: '+photo.title); - var jadeOut = jade.renderFile('views/render-photo.jade', options); - - console.log('Creating directory: '+filepath); - mkdirp(filepath, function(err) { - if (err) { - console.log(err); - } - else { - console.log('Writing to file: '+filename); - - fs.writeFile(filename, jadeOut, 'utf-8', function(err) { - if (err) console.log(err); - cb(err); - }); - } - }); - }); -} - -exports.generatePhotoPage = generatePhotoPage; diff --git a/photo.js b/photo.js new file mode 100644 index 0000000..e3fc151 --- /dev/null +++ b/photo.js @@ -0,0 +1,279 @@ +var moment = require("moment"); +var _ = require("lodash"); +var fs = require('fs'); +var mkdirp = require('mkdirp'); +var jade = require('jade'); +var markdown = require( "markdown" ).markdown; +var path = require('path'); +var schemas = require('./schemas.js'); +var gm = require('gm'); +var config = require("./config.js").config; + +var Photo = function(data) { + this.data = this.sanitize(data); +} + +//////////////////////////////////////////////////////////////////////////////////////// +// Prototype Setup +//////////////////////////////////////////////////////////////////////////////////////// + +Photo.prototype.data = {} + +Photo.prototype.get = function (name) { + return this.data[name]; +} + +Photo.prototype.set = function (name, value) { + this.data[name] = value; +} + +Photo.prototype.sanitize = function (data) { + data = data || {}; + schema = schemas.photo; + return _.pick(_.defaults(data, schema), _.keys(schema)); +} + +Photo.prototype.save = function (date, callback) { + var self = this; + if (date) { + this.set('updatedDate', date); + } else { + this.set("updatedDate", new Date()); + } + this.data = this.sanitize(this.data); + db.collection("photos").update({uuid: this.get("uuid")}, this.data, {upsert: true}, function(err) { + callback(err); + }); +} + +//////////////////////////////////////////////////////////////////////////////////////// +// Prototype Functions +//////////////////////////////////////////////////////////////////////////////////////// + +// Parse a string of tags +// Returns a list of tags +Post.prototype.tagPhoto = function(str) { + this.set("tags", []); + + // we don't need no stinking commas + var str = str.replace(/,/g,''); + + // remove accents, swap ñ for n, etc + var from = "àáäâèéëêìíïîòóöôùúüûñç·/,:;&%"; + var to = "aaaaeeeeiiiioooouuuunc-------"; + for (var i=0, l=from.length ; i