about summary refs log tree commit diff stats
path: root/src/html/dom.nim
Commit message (Collapse)AuthorAgeFilesLines
* catom: merge TagType with AttrTypebptato2024-03-041-26/+26
| | | | | it's inefficient and pointless to treat them differently, so just derive a new enum from TagType with a macro
* dom: use relList for stylesheet checksbptato2024-03-041-10/+16
|
* dom: misc fixesbptato2024-03-041-2/+28
| | | | | | | | * parse XHR URL with document base URL * allow setting XHR responseType * add tagName, nodeName * make hasChildNodes a function * fix horribly broken insertNode
* env: add window.screenbptato2024-03-021-0/+4
|
* dom: fix canvas element crashbptato2024-03-011-2/+3
|
* dom: fix non-stylesheets being downloaded as stylesheetsbptato2024-02-271-0/+2
|
* term: improve pixels-per-column/line detectionbptato2024-02-251-1/+1
| | | | | | | | | Some terminal emulators (AKA vte) refuse to set ws_xpixel and ws_ypixel in the TIOCGWINSZ ioctl, so we now query for CSI 14 t as well. (Also CSI 18 t for good measure, just in case we can't ioctl for some reason.) Also added some fallback (optionally forced) config values for width, height, ppc, and ppl. (This is especially useful in dump mode.)
* Separate ANSI text decoding from main binarybptato2024-02-251-10/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Handling text/plain as ANSI colored text was problematic for two reasons: * You couldn't actually look at the real source of HTML pages or text files that used ANSI colors in the source. In general, I only want ANSI colors when piping something into my pager, not when viewing any random file. * More importantly, it introduced a separate rendering mode for plaintext documents, which resulted in the problem that only some buffers had DOMs. This made it impossible to add functionality that would operate on the buffer's DOM, to e.g. implement w3m's MARK_URL. Also, it locked us into the horribly inefficient line-based rendering model of entire documents. Now we solve the problem in two separate parts: * text/x-ansi is used automatically for documents received through stdin. A text/x-ansi handler ansi2html converts ANSI formatting to HTML. text/x-ansi is also used for .ans, .asc file extensions. * text/plain is a separate input mode in buffer, which places all text in a single <plaintext> tag. Crucially, this does not invoke the HTML parser; that would eat NUL characters, which we should avoid. One blind spot still remains: copiousoutput used to display ANSI colors, and now it doesn't. To solve this, users can put the x-ansioutput extension field to their mailcap entries, which behaves like x-htmloutput except it first pipes the output into ansi2html.
* dom: use AttrType in DOMTokenList supportsbptato2024-02-241-5/+3
|
* dom: check rel attribute for link tags before downloadbptato2024-02-241-1/+1
|
* Allow non-RGB colors in CSSbptato2024-02-241-2/+8
| | | | | | | | | | | The -cha-ansi color type now sets ANSI colors in CSS. Also, color correction etc. has been improved a bit: * don't completely reset output state in processFormat for new colors * defaultColor is now separated from ANSI color type 0 * bright ANSI colors are no longer replaced with bold + dark variant * replaced ANSI color map to match xterm defaults
* dom: add onload content attribute to bodybptato2024-02-241-5/+22
|
* dom: print parse errors to consolebptato2024-02-241-7/+8
| | | | instead of trying to evaluate exceptions...
* buffer: improve cancel, use _exit, misc cleanupsbptato2024-02-231-3/+3
| | | | | | * cancel resources on cancel() call * call _exit in signal handler (also in loader) * misc cleanups
* Replace Chakasu with Chagashibptato2024-02-221-15/+10
| | | | | | The API is horrid :( but at least it copies less. TODO: think of a better API.
* dom: fix href stringifierbptato2024-02-151-0/+2
| | | | Return the empty string if it's unset.
* buffer: improve style invalidationbptato2024-02-141-1/+1
|
* buffer: more form fixesbptato2024-02-131-1/+1
|
* Add pager.externFilterSourcebptato2024-02-121-1/+1
| | | | useful for filtering stuff through commands like rdrview
* buffer: load external resources when they are attachedbptato2024-02-081-21/+123
| | | | | We no longer have to wait for the entire document to be loaded to start loading CSS.
* dom: reduce todosbptato2024-02-081-10/+20
| | | | | * enumize insertAdjacentHTML position * un-extern attrs
* dom: enumize attribute namesbptato2024-02-081-145/+170
|
* dom: atomize id, name, DOMTokenListbptato2024-02-081-36/+72
|
* dom: reduce tagType usebptato2024-02-081-55/+38
| | | | | tagType is now a function call, but usually it's enough to just test for the object type.
* Fix some document.write bugsbptato2024-02-071-1/+13
|
* Incremental renderingbptato2024-02-071-2/+7
| | | | | | | | | | | | Yay! Admittedly, it is not very useful in its current form, except maybe on very slow networks. The problem is that renderDocument is *slow*, so we only run it when onload fails to consume all bytes from the network in a single pass. Even then, we are guaranteed to get a FOUC, since CSS is only downloaded in finishLoad(). Well, I think it's cool, anyway.
* Update chamebptato2024-02-071-390/+632
| | | | | | | | * Update chame to the latest version * Get rid of nodeType usage * Add atoms * Re-implement DOM attributes * document.write
* Fix form action when submitter has a "form" attrbptato2024-01-191-17/+26
| | | | | | | * Unify form variable for all form-associated elements * Fix broken form association logic in resetFormOwner * Use form action for all form-associated submitters * Remove unused getElementsByTag + de-extern some functions
* dom: fix innerHTML tag name regressionbptato2024-01-171-2/+8
|
* dom: fix invalid object conversion defectbptato2024-01-171-1/+1
|
* dom: standard-compliant innerHTML/outerHTMLbptato2024-01-121-5/+67
| | | | | | | | It's still not perfect, but at least now we do not apply non-standard whitespace changes. The stringifier is left as it is since it's more useful for debugging this way.
* Fix some casing issuesbptato2024-01-061-3/+5
|
* Compile with styleCheck:usagesbptato2023-12-281-6/+6
| | | | much better
* dom: export import maps allowedbptato2023-12-251-1/+1
| | | | whoops
* dom: use JS_EvalFunction; add module fetching stubsbptato2023-12-251-48/+82
| | | | (still no module support in buffer...)
* Fix warnings on Nim 2.0.2bptato2023-12-241-1/+2
| | | | | | | | One is a false-positive (in dom). The other one in pager is something I hadn't noticed before, that's nice. For now I want to avoid making a change that may break things, so I just removed the dead code.
* dom: use std/ in importsbptato2023-12-221-8/+8
|
* dom: simplify fetch classic scriptbptato2023-12-221-22/+21
|
* html/dom: do not submit implicitly if there is a submit buttonbptato2023-12-181-8/+10
| | | | | | | | | | | | | | | | See e.g. the sr.ht issue tracker, now forever tainted by the tickets I accidentally submitted :P Chawan will gladly autosubmit without the user having written anything in the textbox just by writing some text in the title. The problem is that graphical web browsers typically have a "submit" keybinding (enter), and a "next field" keybinding (tab). The implicit submission mechanism was created with graphical browsers in mind; like w3m, Chawan only has an "ok" keybinding, which may or may not also mean "submit". With this solution, only forms that could not otherwise be submitted will autosubmit.
* break up twtstr somewhatbptato2023-12-131-0/+1
| | | | | Avoid computing e.g. charwidth data for http which does not need it at all.
* dom: fix relList setter regression, remove rel()bptato2023-12-021-5/+14
|
* dom: redefine Node.contains to match standardbptato2023-12-011-4/+6
| | | | (and expose it as a JS function)
* dom: functionize parentElement, improve Node.documentbptato2023-12-011-7/+7
| | | | | | * parentElement is now just a function. * Remove TODO from node.document; it is useful and not going anywhere. * Check for Nim type in Node.document, not nodeType
* dom: fix `children' being available for all Nodesbptato2023-12-011-6/+17
| | | | It is only defined for Document, Element, DocumentFragment.
* html: add HTMLElement.dataset (+ some twtstr cleanup)bptato2023-12-011-15/+63
|
* dom: add document.readyStatebptato2023-11-271-0/+6
|
* dom: expose HTMLInputElement.checkedbptato2023-11-241-1/+1
|
* env: stub out window.getComputedStyle()bptato2023-11-211-1/+1
| | | | not a real implementation, just to reduce exceptions
* dom: add baseURI, insertAdjacentHTMLbptato2023-11-201-0/+35
|
* twtstr: remove tolower, isWhitespacebptato2023-11-201-1/+1
| | | | | | | | * tolower: strutils toLowerAscii is good enough for the cases where we need it. Also, it's easy to confuse with unicode toLower and vice versa. * isWhitespace: in AsciiWhitespace is more idiomatic. Also has a naming collision with unicode toLower.