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