-
Notifications
You must be signed in to change notification settings - Fork 1
/
codecode.js
122 lines (91 loc) · 2.89 KB
/
codecode.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
(function ($, win, doc) {
'use strict';
var el = {};
var codePosition;
el.body = $(doc.body);
el.codecodecode = $([
'<div class="codecodecode">',
' <div class="codecodecontrols">',
' <a class="goBackToTheCode" href="#">go back to the code.</a>',
' <a class="closeCodeCode" href="#">close.</a>',
' </div>',
' <div class="codecode"></div>',
'</div>'
].join('\n'));
el.goBackToTheCode = el.codecodecode.find('.goBackToTheCode');
el.closeCodeCode = el.codecodecode.find('.closeCodeCode');
el.codecode = el.codecodecode.find('.codecode');
el.body.append(el.codecodecode);
el.goBackToTheCode.on('click', goBackToTheCode);
el.closeCodeCode.on('click', closeCodeCode);
function goBackToTheCode(e) {
e.preventDefault();
closeCodeCode();
el.body.animate({ scrollTop: codePosition - 20 }, 2000);
};
function closeCodeCode(e, callback) {
if ($.type(e) === 'object') {
e.preventDefault();
}
el.body.off('keyup');
el.codecodecode.animate({ bottom: '-300px' }, 300, callback || $.noop);
$('.acodecodeactive').removeClass('acodecodeactive');
};
function openCodeCode(codeblock) {
el.codecodecode.animate({ bottom: 0 }, 500);
el.body.on('keyup', function (e) {
if (e.which === 27) {
closeCodeCode();
}
});
codeblock.addClass('acodecodeactive');
};
function bindCodeCodeClick(selector) {
el.body.on('click', selector, function () {
var codeblock = $(this);
var clone;
if (codeblock.hasClass('acodecodeactive') ||
codeblock.hasClass('codecode')) {
return;
}
codePosition = $(this).position().top;
clone = codeblock.clone().addClass('codecode');
closeCodeCode(null, function () {
el.codecode
.empty()
.append(clone.css('margin', '0 !important'))
.height('auto');
el.codecodecode.height(
(el.codecode.height() >= 270) ? 270 : el.codecode.height()
);
el.codecode.height('100%');
});
openCodeCode(codeblock);
});
};
$.fn.codecode = function () {
bindCodeCodeClick(this.selector);
return this.addClass('acodecode');
};
if (typeof SyntaxHighlighter !== 'undefined') {
SyntaxHighlighter.all = (function () {
var callSyntaxHighlighter = SyntaxHighlighter.all;
var syntaxActivated = false;
var checkForSyntaxEls;
var tried = 0;
function hasSyntaxBeenHighlighted() {
if ($('.syntaxhighlighter').length > 0) {
$('.syntaxhighlighter').codecode();
syntaxActivated = true;
}
if (syntaxActivated || tried++ > 50) {
win.clearInterval(checkForSyntaxEls);
}
};
return function () {
callSyntaxHighlighter();
checkForSyntaxEls = win.setInterval(hasSyntaxBeenHighlighted, 50);
}
})();
}
})(jQuery, window, document);