aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2011-05-17 23:28:11 -0400
committerJason A. Donenfeld <Jason@zx2c4.com>2011-05-17 23:28:32 -0400
commit264738009b5f04e1413a868936012dd45b96d5b7 (patch)
tree1f69fe264fbb37ebe3cbc81be1b4d14a905e4a90
parentMissing semi-colon (diff)
downloadPhotoFloat-264738009b5f04e1413a868936012dd45b96d5b7.tar.xz
PhotoFloat-264738009b5f04e1413a868936012dd45b96d5b7.zip
Get rid of CoffeeScript-style weirdness and make it plain and simple.
-rw-r--r--web/js/010-libphotofloat.js312
1 files changed, 159 insertions, 153 deletions
diff --git a/web/js/010-libphotofloat.js b/web/js/010-libphotofloat.js
index a700705..7a3ced0 100644
--- a/web/js/010-libphotofloat.js
+++ b/web/js/010-libphotofloat.js
@@ -1,161 +1,167 @@
(function() {
- var PhotoFloat = (function() {
- PhotoFloat.cachePath = function(path) {
- if (path === "")
- return "root";
- if (path[0] === "/")
- path = path.substring(1);
- path = path
- .replace(/ /g, "_")
- .replace(/\//g, "-")
- .replace(/\(/g, "")
- .replace(/\)/g, "")
- .replace(/#/g, "")
- .replace(/&/g, "")
- .replace(/,/g, "")
- .replace(/\[/g, "")
- .replace(/\]/g, "")
- .replace(/"/g, "")
- .replace(/'/g, "")
- .replace(/_-_/g, "-")
- .toLowerCase();
- while (path.indexOf("--") !== -1)
- path = path.replace(/--/g, "-");
- while (path.indexOf("__") !== -1)
- path = path.replace(/__/g, "_");
- return path;
- };
- PhotoFloat.photoHash = function(album, photo) {
- return PhotoFloat.albumHash(album) + "/" + PhotoFloat.cachePath(photo.name);
- };
- PhotoFloat.albumHash = function(album) {
- if (typeof album.photos !== "undefined" && album.photos !== null)
- return PhotoFloat.cachePath(album.path);
- return PhotoFloat.cachePath(album.parent.path + "/" + album.path);
- };
- PhotoFloat.photoPath = function(album, photo, size, square) {
- var suffix;
- if (square)
- suffix = size.toString() + "s";
- else
- suffix = size.toString();
- return "cache/" + PhotoFloat.cachePath(PhotoFloat.photoHash(album, photo) + "_" + suffix + ".jpg");
- };
- PhotoFloat.originalPhotoPath = function(album, photo) {
- return "albums/" + album.path + "/" + photo.name;
- };
- PhotoFloat.trimExtension = function(name) {
- var index = name.lastIndexOf(".");
- if (index !== -1)
- return name.substring(0, index);
- return name;
- };
- PhotoFloat.cleanHash = function(hash) {
- while (hash.length) {
- if (hash[0] === "#")
- hash = hash.substring(1);
- else if (hash[0] === "!")
- hash = hash.substring(1);
- else if (hash[0] === "/")
- hash = hash.substring(1);
- else if (hash[hash.length - 1] === "/")
- hash = hash.substring(0, hash.length - 1);
- else
- break;
- }
- return hash;
- };
- function PhotoFloat() {
- this.albumCache = [];
+ /* constructor */
+ function PhotoFloat() {
+ this.albumCache = [];
+ }
+
+ /* public member functions */
+ PhotoFloat.prototype.album = function(subalbum, callback, error) {
+ var cacheKey, ajaxOptions, self;
+ if (typeof subalbum.photos !== "undefined" && subalbum.photos !== null) {
+ callback(subalbum);
+ return;
}
- PhotoFloat.prototype.cachePath = PhotoFloat.cachePath;
- PhotoFloat.prototype.photoHash = PhotoFloat.photoHash;
- PhotoFloat.prototype.albumHash = PhotoFloat.albumHash;
- PhotoFloat.prototype.photoPath = PhotoFloat.photoPath;
- PhotoFloat.prototype.originalPhotoPath = PhotoFloat.originalPhotoPath;
- PhotoFloat.prototype.trimExtension = PhotoFloat.trimExtension;
- PhotoFloat.prototype.cleanHash = PhotoFloat.cleanHash;
- PhotoFloat.prototype.album = function(subalbum, callback, error) {
- var cacheKey, ajaxOptions, self;
- if (typeof subalbum.photos !== "undefined" && subalbum.photos !== null) {
- callback(subalbum);
- return;
- }
- if (Object.prototype.toString.call(subalbum).slice(8, -1) === "String")
- cacheKey = subalbum;
- else
- cacheKey = PhotoFloat.cachePath(subalbum.parent.path + "/" + subalbum.path);
- if (this.albumCache.hasOwnProperty(cacheKey)) {
- callback(this.albumCache[cacheKey]);
- return;
+ if (Object.prototype.toString.call(subalbum).slice(8, -1) === "String")
+ cacheKey = subalbum;
+ else
+ cacheKey = PhotoFloat.cachePath(subalbum.parent.path + "/" + subalbum.path);
+ if (this.albumCache.hasOwnProperty(cacheKey)) {
+ callback(this.albumCache[cacheKey]);
+ return;
+ }
+ self = this;
+ ajaxOptions = {
+ type: "GET",
+ dataType: "json",
+ url: "cache/" + cacheKey + ".json",
+ success: function(album) {
+ var i;
+ for (i = 0; i < album.albums.length; ++i)
+ album.albums[i].parent = album;
+ for (i = 0; i < album.photos.length; ++i)
+ album.photos[i].parent = album;
+ self.albumCache[cacheKey] = album;
+ callback(album);
}
- self = this;
- ajaxOptions = {
- type: "GET",
- dataType: "json",
- url: "cache/" + cacheKey + ".json",
- success: function(album) {
- var i;
- for (i = 0; i < album.albums.length; ++i)
- album.albums[i].parent = album;
- for (i = 0; i < album.photos.length; ++i)
- album.photos[i].parent = album;
- self.albumCache[cacheKey] = album;
- callback(album);
- }
- };
- if (typeof error !== "undefined" && error !== null)
- ajaxOptions.error = error;
- $.ajax(ajaxOptions);
};
- PhotoFloat.prototype.albumPhoto = function(subalbum, callback, error) {
- var nextAlbum, self;
- self = this;
- nextAlbum = function(album) {
- var index = Math.floor(Math.random() * (album.photos.length + album.albums.length));
- if (index >= album.photos.length) {
- index -= album.photos.length;
- self.album(album.albums[index], nextAlbum, error);
- } else
- callback(album, album.photos[index]);
- };
- if (typeof subalbum.photos !== "undefined" && subalbum.photos !== null)
- nextAlbum(subalbum);
- else
- this.album(subalbum, nextAlbum, error);
+ if (typeof error !== "undefined" && error !== null)
+ ajaxOptions.error = error;
+ $.ajax(ajaxOptions);
+ };
+ PhotoFloat.prototype.albumPhoto = function(subalbum, callback, error) {
+ var nextAlbum, self;
+ self = this;
+ nextAlbum = function(album) {
+ var index = Math.floor(Math.random() * (album.photos.length + album.albums.length));
+ if (index >= album.photos.length) {
+ index -= album.photos.length;
+ self.album(album.albums[index], nextAlbum, error);
+ } else
+ callback(album, album.photos[index]);
};
- PhotoFloat.prototype.parseHash = function(hash, callback, error) {
- var index, album, photo;
- hash = PhotoFloat.cleanHash(hash);
- index = hash.lastIndexOf("/");
- if (!hash.length) {
- album = PhotoFloat.cachePath("root");
- photo = null;
- } else if (index !== -1 && index !== hash.length - 1) {
- photo = hash.substring(index + 1);
- album = hash.substring(0, index);
- } else {
- album = hash;
- photo = null;
- }
- this.album(album, function(theAlbum) {
- var i = -1;
- if (photo !== null) {
- for (i = 0; i < theAlbum.photos.length; ++i) {
- if (PhotoFloat.cachePath(theAlbum.photos[i].name) === photo) {
- photo = theAlbum.photos[i];
- break;
- }
- }
- if (i >= theAlbum.photos.length) {
- photo = null;
- i = -1;
+ if (typeof subalbum.photos !== "undefined" && subalbum.photos !== null)
+ nextAlbum(subalbum);
+ else
+ this.album(subalbum, nextAlbum, error);
+ };
+ PhotoFloat.prototype.parseHash = function(hash, callback, error) {
+ var index, album, photo;
+ hash = PhotoFloat.cleanHash(hash);
+ index = hash.lastIndexOf("/");
+ if (!hash.length) {
+ album = PhotoFloat.cachePath("root");
+ photo = null;
+ } else if (index !== -1 && index !== hash.length - 1) {
+ photo = hash.substring(index + 1);
+ album = hash.substring(0, index);
+ } else {
+ album = hash;
+ photo = null;
+ }
+ this.album(album, function(theAlbum) {
+ var i = -1;
+ if (photo !== null) {
+ for (i = 0; i < theAlbum.photos.length; ++i) {
+ if (PhotoFloat.cachePath(theAlbum.photos[i].name) === photo) {
+ photo = theAlbum.photos[i];
+ break;
}
}
- callback(theAlbum, photo, i);
- }, error);
- };
- return PhotoFloat;
- })();
+ if (i >= theAlbum.photos.length) {
+ photo = null;
+ i = -1;
+ }
+ }
+ callback(theAlbum, photo, i);
+ }, error);
+ };
+
+ /* static functions */
+ PhotoFloat.cachePath = function(path) {
+ if (path === "")
+ return "root";
+ if (path[0] === "/")
+ path = path.substring(1);
+ path = path
+ .replace(/ /g, "_")
+ .replace(/\//g, "-")
+ .replace(/\(/g, "")
+ .replace(/\)/g, "")
+ .replace(/#/g, "")
+ .replace(/&/g, "")
+ .replace(/,/g, "")
+ .replace(/\[/g, "")
+ .replace(/\]/g, "")
+ .replace(/"/g, "")
+ .replace(/'/g, "")
+ .replace(/_-_/g, "-")
+ .toLowerCase();
+ while (path.indexOf("--") !== -1)
+ path = path.replace(/--/g, "-");
+ while (path.indexOf("__") !== -1)
+ path = path.replace(/__/g, "_");
+ return path;
+ };
+ PhotoFloat.photoHash = function(album, photo) {
+ return PhotoFloat.albumHash(album) + "/" + PhotoFloat.cachePath(photo.name);
+ };
+ PhotoFloat.albumHash = function(album) {
+ if (typeof album.photos !== "undefined" && album.photos !== null)
+ return PhotoFloat.cachePath(album.path);
+ return PhotoFloat.cachePath(album.parent.path + "/" + album.path);
+ };
+ PhotoFloat.photoPath = function(album, photo, size, square) {
+ var suffix;
+ if (square)
+ suffix = size.toString() + "s";
+ else
+ suffix = size.toString();
+ return "cache/" + PhotoFloat.cachePath(PhotoFloat.photoHash(album, photo) + "_" + suffix + ".jpg");
+ };
+ PhotoFloat.originalPhotoPath = function(album, photo) {
+ return "albums/" + album.path + "/" + photo.name;
+ };
+ PhotoFloat.trimExtension = function(name) {
+ var index = name.lastIndexOf(".");
+ if (index !== -1)
+ return name.substring(0, index);
+ return name;
+ };
+ PhotoFloat.cleanHash = function(hash) {
+ while (hash.length) {
+ if (hash[0] === "#")
+ hash = hash.substring(1);
+ else if (hash[0] === "!")
+ hash = hash.substring(1);
+ else if (hash[0] === "/")
+ hash = hash.substring(1);
+ else if (hash[hash.length - 1] === "/")
+ hash = hash.substring(0, hash.length - 1);
+ else
+ break;
+ }
+ return hash;
+ };
+
+ /* make static methods callable as member functions */
+ PhotoFloat.prototype.cachePath = PhotoFloat.cachePath;
+ PhotoFloat.prototype.photoHash = PhotoFloat.photoHash;
+ PhotoFloat.prototype.albumHash = PhotoFloat.albumHash;
+ PhotoFloat.prototype.photoPath = PhotoFloat.photoPath;
+ PhotoFloat.prototype.originalPhotoPath = PhotoFloat.originalPhotoPath;
+ PhotoFloat.prototype.trimExtension = PhotoFloat.trimExtension;
+ PhotoFloat.prototype.cleanHash = PhotoFloat.cleanHash;
+
+ /* expose class globally */
window.PhotoFloat = PhotoFloat;
-}).call(this);
+}());