aboutsummaryrefslogtreecommitdiff
path: root/webAO/viewport
AgeCommit message (Collapse)Author
5 daysRemove toLowerCase manglingOsmium Sorcerer
For whatever reason, WebAO decides to normalize almost every string component in URLs, packets, and INI files to lower case. First, the glaring issue. In the URLs, this handling of paths is utterly broken and corrupts data. By mangling characters, you change the resource identity and break valid URLs. According to section 6.2.2.1 of RFC 3986 (Case Normalization): > When a URI uses components of the generic syntax, the component syntax > equivalence rules always apply; namely, that the scheme and host are > case-insensitive and therefore should be normalized to lowercase. For > example, the URI <HTTP://www.EXAMPLE.com/> is equivalent to > <http://www.example.com/>. The other generic syntax components are > assumed to be case-sensitive unless specifically defined otherwise by > the scheme (see Section 6.2.3) Scheme and host _are_ case-insensitive. Path is _not_, so isn't everything else. Section 6.2.3 doesn't define any normalization for the path component in HTTP schemes. Thus, example.com/item and example.com/Item are two different resources. I can only think of idiotic conventions of a particular poorly designed file system when it comes to this absurdity. There's no reason to drag them around in our developments. For these systems, case doesn't matter anyway, normalization is their job, not server hosts' who end up having to either rewrite every URL request for every asset, or mangle their asset directory and then rewrite almost every INI config (and spam "showname=Name" everywhere because now your character directory has to be "name"). So, instead of using absurd ad-hoc solutions to a broken implementation such as forcing everything to lower case on the server side, this commit attempts to fix the root issue and make URL handling conformant to relevant standards. Similar situation with strings within packets, although not as severe in practice. Case must be preserved, otherwise it's corrupting data for no reason. If a normalization is needed, it should be done at the call site of whatever requires it (like a filtering function), not by the parser. As for the INI, it's opinionated. While the values absolutely must not be normalized, a case can be made for keys and section names: why not allow "Options", "options", or even "oPtiOnS"? It's more convenient, and corresponds to the platform quirk of Windows (which Qt unfortunately inherits in AO2 Client). I don't think there's a good reason to allow such leniency in parsing, and removing superfluous normalization is a better move: less data transformations, less ambiguity, more strictness. In practice, INIs tend to be well-formed, and it's good discipline to write them this way. In several places, the case-folding does make sense: callwords, OOC commands, CSS class names for areas, and character list filters. These will behave weirdly and inconveniently without it. In most places, however, it only causes unnecessary breakage.
2026-04-06Merge pull request #301 from AttorneyOnline/rendering-fixstonedDiscord
Fix IC rendering race conditions with asset preloading
2026-04-02Fix preanims not playing on blank postsDavid Skoland
The early return guard `textnow === chatmsg.content` was firing on the first tick for empty messages ("" === ""), short-circuiting the entire animation timeline before the preanim or shout phases could run. Now the guard also checks that both tick phases have completed before allowing the early exit. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02Fix speedlines bugDavid Skoland
2026-04-01Add asset preloading system for IC message renderingDavid Skoland
Fix rendering race conditions where character sprites, pre-animations, and paired character assets were displayed before being downloaded. All assets referenced in an MS packet are now resolved and preloaded into the browser cache before the animation timeline starts. - Add unified assetCache module with session-wide promise caching - Add preloadMessageAssets orchestrator for parallel asset resolution - Cache fileExists HEAD requests so missing files aren't re-probed - Preload all SFX (emote, shout, realization, stab) alongside sprites - Use synchronous setEmoteFromUrl at all render transition points - Graceful fallback to legacy setEmote if preloading times out Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-25Merge pull request #292 from AttorneyOnline/pausestonedDiscord
Pause
2026-02-07Catch rejected play() promises from browser autoplay policyDavid Skoland
Browsers reject .play() with a DOMException when the user hasn't interacted with the document yet. Add .catch(() => {}) to all 9 play() call sites to suppress the uncaught promise rejection. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-03digit offsetsstonedDiscord
2026-02-03pstonedDiscord
2026-01-01bring back objection sounds for chars that dont have their ownstonedDiscord
2026-01-01dont use opacitystonedDiscord
2026-01-01deal with this properlystonedDiscord
2026-01-01constantstonedDiscord
2025-10-25IC: treat empty preanim string as no preanimBumaire
When an emote is defined with empty preanimation string, such as
EmoteName##emote#, and a user selects "Preanim," WebAO tries to look up
a file with an empty name instead of disabling preanimation. This commit fixes this, matching AO2 client behavior and not requiring
character makers to put a magic "-" preanimation in char.ini.
2025-10-06move setbackgroundstonedDiscord
2025-10-03do not reload if there are not speedlinesstonedDiscord
2025-09-16temp bg fixstonedDiscord
2025-09-03also do bgsstonedDiscord
2025-09-03bgurlsstonedDiscord
2024-12-12get rid of sageTags in a few placesstonedDiscord
plan is to migrate to createTextNode
2024-11-20Prettified Code!stonedDiscord
2024-09-29Dont clear the text box if the message is an additiveCaleb Mabry
2023-11-29Use findImgSrc in setSideDavid Skoland
2023-11-29minor formattingDavid Skoland
2023-11-23Hide chatbox on blankpostsDavid Skoland
2023-11-23FormattingDavid Skoland
2023-11-22Fix "Empty messages don't play the preanimation"SymphonyVR
Fix for: Empty messages don't play the preanimation #191
2023-09-20remove musicvolumestonedDiscord
2023-09-20autoformat with eslintstonedDiscord
2023-09-20mostly whitespaces, please don't breakstonedDiscord
2023-08-15need spansstonedDiscord
2023-08-15forgot parsedstonedDiscord
2023-08-15spell out messages without markdown if it fails because the host is downstonedDiscord
2023-02-06move blips to blips folderstonedDiscord
2023-01-30the best colorstonedDiscord
2023-01-23handle blankposts that are only spacesstonedDiscord
2022-11-11more console spamstonedDiscord
2022-11-11console spamstonedDiscord
2022-09-11Finishing of refactorCaleb
2022-09-11Setting side moved outCaleb
2022-09-11Typechecking changeCaleb
2022-09-10Structured viewport a little differentlyCaleb