aboutsummaryrefslogtreecommitdiff
path: root/webAO/dom
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-03-28remove UI related changesDavid Skoland
2026-03-24signatureDavid Skoland
2026-03-24add comment explaining assumptionDavid Skoland
2026-03-24Add reconnect UI, disconnect button, and visual cleanupDavid Skoland
- Redesign disconnect overlay as a full-screen modal with dark backdrop - Add working Reconnect button that properly re-establishes WebSocket connection - Add Disconnect button in Settings for testing - Separate disconnect and ban/kick codepaths (no reconnect on ban) - Log disconnect notice in IC log using hrtext style - Refactor area list rendering from client state (renderAreaList) - Extract appendICNotice for reusable IC log notices - Clean up charselect: hide during loading, simplify toolbar layout - Freshen loading screen and charselect styling - Remove loading progress text updates (just show "Loading...") - Guard against undefined client.chars and client.serv Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11Clamp playerlist char icons to 60x60 pixelsDavid Skoland
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11Filter playerlist by area and remove Area columnDavid Skoland
Hide players not in the client's current area. Re-render playerlist on area switch. Remove the now-redundant Area column. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11Add area column to playerlistDavid Skoland
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10Use charName directly for playerlist rendering and add table stylingDavid Skoland
Render char icons and names from the character name string (PU type 1) instead of gating on charId lookup. Add header row and row separators to the playerlist table. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10Refactor playerlist to state-driven rendering with renderPlayerListDavid Skoland
handlePR and handlePU now only update client.playerlist state, and renderPlayerList handles all DOM rendering from that state. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07Prefetch char.ini for characters present in area via playerlistDavid Skoland
Store player data (charId, area) in an in-memory Map on the client, updated by PR/PU packet handlers. Use this to eagerly load char.ini when a player's character appears in our area or when switching areas, eliminating the lazy-load delay on first IC message. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2025-10-02use the file for previewsstonedDiscord
2025-09-03also do bgsstonedDiscord
2025-09-03bgurlsstonedDiscord
2025-06-26convert vol to tsstonedDiscord
2024-12-12Prettified Code!stonedDiscord
2024-12-12akashi expects 2 args for modcallsstonedDiscord
2024-11-20Prettified Code!stonedDiscord
2024-11-20Prettified Code!stonedDiscord
2024-08-31hide out of area playersstonedDiscord
2024-08-31playerlist fixesstonedDiscord
2024-08-12Merge pull request #225 from AttorneyOnline/playerliststonedDiscord
Playerlist
2024-08-08more off by onestonedDiscord
2024-08-08another off by onestonedDiscord
2024-08-07correct unitsstonedDiscord
2024-08-07add ban buttonstonedDiscord
2024-04-12name spacingstonedDiscord
2023-12-08rename callbackstonedDiscord
2023-12-08throw out googlestonedDiscord
2023-10-17Focus input box when emotion is pickedDavid Skoland
2023-09-20autoformat with eslintstonedDiscord
2023-09-20no more eslint errorsstonedDiscord
2023-09-20make eslint a lot happierstonedDiscord
2023-06-06fix clannad clockstonedDiscord
2023-04-25minor spelling mistakestonedDiscord
2023-04-25forgot importstonedDiscord
2023-04-25check for animated bgs in previewstonedDiscord
2023-01-23bring mute backstonedDiscord
2022-12-07remove chat from chatbox namesstonedDiscord
2022-11-22where did this bracket come fromstonedDiscord
2022-11-18fix iniedit input boxstonedDiscord
2022-11-17:spaghetti: :spaghetti: :spaghetti: :spaghetti: :spaghetti: :spaghetti: ↵stonedDiscord
:spaghetti:
2022-11-17copypasta :spaghetti:stonedDiscord
2022-11-17both ini dropdown and customstonedDiscord
2022-11-17rename to iniselectstonedDiscord
2022-11-13bring back iniedit dropdownstonedDiscord
2022-11-11more console spamstonedDiscord
2022-10-22whoops forgot args are a liststonedDiscord
2022-10-22this is much nicerstonedDiscord
2022-10-22show the dialogstonedDiscord