Merge branch 'master' of ssh://odb/home/gitroot/album
|
|
@ -1,259 +0,0 @@
|
|||
Position.includeScrollOffsets = true;
|
||||
|
||||
var Engine = {
|
||||
detect: function() {
|
||||
var UA = navigator.userAgent;
|
||||
this.isKHTML = /Konqueror|Safari|KHTML/.test(UA);
|
||||
this.isGecko = (/Gecko/.test(UA) && !this.isKHTML);
|
||||
this.isOpera = /Opera/.test(UA);
|
||||
this.isMSIE = (/MSIE/.test(UA) && !this.isOpera);
|
||||
this.isMSIE7 = this.isMSIE && !(/MSIE 6\./.test(UA) && !this.isOpera);
|
||||
this.isMSIE6 = this.isMSIE && !this.isMSIE7;
|
||||
if (document.childNodes && !document.all && !navigator.taintEnabled)
|
||||
Engine[!!document.evaluate ? 'isSafari3' : 'isSafari2'] = true;
|
||||
}
|
||||
}
|
||||
Engine.detect();
|
||||
|
||||
if (Engine.isMSIE){
|
||||
try {
|
||||
document.execCommand("BackgroundImageCache", false, true);
|
||||
} catch(e) {
|
||||
// ignore
|
||||
}
|
||||
}
|
||||
|
||||
Position.getPageSize = function() {
|
||||
|
||||
var xScroll, yScroll;
|
||||
|
||||
if (window.scrollMaxX) {
|
||||
xScroll = window.innerWidth + window.scrollMaxX;
|
||||
yScroll = window.innerHeight + window.scrollMaxY;
|
||||
} else {
|
||||
xScroll = document.body.scrollWidth;
|
||||
yScroll = document.body.scrollHeight;
|
||||
}
|
||||
|
||||
var windowWidth, windowHeight;
|
||||
if (self.innerHeight) { // all except Explorer
|
||||
windowWidth = self.innerWidth;
|
||||
windowHeight = self.innerHeight;
|
||||
} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
|
||||
windowWidth = document.documentElement.clientWidth;
|
||||
windowHeight = document.documentElement.clientHeight;
|
||||
} else if (document.body) { // other Explorers
|
||||
windowWidth = document.body.clientWidth;
|
||||
windowHeight = document.body.clientHeight;
|
||||
}
|
||||
// for small pages with total height less then height of the viewport
|
||||
pageHeight = Math.max(windowHeight, yScroll);
|
||||
|
||||
// for small pages with total width less then width of the viewport
|
||||
pageWidth = Math.max(windowWidth, xScroll);
|
||||
|
||||
return {
|
||||
page: { width: pageWidth, height: pageHeight },
|
||||
window: { width: windowWidth, height: windowHeight }
|
||||
};
|
||||
}
|
||||
|
||||
Position.scrollX = function(){
|
||||
return (window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0);
|
||||
}
|
||||
|
||||
var Loader = {
|
||||
|
||||
_assets: $H({}),
|
||||
_checkInterval: null,
|
||||
_options: {},
|
||||
|
||||
_update: function() {
|
||||
|
||||
var allLoaded = true;
|
||||
Loader._assets.each(function(a) {
|
||||
if (!a[1].complete && a[1].image.complete) {
|
||||
a[1].complete = true;
|
||||
a[1].completed_at = new Date().getTime();
|
||||
if(a[1].options.onComplete) {
|
||||
a[1].options.onComplete(a[0]);
|
||||
}
|
||||
}
|
||||
if (!a[1].complete && !a[1].image.complete) {
|
||||
allLoaded = false;
|
||||
}
|
||||
});
|
||||
if (allLoaded) {
|
||||
clearInterval(Loader._checkInterval);
|
||||
Loader._checkInterval = null;
|
||||
if (Loader._options && Loader._options.onComplete) {
|
||||
Loader._options.onComplete();
|
||||
}
|
||||
Loader._options = null;
|
||||
}
|
||||
},
|
||||
|
||||
initialize: function() {
|
||||
var options = arguments[0] || {};
|
||||
Loader._options = options;
|
||||
},
|
||||
|
||||
cacheOrLoad: function(url) {
|
||||
var options = arguments[1] || {};
|
||||
if (this.isLoaded(url)) {
|
||||
if (options.onComplete) {
|
||||
options.onComplete();
|
||||
}
|
||||
} else {
|
||||
this.load(url, options);
|
||||
}
|
||||
},
|
||||
|
||||
load: function(url) {
|
||||
if (Loader._assets.get(url)) return;
|
||||
var options = arguments[1] || {};
|
||||
var a = { };
|
||||
a.image = new Image();
|
||||
a.image.src = url;
|
||||
a.complete = false;
|
||||
a.options = options;
|
||||
a.loaded_at = new Date().getTime();
|
||||
if (!Engine.isSafari2) {
|
||||
Event.observe(a.image, 'error', function() { Loader.error(url) });
|
||||
}
|
||||
Loader._assets.set(url, a);
|
||||
if (!Loader._checkInterval) {
|
||||
Loader._checkInterval = setInterval(Loader._update, 10);
|
||||
}
|
||||
},
|
||||
|
||||
error: function(url) {
|
||||
var asset = Loader._assets.get(url);
|
||||
asset.complete = true;
|
||||
if (asset.options.onComplete) {
|
||||
asset.options.onComplete('assets/empty.gif');
|
||||
}
|
||||
},
|
||||
|
||||
stats: function(url) {
|
||||
return (Loader._assets.get(url)._complete ?
|
||||
(Loader._assets.get(url)._completed_at - Loader._assets.get(url)._loaded_at) : null);
|
||||
},
|
||||
|
||||
isQueued: function(url) {
|
||||
return Loader._assets.get(url);
|
||||
},
|
||||
|
||||
isLoaded: function(url) {
|
||||
return (Loader._assets.get(url) && Loader._assets.get(url).complete);
|
||||
},
|
||||
|
||||
remove: function(url) {
|
||||
Loader._assets.unset(url);
|
||||
},
|
||||
|
||||
reset: function() {
|
||||
Loader._assets = $H({});
|
||||
}
|
||||
};
|
||||
|
||||
Event.localPointer = function(event) {
|
||||
var p = [Event.pointerX(event), Event.pointerY(event)];
|
||||
var element = arguments[1] || Event.element(event);
|
||||
var e = Position.page($(element));
|
||||
return [
|
||||
p[0]-(e[0]+(window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0)),
|
||||
p[1]-(e[1]+(window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0))];
|
||||
};
|
||||
|
||||
Effect.HScroll = Class.create();
|
||||
|
||||
Object.extend(Object.extend(Effect.HScroll.prototype, Effect.Base.prototype), {
|
||||
|
||||
initialize: function(delta) {
|
||||
|
||||
this.scrollStart = window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0;
|
||||
|
||||
var w = Position.getPageSize();
|
||||
if (this.scrollStart + delta < 0) {
|
||||
delta = -this.scrollStart;
|
||||
}
|
||||
if (this.scrollStart + delta > (w.page.width-w.window.width)) {
|
||||
delta = (w.page.width-w.window.width) - this.scrollStart;
|
||||
}
|
||||
this.delta = delta;
|
||||
|
||||
this.start(arguments[1] || {});
|
||||
},
|
||||
|
||||
update: function(position) {
|
||||
Position.prepare();
|
||||
window.scrollTo(this.scrollStart + (position*this.delta), 0);
|
||||
}
|
||||
});
|
||||
|
||||
Effect.HScrollTo = Class.create();
|
||||
|
||||
Object.extend(Object.extend(Effect.HScrollTo.prototype, Effect.Base.prototype), {
|
||||
initialize: function(scrollEnd) {
|
||||
this.scrollStart = window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0;
|
||||
|
||||
var delta = scrollEnd - this.scrollStart;
|
||||
var w = Position.getPageSize();
|
||||
if (this.scrollStart + delta < 0) {
|
||||
delta = -this.scrollStart;
|
||||
}
|
||||
if (this.scrollStart + delta > (w.page.width-w.window.width)) {
|
||||
delta = (w.page.width-w.window.width) - this.scrollStart;
|
||||
}
|
||||
this.delta = delta;
|
||||
|
||||
this.start(arguments[1] || {});
|
||||
},
|
||||
|
||||
update: function(position) {
|
||||
Position.prepare();
|
||||
window.scrollTo(this.scrollStart + (position*this.delta), 0);
|
||||
}
|
||||
});
|
||||
|
||||
Effect.HScrollToElement = function(element, direction) {
|
||||
|
||||
element = $(element);
|
||||
|
||||
var viewportMiddle = Position.getPageSize().window.width/2;
|
||||
var scrollStart = window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0;
|
||||
var elementMiddle = element.offsetWidth/2 + Position.cumulativeOffset(element).first();
|
||||
var offset = scrollStart + viewportMiddle;
|
||||
var clickOffset = Prototype.Browser.IE ? 20 : 17; //offset to keep arrows visible at 800x600
|
||||
if (direction == 1)
|
||||
var delta = elementMiddle - offset + clickOffset;
|
||||
else
|
||||
var delta = -(offset - elementMiddle) - clickOffset;
|
||||
new Effect.HScroll(delta);
|
||||
}
|
||||
/*
|
||||
Effect.MoveRight = Class.create();
|
||||
|
||||
Object.extend(Object.extend(Effect.MoveRight.prototype, Effect.Base.prototype), {
|
||||
|
||||
initialize: function(element, delta) {
|
||||
this.element = $(element);
|
||||
if(!this.element) throw(Effect._elementDoesNotExistError);
|
||||
var options = Object.extend({
|
||||
x: delta
|
||||
}, arguments[2] || {});
|
||||
this.start(options);
|
||||
},
|
||||
|
||||
setup: function() {
|
||||
this.originalRight = this.options.initialRight || parseFloat(this.element.getStyle('right') || '0');
|
||||
},
|
||||
|
||||
update: function(position) {
|
||||
this.element.setStyle({
|
||||
right: Math.round(this.options.x * position + this.originalRight) + 'px'
|
||||
});
|
||||
}
|
||||
});
|
||||
*/
|
||||
|
|
@ -1,302 +0,0 @@
|
|||
/* GLOBAL LAYOUT */
|
||||
|
||||
html {
|
||||
background: url(background.gif) repeat-x left center #95754e;
|
||||
background-attachment: fixed;
|
||||
}
|
||||
|
||||
body {
|
||||
color: #2B200D;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font: 10px/14px Verdana, Arial, sans-serif;
|
||||
}
|
||||
|
||||
* {
|
||||
outline: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* Text Selections */
|
||||
|
||||
::-moz-selection {
|
||||
background: transparent;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
::selection {
|
||||
background: transparent;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
#logo {
|
||||
top: -100px;
|
||||
left: 126px;
|
||||
position: fixed;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#layout {
|
||||
height: 504px;
|
||||
margin-left: 65px;
|
||||
margin-right: 65px;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
div#filling {
|
||||
background: top right url(background-fill-2.gif);
|
||||
height: 504px;
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
right: 301px;
|
||||
}
|
||||
|
||||
/* TEXT CONTENT */
|
||||
|
||||
ul {
|
||||
list-style-type: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
li {
|
||||
color: #2B200D;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
li a {
|
||||
color: #2B200D;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
li a:hover {
|
||||
color: #89693b;
|
||||
}
|
||||
|
||||
div.content-block {
|
||||
background: url(box-2-panels-background.jpg) #CCBFA5;
|
||||
float: left;
|
||||
height: 504px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
div.content-block div.info {
|
||||
color: #2B200D;
|
||||
float: left;
|
||||
font-size: 10px;
|
||||
height: 420px;
|
||||
padding-left: 15px;
|
||||
padding-right: 15px;
|
||||
padding-top: 28px;
|
||||
position: relative;
|
||||
width: 230px;
|
||||
}
|
||||
|
||||
div.content-block div.info p {
|
||||
font: 10px/15px Verdana;
|
||||
margin-top: 0px;
|
||||
margin-bottom: 18px;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
div.content-block div.info a {
|
||||
color: #2B200D;
|
||||
}
|
||||
|
||||
div.content-block div.info a:hover {
|
||||
color: #89693b;
|
||||
}
|
||||
|
||||
div.content-block div.headline {
|
||||
padding-bottom: 39px;
|
||||
}
|
||||
|
||||
div.content-block h1 {
|
||||
color: #89693b;
|
||||
font: 14px/15px Verdana;
|
||||
text-transform: lowercase;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
margin-top: 6px;
|
||||
}
|
||||
|
||||
div.content-block h2 {
|
||||
color: #89693b;
|
||||
font: 11px/15px Verdana;
|
||||
text-transform: lowercase;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
padding-bottom: 8px;
|
||||
}
|
||||
|
||||
div.content-block div.title.second-column, div.content-block div.subtitle.second-column {
|
||||
left: 275px;
|
||||
}
|
||||
|
||||
div.content-block div.info.wide {
|
||||
width: 360px;
|
||||
}
|
||||
|
||||
* html div.content-block div.info.wide {
|
||||
width: 360px;
|
||||
}
|
||||
|
||||
div.content-block div.info.wide h1 {
|
||||
font: 11px/15px Verdana;
|
||||
color: #89693b;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
div.content-block div.info.wide p, div.content-block div.info.narrow p {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
margin-top: 0px;
|
||||
margin-bottom: 18px;
|
||||
}
|
||||
|
||||
div.content-block div.info.narrow {
|
||||
width: 230px;
|
||||
}
|
||||
|
||||
div.content-block img.content-block-image {
|
||||
float: left;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
/* TEXTPANELS */
|
||||
|
||||
div.textpanel {
|
||||
height: 504px;
|
||||
float: left;
|
||||
position: relative;
|
||||
background: url(textpanel-background.gif) left top repeat-x;
|
||||
}
|
||||
|
||||
div.textpanel {
|
||||
width: 260px;
|
||||
}
|
||||
|
||||
div.textpanel.wide {
|
||||
width: 520px;
|
||||
}
|
||||
|
||||
div.content-block div.textpanel.wide {
|
||||
width: 520px; /* IE6 needs this to set correct width */
|
||||
}
|
||||
|
||||
div.textpanel div.content {
|
||||
margin-top: 140px;
|
||||
margin-left: 28px;
|
||||
margin-right: 28px;
|
||||
}
|
||||
|
||||
div.textpanel.wide div.content {
|
||||
width: 380px;
|
||||
margin-left: 70px;
|
||||
}
|
||||
|
||||
div.textpanel div.content h2 {
|
||||
font-size: 20px;
|
||||
font-weight: normal;
|
||||
color: #6a5839;
|
||||
margin-bottom: 40px;
|
||||
text-shadow: 1px 1px 1px #e7e1d2;
|
||||
}
|
||||
|
||||
div.content-block div.textpanel div.content {
|
||||
margin-left: 55px;
|
||||
}
|
||||
|
||||
div.content-block div.textpanel div.content h2 {
|
||||
padding-bottom: 0px;
|
||||
}
|
||||
|
||||
div.textpanel div.content p {
|
||||
margin-bottom: 25px;
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
|
||||
/* PICTUREBOXES */
|
||||
|
||||
div.picturebox {
|
||||
float: left;
|
||||
height: 510px;
|
||||
position: relative;
|
||||
/* overflow: hidden;*/
|
||||
}
|
||||
|
||||
div.picturebox div.picture {
|
||||
height: 504px;
|
||||
left: 0;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
background: url(empty.png) repeat;
|
||||
Z-index: 3;
|
||||
}
|
||||
|
||||
div.shadow-bottom {
|
||||
overflow: hidden;
|
||||
position: absolute;
|
||||
top: 504px;
|
||||
height: 6px;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
background: url(shadow-bottom.gif) repeat-x;
|
||||
}
|
||||
|
||||
div.shadow-bottom div.start {
|
||||
background: url(shadow-bottom-start.gif);
|
||||
height: 6px;
|
||||
position: absolute;
|
||||
width: 6px;
|
||||
}
|
||||
|
||||
div.shadow-right {
|
||||
background: url(shadow-right.gif) repeat-y;
|
||||
height: 510px;
|
||||
position: absolute;
|
||||
right: -6px;
|
||||
top: 0;
|
||||
width: 6px;
|
||||
}
|
||||
|
||||
div.picturebox div.darkening {
|
||||
background: url(lightbox-lowlight-overlay.jpg);
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 10000;
|
||||
}
|
||||
|
||||
|
||||
/* SPACERS */
|
||||
|
||||
div#branch {
|
||||
position: fixed;
|
||||
left: 20px;
|
||||
font: 14px Verdana;
|
||||
color: #C5B89E;
|
||||
padding: 3px;
|
||||
background: #F2EFE8;
|
||||
border-left: 1px solid #C5B89E;
|
||||
border-bottom: 1px solid #C5B89E;
|
||||
border-right: 1px solid #C5B89E;
|
||||
}
|
||||
|
||||
* html div#branch {
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
div.spacer-column {
|
||||
float: left;
|
||||
height: 504px;
|
||||
width: 65px;
|
||||
background: url(spacer-column.gif);
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
|
|
@ -1,183 +0,0 @@
|
|||
var Album = {
|
||||
|
||||
pictures: [],
|
||||
queue: { position: 'end', scope: 'album' },
|
||||
|
||||
cubic: function(pos) {
|
||||
pos /= 0.5;
|
||||
return pos < 1 ? 0.5*pos*pos*pos : 0.5*((pos-2)*(pos-2)*(pos-2) + 2);
|
||||
},
|
||||
|
||||
spacerEvent: function (spacer, direction) {
|
||||
var width = (direction < 0 ? _pictures[spacer].width : _pictures[spacer + 1].width) + 65;
|
||||
new Effect.HScroll(width * direction, { queue: Album.queue, duration: 0.5, transition: Album.cubic });
|
||||
},
|
||||
|
||||
initialize: function() {
|
||||
|
||||
$$('div.picturebox div.picture img').each( function(img, idx) {
|
||||
var container = img.parentNode;
|
||||
container.addClassName('highlight');
|
||||
container.setAttribute('id', 'pic' + idx);
|
||||
// var darkener = $(document.createElement('div')).addClassName('darkening').setOpacity(0);
|
||||
// container.appendChild(darkener);
|
||||
// Event.observe(darkener, 'click', function() {
|
||||
// Album.showProduct(this);
|
||||
// }.bind(img));
|
||||
});
|
||||
|
||||
|
||||
$$('div.spacer-column').each(function(spacer, idx) {
|
||||
|
||||
spacer.setAttribute('id', 'spacer' + idx);
|
||||
|
||||
Event.observe(spacer, 'click', function(event) {
|
||||
Album.spacerEvent(idx, Event.localPointer(event)[0] < 33 ? 1 : -1);
|
||||
});
|
||||
|
||||
Event.observe(spacer, 'mousemove', function(event) {
|
||||
var d = Event.localPointer(event)[0]<33 ? '-65' : '-130';
|
||||
spacer.style.backgroundPosition = d + 'px 0px';
|
||||
});
|
||||
|
||||
Event.observe(spacer, 'mouseout', function(event) {
|
||||
spacer.style.backgroundPosition = '0px 0px';
|
||||
});
|
||||
});
|
||||
|
||||
},
|
||||
|
||||
initializeThumbsFromPictureList: function(list) {
|
||||
|
||||
_pictures = list;
|
||||
|
||||
var imgtags = $$('div.picturebox div.picture img');
|
||||
|
||||
var totalWidth = 0;
|
||||
var pictureCount = 0;
|
||||
|
||||
imgtags.each(function(img, index) {
|
||||
var container = img.parentNode;
|
||||
var picturebox = container.parentNode;
|
||||
// var darkener = img.next();
|
||||
|
||||
var picture = _pictures[container.id.substr(3)];
|
||||
$(img).setStyle({ width: picture.width + 'px', height: picture.height + 'px' });
|
||||
$(container).setStyle({ width: picture.width + 'px' });
|
||||
$(picturebox).setStyle({ width: picture.width + 'px' });
|
||||
$(container).onclick = function() { Album.moveIntoView(container); };
|
||||
totalWidth += picture.width;
|
||||
pictureCount += 1;
|
||||
});
|
||||
|
||||
totalWidth += (pictureCount - 1) * 65;
|
||||
|
||||
$('layout').setStyle({ width: totalWidth + 'px' });
|
||||
$('content').setStyle({ width: totalWidth + 'px' });
|
||||
$('page-body').setStyle({ width: (totalWidth + 2 * 65) + 'px' });
|
||||
|
||||
Loader.reset();
|
||||
|
||||
setTimeout(function() {
|
||||
this._loaderPause = false;
|
||||
this.loadVisibleThumbs();
|
||||
}.bind(this), 500);
|
||||
},
|
||||
|
||||
loadVisibleThumbs: function() {
|
||||
|
||||
if (this._loaderPause) return;
|
||||
if (this._loaderTimeout) clearTimeout(this._loaderTimeout);
|
||||
|
||||
this._loaderTimeout = setTimeout(function() {
|
||||
|
||||
var w = Position.getPageSize().window.width;
|
||||
|
||||
var visibles = [];
|
||||
$$('div.picturebox div.picture img').each(function(img) {
|
||||
|
||||
var container = img.parentNode;
|
||||
var x0 = Position.page(container)[0];
|
||||
var picture = _pictures[container.id.substr(3)];
|
||||
var x1 = x0 + picture.width;
|
||||
if ((x0 >= 0 && x0 < w) || (x1 >=0 && x1 < w)) {
|
||||
visibles.push(img);
|
||||
} else {
|
||||
Loader.remove(picture.url);
|
||||
img.src = 'assets/empty.gif';
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
visibles.each(function(img, idx) {
|
||||
|
||||
var id = img.parentNode.id;
|
||||
var picture = _pictures[id.substr(3)];
|
||||
|
||||
if (img.src == picture.url) return;
|
||||
|
||||
var imageObj = picture.url;
|
||||
|
||||
if (Loader.isQueued(imageObj)) return;
|
||||
|
||||
// alert('Loading: ' + imageObj + '\nsrc: ' + img.src + '\nurl: ' + picture.url + '\nmatch: ' + img.src.match('assets/empty\.gif$') + '\nloader: ' + Loader.isQueued(imageObj));
|
||||
|
||||
// $(img).setStyle({ position: 'relative', left: ('-' + picture.width + 'px') });
|
||||
Loader.cacheOrLoad(imageObj, {
|
||||
|
||||
onComplete: function(obj) {
|
||||
// $(img).setStyle({ position: 'relative', left: '0px'}).setOpacity(0);
|
||||
img.setOpacity(0);
|
||||
// alert(obj);
|
||||
img.src = obj;
|
||||
new Effect.Opacity(img, { from: 0, to: 1, delay: 0.1, transition: Album.cubic, duration: 0.4 });
|
||||
}});
|
||||
});
|
||||
|
||||
}, 100);
|
||||
},
|
||||
|
||||
moveIntoView: function(container) {
|
||||
|
||||
container = $(container);
|
||||
var picture = _pictures[container.id.substr(3)];
|
||||
|
||||
var windowWidth = Position.getPageSize().window.width;
|
||||
var windowLeft = Position.scrollX();
|
||||
var windowRight = windowLeft + windowWidth;
|
||||
var pictureboxLeft = Position.page(container)[0] - 32 + windowLeft;
|
||||
var pictureboxRight = pictureboxLeft + picture.width;
|
||||
|
||||
var desiredCenter = (windowLeft + windowRight) / 2;
|
||||
var actualCenter = (pictureboxLeft + pictureboxRight) / 2;
|
||||
var delta = actualCenter - desiredCenter;
|
||||
|
||||
new Effect.HScroll(delta, { queue: Album.queue, duration: 0.5, transition: Album.cubic });
|
||||
|
||||
/*
|
||||
if (pictureboxRight > windowRight) {
|
||||
if (pictureboxRight > Position.getPageSize().page.width)
|
||||
setTimeout(function() {
|
||||
new Effect.HScrollTo(pictureboxRight - windowWidth, { duration: 0.5, transition: Album.cubic });
|
||||
}, 1000);
|
||||
else
|
||||
new Effect.HScrollTo(pictureboxRight - windowWidth, { queue: Album.queue, duration: 0.5, transition: Album.cubic });
|
||||
}
|
||||
else if (pictureboxLeft < windowLeft)
|
||||
new Effect.HScrollTo(pictureboxLeft, { queue: Album.queue, duration: 0.5, transition: Album.cubic });
|
||||
*/
|
||||
},
|
||||
|
||||
initializeThumbsLoader: function() {
|
||||
Event.observe(window, 'scroll', this.loadVisibleThumbs.bindAsEventListener(this));
|
||||
Event.observe(window, 'resize', this.loadVisibleThumbs.bindAsEventListener(this));
|
||||
Event.observe(window, 'beforeunload', this.unloadThumbs.bindAsEventListener(this));
|
||||
this.loadVisibleThumbs();
|
||||
},
|
||||
|
||||
unloadThumbs: function(){
|
||||
$$('div.picturebox div.picture img').each(function(image) { image.src = 'assets/empty.gif' });
|
||||
},
|
||||
|
||||
|
||||
};
|
||||
|
Before Width: | Height: | Size: 414 B |
|
Before Width: | Height: | Size: 4.5 KiB |
|
Before Width: | Height: | Size: 6.5 KiB |
|
Before Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 55 B |
|
Before Width: | Height: | Size: 142 B |
|
Before Width: | Height: | Size: 3.5 KiB |
|
Before Width: | Height: | Size: 954 B |
|
Before Width: | Height: | Size: 2 KiB |
|
Before Width: | Height: | Size: 70 B |
|
Before Width: | Height: | Size: 70 B |
1122
gucci/assets/effects.js
vendored
|
Before Width: | Height: | Size: 43 B |
|
Before Width: | Height: | Size: 141 B |
|
Before Width: | Height: | Size: 55 B |
|
Before Width: | Height: | Size: 142 B |
|
Before Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 9.7 KiB |
|
Before Width: | Height: | Size: 204 B |
|
Before Width: | Height: | Size: 264 B |
|
Before Width: | Height: | Size: 191 B |
|
Before Width: | Height: | Size: 280 B |
|
Before Width: | Height: | Size: 6.8 KiB |
|
Before Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 6.8 KiB |
|
Before Width: | Height: | Size: 1,006 B |
|
Before Width: | Height: | Size: 64 B |
|
Before Width: | Height: | Size: 84 B |
|
Before Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 8.5 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 51 B |
|
Before Width: | Height: | Size: 60 B |
|
Before Width: | Height: | Size: 51 B |
|
Before Width: | Height: | Size: 60 B |
|
Before Width: | Height: | Size: 51 B |
|
Before Width: | Height: | Size: 51 B |
|
Before Width: | Height: | Size: 119 B |
|
Before Width: | Height: | Size: 120 B |
|
Before Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 3 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 525 B |
|
Before Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 2 KiB |
4184
gucci/assets/prototype.js
vendored
|
Before Width: | Height: | Size: 424 B |
|
Before Width: | Height: | Size: 480 B |
|
Before Width: | Height: | Size: 660 B |
|
Before Width: | Height: | Size: 654 B |
|
Before Width: | Height: | Size: 483 B |
|
Before Width: | Height: | Size: 492 B |
|
Before Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 3.4 KiB |
|
Before Width: | Height: | Size: 4.4 KiB |
|
Before Width: | Height: | Size: 5.6 KiB |
|
Before Width: | Height: | Size: 3.7 KiB |
|
Before Width: | Height: | Size: 160 B |
|
Before Width: | Height: | Size: 273 B |
|
Before Width: | Height: | Size: 155 B |
|
Before Width: | Height: | Size: 101 B |
|
Before Width: | Height: | Size: 155 B |
|
Before Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 9 KiB |
|
Before Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 544 B |
|
Before Width: | Height: | Size: 591 B |
|
Before Width: | Height: | Size: 165 B |
|
Before Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 109 B |
|
Before Width: | Height: | Size: 793 B |
|
Before Width: | Height: | Size: 601 B |
|
Before Width: | Height: | Size: 548 B |
|
Before Width: | Height: | Size: 364 B |
|
Before Width: | Height: | Size: 353 B |
|
Before Width: | Height: | Size: 415 B |
|
Before Width: | Height: | Size: 395 B |
|
Before Width: | Height: | Size: 154 B |
|
Before Width: | Height: | Size: 413 B |
|
Before Width: | Height: | Size: 290 B |
|
|
@ -1,86 +0,0 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<title>Album1</title>
|
||||
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon"/>
|
||||
<link rel="stylesheet" href="assets/album.css" type="text/css" media="screen"/>
|
||||
<meta http-equiv="imagetoolbar" content="false"/>
|
||||
<script src="assets/prototype.js" type="text/javascript"></script>
|
||||
<script src="assets/effects.js" type="text/javascript"></script>
|
||||
<script src="assets/album-ext.js" type="text/javascript"></script>
|
||||
<script src="assets/album.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body id="page-body">
|
||||
<div><img style="top: 583px; margin-left: -25px;" id="logo" alt="" src="assets/logo.png"/></div>
|
||||
<!-- <div id="wrapper" style="width: 3072px"> -->
|
||||
<div id="layout" style="top: 63px;">
|
||||
<div id="content" style="height: 514px">
|
||||
|
||||
<div class="picturebox">
|
||||
<div class="picture"><img src="assets/empty.gif" alt=""/></div>
|
||||
<div class="shadow-bottom"><div class="start"></div></div>
|
||||
<div class="shadow-right"></div>
|
||||
</div>
|
||||
|
||||
<div class="spacer-column"></div>
|
||||
|
||||
<div class="picturebox">
|
||||
<div class="picture"><img src="assets/empty.gif" alt=""/></div>
|
||||
<div class="shadow-bottom"><div class="start"></div></div>
|
||||
<div class="shadow-right"></div>
|
||||
</div>
|
||||
|
||||
<div class="spacer-column"></div>
|
||||
|
||||
<div class="picturebox">
|
||||
<div class="picture"><img src="assets/empty.gif" alt=""/></div>
|
||||
<div class="shadow-bottom"><div class="start"></div></div>
|
||||
<div class="shadow-right"></div>
|
||||
</div>
|
||||
|
||||
<div class="spacer-column"></div>
|
||||
|
||||
<div class="picturebox">
|
||||
<div class="picture"><img src="assets/empty.gif" alt=""/></div>
|
||||
<div class="shadow-bottom"><div class="start"></div></div>
|
||||
<div class="shadow-right"></div>
|
||||
</div>
|
||||
|
||||
<div class="spacer-column"></div>
|
||||
|
||||
<div class="picturebox">
|
||||
<div class="picture"><img src="assets/empty.gif" alt=""/></div>
|
||||
<div class="shadow-bottom"><div class="start"></div></div>
|
||||
<div class="shadow-right"></div>
|
||||
</div>
|
||||
|
||||
<div class="spacer-column"></div>
|
||||
|
||||
<div class="picturebox">
|
||||
<div class="picture"><img src="assets/empty.gif" alt=""/></div>
|
||||
<div class="shadow-bottom"><div class="start"></div></div>
|
||||
<div class="shadow-right"></div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<!-- </div> -->
|
||||
|
||||
<script type="text/javascript"><!--
|
||||
|
||||
var pictures = [
|
||||
{ id: 'pic0', url: 'sample2.jpg', width: 378, height: 504 },
|
||||
{ id: 'pic1', url: 'sample1.jpg', width: 672, height: 504 },
|
||||
{ id: 'pic2', url: 'sample3.jpg', width: 741, height: 504 },
|
||||
{ id: 'pic3', url: 'sample4.jpg', width: 634, height: 504 },
|
||||
{ id: 'pic4', url: 'sample5.jpg', width: 378, height: 504 },
|
||||
{ id: 'pic5', url: 'sample6.jpg', width: 672, height: 504 } ];
|
||||
|
||||
Album.initialize();
|
||||
Album.initializeThumbsFromPictureList(pictures);
|
||||
Album.initializeThumbsLoader();
|
||||
|
||||
--></script>
|
||||
</body>
|
||||
</html>
|
||||
|
Before Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 69 KiB |
BIN
photos/geiranger/91860001.jpg
Executable file
|
After Width: | Height: | Size: 3.5 MiB |
126
src/org/forkalsrud/album/exif/ComparatorFactory.java
Normal file
|
|
@ -0,0 +1,126 @@
|
|||
/**
|
||||
*
|
||||
*/
|
||||
package org.forkalsrud.album.exif;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* @author knut
|
||||
*
|
||||
*/
|
||||
public class ComparatorFactory {
|
||||
|
||||
public static final String ASC = "asc";
|
||||
public static final String DESC = "desc";
|
||||
public static final String DIR = "dir";
|
||||
public static final String DATE = "date";
|
||||
public static final String NAME = "name";
|
||||
|
||||
static Pattern SORT_SPEC_SYNTAX = Pattern.compile("(\\w+)(\\s+(" + ASC + "|" + DESC + "))?,? *");
|
||||
|
||||
static ComparatorFactory singleton = new ComparatorFactory();
|
||||
|
||||
Comparator<Entry> directoryFirst = new Comparator<Entry>() {
|
||||
|
||||
public int compare(Entry e1, Entry e2) {
|
||||
|
||||
if (!e1.isFile() && e2.isFile()) {
|
||||
return -1;
|
||||
} else if (e1.isFile() && !e2.isFile()) {
|
||||
return +1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Comparator<Entry> dates = new Comparator<Entry>() {
|
||||
|
||||
public int compare(Entry e1, Entry e2) {
|
||||
|
||||
Date d1 = e1.getDate();
|
||||
Date d2 = e2.getDate();
|
||||
if (d1 != null && d2 != null) {
|
||||
return d1.compareTo(d2);
|
||||
} else if (d1 != null) {
|
||||
return -1;
|
||||
} else if (d2 != null) {
|
||||
return +1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Comparator<Entry> names = new Comparator<Entry>() {
|
||||
|
||||
public int compare(Entry e1, Entry e2) {
|
||||
|
||||
String n1 = e1.getName();
|
||||
String n2 = e2.getName();
|
||||
if (n1 != null && n2 != null) {
|
||||
return n1.compareTo(n2);
|
||||
} else if (n1 != null) {
|
||||
return -1;
|
||||
} else if (n2 != null) {
|
||||
return +1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
HashMap<String, Comparator<Entry>> map = new HashMap<String, Comparator<Entry>>();
|
||||
|
||||
public ComparatorFactory() {
|
||||
|
||||
map.put(DIR, directoryFirst);
|
||||
map.put(DATE, dates);
|
||||
map.put(NAME, names);
|
||||
}
|
||||
|
||||
public static <T> Comparator<T> reverse(final Comparator<T> c) {
|
||||
|
||||
return new Comparator<T>() {
|
||||
|
||||
public int compare(T o1, T o2) {
|
||||
return c.compare(o2, o1);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
|
||||
public Comparator<Entry> getComparator(String sortSpec) {
|
||||
|
||||
Matcher m = SORT_SPEC_SYNTAX.matcher(sortSpec);
|
||||
int start = 0;
|
||||
ArrayList<Comparator<Entry>> list = new ArrayList<Comparator<Entry>>();
|
||||
while (m.find(start)) {
|
||||
|
||||
String param = m.group(1);
|
||||
String direction = m.group(3);
|
||||
Comparator<Entry> c = map.get(param);
|
||||
if (c == null) {
|
||||
throw new IllegalArgumentException(param);
|
||||
}
|
||||
if (DESC.equals(direction)) {
|
||||
c = reverse(c);
|
||||
}
|
||||
list.add(c);
|
||||
start = m.end();
|
||||
}
|
||||
return new ComposingComparator<Entry>(list);
|
||||
}
|
||||
|
||||
public static Comparator<Entry> getSort(String sortSpec) {
|
||||
|
||||
return singleton.getComparator(sortSpec != null ? sortSpec : "dir, date");
|
||||
}
|
||||
}
|
||||