2024-07-08 11:07:38 +03:00
|
|
|
/// Division with fast fraction truncating
|
|
|
|
function intDiv(a, b) {
|
|
|
|
return ~~(a / b)
|
|
|
|
}
|
|
|
|
|
2024-07-06 10:36:07 +03:00
|
|
|
addEventListener('DOMContentLoaded', () => {
|
|
|
|
const canvas = document.getElementById("canvas")
|
|
|
|
const ctx = canvas.getContext("2d")
|
|
|
|
ctx.fillStyle = "black"
|
|
|
|
|
|
|
|
const options = {
|
|
|
|
mask: document.getElementById("mask-expr"),
|
|
|
|
size: document.getElementById("width"),
|
|
|
|
ver: document.getElementById("version"),
|
2024-07-06 10:42:26 +03:00
|
|
|
scale: document.getElementById("scale"),
|
2024-07-06 10:36:07 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
document.getElementById("gen-btn").addEventListener("click", () => {
|
|
|
|
const mask = options.mask.value
|
|
|
|
const size = options.size.value
|
2024-07-06 10:42:26 +03:00
|
|
|
const scale = options.scale.value
|
2024-07-06 10:36:07 +03:00
|
|
|
|
|
|
|
canvas.width = canvas.height = size * scale
|
|
|
|
|
2024-07-06 10:40:44 +03:00
|
|
|
ctx.clearRect(0, 0, canvas.width, canvas.height)
|
|
|
|
|
2024-07-06 10:36:07 +03:00
|
|
|
for (let row = 0; row < size; row++) {
|
|
|
|
for (let col = 0; col < size; col++) {
|
|
|
|
if (eval(mask) == 0) {
|
|
|
|
ctx.fillRect(col * scale, row * scale, scale, scale)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
{ // Choose best scale for screen height
|
|
|
|
const height = document.documentElement.clientHeight;
|
|
|
|
const padding = getComputedStyle(document.body).paddingTop;
|
|
|
|
// TODO
|
|
|
|
}
|
|
|
|
|
|
|
|
{ // QR version related stuff
|
|
|
|
const MICRO_4 = 17 // size for version M4, before version 1
|
|
|
|
const DIFF = 4 // difference between versions
|
|
|
|
const MIN_VER = 1
|
|
|
|
const MAX_VER = 40
|
|
|
|
|
|
|
|
const getCodeVersion = () => {
|
|
|
|
const size = options.size.value
|
|
|
|
return Math.floor((size - MICRO_4) / DIFF)
|
|
|
|
}
|
|
|
|
|
|
|
|
const updateSizeVersion = (versionStep) => {
|
|
|
|
const ver = getCodeVersion() + versionStep
|
|
|
|
if (ver > MAX_VER || ver < MIN_VER) {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
options.size.value = ver * DIFF + MICRO_4
|
|
|
|
options.ver.innerText = ver
|
|
|
|
}
|
|
|
|
|
|
|
|
document.getElementById("width-incr").addEventListener("click", () => {
|
|
|
|
updateSizeVersion(+1)
|
|
|
|
})
|
|
|
|
|
|
|
|
document.getElementById("width-decr").addEventListener("click", () => {
|
|
|
|
updateSizeVersion(-1)
|
|
|
|
})
|
|
|
|
|
|
|
|
options.size.addEventListener("input", () => {
|
|
|
|
options.ver.innerText = getCodeVersion()
|
|
|
|
})
|
|
|
|
}
|
|
|
|
})
|