Rebase dengan menggunakan sqlite
This commit is contained in:
132
public/js/api/main.js
Normal file
132
public/js/api/main.js
Normal file
@@ -0,0 +1,132 @@
|
||||
/**
|
||||
* Utility function to calculate the current theme setting.
|
||||
* Look for a local storage value.
|
||||
* Fall back to system setting.
|
||||
* Fall back to light mode.
|
||||
*/
|
||||
function calculateSettingAsThemeString({
|
||||
localStorageTheme,
|
||||
systemSettingDark,
|
||||
}) {
|
||||
if (localStorageTheme !== null) {
|
||||
return localStorageTheme;
|
||||
}
|
||||
|
||||
if (systemSettingDark.matches) {
|
||||
return "dark";
|
||||
}
|
||||
|
||||
return "light";
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility function to update the button text and aria-label.
|
||||
*/
|
||||
function updateButton({ buttonEl, isDark }) {
|
||||
const newCta = isDark ? "Terang" : "Gelap";
|
||||
// use an aria-label if you are omitting text on the button
|
||||
// and using a sun/moon icon, for example
|
||||
buttonEl.innerText = newCta;
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility function to update the theme setting on the html tag
|
||||
*/
|
||||
function updateThemeOnHtmlEl({ theme }) {
|
||||
document.querySelector("html").setAttribute("data-theme", theme);
|
||||
}
|
||||
|
||||
/**
|
||||
* On page load:
|
||||
*/
|
||||
|
||||
/**
|
||||
* 1. Grab what we need from the DOM and system settings on page load
|
||||
*/
|
||||
const button = document.querySelector(".theme-toggle");
|
||||
const localStorageTheme = localStorage.getItem("theme");
|
||||
const systemSettingDark = window.matchMedia("(prefers-color-scheme: dark)");
|
||||
|
||||
/**
|
||||
* 2. Work out the current site settings
|
||||
*/
|
||||
let currentThemeSetting = calculateSettingAsThemeString({
|
||||
localStorageTheme,
|
||||
systemSettingDark,
|
||||
});
|
||||
|
||||
/**
|
||||
* 3. Update the theme setting and button text accoridng to current settings
|
||||
*/
|
||||
updateButton({
|
||||
buttonEl: button,
|
||||
isDark: currentThemeSetting === "dark",
|
||||
});
|
||||
updateThemeOnHtmlEl({ theme: currentThemeSetting });
|
||||
|
||||
/**
|
||||
* 4. Add an event listener to toggle the theme
|
||||
*/
|
||||
function changeTheme() {
|
||||
const newTheme = currentThemeSetting === "dark" ? "light" : "dark";
|
||||
|
||||
localStorage.setItem("theme", newTheme);
|
||||
updateButton({
|
||||
buttonEl: button,
|
||||
isDark: newTheme === "dark",
|
||||
});
|
||||
updateThemeOnHtmlEl({ theme: newTheme });
|
||||
|
||||
currentThemeSetting = newTheme;
|
||||
}
|
||||
|
||||
$(document).ready(function () {
|
||||
// Header Scroll
|
||||
$(window).on("scroll", function () {
|
||||
var scroll = $(window).scrollTop();
|
||||
|
||||
if (scroll >= 50) {
|
||||
$("#header").addClass("fixed");
|
||||
} else {
|
||||
$("#header").removeClass("fixed");
|
||||
}
|
||||
});
|
||||
|
||||
// Page Scroll
|
||||
var sections = $("section");
|
||||
nav = $('nav[role="navigation"]');
|
||||
|
||||
$(window).on("scroll", function () {
|
||||
var cur_pos = $(this).scrollTop();
|
||||
sections.each(function () {
|
||||
var top = $(this).offset().top - 276;
|
||||
bottom = top + $(this).outerHeight();
|
||||
if (cur_pos >= top && cur_pos <= bottom) {
|
||||
nav.find("a").removeClass("active");
|
||||
nav.find('a[href="#' + $(this).attr("id") + '"]').addClass("active");
|
||||
}
|
||||
});
|
||||
});
|
||||
nav.find("a").on("click", function () {
|
||||
var $el = $(this);
|
||||
id = $el.attr("href");
|
||||
$("html, body").animate(
|
||||
{
|
||||
scrollTop: $(id).offset().top - 75,
|
||||
},
|
||||
500
|
||||
);
|
||||
return false;
|
||||
});
|
||||
|
||||
// Mobile Navigation
|
||||
$(".nav-toggle").on("click", function () {
|
||||
$(this).toggleClass("close-nav");
|
||||
nav.toggleClass("open");
|
||||
return false;
|
||||
});
|
||||
nav.find("a").on("click", function () {
|
||||
$(".nav-toggle").toggleClass("close-nav");
|
||||
nav.toggleClass("open");
|
||||
});
|
||||
});
|
||||
1697
public/js/bootstrap.min.js
vendored
Normal file
1697
public/js/bootstrap.min.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1173
public/js/jquery.flexslider-min.js
vendored
Normal file
1173
public/js/jquery.flexslider-min.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
87
public/js/jquery.localscroll-1.2.7-min.js
vendored
Normal file
87
public/js/jquery.localscroll-1.2.7-min.js
vendored
Normal file
@@ -0,0 +1,87 @@
|
||||
/**
|
||||
* jQuery.LocalScroll - Animated scrolling navigation, using anchors.
|
||||
* Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
|
||||
* Dual licensed under MIT and GPL.
|
||||
* Date: 3/11/2009
|
||||
* @author Ariel Flesler
|
||||
* @version 1.2.7
|
||||
**/
|
||||
(function ($) {
|
||||
var l = location.href.replace(/#.*/, "");
|
||||
var g = ($.localScroll = function (a) {
|
||||
$("body").localScroll(a);
|
||||
});
|
||||
g.defaults = {
|
||||
duration: 1e3,
|
||||
axis: "y",
|
||||
event: "click",
|
||||
stop: true,
|
||||
target: window,
|
||||
reset: true,
|
||||
};
|
||||
g.hash = function (a) {
|
||||
if (location.hash) {
|
||||
a = $.extend({}, g.defaults, a);
|
||||
a.hash = false;
|
||||
if (a.reset) {
|
||||
var e = a.duration;
|
||||
delete a.duration;
|
||||
$(a.target).scrollTo(0, a);
|
||||
a.duration = e;
|
||||
}
|
||||
i(0, location, a);
|
||||
}
|
||||
};
|
||||
$.fn.localScroll = function (b) {
|
||||
b = $.extend({}, g.defaults, b);
|
||||
return b.lazy
|
||||
? this.bind(b.event, function (a) {
|
||||
var e = $([a.target, a.target.parentNode]).filter(d)[0];
|
||||
if (e) i(a, e, b);
|
||||
})
|
||||
: this.find("a,area")
|
||||
.filter(d)
|
||||
.bind(b.event, function (a) {
|
||||
i(a, this, b);
|
||||
})
|
||||
.end()
|
||||
.end();
|
||||
function d() {
|
||||
return (
|
||||
!!this.href &&
|
||||
!!this.hash &&
|
||||
this.href.replace(this.hash, "") == l &&
|
||||
(!b.filter || $(this).is(b.filter))
|
||||
);
|
||||
}
|
||||
};
|
||||
function i(a, e, b) {
|
||||
var d = e.hash.slice(1),
|
||||
f = document.getElementById(d) || document.getElementsByName(d)[0];
|
||||
if (!f) return;
|
||||
if (a) a.preventDefault();
|
||||
var h = $(b.target);
|
||||
if (
|
||||
(b.lock && h.is(":animated")) ||
|
||||
(b.onBefore && b.onBefore.call(b, a, f, h) === false)
|
||||
)
|
||||
return;
|
||||
if (b.stop) h.stop(true);
|
||||
if (b.hash) {
|
||||
var j = f.id == d ? "id" : "name",
|
||||
k = $("<a> </a>")
|
||||
.attr(j, d)
|
||||
.css({
|
||||
position: "absolute",
|
||||
top: $(window).scrollTop(),
|
||||
left: $(window).scrollLeft(),
|
||||
});
|
||||
f[j] = "";
|
||||
$("body").prepend(k);
|
||||
location = e.hash;
|
||||
k.remove();
|
||||
f[j] = d;
|
||||
}
|
||||
h.scrollTo(f, b).trigger("notify.serialScroll", [f]);
|
||||
}
|
||||
})(jQuery);
|
||||
5795
public/js/jquery.min.js
vendored
Normal file
5795
public/js/jquery.min.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
875
public/js/jquery.prettyPhoto.min.js
vendored
Normal file
875
public/js/jquery.prettyPhoto.min.js
vendored
Normal file
@@ -0,0 +1,875 @@
|
||||
!(function ($) {
|
||||
function getHashtag() {
|
||||
var url = location.href;
|
||||
return (
|
||||
(hashtag =
|
||||
-1 !== url.indexOf("#prettyPhoto")
|
||||
? decodeURI(
|
||||
url.substring(url.indexOf("#prettyPhoto") + 1, url.length)
|
||||
)
|
||||
: !1),
|
||||
hashtag && (hashtag = hashtag.replace(/<|>/g, "")),
|
||||
hashtag
|
||||
);
|
||||
}
|
||||
function setHashtag() {
|
||||
"undefined" != typeof theRel &&
|
||||
(location.hash = theRel + "/" + rel_index + "/");
|
||||
}
|
||||
function clearHashtag() {
|
||||
-1 !== location.href.indexOf("#prettyPhoto") &&
|
||||
(location.hash = "prettyPhoto");
|
||||
}
|
||||
function getParam(name, url) {
|
||||
name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
|
||||
var regexS = "[\\?&]" + name + "=([^&#]*)",
|
||||
regex = new RegExp(regexS),
|
||||
results = regex.exec(url);
|
||||
return null == results ? "" : results[1];
|
||||
}
|
||||
($.prettyPhoto = { version: "3.1.6" }),
|
||||
($.fn.prettyPhoto = function (pp_settings) {
|
||||
function _showContent() {
|
||||
$(".pp_loaderIcon").hide(),
|
||||
(projectedTop =
|
||||
scroll_pos.scrollTop +
|
||||
(windowHeight / 2 - pp_dimensions.containerHeight / 2)),
|
||||
projectedTop < 0 && (projectedTop = 0),
|
||||
$ppt.fadeTo(settings.animation_speed, 1),
|
||||
$pp_pic_holder.find(".pp_content").animate(
|
||||
{
|
||||
height: pp_dimensions.contentHeight,
|
||||
width: pp_dimensions.contentWidth,
|
||||
},
|
||||
settings.animation_speed
|
||||
),
|
||||
$pp_pic_holder.animate(
|
||||
{
|
||||
top: projectedTop,
|
||||
left:
|
||||
windowWidth / 2 - pp_dimensions.containerWidth / 2 < 0
|
||||
? 0
|
||||
: windowWidth / 2 - pp_dimensions.containerWidth / 2,
|
||||
width: pp_dimensions.containerWidth,
|
||||
},
|
||||
settings.animation_speed,
|
||||
function () {
|
||||
$pp_pic_holder
|
||||
.find(".pp_hoverContainer,#fullResImage")
|
||||
.height(pp_dimensions.height)
|
||||
.width(pp_dimensions.width),
|
||||
$pp_pic_holder
|
||||
.find(".pp_fade")
|
||||
.fadeIn(settings.animation_speed),
|
||||
isSet && "image" == _getFileType(pp_images[set_position])
|
||||
? $pp_pic_holder.find(".pp_hoverContainer").show()
|
||||
: $pp_pic_holder.find(".pp_hoverContainer").hide(),
|
||||
settings.allow_expand &&
|
||||
(pp_dimensions.resized
|
||||
? $("a.pp_expand,a.pp_contract").show()
|
||||
: $("a.pp_expand").hide()),
|
||||
!settings.autoplay_slideshow ||
|
||||
pp_slideshow ||
|
||||
pp_open ||
|
||||
$.prettyPhoto.startSlideshow(),
|
||||
settings.changepicturecallback(),
|
||||
(pp_open = !0);
|
||||
}
|
||||
),
|
||||
_insert_gallery(),
|
||||
pp_settings.ajaxcallback();
|
||||
}
|
||||
function _hideContent(callback) {
|
||||
$pp_pic_holder
|
||||
.find("#pp_full_res object,#pp_full_res embed")
|
||||
.css("visibility", "hidden"),
|
||||
$pp_pic_holder
|
||||
.find(".pp_fade")
|
||||
.fadeOut(settings.animation_speed, function () {
|
||||
$(".pp_loaderIcon").show(), callback();
|
||||
});
|
||||
}
|
||||
function _checkPosition(setCount) {
|
||||
setCount > 1 ? $(".pp_nav").show() : $(".pp_nav").hide();
|
||||
}
|
||||
function _fitToViewport(width, height) {
|
||||
if (
|
||||
((resized = !1),
|
||||
_getDimensions(width, height),
|
||||
(imageWidth = width),
|
||||
(imageHeight = height),
|
||||
(pp_containerWidth > windowWidth ||
|
||||
pp_containerHeight > windowHeight) &&
|
||||
doresize &&
|
||||
settings.allow_resize &&
|
||||
!percentBased)
|
||||
) {
|
||||
for (resized = !0, fitting = !1; !fitting; )
|
||||
pp_containerWidth > windowWidth
|
||||
? ((imageWidth = windowWidth - 200),
|
||||
(imageHeight = (height / width) * imageWidth))
|
||||
: pp_containerHeight > windowHeight
|
||||
? ((imageHeight = windowHeight - 200),
|
||||
(imageWidth = (width / height) * imageHeight))
|
||||
: (fitting = !0),
|
||||
(pp_containerHeight = imageHeight),
|
||||
(pp_containerWidth = imageWidth);
|
||||
(pp_containerWidth > windowWidth ||
|
||||
pp_containerHeight > windowHeight) &&
|
||||
_fitToViewport(pp_containerWidth, pp_containerHeight),
|
||||
_getDimensions(imageWidth, imageHeight);
|
||||
}
|
||||
return {
|
||||
width: Math.floor(imageWidth),
|
||||
height: Math.floor(imageHeight),
|
||||
containerHeight: Math.floor(pp_containerHeight),
|
||||
containerWidth:
|
||||
Math.floor(pp_containerWidth) + 2 * settings.horizontal_padding,
|
||||
contentHeight: Math.floor(pp_contentHeight),
|
||||
contentWidth: Math.floor(pp_contentWidth),
|
||||
resized: resized,
|
||||
};
|
||||
}
|
||||
function _getDimensions(width, height) {
|
||||
(width = parseFloat(width)),
|
||||
(height = parseFloat(height)),
|
||||
($pp_details = $pp_pic_holder.find(".pp_details")),
|
||||
$pp_details.width(width),
|
||||
(detailsHeight =
|
||||
parseFloat($pp_details.css("marginTop")) +
|
||||
parseFloat($pp_details.css("marginBottom"))),
|
||||
($pp_details = $pp_details
|
||||
.clone()
|
||||
.addClass(settings.theme)
|
||||
.width(width)
|
||||
.appendTo($("body"))
|
||||
.css({ position: "absolute", top: -1e4 })),
|
||||
(detailsHeight += $pp_details.height()),
|
||||
(detailsHeight = detailsHeight <= 34 ? 36 : detailsHeight),
|
||||
$pp_details.remove(),
|
||||
($pp_title = $pp_pic_holder.find(".ppt")),
|
||||
$pp_title.width(width),
|
||||
(titleHeight =
|
||||
parseFloat($pp_title.css("marginTop")) +
|
||||
parseFloat($pp_title.css("marginBottom"))),
|
||||
($pp_title = $pp_title
|
||||
.clone()
|
||||
.appendTo($("body"))
|
||||
.css({ position: "absolute", top: -1e4 })),
|
||||
(titleHeight += $pp_title.height()),
|
||||
$pp_title.remove(),
|
||||
(pp_contentHeight = height + detailsHeight),
|
||||
(pp_contentWidth = width),
|
||||
(pp_containerHeight =
|
||||
pp_contentHeight +
|
||||
titleHeight +
|
||||
$pp_pic_holder.find(".pp_top").height() +
|
||||
$pp_pic_holder.find(".pp_bottom").height()),
|
||||
(pp_containerWidth = width);
|
||||
}
|
||||
function _getFileType(itemSrc) {
|
||||
return itemSrc.match(/youtube\.com\/watch/i) ||
|
||||
itemSrc.match(/youtu\.be/i)
|
||||
? "youtube"
|
||||
: itemSrc.match(/vimeo\.com/i)
|
||||
? "vimeo"
|
||||
: itemSrc.match(/\b.mov\b/i)
|
||||
? "quicktime"
|
||||
: itemSrc.match(/\b.swf\b/i)
|
||||
? "flash"
|
||||
: itemSrc.match(/\biframe=true\b/i)
|
||||
? "iframe"
|
||||
: itemSrc.match(/\bajax=true\b/i)
|
||||
? "ajax"
|
||||
: itemSrc.match(/\bcustom=true\b/i)
|
||||
? "custom"
|
||||
: "#" == itemSrc.substr(0, 1)
|
||||
? "inline"
|
||||
: "image";
|
||||
}
|
||||
function _center_overlay() {
|
||||
if (doresize && "undefined" != typeof $pp_pic_holder) {
|
||||
if (
|
||||
((scroll_pos = _get_scroll()),
|
||||
(contentHeight = $pp_pic_holder.height()),
|
||||
(contentwidth = $pp_pic_holder.width()),
|
||||
(projectedTop =
|
||||
windowHeight / 2 + scroll_pos.scrollTop - contentHeight / 2),
|
||||
projectedTop < 0 && (projectedTop = 0),
|
||||
contentHeight > windowHeight)
|
||||
)
|
||||
return;
|
||||
$pp_pic_holder.css({
|
||||
top: projectedTop,
|
||||
left: windowWidth / 2 + scroll_pos.scrollLeft - contentwidth / 2,
|
||||
});
|
||||
}
|
||||
}
|
||||
function _get_scroll() {
|
||||
return self.pageYOffset
|
||||
? { scrollTop: self.pageYOffset, scrollLeft: self.pageXOffset }
|
||||
: document.documentElement && document.documentElement.scrollTop
|
||||
? {
|
||||
scrollTop: document.documentElement.scrollTop,
|
||||
scrollLeft: document.documentElement.scrollLeft,
|
||||
}
|
||||
: document.body
|
||||
? {
|
||||
scrollTop: document.body.scrollTop,
|
||||
scrollLeft: document.body.scrollLeft,
|
||||
}
|
||||
: void 0;
|
||||
}
|
||||
function _resize_overlay() {
|
||||
(windowHeight = $(window).height()),
|
||||
(windowWidth = $(window).width()),
|
||||
"undefined" != typeof $pp_overlay &&
|
||||
$pp_overlay.height($(document).height()).width(windowWidth);
|
||||
}
|
||||
function _insert_gallery() {
|
||||
isSet &&
|
||||
settings.overlay_gallery &&
|
||||
"image" == _getFileType(pp_images[set_position])
|
||||
? ((itemWidth = 57),
|
||||
(navWidth =
|
||||
"facebook" == settings.theme || "pp_default" == settings.theme
|
||||
? 50
|
||||
: 30),
|
||||
(itemsPerPage = Math.floor(
|
||||
(pp_dimensions.containerWidth - 100 - navWidth) / itemWidth
|
||||
)),
|
||||
(itemsPerPage =
|
||||
itemsPerPage < pp_images.length
|
||||
? itemsPerPage
|
||||
: pp_images.length),
|
||||
(totalPage = Math.ceil(pp_images.length / itemsPerPage) - 1),
|
||||
0 == totalPage
|
||||
? ((navWidth = 0),
|
||||
$pp_gallery.find(".pp_arrow_next,.pp_arrow_previous").hide())
|
||||
: $pp_gallery.find(".pp_arrow_next,.pp_arrow_previous").show(),
|
||||
(galleryWidth = itemsPerPage * itemWidth),
|
||||
(fullGalleryWidth = pp_images.length * itemWidth),
|
||||
$pp_gallery
|
||||
.css("margin-left", -(galleryWidth / 2 + navWidth / 2))
|
||||
.find("div:first")
|
||||
.width(galleryWidth + 5)
|
||||
.find("ul")
|
||||
.width(fullGalleryWidth)
|
||||
.find("li.selected")
|
||||
.removeClass("selected"),
|
||||
(goToPage =
|
||||
Math.floor(set_position / itemsPerPage) < totalPage
|
||||
? Math.floor(set_position / itemsPerPage)
|
||||
: totalPage),
|
||||
$.prettyPhoto.changeGalleryPage(goToPage),
|
||||
$pp_gallery_li
|
||||
.filter(":eq(" + set_position + ")")
|
||||
.addClass("selected"))
|
||||
: $pp_pic_holder.find(".pp_content").unbind("mouseenter mouseleave");
|
||||
}
|
||||
function _build_overlay(caller) {
|
||||
if (
|
||||
(settings.social_tools &&
|
||||
(facebook_like_link = settings.social_tools.replace(
|
||||
"{location_href}",
|
||||
encodeURIComponent(location.href)
|
||||
)),
|
||||
(settings.markup = settings.markup.replace("{pp_social}", "")),
|
||||
$("body").append(settings.markup),
|
||||
($pp_pic_holder = $(".pp_pic_holder")),
|
||||
($ppt = $(".ppt")),
|
||||
($pp_overlay = $("div.pp_overlay")),
|
||||
isSet && settings.overlay_gallery)
|
||||
) {
|
||||
(currentGalleryPage = 0), (toInject = "");
|
||||
for (var i = 0; i < pp_images.length; i++)
|
||||
pp_images[i].match(/\b(jpg|jpeg|png|gif)\b/gi)
|
||||
? ((classname = ""), (img_src = pp_images[i]))
|
||||
: ((classname = "default"), (img_src = "")),
|
||||
(toInject +=
|
||||
"<li class='" +
|
||||
classname +
|
||||
"'><a href='#'><img src='" +
|
||||
img_src +
|
||||
"' width='50' alt='' /></a></li>");
|
||||
(toInject = settings.gallery_markup.replace(/{gallery}/g, toInject)),
|
||||
$pp_pic_holder.find("#pp_full_res").after(toInject),
|
||||
($pp_gallery = $(".pp_pic_holder .pp_gallery")),
|
||||
($pp_gallery_li = $pp_gallery.find("li")),
|
||||
$pp_gallery.find(".pp_arrow_next").click(function () {
|
||||
return (
|
||||
$.prettyPhoto.changeGalleryPage("next"),
|
||||
$.prettyPhoto.stopSlideshow(),
|
||||
!1
|
||||
);
|
||||
}),
|
||||
$pp_gallery.find(".pp_arrow_previous").click(function () {
|
||||
return (
|
||||
$.prettyPhoto.changeGalleryPage("previous"),
|
||||
$.prettyPhoto.stopSlideshow(),
|
||||
!1
|
||||
);
|
||||
}),
|
||||
$pp_pic_holder.find(".pp_content").hover(
|
||||
function () {
|
||||
$pp_pic_holder.find(".pp_gallery:not(.disabled)").fadeIn();
|
||||
},
|
||||
function () {
|
||||
$pp_pic_holder.find(".pp_gallery:not(.disabled)").fadeOut();
|
||||
}
|
||||
),
|
||||
(itemWidth = 57),
|
||||
$pp_gallery_li.each(function (i) {
|
||||
$(this)
|
||||
.find("a")
|
||||
.click(function () {
|
||||
return (
|
||||
$.prettyPhoto.changePage(i),
|
||||
$.prettyPhoto.stopSlideshow(),
|
||||
!1
|
||||
);
|
||||
});
|
||||
});
|
||||
}
|
||||
settings.slideshow &&
|
||||
($pp_pic_holder
|
||||
.find(".pp_nav")
|
||||
.prepend('<a href="#" class="pp_play">Play</a>'),
|
||||
$pp_pic_holder.find(".pp_nav .pp_play").click(function () {
|
||||
return $.prettyPhoto.startSlideshow(), !1;
|
||||
})),
|
||||
$pp_pic_holder.attr("class", "pp_pic_holder " + settings.theme),
|
||||
$pp_overlay
|
||||
.css({
|
||||
opacity: 0,
|
||||
height: $(document).height(),
|
||||
width: $(window).width(),
|
||||
})
|
||||
.bind("click", function () {
|
||||
settings.modal || $.prettyPhoto.close();
|
||||
}),
|
||||
$("a.pp_close").bind("click", function () {
|
||||
return $.prettyPhoto.close(), !1;
|
||||
}),
|
||||
settings.allow_expand &&
|
||||
$("a.pp_expand").bind("click", function (e) {
|
||||
return (
|
||||
$(this).hasClass("pp_expand")
|
||||
? ($(this).removeClass("pp_expand").addClass("pp_contract"),
|
||||
(doresize = !1))
|
||||
: ($(this).removeClass("pp_contract").addClass("pp_expand"),
|
||||
(doresize = !0)),
|
||||
_hideContent(function () {
|
||||
$.prettyPhoto.open();
|
||||
}),
|
||||
!1
|
||||
);
|
||||
}),
|
||||
$pp_pic_holder
|
||||
.find(".pp_previous, .pp_nav .pp_arrow_previous")
|
||||
.bind("click", function () {
|
||||
return (
|
||||
$.prettyPhoto.changePage("previous"),
|
||||
$.prettyPhoto.stopSlideshow(),
|
||||
!1
|
||||
);
|
||||
}),
|
||||
$pp_pic_holder
|
||||
.find(".pp_next, .pp_nav .pp_arrow_next")
|
||||
.bind("click", function () {
|
||||
return (
|
||||
$.prettyPhoto.changePage("next"),
|
||||
$.prettyPhoto.stopSlideshow(),
|
||||
!1
|
||||
);
|
||||
}),
|
||||
_center_overlay();
|
||||
}
|
||||
pp_settings = jQuery.extend(
|
||||
{
|
||||
hook: "rel",
|
||||
animation_speed: "fast",
|
||||
ajaxcallback: function () {},
|
||||
slideshow: 5e3,
|
||||
autoplay_slideshow: !1,
|
||||
opacity: 0.8,
|
||||
show_title: !0,
|
||||
allow_resize: !0,
|
||||
allow_expand: !0,
|
||||
default_width: 500,
|
||||
default_height: 344,
|
||||
counter_separator_label: "/",
|
||||
theme: "pp_default",
|
||||
horizontal_padding: 20,
|
||||
hideflash: !1,
|
||||
wmode: "opaque",
|
||||
autoplay: !0,
|
||||
modal: !1,
|
||||
deeplinking: !0,
|
||||
overlay_gallery: !0,
|
||||
overlay_gallery_max: 30,
|
||||
keyboard_shortcuts: !0,
|
||||
changepicturecallback: function () {},
|
||||
callback: function () {},
|
||||
ie6_fallback: !0,
|
||||
markup:
|
||||
'<div class="pp_pic_holder"> <div class="ppt"> </div> <div class="pp_top"> <div class="pp_left"></div> <div class="pp_middle"></div> <div class="pp_right"></div> </div> <div class="pp_content_container"> <div class="pp_left"> <div class="pp_right"> <div class="pp_content"> <div class="pp_loaderIcon"></div> <div class="pp_fade"> <a href="#" class="pp_expand" title="Expand the image">Expand</a> <div class="pp_hoverContainer"> <a class="pp_next" href="#">next</a> <a class="pp_previous" href="#">previous</a> </div> <div id="pp_full_res"></div> <div class="pp_details"> <div class="pp_nav"> <a href="#" class="pp_arrow_previous">Previous</a> <p class="currentTextHolder">0/0</p> <a href="#" class="pp_arrow_next">Next</a> </div> <p class="pp_description"></p> <div class="pp_social">{pp_social}</div> <a class="pp_close" href="#">Close</a> </div> </div> </div> </div> </div> </div> <div class="pp_bottom"> <div class="pp_left"></div> <div class="pp_middle"></div> <div class="pp_right"></div> </div> </div> <div class="pp_overlay"></div>',
|
||||
gallery_markup:
|
||||
'<div class="pp_gallery"> <a href="#" class="pp_arrow_previous">Previous</a> <div> <ul> {gallery} </ul> </div> <a href="#" class="pp_arrow_next">Next</a> </div>',
|
||||
image_markup: '<img id="fullResImage" src="{path}" />',
|
||||
flash_markup:
|
||||
'<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="{width}" height="{height}"><param name="wmode" value="{wmode}" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="{path}" /><embed src="{path}" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="{width}" height="{height}" wmode="{wmode}"></embed></object>',
|
||||
quicktime_markup:
|
||||
'<object classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" codebase="http://www.apple.com/qtactivex/qtplugin.cab" height="{height}" width="{width}"><param name="src" value="{path}"><param name="autoplay" value="{autoplay}"><param name="type" value="video/quicktime"><embed src="{path}" height="{height}" width="{width}" autoplay="{autoplay}" type="video/quicktime" pluginspage="http://www.apple.com/quicktime/download/"></embed></object>',
|
||||
iframe_markup:
|
||||
'<iframe src ="{path}" width="{width}" height="{height}" frameborder="no"></iframe>',
|
||||
inline_markup: '<div class="pp_inline">{content}</div>',
|
||||
custom_markup: "",
|
||||
social_tools:
|
||||
'<div class="twitter"><a href="http://twitter.com/share" class="twitter-share-button" data-count="none">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div class="facebook"><iframe src="//www.facebook.com/plugins/like.php?locale=en_US&href={location_href}&layout=button_count&show_faces=true&width=500&action=like&font&colorscheme=light&height=23" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:500px; height:23px;" allowTransparency="true"></iframe></div>',
|
||||
},
|
||||
pp_settings
|
||||
);
|
||||
var pp_dimensions,
|
||||
pp_open,
|
||||
pp_contentHeight,
|
||||
pp_contentWidth,
|
||||
pp_containerHeight,
|
||||
pp_containerWidth,
|
||||
pp_slideshow,
|
||||
matchedObjects = this,
|
||||
percentBased = !1,
|
||||
windowHeight = $(window).height(),
|
||||
windowWidth = $(window).width();
|
||||
return (
|
||||
(doresize = !0),
|
||||
(scroll_pos = _get_scroll()),
|
||||
$(window)
|
||||
.unbind("resize.prettyphoto")
|
||||
.bind("resize.prettyphoto", function () {
|
||||
_center_overlay(), _resize_overlay();
|
||||
}),
|
||||
pp_settings.keyboard_shortcuts &&
|
||||
$(document)
|
||||
.unbind("keydown.prettyphoto")
|
||||
.bind("keydown.prettyphoto", function (e) {
|
||||
if (
|
||||
"undefined" != typeof $pp_pic_holder &&
|
||||
$pp_pic_holder.is(":visible")
|
||||
)
|
||||
switch (e.keyCode) {
|
||||
case 37:
|
||||
$.prettyPhoto.changePage("previous"), e.preventDefault();
|
||||
break;
|
||||
case 39:
|
||||
$.prettyPhoto.changePage("next"), e.preventDefault();
|
||||
break;
|
||||
case 27:
|
||||
settings.modal || $.prettyPhoto.close(), e.preventDefault();
|
||||
}
|
||||
}),
|
||||
($.prettyPhoto.initialize = function () {
|
||||
return (
|
||||
(settings = pp_settings),
|
||||
"pp_default" == settings.theme &&
|
||||
(settings.horizontal_padding = 16),
|
||||
(theRel = $(this).attr(settings.hook)),
|
||||
(galleryRegExp = /\[(?:.*)\]/),
|
||||
(isSet = galleryRegExp.exec(theRel) ? !0 : !1),
|
||||
(pp_images = isSet
|
||||
? jQuery.map(matchedObjects, function (n, i) {
|
||||
return -1 != $(n).attr(settings.hook).indexOf(theRel)
|
||||
? $(n).attr("href")
|
||||
: void 0;
|
||||
})
|
||||
: $.makeArray($(this).attr("href"))),
|
||||
(pp_titles = isSet
|
||||
? jQuery.map(matchedObjects, function (n, i) {
|
||||
return -1 != $(n).attr(settings.hook).indexOf(theRel)
|
||||
? $(n).find("img").attr("alt")
|
||||
? $(n).find("img").attr("alt")
|
||||
: ""
|
||||
: void 0;
|
||||
})
|
||||
: $.makeArray($(this).find("img").attr("alt"))),
|
||||
(pp_descriptions = isSet
|
||||
? jQuery.map(matchedObjects, function (n, i) {
|
||||
return -1 != $(n).attr(settings.hook).indexOf(theRel)
|
||||
? $(n).attr("title")
|
||||
? $(n).attr("title")
|
||||
: ""
|
||||
: void 0;
|
||||
})
|
||||
: $.makeArray($(this).attr("title"))),
|
||||
pp_images.length > settings.overlay_gallery_max &&
|
||||
(settings.overlay_gallery = !1),
|
||||
(set_position = jQuery.inArray($(this).attr("href"), pp_images)),
|
||||
(rel_index = isSet
|
||||
? set_position
|
||||
: $("a[" + settings.hook + "^='" + theRel + "']").index($(this))),
|
||||
_build_overlay(this),
|
||||
settings.allow_resize &&
|
||||
$(window).bind("scroll.prettyphoto", function () {
|
||||
_center_overlay();
|
||||
}),
|
||||
$.prettyPhoto.open(),
|
||||
!1
|
||||
);
|
||||
}),
|
||||
($.prettyPhoto.open = function (event) {
|
||||
return (
|
||||
"undefined" == typeof settings &&
|
||||
((settings = pp_settings),
|
||||
(pp_images = $.makeArray(arguments[0])),
|
||||
(pp_titles = arguments[1]
|
||||
? $.makeArray(arguments[1])
|
||||
: $.makeArray("")),
|
||||
(pp_descriptions = arguments[2]
|
||||
? $.makeArray(arguments[2])
|
||||
: $.makeArray("")),
|
||||
(isSet = pp_images.length > 1 ? !0 : !1),
|
||||
(set_position = arguments[3] ? arguments[3] : 0),
|
||||
_build_overlay(event.target)),
|
||||
settings.hideflash &&
|
||||
$("object,embed,iframe[src*=youtube],iframe[src*=vimeo]").css(
|
||||
"visibility",
|
||||
"hidden"
|
||||
),
|
||||
_checkPosition($(pp_images).size()),
|
||||
$(".pp_loaderIcon").show(),
|
||||
settings.deeplinking && setHashtag(),
|
||||
settings.social_tools &&
|
||||
((facebook_like_link = settings.social_tools.replace(
|
||||
"{location_href}",
|
||||
encodeURIComponent(location.href)
|
||||
)),
|
||||
$pp_pic_holder.find(".pp_social").html(facebook_like_link)),
|
||||
$ppt.is(":hidden") && $ppt.css("opacity", 0).show(),
|
||||
$pp_overlay
|
||||
.show()
|
||||
.fadeTo(settings.animation_speed, settings.opacity),
|
||||
$pp_pic_holder
|
||||
.find(".currentTextHolder")
|
||||
.text(
|
||||
set_position +
|
||||
1 +
|
||||
settings.counter_separator_label +
|
||||
$(pp_images).size()
|
||||
),
|
||||
"undefined" != typeof pp_descriptions[set_position] &&
|
||||
"" != pp_descriptions[set_position]
|
||||
? $pp_pic_holder
|
||||
.find(".pp_description")
|
||||
.show()
|
||||
.html(unescape(pp_descriptions[set_position]))
|
||||
: $pp_pic_holder.find(".pp_description").hide(),
|
||||
(movie_width = parseFloat(
|
||||
getParam("width", pp_images[set_position])
|
||||
)
|
||||
? getParam("width", pp_images[set_position])
|
||||
: settings.default_width.toString()),
|
||||
(movie_height = parseFloat(
|
||||
getParam("height", pp_images[set_position])
|
||||
)
|
||||
? getParam("height", pp_images[set_position])
|
||||
: settings.default_height.toString()),
|
||||
(percentBased = !1),
|
||||
-1 != movie_height.indexOf("%") &&
|
||||
((movie_height = parseFloat(
|
||||
($(window).height() * parseFloat(movie_height)) / 100 - 150
|
||||
)),
|
||||
(percentBased = !0)),
|
||||
-1 != movie_width.indexOf("%") &&
|
||||
((movie_width = parseFloat(
|
||||
($(window).width() * parseFloat(movie_width)) / 100 - 150
|
||||
)),
|
||||
(percentBased = !0)),
|
||||
$pp_pic_holder.fadeIn(function () {
|
||||
switch (
|
||||
(settings.show_title &&
|
||||
"" != pp_titles[set_position] &&
|
||||
"undefined" != typeof pp_titles[set_position]
|
||||
? $ppt.html(unescape(pp_titles[set_position]))
|
||||
: $ppt.html(" "),
|
||||
(imgPreloader = ""),
|
||||
(skipInjection = !1),
|
||||
_getFileType(pp_images[set_position]))
|
||||
) {
|
||||
case "image":
|
||||
(imgPreloader = new Image()),
|
||||
(nextImage = new Image()),
|
||||
isSet &&
|
||||
set_position < $(pp_images).size() - 1 &&
|
||||
(nextImage.src = pp_images[set_position + 1]),
|
||||
(prevImage = new Image()),
|
||||
isSet &&
|
||||
pp_images[set_position - 1] &&
|
||||
(prevImage.src = pp_images[set_position - 1]),
|
||||
($pp_pic_holder.find("#pp_full_res")[0].innerHTML =
|
||||
settings.image_markup.replace(
|
||||
/{path}/g,
|
||||
pp_images[set_position]
|
||||
)),
|
||||
(imgPreloader.onload = function () {
|
||||
(pp_dimensions = _fitToViewport(
|
||||
imgPreloader.width,
|
||||
imgPreloader.height
|
||||
)),
|
||||
_showContent();
|
||||
}),
|
||||
(imgPreloader.onerror = function () {
|
||||
alert(
|
||||
"Image cannot be loaded. Make sure the path is correct and image exist."
|
||||
),
|
||||
$.prettyPhoto.close();
|
||||
}),
|
||||
(imgPreloader.src = pp_images[set_position]);
|
||||
break;
|
||||
case "youtube":
|
||||
(pp_dimensions = _fitToViewport(movie_width, movie_height)),
|
||||
(movie_id = getParam("v", pp_images[set_position])),
|
||||
"" == movie_id &&
|
||||
((movie_id = pp_images[set_position].split("youtu.be/")),
|
||||
(movie_id = movie_id[1]),
|
||||
movie_id.indexOf("?") > 0 &&
|
||||
(movie_id = movie_id.substr(0, movie_id.indexOf("?"))),
|
||||
movie_id.indexOf("&") > 0 &&
|
||||
(movie_id = movie_id.substr(0, movie_id.indexOf("&")))),
|
||||
(movie = "http://www.youtube.com/embed/" + movie_id),
|
||||
getParam("rel", pp_images[set_position])
|
||||
? (movie +=
|
||||
"?rel=" + getParam("rel", pp_images[set_position]))
|
||||
: (movie += "?rel=1"),
|
||||
settings.autoplay && (movie += "&autoplay=1"),
|
||||
(toInject = settings.iframe_markup
|
||||
.replace(/{width}/g, pp_dimensions.width)
|
||||
.replace(/{height}/g, pp_dimensions.height)
|
||||
.replace(/{wmode}/g, settings.wmode)
|
||||
.replace(/{path}/g, movie));
|
||||
break;
|
||||
case "vimeo":
|
||||
(pp_dimensions = _fitToViewport(movie_width, movie_height)),
|
||||
(movie_id = pp_images[set_position]);
|
||||
var regExp = /http(s?):\/\/(www\.)?vimeo.com\/(\d+)/,
|
||||
match = movie_id.match(regExp);
|
||||
(movie =
|
||||
"http://player.vimeo.com/video/" +
|
||||
match[3] +
|
||||
"?title=0&byline=0&portrait=0"),
|
||||
settings.autoplay && (movie += "&autoplay=1;"),
|
||||
(vimeo_width =
|
||||
pp_dimensions.width +
|
||||
"/embed/?moog_width=" +
|
||||
pp_dimensions.width),
|
||||
(toInject = settings.iframe_markup
|
||||
.replace(/{width}/g, vimeo_width)
|
||||
.replace(/{height}/g, pp_dimensions.height)
|
||||
.replace(/{path}/g, movie));
|
||||
break;
|
||||
case "quicktime":
|
||||
(pp_dimensions = _fitToViewport(movie_width, movie_height)),
|
||||
(pp_dimensions.height += 15),
|
||||
(pp_dimensions.contentHeight += 15),
|
||||
(pp_dimensions.containerHeight += 15),
|
||||
(toInject = settings.quicktime_markup
|
||||
.replace(/{width}/g, pp_dimensions.width)
|
||||
.replace(/{height}/g, pp_dimensions.height)
|
||||
.replace(/{wmode}/g, settings.wmode)
|
||||
.replace(/{path}/g, pp_images[set_position])
|
||||
.replace(/{autoplay}/g, settings.autoplay));
|
||||
break;
|
||||
case "flash":
|
||||
(pp_dimensions = _fitToViewport(movie_width, movie_height)),
|
||||
(flash_vars = pp_images[set_position]),
|
||||
(flash_vars = flash_vars.substring(
|
||||
pp_images[set_position].indexOf("flashvars") + 10,
|
||||
pp_images[set_position].length
|
||||
)),
|
||||
(filename = pp_images[set_position]),
|
||||
(filename = filename.substring(0, filename.indexOf("?"))),
|
||||
(toInject = settings.flash_markup
|
||||
.replace(/{width}/g, pp_dimensions.width)
|
||||
.replace(/{height}/g, pp_dimensions.height)
|
||||
.replace(/{wmode}/g, settings.wmode)
|
||||
.replace(/{path}/g, filename + "?" + flash_vars));
|
||||
break;
|
||||
case "iframe":
|
||||
(pp_dimensions = _fitToViewport(movie_width, movie_height)),
|
||||
(frame_url = pp_images[set_position]),
|
||||
(frame_url = frame_url.substr(
|
||||
0,
|
||||
frame_url.indexOf("iframe") - 1
|
||||
)),
|
||||
(toInject = settings.iframe_markup
|
||||
.replace(/{width}/g, pp_dimensions.width)
|
||||
.replace(/{height}/g, pp_dimensions.height)
|
||||
.replace(/{path}/g, frame_url));
|
||||
break;
|
||||
case "ajax":
|
||||
(doresize = !1),
|
||||
(pp_dimensions = _fitToViewport(movie_width, movie_height)),
|
||||
(doresize = !0),
|
||||
(skipInjection = !0),
|
||||
$.get(pp_images[set_position], function (responseHTML) {
|
||||
(toInject = settings.inline_markup.replace(
|
||||
/{content}/g,
|
||||
responseHTML
|
||||
)),
|
||||
($pp_pic_holder.find("#pp_full_res")[0].innerHTML =
|
||||
toInject),
|
||||
_showContent();
|
||||
});
|
||||
break;
|
||||
case "custom":
|
||||
(pp_dimensions = _fitToViewport(movie_width, movie_height)),
|
||||
(toInject = settings.custom_markup);
|
||||
break;
|
||||
case "inline":
|
||||
(myClone = $(pp_images[set_position])
|
||||
.clone()
|
||||
.append('<br clear="all" />')
|
||||
.css({ width: settings.default_width })
|
||||
.wrapInner(
|
||||
'<div id="pp_full_res"><div class="pp_inline"></div></div>'
|
||||
)
|
||||
.appendTo($("body"))
|
||||
.show()),
|
||||
(doresize = !1),
|
||||
(pp_dimensions = _fitToViewport(
|
||||
$(myClone).width(),
|
||||
$(myClone).height()
|
||||
)),
|
||||
(doresize = !0),
|
||||
$(myClone).remove(),
|
||||
(toInject = settings.inline_markup.replace(
|
||||
/{content}/g,
|
||||
$(pp_images[set_position]).html()
|
||||
));
|
||||
}
|
||||
imgPreloader ||
|
||||
skipInjection ||
|
||||
(($pp_pic_holder.find("#pp_full_res")[0].innerHTML = toInject),
|
||||
_showContent());
|
||||
}),
|
||||
!1
|
||||
);
|
||||
}),
|
||||
($.prettyPhoto.changePage = function (direction) {
|
||||
(currentGalleryPage = 0),
|
||||
"previous" == direction
|
||||
? (set_position--,
|
||||
set_position < 0 && (set_position = $(pp_images).size() - 1))
|
||||
: "next" == direction
|
||||
? (set_position++,
|
||||
set_position > $(pp_images).size() - 1 && (set_position = 0))
|
||||
: (set_position = direction),
|
||||
(rel_index = set_position),
|
||||
doresize || (doresize = !0),
|
||||
settings.allow_expand &&
|
||||
$(".pp_contract")
|
||||
.removeClass("pp_contract")
|
||||
.addClass("pp_expand"),
|
||||
_hideContent(function () {
|
||||
$.prettyPhoto.open();
|
||||
});
|
||||
}),
|
||||
($.prettyPhoto.changeGalleryPage = function (direction) {
|
||||
"next" == direction
|
||||
? (currentGalleryPage++,
|
||||
currentGalleryPage > totalPage && (currentGalleryPage = 0))
|
||||
: "previous" == direction
|
||||
? (currentGalleryPage--,
|
||||
currentGalleryPage < 0 && (currentGalleryPage = totalPage))
|
||||
: (currentGalleryPage = direction),
|
||||
(slide_speed =
|
||||
"next" == direction || "previous" == direction
|
||||
? settings.animation_speed
|
||||
: 0),
|
||||
(slide_to = currentGalleryPage * (itemsPerPage * itemWidth)),
|
||||
$pp_gallery.find("ul").animate({ left: -slide_to }, slide_speed);
|
||||
}),
|
||||
($.prettyPhoto.startSlideshow = function () {
|
||||
"undefined" == typeof pp_slideshow
|
||||
? ($pp_pic_holder
|
||||
.find(".pp_play")
|
||||
.unbind("click")
|
||||
.removeClass("pp_play")
|
||||
.addClass("pp_pause")
|
||||
.click(function () {
|
||||
return $.prettyPhoto.stopSlideshow(), !1;
|
||||
}),
|
||||
(pp_slideshow = setInterval(
|
||||
$.prettyPhoto.startSlideshow,
|
||||
settings.slideshow
|
||||
)))
|
||||
: $.prettyPhoto.changePage("next");
|
||||
}),
|
||||
($.prettyPhoto.stopSlideshow = function () {
|
||||
$pp_pic_holder
|
||||
.find(".pp_pause")
|
||||
.unbind("click")
|
||||
.removeClass("pp_pause")
|
||||
.addClass("pp_play")
|
||||
.click(function () {
|
||||
return $.prettyPhoto.startSlideshow(), !1;
|
||||
}),
|
||||
clearInterval(pp_slideshow),
|
||||
(pp_slideshow = void 0);
|
||||
}),
|
||||
($.prettyPhoto.close = function () {
|
||||
$pp_overlay.is(":animated") ||
|
||||
($.prettyPhoto.stopSlideshow(),
|
||||
$pp_pic_holder
|
||||
.stop()
|
||||
.find("object,embed")
|
||||
.css("visibility", "hidden"),
|
||||
$("div.pp_pic_holder,div.ppt,.pp_fade").fadeOut(
|
||||
settings.animation_speed,
|
||||
function () {
|
||||
$(this).remove();
|
||||
}
|
||||
),
|
||||
$pp_overlay.fadeOut(settings.animation_speed, function () {
|
||||
settings.hideflash &&
|
||||
$("object,embed,iframe[src*=youtube],iframe[src*=vimeo]").css(
|
||||
"visibility",
|
||||
"visible"
|
||||
),
|
||||
$(this).remove(),
|
||||
$(window).unbind("scroll.prettyphoto"),
|
||||
clearHashtag(),
|
||||
settings.callback(),
|
||||
(doresize = !0),
|
||||
(pp_open = !1),
|
||||
delete settings;
|
||||
}));
|
||||
}),
|
||||
!pp_alreadyInitialized &&
|
||||
getHashtag() &&
|
||||
((pp_alreadyInitialized = !0),
|
||||
(hashIndex = getHashtag()),
|
||||
(hashRel = hashIndex),
|
||||
(hashIndex = hashIndex.substring(
|
||||
hashIndex.indexOf("/") + 1,
|
||||
hashIndex.length - 1
|
||||
)),
|
||||
(hashRel = hashRel.substring(0, hashRel.indexOf("/"))),
|
||||
setTimeout(function () {
|
||||
$(
|
||||
"a[" +
|
||||
pp_settings.hook +
|
||||
"^='" +
|
||||
hashRel +
|
||||
"']:eq(" +
|
||||
hashIndex +
|
||||
")"
|
||||
).trigger("click");
|
||||
}, 50)),
|
||||
this.unbind("click.prettyphoto").bind(
|
||||
"click.prettyphoto",
|
||||
$.prettyPhoto.initialize
|
||||
)
|
||||
);
|
||||
});
|
||||
})(jQuery);
|
||||
var pp_alreadyInitialized = !1;
|
||||
637
public/js/lightbox.js
Normal file
637
public/js/lightbox.js
Normal file
@@ -0,0 +1,637 @@
|
||||
/*!
|
||||
* Lightbox v2.11.4
|
||||
* by Lokesh Dhakar
|
||||
*
|
||||
* More info:
|
||||
* http://lokeshdhakar.com/projects/lightbox2/
|
||||
*
|
||||
* Copyright Lokesh Dhakar
|
||||
* Released under the MIT license
|
||||
* https://github.com/lokesh/lightbox2/blob/master/LICENSE
|
||||
*
|
||||
* @preserve
|
||||
*/
|
||||
|
||||
// Uses Node, AMD or browser globals to create a module.
|
||||
(function (root, factory) {
|
||||
if (typeof define === "function" && define.amd) {
|
||||
// AMD. Register as an anonymous module.
|
||||
define(["jquery"], factory);
|
||||
} else if (typeof exports === "object") {
|
||||
// Node. Does not work with strict CommonJS, but
|
||||
// only CommonJS-like environments that support module.exports,
|
||||
// like Node.
|
||||
module.exports = factory(require("jquery"));
|
||||
} else {
|
||||
// Browser globals (root is window)
|
||||
root.lightbox = factory(root.jQuery);
|
||||
}
|
||||
})(this, function ($) {
|
||||
function Lightbox(options) {
|
||||
this.album = [];
|
||||
this.currentImageIndex = void 0;
|
||||
this.init();
|
||||
|
||||
// options
|
||||
this.options = $.extend({}, this.constructor.defaults);
|
||||
this.option(options);
|
||||
}
|
||||
|
||||
// Descriptions of all options available on the demo site:
|
||||
// http://lokeshdhakar.com/projects/lightbox2/index.html#options
|
||||
Lightbox.defaults = {
|
||||
albumLabel: "Image %1 of %2",
|
||||
alwaysShowNavOnTouchDevices: false,
|
||||
fadeDuration: 600,
|
||||
fitImagesInViewport: true,
|
||||
imageFadeDuration: 600,
|
||||
// maxWidth: 800,
|
||||
// maxHeight: 600,
|
||||
positionFromTop: 50,
|
||||
resizeDuration: 700,
|
||||
showImageNumberLabel: true,
|
||||
wrapAround: false,
|
||||
disableScrolling: false,
|
||||
/*
|
||||
Sanitize Title
|
||||
If the caption data is trusted, for example you are hardcoding it in, then leave this to false.
|
||||
This will free you to add html tags, such as links, in the caption.
|
||||
|
||||
If the caption data is user submitted or from some other untrusted source, then set this to true
|
||||
to prevent xss and other injection attacks.
|
||||
*/
|
||||
sanitizeTitle: false,
|
||||
};
|
||||
|
||||
Lightbox.prototype.option = function (options) {
|
||||
$.extend(this.options, options);
|
||||
};
|
||||
|
||||
Lightbox.prototype.imageCountLabel = function (currentImageNum, totalImages) {
|
||||
return this.options.albumLabel
|
||||
.replace(/%1/g, currentImageNum)
|
||||
.replace(/%2/g, totalImages);
|
||||
};
|
||||
|
||||
Lightbox.prototype.init = function () {
|
||||
var self = this;
|
||||
// Both enable and build methods require the body tag to be in the DOM.
|
||||
$(document).ready(function () {
|
||||
self.enable();
|
||||
self.build();
|
||||
});
|
||||
};
|
||||
|
||||
// Loop through anchors and areamaps looking for either data-lightbox attributes or rel attributes
|
||||
// that contain 'lightbox'. When these are clicked, start lightbox.
|
||||
Lightbox.prototype.enable = function () {
|
||||
var self = this;
|
||||
$("body").on(
|
||||
"click",
|
||||
"a[rel^=lightbox], area[rel^=lightbox], a[data-lightbox], area[data-lightbox]",
|
||||
function (event) {
|
||||
self.start($(event.currentTarget));
|
||||
return false;
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
// Build html for the lightbox and the overlay.
|
||||
// Attach event handlers to the new DOM elements. click click click
|
||||
Lightbox.prototype.build = function () {
|
||||
if ($("#lightbox").length > 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
var self = this;
|
||||
|
||||
// The two root notes generated, #lightboxOverlay and #lightbox are given
|
||||
// tabindex attrs so they are focusable. We attach our keyboard event
|
||||
// listeners to these two elements, and not the document. Clicking anywhere
|
||||
// while Lightbox is opened will keep the focus on or inside one of these
|
||||
// two elements.
|
||||
//
|
||||
// We do this so we can prevent propogation of the Esc keypress when
|
||||
// Lightbox is open. This prevents it from intefering with other components
|
||||
// on the page below.
|
||||
//
|
||||
// Github issue: https://github.com/lokesh/lightbox2/issues/663
|
||||
$(
|
||||
'<div id="lightboxOverlay" tabindex="-1" class="lightboxOverlay"></div><div id="lightbox" tabindex="-1" class="lightbox"><div class="lb-outerContainer"><div class="lb-container"><img class="lb-image" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" alt=""/><div class="lb-nav"><a class="lb-prev" role="button" tabindex="0" aria-label="Previous image" href="" ></a><a class="lb-next" role="button" tabindex="0" aria-label="Next image" href="" ></a></div><div class="lb-loader"><a class="lb-cancel" role="button" tabindex="0"></a></div></div></div><div class="lb-dataContainer"><div class="lb-data"><div class="lb-details"><span class="lb-caption"></span><span class="lb-number"></span></div><div class="lb-closeContainer"><a class="lb-close" role="button" tabindex="0"></a></div></div></div></div>'
|
||||
).appendTo($("body"));
|
||||
|
||||
// Cache jQuery objects
|
||||
this.$lightbox = $("#lightbox");
|
||||
this.$overlay = $("#lightboxOverlay");
|
||||
this.$outerContainer = this.$lightbox.find(".lb-outerContainer");
|
||||
this.$container = this.$lightbox.find(".lb-container");
|
||||
this.$image = this.$lightbox.find(".lb-image");
|
||||
this.$nav = this.$lightbox.find(".lb-nav");
|
||||
|
||||
// Store css values for future lookup
|
||||
this.containerPadding = {
|
||||
top: parseInt(this.$container.css("padding-top"), 10),
|
||||
right: parseInt(this.$container.css("padding-right"), 10),
|
||||
bottom: parseInt(this.$container.css("padding-bottom"), 10),
|
||||
left: parseInt(this.$container.css("padding-left"), 10),
|
||||
};
|
||||
|
||||
this.imageBorderWidth = {
|
||||
top: parseInt(this.$image.css("border-top-width"), 10),
|
||||
right: parseInt(this.$image.css("border-right-width"), 10),
|
||||
bottom: parseInt(this.$image.css("border-bottom-width"), 10),
|
||||
left: parseInt(this.$image.css("border-left-width"), 10),
|
||||
};
|
||||
|
||||
// Attach event handlers to the newly minted DOM elements
|
||||
this.$overlay.hide().on("click", function () {
|
||||
self.end();
|
||||
return false;
|
||||
});
|
||||
|
||||
this.$lightbox.hide().on("click", function (event) {
|
||||
if ($(event.target).attr("id") === "lightbox") {
|
||||
self.end();
|
||||
}
|
||||
});
|
||||
|
||||
this.$outerContainer.on("click", function (event) {
|
||||
if ($(event.target).attr("id") === "lightbox") {
|
||||
self.end();
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
this.$lightbox.find(".lb-prev").on("click", function () {
|
||||
if (self.currentImageIndex === 0) {
|
||||
self.changeImage(self.album.length - 1);
|
||||
} else {
|
||||
self.changeImage(self.currentImageIndex - 1);
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
this.$lightbox.find(".lb-next").on("click", function () {
|
||||
if (self.currentImageIndex === self.album.length - 1) {
|
||||
self.changeImage(0);
|
||||
} else {
|
||||
self.changeImage(self.currentImageIndex + 1);
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
/*
|
||||
Show context menu for image on right-click
|
||||
|
||||
There is a div containing the navigation that spans the entire image and lives above of it. If
|
||||
you right-click, you are right clicking this div and not the image. This prevents users from
|
||||
saving the image or using other context menu actions with the image.
|
||||
|
||||
To fix this, when we detect the right mouse button is pressed down, but not yet clicked, we
|
||||
set pointer-events to none on the nav div. This is so that the upcoming right-click event on
|
||||
the next mouseup will bubble down to the image. Once the right-click/contextmenu event occurs
|
||||
we set the pointer events back to auto for the nav div so it can capture hover and left-click
|
||||
events as usual.
|
||||
*/
|
||||
this.$nav.on("mousedown", function (event) {
|
||||
if (event.which === 3) {
|
||||
self.$nav.css("pointer-events", "none");
|
||||
|
||||
self.$lightbox.one("contextmenu", function () {
|
||||
setTimeout(
|
||||
function () {
|
||||
this.$nav.css("pointer-events", "auto");
|
||||
}.bind(self),
|
||||
0
|
||||
);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
this.$lightbox
|
||||
.find(".lb-loader, .lb-close")
|
||||
.on("click keyup", function (e) {
|
||||
// If mouse click OR 'enter' or 'space' keypress, close LB
|
||||
if (
|
||||
e.type === "click" ||
|
||||
(e.type === "keyup" && (e.which === 13 || e.which === 32))
|
||||
) {
|
||||
self.end();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// Show overlay and lightbox. If the image is part of a set, add siblings to album array.
|
||||
Lightbox.prototype.start = function ($link) {
|
||||
var self = this;
|
||||
var $window = $(window);
|
||||
|
||||
$window.on("resize", $.proxy(this.sizeOverlay, this));
|
||||
|
||||
this.sizeOverlay();
|
||||
|
||||
this.album = [];
|
||||
var imageNumber = 0;
|
||||
|
||||
function addToAlbum($link) {
|
||||
self.album.push({
|
||||
alt: $link.attr("data-alt"),
|
||||
link: $link.attr("href"),
|
||||
title: $link.attr("data-title") || $link.attr("title"),
|
||||
});
|
||||
}
|
||||
|
||||
// Support both data-lightbox attribute and rel attribute implementations
|
||||
var dataLightboxValue = $link.attr("data-lightbox");
|
||||
var $links;
|
||||
|
||||
if (dataLightboxValue) {
|
||||
$links = $(
|
||||
$link.prop("tagName") + '[data-lightbox="' + dataLightboxValue + '"]'
|
||||
);
|
||||
for (var i = 0; i < $links.length; i = ++i) {
|
||||
addToAlbum($($links[i]));
|
||||
if ($links[i] === $link[0]) {
|
||||
imageNumber = i;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if ($link.attr("rel") === "lightbox") {
|
||||
// If image is not part of a set
|
||||
addToAlbum($link);
|
||||
} else {
|
||||
// If image is part of a set
|
||||
$links = $($link.prop("tagName") + '[rel="' + $link.attr("rel") + '"]');
|
||||
for (var j = 0; j < $links.length; j = ++j) {
|
||||
addToAlbum($($links[j]));
|
||||
if ($links[j] === $link[0]) {
|
||||
imageNumber = j;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Position Lightbox
|
||||
var top = $window.scrollTop() + this.options.positionFromTop;
|
||||
var left = $window.scrollLeft();
|
||||
this.$lightbox
|
||||
.css({
|
||||
top: top + "px",
|
||||
left: left + "px",
|
||||
})
|
||||
.fadeIn(this.options.fadeDuration);
|
||||
|
||||
// Disable scrolling of the page while open
|
||||
if (this.options.disableScrolling) {
|
||||
$("body").addClass("lb-disable-scrolling");
|
||||
}
|
||||
|
||||
this.changeImage(imageNumber);
|
||||
};
|
||||
|
||||
// Hide most UI elements in preparation for the animated resizing of the lightbox.
|
||||
Lightbox.prototype.changeImage = function (imageNumber) {
|
||||
var self = this;
|
||||
var filename = this.album[imageNumber].link;
|
||||
var filetype = filename.split(".").slice(-1)[0];
|
||||
var $image = this.$lightbox.find(".lb-image");
|
||||
|
||||
// Disable keyboard nav during transitions
|
||||
this.disableKeyboardNav();
|
||||
|
||||
// Show loading state
|
||||
this.$overlay.fadeIn(this.options.fadeDuration);
|
||||
$(".lb-loader").fadeIn("slow");
|
||||
this.$lightbox
|
||||
.find(
|
||||
".lb-image, .lb-nav, .lb-prev, .lb-next, .lb-dataContainer, .lb-numbers, .lb-caption"
|
||||
)
|
||||
.hide();
|
||||
this.$outerContainer.addClass("animating");
|
||||
|
||||
// When image to show is preloaded, we send the width and height to sizeContainer()
|
||||
var preloader = new Image();
|
||||
preloader.onload = function () {
|
||||
var $preloader;
|
||||
var imageHeight;
|
||||
var imageWidth;
|
||||
var maxImageHeight;
|
||||
var maxImageWidth;
|
||||
var windowHeight;
|
||||
var windowWidth;
|
||||
|
||||
$image.attr({
|
||||
alt: self.album[imageNumber].alt,
|
||||
src: filename,
|
||||
});
|
||||
|
||||
$preloader = $(preloader);
|
||||
|
||||
$image.width(preloader.width);
|
||||
$image.height(preloader.height);
|
||||
|
||||
var aspectRatio = preloader.width / preloader.height;
|
||||
|
||||
windowWidth = $(window).width();
|
||||
windowHeight = $(window).height();
|
||||
|
||||
// Calculate the max image dimensions for the current viewport.
|
||||
// Take into account the border around the image and an additional 10px gutter on each side.
|
||||
maxImageWidth =
|
||||
windowWidth -
|
||||
self.containerPadding.left -
|
||||
self.containerPadding.right -
|
||||
self.imageBorderWidth.left -
|
||||
self.imageBorderWidth.right -
|
||||
20;
|
||||
maxImageHeight =
|
||||
windowHeight -
|
||||
self.containerPadding.top -
|
||||
self.containerPadding.bottom -
|
||||
self.imageBorderWidth.top -
|
||||
self.imageBorderWidth.bottom -
|
||||
self.options.positionFromTop -
|
||||
70;
|
||||
|
||||
/*
|
||||
Since many SVGs have small intrinsic dimensions, but they support scaling
|
||||
up without quality loss because of their vector format, max out their
|
||||
size inside the viewport.
|
||||
*/
|
||||
if (filetype === "svg") {
|
||||
if (aspectRatio >= 1) {
|
||||
imageWidth = maxImageWidth;
|
||||
imageHeight = parseInt(maxImageWidth / aspectRatio, 10);
|
||||
} else {
|
||||
imageWidth = parseInt(maxImageHeight / aspectRatio, 10);
|
||||
imageHeight = maxImageHeight;
|
||||
}
|
||||
$image.width(imageWidth);
|
||||
$image.height(imageHeight);
|
||||
} else {
|
||||
// Fit image inside the viewport.
|
||||
if (self.options.fitImagesInViewport) {
|
||||
// Check if image size is larger then maxWidth|maxHeight in settings
|
||||
if (self.options.maxWidth && self.options.maxWidth < maxImageWidth) {
|
||||
maxImageWidth = self.options.maxWidth;
|
||||
}
|
||||
if (
|
||||
self.options.maxHeight &&
|
||||
self.options.maxHeight < maxImageHeight
|
||||
) {
|
||||
maxImageHeight = self.options.maxHeight;
|
||||
}
|
||||
} else {
|
||||
maxImageWidth =
|
||||
self.options.maxWidth || preloader.width || maxImageWidth;
|
||||
maxImageHeight =
|
||||
self.options.maxHeight || preloader.height || maxImageHeight;
|
||||
}
|
||||
|
||||
// Is the current image's width or height is greater than the maxImageWidth or maxImageHeight
|
||||
// option than we need to size down while maintaining the aspect ratio.
|
||||
if (
|
||||
preloader.width > maxImageWidth ||
|
||||
preloader.height > maxImageHeight
|
||||
) {
|
||||
if (
|
||||
preloader.width / maxImageWidth >
|
||||
preloader.height / maxImageHeight
|
||||
) {
|
||||
imageWidth = maxImageWidth;
|
||||
imageHeight = parseInt(
|
||||
preloader.height / (preloader.width / imageWidth),
|
||||
10
|
||||
);
|
||||
$image.width(imageWidth);
|
||||
$image.height(imageHeight);
|
||||
} else {
|
||||
imageHeight = maxImageHeight;
|
||||
imageWidth = parseInt(
|
||||
preloader.width / (preloader.height / imageHeight),
|
||||
10
|
||||
);
|
||||
$image.width(imageWidth);
|
||||
$image.height(imageHeight);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
self.sizeContainer($image.width(), $image.height());
|
||||
};
|
||||
|
||||
// Preload image before showing
|
||||
preloader.src = this.album[imageNumber].link;
|
||||
this.currentImageIndex = imageNumber;
|
||||
};
|
||||
|
||||
// Stretch overlay to fit the viewport
|
||||
Lightbox.prototype.sizeOverlay = function () {
|
||||
var self = this;
|
||||
/*
|
||||
We use a setTimeout 0 to pause JS execution and let the rendering catch-up.
|
||||
Why do this? If the `disableScrolling` option is set to true, a class is added to the body
|
||||
tag that disables scrolling and hides the scrollbar. We want to make sure the scrollbar is
|
||||
hidden before we measure the document width, as the presence of the scrollbar will affect the
|
||||
number.
|
||||
*/
|
||||
setTimeout(function () {
|
||||
self.$overlay.width($(document).width()).height($(document).height());
|
||||
}, 0);
|
||||
};
|
||||
|
||||
// Animate the size of the lightbox to fit the image we are showing
|
||||
// This method also shows the the image.
|
||||
Lightbox.prototype.sizeContainer = function (imageWidth, imageHeight) {
|
||||
var self = this;
|
||||
|
||||
var oldWidth = this.$outerContainer.outerWidth();
|
||||
var oldHeight = this.$outerContainer.outerHeight();
|
||||
var newWidth =
|
||||
imageWidth +
|
||||
this.containerPadding.left +
|
||||
this.containerPadding.right +
|
||||
this.imageBorderWidth.left +
|
||||
this.imageBorderWidth.right;
|
||||
var newHeight =
|
||||
imageHeight +
|
||||
this.containerPadding.top +
|
||||
this.containerPadding.bottom +
|
||||
this.imageBorderWidth.top +
|
||||
this.imageBorderWidth.bottom;
|
||||
|
||||
function postResize() {
|
||||
self.$lightbox.find(".lb-dataContainer").width(newWidth);
|
||||
self.$lightbox.find(".lb-prevLink").height(newHeight);
|
||||
self.$lightbox.find(".lb-nextLink").height(newHeight);
|
||||
|
||||
// Set focus on one of the two root nodes so keyboard events are captured.
|
||||
self.$overlay.trigger("focus");
|
||||
|
||||
self.showImage();
|
||||
}
|
||||
|
||||
if (oldWidth !== newWidth || oldHeight !== newHeight) {
|
||||
this.$outerContainer.animate(
|
||||
{
|
||||
width: newWidth,
|
||||
height: newHeight,
|
||||
},
|
||||
this.options.resizeDuration,
|
||||
"swing",
|
||||
function () {
|
||||
postResize();
|
||||
}
|
||||
);
|
||||
} else {
|
||||
postResize();
|
||||
}
|
||||
};
|
||||
|
||||
// Display the image and its details and begin preload neighboring images.
|
||||
Lightbox.prototype.showImage = function () {
|
||||
this.$lightbox.find(".lb-loader").stop(true).hide();
|
||||
this.$lightbox.find(".lb-image").fadeIn(this.options.imageFadeDuration);
|
||||
|
||||
this.updateNav();
|
||||
this.updateDetails();
|
||||
this.preloadNeighboringImages();
|
||||
this.enableKeyboardNav();
|
||||
};
|
||||
|
||||
// Display previous and next navigation if appropriate.
|
||||
Lightbox.prototype.updateNav = function () {
|
||||
// Check to see if the browser supports touch events. If so, we take the conservative approach
|
||||
// and assume that mouse hover events are not supported and always show prev/next navigation
|
||||
// arrows in image sets.
|
||||
var alwaysShowNav = false;
|
||||
try {
|
||||
document.createEvent("TouchEvent");
|
||||
alwaysShowNav = this.options.alwaysShowNavOnTouchDevices ? true : false;
|
||||
} catch (e) {}
|
||||
|
||||
this.$lightbox.find(".lb-nav").show();
|
||||
|
||||
if (this.album.length > 1) {
|
||||
if (this.options.wrapAround) {
|
||||
if (alwaysShowNav) {
|
||||
this.$lightbox.find(".lb-prev, .lb-next").css("opacity", "1");
|
||||
}
|
||||
this.$lightbox.find(".lb-prev, .lb-next").show();
|
||||
} else {
|
||||
if (this.currentImageIndex > 0) {
|
||||
this.$lightbox.find(".lb-prev").show();
|
||||
if (alwaysShowNav) {
|
||||
this.$lightbox.find(".lb-prev").css("opacity", "1");
|
||||
}
|
||||
}
|
||||
if (this.currentImageIndex < this.album.length - 1) {
|
||||
this.$lightbox.find(".lb-next").show();
|
||||
if (alwaysShowNav) {
|
||||
this.$lightbox.find(".lb-next").css("opacity", "1");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// Display caption, image number, and closing button.
|
||||
Lightbox.prototype.updateDetails = function () {
|
||||
var self = this;
|
||||
|
||||
// Enable anchor clicks in the injected caption html.
|
||||
// Thanks Nate Wright for the fix. @https://github.com/NateWr
|
||||
if (
|
||||
typeof this.album[this.currentImageIndex].title !== "undefined" &&
|
||||
this.album[this.currentImageIndex].title !== ""
|
||||
) {
|
||||
var $caption = this.$lightbox.find(".lb-caption");
|
||||
if (this.options.sanitizeTitle) {
|
||||
$caption.text(this.album[this.currentImageIndex].title);
|
||||
} else {
|
||||
$caption.html(this.album[this.currentImageIndex].title);
|
||||
}
|
||||
$caption.fadeIn("fast");
|
||||
}
|
||||
|
||||
if (this.album.length > 1 && this.options.showImageNumberLabel) {
|
||||
var labelText = this.imageCountLabel(
|
||||
this.currentImageIndex + 1,
|
||||
this.album.length
|
||||
);
|
||||
this.$lightbox.find(".lb-number").text(labelText).fadeIn("fast");
|
||||
} else {
|
||||
this.$lightbox.find(".lb-number").hide();
|
||||
}
|
||||
|
||||
this.$outerContainer.removeClass("animating");
|
||||
|
||||
this.$lightbox
|
||||
.find(".lb-dataContainer")
|
||||
.fadeIn(this.options.resizeDuration, function () {
|
||||
return self.sizeOverlay();
|
||||
});
|
||||
};
|
||||
|
||||
// Preload previous and next images in set.
|
||||
Lightbox.prototype.preloadNeighboringImages = function () {
|
||||
if (this.album.length > this.currentImageIndex + 1) {
|
||||
var preloadNext = new Image();
|
||||
preloadNext.src = this.album[this.currentImageIndex + 1].link;
|
||||
}
|
||||
if (this.currentImageIndex > 0) {
|
||||
var preloadPrev = new Image();
|
||||
preloadPrev.src = this.album[this.currentImageIndex - 1].link;
|
||||
}
|
||||
};
|
||||
|
||||
Lightbox.prototype.enableKeyboardNav = function () {
|
||||
this.$lightbox.on("keyup.keyboard", $.proxy(this.keyboardAction, this));
|
||||
this.$overlay.on("keyup.keyboard", $.proxy(this.keyboardAction, this));
|
||||
};
|
||||
|
||||
Lightbox.prototype.disableKeyboardNav = function () {
|
||||
this.$lightbox.off(".keyboard");
|
||||
this.$overlay.off(".keyboard");
|
||||
};
|
||||
|
||||
Lightbox.prototype.keyboardAction = function (event) {
|
||||
var KEYCODE_ESC = 27;
|
||||
var KEYCODE_LEFTARROW = 37;
|
||||
var KEYCODE_RIGHTARROW = 39;
|
||||
|
||||
var keycode = event.keyCode;
|
||||
if (keycode === KEYCODE_ESC) {
|
||||
// Prevent bubbling so as to not affect other components on the page.
|
||||
event.stopPropagation();
|
||||
this.end();
|
||||
} else if (keycode === KEYCODE_LEFTARROW) {
|
||||
if (this.currentImageIndex !== 0) {
|
||||
this.changeImage(this.currentImageIndex - 1);
|
||||
} else if (this.options.wrapAround && this.album.length > 1) {
|
||||
this.changeImage(this.album.length - 1);
|
||||
}
|
||||
} else if (keycode === KEYCODE_RIGHTARROW) {
|
||||
if (this.currentImageIndex !== this.album.length - 1) {
|
||||
this.changeImage(this.currentImageIndex + 1);
|
||||
} else if (this.options.wrapAround && this.album.length > 1) {
|
||||
this.changeImage(0);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// Closing time. :-(
|
||||
Lightbox.prototype.end = function () {
|
||||
this.disableKeyboardNav();
|
||||
$(window).off("resize", this.sizeOverlay);
|
||||
this.$lightbox.fadeOut(this.options.fadeDuration);
|
||||
this.$overlay.fadeOut(this.options.fadeDuration);
|
||||
|
||||
if (this.options.disableScrolling) {
|
||||
$("body").removeClass("lb-disable-scrolling");
|
||||
}
|
||||
};
|
||||
|
||||
return new Lightbox();
|
||||
});
|
||||
1447
public/js/modernizr.js
Normal file
1447
public/js/modernizr.js
Normal file
File diff suppressed because it is too large
Load Diff
2054
public/js/owl.carousel.min.js
vendored
Normal file
2054
public/js/owl.carousel.min.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
126
public/js/retina.min.js
vendored
Normal file
126
public/js/retina.min.js
vendored
Normal file
@@ -0,0 +1,126 @@
|
||||
/*!
|
||||
* Retina.js v1.3.0
|
||||
*
|
||||
* Copyright 2014 Imulus, LLC
|
||||
* Released under the MIT license
|
||||
*
|
||||
* Retina.js is an open source script that makes it easy to serve
|
||||
* high-resolution images to devices with retina displays.
|
||||
*/
|
||||
!(function () {
|
||||
function a() {}
|
||||
function b(a) {
|
||||
return f.retinaImageSuffix + a;
|
||||
}
|
||||
function c(a, c) {
|
||||
if (((this.path = a || ""), "undefined" != typeof c && null !== c))
|
||||
(this.at_2x_path = c), (this.perform_check = !1);
|
||||
else {
|
||||
if (void 0 !== document.createElement) {
|
||||
var d = document.createElement("a");
|
||||
(d.href = this.path),
|
||||
(d.pathname = d.pathname.replace(g, b)),
|
||||
(this.at_2x_path = d.href);
|
||||
} else {
|
||||
var e = this.path.split("?");
|
||||
(e[0] = e[0].replace(g, b)), (this.at_2x_path = e.join("?"));
|
||||
}
|
||||
this.perform_check = !0;
|
||||
}
|
||||
}
|
||||
function d(a) {
|
||||
(this.el = a),
|
||||
(this.path = new c(
|
||||
this.el.getAttribute("src"),
|
||||
this.el.getAttribute("data-at2x")
|
||||
));
|
||||
var b = this;
|
||||
this.path.check_2x_variant(function (a) {
|
||||
a && b.swap();
|
||||
});
|
||||
}
|
||||
var e = "undefined" == typeof exports ? window : exports,
|
||||
f = {
|
||||
retinaImageSuffix: "@2x",
|
||||
check_mime_type: !0,
|
||||
force_original_dimensions: !0,
|
||||
};
|
||||
(e.Retina = a),
|
||||
(a.configure = function (a) {
|
||||
null === a && (a = {});
|
||||
for (var b in a) a.hasOwnProperty(b) && (f[b] = a[b]);
|
||||
}),
|
||||
(a.init = function (a) {
|
||||
null === a && (a = e);
|
||||
var b = a.onload || function () {};
|
||||
a.onload = function () {
|
||||
var a,
|
||||
c,
|
||||
e = document.getElementsByTagName("img"),
|
||||
f = [];
|
||||
for (a = 0; a < e.length; a += 1)
|
||||
(c = e[a]), c.getAttributeNode("data-no-retina") || f.push(new d(c));
|
||||
b();
|
||||
};
|
||||
}),
|
||||
(a.isRetina = function () {
|
||||
var a =
|
||||
"(-webkit-min-device-pixel-ratio: 1.5), (min--moz-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3/2), (min-resolution: 1.5dppx)";
|
||||
return e.devicePixelRatio > 1
|
||||
? !0
|
||||
: e.matchMedia && e.matchMedia(a).matches
|
||||
? !0
|
||||
: !1;
|
||||
});
|
||||
var g = /\.\w+$/;
|
||||
(e.RetinaImagePath = c),
|
||||
(c.confirmed_paths = []),
|
||||
(c.prototype.is_external = function () {
|
||||
return !(
|
||||
!this.path.match(/^https?\:/i) ||
|
||||
this.path.match("//" + document.domain)
|
||||
);
|
||||
}),
|
||||
(c.prototype.check_2x_variant = function (a) {
|
||||
var b,
|
||||
d = this;
|
||||
return this.is_external()
|
||||
? a(!1)
|
||||
: this.perform_check ||
|
||||
"undefined" == typeof this.at_2x_path ||
|
||||
null === this.at_2x_path
|
||||
? this.at_2x_path in c.confirmed_paths
|
||||
? a(!0)
|
||||
: ((b = new XMLHttpRequest()),
|
||||
b.open("HEAD", this.at_2x_path),
|
||||
(b.onreadystatechange = function () {
|
||||
if (4 !== b.readyState) return a(!1);
|
||||
if (b.status >= 200 && b.status <= 399) {
|
||||
if (f.check_mime_type) {
|
||||
var e = b.getResponseHeader("Content-Type");
|
||||
if (null === e || !e.match(/^image/i)) return a(!1);
|
||||
}
|
||||
return c.confirmed_paths.push(d.at_2x_path), a(!0);
|
||||
}
|
||||
return a(!1);
|
||||
}),
|
||||
b.send(),
|
||||
void 0)
|
||||
: a(!0);
|
||||
}),
|
||||
(e.RetinaImage = d),
|
||||
(d.prototype.swap = function (a) {
|
||||
function b() {
|
||||
c.el.complete
|
||||
? (f.force_original_dimensions &&
|
||||
(c.el.setAttribute("width", c.el.offsetWidth),
|
||||
c.el.setAttribute("height", c.el.offsetHeight)),
|
||||
c.el.setAttribute("src", a))
|
||||
: setTimeout(b, 5);
|
||||
}
|
||||
"undefined" == typeof a && (a = this.path.at_2x_path);
|
||||
var c = this;
|
||||
b();
|
||||
}),
|
||||
a.isRetina() && a.init(e);
|
||||
})();
|
||||
Reference in New Issue
Block a user