mirror of
https://github.com/dawidolko/Website-Templates.git
synced 2026-02-04 01:30:03 +00:00
Website templates
This commit is contained in:
66
photo-art/js/image_fade.js
Normal file
66
photo-art/js/image_fade.js
Normal file
@@ -0,0 +1,66 @@
|
||||
$(document).ready(function() {
|
||||
|
||||
// execute the slideShow, set 4 seconds (4000) for each image
|
||||
slideShow(4000);
|
||||
|
||||
});
|
||||
|
||||
function slideShow(speed) {
|
||||
|
||||
// append an 'li' item to the 'ul' list for displaying the caption
|
||||
$('ul.slideshow').append('<li id="slideshow-caption" class="caption"><div class="slideshow-caption-container"><p></p></div></li>');
|
||||
|
||||
// set the opacity of all images to 0
|
||||
$('ul.slideshow li').css({opacity: 0.0});
|
||||
|
||||
// get the first image and display it
|
||||
$('ul.slideshow li:first').css({opacity: 1.0}).addClass('show');
|
||||
|
||||
// get the caption of the first image from the 'rel' attribute and display it
|
||||
$('#slideshow-caption p').html($('ul.slideshow li.show').find('img').attr('alt'));
|
||||
|
||||
// display the caption
|
||||
$('#slideshow-caption').css({opacity: 0.6, bottom:0});
|
||||
|
||||
// call the gallery function to run the slideshow
|
||||
var timer = setInterval('gallery()',speed);
|
||||
|
||||
// pause the slideshow on mouse over
|
||||
$('ul.slideshow').hover(
|
||||
function () {
|
||||
clearInterval(timer);
|
||||
},
|
||||
function () {
|
||||
timer = setInterval('gallery()',speed);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
function gallery() {
|
||||
|
||||
//if no images have the show class, grab the first image
|
||||
var current = ($('ul.slideshow li.show')? $('ul.slideshow li.show') : $('#ul.slideshow li:first'));
|
||||
|
||||
// trying to avoid speed issue
|
||||
if(current.queue('fx').length == 0) {
|
||||
|
||||
// get the next image, if it reached the end of the slideshow, rotate it back to the first image
|
||||
var next = ((current.next().length) ? ((current.next().attr('id') == 'slideshow-caption')? $('ul.slideshow li:first') :current.next()) : $('ul.slideshow li:first'));
|
||||
|
||||
// get the next image caption
|
||||
var desc = next.find('img').attr('alt');
|
||||
|
||||
// set the fade in effect for the next image, show class has higher z-index
|
||||
next.css({opacity: 0.0}).addClass('show').animate({opacity: 1.0}, 1000);
|
||||
|
||||
// hide the caption first, and then set and display the caption
|
||||
$('#slideshow-caption').slideToggle(300, function () {
|
||||
$('#slideshow-caption p').html(desc);
|
||||
$('#slideshow-caption').slideToggle(500);
|
||||
});
|
||||
|
||||
// hide the current image
|
||||
current.animate({opacity: 0.0}, 1000).removeClass('show');
|
||||
|
||||
}
|
||||
}
|
||||
134
photo-art/js/jquery.easing-sooper.js
Normal file
134
photo-art/js/jquery.easing-sooper.js
Normal file
@@ -0,0 +1,134 @@
|
||||
/*
|
||||
* Extended and modified for use with SooperThemes.com Drupal Themes and SooperFish plugin by Jurriaan Roelofs for sooperthemes.com. Copyright still same as below.
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* Based on easing equations by Robert Penner. Adapted from jqueryt easing plugin by George McGinley Smith. See below for copyright notice of equations
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
*
|
||||
* TERMS OF USE - EASING EQUATIONS
|
||||
*
|
||||
* Open source under the BSD License.
|
||||
*
|
||||
* Copyright © 2001 Robert Penner
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* Neither the name of the author nor the names of contributors may be used to endorse
|
||||
* or promote products derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
// t: current time, b: begInnIng value, c: change In value, d: duration
|
||||
jQuery.easing['jswing'] = jQuery.easing['swing'];
|
||||
|
||||
jQuery.extend( jQuery.easing,
|
||||
{
|
||||
def: 'easeOutTurbo',
|
||||
swing: function (x, t, b, c, d) {
|
||||
//alert(jQuery.easing.default);
|
||||
return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
|
||||
},
|
||||
easeInTurbo: function (x, t, b, c, d) {
|
||||
return c*(t/=d)*t + b;
|
||||
},
|
||||
easeOutTurbo: function (x, t, b, c, d) {
|
||||
return -c *(t/=d)*(t-2) + b;
|
||||
},
|
||||
easeInTurbo2: function (x, t, b, c, d) {
|
||||
return c*(t/=d)*t*t + b;
|
||||
},
|
||||
easeOutTurbo2: function (x, t, b, c, d) {
|
||||
return c*((t=t/d-1)*t*t + 1) + b;
|
||||
},
|
||||
easeInTurbo3: function (x, t, b, c, d) {
|
||||
return c*(t/=d)*t*t*t + b;
|
||||
},
|
||||
easeOutTurbo3: function (x, t, b, c, d) {
|
||||
return -c * ((t=t/d-1)*t*t*t - 1) + b;
|
||||
},
|
||||
easeInSine: function (x, t, b, c, d) {
|
||||
return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
|
||||
},
|
||||
easeOutSine: function (x, t, b, c, d) {
|
||||
return c * Math.sin(t/d * (Math.PI/2)) + b;
|
||||
},
|
||||
easeInExpo: function (x, t, b, c, d) {
|
||||
return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
|
||||
},
|
||||
easeOutExpo: function (x, t, b, c, d) {
|
||||
return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
|
||||
},
|
||||
easeInCirc: function (x, t, b, c, d) {
|
||||
return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
|
||||
},
|
||||
easeOutCirc: function (x, t, b, c, d) {
|
||||
return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
|
||||
},
|
||||
easeInElastic: function (x, t, b, c, d) {
|
||||
var s=1.70158;var p=0;var a=c;
|
||||
if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
|
||||
if (a < Math.abs(c)) { a=c; var s=p/4; }
|
||||
else var s = p/(2*Math.PI) * Math.asin (c/a);
|
||||
return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
|
||||
},
|
||||
easeOutElastic: function (x, t, b, c, d) {
|
||||
var s=1.70158;var p=0;var a=c;
|
||||
if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
|
||||
if (a < Math.abs(c)) { a=c; var s=p/4; }
|
||||
else var s = p/(2*Math.PI) * Math.asin (c/a);
|
||||
return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
|
||||
},
|
||||
easeInOvershoot: function (x, t, b, c, d, s) {
|
||||
if (s == undefined) s = 1.70158;
|
||||
return c*(t/=d)*t*((s+1)*t - s) + b;
|
||||
},
|
||||
easeOutOvershoot: function (x, t, b, c, d, s) {
|
||||
if (s == undefined) s = 1.70158;
|
||||
return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
|
||||
},
|
||||
easeInOvershootTurbo: function (x, t, b, c, d, s) {
|
||||
if (s == undefined) s = 1.70158;
|
||||
return c*(t/=d)*t*t*((s+1)*t - s) + b;
|
||||
},
|
||||
easeOutOvershootTurbo: function (x, t, b, c, d, s) {
|
||||
if (s == undefined) s = 1.70158;
|
||||
return c*((t=t/d-1)*t*t*((s+1)*t + s) + 1) + b;
|
||||
},
|
||||
easeInBounce: function (x, t, b, c, d) {
|
||||
return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;
|
||||
},
|
||||
easeOutBounce: function (x, t, b, c, d) {
|
||||
if ((t/=d) < (1/2.75)) {
|
||||
return c*(7.5625*t*t) + b;
|
||||
} else if (t < (2/2.75)) {
|
||||
return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
|
||||
} else if (t < (2.5/2.75)) {
|
||||
return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
|
||||
} else {
|
||||
return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
|
||||
}
|
||||
}
|
||||
});
|
||||
979
photo-art/js/jquery.galleriffic.js
Normal file
979
photo-art/js/jquery.galleriffic.js
Normal file
@@ -0,0 +1,979 @@
|
||||
/**
|
||||
* jQuery Galleriffic plugin
|
||||
*
|
||||
* Copyright (c) 2008 Trent Foley (http://trentacular.com)
|
||||
* Licensed under the MIT License:
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
*
|
||||
* Much thanks to primary contributer Ponticlaro (http://www.ponticlaro.com)
|
||||
*/
|
||||
;(function($) {
|
||||
// Globally keep track of all images by their unique hash. Each item is an image data object.
|
||||
var allImages = {};
|
||||
var imageCounter = 0;
|
||||
|
||||
// Galleriffic static class
|
||||
$.galleriffic = {
|
||||
version: '2.0.1',
|
||||
|
||||
// Strips invalid characters and any leading # characters
|
||||
normalizeHash: function(hash) {
|
||||
return hash.replace(/^.*#/, '').replace(/\?.*$/, '');
|
||||
},
|
||||
|
||||
getImage: function(hash) {
|
||||
if (!hash)
|
||||
return undefined;
|
||||
|
||||
hash = $.galleriffic.normalizeHash(hash);
|
||||
return allImages[hash];
|
||||
},
|
||||
|
||||
// Global function that looks up an image by its hash and displays the image.
|
||||
// Returns false when an image is not found for the specified hash.
|
||||
// @param {String} hash This is the unique hash value assigned to an image.
|
||||
gotoImage: function(hash) {
|
||||
var imageData = $.galleriffic.getImage(hash);
|
||||
if (!imageData)
|
||||
return false;
|
||||
|
||||
var gallery = imageData.gallery;
|
||||
gallery.gotoImage(imageData);
|
||||
|
||||
return true;
|
||||
},
|
||||
|
||||
// Removes an image from its respective gallery by its hash.
|
||||
// Returns false when an image is not found for the specified hash or the
|
||||
// specified owner gallery does match the located images gallery.
|
||||
// @param {String} hash This is the unique hash value assigned to an image.
|
||||
// @param {Object} ownerGallery (Optional) When supplied, the located images
|
||||
// gallery is verified to be the same as the specified owning gallery before
|
||||
// performing the remove operation.
|
||||
removeImageByHash: function(hash, ownerGallery) {
|
||||
var imageData = $.galleriffic.getImage(hash);
|
||||
if (!imageData)
|
||||
return false;
|
||||
|
||||
var gallery = imageData.gallery;
|
||||
if (ownerGallery && ownerGallery != gallery)
|
||||
return false;
|
||||
|
||||
return gallery.removeImageByIndex(imageData.index);
|
||||
}
|
||||
};
|
||||
|
||||
var defaults = {
|
||||
delay: 3000,
|
||||
numThumbs: 20,
|
||||
preloadAhead: 40, // Set to -1 to preload all images
|
||||
enableTopPager: false,
|
||||
enableBottomPager: true,
|
||||
maxPagesToShow: 7,
|
||||
imageContainerSel: '',
|
||||
captionContainerSel: '',
|
||||
controlsContainerSel: '',
|
||||
loadingContainerSel: '',
|
||||
renderSSControls: true,
|
||||
renderNavControls: true,
|
||||
playLinkText: 'Play',
|
||||
pauseLinkText: 'Pause',
|
||||
prevLinkText: 'Previous',
|
||||
nextLinkText: 'Next',
|
||||
nextPageLinkText: 'Next ›',
|
||||
prevPageLinkText: '‹ Prev',
|
||||
enableHistory: false,
|
||||
enableKeyboardNavigation: true,
|
||||
autoStart: false,
|
||||
syncTransitions: false,
|
||||
defaultTransitionDuration: 1000,
|
||||
onSlideChange: undefined, // accepts a delegate like such: function(prevIndex, nextIndex) { ... }
|
||||
onTransitionOut: undefined, // accepts a delegate like such: function(slide, caption, isSync, callback) { ... }
|
||||
onTransitionIn: undefined, // accepts a delegate like such: function(slide, caption, isSync) { ... }
|
||||
onPageTransitionOut: undefined, // accepts a delegate like such: function(callback) { ... }
|
||||
onPageTransitionIn: undefined, // accepts a delegate like such: function() { ... }
|
||||
onImageAdded: undefined, // accepts a delegate like such: function(imageData, $li) { ... }
|
||||
onImageRemoved: undefined // accepts a delegate like such: function(imageData, $li) { ... }
|
||||
};
|
||||
|
||||
// Primary Galleriffic initialization function that should be called on the thumbnail container.
|
||||
$.fn.galleriffic = function(settings) {
|
||||
// Extend Gallery Object
|
||||
$.extend(this, {
|
||||
// Returns the version of the script
|
||||
version: $.galleriffic.version,
|
||||
|
||||
// Current state of the slideshow
|
||||
isSlideshowRunning: false,
|
||||
slideshowTimeout: undefined,
|
||||
|
||||
// This function is attached to the click event of generated hyperlinks within the gallery
|
||||
clickHandler: function(e, link) {
|
||||
this.pause();
|
||||
|
||||
if (!this.enableHistory) {
|
||||
// The href attribute holds the unique hash for an image
|
||||
var hash = $.galleriffic.normalizeHash($(link).attr('href'));
|
||||
$.galleriffic.gotoImage(hash);
|
||||
e.preventDefault();
|
||||
}
|
||||
},
|
||||
|
||||
// Appends an image to the end of the set of images. Argument listItem can be either a jQuery DOM element or arbitrary html.
|
||||
// @param listItem Either a jQuery object or a string of html of the list item that is to be added to the gallery.
|
||||
appendImage: function(listItem) {
|
||||
this.addImage(listItem, false, false);
|
||||
return this;
|
||||
},
|
||||
|
||||
// Inserts an image into the set of images. Argument listItem can be either a jQuery DOM element or arbitrary html.
|
||||
// @param listItem Either a jQuery object or a string of html of the list item that is to be added to the gallery.
|
||||
// @param {Integer} position The index within the gallery where the item shouold be added.
|
||||
insertImage: function(listItem, position) {
|
||||
this.addImage(listItem, false, true, position);
|
||||
return this;
|
||||
},
|
||||
|
||||
// Adds an image to the gallery and optionally inserts/appends it to the DOM (thumbExists)
|
||||
// @param listItem Either a jQuery object or a string of html of the list item that is to be added to the gallery.
|
||||
// @param {Boolean} thumbExists Specifies whether the thumbnail already exists in the DOM or if it needs to be added.
|
||||
// @param {Boolean} insert Specifies whether the the image is appended to the end or inserted into the gallery.
|
||||
// @param {Integer} position The index within the gallery where the item shouold be added.
|
||||
addImage: function(listItem, thumbExists, insert, position) {
|
||||
var $li = ( typeof listItem === "string" ) ? $(listItem) : listItem;
|
||||
var $aThumb = $li.find('a.thumb');
|
||||
var slideUrl = $aThumb.attr('href');
|
||||
var title = $aThumb.attr('title');
|
||||
var $caption = $li.find('.caption').remove();
|
||||
var hash = $aThumb.attr('name');
|
||||
|
||||
// Increment the image counter
|
||||
imageCounter++;
|
||||
|
||||
// Autogenerate a hash value if none is present or if it is a duplicate
|
||||
if (!hash || allImages[''+hash]) {
|
||||
hash = imageCounter;
|
||||
}
|
||||
|
||||
// Set position to end when not specified
|
||||
if (!insert)
|
||||
position = this.data.length;
|
||||
|
||||
var imageData = {
|
||||
title:title,
|
||||
slideUrl:slideUrl,
|
||||
caption:$caption,
|
||||
hash:hash,
|
||||
gallery:this,
|
||||
index:position
|
||||
};
|
||||
|
||||
// Add the imageData to this gallery's array of images
|
||||
if (insert) {
|
||||
this.data.splice(position, 0, imageData);
|
||||
|
||||
// Reset index value on all imageData objects
|
||||
this.updateIndices(position);
|
||||
}
|
||||
else {
|
||||
this.data.push(imageData);
|
||||
}
|
||||
|
||||
var gallery = this;
|
||||
|
||||
// Add the element to the DOM
|
||||
if (!thumbExists) {
|
||||
// Update thumbs passing in addition post transition out handler
|
||||
this.updateThumbs(function() {
|
||||
var $thumbsUl = gallery.find('ul.thumbs');
|
||||
if (insert)
|
||||
$thumbsUl.children(':eq('+position+')').before($li);
|
||||
else
|
||||
$thumbsUl.append($li);
|
||||
|
||||
if (gallery.onImageAdded)
|
||||
gallery.onImageAdded(imageData, $li);
|
||||
});
|
||||
}
|
||||
|
||||
// Register the image globally
|
||||
allImages[''+hash] = imageData;
|
||||
|
||||
// Setup attributes and click handler
|
||||
$aThumb.attr('rel', 'history')
|
||||
.attr('href', '#'+hash)
|
||||
.removeAttr('name')
|
||||
.click(function(e) {
|
||||
gallery.clickHandler(e, this);
|
||||
});
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
// Removes an image from the gallery based on its index.
|
||||
// Returns false when the index is out of range.
|
||||
removeImageByIndex: function(index) {
|
||||
if (index < 0 || index >= this.data.length)
|
||||
return false;
|
||||
|
||||
var imageData = this.data[index];
|
||||
if (!imageData)
|
||||
return false;
|
||||
|
||||
this.removeImage(imageData);
|
||||
|
||||
return true;
|
||||
},
|
||||
|
||||
// Convenience method that simply calls the global removeImageByHash method.
|
||||
removeImageByHash: function(hash) {
|
||||
return $.galleriffic.removeImageByHash(hash, this);
|
||||
},
|
||||
|
||||
// Removes an image from the gallery.
|
||||
removeImage: function(imageData) {
|
||||
var index = imageData.index;
|
||||
|
||||
// Remove the image from the gallery data array
|
||||
this.data.splice(index, 1);
|
||||
|
||||
// Remove the global registration
|
||||
delete allImages[''+imageData.hash];
|
||||
|
||||
// Remove the image's list item from the DOM
|
||||
this.updateThumbs(function() {
|
||||
var $li = gallery.find('ul.thumbs')
|
||||
.children(':eq('+index+')')
|
||||
.remove();
|
||||
|
||||
if (gallery.onImageRemoved)
|
||||
gallery.onImageRemoved(imageData, $li);
|
||||
});
|
||||
|
||||
// Update each image objects index value
|
||||
this.updateIndices(index);
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
// Updates the index values of the each of the images in the gallery after the specified index
|
||||
updateIndices: function(startIndex) {
|
||||
for (i = startIndex; i < this.data.length; i++) {
|
||||
this.data[i].index = i;
|
||||
}
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
// Scraped the thumbnail container for thumbs and adds each to the gallery
|
||||
initializeThumbs: function() {
|
||||
this.data = [];
|
||||
var gallery = this;
|
||||
|
||||
this.find('ul.thumbs > li').each(function(i) {
|
||||
gallery.addImage($(this), true, false);
|
||||
});
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
isPreloadComplete: false,
|
||||
|
||||
// Initalizes the image preloader
|
||||
preloadInit: function() {
|
||||
if (this.preloadAhead == 0) return this;
|
||||
|
||||
this.preloadStartIndex = this.currentImage.index;
|
||||
var nextIndex = this.getNextIndex(this.preloadStartIndex);
|
||||
return this.preloadRecursive(this.preloadStartIndex, nextIndex);
|
||||
},
|
||||
|
||||
// Changes the location in the gallery the preloader should work
|
||||
// @param {Integer} index The index of the image where the preloader should restart at.
|
||||
preloadRelocate: function(index) {
|
||||
// By changing this startIndex, the current preload script will restart
|
||||
this.preloadStartIndex = index;
|
||||
return this;
|
||||
},
|
||||
|
||||
// Recursive function that performs the image preloading
|
||||
// @param {Integer} startIndex The index of the first image the current preloader started on.
|
||||
// @param {Integer} currentIndex The index of the current image to preload.
|
||||
preloadRecursive: function(startIndex, currentIndex) {
|
||||
// Check if startIndex has been relocated
|
||||
if (startIndex != this.preloadStartIndex) {
|
||||
var nextIndex = this.getNextIndex(this.preloadStartIndex);
|
||||
return this.preloadRecursive(this.preloadStartIndex, nextIndex);
|
||||
}
|
||||
|
||||
var gallery = this;
|
||||
|
||||
// Now check for preloadAhead count
|
||||
var preloadCount = currentIndex - startIndex;
|
||||
if (preloadCount < 0)
|
||||
preloadCount = this.data.length-1-startIndex+currentIndex;
|
||||
if (this.preloadAhead >= 0 && preloadCount > this.preloadAhead) {
|
||||
// Do this in order to keep checking for relocated start index
|
||||
setTimeout(function() { gallery.preloadRecursive(startIndex, currentIndex); }, 500);
|
||||
return this;
|
||||
}
|
||||
|
||||
var imageData = this.data[currentIndex];
|
||||
if (!imageData)
|
||||
return this;
|
||||
|
||||
// If already loaded, continue
|
||||
if (imageData.image)
|
||||
return this.preloadNext(startIndex, currentIndex);
|
||||
|
||||
// Preload the image
|
||||
var image = new Image();
|
||||
|
||||
image.onload = function() {
|
||||
imageData.image = this;
|
||||
gallery.preloadNext(startIndex, currentIndex);
|
||||
};
|
||||
|
||||
image.alt = imageData.title;
|
||||
image.src = imageData.slideUrl;
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
// Called by preloadRecursive in order to preload the next image after the previous has loaded.
|
||||
// @param {Integer} startIndex The index of the first image the current preloader started on.
|
||||
// @param {Integer} currentIndex The index of the current image to preload.
|
||||
preloadNext: function(startIndex, currentIndex) {
|
||||
var nextIndex = this.getNextIndex(currentIndex);
|
||||
if (nextIndex == startIndex) {
|
||||
this.isPreloadComplete = true;
|
||||
} else {
|
||||
// Use setTimeout to free up thread
|
||||
var gallery = this;
|
||||
setTimeout(function() { gallery.preloadRecursive(startIndex, nextIndex); }, 100);
|
||||
}
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
// Safe way to get the next image index relative to the current image.
|
||||
// If the current image is the last, returns 0
|
||||
getNextIndex: function(index) {
|
||||
var nextIndex = index+1;
|
||||
if (nextIndex >= this.data.length)
|
||||
nextIndex = 0;
|
||||
return nextIndex;
|
||||
},
|
||||
|
||||
// Safe way to get the previous image index relative to the current image.
|
||||
// If the current image is the first, return the index of the last image in the gallery.
|
||||
getPrevIndex: function(index) {
|
||||
var prevIndex = index-1;
|
||||
if (prevIndex < 0)
|
||||
prevIndex = this.data.length-1;
|
||||
return prevIndex;
|
||||
},
|
||||
|
||||
// Pauses the slideshow
|
||||
pause: function() {
|
||||
this.isSlideshowRunning = false;
|
||||
if (this.slideshowTimeout) {
|
||||
clearTimeout(this.slideshowTimeout);
|
||||
this.slideshowTimeout = undefined;
|
||||
}
|
||||
|
||||
if (this.$controlsContainer) {
|
||||
this.$controlsContainer
|
||||
.find('div.ss-controls a').removeClass().addClass('play')
|
||||
.attr('title', this.playLinkText)
|
||||
.attr('href', '#play')
|
||||
.html(this.playLinkText);
|
||||
}
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
// Plays the slideshow
|
||||
play: function() {
|
||||
this.isSlideshowRunning = true;
|
||||
|
||||
if (this.$controlsContainer) {
|
||||
this.$controlsContainer
|
||||
.find('div.ss-controls a').removeClass().addClass('pause')
|
||||
.attr('title', this.pauseLinkText)
|
||||
.attr('href', '#pause')
|
||||
.html(this.pauseLinkText);
|
||||
}
|
||||
|
||||
if (!this.slideshowTimeout) {
|
||||
var gallery = this;
|
||||
this.slideshowTimeout = setTimeout(function() { gallery.ssAdvance(); }, this.delay);
|
||||
}
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
// Toggles the state of the slideshow (playing/paused)
|
||||
toggleSlideshow: function() {
|
||||
if (this.isSlideshowRunning)
|
||||
this.pause();
|
||||
else
|
||||
this.play();
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
// Advances the slideshow to the next image and delegates navigation to the
|
||||
// history plugin when history is enabled
|
||||
// enableHistory is true
|
||||
ssAdvance: function() {
|
||||
if (this.isSlideshowRunning)
|
||||
this.next(true);
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
// Advances the gallery to the next image.
|
||||
// @param {Boolean} dontPause Specifies whether to pause the slideshow.
|
||||
// @param {Boolean} bypassHistory Specifies whether to delegate navigation to the history plugin when history is enabled.
|
||||
next: function(dontPause, bypassHistory) {
|
||||
this.gotoIndex(this.getNextIndex(this.currentImage.index), dontPause, bypassHistory);
|
||||
return this;
|
||||
},
|
||||
|
||||
// Navigates to the previous image in the gallery.
|
||||
// @param {Boolean} dontPause Specifies whether to pause the slideshow.
|
||||
// @param {Boolean} bypassHistory Specifies whether to delegate navigation to the history plugin when history is enabled.
|
||||
previous: function(dontPause, bypassHistory) {
|
||||
this.gotoIndex(this.getPrevIndex(this.currentImage.index), dontPause, bypassHistory);
|
||||
return this;
|
||||
},
|
||||
|
||||
// Navigates to the next page in the gallery.
|
||||
// @param {Boolean} dontPause Specifies whether to pause the slideshow.
|
||||
// @param {Boolean} bypassHistory Specifies whether to delegate navigation to the history plugin when history is enabled.
|
||||
nextPage: function(dontPause, bypassHistory) {
|
||||
var page = this.getCurrentPage();
|
||||
var lastPage = this.getNumPages() - 1;
|
||||
if (page < lastPage) {
|
||||
var startIndex = page * this.numThumbs;
|
||||
var nextPage = startIndex + this.numThumbs;
|
||||
this.gotoIndex(nextPage, dontPause, bypassHistory);
|
||||
}
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
// Navigates to the previous page in the gallery.
|
||||
// @param {Boolean} dontPause Specifies whether to pause the slideshow.
|
||||
// @param {Boolean} bypassHistory Specifies whether to delegate navigation to the history plugin when history is enabled.
|
||||
previousPage: function(dontPause, bypassHistory) {
|
||||
var page = this.getCurrentPage();
|
||||
if (page > 0) {
|
||||
var startIndex = page * this.numThumbs;
|
||||
var prevPage = startIndex - this.numThumbs;
|
||||
this.gotoIndex(prevPage, dontPause, bypassHistory);
|
||||
}
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
// Navigates to the image at the specified index in the gallery
|
||||
// @param {Integer} index The index of the image in the gallery to display.
|
||||
// @param {Boolean} dontPause Specifies whether to pause the slideshow.
|
||||
// @param {Boolean} bypassHistory Specifies whether to delegate navigation to the history plugin when history is enabled.
|
||||
gotoIndex: function(index, dontPause, bypassHistory) {
|
||||
if (!dontPause)
|
||||
this.pause();
|
||||
|
||||
if (index < 0) index = 0;
|
||||
else if (index >= this.data.length) index = this.data.length-1;
|
||||
|
||||
var imageData = this.data[index];
|
||||
|
||||
if (!bypassHistory && this.enableHistory)
|
||||
$.historyLoad(String(imageData.hash)); // At the moment, historyLoad only accepts string arguments
|
||||
else
|
||||
this.gotoImage(imageData);
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
// This function is garaunteed to be called anytime a gallery slide changes.
|
||||
// @param {Object} imageData An object holding the image metadata of the image to navigate to.
|
||||
gotoImage: function(imageData) {
|
||||
var index = imageData.index;
|
||||
|
||||
if (this.onSlideChange)
|
||||
this.onSlideChange(this.currentImage.index, index);
|
||||
|
||||
this.currentImage = imageData;
|
||||
this.preloadRelocate(index);
|
||||
|
||||
this.refresh();
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
// Returns the default transition duration value. The value is halved when not
|
||||
// performing a synchronized transition.
|
||||
// @param {Boolean} isSync Specifies whether the transitions are synchronized.
|
||||
getDefaultTransitionDuration: function(isSync) {
|
||||
if (isSync)
|
||||
return this.defaultTransitionDuration;
|
||||
return this.defaultTransitionDuration / 2;
|
||||
},
|
||||
|
||||
// Rebuilds the slideshow image and controls and performs transitions
|
||||
refresh: function() {
|
||||
var imageData = this.currentImage;
|
||||
if (!imageData)
|
||||
return this;
|
||||
|
||||
var index = imageData.index;
|
||||
|
||||
// Update Controls
|
||||
if (this.$controlsContainer) {
|
||||
this.$controlsContainer
|
||||
.find('div.nav-controls a.prev').attr('href', '#'+this.data[this.getPrevIndex(index)].hash).end()
|
||||
.find('div.nav-controls a.next').attr('href', '#'+this.data[this.getNextIndex(index)].hash);
|
||||
}
|
||||
|
||||
var previousSlide = this.$imageContainer.find('span.current').addClass('previous').removeClass('current');
|
||||
var previousCaption = 0;
|
||||
|
||||
if (this.$captionContainer) {
|
||||
previousCaption = this.$captionContainer.find('span.current').addClass('previous').removeClass('current');
|
||||
}
|
||||
|
||||
// Perform transitions simultaneously if syncTransitions is true and the next image is already preloaded
|
||||
var isSync = this.syncTransitions && imageData.image;
|
||||
|
||||
// Flag we are transitioning
|
||||
var isTransitioning = true;
|
||||
var gallery = this;
|
||||
|
||||
var transitionOutCallback = function() {
|
||||
// Flag that the transition has completed
|
||||
isTransitioning = false;
|
||||
|
||||
// Remove the old slide
|
||||
previousSlide.remove();
|
||||
|
||||
// Remove old caption
|
||||
if (previousCaption)
|
||||
previousCaption.remove();
|
||||
|
||||
if (!isSync) {
|
||||
if (imageData.image && imageData.hash == gallery.data[gallery.currentImage.index].hash) {
|
||||
gallery.buildImage(imageData, isSync);
|
||||
} else {
|
||||
// Show loading container
|
||||
if (gallery.$loadingContainer) {
|
||||
gallery.$loadingContainer.show();
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
if (previousSlide.length == 0) {
|
||||
// For the first slide, the previous slide will be empty, so we will call the callback immediately
|
||||
transitionOutCallback();
|
||||
} else {
|
||||
if (this.onTransitionOut) {
|
||||
this.onTransitionOut(previousSlide, previousCaption, isSync, transitionOutCallback);
|
||||
} else {
|
||||
previousSlide.fadeTo(this.getDefaultTransitionDuration(isSync), 0.0, transitionOutCallback);
|
||||
if (previousCaption)
|
||||
previousCaption.fadeTo(this.getDefaultTransitionDuration(isSync), 0.0);
|
||||
}
|
||||
}
|
||||
|
||||
// Go ahead and begin transitioning in of next image
|
||||
if (isSync)
|
||||
this.buildImage(imageData, isSync);
|
||||
|
||||
if (!imageData.image) {
|
||||
var image = new Image();
|
||||
|
||||
// Wire up mainImage onload event
|
||||
image.onload = function() {
|
||||
imageData.image = this;
|
||||
|
||||
// Only build image if the out transition has completed and we are still on the same image hash
|
||||
if (!isTransitioning && imageData.hash == gallery.data[gallery.currentImage.index].hash) {
|
||||
gallery.buildImage(imageData, isSync);
|
||||
}
|
||||
};
|
||||
|
||||
// set alt and src
|
||||
image.alt = imageData.title;
|
||||
image.src = imageData.slideUrl;
|
||||
}
|
||||
|
||||
// This causes the preloader (if still running) to relocate out from the currentIndex
|
||||
this.relocatePreload = true;
|
||||
|
||||
return this.syncThumbs();
|
||||
},
|
||||
|
||||
// Called by the refresh method after the previous image has been transitioned out or at the same time
|
||||
// as the out transition when performing a synchronous transition.
|
||||
// @param {Object} imageData An object holding the image metadata of the image to build.
|
||||
// @param {Boolean} isSync Specifies whether the transitions are synchronized.
|
||||
buildImage: function(imageData, isSync) {
|
||||
var gallery = this;
|
||||
var nextIndex = this.getNextIndex(imageData.index);
|
||||
|
||||
// Construct new hidden span for the image
|
||||
var newSlide = this.$imageContainer
|
||||
.append('<span class="image-wrapper current"><a class="advance-link" rel="history" href="#'+this.data[nextIndex].hash+'" title="'+imageData.title+'"> </a></span>')
|
||||
.find('span.current').css('opacity', '0');
|
||||
|
||||
newSlide.find('a')
|
||||
.append(imageData.image)
|
||||
.click(function(e) {
|
||||
gallery.clickHandler(e, this);
|
||||
});
|
||||
|
||||
var newCaption = 0;
|
||||
if (this.$captionContainer) {
|
||||
// Construct new hidden caption for the image
|
||||
newCaption = this.$captionContainer
|
||||
.append('<span class="image-caption current"></span>')
|
||||
.find('span.current').css('opacity', '0')
|
||||
.append(imageData.caption);
|
||||
}
|
||||
|
||||
// Hide the loading conatiner
|
||||
if (this.$loadingContainer) {
|
||||
this.$loadingContainer.hide();
|
||||
}
|
||||
|
||||
// Transition in the new image
|
||||
if (this.onTransitionIn) {
|
||||
this.onTransitionIn(newSlide, newCaption, isSync);
|
||||
} else {
|
||||
newSlide.fadeTo(this.getDefaultTransitionDuration(isSync), 1.0);
|
||||
if (newCaption)
|
||||
newCaption.fadeTo(this.getDefaultTransitionDuration(isSync), 1.0);
|
||||
}
|
||||
|
||||
if (this.isSlideshowRunning) {
|
||||
if (this.slideshowTimeout)
|
||||
clearTimeout(this.slideshowTimeout);
|
||||
|
||||
this.slideshowTimeout = setTimeout(function() { gallery.ssAdvance(); }, this.delay);
|
||||
}
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
// Returns the current page index that should be shown for the currentImage
|
||||
getCurrentPage: function() {
|
||||
return Math.floor(this.currentImage.index / this.numThumbs);
|
||||
},
|
||||
|
||||
// Applies the selected class to the current image's corresponding thumbnail.
|
||||
// Also checks if the current page has changed and updates the displayed page of thumbnails if necessary.
|
||||
syncThumbs: function() {
|
||||
var page = this.getCurrentPage();
|
||||
if (page != this.displayedPage)
|
||||
this.updateThumbs();
|
||||
|
||||
// Remove existing selected class and add selected class to new thumb
|
||||
var $thumbs = this.find('ul.thumbs').children();
|
||||
$thumbs.filter('.selected').removeClass('selected');
|
||||
$thumbs.eq(this.currentImage.index).addClass('selected');
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
// Performs transitions on the thumbnails container and updates the set of
|
||||
// thumbnails that are to be displayed and the navigation controls.
|
||||
// @param {Delegate} postTransitionOutHandler An optional delegate that is called after
|
||||
// the thumbnails container has transitioned out and before the thumbnails are rebuilt.
|
||||
updateThumbs: function(postTransitionOutHandler) {
|
||||
var gallery = this;
|
||||
var transitionOutCallback = function() {
|
||||
// Call the Post-transition Out Handler
|
||||
if (postTransitionOutHandler)
|
||||
postTransitionOutHandler();
|
||||
|
||||
gallery.rebuildThumbs();
|
||||
|
||||
// Transition In the thumbsContainer
|
||||
if (gallery.onPageTransitionIn)
|
||||
gallery.onPageTransitionIn();
|
||||
else
|
||||
gallery.show();
|
||||
};
|
||||
|
||||
// Transition Out the thumbsContainer
|
||||
if (this.onPageTransitionOut) {
|
||||
this.onPageTransitionOut(transitionOutCallback);
|
||||
} else {
|
||||
this.hide();
|
||||
transitionOutCallback();
|
||||
}
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
// Updates the set of thumbnails that are to be displayed and the navigation controls.
|
||||
rebuildThumbs: function() {
|
||||
var needsPagination = this.data.length > this.numThumbs;
|
||||
|
||||
// Rebuild top pager
|
||||
if (this.enableTopPager) {
|
||||
var $topPager = this.find('div.top');
|
||||
if ($topPager.length == 0)
|
||||
$topPager = this.prepend('<div class="top pagination"></div>').find('div.top');
|
||||
else
|
||||
$topPager.empty();
|
||||
|
||||
if (needsPagination)
|
||||
this.buildPager($topPager);
|
||||
}
|
||||
|
||||
// Rebuild bottom pager
|
||||
if (this.enableBottomPager) {
|
||||
var $bottomPager = this.find('div.bottom');
|
||||
if ($bottomPager.length == 0)
|
||||
$bottomPager = this.append('<div class="bottom pagination"></div>').find('div.bottom');
|
||||
else
|
||||
$bottomPager.empty();
|
||||
|
||||
if (needsPagination)
|
||||
this.buildPager($bottomPager);
|
||||
}
|
||||
|
||||
var page = this.getCurrentPage();
|
||||
var startIndex = page*this.numThumbs;
|
||||
var stopIndex = startIndex+this.numThumbs-1;
|
||||
if (stopIndex >= this.data.length)
|
||||
stopIndex = this.data.length-1;
|
||||
|
||||
// Show/Hide thumbs
|
||||
var $thumbsUl = this.find('ul.thumbs');
|
||||
$thumbsUl.find('li').each(function(i) {
|
||||
var $li = $(this);
|
||||
if (i >= startIndex && i <= stopIndex) {
|
||||
$li.show();
|
||||
} else {
|
||||
$li.hide();
|
||||
}
|
||||
});
|
||||
|
||||
this.displayedPage = page;
|
||||
|
||||
// Remove the noscript class from the thumbs container ul
|
||||
$thumbsUl.removeClass('noscript');
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
// Returns the total number of pages required to display all the thumbnails.
|
||||
getNumPages: function() {
|
||||
return Math.ceil(this.data.length/this.numThumbs);
|
||||
},
|
||||
|
||||
// Rebuilds the pager control in the specified matched element.
|
||||
// @param {jQuery} pager A jQuery element set matching the particular pager to be rebuilt.
|
||||
buildPager: function(pager) {
|
||||
var gallery = this;
|
||||
var numPages = this.getNumPages();
|
||||
var page = this.getCurrentPage();
|
||||
var startIndex = page * this.numThumbs;
|
||||
var pagesRemaining = this.maxPagesToShow - 1;
|
||||
|
||||
var pageNum = page - Math.floor((this.maxPagesToShow - 1) / 2) + 1;
|
||||
if (pageNum > 0) {
|
||||
var remainingPageCount = numPages - pageNum;
|
||||
if (remainingPageCount < pagesRemaining) {
|
||||
pageNum = pageNum - (pagesRemaining - remainingPageCount);
|
||||
}
|
||||
}
|
||||
|
||||
if (pageNum < 0) {
|
||||
pageNum = 0;
|
||||
}
|
||||
|
||||
// Prev Page Link
|
||||
if (page > 0) {
|
||||
var prevPage = startIndex - this.numThumbs;
|
||||
pager.append('<a rel="history" href="#'+this.data[prevPage].hash+'" title="'+this.prevPageLinkText+'">'+this.prevPageLinkText+'</a>');
|
||||
}
|
||||
|
||||
// Create First Page link if needed
|
||||
if (pageNum > 0) {
|
||||
this.buildPageLink(pager, 0, numPages);
|
||||
if (pageNum > 1)
|
||||
pager.append('<span class="ellipsis">…</span>');
|
||||
|
||||
pagesRemaining--;
|
||||
}
|
||||
|
||||
// Page Index Links
|
||||
while (pagesRemaining > 0) {
|
||||
this.buildPageLink(pager, pageNum, numPages);
|
||||
pagesRemaining--;
|
||||
pageNum++;
|
||||
}
|
||||
|
||||
// Create Last Page link if needed
|
||||
if (pageNum < numPages) {
|
||||
var lastPageNum = numPages - 1;
|
||||
if (pageNum < lastPageNum)
|
||||
pager.append('<span class="ellipsis">…</span>');
|
||||
|
||||
this.buildPageLink(pager, lastPageNum, numPages);
|
||||
}
|
||||
|
||||
// Next Page Link
|
||||
var nextPage = startIndex + this.numThumbs;
|
||||
if (nextPage < this.data.length) {
|
||||
pager.append('<a rel="history" href="#'+this.data[nextPage].hash+'" title="'+this.nextPageLinkText+'">'+this.nextPageLinkText+'</a>');
|
||||
}
|
||||
|
||||
pager.find('a').click(function(e) {
|
||||
gallery.clickHandler(e, this);
|
||||
});
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
// Builds a single page link within a pager. This function is called by buildPager
|
||||
// @param {jQuery} pager A jQuery element set matching the particular pager to be rebuilt.
|
||||
// @param {Integer} pageNum The page number of the page link to build.
|
||||
// @param {Integer} numPages The total number of pages required to display all thumbnails.
|
||||
buildPageLink: function(pager, pageNum, numPages) {
|
||||
var pageLabel = pageNum + 1;
|
||||
var currentPage = this.getCurrentPage();
|
||||
if (pageNum == currentPage)
|
||||
pager.append('<span class="current">'+pageLabel+'</span>');
|
||||
else if (pageNum < numPages) {
|
||||
var imageIndex = pageNum*this.numThumbs;
|
||||
pager.append('<a rel="history" href="#'+this.data[imageIndex].hash+'" title="'+pageLabel+'">'+pageLabel+'</a>');
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
});
|
||||
|
||||
// Now initialize the gallery
|
||||
$.extend(this, defaults, settings);
|
||||
|
||||
// Verify the history plugin is available
|
||||
if (this.enableHistory && !$.historyInit)
|
||||
this.enableHistory = false;
|
||||
|
||||
// Select containers
|
||||
if (this.imageContainerSel) this.$imageContainer = $(this.imageContainerSel);
|
||||
if (this.captionContainerSel) this.$captionContainer = $(this.captionContainerSel);
|
||||
if (this.loadingContainerSel) this.$loadingContainer = $(this.loadingContainerSel);
|
||||
|
||||
// Initialize the thumbails
|
||||
this.initializeThumbs();
|
||||
|
||||
if (this.maxPagesToShow < 3)
|
||||
this.maxPagesToShow = 3;
|
||||
|
||||
this.displayedPage = -1;
|
||||
this.currentImage = this.data[0];
|
||||
var gallery = this;
|
||||
|
||||
// Hide the loadingContainer
|
||||
if (this.$loadingContainer)
|
||||
this.$loadingContainer.hide();
|
||||
|
||||
// Setup controls
|
||||
if (this.controlsContainerSel) {
|
||||
this.$controlsContainer = $(this.controlsContainerSel).empty();
|
||||
|
||||
if (this.renderSSControls) {
|
||||
if (this.autoStart) {
|
||||
this.$controlsContainer
|
||||
.append('<div class="ss-controls"><a href="#pause" class="pause" title="'+this.pauseLinkText+'">'+this.pauseLinkText+'</a></div>');
|
||||
} else {
|
||||
this.$controlsContainer
|
||||
.append('<div class="ss-controls"><a href="#play" class="play" title="'+this.playLinkText+'">'+this.playLinkText+'</a></div>');
|
||||
}
|
||||
|
||||
this.$controlsContainer.find('div.ss-controls a')
|
||||
.click(function(e) {
|
||||
gallery.toggleSlideshow();
|
||||
e.preventDefault();
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
if (this.renderNavControls) {
|
||||
this.$controlsContainer
|
||||
.append('<div class="nav-controls"><a class="prev" rel="history" title="'+this.prevLinkText+'">'+this.prevLinkText+'</a><a class="next" rel="history" title="'+this.nextLinkText+'">'+this.nextLinkText+'</a></div>')
|
||||
.find('div.nav-controls a')
|
||||
.click(function(e) {
|
||||
gallery.clickHandler(e, this);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
var initFirstImage = !this.enableHistory || !location.hash;
|
||||
if (this.enableHistory && location.hash) {
|
||||
var hash = $.galleriffic.normalizeHash(location.hash);
|
||||
var imageData = allImages[hash];
|
||||
if (!imageData)
|
||||
initFirstImage = true;
|
||||
}
|
||||
|
||||
// Setup gallery to show the first image
|
||||
if (initFirstImage)
|
||||
this.gotoIndex(0, false, true);
|
||||
|
||||
// Setup Keyboard Navigation
|
||||
if (this.enableKeyboardNavigation) {
|
||||
$(document).keydown(function(e) {
|
||||
var key = e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0;
|
||||
switch(key) {
|
||||
case 32: // space
|
||||
gallery.next();
|
||||
e.preventDefault();
|
||||
break;
|
||||
case 33: // Page Up
|
||||
gallery.previousPage();
|
||||
e.preventDefault();
|
||||
break;
|
||||
case 34: // Page Down
|
||||
gallery.nextPage();
|
||||
e.preventDefault();
|
||||
break;
|
||||
case 35: // End
|
||||
gallery.gotoIndex(gallery.data.length-1);
|
||||
e.preventDefault();
|
||||
break;
|
||||
case 36: // Home
|
||||
gallery.gotoIndex(0);
|
||||
e.preventDefault();
|
||||
break;
|
||||
case 37: // left arrow
|
||||
gallery.previous();
|
||||
e.preventDefault();
|
||||
break;
|
||||
case 39: // right arrow
|
||||
gallery.next();
|
||||
e.preventDefault();
|
||||
break;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Auto start the slideshow
|
||||
if (this.autoStart)
|
||||
this.play();
|
||||
|
||||
// Kickoff Image Preloader after 1 second
|
||||
setTimeout(function() { gallery.preloadInit(); }, 1000);
|
||||
|
||||
return this;
|
||||
};
|
||||
})(jQuery);
|
||||
19
photo-art/js/jquery.min.js
vendored
Normal file
19
photo-art/js/jquery.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
42
photo-art/js/jquery.opacityrollover.js
Normal file
42
photo-art/js/jquery.opacityrollover.js
Normal file
@@ -0,0 +1,42 @@
|
||||
/**
|
||||
* jQuery Opacity Rollover plugin
|
||||
*
|
||||
* Copyright (c) 2009 Trent Foley (http://trentacular.com)
|
||||
* Licensed under the MIT License:
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
*/
|
||||
;(function($) {
|
||||
var defaults = {
|
||||
mouseOutOpacity: 0.67,
|
||||
mouseOverOpacity: 1.0,
|
||||
fadeSpeed: 'fast',
|
||||
exemptionSelector: '.selected'
|
||||
};
|
||||
|
||||
$.fn.opacityrollover = function(settings) {
|
||||
// Initialize the effect
|
||||
$.extend(this, defaults, settings);
|
||||
|
||||
var config = this;
|
||||
|
||||
function fadeTo(element, opacity) {
|
||||
var $target = $(element);
|
||||
|
||||
if (config.exemptionSelector)
|
||||
$target = $target.not(config.exemptionSelector);
|
||||
|
||||
$target.fadeTo(config.fadeSpeed, opacity);
|
||||
}
|
||||
|
||||
this.css('opacity', this.mouseOutOpacity)
|
||||
.hover(
|
||||
function () {
|
||||
fadeTo(this, config.mouseOverOpacity);
|
||||
},
|
||||
function () {
|
||||
fadeTo(this, config.mouseOutOpacity);
|
||||
});
|
||||
|
||||
return this;
|
||||
};
|
||||
})(jQuery);
|
||||
129
photo-art/js/jquery.sooperfish.js
Normal file
129
photo-art/js/jquery.sooperfish.js
Normal file
@@ -0,0 +1,129 @@
|
||||
/*
|
||||
* SooperFish 0.1
|
||||
* (c) 2010 Jurriaan Roelofs - SooperThemes.com
|
||||
* Inspired by Suckerfish, Superfish and Droppy
|
||||
* Licensed GPL: http://www.gnu.org/licenses/gpl.html
|
||||
*/
|
||||
$.fn.sooperfish = function(op) {
|
||||
|
||||
var sf = $.fn.sooperfish;
|
||||
sf.o = [];
|
||||
sf.op = {};
|
||||
sf.c = {
|
||||
menuClass : 'sf-js-enabled',
|
||||
isParent : 'sf-parent',
|
||||
arrowClass : 'sf-arrow'
|
||||
};
|
||||
if ($.easing.easeOutOvershoot) { //set default easing
|
||||
sooperEasingShow = 'easeOutOvershoot';
|
||||
} else {
|
||||
sooperEasingShow = 'linear';
|
||||
};
|
||||
if ($.easing.easeInTurbo) {
|
||||
sooperEasingHide = 'easeInTurbo';
|
||||
} else {
|
||||
sooperEasingHide = 'linear';
|
||||
};
|
||||
sf.defaults = {
|
||||
multiColumn : true,
|
||||
dualColumn : 6, //if a submenu has at least this many items it will be divided in 2 columns
|
||||
tripleColumn : 12, //if a submenu has at least this many items it will be divided in 3 columns
|
||||
hoverClass : 'sfHover',
|
||||
delay : 500, //make sure menus only disappear when intended, 500ms is advised by Jacob Nielsen
|
||||
animationShow : {height:'show'},
|
||||
speedShow : 600,
|
||||
easingShow : sooperEasingShow,
|
||||
animationHide : {height:'hide',opacity:'hide'},
|
||||
speedHide : 200,
|
||||
easingHide : sooperEasingHide,
|
||||
autoArrows : true, //Adds span elements to parent li elements, projecting arrow images on these items to indicate submenus. I added an alternative image file with white arrows.
|
||||
onShow : function(){}, //callback after showing menu
|
||||
onHide : function(){} //callback after hiding menu
|
||||
};
|
||||
|
||||
|
||||
//Merge default settings with o function parameter
|
||||
var o = $.extend({},sf.defaults,op);
|
||||
if (!o.sooperfishWidth) {
|
||||
o.sooperfishWidth = $('ul:first li:first', this).width(); //if no width is set in options try to read it from DOM
|
||||
} else {
|
||||
$('ul li', this).width(o.sooperfishWidth) //if width is set in invocation make sure this width is true for all submenus
|
||||
}
|
||||
|
||||
this.each(function() {
|
||||
|
||||
//Check dom for submenus
|
||||
var parentLi = $('li:has(ul)', this);
|
||||
parentLi.each(function(){
|
||||
if (o.autoArrows) { //Add autoArrows if requested
|
||||
$('>a',this).append('<span class="'+sf.c.arrowClass+'"></span>');
|
||||
}
|
||||
$(this).addClass(sf.c.isParent);
|
||||
});
|
||||
|
||||
$('ul',this).css({left: 'auto',display: 'none'}); //The script needs to use display:none to make the hiding animation possible
|
||||
|
||||
//Divide menu in columns
|
||||
//Set width override
|
||||
if (o.multiColumn) {
|
||||
var uls = $('ul',this);
|
||||
uls.each(function(){
|
||||
var ulsize = $('>li:not(.backLava)',this).length; //Skip list items added by Lavalamp plugin
|
||||
if (ulsize >= o.dualColumn) {
|
||||
if (ulsize >= o.tripleColumn) {
|
||||
$(this).width(3*o.sooperfishWidth).addClass('multicolumn triplecolumn');
|
||||
} else {
|
||||
$(this).width(2*o.sooperfishWidth).addClass('multicolumn dualcolumn');
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
var root = this, zIndex = 1000;
|
||||
|
||||
function getSubmenu(ele) {
|
||||
if (ele.nodeName.toLowerCase() == 'li') {
|
||||
var submenu = $('> ul', ele);
|
||||
return submenu.length ? submenu[0] : null;
|
||||
} else {
|
||||
return ele;
|
||||
}
|
||||
}
|
||||
|
||||
function getActuator(ele) {
|
||||
if (ele.nodeName.toLowerCase() == 'ul') {
|
||||
return $(ele).parents('li')[0];
|
||||
} else {
|
||||
return ele;
|
||||
}
|
||||
}
|
||||
|
||||
function hideSooperfishUl() {
|
||||
var submenu = getSubmenu(this);
|
||||
if (!submenu) return;
|
||||
$.data(submenu, 'cancelHide', false);
|
||||
setTimeout(function() {
|
||||
if (!$.data(submenu, 'cancelHide')) {
|
||||
$(submenu).animate(o.animationHide,o.speedHide,o.easingHide,function(){ o.onHide.call(submenu); });
|
||||
}
|
||||
}, o.delay);
|
||||
}
|
||||
|
||||
function showSooperfishUl() {
|
||||
var submenu = getSubmenu(this);
|
||||
if (!submenu) return;
|
||||
$.data(submenu, 'cancelHide', true);
|
||||
$(submenu).css({zIndex: zIndex++}).animate(o.animationShow,o.speedShow,o.easingShow,function(){ o.onShow.call(submenu); });
|
||||
if (this.nodeName.toLowerCase() == 'ul') {
|
||||
var li = getActuator(this);
|
||||
$(li).addClass('hover');
|
||||
$('> a', li).addClass('hover');
|
||||
}
|
||||
}
|
||||
|
||||
// Bind Events. Yes it's that simple!
|
||||
$('li', this).unbind().hover(showSooperfishUl, hideSooperfishUl);
|
||||
|
||||
});
|
||||
|
||||
};
|
||||
28
photo-art/js/modernizr-1.5.min.js
vendored
Normal file
28
photo-art/js/modernizr-1.5.min.js
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
/*!
|
||||
* Modernizr JavaScript library 1.5
|
||||
* http://www.modernizr.com/
|
||||
*
|
||||
* Copyright (c) 2009-2010 Faruk Ates - http://farukat.es/
|
||||
* Dual-licensed under the BSD and MIT licenses.
|
||||
* http://www.modernizr.com/license/
|
||||
*
|
||||
* Featuring major contributions by
|
||||
* Paul Irish - http://paulirish.com
|
||||
*/
|
||||
window.Modernizr=function(i,e,I){function C(a,b){for(var c in a)if(m[a[c]]!==I&&(!b||b(a[c],D)))return true}function r(a,b){var c=a.charAt(0).toUpperCase()+a.substr(1);return!!C([a,"Webkit"+c,"Moz"+c,"O"+c,"ms"+c,"Khtml"+c],b)}function P(){j[E]=function(a){for(var b=0,c=a.length;b<c;b++)J[a[b]]=!!(a[b]in n);return J}("autocomplete autofocus list placeholder max min multiple pattern required step".split(" "));j[Q]=function(a){for(var b=0,c,h=a.length;b<h;b++){n.setAttribute("type",a[b]);if(c=n.type!==
|
||||
"text"){n.value=K;/tel|search/.test(n.type)||(c=/url|email/.test(n.type)?n.checkValidity&&n.checkValidity()===false:n.value!=K)}L[a[b]]=!!c}return L}("search tel url email datetime date month week time datetime-local number range color".split(" "))}var j={},s=e.documentElement,D=e.createElement("modernizr"),m=D.style,n=e.createElement("input"),E="input",Q=E+"types",K=":)",M=Object.prototype.toString,y=" -o- -moz- -ms- -webkit- -khtml- ".split(" "),d={},L={},J={},N=[],u=function(){var a={select:"input",
|
||||
change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"},b={};return function(c,h){var t=arguments.length==1;if(t&&b[c])return b[c];h=h||document.createElement(a[c]||"div");c="on"+c;var g=c in h;if(!g&&h.setAttribute){h.setAttribute(c,"return;");g=typeof h[c]=="function"}h=null;return t?(b[c]=g):g}}(),F={}.hasOwnProperty,O;O=typeof F!=="undefined"&&typeof F.call!=="undefined"?function(a,b){return F.call(a,b)}:function(a,b){return b in a&&typeof a.constructor.prototype[b]==="undefined"};
|
||||
d.canvas=function(){return!!e.createElement("canvas").getContext};d.canvastext=function(){return!!(d.canvas()&&typeof e.createElement("canvas").getContext("2d").fillText=="function")};d.geolocation=function(){return!!navigator.geolocation};d.crosswindowmessaging=function(){return!!i.postMessage};d.websqldatabase=function(){var a=!!i.openDatabase;if(a)try{a=!!openDatabase("testdb","1.0","html5 test db",2E5)}catch(b){a=false}return a};d.indexedDB=function(){return!!i.indexedDB};d.hashchange=function(){return u("hashchange",
|
||||
i)&&(document.documentMode===I||document.documentMode>7)};d.historymanagement=function(){return!!(i.history&&history.pushState)};d.draganddrop=function(){return u("drag")&&u("dragstart")&&u("dragenter")&&u("dragover")&&u("dragleave")&&u("dragend")&&u("drop")};d.websockets=function(){return"WebSocket"in i};d.rgba=function(){m.cssText="background-color:rgba(150,255,150,.5)";return(""+m.backgroundColor).indexOf("rgba")!==-1};d.hsla=function(){m.cssText="background-color:hsla(120,40%,100%,.5)";return(""+
|
||||
m.backgroundColor).indexOf("rgba")!==-1};d.multiplebgs=function(){m.cssText="background:url(//:),url(//:),red url(//:)";return/(url\s*\(.*?){3}/.test(m.background)};d.backgroundsize=function(){return r("backgroundSize")};d.borderimage=function(){return r("borderImage")};d.borderradius=function(){return r("borderRadius","",function(a){return(""+a).indexOf("orderRadius")!==-1})};d.boxshadow=function(){return r("boxShadow")};d.opacity=function(){var a=y.join("opacity:.5;")+"";m.cssText=a;return(""+m.opacity).indexOf("0.5")!==
|
||||
-1};d.cssanimations=function(){return r("animationName")};d.csscolumns=function(){return r("columnCount")};d.cssgradients=function(){var a=("background-image:"+y.join("gradient(linear,left top,right bottom,from(#9f9),to(white));background-image:")+y.join("linear-gradient(left top,#9f9, white);background-image:")).slice(0,-17);m.cssText=a;return(""+m.backgroundImage).indexOf("gradient")!==-1};d.cssreflections=function(){return r("boxReflect")};d.csstransforms=function(){return!!C(["transformProperty",
|
||||
"WebkitTransform","MozTransform","OTransform","msTransform"])};d.csstransforms3d=function(){var a=!!C(["perspectiveProperty","WebkitPerspective","MozPerspective","OPerspective","msPerspective"]);if(a){var b=document.createElement("style"),c=e.createElement("div");b.textContent="@media ("+y.join("transform-3d),(")+"modernizr){#modernizr{height:3px}}";e.getElementsByTagName("head")[0].appendChild(b);c.id="modernizr";s.appendChild(c);a=c.offsetHeight===3;b.parentNode.removeChild(b);c.parentNode.removeChild(c)}return a};
|
||||
d.csstransitions=function(){return r("transitionProperty")};d.fontface=function(){var a;if(/*@cc_on@if(@_jscript_version>=5)!@end@*/0)a=true;else{var b=e.createElement("style"),c=e.createElement("span"),h,t=false,g=e.body,o,w;b.textContent="@font-face{font-family:testfont;src:url('data:font/ttf;base64,AAEAAAAMAIAAAwBAT1MvMliohmwAAADMAAAAVmNtYXCp5qrBAAABJAAAANhjdnQgACICiAAAAfwAAAAEZ2FzcP//AAMAAAIAAAAACGdseWYv5OZoAAACCAAAANxoZWFk69bnvwAAAuQAAAA2aGhlYQUJAt8AAAMcAAAAJGhtdHgGDgC4AAADQAAAABRsb2NhAIQAwgAAA1QAAAAMbWF4cABVANgAAANgAAAAIG5hbWUgXduAAAADgAAABPVwb3N03NkzmgAACHgAAAA4AAECBAEsAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAACAAMDAAAAAAAAgAACbwAAAAoAAAAAAAAAAFBmRWQAAAAgqS8DM/8zAFwDMwDNAAAABQAAAAAAAAAAAAMAAAADAAAAHAABAAAAAABGAAMAAQAAAK4ABAAqAAAABgAEAAEAAgAuqQD//wAAAC6pAP///9ZXAwAAAAAAAAACAAAABgBoAAAAAAAvAAEAAAAAAAAAAAAAAAAAAAABAAIAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEACoAAAAGAAQAAQACAC6pAP//AAAALqkA////1lcDAAAAAAAAAAIAAAAiAogAAAAB//8AAgACACIAAAEyAqoAAwAHAC6xAQAvPLIHBADtMrEGBdw8sgMCAO0yALEDAC88sgUEAO0ysgcGAfw8sgECAO0yMxEhESczESMiARDuzMwCqv1WIgJmAAACAFUAAAIRAc0ADwAfAAATFRQWOwEyNj0BNCYrASIGARQGKwEiJj0BNDY7ATIWFX8aIvAiGhoi8CIaAZIoN/43KCg3/jcoAWD0JB4eJPQkHh7++EY2NkbVRjY2RgAAAAABAEH/+QCdAEEACQAANjQ2MzIWFAYjIkEeEA8fHw8QDxwWFhwWAAAAAQAAAAIAAIuYbWpfDzz1AAsEAAAAAADFn9IuAAAAAMWf0i797/8zA4gDMwAAAAgAAgAAAAAAAAABAAADM/8zAFwDx/3v/98DiAABAAAAAAAAAAAAAAAAAAAABQF2ACIAAAAAAVUAAAJmAFUA3QBBAAAAKgAqACoAWgBuAAEAAAAFAFAABwBUAAQAAgAAAAEAAQAAAEAALgADAAMAAAAQAMYAAQAAAAAAAACLAAAAAQAAAAAAAQAhAIsAAQAAAAAAAgAFAKwAAQAAAAAAAwBDALEAAQAAAAAABAAnAPQAAQAAAAAABQAKARsAAQAAAAAABgAmASUAAQAAAAAADgAaAUsAAwABBAkAAAEWAWUAAwABBAkAAQBCAnsAAwABBAkAAgAKAr0AAwABBAkAAwCGAscAAwABBAkABABOA00AAwABBAkABQAUA5sAAwABBAkABgBMA68AAwABBAkADgA0A/tDb3B5cmlnaHQgMjAwOSBieSBEYW5pZWwgSm9obnNvbi4gIFJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgT3BlbiBGb250IExpY2Vuc2UuIEtheWFoIExpIGdseXBocyBhcmUgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTCB2ZXJzaW9uIDMuYmFlYzJhOTJiZmZlNTAzMiAtIHN1YnNldCBvZiBKdXJhTGlnaHRiYWVjMmE5MmJmZmU1MDMyIC0gc3Vic2V0IG9mIEZvbnRGb3JnZSAyLjAgOiBKdXJhIExpZ2h0IDogMjMtMS0yMDA5YmFlYzJhOTJiZmZlNTAzMiAtIHN1YnNldCBvZiBKdXJhIExpZ2h0VmVyc2lvbiAyIGJhZWMyYTkyYmZmZTUwMzIgLSBzdWJzZXQgb2YgSnVyYUxpZ2h0aHR0cDovL3NjcmlwdHMuc2lsLm9yZy9PRkwAQwBvAHAAeQByAGkAZwBoAHQAIAAyADAAMAA5ACAAYgB5ACAARABhAG4AaQBlAGwAIABKAG8AaABuAHMAbwBuAC4AIAAgAFIAZQBsAGUAYQBzAGUAZAAgAHUAbgBkAGUAcgAgAHQAaABlACAAdABlAHIAbQBzACAAbwBmACAAdABoAGUAIABPAHAAZQBuACAARgBvAG4AdAAgAEwAaQBjAGUAbgBzAGUALgAgAEsAYQB5AGEAaAAgAEwAaQAgAGcAbAB5AHAAaABzACAAYQByAGUAIAByAGUAbABlAGEAcwBlAGQAIAB1AG4AZABlAHIAIAB0AGgAZQAgAEcAUABMACAAdgBlAHIAcwBpAG8AbgAgADMALgBiAGEAZQBjADIAYQA5ADIAYgBmAGYAZQA1ADAAMwAyACAALQAgAHMAdQBiAHMAZQB0ACAAbwBmACAASgB1AHIAYQBMAGkAZwBoAHQAYgBhAGUAYwAyAGEAOQAyAGIAZgBmAGUANQAwADMAMgAgAC0AIABzAHUAYgBzAGUAdAAgAG8AZgAgAEYAbwBuAHQARgBvAHIAZwBlACAAMgAuADAAIAA6ACAASgB1AHIAYQAgAEwAaQBnAGgAdAAgADoAIAAyADMALQAxAC0AMgAwADAAOQBiAGEAZQBjADIAYQA5ADIAYgBmAGYAZQA1ADAAMwAyACAALQAgAHMAdQBiAHMAZQB0ACAAbwBmACAASgB1AHIAYQAgAEwAaQBnAGgAdABWAGUAcgBzAGkAbwBuACAAMgAgAGIAYQBlAGMAMgBhADkAMgBiAGYAZgBlADUAMAAzADIAIAAtACAAcwB1AGIAcwBlAHQAIABvAGYAIABKAHUAcgBhAEwAaQBnAGgAdABoAHQAdABwADoALwAvAHMAYwByAGkAcAB0AHMALgBzAGkAbAAuAG8AcgBnAC8ATwBGAEwAAAAAAgAAAAAAAP+BADMAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAQACAQIAEQt6ZXJva2F5YWhsaQ==')}";
|
||||
e.getElementsByTagName("head")[0].appendChild(b);c.setAttribute("style","font:99px _,arial,helvetica;position:absolute;visibility:hidden");if(!g){g=s.appendChild(e.createElement("fontface"));t=true}c.innerHTML="........";c.id="fonttest";g.appendChild(c);h=c.offsetWidth*c.offsetHeight;c.style.font="99px testfont,_,arial,helvetica";a=h!==c.offsetWidth*c.offsetHeight;var v=function(){if(g.parentNode){a=j.fontface=h!==c.offsetWidth*c.offsetHeight;s.className=s.className.replace(/(no-)?fontface\b/,"")+
|
||||
(a?" ":" no-")+"fontface"}};setTimeout(v,75);setTimeout(v,150);addEventListener("load",function(){v();(w=true)&&o&&o(a);setTimeout(function(){t||(g=c);g.parentNode.removeChild(g);b.parentNode.removeChild(b)},50)},false)}j._fontfaceready=function(p){w||a?p(a):(o=p)};return a||h!==c.offsetWidth};d.video=function(){var a=e.createElement("video"),b=!!a.canPlayType;if(b){b=new Boolean(b);b.ogg=a.canPlayType('video/ogg; codecs="theora"');b.h264=a.canPlayType('video/mp4; codecs="avc1.42E01E"');b.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"')}return b};
|
||||
d.audio=function(){var a=e.createElement("audio"),b=!!a.canPlayType;if(b){b=new Boolean(b);b.ogg=a.canPlayType('audio/ogg; codecs="vorbis"');b.mp3=a.canPlayType("audio/mpeg;");b.wav=a.canPlayType('audio/wav; codecs="1"');b.m4a=a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")}return b};d.localStorage=function(){return"localStorage"in i&&i.localStorage!==null};d.sessionStorage=function(){try{return"sessionStorage"in i&&i.sessionStorage!==null}catch(a){return false}};d.webworkers=function(){return!!i.Worker};
|
||||
d.applicationCache=function(){var a=i.applicationCache;return!!(a&&typeof a.status!="undefined"&&typeof a.update=="function"&&typeof a.swapCache=="function")};d.svg=function(){return!!e.createElementNS&&!!e.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect};d.smil=function(){return!!e.createElementNS&&/SVG/.test(M.call(e.createElementNS("http://www.w3.org/2000/svg","animate")))};d.svgclippaths=function(){return!!e.createElementNS&&/SVG/.test(M.call(e.createElementNS("http://www.w3.org/2000/svg",
|
||||
"clipPath")))};for(var z in d)if(O(d,z))N.push(((j[z.toLowerCase()]=d[z]())?"":"no-")+z.toLowerCase());j[E]||P();j.addTest=function(a,b){a=a.toLowerCase();if(!j[a]){b=!!b();s.className+=" "+(b?"":"no-")+a;j[a]=b;return j}};m.cssText="";D=n=null;(function(){var a=e.createElement("div");a.innerHTML="<elem></elem>";return a.childNodes.length!==1})()&&function(a,b){function c(f,k){if(o[f])o[f].styleSheet.cssText+=k;else{var l=t[G],q=b[A]("style");q.media=f;l.insertBefore(q,l[G]);o[f]=q;c(f,k)}}function h(f,
|
||||
k){for(var l=new RegExp("\\b("+w+")\\b(?!.*[;}])","gi"),q=function(B){return".iepp_"+B},x=-1;++x<f.length;){k=f[x].media||k;h(f[x].imports,k);c(k,f[x].cssText.replace(l,q))}}for(var t=b.documentElement,g=b.createDocumentFragment(),o={},w="abbr|article|aside|audio|canvas|command|datalist|details|figure|figcaption|footer|header|hgroup|keygen|mark|meter|nav|output|progress|section|source|summary|time|video",v=w.split("|"),p=[],H=-1,G="firstChild",A="createElement";++H<v.length;){b[A](v[H]);g[A](v[H])}g=
|
||||
g.appendChild(b[A]("div"));a.attachEvent("onbeforeprint",function(){for(var f,k=b.getElementsByTagName("*"),l,q,x=new RegExp("^"+w+"$","i"),B=-1;++B<k.length;)if((f=k[B])&&(q=f.nodeName.match(x))){l=new RegExp("^\\s*<"+q+"(.*)\\/"+q+">\\s*$","i");g.innerHTML=f.outerHTML.replace(/\r|\n/g," ").replace(l,f.currentStyle.display=="block"?"<div$1/div>":"<span$1/span>");l=g.childNodes[0];l.className+=" iepp_"+q;l=p[p.length]=[f,l];f.parentNode.replaceChild(l[1],l[0])}h(b.styleSheets,"all")});a.attachEvent("onafterprint",
|
||||
function(){for(var f=-1,k;++f<p.length;)p[f][1].parentNode.replaceChild(p[f][0],p[f][1]);for(k in o)t[G].removeChild(o[k]);o={};p=[]})}(this,e);j._enableHTML5=true;j._version="1.5";s.className=s.className.replace(/\bno-js\b/,"")+" js";s.className+=" "+N.join(" ");return j}(this,this.document);
|
||||
Reference in New Issue
Block a user