Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
quantum-kittens
GitHub Repository: quantum-kittens/platypus
Path: blob/main/frontend/textbook.ts
3338 views
1
import './wc/block/block'
2
3
import { initIndexHighlight } from './ts/indexhighlighter'
4
import { initNotations } from './ts/notations'
5
import { initLeftSidebar, toggleLanguagePicker } from './ts/leftsidebar'
6
import { getProgressData, storeProgressLocally } from './ts/storage'
7
import {
8
initAnalytics,
9
trackClickEvent,
10
trackPage,
11
trackPerformedSearch,
12
trackUpdatedObject
13
} from './plugins/segmentAnalytics'
14
import { loadTranslations } from './ts/translations'
15
16
17
declare global {
18
interface Window {
19
textbook: Textbook,
20
textbookAnalytics: any
21
}
22
}
23
24
interface Textbook {
25
runAfterDOMLoaded: any,
26
trackClickEvent?: any,
27
trackPerformedSearch?: any,
28
trackUpdatedObject?: any,
29
course?: XCourse,
30
locale: string,
31
translations?: {[x:string]: string}
32
}
33
34
const runAfterDOMLoaded = function (cb: EventListenerOrEventListenerObject|CallableFunction) {
35
if (document.readyState != 'loading') {
36
(cb as CallableFunction)()
37
} else if (document.addEventListener) {
38
document.addEventListener('DOMContentLoaded', cb as EventListenerOrEventListenerObject)
39
}
40
}
41
42
window.progressData = getProgressData()
43
window.textbook = Object.assign(window.textbook, {
44
runAfterDOMLoaded,
45
translations: loadTranslations()
46
})
47
const textbook = window.textbook
48
49
textbook.runAfterDOMLoaded(() => {
50
// hold courseId & sectionId
51
const xcourse = document.getElementsByTagName('x-course')[0]
52
if (xcourse) {
53
textbook.course = {
54
id: xcourse.id,
55
section: xcourse.getAttribute('data-section') || '',
56
goals: +xcourse.getAttribute('data-goals')! || 0
57
}
58
59
storeProgressLocally(textbook.course)
60
}
61
62
initLeftSidebar()
63
toggleLanguagePicker()
64
initNotations()
65
initIndexHighlight()
66
67
// set up & trigger segment
68
initAnalytics(
69
window.textbookAnalytics.key, window.textbookAnalytics.url
70
).then(() => {
71
trackPage(window.location.pathname)
72
}).finally(() => {
73
textbook.trackClickEvent = trackClickEvent
74
textbook.trackPerformedSearch = trackPerformedSearch
75
textbook.trackUpdatedObject = trackUpdatedObject
76
})
77
})
78
79