(function($){
"use strict";
$(document).ready(function(){
initCitationCopy();
initDOILinks();
initSmoothScrolling();
initStickyNavigation();
});
function initCitationCopy(){
$('.copy-citation-btn').on('click', function(e){
e.preventDefault();
const citation=$(this).data('citation');
const button=$(this);
if(!citation){
showNotification(ceSingleL10n.noCitationData, 'warning');
return;
}
if(navigator.clipboard){
navigator.clipboard.writeText(citation)
.then(()=> {
showNotification(ceSingleL10n.citationCopied, 'success');
animateCopyButton(button);
})
.catch((err)=> {
console.error('Clipboard copy failed:', err);
showNotification(ceSingleL10n.copyFailed, 'danger');
fallbackCopy(citation, button);
});
}else{
fallbackCopy(citation, button);
}});
}
function initDOILinks(){
$('.ce-doi-link').each(function(){
const link=$(this);
const doi=link.text().trim();
UIkit.tooltip(link, {
title: `${ceSingleL10n.viewDoi} ${doi}`,
pos: 'bottom',
delay: 300
});
link.on('click', function(){
if(typeof ga!=='undefined'){
ga('send', 'event', 'External Link', 'Click', doi);
}});
});
}
function initSmoothScrolling(){
$('a[href^="#"]').on('click', function(e){
const target=$(this.hash);
if(target.length){
e.preventDefault();
$('html, body').animate({
scrollTop: target.offset().top - 100
}, 500, 'swing');
}});
}
function initStickyNavigation(){
const sidebar=$('.ce-sidebar');
if(sidebar.length&&window.innerWidth >=960){
let lastScrollTop=0;
const headerHeight=$('.ce-article-header').outerHeight();
const offset=30;
$(window).on('scroll', function(){
const scrollTop=$(this).scrollTop();
const sidebarTop=sidebar.offset().top;
const sidebarHeight=sidebar.outerHeight();
const windowHeight=$(window).height();
if(sidebarHeight > windowHeight){
if(scrollTop > lastScrollTop){
if(scrollTop > sidebarTop + sidebarHeight - windowHeight + offset){
sidebar.css({
position: 'fixed',
top: -(sidebarHeight - windowHeight + offset) + 'px',
bottom: 'auto'
});
}}else{
if(scrollTop < sidebarTop - headerHeight - offset){
sidebar.css({
position: 'fixed',
top: headerHeight + offset + 'px',
bottom: 'auto'
});
}}
}
lastScrollTop=scrollTop;
});
}}
function fallbackCopy(text, button){
const textArea=document.createElement('textarea');
textArea.value=text;
textArea.style.position='fixed';
textArea.style.left='-999999px';
textArea.style.top='-999999px';
document.body.appendChild(textArea);
textArea.focus();
textArea.select();
let successful=false;
try {
successful=document.execCommand ('copy');
} catch (err){
console.error('Fallback clipboard copy failed:', err);
}
document.body.removeChild(textArea);
if(successful){
showNotification(ceSingleL10n.citationCopied, 'success');
animateCopyButton(button);
}else{
showNotification(ceSingleL10n.copyFailed, 'danger');
}}
function showNotification(message, status){
UIkit.notification({
message: `<span uk-icon="icon: ${getStatusIcon(status)}"></span> ${message}`,
status: status,
pos: 'top-center',
timeout: 3000
});
}
function getStatusIcon(status){
switch(status){
case 'success': return 'check';
case 'warning': return 'warning';
case 'danger': return 'close';
default: return 'info';
}}
function animateCopyButton(button){
const originalText=button.html();
const originalClass=button.attr('class');
button.html('<span uk-icon="icon: check; ratio: 0.9;"></span> ' + ceSingleL10n.copied);
button.addClass('uk-animation-scale-up uk-animation-fast');
button.removeClass('uk-button-secondary').addClass('uk-button-success');
setTimeout(()=> {
button.html(originalText);
button.attr('class', originalClass);
}, 2000);
}})(jQuery);