about summary refs log tree commit diff stats
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
...
* CHA_CONFIG_DIR -> CHA_DIRbptato2024-12-273-4/+9
| | | | | | | It isn't really limited to config. It just happens to be in XDG_CONFIG_HOME because XDG basedirs suck. (W3M_DIR works similarly.)
* dom: add focus()bptato2024-12-273-2/+10
| | | | Respects autofocus.
* Update monouchabptato2024-12-261-1/+1
|
* layout: improve intrinsic minimum size calculationbptato2024-12-261-83/+104
| | | | | It's a fair bit more accurate now on flex-heavy pages. Image sizing remains a broken mess.
* jsencoding: fix nil deref on empty encode inputbptato2024-12-261-9/+9
|
* term: fix display-charset not being interpretedbptato2024-12-261-5/+5
| | | | Also fixes the -O option.
* Optimize some Option[string] outbptato2024-12-265-25/+29
| | | | toJS is generally more efficient
* env: fix taintEnabledbptato2024-12-261-1/+1
| | | | it should have been a function
* buffer: add "app" scripting modebptato2024-12-267-44/+80
| | | | | | | | | | For APIs that cannot be implemented in a privacy-friendly manner. As a start, I've added accurate screen size queries; getComputedStyle, getBoundingClientRect, etc. should follow. (We have a harmless getComputedStyle already, but it's broken.) Probably, things like JS-based scroll belong in here too, but I'm not sure yet. (Perhaps autofocus should be reused instead?)
* env: reflect user agent header in userAgentbptato2024-12-264-6/+10
|
* Strict def fixesbptato2024-12-221-2/+2
|
* main: add missing noreturnbptato2024-12-221-1/+1
|
* history: fix entry droppingbptato2024-12-221-0/+2
| | | | | next's pointer backwards must be updated too, or it the dropped ref will be erroneously displayed on the history screen.
* dom: optimize textContent, nodeValue; add nodeValue setterbptato2024-12-221-16/+31
|
* config: fix overriding substring bindingsbptato2024-12-222-10/+6
| | | | | | | | | | | | | | | | | It is unfortunately a breaking change, but the existing behavior was practically broken anyway. The only issue I can think of is that keybindings like `yy' now override `y', which previously worked because y (regrettably) calls feedNext. But those should be added to the default config anyway. (If a user really desires the old behavior, they can just re-bind y to cmd.buffer.copySelection after their own custom bindings. Config values are now stored in an ordered table, so this should work.) I've left the undocumented JS setter as it is, because the old behavior seems more useful there. (Perhaps there should be a separate function that behaves like toml?)
* Misc character display fixesbptato2024-12-2210-67/+35
| | | | | | | | | | | | | | | | | | * fix luwrap comparison function * strip high unicode controls in term/pager * use wcwidth in dirlist2html * remove combining category from strwidth * remove unused "disallowed" field from lineedit My initial goal with switching to wcwidth in dirlist2html was just to get rid of the outdated combining map in charwidth_gen. Then I realized that layout will normalize those out anyway, so we don't actually have to deal with them anywhere. Also, I found a few bugs in the process; high unicode control chars not being stripped out was a particularly bad one, as it allows for pages to mess up the terminal output. (Easiest way to replicate: just open a random binary file without this patch.)
* Add historybptato2024-12-177-46/+211
| | | | | It's still missing a "color visited links" feature, but it's better than nothing.
* twtstr: improve content type parameter handlingbptato2024-12-221-3/+28
| | | | | * accept quoted-string * quote values in setContentTypeAttr
* layout: resolve percentage width for auto table cellsbptato2024-12-211-9/+14
| | | | | It is still wrong in case the table is too small, but at least it fixes the regression from 0971ad85.
* cascade: actually, it should be inline-blockbptato2024-12-201-1/+1
| | | | what was I expecting
* cascade: blockify on position: absolute or fixedbptato2024-12-201-4/+4
| | | | | | | | | | | | | | Welp, turns out I was overthinking it. CSS does not support inline position: absolute at all, it just blockifies. That does leave us with the question of "why does inline-block behave differently than block?" Especially because both in Gecko and Blink, getComputedStyle for absolute inline-blocks gives me "block", not "inline-block", and yet there is the same difference in rendering when I change the CSS. I first thought it's a quirks mode issue, but standards mode doesn't affect it. Wat.
* box: InlineFragment -> InlineBoxbptato2024-12-204-150/+147
| | | | | | It was named "fragment" mainly because I added it back when there was still a separate InlineBox type and I needed another name. Now InlineBox is gone, and I'm tired of typing fragment.
* cssparser: small refactoringbptato2024-12-201-37/+23
| | | | | | | * isValidEscape was fairly pointless, and occasionally used incorrectly. * "starts with an ident sequence" is normally called on the next 3 codepoints; on the one occasion where it isn't, just hardcode the dash case.
* buffer: only set new buffer's target on clonebptato2024-12-203-8/+10
|
* nanosvg, myaddr: fix obuf type and myaddr shimbptato2024-12-201-2/+2
| | | | | | | this is exactly why I shimmed in unsafeAddr, but the compiler isn't cooperating... :( well, it seems to work with auto.
* layout, render: image sizing fixes/workaroundsbptato2024-12-202-12/+16
| | | | | | | | * fix clip for image * switch back img's display to inline * fix image width calculation without specified width/height I'm not 100% sure if this is correct, but it certainly looks better.
* dom: add inline SVG supportbptato2024-12-205-88/+204
|
* response: automatically resume before closebptato2024-12-193-9/+4
| | | | doing it manually is too error prone
* pager: fix short error messages not being printedbptato2024-12-191-1/+1
|
* cookie: fix another regressionbptato2024-12-191-1/+1
| | | | did I ever test this?
* cookie: fix regression in cookieJar.addbptato2024-12-191-1/+5
|
* layout: apply padding to intrinsic minimum widthbptato2024-12-191-4/+3
|
* pager: fix crash on gotoURL with save + mailcapbptato2024-12-191-1/+2
| | | | this broke saveImage
* pager: do not crash browser when deleting a crashed bufferbptato2024-12-181-1/+5
|
* layout, render: implement overflow propertybptato2024-12-184-106/+201
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Overflow pretty much requires scrollbars, but those wouldn't work in dump mode, plus of course they would be a pain to implement. So as a simple alternative: * overflow: hidden, clip works as per spec. * overflow: auto, overlay, scroll invert the intrinsic minimum size clamping logic instead of adding a scrollbar. What this concretely means, is that this <pre style="overflow: scroll; height: 1em"> test test test </pre> will, instead of creating a scroll container, just override the specified height. This hack works surprisingly well, because CSS pretty much requires setting height on scroll containers, so authors aren't incentivized to set height on the parent container too (because the contents are already sized appropriately). One issue left is how to deal with overflow: hidden ancestors. For now, I've made it so that it can spill for overflow-x, and always clips on overflow-y, because it's much less likely to bleed into other text horizontally than vertically. But there is definitely room for improvement, e.g. we could track space requested by scrolling children and expand parent boxes based on that.
* pager, select: hide menu if right click ends outsidebptato2024-12-182-45/+60
| | | | | | | | Inspired by Dillo. (Just the movement mechanism; Dillo doesn't hide the context menu on double click, but we still do.) Also, we now disable highlighting of menu items when the mouse is hovering outside.
* match: fix nested hover selectorbptato2024-12-181-1/+2
| | | | | | | I didn't get it right :( true is the default return value, and true + continue should resolve to false.
* match: optimize dependency trackingbptato2024-12-172-39/+78
| | | | | | | | | | | | | | | | | | | This is a bit tricky, but it seems to work. It optimizes selectors in the line of "div :hover" (note the space.) Previously such selectors would add a hover dependency to pretty much every element, and trigger a re-style for all elements that changed their hover status. After this patch, when :hover and friends would return false, they first try to match the element *without* pseudo selectors, and only add their dependencies if the element would match like that. (Notably, it only does this for when :hover is false. Probably it would help somewhat if we checked for the opposite with true too, but I'm not sure how much. For now, I'll keep it like this, and maybe try to further optimize it later.)
* css: add :target pseudo classbptato2024-12-174-1/+24
|
* cookie: small bugfix, misc refactoringbptato2024-12-172-30/+25
| | | | | Always override Expires with Max-Age, but never the other way (as per spec.)
* match: refactor a bitbptato2024-12-172-63/+47
| | | | | Now we use the node index to optimize next/subsequent sibling combinators.
* dom, match: optimize :nth-child, :nth-last-childbptato2024-12-173-41/+75
| | | | | | I want to use it in the UA sheet, so the loop won't cut it. (Also fix a parsing bug that prevented "of" from working.)
* default(T) -> T.default, add some strict defsbptato2024-12-1715-33/+34
|
* pager: try to always display the error messagebptato2024-12-171-1/+11
| | | | | Whether this works or not still depends on many variables, but it should be enough in most cases.
* layout: propagate intrinsic minimum heightbptato2024-12-172-126/+154
| | | | | | | | | | | | Necessary for flex. Previously we just used the actual height, but that didn't account for boxes that size themselves depending on the available height (mainly just images for now). This also irons out intrinsic min width calculation somewhat, squashing several bugs. I hope it works well. It is a significant change in size calculation, so maybe there are still new bugs lurking.
* css: resolve units to px before layoutbptato2024-12-168-228/+237
| | | | Lets us skip a couple pointless multiplications/divisions during layout.
* layout: do not allow canpx for scFitContentbptato2024-12-151-2/+2
| | | | | The test case attached is undefined in CSS 2.1, but css-sizing-3 wants us to just ignore the width property (I think).
* layout: also propagate xminwidth from table captionbptato2024-12-151-0/+1
| | | | | | | this is necessary too, now that I think of it (well, table caption sizing is still half-broken, but that's a problem for another day...)
* layout: set table intrinsic min width to specified widthbptato2024-12-151-0/+3
|
* layout: do not trust specified table cell heightbptato2024-12-151-3/+4
| | | | | If the contents are larger than the specified cell height, then it is simply ignored.