LIl things.
This commit is contained in:
parent
2e017d0df3
commit
8bd9d1519e
@ -14,7 +14,7 @@ def trim_base_custom(path, base):
|
||||
def trim_base(path):
|
||||
return trim_base_custom(path, trim_base.base)
|
||||
def cache_base(path):
|
||||
path = trim_base(path).replace('/', '-').replace(' ', '_').replace('(', '').replace(')', '').replace('#', '').replace('[', '').replace(']', '').replace('"', '').replace("'", '').replace('_-_', '-').lower()
|
||||
path = trim_base(path).replace('/', '-').replace(' ', '_').replace('(', '').replace('&', '').replace(',', '').replace(')', '').replace('#', '').replace('[', '').replace(']', '').replace('"', '').replace("'", '').replace('_-_', '-').lower()
|
||||
while path.find("--") != -1:
|
||||
path = path.replace("--", "-")
|
||||
while path.find("__") != -1:
|
||||
|
@ -52,6 +52,17 @@ class Album(object):
|
||||
if not self._albums_sorted:
|
||||
self._albums.sort()
|
||||
self._albums_sorted = True
|
||||
@property
|
||||
def empty(self):
|
||||
if len(self._photos) != 0:
|
||||
return False
|
||||
if len(self._albums) == 0:
|
||||
return True
|
||||
for album in self._albums:
|
||||
if not album.empty:
|
||||
return False
|
||||
return True
|
||||
|
||||
def cache(self, base_dir):
|
||||
self._sort()
|
||||
fp = open(os.path.join(base_dir, self.cache_path), 'w')
|
||||
@ -75,10 +86,15 @@ class Album(object):
|
||||
return album
|
||||
def to_dict(self, cripple=True):
|
||||
self._sort()
|
||||
subalbums = []
|
||||
if cripple:
|
||||
subalbums = [ { "path": trim_base_custom(sub.path, self._path), "date": sub.date } for sub in self._albums ]
|
||||
for sub in self._albums:
|
||||
if not sub.empty:
|
||||
subalbums.append({ "path": trim_base_custom(sub.path, self._path), "date": sub.date })
|
||||
else:
|
||||
subalbums = self._albums
|
||||
for sub in self._albums:
|
||||
if not sub.empty:
|
||||
subalbums.append(sub)
|
||||
return { "path": self.path, "date": self.date, "albums": subalbums, "photos": self._photos }
|
||||
def photo_from_path(self, path):
|
||||
for photo in self._photos:
|
||||
|
@ -49,9 +49,12 @@ class TreeWalker:
|
||||
if photo.is_valid:
|
||||
self.all_photos.append(photo)
|
||||
album.add_photo(photo)
|
||||
print "Writing cache of %s" % album.cache_path
|
||||
album.cache(self.cache_path)
|
||||
self.all_albums.append(album)
|
||||
if not album.empty:
|
||||
print "Writing cache of %s" % album.cache_path
|
||||
album.cache(self.cache_path)
|
||||
self.all_albums.append(album)
|
||||
else:
|
||||
print "Not writing cache of %s because it's empty" % album.cache_path
|
||||
return album
|
||||
def big_lists(self):
|
||||
photo_list = []
|
||||
@ -69,19 +72,15 @@ class TreeWalker:
|
||||
fp.close()
|
||||
|
||||
def remove_stale(self):
|
||||
print "Removing stale cache entries."
|
||||
print "Building list of all cache entries."
|
||||
all_cache_entries = { "all_photos.json": True, "latest_photos.json": True }
|
||||
for album in self.all_albums:
|
||||
all_cache_entries[album.cache_path] = True
|
||||
for photo in self.all_photos:
|
||||
for entry in photo.image_caches:
|
||||
all_cache_entries[entry] = True
|
||||
print "Searching stale cache entries."
|
||||
for cache in os.listdir(self.cache_path):
|
||||
match = False
|
||||
for album in self.all_albums:
|
||||
if cache == album.cache_path:
|
||||
match = True
|
||||
break
|
||||
if match:
|
||||
continue
|
||||
for photo in self.all_photos:
|
||||
if cache in photo.image_caches:
|
||||
match = True
|
||||
break
|
||||
if not match:
|
||||
if cache not in all_cache_entries:
|
||||
print "Removing stale cache %s" % cache
|
||||
os.unlink(os.path.join(self.cache_path, cache))
|
||||
os.unlink(os.path.join(self.cache_path, cache))
|
||||
|
@ -17,7 +17,7 @@ a:hover {
|
||||
top: 0;
|
||||
padding: 0.4em;
|
||||
font-weight: bold;
|
||||
font-size: 1.2em;
|
||||
font-size: 1.15em;
|
||||
}
|
||||
#loading {
|
||||
display: none;
|
||||
@ -82,6 +82,33 @@ a:hover {
|
||||
right: 0;
|
||||
text-align: center;
|
||||
}
|
||||
#photo-box {
|
||||
display: inline;
|
||||
}
|
||||
#photo-links {
|
||||
background-color: #000000;
|
||||
font-weight: bold;
|
||||
height: 10px;
|
||||
font-size: 10px;
|
||||
line-height: 7px;
|
||||
padding-top: 3px;
|
||||
padding-bottom: 3px;
|
||||
padding-right: 10px;
|
||||
padding-left: 10px;
|
||||
display: none;
|
||||
border-top-right-radius: 5px;
|
||||
border-top-left-radius: 5px;
|
||||
-moz-border-top-right-radius: 5px;
|
||||
-moz-border-top-left-radius: 5px;
|
||||
-webkit-border-top-right-radius: 5px;
|
||||
-webkit-border-top-left-radius: 5px;
|
||||
}
|
||||
#photo-bar {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
}
|
||||
.photo-view-container {
|
||||
position: absolute;
|
||||
height: 150px;
|
||||
@ -94,3 +121,12 @@ a:hover {
|
||||
padding: 0 !important;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#error {
|
||||
display: none;
|
||||
text-align: center;
|
||||
padding-top: 20%;
|
||||
font-size: 4em;
|
||||
font-weight: bold;
|
||||
font-style: italic;
|
||||
}
|
||||
|
@ -3,12 +3,12 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<title>JasonDonenfeld.com – Colors</title>
|
||||
<title>JasonDonenfeld.com – Photos</title>
|
||||
<link href="css/styles.min.css" rel="stylesheet" type="text/css" />
|
||||
<script type="text/javascript" src="js/scripts.min.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="title">Colors</div>
|
||||
<div id="title">Photos</div>
|
||||
<div id="album-view">
|
||||
<div id="thumbs">
|
||||
<div id="loading">Loading...</div>
|
||||
@ -16,10 +16,20 @@
|
||||
<div id="subalbums"></div>
|
||||
</div>
|
||||
<div id="photo-view">
|
||||
<a id="next-photo"><img id="photo" /></a>
|
||||
<div id="photo-box">
|
||||
<a id="next-photo"><img id="photo" /></a>
|
||||
<div id="photo-bar">
|
||||
<div id="photo-links">
|
||||
<a id="metadata-link">metadata</a> | <a id="original-link" target="_blank">download original</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<a id="back">←</a>
|
||||
<a id="next">→</a>
|
||||
</div>
|
||||
|
||||
<div id="error">Forgot my camera...</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
@ -10,6 +10,8 @@ $(document).ready(function() {
|
||||
.replace(/\(/g, "")
|
||||
.replace(/\)/g, "")
|
||||
.replace(/#/g, "")
|
||||
.replace(/&/g, "")
|
||||
.replace(/,/g, "")
|
||||
.replace(/\[/g, "")
|
||||
.replace(/\]/g, "")
|
||||
.replace(/"/g, "")
|
||||
@ -42,7 +44,7 @@ $(document).ready(function() {
|
||||
$.ajax({
|
||||
type: "GET",
|
||||
url: "cache/" + current_album_cache + ".json",
|
||||
error: function() { $(document.body).html("Couldn't fetch it."); },
|
||||
error: die,
|
||||
success: albumLoaded
|
||||
});
|
||||
}
|
||||
@ -147,6 +149,8 @@ $(document).ready(function() {
|
||||
$("#back").attr("href", "#" + current_album_cache + "/" + cachePath(current_album.photos[
|
||||
(current_photo_index - 1 < 0) ? (current_album.photos.length - 1) : (current_photo_index - 1)
|
||||
].name));
|
||||
$("#original-link").attr("target", "_blank").attr("href", "albums/" + current_album.path + "/" + current_photo.name);
|
||||
$("#metadata-link").attr("href", "javascript:alert('Coming soon...')");
|
||||
|
||||
$("#album-view").addClass("photo-view-container");
|
||||
$("#subalbums").hide();
|
||||
@ -188,13 +192,19 @@ $(document).ready(function() {
|
||||
$.ajax({
|
||||
type: "GET",
|
||||
url: "cache/" + album + ".json",
|
||||
error: function() { $(document.body).html("Couldn't fetch it."); },
|
||||
error: die,
|
||||
success: callback
|
||||
});
|
||||
}
|
||||
function albumThumbFinder(album, callback) {
|
||||
fetchAlbumForThumb(album, function(fetchedAlbum) { albumForThumbIteration(fetchedAlbum, callback); });
|
||||
}
|
||||
function die() {
|
||||
$("#album-view").hide();
|
||||
$("#photo-view").hide();
|
||||
$("#title").hide();
|
||||
$("#error").fadeIn(5000);
|
||||
}
|
||||
|
||||
var current_album_cache = null;
|
||||
var current_photo_cache = null;
|
||||
@ -237,4 +247,10 @@ $(document).ready(function() {
|
||||
}
|
||||
return true;
|
||||
});
|
||||
$("#photo-box").mouseenter(function() {
|
||||
$("#photo-links").stop().fadeTo("slow", 0.50).css("display", "inline");
|
||||
});
|
||||
$("#photo-box").mouseleave(function() {
|
||||
$("#photo-links").stop().fadeOut("slow");
|
||||
});
|
||||
});
|
||||
|
@ -4,7 +4,7 @@ function cachePath($path) {
|
||||
$path = substr($path, 1);
|
||||
if ($path[strlen($path) - 1] == '/')
|
||||
$path = substr($path, 0, strlen($path) - 1);
|
||||
$path = str_replace('_-_', '-', str_replace('/', '-', str_replace(' ', '_', str_replace('(', '', str_replace(')', '', str_replace('#', '', str_replace('[', '', str_replace(']', '', str_replace('"', '', str_replace("'", '', strtolower($path)))))))))));
|
||||
$path = str_replace('_-_', '-', str_replace('/', '-', str_replace(' ', '_', str_replace('(', '', str_replace(')', '', str_replace('#', '', str_replace('[', '', str_replace(']', '', str_replace('&', '', str_replace(',', '', str_replace('"', '', str_replace("'", '', strtolower($path)))))))))))));
|
||||
while (strpos($path, "--") !== false)
|
||||
$path = str_replace("--", "-", $path);
|
||||
while (strpos($path, "__") !== false)
|
||||
@ -23,9 +23,13 @@ if (strpos(strtolower($url), ".php") == strlen($url) - 4) {
|
||||
$url = substr($url, 0, strlen($url) - 4);
|
||||
$index = strrpos($url, "/");
|
||||
$redirect = "/#".cachePath(substr($url, 0, $index))."/".cachePath(substr($url, $index));
|
||||
} else if (strpos($url, "/cache/") === 0 || strpos($url, "/albums/") === 0 || strpos($url, "/img/") === 0 || strpos($url, "/img/") === 0 || strpos($url, "/js/") === 0 || strpos($url, "/css/") === 0) {
|
||||
header("HTTP/1.1 404 Not Found");
|
||||
exit();
|
||||
} else
|
||||
$redirect = "/#".cachePath($url);
|
||||
|
||||
|
||||
header("HTTP/1.1 301 Moved Permanently");
|
||||
header("Location: $redirect");
|
||||
|
||||
?>
|
Loading…
Reference in New Issue
Block a user