album/src/main/webapp/assets/render.js

178 lines
6.8 KiB
JavaScript
Raw Normal View History

2014-08-09 23:06:41 -07:00
$(function() {
function formatCaption(title, currentArray, currentIndex, currentOpts) {
2014-08-09 23:06:41 -07:00
var captionElement = document.getElementById(title);
return captionElement.innerHTML;
}
function scale(w, h, max) {
if (w > h) {
return { w : Math.floor(max), h: Math.floor((max * h + max / 2) / w) };
} else {
return { w: Math.floor((max * w + max / 2) / h), h: Math.floor(max) };
}
}
2024-01-14 14:50:49 -08:00
function renderGrid(data, textStatus) {
$("#name").text(data.name);
document.title = data.name;
2014-08-09 23:06:41 -07:00
2024-01-14 14:50:49 -08:00
var thmb = 250;
var picSize = 800;
var movieSize = 640;
2014-08-09 23:06:41 -07:00
var prevName = null, thisName;
2024-01-14 14:50:49 -08:00
function updateButton(selector, direction, destination) {
var imgName = destination ? direction : direction + "-inactive",
imgUrl = "/photo/assets/" + imgName + ".png",
imgElement = $(selector),
isWrapped = imgElement.parent().get()[0].tagName == "A",
anchor = isWrapped ? imgElement.parent() : $("<a></a>");
if (destination) {
anchor.attr("href", encodeURI("/photo/album" + destination + ".album") + location.search);
if (!isWrapped) {
imgElement.wrap(anchor);
}
} else {
if (isWrapped) {
imgElement.unwrap();
}
}
imgElement.attr("src", imgUrl);
}
$("#entryName").text(data.name);
$("#arrowLeft").attr(data.name);
updateButton("#arrowLeft", "left", data.prev);
updateButton("#arrowUp", "up", data.parent);
updateButton("#arrowRight", "right", data.next);
if (location.search) {
let params = new URL(location.href).searchParams;
if (params.has("q")) {
$("#searchBox").val(params.get("q"));
}
}
2024-01-14 14:50:49 -08:00
$.each(data.contents, function(idx, entry) {
2014-08-09 23:06:41 -07:00
if (data.groupPrefix && entry.type == "dir") {
thisName = entry.earliest;
if (prevName != null && prevName != thisName) {
$("<hr/>").appendTo("body");
prevName = null;
}
if (prevName == null) {
$("<h2></h2>").text(thisName).appendTo("body");
prevName = thisName;
}
}
2024-01-14 14:50:49 -08:00
var dim = scale(entry.width, entry.height, thmb);
2014-08-09 23:06:41 -07:00
2024-01-14 14:50:49 -08:00
var gridDiv = $("<div class=\"grid\">\n"
+ " <span class=\"name\">" + entry.name + "</span><br/>\n"
+ " <div class=\"imgborder\"><a class=\"ss\" id=\"ent" + idx + "\" href=\"/photo/album" + encodeURI(entry.path) + "?size=" + picSize + "\" title=\"" + entry.name + "\">"
+ "<img class=\"" + entry.type + "pic\" src=\"/photo/album" + (entry.thumbtype == "movie" ? encodeURI(entry.path) + ".frame" : encodeURI(entry.path)) + "?size=" + thmb + "\" border=\"0\" width=\"" + dim.w + "\" height=\"" + dim.h + "\"/></a></div>\n"
2024-01-14 14:50:49 -08:00
+ "</div>\n");
2014-08-09 23:06:41 -07:00
var captionP = $("<p id=\"" + entry.name + "\" class=\"caption\"></p>\n");
if (entry.caption) {
captionP.text(entry.caption);
}
captionP.appendTo(gridDiv);
gridDiv.appendTo('body');
2024-01-14 14:50:49 -08:00
switch (entry.type) {
case "movie":
var size = scale(entry.width, entry.height, movieSize);
var href = "/photo/album" + escape(entry.path) + ".movie?size=" + movieSize;
$("#ent" + idx).attr("rel", "album").attr("href", href).fancybox({
'titlePosition' : 'inside',
'transitionIn' : 'elastic',
'transitionOut' : 'elastic',
'easingIn' : 'easeInQuad',
'easingOut' : 'easeOutQuad',
'titleFormat' : formatCaption,
2024-01-14 14:50:49 -08:00
'padding' : 0,
'href' : "/photo/assets/flowplayer/flowplayer-3.0.3.swf",
'width' : size.w,
'height' : size.h,
'type' : 'swf',
'swf' : {
'allowfullscreen' : 'true',
'wmode' : 'transparent',
'flashvars':
"config={\
'clip': {\
'url': '" + href + "'\
},\
'plugins': {\
'controls': {\
'url': '/photo/assets/flowplayer/flowplayer.controls-3.0.3.swf',\
'backgroundColor': 'transparent',\
'progressColor': 'transparent',\
'bufferColor': 'transparent',\
'play':true,\
'fullscreen':true,\
'autoHide': 'always'\
}\
}\
}"
}
});
break;
case "image":
var largeDim = scale(entry.width, entry.height, picSize);
$("#ent" + idx).attr("rel", "album").fancybox({
'titlePosition' : 'inside',
'transitionIn' : 'elastic',
'transitionOut' : 'elastic',
'easingIn' : 'easeInQuad',
'easingOut' : 'easeOutQuad',
'titleFormat' : formatCaption,
2024-01-14 14:50:49 -08:00
'width' : largeDim.w,
'height' : largeDim.h,
'type' : "image",
'href' : $("#ent" + idx).href
});
break;
case "dir":
$("#ent" + idx).attr("href", location.pathname.replace(/\.album?($|\?)/, "/" + entry.name + ".album"));
break;
}
});
var selectedImg = window.location.search;
var selectedPos = undefined;
if (/^\?focus=/.test(selectedImg)) {
selectedImg = selectedImg.substring('?focus='.length);
$("a.ss").each(function(index) {
if (selectedImg == $(this).attr("title")) {
selectedPos = index;
2024-01-14 14:50:49 -08:00
}
});
}
2014-08-09 23:06:41 -07:00
if (selectedPos !== undefined) {
$("#ent" + selectedPos).trigger('click');
}
}
2014-08-09 23:06:41 -07:00
2024-01-14 14:50:49 -08:00
$.getJSON(location.pathname.replace(/\.album(\?|$)/, '.json') + location.search, renderGrid);
2024-01-14 14:50:49 -08:00
2014-08-09 23:06:41 -07:00
});