mirror of
https://github.com/NaitLee/Cat-Printer.git
synced 2025-05-16 07:10:30 -07:00
add some checks to int_to_bytes
; use const
in accessibility.js
This commit is contained in:
parent
2ff61f7b8d
commit
e976b0d6e6
@ -46,6 +46,13 @@ def reverse_bits(i: int):
|
|||||||
return ((i & 0b11110000) >> 4) | ((i & 0b00001111) << 4)
|
return ((i & 0b11110000) >> 4) | ((i & 0b00001111) << 4)
|
||||||
|
|
||||||
def int_to_bytes(i: int, length=1, big_endian=False) -> bytes:
|
def int_to_bytes(i: int, length=1, big_endian=False) -> bytes:
|
||||||
|
max_value = (1 << (length * 8)) - 1
|
||||||
|
if type(i) is not int:
|
||||||
|
raise f'int_to_bytes: not int: {i}'
|
||||||
|
if i < 0:
|
||||||
|
raise f'int_to_bytes: {i} < 0'
|
||||||
|
if i > max_value:
|
||||||
|
raise f'int_to_bytes: {i} > {max_value}'
|
||||||
b = bytearray(length)
|
b = bytearray(length)
|
||||||
p = 0
|
p = 0
|
||||||
while i != 0:
|
while i != 0:
|
||||||
|
@ -7,11 +7,11 @@ License CC0-1.0-only: https://directory.fsf.org/wiki/License:CC0
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
function isHidden(element) {
|
function isHidden(element) {
|
||||||
let parents = [element];
|
const parents = [element];
|
||||||
while (parents[0].parentElement)
|
while (parents[0].parentElement)
|
||||||
parents.unshift(parents[0].parentElement);
|
parents.unshift(parents[0].parentElement);
|
||||||
return parents.some(e => {
|
return parents.some(e => {
|
||||||
let rect = e.getBoundingClientRect();
|
const rect = e.getBoundingClientRect();
|
||||||
return (
|
return (
|
||||||
e.classList.contains('hidden') ||
|
e.classList.contains('hidden') ||
|
||||||
e.classList.contains('hard-hidden') ||
|
e.classList.contains('hard-hidden') ||
|
||||||
@ -65,11 +65,11 @@ function initKeyboardShortcuts() {
|
|||||||
inputs = Array.from(document.querySelectorAll('*[data-key]'));
|
inputs = Array.from(document.querySelectorAll('*[data-key]'));
|
||||||
else inputs = Array.from(document.querySelectorAll('#dialog *[data-key]'));
|
else inputs = Array.from(document.querySelectorAll('#dialog *[data-key]'));
|
||||||
/** @type {{ [key: string]: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement }} */
|
/** @type {{ [key: string]: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement }} */
|
||||||
let keys2 = keys.split('');
|
const keys2 = keys.split('');
|
||||||
shortcuts = {};
|
shortcuts = {};
|
||||||
if (focusing) shortcuts = { 'ESC': focus };
|
if (focusing) shortcuts = { 'ESC': focus };
|
||||||
else
|
else
|
||||||
for (let input of inputs) {
|
for (const input of inputs) {
|
||||||
if (isHidden(input)) continue;
|
if (isHidden(input)) continue;
|
||||||
key = input.getAttribute('data-key');
|
key = input.getAttribute('data-key');
|
||||||
if ((index = keys2.indexOf(key)) !== -1) keys2.splice(index, 1);
|
if ((index = keys2.indexOf(key)) !== -1) keys2.splice(index, 1);
|
||||||
@ -78,15 +78,15 @@ function initKeyboardShortcuts() {
|
|||||||
}
|
}
|
||||||
// Array.from(layer.children).forEach(e => e.remove());
|
// Array.from(layer.children).forEach(e => e.remove());
|
||||||
for (let i = layer.children.length; i <= inputs.length; i++) {
|
for (let i = layer.children.length; i <= inputs.length; i++) {
|
||||||
let span = document.createElement('span');
|
const span = document.createElement('span');
|
||||||
layer.appendChild(span);
|
layer.appendChild(span);
|
||||||
}
|
}
|
||||||
index = 0;
|
index = 0;
|
||||||
for (key in shortcuts) {
|
for (key in shortcuts) {
|
||||||
let span = layer.children[index++];
|
const span = layer.children[index++];
|
||||||
let input = shortcuts[key];
|
const input = shortcuts[key];
|
||||||
let position = input.getBoundingClientRect();
|
const position = input.getBoundingClientRect();
|
||||||
let text = i18n(keyToLetter(key.toUpperCase()));
|
const text = i18n(keyToLetter(key.toUpperCase()));
|
||||||
if (span.innerText !== text) span.innerText = text;
|
if (span.innerText !== text) span.innerText = text;
|
||||||
span.style.top = (position.y || position.top) + 'px';
|
span.style.top = (position.y || position.top) + 'px';
|
||||||
span.style.left = (position.x || position.left) + 'px';
|
span.style.left = (position.x || position.left) + 'px';
|
||||||
@ -99,7 +99,7 @@ function initKeyboardShortcuts() {
|
|||||||
const start = () => setInterval(mark_keys, 1000);
|
const start = () => setInterval(mark_keys, 1000);
|
||||||
const types_to_click = ['submit', 'file', 'checkbox', 'radio', 'A'];
|
const types_to_click = ['submit', 'file', 'checkbox', 'radio', 'A'];
|
||||||
document.body.addEventListener('keyup', (event) => {
|
document.body.addEventListener('keyup', (event) => {
|
||||||
let key = event.key || keyFromCode(event.keyCode);
|
const key = event.key || keyFromCode(event.keyCode);
|
||||||
if (!started) {
|
if (!started) {
|
||||||
if (key !== 'Tab') return;
|
if (key !== 'Tab') return;
|
||||||
mark_keys();
|
mark_keys();
|
||||||
@ -107,7 +107,7 @@ function initKeyboardShortcuts() {
|
|||||||
started = true;
|
started = true;
|
||||||
}
|
}
|
||||||
requestAnimationFrame(mark_keys)
|
requestAnimationFrame(mark_keys)
|
||||||
let input = shortcuts[key];
|
const input = shortcuts[key];
|
||||||
if (input) {
|
if (input) {
|
||||||
if (types_to_click.includes(input.type || input.tagName))
|
if (types_to_click.includes(input.type || input.tagName))
|
||||||
input.dispatchEvent(new MouseEvent(event.shiftKey ? 'contextmenu' : 'click'));
|
input.dispatchEvent(new MouseEvent(event.shiftKey ? 'contextmenu' : 'click'));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user