/* 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); } }; })();