A fork of the Icarus Imeji Uploader Service tweaked for better compatibility on Caddy webserver.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
IcarusImeji-Caddy/deprecated/script2.js

4686 lines
223 KiB

/**
* Peafowl JS
* Copyright 2014 Rodolfo Berrios <www.rodolfoberrios.com>
*/
/**
* Peafowl DOM functions and event listeners
*/
$(function(){
$.ajaxSetup({
"url": PF.obj.config.json_api,
"cache": false,
"dataType": "json",
"data": {auth_token: PF.obj.config.auth_token}
});
/**
* WINDOW LISTENERS
* -------------------------------------------------------------------------------------------------
*/
$(window).bind("beforeunload",function(){
if($("form", PF.obj.modal.selectors.root).data("beforeunload") == "continue") return;
if($(PF.obj.modal.selectors.root).is(":visible") && PF.fn.form_modal_has_changed()) {
return PF.fn._s("All the changes that you have made will be lost if you continue.");
}
});
$(window).bind("hashchange", function(){
// Call edit modal on #edit
if(window.location.hash=="#edit" && !$(PF.obj.modal.selectors.root).exists()) $("[data-modal=edit]").first().click();
});
// Blind the tipTips on load
PF.fn.bindtipTip();
var resizeTimer, scrollTimer, width = $(window).width();
// Fluid width on resize
$(window).on("resize", function(){
PF.fn.growl.fixPosition();
PF.fn.modal.fixScrollbars();
var device = PF.fn.getDeviceName(),
handled = ["phone", "phablet"],
desktop = ["tablet", "laptop", "desktop"];
clearTimeout(resizeTimer);
clearTimeout(scrollTimer);
scrollTimer = setTimeout(function() {
PF.obj.follow_scroll.set();
}, 100);
//PF.fn.window_to_device(); // handled by window event parent
var new_device = PF.fn.getDeviceName();
if(new_device !== device && ($.inArray(device, handled) >= 0 && $.inArray(new_device, handled) == -1) || ($.inArray(device, desktop) >= 0 && $.inArray(new_device, desktop) == -1)) {
PF.fn.close_pops();
}
$(".top-bar").css("top", "");
$(PF.fn.topMenu.vars.menu).css("height", $(window).height());
$("body").css({position: "", height: ""});
$(".antiscroll").removeClass("jsly").data("antiscroll", ""); // Destroy for this?
$(".antiscroll-inner").css({height: "", width: "", maxheight: ""}); // .pop-box, .pop-box-inner ?
PF.fn.list_fluid_width();
if(width !== $(window).width()) {
if($("[data-action=top-bar-menu-full]", "#top-bar").hasClass("current")) {
PF.fn.topMenu.hide(0);
}
var cols_fn = function() {
PF.fn.listing.columnizer(true, 0);
$(PF.obj.listing.selectors.list_item).show();
};
cols_fn();
}
width = $(window).width();
PF.obj.follow_scroll.process();
});
// Close the opened pop-boxes on HTML click
$(document).on("click", "html", function(){
PF.fn.close_pops();
});
/**
* SMALL HELPERS AND THINGS
* -------------------------------------------------------------------------------------------------
*/
// Attemp to replace .svg with .png for browsers that doesn't support it
if($("html").hasClass("no-svg")){
$("img.replace-svg").replace_svg();
}
// Keydown numeric input (prevents non numeric keys)
$(document).on("keydown", ".numeric-input", function(e){
e.keydown_numeric();
});
// The handly data-scrollto. IT will scroll the elements to the target
$(document).on("click", "[data-scrollto]", function(e) {
var target = $(this).data("scrollto"),
$target = $(!target.match(/^\#|\./) ? "#"+target : target);
if($target.exists()) {
PF.fn.scroll($target);
} else {
console.log("PF scrollto error: target doesn't exists", $target);
}
});
// The handly data-trigger. It will trigger click for elements with data-trigger
$(document).on("click", "[data-trigger]", function(e) {
var trigger = $(this).data("trigger"),
$target = $(!trigger.match(/^\#|\./) ? "#"+trigger : trigger);
if($target.exists()) {
e.stopPropagation();
e.preventDefault();
if(!$target.closest(PF.obj.modal.selectors.root).length) {
PF.fn.modal.close();
}
$target.click();
} else {
console.log("PF trigger error: target doesn't exists", $target);
}
});
// Fix the auth_token inputs
$("form[method=post]").each(function() {
if(!$("input[name=auth_token]", this).exists()) {
$(this).append($('<input>', {type: 'hidden', name: "auth_token", value: PF.obj.config.auth_token}));
}
});
// Clear form like magic
$(document).on("click", ".clear-form", function(){
$(this).closest("form")[0].reset();
});
$(document).on("submit", "form[data-action=validate]", function(e) {
var type = $(this).data("type"),
errors = false,
$validate = $(this).find("[required], [data-validate]");
$validate.each(function() {
var input_type = $(this).attr("type"),
pattern = $(this).attr("pattern"),
errorFn = function(el) {
$(el).highlight();
errors = true;
};
if($(this).is("[required]") && $(this).val() == "") {
if($(this).is(":hidden")) {
var $hidden_target = $($($(this).data("highlight")).exists() ? $(this).data("highlight") : "#" + $(this).data("highlight"));
$($hidden_target).highlight();
}
errorFn(this);
}
if(typeof pattern == "undefined" && /mail|url/.test(input_type) == false) {
return true;
}
if(pattern) {
pattern = new RegExp(pattern);
if(!pattern.test($(this).val())) {
errorFn(this);
}
}
if(input_type == "email" && !$(this).val().isEmail()) {
errorFn(this);
}
});
if(errors) {
PF.fn.growl.expirable(PF.fn._s("Check the errors in the form to continue."));
return false;
}
});
// Co-combo breaker
$(document).on("change", "select[data-combo]", function(){
var $combo = $("#"+$(this).data("combo"));
if($combo.exists()) {
$combo.children(".switch-combo").hide();
}
var $combo_container = $("#" + $(this).closest("select").data("combo")),
$combo_target = $("[data-combo-value~=" + $("option:selected", this).attr("value") + "]", $combo_container);
if($combo_target.exists()){
$combo_target
.show()
.find("[data-required]")
.each(function() {
$(this).attr("required", "required"); // re-enable any disabled required
});
}
// Disable [required] in hidden combos
$(".switch-combo", $combo_container).each(function() {
if($(this).is(":visible")) return;
$("[required]", this).attr("data-required", true).removeAttr("required");
});
});
// Y COMO DICE: ESCAPE FROM THE PLANET OF THE APES
$(document).on("keyup", function(e) {
$this = $(e.target);
if(e.keyCode == 27) {
if($(PF.obj.modal.selectors.root).is(":visible") && !$this.is(":input")) {
$("[data-action=cancel],[data-action=close-modal]", PF.obj.modal.selectors.root).first().click();
}
}
});
// Input events
$(document).on("change", ":input", function(e){
PF.fn.growl.close();
});
$(document).on("keyup", ":input", function(e){
$(".input-warning", $(this).closest(".input-label")).html("");
});
$(document).on("blur", ":input", function(){
var this_val = $.trim($(this).prop("value"));
$(this).prop("value", this_val);
});
// Select all on an input type
$(document).on("click", ":input[data-focus=select-all]", function() {
this.select();
});
// Input password strength
$(document).on("keyup change blur", ":input[type=password]", function(){
var password = testPassword($(this).val()),
$parent = $(this).closest("div");
if($(this).val() == "") {
password.percent = 0;
password.verdict = "";
}
$("[data-content=password-meter-bar]", $parent).width(password.percent);
$("[data-text=password-meter-message]", $parent).removeClass("red-warning").text(password.verdict !== "" ? PF.fn._s(password.verdict) : "");
});
// Popup links
$(document).on("click", "[rel=popup-link], .popup-link", function(e){
e.preventDefault();
var href = $(this)[typeof $(this).attr("href") !== "undefined" ? "attr" : "data"]("href");
if(typeof href == "undefined") {
return;
}
if(href.substring(0, 6) == "mailto" && PF.fn.isDevice(["phone", "phablet"])) {
window.location = href;
return false;
}
PF.fn.popup({href: href});
});
/**
* FOWLLOW SCROLL
* -------------------------------------------------------------------------------------------------
*/
$(window).scroll(function(){
PF.obj.follow_scroll.process(); // todo:optimize
});
/**
* MODAL
* -------------------------------------------------------------------------------------------------
*/
// Call plain simple HTML modal
$(document).on("click", "[data-modal=simple],[data-modal=html]", function(){
var $target = $("[data-modal=" + $(this).data("target") + "], #"+$(this).data("target")).first();
PF.fn.modal.call({template: $target.html(), buttons: false});
});
// Prevent modal submit form since we only use the form in the modal to trigger HTML5 validation
$(document).on("submit", PF.obj.modal.selectors.root + " form", function(e){
if($(this).data("prevented")) return false; // Don't send the form if is prevented
if(typeof $(this).attr("method") !== "undefined") return; // Don't bind anything extra if is normal form
return false; // Prevent default form handling
});
// Form/editable/confirm modal
$(document).on("click", "[data-modal=edit],[data-modal=form],[data-confirm]", function(e){
e.preventDefault();
var $this = $(this),
$target, submit_function, cancel_function, onload_function, submit_done_msg;
if($this.is("[data-confirm]")) {
$target = $this;
PF.obj.modal.type = "confirm";
} else {
$target = $("[data-modal=" + $this.data("target") + "], #"+$this.data("target")).first();
if($target.length == 0) {
$target = $("[data-modal=form-modal], #form-modal").first();
}
if($target.length == 0) {
console.log("PF Error: Modal target doesn't exists.");
}
PF.obj.modal.type = $this.data("modal");
}
var args = $this.data("args"),
submit_function = window[$target.data("submit-fn")],
cancel_function = window[$target.data("cancel-fn")],
onload_function = window[$target.data("load-fn")],
submit_done_msg = $target.data("submit-done"),
ajax = {
url: $target.data("ajax-url"),
deferred: window[$target.data("ajax-deferred")]
};
// Window functions failed? Maybe those are named fn...
if(typeof submit_function !== "function" && $target.data("submit-fn")) {
var submit_fn_split = $target.data("submit-fn").split(".");
submit_function = window;
for(var i=0; i<submit_fn_split.length; i++) {
submit_function = submit_function[submit_fn_split[i]];
}
}
if(typeof cancel_function !== "function" && $target.data("cancel-fn")) {
var cancel_fn_split = $target.data("cancel-fn").split(".");
cancel_function = window;
for(var i=0; i<cancel_fn_split.length; i++) {
cancel_function = cancel_function[cancel_fn_split[i]];
}
}
if(typeof load_function !== "function" && $target.data("load-fn")) {
var load_fn_split = $target.data("load-fn").split(".");
load_function = window;
for(var i=0; i<load_fn_split.length; i++) {
load_function = load_function[load_fn_split[i]];
}
}
if(typeof ajax.deferred !== "object" && $target.data("ajax-deferred")) {
var deferred_obj_split = $target.data("ajax-deferred").split(".");
ajax.deferred = window;
for(var i=0; i<deferred_obj_split.length; i++) {
ajax.deferred = ajax.deferred[deferred_obj_split[i]];
}
}
// Before fn
var fn_before = window[$target.data("before-fn")];
if(typeof fn_before !== "function" && $target.data("before-fn")) {
var before_obj_split = $target.data("before-fn").split(".");
fn_before = window;
for(var i=0; i<before_obj_split.length; i++) {
fn_before = fn_before[before_obj_split[i]];
}
}
if(typeof fn_before == "function") {
fn_before(e);
}
var inline_options = $(this).data("options") || {};
// Confirm modal
if($this.is("[data-confirm]")) {
var default_options = {
message: $this.data("confirm"),
confirm: typeof submit_function == "function" ? submit_function(args) : "",
cancel: typeof cancel_function == "function" ? cancel_function(args) : "",
ajax: ajax
};
if($this.attr("href") && default_options.confirm == "") {
default_options.confirm = function() {
return window.location.replace($this.attr("href"));
}
}
PF.fn.modal.confirm($.extend(default_options, inline_options));
} else { // Form/editable
var default_options = {
template: $target.html(),
button_submit: $(this).is("[data-modal=edit]") ? PF.fn._s("Save changes") : PF.fn._s("Submit"),
confirm: function() {
var form_modal_has_changed = PF.fn.form_modal_has_changed();
// Conventional form handling
var $form = $("form", PF.obj.modal.selectors.root);
if(typeof $form.attr("action") !== "undefined") {
$form.data("prevented", !form_modal_has_changed);
PF.fn.modal.close();
return;
}
// Handle the required thing for non-visible elements
$(":input[name]", $form).each(function() {
if(!$(this).is(":visible")) {
var input_attr = $(this).attr("required");
if(typeof input_attr !== typeof undefined && input_attr !== false) {
$(this).prop("required", false).attr("data-required", "required");
}
} else {
if($(this).attr("data-required") == "required") {
$(this).prop("required", true);
}
}
});
// Detect HTML5 validation
if(!$form[0].checkValidity()) {
return false;
}
// Run the full function only when the form changes
if(!form_modal_has_changed && !inline_options.forced) {
PF.fn.modal.close();
return;
}
if(typeof submit_function == "function") submit_fn = submit_function();
if(typeof submit_fn !== "undefined" && submit_fn == false) {
return false;
}
$(":input", PF.obj.modal.selectors.root).each(function(){
$(this).val($.trim($(this).val()));
});
if($this.is("[data-modal=edit]")) {
// Set the input values before cloning the html
$target.html($(PF.obj.modal.selectors.body, $(PF.obj.modal.selectors.root).bindFormData()).html().replace(/rel=[\'"]tooltip[\'"]/g, 'rel="template-tooltip"'));
}
if(typeof ajax.url !== "undefined") {
return true;
} else {
PF.fn.modal.close(
function(){
if(typeof submit_done_msg !== "undefined"){
PF.fn.growl.expirable(submit_done_msg !== "" ? submit_done_msg : PF.fn._s("Changes saved successfully."));
}
}
);
}
},
cancel: function() {
if(typeof cancel_fn == "function") cancel_fn = cancel_fn();
if(typeof cancel_fn !== "undefined" && cancel_fn == false) {
return false;
}
// nota: falta template aca
if(PF.fn.form_modal_has_changed()) {
if($(PF.obj.modal.selectors.changes_confirm).exists()) return;
$(PF.obj.modal.selectors.box, PF.obj.modal.selectors.root).css({transition: "none"}).hide();
$(PF.obj.modal.selectors.root).append('<div id="'+PF.obj.modal.selectors.changes_confirm.replace("#", "")+'"><div class="content-width"><h2>'+PF.fn._s("All the changes that you have made will be lost if you continue.")+'</h2><div class="'+ PF.obj.modal.selectors.btn_container.replace(".", "") +' margin-bottom-0"><button class="btn btn-input default" data-action="cancel">'+PF.fn._s("Go back to form")+'</button> <span class="btn-alt">'+PF.fn._s("or")+' <a data-action="submit">'+PF.fn._s("continue anyway")+'</a></span></div></div>');
$(PF.obj.modal.selectors.changes_confirm).css("margin-top", -$(PF.obj.modal.selectors.changes_confirm).outerHeight(true)/2).hide().fadeIn("fast");
} else {
PF.fn.modal.close();
if(window.location.hash=="#edit") window.location.hash = "";
}
},
load: function() {
if(typeof load_function == "function") load_function();
},
callback: function(){},
ajax: ajax
};
PF.fn.modal.call($.extend(default_options, inline_options));
}
});
// Check user login modal -> Must be login to continue
if(!PF.fn.is_user_logged()){
$("[data-login-needed]:input, [data-user-logged=must]:input").each(function(){
$(this).attr("readonly", true);
});
}
// nota: update junkstr
$(document).on("click focus", "[data-login-needed], [data-user-logged=must]", function(e) {
if(!PF.fn.is_user_logged()){
e.preventDefault();
e.stopPropagation();
if($(this).is(":input")) $(this).attr("readonly", true).blur();
PF.fn.modal.call({type: "login"});
}
});
// Modal form keydown listener
$(document).on("keydown", PF.obj.modal.selectors.root + " input", function(e){ // nota: solia ser keyup
var $this = $(e.target),
key = e.charCode || e.keyCode;
if(key !== 13){
PF.fn.growl.close();
return;
}
if(key==13 && $("[data-action=submit]", PF.obj.modal.selectors.root).exists() && !$this.is(".prevent-submit")){ // 13 == enter key
$("[data-action=submit]", PF.obj.modal.selectors.root).click();
}
});
// Trigger modal edit on hash #edit
// It must be placed after the event listener
if(window.location.hash && window.location.hash=="#edit"){
$("[data-modal=edit]").first().click();
}
/**
* MOBILE TOP BAR MENU
* -------------------------------------------------------------------------------------------------
*/
$(document).on("click", "[data-action=top-bar-menu-full]", function() {
var hasClass = $('[data-action=top-bar-menu-full]', "#top-bar").hasClass("current");
PF.fn.topMenu[hasClass ? "hide" : "show"]();
});
/**
* SEARCH INPUT
* -------------------------------------------------------------------------------------------------
*/
// Top-search feature
$(document).on("click", "[data-action=top-bar-search]", function(){
$("[data-action=top-bar-search-input]", ".top-bar").removeClass("hidden").show();
$("[data-action=top-bar-search-input]:visible input").first().focus();
if(is_ios() && !$(this).closest(PF.fn.topMenu.vars.menu).exists()) {
$('.top-bar').css('position', 'absolute');
}
$("[data-action=top-bar-search]", ".top-bar").hide();
});
// Search icon click -> focus input
$(document).on("click", ".input-search .icon-search", function(e){
$("input", e.currentTarget.offsetParent).focus();
});
// Clean search input
$(document).on("click", ".input-search .icon-close, .input-search [data-action=clear-search]", function(e){
var $input = $("input", e.currentTarget.offsetParent);
if($input.val()==""){
if($(this).closest("[data-action=top-bar-search-input]").exists()){
$("[data-action=top-bar-search-input]", ".top-bar").hide();
$("[data-action=top-bar-search]", ".top-bar").removeClass("opened").show();
if(is_ios() && $(this).closest("#top-bar").css("position") !== "fixed") {
$('.top-bar').css('position', 'fixed');
}
}
} else {
if(!$(this).closest("[data-action=top-bar-search-input]").exists()){
$(this).hide();
}
$input.val("").change();
}
});
// Input search clear search toggle
$(document).on("keyup change", "input.search", function(e){
var $input = $(this),
$div = $(this).closest(".input-search");
if(!$(this).closest("[data-action=top-bar-search-input]").exists()) {
var todo = $input.val() == "" ? "hide" : "show";
$(".icon-close, [data-action=clear-search]", $div)[todo]();
}
});
/**
* POP BOXES (MENUS)
* -------------------------------------------------------------------------------------------------
*/
$(document).on("click mouseenter", ".pop-btn", function(e) {
if(PF.fn.isDevice(["phone", "phablet"]) && (e.type=="mouseenter" || $(this).hasClass("pop-btn-desktop"))) {
return;
}
var $this_click = $(e.target),
$pop_btn, $pop_box,
devices = $.makeArray(["phone", "phablet"]);
var $this = $(this);
if(e.type=="mouseenter" && !$(this).hasClass("pop-btn-auto")) return;
if($(this).hasClass("disabled") || (($this_click.closest(".current").exists() && !PF.fn.isDevice("phone")) && !$this_click.closest(".pop-btn-show").exists())) {
return;
}
PF.fn.growl.close();
e.stopPropagation();
$pop_btn = $(this);
$pop_box = $(".pop-box", $pop_btn);
$pop_btn.addClass("opened");
$(".pop-box-inner", $pop_box).css("max-height", "");
if(PF.fn.isDevice(devices)) {
var text = $('.btn-text,.text,.pop-btn-text', $pop_btn).first().text();
if(typeof text == "undefined" || text == "") {
text = PF.fn._s("Select");
}
if(!$(".pop-box-header", $pop_box).exists()) {
$pop_box.prepend($('<div/>', {
"class": 'pop-box-header',
"html": text + '<span class="btn-icon icon-close"></span></span>'
}));
}
} else {
$('.pop-box-header', $pop_box).remove();
$pop_box.css({bottom: ''});
}
if($pop_box.hasClass("anchor-center")){
if(!PF.fn.isDevice(devices)) {
$pop_box.css("margin-left", -($pop_box.width()/2));
} else {
$pop_box.css("margin-left", "");
}
}
// Pop button changer
if($this_click.is("[data-change]")){
$("li", $pop_box).removeClass("current");
$this_click.closest("li").addClass("current");
$("[data-text-change]", $pop_btn).text($("li.current a", $pop_box).text());
e.preventDefault();
}
if(!$pop_box.exists()) return;
// Click inside the bubble only for .pop-keep-click
var $this = e.istriggered ? $(e.target) : $(this);
if($pop_box.is(":visible") && $(e.target).closest(".pop-box-inner").exists() && $this.hasClass("pop-keep-click")){
return;
}
$(".pop-box:visible").not($pop_box).hide().closest(".pop-btn").removeClass("opened");
var callback = function($pop_box) {
if(!$pop_box.is(":visible")){
$pop_box.closest(".pop-btn").removeClass("opened");
} else {
if(!PF.fn.isDevice(devices)) {
$(".antiscroll-wrap:not(.jsly):visible", $pop_box).addClass("jsly").antiscroll();
} else {
$(".antiscroll-inner", $pop_box).height("100%");
}
}
};
if(PF.fn.isDevice(devices)) {
if($(this).is("[data-action=top-bar-notifications]")) {
$pop_box.css({height: $(window).height()});
}
var pop_box_h = $pop_box.height()+'px';
var menu_top = (parseInt($(".top-bar").outerHeight()) + parseInt($(".top-bar").css("top")) + parseInt($(".top-bar").css("margin-top")) + parseInt($(".top-bar").css("margin-bottom"))) + "px";
// hide
if($pop_box.is(":visible")) {
$('#pop-box-mask').css({opacity: 0});
$pop_box.css({transform: "none"});
if($this.closest(PF.fn.topMenu.vars.menu).exists()) {
$(".top-bar").css({transform: "none"});
$(PF.fn.topMenu.vars.menu).css({
height: $(window).height() + parseInt(menu_top),
});
}
setTimeout(function() {
$pop_box.hide().attr("style", "");
$('#pop-box-mask').remove();
callback($pop_box);
if($this.closest(PF.fn.topMenu.vars.menu).exists()) {
$(PF.fn.topMenu.vars.menu).css({
height: "",
});
$(PF.fn.topMenu.vars.menu).animate({scrollTop: PF.fn.topMenu.vars.scrollTop}, PF.obj.config.animation.normal / 2);
}
}, PF.obj.config.animation.normal);
if(!$("body").data("hasOverflowHidden")) {
$("body").removeClass("overflow-hidden");
}
} else { // show
$('#pop-box-mask').remove();
$pop_box.parent().prepend($('<div/>', {
"id": 'pop-box-mask',
"class": 'fullscreen soft-black'
}).css({
zIndex: 400,
display: "block"
}));
PF.fn.topMenu.vars.scrollTop = $(PF.fn.topMenu.vars.menu).scrollTop();
setTimeout(function() {
$("#pop-box-mask").css({opacity: 1});
setTimeout(function() {
$pop_box.show().css({
bottom: '-' + pop_box_h,
maxHeight: $(window).height(),
zIndex: 1000,
transform: "translate(0,-"+pop_box_h+")"
});
setTimeout(function() {
callback($pop_box);
}, PF.obj.config.animation.normal);
if($("body").hasClass("overflow-hidden")) {
$("body").data("hasOverflowHidden", 1);
} else {
$("body").addClass("overflow-hidden");
}
if($this.closest(PF.fn.topMenu.vars.menu).exists()) {
$(".top-bar").css({transform: "translate(0, -" + menu_top + ")"});
$(PF.fn.topMenu.vars.menu).css({
height: $(window).height() + parseInt(menu_top),
});
}
$(".pop-box-inner", $pop_box).css("height", $pop_box.height() - $('.pop-box-header', $pop_box).outerHeight(true));
}, 1);
}, 1);
}
} else {
$pop_box["fade" + ($pop_box.is(":visible") ? "Out" : "In")](50, function() {
callback($pop_box);
});
//$pop_box.toggle();
//callback($pop_box);
}
}).on("mouseleave", ".pop-btn", function(){
if(!PF.fn.isDevice(["laptop", "desktop"])) {
return;
}
var $pop_btn = $(this),
$pop_box = $(".pop-box", $pop_btn);
if(!$pop_btn.hasClass("pop-btn-auto") || (PF.fn.isDevice(["phone", "phablet"]) && $pop_btn.hasClass("pop-btn-auto"))) {
return;
}
if(!PF.fn.isDevice(['phone', 'phablet', 'tablet']) && $(this).hasClass("pop-btn-delayed")) {
$(this).removeClass("pop-btn-auto");
}
$pop_box.hide().closest(".pop-btn").removeClass("opened");
});
$(".pop-btn-delayed").delayedAction(
{
delayedAction: function($element) {
if(PF.fn.isDevice(['phone', 'phablet', 'tablet'])) return;
var $el = $(".pop-box-inner", $element);
if($el.is(":hidden")) {
$element.addClass("pop-btn-auto").click();
}
},
hoverTime: 2000
}
);
/**
* TABS
* -------------------------------------------------------------------------------------------------
*/
// Hash on load (static tabs) changer
if(window.location.hash){
/*
var $hash_node = $("[href="+ window.location.hash +"]");
if($hash_node.exists()) {
$.each($("[href="+ window.location.hash +"]")[0].attributes, function(){
PF.obj.tabs.hashdata[this.name] = this.value;
});
PF.obj.tabs.hashdata.pushed = "tabs";
History.replaceState({
href: window.location.hash,
"data-tab": $("[href="+ window.location.hash +"]").data("tab"),
pushed: "tabs",
statenum: 0
}, null, null);
}
*/
}
// Stock tab onload data
if($(".content-tabs").exists()/* && !window.location.hash*/) {
var $tab = $("a", ".content-tabs .current");
History.replaceState({
href: $tab.attr("href"),
"data-tab": $tab.data("tab"),
pushed: "tabs",
statenum: 0
}, null, null);
}
// Keep scroll position (history.js)
var State = History.getState();
if(typeof State.data == "undefined") {
History.replaceState({scrollTop: 0}, document.title, window.location.href); // Stock initial scroll
}
History.Adapter.bind(window,"popstate", function(){
var State = History.getState();
if(State.data && typeof State.data.scrollTop !== "undefined") {
if($(window).scrollTop() !== State.data.scrollTop) {
$(window).scrollTop(State.data.scrollTop);
}
}
return;
});
// Toggle tab display
$("a", ".content-tabs").click(function(e) {
if($(this).data("link") == true) {
$(this).data("tab", false);
}
if($(this).closest(".current,.disabled").exists()){
e.preventDefault();
return;
}
if(typeof $(this).data("tab") == "undefined") return;
var dataTab = {};
$.each(this.attributes, function(){
dataTab[this.name] = this.value;
});
dataTab.pushed = "tabs";
// This helps to avoid issues on ?same and ?same#else
/*dataTab.statenum = 0;
console.log({
data: History.getState().data,
state: History.getState().data.statenum
})
if(History.getState().data && typeof History.getState().data.statenum !== "undefined") {
dataTab.statenum = History.getState().data.statenum + 1
}*/
/*if($(this).attr("href") && $(this).attr("href").indexOf("#") === 0) { // to ->#Hash
PF.obj.tabs.hashdata = dataTab;
if(typeof e.originalEvent == "undefined") {
window.location.hash = PF.obj.tabs.hashdata.href.substring(1);
}
} else { // to ->?anything
if($("#" + dataTab["data-tab"]).data("load") != "classic") {
History.pushState(dataTab, document.title, $(this).attr("href"));
e.preventDefault();
}
}
*/
if($("#" + dataTab["data-tab"]).data("load") != "classic") {
if(window.location.hash) {
var url = window.location.href;
url = url.replace(window.location.hash, "");
}
History.pushState(dataTab, document.title, (typeof url !== "undefined") ? url : $(this).attr("href"));
e.preventDefault();
}
var $tab_menu = $("[data-action=tab-menu]", $(this).closest(".header"));
$tab_menu.find("[data-content=current-tab-label]").text($(this).text());
if($tab_menu.is(":visible")) {
$tab_menu.click();
}
});
$(document).on("click", "[data-action=tab-menu]", function() {
var $tabs = $(this).closest(".header").find(".content-tabs"),
visible = $tabs.is(":visible"),
$this = $(this);
if(!visible) {
$tabs.data("classes", $tabs.attr("class"));
$tabs.removeClass(function (index, css) {
return (css.match(/\b\w+-hide/g) || []).join(' ');
});
$tabs.hide();
}
if(!visible) {
$this.removeClass("current");
}
$tabs[visible ? "hide" : "show"]();
if(visible) {
$tabs.css("display", "").addClass($tabs.data("classes"));
$this.addClass("current");
}
});
// On state change bind tab changes
$(window).bind("statechange", function(e) {
PF.fn.growl.close();
var dataTab;
dataTab = History.getState().data;
/*
if(e.type == "statechange"){
dataTab = History.getState().data;
} else if(e.type == "hashchange"){
if(typeof PF.obj.tabs.hashdata !== "undefined" && typeof PF.obj.tabs.hashdata.href !== "undefined" && PF.obj.tabs.hashdata.href !== window.location.hash) {
PF.obj.tabs.hashdata = null;
}
if(PF.obj.tabs.hashdata == null) {
var $target = $("[href="+ window.location.hash +"]", ".content-tabs");
if(!$target.exists()) $target = $(window.location.hash);
if(!$target.exists()) $target = $("a", ".content-tabs").first();
if(typeof $target.data("tab") !== "undefined") {
PF.obj.tabs.hashdata = {};
$.each($target[0].attributes, function(){
PF.obj.tabs.hashdata[this.name] = this.value;
});
PF.obj.tabs.hashdata.pushed = "tabs";
}
}
dataTab = (typeof PF.obj.tabs.hashdata !== "undefined") ? PF.obj.tabs.hashdata : null;
}
*/
if(dataTab && dataTab.pushed == "tabs"){
PF.fn.show_tab(dataTab["data-tab"]);
}
});
/**
* LISTING
* -------------------------------------------------------------------------------------------------
*/
// Stock the scroll position on list element click
$(document).on("click", ".list-item a", function(e) {
if($(this).attr("src") == "") return;
History.replaceState({scrollTop: $(window).scrollTop()}, document.title, window.location.href);
});
// Load more (listing +1 page)
$(document).on("click", "[data-action=load-more]", function(e){
$(this).closest('.content-listing-more').hide();
if(!PF.fn.is_listing() || $(this).closest(PF.obj.listing.selectors.content_listing).is(":hidden") || $(this).closest("#content-listing-template").exists() || PF.obj.listing.calling) return;
PF.fn.listing.queryString.stock_new();
// Page hack
PF.obj.listing.query_string.page = $(PF.obj.listing.selectors.content_listing_visible).data("page");
PF.obj.listing.query_string.page++;
// Offset hack
var offset = $(PF.obj.listing.selectors.content_listing_visible).data("offset");
if(typeof offset !== "undefined") {
PF.obj.listing.query_string.offset = offset;
if(typeof PF.obj.listing.hidden_params == "undefined") {
PF.obj.listing.hidden_params = {};
}
PF.obj.listing.hidden_params.offset = offset;
} else {
if(typeof PF.obj.listing.query_string.offset !== "undefined") {
delete PF.obj.listing.query_string.offset;
}
if(PF.obj.listing.hidden_params && typeof PF.obj.listing.hidden_params.offset !== "undefined") {
delete PF.obj.listing.hidden_params.offset;
}
}
PF.fn.listing.ajax();
e.preventDefault();
});
// List found on load html -> Do the columns!
if($(PF.obj.listing.selectors.list_item).length > 0){
PF.fn.listing.show();
// Bind the infinte scroll
$(window).scroll(function() {
if(($(window).scrollTop() + $(window).height() > $(document).height() - 200) && PF.obj.listing.calling == false) {
$(PF.obj.listing.selectors.content_listing_visible).find(PF.obj.listing.selectors.content_listing_pagination).find("[data-action=load-more]").click();
}
});
}
// Multi-selection tools
$(document).on("click", PF.obj.modal.selectors.root+ " [data-switch]", function(){
var $this_modal = $(this).closest(PF.obj.modal.selectors.root);
$("[data-view=switchable]", $this_modal).hide();
$("#"+$(this).attr("data-switch"), $this_modal).show();
});
$(document).on("click", "[data-toggle]", function() {
var $target = $("[data-content=" + $(this).data("toggle") + "]"),
show = !$target.is(":visible");
$(this).html($(this).data('html-' + (show ? 'on' : 'off')));
$target.toggle();
});
// Cookie law thing
$(document).on("click", "[data-action=cookie-law-close]", function(){
$("#cookie-law-banner").animate({bottom: "-100%"}, 300, function() {
var cookieName = (typeof $(this).data("cookie") !== typeof undefined) ? $(this).data("cookie") : "PF_COOKIE_LAW_DISPLAY";
Cookies.set(cookieName, 0, {expires: 365});
$(this).remove();
});
});
// One-click input copy
$(document).on("click", "[data-action=copy]", function() {
});
Clipboard = new Clipboard("[data-action=copy]", {
text: function(trigger) {
var $target = $(trigger.getAttribute("data-action-target"));
var text = $target.is(":input") ? $target.val() : $target.text();
return text.trim();
}
});
Clipboard.on('success', function(e) {
var $target = $(e.trigger.getAttribute("data-action-target"));
$target.highlight();
e.clearSelection();
});
});
/**
* PEAFOWL OBJECT
* -------------------------------------------------------------------------------------------------
*/
var PF = {fn: {}, str: {}, obj: {}};
/**
* PEAFOWL CONFIG
* -------------------------------------------------------------------------------------------------
*/
PF.obj.config = {
base_url: "",
json_api: "/json/",
listing: {
items_per_page: 24
},
animation: {
easingFn: "ease",
normal: 400,
fast: 250
}
};
/**
* WINDOW VARS
* -------------------------------------------------------------------------------------------------
*/
/**
* LANGUAGE FUNCTIONS
* -------------------------------------------------------------------------------------------------
*/
PF.obj.l10n = {};
/**
* Get lang string by key
* @argument string (lang key string)
*/
// pf: get_pf_lang
PF.fn._s = function(string, s){
var string;
if(typeof string == "undefined") {
return string;
}
if(typeof PF.obj.l10n !== "undefined" && typeof PF.obj.l10n[string] !== "undefined") {
string = PF.obj.l10n[string][0];
if(typeof string == "undefined") {
string = string;
}
} else {
string = string;
}
string = string.toString();
if(typeof s !== "undefined") {
string = sprintf(string, s);
}
return string;
};
PF.fn._n = function(singular, plural, n){
var string;
if(typeof PF.obj.l10n !== "undefined" && typeof PF.obj.l10n[singular] !== "undefined") {
string = PF.obj.l10n[singular][n == 1 ? 0 : 1];
} else {
string = n == 1 ? singular : plural;
}
string = typeof string == "undefined" ? singular : string.toString();
if(typeof n !== "undefined") {
string = sprintf(string, n);
}
return string;
};
/**
* Extend Peafowl lang
* Useful to add or replace strings
* @argument strings obj
*/
// pf: extend_pf_lang
PF.fn.extend_lang = function(strings){
$.each(PF.obj.lang_strings, function(i,v){
if(typeof strings[i] !== "undefined") {
$.extend(PF.obj.lang_strings[i], strings[i]);
}
});
};
/**
* HELPER FUNCTIONS
* -------------------------------------------------------------------------------------------------
*/
PF.fn.get_url_vars = function(){
var match,
pl = /\+/g, // Regex for replacing addition symbol with a space
search = /([^&=]+)=?([^&]*)/g,
decode = function (s) {
return decodeURIComponent(escape(s.replace(pl, " ")));
},
query = window.location.search.substring(1),
urlParams = {};
while(match = search.exec(query)){
urlParams[decode(match[1])] = decode(match[2]);
}
return urlParams;
};
PF.fn.get_url_var = function(name){
return PF.fn.get_url_vars()[name];
};
PF.fn.is_user_logged = function() {
return $("#top-bar-user").is(":visible"); // nota: default version
// It should use backend conditional
};
PF.fn.generate_random_string = function(len){
if(typeof len == "undefined") len = 5;
var text = "";
var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
for(var i=0; i < len; i++){
text += possible.charAt(Math.floor(Math.random() * possible.length));
}
return text;
};
PF.fn.getDateTime = function() {
var now = new Date();
var year = now.getFullYear();
var month = now.getMonth()+1;
var day = now.getDate();
var hour = now.getHours();
var minute = now.getMinutes();
var second = now.getSeconds();
if(month.toString().length == 1) {
var month = '0'+month;
}
if(day.toString().length == 1) {
var day = '0'+day;
}
if(hour.toString().length == 1) {
var hour = '0'+hour;
}
if(minute.toString().length == 1) {
var minute = '0'+minute;
}
if(second.toString().length == 1) {
var second = '0'+second;
}
var dateTime = year+'-'+month+'-'+day+' '+hour+':'+minute+':'+second;
return dateTime;
};
PF.fn.htmlEncode = function(value) {
return $('<div/>').text($.trim(value)).html();
};
PF.fn.htmlDecode = function(value) {
return $('<div/>').html($.trim(value)).text();
};
PF.fn.nl2br = function(str) {
var breakTag = '<br>';
return (str + '').replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1'+ breakTag +'$2');
};
// https://gist.github.com/alexey-bass/1115557
PF.fn.versionCompare = function(left, right) {
if (typeof left + typeof right != 'stringstring')
return false;
var a = left.split('.')
, b = right.split('.')
, i = 0, len = Math.max(a.length, b.length);
for (; i < len; i++) {
if ((a[i] && !b[i] && parseInt(a[i]) > 0) || (parseInt(a[i]) > parseInt(b[i]))) {
return 1;
} else if ((b[i] && !a[i] && parseInt(b[i]) > 0) || (parseInt(a[i]) < parseInt(b[i]))) {
return -1;
}
}
return 0;
}
/**
* Basename
* http://stackoverflow.com/questions/3820381/need-a-basename-function-in-javascript
*/
PF.fn.baseName = function(str) {
var base = new String(str).substring(str.lastIndexOf('/') + 1);
if(base.lastIndexOf(".") != -1) {
base = base.substring(0, base.lastIndexOf("."));
}
return base;
}
PF.fn.guid = function() {
function s4() {
return Math.floor((1 + Math.random()) * 0x10000)
.toString(16)
.substring(1);
}
return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();
}
PF.fn.md5 = function(string) {
return SparkMD5.hash(string);
}
/**
* dataURI to BLOB
* http://stackoverflow.com/questions/4998908/convert-data-uri-to-file-then-append-to-formdata
*/
PF.fn.dataURItoBlob = function(dataURI) {
// convert base64/URLEncoded data component to raw binary data held in a string
var byteString;
if (dataURI.split(',')[0].indexOf('base64') >= 0) {
byteString = atob(dataURI.split(',')[1]);
} else {
byteString = unescape(dataURI.split(',')[1]);
}
// separate out the mime component
var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
// write the bytes of the string to a typed array
var ia = new Uint8Array(byteString.length);
for (var i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i);
}
return new Blob([ia], {type:mimeString});
}
PF.fn.clean_facebook_hash = function() {
if(window.location.hash == "#_=_") {
window.location.hash = "";
}
};
PF.fn.clean_facebook_hash();
/**
* Get the min and max value from 1D array
*/
Array.min = function(array){
return Math.min.apply(Math, array);
};
Array.max = function(array){
return Math.max.apply(Math, array);
};
/**
* Return the sum of all the values in a 1D array
*/
Array.sum = function(array){
return array.reduce(function(pv, cv){ return cv + pv});
};
/**
* Return the size of an object
*/
Object.size = function(obj) {
var size = 0, key;
for (key in obj) {
if (obj.hasOwnProperty(key)) size++;
}
return size;
};
/**
* Flatten an object
*/
Object.flatten = function(obj, prefix) {
if(typeof prefix == "undefined") var prefix = "";
var result = {};
$.each(obj, function(key, value) {
if(!value) return;
if(typeof value == "object") {
result = $.extend({}, result, Object.flatten(value, prefix + key + '_'));
} else {
result[prefix + key] = value;
}
});
return result;
};
/**
* Tells if the string is a number or not
*/
String.prototype.isNumeric = function(){
return !isNaN(parseFloat(this)) && isFinite(this);
};
/**
* Repeats an string
*/
String.prototype.repeat = function(num){
return new Array(num + 1).join(this);
};
/**
* Ucfirst
*/
String.prototype.capitalizeFirstLetter = function() {
return this.charAt(0).toUpperCase() + this.slice(1);
}
/**
* Tells if the string is a email or not
*/
String.prototype.isEmail = function(){
var regex = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
return regex.test(this);
};
// http://phpjs.org/functions/round/
String.prototype.getRounded = function(precision, mode) {
var m, f, isHalf, sgn; // helper variables
precision |= 0; // making sure precision is integer
m = Math.pow(10, precision);
value = this;
value *= m;
sgn = (value > 0) | -(value < 0); // sign of the number
isHalf = value % 1 === 0.5 * sgn;
f = Math.floor(value);
if(isHalf) {
switch (mode) {
case 'PHP_ROUND_HALF_DOWN':
value = f + (sgn < 0); // rounds .5 toward zero
break;
case 'PHP_ROUND_HALF_EVEN':
value = f + (f % 2 * sgn); // rouds .5 towards the next even integer
break;
case 'PHP_ROUND_HALF_ODD':
value = f + !(f % 2); // rounds .5 towards the next odd integer
break;
default:
value = f + (sgn > 0); // rounds .5 away from zero
}
}
return (isHalf ? value : Math.round(value)) / m;
};
/**
* Return bytes from Size + Suffix like "10 MB"
*/
String.prototype.getBytes = function(){
var units = ["KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"],
suffix = this.toUpperCase().substr(-2);
if(units.indexOf(suffix) == -1) {
return this;
}
var pow_factor = units.indexOf(suffix) + 1;
return parseFloat(this) * Math.pow(1000, pow_factor);
};
/**
* Return size formatted from size bytes
*/
String.prototype.formatBytes = function(round) {
var bytes = parseInt(this),
units = ["KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
if(!$.isNumeric(this)) {
return false;
}
if (bytes < 1000) return bytes + " B";
if(typeof round == "undefined") var round = 2;
for(var i=0; i<units.length; i++) {
var multiplier = Math.pow(1000, i + 1),
threshold = multiplier * 1000;
if(bytes < threshold) {
var size = bytes / multiplier;
return this.getRounded.call(size, round) + " " + units[i];
}
}
};
/**
* Returns the image url.matches (multiple)
*/
String.prototype.match_image_urls = function() {
return this.match(/\b(?:ftp|https?):\/\/(\w+:\w+@)?([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}(:[0-9]{1,4}){0,1}|(?:[\w\-]+\.)+[a-z]{2,6})(?:\/[^\/#\?]+)+\.(?:jpe?g|gif|png|bmp)\b/gim);
};
String.prototype.match_urls = function() {
return this.match(/\b(?:ftp|https?):\/\/(\w+:\w+@)?([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}(:[0-9]{1,4}){0,1}|(?:[\w\-]+\.)+[a-z]{2,6})(?:\/[^\/#\?]+)?\b/gim);
};
// Add ECMA262-5 Array methods if not supported natively
if (!("indexOf" in Array.prototype)) {
Array.prototype.indexOf= function(find, i /*opt*/) {
if(i===undefined) i = 0;
if(i<0) i+= this.length;
if(i<0) i = 0;
for(var n = this.length; i<n; i++) {
if(i in this && this[i]===find) {
return i;
}
}
return -1;
};
}
/**
* Removes all the array duplicates without loosing the array order.
*/
Array.prototype.array_unique = function(){
var result = [];
$.each(this, function(i, e) {
if ($.inArray(e, result) == -1) result.push(e);
});
return result;
};
PF.fn.deparam = function(querystring) {
if(typeof querystring == "undefined" || !querystring) return;
var obj = {},
pairs = querystring.replace(/^[\?|&]*/, "").replace(/[&|\?]*$/, "").split("&");
for(var i=0; i<pairs.length; i++) {
var split = pairs[i].split('=');
var key = decodeURIComponent(split[0]);
var value = decodeURIComponent(split[1]);
// Aready in the object?
if(obj.hasOwnProperty(key) && !value) {
continue;
}
obj[key] = value;
}
return obj;
};
// http://stackoverflow.com/a/1634841/1145912
String.prototype.removeURLParameter = function(key) {
var url = "",
deparam = PF.fn.deparam(this);
if(typeof deparam[key] !== "undefined") {
delete deparam[key];
}
return decodeURIComponent($.param(deparam));
};
/**
* Truncate the middle of the URL just like Firebug
* From http://stackoverflow.com/questions/10903002/shorten-url-for-display-with-beginning-and-end-preserved-firebug-net-panel-st
*/
String.prototype.truncate_middle = function(l) {
var l = typeof(l) != "undefined" ? l : 40,
chunk_l = (l/2),
url = this.replace(/https?:\/\//g,"");
if(url.length <= l) {
return url;
}
function shortString(s, l, reverse) {
var stop_chars = [' ','/', '&'],
acceptable_shortness = l * 0.80, // When to start looking for stop characters
reverse = typeof(reverse) != "undefined" ? reverse : false,
s = reverse ? s.split("").reverse().join("") : s,
short_s = "";
for(var i=0; i < l-1; i++){
short_s += s[i];
if(i >= acceptable_shortness && stop_chars.indexOf(s[i]) >= 0) {
break;
}
};
if(reverse){ return short_s.split("").reverse().join(""); }
return short_s;
};
return shortString(url, chunk_l, false) + "..." + shortString(url, chunk_l, true);
};
/**
* Compare 2 arrays/objects
* http://stackoverflow.com/questions/1773069/using-jquery-to-compare-two-arrays
*/
jQuery.extend({
compare: function (a,b) {
var obj_str = '[object Object]',
arr_str = '[object Array]',
a_type = Object.prototype.toString.apply(a),
b_type = Object.prototype.toString.apply(b);
if(a_type !== b_type){
return false;
} else if(a_type === obj_str){
return $.compareObject(a,b);
} else if(a_type === arr_str){
return $.compareArray(a,b);
}
return (a === b);
},
compareArray: function (arrayA, arrayB) {
var a,b,i,a_type,b_type;
if (arrayA === arrayB) { return true;}
if (arrayA.length != arrayB.length) { return false; }
a = jQuery.extend(true, [], arrayA);
b = jQuery.extend(true, [], arrayB);
a.sort();
b.sort();
for (i = 0, l = a.length; i < l; i+=1) {
a_type = Object.prototype.toString.apply(a[i]);
b_type = Object.prototype.toString.apply(b[i]);
if(a_type !== b_type){
return false;
}
if($.compare(a[i],b[i]) === false){
return false;
}
}
return true;
},
compareObject: function(objA,objB){
var i,a_type,b_type;
// Compare if they are references to each other
if (objA === objB) { return true;}
if (Object.keys(objA).length !== Object.keys(objB).length) { return false;}
for (i in objA) {
if (objA.hasOwnProperty(i)) {
if(typeof objB[i] === 'undefined'){
return false;
} else {
a_type = Object.prototype.toString.apply(objA[i]);
b_type = Object.prototype.toString.apply(objB[i]);
if (a_type !== b_type) {
return false;
}
}
}
if($.compare(objA[i],objB[i]) === false){
return false;
}
}
return true;
}
});
/**
* Tells if a selector exits in the dom
*/
jQuery.fn.exists = function(){
return this.length > 0;
};
/**
* Replace .svg for .png
*/
jQuery.fn.replace_svg = function(){
if(!this.attr("src")) return;
$(this).each(function(){
$(this).attr("src", $(this).attr("src").replace(".svg", ".png"));
});
};
/**
* Detect fluid layout
* nota: deberia ir en PF
*/
jQuery.fn.is_fluid = function(){
return true;
return(this.hasClass("fluid") || this.css("width")=="100%");
};
/**
* jQueryfy the form data
* Bind the attributes and values of form data to be manipulated by DOM fn
*/
jQuery.fn.bindFormData = function() {
$(":input", this).each(function() {
var safeVal = PF.fn.htmlEncode($(this).val());
if($(this).is("input")){
this.setAttribute("value", this.value);
if(this.checked) {
this.setAttribute("checked", "checked");
} else {
this.removeAttribute("checked");
}
}
if($(this).is("textarea")){
$(this).html(safeVal);
}
if($(this).is("select")){
var index = this.selectedIndex,
i = 0;
$(this).children("option").each(function() {
if (i++ != index) {
this.removeAttribute("selected");
} else {
this.setAttribute("selected","selected");
}
});
}
});
return this;
};
/** jQuery.formValues: get or set all of the name/value pairs from child input controls
* @argument data {array} If included, will populate all child controls.
* @returns element if data was provided, or array of values if not
* http://stackoverflow.com/questions/1489486/jquery-plugin-to-serialize-a-form-and-also-restore-populate-the-form
*/
jQuery.fn.formValues = function(data) {
var els = $(":input", this);
if(typeof data != "object"){
data = {};
$.each(els, function(){
if(this.name && !this.disabled && (this.checked || /select|textarea/i.test(this.nodeName) || /color|date|datetime|datetime-local|email|month|range|search|tel|time|url|week|text|number|hidden|password/i.test(this.type))){
if(this.name.match(/^.*\[\]$/) && this.checked) {
if(typeof data[this.name] == "undefined") {
data[this.name] = [];
}
data[this.name].push($(this).val());
} else {
data[this.name] = $(this).val();
}
}
});
return data;
} else {
$.each(els, function() {
if(this.name.match(/^.*\[\]$/) && typeof data[this.name] == "object") {
$(this).prop("checked", data[this.name].indexOf($(this).val()) !== -1);
} else {
if(this.name && data[this.name]){
if(/checkbox|radio/i.test(this.type)) {
$(this).prop("checked", (data[this.name] == $(this).val()));
} else {
$(this).val(data[this.name]);
}
} else if(/checkbox|radio/i.test(this.type)){
$(this).removeProp("checked");
}
}
});
return $(this);
}
};
jQuery.fn.storeformData = function(dataname){
if(typeof dataname == "undefined" && typeof $(this).attr("id") !== "undefined"){
dataname = $(this).attr("id");
}
if(typeof dataname !== "undefined") $(this).data(dataname, $(this).formValues());
return this;
};
/**
* Compare the $.data values against the current DOM values
* It relies in using $.data to store the previous value
* Data must be stored using $.formValues()
*
* @argument dataname string name for the data key
*/
jQuery.fn.is_sameformData = function(dataname){
var $this = $(this);
if(typeof dataname == "undefined") dataname = $this.attr("id");
return jQuery.compare($this.formValues(), $this.data(dataname));
};
/**
* Prevent non-numeric keydown
* Allows only numeric keys to be entered on the target event
*/
jQuery.Event.prototype.keydown_numeric = function(){
var e = this;
if(e.shiftKey) {
e.preventDefault();
return false;
}
var key = e.charCode || e.keyCode,
target = e.target,
value = ($(target).val()=="") ? 0 : parseInt($(target).val());
if(key == 13) { // Allow enter key
return true;
}
if(key == 46 || key == 8 || key == 9 || key == 27 ||
// Allow: Ctrl+A
(key == 65 && e.ctrlKey === true) ||
// Allow: home, end, left, right
(key >= 35 && key <= 40)){
// let it happen, don't do anything
return true;
} else {
// Ensure that it is a number and stop the keypress
if ((key < 48 || key > 57) && (key < 96 || key > 105 )){
e.preventDefault();
}
}
};
/**
* Detect canvas support
*/
PF.fn.is_canvas_supported = function(){
var elem = document.createElement("canvas");
return !!(elem.getContext && elem.getContext("2d"));
};
/**
* Detect validity support
*/
PF.fn.is_validity_supported = function(){
var i = document.createElement("input");
return typeof i.validity === "object";
};
PF.fn.getScrollBarWidth = function() {
var inner = document.createElement('p');
inner.style.width = "100%";
inner.style.height = "200px";
var outer = document.createElement('div');
outer.style.position = "absolute";
outer.style.top = "0px";
outer.style.left = "0px";
outer.style.visibility = "hidden";
outer.style.width = "200px";
outer.style.height = "150px";
outer.style.overflow = "hidden";
outer.appendChild (inner);
document.body.appendChild (outer);
var w1 = inner.offsetWidth;
outer.style.overflow = 'scroll';
var w2 = inner.offsetWidth;
if (w1 == w2) w2 = outer.clientWidth;
document.body.removeChild (outer);
return (w1 - w2);
};
PF.str.ScrollBarWidth = PF.fn.getScrollBarWidth();
/**
* Updates the notifications button
*/
PF.fn.top_notifications_viewed = function(){
var $top_bar_notifications = $("[data-action=top-bar-notifications]"),
$notifications_lists = $(".top-bar-notifications-list", $top_bar_notifications),
$notifications_count = $(".top-btn-number", $top_bar_notifications);
if($(".persistent", $top_bar_notifications).exists()){
$notifications_count.text($(".persistent", $top_bar_notifications).length).addClass("on");
} else {
$notifications_count.removeClass("on");
}
};
/**
* bind tipTip for the $target with options
* @argument $target selector or jQuery obj
* @argument options obj
*/
PF.fn.bindtipTip = function($target, options) {
if(typeof $target == "undefined") $target = $("body");
if($target instanceof jQuery == false) $target = $($target);
var bindtipTipoptions = {
delay: 0,
content: false,
fadeIn: 0
};
if(typeof options !== "undefined"){
if(typeof options.delay !== "undefined") bindtipTipoptions.delay = options.delay;
if(typeof options.content !== "undefined") bindtipTipoptions.content = options.content;
if(typeof options.content !== "undefined") bindtipTipoptions.fadeIn = options.fadeIn;
}
if($target.attr("rel") !== "tooltip") $target = $("[rel=tooltip]", $target);
$target.each(function(){
if((typeof $(this).attr("href") !== "undefined" || typeof $(this).data("href") !== "undefined") && PF.fn.isDevice(["phone", "phablet", "tablet"])) {
return true;
}
var position = typeof $(this).data("tiptip") == "undefined" ? "bottom" : $(this).data("tiptip");
if(PF.fn.isDevice(["phone", "phablet"])) {
position = "top";
}
$(this).tipTip({delay: bindtipTipoptions.delay, defaultPosition: position, content: bindtipTipoptions.content, fadeIn: bindtipTipoptions.fadeIn, fadeOut: 0});
});
};
/**
* form modal changed
* Detects if the form modal (fullscreen) has changed or not
* Note: It relies in that you save a serialized data to the
*/
PF.fn.form_modal_has_changed = function() {
if($(PF.obj.modal.selectors.root).is(":hidden")) return;
if(typeof $("html").data("modal-form-values") == typeof undefined) return;
var data_stored = $("html").data("modal-form-values");
var data_modal = PF.fn.deparam($(":input:visible", PF.obj.modal.selectors.root).serialize());
var has_changed = false;
var keys = $.extend({}, data_stored, data_modal);
for(var k in keys) {
if(data_stored[k] !== data_modal[k]) {
has_changed = true;
break;
}
}
return has_changed;
};
/**
* PEAFOWL CONDITIONALS
* -------------------------------------------------------------------------------------------------
*/
PF.fn.is_listing = function(){
return $(PF.obj.listing.selectors.content_listing).exists();
};
PF.fn.is_tabs = function(){
return $(".content-tabs").exists();
};
/**
* PEAFOWL EFFECTS
* -------------------------------------------------------------------------------------------------
*/
/**
* Shake effect
* Shakes the element using CSS animations.
* @argument callback fn
*/
jQuery.fn.shake = function(callback){
this.each(function(init){
var jqNode = $(this),
jqNode_position = jqNode.css("position");
if(!jqNode_position.match("relative|absolute|fixed")) jqNode.css({position: "relative"});
var jqNode_left = parseInt(jqNode.css("left"));
if(!jqNode_left.toString().isNumeric()) jqNode_left = 0;
if(!jqNode.is(":animated")){
for(var x = 1; x <= 2; x++){
jqNode.animate({
left: jqNode_left-10
}, 0).animate({
left: jqNode_left
}, 30).animate({
left: jqNode_left+10
}, 30).animate({
left: jqNode_left
}, 30);
};
if(jqNode_position!=="static") jqNode.css({position: jqNode_position});
};
});
if(typeof callback == "function") callback();
return this;
};
/**
* Highlight effect
* Changes the background of the element to a highlight color and revert to original
* @argument string (yellow|red|hex-color)
*/
jQuery.fn.highlight = function(color){
if(this.is(":animated") || !this.exists()) return this;
if(typeof color == "undefined") color = "yellow";
var fadecolor = color;
switch(color){
case "yellow":
fadecolor = "#FFFBA2";
break;
case "red":
fadecolor = "#FF7F7F";
break;
default:
fadecolor = color;
break;
};
var base_background_color = $(this).css("background-color"),
base_background = $(this).css("background");
$(this).css({background: "", backgroundColor: fadecolor}).animate({backgroundColor: base_background_color }, 800, function(){
$(this).css("background", "");
});
return this;
};
/**
* Peafowl slidedown effect
* Bring the element using slideDown-type effect
* @argument speed (fast|normal|slow|int)
* @argument callback fn
*/
jQuery.fn.pf_slideDown = function(speed, callback){
var default_speed = "normal",
this_length = $(this).length,
css_prechanges, css_animation, animation_speed;
if(typeof speed == "function"){
callback = speed;
speed = default_speed;
}
if(typeof speed == "undefined"){
speed = default_speed;
}
$(this).each(function(index){
var this_css_top = parseInt($(this).css("top")),
to_top = this_css_top > 0 ? this_css_top : 0;
if(speed == 0){
css_prechanges = {display: "block", opacity: 0},
css_animation = {opacity: 1},
animation_speed = jQuery.speed("fast").duration;
} else {
css_prechanges = {top: -$(this).outerHeight(true), opacity: 1, display: "block"};
css_animation = {top: to_top};
animation_speed = jQuery.speed(speed).duration;
}
$(this).data("originalTop", $(this).css("top"));
$(this).css(css_prechanges).animate(css_animation, animation_speed, function(){
if (index == this_length - 1){
if(typeof callback == "function"){
callback();
}
}
});
});
return this;
};
/**
* Peafowl slideUp effect
* Move the element using slideUp-type effect
* @argument speed (fast|normal|slow|int)
* @argument callback fn
*/
jQuery.fn.pf_slideUp = function(speed, callback){
var default_speed = "normal",
this_length = $(this).length;
if(typeof speed == "function"){
callback = speed;
speed = default_speed;
}
if(typeof speed == "undefined"){
speed = default_speed;
}
$(this).each(function(index){
$(this).animate({top: -$(this).outerHeight(true)}, jQuery.speed(speed).duration, function(){
$(this).css({display: "none", top: $(this).data("originalTop")});
if(index == this_length - 1){
if(typeof callback == "function"){
callback();
}
}
});
});
return this;
};
/**
* Peafowl visible on viewport
*/
jQuery.fn.is_in_viewport = function(){
var rect = $(this)[0].getBoundingClientRect();
return (
rect.top >= 0 &&
rect.left >= 0 &&
rect.bottom <= (window.innerHeight || document. documentElement.clientHeight) && /*or $(window).height() */
rect.right <= (window.innerWidth || document. documentElement.clientWidth) /*or $(window).width() */
);
};
/**
* Scroll the window to the target.
* @argument target selector
* @argument callback fn
*/
PF.fn.scroll = function(target, callback){
if(typeof target == "function") {
var callback = target,
target = "";
}
var pxtop = parseInt($("body").css("margin-top"));
if(pxtop==0 && $(".top-bar-placeholder").exists()) {
pxtop = $(".top-bar-placeholder").height();
}
if(!$(target).exists()) target = "html";
$("body,html").animate({scrollTop: $(target).offset().top - pxtop}, "normal", function(){
if(typeof callback == "function") callback();
});
};
PF.fn.close_pops = function(e){
$(".pop-box:visible").each(function(){
$(this).closest(".pop-btn").click();
});
};
/**
* Bring up a nice growl-like alert
*/
PF.fn.growl = {
selectors: {
root: "#growl"
},
str: {
timeout: null,
timeoutcall: false
},
/**
* Fires the growl
* @argument options object
*/
call: function(options){
if(typeof options == "undefined") return;
if(typeof options == "string"){
options = {message: options};
}
if(typeof options.message == "undefined") return;
var growl_options, $growl, growl_class, growl_color;
growl_options = {
message: options.message,
insertTo: "body",
where: "before",
color: "default",
css: {},
classes: "",
expires: 0,
callback: function(){}
};
for(key in growl_options) {
if(typeof options[key] !== "undefined") {
if(key.match("/^(callback)$/")) {
if(typeof options[key] == "function") {
growl_options[key] = options[key];
}
} else {
growl_options[key] = options[key];
}
}
}
if(!$(growl_options.insertTo).exists()){
growl_options.insertTo = "body";
}
if($(PF.fn.growl.selectors.root).exists()){
if($(PF.fn.growl.selectors.root).text() == growl_options.message){
$(PF.fn.growl.selectors.root).shake();
return;
}
$(PF.fn.growl.selectors.root).remove();
}
$growl = $('<div id="'+ PF.fn.growl.selectors.root.replace("#", "") +'" class="growl">'+growl_options.message+'<span class="icon icon-close" data-action="close"></span></div>').css(growl_options.css).addClass(growl_options.classes);
growl_class = growl_options.insertTo !== "body" ? "static" : "";
switch(growl_options.color){
case "dark":
growl_color = "dark";
break;
default:
growl_color = "";
break;
}
$growl.addClass(growl_class+" "+growl_color);
if(growl_options.where == "before"){
$(growl_options.insertTo).prepend($growl.hide());
} else {
$(growl_options.insertTo).append($growl.hide());
}
if($(".fullscreen").is(":visible")){
$growl.css({"z-index": parseInt($(".fullscreen").css("z-index"))+1});
}
if($(PF.obj.modal.selectors.root).is(":visible")){
var $modal_box = $(PF.obj.modal.selectors.box, PF.obj.modal.selectors.root);
$growl.show();
$growl.css("top", ($("#top-bar").outerHeight(true) - $growl.outerHeight(true))/2);
PF.fn.growl.fixPosition();
$growl.hide();
}
$growl.pf_slideDown(growl_class == "static" ? 0 : 200, function(){
if(typeof growl_options.callback == "function"){
growl_options.callback();
}
});
$(document).on("click", ".growl", function(e){
if(PF.fn.isDevice(["phone", "phablet"]) || $(e.target).is("[data-action=close]")) {
PF.fn.growl.close(true);
}
});
if(growl_options.expires > 0){
if(typeof this.str.timeout == "number"){
clearTimeout(this.str.timeout);
}
this.str.timeout = setTimeout(function(){
PF.fn.growl.str.timeoutcall = true;
PF.fn.growl.close();
}, growl_options.expires);
}
},
/**
* Fires an expirable growl (will close after time)
* @argument msg string
* @argument time int (ms)
*/
expirable: function(msg, time){
if(typeof msg == "undefined") return;
if(typeof time == "undefined") time = 5000;
PF.fn.growl.call({message: msg, expires: time});
},
/**
* Closes the growl
* @argument callback fn
*/
close: function(forced, callback){
var $growl = $(PF.fn.growl.selectors.root);
if(forced) {
this.str.timeout = null;
this.str.timeoutcall = false;
clearTimeout(this.str.timeout);
}
if(!$growl.exists() || (typeof this.str.timeout == "number" && !this.str.timeoutcall)) {
return;
}
$growl.fadeOut("fast", function(){
$(this).remove();
if(typeof callback == "function"){
callback();
}
});
},
fixPosition: function() {
var $growl = $(PF.fn.growl.selectors.root);
if(!$growl.exists() || !$(PF.obj.modal.selectors.root).exists()) {
return;
}
if($growl.data("fixedPosition") == "scrollbar" && $(PF.obj.modal.selectors.root).hasScrollBar().vertical) {
return;
}
var offsetX = {
modal: $(PF.obj.modal.selectors.box).offset().left,
growl: $growl.offset().left
},
growlCompensate = offsetX.modal - offsetX.growl,
marginLeft = growlCompensate < 0 ? ("-=" + Math.abs(growlCompensate)) : "-" + parseInt($growl.css("width"))/2;
if(!PF.fn.isDevice(["phone", "phablet"])) {
$growl.css("marginLeft", marginLeft + "px");
}
$growl.data("fixedPosition", $(PF.obj.modal.selectors.root).hasScrollBar().vertical ? "scrollbar" : "no-scrollbar");
}
};
/**
* Bring up a nice fullscreen modal
*/
PF.obj.modal = {
type: "",
selectors: {
root: "#fullscreen-modal",
box: "#fullscreen-modal-box",
body: "#fullscreen-modal-body",
login: "[data-modal=login]",
changes_confirm: "#fullscreen-changes-confirm",
btn_container: ".btn-container",
close_buttons: ".close-modal,.cancel-modal,[data-action=cancel],[data-action-close]",
submit_button: "[data-action=submit]",
growl_placeholder: "#fullscreen-growl-placeholder"
},
ajax: {
url: "",
deferred: {}
},
locked: false,
form_data: {},
XHR: {},
prevented: false
};
PF.obj.modal.$close_buttons = $(PF.obj.modal.selectors.close_buttons, PF.obj.modal.selectors.root);
PF.obj.modal.$submit_button = $(PF.obj.modal.selectors.submit_button, PF.obj.modal.selectors.root);
PF.fn.modal = {
str: {
transition: "all " + PF.obj.config.animation.fast + "ms ease"
},
/**
* Fires the modal
* @argument options object
*/
call:
function(options){
var modal_options, modal_base_template, modal_message;
if(typeof options == "undefined") return;
if(typeof options.template !== "undefined" && typeof options.type == "undefined") options.type = "html";
if((typeof options.title == "undefined" || typeof options.message == "undefined") && (options.type !== "login" && options.type !== "html")) return;
PF.fn.growl.close();
modal_options = {
forced: false,
type: "confirm",
title: options.title,
message: options.message,
html: false,
template: options.template,
buttons: true,
button_submit: PF.fn._s("Submit"),
txt_or: PF.fn._s("or"),
button_cancel: PF.fn._s("cancel"),
ajax: {url: null, data: null, deferred: {}},
confirm: function(){},
cancel: function(){
PF.fn.modal.close();
},
load: function(){},
callback: function() {}
};
for(key in modal_options) {
if(typeof options[key] !== "undefined") {
if((/^cancel|confirm|callback$/).test(key)) {
if(typeof options[key] == "function") {
modal_options[key] = options[key];
}
} else {
modal_options[key] = options[key];
}
}
}
if(typeof options.ajax !== "undefined" && !options.ajax.url && options.ajax.deferred) {
modal_options.ajax.url = PF.obj.config.json_api;
}
if(modal_options.type == "login"){
modal_options.buttons = false;
}
if(modal_options.type == "confirm") {
modal_options.button_submit = PF.fn._s("Confirm");
}
var overlay_background = "soft-black";
if($("html").hasClass("tone-dark")) {
overlay_background = "black";
}
var modal_base_template = [
'<div id="', PF.obj.modal.selectors.root.replace("#", ""),
'"class="fullscreen '+overlay_background+'"><div id="',
PF.obj.modal.selectors.box.replace("#", ""),
'"class="clickable"><div id="', PF.obj.modal.selectors.body.replace("#", ""),
'">%MODAL_BODY%</div>%MODAL_BUTTONS%<span class="close-modal icon-close" data-action="close-modal"></span></div></div>'
].join("");
var modal_buttons = modal_options.buttons ? ['<div class="', PF.obj.modal.selectors.btn_container.replace(".", ""), '"><button class="btn btn-input default" data-action="submit" type="submit">', modal_options.button_submit, '</button> <span class="btn-alt">', modal_options.txt_or, '<a class="cancel" data-action="cancel">', modal_options.button_cancel, '</a></span></div>'].join("") : "";
if(modal_options.type == "login"){
modal_options.template = typeof modal_options.template == "undefined" ? $(PF.obj.modal.selectors.login).html() : modal_options.template;
}
var modalBodyHTML;
switch(modal_options.type){
case "html":
case "login":
modalBodyHTML = modal_options.template;
break;
case "confirm": default:
modal_message = modal_options.message;
if(!modal_options.html){
modal_message = '<p>'+modal_message+'</p>';
}
modalBodyHTML = '<h1>'+modal_options.title+'</h1>'+modal_message;
break;
}
if(typeof modalBodyHTML == "undefined") {
console.log("PF Error: Modal content is empty");
return;
}
modal_base_template = modal_base_template
.replace("%MODAL_BODY%", modalBodyHTML)
.replace("%MODAL_BUTTONS%", modal_buttons)
.replace(/template-tooltip/g, "tooltip");
$(PF.obj.modal.selectors.root).remove();
$("body").data("overflow-hidden", $("body").hasClass("overflow-hidden"));
$("body").prepend(modal_base_template).addClass("overflow-hidden");
this.fixScrollbars();
$("[rel=tooltip]", PF.obj.modal.selectors.root).each(function(){
PF.fn.bindtipTip(this, {content:$(this).data("title")});
});
if($(":button, input[type=submit], input[type=reset]", PF.obj.modal.selectors.root).length > 0) {
var $form = $("form", PF.obj.modal.selectors.root);
if($form.exists()) {
$form.append($($(PF.obj.modal.selectors.btn_container, PF.obj.modal.selectors.root).html()).wrapInner(PF.obj.modal.selectors.btn_container.replace(".", "")));
$(PF.obj.modal.selectors.btn_container, PF.obj.modal.selectors.root).each(function() {
if(!$(this).closest("form").exists()) {
$(this).remove();
}
});
} else {
$(PF.obj.modal.selectors.box, PF.obj.modal.selectors.root).wrapInner('<form />');
}
}
modal_options.callback();
$(PF.obj.modal.selectors.box).css({transform: "scale(0.7)", opacity: 0, transition: PF.fn.modal.str.transition});
$(PF.obj.modal.selectors.root).css({display: "block"});
setTimeout(function() {
$(PF.obj.modal.selectors.root).css({opacity: 1});
$(PF.obj.modal.selectors.box).css({transform: "scale(1)", opacity: 1});
setTimeout(function() {
if(typeof modal_options.load == "function") {
modal_options.load();
}
// Stock the default modal values
$("html").data("modal-form-values", PF.fn.deparam($(":input:visible", PF.obj.modal.selectors.root).serialize()));
}, PF.obj.config.animation.fast);
}, 1);
// Bind the modal events
$(PF.obj.modal.selectors.root).click(function(e){
var $this = $(e.target),
_this = this;
if(PF.obj.modal.locked) {
return;
}
// Changes confirm?
if($this.closest(PF.obj.modal.selectors.changes_confirm).exists() && ($this.is(PF.obj.modal.selectors.close_buttons) || $this.is(PF.obj.modal.selectors.submit_button))) {
$(PF.obj.modal.selectors.changes_confirm).remove();
if($this.is(PF.obj.modal.selectors.close_buttons)) {
$(PF.obj.modal.selectors.box, _this).fadeIn("fast", function() {
$(this).css("transition", PF.fn.modal.str.transition);
});
} else {
PF.fn.modal.close();
}
// Modal
} else {
if(!$this.closest(".clickable").exists() || $this.is(PF.obj.modal.selectors.close_buttons)) {
PF.fn.growl.close();
modal_options.cancel();
}
if($this.is(PF.obj.modal.selectors.submit_button)) {
if(modal_options.confirm() === false) {
return;
}
var modal_submit_continue = true;
if($("input, textarea, select", PF.obj.modal.selectors.root).not(":input[type=button], :input[type=submit], :input[type=reset]").length > 0 && !PF.fn.form_modal_has_changed() && !modal_options.forced) {
modal_submit_continue = false;
}
if(modal_submit_continue) {
if(modal_options.ajax.url) {
var $btn_container = $(PF.obj.modal.selectors.btn_container, PF.obj.modal.selectors.root);
PF.obj.modal.locked = true;
$btn_container.first().clone().height($btn_container.height()).html("").addClass("loading").appendTo(PF.obj.modal.selectors.root + " form");
$btn_container.hide();
PF.obj.modal.$close_buttons.hide();
var modal_loading_msg;
switch(PF.obj.modal.type) {
case "edit":
modal_loading_msg = PF.fn._s("Saving");
break;
case "confirm":
case "form":
default:
modal_loading_msg = PF.fn._s("Sending");
break;
}
PF.fn.loading.inline($(PF.obj.modal.selectors.btn_container+".loading", PF.obj.modal.selectors.root), {size: "small", message: modal_loading_msg, valign: "center"});
$(PF.obj.modal.selectors.root).disableForm();
if(!$.isEmptyObject(PF.obj.modal.form_data) || (typeof options.ajax !== "undefined" && typeof options.ajax.data == "undefined")) {
modal_options.ajax.data = PF.obj.modal.form_data;
}
PF.obj.modal.XHR = $.ajax({
url: modal_options.ajax.url,
type: "POST",
data: modal_options.ajax.data //PF.obj.modal.form_data // $.param ?
}).complete(function(XHR){
PF.obj.modal.locked = false;
if(XHR.status == 200) {
var success_fn = typeof modal_options.ajax.deferred !== "undefined" && typeof modal_options.ajax.deferred.success !== "undefined" ? modal_options.ajax.deferred.success : null;
if(typeof success_fn == "function") {
PF.fn.modal.close(function() {
if(typeof success_fn == "function") {
success_fn(XHR);
}
});
} else if(typeof success_fn == "object") {
if(typeof success_fn.before == "function") {
success_fn.before(XHR);
}
if(typeof success_fn.done == "function") {
success_fn.done(XHR);
}
}
} else {
$(PF.obj.modal.selectors.root).enableForm();
$(PF.obj.modal.selectors.btn_container+".loading", PF.obj.modal.selectors.root).remove();
$btn_container.css("display", "");
if(typeof modal_options.ajax.deferred !== "undefined" && typeof modal_options.ajax.deferred.error == "function") {
modal_options.ajax.deferred.error(XHR);
} else {
var message = PF.fn._s("An error occurred. Please try again later.");
/*
if(XHR.responseJSON.error.message) {
message = XHR.responseJSON.error.message;
}
*/
PF.fn.growl.call(message);
}
}
});
} else {
// No ajax behaviour
PF.fn.modal.close(modal_options.callback());
}
}
}
}
});
},
/**
* Fires a confirm modal
* @argument options object
*/
confirm:
function(options){
options.type = "confirm";
if(typeof options.title == "undefined"){
options.title = PF.fn._s("Confirm action");
}
PF.fn.modal.call(options);
},
/**
* Fires a simple info modal
*/
simple:
function(options){
if(typeof options == "string") options = {message: options};
if(typeof options.buttons == "undefined") options.buttons = false;
if(typeof options.title == "undefined") options.title = PF.fn._s("information");
PF.fn.modal.call(options);
},
fixScrollbars:
function() {
if(!$(PF.obj.modal.selectors.root).exists()) {
return;
}
var $targets = {
padding: $(".top-bar, .fixed, .position-fixed"),
margin: $("html"),
}
var properties = {}
if(PF.str.ScrollBarWidth > 0 && $("html").hasScrollBar().vertical && !$("body").data("overflow-hidden")) {
properties.padding = PF.str.ScrollBarWidth + "px";
properties.margin = PF.str.ScrollBarWidth + "px";
} else {
properties.padding = "";
properties.margin = "";
}
$targets.padding.css({paddingRight: properties.padding});
$targets.margin.css({marginRight: properties.margin});
},
/**
* Closes the modal
* @argument callback fn
*/
close:
function(callback){
if(!$(PF.obj.modal.selectors.root).exists()) {
return;
}
PF.fn.growl.close(true);
$("[rel=tooltip]", PF.obj.modal.selectors.root).tipTip("hide");
$(PF.obj.modal.selectors.box).css({transform: "scale(0.5)", opacity: 0});
$(PF.obj.modal.selectors.root).css({opacity: 0});
setTimeout(function() {
if(PF.str.ScrollBarWidth > 0 && $("html").hasScrollBar().vertical) {
$(".top-bar, .fixed, .position-fixed").css({paddingRight: ""});
}
$("html").css({marginRight: ""});
if(!$("body").data("overflow-hidden")) {
$("body").removeClass("overflow-hidden");
}
$("body").removeData("overflow-hidden");
$(PF.obj.modal.selectors.root).remove();
if(typeof callback == "function") callback();
}, PF.obj.config.animation.normal);
},
};
/**
* Peafowlesque popups
*/
PF.fn.popup = function(options){
var settings = {
height: options.height || 500,
width: options.width || 650,
scrollTo: 0,
resizable: 0,
scrollbars: 0,
location: 0
};
settings.top = (screen.height/2) - (settings.height/2);
settings.left = (screen.width/2) - (settings.width/2);
var settings_ = "";
for(var key in settings){
settings_ += key + "=" + settings[key] + ",";
}
settings_ = settings_.slice(0, -1); // remove the last comma
window.open(options.href, "Popup", settings_);
return;
};
/**
* PEAFOWL FLUID WIDTH FIXER
* -------------------------------------------------------------------------------------------------
*/
PF.fn.list_fluid_width = function() {
if(!$("body").is_fluid()) return;
var $content_listing = $(PF.obj.listing.selectors.content_listing_visible),
$pad_content_listing = $(PF.obj.listing.selectors.pad_content, $content_listing),
$list_item = $(PF.obj.listing.selectors.list_item, $content_listing),
list_item_width = $list_item.outerWidth(true),
list_item_gutter = $list_item.outerWidth(true) - $list_item.width();
PF.obj.listing.content_listing_ratio = parseInt(($content_listing.width()+list_item_gutter) / list_item_width);
if($list_item.length < PF.obj.listing.content_listing_ratio) {
$pad_content_listing.css("width", "100%");
return;
}
if(PF.fn.isDevice(["tablet", "laptop", "desktop"])) {
// $pad_content_listing.width((PF.obj.listing.content_listing_ratio * list_item_width) - list_item_gutter);
}
if(PF.obj.follow_scroll.$node.hasClass("position-fixed")) {
PF.obj.follow_scroll.$node.width($(".content-width").first().width());
}
};
/**
* PEAFOWL TABS
* -------------------------------------------------------------------------------------------------
*/
PF.obj.tabs = {
hashdata: {}
};
PF.fn.show_tab = function(tab) {
if(typeof tab == "undefined") return;
var $this = $("a[data-tab=" + tab + "]", ".content-tabs");
$("li", $this.closest("ul")).removeClass("current");
$this.closest("li").addClass("current");
var $tab_content_group = $("#tabbed-content-group");
$target = $("#"+$this.data("tab"));
$(".tabbed-content", $tab_content_group).removeClass("visible").hide();
$($target, $tab_content_group).addClass("visible").show();
// Show/hide the listing sorting
$("[data-content=list-selection]").removeClass("visible").addClass("hidden");
$("[data-content=list-selection][data-tab="+$this.data("tab")+"]").removeClass("hidden").addClass("visible");
if($tab_content_group.exists()){
var $list_item_target = $(PF.obj.listing.selectors.list_item+":not(.jsly)", $target),
target_fade = !$target.hasClass("jsly");
if($target.data("load") == "ajax" && $target.data("empty") !== "true" && !$(PF.obj.listing.selectors.list_item, $target).exists()){
PF.fn.listing.queryString.stock_load();
$target.html(PF.obj.listing.template.fill);
PF.fn.loading.inline($(PF.obj.listing.selectors.content_listing_loading, $target));
PF.fn.listing.queryString.stock_new();
PF.fn.listing.ajax();
} else {
PF.fn.listing.queryString.stock_current();
PF.fn.listing.columnizer(false, 0, false);
$list_item_target[target_fade ? "fadeIn" : "show"]();
}
}
PF.fn.listing.columnizerQueue();
if($(PF.obj.listing.selectors.content_listing_visible).data("queued") == true) {
PF.fn.listing.columnizer(true, 0);
}
};
/**
* PEAFOWL LISTINGS
* -------------------------------------------------------------------------------------------------
*/
PF.obj.listing = {
columns: "",
columns_number: 1,
current_column: "",
current_column: "",
XHR: {},
query_string: PF.fn.get_url_vars(),
calling: false,
content_listing_ratio: 1,
selectors: {
sort: ".sort-listing .current [data-sort]",
content_listing: ".content-listing",
content_listing_visible: ".content-listing:visible",
content_listing_loading: ".content-listing-loading",
content_listing_load_more: ".content-listing-more",
content_listing_pagination: ".content-listing-pagination",
empty_icon: ".icon icon-drawer",
pad_content: ".pad-content-listing",
list_item: ".list-item",
},
template: {
fill: $("[data-template=content-listing]").html(),
empty: $("[data-template=content-listing-empty]").html(),
loading: $("[data-template=content-listing-loading]").html()
}
};
PF.fn.listing = {};
PF.fn.listing.show = function(response, callback) {
$content_listing = $("#content-listing-tabs").exists() ? $(PF.obj.listing.selectors.content_listing_visible, "#content-listing-tabs") : $(PF.obj.listing.selectors.content_listing);
PF.fn.loading.inline(PF.obj.listing.selectors.content_listing_loading);
//$(PF.obj.listing.selectors.list_item+":not(.jsly)", $content_listing).imagesLoaded(function(){
var items = PF.obj.listing.selectors.list_item,
$subjects = $(items+":visible", PF.obj.listing.selectors.content_listing_visible),
$targets = $(items+":hidden", PF.obj.listing.selectors.content_listing_visible);
if((typeof response !== "undefined" && $(response.html).length < PF.obj.config.listing.items_per_page) || $(PF.obj.listing.selectors.list_item, $content_listing).length < PF.obj.config.listing.items_per_page) {
PF.fn.listing.removeLoader($content_listing);
}
if($(PF.obj.listing.selectors.content_listing_pagination, $content_listing).is("[data-type=classic]") || !$("[data-action=load-more]", $content_listing).exists()) {
$(PF.obj.listing.selectors.content_listing_loading, $content_listing).remove();
}
if($subjects.length == 0) {
$targets.show();
PF.fn.listing.columnizer(false, 0);
PF.obj.listing.recolumnize = true;
}
var animation_time = $subjects.length == 0 ? 0 : null;
animation_time = 0;
PF.fn.listing.columnizer(PF.obj.listing.recolumnize, animation_time, $subjects.length == 0);
$targets.hide();
PF.obj.listing.recolumnize = false;
if(PF.fn.isDevice(["laptop", "desktop"])) {
$targets.each(function() { // too much CPU for this
$(this).show().find(".image-container").hide();
var callTime = $.now();
var $this = $(this);
var $target = $(".image-container", $this);
$(".image-container", this).imagesLoaded(function(){
var loadTime = $.now() - callTime;
if($subjects.length == 0) {
if(loadTime > PF.obj.config.animation.normal) {
$target.fadeIn(PF.obj.config.animation.normal);
} else {
$target.show();
}
} else {
$target.fadeIn(PF.obj.config.animation.normal);
}
});
});
} else {
$targets.show();
}
PF.obj.listing.calling = false;
var visible_loading = $(PF.obj.listing.selectors.content_listing_loading, $content_listing).exists() && ($(PF.obj.listing.selectors.content_listing_loading, $content_listing).is_in_viewport());
if(typeof PF.obj.listing.show_load_more == typeof undefined) {
PF.obj.listing.show_load_more = visible_loading;
}
$(PF.obj.listing.selectors.content_listing_loading, $content_listing)[(visible_loading ? "add" : "remove") + "Class"]("visibility-hidden");
$(PF.obj.listing.selectors.content_listing_load_more, $content_listing)[(PF.obj.listing.show_load_more ? "show" : "hide")]();
var State = History.getState();
if(State.data && typeof State.data.scrollTop !== "undefined") {
if($(window).scrollTop() !== State.data.scrollTop) {
//$(window).scrollTop(State.data.scrollTop);
}
}
if(typeof callback == "function") {
callback();
}
//});
};
PF.fn.listing.removeLoader = function(obj) {
var remove = [PF.obj.listing.selectors.content_listing_load_more, PF.obj.listing.selectors.content_listing_loading];
if($(PF.obj.listing.selectors.content_listing_pagination, $content_listing).is("[data-type=endless]")) {
remove.push(PF.obj.listing.selectors.content_listing_pagination);
}
$.each(remove, function(i,v) {
$(v, obj).remove();
});
};
PF.fn.listing.queryString = {
// Stock the querystring values from initial load
stock_load: function() {
var $content_listing = $(PF.obj.listing.selectors.content_listing_visible),
params = PF.fn.deparam($content_listing.data("params"));
PF.obj.listing.hidden_params = typeof $content_listing.data("params-hidden") !== "undefined" ? PF.fn.deparam($content_listing.data("params-hidden")) : null;
if(typeof PF.obj.listing.query_string.action == "undefined") {
PF.obj.listing.query_string.action = $content_listing.data("action") || "list";
}
if(typeof PF.obj.listing.query_string.list == "undefined") {
PF.obj.listing.query_string.list = $content_listing.data("list");
}
if(typeof PF.obj.listing.query_string.sort == "undefined") {
if(typeof params !== "undefined" && typeof params.sort !== "undefined") {
PF.obj.listing.query_string.sort = params.sort;
} else {
PF.obj.listing.query_string.sort = $(":visible"+PF.obj.listing.selectors.sort).data("sort");
}
}
if(typeof PF.obj.listing.query_string.page == "undefined") {
PF.obj.listing.query_string.page = 1;
}
$content_listing.data("page", PF.obj.listing.query_string.page);
// Stock the real ajaxed hrefs for ajax loads
$(PF.obj.listing.selectors.content_listing+"[data-load=ajax]").each(function(){
var $sortable_switch = $("[data-tab="+$(this).attr("id")+"]"+PF.obj.listing.selectors.sort);
var dataParams = PF.fn.deparam($(this).data("params")),
dataParamsHidden = PF.fn.deparam($(this).data("params-hidden")),
params = {
q: dataParams && dataParams.q ? dataParams.q : null,
list: $(this).data("list"),
sort: $sortable_switch.exists() ? $sortable_switch.data("sort") : (dataParams && dataParams.sort ? dataParams.sort: null),
page: dataParams && dataParams.page ? dataParams.page : 1
};
if(dataParamsHidden && dataParamsHidden.list) {
delete params.list;
}
for(var k in params) {
if(!params[k]) delete params[k];
}
});
// The additional params setted in data-params=""
for(var k in params) {
if(/action|list|sort|page/.test(k) == false) {
PF.obj.listing.query_string[k] = params[k];
}
}
// The additional params setted in data-hidden-params=""
for(var k in PF.obj.listing.hidden_params) {
if(/action|list|sort|page/.test(k) == false) {
PF.obj.listing.query_string[k] = PF.obj.listing.hidden_params[k];
}
}
},
// Stock new querystring values for initial ajax call
stock_new: function(){
var $content_listing = $(PF.obj.listing.selectors.content_listing_visible),
params = PF.fn.deparam($content_listing.data("params"));
if($content_listing.data("offset")) {
PF.obj.listing.query_string.offset = $content_listing.data("offset");
} else {
delete PF.obj.listing.query_string.offset;
}
PF.obj.listing.query_string.action = $content_listing.data("action") || "list";
PF.obj.listing.query_string.list = $content_listing.data("list");
if(typeof params !== "undefined" && typeof params.sort !== "undefined") {
PF.obj.listing.query_string.sort = params.sort;
} else {
PF.obj.listing.query_string.sort = $(":visible"+PF.obj.listing.selectors.sort).data("sort");
}
PF.obj.listing.query_string.page = 1;
},
// Stock querystring values for static tab change
stock_current: function(){
this.stock_new();
PF.obj.listing.query_string.page = $(PF.obj.listing.selectors.content_listing_visible).data("page");
}
};
// Initial load -> Stock the current querystring
PF.fn.listing.queryString.stock_load();
PF.fn.listing.ajax = function() {
if(PF.obj.listing.calling == true) {
return;
}
PF.obj.listing.calling = true;
var $content_listing = $(PF.obj.listing.selectors.content_listing_visible),
$pad_content_listing = $(PF.obj.listing.selectors.pad_content, $content_listing);
$(PF.obj.listing.selectors.content_listing_load_more, $content_listing).hide();
$(PF.obj.listing.selectors.content_listing_loading, $content_listing).removeClass("visibility-hidden").show();
PF.obj.listing.XHR = $.ajax({
type: "POST",
data: $.param($.extend({}, PF.obj.listing.query_string, $.ajaxSettings.data))
}).complete(function(XHR) {
var response = XHR.responseJSON;
var removePagination = function() {
$(PF.obj.listing.selectors.content_listing_loading+","+PF.obj.listing.selectors.content_listing_pagination+":not([data-visibility=visible])", $content_listing).remove();
},
setEmptyTemplate = function() {
$content_listing.data("empty", "true").html(PF.obj.listing.template.empty);
$("[data-content=list-selection][data-tab="+$content_listing.attr("id")+"]").addClass("disabled");
};
if(XHR.readyState == 4 && typeof response !== "undefined") {
$("[data-content=list-selection][data-tab="+$content_listing.attr("id")+"]").removeClass("disabled");
// Bad Request Bad Request what you gonna do when they come for ya?
if(XHR.status !== 200) {
// This is here to inherit the emptys
var response_output = typeof response.error !== "undefined" && typeof response.error.message !== "undefined" ? response.error.message : "Bad request";
PF.fn.growl.call("Error: "+response_output);
$content_listing.data("load", "");
}
// Empty HTML
if((typeof response.html == "undefined" || response.html == "") && $(PF.obj.listing.selectors.list_item, $content_listing).length == 0) {
setEmptyTemplate();
}
// End of the line
if(typeof response.html == "undefined" || response.html == "") {
removePagination();
PF.obj.listing.calling = false;
if(typeof PF.fn.listing_end == "function") {
PF.fn.listing_end();
}
return;
}
// Listing stuff
$content_listing.data({
"load": "",
"page": PF.obj.listing.query_string.page
});
var url_object = $.extend({}, PF.obj.listing.query_string);
for(var k in PF.obj.listing.hidden_params) {
if(typeof url_object[k] !== "undefined") {
delete url_object[k];
}
}
delete url_object["action"];
for(var k in url_object) {
if(!url_object[k]) delete url_object[k];
}
// get the fancy URL with scrollTop attached
if(document.URL.indexOf("?" + $.param(url_object)) == -1) {
var url = window.location.href;
url = url.split("?")[0].replace(/\/$/, "") + "/?" + $.param(url_object);
if(window.location.hash) {
url = url.replace(window.location.hash, '');
}
History.pushState({pushed: "pagination", scrollTop: $(window).scrollTop()}, document.title, url);
}
$("a[data-tab="+$content_listing.attr("id")+"]").attr("href", document.URL);
$pad_content_listing.append(response.html);
PF.fn.listing.show(response, function() {
$(PF.obj.listing.selectors.content_listing_loading, $content_listing).addClass("visibility-hidden");
});
} else {
// Network error, abort or something similar
PF.obj.listing.calling = false;
$content_listing.data("load", "");
removePagination();
if($(PF.obj.listing.selectors.list_item, $content_listing).length == 0) {
setEmptyTemplate();
}
if(XHR.readyState !== 0) {
PF.fn.growl.call(PF.fn._s("An error occurred. Please try again later."));
}
}
if(typeof PF.fn.listing.ajax.callback == "function") {
PF.fn.listing.ajax.callback(XHR);
}
});
};
PF.fn.listing.columnizerQueue = function() {
$(PF.obj.listing.selectors.content_listing+":hidden").data("queued", true);
};
PF.fn.listing.refresh = function(animation_time) {
PF.fn.listing.columnizer(true, animation_time, false);
$(PF.obj.listing.selectors.list_item).show();
};
// Peafowl's masonry approach... Just because godlike.
var width = $(window).width();
PF.fn.listing.columnizer = function(forced, animation_time, hard_forced) {
var device_to_columns = { // default
phone: 1,
phablet: 3,
tablet: 4,
laptop: 5,
desktop: 6,
largescreen: 7,
};
if(typeof forced !== "boolean") var forced = false;
if(typeof PF.obj.listing.mode == "undefined") forced = true;
if(typeof hard_forced !== "boolean") {
var hard_forced = false,
default_hard_forced = true;
} else {
var default_hard_forced = false;
}
if(!hard_forced && default_hard_forced) {
if(width !== $(window).width() || forced) {
hard_forced = true;
}
}
if(typeof animation_time == typeof undefined) var animation_time = PF.obj.config.animation.normal;
//animation_time = 0;
var $container = $("#content-listing-tabs").exists() ? $(PF.obj.listing.selectors.content_listing_visible, "#content-listing-tabs") : $(PF.obj.listing.selectors.content_listing),
$pad_content_listing = $(PF.obj.listing.selectors.pad_content, $container),
list_mode = "responsive",
$list_item = $(forced || hard_forced ? PF.obj.listing.selectors.list_item : PF.obj.listing.selectors.list_item+":not(.jsly)", $container);
$container.addClass("jsly");
// Get the device columns from global config
if(typeof PF.obj.config.listing.device_to_columns !== "undefined") {
device_to_columns = $.extend({}, device_to_columns, PF.obj.config.listing.device_to_columns);
}
// Get the device columns from the dom
if($container.data("device-columns")) {
device_to_columns = $.extend({}, device_to_columns, $container.data("device-columns"));
}
PF.obj.listing.mode = list_mode;
PF.obj.listing.device = PF.fn.getDeviceName();
if(!$list_item.exists()) return;
if(typeof $container.data("columns") !== "undefined" && !forced && !hard_forced){
PF.obj.listing.columns = $container.data("columns");
PF.obj.listing.columns_number = $container.data("columns").length - 1;
PF.obj.listing.current_column = $container.data("current_column");
} else {
var $list_item_1st = $list_item.first();
$list_item_1st.css("width", "");
PF.obj.listing.columns = new Array();
PF.obj.listing.columns_number = device_to_columns[PF.fn.getDeviceName()];
for(i=0; i<PF.obj.listing.columns_number; i++){
PF.obj.listing.columns[i+1] = 0;
}
PF.obj.listing.current_column = 1;
}
$container.removeClass("small-cols").addClass(PF.obj.listing.columns_number > 6 ? "small-cols" : "");
$pad_content_listing.css("width", "100%");
var delay = 0;
$list_item.each(function(index) {
$(this).addClass("jsly");
var $list_item_img = $(".list-item-image", this),
$list_item_src = $(".list-item-image img", this),
$list_item_thumbs = $(".list-item-thumbs", this),
isJslyLoaded = $list_item_src.hasClass("jsly-loaded");
$list_item_src.show();
if(hard_forced) {
$(this).css({top: "", left: "", height: "", position: ""});
$list_item_img.css({maxHeight: "", height: ""});
$list_item_src.removeClass("jsly").css({width: "", height: ""}).parent().css({
marginLeft: "",
marginTop: ""
});
$("li", $list_item_thumbs).css({width: "", height: ""});
}
var width_responsive = PF.obj.listing.columns_number == 1 ? "100%" : parseInt((1/PF.obj.listing.columns_number)*($container.width() - (10 * (PF.obj.listing.columns_number - 1))) + "px");
$(this).css("width", width_responsive);
if(PF.obj.listing.current_column > PF.obj.listing.columns_number){
PF.obj.listing.current_column = 1
}
$(this).attr("data-col", PF.obj.listing.current_column);
if(!$list_item_src.exists()){
var empty = true;
$list_item_src = $(".image-container .empty", this);
}
var already_shown = $(this).is(":visible");
$list_item.show();
var isFixed = $list_item_img.hasClass("fixed-size");
var image = {
w: parseInt($list_item_src.attr("width")),
h: parseInt($list_item_src.attr("height"))
};
image.ratio = image.w / image.h;
//$list_item_src.removeAttr("width height"); // para fixed
if(hard_forced && PF.obj.listing.columns_number > 1) {
$list_item_src.css({width: "auto", height: "auto"});
$(".image-container:not(.list-item-avatar-cover)", this).css({width: "", height: "auto"});
} else {
if(image.w > $container.width()) {
$(".image-container:not(.list-item-avatar-cover)", this).css(image.ratio < 1 ? {maxWidth: "100%", height: "auto"} : {height: "100%", width: "auto"});
$list_item_src.css(image.ratio < 1 ? {maxWidth: "100%", height: "auto"} : {height: "100%", width: "auto"});
}
}
// Meet the minHeight?
if(empty || ($list_item_img.css("min-height") && !$list_item_src.hasClass("jsly"))) {
var list_item_img_min_height = parseInt($list_item_img.css("height")),
col = {
w: $(this).width(),
h: isFixed ? $(this).width() : null
},
magicWidth = Math.min(image.w, image.w < col.w ? image.w : col.w);
if(isFixed){
$list_item_img.css({height: col.w}); // Sets the item container height
if(image.ratio <= 3 && (image.ratio > 1 || image.ratio==1)) { // Landscape or square
image.h = Math.min(image.h, image.w < col.w ? image.w : col.w);
image.w = image.h * image.ratio;
} else { // Portrait
image.w = magicWidth;
image.h = image.w / image.ratio;
}
var list_item_img_min_h = parseInt($list_item_img.css("min-height"));
$list_item_img.css("min-height", 0);
} else { // Fluid height
image.w = magicWidth;
if(image.ratio >= 3 || image.ratio < 1 || image.ratio==1){ // Portrait or square
image.h = image.w / image.ratio;
} else { // Landscape
image.h = Math.min(image.h, image.w);
image.w = image.h * image.ratio;
}
if(empty) {
image.h = col.w;
}
$list_item_img.css({height: image.h}); // Fill some gaps
}
$list_item_src.css({width: image.w, height: image.h});
if($list_item_src.width() == 0) {
$list_item_src.css({width: magicWidth, height: magicWidth / image.ratio});
}
if($(".image-container", this).is(".list-item-avatar-cover")) {
$list_item_src.css(isFixed ? {width: "auto", height: "100%"} : {width: "100%", height: "auto"});
}
if($list_item_src.height() !== 0 && ($list_item_img.height() > $list_item_src.height() || isFixed)){
$list_item_src.parent().css({
"marginTop": ($list_item_img.outerHeight() - $list_item_src.height())/2
});
}
if($list_item_img.width() < $list_item_src.width()){
$list_item_src.parent().css({
"marginLeft": - (($list_item_src.outerWidth()-$list_item_img.width())/2) + "px"
});
}
var list_item_src_pitfall_x = Math.max($list_item_src.position().left * 2, 0),
list_item_src_pitfall_y = Math.max($list_item_src.position().top * 2, 0);
// Do we need upscale, and is safe to upscale the image?
if(PF.obj.listing.columns_number > 6 && (list_item_src_pitfall_x > 0 || list_item_src_pitfall_y > 0)){
var pitfall_ratio_x = list_item_src_pitfall_x/$list_item_img.width(),
pitfall_ratio_y = list_item_src_pitfall_y/$list_item_img.height(),
pitfall = {};
if(pitfall_ratio_x <= .25 && pitfall_ratio_y <= .25){
if(pitfall_ratio_x > pitfall_ratio_y){
pitfall.width = list_item_src_pitfall_x + $list_item_img.width();
pitfall.height = pitfall.width / image.ratio;
} else {
pitfall.height = list_item_src_pitfall_y + $list_item_src.height();
pitfall.width = pitfall.height * image.ratio;
}
$list_item_src.css(pitfall);
$list_item_src.parent().css({
"marginLeft": -(($list_item_src.width()-$list_item_img.width())/2),
"marginTop": 0
});
}
}
if($list_item_thumbs.exists()) {
$("li", $list_item_thumbs).css({width: 100/$("li", $list_item_thumbs).length + "%"}).css({height: $("li", $list_item_thumbs).width()});
}
if(!already_shown) {
$list_item.hide();
}
}
//$pad_content_listing.css("visibility", "visible");
if(!$list_item_src.hasClass("jsly") && $(this).is(":hidden")) {
$(this).css('top', "100%");
}
PF.obj.listing.columns[PF.obj.listing.current_column] += $(this).outerHeight(true);
if(PF.obj.listing.columns_number == 1) {
$(this).removeClass("position-absolute");
} else {
if($(this).is(":animated")) {
animation_time = 0;
}
$(this).addClass("position-absolute");
var new_left = $(this).outerWidth(true)*(PF.obj.listing.current_column - 1);
var must_change_left = parseInt($(this).css("left")) != new_left;
if(must_change_left) {
animate_grid = true;
$(this).animate({
left: new_left
}, animation_time);
}
var new_top = PF.obj.listing.columns[PF.obj.listing.current_column] - $(this).outerHeight(true);
if(parseInt($(this).css("top")) != new_top) {
animate_grid = true;
$(this).animate({
top: new_top
}, animation_time);
if(must_change_left) {
delay = 1;
}
}
}
if(already_shown) {
$list_item.show();
}
if(!isJslyLoaded) {
$list_item_src.addClass("jsly").hide().imagesLoaded(function(){
$(this).show().addClass("jsly-loaded");
});
}
// Fill the shortest column (fluid view only)
if(!isFixed) {
var minCol, minH, currentH;
for(var i=1; i<=PF.obj.listing.columns_number; i++){
currentH = PF.obj.listing.columns[i];
if(typeof minH == "undefined") {
minH = currentH;
minCol = i;
}
if(PF.obj.listing.columns[i] == 0) {
minCol = i;
break;
}
if(currentH < minH) {
minH = PF.obj.listing.columns[i];
minCol = i;
}
}
PF.obj.listing.current_column = minCol;
} else {
PF.obj.listing.current_column++;
}
});
$container.data({"columns": PF.obj.listing.columns, "current_column": PF.obj.listing.current_column});
var content_listing_height = 0;
$.each(PF.obj.listing.columns, function(i, v){
if(v>content_listing_height) {
content_listing_height = v;
}
});
PF.obj.listing.width = $container.width();
if(typeof PF.obj.listing.height !== typeof undefined) {
var old_listing_height = PF.obj.listing.height;
}
PF.obj.listing.height = content_listing_height;
var do_listing_h_resize = typeof old_listing_height !== typeof undefined && old_listing_height !== PF.obj.listing.height;
if(!do_listing_h_resize) {
$pad_content_listing.height(content_listing_height);
PF.fn.list_fluid_width();
}
// Magic!
if(do_listing_h_resize) {
$pad_content_listing.height(old_listing_height);
setTimeout(function() {
$pad_content_listing.animate({height: content_listing_height}, animation_time, function() {
PF.fn.list_fluid_width();
});
}, animation_time * delay);
}
$container.data("list-mode", PF.obj.listing.mode);
$(PF.obj.listing.selectors.content_listing_visible).data("queued", false);
};
/**
* PEAFOWL LOADERS
* -------------------------------------------------------------------------------------------------
*/
PF.fn.loading = {
spin: {
small: {lines: 11, length: 0, width: 3, radius: 7, speed: 1, trail: 45, blocksize: 20}, // 20x20
normal: {lines: 11, length: 0, width: 5, radius: 10, speed: 1, trail: 45, blocksize: 30}, // 30x30
big: {lines: 11, length: 0, width: 7, radius: 13, speed: 1, trail: 45, blocksize: 40}, // 40x40
huge: {lines: 11, length: 0, width: 9, radius: 16, speed: 1, trail: 45, blocksize: 50} // 50x50
},
inline: function($target, options){
if(typeof $target == "undefined") return;
if($target instanceof jQuery == false) {
var $target = $($target);
}
var defaultoptions = {
size: "normal",
color: $("body").css("color"),
center: false,
position: "absolute",
shadow: false,
valign: "top"
};
if(typeof options == "undefined"){
options = defaultoptions;
} else {
for(var k in defaultoptions) {
if(typeof options[k] == "undefined") {
options[k] = defaultoptions[k];
}
}
}
var size = PF.fn.loading.spin[options.size];
PF.fn.loading.spin[options.size].color = options.color;
PF.fn.loading.spin[options.size].shadow = options.shadow;
$target.html('<span class="loading-indicator"></span>' + (typeof options.message !== "undefined" ? '<span class="loading-text">'+ options.message +'</span>' : '')).css({"line-height": PF.fn.loading.spin[options.size].blocksize + "px"});
$(".loading-indicator", $target).css({width: PF.fn.loading.spin[options.size].blocksize, height: PF.fn.loading.spin[options.size].blocksize}).spin(PF.fn.loading.spin[options.size]);
if(options.center){
$(".loading-indicator", $target.css("textAlign", "center")).css({
position: options.position,
top: "50%",
left: "50%",
marginTop: -(PF.fn.loading.spin[options.size].blocksize/2),
marginLeft: -(PF.fn.loading.spin[options.size].blocksize/2)
});
}
if(options.valign == "center") {
$(".loading-indicator,.loading-text", $target).css("marginTop", ($target.height()-PF.fn.loading.spin[options.size].blocksize)/2 + "px");
}
$(".spinner", $target).css({top: PF.fn.loading.spin[options.size].blocksize/2 + "px", left: PF.fn.loading.spin[options.size].blocksize/2 + "px"});
},
fullscreen: function(){
$("body").append('<div class="fullscreen" id="pf-fullscreen-loader"><div class="fullscreen-loader black-bkg"><span class="loading-txt">' + PF.fn._s("loading") + '</span></div></div>');
$(".fullscreen-loader", "#pf-fullscreen-loader").spin(PF.fn.loading.spin.huge);
$("#pf-fullscreen-loader").css("opacity", 1);
},
destroy : function($target){
var $loader_fs = $("#pf-fullscreen-loader"),
$loader_os = $("#pf-onscreen-loader");
if($target == "fullscreen") $target = $loader_fs;
if($target == "onscreen") $target = $loader_os;
if(typeof $target !== "undefined"){
$target.remove();
} else {
$loader_fs.remove();
$loader_os.remove();
}
}
};
/**
* PEAFOWL FORM HELPERS
* -------------------------------------------------------------------------------------------------
*/
jQuery.fn.disableForm = function(){
$(this).data("disabled", true);
$(":input", this).each(function(){
$(this).attr("disabled", true);
});
return this;
};
jQuery.fn.enableForm = function(){
$(this).data("disabled", false);
$(":input", this).removeAttr("disabled");
return this;
};
/**
* PEAFOWL FOLLOW SCROLL
* -------------------------------------------------------------------------------------------------
*/
PF.obj.follow_scroll = {
Y: 0,
y: 0,
$node: $(".follow-scroll"),
node_h: 0,
set: function() {
var exists = PF.obj.follow_scroll.$node.closest(".follow-scroll-wrapper").exists();
if(exists) {
PF.obj.follow_scroll.$node.closest(".follow-scroll-wrapper").css("position", "static");
}
PF.obj.follow_scroll.y = PF.obj.follow_scroll.$node.exists() ? PF.obj.follow_scroll.$node.offset().top : null;
PF.obj.follow_scroll.node_h = PF.obj.follow_scroll.$node.outerHeight();
if(exists) {
PF.obj.follow_scroll.$node.closest(".follow-scroll-wrapper").css("position", "");
}
},
checkDocumentHeight: function(){
var lastHeight = document.body.clientHeight, newHeight, timer;
(function run(){
newHeight = document.body.clientHeight;
if(lastHeight != newHeight)
PF.obj.follow_scroll.set();
lastHeight = newHeight;
timer = setTimeout(run, 200);
})();
}
};
PF.obj.follow_scroll.set();
PF.obj.follow_scroll.checkDocumentHeight();
PF.obj.follow_scroll.process = function(){
if(!PF.obj.follow_scroll.$node.exists() || PF.fn.isDevice("phone")) return; // Nothing to do here
var $parent = PF.obj.follow_scroll.$node.closest("[data-content=follow-scroll-parent]");
if(!$parent.exists()) {
$parent = PF.obj.follow_scroll.$node.closest(".content-width");
}
var top = PF.obj.follow_scroll.node_h, // - parseInt($("#top-bar").css("top"))
cond = $(window).scrollTop() > PF.obj.follow_scroll.y - top;
if($("#top-bar").css("position") !== "fixed") {
PF.obj.follow_scroll.Y -= $(window).scrollTop();
if(PF.obj.follow_scroll.Y < 0) PF.obj.follow_scroll.Y = 0;
cond = cond && $(window).scrollTop() > PF.obj.follow_scroll.y;
}
var $wrapper = PF.obj.follow_scroll.$node.closest('.follow-scroll-wrapper');
if((cond && $wrapper.hasClass("position-fixed")) || (!cond && !$wrapper.hasClass("position-fixed"))) {
return;
}
if(!$wrapper.exists()) {
PF.obj.follow_scroll.$node.wrapAll('<div class="follow-scroll-wrapper" />');
$wrapper = PF.obj.follow_scroll.$node.closest('.follow-scroll-wrapper');
}
$wrapper.height(PF.obj.follow_scroll.node_h);
PF.obj.follow_scroll.Y = $("#top-bar").outerHeight(true) + parseInt($("#top-bar").css("top"));
if(cond){
var placeholderHeight = PF.obj.follow_scroll.$node.outerHeight(true);
$wrapper
.addClass("position-fixed")
.css({top: PF.obj.follow_scroll.Y});
if(!$wrapper.next().is(".follow-scroll-placeholder")) {
$wrapper.after($('<div class="follow-scroll-placeholder" />').css("height", placeholderHeight));
} else {
$wrapper.parent().find(".follow-scroll-placeholder").show();
}
} else {
$wrapper.removeClass("position-fixed").css({top: "", width: "", height: ""});
$wrapper.parent().find(".follow-scroll-placeholder").hide();
}
$("[data-show-on=follow-scroll]")[(cond ? "remove" : "add") + "Class"]("hidden soft-hidden");
if(!$("html").data("top-bar-box-shadow-prevent")) {
$("html")[(cond ? "add" : "remove") + "Class"]("top-bar-box-shadow-none");
}
PF.obj.follow_scroll.$node[(cond ? "add" : "remove") + "Class"]("content-width");
};
PF.fn.isDevice = function(device) {
if(typeof device == "object") {
var device = '.' + device.join(",.");
} else {
var device = '.' + device;
}
return $("html").is(device);
};
PF.fn.getDeviceName = function() {
var current_device;
$.each(PF.obj.devices, function(i,v) {
if(PF.fn.isDevice(v)) {
current_device = v;
return true;
}
});
return current_device;
};
PF.fn.topMenu = {
vars : {
$button : $("[data-action=top-bar-menu-full]", "#top-bar"),
menu : "#menu-fullscreen",
speed: PF.obj.config.animation.fast,
menu_top: (parseInt($("#top-bar").outerHeight()) + parseInt($("#top-bar").css("top")) + parseInt($("#top-bar").css("margin-top")) + parseInt($("#top-bar").css("margin-bottom")) - parseInt($("#top-bar").css("border-bottom-width"))) + "px"
},
show: function(speed) {
if($("body").is(":animated")) return;
if(typeof speed == "undefined") {
var speed = this.vars.speed;
}
this.vars.$button.addClass("current");
$("html").addClass("menu-fullscreen-visible");
$("#top-bar").css("position", "fixed").append($("<div/>", {
id: "menu-fullscreen",
"class": "touch-scroll",
html: $('<ul/>', {
html: $(".top-bar-left").html() + $(".top-bar-right").html()
})
}).css({
borderTopWidth: this.vars.menu_top,
left: "-100%",
//height: $(window).height(), // aca
}));
var $menu = $(this.vars.menu);
$("li.phone-hide, li > .top-btn-text, li > .top-btn-text > span, li > a > .top-btn-text > span", $menu).each(function() {
$(this).removeClass("phone-hide");
});
$("[data-action=top-bar-menu-full]", $menu).remove();
$(".btn.black, .btn.default, .btn.blue, .btn.green, .btn.orange, .btn.red, .btn.transparent", $menu).removeClass("btn black default blue green orange red transparent");
setTimeout(function() {
$menu.css({transform: "translate(100%, 0)"});
}, 1);
setTimeout(function() {
$("html").css({backgroundColor: ""});
}, this.vars.speed);
},
hide: function(speed) {
if($("body").is(":animated")) return;
if(!$(this.vars.menu).is(":visible")) return;
if(typeof speed == "undefined") {
var speed = this.vars.speed;
}
$("#top-bar").css("position", "");
this.vars.$button.removeClass("current");
$("html").removeClass("menu-fullscreen-visible");
var $menu = $(this.vars.menu);
$menu.css({
transform: "none"
});
setTimeout(function() {
$menu.remove();
}, speed);
}
};
/**
* PEAFOWL FULL SCREEN VIEWER
* -------------------------------------------------------------------------------------------------
*/
// nota: incompleto
/*$("img", ".list-item-image").click(function(e){
if(!$(this).closest(".fullscreen-enable").exists()) return;
e.preventDefault();
$(this).closest(PF.obj.listing.selectors.content_listing).find(".navigation-pointer").removeClass("navigation-pointer");
$(this).closest(".list-item").addClass("navigation-pointer");
PF.fn.fullscreen.content($(this).attr("src").replace("_e",""));
PF.fn.fullscreen.call();
});
$("a", ".fullscreen-viewer-navigation").click(function(){
if($(this).hasClass("disabled")) return;
$current_navigation_pointer = $(".navigation-pointer", PF.obj.listing.selectors.content_listing);
switch($(this).attr("data-action")){
case "prev":
if(!$current_navigation_pointer.prev().exists()) return;
$target = $current_navigation_pointer.prev();
break;
case "next":
if(!$current_navigation_pointer.next().exists()) return;
$target = $current_navigation_pointer.next();
break;
case "close":
$(this).closest(".fullscreen").hide().find(".fullscreen-viewer-content img").attr("src", "");
$("body").removeClass("overflow-hidden");
return;
break;
}
$current_navigation_pointer.removeClass("navigation-pointer");
$target.addClass("navigation-pointer");
$new_navigation_pointer = $(".navigation-pointer", PF.obj.listing.selectors.content_listing);
PF.fn.fullscreen.content($new_navigation_pointer.find(".list-item-image img").attr("src").replace("_e",""));
PF.fn.fullscreen.call();
});*/
/*
PF.fn.fullscreen = {
selectors: {
fullscreen: ".fullscreen",
container: "#fullscreen-viewer",
content: ".fullscreen-viewer-content",
top: ".fullscreen-viewer-top",
nav: ".fullscreen-viewer-navigation"
},
call: function(){
PF.fn.fullscreen.update_nav();
if(!$(this.str.fullscreen).is(":visible")){
$(this.str.fullscreen).show();
$("body").addClass("overflow-hidden");
PF.fn.fullscreen.size();
}
$(this.str.content).hide().imagesLoaded(function(){
PF.fn.fullscreen.size();
$(this).show();
});
},
// Fix the fullscreen size
size: function(){
if(!$(this.str.container).is(":visible")) return;
$("img", this.str.content).css("margin-top", 0);
var window_height = $(window).height();
$(this.str.fullscreen).height(window_height);
var fullscreen_content_height = window_height - ($(this.str.top).length > 0 ? $(this.str.top).height() : 0);
$(this.str.content).height(fullscreen_content_height).show();
var $fullscreen_content_img = $("img", this.str.content),
fullscreen_content_img_height = $("img", this.str.content).height();
$("img", this.str.content).css("margin-top", (fullscreen_content_height - fullscreen_content_img_height)/2);
},
update_nav: function(){
var $navigation_pointer = $(".navigation-pointer"),
$next_button_nav = $(this.str.nav).find('[data-action="next"]'),
$prev_button_nav = $(this.str.nav).find('[data-action="prev"]');
$next_button_nav.toggleClass("disabled", !$navigation_pointer.next().exists());
$prev_button_nav.toggleClass("disabled", !$navigation_pointer.prev().exists());
},
content: function(src){
$("img", this.str.content).remove();
$(".img-src-parent", this.str.content).append('<img src="js/'+src+'" alt="">');
},
next: function(){
},
prev: function(){
}
};
*/
/**
* JQUERY PLUGINS (strictly needed plugins)
* -------------------------------------------------------------------------------------------------
*/
// http://phpjs.org/functions/sprintf/
function sprintf(){var e=/%%|%(\d+\$)?([-+\'#0 ]*)(\*\d+\$|\*|\d+)?(\.(\*\d+\$|\*|\d+))?([scboxXuideEfFgG])/g;var t=arguments;var n=0;var r=t[n++];var i=function(e,t,n,r){if(!n){n=" "}var i=e.length>=t?"":(new Array(1+t-e.length>>>0)).join(n);return r?e+i:i+e};var s=function(e,t,n,r,s,o){var u=r-e.length;if(u>0){if(n||!s){e=i(e,r,o,n)}else{e=e.slice(0,t.length)+i("",u,"0",true)+e.slice(t.length)}}return e};var o=function(e,t,n,r,o,u,a){var f=e>>>0;n=n&&f&&{2:"0b",8:"0",16:"0x"}[t]||"";e=n+i(f.toString(t),u||0,"0",false);return s(e,n,r,o,a)};var u=function(e,t,n,r,i,o){if(r!=null){e=e.slice(0,r)}return s(e,"",t,n,i,o)};var a=function(e,r,a,f,l,c,h){var p,d,v,m,g;if(e==="%%"){return"%"}var y=false;var b="";var w=false;var E=false;var S=" ";var x=a.length;for(var T=0;a&&T<x;T++){switch(a.charAt(T)){case" ":b=" ";break;case"+":b="+";break;case"-":y=true;break;case"'":S=a.charAt(T+1);break;case"0":w=true;S="0";break;case"#":E=true;break}}if(!f){f=0}else if(f==="*"){f=+t[n++]}else if(f.charAt(0)=="*"){f=+t[f.slice(1,-1)]}else{f=+f}if(f<0){f=-f;y=true}if(!isFinite(f)){throw new Error("sprintf: (minimum-)width must be finite")}if(!c){c="fFeE".indexOf(h)>-1?6:h==="d"?0:undefined}else if(c==="*"){c=+t[n++]}else if(c.charAt(0)=="*"){c=+t[c.slice(1,-1)]}else{c=+c}g=r?t[r.slice(0,-1)]:t[n++];switch(h){case"s":return u(String(g),y,f,c,w,S);case"c":return u(String.fromCharCode(+g),y,f,c,w);case"b":return o(g,2,E,y,f,c,w);case"o":return o(g,8,E,y,f,c,w);case"x":return o(g,16,E,y,f,c,w);case"X":return o(g,16,E,y,f,c,w).toUpperCase();case"u":return o(g,10,E,y,f,c,w);case"i":case"d":p=+g||0;p=Math.round(p-p%1);d=p<0?"-":b;g=d+i(String(Math.abs(p)),c,"0",false);return s(g,d,y,f,w);case"e":case"E":case"f":case"F":case"g":case"G":p=+g;d=p<0?"-":b;v=["toExponential","toFixed","toPrecision"]["efg".indexOf(h.toLowerCase())];m=["toString","toUpperCase"]["eEfFgG".indexOf(h)%2];g=d+Math.abs(p)[v](c);return s(g,d,y,f,w)[m]();default:return e}};return r.replace(e,a)};
/**
* jQuery imagesLoaded plugin v1.1.0
* http://github.com/desandro/imagesloaded
* MIT License. by Paul Irish et al.
*/
jQuery.fn.imagesLoaded=function(e){function o(){e.call(t,n)}function u(e){var t=e.target;if(t.src!==i&&$.inArray(t,s)===-1){s.push(t);if(--r<=0){setTimeout(o);n.unbind(".imagesLoaded",u)}}}var t=this,n=t.find("img").add(t.filter("img")),r=n.length,i="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==",s=[];if(!r)o();n.bind("load.imagesLoaded error.imagesLoaded",u).each(function(){var e=this.src;this.src=i;this.src=e});return t};
/**
* TipTip
* Copyright 2010 Drew Wilson
* code.drewwilson.com/entry/tiptip-jquery-plugin
*
* Version 1.3(modified) - Updated: Jun. 23, 2011
* http://drew.tenderapp.com/discussions/tiptip/70-updated-tiptip-with-new-features
*
* This TipTip jQuery plug-in is dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*/
(function($){$.fn.tipTip=function(options){var defaults={activation:"hover",keepAlive:false,maxWidth:"200px",edgeOffset:6,defaultPosition:"bottom",delay:400,fadeIn:200,fadeOut:200,attribute:"title",content:false,enter:function(){},afterEnter:function(){},exit:function(){},afterExit:function(){},cssClass:""};if($("#tiptip_holder").length<=0){var tiptip_holder=$('<div id="tiptip_holder"></div>');var tiptip_content=$('<div id="tiptip_content"></div>');var tiptip_arrow=$('<div id="tiptip_arrow"></div>');$("body").append(tiptip_holder.html(tiptip_content).prepend(tiptip_arrow.html('<div id="tiptip_arrow_inner"></div>')))}else{var tiptip_holder=$("#tiptip_holder");var tiptip_content=$("#tiptip_content");var tiptip_arrow=$("#tiptip_arrow")}return this.each(function(){var org_elem=$(this),data=org_elem.data("tipTip"),opts=data&&data.options||$.extend(defaults,options),callback_data={holder:tiptip_holder,content:tiptip_content,arrow:tiptip_arrow,options:opts};if(data){switch(options){case"show":active_tiptip();break;case"hide":deactive_tiptip();break;case"destroy":org_elem.unbind(".tipTip").removeData("tipTip");break}}else{var timeout=false;org_elem.data("tipTip",{options:opts});if(opts.activation=="hover"){org_elem.bind("mouseenter.tipTip",function(){active_tiptip()}).bind("mouseleave.tipTip",function(){if(!opts.keepAlive){deactive_tiptip()}else{tiptip_holder.one("mouseleave.tipTip",function(){deactive_tiptip()})}})}else{if(opts.activation=="focus"){org_elem.bind("focus.tipTip",function(){active_tiptip()}).bind("blur.tipTip",function(){deactive_tiptip()})}else{if(opts.activation=="click"){org_elem.bind("click.tipTip",function(e){e.preventDefault();active_tiptip();return false}).bind("mouseleave.tipTip",function(){if(!opts.keepAlive){deactive_tiptip()}else{tiptip_holder.one("mouseleave.tipTip",function(){deactive_tiptip()})}})}else{if(opts.activation=="manual"){}}}}}function active_tiptip(){if(opts.enter.call(org_elem,callback_data)===false){return}var org_title;if(opts.content){org_title=$.isFunction(opts.content)?opts.content.call(org_elem,callback_data):opts.content}else{org_title=opts.content=org_elem.attr(opts.attribute);org_elem.removeAttr(opts.attribute)}if(!org_title){return}tiptip_content.html(org_title);tiptip_holder.hide().removeAttr("class").css({margin:"0px","max-width":opts.maxWidth});if(opts.cssClass){tiptip_holder.addClass(opts.cssClass)}tiptip_arrow.removeAttr("style");var top=parseInt(org_elem.offset()["top"]),left=parseInt(org_elem.offset()["left"]),org_width=parseInt(org_elem.outerWidth()),org_height=parseInt(org_elem.outerHeight()),tip_w=tiptip_holder.outerWidth(),tip_h=tiptip_holder.outerHeight(),w_compare=Math.round((org_width-tip_w)/2),h_compare=Math.round((org_height-tip_h)/2),marg_left=Math.round(left+w_compare),marg_top=Math.round(top+org_height+opts.edgeOffset),t_class="",arrow_top="",arrow_left=Math.round(tip_w-12)/2;if(opts.defaultPosition=="bottom"){t_class="_bottom"}else{if(opts.defaultPosition=="top"){t_class="_top"}else{if(opts.defaultPosition=="left"){t_class="_left"}else{if(opts.defaultPosition=="right"){t_class="_right"}}}}var right_compare=(w_compare+left)<parseInt($(window).scrollLeft()),left_compare=(tip_w+left)>parseInt($(window).width());if((right_compare&&w_compare<0)||(t_class=="_right"&&!left_compare)||(t_class=="_left"&&left<(tip_w+opts.edgeOffset+5))){t_class="_right";arrow_top=Math.round(tip_h-13)/2;arrow_left=-12;marg_left=Math.round(left+org_width+opts.edgeOffset);marg_top=Math.round(top+h_compare)}else{if((left_compare&&w_compare<0)||(t_class=="_left"&&!right_compare)){t_class="_left";arrow_top=Math.round(tip_h-13)/2;arrow_left=Math.round(tip_w);marg_left=Math.round(left-(tip_w+opts.edgeOffset+5));marg_top=Math.round(top+h_compare)}}var top_compare=(top+org_height+opts.edgeOffset+tip_h+8)>parseInt($(window).height()+$(window).scrollTop()),bottom_compare=((top+org_height)-(opts.edgeOffset+tip_h+8))<0;if(top_compare||(t_class=="_bottom"&&top_compare)||(t_class=="_top"&&!bottom_compare)){if(t_class=="_top"||t_class=="_bottom"){t_class="_top"}else{t_class=t_class+"_top"}arrow_top=tip_h;marg_top=Math.round(top-(tip_h+5+opts.edgeOffset))}else{if(bottom_compare|(t_class=="_top"&&bottom_compare)||(t_class=="_bottom"&&!top_compare)){if(t_class=="_top"||t_class=="_bottom"){t_class="_bottom"}else{t_class=t_class+"_bottom"}arrow_top=-12;marg_top=Math.round(top+org_height+opts.edgeOffset)}}if(t_class=="_right_top"||t_class=="_left_top"){marg_top=marg_top+5}else{if(t_class=="_right_bottom"||t_class=="_left_bottom"){marg_top=marg_top-5}}if(t_class=="_left_top"||t_class=="_left_bottom"){marg_left=marg_left+5}tiptip_arrow.css({"margin-left":arrow_left+"px","margin-top":arrow_top+"px"});tiptip_holder.css({"margin-left":marg_left+"px","margin-top":marg_top+"px"}).addClass("tip"+t_class);if(timeout){clearTimeout(timeout)}timeout=setTimeout(function(){tiptip_holder.stop(true,true).fadeIn(opts.fadeIn)},opts.delay);opts.afterEnter.call(org_elem,callback_data)}function deactive_tiptip(){if(opts.exit.call(org_elem,callback_data)===false){return}if(timeout){clearTimeout(timeout)}tiptip_holder.fadeOut(opts.fadeOut);opts.afterExit.call(org_elem,callback_data)}})}})(jQuery);
/**
* jQuery UI Touch Punch 0.2.2
* Copyright 2011, Dave Furfero
* Dual licensed under the MIT or GPL Version 2 licenses.
* Depends: jquery.ui.widget jquery.ui.mouse
*/
(function(b){b.support.touch="ontouchend" in document;if(!b.support.touch){return;}var c=b.ui.mouse.prototype,e=c._mouseInit,a;function d(g,h){if(g.originalEvent.touches.length>1){return;}g.preventDefault();var i=g.originalEvent.changedTouches[0],f=document.createEvent("MouseEvents");f.initMouseEvent(h,true,true,window,1,i.screenX,i.screenY,i.clientX,i.clientY,false,false,false,false,0,null);g.target.dispatchEvent(f);}c._touchStart=function(g){var f=this;if(a||!f._mouseCapture(g.originalEvent.changedTouches[0])){return;}a=true;f._touchMoved=false;d(g,"mouseover");d(g,"mousemove");d(g,"mousedown");};c._touchMove=function(f){if(!a){return;}this._touchMoved=true;d(f,"mousemove");};c._touchEnd=function(f){if(!a){return;}d(f,"mouseup");d(f,"mouseout");if(!this._touchMoved){d(f,"click");}a=false;};c._mouseInit=function(){var f=this;f.element.bind("touchstart",b.proxy(f,"_touchStart")).bind("touchmove",b.proxy(f,"_touchMove")).bind("touchend",b.proxy(f,"_touchEnd"));e.call(f);};})(jQuery);
/**
* fileOverview TouchSwipe - jQuery Plugin
* version 1.6.5
*/
(function(a){if(typeof define==="function"&&define.amd&&define.amd.jQuery){define(["jquery"],a)}else{a(jQuery)}}(function(e){var o="left",n="right",d="up",v="down",c="in",w="out",l="none",r="auto",k="swipe",s="pinch",x="tap",i="doubletap",b="longtap",A="horizontal",t="vertical",h="all",q=10,f="start",j="move",g="end",p="cancel",a="ontouchstart" in window,y="TouchSwipe";var m={fingers:1,threshold:75,cancelThreshold:null,pinchThreshold:20,maxTimeThreshold:null,fingerReleaseThreshold:250,longTapThreshold:500,doubleTapThreshold:200,swipe:null,swipeLeft:null,swipeRight:null,swipeUp:null,swipeDown:null,swipeStatus:null,pinchIn:null,pinchOut:null,pinchStatus:null,click:null,tap:null,doubleTap:null,longTap:null,triggerOnTouchEnd:true,triggerOnTouchLeave:false,allowPageScroll:"auto",fallbackToMouseEvents:true,excludedElements:"label, button, input, select, textarea, a, .noSwipe"};e.fn.swipe=function(D){var C=e(this),B=C.data(y);if(B&&typeof D==="string"){if(B[D]){return B[D].apply(this,Array.prototype.slice.call(arguments,1))}else{e.error("Method "+D+" does not exist on jQuery.swipe")}}else{if(!B&&(typeof D==="object"||!D)){return u.apply(this,arguments)}}return C};e.fn.swipe.defaults=m;e.fn.swipe.phases={PHASE_START:f,PHASE_MOVE:j,PHASE_END:g,PHASE_CANCEL:p};e.fn.swipe.directions={LEFT:o,RIGHT:n,UP:d,DOWN:v,IN:c,OUT:w};e.fn.swipe.pageScroll={NONE:l,HORIZONTAL:A,VERTICAL:t,AUTO:r};e.fn.swipe.fingers={ONE:1,TWO:2,THREE:3,ALL:h};function u(B){if(B&&(B.allowPageScroll===undefined&&(B.swipe!==undefined||B.swipeStatus!==undefined))){B.allowPageScroll=l}if(B.click!==undefined&&B.tap===undefined){B.tap=B.click}if(!B){B={}}B=e.extend({},e.fn.swipe.defaults,B);return this.each(function(){var D=e(this);var C=D.data(y);if(!C){C=new z(this,B);D.data(y,C)}})}function z(a0,aq){var av=(a||!aq.fallbackToMouseEvents),G=av?"touchstart":"mousedown",au=av?"touchmove":"mousemove",R=av?"touchend":"mouseup",P=av?null:"mouseleave",az="touchcancel";var ac=0,aL=null,Y=0,aX=0,aV=0,D=1,am=0,aF=0,J=null;var aN=e(a0);var W="start";var T=0;var aM=null;var Q=0,aY=0,a1=0,aa=0,K=0;var aS=null;try{aN.bind(G,aJ);aN.bind(az,a5)}catch(ag){e.error("events not supported "+G+","+az+" on jQuery.swipe")}this.enable=function(){aN.bind(G,aJ);aN.bind(az,a5);return aN};this.disable=function(){aG();return aN};this.destroy=function(){aG();aN.data(y,null);return aN};this.option=function(a8,a7){if(aq[a8]!==undefined){if(a7===undefined){return aq[a8]}else{aq[a8]=a7}}else{e.error("Option "+a8+" does not exist on jQuery.swipe.options")}return null};function aJ(a9){if(ax()){return}if(e(a9.target).closest(aq.excludedElements,aN).length>0){return}var ba=a9.originalEvent?a9.originalEvent:a9;var a8,a7=a?ba.touches[0]:ba;W=f;if(a){T=ba.touches.length}else{a9.preventDefault()}ac=0;aL=null;aF=null;Y=0;aX=0;aV=0;D=1;am=0;aM=af();J=X();O();if(!a||(T===aq.fingers||aq.fingers===h)||aT()){ae(0,a7);Q=ao();if(T==2){ae(1,ba.touches[1]);aX=aV=ap(aM[0].start,aM[1].start)}if(aq.swipeStatus||aq.pinchStatus){a8=L(ba,W)}}else{a8=false}if(a8===false){W=p;L(ba,W);return a8}else{ak(true)}return null}function aZ(ba){var bd=ba.originalEvent?ba.originalEvent:ba;if(W===g||W===p||ai()){return}var a9,a8=a?bd.touches[0]:bd;var bb=aD(a8);aY=ao();if(a){T=bd.touches.length}W=j;if(T==2){if(aX==0){ae(1,bd.touches[1]);aX=aV=ap(aM[0].start,aM[1].start)}else{aD(bd.touches[1]);aV=ap(aM[0].end,aM[1].end);aF=an(aM[0].end,aM[1].end)}D=a3(aX,aV);am=Math.abs(aX-aV)}if((T===aq.fingers||aq.fingers===h)||!a||aT()){aL=aH(bb.start,bb.end);ah(ba,aL);ac=aO(bb.start,bb.end);Y=aI();aE(aL,ac);if(aq.swipeStatus||aq.pinchStatus){a9=L(bd,W)}if(!aq.triggerOnTouchEnd||aq.triggerOnTouchLeave){var a7=true;if(aq.triggerOnTouchLeave){var bc=aU(this);a7=B(bb.end,bc)}if(!aq.triggerOnTouchEnd&&a7){W=ay(j)}else{if(aq.triggerOnTouchLeave&&!a7){W=ay(g)}}if(W==p||W==g){L(bd,W)}}}else{W=p;L(bd,W)}if(a9===false){W=p;L(bd,W)}}function I(a7){var a8=a7.originalEvent;if(a){if(a8.touches.length>0){C();return true}}if(ai()){T=aa}a7.preventDefault();aY=ao();Y=aI();if(a6()){W=p;L(a8,W)}else{if(aq.triggerOnTouchEnd||(aq.triggerOnTouchEnd==false&&W===j)){W=g;L(a8,W)}else{if(!aq.triggerOnTouchEnd&&a2()){W=g;aB(a8,W,x)}else{if(W===j){W=p;L(a8,W)}}}}ak(false);return null}function a5(){T=0;aY=0;Q=0;aX=0;aV=0;D=1;O();ak(false)}function H(a7){var a8=a7.originalEvent;if(aq.triggerOnTouchLeave){W=ay(g);L(a8,W)}}function aG(){aN.unbind(G,aJ);aN.unbind(az,a5);aN.unbind(au,aZ);aN.unbind(R,I);if(P){aN.unbind(P,H)}ak(false)}function ay(bb){var ba=bb;var a9=aw();var a8=aj();var a7=a6();if(!a9||a7){ba=p}else{if(a8&&bb==j&&(!aq.triggerOnTouchEnd||aq.triggerOnTouchLeave)){ba=g}else{if(!a8&&bb==g&&aq.triggerOnTouchLeave){ba=p}}}return ba}function L(a9,a7){var a8=undefined;if(F()||S()){a8=aB(a9,a7,k)}else{if((M()||aT())&&a8!==false){a8=aB(a9,a7,s)}}if(aC()&&a8!==false){a8=aB(a9,a7,i)}else{if(al()&&a8!==false){a8=aB(a9,a7,b)}else{if(ad()&&a8!==false){a8=aB(a9,a7,x)}}}if(a7===p){a5(a9)}if(a7===g){if(a){if(a9.touches.length==0){a5(a9)}}else{a5(a9)}}return a8}function aB(ba,a7,a9){var a8=undefined;if(a9==k){aN.trigger("swipeStatus",[a7,aL||null,ac||0,Y||0,T]);if(aq.swipeStatus){a8=aq.swipeStatus.call(aN,ba,a7,aL||null,ac||0,Y||0,T);if(a8===false){return false}}if(a7==g&&aR()){aN.trigger("swipe",[aL,ac,Y,T]);if(aq.swipe){a8=aq.swipe.call(aN,ba,aL,ac,Y,T);if(a8===false){return false}}switch(aL){case o:aN.trigger("swipeLeft",[aL,ac,Y,T]);if(aq.swipeLeft){a8=aq.swipeLeft.call(aN,ba,aL,ac,Y,T)}break;case n:aN.trigger("swipeRight",[aL,ac,Y,T]);if(aq.swipeRight){a8=aq.swipeRight.call(aN,ba,aL,ac,Y,T)}break;case d:aN.trigger("swipeUp",[aL,ac,Y,T]);if(aq.swipeUp){a8=aq.swipeUp.call(aN,ba,aL,ac,Y,T)}break;case v:aN.trigger("swipeDown",[aL,ac,Y,T]);if(aq.swipeDown){a8=aq.swipeDown.call(aN,ba,aL,ac,Y,T)}break}}}if(a9==s){aN.trigger("pinchStatus",[a7,aF||null,am||0,Y||0,T,D]);if(aq.pinchStatus){a8=aq.pinchStatus.call(aN,ba,a7,aF||null,am||0,Y||0,T,D);if(a8===false){return false}}if(a7==g&&a4()){switch(aF){case c:aN.trigger("pinchIn",[aF||null,am||0,Y||0,T,D]);if(aq.pinchIn){a8=aq.pinchIn.call(aN,ba,aF||null,am||0,Y||0,T,D)}break;case w:aN.trigger("pinchOut",[aF||null,am||0,Y||0,T,D]);if(aq.pinchOut){a8=aq.pinchOut.call(aN,ba,aF||null,am||0,Y||0,T,D)}break}}}if(a9==x){if(a7===p||a7===g){clearTimeout(aS);if(V()&&!E()){K=ao();aS=setTimeout(e.proxy(function(){K=null;aN.trigger("tap",[ba.target]);if(aq.tap){a8=aq.tap.call(aN,ba,ba.target)}},this),aq.doubleTapThreshold)}else{K=null;aN.trigger("tap",[ba.target]);if(aq.tap){a8=aq.tap.call(aN,ba,ba.target)}}}}else{if(a9==i){if(a7===p||a7===g){clearTimeout(aS);K=null;aN.trigger("doubletap",[ba.target]);if(aq.doubleTap){a8=aq.doubleTap.call(aN,ba,ba.target)}}}else{if(a9==b){if(a7===p||a7===g){clearTimeout(aS);K=null;aN.trigger("longtap",[ba.target]);if(aq.longTap){a8=aq.longTap.call(aN,ba,ba.target)}}}}}return a8}function aj(){var a7=true;if(aq.threshold!==null){a7=ac>=aq.threshold}return a7}function a6(){var a7=false;if(aq.cancelThreshold!==null&&aL!==null){a7=(aP(aL)-ac)>=aq.cancelThreshold}return a7}function ab(){if(aq.pinchThreshold!==null){return am>=aq.pinchThreshold}return true}function aw(){var a7;if(aq.maxTimeThreshold){if(Y>=aq.maxTimeThreshold){a7=false}else{a7=true}}else{a7=true}return a7}function ah(a7,a8){if(aq.allowPageScroll===l||aT()){a7.preventDefault()}else{var a9=aq.allowPageScroll===r;switch(a8){case o:if((aq.swipeLeft&&a9)||(!a9&&aq.allowPageScroll!=A)){a7.preventDefault()}break;case n:if((aq.swipeRight&&a9)||(!a9&&aq.allowPageScroll!=A)){a7.preventDefault()}break;case d:if((aq.swipeUp&&a9)||(!a9&&aq.allowPageScroll!=t)){a7.preventDefault()}break;case v:if((aq.swipeDown&&a9)||(!a9&&aq.allowPageScroll!=t)){a7.preventDefault()}break}}}function a4(){var a8=aK();var a7=U();var a9=ab();return a8&&a7&&a9}function aT(){return !!(aq.pinchStatus||aq.pinchIn||aq.pinchOut)}function M(){return !!(a4()&&aT())}function aR(){var ba=aw();var bc=aj();var a9=aK();var a7=U();var a8=a6();var bb=!a8&&a7&&a9&&bc&&ba;return bb}function S(){return !!(aq.swipe||aq.swipeStatus||aq.swipeLeft||aq.swipeRight||aq.swipeUp||aq.swipeDown)}function F(){return !!(aR()&&S())}function aK(){return((T===aq.fingers||aq.fingers===h)||!a)}function U(){return aM[0].end.x!==0}function a2(){return !!(aq.tap)}function V(){return !!(aq.doubleTap)}function aQ(){return !!(aq.longTap)}function N(){if(K==null){return false}var a7=ao();return(V()&&((a7-K)<=aq.doubleTapThreshold))}function E(){return N()}function at(){return((T===1||!a)&&(isNaN(ac)||ac===0))}function aW(){return((Y>aq.longTapThreshold)&&(ac<q))}function ad(){return !!(at()&&a2())}function aC(){return !!(N()&&V())}function al(){return !!(aW()&&aQ())}function C(){a1=ao();aa=event.touches.length+1}function O(){a1=0;aa=0}function ai(){var a7=false;if(a1){var a8=ao()-a1;if(a8<=aq.fingerReleaseThreshold){a7=true}}return a7}function ax(){return !!(aN.data(y+"_intouch")===true)}function ak(a7){if(a7===true){aN.bind(au,aZ);aN.bind(R,I);if(P){aN.bind(P,H)}}else{aN.unbind(au,aZ,false);aN.unbind(R,I,false);if(P){aN.unbind(P,H,false)}}aN.data(y+"_intouch",a7===true)}function ae(a8,a7){var a9=a7.identifier!==undefined?a7.identifier:0;aM[a8].identifier=a9;aM[a8].start.x=aM[a8].end.x=a7.pageX||a7.clientX;aM[a8].start.y=aM[a8].end.y=a7.pageY||a7.clientY;return aM[a8]}function aD(a7){var a9=a7.identifier!==undefined?a7.identifier:0;var a8=Z(a9);a8.end.x=a7.pageX||a7.clientX;a8.end.y=a7.pageY||a7.clientY;return a8}function Z(a8){for(var a7=0;a7<aM.length;a7++){if(aM[a7].identifier==a8){return aM[a7]}}}function af(){var a7=[];for(var a8=0;a8<=5;a8++){a7.push({start:{x:0,y:0},end:{x:0,y:0},identifier:0})}return a7}function aE(a7,a8){a8=Math.max(a8,aP(a7));J[a7].distance=a8}function aP(a7){if(J[a7]){return J[a7].distance}return undefined}function X(){var a7={};a7[o]=ar(o);a7[n]=ar(n);a7[d]=ar(d);a7[v]=ar(v);return a7}function ar(a7){return{direction:a7,distance:0}}function aI(){return aY-Q}function ap(ba,a9){var a8=Math.abs(ba.x-a9.x);var a7=Math.abs(ba.y-a9.y);return Math.round(Math.sqrt(a8*a8+a7*a7))}function a3(a7,a8){var a9=(a8/a7)*1;return a9.toFixed(2)}function an(){if(D<1){return w}else{return c}}function aO(a8,a7){return Math.round(Math.sqrt(Math.pow(a7.x-a8.x,2)+Math.pow(a7.y-a8.y,2)))}function aA(ba,a8){var a7=ba.x-a8.x;var bc=a8.y-ba.y;var a9=Math.atan2(bc,a7);var bb=Math.round(a9*180/Math.PI);if(bb<0){bb=360-Math.abs(bb)}return bb}function aH(a8,a7){var a9=aA(a8,a7);if((a9<=45)&&(a9>=0)){return o}else{if((a9<=360)&&(a9>=315)){return o}else{if((a9>=135)&&(a9<=225)){return n}else{if((a9>45)&&(a9<135)){return v}else{return d}}}}}function ao(){var a7=new Date();return a7.getTime()}function aU(a7){a7=e(a7);var a9=a7.offset();var a8={left:a9.left,right:a9.left+a7.outerWidth(),top:a9.top,bottom:a9.top+a7.outerHeight()};return a8}function B(a7,a8){return(a7.x>a8.left&&a7.x<a8.right&&a7.y>a8.top&&a7.y<a8.bottom)}}}));
/**
* JavaScript Load Image 1.10.0
* https://github.com/blueimp/JavaScript-Load-Image
* Copyright 2011, Sebastian Tschan
* https://blueimp.net
*
* Licensed under the MIT license:
* http://www.opensource.org/licenses/MIT
*/
! function(a) {
"use strict";
var b = function(a, c, d) {
var e, f, g = document.createElement("img");
if (g.onerror = c, g.onload = function() {
!f || d && d.noRevoke || b.revokeObjectURL(f), c && c(b.scale(g, d))
}, b.isInstanceOf("Blob", a) || b.isInstanceOf("File", a)) e = f = b.createObjectURL(a), g._type = a.type;
else {
if ("string" != typeof a) return !1;
e = a, d && d.crossOrigin && (g.crossOrigin = d.crossOrigin)
}
return e ? (g.src = e, g) : b.readFile(a, function(a) {
var b = a.target;
b && b.result ? g.src = b.result : c && c(a)
})
},
c = window.createObjectURL && window || window.URL && URL.revokeObjectURL && URL || window.webkitURL && webkitURL;
b.isInstanceOf = function(a, b) {
return Object.prototype.toString.call(b) === "[object " + a + "]"
}, b.transformCoordinates = function() {}, b.getTransformedOptions = function(a, b) {
var c, d, e, f, g = b.aspectRatio;
if (!g) return b;
c = {};
for (d in b) b.hasOwnProperty(d) && (c[d] = b[d]);
return c.crop = !0, e = a.naturalWidth || a.width, f = a.naturalHeight || a.height, e / f > g ? (c.maxWidth = f * g, c.maxHeight = f) : (c.maxWidth = e, c.maxHeight = e / g), c
}, b.renderImageToCanvas = function(a, b, c, d, e, f, g, h, i, j) {
return a.getContext("2d").drawImage(b, c, d, e, f, g, h, i, j), a
}, b.hasCanvasOption = function(a) {
return a.canvas || a.crop || a.aspectRatio
}, b.scale = function(a, c) {
c = c || {};
var d, e, f, g, h, i, j, k, l, m = document.createElement("canvas"),
n = a.getContext || b.hasCanvasOption(c) && m.getContext,
o = a.naturalWidth || a.width,
p = a.naturalHeight || a.height,
q = o,
r = p,
s = function() {
var a = Math.max((f || q) / q, (g || r) / r);
a > 1 && (q *= a, r *= a)
},
t = function() {
var a = Math.min((d || q) / q, (e || r) / r);
1 > a && (q *= a, r *= a)
};
return n && (c = b.getTransformedOptions(a, c), j = c.left || 0, k = c.top || 0, c.sourceWidth ? (h = c.sourceWidth, void 0 !== c.right && void 0 === c.left && (j = o - h - c.right)) : h = o - j - (c.right || 0), c.sourceHeight ? (i = c.sourceHeight, void 0 !== c.bottom && void 0 === c.top && (k = p - i - c.bottom)) : i = p - k - (c.bottom || 0), q = h, r = i), d = c.maxWidth, e = c.maxHeight, f = c.minWidth, g = c.minHeight, n && d && e && c.crop ? (q = d, r = e, l = h / i - d / e, 0 > l ? (i = e * h / d, void 0 === c.top && void 0 === c.bottom && (k = (p - i) / 2)) : l > 0 && (h = d * i / e, void 0 === c.left && void 0 === c.right && (j = (o - h) / 2))) : ((c.contain || c.cover) && (f = d = d || f, g = e = e || g), c.cover ? (t(), s()) : (s(), t())), n ? (m.width = q, m.height = r, b.transformCoordinates(m, c), b.renderImageToCanvas(m, a, j, k, h, i, 0, 0, q, r)) : (a.width = q, a.height = r, a)
}, b.createObjectURL = function(a) {
return c ? c.createObjectURL(a) : !1
}, b.revokeObjectURL = function(a) {
return c ? c.revokeObjectURL(a) : !1
}, b.readFile = function(a, b, c) {
if (window.FileReader) {
var d = new FileReader;
if (d.onload = d.onerror = b, c = c || "readAsDataURL", d[c]) return d[c](a), d
}
return !1
}, "function" == typeof define && define.amd ? define(function() {
return b
}) : a.loadImage = b
}(this),
function(a) {
"use strict";
"function" == typeof define && define.amd ? define(["load-image"], a) : a(window.loadImage)
}(function(a) {
"use strict";
if (window.navigator && window.navigator.platform && /iP(hone|od|ad)/.test(window.navigator.platform)) {
var b = a.renderImageToCanvas;
a.detectSubsampling = function(a) {
var b, c;
return a.width * a.height > 1048576 ? (b = document.createElement("canvas"), b.width = b.height = 1, c = b.getContext("2d"), c.drawImage(a, -a.width + 1, 0), 0 === c.getImageData(0, 0, 1, 1).data[3]) : !1
}, a.detectVerticalSquash = function(a, b) {
var c, d, e, f, g, h = a.naturalHeight || a.height,
i = document.createElement("canvas"),
j = i.getContext("2d");
for (b && (h /= 2), i.width = 1, i.height = h, j.drawImage(a, 0, 0), c = j.getImageData(0, 0, 1, h).data, d = 0, e = h, f = h; f > d;) g = c[4 * (f - 1) + 3], 0 === g ? e = f : d = f, f = e + d >> 1;
return f / h || 1
}, a.renderImageToCanvas = function(c, d, e, f, g, h, i, j, k, l) {
if ("image/jpeg" === d._type) {
var m, n, o, p, q = c.getContext("2d"),
r = document.createElement("canvas"),
s = 1024,
t = r.getContext("2d");
if (r.width = s, r.height = s, q.save(), m = a.detectSubsampling(d), m && (e /= 2, f /= 2, g /= 2, h /= 2), n = a.detectVerticalSquash(d, m), m || 1 !== n) {
for (f *= n, k = Math.ceil(s * k / g), l = Math.ceil(s * l / h / n), j = 0, p = 0; h > p;) {
for (i = 0, o = 0; g > o;) t.clearRect(0, 0, s, s), t.drawImage(d, e, f, g, h, -o, -p, g, h), q.drawImage(r, 0, 0, s, s, i, j, k, l), o += s, i += k;
p += s, j += l
}
return q.restore(), c
}
}
return b(c, d, e, f, g, h, i, j, k, l)
}
}
}),
function(a) {
"use strict";
"function" == typeof define && define.amd ? define(["load-image"], a) : a(window.loadImage)
}(function(a) {
"use strict";
var b = a.hasCanvasOption,
c = a.transformCoordinates,
d = a.getTransformedOptions;
a.hasCanvasOption = function(c) {
return b.call(a, c) || c.orientation
}, a.transformCoordinates = function(b, d) {
c.call(a, b, d);
var e = b.getContext("2d"),
f = b.width,
g = b.height,
h = d.orientation;
if (h && !(h > 8)) switch (h > 4 && (b.width = g, b.height = f), h) {
case 2:
e.translate(f, 0), e.scale(-1, 1);
break;
case 3:
e.translate(f, g), e.rotate(Math.PI);
break;
case 4:
e.translate(0, g), e.scale(1, -1);
break;
case 5:
e.rotate(.5 * Math.PI), e.scale(1, -1);
break;
case 6:
e.rotate(.5 * Math.PI), e.translate(0, -g);
break;
case 7:
e.rotate(.5 * Math.PI), e.translate(f, -g), e.scale(-1, 1);
break;
case 8:
e.rotate(-.5 * Math.PI), e.translate(-f, 0)
}
}, a.getTransformedOptions = function(b, c) {
var e, f, g = d.call(a, b, c),
h = g.orientation;
if (!h || h > 8 || 1 === h) return g;
e = {};
for (f in g) g.hasOwnProperty(f) && (e[f] = g[f]);
switch (g.orientation) {
case 2:
e.left = g.right, e.right = g.left;
break;
case 3:
e.left = g.right, e.top = g.bottom, e.right = g.left, e.bottom = g.top;
break;
case 4:
e.top = g.bottom, e.bottom = g.top;
break;
case 5:
e.left = g.top, e.top = g.left, e.right = g.bottom, e.bottom = g.right;
break;
case 6:
e.left = g.top, e.top = g.right, e.right = g.bottom, e.bottom = g.left;
break;
case 7:
e.left = g.bottom, e.top = g.right, e.right = g.top, e.bottom = g.left;
break;
case 8:
e.left = g.bottom, e.top = g.left, e.right = g.top, e.bottom = g.right
}
return g.orientation > 4 && (e.maxWidth = g.maxHeight, e.maxHeight = g.maxWidth, e.minWidth = g.minHeight, e.minHeight = g.minWidth, e.sourceWidth = g.sourceHeight, e.sourceHeight = g.sourceWidth), e
}
}),
function(a) {
"use strict";
"function" == typeof define && define.amd ? define(["load-image"], a) : a(window.loadImage)
}(function(a) {
"use strict";
var b = window.Blob && (Blob.prototype.slice || Blob.prototype.webkitSlice || Blob.prototype.mozSlice);
a.blobSlice = b && function() {
var a = this.slice || this.webkitSlice || this.mozSlice;
return a.apply(this, arguments)
}, a.metaDataParsers = {
jpeg: {
65505: []
}
}, a.parseMetaData = function(b, c, d) {
d = d || {};
var e = this,
f = d.maxMetaDataSize || 262144,
g = {},
h = !(window.DataView && b && b.size >= 12/* && "image/jpeg" === b.type*/ && a.blobSlice),
t = b.type;
(h || !a.readFile(a.blobSlice.call(b, 0, f), function(b) {
if (b.target.error) return console.log(b.target.error), void c(g);
var f, h, i, j, k = b.target.result,
l = new DataView(k),
m = 2,
n = l.byteLength - 4,
o = m;
g.buffer = k;
if("image/jpeg" !== t) {
c(g);
return;
};
if (65496 === l.getUint16(0)) {
for (; n > m && (f = l.getUint16(m), f >= 65504 && 65519 >= f || 65534 === f);) {
if (h = l.getUint16(m + 2) + 2, m + h > l.byteLength) {
console.log("Invalid meta data: Invalid segment size.");
break
}
if (i = a.metaDataParsers.jpeg[f])
for (j = 0; j < i.length; j += 1) i[j].call(e, l, m, h, g, d);
m += h, o = m
}!d.disableImageHead && o > 6 && (g.imageHead = k.slice ? k.slice(0, o) : new Uint8Array(k).subarray(0, o))
} else console.log("Invalid JPEG file: Missing JPEG marker.");
c(g)
}, "readAsArrayBuffer")) && c(g)
}
}),
function(a) {
"use strict";
"function" == typeof define && define.amd ? define(["load-image", "load-image-meta"], a) : a(window.loadImage)
}(function(a) {
"use strict";
a.ExifMap = function() {
return this
}, a.ExifMap.prototype.map = {
Orientation: 274
}, a.ExifMap.prototype.get = function(a) {
return this[a] || this[this.map[a]]
}, a.getExifThumbnail = function(a, b, c) {
var d, e, f;
if (!c || b + c > a.byteLength) return void console.log("Invalid Exif data: Invalid thumbnail data.");
for (d = [], e = 0; c > e; e += 1) f = a.getUint8(b + e), d.push((16 > f ? "0" : "") + f.toString(16));
return "data:image/jpeg,%" + d.join("%")
}, a.exifTagTypes = {
1: {
getValue: function(a, b) {
return a.getUint8(b)
},
size: 1
},
2: {
getValue: function(a, b) {
return String.fromCharCode(a.getUint8(b))
},
size: 1,
ascii: !0
},
3: {
getValue: function(a, b, c) {
return a.getUint16(b, c)
},
size: 2
},
4: {
getValue: function(a, b, c) {
return a.getUint32(b, c)
},
size: 4
},
5: {
getValue: function(a, b, c) {
return a.getUint32(b, c) / a.getUint32(b + 4, c)
},
size: 8
},
9: {
getValue: function(a, b, c) {
return a.getInt32(b, c)
},
size: 4
},
10: {
getValue: function(a, b, c) {
return a.getInt32(b, c) / a.getInt32(b + 4, c)
},
size: 8
}
}, a.exifTagTypes[7] = a.exifTagTypes[1], a.getExifValue = function(b, c, d, e, f, g) {
var h, i, j, k, l, m, n = a.exifTagTypes[e];
if (!n) return void console.log("Invalid Exif data: Invalid tag type.");
if (h = n.size * f, i = h > 4 ? c + b.getUint32(d + 8, g) : d + 8, i + h > b.byteLength) return void console.log("Invalid Exif data: Invalid data offset.");
if (1 === f) return n.getValue(b, i, g);
for (j = [], k = 0; f > k; k += 1) j[k] = n.getValue(b, i + k * n.size, g);
if (n.ascii) {
for (l = "", k = 0; k < j.length && (m = j[k], "\x00" !== m); k += 1) l += m;
return l
}
return j
}, a.parseExifTag = function(b, c, d, e, f) {
var g = b.getUint16(d, e);
f.exif[g] = a.getExifValue(b, c, d, b.getUint16(d + 2, e), b.getUint32(d + 4, e), e)
}, a.parseExifTags = function(a, b, c, d, e) {
var f, g, h;
if (c + 6 > a.byteLength) return void console.log("Invalid Exif data: Invalid directory offset.");
if (f = a.getUint16(c, d), g = c + 2 + 12 * f, g + 4 > a.byteLength) return void console.log("Invalid Exif data: Invalid directory size.");
for (h = 0; f > h; h += 1) this.parseExifTag(a, b, c + 2 + 12 * h, d, e);
return a.getUint32(g, d)
}, a.parseExifData = function(b, c, d, e, f) {
if (!f.disableExif) {
var g, h, i, j = c + 10;
if (1165519206 === b.getUint32(c + 4)) {
if (j + 8 > b.byteLength) return void console.log("Invalid Exif data: Invalid segment size.");
if (0 !== b.getUint16(c + 8)) return void console.log("Invalid Exif data: Missing byte alignment offset.");
switch (b.getUint16(j)) {
case 18761:
g = !0;
break;
case 19789:
g = !1;
break;
default:
return void console.log("Invalid Exif data: Invalid byte alignment marker.")
}
if (42 !== b.getUint16(j + 2, g)) return void console.log("Invalid Exif data: Missing TIFF marker.");
h = b.getUint32(j + 4, g), e.exif = new a.ExifMap, h = a.parseExifTags(b, j, j + h, g, e), h && !f.disableExifThumbnail && (i = {
exif: {}
}, h = a.parseExifTags(b, j, j + h, g, i), i.exif[513] && (e.exif.Thumbnail = a.getExifThumbnail(b, j + i.exif[513], i.exif[514]))), e.exif[34665] && !f.disableExifSub && a.parseExifTags(b, j, j + e.exif[34665], g, e), e.exif[34853] && !f.disableExifGps && a.parseExifTags(b, j, j + e.exif[34853], g, e)
}
}
}, a.metaDataParsers.jpeg[65505].push(a.parseExifData)
}),
function(a) {
"use strict";
"function" == typeof define && define.amd ? define(["load-image", "load-image-exif"], a) : a(window.loadImage)
}(function(a) {
"use strict";
a.ExifMap.prototype.tags = {
256: "ImageWidth",
257: "ImageHeight",
34665: "ExifIFDPointer",
34853: "GPSInfoIFDPointer",
40965: "InteroperabilityIFDPointer",
258: "BitsPerSample",
259: "Compression",
262: "PhotometricInterpretation",
274: "Orientation",
277: "SamplesPerPixel",
284: "PlanarConfiguration",
530: "YCbCrSubSampling",
531: "YCbCrPositioning",
282: "XResolution",
283: "YResolution",
296: "ResolutionUnit",
273: "StripOffsets",
278: "RowsPerStrip",
279: "StripByteCounts",
513: "JPEGInterchangeFormat",
514: "JPEGInterchangeFormatLength",
301: "TransferFunction",
318: "WhitePoint",
319: "PrimaryChromaticities",
529: "YCbCrCoefficients",
532: "ReferenceBlackWhite",
306: "DateTime",
270: "ImageDescription",
271: "Make",
272: "Model",
305: "Software",
315: "Artist",
33432: "Copyright",
36864: "ExifVersion",
40960: "FlashpixVersion",
40961: "ColorSpace",
40962: "PixelXDimension",
40963: "PixelYDimension",
42240: "Gamma",
37121: "ComponentsConfiguration",
37122: "CompressedBitsPerPixel",
37500: "MakerNote",
37510: "UserComment",
40964: "RelatedSoundFile",
36867: "DateTimeOriginal",
36868: "DateTimeDigitized",
37520: "SubSecTime",
37521: "SubSecTimeOriginal",
37522: "SubSecTimeDigitized",
33434: "ExposureTime",
33437: "FNumber",
34850: "ExposureProgram",
34852: "SpectralSensitivity",
34855: "PhotographicSensitivity",
34856: "OECF",
34864: "SensitivityType",
34865: "StandardOutputSensitivity",
34866: "RecommendedExposureIndex",
34867: "ISOSpeed",
34868: "ISOSpeedLatitudeyyy",
34869: "ISOSpeedLatitudezzz",
37377: "ShutterSpeedValue",
37378: "ApertureValue",
37379: "BrightnessValue",
37380: "ExposureBias",
37381: "MaxApertureValue",
37382: "SubjectDistance",
37383: "MeteringMode",
37384: "LightSource",
37385: "Flash",
37396: "SubjectArea",
37386: "FocalLength",
41483: "FlashEnergy",
41484: "SpatialFrequencyResponse",
41486: "FocalPlaneXResolution",
41487: "FocalPlaneYResolution",
41488: "FocalPlaneResolutionUnit",
41492: "SubjectLocation",
41493: "ExposureIndex",
41495: "SensingMethod",
41728: "FileSource",
41729: "SceneType",
41730: "CFAPattern",
41985: "CustomRendered",
41986: "ExposureMode",
41987: "WhiteBalance",
41988: "DigitalZoomRatio",
41989: "FocalLengthIn35mmFilm",
41990: "SceneCaptureType",
41991: "GainControl",
41992: "Contrast",
41993: "Saturation",
41994: "Sharpness",
41995: "DeviceSettingDescription",
41996: "SubjectDistanceRange",
42016: "ImageUniqueID",
42032: "CameraOwnerName",
42033: "BodySerialNumber",
42034: "LensSpecification",
42035: "LensMake",
42036: "LensModel",
42037: "LensSerialNumber",
0: "GPSVersionID",
1: "GPSLatitudeRef",
2: "GPSLatitude",
3: "GPSLongitudeRef",
4: "GPSLongitude",
5: "GPSAltitudeRef",
6: "GPSAltitude",
7: "GPSTimeStamp",
8: "GPSSatellites",
9: "GPSStatus",
10: "GPSMeasureMode",
11: "GPSDOP",
12: "GPSSpeedRef",
13: "GPSSpeed",
14: "GPSTrackRef",
15: "GPSTrack",
16: "GPSImgDirectionRef",
17: "GPSImgDirection",
18: "GPSMapDatum",
19: "GPSDestLatitudeRef",
20: "GPSDestLatitude",
21: "GPSDestLongitudeRef",
22: "GPSDestLongitude",
23: "GPSDestBearingRef",
24: "GPSDestBearing",
25: "GPSDestDistanceRef",
26: "GPSDestDistance",
27: "GPSProcessingMethod",
28: "GPSAreaInformation",
29: "GPSDateStamp",
30: "GPSDifferential",
31: "GPSHPositioningError"
}, a.ExifMap.prototype.stringValues = {
ExposureProgram: {
0: "Undefined",
1: "Manual",
2: "Normal program",
3: "Aperture priority",
4: "Shutter priority",
5: "Creative program",
6: "Action program",
7: "Portrait mode",
8: "Landscape mode"
},
MeteringMode: {
0: "Unknown",
1: "Average",
2: "CenterWeightedAverage",
3: "Spot",
4: "MultiSpot",
5: "Pattern",
6: "Partial",
255: "Other"
},
LightSource: {
0: "Unknown",
1: "Daylight",
2: "Fluorescent",
3: "Tungsten (incandescent light)",
4: "Flash",
9: "Fine weather",
10: "Cloudy weather",
11: "Shade",
12: "Daylight fluorescent (D 5700 - 7100K)",
13: "Day white fluorescent (N 4600 - 5400K)",
14: "Cool white fluorescent (W 3900 - 4500K)",
15: "White fluorescent (WW 3200 - 3700K)",
17: "Standard light A",
18: "Standard light B",
19: "Standard light C",
20: "D55",
21: "D65",
22: "D75",
23: "D50",
24: "ISO studio tungsten",
255: "Other"
},
Flash: {
0: "Flash did not fire",
1: "Flash fired",
5: "Strobe return light not detected",
7: "Strobe return light detected",
9: "Flash fired, compulsory flash mode",
13: "Flash fired, compulsory flash mode, return light not detected",
15: "Flash fired, compulsory flash mode, return light detected",
16: "Flash did not fire, compulsory flash mode",
24: "Flash did not fire, auto mode",
25: "Flash fired, auto mode",
29: "Flash fired, auto mode, return light not detected",
31: "Flash fired, auto mode, return light detected",
32: "No flash function",
65: "Flash fired, red-eye reduction mode",
69: "Flash fired, red-eye reduction mode, return light not detected",
71: "Flash fired, red-eye reduction mode, return light detected",
73: "Flash fired, compulsory flash mode, red-eye reduction mode",
77: "Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected",
79: "Flash fired, compulsory flash mode, red-eye reduction mode, return light detected",
89: "Flash fired, auto mode, red-eye reduction mode",
93: "Flash fired, auto mode, return light not detected, red-eye reduction mode",
95: "Flash fired, auto mode, return light detected, red-eye reduction mode"
},
SensingMethod: {
1: "Undefined",
2: "One-chip color area sensor",
3: "Two-chip color area sensor",
4: "Three-chip color area sensor",
5: "Color sequential area sensor",
7: "Trilinear sensor",
8: "Color sequential linear sensor"
},
SceneCaptureType: {
0: "Standard",
1: "Landscape",
2: "Portrait",
3: "Night scene"
},
SceneType: {
1: "Directly photographed"
},
CustomRendered: {
0: "Normal process",
1: "Custom process"
},
WhiteBalance: {
0: "Auto white balance",
1: "Manual white balance"
},
GainControl: {
0: "None",
1: "Low gain up",
2: "High gain up",
3: "Low gain down",
4: "High gain down"
},
Contrast: {
0: "Normal",
1: "Soft",
2: "Hard"
},
Saturation: {
0: "Normal",
1: "Low saturation",
2: "High saturation"
},
Sharpness: {
0: "Normal",
1: "Soft",
2: "Hard"
},
SubjectDistanceRange: {
0: "Unknown",
1: "Macro",
2: "Close view",
3: "Distant view"
},
FileSource: {
3: "DSC"
},
ComponentsConfiguration: {
0: "",
1: "Y",
2: "Cb",
3: "Cr",
4: "R",
5: "G",
6: "B"
},
Orientation: {
1: "top-left",
2: "top-right",
3: "bottom-right",
4: "bottom-left",
5: "left-top",
6: "right-top",
7: "right-bottom",
8: "left-bottom"
}
}, a.ExifMap.prototype.getText = function(a) {
var b = this.get(a);
switch (a) {
case "LightSource":
case "Flash":
case "MeteringMode":
case "ExposureProgram":
case "SensingMethod":
case "SceneCaptureType":
case "SceneType":
case "CustomRendered":
case "WhiteBalance":
case "GainControl":
case "Contrast":
case "Saturation":
case "Sharpness":
case "SubjectDistanceRange":
case "FileSource":
case "Orientation":
return this.stringValues[a][b];
case "ExifVersion":
case "FlashpixVersion":
return String.fromCharCode(b[0], b[1], b[2], b[3]);
case "ComponentsConfiguration":
return this.stringValues[a][b[0]] + this.stringValues[a][b[1]] + this.stringValues[a][b[2]] + this.stringValues[a][b[3]];
case "GPSVersionID":
return b[0] + "." + b[1] + "." + b[2] + "." + b[3]
}
return String(b)
},
function(a) {
var b, c = a.tags,
d = a.map;
for (b in c) c.hasOwnProperty(b) && (d[c[b]] = b)
}(a.ExifMap.prototype), a.ExifMap.prototype.getAll = function() {
var a, b, c = {};
for (a in this) this.hasOwnProperty(a) && (b = this.tags[a], b && (c[b] = this.getText(b)));
return c
}
});
/**
* History.js Core
* @author Benjamin Arthur Lupton <contact@balupton.com>
* @copyright 2010-2011 Benjamin Arthur Lupton <contact@balupton.com>
* @license New BSD License <http://creativecommons.org/licenses/BSD/>
*/
typeof JSON!="object"&&(JSON={}),function(){"use strict";function f(e){return e<10?"0"+e:e}function quote(e){return escapable.lastIndex=0,escapable.test(e)?'"'+e.replace(escapable,function(e){var t=meta[e];return typeof t=="string"?t:"\\u"+("0000"+e.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+e+'"'}function str(e,t){var n,r,i,s,o=gap,u,a=t[e];a&&typeof a=="object"&&typeof a.toJSON=="function"&&(a=a.toJSON(e)),typeof rep=="function"&&(a=rep.call(t,e,a));switch(typeof a){case"string":return quote(a);case"number":return isFinite(a)?String(a):"null";case"boolean":case"null":return String(a);case"object":if(!a)return"null";gap+=indent,u=[];if(Object.prototype.toString.apply(a)==="[object Array]"){s=a.length;for(n=0;n<s;n+=1)u[n]=str(n,a)||"null";return i=u.length===0?"[]":gap?"[\n"+gap+u.join(",\n"+gap)+"\n"+o+"]":"["+u.join(",")+"]",gap=o,i}if(rep&&typeof rep=="object"){s=rep.length;for(n=0;n<s;n+=1)typeof rep[n]=="string"&&(r=rep[n],i=str(r,a),i&&u.push(quote(r)+(gap?": ":":")+i))}else for(r in a)Object.prototype.hasOwnProperty.call(a,r)&&(i=str(r,a),i&&u.push(quote(r)+(gap?": ":":")+i));return i=u.length===0?"{}":gap?"{\n"+gap+u.join(",\n"+gap)+"\n"+o+"}":"{"+u.join(",")+"}",gap=o,i}}typeof Date.prototype.toJSON!="function"&&(Date.prototype.toJSON=function(e){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z":null},String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(e){return this.valueOf()});var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={"\b":"\\b"," ":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},rep;typeof JSON.stringify!="function"&&(JSON.stringify=function(e,t,n){var r;gap="",indent="";if(typeof n=="number")for(r=0;r<n;r+=1)indent+=" ";else typeof n=="string"&&(indent=n);rep=t;if(!t||typeof t=="function"||typeof t=="object"&&typeof t.length=="number")return str("",{"":e});throw new Error("JSON.stringify")}),typeof JSON.parse!="function"&&(JSON.parse=function(text,reviver){function walk(e,t){var n,r,i=e[t];if(i&&typeof i=="object")for(n in i)Object.prototype.hasOwnProperty.call(i,n)&&(r=walk(i,n),r!==undefined?i[n]=r:delete i[n]);return reviver.call(e,t,i)}var j;text=String(text),cx.lastIndex=0,cx.test(text)&&(text=text.replace(cx,function(e){return"\\u"+("0000"+e.charCodeAt(0).toString(16)).slice(-4)}));if(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return j=eval("("+text+")"),typeof reviver=="function"?walk({"":j},""):j;throw new SyntaxError("JSON.parse")})}(),function(e,t){"use strict";var n=e.History=e.History||{},r=e.jQuery;if(typeof n.Adapter!="undefined")throw new Error("History.js Adapter has already been loaded...");n.Adapter={bind:function(e,t,n){r(e).bind(t,n)},trigger:function(e,t,n){r(e).trigger(t,n)},extractEventData:function(e,n,r){var i=n&&n.originalEvent&&n.originalEvent[e]||r&&r[e]||t;return i},onDomLoad:function(e){r(e)}},typeof n.init!="undefined"&&n.init()}(window),function(e,t){"use strict";var n=e.document,r=e.setTimeout||r,i=e.clearTimeout||i,s=e.setInterval||s,o=e.History=e.History||{};if(typeof o.initHtml4!="undefined")throw new Error("History.js HTML4 Support has already been loaded...");o.initHtml4=function(){if(typeof o.initHtml4.initialized!="undefined")return!1;o.initHtml4.initialized=!0,o.enabled=!0,o.savedHashes=[],o.isLastHash=function(e){var t=o.getHashByIndex(),n;return n=e===t,n},o.isHashEqual=function(e,t){return e=encodeURIComponent(e).replace(/%25/g,"%"),t=encodeURIComponent(t).replace(/%25/g,"%"),e===t},o.saveHash=function(e){return o.isLastHash(e)?!1:(o.savedHashes.push(e),!0)},o.getHashByIndex=function(e){var t=null;return typeof e=="undefined"?t=o.savedHashes[o.savedHashes.length-1]:e<0?t=o.savedHashes[o.savedHashes.length+e]:t=o.savedHashes[e],t},o.discardedHashes={},o.discardedStates={},o.discardState=function(e,t,n){var r=o.getHashByState(e),i;return i={discardedState:e,backState:n,forwardState:t},o.discardedStates[r]=i,!0},o.discardHash=function(e,t,n){var r={discardedHash:e,backState:n,forwardState:t};return o.discardedHashes[e]=r,!0},o.discardedState=function(e){var t=o.getHashByState(e),n;return n=o.discardedStates[t]||!1,n},o.discardedHash=function(e){var t=o.discardedHashes[e]||!1;return t},o.recycleState=function(e){var t=o.getHashByState(e);return o.discardedState(e)&&delete o.discardedStates[t],!0},o.emulated.hashChange&&(o.hashChangeInit=function(){o.checkerFunction=null;var t="",r,i,u,a,f=Boolean(o.getHash());return o.isInternetExplorer()?(r="historyjs-iframe",i=n.createElement("iframe"),i.setAttribute("id",r),i.setAttribute("src","#"),i.style.display="none",n.body.appendChild(i),i.contentWindow.document.open(),i.contentWindow.document.close(),u="",a=!1,o.checkerFunction=function(){if(a)return!1;a=!0;var n=o.getHash(),r=o.getHash(i.contentWindow.document);return n!==t?(t=n,r!==n&&(u=r=n,i.contentWindow.document.open(),i.contentWindow.document.close(),i.contentWindow.document.location.hash=o.escapeHash(n)),o.Adapter.trigger(e,"hashchange")):r!==u&&(u=r,f&&r===""?o.back():o.setHash(r,!1)),a=!1,!0}):o.checkerFunction=function(){var n=o.getHash()||"";return n!==t&&(t=n,o.Adapter.trigger(e,"hashchange")),!0},o.intervalList.push(s(o.checkerFunction,o.options.hashChangeInterval)),!0},o.Adapter.onDomLoad(o.hashChangeInit)),o.emulated.pushState&&(o.onHashChange=function(t){var n=t&&t.newURL||o.getLocationHref(),r=o.getHashByUrl(n),i=null,s=null,u=null,a;return o.isLastHash(r)?(o.busy(!1),!1):(o.doubleCheckComplete(),o.saveHash(r),r&&o.isTraditionalAnchor(r)?(o.Adapter.trigger(e,"anchorchange"),o.busy(!1),!1):(i=o.extractState(o.getFullUrl(r||o.getLocationHref()),!0),o.isLastSavedState(i)?(o.busy(!1),!1):(s=o.getHashByState(i),a=o.discardedState(i),a?(o.getHashByIndex(-2)===o.getHashByState(a.forwardState)?o.back(!1):o.forward(!1),!1):(o.pushState(i.data,i.title,encodeURI(i.url),!1),!0))))},o.Adapter.bind(e,"hashchange",o.onHashChange),o.pushState=function(t,n,r,i){r=encodeURI(r).replace(/%25/g,"%");if(o.getHashByUrl(r))throw new Error("History.js does not support states with fragment-identifiers (hashes/anchors).");if(i!==!1&&o.busy())return o.pushQueue({scope:o,callback:o.pushState,args:arguments,queue:i}),!1;o.busy(!0);var s=o.createStateObject(t,n,r),u=o.getHashByState(s),a=o.getState(!1),f=o.getHashByState(a),l=o.getHash(),c=o.expectedStateId==s.id;return o.storeState(s),o.expectedStateId=s.id,o.recycleState(s),o.setTitle(s),u===f?(o.busy(!1),!1):(o.saveState(s),c||o.Adapter.trigger(e,"statechange"),!o.isHashEqual(u,l)&&!o.isHashEqual(u,o.getShortUrl(o.getLocationHref()))&&o.setHash(u,!1),o.busy(!1),!0)},o.replaceState=function(t,n,r,i){r=encodeURI(r).replace(/%25/g,"%");if(o.getHashByUrl(r))throw new Error("History.js does not support states with fragment-identifiers (hashes/anchors).");if(i!==!1&&o.busy())return o.pushQueue({scope:o,callback:o.replaceState,args:arguments,queue:i}),!1;o.busy(!0);var s=o.createStateObject(t,n,r),u=o.getHashByState(s),a=o.getState(!1),f=o.getHashByState(a),l=o.getStateByIndex(-2);return o.discardState(a,s,l),u===f?(o.storeState(s),o.expectedStateId=s.id,o.recycleState(s),o.setTitle(s),o.saveState(s),o.Adapter.trigger(e,"statechange"),o.busy(!1)):o.pushState(s.data,s.title,s.url,!1),!0}),o.emulated.pushState&&o.getHash()&&!o.emulated.hashChange&&o.Adapter.onDomLoad(function(){o.Adapter.trigger(e,"hashchange")})},typeof o.init!="undefined"&&o.init()}(window),function(e,t){"use strict";var n=e.console||t,r=e.document,i=e.navigator,s=!1,o=e.setTimeout,u=e.clearTimeout,a=e.setInterval,f=e.clearInterval,l=e.JSON,c=e.alert,h=e.History=e.History||{},p=e.history;try{s=e.sessionStorage,s.setItem("TEST","1"),s.removeItem("TEST")}catch(d){s=!1}l.stringify=l.stringify||l.encode,l.parse=l.parse||l.decode;if(typeof h.init!="undefined")throw new Error("History.js Core has already been loaded...");h.init=function(e){return typeof h.Adapter=="undefined"?!1:(typeof h.initCore!="undefined"&&h.initCore(),typeof h.initHtml4!="undefined"&&h.initHtml4(),!0)},h.initCore=function(d){if(typeof h.initCore.initialized!="undefined")return!1;h.initCore.initialized=!0,h.options=h.options||{},h.options.hashChangeInterval=h.options.hashChangeInterval||100,h.options.safariPollInterval=h.options.safariPollInterval||500,h.options.doubleCheckInterval=h.options.doubleCheckInterval||500,h.options.disableSuid=h.options.disableSuid||!1,h.options.storeInterval=h.options.storeInterval||1e3,h.options.busyDelay=h.options.busyDelay||250,h.options.debug=h.options.debug||!1,h.options.initialTitle=h.options.initialTitle||r.title,h.options.html4Mode=h.options.html4Mode||!1,h.options.delayInit=h.options.delayInit||!1,h.intervalList=[],h.clearAllIntervals=function(){var e,t=h.intervalList;if(typeof t!="undefined"&&t!==null){for(e=0;e<t.length;e++)f(t[e]);h.intervalList=null}},h.debug=function(){(h.options.debug||!1)&&h.log.apply(h,arguments)},h.log=function(){var e=typeof n!="undefined"&&typeof n.log!="undefined"&&typeof n.log.apply!="undefined",t=r.getElementById("log"),i,s,o,u,a;e?(u=Array.prototype.slice.call(arguments),i=u.shift(),typeof n.debug!="undefined"?n.debug.apply(n,[i,u]):n.log.apply(n,[i,u])):i="\n"+arguments[0]+"\n";for(s=1,o=arguments.length;s<o;++s){a=arguments[s];if(typeof a=="object"&&typeof l!="undefined")try{a=l.stringify(a)}catch(f){}i+="\n"+a+"\n"}return t?(t.value+=i+"\n-----\n",t.scrollTop=t.scrollHeight-t.clientHeight):e||c(i),!0},h.getInternetExplorerMajorVersion=function(){var e=h.getInternetExplorerMajorVersion.cached=typeof h.getInternetExplorerMajorVersion.cached!="undefined"?h.getInternetExplorerMajorVersion.cached:function(){var e=3,t=r.createElement("div"),n=t.getElementsByTagName("i");while((t.innerHTML="<!--[if gt IE "+ ++e+"]><i></i><![endif]-->")&&n[0]);return e>4?e:!1}();return e},h.isInternetExplorer=function(){var e=h.isInternetExplorer.cached=typeof h.isInternetExplorer.cached!="undefined"?h.isInternetExplorer.cached:Boolean(h.getInternetExplorerMajorVersion());return e},h.options.html4Mode?h.emulated={pushState:!0,hashChange:!0}:h.emulated={pushState:!Boolean(e.history&&e.history.pushState&&e.history.replaceState&&!/ Mobile\/([1-7][a-z]|(8([abcde]|f(1[0-8]))))/i.test(i.userAgent)&&!/AppleWebKit\/5([0-2]|3[0-2])/i.test(i.userAgent)),hashChange:Boolean(!("onhashchange"in e||"onhashchange"in r)||h.isInternetExplorer()&&h.getInternetExplorerMajorVersion()<8)},h.enabled=!h.emulated.pushState,h.bugs={setHash:Boolean(!h.emulated.pushState&&i.vendor==="Apple Computer, Inc."&&/AppleWebKit\/5([0-2]|3[0-3])/.test(i.userAgent)),safariPoll:Boolean(!h.emulated.pushState&&i.vendor==="Apple Computer, Inc."&&/AppleWebKit\/5([0-2]|3[0-3])/.test(i.userAgent)),ieDoubleCheck:Boolean(h.isInternetExplorer()&&h.getInternetExplorerMajorVersion()<8),hashEscape:Boolean(h.isInternetExplorer()&&h.getInternetExplorerMajorVersion()<7)},h.isEmptyObject=function(e){for(var t in e)if(e.hasOwnProperty(t))return!1;return!0},h.cloneObject=function(e){var t,n;return e?(t=l.stringify(e),n=l.parse(t)):n={},n},h.getRootUrl=function(){var e=r.location.protocol+"//"+(r.location.hostname||r.location.host);if(r.location.port||!1)e+=":"+r.location.port;return e+="/",e},h.getBaseHref=function(){var e=r.getElementsByTagName("base"),t=null,n="";return e.length===1&&(t=e[0],n=t.href.replace(/[^\/]+$/,"")),n=n.replace(/\/+$/,""),n&&(n+="/"),n},h.getBaseUrl=function(){var e=h.getBaseHref()||h.getBasePageUrl()||h.getRootUrl();return e},h.getPageUrl=function(){var e=h.getState(!1,!1),t=(e||{}).url||h.getLocationHref(),n;return n=t.replace(/\/+$/,"").replace(/[^\/]+$/,function(e,t,n){return/\./.test(e)?e:e+"/"}),n},h.getBasePageUrl=function(){var e=h.getLocationHref().replace(/[#\?].*/,"").replace(/[^\/]+$/,function(e,t,n){return/[^\/]$/.test(e)?"":e}).replace(/\/+$/,"")+"/";return e},h.getFullUrl=function(e,t){var n=e,r=e.substring(0,1);return t=typeof t=="undefined"?!0:t,/[a-z]+\:\/\//.test(e)||(r==="/"?n=h.getRootUrl()+e.replace(/^\/+/,""):r==="#"?n=h.getPageUrl().replace(/#.*/,"")+e:r==="?"?n=h.getPageUrl().replace(/[\?#].*/,"")+e:t?n=h.getBaseUrl()+e.replace(/^(\.\/)+/,""):n=h.getBasePageUrl()+e.replace(/^(\.\/)+/,"")),n.replace(/\#$/,"")},h.getShortUrl=function(e){var t=e,n=h.getBaseUrl(),r=h.getRootUrl();return h.emulated.pushState&&(t=t.replace(n,"")),t=t.replace(r,"/"),h.isTraditionalAnchor(t)&&(t="./"+t),t=t.replace(/^(\.\/)+/g,"./").replace(/\#$/,""),t},h.getLocationHref=function(e){return e=e||r,e.URL===e.location.href?e.location.href:e.location.href===decodeURIComponent(e.URL)?e.URL:e.location.hash&&decodeURIComponent(e.location.href.replace(/^[^#]+/,""))===e.location.hash?e.location.href:e.URL.indexOf("#")==-1&&e.location.href.indexOf("#")!=-1?e.location.href:e.URL||e.location.href},h.store={},h.idToState=h.idToState||{},h.stateToId=h.stateToId||{},h.urlToId=h.urlToId||{},h.storedStates=h.storedStates||[],h.savedStates=h.savedStates||[],h.normalizeStore=function(){h.store.idToState=h.store.idToState||{},h.store.urlToId=h.store.urlToId||{},h.store.stateToId=h.store.stateToId||{}},h.getState=function(e,t){typeof e=="undefined"&&(e=!0),typeof t=="undefined"&&(t=!0);var n=h.getLastSavedState();return!n&&t&&(n=h.createStateObject()),e&&(n=h.cloneObject(n),n.url=n.cleanUrl||n.url),n},h.getIdByState=function(e){var t=h.extractId(e.url),n;if(!t){n=h.getStateString(e);if(typeof h.stateToId[n]!="undefined")t=h.stateToId[n];else if(typeof h.store.stateToId[n]!="undefined")t=h.store.stateToId[n];else{for(;;){t=(new Date).getTime()+String(Math.random()).replace(/\D/g,"");if(typeof h.idToState[t]=="undefined"&&typeof h.store.idToState[t]=="undefined")break}h.stateToId[n]=t,h.idToState[t]=e}}return t},h.normalizeState=function(e){var t,n;if(!e||typeof e!="object")e={};if(typeof e.normalized!="undefined")return e;if(!e.data||typeof e.data!="object")e.data={};return t={},t.normalized=!0,t.title=e.title||"",t.url=h.getFullUrl(e.url?e.url:h.getLocationHref()),t.hash=h.getShortUrl(t.url),t.data=h.cloneObject(e.data),t.id=h.getIdByState(t),t.cleanUrl=t.url.replace(/\??\&_suid.*/,""),t.url=t.cleanUrl,n=!h.isEmptyObject(t.data),(t.title||n)&&h.options.disableSuid!==!0&&(t.hash=h.getShortUrl(t.url).replace(/\??\&_suid.*/,""),/\?/.test(t.hash)||(t.hash+="?"),t.hash+="&_suid="+t.id),t.hashedUrl=h.getFullUrl(t.hash),(h.emulated.pushState||h.bugs.safariPoll)&&h.hasUrlDuplicate(t)&&(t.url=t.hashedUrl),t},h.createStateObject=function(e,t,n){var r={data:e,title:t,url:n};return r=h.normalizeState(r),r},h.getStateById=function(e){e=String(e);var n=h.idToState[e]||h.store.idToState[e]||t;return n},h.getStateString=function(e){var t,n,r;return t=h.normalizeState(e),n={data:t.data,title:e.title,url:e.url},r=l.stringify(n),r},h.getStateId=function(e){var t,n;return t=h.normalizeState(e),n=t.id,n},h.getHashByState=function(e){var t,n;return t=h.normalizeState(e),n=t.hash,n},h.extractId=function(e){var t,n,r,i;return e.indexOf("#")!=-1?i=e.split("#")[0]:i=e,n=/(.*)\&_suid=([0-9]+)$/.exec(i),r=n?n[1]||e:e,t=n?String(n[2]||""):"",t||!1},h.isTraditionalAnchor=function(e){var t=!/[\/\?\.]/.test(e);return t},h.extractState=function(e,t){var n=null,r,i;return t=t||!1,r=h.extractId(e),r&&(n=h.getStateById(r)),n||(i=h.getFullUrl(e),r=h.getIdByUrl(i)||!1,r&&(n=h.getStateById(r)),!n&&t&&!h.isTraditionalAnchor(e)&&(n=h.createStateObject(null,null,i))),n},h.getIdByUrl=function(e){var n=h.urlToId[e]||h.store.urlToId[e]||t;return n},h.getLastSavedState=function(){return h.savedStates[h.savedStates.length-1]||t},h.getLastStoredState=function(){return h.storedStates[h.storedStates.length-1]||t},h.hasUrlDuplicate=function(e){var t=!1,n;return n=h.extractState(e.url),t=n&&n.id!==e.id,t},h.storeState=function(e){return h.urlToId[e.url]=e.id,h.storedStates.push(h.cloneObject(e)),e},h.isLastSavedState=function(e){var t=!1,n,r,i;return h.savedStates.length&&(n=e.id,r=h.getLastSavedState(),i=r.id,t=n===i),t},h.saveState=function(e){return h.isLastSavedState(e)?!1:(h.savedStates.push(h.cloneObject(e)),!0)},h.getStateByIndex=function(e){var t=null;return typeof e=="undefined"?t=h.savedStates[h.savedStates.length-1]:e<0?t=h.savedStates[h.savedStates.length+e]:t=h.savedStates[e],t},h.getCurrentIndex=function(){var e=null;return h.savedStates.length<1?e=0:e=h.savedStates.length-1,e},h.getHash=function(e){var t=h.getLocationHref(e),n;return n=h.getHashByUrl(t),n},h.unescapeHash=function(e){var t=h.normalizeHash(e);return t=decodeURIComponent(t),t},h.normalizeHash=function(e){var t=e.replace(/[^#]*#/,"").replace(/#.*/,"");return t},h.setHash=function(e,t){var n,i;return t!==!1&&h.busy()?(h.pushQueue({scope:h,callback:h.setHash,args:arguments,queue:t}),!1):(h.busy(!0),n=h.extractState(e,!0),n&&!h.emulated.pushState?h.pushState(n.data,n.title,n.url,!1):h.getHash()!==e&&(h.bugs.setHash?(i=h.getPageUrl(),h.pushState(null,null,i+"#"+e,!1)):r.location.hash=e),h)},h.escapeHash=function(t){var n=h.normalizeHash(t);return n=e.encodeURIComponent(n),h.bugs.hashEscape||(n=n.replace(/\%21/g,"!").replace(/\%26/g,"&").replace(/\%3D/g,"=").replace(/\%3F/g,"?")),n},h.getHashByUrl=function(e){var t=String(e).replace(/([^#]*)#?([^#]*)#?(.*)/,"$2");return t=h.unescapeHash(t),t},h.setTitle=function(e){var t=e.title,n;t||(n=h.getStateByIndex(0),n&&n.url===e.url&&(t=n.title||h.options.initialTitle));try{r.getElementsByTagName("title")[0].innerHTML=t.replace("<","&lt;").replace(">","&gt;").replace(" & "," &amp; ")}catch(i){}return r.title=t,h},h.queues=[],h.busy=function(e){typeof e!="undefined"?h.busy.flag=e:typeof h.busy.flag=="undefined"&&(h.busy.flag=!1);if(!h.busy.flag){u(h.busy.timeout);var t=function(){var e,n,r;if(h.busy.flag)return;for(e=h.queues.length-1;e>=0;--e){n=h.queues[e];if(n.length===0)continue;r=n.shift(),h.fireQueueItem(r),h.busy.timeout=o(t,h.options.busyDelay)}};h.busy.timeout=o(t,h.options.busyDelay)}return h.busy.flag},h.busy.flag=!1,h.fireQueueItem=function(e){return e.callback.apply(e.scope||h,e.args||[])},h.pushQueue=function(e){return h.queues[e.queue||0]=h.queues[e.queue||0]||[],h.queues[e.queue||0].push(e),h},h.queue=function(e,t){return typeof e=="function"&&(e={callback:e}),typeof t!="undefined"&&(e.queue=t),h.busy()?h.pushQueue(e):h.fireQueueItem(e),h},h.clearQueue=function(){return h.busy.flag=!1,h.queues=[],h},h.stateChanged=!1,h.doubleChecker=!1,h.doubleCheckComplete=function(){return h.stateChanged=!0,h.doubleCheckClear(),h},h.doubleCheckClear=function(){return h.doubleChecker&&(u(h.doubleChecker),h.doubleChecker=!1),h},h.doubleCheck=function(e){return h.stateChanged=!1,h.doubleCheckClear(),h.bugs.ieDoubleCheck&&(h.doubleChecker=o(function(){return h.doubleCheckClear(),h.stateChanged||e(),!0},h.options.doubleCheckInterval)),h},h.safariStatePoll=function(){var t=h.extractState(h.getLocationHref()),n;if(!h.isLastSavedState(t))return n=t,n||(n=h.createStateObject()),h.Adapter.trigger(e,"popstate"),h;return},h.back=function(e){return e!==!1&&h.busy()?(h.pushQueue({scope:h,callback:h.back,args:arguments,queue:e}),!1):(h.busy(!0),h.doubleCheck(function(){h.back(!1)}),p.go(-1),!0)},h.forward=function(e){return e!==!1&&h.busy()?(h.pushQueue({scope:h,callback:h.forward,args:arguments,queue:e}),!1):(h.busy(!0),h.doubleCheck(function(){h.forward(!1)}),p.go(1),!0)},h.go=function(e,t){var n;if(e>0)for(n=1;n<=e;++n)h.forward(t);else{if(!(e<0))throw new Error("History.go: History.go requires a positive or negative integer passed.");for(n=-1;n>=e;--n)h.back(t)}return h};if(h.emulated.pushState){var v=function(){};h.pushState=h.pushState||v,h.replaceState=h.replaceState||v}else h.onPopState=function(t,n){var r=!1,i=!1,s,o;return h.doubleCheckComplete(),s=h.getHash(),s?(o=h.extractState(s||h.getLocationHref(),!0),o?h.replaceState(o.data,o.title,o.url,!1):(h.Adapter.trigger(e,"anchorchange"),h.busy(!1)),h.expectedStateId=!1,!1):(r=h.Adapter.extractEventData("state",t,n)||!1,r?i=h.getStateById(r):h.expectedStateId?i=h.getStateById(h.expectedStateId):i=h.extractState(h.getLocationHref()),i||(i=h.createStateObject(null,null,h.getLocationHref())),h.expectedStateId=!1,h.isLastSavedState(i)?(h.busy(!1),!1):(h.storeState(i),h.saveState(i),h.setTitle(i),h.Adapter.trigger(e,"statechange"),h.busy(!1),!0))},h.Adapter.bind(e,"popstate",h.onPopState),h.pushState=function(t,n,r,i){if(h.getHashByUrl(r)&&h.emulated.pushState)throw new Error("History.js does not support states with fragement-identifiers (hashes/anchors).");if(i!==!1&&h.busy())return h.pushQueue({scope:h,callback:h.pushState,args:arguments,queue:i}),!1;h.busy(!0);var s=h.createStateObject(t,n,r);return h.isLastSavedState(s)?h.busy(!1):(h.storeState(s),h.expectedStateId=s.id,p.pushState(s.id,s.title,s.url),h.Adapter.trigger(e,"popstate")),!0},h.replaceState=function(t,n,r,i){if(h.getHashByUrl(r)&&h.emulated.pushState)throw new Error("History.js does not support states with fragement-identifiers (hashes/anchors).");if(i!==!1&&h.busy())return h.pushQueue({scope:h,callback:h.replaceState,args:arguments,queue:i}),!1;h.busy(!0);var s=h.createStateObject(t,n,r);return h.isLastSavedState(s)?h.busy(!1):(h.storeState(s),h.expectedStateId=s.id,p.replaceState(s.id,s.title,s.url),h.Adapter.trigger(e,"popstate")),!0};if(s){try{h.store=l.parse(s.getItem("History.store"))||{}}catch(m){h.store={}}h.normalizeStore()}else h.store={},h.normalizeStore();h.Adapter.bind(e,"unload",h.clearAllIntervals),h.saveState(h.storeState(h.extractState(h.getLocationHref(),!0))),s&&(h.onUnload=function(){var e,t,n;try{e=l.parse(s.getItem("History.store"))||{}}catch(r){e={}}e.idToState=e.idToState||{},e.urlToId=e.urlToId||{},e.stateToId=e.stateToId||{};for(t in h.idToState){if(!h.idToState.hasOwnProperty(t))continue;e.idToState[t]=h.idToState[t]}for(t in h.urlToId){if(!h.urlToId.hasOwnProperty(t))continue;e.urlToId[t]=h.urlToId[t]}for(t in h.stateToId){if(!h.stateToId.hasOwnProperty(t))continue;e.stateToId[t]=h.stateToId[t]}h.store=e,h.normalizeStore(),n=l.stringify(e);try{s.setItem("History.store",n)}catch(i){if(i.code!==DOMException.QUOTA_EXCEEDED_ERR)throw i;s.length&&(s.removeItem("History.store"),s.setItem("History.store",n))}},h.intervalList.push(a(h.onUnload,h.options.storeInterval)),h.Adapter.bind(e,"beforeunload",h.onUnload),h.Adapter.bind(e,"unload",h.onUnload));if(!h.emulated.pushState){h.bugs.safariPoll&&h.intervalList.push(a(h.safariStatePoll,h.options.safariPollInterval));if(i.vendor==="Apple Computer, Inc."||(i.appCodeName||"")==="Mozilla")h.Adapter.bind(e,"hashchange",function(){h.Adapter.trigger(e,"popstate")}),h.getHash()&&h.Adapter.onDomLoad(function(){h.Adapter.trigger(e,"hashchange")})}},(!h.options||!h.options.delayInit)&&h.init()}(window);
/*
* jQuery Iframe Transport Plugin 1.7
* https://github.com/blueimp/jQuery-File-Upload
*
* Copyright 2011, Sebastian Tschan
* https://blueimp.net
*
* Licensed under the MIT license:
* http://www.opensource.org/licenses/MIT
*/
/*jslint unparam: true, nomen: true */
/*global define, window, document */
(function(factory){if(typeof define==="function"&&define.amd){define(["jquery"],factory)}else{factory(window.jQuery)}}(function($){var counter=0;$.ajaxTransport("iframe",function(options){if(options.async){var form,iframe,addParamChar;return{send:function(_,completeCallback){form=$('<form style="display:none;"></form>');form.attr("accept-charset",options.formAcceptCharset);addParamChar=/\?/.test(options.url)?"&":"?";if(options.type==="DELETE"){options.url=options.url+addParamChar+"_method=DELETE";options.type="POST"}else{if(options.type==="PUT"){options.url=options.url+addParamChar+"_method=PUT";options.type="POST"}else{if(options.type==="PATCH"){options.url=options.url+addParamChar+"_method=PATCH";options.type="POST"}}}counter+=1;iframe=$('<iframe src="javascript:false;" name="iframe-transport-'+counter+'"></iframe>').bind("load",function(){var fileInputClones,paramNames=$.isArray(options.paramName)?options.paramName:[options.paramName];iframe.unbind("load").bind("load",function(){var response;try{response=iframe.contents();if(!response.length||!response[0].firstChild){throw new Error()}}catch(e){response=undefined}completeCallback(200,"success",{iframe:response});$('<iframe src="javascript:false;"></iframe>').appendTo(form);window.setTimeout(function(){form.remove()},0)});form.prop("target",iframe.prop("name")).prop("action",options.url).prop("method",options.type);if(options.formData){$.each(options.formData,function(index,field){$('<input type="hidden"/>').prop("name",field.name).val(field.value).appendTo(form)})}if(options.fileInput&&options.fileInput.length&&options.type==="POST"){fileInputClones=options.fileInput.clone();options.fileInput.after(function(index){return fileInputClones[index]});if(options.paramName){options.fileInput.each(function(index){$(this).prop("name",paramNames[index]||options.paramName)})}form.append(options.fileInput).prop("enctype","multipart/form-data").prop("encoding","multipart/form-data")}form.submit();if(fileInputClones&&fileInputClones.length){options.fileInput.each(function(index,input){var clone=$(fileInputClones[index]);$(input).prop("name",clone.prop("name"));clone.replaceWith(input)})}});form.append(iframe).appendTo(document.body)},abort:function(){if(iframe){iframe.unbind("load").prop("src","javascript".concat(":false;"))}if(form){form.remove()}}}}});$.ajaxSetup({converters:{"iframe text":function(iframe){return iframe&&$(iframe[0].body).text()},"iframe json":function(iframe){return iframe&&$.parseJSON($(iframe[0].body).text())},"iframe html":function(iframe){return iframe&&$(iframe[0].body).html()},"iframe xml":function(iframe){var xmlDoc=iframe&&iframe[0];return xmlDoc&&$.isXMLDoc(xmlDoc)?xmlDoc:$.parseXML((xmlDoc.XMLDocument&&xmlDoc.XMLDocument.xml)||$(xmlDoc.body).html())},"iframe script":function(iframe){return iframe&&$.globalEval($(iframe[0].body).text())}}})}));
/**
* Copyright (c) 2011-2013 Felix Gnass
* Licensed under the MIT license
*/
//fgnass.github.com/spin.js#v1.3.2
(function(root,factory){if(typeof exports=="object"){module.exports=factory()}else{if(typeof define=="function"&&define.amd){define(factory)}else{root.Spinner=factory()}}}(this,function(){var prefixes=["webkit","Moz","ms","O"],animations={},useCssAnimations;function createEl(tag,prop){var el=document.createElement(tag||"div"),n;for(n in prop){el[n]=prop[n]}return el}function ins(parent){for(var i=1,n=arguments.length;i<n;i++){parent.appendChild(arguments[i])}return parent}var sheet=(function(){var el=createEl("style",{type:"text/css"});ins(document.getElementsByTagName("head")[0],el);return el.sheet||el.styleSheet}());function addAnimation(alpha,trail,i,lines){var name=["opacity",trail,~~(alpha*100),i,lines].join("-"),start=0.01+i/lines*100,z=Math.max(1-(1-alpha)/trail*(100-start),alpha),prefix=useCssAnimations.substring(0,useCssAnimations.indexOf("Animation")).toLowerCase(),pre=prefix&&"-"+prefix+"-"||"";if(!animations[name]){sheet.insertRule("@"+pre+"keyframes "+name+"{0%{opacity:"+z+"}"+start+"%{opacity:"+alpha+"}"+(start+0.01)+"%{opacity:1}"+(start+trail)%100+"%{opacity:"+alpha+"}100%{opacity:"+z+"}}",sheet.cssRules.length);animations[name]=1}return name}function vendor(el,prop){var s=el.style,pp,i;prop=prop.charAt(0).toUpperCase()+prop.slice(1);for(i=0;i<prefixes.length;i++){pp=prefixes[i]+prop;if(s[pp]!==undefined){return pp}}if(s[prop]!==undefined){return prop}}function css(el,prop){for(var n in prop){el.style[vendor(el,n)||n]=prop[n]}return el}function merge(obj){for(var i=1;i<arguments.length;i++){var def=arguments[i];for(var n in def){if(obj[n]===undefined){obj[n]=def[n]}}}return obj}function pos(el){var o={x:el.offsetLeft,y:el.offsetTop};while((el=el.offsetParent)){o.x+=el.offsetLeft,o.y+=el.offsetTop}return o}function getColor(color,idx){return typeof color=="string"?color:color[idx%color.length]}var defaults={lines:12,length:7,width:5,radius:10,rotate:0,corners:1,color:"#000",direction:1,speed:1,trail:100,opacity:1/4,fps:20,zIndex:"auto",className:"spinner",top:"auto",left:"auto",position:"relative"};function Spinner(o){if(typeof this=="undefined"){return new Spinner(o)}this.opts=merge(o||{},Spinner.defaults,defaults)}Spinner.defaults={};merge(Spinner.prototype,{spin:function(target){this.stop();var self=this,o=self.opts,el=self.el=css(createEl(0,{className:o.className}),{position:o.position,width:0,zIndex:o.zIndex}),mid=o.radius+o.length+o.width,ep,tp;if(target){target.insertBefore(el,target.firstChild||null);tp=pos(target);ep=pos(el);css(el,{left:(o.left=="auto"?tp.x-ep.x+(target.offsetWidth>>1):parseInt(o.left,10)+mid)+"px",top:(o.top=="auto"?tp.y-ep.y+(target.offsetHeight>>1):parseInt(o.top,10)+mid)+"px"})}el.setAttribute("role","progressbar");self.lines(el,self.opts);if(!useCssAnimations){var i=0,start=(o.lines-1)*(1-o.direction)/2,alpha,fps=o.fps,f=fps/o.speed,ostep=(1-o.opacity)/(f*o.trail/100),astep=f/o.lines;(function anim(){i++;for(var j=0;j<o.lines;j++){alpha=Math.max(1-(i+(o.lines-j)*astep)%f*ostep,o.opacity);self.opacity(el,j*o.direction+start,alpha,o)}self.timeout=self.el&&setTimeout(anim,~~(1000/fps))})()}return self},stop:function(){var el=this.el;if(el){clearTimeout(this.timeout);if(el.parentNode){el.parentNode.removeChild(el)}this.el=undefined}return this},lines:function(el,o){var i=0,start=(o.lines-1)*(1-o.direction)/2,seg;function fill(color,shadow){return css(createEl(),{position:"absolute",width:(o.length+o.width)+"px",height:o.width+"px",background:color,boxShadow:shadow,transformOrigin:"left",transform:"rotate("+~~(360/o.lines*i+o.rotate)+"deg) translate("+o.radius+"px,0)",borderRadius:(o.corners*o.width>>1)+"px"})}for(;i<o.lines;i++){seg=css(createEl(),{position:"absolute",top:1+~(o.width/2)+"px",transform:o.hwaccel?"translate3d(0,0,0)":"",opacity:o.opacity,animation:useCssAnimations&&addAnimation(o.opacity,o.trail,start+i*o.direction,o.lines)+" "+1/o.speed+"s linear infinite"});if(o.shadow){ins(seg,css(fill("rgba(0,0,0,.25)","0 0 4px rgba(0,0,0,.5)"),{top:2+"px"}))}ins(el,ins(seg,fill(getColor(o.color,i),"0 0 1px rgba(0,0,0,.1)")))}return el},opacity:function(el,i,val){if(i<el.childNodes.length){el.childNodes[i].style.opacity=val}}});function initVML(){function vml(tag,attr){return createEl("<"+tag+' xmlns="urn:schemas-microsoft.com:vml" class="spin-vml">',attr)}sheet.addRule(".spin-vml","behavior:url(#default#VML)");Spinner.prototype.lines=function(el,o){var r=o.length+o.width,s=2*r;function grp(){return css(vml("group",{coordsize:s+" "+s,coordorigin:-r+" "+-r}),{width:s,height:s})}var margin=-(o.width+o.length)*2+"px",g=css(grp(),{position:"absolute",top:margin,left:margin}),i;function seg(i,dx,filter){ins(g,ins(css(grp(),{rotation:360/o.lines*i+"deg",left:~~dx}),ins(css(vml("roundrect",{arcsize:o.corners}),{width:r,height:o.width,left:o.radius,top:-o.width>>1,filter:filter}),vml("fill",{color:getColor(o.color,i),opacity:o.opacity}),vml("stroke",{opacity:0}))))}if(o.shadow){for(i=1;i<=o.lines;i++){seg(i,-2,"progid:DXImageTransform.Microsoft.Blur(pixelradius=2,makeshadow=1,shadowopacity=.3)")}}for(i=1;i<=o.lines;i++){seg(i)}return ins(el,g)};Spinner.prototype.opacity=function(el,i,val,o){var c=el.firstChild;o=o.shadow&&o.lines||0;if(c&&i+o<c.childNodes.length){c=c.childNodes[i+o];c=c&&c.firstChild;c=c&&c.firstChild;if(c){c.opacity=val}}}}var probe=css(createEl("group"),{behavior:"url(#default#VML)"});if(!vendor(probe,"transform")&&probe.adj){initVML()}else{useCssAnimations=vendor(probe,"animation")}return Spinner}));
(function(e){if(typeof exports=="object"){e(require("jquery"),require("spin"))}else if(typeof define=="function"&&define.amd){define(["jquery","spin"],e)}else{if(!window.Spinner)throw new Error("Spin.js not present");e(window.jQuery,window.Spinner)}})(function(e,t){e.fn.spin=function(n,r){return this.each(function(){var i=e(this),s=i.data();if(s.spinner){s.spinner.stop();delete s.spinner}if(n!==false){n=e.extend({color:r||i.css("color")},e.fn.spin.presets[n]||n);s.spinner=(new t(n)).spin(this)}})};e.fn.spin.presets={tiny:{lines:8,length:2,width:2,radius:3},small:{lines:8,length:4,width:3,radius:5},large:{lines:10,length:8,width:4,radius:8}}});
// http://stackoverflow.com/a/21422049
(function(e){e.fn.hasScrollBar=function(){var e={},t=this.get(0);e.vertical=t.scrollHeight>t.clientHeight?true:false;e.horizontal=t.scrollWidth>t.clientWidth?true:false;return e}})(jQuery);
/**
* Antiscroll
* https://github.com/LearnBoost/antiscroll
*/
(function($){$.fn.antiscroll=function(options){return this.each(function(){if($(this).data("antiscroll"))$(this).data("antiscroll").destroy();$(this).data("antiscroll",new $.Antiscroll(this,options))})};$.Antiscroll=Antiscroll;function Antiscroll(el,opts){this.el=$(el);this.options=opts||{};this.x=false!==this.options.x||this.options.forceHorizontal;this.y=false!==this.options.y||this.options.forceVertical;this.autoHide=false!==this.options.autoHide;this.padding=undefined==this.options.padding?2:
this.options.padding;this.inner=this.el.find(".antiscroll-inner");this.inner.css({"width":"+="+(this.y?scrollbarSize():0),"height":"+="+(this.x?scrollbarSize():0)});this.refresh()}Antiscroll.prototype.refresh=function(){var needHScroll=this.inner.get(0).scrollWidth>this.el.width()+(this.y?scrollbarSize():0),needVScroll=this.inner.get(0).scrollHeight>this.el.height()+(this.x?scrollbarSize():0);if(this.x)if(!this.horizontal&&needHScroll)this.horizontal=new Scrollbar.Horizontal(this);else if(this.horizontal&&
!needHScroll){this.horizontal.destroy();this.horizontal=null}else if(this.horizontal)this.horizontal.update();if(this.y)if(!this.vertical&&needVScroll)this.vertical=new Scrollbar.Vertical(this);else if(this.vertical&&!needVScroll){this.vertical.destroy();this.vertical=null}else if(this.vertical)this.vertical.update()};Antiscroll.prototype.destroy=function(){if(this.horizontal){this.horizontal.destroy();this.horizontal=null}if(this.vertical){this.vertical.destroy();this.vertical=null}return this};
Antiscroll.prototype.rebuild=function(){this.destroy();this.inner.attr("style","");Antiscroll.call(this,this.el,this.options);return this};function Scrollbar(pane){this.pane=pane;this.pane.el.append(this.el);this.innerEl=this.pane.inner.get(0);this.dragging=false;this.enter=false;this.shown=false;this.pane.el.mouseenter($.proxy(this,"mouseenter"));this.pane.el.mouseleave($.proxy(this,"mouseleave"));this.el.mousedown($.proxy(this,"mousedown"));this.innerPaneScrollListener=$.proxy(this,"scroll");this.pane.inner.scroll(this.innerPaneScrollListener);
this.innerPaneMouseWheelListener=$.proxy(this,"mousewheel");this.pane.inner.bind("mousewheel",this.innerPaneMouseWheelListener);var initialDisplay=this.pane.options.initialDisplay;if(initialDisplay!==false){this.show();if(this.pane.autoHide)this.hiding=setTimeout($.proxy(this,"hide"),parseInt(initialDisplay,10)||3E3)}}Scrollbar.prototype.destroy=function(){this.el.remove();this.pane.inner.unbind("scroll",this.innerPaneScrollListener);this.pane.inner.unbind("mousewheel",this.innerPaneMouseWheelListener);
return this};Scrollbar.prototype.mouseenter=function(){this.enter=true;this.show()};Scrollbar.prototype.mouseleave=function(){this.enter=false;if(!this.dragging)if(this.pane.autoHide)this.hide()};Scrollbar.prototype.scroll=function(){if(!this.shown){this.show();if(!this.enter&&!this.dragging)if(this.pane.autoHide)this.hiding=setTimeout($.proxy(this,"hide"),1500)}this.update()};Scrollbar.prototype.mousedown=function(ev){ev.preventDefault();this.dragging=true;this.startPageY=ev.pageY-parseInt(this.el.css("top"),
10);this.startPageX=ev.pageX-parseInt(this.el.css("left"),10);this.el[0].ownerDocument.onselectstart=function(){return false};var pane=this.pane,move=$.proxy(this,"mousemove"),self=this;$(this.el[0].ownerDocument).mousemove(move).mouseup(function(){self.dragging=false;this.onselectstart=null;$(this).unbind("mousemove",move);if(!self.enter)self.hide()})};Scrollbar.prototype.show=function(duration){if(!this.shown&&this.update()){this.el.addClass("antiscroll-scrollbar-shown");if(this.hiding){clearTimeout(this.hiding);
this.hiding=null}this.shown=true}};Scrollbar.prototype.hide=function(){if(this.pane.autoHide!==false&&this.shown){this.el.removeClass("antiscroll-scrollbar-shown");this.shown=false}};Scrollbar.Horizontal=function(pane){this.el=$('<div class="antiscroll-scrollbar antiscroll-scrollbar-horizontal">',pane.el);Scrollbar.call(this,pane)};inherits(Scrollbar.Horizontal,Scrollbar);Scrollbar.Horizontal.prototype.update=function(){var paneWidth=this.pane.el.width(),trackWidth=paneWidth-this.pane.padding*2,innerEl=
this.pane.inner.get(0);this.el.css("width",trackWidth*paneWidth/innerEl.scrollWidth).css("left",trackWidth*innerEl.scrollLeft/innerEl.scrollWidth);return paneWidth<innerEl.scrollWidth};Scrollbar.Horizontal.prototype.mousemove=function(ev){var trackWidth=this.pane.el.width()-this.pane.padding*2,pos=ev.pageX-this.startPageX,barWidth=this.el.width(),innerEl=this.pane.inner.get(0);var y=Math.min(Math.max(pos,0),trackWidth-barWidth);innerEl.scrollLeft=(innerEl.scrollWidth-this.pane.el.width())*y/(trackWidth-
barWidth)};Scrollbar.Horizontal.prototype.mousewheel=function(ev,delta,x,y){if(x<0&&0==this.pane.inner.get(0).scrollLeft||x>0&&this.innerEl.scrollLeft+Math.ceil(this.pane.el.width())==this.innerEl.scrollWidth){ev.preventDefault();return false}};Scrollbar.Vertical=function(pane){this.el=$('<div class="antiscroll-scrollbar antiscroll-scrollbar-vertical">',pane.el);Scrollbar.call(this,pane)};inherits(Scrollbar.Vertical,Scrollbar);Scrollbar.Vertical.prototype.update=function(){var paneHeight=this.pane.el.height(),
trackHeight=paneHeight-this.pane.padding*2,innerEl=this.innerEl;var scrollbarHeight=trackHeight*paneHeight/innerEl.scrollHeight;scrollbarHeight=scrollbarHeight<20?20:scrollbarHeight;var topPos=trackHeight*innerEl.scrollTop/innerEl.scrollHeight;if(topPos+scrollbarHeight>trackHeight){var diff=topPos+scrollbarHeight-trackHeight;topPos=topPos-diff-3}this.el.css("height",scrollbarHeight).css("top",topPos);return paneHeight<innerEl.scrollHeight};Scrollbar.Vertical.prototype.mousemove=function(ev){var paneHeight=
this.pane.el.height(),trackHeight=paneHeight-this.pane.padding*2,pos=ev.pageY-this.startPageY,barHeight=this.el.height(),innerEl=this.innerEl;var y=Math.min(Math.max(pos,0),trackHeight-barHeight);innerEl.scrollTop=(innerEl.scrollHeight-paneHeight)*y/(trackHeight-barHeight)};Scrollbar.Vertical.prototype.mousewheel=function(ev,delta,x,y){if(y>0&&0==this.innerEl.scrollTop||y<0&&this.innerEl.scrollTop+Math.ceil(this.pane.el.height())==this.innerEl.scrollHeight){ev.preventDefault();return false}};function inherits(ctorA,
ctorB){function f(){}f.prototype=ctorB.prototype;ctorA.prototype=new f}var size;function scrollbarSize(){if(size===undefined){var div=$('<div class="antiscroll-inner" style="width:50px;height:50px;overflow-y:scroll;'+'position:absolute;top:-200px;left:-200px;"><div style="height:100px;width:100%">'+"</div>");$("body").append(div);var w1=$(div).innerWidth();var w2=$("div",div).innerWidth();$(div).remove();size=w1-w2}return size}})(jQuery);
/**
* jQuery Mousewheel
* ! Copyright (c) 2013 Brandon Aaron (http://brandonaaron.net)
* Licensed under the MIT License (LICENSE.txt).
*
* Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
* Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
* Thanks to: Seamus Leahy for adding deltaX and deltaY
*
* Version: 3.1.3
*
* Requires: 1.2.2+
*/
(function(factory){if(typeof define==="function"&&define.amd)define(["jquery"],factory);else if(typeof exports==="object")module.exports=factory;else factory(jQuery)})(function($){var toFix=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"];var toBind="onwheel"in document||document.documentMode>=9?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"];var lowestDelta,lowestDeltaXY;if($.event.fixHooks)for(var i=toFix.length;i;)$.event.fixHooks[toFix[--i]]=$.event.mouseHooks;$.event.special.mousewheel=
{setup:function(){if(this.addEventListener)for(var i=toBind.length;i;)this.addEventListener(toBind[--i],handler,false);else this.onmousewheel=handler},teardown:function(){if(this.removeEventListener)for(var i=toBind.length;i;)this.removeEventListener(toBind[--i],handler,false);else this.onmousewheel=null}};$.fn.extend({mousewheel:function(fn){return fn?this.bind("mousewheel",fn):this.trigger("mousewheel")},unmousewheel:function(fn){return this.unbind("mousewheel",fn)}});function handler(event){var orgEvent=
event||window.event,args=[].slice.call(arguments,1),delta=0,deltaX=0,deltaY=0,absDelta=0,absDeltaXY=0,fn;event=$.event.fix(orgEvent);event.type="mousewheel";if(orgEvent.wheelDelta)delta=orgEvent.wheelDelta;if(orgEvent.detail)delta=orgEvent.detail*-1;if(orgEvent.deltaY){deltaY=orgEvent.deltaY*-1;delta=deltaY}if(orgEvent.deltaX){deltaX=orgEvent.deltaX;delta=deltaX*-1}if(orgEvent.wheelDeltaY!==undefined)deltaY=orgEvent.wheelDeltaY;if(orgEvent.wheelDeltaX!==undefined)deltaX=orgEvent.wheelDeltaX*-1;absDelta=
Math.abs(delta);if(!lowestDelta||absDelta<lowestDelta)lowestDelta=absDelta;absDeltaXY=Math.max(Math.abs(deltaY),Math.abs(deltaX));if(!lowestDeltaXY||absDeltaXY<lowestDeltaXY)lowestDeltaXY=absDeltaXY;fn=delta>0?"floor":"ceil";delta=Math[fn](delta/lowestDelta);deltaX=Math[fn](deltaX/lowestDeltaXY);deltaY=Math[fn](deltaY/lowestDeltaXY);args.unshift(event,delta,deltaX,deltaY);return($.event.dispatch||$.event.handle).apply(this,args)}});
/**
Delayed action
http://stackoverflow.com/a/7150496
**/
(function($) {
$.fn.delayedAction = function(options)
{
var settings = $.extend(
{},
{
delayedAction : function(){},
cancelledAction: function(){},
hoverTime: 1000
},
options);
return this.each(function(){
var $this = $(this);
$this.hover(function(){
$this.data('timerId',
setTimeout(function(){
$this.data('hover',false);
settings.delayedAction($this);
},settings.hoverTime));
$this.data('hover',true);
},
function(){
if($this.data('hover')){
clearTimeout($this.data('timerId'));
settings.cancelledAction($this);
}
$this.data('hover',false);
} );
});
}
})(jQuery);
/**
Created: 20060120
Author: Steve Moitozo <god at zilla dot us> -- geekwisdom.com
License: MIT License (see below)
Copyright (c) 2006 Steve Moitozo <god at zilla dot us>
Slightly modified for Peafowl
*/
function testPassword(e){var t=0,n="weak",r="",i=0;if(e.length<5){t=t+3;r=r+"3 points for length ("+e.length+")\n"}else if(e.length>4&&e.length<8){t=t+6;r=r+"6 points for length ("+e.length+")\n"}else if(e.length>7&&e.length<16){t=t+12;r=r+"12 points for length ("+e.length+")\n"}else if(e.length>15){t=t+18;r=r+"18 point for length ("+e.length+")\n"}if(e.match(/[a-z]/)){t=t+1;r=r+"1 point for at least one lower case char\n"}if(e.match(/[A-Z]/)){t=t+5;r=r+"5 points for at least one upper case char\n"}if(e.match(/\d+/)){t=t+5;r=r+"5 points for at least one number\n"}if(e.match(/(.*[0-9].*[0-9].*[0-9])/)){t=t+5;r=r+"5 points for at least three numbers\n"}if(e.match(/.[!,@,#,$,%,^,&,*,?,_,~]/)){t=t+5;r=r+"5 points for at least one special char\n"}if(e.match(/(.*[!,@,#,$,%,^,&,*,?,_,~].*[!,@,#,$,%,^,&,*,?,_,~])/)){t=t+5;r=r+"5 points for at least two special chars\n"}if(e.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/)){t=t+2;r=r+"2 combo points for upper and lower letters\n"}if(e.match(/([a-zA-Z])/)&&e.match(/([0-9])/)){t=t+2;r=r+"2 combo points for letters and numbers\n"}if(e.match(/([a-zA-Z0-9].*[!,@,#,$,%,^,&,*,?,_,~])|([!,@,#,$,%,^,&,*,?,_,~].*[a-zA-Z0-9])/)){t=t+2;r=r+"2 combo points for letters, numbers and special chars\n"}if(e.length==0){t=0}if(t<16){n="very weak"}else if(t>15&&t<25){n="weak"}else if(t>24&&t<35){n="average"}else if(t>34&&t<45){n="strong"}else{n="stronger"}i=Math.round(Math.min(100,100*t/45))/100;return{score:t,ratio:i,percent:i*100+"%",verdict:n,log:r}}
// SparkMD5
(function(factory){if(typeof exports==="object"){module.exports=factory()}else if(typeof define==="function"&&define.amd){define(factory)}else{var glob;try{glob=window}catch(e){glob=self}glob.SparkMD5=factory()}})(function(undefined){"use strict";var add32=function(a,b){return a+b&4294967295},hex_chr=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"];function cmn(q,a,b,x,s,t){a=add32(add32(a,q),add32(x,t));return add32(a<<s|a>>>32-s,b)}function ff(a,b,c,d,x,s,t){return cmn(b&c|~b&d,a,b,x,s,t)}function gg(a,b,c,d,x,s,t){return cmn(b&d|c&~d,a,b,x,s,t)}function hh(a,b,c,d,x,s,t){return cmn(b^c^d,a,b,x,s,t)}function ii(a,b,c,d,x,s,t){return cmn(c^(b|~d),a,b,x,s,t)}function md5cycle(x,k){var a=x[0],b=x[1],c=x[2],d=x[3];a=ff(a,b,c,d,k[0],7,-680876936);d=ff(d,a,b,c,k[1],12,-389564586);c=ff(c,d,a,b,k[2],17,606105819);b=ff(b,c,d,a,k[3],22,-1044525330);a=ff(a,b,c,d,k[4],7,-176418897);d=ff(d,a,b,c,k[5],12,1200080426);c=ff(c,d,a,b,k[6],17,-1473231341);b=ff(b,c,d,a,k[7],22,-45705983);a=ff(a,b,c,d,k[8],7,1770035416);d=ff(d,a,b,c,k[9],12,-1958414417);c=ff(c,d,a,b,k[10],17,-42063);b=ff(b,c,d,a,k[11],22,-1990404162);a=ff(a,b,c,d,k[12],7,1804603682);d=ff(d,a,b,c,k[13],12,-40341101);c=ff(c,d,a,b,k[14],17,-1502002290);b=ff(b,c,d,a,k[15],22,1236535329);a=gg(a,b,c,d,k[1],5,-165796510);d=gg(d,a,b,c,k[6],9,-1069501632);c=gg(c,d,a,b,k[11],14,643717713);b=gg(b,c,d,a,k[0],20,-373897302);a=gg(a,b,c,d,k[5],5,-701558691);d=gg(d,a,b,c,k[10],9,38016083);c=gg(c,d,a,b,k[15],14,-660478335);b=gg(b,c,d,a,k[4],20,-405537848);a=gg(a,b,c,d,k[9],5,568446438);d=gg(d,a,b,c,k[14],9,-1019803690);c=gg(c,d,a,b,k[3],14,-187363961);b=gg(b,c,d,a,k[8],20,1163531501);a=gg(a,b,c,d,k[13],5,-1444681467);d=gg(d,a,b,c,k[2],9,-51403784);c=gg(c,d,a,b,k[7],14,1735328473);b=gg(b,c,d,a,k[12],20,-1926607734);a=hh(a,b,c,d,k[5],4,-378558);d=hh(d,a,b,c,k[8],11,-2022574463);c=hh(c,d,a,b,k[11],16,1839030562);b=hh(b,c,d,a,k[14],23,-35309556);a=hh(a,b,c,d,k[1],4,-1530992060);d=hh(d,a,b,c,k[4],11,1272893353);c=hh(c,d,a,b,k[7],16,-155497632);b=hh(b,c,d,a,k[10],23,-1094730640);a=hh(a,b,c,d,k[13],4,681279174);d=hh(d,a,b,c,k[0],11,-358537222);c=hh(c,d,a,b,k[3],16,-722521979);b=hh(b,c,d,a,k[6],23,76029189);a=hh(a,b,c,d,k[9],4,-640364487);d=hh(d,a,b,c,k[12],11,-421815835);c=hh(c,d,a,b,k[15],16,530742520);b=hh(b,c,d,a,k[2],23,-995338651);a=ii(a,b,c,d,k[0],6,-198630844);d=ii(d,a,b,c,k[7],10,1126891415);c=ii(c,d,a,b,k[14],15,-1416354905);b=ii(b,c,d,a,k[5],21,-57434055);a=ii(a,b,c,d,k[12],6,1700485571);d=ii(d,a,b,c,k[3],10,-1894986606);c=ii(c,d,a,b,k[10],15,-1051523);b=ii(b,c,d,a,k[1],21,-2054922799);a=ii(a,b,c,d,k[8],6,1873313359);d=ii(d,a,b,c,k[15],10,-30611744);c=ii(c,d,a,b,k[6],15,-1560198380);b=ii(b,c,d,a,k[13],21,1309151649);a=ii(a,b,c,d,k[4],6,-145523070);d=ii(d,a,b,c,k[11],10,-1120210379);c=ii(c,d,a,b,k[2],15,718787259);b=ii(b,c,d,a,k[9],21,-343485551);x[0]=add32(a,x[0]);x[1]=add32(b,x[1]);x[2]=add32(c,x[2]);x[3]=add32(d,x[3])}function md5blk(s){var md5blks=[],i;for(i=0;i<64;i+=4){md5blks[i>>2]=s.charCodeAt(i)+(s.charCodeAt(i+1)<<8)+(s.charCodeAt(i+2)<<16)+(s.charCodeAt(i+3)<<24)}return md5blks}function md5blk_array(a){var md5blks=[],i;for(i=0;i<64;i+=4){md5blks[i>>2]=a[i]+(a[i+1]<<8)+(a[i+2]<<16)+(a[i+3]<<24)}return md5blks}function md51(s){var n=s.length,state=[1732584193,-271733879,-1732584194,271733878],i,length,tail,tmp,lo,hi;for(i=64;i<=n;i+=64){md5cycle(state,md5blk(s.substring(i-64,i)))}s=s.substring(i-64);length=s.length;tail=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(i=0;i<length;i+=1){tail[i>>2]|=s.charCodeAt(i)<<(i%4<<3)}tail[i>>2]|=128<<(i%4<<3);if(i>55){md5cycle(state,tail);for(i=0;i<16;i+=1){tail[i]=0}}tmp=n*8;tmp=tmp.toString(16).match(/(.*?)(.{0,8})$/);lo=parseInt(tmp[2],16);hi=parseInt(tmp[1],16)||0;tail[14]=lo;tail[15]=hi;md5cycle(state,tail);return state}function md51_array(a){var n=a.length,state=[1732584193,-271733879,-1732584194,271733878],i,length,tail,tmp,lo,hi;for(i=64;i<=n;i+=64){md5cycle(state,md5blk_array(a.subarray(i-64,i)))}a=i-64<n?a.subarray(i-64):new Uint8Array(0);length=a.length;tail=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(i=0;i<length;i+=1){tail[i>>2]|=a[i]<<(i%4<<3)}tail[i>>2]|=128<<(i%4<<3);if(i>55){md5cycle(state,tail);for(i=0;i<16;i+=1){tail[i]=0}}tmp=n*8;tmp=tmp.toString(16).match(/(.*?)(.{0,8})$/);lo=parseInt(tmp[2],16);hi=parseInt(tmp[1],16)||0;tail[14]=lo;tail[15]=hi;md5cycle(state,tail);return state}function rhex(n){var s="",j;for(j=0;j<4;j+=1){s+=hex_chr[n>>j*8+4&15]+hex_chr[n>>j*8&15]}return s}function hex(x){var i;for(i=0;i<x.length;i+=1){x[i]=rhex(x[i])}return x.join("")}if(hex(md51("hello"))!=="5d41402abc4b2a76b9719d911017c592"){add32=function(x,y){var lsw=(x&65535)+(y&65535),msw=(x>>16)+(y>>16)+(lsw>>16);return msw<<16|lsw&65535}}function toUtf8(str){if(/[\u0080-\uFFFF]/.test(str)){str=unescape(encodeURIComponent(str))}return str}function utf8Str2ArrayBuffer(str,returnUInt8Array){var length=str.length,buff=new ArrayBuffer(length),arr=new Uint8Array(buff),i;for(i=0;i<length;i++){arr[i]=str.charCodeAt(i)}return returnUInt8Array?arr:buff}function arrayBuffer2Utf8Str(buff){return String.fromCharCode.apply(null,new Uint8Array(buff))}function concatenateArrayBuffers(first,second,returnUInt8Array){var result=new Uint8Array(first.byteLength+second.byteLength);result.set(new Uint8Array(first));result.set(new Uint8Array(second),first.byteLength);return returnUInt8Array?result:result.buffer}function SparkMD5(){this.reset()}SparkMD5.prototype.append=function(str){this.appendBinary(toUtf8(str));return this};SparkMD5.prototype.appendBinary=function(contents){this._buff+=contents;this._length+=contents.length;var length=this._buff.length,i;for(i=64;i<=length;i+=64){md5cycle(this._hash,md5blk(this._buff.substring(i-64,i)))}this._buff=this._buff.substring(i-64);return this};SparkMD5.prototype.end=function(raw){var buff=this._buff,length=buff.length,i,tail=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],ret;for(i=0;i<length;i+=1){tail[i>>2]|=buff.charCodeAt(i)<<(i%4<<3)}this._finish(tail,length);ret=!!raw?this._hash:hex(this._hash);this.reset();return ret};SparkMD5.prototype.reset=function(){this._buff="";this._length=0;this._hash=[1732584193,-271733879,-1732584194,271733878];return this};SparkMD5.prototype.getState=function(){return{buff:this._buff,length:this._length,hash:this._hash}};SparkMD5.prototype.setState=function(state){this._buff=state.buff;this._length=state.length;this._hash=state.hash;return this};SparkMD5.prototype.destroy=function(){delete this._hash;delete this._buff;delete this._length};SparkMD5.prototype._finish=function(tail,length){var i=length,tmp,lo,hi;tail[i>>2]|=128<<(i%4<<3);if(i>55){md5cycle(this._hash,tail);for(i=0;i<16;i+=1){tail[i]=0}}tmp=this._length*8;tmp=tmp.toString(16).match(/(.*?)(.{0,8})$/);lo=parseInt(tmp[2],16);hi=parseInt(tmp[1],16)||0;tail[14]=lo;tail[15]=hi;md5cycle(this._hash,tail)};SparkMD5.hash=function(str,raw){return SparkMD5.hashBinary(toUtf8(str),raw)};SparkMD5.hashBinary=function(content,raw){var hash=md51(content);return!!raw?hash:hex(hash)};SparkMD5.ArrayBuffer=function(){this.reset()};SparkMD5.ArrayBuffer.prototype.append=function(arr){var buff=concatenateArrayBuffers(this._buff.buffer,arr,true),length=buff.length,i;this._length+=arr.byteLength;for(i=64;i<=length;i+=64){md5cycle(this._hash,md5blk_array(buff.subarray(i-64,i)))}this._buff=i-64<length?buff.subarray(i-64):new Uint8Array(0);return this};SparkMD5.ArrayBuffer.prototype.end=function(raw){var buff=this._buff,length=buff.length,tail=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],i,ret;for(i=0;i<length;i+=1){tail[i>>2]|=buff[i]<<(i%4<<3)}this._finish(tail,length);ret=!!raw?this._hash:hex(this._hash);this.reset();return ret};SparkMD5.ArrayBuffer.prototype.reset=function(){this._buff=new Uint8Array(0);this._length=0;this._hash=[1732584193,-271733879,-1732584194,271733878];return this};SparkMD5.ArrayBuffer.prototype.getState=function(){var state=SparkMD5.prototype.getState.call(this);state.buff=arrayBuffer2Utf8Str(state.buff);return state};SparkMD5.ArrayBuffer.prototype.setState=function(state){state.buff=utf8Str2ArrayBuffer(state.buff,true);return SparkMD5.prototype.setState.call(this,state)};SparkMD5.ArrayBuffer.prototype.destroy=SparkMD5.prototype.destroy;SparkMD5.ArrayBuffer.prototype._finish=SparkMD5.prototype._finish;SparkMD5.ArrayBuffer.hash=function(arr,raw){var hash=md51_array(new Uint8Array(arr));return!!raw?hash:hex(hash)};return SparkMD5});
/*!
* clipboard.js v1.5.8
* https://zenorocha.github.io/clipboard.js
*
* Licensed MIT Ac Zeno Rocha
*/
!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.Clipboard=t()}}(function(){var t,e,n;return function t(e,n,r){function o(a,s){if(!n[a]){if(!e[a]){var c="function"==typeof require&&require;if(!s&&c)return c(a,!0);if(i)return i(a,!0);var u=new Error("Cannot find module '"+a+"'");throw u.code="MODULE_NOT_FOUND",u}var l=n[a]={exports:{}};e[a][0].call(l.exports,function(t){var n=e[a][1][t];return o(n?n:t)},l,l.exports,t,e,n,r)}return n[a].exports}for(var i="function"==typeof require&&require,a=0;a<r.length;a++)o(r[a]);return o}({1:[function(t,e,n){var r=t("matches-selector");e.exports=function(t,e,n){for(var o=n?t:t.parentNode;o&&o!==document;){if(r(o,e))return o;o=o.parentNode}}},{"matches-selector":5}],2:[function(t,e,n){function r(t,e,n,r,i){var a=o.apply(this,arguments);return t.addEventListener(n,a,i),{destroy:function(){t.removeEventListener(n,a,i)}}}function o(t,e,n,r){return function(n){n.delegateTarget=i(n.target,e,!0),n.delegateTarget&&r.call(t,n)}}var i=t("closest");e.exports=r},{closest:1}],3:[function(t,e,n){n.node=function(t){return void 0!==t&&t instanceof HTMLElement&&1===t.nodeType},n.nodeList=function(t){var e=Object.prototype.toString.call(t);return void 0!==t&&("[object NodeList]"===e||"[object HTMLCollection]"===e)&&"length"in t&&(0===t.length||n.node(t[0]))},n.string=function(t){return"string"==typeof t||t instanceof String},n.fn=function(t){var e=Object.prototype.toString.call(t);return"[object Function]"===e}},{}],4:[function(t,e,n){function r(t,e,n){if(!t&&!e&&!n)throw new Error("Missing required arguments");if(!s.string(e))throw new TypeError("Second argument must be a String");if(!s.fn(n))throw new TypeError("Third argument must be a Function");if(s.node(t))return o(t,e,n);if(s.nodeList(t))return i(t,e,n);if(s.string(t))return a(t,e,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function o(t,e,n){return t.addEventListener(e,n),{destroy:function(){t.removeEventListener(e,n)}}}function i(t,e,n){return Array.prototype.forEach.call(t,function(t){t.addEventListener(e,n)}),{destroy:function(){Array.prototype.forEach.call(t,function(t){t.removeEventListener(e,n)})}}}function a(t,e,n){return c(document.body,t,e,n)}var s=t("./is"),c=t("delegate");e.exports=r},{"./is":3,delegate:2}],5:[function(t,e,n){function r(t,e){if(i)return i.call(t,e);for(var n=t.parentNode.querySelectorAll(e),r=0;r<n.length;++r)if(n[r]==t)return!0;return!1}var o=Element.prototype,i=o.matchesSelector||o.webkitMatchesSelector||o.mozMatchesSelector||o.msMatchesSelector||o.oMatchesSelector;e.exports=r},{}],6:[function(t,e,n){function r(t){var e;if("INPUT"===t.nodeName||"TEXTAREA"===t.nodeName)t.focus(),t.setSelectionRange(0,t.value.length),e=t.value;else{t.hasAttribute("contenteditable")&&t.focus();var n=window.getSelection(),r=document.createRange();r.selectNodeContents(t),n.removeAllRanges(),n.addRange(r),e=n.toString()}return e}e.exports=r},{}],7:[function(t,e,n){function r(){}r.prototype={on:function(t,e,n){var r=this.e||(this.e={});return(r[t]||(r[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){function r(){o.off(t,r),e.apply(n,arguments)}var o=this;return r._=e,this.on(t,r,n)},emit:function(t){var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),r=0,o=n.length;for(r;o>r;r++)n[r].fn.apply(n[r].ctx,e);return this},off:function(t,e){var n=this.e||(this.e={}),r=n[t],o=[];if(r&&e)for(var i=0,a=r.length;a>i;i++)r[i].fn!==e&&r[i].fn._!==e&&o.push(r[i]);return o.length?n[t]=o:delete n[t],this}},e.exports=r},{}],8:[function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}n.__esModule=!0;var i=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),a=t("select"),s=r(a),c=function(){function t(e){o(this,t),this.resolveOptions(e),this.initSelection()}return t.prototype.resolveOptions=function t(){var e=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];this.action=e.action,this.emitter=e.emitter,this.target=e.target,this.text=e.text,this.trigger=e.trigger,this.selectedText=""},t.prototype.initSelection=function t(){if(this.text&&this.target)throw new Error('Multiple attributes declared, use either "target" or "text"');if(this.text)this.selectFake();else{if(!this.target)throw new Error('Missing required attributes, use either "target" or "text"');this.selectTarget()}},t.prototype.selectFake=function t(){var e=this,n="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandler=document.body.addEventListener("click",function(){return e.removeFake()}),this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[n?"right":"left"]="-9999px",this.fakeElem.style.top=(window.pageYOffset||document.documentElement.scrollTop)+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,document.body.appendChild(this.fakeElem),this.selectedText=s.default(this.fakeElem),this.copyText()},t.prototype.removeFake=function t(){this.fakeHandler&&(document.body.removeEventListener("click"),this.fakeHandler=null),this.fakeElem&&(document.body.removeChild(this.fakeElem),this.fakeElem=null)},t.prototype.selectTarget=function t(){this.selectedText=s.default(this.target),this.copyText()},t.prototype.copyText=function t(){var e=void 0;try{e=document.execCommand(this.action)}catch(n){e=!1}this.handleResult(e)},t.prototype.handleResult=function t(e){e?this.emitter.emit("success",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)}):this.emitter.emit("error",{action:this.action,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})},t.prototype.clearSelection=function t(){this.target&&this.target.blur(),window.getSelection().removeAllRanges()},t.prototype.destroy=function t(){this.removeFake()},i(t,[{key:"action",set:function t(){var e=arguments.length<=0||void 0===arguments[0]?"copy":arguments[0];if(this._action=e,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function t(){return this._action}},{key:"target",set:function t(e){if(void 0!==e){if(!e||"object"!=typeof e||1!==e.nodeType)throw new Error('Invalid "target" value, use a valid Element');this._target=e}},get:function t(){return this._target}}]),t}();n.default=c,e.exports=n.default},{select:6}],9:[function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function a(t,e){var n="data-clipboard-"+t;if(e.hasAttribute(n))return e.getAttribute(n)}n.__esModule=!0;var s=t("./clipboard-action"),c=r(s),u=t("tiny-emitter"),l=r(u),f=t("good-listener"),d=r(f),h=function(t){function e(n,r){o(this,e),t.call(this),this.resolveOptions(r),this.listenClick(n)}return i(e,t),e.prototype.resolveOptions=function t(){var e=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];this.action="function"==typeof e.action?e.action:this.defaultAction,this.target="function"==typeof e.target?e.target:this.defaultTarget,this.text="function"==typeof e.text?e.text:this.defaultText},e.prototype.listenClick=function t(e){var n=this;this.listener=d.default(e,"click",function(t){return n.onClick(t)})},e.prototype.onClick=function t(e){var n=e.delegateTarget||e.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new c.default({action:this.action(n),target:this.target(n),text:this.text(n),trigger:n,emitter:this})},e.prototype.defaultAction=function t(e){return a("action",e)},e.prototype.defaultTarget=function t(e){var n=a("target",e);return n?document.querySelector(n):void 0},e.prototype.defaultText=function t(e){return a("text",e)},e.prototype.destroy=function t(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)},e}(l.default);n.default=h,e.exports=n.default},{"./clipboard-action":8,"good-listener":4,"tiny-emitter":7}]},{},[9])(9)});