-
Notifications
You must be signed in to change notification settings - Fork 1.1k
/
index.js
95 lines (90 loc) · 4.06 KB
/
index.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
/*
** es6-features -- ECMAScript 6 Feature Overview & Comparison
** Copyright (c) 2015-2017 Ralf S. Engelschall <[email protected]>
**
** Permission is hereby granted, free of charge, to any person obtaining
** a copy of this software and associated documentation files (the
** "Software"), to deal in the Software without restriction, including
** without limitation the rights to use, copy, modify, merge, publish,
** distribute, sublicense, and/or sell copies of the Software, and to
** permit persons to whom the Software is furnished to do so, subject to
** the following conditions:
**
** The above copyright notice and this permission notice shall be included
** in all copies or substantial portions of the Software.
**
** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
(function ($) {
$(document).ready(function () {
/* support switching between reduced and traditional semicolon style */
$(".content .js.es6").addClass("reduced")
$(".content .js.es5").addClass("traditional")
$(".content .js .title .style").click(function (ev) {
var id = $(ev.target).text()
var type = $(ev.target).parent().parent().hasClass("es5") ? "es5" : "es6"
$(".content .js." + type)
.removeClass("reduced")
.removeClass("traditional")
.addClass(id)
})
/* support navigation item selection */
$(".showcase").css("display", "none")
$(".showcase:first").css("display", "block")
$("li.subtitle:first").addClass("selected")
$(".nav a").click(function (ev) {
var id = $(ev.target).attr("href").replace(/^#/, "")
$(".showcase").css("display", "none")
$(".showcase_" + id).css("display", "block")
$("li.subtitle").removeClass("selected")
$("li.subtitle_" + id).addClass("selected")
var c = $(".nav")
var ch = c.height()
var cs = c.scrollTop()
var e = $(".nav li.subtitle.selected")
var ep = e.parent().position().top + e.position().top
var eh = e.height()
if (ep < cs)
c.scrollTop(Math.max(0, ep - eh))
else if (ep > cs+ch)
c.scrollTop(Math.max(0, (ep + 4*eh) - ch))
})
/* support navigation via cursor keys */
var ids = []
$("li.subtitle a").each(function () {
ids.push($(this).attr("href").replace(/^#/, ""))
})
Mousetrap.bind([ "up", "pageup" ], function (e) {
var id = $("li.subtitle.selected a").attr("href").replace(/^#/, "")
var idx = ids.indexOf(id)
if (idx > 0)
window.location.hash = "#" + ids[idx - 1]
})
Mousetrap.bind([ "down", "pagedown" ], function (e) {
var id = $("li.subtitle.selected a").attr("href").replace(/^#/, "")
var idx = ids.indexOf(id)
if (idx < ids.length - 1)
window.location.hash = "#" + ids[idx + 1]
})
/* support URL based routing and this way deep-linking */
var dispatch = function (id) {
if (id === "modernized")
id = "reduced"
if (id === "reduced" || id === "traditional")
$(".content .js").removeClass("traditional").removeClass("reduced").addClass(id)
else
$("li.subtitle a[href='#" + id + "']").trigger("click")
}
var router = new Router()
router.on("(.+)", dispatch)
router.configure({ delimiter: "/" })
router.init("Constants")
dispatch(router.getRoute(0))
})
})(jQuery)