course: bo-logic, bo-table

This commit is contained in:
2025-12-28 20:15:15 +03:00
parent 1798c69564
commit d7716c6f94
21 changed files with 678 additions and 306 deletions

View File

@ -5,6 +5,7 @@ function addPageNumbers() {
let div = document.createElement('div')
div.classList.add('page-number')
div.textContent = i
pages[i - 1].id = 'page-' + i
pages[i - 1].appendChild(div)
}
}
@ -17,7 +18,7 @@ function addTableOfContents() {
let prefix_counter = [0, 0, 0]
let page_counter = 2
let page
let page = document.querySelector('section')
for (const h of hs) {
let level = {
@ -38,16 +39,19 @@ function addTableOfContents() {
let li = document.createElement('li')
let name = document.createElement('span')
let page_number = document.createElement('span')
let page_number = document.createElement('a')
name.innerHTML = prefix + ' - ' + h.innerHTML
h.innerHTML = name.innerHTML
let cur_page = h.closest('section')
if (page != cur_page) {
page = cur_page
page_counter++
while (page && page != cur_page) {
page = page.nextElementSibling
if (page.tagName == 'SECTION') {
page_counter++
}
}
page_number.href = '#page-' + page_counter
page_number.innerHTML = page_counter
li.append(name, page_number)
@ -84,18 +88,22 @@ function addCaptions() {
'IMG': obj.alt,
'TABLE': obj.dataset.alt,
}[obj.tagName]
if (obj.dataset.tag) {
counter_by_tag[obj.dataset.tag] = obj_counter[obj.tagName]
}
let div = document.createElement('div')
div.classList.add(...({
'IMG': ['col'],
'IMG': ['col', 'y-center'],
'TABLE': ['colr', 'y-start'],
})[obj.tagName])
div.style.cssText = obj.style.cssText
obj.style.cssText = 'width: 100%'
if (obj.dataset.style) {
obj.style = obj.dataset.style
} else {
obj.style.cssText = 'width: 100%'
}
let prev = obj.previousSibling
obj.remove()
@ -105,7 +113,6 @@ function addCaptions() {
}
const refs = document.querySelectorAll('span[data-ref]')
console.log(refs)
for (const ref of refs) {
ref.innerHTML = counter_by_tag[ref.dataset.ref] ?? 'без номера'
@ -146,8 +153,8 @@ function genTables() {
break
case '$':
const args_end = gen.indexOf('$', i+1)
const args = gen.slice(i+1, args_end).split(',')
const args_end = gen.indexOf('$', i + 1)
const args = gen.slice(i + 1, args_end).split(',')
switch (args[0]) {
case 'C':
dot.colSpan = +args[1]
@ -181,8 +188,19 @@ function genMathML() {
TeXZilla.filterElement(math)
}
function handleQueryParams() {
const params = new URLSearchParams(location.search)
if (params.has('printable')) {
const pages = document.querySelectorAll('section.landscape')
for (const page of pages) {
page.style.transform = 'rotate(90deg)'
}
}
}
addTableOfContents()
addPageNumbers()
addCaptions()
genTables()
genMathML()
handleQueryParams()