1(function () { 2 let floater = null; 3 let tracking = false; 4 let timer = null; 5 6 function createFloater() { 7 return jQuery('<div id="insitu__fn" />') 8 .addClass('insitu-footnote JSpopup') 9 .css({ visibility : 'hidden', left : '0px', top : '0px' }) 10 .mouseleave(function () { jQuery(this).hide(); }) 11 .appendTo('.dokuwiki:first'); 12 } 13 14 function getFloater() { 15 if (!floater) { 16 floater = jQuery('#insitu__fn'); 17 if (floater.length == 0) { 18 floater = createFloater(); 19 } 20 } 21 22 return floater; 23 } 24 25 let preview = { 26 setNoteId(id) { 27 // locate the note span element 28 let note = jQuery('#' + id.replace(/:/g, '\\:') + '\\:text'); 29 if (note.length == 0) { 30 return false; 31 } 32 33 // remove any element ids from the content to ensure that they remain unique 34 // and display hidden tooltip so we can move it around 35 getFloater() 36 .html(note.html().replace(/\bid\s*=\s*".*?"/gi, '')) 37 .css('visibility', 'hidden') 38 .show(); 39 40 return true; 41 }, 42 43 show() { 44 getFloater() 45 .css('visibility', 'visible') 46 .show(); 47 }, 48 49 hide() { 50 // prevent creation of the floater and re-hiding it on window.scroll() 51 if (floater && floater.is(':visible')) { 52 floater.hide(); 53 } 54 }, 55 56 move(event, dx, dy) { 57 getFloater().position({ 58 my : 'left top', 59 of : event, 60 offset : dx + ' ' + dy, 61 collision : 'flip' 62 }); 63 } 64 }; 65 66 function getNoteId(event) { 67 return event.target.href.replace(/^.*?#([\w:]+)$/gi, '$1'); 68 } 69 70 plugin_refnotes = { 71 popup : { 72 show(event) { 73 plugin_refnotes.tooltip.hide(event); 74 if (preview.setNoteId(getNoteId(event))) { 75 preview.move(event, 2, 2); 76 preview.show(); 77 } 78 } 79 }, 80 81 tooltip : { 82 show(event) { 83 plugin_refnotes.tooltip.hide(event); 84 if (preview.setNoteId(getNoteId(event))) { 85 timer = setTimeout(function () { preview.show(); }, 500); 86 tracking = true; 87 } 88 }, 89 90 hide(event) { 91 if (tracking) { 92 clearTimeout(timer); 93 tracking = false; 94 } 95 preview.hide(); 96 }, 97 98 track(event) { 99 if (tracking) { 100 preview.move(event, 10, 12); 101 } 102 } 103 } 104 }; 105})(); 106 107jQuery(function () { 108 jQuery('a.refnotes-ref.note-popup').mouseenter(plugin_refnotes.popup.show); 109 jQuery('a.refnotes-ref.note-tooltip') 110 .mouseenter(plugin_refnotes.tooltip.show) 111 .mouseleave(plugin_refnotes.tooltip.hide); 112 jQuery(document).mousemove(plugin_refnotes.tooltip.track); 113 jQuery(window).scroll(plugin_refnotes.tooltip.hide); 114}); 115