-
Notifications
You must be signed in to change notification settings - Fork 2
/
script.js
126 lines (101 loc) · 3.06 KB
/
script.js
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
115
116
117
118
119
120
121
122
123
124
125
126
// https://github.com/Khan/KaTeX
var katexOptions = { displayMode: true };
var closeSymbol = '🗁';
var openSymbol = '🗀';
var gotoTopSymbol = '↑';
var toggleFormulasCssClass = 'toggle-formulas-btn';
var titleRightBtnsCssClass = 'title-right-btns';
var formulasElems = $('.formulas').hide();
var gotoTopBtn = $('<a>')
.attr('href', '#top')
.html(gotoTopSymbol + ' Menú')
.addClass('goto-top-btn');
var gotoTopBtnTmpl = $('<div>')
.addClass(titleRightBtnsCssClass)
.append(gotoTopBtn);
var toggleFormulasBtnElems;
var toggleFormulasBtnTmpl = $('<span>')
.html(openSymbol)
.addClass(toggleFormulasCssClass);
$(document).ready(bootstrap);
function bootstrap() {
$('.formula').each(renderFormula);
toggleFormulasBtnElems = $('h2')
.each(addGotoTopBtn)
.map(addToggleBtn);
$('#menu li')
.map(getMenuLinks)
.each(addUnfoldEvent)
.each(addVideoLink);
$('#foldAllBtn').click(foldAll);
$('#unfoldAllBtn').click(unfoldAll);
$('.formulas-title').mousedown(unfoldTarget);
$('.formula-link').mousedown(unfoldTarget);
$('.spoiler-btn').click(showSpoiler);
handleInitialSection();
}
function handleInitialSection() {
var hash = location.hash;
location.hash = '';
location.hash = hash;
if (hash && hash != 'top') {
$(hash.replace('#', '.')).slideToggle();
$(hash + ' .' + toggleFormulasCssClass).html(closeSymbol);
}
}
function renderFormula(i, elem) {
katex.render(elem.innerText, elem, katexOptions);
}
function addGotoTopBtn(index, h2Elem) {
$(h2Elem).prepend(gotoTopBtnTmpl.clone());
}
function addToggleBtn(index, h2Elem) {
return toggleFormulasBtnTmpl
.clone()
.click(toggleFolding)
.prependTo(h2Elem)[0];
}
function getMenuLinks(index, menuOptElem) {
var menuLinks = $(menuOptElem).find('a');
return {
formulasLink: menuLinks[0],
videoLink: menuLinks[1]
};
}
function addUnfoldEvent(index, menuLinks) {
$(menuLinks.formulasLink).mousedown(unfoldTarget);
}
function addVideoLink(index, menuLinks) {
var formulasId = getIdFromHref(menuLinks.formulasLink);
var videoLink = $(menuLinks.videoLink).clone().addClass('view-video-btn');
$('#' + formulasId + ' .' + titleRightBtnsCssClass).append(videoLink);
}
function foldAll() {
formulasElems.slideUp();
toggleFormulasBtnElems.html(openSymbol);
}
function unfoldAll() {
formulasElems.slideDown();
toggleFormulasBtnElems.html(closeSymbol);
}
function unfoldTarget(ev) {
var formulasId = getIdFromHref(ev.currentTarget);
var formulasElem = $('.' + formulasId);
if (!formulasElem.is(':visible')) {
formulasElem.show();
$('#' + formulasId + ' .' + toggleFormulasCssClass).html(closeSymbol);
}
}
function toggleFolding(ev) {
var formulasElem = $('.' + ev.currentTarget.parentElement.id);
var isHiding = formulasElem.is(':visible');
formulasElem.slideToggle();
$(ev.currentTarget).html(isHiding ? openSymbol : closeSymbol);
}
function showSpoiler(ev) {
$(ev.currentTarget).hide();
$(ev.currentTarget.parentElement).find('.spoiler').fadeIn();
}
function getIdFromHref(elem) {
return elem.href.match(/#(.*)/)[1];
}