<script type="text/javascript">
$(document).ready(function() {
var recent_page = false;
var column_drop_width = 600;
var width_offset = 20;
var photos = [];
var p =0;
var numPerRow = 2;
var origNumPerRow = 2;
var border_val = 10;
var sideby = true;
var sectionNum = -1;
var rowNum = -1;
var colNum = -1;
var containerNum = -1;
var lightbox = false;
var lightbox_theme = 'dark';
var lightbox_next = false;
var lightbox_prev = false;
var lightbox_num = 0;
var lightbox_image_1 = null;
var lightbox_image_2 = null;
var lightbox_open = false;
var page_width = $(window).width();
var page_height = $(window).height();
var parent_width;
var attempts = 10;
init();
function init(){
if($('.sqs-gallery-block-grid').length>0){
photos = [];
get_data();
console.log(photos);
buildMasonary();
}
else if(attempts>0){
attempts--;
setTimeout(function(){
init();
},500);
}
}
function get_data(){
$('.sqs-gallery-block-grid').find('img').each(function(index,value){
var dimensions = $(this).attr('data-image-dimensions').split('x');
var photo = {
w: parseInt(dimensions[0]),
h: parseInt(dimensions[1]),
ratio: (parseInt(dimensions[1])/parseInt(dimensions[0])),
path: $(this).attr('data-image'),
url : $(this).parent().attr('href'),
num : index,
}
photos.push(photo);
});
$('.sqs-gallery-block-grid').after('<div id="photosContainer" style="width:100%; text-align:center"></div>');
$('#photosContainer').append('<div id="photos" style="display:inline-block"></div>');
$('.sqs-gallery-block-grid').css('display','none');
var gallery_info_str = $('.sqs-gallery-block-grid').parent().parent().attr('data-block-json');
var gallery_info = JSON.parse(gallery_info_str);
border_val = gallery_info['padding']/2;
numPerRow = gallery_info['thumbnails-per-row'];
lightbox = gallery_info['lightbox'];
lightbox_theme = gallery_info['lightboxTheme'];
origNumPerRow = numPerRow;
parent_width = $('#photosContainer').width()-width_offset;
if(page_width < column_drop_width){
numPerRow = 2;
}
else{
numPerRow = origNumPerRow;
}
}
function buildMasonary(){
p=0;
sectionNum = -1;
rowNum = -1;
colNum = -1;
containerNum = -1;
var leftOver = false;
if(photos.length % numPerRow == 1){
leftOver = true;
}
while(p < photos.length){
var photosLeft = photos.length - p;
if(photosLeft >= 2*numPerRow){
if(sideby){
createNewSection();
placeRows(p,numPerRow);
p+=numPerRow;
sideby = false;
}
else{
var photosCol;
if(leftOver){
photosCol = photos.slice(p,p+(2*numPerRow)+1);
placeCol(photosCol,numPerRow,leftOver);
p+=((2*numPerRow)+1);
leftOver = false;
}
else{
photosCol = photos.slice(p,p+(2*numPerRow));
placeCol(photosCol,numPerRow,leftOver);
p+=(2*numPerRow);
}
sideby = true;
}
}
else{
if(photosLeft <= numPerRow){
createNewSection();
placeRows(p,photosLeft);
p+=photosLeft;
}
else{
if(leftOver){
createNewSection();
placeRows(p,numPerRow-1);
p+=(numPerRow-1);
leftOver = false;
}
else{
createNewSection();
placeRows(p,numPerRow);
p+=numPerRow;
}
}
sideby = false;
}
}
sideby = true;
resizeMason();
}
function placeRows(j,inRow){
createNewRow();
scaleRowHeights(j,inRow);
scaleRowToWidth(j,inRow);
for(var i=j; i<(j+inRow); i++){
addImage('row_'+rowNum,i,photos[i]);
}
}
function scaleRowHeights(j,inRow){
for(var i=(j+1); i<(j+inRow); i++){
var ratio = photos[j].h/photos[i].h;
photos[i].h = photos[i].h * ratio;
photos[i].w = photos[i].w * ratio;
}
}
function scaleRowToWidth(j,inRow){
var row_width = 0;
for(var i=j; i<(j+inRow); i++){
row_width += photos[i].w;
}
var ratio = parent_width / row_width;
for(var i=j; i<(j+inRow); i++){
photos[i].w = (photos[i].w * ratio);
photos[i].h = photos[i].w * photos[i].ratio;
}
}
function placeCol(photosCol,numRow,leftOver){
var inCol = 2;
var pp;
if(leftOver){
pp = (numRow-1)*inCol;
}
else{
pp = photosCol.length;
}
for(var i=0; i<pp; i+=inCol){
scaleColImageWidth(i,inCol,photosCol);
}
if(leftOver){
scaleColImageWidth(pp,(inCol+1),photosCol);
}
var col_height = 0;
for(var i=0; i<inCol; i++){
col_height += photosCol[i].h
}
for(var i=2; i<pp; i+=inCol){
scaleSecondColumn(i,inCol,col_height,photosCol);
}
if(leftOver){
scaleSecondColumn(pp,(inCol+1),col_height,photosCol);
}
var col_widths = 0;
for(var i=0; i<pp; i+=inCol){
col_widths += photosCol[i].w
}
if(leftOver){
col_widths += photosCol[pp].w
}
var ratio = parent_width/col_widths;
createNewSection();
for(var i=0; i<pp; i++){
photosCol[i].w*=ratio;
photosCol[i].h*=ratio;
if(i%inCol == 0){
createNewCol(photosCol[i].w);
}
addImage('col_'+colNum,i,photosCol[i]);
}
if(leftOver){
for(var i=pp; i<photosCol.length; i++){
photosCol[i].w*=ratio;
photosCol[i].h*=ratio;
if(i==pp){
createNewCol(photosCol[pp].w);
}
addImage('col_'+colNum,i,photosCol[i]);
}
}
}
function scaleColImageWidth(j,inCol,photosCol){
for(var i=(j+1); i<(j+inCol); i++){
var ratio = photosCol[j].w/photosCol[i].w;
photosCol[i].h = photosCol[i].h * ratio;
photosCol[i].w = photosCol[i].w * ratio;
}
}
function scaleSecondColumn(j,inCol,col_height,photosCol){
var col_height2 = 0;
for(var i=j; i<(j+inCol); i++){
col_height2 += photosCol[i].h
}
var ratio = col_height/col_height2;
for(var i=j; i<(j+inCol); i++){
photosCol[i].w *= ratio;
photosCol[i].h *= ratio;
}
}
function createNewSection(){
sectionNum++;
$('#photos').append('<div class="sqpl_section" id="section_'+sectionNum+'"></div>');
}
function createNewRow(){
rowNum++;
$('#section_'+sectionNum).append('<div class="sqpl_row" id="row_'+rowNum+'"></div>');
}
function createNewCol(w){
colNum++;
$('#section_'+sectionNum).append('<div class="sqpl_column" id="col_'+colNum+'" style="width: '+w+'px;display:inline-block;vertical-align:top"></div>');
}
function addImage(rowCol,j,p){
containerNum++;
$('#'+rowCol).append('<div class="mason_container" id="mason_container_'+containerNum+'" style="width:'+p.w+'px;height:'+p.h+'px;display:inline-block;position:relative;text-align:left;vertical-align:top"></div>');
$('#mason_container_'+containerNum).append('<div class="border_mason" id="border_mason_'+containerNum+'" style="top:'+(border_val/2)+'px;left:'+(border_val/2)+'px;width:'+(p.w-border_val)+'px;height:'+((p.h-border_val))+'px;z-index:5;position:relative;overflow:hidden"></div>')
$('#border_mason_'+containerNum).append('<img class="mason_photo" id="photo_'+j+'" src="'+p.path+'" style="top:'+(-(border_val/2))+'px;left:'+(-(border_val/2))+'px;width:'+(p.w)+'px;height:'+(p.h)+'px;display:inline-block;position:relative"/>');
if(lightbox){
$('#border_mason_'+containerNum).click(function(){
add_lightbox(p.path,p.num);
});
$('#border_mason_'+containerNum).css({'cursor':'pointer'})
}
else if(p.url != null){
$('#mason_container_'+containerNum).wrap('<a href="'+p.url+'"></a>');
}
}
$(window).resize(function(){
page_width = $(window).width();
page_height = $(window).height();
if(lightbox_open){
resize_lightbox(lightbox_image_1);
}
if(page_width < column_drop_width){
numPerRow = 2;
}
else{
numPerRow = origNumPerRow;
}
reBuild();
});
function resize_lightbox(lb){
if(page_width < lb.width()){
lb.css('max-width',page_width);
}
else if(page_width > lb.width()){
if(page_width > 900){
lb.css('max-width',900);
}
else{
lb.css('max-width',page_width);
}
}
}
function reBuild(){
$('#photos').empty();
buildMasonary();
}
function resizeMason(){
var new_width =$('#photosContainer').width()-width_offset;
var ratio = new_width/parent_width;
parent_width = new_width;
$('.sqpl_column').each(function(){
var column = $(this);
var w = column.width();
column.width(w*ratio);
});
$('.mason_container').each(function(){
var w = $(this).width();
var h = $(this).height();
var new_w = w*ratio;
var new_h = h*ratio;
var container = $(this);
var border_div = $(this).children('.border_mason');
var mason_image = border_div.children('.mason_photo');
resizeElements(container,new_w,new_h,0);
resizeElements(mason_image,new_w,new_h,0);
resizeElements(border_div,new_w,new_h,border_val);
});
function resizeElements(elem,w,h,offset){
elem.width(w-offset);
elem.height(h-offset);
}
}
function add_lightbox(path,num){
lightbox_open = true;
lightbox_num = num;
$('body').css({
'overflow': 'hidden',
'height': '100%'
});
$('body').append('<div id="lightbox_overlay"style="position:fixed;height:101%;width:101%;left:0;top:0;z-index:1000;"></div>');
$('#lightbox_overlay').append('<div id="lightbox_background" style="height:100%;width:100%;background-color:black;z-index:0;opacity:0;"></div>');
$('#lightbox_overlay').append('<img id="lightbox_image_1" src="'+path+'" style="max-width:'+(page_width-(page_width/4))+'px;max-height:'+(page_height-(page_height/8))+'px;position:absolute;margin:auto;top:0;left:0;right:0;bottom:0;opacity:1;z-index:1;-webkit-user-select: none;-khtml-user-select: none;-moz-user-select: none;-o-user-select: none;user-select: none;"/>');
$('#lightbox_overlay').append('<img id="lightbox_image_2" src="'+path+'" style="max-width:'+(page_width-(page_width/4))+'px;max-height:'+(page_height-(page_height/8))+'px;position:absolute;margin:auto;top:0;left:0;right:0;bottom:0;opacity:0;z-index:1;-webkit-user-select: none;-khtml-user-select: none;-moz-user-select: none;-o-user-select: none;user-select: none;"/>');
$('#lightbox_overlay').append('<img src="http://static1.squarespace.com/static/56fe5ba420c64743836b25e3/t/57a1d6acb3db2b02a17b33d5/1470224044007/cross_grey.png" id="lightbox_close_button" style="width:16px;height:16px;position:absolute;top:20px;right:15px;z-index:2;color:white;opacity:1;cursor:pointer;"/>');
$('#lightbox_overlay').append('<img src="http://static1.squarespace.com/static/56fe5ba420c64743836b25e3/t/57a1d6bcb3db2b02a17b3432/1470224060627/prev_grey.png" id="lightbox_previous" style="width:14px;height:24px; position:absolute;top:50%;left:20px;transform:translate(0%,-50%);color:white;cursor:pointer;opacity:1;z-index:2;cursor:pointer;"/>');
$('#lightbox_overlay').append('<img src="http://static1.squarespace.com/static/56fe5ba420c64743836b25e3/t/57a1d6cab3db2b02a17b349d/1470224074465/next_grey.png" id="lightbox_next" style="width:14px;height:24px; position:absolute;top:50%;right:20px;transform:translate(0%,-50%);color:white;cursor:pointer;opacity:1;z-index:2;cursor:pointer;"/>');
$('#lightbox_close_button').click(function(){
close_lightbox();
});
lightbox_image_1 = $('#lightbox_image_1');
lightbox_image_2 = $('#lightbox_image_2');
$('#lightbox_overlay').bind('mousemove',function(e){
if(e.pageX < page_width/2 && !lightbox_prev){
$('#lightbox_previous').animate({opacity:1},100);
$('#lightbox_next').animate({opacity:0},100);
$(this).unbind('click');
$(this).click(function(){
previous_lightbox_image();
});
lightbox_prev = true;
lightbox_next = false;
}
else if(e.pageX > page_width/2 && !lightbox_next){
$('#lightbox_previous').animate({opacity:0},100);
$('#lightbox_next').animate({opacity:1},100);
$(this).unbind('click');
$(this).click(function(){
next_lightbox_image();
});
lightbox_prev = false;
lightbox_next = true;
}
});
$('#lightbox_overlay').bind('mouseleave',function(e){
$('#lightbox_previous').animate({opacity:0},300);
$('#lightbox_next').animate({opacity:0},100);
$(this).unbind('click');
lightbox_prev = false;
lightbox_next = false;
});
$('#lightbox_background').animate({opacity: 0.93}, 200);
$('#lightbox_previous').animate({opacity:0},1400);
$('#lightbox_next').animate({opacity:0},1400);
if(lightbox_theme == 'light'){
$('#lightbox_background').css('background-color','#f2f2f2');
}
$('.scrollable').bind('touchmove', function(e){
e.stopPropagation();
});
$('#lightbox_overlay').bind('touchmove', function(e){
e.preventDefault();
});
resize_lightbox(lightbox_image_1);
}
function close_lightbox(){
$('body').css({
'overflow': 'auto',
'height': 'auto'
});
$('#lightbox_overlay').animate({opacity: 0}, 200,function(){
$('#lightbox_overlay').remove();
lightbox_prev = false;
lightbox_next = false;
lightbox_open = false;
});
$('.scrollable').bind('touchmove', function(e){
return true;
});
$('#lightbox_overlay').bind('touchmove', function(e){
return true;
});
}
function next_lightbox_image(){
lightbox_num++;
if(lightbox_num >= photos.length){
lightbox_num = 0;
}
crossfade_images();
}
function previous_lightbox_image(){
lightbox_num--;
if(lightbox_num < 0){
lightbox_num = photos.length - 1;
}
crossfade_images();
}
function crossfade_images(){
resize_lightbox(lightbox_image_2);
lightbox_image_2.attr('src',photos[lightbox_num].path);
lightbox_image_2.animate({opacity: 1}, 200);
lightbox_image_1.animate({opacity: 0}, 200);
var temp = lightbox_image_1;
lightbox_image_1 = lightbox_image_2;
lightbox_image_2 = temp;
}
document.addEventListener('pageChange', function(){
if(recent_page == false){ //Stops the plugin thinking the page has changed twice in short succession
init();
console.log('change');
recent_page = true;
setTimeout(function(){
recent_page = false;
},200);
}
});
window.onload = watch;
function watch(){MutationObserver=window.MutationObserver||window.WebKitMutationObserver;var a=new MutationObserver(function(a){for(var b=0;b<a.length;b++){var c=a[b];if("attributes"===c.type){var d=new Event("pageChange");document.dispatchEvent(d)}}});a.observe(document.body,{attributes:!0,attributeFilter:["id"]})}
});
</script>