var book = $('.bk-book');
var bookPage = book.children('div.bk-page');
var viewBookLink = book.find('.bk-bookview');
var viewBackLink = book.find('.bk-bookback');
var changeColorLink = book.find('.change-color');
var colorContainers = book.find('.color-container');
var bookDefault = function(){
book.data({ opened : false, flip : false })
.removeClass('bk-viewback bk-viewinside')
.addClass('bk-bookdefault');
};
var bookBack = function(){
book.data({ opened : false, flip : true })
.removeClass('bk-viewinside bk-bookdefault')
.addClass('bk-viewback');
};
var bookInside = function(){
book.data({ opened : true, flip : false })
.removeClass('bk-viewback bk-bookdefault')
.addClass( 'bk-viewinside');
};
bookDefault();
viewBackLink.on('click', function(){
if(book.data('flip')){
bookDefault();
}else{
bookBack();
}
return false;
});
viewBookLink.on('click', function(){
bookInside();
return false;
});
//Detect click outside book
$('html').on( 'click', function(event) {
if ($(event.target).parents('.bk-book').length == 0){
bookDefault();
if (!colorContainers.hasClass('hidden'))
changeColorLink.click();
}
return false;
});
//Change color
var colorLabel = (function(){
var labels = ['Change Color', '❤ this color']
return function(){
labels.push(labels.shift());
return labels[0];
}
})();
changeColorLink.click(function(){
colorContainers.toggleClass('hidden');
$(this).text(colorLabel());
});
var css = $("").appendTo('head');
colorContainers.find('.color-square').click(function(){
var color = $(this).attr('class').match(/background-color-([a-f0-9]{6})/i)[1];
css.text('.highlight { color: #' + color + '; }');
});
//Bookblock clone and setup
var bookBlock = $('.bb-bookblock');
var backCover = bookBlock.parents('.bk-book').find('.bk-cover-back');
var backCoverBookBlock = bookBlock.clone();
backCoverBookBlock.appendTo(backCover);
var bookBlockFirst = function(){
bookBlock.bookblock('first');
backCoverBookBlock.bookblock('first');
}
var bookBlockLast = function(){
bookBlock.bookblock('last');
backCoverBookBlock.bookblock('last');
}
var bookBlockLastIndex = bookBlock.children().length-1;
var bookBlockNext = function(){
if (book.data('flip'))
return bookDefault();
if(!book.data('opened'))
return bookInside();
if (bookBlock.find('.bb-item:visible').index()===bookBlockLastIndex)
return bookBack() + bookBlockFirst();
bookBlock.bookblock('next');
backCoverBookBlock.bookblock('next');
}
var bookBlockPrev = function(){
if (book.data('flip'))
return bookBlockLast()+bookInside();
if(!book.data('opened'))
return bookBack();
if (bookBlock.find('.bb-item:visible').index()===0)
return bookDefault();
bookBlock.bookblock('prev');
backCoverBookBlock.bookblock('prev');
}
bookBlock.children().add(backCoverBookBlock.children()).on({
'swipeleft': function(event) {
bookBlockPrev();
return false;
},
'swiperight': function(event) {
bookBlockPrev();
return false;
},
'click': function(event){
if ($(event.target).parents('.bk-cover-back').length == 0)
bookBlockNext();
else
bookBlockPrev();
return false;
}
});
bookBlock.bookblock({
speed: 800,
shadow: false
});
backCoverBookBlock.bookblock({
speed: 800,
shadow: false
});
var throttleFunc = function(func, limit, limitQueue){
var lastTime = + new Date;
var queued = 0;
return function throttledFunc(){
var now = + new Date;
var args = Array.prototype.slice.call(arguments);
if (now - lastTime > limit){
func.apply(this, args);
lastTime = + new Date;
}else{
var boundFunc = throttledFunc.bind.apply(throttledFunc, [this].concat(args));
queued++;
if (queued