Files
hub-insurance/wp-content/plugins/wpfront-notification-bar/js/wpfront-notification-bar.js
T
2026-07-02 15:54:39 -06:00

354 lines
12 KiB
JavaScript

/*
WPFront Notification Bar Plugin
Copyright (C) 2013, WPFront.com
Website: wpfront.com
Contact: syam@wpfront.com
WPFront Notification Bar Plugin is distributed under the GNU General Public License, Version 3,
June 2007. Copyright (C) 2007 Free Software Foundation, Inc., 51 Franklin
St, Fifth Floor, Boston, MA 02110, USA
*/
(function () {
//displays the notification bar
window.wpfront_notification_bar = function (data, process) {
var log = function (msg) {
if (data.log) {
console.log(data.log_prefix + ' ' + msg);
}
};
if (typeof jQuery === "undefined" || (data.keep_closed && typeof Cookies === "undefined") || (data.set_max_views && typeof Cookies === "undefined")) {
log('Waiting for ' + (typeof jQuery === "undefined" ? 'jQuery.' : 'Cookies.'));
setTimeout(function () {
wpfront_notification_bar(data, process);
}, 100);
return;
}
if (data.position == 2 && process !== true) {
jQuery(function () {
wpfront_notification_bar(data, true);
});
return;
}
var get_element_id = function (id) {
return id + data.id_suffix;
}
var $ = jQuery;
var keep_closed_cookie = data.keep_closed_cookie;
var bar_views = 0;
var max_views_cookie = data.max_views_cookie;
var spacer = $(get_element_id("#wpfront-notification-bar-spacer")).removeClass('hidden');
var bar = $(get_element_id("#wpfront-notification-bar"));
var open_button = $(get_element_id("#wpfront-notification-bar-open-button"));
//set the position
if (data.position == 1) {
log('Setting notification bar at top.');
var top = 0;
if (data.fixed_position && data.is_admin_bar_showing) {
top = $("html").css("margin-top");
if (top == "0px")
top = $("html").css("padding-top");
top = parseInt(top);
}
if (data.fixed_position) {
top += data.position_offset;
}
bar.css("top", top + "px");
open_button.css("top", top + "px");
spacer.css("top", data.position_offset + "px");
var $body = $("body")
var $firstChild = $body.children().first();
if ($firstChild.hasClass("wpfront-notification-bar-spacer")) {
while (true) {
var $next = $firstChild.next();
if ($next.hasClass("wpfront-notification-bar-spacer")) {
$firstChild = $next;
} else {
$firstChild.after(spacer);
break;
}
}
} else {
$body.prepend(spacer);
}
$(function () {
if ($body.children().first().hasClass("wpfront-notification-bar-spacer")) {
return;
}
if (data.fixed_position && !$body.children().first().is(spacer)) {
$body.prepend(spacer);
}
});
} else {
log('Setting notification bar at bottom.');
var $body = $("body");
if (!$body.children().last().is(spacer)) {
$body.append(spacer);
}
$(function () {
if (!$body.children().last().is(spacer)) {
$body.append(spacer);
}
});
}
var height = bar.height();
if (data.height > 0) {
height = data.height;
bar.find("table, tbody, tr").css("height", "100%");
}
bar.height(0).css({"position": (data.fixed_position ? "fixed" : "relative"), "visibility": "visible"});
open_button.css({"position": (data.fixed_position ? "fixed" : "absolute")});
//function to set bar height based on options
var closed = false;
var user_closed = false;
function setHeight(height, callback, userclosed) {
callback = callback || $.noop;
if (userclosed)
user_closed = true;
if (height == 0) {
if (closed)
return;
closed = true;
} else {
if (!closed)
return;
closed = false;
}
if (height == 0 && data.keep_closed && userclosed) {
if (data.keep_closed_for > 0)
Cookies.set(keep_closed_cookie, 1, {path: "/", expires: data.keep_closed_for, sameSite: "strict"});
else
Cookies.set(keep_closed_cookie, 1, {path: "/", sameSite: "strict"});
}
if (height !== 0 && data.set_max_views) {
bar_views = Cookies.get(max_views_cookie);
if (typeof bar_views === "undefined") {
bar_views = 0;
} else {
bar_views = parseInt(bar_views);
}
if (data.max_views_for > 0) {
Cookies.set(max_views_cookie, bar_views + 1, {path: "/", expires: data.max_views_for, sameSite: "strict"});
} else {
Cookies.set(max_views_cookie, bar_views + 1, {path: "/", sameSite: "strict"});
}
log('Setting view count to ' + (bar_views + 1) + '.');
}
var fn = callback;
callback = function () {
fn();
if (height > 0) {
//set height to auto if in case content wraps on resize
if (data.height == 0)
bar.height("auto");
if (data.display_open_button) {
log('Setting reopen button state to hidden.');
open_button.addClass('hidden');
}
closed = false;
}
if (height == 0 && data.display_open_button) {
log('Setting reopen button state to visible.');
open_button.removeClass('hidden');
}
if(height > 0){
bar.removeClass('hidden');
} else {
bar.addClass('hidden');
}
};
//set animation
if (height > 0)
log('Setting notification bar state to visible.');
else
log('Setting notification bar state to hidden.');
if (data.animate_delay > 0) {
bar.stop().show().animate({"height": height + "px"}, {
"duration": data.animate_delay * 1000,
"easing": "swing",
"complete": function () {
if (data.fixed_position) {
spacer.height(height);
}
handle_theme_sticky(height);
callback();
},
"step": function (progress) {
if (data.fixed_position) {
spacer.height(progress);
}
handle_theme_sticky(progress);
}
});
} else {
bar.height(height);
if (data.fixed_position) {
spacer.height(height);
}
handle_theme_sticky(height);
callback();
}
}
var theme_sticky_selector_position = null;
var theme_sticky_interval_id = 0;
var handle_theme_sticky_needed = data.fixed_position && data.theme_sticky_selector != "";
function handle_theme_sticky(recursive) {
if (!handle_theme_sticky_needed) {
return 0;
}
if (recursive !== true) {
clearInterval(theme_sticky_interval_id);
var intervalCount = 0;
theme_sticky_interval_id = setInterval(function () {
handle_theme_sticky(true);
intervalCount++;
if (intervalCount > 100) {
clearInterval(theme_sticky_interval_id);
return;
}
}, 10);
}
var $theme_sticky_selector = $(data.theme_sticky_selector);
if ($theme_sticky_selector.length == 0 || $theme_sticky_selector.css('position') !== 'fixed') {
return 0;
}
if (data.position == 1) {
if (theme_sticky_selector_position === null) {
theme_sticky_selector_position = $theme_sticky_selector.position().top;
}
if (bar.is(":visible")) {
$theme_sticky_selector.css("top", (bar.height() + bar.position().top) + "px");
} else {
$theme_sticky_selector.css("top", theme_sticky_selector_position + "px");
}
}
if (data.position == 2) {
if (theme_sticky_selector_position === null) {
theme_sticky_selector_position = $theme_sticky_selector.height() + parseFloat($theme_sticky_selector.css("bottom"));
}
if (bar.is(":visible")) {
$theme_sticky_selector.css("bottom", (bar.height() + parseFloat(bar.css("bottom"))) + "px");
} else {
$theme_sticky_selector.css("bottom", theme_sticky_selector_position + "px");
}
}
}
if (handle_theme_sticky_needed) {
$(window).on("scroll resize", function () {
handle_theme_sticky();
});
}
if (data.close_button) {
spacer.on('click', '.wpfront-close', function () {
setHeight(0, null, true);
});
}
//close button action
if (data.button_action_close_bar) {
spacer.on('click', '.wpfront-button', function () {
setHeight(0, null, true);
});
}
if (data.display_open_button) {
spacer.on('click', get_element_id('#wpfront-notification-bar-open-button'), function () {
setHeight(height);
});
}
if (data.keep_closed) {
if (Cookies.get(keep_closed_cookie)) {
log('Keep closed enabled and keep closed cookie exists. Hiding notification bar.');
setHeight(0, function(){
bar.removeClass('keep-closed');
});
return;
}
}
bar.removeClass('keep-closed');
if (data.set_max_views) {
bar_views = Cookies.get(max_views_cookie);
if (typeof bar_views === "undefined") {
bar_views = 0;
}
if (bar_views >= data.max_views) {
log('Reached max views, hiding notification bar.');
setHeight(0, function(){
bar.removeClass('max-views-reached');
});
return;
}
}
bar.removeClass('max-views-reached');
closed = true;
if (data.display_scroll) {
log('Display on scroll enabled. Hiding notification bar.');
setHeight(0);
$(window).on('scroll', function () {
if (user_closed)
return;
if ($(this).scrollTop() > data.display_scroll_offset) {
setHeight(height);
} else {
setHeight(0);
}
});
} else {
//set open after seconds and auto close seconds.
log('Setting notification bar open event after ' + data.display_after + ' second(s).');
setTimeout(function () {
setHeight(height, function () {
if (data.auto_close_after > 0) {
log('Setting notification bar auto close event after ' + data.auto_close_after + ' second(s).');
setTimeout(function () {
setHeight(0, null, true);
}, data.auto_close_after * 1000);
}
});
}, data.display_after * 1000);
}
};
})();