Files
shopify-ai-backup/chat/templates/Announcements/public/js/public-script.js

219 lines
7.6 KiB
JavaScript

jQuery(document).ready(function($) {
'use strict';
// Close announcement functionality
$('.pc-announcements-274-close').on('click', function(e) {
e.preventDefault();
e.stopPropagation();
var $announcement = $(this).closest('.pc-announcements-274-announcement');
var announcementId = $announcement.data('announcement-id');
// Add hiding class for animation
$announcement.addClass('pc-announcements-274-hidden');
// Store dismissal in localStorage for this session
if (typeof(Storage) !== "undefined" && announcementId) {
var dismissed = localStorage.getItem('pc_announcements_274_dismissed') || '[]';
var dismissedArray = JSON.parse(dismissed);
if (dismissedArray.indexOf(announcementId) === -1) {
dismissedArray.push(announcementId);
localStorage.setItem('pc_announcements_274_dismissed', JSON.stringify(dismissedArray));
}
}
// Remove from DOM after animation
setTimeout(function() {
$announcement.attr('aria-hidden', 'true').hide();
// Adjust body padding if needed
adjustBodyPadding();
}, 400);
});
// Adjust body padding to prevent content jump when announcement is hidden
function adjustBodyPadding() {
var $announcement = $('.pc-announcements-274-announcement');
if ($announcement.length === 0) {
$('body').css('padding-top', '');
return;
}
if ($announcement.is(':visible')) {
var announcementHeight = $announcement.outerHeight();
var currentPadding = parseInt($('body').css('padding-top')) || 0;
if (currentPadding < announcementHeight) {
$('body').css('padding-top', announcementHeight + 'px');
}
}
}
// Initialize padding adjustment
$(window).on('load', function() {
adjustBodyPadding();
});
// Handle window resize
$(window).on('resize', function() {
adjustBodyPadding();
});
// Check for dismissed announcements on page load
function checkDismissedAnnouncements() {
if (typeof(Storage) !== "undefined") {
var dismissed = localStorage.getItem('pc_announcements_274_dismissed') || '[]';
var dismissedArray = JSON.parse(dismissed);
$('.pc-announcements-274-announcement').each(function() {
var announcementId = $(this).data('announcement-id');
if (announcementId && dismissedArray.indexOf(announcementId) !== -1) {
$(this).attr('aria-hidden', 'true').hide();
}
});
}
}
checkDismissedAnnouncements();
// Re-check padding after checking dismissed announcements
setTimeout(function() {
adjustBodyPadding();
}, 100);
// Keyboard navigation
$('.pc-announcements-274-close').on('keydown', function(e) {
if (e.key === 'Enter' || e.key === ' ') {
e.preventDefault();
$(this).click();
}
});
// Escape key to close announcement
$(document).on('keydown', function(e) {
if (e.key === 'Escape') {
var $visibleAnnouncement = $('.pc-announcements-274-announcement:visible');
if ($visibleAnnouncement.length > 0) {
$visibleAnnouncement.find('.pc-announcements-274-close').first().focus();
}
}
});
// Auto-hide functionality (optional - could be enabled with a data attribute)
function initAutoHide() {
$('.pc-announcements-274-announcement[data-auto-hide]').each(function() {
var $announcement = $(this);
var autoHideTime = parseInt($announcement.data('auto-hide')) * 1000;
if (autoHideTime > 0) {
setTimeout(function() {
if ($announcement.is(':visible')) {
$announcement.find('.pc-announcements-274-close').click();
}
}, autoHideTime);
}
});
}
initAutoHide();
// Add animation classes on initial load
$('.pc-announcements-274-announcement:visible').addClass('pc-announcements-274-show');
// Handle dynamic content loading (if announcements are loaded via AJAX)
function reinitializeAnnouncements() {
adjustBodyPadding();
checkDismissedAnnouncements();
initAutoHide();
$('.pc-announcements-274-announcement:visible').addClass('pc-announcements-274-show');
}
// Expose reinitialize function for global use
window.pcAnnouncements274Reinitialize = reinitializeAnnouncements;
// Smooth scroll to top when announcement appears (optional)
function smoothScrollToTop() {
if ($('.pc-announcements-274-announcement:visible').length > 0) {
$('html, body').animate({
scrollTop: 0
}, 300);
}
}
// Only scroll to top on initial page load if announcement is present
if (performance.navigation.type === 0) { // First page load
setTimeout(function() {
if ($('.pc-announcements-274-announcement:visible').length > 0) {
var $announcement = $('.pc-announcements-274-announcement:visible');
var announcementId = $announcement.data('announcement-id');
// Don't scroll if it was just dismissed
if (typeof(Storage) !== "undefined" && announcementId) {
var dismissed = localStorage.getItem('pc_announcements_274_dismissed') || '[]';
var dismissedArray = JSON.parse(dismissed);
if (dismissedArray.indexOf(announcementId) === -1) {
smoothScrollToTop();
}
} else {
smoothScrollToTop();
}
}
}, 100);
}
// Handle announcement stacking if multiple are shown
function handleStacking() {
var $announcements = $('.pc-announcements-274-announcement:visible');
var offset = 0;
$announcements.each(function(index) {
$(this).css('top', offset + 'px');
offset += $(this).outerHeight();
});
}
handleStacking();
// Re-handle stacking on window resize
$(window).on('resize', function() {
handleStacking();
});
// Accessibility: Focus management
function manageFocus() {
$('.pc-announcements-274-announcement').attr('role', 'banner');
$('.pc-announcements-274-close').attr('tabindex', '0');
}
manageFocus();
// Performance: Debounce resize events
function debounce(func, wait) {
var timeout;
return function executedFunction() {
var context = this;
var args = arguments;
var later = function() {
timeout = null;
func.apply(context, args);
};
clearTimeout(timeout);
timeout = setTimeout(later, wait);
};
}
var debouncedResize = debounce(function() {
adjustBodyPadding();
handleStacking();
}, 250);
$(window).on('resize', debouncedResize);
// Log for debugging (remove in production)
if (window.console && window.console.log && false) { // Set to true for debugging
console.log('PC Announcements 274: Initialized');
}
});