fix(zh-tw): clean up jsxref macro args#36169
Conversation
`{{jsxref("Object.prototype")}}` and similar refs were producing
broken links because no `Object/prototype` page exists; the class
page (`Object`, `Array`, etc.) documents `.prototype` directly.
Rewrite to link to the class page.
Preview URLs (51 pages)
Flaws (48)Note! 36 documents with no flaws that don't need to be listed. 🎉 Found an unexpected or unresolvable flaw? Please report it here. URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
External URLs (3)URL:
URL:
(comment last updated: 2026-05-26 01:10:09) |
The old `Operators/<Group>_Operators` slugs (Arithmetic, Bitwise, Comparison, Logical) and related obsolete leaves (`Destructuring_assignment`, `Legacy_generator_function`, `Logical_nullish_assignment`, `Nullish_coalescing_operator`, `Spread_operator`) redirect under the en-US slug graph but never reach the canonical pages cleanly. Rewrite the first arg to the current canonical sub-path.
The old slug redirects to `Operators#Assignment_operators`. Rewrite the macro to use the canonical `Operators` page; existing anchors on the call site are preserved (most calls already pointed at a specific assignment-operator section).
`Operators/Array_comprehensions`, `Operators/Generator_comprehensions`, `Operators/Expression_closures`, and `Statements/Legacy_generator_function` were removed from JavaScript. Rewrite the macro args to point at `Deprecated_and_obsolete_features`.
Cover the bare/legacy `Functions_and_function_scope` namespace (canonical: `Functions`).
…lass>` Intl member classes (`Collator`, `DateTimeFormat`, `NumberFormat`, `PluralRules`, etc.) live under `Global_Objects/Intl/`; the top-level `Global_Objects/<Class>` slug is only a redirect.
Rewrite arg1 for slugs that en-US redirects resolve cleanly: bare
`null`/`eval[()]`, `Global_Objects/null`, `Global_Objects/uneval`,
`Object.toSource[()]`, `Global_Objects/<X>/toSource`,
`Classes/Private_properties` → `Classes/Private_elements`,
`Functions_and_function_scope/{Strict_mode,arguments/length}` →
canonical, `Global_Objects/Array/group{,ToMap}` →
`Global_Objects/{Object,Map}/groupBy` (Array.group was moved to
Object.groupBy / Map.groupBy in the spec).
Strip the `Global_Objects/` prefix when safe — display arg2 is dropped only when it's the last positional arg and equals the post-strip default. Skips dotted-leaf suffixes and bare `eval`.
The macro strips `()` for URL resolution but keeps it in the default display, so arg2 is redundant when it only adds parens to arg1. Only drops arg2 when it's the last positional arg.
`{{jsxref("NumberFormat")}}` and friends resolve via redirect because
the canonical page lives under `Global_Objects/Intl/<Class>`. Rewrite
the bare and dotted forms to the canonical `Intl/<Class>` path. When
no explicit display arg is set, insert the original arg as the
display text so the rendered label keeps reflecting what the author
originally wrote.
WebAssembly was moved out of `Web/JavaScript/Reference/Global_Objects/` and now lives at `/WebAssembly/Reference/JavaScript_interface/`. The `jsxref` macro is scoped to JS Reference, so `WebAssembly.<X>` refs all surface as `templ-redirected-link`. Convert them to plain markdown links pointing at the canonical WebAssembly path. Display preservation: keep an explicit display arg when set; otherwise use the dotted `WebAssembly.<X>` form (with parens preserved when arg1 had them) so the rendered label is unchanged.
Mechanical edits not covered by the bulk sweeps: - Strip literal `%2E` URL-encoding in arg1 (`Operators/new%2Etarget`) so the macro produces the dotted slug. - `ArrayBufferView` is a Web IDL type, not a JS Reference page — swap `jsxref` for `domxref`.
Lowercase JS class names (`string`/`boolean`/`number`/`object`/ `promise`/`array`/`symbol`) → canonical capitalized form; `Operators/Conditional_Operator`/`Comma_Operator`/`Function`/ `Operator_Precedence`/`Property_Accessors` → lowercase suffix; method-name typos (`Date/valueof` → `valueOf`, `Map/foreach` → `forEach`, `object/defineProperty`/`defineProperties` → `Object/`); lowercase namespace slugs (`statements/`/`operators/`/`functions/`/ `classes`) → canonical capitalized; `Classes/Constructor` → lowercase `constructor`; `Regexp/` → `RegExp/`; `Intl/DatetimeFormat` → `DateTimeFormat`; `Statements/empty` → `Empty`; `Global_objects/` → `Global_Objects/`; `template_literals` → `Template_literals`; `Errors/Strict_Non_Simple_Params` casing. Also resolve the bare `function` ambiguous arg (matches both `Operators/function` and `Statements/function`) by picking the expression form — all observed call sites are callback parameters in WebAPI pages. Display preservation keeps the original (mis-cased) form rendered so the link text is unchanged.
Round 2 of the case-fix sweep covering the dotted variants the round-1 mapping missed: `Date.valueof` → `Date.valueOf`, `Map.foreach` → `Map.forEach`, `Regexp.<member>` → `RegExp.<member>` (for `global`/`ignoreCase`/`multiline`/`sticky`), `object.defineProperty`/ `defineProperties` → `Object.`, and `Operators/conditional_operator` (uppercase Operators, lowercase Conditional) → `Operators/Conditional_operator`.
… in case
Over-zealous display preservation inserted by the case-fix sweep:
`{{jsxref("Object", "object")}}` was meant to keep "object" rendered,
but for JS type references the canonical (capitalized) class name
should also be the rendered text. Drop the redundant arg2 when it
matches arg1 case-insensitively — covers `Object`/`String`/`Number`/
`Array`/`Boolean`/`Promise`/`Symbol`/`undefined` and any other
mis-cased pair caught by the index-aware rari.
Only drops arg2 when it's the last positional arg (same safety policy
as `merge-parens-display`).
…perator shorthands Use the bare-keyword shortform for the 5 operator keywords `null`, `this`, `delete`, `new`, `instanceof` per the convention introduced in mdn/content#44221. The shortform resolves cleanly on current rari thanks to the `Reference/<kw>` -> `Reference/Operators/<kw>` redirects that PR added, and resolves natively under the index-aware rari from mdn/rari#715. Only collapses the redundant-display pattern (`("Operators/X", "X")`); longforms with custom display text (`"delete x"`, `"deleted"`, `"x instanceof y"`) are preserved.
Mirrors the en-US redirects added in mdn/content#44221 for the 5 operator-keyword shorthands (`null`, `this`, `delete`, `new`, `instanceof`). Without these per-locale redirects, the bare-keyword `{{jsxref("null")}}` shortform produces a 404 under the deployed rari; with them, it falls back via redirect to the canonical `Reference/Operators/<kw>` page. The index-aware rari from mdn/rari#715 resolves the shortform directly without needing the redirect.
`Web/JavaScript/Reference/Operators/null` and `Operators/instanceof` are not translated in zh-tw, so the per-locale redirects can't point there and the bare shortforms would 404. Restore the longform for those two; `this`/`delete`/`new` keep the shortform.
jsxref macro args
Co-authored-by: A1lo <yin199909@aliyun.com>
Description
Clean up stale
jsxrefmacro arguments in Traditional Chinese content so they resolve against the en-US JS Reference index. Changes are scoped to the first argument ofjsxref()invocations; display text is preserved everywhere it was already explicit, and inserted as the original arg when missing so the rendered label keeps reflecting what the author originally wrote.18 commits, applied in order:
.prototypefrom class refs.Operators/Assignment_Operatorswith anchor.Functions/<leaf>localized slugs.Global_Objects/<IntlClass>[/X]toIntl/<IntlClass>[/X].Global_Objects/prefix when safe.("foo", "foo()")into("foo()").<IntlClass>refs. Display preservation.jsxrefrefs to markdown links.("Operators/<kw>", "<kw>")→("<kw>")for the 5 operator-keyword shortforms (null,this,delete,new,instanceof), per the convention introduced in mdn/content#44221.Reference/<kw>→Reference/Operators/<kw>redirects that back the shorthand calls under the deployed rari (3 of 5;Operators/nullandOperators/instanceofdon't exist in zh-tw).("Operators/null", "null")and("Operators/instanceof", "instanceof")calls — the target pages aren't translated in zh-tw, so the shorthands can't redirect to real pages.Motivation
These arguments produced broken or redirected links (
templ-broken-link/templ-redirected-link/templ-ill-cased-arg) in the upcoming Rari-based build. The new index-basedjsxrefresolver is being introduced in mdn/rari#715; this PR ensures the Traditional Chinese content resolves cleanly against both the deployed rari and the index-aware version.Additional details
main).rari@jsxref-with-index— only intentional-broken residuals remain (SIMD types,Object.prototype.watch()/unwatch(),ParallelArray,StopIteration).rari@main(deployed), the operator-shorthand calls producetempl-redirected-linkwarnings because the rendered href bounces through the new per-locale redirects to the canonicalOperators/<kw>URL. These warnings disappear once fix(jsxref): build Web/JavaScript index to resolve names rari#715 ships — same temporary state Use jsxref shortform for null, this, delete, new, instanceof content#44221 introduced for en-US.Related issues and pull requests
Related to mdn/rari#715 and mdn/content#44221.