-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathmain.js
134 lines (110 loc) · 3.35 KB
/
main.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
127
128
129
130
131
132
133
134
// Switcher State
// ----------------------------------------------------
let visible = 'Canvas' // or 'refimg'
let invisible = 'Refimg'
const canvasSel = '#myCanvas'
const refimgSel = '#refImg'
const sels = {
Canvas: canvasSel,
Refimg: refimgSel,
}
const icons = {
Canvas: 'wallet',
Refimg: 'image',
}
const saveFunctions = {
Canvas : saveCanvas,
Refimg : saveRefimg,
}
function main() {
const experiment = new Experiment()
// Update Candidate Details
updateCandidateDetails(Experiment)
// Set up refimg
setupRefimg(Experiment)
// Set up canvas
flipVisible('Canvas')
// --------------------------------------------------
// Canvas Setup
// --------------------------------------------------
canvasReset(canvasSel)
const {canvas, ctx, bb} = getCanvas(canvasSel)
// --------------------------------------------------
// Geometry
// --------------------------------------------------
const path = Experiment.createGeometry()
// --------------------------------------------------
// Transform
// --------------------------------------------------
// The scale rotate and translate transformations
// have been computed as a combined matrix, before
// being initialised here.
const transform = Experiment.getBaseTransform()
// --------------------------------------------------
// Render Styles
// --------------------------------------------------
const styles = Experiment.getBaseStyles()
// --------------------------------------------------
// Render
// --------------------------------------------------
// Apply transform to path
const pathToDraw = new Path2D()
pathToDraw.addPath(path, transform)
ctx.fillStyle = styles.fill.c
ctx.fill(pathToDraw, styles.fill.r)
ctx.lineWidth = styles.stroke.w
ctx.strokeStyle = styles.stroke.c
ctx.stroke(pathToDraw)
}
function updateCandidateDetails({rollNo,name}) {
let isValidRollNo, isValidName
isValidRollNo = (isValidName = false)
// Validate RollNo
rollNo = Number(rollNo)
isValidRollNo = !isNaN(rollNo) && 9999999 < rollNo
if (!isValidRollNo) {
console.warn({invalidRollNo: rollNo})
}
// Validate Name
const titleCasePat = /^[A-Z][a-z]+( [A-Z][a-z]+)*$/
name = String(name).trim()
isValidName = titleCasePat.test(name)
if (!isValidName) {
console.warn({invalidName: name})
}
if (isValidRollNo && isValidName) {
document.querySelector('#by')
.textContent = `By: ${name} (${rollNo})`
}
}
function saveCanvas() {
const link = document.createElement('a');
const {canvas, ctx, bb} = getCanvas(canvasSel)
link.download = `${rollNo}-${slug(document.title)}-canvas.png`;
link.href = canvas.toDataURL()
link.click();
}
function saveRefimg() {
console.warn({saveRefimg: 'Not Implemented.'})
}
function saveVisible() {
return saveFunctions[visible]()
}
function flipVisible(name) {
if (name != visible) {
// Swap
[visible, invisible] = [invisible, visible]
}
document.querySelector(sels[visible])
.classList.remove('hidden')
document.querySelector(sels[invisible])
.classList.add('hidden')
document.querySelector('#switchButtonIcon')
.name = icons[invisible]
document.querySelector('#switchButtonText')
.textContent = `Show ${invisible}`
}
function setupRefimg({rollNo}) {
document.querySelector(refimgSel)
.src = `./assets/${rollNo}-${slug(document.title)}-refimg.png`
}