taraskevizer
Version:
Канвэртацыя акадэмічнага правапісу ў клясычны
83 lines (82 loc) • 3.14 kB
JavaScript
import { gobj } from './dict/index.js';
const applyG = (el) => {
el.textContent = gobj[el.textContent];
};
export const createInteractiveTags = ({ variable, letterH } = {
variable: 'tarL',
letterH: 'tarH',
}) => {
const changeList = [];
variable = variable.toUpperCase();
letterH = letterH.toUpperCase();
return {
update: (root) => {
const elems = root.querySelectorAll(`${letterH}, ${variable}`);
if (changeList.length > elems.length) {
changeList.length = elems.length;
}
else {
while (changeList.length < elems.length) {
changeList.push(0);
}
}
for (let i = 0; i < changeList.length; i++) {
const el = elems[i];
el.seqNum = i;
if (changeList[i]) {
switch (el.tagName) {
case letterH:
{
applyG(el);
}
break;
case variable: {
let data = el.dataset.l;
if (data.includes(',')) {
const dataArr = data.split(',');
data = el.innerHTML;
for (let j = 0; j < changeList[i]; ++j) {
dataArr.push(data);
data = dataArr.shift();
}
el.dataset.l = dataArr.join(',');
}
else {
el.dataset.l = el.innerHTML;
}
el.innerHTML = data;
}
}
}
}
},
tryAlternate: (el) => {
if ('seqNum' in el) {
switch (el.tagName) {
case letterH:
{
changeList[el.seqNum] = changeList[el.seqNum] ? 0 : 1;
applyG(el);
}
break;
case variable: {
let data = el.dataset.l;
if (data.includes(',')) {
const dataArr = data.split(',');
dataArr.push(el.innerHTML);
data = dataArr.shift();
changeList[el.seqNum] =
(changeList[el.seqNum] + 1) % (dataArr.length + 1);
el.dataset.l = dataArr.join(',');
}
else {
changeList[el.seqNum] = changeList[el.seqNum] ? 0 : 1;
el.dataset.l = el.innerHTML;
}
el.innerHTML = data;
}
}
}
},
};
};