diff --git a/.github/workflows/spelling-check-bot.yml b/.github/workflows/spelling-check-bot.yml
index a81250fc2f262cb..cc04cb4776acc40 100644
--- a/.github/workflows/spelling-check-bot.yml
+++ b/.github/workflows/spelling-check-bot.yml
@@ -9,6 +9,8 @@ jobs:
sync:
if: github.repository == 'mdn/content'
runs-on: ubuntu-latest
+ permissions:
+ issues: write
steps:
- uses: actions/checkout@v4
@@ -21,36 +23,32 @@ jobs:
- name: Run scripts
run: |
- npm install
echo Running spelling check...
output=$(npx cspell --no-progress --gitignore --config .vscode/cspell.json "**/*.md" || exit 0)
- output=$(node scripts/linkify-logs.js "${output}")
- output=$(echo "$output" | sed 's/^/- /')
- echo "$output"
- echo "OUTPUT<> $GITHUB_ENV
- echo "$output" >> $GITHUB_ENV
- echo "EOF" >> $GITHUB_ENV
+ if [ -n "${output}" ]; then
+ output=$(node scripts/linkify-logs.js "${output}")
+ output=$(echo "$output" | sed 's/^/- /')
+ echo "$output"
+ echo "OUTPUT<> $GITHUB_ENV
+ echo "$output" >> $GITHUB_ENV
+ echo "EOF" >> $GITHUB_ENV
+ else
+ echo "No typos found! 🎉"
+ fi
- name: Report spellcheck errors
if: env.OUTPUT != ''
run: |
- comment_body=$(cat< [!TIP]
- > To exclude words from the spellchecker, you can add valid words (web technology terms or abbreviations) to the [terms-abbreviations.txt](https://github.com/mdn/content/blob/main/.vscode/terms-abbreviations.txt) dictionary for IDE autocompletion. To ignore strings that are not words (\`AABBCC\` in code, for instance), you can add them to [ignore-list.txt](https://github.com/mdn/content/blob/main/.vscode/ignore-list.txt).
- EOM
- )
- comment_body+=$'\n\n'$(echo "_(comment last updated: $(date +'%Y-%m-%d %H:%M:%S'))_")
- gh api \
- --method PATCH \
- -H "Accept: application/vnd.github+json" \
- -H "X-GitHub-Api-Version: 2022-11-28" \
- /repos/mdn/content/issues/35634 \
- -f "state=open" \
- -f "body=${comment_body}"
+ issue=$(gh issue create --title "$TITLE" --label "$LABELS" --body "$BODY")
+ echo Issue URL ${issue}
env:
- OUTPUT: ${{ env.OUTPUT }}
- GH_TOKEN: ${{ github.token }}
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ TITLE: Weekly spelling check
+ LABELS: reported by automation,good first issue
+ BODY: |
+ Typos and unknown words:
+
+ ${{ env.OUTPUT }}
+
+ > [!TIP]
+ > To exclude words from the spellchecker, you can add valid words (web technology terms or abbreviations) to the [terms-abbreviations.txt](https://github.com/mdn/content/blob/main/.vscode/terms-abbreviations.txt) dictionary for IDE autocompletion. To ignore strings that are not words (\`AABBCC\` in code, for instance), you can add them to [ignore-list.txt](https://github.com/mdn/content/blob/main/.vscode/ignore-list.txt).
diff --git a/.vscode/cspell.json b/.vscode/cspell.json
index 6d39a7623bd6a12..0710edc9c1e1465 100644
--- a/.vscode/cspell.json
+++ b/.vscode/cspell.json
@@ -64,7 +64,6 @@
"favourite-colour",
"ucaf:.*\""
],
- "allowCompoundWords": true,
"dictionaryDefinitions": [
{
"name": "terms-abbreviations",
diff --git a/.vscode/ignore-list.txt b/.vscode/ignore-list.txt
index 5393e3158c605ba..8910def71fe49c5 100644
--- a/.vscode/ignore-list.txt
+++ b/.vscode/ignore-list.txt
@@ -1,3 +1,238 @@
+aaabcc
+aabaac
+aacbbbcac
+ACCEPTEDTOS
+accname
+adduser
+adjtimescapheight
+adjtimesexheight
+adrianroselli
+advertisementreceived
+aggregatable
+alastairc
+alistapart
+ALLOWFROM
+alphanumerals
+Animometer
+Annonay
+antialiasing
+apacheconf
+apachectl
+ASCIIID
+assetlinks
+audiocontext
+beforeinstallpromptevent
+beforetoggle
+belgin
+blockable
+brians
+Browsersync
+browsingtopics
+bytestring
+CACHEDIR
+catchable
+Caterina
+characterboundsupdate
+Cheatsheet
+checkboard
+checkmarks
+clipboardchange
+Codelab
+collectability
+collinearity
+concatenator
+contenido
+contentlost
+contentscripts
+contentvisibilityautostatechange
+controlbar
+cookieless
+cooluser
+crashextensions
+credentialled
+crookedtimber
+cssgridgarden
+csstricks
+Cubehelix
+cubemaps
+currentscreenchange
+customstateset
+cycletracker
+davidwalsh
+demuxing
+Descripton
+dropshow
+enablei
+Engish
+Ethere
+everytime
+evilsite
+examplestyles
+Fairchild
+fencedframe
+fencedframeconfig
+fencedframes
+filetext
+filterfunctions
+Flagfox
+forwidth
+gattserverdisconnected
+generatable
+GETMATCHEDRULES
+givenname
+greenblue
+greenzero
+growshrink
+harpercollins
+highspeed
+imagebad
+imagegrid
+infobox
+infoboxes
+infobox's
+innertext
+interarrival
+ipados
+jamiedoe
+Jinping
+Kobabe
+lazyloaded
+letmein
+lightpurple
+Lindenberg
+linecaps
+longwinded
+loopstarted
+lowdelay
+macaron
+Malala
+mathit
+maxplaybackrate
+megastore
+metastring
+miplevel
+Miroslav
+Misparsed
+modulepreloaded
+montecarlo
+mouseentry
+multifactor
+multimemory
+mygroupmarker
+mysampler
+mystatename
+navigables
+nextslide
+Nodepad
+noteblocks
+notrendered
+Nowrapping
+offsetted
+ontextformatupdate
+ontextupdate
+pagereveal
+pageswap
+paintable
+paintsize
+papermakers
+permissionspolicy
+pipline
+Platformer
+playbackrate
+popovertarget
+popovertargetaction
+precache
+precached
+precaches
+precaching
+preconnects
+preloaders
+premultiplication
+prerenderingchange
+prerenders
+previousslide
+pricelist
+properities
+pythonanywhere
+pythonaware
+rawupdate
+readonlyinline
+realpython
+redblue
+redyellow
+redzero
+requireinteraction
+reselecting
+Resizeable
+resnapped
+Ronaldo
+rtctransform
+samplepay
+scanability
+screenreaders
+screenschange
+seecompattable
+selectchange
+selectedness
+Serpentina
+shadowrootdelegatesfocus
+shadowrootmode
+shadowrootserializable
+sharedmem
+sharpyuv
+shortlinks
+shrinkwap
+shrinkwrapping
+sinkchange
+smashingmagazine
+Snapshotting
+somestate
+srihash
+stackexchange
+Stormys
+Stratford
+styleable
+subformula
+subformulas
+subheaders
+subpattern
+subpopover
+subproject
+Subsentence
+subsetting
+subteam
+subteams
+sunsetting
+supersets
+swashoff
+targettable
+textformatupdate
+textupdate
+timeframe
+truthyness
+tunetheweb
+tutsplus
+underliner
+underlyingly
+usecase
+useinbandfec
+valuechange
+viewbox
+virtualkeyboardpolicy
+webappmanifest
+webbundle
+webcodecs
+webdav
+webdesignerdepot
+webidentity
+webtransport
+whitepoint
+wisedog
+workgroups
+writingsuggestions
+zeroblue
+zeroyellow
+zerozero
Amit
Scrimba
rvfc
@@ -1123,6 +1358,7 @@ Digi
Digianswer
dignissim
Dijit
+dimoulis
dinocons
dinodescr
Dinos
@@ -1663,6 +1899,7 @@ Freecodecamp
Freemium
Freetype
Freitag
+Frida
fringilla
fringille
fromcharcode
@@ -2368,6 +2605,7 @@ JXON
Kadir
Kadlec
kaios
+Kahlo
Kakao
Kaku
Kaply
@@ -3778,7 +4016,6 @@ quaxxor
queryphrase
queryset
querysets
-querystring
quibusdam
QUIC
quickbrownfox
diff --git a/files/en-us/_redirects.txt b/files/en-us/_redirects.txt
index 8191cf8689d3daa..f3417c8bdcd3588 100644
--- a/files/en-us/_redirects.txt
+++ b/files/en-us/_redirects.txt
@@ -11660,6 +11660,7 @@
/en-US/docs/Web/CSS/linear-gradient() /en-US/docs/Web/CSS/gradient/linear-gradient
/en-US/docs/Web/CSS/margin-new /en-US/docs/Web/CSS/margin
/en-US/docs/Web/CSS/margin_collapsing /en-US/docs/Web/CSS/CSS_box_model/Mastering_margin_collapsing
+/en-US/docs/Web/CSS/masonry-auto-flow /en-US/docs/Web/CSS/grid-auto-flow
/en-US/docs/Web/CSS/max() /en-US/docs/Web/CSS/max
/en-US/docs/Web/CSS/media /en-US/docs/Web/CSS/@media
/en-US/docs/Web/CSS/media/Bitmap /en-US/docs/Web/CSS/@media
diff --git a/files/en-us/_wikihistory.json b/files/en-us/_wikihistory.json
index 456ff226877a4a4..72b85829ee65537 100644
--- a/files/en-us/_wikihistory.json
+++ b/files/en-us/_wikihistory.json
@@ -86802,10 +86802,6 @@
"Heycam"
]
},
- "Web/CSS/masonry-auto-flow": {
- "modified": "2020-11-12T04:50:46.255Z",
- "contributors": ["rachelandrew", "chrisdavidmills"]
- },
"Web/CSS/math-style": {
"modified": "2020-12-12T22:36:34.292Z",
"contributors": ["sideshowbarker", "chrisdavidmills", "rachelandrew"]
diff --git a/files/en-us/games/publishing_games/game_distribution/index.md b/files/en-us/games/publishing_games/game_distribution/index.md
index 77d6d4d998e9a9d..b723c79fbf92300 100644
--- a/files/en-us/games/publishing_games/game_distribution/index.md
+++ b/files/en-us/games/publishing_games/game_distribution/index.md
@@ -56,7 +56,7 @@ If you're working on a side project just for fun, then leaving the source open w
As the name may suggest, publishers can handle the publishing of your game for you. Whether you should go that way or not depends on what your plan is for having your game distributed: Do you want to send it wherever possible, or do you want to restrict its presence to those who've bought an [exclusive license](/en-US/docs/Games/Publishing_games/Game_monetization)? It's up to you. Consider various options, experiment and conclude. Publishers will be explained in more detail in the [monetization](/en-US/docs/Games/Publishing_games/Game_monetization) article.
-There are also independent portals collecting interesting games like [HTML5Games.com](https://html5games.com/), [GameArter.com](https://www.gamearter.com/), [MarketJS.com](https://www.marketjs.com/), [GameFlare](https://distribution.gameflare.com/), [GameDistribution.com](https://gamedistribution.com/), [Poki](https://developers.poki.com/), or [CrazyGames](https://developer.crazygames.com/) where you can send your game in and it will get some natural promotion because of the big traffic those sites attract. Some of these take your files and host them on their server, whereas others only link to your website or embed your game on their site. Such exposure may just provide [promotion](/en-US/docs/Games/Publishing_games/Game_promotion) for your game, or if you have adverts shown beside your game (or other money making options) it may also provide monetization.
+There are also independent portals collecting interesting games like [HTML5Games.com](https://html5games.com/), [GameArter.com](https://www.gamearter.com/), [MarketJS.com](https://www.marketjs.com/), [GameFlare](https://distribution.gameflare.com/), [GameDistribution.com](https://gamedistribution.com/), [GameSaturn.com](https://gamesaturn.com/), [Poki](https://developers.poki.com/), or [CrazyGames](https://developer.crazygames.com/) where you can send your game in and it will get some natural promotion because of the big traffic those sites attract. Some of these take your files and host them on their server, whereas others only link to your website or embed your game on their site. Such exposure may just provide [promotion](/en-US/docs/Games/Publishing_games/Game_promotion) for your game, or if you have adverts shown beside your game (or other money making options) it may also provide monetization.
### Web and native stores
diff --git a/files/en-us/games/techniques/3d_on_the_web/building_up_a_basic_demo_with_three.js/index.md b/files/en-us/games/techniques/3d_on_the_web/building_up_a_basic_demo_with_three.js/index.md
index f47088ba36062b0..b9d8454c21a9398 100644
--- a/files/en-us/games/techniques/3d_on_the_web/building_up_a_basic_demo_with_three.js/index.md
+++ b/files/en-us/games/techniques/3d_on_the_web/building_up_a_basic_demo_with_three.js/index.md
@@ -15,7 +15,7 @@ A typical 3D scene in a game — even the simplest one — contains standard ite
To start developing with Three.js, you should make sure you are using a modern browser with good [WebGL](/en-US/docs/Web/API/WebGL_API) support, such as the latest Firefox or Chrome.
-You can download the [latest Three.js library](https://github.com/mrdoob/three.js/archive/master.zip) and copy the minified version of Three.js from the uncompressed archive at `build/three.module.min.js` into your project.
+You can download the [latest Three.js library](https://codeload.github.com/mrdoob/three.js/zip/refs/heads/master) and copy the minified version of Three.js from the uncompressed archive at `build/three.module.min.js` into your project.
Bear in mind that the archives include source files, which makes the download size approximately 350MB.
Alternatively, you can import Three.js [using a CDN or use Node.js](https://threejs.org/docs/#manual/en/introduction/Installation).
diff --git a/files/en-us/games/tutorials/2d_breakout_game_pure_javascript/create_the_canvas_and_draw_on_it/index.md b/files/en-us/games/tutorials/2d_breakout_game_pure_javascript/create_the_canvas_and_draw_on_it/index.md
index 0c090e4d3732821..ff75aae02ffde30 100644
--- a/files/en-us/games/tutorials/2d_breakout_game_pure_javascript/create_the_canvas_and_draw_on_it/index.md
+++ b/files/en-us/games/tutorials/2d_breakout_game_pure_javascript/create_the_canvas_and_draw_on_it/index.md
@@ -132,7 +132,7 @@ ctx.closePath();
ctx.beginPath();
ctx.rect(160, 10, 100, 40);
-ctx.strokeStyle = "rgba(0, 0, 255, 0.5)";
+ctx.strokeStyle = "rgb(0 0 255 / 0.5)";
ctx.stroke();
ctx.closePath();
```
diff --git a/files/en-us/glossary/bfcache/index.md b/files/en-us/glossary/bfcache/index.md
index f53172c9775ef77..8138a420184025b 100644
--- a/files/en-us/glossary/bfcache/index.md
+++ b/files/en-us/glossary/bfcache/index.md
@@ -8,7 +8,7 @@ page-type: glossary-definition
The **back/forward** cache, or **bfcache**, is a performance-enhancing feature available in modern browsers that enables instant back and forward navigation between previously-visited pages. It does this by storing a complete snapshot of a page as the user navigates away from it; the browser can then quickly restore the snapshot if the user decides to return to it, rather than needing to repeat the network requests required to load the page.
-The snapshot contains the entire page in memory, including the JavaScript heap; in-progess code is paused when the user navigates away and resumed when they return to the page. A regular HTTP cache entry on the other hand contains only responses to previous requests. The bfcache therefore provides faster results than the HTTP cache.
+The snapshot contains the entire page in memory, including the JavaScript heap; in-progress code is paused when the user navigates away and resumed when they return to the page. A regular HTTP cache entry on the other hand contains only responses to previous requests. The bfcache therefore provides faster results than the HTTP cache.
The downside is that bfcache entries require more resources, and create complexity in terms of how to represent in-progress code. Some code features (for example the [`unload`](/en-US/docs/Web/API/Window/unload_event) handler) are not compatible, so their presence on a page blocks it from using the bfcache.
diff --git a/files/en-us/glossary/blink_element/index.md b/files/en-us/glossary/blink_element/index.md
new file mode 100644
index 000000000000000..3683430bffab63c
--- /dev/null
+++ b/files/en-us/glossary/blink_element/index.md
@@ -0,0 +1,39 @@
+---
+title: blink element ( tag)
+slug: Glossary/blink_element
+page-type: glossary-definition
+---
+
+{{GlossarySidebar}}
+
+The **`` element** (blink tag) is an obsolete HTML feature no longer supported by web browsers, and no longer documented on MDN. It was used make text content blink on and off (flash) continually.
+
+## Brief history
+
+In the early days of the web (the early- to mid-90s), there were not many features available for styling web pages. The [CSS](/en-US/docs/Web/CSS) specification (version 1) was first released in 1996, and not adopted consistently by browsers until much later. Before CSS, browsers experimented with several features to make particular text sections stand out and grab the user's attention if desired. The `` element was one of these, introduced in early versions of [Netscape Navigator](/en-US/docs/Glossary/Netscape_Navigator); [Internet Explorer's](/en-US/docs/Glossary/Microsoft_Internet_Explorer) {{htmlelement("marquee")}} element was another one.
+
+The `` element was apparently created after a conversation in a bar in Mountain View between Netscape engineer [Lou Montulli](https://en.wikipedia.org/wiki/Lou_Montulli) and colleagues. When he went into the office the next morning, he found that one of his fellow engineers have stayed up all night and implemented it ([read the story here](https://web.archive.org/web/20220331020029/http://www.montulli.org/theoriginofthe%3Cblink%3Etag)).
+
+While initially popular, `` became much maligned because of overuse; many people found it annoying. More importantly, it degrades readability, and can be particularly problematic for users with visual impairments or [cognitive disorders](/en-US/docs/Web/Accessibility/Cognitive_accessibility) such as epilepsy or ADHD. It can be disorienting or, in the worst cases, even [trigger seizures](/en-US/docs/Web/Accessibility/Seizure_disorders).
+
+`` was never properly specified, and never achieved significant cross-browser support. It can be considered a piece of web history.
+
+## Syntax
+
+The `` element was used like this:
+
+```html example-bad
+In ancient browsers, I may have blinked
+```
+
+### Alternatives
+
+- The CSS {{cssxref("text-decoration-line")}} property has a `blink` value that should have the same effect, but most modern browsers ignore it.
+- The JavaScript {{jsxref("String.blink()")}} method wraps a text string in ` ` tags but, as discussed earlier, this element is no longer supported anywhere.
+- [CSS animations](/en-US/docs/Web/CSS/CSS_animations) could still be used to create blinking text. However, you should avoid blinking text on web pages for the reasons discussed above.
+
+## See also
+
+- [Blink element](https://en.wikipedia.org/wiki/Blink_element) on Wikipedia
+- [WCAG 2.2.2: Pause, Stop, Hide](https://www.w3.org/WAI/WCAG21/Understanding/pause-stop-hide)
+- [WCAG 2.3.1: Three Flashes or Below Threshold](https://www.w3.org/WAI/WCAG21/Understanding/three-flashes-or-below-threshold)
diff --git a/files/en-us/glossary/boolean/html/index.md b/files/en-us/glossary/boolean/html/index.md
index e296811a3dc4506..14de1fd571c1184 100644
--- a/files/en-us/glossary/boolean/html/index.md
+++ b/files/en-us/glossary/boolean/html/index.md
@@ -2,7 +2,6 @@
title: Boolean attribute (HTML)
slug: Glossary/Boolean/HTML
page-type: glossary-definition
-spec-urls: https://html.spec.whatwg.org/#boolean-attributes
---
{{GlossarySidebar}}
diff --git a/files/en-us/glossary/css_preprocessor/index.md b/files/en-us/glossary/css_preprocessor/index.md
index ae5642b82ec3709..28e6e0ba8c5a555 100644
--- a/files/en-us/glossary/css_preprocessor/index.md
+++ b/files/en-us/glossary/css_preprocessor/index.md
@@ -19,7 +19,6 @@ To use a CSS preprocessor, you must install a CSS compiler on your web {{Glossar
- [Sass](https://sass-lang.com/)
- [LESS](https://lesscss.org/)
- [Stylus](https://stylus-lang.com/)
- - [PostCSS](https://postcss.org/)
- Related glossary terms:
- {{Glossary("CSS")}}
diff --git a/files/en-us/glossary/effective_connection_type/index.md b/files/en-us/glossary/effective_connection_type/index.md
index 7a2011090111b84..8750bf1f4240527 100644
--- a/files/en-us/glossary/effective_connection_type/index.md
+++ b/files/en-us/glossary/effective_connection_type/index.md
@@ -8,7 +8,7 @@ page-type: glossary-definition
**Effective connection type** (ECT) refers to the measured network performance, returning a cellular connection type, like 3G, even if the actual connection is tethered broadband or Wi-Fi, based on the time between the browser requesting a page and effective type of the connection.
-The values of '`slow-2g`', '`2g`', '`3g`', and '`4g`' are determined using observed round-trip times and downlink values.
+The values of `slow-2g`, `2g`, `3g`, and `4g` are determined using observed round-trip times and downlink values.
| ECT | Minimum {{Glossary("Round Trip Time", "RTT")}} | Maximum downlink | Explanation |
| --------- | ---------------------------------------------- | ---------------- | -------------------------------------------------------------------------------------------------------- |
diff --git a/files/en-us/glossary/html_color_codes/index.md b/files/en-us/glossary/html_color_codes/index.md
new file mode 100644
index 000000000000000..db07c5dc42546f9
--- /dev/null
+++ b/files/en-us/glossary/html_color_codes/index.md
@@ -0,0 +1,28 @@
+---
+title: HTML color codes
+slug: Glossary/html_color_codes
+page-type: glossary-definition
+---
+
+{{GlossarySidebar}}
+
+**HTML color codes** is a _defacto_ general term used to describe the earliest-available methods for specifying colors on web pages. This includes HTML color names such as `black`, `purple`, and `aqua`, and hexadecimal notations such as `#000000`, `#800080`, and `#00ffff`. These were originally defined in HTML specifications — see for example the [HTML 3.2 color definitions](https://www.w3.org/TR/2018/SPSD-html32-20180315/#colors) of the original 16 HTML colors.
+
+It is no longer accurate to refer to colors on the web as "HTML color codes" or "HTML color names". Colors are now specified in the [CSS color module](/en-US/docs/Web/CSS/CSS_colors), and generally known as CSS colors or web colors.
+
+## See also
+
+### General knowledge
+
+[Web colors](https://en.wikipedia.org/wiki/Web_colors) on Wikipedia
+
+### Technical reference
+
+To look up web colors on MDN, see our CSS {{cssxref("<color>")}} values reference documentation, or more specifically:
+
+- Color names: {{cssxref("<named-color>")}}.
+- Hexadecimal notations: {{cssxref("<hex-color>")}}.
+- Color functions:
+ - [sRGB](/en-US/docs/Glossary/Color_space#rgb_color_spaces) color space: {{CSSXref("color_value/hsl", "hsl()")}}, {{CSSXref("color_value/hwb", "hwb()")}}, and {{CSSXref("color_value/rgb", "rgb()")}}.
+ - [CIELAB](/en-US/docs/Glossary/Color_space#cielab_color_spaces) color space: {{CSSXref("color_value/lab", "lab()")}} and {{CSSXref("color_value/lch", "lch()")}}, {{CSSXref("color_value/oklab", "oklab()")}}, and {{CSSXref("color_value/oklch", "oklch()")}}.
+ - Other color spaces: {{CSSXref("color_value/color", "color()")}}.
diff --git a/files/en-us/glossary/literal/index.md b/files/en-us/glossary/literal/index.md
index 6036bd56bd64b67..6e53b526ff8777c 100644
--- a/files/en-us/glossary/literal/index.md
+++ b/files/en-us/glossary/literal/index.md
@@ -36,7 +36,7 @@ The following are examples of string literals:
An object literal is a list of zero or more pairs of property names and associated values of an object, enclosed in curly braces (`{}`).
-The following is an example of an object literal. The first element of the `car` object defines a property, `myCar`, and assigns to it a new string, "`Toyota`"; the second element, the `getCar` property, is immediately assigned the result of invoking the function `carTypes('Honda')`; the third element, the `special` property, uses an existing variable (`sales`).
+The following is an example of an object literal. The first element of the `car` object defines a property, `myCar`, and assigns to it a new string, `"Toyota"`; the second element, the `getCar` property, is immediately assigned the result of invoking the function `carTypes('Honda')`; the third element, the `special` property, uses an existing variable (`sales`).
```js
const sales = "BMW";
diff --git a/files/en-us/glossary/statement/index.md b/files/en-us/glossary/statement/index.md
index 240242b297efafc..837c26851883522 100644
--- a/files/en-us/glossary/statement/index.md
+++ b/files/en-us/glossary/statement/index.md
@@ -10,5 +10,5 @@ In a computer programming language, a **statement** is a line of code commanding
## See also
-- [Statement (computer science)]() on Wikipedia
- [JavaScript statements and declarations](/en-US/docs/Web/JavaScript/Reference/Statements)
+- [Statement (computer science)]() on Wikipedia
diff --git a/files/en-us/glossary/throttle/index.md b/files/en-us/glossary/throttle/index.md
index a864b4e0520c9fa..28d5d1388998db1 100644
--- a/files/en-us/glossary/throttle/index.md
+++ b/files/en-us/glossary/throttle/index.md
@@ -10,7 +10,7 @@ page-type: glossary-definition
Throttling is very similar to {{glossary("debounce", "debouncing")}}. The key difference is that when invocations happen continuously, throttling ensures that the operation is still performed at a certain maximum rate, while debouncing waits indefinitely until the invocations stop for a certain amount of time.
-A typical use case of debouncing is when synchronizing with another constantly-updating state. Consider a function `onScrolled`, which listens for the [`scroll`](/en-US/docs/Web/API/Document/scroll_event) event. The `scroll` event may fire as often as every pixel scrolled, so the function will be called in very short intervals. If `onScrolled` is computationally expensive, earlier invocations might block later invocations from happening on time, or block other things from executing in the meantime, leading to a noticeable {{glossary("jank")}}. In this case, we can throttle `onScrolled`, such that it can only be called at most once every 10 milliseconds:
+A typical use case of throttling is when synchronizing with another constantly-updating state. Consider a function `onScrolled`, which listens for the [`scroll`](/en-US/docs/Web/API/Document/scroll_event) event. The `scroll` event may fire as often as every pixel scrolled, so the function will be called in very short intervals. If `onScrolled` is computationally expensive, earlier invocations might block later invocations from happening on time, or block other things from executing in the meantime, leading to a noticeable {{glossary("jank")}}. In this case, we can throttle `onScrolled`, such that it can only be called at most once every 10 milliseconds:
1. The first call to `onScrolled` is known as the _leading edge_.
2. For every next call to `onScrolled`, if it is within 10 milliseconds from the first call, it is in the same "batch" as the first call.
diff --git a/files/en-us/learn/common_questions/tools_and_setup/available_text_editors/index.md b/files/en-us/learn/common_questions/tools_and_setup/available_text_editors/index.md
index 338a63349d160a4..e126e9834669516 100644
--- a/files/en-us/learn/common_questions/tools_and_setup/available_text_editors/index.md
+++ b/files/en-us/learn/common_questions/tools_and_setup/available_text_editors/index.md
@@ -192,23 +192,6 @@ Here are some popular editors:
Yes
-
-
- Komodo Edit
-
- MPL
- Free
- Windows, Mac, Linux
- Forum
-
- Online Manual
-
- Yes
-
$50
Mac
- Twitter ,
+ Twitter ,
IRC ,
Mailing list how the Internet works
- and be familiar with
the difference between a webpage, a website, a web server, and a
diff --git a/files/en-us/learn/common_questions/web_mechanics/what_is_a_url/index.md b/files/en-us/learn/common_questions/web_mechanics/what_is_a_url/index.md
index 7808d9674e49ab9..a48a12e176f75ae 100644
--- a/files/en-us/learn/common_questions/web_mechanics/what_is_a_url/index.md
+++ b/files/en-us/learn/common_questions/web_mechanics/what_is_a_url/index.md
@@ -123,7 +123,7 @@ Let's examine what the distinction between _absolute_ and _relative_ means in th
The required parts of a URL depend to a great extent on the context in which the URL is used. In your browser's address bar, a URL doesn't have any context, so you must provide a full (or _absolute_) URL, like the ones we saw above. You don't need to include the protocol (the browser uses HTTP by default) or the port (which is only required when the targeted Web server is using some unusual port), but all the other parts of the URL are necessary.
-When a URL is used within a document, such as in an HTML page, things are a bit different. Because the browser already has the document's own URL, it can use this information to fill in the missing parts of any URL available inside that document. We can differentiate between an _absolute URL_ and a _relative URL_ by looking only at the _path_ part of the URL. If the path part of the URL starts with the "`/`" character, the browser will fetch that resource from the top root of the server, without reference to the context given by the current document.
+When a URL is used within a document, such as in an HTML page, things are a bit different. Because the browser already has the document's own URL, it can use this information to fill in the missing parts of any URL available inside that document. We can differentiate between an _absolute URL_ and a _relative URL_ by looking only at the _path_ part of the URL. If the path part of the URL starts with the `/` character, the browser will fetch that resource from the top root of the server, without reference to the context given by the current document.
Let's look at some examples to make this clearer. Let's assume that the URLs are defined from within the document located at the following URL: `https://developer.mozilla.org/en-US/docs/Learn`.
diff --git a/files/en-us/learn/css/building_blocks/values_and_units/index.md b/files/en-us/learn/css/building_blocks/values_and_units/index.md
index d5d5c44309ce429..24c9625a744ed62 100644
--- a/files/en-us/learn/css/building_blocks/values_and_units/index.md
+++ b/files/en-us/learn/css/building_blocks/values_and_units/index.md
@@ -326,9 +326,6 @@ In the example below, we have added a background image to the containing block o
**In this example, try changing the alpha channel values to see how it affects the color output.**
-> [!NOTE]
-> In older versions of CSS, the `rgb()` syntax didn't support an alpha parameter - you needed to use a different function called `rgba()` for that. These days you can pass an alpha parameter to `rgb()`. The `rgba()` function is an alias for `rgb()`.
-
### SRGB values
The `sRGB` color space defines colors in the **red** (r), **green** (g), and **blue** (b) color space.
@@ -371,9 +368,6 @@ Just like with `rgb()` you can pass an alpha parameter to `hsl()` to specify opa
{{EmbedGHLiveSample("css-examples/learn/values-units/color-hsla.html", '100%', 900)}}
-> [!NOTE]
-> In older versions of CSS, the `hsl()` syntax didn't support an alpha parameter - you needed to use a different function called `hsla()` for that. These days you can pass an alpha parameter to `hsl()`, but for backwards compatibility with old websites, the `hsla()` syntax is still supported, and has exactly the same behavior as `hsl()`.
-
## Images
The [``](/en-US/docs/Web/CSS/image) value type is used wherever an image is a valid value. This can be an actual image file pointed to via a `url()` function, or a gradient.
diff --git a/files/en-us/learn/css/first_steps/how_css_is_structured/index.md b/files/en-us/learn/css/first_steps/how_css_is_structured/index.md
index 282d869fbbfa9d2..8efff32c9d6d0ee 100644
--- a/files/en-us/learn/css/first_steps/how_css_is_structured/index.md
+++ b/files/en-us/learn/css/first_steps/how_css_is_structured/index.md
@@ -471,7 +471,7 @@ Try adding comments in your CSS.
## White space
-White space means actual spaces, tabs and new lines. Just as browsers ignore white space in HTML, browsers ignore white space inside CSS. The value of white space is how it can improve readability.
+White space means actual spaces, tabs and new lines. Just as browsers ignore extra white space in HTML, browsers ignore extra white space inside CSS. The benefit of white space is that it improves readability.
In the example below, each declaration (and rule start/end) has its own line. This is arguably a good way to write CSS. It makes it easier to maintain and understand CSS.
@@ -512,17 +512,17 @@ div p + p {
}
```
-The next example shows the equivalent CSS in a more compressed format. Although the two examples work the same, the one below is more difficult to read.
+The next example shows the equivalent CSS in a more compressed format, with all extra white space removed. Although the two examples work the same, the one below is more difficult to read.
```css-nolint
-body {font: 1em/150% Helvetica, Arial, sans-serif; padding: 1em; margin: 0 auto; max-width: 33em;}
-@media (min-width: 70em) { body { font-size: 130%;}}
+body{font:1em/150% Helvetica,Arial,sans-serif;padding:1em;margin:0 auto;max-width:33em;}
+@media(min-width:70em){body{font-size:130%;}}
-h1 {font-size: 1.5em;}
+h1{font-size:1.5em;}
-div p, #id:first-line {background-color: red; border-radius: 3px;}
-div p {margin: 0; padding: 1em;}
-div p + p {padding-top: 0;}
+div p,#id:first-line{background-color:red;border-radius:3px;}
+div p{margin:0;padding:1em;}
+div p+p{padding-top:0;}
```
For your own projects, you will format your code according to personal preference. For team projects, you may find that a team or project has its own style guide.
diff --git a/files/en-us/learn/css/styling_text/styling_links/index.md b/files/en-us/learn/css/styling_text/styling_links/index.md
index 54b9e2693bab3bf..3d547274a057969 100644
--- a/files/en-us/learn/css/styling_text/styling_links/index.md
+++ b/files/en-us/learn/css/styling_text/styling_links/index.md
@@ -60,23 +60,7 @@ The example below illustrates what a link will look and behave like by default;
- Unvisited links are blue.
- Visited links are purple.
- Hovering a link makes the mouse pointer change to a little hand icon.
-- Focused links have an outline around them — you should be able to focus on the links on this page with the keyboard by pressing the tab key. (On Mac, you'll need to use
-
- option
-
- \+
-
- tab
-
- , or enable the [Full Keyboard Access: All controls](https://support.apple.com/guide/mac-help/use-your-keyboard-like-a-mouse-mchlp1399/mac) option by pressing
-
- Ctrl
-
- \+
-
- F7
-
- .)
+- Focused links have an outline around them — you should be able to focus on the links on this page with the keyboard by pressing the tab key.
- Active links are red. Try holding down the mouse button on the link as you click it.
diff --git a/files/en-us/learn/forms/advanced_form_styling/index.md b/files/en-us/learn/forms/advanced_form_styling/index.md
index 020f32a034c8fd5..5d0552ba1fec71a 100644
--- a/files/en-us/learn/forms/advanced_form_styling/index.md
+++ b/files/en-us/learn/forms/advanced_form_styling/index.md
@@ -483,7 +483,7 @@ And then style the label to act like a button, which when pressed will open the
label[for="file"] {
box-shadow: 1px 1px 3px #ccc;
background: linear-gradient(to bottom, #eee, #ccc);
- border: 1px solid rgb(169, 169, 169);
+ border: 1px solid rgb(169 169 169);
border-radius: 5px;
text-align: center;
line-height: 1.5;
diff --git a/files/en-us/learn/forms/user_input_methods/index.md b/files/en-us/learn/forms/user_input_methods/index.md
index 70718f7a9bfb7b3..7f7201fa318830a 100644
--- a/files/en-us/learn/forms/user_input_methods/index.md
+++ b/files/en-us/learn/forms/user_input_methods/index.md
@@ -92,7 +92,7 @@ When screen orientation matters for your form, you can read the screen orientati
### Fullscreen
-If you need to present your form in fullscreen mode, such as when your form is displayed on a museum kiosk, toll booth, or really any publically displayed user interface, it is possible to do so by calling {{domxref("Element.requestFullscreen()")}} on that element:
+If you need to present your form in fullscreen mode, such as when your form is displayed on a museum kiosk, toll booth, or really any publicly displayed user interface, it is possible to do so by calling {{domxref("Element.requestFullscreen()")}} on that element:
```js
const elem = document.getElementById("myForm");
diff --git a/files/en-us/learn/forms/your_first_form/index.md b/files/en-us/learn/forms/your_first_form/index.md
index 3fcbdb523c9ff65..a961ef1f442e70b 100644
--- a/files/en-us/learn/forms/your_first_form/index.md
+++ b/files/en-us/learn/forms/your_first_form/index.md
@@ -93,26 +93,24 @@ In terms of HTML code we need something like the following to implement these fo
```html
```
Update your form code to look like the above.
-The {{HTMLelement("li")}} elements are there to conveniently structure our code and make styling easier (see later in the article).
+The {{HTMLelement("p")}} elements are there to conveniently structure our code and make styling easier (see later in the article).
For usability and accessibility, we include an explicit label for each form control.
Note the use of the [`for`](/en-US/docs/Web/HTML/Attributes/for) attribute on all {{HTMLelement("label")}} elements, which takes as its value the [`id`](/en-US/docs/Web/HTML/Global_attributes/id) of the form control with which it is associated — this is how you associate a form control with its label.
@@ -152,12 +150,12 @@ by default this element is filled with this text
### The `` element
The markup for our form is almost complete; we just need to add a button to allow the user to send, or "submit", their data once they have filled out the form.
-This is done by using the {{HTMLelement("button")}} element; add the following just above the closing `` tag:
+This is done by using the {{HTMLelement("button")}} element; add the following just above the closing `` tag:
```html
-
+
Send your message
-
+
```
The {{htmlelement("button")}} element also accepts a `type` attribute — this accepts one of three values: `submit`, `reset`, or `button`.
@@ -202,13 +200,7 @@ form {
border-radius: 1em;
}
-ul {
- list-style: none;
- padding: 0;
- margin: 0;
-}
-
-form li + li {
+p + p {
margin-top: 1em;
}
@@ -275,29 +267,27 @@ Let's look at some of our form code again:
```html
-
+
+ Name:
+
+
+
+ Email:
+
+
+
+ Message:
+
+
+
+ …
```
-In our example, the form will send 3 pieces of data named "`user_name`", "`user_email`", and "`user_message`".
-That data will be sent to the URL "`/my-handling-form-page`" using the [HTTP `POST`](/en-US/docs/Web/HTTP/Methods/POST) method.
+In our example, the form will send 3 pieces of data named `user_name`, `user_email`, and `user_message`.
+That data will be sent to the URL `/my-handling-form-page` using the [HTTP `POST`](/en-US/docs/Web/HTTP/Methods/POST) method.
-On the server side, the script at the URL "`/my-handling-form-page`" will receive the data as a list of 3 key/value items contained in the HTTP request.
+On the server side, the script at the URL `/my-handling-form-page` will receive the data as a list of 3 key/value items contained in the HTTP request.
The way this script will handle that data is up to you.
Each server-side language (PHP, Python, Ruby, Java, C#, etc.) has its own mechanism of handling form data.
It's beyond the scope of this guide to go deeply into that subject, but if you want to know more, we have provided some examples in our [Sending form data](/en-US/docs/Learn/Forms/Sending_and_retrieving_form_data) article later on.
diff --git a/files/en-us/learn/getting_started_with_the_web/installing_basic_software/index.md b/files/en-us/learn/getting_started_with_the_web/installing_basic_software/index.md
index 280820e0f1ae6e1..89288c7cd137b3c 100644
--- a/files/en-us/learn/getting_started_with_the_web/installing_basic_software/index.md
+++ b/files/en-us/learn/getting_started_with_the_web/installing_basic_software/index.md
@@ -36,12 +36,10 @@ The following looks like a scary list, but fortunately, you can get started in w
- **A computer**. Maybe that sounds obvious to some people, but some of you are reading this article on your phone or a library computer. For serious web development, it's better to invest in a desktop or laptop computer running Windows, macOS or Linux.
- **A text editor**, to write code in. This could be a text editor (e.g. [Visual Studio Code](https://code.visualstudio.com/), [Notepad++](https://notepad-plus-plus.org/), [Sublime Text](https://www.sublimetext.com/), [GNU Emacs](https://www.gnu.org/software/emacs/), or [VIM](https://www.vim.org/)), or a hybrid editor (e.g. [Dreamweaver](https://www.adobe.com/products/dreamweaver.html) or [WebStorm](https://www.jetbrains.com/webstorm/)). Office document editors are not suitable for this use, as they rely on hidden elements that interfere with the rendering engines used by web browsers.
-- **Web browsers**, to test code in. Currently, the most-used browsers are [Firefox](https://www.mozilla.org/en-US/firefox/new/), [Chrome](https://www.google.com/chrome/), [Safari](https://www.apple.com/safari/), and [Microsoft Edge](https://www.microsoft.com/en-us/edge). You should also test how your site performs on mobile devices and on any old browsers your target audience may still be using (such as IE 8–10). [Lynx](https://lynx.browser.org/), a text-based terminal web browser, is great for seeing how your site is experienced by visually-impaired users.
-- **A graphics editor**, like [GIMP](https://www.gimp.org/), [Figma](https://www.figma.com/), [Paint.NET](https://www.getpaint.net/), [Photoshop](https://www.adobe.com/products/photoshop.html), [Sketch](https://www.sketch.com/) or [XD](https://www.adobe.com/products/xd.html), to make images or graphics for your web pages.
+- **Web browsers**, to test code in. Currently, the most-used browsers are [Firefox](https://www.mozilla.org/en-US/firefox/new/), [Chrome](https://www.google.com/chrome/), [Safari](https://www.apple.com/safari/), and [Microsoft Edge](https://www.microsoft.com/en-us/edge). You should also test how your site performs on mobile devices and on any other browsers your target audience may be using. [Lynx](https://lynx.browser.org/), a text-based terminal web browser, is great for seeing how your site is experienced by visually-impaired users.
+- **A graphics editor**, like [GIMP](https://www.gimp.org/), [Figma](https://www.figma.com/), [Paint.NET](https://www.getpaint.net/), [Photoshop](https://www.adobe.com/products/photoshop.html), [Sketch](https://www.sketch.com/) or [XD](https://helpx.adobe.com/support/xd.html), to make images or graphics for your web pages.
- **A version control system**, to manage files on servers, collaborate on a project with a team, share code and assets and avoid editing conflicts. Right now, [Git](https://git-scm.com/) is the most popular version control system along with the [GitHub](https://github.com/) or [GitLab](https://about.gitlab.com/) hosting service.
-- **An FTP program**, used on older web hosting accounts to manage files on servers ([Git](https://git-scm.com/) is increasingly replacing FTP for this purpose). There are loads of (S)FTP programs available including [Cyberduck](https://cyberduck.io/), [Fetch](https://fetchsoftworks.com/) and [FileZilla](https://filezilla-project.org/).
-- **An automation system,** like [Webpack](https://webpack.js.org/), [Grunt](https://gruntjs.com/), or [Gulp](https://gulpjs.com/) to automatically perform repetitive tasks, such as minifying code and running tests.
-- Libraries, frameworks, etc., to speed up writing common functionality. A library tends to be an existing JavaScript or CSS file that provides ready-rolled functionality for you to make use of in your code. A framework tends to take this idea further, offering a complete system with some custom syntaxes for you to write a web app on top of.
-- More tools besides!
+
+For more information about other project-specific tools, especially for client-side web development, see our [Understanding client-side web development tools](/en-US/docs/Learn/Tools_and_testing/Understanding_client-side_tools) guide.
{{NextMenu("Learn/Getting_started_with_the_web/What_will_your_website_look_like", "Learn/Getting_started_with_the_web")}}
diff --git a/files/en-us/learn/getting_started_with_the_web/javascript_basics/index.md b/files/en-us/learn/getting_started_with_the_web/javascript_basics/index.md
index 778005974965cf6..08f5650bb4d12d4 100644
--- a/files/en-us/learn/getting_started_with_the_web/javascript_basics/index.md
+++ b/files/en-us/learn/getting_started_with_the_web/javascript_basics/index.md
@@ -289,7 +289,7 @@ if (iceCream === "chocolate") {
}
```
-The expression inside the `if ()` is the test. This uses the strict equality operator (as described above) to compare the variable `iceCream` with the string `chocolate` to see if the two are equal. If this comparison returns `true`, the first block of code runs. If the comparison is not true, the second block of code—after the `else` statement—runs instead.
+The expression inside the `if ()` is the test. This uses the strict equality operator (as described above) to compare the variable `iceCream` with the string `chocolate` to see if the two are equal. If this comparison returns `true`, the first block of code runs. If the comparison is not true, the second block of code—after the `else` keyword—runs instead.
### Functions
diff --git a/files/en-us/learn/getting_started_with_the_web/what_will_your_website_look_like/index.md b/files/en-us/learn/getting_started_with_the_web/what_will_your_website_look_like/index.md
index b32973592266167..e69248133149055 100644
--- a/files/en-us/learn/getting_started_with_the_web/what_will_your_website_look_like/index.md
+++ b/files/en-us/learn/getting_started_with_the_web/what_will_your_website_look_like/index.md
@@ -21,7 +21,7 @@ To begin, you'll need to answer these questions:
3. **What does your website look like,** in simple high-level terms? What's the background color? What kind of font is appropriate: formal, cartoony, bold and loud, subtle?
> [!NOTE]
-> Complex projects need detailed guidelines that go into all the details of colors, fonts, spacing between items on a page, appropriate writing style, and so on. This is sometimes called a design guide, design system, or brand book, and you can see an example at the [Firefox Photon Design System](https://design.firefox.com/photon/).
+> Complex projects need detailed guidelines that go into all the details of colors, fonts, spacing between items on a page, appropriate writing style, and so on. This is sometimes called a design guide, design system, or brand book, and you can see an example at the [Firefox Acorn Design System](https://acorn.firefox.com/latest/).
## Sketching out your design
@@ -71,7 +71,7 @@ Once you have found a font, there are two main ways of using it:
2. Download the font file to your own system, host the font yourself, and use your hosted copy in your website's code.
> [!NOTE]
-> Serving fonts hosted on Google Fonts may be incompatible with the European Union's data privacy regulation [GDPR](https://gdpr.eu/what-is-gdpr/) as the font service exposes the user's IP address. If this is a potential problem for you, then either choose the second option or choose a font provider that is GDPR compliant, such as [Bunny Fonts](https://fonts.bunny.net/about).
+> Serving fonts hosted on Google Fonts may be incompatible with the European Union's data privacy regulation [GDPR](https://gdpr.eu/) as the font service exposes the user's IP address. If this is a potential problem for you, then either choose the second option or choose a font provider that is GDPR compliant, such as [Bunny Fonts](https://fonts.bunny.net/about).
Alternatively you can use [safe web fonts](https://web.mit.edu/jmorzins/www/fonts.html) such as Arial, Times New Roman, or Courier New.
diff --git a/files/en-us/learn/html/introduction_to_html/document_and_website_structure/index.md b/files/en-us/learn/html/introduction_to_html/document_and_website_structure/index.md
index cf4d66290de76e9..401ae9ed0bce888 100644
--- a/files/en-us/learn/html/introduction_to_html/document_and_website_structure/index.md
+++ b/files/en-us/learn/html/introduction_to_html/document_and_website_structure/index.md
@@ -134,35 +134,41 @@ Our example seen above is represented by the following code (you can also [find
congue enim, ut porta lorem lacinia consectetur.
- Subsection
-
-
- Donec ut librero sed accu vehicula ultricies a non tortor. Lorem ipsum
- dolor sit amet, consectetur adipisicing elit. Aenean ut gravida lorem.
- Ut turpis felis, pulvinar a semper sed, adipiscing id dolor.
-
-
-
- Pelientesque auctor nisi id magna consequat sagittis. Curabitur
- dapibus, enim sit amet elit pharetra tincidunt feugiat nist imperdiet.
- Ut convallis libero in urna ultrices accumsan. Donec sed odio eros.
-
-
- Another subsection
-
-
- Donec viverra mi quis quam pulvinar at malesuada arcu rhoncus. Cum
- soclis natoque penatibus et manis dis parturient montes, nascetur
- ridiculus mus. In rutrum accumsan ultricies. Mauris vitae nisi at sem
- facilisis semper ac in est.
-
-
-
- Vivamus fermentum semper porta. Nunc diam velit, adipscing ut
- tristique vitae sagittis vel odio. Maecenas convallis ullamcorper
- ultricied. Curabitur ornare, ligula semper consectetur sagittis, nisi
- diam iaculis velit, is fringille sem nunc vet mi.
-
+
+ Subsection
+
+
+ Donec ut librero sed accu vehicula ultricies a non tortor. Lorem
+ ipsum dolor sit amet, consectetur adipisicing elit. Aenean ut
+ gravida lorem. Ut turpis felis, pulvinar a semper sed, adipiscing id
+ dolor.
+
+
+
+ Pelientesque auctor nisi id magna consequat sagittis. Curabitur
+ dapibus, enim sit amet elit pharetra tincidunt feugiat nist
+ imperdiet. Ut convallis libero in urna ultrices accumsan. Donec sed
+ odio eros.
+
+
+
+
+ Another subsection
+
+
+ Donec viverra mi quis quam pulvinar at malesuada arcu rhoncus. Cum
+ soclis natoque penatibus et manis dis parturient montes, nascetur
+ ridiculus mus. In rutrum accumsan ultricies. Mauris vitae nisi at
+ sem facilisis semper ac in est.
+
+
+
+ Vivamus fermentum semper porta. Nunc diam velit, adipscing ut
+ tristique vitae sagittis vel odio. Maecenas convallis ullamcorper
+ ultricied. Curabitur ornare, ligula semper consectetur sagittis,
+ nisi diam iaculis velit, is fringille sem nunc vet mi.
+
+
diff --git a/files/en-us/learn/html/multimedia_and_embedding/other_embedding_technologies/index.md b/files/en-us/learn/html/multimedia_and_embedding/other_embedding_technologies/index.md
index e716622bdcb0bc5..42ad829f9990ff6 100644
--- a/files/en-us/learn/html/multimedia_and_embedding/other_embedding_technologies/index.md
+++ b/files/en-us/learn/html/multimedia_and_embedding/other_embedding_technologies/index.md
@@ -325,7 +325,7 @@ If you find yourself needing to embed plugin content, this is the kind of inform
- accurate {{glossary("MIME type", 'media type')}}
+ Accurate {{glossary("MIME type", "media type")}}
of the embedded content
type
@@ -333,7 +333,7 @@ If you find yourself needing to embed plugin content, this is the kind of inform
- height and width (in CSS pixels) of the box controlled by the plugin
+ Height and width (in CSS pixels) of the box controlled by the plugin
height
width
@@ -343,19 +343,11 @@ If you find yourself needing to embed plugin content, this is the kind of inform
- names and values, to feed the plugin as parameters
- ad hoc attributes with those names and values
+ Independent HTML content as a fallback for an unavailable resource
+ Not supported (<noembed>
is obsolete)
- single-tag {{htmlelement("param")}} elements, contained within
- <object>
-
-
-
- independent HTML content as fallback for an unavailable resource
- not supported (<noembed>
is obsolete)
-
- contained within <object>
, after
- <param>
elements
+ Contained within the opening and closing
+ <object>
tags
diff --git a/files/en-us/learn/javascript/building_blocks/conditionals/index.md b/files/en-us/learn/javascript/building_blocks/conditionals/index.md
index a416f292a95a628..0ccdba99a925b53 100644
--- a/files/en-us/learn/javascript/building_blocks/conditionals/index.md
+++ b/files/en-us/learn/javascript/building_blocks/conditionals/index.md
@@ -429,10 +429,10 @@ In this example, you are going to help us finish a simple calendar application.
- An `onchange` event handler to detect when the value selected in the `` menu is changed.
- A function called `createCalendar()` that draws the calendar and displays the correct month in the {{htmlelement("Heading_Elements", "h1")}} element.
-We need you to write a conditional statement inside the `onchange` handler function, just below the `// ADD CONDITIONAL HERE` comment. It should:
+We need you to write a conditional statement inside the `createCalendar()` function, just below the `// ADD CONDITIONAL HERE` comment. It should:
1. Look at the selected month (stored in the `choice` variable. This will be the `` element value after the value changes, so "January" for example.)
-2. Set a variable called `days` to be equal to the number of days in the selected month. To do this you'll have to look up the number of days in each month of the year. You can ignore leap years for the purposes of this example.
+2. Assign the `days` variable to be equal to the number of days in the selected month. To do this you'll have to look up the number of days in each month of the year. You can ignore leap years for the purposes of this example.
Hints:
@@ -451,29 +451,31 @@ If you make a mistake, you can always reset the example with the "Reset" button.
-const select = document.querySelector('select');
-const list = document.querySelector('ul');
-const h1 = document.querySelector('h1');
+const select = document.querySelector("select");
+const list = document.querySelector("ul");
+const h1 = document.querySelector("h1");
-select.addEventListener('change', () => {
+select.addEventListener("change", () => {
const choice = select.value;
+ createCalendar(choice);
+});
- // ADD CONDITIONAL HERE
+function createCalendar(month) {
+ let days = 31;
- createCalendar(days, choice);
-});
+ // ADD CONDITIONAL HERE
-function createCalendar(days, choice) {
list.textContent = "";
- h1.textContent = choice;
+ h1.textContent = month;
for (let i = 1; i <= days; i++) {
- const listItem = document.createElement('li');
+ const listItem = document.createElement("li");
listItem.textContent = i;
list.appendChild(listItem);
}
}
-createCalendar(31, 'January');
+select.value = "January";
+createCalendar("January");
@@ -518,25 +520,25 @@ const h1 = document.querySelector("h1");
select.addEventListener("change", () => {
const choice = select.value;
+ createCalendar(choice);
+});
+function createCalendar(month) {
let days = 31;
- if (choice === "February") {
+
+ if (month === "February") {
days = 28;
} else if (
- choice === "April" ||
- choice === "June" ||
- choice === "September" ||
- choice === "November"
+ month === "April" ||
+ month === "June" ||
+ month === "September" ||
+ month === "November"
) {
days = 30;
}
- createCalendar(days, choice);
-});
-
-function createCalendar(days, choice) {
list.textContent = "";
- h1.textContent = choice;
+ h1.textContent = month;
for (let i = 1; i <= days; i++) {
const listItem = document.createElement("li");
listItem.textContent = i;
@@ -544,7 +546,8 @@ function createCalendar(days, choice) {
}
}
-createCalendar(31, "January");`;
+select.value = "January";
+createCalendar("January");`;
function outputDocument(code) {
const outputBody = `
diff --git a/files/en-us/learn/javascript/client-side_web_apis/third_party_apis/index.md b/files/en-us/learn/javascript/client-side_web_apis/third_party_apis/index.md
index 2cada03e94b7df1..b51dee2680a8717 100644
--- a/files/en-us/learn/javascript/client-side_web_apis/third_party_apis/index.md
+++ b/files/en-us/learn/javascript/client-side_web_apis/third_party_apis/index.md
@@ -205,7 +205,7 @@ First, you'll need to make a connection between the API and your app. In the cas
Replace the existing API key with the actual API key you got in the previous section.
-2. Add the following line to your JavaScript, below the "`// Event listeners to control the functionality`" comment. This runs a function called `submitSearch()` when the form is submitted (the button is pressed).
+2. Add the following line to your JavaScript, below the `// Event listeners to control the functionality` comment. This runs a function called `submitSearch()` when the form is submitted (the button is pressed).
```js
searchForm.addEventListener("submit", submitSearch);
diff --git a/files/en-us/learn/javascript/first_steps/test_your_skills_colon__arrays/index.md b/files/en-us/learn/javascript/first_steps/test_your_skills_colon__arrays/index.md
index c57c7a3d39e132c..c5d18f7ae21c93f 100644
--- a/files/en-us/learn/javascript/first_steps/test_your_skills_colon__arrays/index.md
+++ b/files/en-us/learn/javascript/first_steps/test_your_skills_colon__arrays/index.md
@@ -50,7 +50,7 @@ For this array task, we provide you with a starting array, and you will work in
1. Remove the last item in the array.
2. Add two new names to the end of the array.
3. Go over each item in the array and add its index number after the name inside parentheses, for example `Ryu (0)`. Note that we don't teach how to do this in the Arrays article, so you'll have to do some research.
-4. Finally, join the array items together in a single string called `myString`, with a separator of "`-`".
+4. Finally, join the array items together in a single string called `myString`, with a separator of `"-"`.
Try updating the live code below to recreate the finished example:
diff --git a/files/en-us/learn/performance/why_web_performance/index.md b/files/en-us/learn/performance/why_web_performance/index.md
index 672680aa829e97d..34dd873788adc08 100644
--- a/files/en-us/learn/performance/why_web_performance/index.md
+++ b/files/en-us/learn/performance/why_web_performance/index.md
@@ -42,11 +42,11 @@ As an example, consider the loading experience of CNN.com, which at the time of
- Imagine loading this on a desktop computer connected to a fibre optic network. This would seem relatively fast, and the file size would be largely irrelevant.
- Imagine loading that same site using tethered mobile data on a nine-year-old iPad while commuting home on public transportation. The same site will be slow to load, possibly verging on unusable depending on cell coverage. You might give up before it finishes loading.
-- Imagine loading that same site on a $35 Huawei device in a rural India with limited coverage or no coverage. The site will be very slow to load—if it loads at all—with blocking scripts possibly timing out, and adverse CPU impact causing browser crashes if it does load.
+- Imagine loading that same site on a low-cost device in an area with limited coverage. The site will be very slow to load—if it loads at all—with blocking scripts possibly timing out, and adverse CPU impact potentially causing browser crashes if it does load.
A 22.6 MB site could take up to 83 seconds to load on a 3G network, with [`DOMContentLoaded`](/en-US/docs/Web/API/Document/DOMContentLoaded_event) (meaning the site's base HTML structure) at 31.86 seconds.
-And it isn't just the time taken to download that is a major problem. A lot of countries still have internet connections that bill per megabyte. Our example 22.6 MB CNN.com experience would cost about 11% of the average Indian's daily wage to download. From a mobile device in Northwest Africa, it might cost two days of an average salary. And if this site were loaded on a US carrier's international roaming plan? The costs would make anyone cry. (See [how much your site costs to download](https://whatdoesmysitecost.com/).)
+And it isn't just the time taken to download that is a major problem. In some regions, internet connections are billed per megabyte, making large downloads prohibitively expensive. Our example 22.6 MB CNN.com experience would cost a significant portion of a mobile data user's daily allowance or even lead to high charges in certain international roaming plans.(See [how much your site costs to download](https://whatdoesmysitecost.com/).)
### Improve conversion rates
diff --git a/files/en-us/learn/server-side/django/authentication/index.md b/files/en-us/learn/server-side/django/authentication/index.md
index 17e03eb1d6f4385..6bd650be9f36ddf 100644
--- a/files/en-us/learn/server-side/django/authentication/index.md
+++ b/files/en-us/learn/server-side/django/authentication/index.md
@@ -453,7 +453,7 @@ Open the base template (**/django-locallibrary-tutorial/catalog/templates/base_g
As you can see, we use `if` / `else` / `endif` template tags to conditionally display text based on whether `\{{ user.is_authenticated }}` is true. If the user is authenticated then we know that we have a valid user, so we call `\{{ user.get_username }}` to display their name.
-We create the login link URL using the `url` template tag and the name of the `login` URL configuration. Note also how we have appended `?next=\{{ request.path }}` to the end of the URL. What this does is add a URL parameter `next` containing the address (URL) of the _current_ page, to the end of the linked URL. After the user has successfully logged in, the view will use this "`next`" value to redirect the user back to the page where they first clicked the login link.
+We create the login link URL using the `url` template tag and the name of the `login` URL configuration. Note also how we have appended `?next=\{{ request.path }}` to the end of the URL. What this does is add a URL parameter `next` containing the address (URL) of the _current_ page, to the end of the linked URL. After the user has successfully logged in, the view will use this `next` value to redirect the user back to the page where they first clicked the login link.
The logout template code is different, because from Django 5 to logout you must `POST` to the `admin:logout` URL, using a form with a button.
By default this would render as a button, but you can style the button to display as a link.
@@ -497,7 +497,7 @@ class MyView(LoginRequiredMixin, View):
# …
```
-This has exactly the same redirect behavior as the `login_required` decorator. You can also specify an alternative location to redirect the user to if they are not authenticated (`login_url`), and a URL parameter name instead of "`next`" to insert the current absolute path (`redirect_field_name`).
+This has exactly the same redirect behavior as the `login_required` decorator. You can also specify an alternative location to redirect the user to if they are not authenticated (`login_url`), and a URL parameter name instead of `next` to insert the current absolute path (`redirect_field_name`).
```python
class MyView(LoginRequiredMixin, View):
@@ -707,7 +707,7 @@ Testing on permissions in views and templates is then very similar to testing on
### Models
-Defining permissions is done on the model "`class Meta`" section, using the `permissions` field.
+Defining permissions is done on the model `class Meta` section, using the `permissions` field.
You can specify as many permissions as you need in a tuple, each permission itself being defined in a nested tuple containing the permission name and permission display value.
For example, we might define a permission to allow a user to mark that a book has been returned as shown:
diff --git a/files/en-us/learn/server-side/django/deployment/index.md b/files/en-us/learn/server-side/django/deployment/index.md
index b3ff3e858b51bf4..a3f17c3a4d35273 100644
--- a/files/en-us/learn/server-side/django/deployment/index.md
+++ b/files/en-us/learn/server-side/django/deployment/index.md
@@ -85,7 +85,7 @@ Some of the things to consider when choosing a host:
The good news when you're starting out is that there are quite a few sites that provide "free" computing environments that are intended for evaluation and testing.
These are usually fairly resource constrained/limited environments, and you do need to be aware that they may expire after some introductory period or have other constraints.
They are however great for testing low traffic sites in a hosted environment, and can provide an easy migration to paying for more resources when your site gets busier.
-Popular choices in this category include [Vultr Cloud Compute](https://blogs.vultr.com/new-free-tier-plan), [Python Anywhere](https://www.pythonanywhere.com/), [Amazon Web Services](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/billing-free-tier.html), [Microsoft Azure](https://azure.microsoft.com/pricing/details/app-service/), and so on.
+Popular choices in this category include [Vultr Cloud Compute](https://blogs.vultr.com/new-free-tier-plan), [Python Anywhere](https://www.pythonanywhere.com/), [Amazon Web Services](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/billing-free-tier.html), [Microsoft Azure](https://azure.microsoft.com/en-us/pricing/details/app-service/linux/), and so on.
Most providers also offer a "basic" tier that is intended for small production sites, and which provide more useful levels of computing power and fewer limitations.
[Railway](https://railway.app/), [Heroku](https://www.heroku.com/), and [Digital Ocean](https://www.digitalocean.com/) are examples of popular hosting providers that have a relatively inexpensive basic computing tier (in the $5 to $10 USD per month range).
diff --git a/files/en-us/learn/server-side/django/forms/index.md b/files/en-us/learn/server-side/django/forms/index.md
index 274f666ff780605..494663b0d904187 100644
--- a/files/en-us/learn/server-side/django/forms/index.md
+++ b/files/en-us/learn/server-side/django/forms/index.md
@@ -235,7 +235,7 @@ urlpatterns += [
The URL configuration will redirect URLs with the format **/catalog/book/_\
_/renew/** to the function named `renew_book_librarian()` in **views.py**, and send the `BookInstance` id as the parameter named `pk`. The pattern only matches if `pk` is a correctly formatted `uuid`.
> [!NOTE]
-> We can name our captured URL data "`pk`" anything we like, because we have complete control over the view function (we're not using a generic detail view class that expects parameters with a certain name). However, `pk` short for "primary key", is a reasonable convention to use!
+> We can name our captured URL data anything we like, because we have complete control over the view function (we're not using a generic detail view class that expects parameters with a certain name). However, `pk` short for "primary key", is a reasonable convention to use!
### View
@@ -351,9 +351,9 @@ If the form is valid, then we can start to use the data, accessing it through th
> [!WARNING]
> While you can also access the form data directly through the request (for example, `request.POST['renewal_date']` or `request.GET['renewal_date']` if using a GET request), this is NOT recommended. The cleaned data is sanitized, validated, and converted into Python-friendly types.
-The final step in the form-handling part of the view is to redirect to another page, usually a "success" page. In this case, we use `HttpResponseRedirect` and `reverse()` to redirect to the view named `'all-borrowed'` (this was created as the "challenge" in [Django Tutorial Part 8: User authentication and permissions](/en-US/docs/Learn/Server-side/Django/Authentication#challenge_yourself)). If you didn't create that page consider redirecting to the home page at URL '`/`').
+The final step in the form-handling part of the view is to redirect to another page, usually a "success" page. In this case, we use `HttpResponseRedirect` and `reverse()` to redirect to the view named `'all-borrowed'` (this was created as the "challenge" in [Django Tutorial Part 8: User authentication and permissions](/en-US/docs/Learn/Server-side/Django/Authentication#challenge_yourself)). If you didn't create that page consider redirecting to the home page at URL `/`).
-That's everything needed for the form handling itself, but we still need to restrict access to the view to just logged-in librarians who have permission to renew books. We use `@login_required` to require that the user is logged in, and the `@permission_required` function decorator with our existing `can_mark_returned` permission to allow access (decorators are processed in order). Note that we probably should have created a new permission setting in `BookInstance` ("`can_renew`"), but we will reuse the existing one to keep the example simple.
+That's everything needed for the form handling itself, but we still need to restrict access to the view to just logged-in librarians who have permission to renew books. We use `@login_required` to require that the user is logged in, and the `@permission_required` function decorator with our existing `can_mark_returned` permission to allow access (decorators are processed in order). Note that we probably should have created a new permission setting in `BookInstance` (`can_renew`), but we will reuse the existing one to keep the example simple.
The final view is therefore as shown below. Please copy this into the bottom of **django-locallibrary-tutorial/catalog/views.py**.
@@ -427,7 +427,7 @@ Most of this will be completely familiar from previous tutorials.
We extend the base template and then redefine the content block. We are able to reference `\{{ book_instance }}` (and its variables) because it was passed into the context object in the `render()` function, and we use these to list the book title, borrower, and the original due date.
-The form code is relatively simple. First, we declare the `form` tags, specifying where the form is to be submitted (`action`) and the `method` for submitting the data (in this case an "HTTP `POST`") — if you recall the [HTML Forms](#html_forms) overview at the top of the page, an empty `action` as shown, means that the form data will be posted back to the current URL of the page (which is what we want). Inside the tags, we define the `submit` input, which a user can press to submit the data. The `{% csrf_token %}` added just inside the form tags is part of Django's cross-site forgery protection.
+The form code is relatively simple. First, we declare the `form` tags, specifying where the form is to be submitted (`action`) and the `method` for submitting the data (in this case a `POST`) — if you recall the [HTML Forms](#html_forms) overview at the top of the page, an empty `action` as shown, means that the form data will be posted back to the current URL of the page (which is what we want). Inside the tags, we define the `submit` input, which a user can press to submit the data. The `{% csrf_token %}` added just inside the form tags is part of Django's cross-site forgery protection.
> [!NOTE]
> Add the `{% csrf_token %}` to every Django template you create that uses `POST` to submit data. This will reduce the chance of forms being hijacked by malicious users.
@@ -527,7 +527,7 @@ Note that this template code can only run inside the `{% for %}` loop, because t
```
> [!NOTE]
-> Remember that your test login will need to have the permission "`catalog.can_mark_returned`" in order to see the new "Renew" link added above, and to access the linked page (perhaps use your superuser account).
+> Remember that your test login will need to have the permission `catalog.can_mark_returned` in order to see the new "Renew" link added above, and to access the linked page (perhaps use your superuser account).
You can alternatively manually construct a test URL like this — `http://127.0.0.1:8000/catalog/book//renew/` (a valid `bookinstance_id` can be obtained by navigating to a book detail page in your library, and copying the `id` field).
@@ -584,7 +584,7 @@ class Meta:
```
To add validation you can use the same approach as for a normal `Form` — you define a function named `clean_()` and raise `ValidationError` exceptions for invalid values.
-The only difference with respect to our original form is that the model field is named `due_back` and not "`renewal_date`".
+The only difference with respect to our original form is that the model field is named `due_back` and not `renewal_date`.
This change is necessary since the corresponding field in `BookInstance` is called `due_back`.
```python
diff --git a/files/en-us/learn/server-side/django/generic_views/index.md b/files/en-us/learn/server-side/django/generic_views/index.md
index da14dbe2480213e..27bc98fc233d221 100644
--- a/files/en-us/learn/server-side/django/generic_views/index.md
+++ b/files/en-us/learn/server-side/django/generic_views/index.md
@@ -68,7 +68,7 @@ class BookListView(generic.ListView):
model = Book
```
-That's it! The generic view will query the database to get all records for the specified model (`Book`) then render a template located at **/django-locallibrary-tutorial/catalog/templates/catalog/book_list.html** (which we will create below). Within the template you can access the list of books with the template variable named `object_list` OR `book_list` (i.e. generically "`_list`").
+That's it! The generic view will query the database to get all records for the specified model (`Book`) then render a template located at **/django-locallibrary-tutorial/catalog/templates/catalog/book_list.html** (which we will create below). Within the template you can access the list of books with the template variable named `object_list` OR `book_list` (i.e. generically `_list`).
> [!NOTE]
> This awkward path for the template location isn't a misprint — the generic views look for templates in `/application_name/the_model_name_list.html` (`catalog/book_list.html` in this case) inside the application's `/application_name/templates/` directory (`/catalog/templates/)`.
@@ -97,7 +97,7 @@ class BookListView(generic.ListView):
return Book.objects.filter(title__icontains='war')[:5] # Get 5 books containing the title war
```
-We might also override `get_context_data()` in order to pass additional context variables to the template (e.g. the list of books is passed by default). The fragment below shows how to add a variable named "`some_data`" to the context (it would then be available as a template variable).
+We might also override `get_context_data()` in order to pass additional context variables to the template (e.g. the list of books is passed by default). The fragment below shows how to add a variable named `some_data` to the context (it would then be available as a template variable).
```python
class BookListView(generic.ListView):
@@ -428,7 +428,7 @@ class BookDetailView(generic.DetailView):
model = Book
```
-That's it! All you need to do now is create a template called **/django-locallibrary-tutorial/catalog/templates/catalog/book_detail.html**, and the view will pass it the database information for the specific `Book` record extracted by the URL mapper. Within the template you can access the book's details with the template variable named `object` OR `book` (i.e. generically "`the_model_name`").
+That's it! All you need to do now is create a template called **/django-locallibrary-tutorial/catalog/templates/catalog/book_detail.html**, and the view will pass it the database information for the specific `Book` record extracted by the URL mapper. Within the template you can access the book's details with the template variable named `object` OR `book` (i.e. generically `the_model_name`).
If you need to, you can change the template used and the name of the context object used to reference the book in the template. You can also override methods to, for example, add additional information to the context.
@@ -520,7 +520,7 @@ Though a little larger, almost everything in this template has been described pr
- We extend our base template and override the "content" block.
- We use conditional processing to determine whether or not to display specific content.
- We use `for` loops to loop through lists of objects.
-- We access the context fields using the dot notation (because we've used the detail generic view, the context is named `book`; we could also use "`object`")
+- We access the context fields using the dot notation (because we've used the detail generic view, the context is named `book`; we could also use `object`)
The first interesting thing we haven't seen before is the function `book.bookinstance_set.all()`. This method is "automagically" constructed by Django in order to return the set of `BookInstance` records associated with a particular `Book`.
@@ -583,7 +583,7 @@ Astute readers will note that the method `BookInstance.get_status_display()` tha
```
This function is automatically created because `BookInstance.status` is a [choices field](https://docs.djangoproject.com/en/5.0/ref/models/fields/#choices).
-Django automatically creates a method `get_FOO_display()` for every choices field "`Foo`" in a model, which can be used to get the current value of the field.
+Django automatically creates a method `get_foo_display()` for every choices field `foo` in a model, which can be used to get the current value of the field.
## What does it look like?
diff --git a/files/en-us/learn/server-side/django/home_page/index.md b/files/en-us/learn/server-side/django/home_page/index.md
index 4976c2b39f4c2c2..ef037b0f229945e 100644
--- a/files/en-us/learn/server-side/django/home_page/index.md
+++ b/files/en-us/learn/server-side/django/home_page/index.md
@@ -166,7 +166,7 @@ A template is a text file that defines the structure or layout of a file (such a
A Django application created using **startapp** (like the skeleton of this example) will look for templates in a subdirectory named '**templates**' of your applications. For example, in the index view that we just added, the `render()` function will expect to find the file **_index.html_** in **/django-locallibrary-tutorial/catalog/templates/** and will raise an error if the file is not present.
-You can check this by saving the previous changes and accessing `127.0.0.1:8000` in your browser - it will display a fairly intuitive error message: "`TemplateDoesNotExist at /catalog/`", and other details.
+You can check this by saving the previous changes and accessing `127.0.0.1:8000` in your browser - it will display a fairly intuitive error message: "TemplateDoesNotExist at /catalog/", and other details.
> [!NOTE]
> Based on your project's settings file, Django will look for templates in a number of places, searching in your installed applications by default. You can find out more about how Django finds templates and what template formats it supports in [the Templates section of the Django documentation](https://docs.djangoproject.com/en/5.0/topics/templates/).
@@ -324,7 +324,7 @@ return render(request, 'index.html', context=context)
#### Referencing static files in templates
-Your project is likely to use static resources, including JavaScript, CSS, and images. Because the location of these files might not be known (or might change), Django allows you to specify the location in your templates relative to the `STATIC_URL` global setting. The default skeleton website sets the value of `STATIC_URL` to '`/static/`', but you might choose to host these on a content delivery network or elsewhere.
+Your project is likely to use static resources, including JavaScript, CSS, and images. Because the location of these files might not be known (or might change), Django allows you to specify the location in your templates relative to the `STATIC_URL` global setting. The default skeleton website sets the value of `STATIC_URL` to `"/static/"`, but you might choose to host these on a content delivery network or elsewhere.
Within the template you first call the `load` template tag specifying "static" to add the template library, as shown in the code sample below. You can then use the `static` template tag and specify the relative URL to the required file.
diff --git a/files/en-us/learn/server-side/django/introduction/index.md b/files/en-us/learn/server-side/django/introduction/index.md
index 76c225d50fe22ed..26c050627ce5212 100644
--- a/files/en-us/learn/server-side/django/introduction/index.md
+++ b/files/en-us/learn/server-side/django/introduction/index.md
@@ -185,7 +185,7 @@ class Team(models.Model):
The Django model provides a simple query API for searching the associated database. This can match against a number of fields at a time using different criteria (e.g. exact, case-insensitive, greater than, etc.), and can support complex statements (for example, you can specify a search on U11 teams that have a team name that starts with "Fr" or ends with "al").
-The code snippet shows a view function (resource handler) for displaying all of our U09 teams. The `list_teams = Team.objects.filter(team_level__exact="U09")` line shows how we can use the model query API to filter for all records where the `team_level` field has exactly the text '`U09`' (note how this criteria is passed to the `filter()` function as an argument, with the field name and match type separated by a double underscore: **`team_level__exact`**).
+The code snippet shows a view function (resource handler) for displaying all of our U09 teams. The `list_teams = Team.objects.filter(team_level__exact="U09")` line shows how we can use the model query API to filter for all records where the `team_level` field has exactly the text `U09` (note how this criteria is passed to the `filter()` function as an argument, with the field name and match type separated by a double underscore: **`team_level__exact`**).
```python
## filename: views.py
@@ -199,7 +199,7 @@ def index(request):
return render(request, '/best/index.html', context)
```
-This function uses the `render()` function to create the `HttpResponse` that is sent back to the browser. This function is a _shortcut_; it creates an HTML file by combining a specified HTML template and some data to insert in the template (provided in the variable named "`context`"). In the next section we show how the template has the data inserted in it to create the HTML.
+This function uses the `render()` function to create the `HttpResponse` that is sent back to the browser. This function is a _shortcut_; it creates an HTML file by combining a specified HTML template and some data to insert in the template (provided in the variable named `context`). In the next section we show how the template has the data inserted in it to create the HTML.
### Rendering data (HTML templates)
diff --git a/files/en-us/learn/server-side/django/sessions/index.md b/files/en-us/learn/server-side/django/sessions/index.md
index beefaac5d59366f..666f88e28d4ac2f 100644
--- a/files/en-us/learn/server-side/django/sessions/index.md
+++ b/files/en-us/learn/server-side/django/sessions/index.md
@@ -66,7 +66,7 @@ This session attribute represents the specific connection to the current user (o
The `session` attribute is a dictionary-like object that you can read and write as many times as you like in your view, modifying it as wished. You can do all the normal dictionary operations, including clearing all data, testing if a key is present, looping through data, etc. Most of the time though, you'll just use the standard "dictionary" API to get and set values.
-The code fragments below show how you can get, set, and delete some data with the key "`my_car`", associated with the current session (browser).
+The code fragments below show how you can get, set, and delete some data with the key `my_car`, associated with the current session (browser).
> [!NOTE]
> One of the great things about Django is that you don't need to think about the mechanisms that tie the session to your current request in your view. If we were to use the fragments below in our view, we'd know that the information about `my_car` is associated only with the browser that sent the current request.
@@ -96,7 +96,7 @@ By default, Django only saves to the session database and sends the session cook
request.session['my_car'] = 'mini'
```
-If you're updating some information _within_ session data, then Django will not recognize that you've made a change to the session and save the data (for example, if you were to change "`wheels`" data inside your "`my_car`" data, as shown below). In this case you will need to explicitly mark the session as having been modified.
+If you're updating some information _within_ session data, then Django will not recognize that you've made a change to the session and save the data (for example, if you were to change `wheels` data inside your `my_car` data, as shown below). In this case you will need to explicitly mark the session as having been modified.
```python
# Session object not directly modified, only data within the session. Session changes not saved!
diff --git a/files/en-us/learn/server-side/django/web_application_security/index.md b/files/en-us/learn/server-side/django/web_application_security/index.md
index 4ef23ce8dca5928..da38178c8669c8b 100644
--- a/files/en-us/learn/server-side/django/web_application_security/index.md
+++ b/files/en-us/learn/server-side/django/web_application_security/index.md
@@ -183,8 +183,8 @@ The next and final step in this module about Django is to complete the [assessme
## See also
+- [Security on the web](/en-US/docs/Web/Security)
+- [Practical security implementation guides](/en-US/docs/Web/Security/Practical_implementation_guides)
- [Security in Django](https://docs.djangoproject.com/en/5.0/topics/security/) (Django docs)
-- [Security on the web](/en-US/docs/Web/Security) (MDN)
-- [Practical security implementation guides](/en-US/docs/Web/Security/Practical_implementation_guides) (MDN)
{{PreviousMenuNext("Learn/Server-side/Django/Deployment", "Learn/Server-side/Django/django_assessment_blog", "Learn/Server-side/Django")}}
diff --git a/files/en-us/learn/server-side/express_nodejs/deployment/index.md b/files/en-us/learn/server-side/express_nodejs/deployment/index.md
index 85818d13edecdf4..1b51bdc81a6adea 100644
--- a/files/en-us/learn/server-side/express_nodejs/deployment/index.md
+++ b/files/en-us/learn/server-side/express_nodejs/deployment/index.md
@@ -83,7 +83,7 @@ Some of the things to consider when choosing a host:
The good news when you're starting out is that there are quite a few sites that provide "free" computing environments that are intended for evaluation and testing.
These are usually fairly resource constrained/limited environments, and you do need to be aware that they may expire after some introductory period or have other constraints.
They are however great for testing low-traffic sites in a hosted environment, and can provide an easy migration to paying for more resources when your site gets busier.
-Popular choices in this category include [Glitch](https://glitch.com/), [Python Anywhere](https://www.pythonanywhere.com/), [Amazon Web Services](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/billing-free-tier.html), [Microsoft Azure](https://azure.microsoft.com/pricing/details/app-service/), etc.
+Popular choices in this category include [Glitch](https://glitch.com/), [Python Anywhere](https://www.pythonanywhere.com/), [Amazon Web Services](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/billing-free-tier.html), [Microsoft Azure](https://azure.microsoft.com/en-us/pricing/details/app-service/linux/), etc.
Most providers also offer a "basic" or "hobby" tier that is intended for small production sites, and which provide more useful levels of computing power and fewer limitations.
[Railway](https://railway.app/), [Heroku](https://www.heroku.com/), [Digital Ocean](https://www.digitalocean.com/) and [Python Anywhere](https://www.pythonanywhere.com/) are examples of popular hosting providers that have a relatively inexpensive basic computing tier (in the $5 to $10 USD per month range).
diff --git a/files/en-us/learn/server-side/express_nodejs/displaying_data/home_page/index.md b/files/en-us/learn/server-side/express_nodejs/displaying_data/home_page/index.md
index bca178973cecaa3..f747ed60c562433 100644
--- a/files/en-us/learn/server-side/express_nodejs/displaying_data/home_page/index.md
+++ b/files/en-us/learn/server-side/express_nodejs/displaying_data/home_page/index.md
@@ -130,7 +130,7 @@ block content
li #[strong Genres:] !{genre_count}
```
-The view is straightforward. We extend the **layout.pug** base template, overriding the `block` named '**content**'. The first `h1` heading will be the escaped text for the `title` variable that was passed into the `render()` function—note the use of the '`h1=`' so that the following text is treated as a JavaScript expression. We then include a paragraph introducing the LocalLibrary.
+The view is straightforward. We extend the **layout.pug** base template, overriding the `block` named '**content**'. The first `h1` heading will be the escaped text for the `title` variable that was passed into the `render()` function—note the use of the `h1=` so that the following text is treated as a JavaScript expression. We then include a paragraph introducing the LocalLibrary.
Under the _Dynamic content_ heading we list the number of copies of each model.
Note that the template values for the data are the keys that were specified when `render()` was called in the route handler function.
diff --git a/files/en-us/learn/server-side/express_nodejs/introduction/index.md b/files/en-us/learn/server-side/express_nodejs/introduction/index.md
index eff98e61c1fbfc5..c64cce05f780a99 100644
--- a/files/en-us/learn/server-side/express_nodejs/introduction/index.md
+++ b/files/en-us/learn/server-side/express_nodejs/introduction/index.md
@@ -431,7 +431,7 @@ These can return any content required, but must be called after all other `app.u
Express comes with a built-in error handler, which takes care of any remaining errors that might be encountered in the app. This default error-handling middleware function is added at the end of the middleware function stack. If you pass an error to `next()` and you do not handle it in an error handler, it will be handled by the built-in error handler; the error will be written to the client with the stack trace.
> [!NOTE]
-> The stack trace is not included in the production environment. To run it in production mode you need to set the environment variable `NODE_ENV` to '`production'`.
+> The stack trace is not included in the production environment. To run it in production mode you need to set the environment variable `NODE_ENV` to `"production"`.
> [!NOTE]
> HTTP404 and other "error" status codes are not treated as errors. If you want to handle these, you can add a middleware function to do so. For more information see the [FAQ](https://expressjs.com/en/starter/faq.html#how-do-i-handle-404-responses).
diff --git a/files/en-us/learn/server-side/express_nodejs/skeleton_website/index.md b/files/en-us/learn/server-side/express_nodejs/skeleton_website/index.md
index 14df7ac3f2731b9..53c9d67918ef94e 100644
--- a/files/en-us/learn/server-side/express_nodejs/skeleton_website/index.md
+++ b/files/en-us/learn/server-side/express_nodejs/skeleton_website/index.md
@@ -284,7 +284,7 @@ We can now start the server in almost exactly the same way as previously, but us
> [!NOTE]
> Now if you edit any file in the project the server will restart (or you can restart it by typing `rs` on the command prompt at any time). You will still need to reload the browser to refresh the page.
>
-> We now have to call "`npm run `" rather than just `npm start`, because "start" is actually an npm command that is mapped to the named script. We could have replaced the command in the _start_ script but we only want to use _nodemon_ during development, so it makes sense to create a new script command.
+> We now have to call `npm run ` rather than just `npm start`, because "start" is actually an npm command that is mapped to the named script. We could have replaced the command in the _start_ script but we only want to use _nodemon_ during development, so it makes sense to create a new script command.
>
> The `serverstart` command added to the scripts in the **package.json** above is a very good example. Using this approach means you no longer have to type a long command to start the server. Note that the particular command added to the script works for macOS or Linux only.
@@ -462,7 +462,7 @@ const usersRouter = require("./routes/users");
> [!NOTE]
> At this point, we have just _imported_ the module; we haven't actually used its routes yet (this happens just a little bit further down the file).
-Next, we create the `app` object using our imported _express_ module, and then use it to set up the view (template) engine. There are two parts to setting up the engine. First, we set the '`views`' value to specify the folder where the templates will be stored (in this case the subfolder **/views**). Then we set the '`view engine`' value to specify the template library (in this case "pug").
+Next, we create the `app` object using our imported _express_ module, and then use it to set up the view (template) engine. There are two parts to setting up the engine. First, we set the `"views"` value to specify the folder where the templates will be stored (in this case the subfolder **/views**). Then we set the `"view engine"` value to specify the template library (in this case "pug").
```js
const app = express();
@@ -493,7 +493,7 @@ app.use("/users", usersRouter);
```
> [!NOTE]
-> The paths specified above (`'/'` and '`/users'`) are treated as a prefix to routes defined in the imported files.
+> The paths specified above (`"/"` and `"/users"`) are treated as a prefix to routes defined in the imported files.
> So for example, if the imported **users** module defines a route for `/profile`, you would access that route at `/users/profile`. We'll talk more about routes in a later article.
The last middleware in the file adds handler methods for errors and HTTP 404 responses.
@@ -540,12 +540,12 @@ router.get("/", (req, res, next) => {
module.exports = router;
```
-The route defines a callback that will be invoked whenever an HTTP `GET` request with the correct pattern is detected. The matching pattern is the route specified when the module is imported ('`/users`') plus whatever is defined in this file ('`/`'). In other words, this route will be used when a URL of `/users/` is received.
+The route defines a callback that will be invoked whenever an HTTP `GET` request with the correct pattern is detected. The matching pattern is the route specified when the module is imported (`"/users"`) plus whatever is defined in this file (`"/"`). In other words, this route will be used when a URL of `/users/` is received.
> [!NOTE]
> Try this out by running the server with node and visiting the URL in your browser: `http://localhost:3000/users/`. You should see a message: 'respond with a resource'.
-One thing of interest above is that the callback function has the third argument '`next`', and is hence a middleware function rather than a simple route callback. While the code doesn't currently use the `next` argument, it may be useful in the future if you want to add multiple route handlers to the `'/'` route path.
+One thing of interest above is that the callback function has the third argument `next`, and is hence a middleware function rather than a simple route callback. While the code doesn't currently use the `next` argument, it may be useful in the future if you want to add multiple route handlers to the `'/'` route path.
### Views (templates)
diff --git a/files/en-us/learn/server-side/first_steps/client-server_overview/index.md b/files/en-us/learn/server-side/first_steps/client-server_overview/index.md
index 0e92783c4e6e174..2730657d1a18fbd 100644
--- a/files/en-us/learn/server-side/first_steps/client-server_overview/index.md
+++ b/files/en-us/learn/server-side/first_steps/client-server_overview/index.md
@@ -50,9 +50,9 @@ This request includes:
- `POST` data. `POST` requests add new resources, the data for which is encoded within the request body.
- Client-side cookies. Cookies contain session data about the client, including keys that the server can use to determine their login status and permissions/accesses to resources.
-Web servers wait for client request messages, process them when they arrive, and reply to the web browser with an HTTP Response message. The response contains an [HTTP Response status code](/en-US/docs/Web/HTTP/Status) indicating whether or not the request succeeded (e.g. "`200 OK`" for success, "`404 Not Found`" if the resource cannot be found, "`403 Forbidden`" if the user isn't authorized to see the resource, etc.). The body of a successful response to a `GET` request would contain the requested resource.
+Web servers wait for client request messages, process them when they arrive, and reply to the web browser with an HTTP response message. The response contains an [HTTP Response status code](/en-US/docs/Web/HTTP/Status) indicating whether or not the request succeeded (e.g., {{HTTPStatus("200", "200 OK")}} for success, {{HTTPStatus("404", "404 Not Found")}} if the resource cannot be found, {{HTTPStatus("403", "403 Forbidden")}} if the user isn't authorized to see the resource, etc.). The body of the response to a successful `GET` request contains the requested resource.
-When an HTML page is returned it is rendered by the web browser. As part of processing, the browser may discover links to other resources (e.g. an HTML page usually references JavaScript and CSS files), and will send separate HTTP Requests to download these files.
+When an HTML page is returned, it is rendered by the web browser. As part of processing, the browser may discover links to other resources (e.g. an HTML page usually references JavaScript and CSS files), and will send separate HTTP Requests to download these files.
Both static and dynamic websites (discussed in the following sections) use exactly the same communication protocol/patterns.
@@ -171,7 +171,7 @@ The main difference is that the URL doesn't have any parameters. As you can see,
#### The response
-The response from the request is shown below. The status code of "`302 Found`" tells the browser that the post succeeded, and that it must issue a second HTTP request to load the page specified in the `Location` field. The information is otherwise similar to that for the response to a `GET` request.
+The response from the request is shown below. The status code of `302 Found` tells the browser that the post succeeded, and that it must issue a second HTTP request to load the page specified in the `Location` field. The information is otherwise similar to that for the response to a `GET` request.
```http
HTTP/1.1 302 FOUND
@@ -203,7 +203,7 @@ Let's recap on how this works, by looking again at the static site architecture
![A simplified diagram of a static web server.](basic_static_app_server.png)
-When a user wants to navigate to a page, the browser sends an HTTP `GET` request specifying the URL of its HTML page. The server retrieves the requested document from its file system and returns an HTTP response containing the document and an [HTTP Response status code](/en-US/docs/Web/HTTP/Status) of "`200 OK`" (indicating success). The server might return a different status code, for example "`404 Not Found`" if the file is not present on the server, or "`301 Moved Permanently`" if the file exists but has been redirected to a different location.
+When a user wants to navigate to a page, the browser sends an HTTP `GET` request specifying the URL of its HTML page. The server retrieves the requested document from its file system and returns an HTTP response containing the document and an [HTTP Response status code](/en-US/docs/Web/HTTP/Status) of `200 OK` (indicating success). The server might return a different status code, for example `404 Not Found` if the file is not present on the server, or `301 Moved Permanently` if the file exists but has been redirected to a different location.
The server for a static site will only ever need to process GET requests, because the server doesn't store any modifiable data. It also doesn't change its responses based on HTTP Request data (e.g. URL parameters or cookies).
@@ -255,7 +255,7 @@ Server-side web frameworks make writing code to handle the operations described
One of the most important operations they perform is providing simple mechanisms to map URLs for different resources/pages to specific handler functions. This makes it easier to keep the code associated with each type of resource separate. It also has benefits in terms of maintenance, because you can change the URL used to deliver a particular feature in one place, without having to change the handler function.
-For example, consider the following Django (Python) code that maps two URL patterns to two view functions. The first pattern ensures that an HTTP request with a resource URL of `/best` will be passed to a function named `index()` in the `views` module. A request that has the pattern "`/best/junior`", will instead be passed to the `junior()` view function.
+For example, consider the following Django (Python) code that maps two URL patterns to two view functions. The first pattern ensures that an HTTP request with a resource URL of `/best` will be passed to a function named `index()` in the `views` module. A request that has the pattern `/best/junior`, will instead be passed to the `junior()` view function.
```python
# file: best/urls.py
diff --git a/files/en-us/learn/server-side/first_steps/introduction/index.md b/files/en-us/learn/server-side/first_steps/introduction/index.md
index c8ac2482c5b08b0..c9ac675fc6c2d81 100644
--- a/files/en-us/learn/server-side/first_steps/introduction/index.md
+++ b/files/en-us/learn/server-side/first_steps/introduction/index.md
@@ -54,7 +54,7 @@ The server retrieves the requested document from its file system and returns an
### Dynamic sites
-A dynamic website is one where some of the response content is generated _dynamically_, only when needed. On a dynamic website HTML pages are normally created by inserting data from a database into placeholders in HTML templates (this is a much more efficient way of storing large amounts of content than using static websites).
+A dynamic website is one where some of the response content is generated _dynamically_, only when needed. On a dynamic website, HTML pages are normally created by inserting data from a database into placeholders in HTML templates (this is a much more efficient way of storing large amounts of content than using static websites).
A dynamic site can return different data for a URL based on information provided by the user or stored preferences and can perform other operations as part of returning a response (e.g. sending notifications).
diff --git a/files/en-us/learn/server-side/first_steps/website_security/index.md b/files/en-us/learn/server-side/first_steps/website_security/index.md
index a0d7817d8f91216..fe9f34f9d2de697 100644
--- a/files/en-us/learn/server-side/first_steps/website_security/index.md
+++ b/files/en-us/learn/server-side/first_steps/website_security/index.md
@@ -140,6 +140,10 @@ A number of other concrete steps you can take are:
- Keep track of the most popular threats (the [current OWASP list is here](https://owasp.org/www-project-top-ten/)) and address the most common vulnerabilities first.
- Use [vulnerability scanning tools](https://owasp.org/www-community/Vulnerability_Scanning_Tools) to perform automated security testing on your site. Later on, your very successful website may also find bugs by offering a bug bounty [like Mozilla does here](https://www.mozilla.org/en-US/security/bug-bounty/faq-webapp/).
- Only store and display data that you need. For example, if your users must store sensitive information like credit card details, only display enough of the card number that it can be identified by the user, and not enough that it can be copied by an attacker and used on another site. The most common pattern at this time is to only display the last 4 digits of a credit card number.
+- Keep software up-to-date.
+ Most servers have regular security updates that fix or mitigate known vulnerabilities.
+ If possible, schedule regular automated updates, and ideally, schedule updates during times when your website has the lowest amount of traffic.
+ It's best to back up your data before updating and test new software versions to make sure there's no compatibility issues on your server.
Web frameworks can help mitigate many of the more common vulnerabilities.
diff --git a/files/en-us/learn/tools_and_testing/client-side_javascript_frameworks/react_accessibility/index.md b/files/en-us/learn/tools_and_testing/client-side_javascript_frameworks/react_accessibility/index.md
index 26653ba8e9f4301..81c29b3516c56d3 100644
--- a/files/en-us/learn/tools_and_testing/client-side_javascript_frameworks/react_accessibility/index.md
+++ b/files/en-us/learn/tools_and_testing/client-side_javascript_frameworks/react_accessibility/index.md
@@ -118,7 +118,7 @@ Doing this will populate our `editFieldRef` and `editButtonRef` with references
console.log(editButtonRef.current);
```
-You'll see that the value of `editButtonRef.current` is `null` when the component first renders, but if you click an "Edit" button, it will log the ` ` element to the console. This is because the ref is populated only after the component renders, and clicking the "Edit" button causes the component to re-render. Be sure to delete this log before moving on.
+You'll see that the value of `editButtonRef.current` is `null` when the component first renders, but if you click an "Edit" button, it will log the `` element to the console. This is because the ref is populated only after the component renders, and clicking the "Edit" button causes the component to re-render. Be sure to delete this log before moving on.
> [!NOTE]
> Your logs will appear 6 times because we have 3 instances of ` ` in our app and React renders our components twice in development.
diff --git a/files/en-us/learn/tools_and_testing/client-side_javascript_frameworks/react_resources/index.md b/files/en-us/learn/tools_and_testing/client-side_javascript_frameworks/react_resources/index.md
index 90d25d8f9f7b31f..54c84181637ab5e 100644
--- a/files/en-us/learn/tools_and_testing/client-side_javascript_frameworks/react_resources/index.md
+++ b/files/en-us/learn/tools_and_testing/client-side_javascript_frameworks/react_resources/index.md
@@ -99,6 +99,6 @@ While routing is traditionally handled by a server and not an application on the
[React Router](https://reactrouter.com/) is the most popular and most robust client-side routing library for React. It allows developers to define the routes of their application, and associate components with those routes . It also provides a number of useful hooks and components for managing the browser's location and history.
> [!NOTE]
-> Client-side routing can make your application feel fast, but it poses a number of accessibility problems, especially for people who rely on assistive techology. You can read more about this in Marcy Sutton's article, ["The Implications of Client-Side Routing"](https://testingaccessibility.com/implications-of-client-side-routing).
+> Client-side routing can make your application feel fast, but it poses a number of accessibility problems, especially for people who rely on assistive technology. You can read more about this in Marcy Sutton's article, ["The Implications of Client-Side Routing"](https://testingaccessibility.com/implications-of-client-side-routing).
{{PreviousMenuNext("Learn/Tools_and_testing/Client-side_JavaScript_frameworks/React_accessibility","Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Ember_getting_started", "Learn/Tools_and_testing/Client-side_JavaScript_frameworks")}}
diff --git a/files/en-us/learn/tools_and_testing/client-side_javascript_frameworks/vue_getting_started/index.md b/files/en-us/learn/tools_and_testing/client-side_javascript_frameworks/vue_getting_started/index.md
index 46aec98b139c6d6..0ce93a87c05a551 100644
--- a/files/en-us/learn/tools_and_testing/client-side_javascript_frameworks/vue_getting_started/index.md
+++ b/files/en-us/learn/tools_and_testing/client-side_javascript_frameworks/vue_getting_started/index.md
@@ -99,7 +99,7 @@ We'll step through the options in the initialization steps below.
To explore various features of Vue, we will be building up a sample todo list app. We'll begin by using `create-vue` to build a new scaffold for our app.
In terminal, `cd` to where you'd like to create your sample app, then run `npm create vue@latest` (or `yarn create vue@latest` if you prefer Yarn).
-The interactive tool let's you choose some options and you can procees by pressing Enter .
+The interactive tool let's you choose some options and you can proceed by pressing Enter .
For this project, we'll use the following configuration:
```plain
diff --git a/files/en-us/learn/tools_and_testing/cross_browser_testing/accessibility/index.md b/files/en-us/learn/tools_and_testing/cross_browser_testing/accessibility/index.md
index 528c70d9259f1e4..761e6c73c6b7aee 100644
--- a/files/en-us/learn/tools_and_testing/cross_browser_testing/accessibility/index.md
+++ b/files/en-us/learn/tools_and_testing/cross_browser_testing/accessibility/index.md
@@ -134,7 +134,7 @@ You can then press Enter/Return to follow a focused link or press a button (we'v
Note that different browsers may have different keyboard control options available. Most modern browsers follow the tab pattern described above (you can also do Shift + Tab to move backwards through the focusable elements), but some browsers have their own idiosyncrasies:
-- Safari on Mac doesn't allow you to tab through links by default; to enable this, open _System Settings_, scroll down to _Keyboard_, and enable _Keyboard navigation_. If you're using an older version of macOS, see [Use your keyboard like a mouse with Mac](https://support.apple.com/en-is/guide/mac-help/mchlp1399/mac) on Apple's macOS User Guide.
+- Safari on Mac doesn't allow you to tab through links by default; to enable this, open _System Settings_, scroll down to _Keyboard_, and enable _Keyboard navigation_. If you're using an older version of macOS, see [Use your keyboard like a mouse with Mac](https://support.apple.com/guide/mac-help/use-your-keyboard-like-a-mouse-mh27469/mac) on Apple's macOS User Guide.
> [!WARNING]
> You should perform this kind of test/review on any new page you write — make sure that functionality can be accessed by the keyboard, and that the tab order provides a sensible navigation path through the document.
diff --git a/files/en-us/learn/tools_and_testing/understanding_client-side_tools/introducing_complete_toolchain/index.md b/files/en-us/learn/tools_and_testing/understanding_client-side_tools/introducing_complete_toolchain/index.md
index 6c86b0bcd6194ec..91f1515e7b25439 100644
--- a/files/en-us/learn/tools_and_testing/understanding_client-side_tools/introducing_complete_toolchain/index.md
+++ b/files/en-us/learn/tools_and_testing/understanding_client-side_tools/introducing_complete_toolchain/index.md
@@ -229,7 +229,7 @@ ESLint is installed via npm, so as per discussions in Chapter 2, you have the ch
npm install --save-dev eslint@8 @eslint/js globals
```
-> **Note:** `esling@8` installs the version 8 of ESLint, while the latest is v9. This is because `eslint-plugin-react`, which we will use later, [does not support v9 yet](https://github.com/jsx-eslint/eslint-plugin-react/issues/3699).
+> **Note:** `eslint@8` installs the version 8 of ESLint, while the latest is v9. This is because `eslint-plugin-react`, which we will use later, [does not support v9 yet](https://github.com/jsx-eslint/eslint-plugin-react/issues/3699).
The `@eslint/js` package provides predefined ESLint configuration, while the `globals` package provides a list of known global names in each environment. We will use them later in the configuration. Out of the box, ESLint is going to complain that it can't find the configuration file if you run it with `npx eslint`:
diff --git a/files/en-us/mdn/writing_guidelines/page_structures/syntax_sections/index.md b/files/en-us/mdn/writing_guidelines/page_structures/syntax_sections/index.md
index 4de9608b0eb941e..d05bd6f85bc1318 100644
--- a/files/en-us/mdn/writing_guidelines/page_structures/syntax_sections/index.md
+++ b/files/en-us/mdn/writing_guidelines/page_structures/syntax_sections/index.md
@@ -105,7 +105,7 @@ new Date(year, monthIndex, day, hours, minutes, seconds, milliseconds)
Formal syntax notation (using [BNF](https://en.wikipedia.org/wiki/Backus%E2%80%93Naur_form)) should not be used in the Syntax section — instead use the expanded multiple-line format [described above](#multiple_linesoptional_parameters).
-While the formal notation provides a concise mechanism for describing complex syntax, it is not familiar to many developers, and can _conflict_ with valid syntax for particular programming languages. For example, "`[ ]`" indicates both an "optional parameter" and a JavaScript {{jsxref("Array")}}. You can see this in the formal syntax for {{jsxref("Array.prototype.slice()")}} below:
+While the formal notation provides a concise mechanism for describing complex syntax, it is not familiar to many developers, and can _conflict_ with valid syntax for particular programming languages. For example, `[ ]` indicates both an "optional parameter" and a JavaScript {{jsxref("Array")}}. You can see this in the formal syntax for {{jsxref("Array.prototype.slice()")}} below:
```js-nolint
arr.slice([begin[, end]])
diff --git a/files/en-us/mdn/writing_guidelines/writing_style_guide/index.md b/files/en-us/mdn/writing_guidelines/writing_style_guide/index.md
index 050b2f65de20026..96287470e062c9c 100644
--- a/files/en-us/mdn/writing_guidelines/writing_style_guide/index.md
+++ b/files/en-us/mdn/writing_guidelines/writing_style_guide/index.md
@@ -365,7 +365,7 @@ Compound words should be hyphenated only when the last letter of the prefix is a
Use American-English spelling.
In general, use the first entry at [Dictionary.com](https://www.dictionary.com/), unless that entry is listed as a variant spelling or as being primarily used in a non-American form of English.
-For example, if you [look up "behaviour"](https://www.dictionary.com/browse/behaviour)(with an additional _u_ added to the American standard form), you find the phrase "Chiefly British" followed by a link to the American standard form, ["behavior"](https://www.dictionary.com/browse/behavior).
+For example, if you [look up "behaviour"](https://www.dictionary.com/browse/behaviour) (with an additional _u_ added to the American standard form), you find the phrase "Chiefly British" followed by a link to the American standard form, ["behavior"](https://www.dictionary.com/browse/behavior).
Do not use variant spelling.
- **Correct**: localize, behavior, color
diff --git a/files/en-us/mozilla/add-ons/index.md b/files/en-us/mozilla/add-ons/index.md
index 00117e3e7e786cb..63728b53eda0a87 100644
--- a/files/en-us/mozilla/add-ons/index.md
+++ b/files/en-us/mozilla/add-ons/index.md
@@ -38,12 +38,6 @@ The [Firefox Extension Workshop](https://extensionworkshop.com) can help you dev
In 2020, Mozilla will release a new Firefox for Android experience. This new, high-performance browser for Android has been rebuilt from the ground up using GeckoView, Mozilla's mobile browser engine. We are currently building support for the WebExtensions API on GeckoView.
-### Migrate an existing extension
-
-If you maintain a legacy extension, such as an XUL overlay, bootstrapped, or Add-on SDK-based extension, you can still port it to use WebExtension APIs. There are some [porting resources on Firefox Extension Workshop](https://extensionworkshop.com/documentation/develop/porting-a-legacy-firefox-extension/), our site for Firefox-specific development resources.
-
-For more information about transition support, please visit our [wiki page.](https://wiki.mozilla.org/Add-ons/developer/communication)
-
## Publishing add-ons
[Addons.mozilla.org](https://addons.mozilla.org), commonly known as "AMO," is Mozilla's official site for developers to list add-ons, and for users to discover them. By uploading your add-on to AMO, you can participate in our community of users and creators and find an audience for your add-on.
diff --git a/files/en-us/mozilla/add-ons/webextensions/api/extension/getbackgroundpage/index.md b/files/en-us/mozilla/add-ons/webextensions/api/extension/getbackgroundpage/index.md
index 81c1fb2adfc7fbb..e98b8a4008660a8 100644
--- a/files/en-us/mozilla/add-ons/webextensions/api/extension/getbackgroundpage/index.md
+++ b/files/en-us/mozilla/add-ons/webextensions/api/extension/getbackgroundpage/index.md
@@ -40,7 +40,7 @@ function foo() {
}
```
-A script running in a [popup](/en-US/docs/Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#browser_actions_2) can call this function directly like this:
+A script running in a [popup](/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Popups) can call this function directly like this:
```js
// popup.js
diff --git a/files/en-us/mozilla/add-ons/webextensions/api/identity/index.md b/files/en-us/mozilla/add-ons/webextensions/api/identity/index.md
index bf44d2d350f7571..e5d7a63d062c515 100644
--- a/files/en-us/mozilla/add-ons/webextensions/api/identity/index.md
+++ b/files/en-us/mozilla/add-ons/webextensions/api/identity/index.md
@@ -12,7 +12,7 @@ Use the identity API to get an [OAuth2](https://oauth.net/2/) authorization code
OAuth2 flows vary between service provider so, to use this API with a particular service provider, consult their documentation. For example:
- [Google](https://developers.google.com/identity/protocols/oauth2/javascript-implicit-flow)
-- [GitHub](https://docs.github.com/en/developers/apps/building-oauth-apps/authorizing-oauth-apps)
+- [GitHub](https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/authorizing-oauth-apps)
The identity API provides the {{WebExtAPIRef("identity.launchWebAuthFlow()")}} function. This authenticates the user with the service, if necessary, and asks the user to authorize the extension to access data, if necessary. The function completes with an access token or authorization code, depending on the provider.
diff --git a/files/en-us/mozilla/add-ons/webextensions/api/management/install/index.md b/files/en-us/mozilla/add-ons/webextensions/api/management/install/index.md
index c8fcdab9668f4b9..ffb294b12254ac2 100644
--- a/files/en-us/mozilla/add-ons/webextensions/api/management/install/index.md
+++ b/files/en-us/mozilla/add-ons/webextensions/api/management/install/index.md
@@ -40,10 +40,10 @@ Cycle through a list of themes:
"use strict";
const themes = [
- "https://addons.mozilla.org/firefox/downloads/file/1063216/insightscare-1.0-fx.xpi",
- "https://addons.mozilla.org/firefox/downloads/file/1063419/orange_roses-1.0-fx.xpi",
- "https://addons.mozilla.org/firefox/downloads/file/1062647/sticktoyourguns-2.0-fx.xpi",
- "https://addons.mozilla.org/firefox/downloads/file/0/bad_url.xpi",
+ "https://addons.mozilla.org/en-US/firefox/downloads/file/1063216/insightscare-1.0-fx.xpi",
+ "https://addons.mozilla.org/en-US/firefox/downloads/file/1063419/orange_roses-1.0-fx.xpi",
+ "https://addons.mozilla.org/en-US/firefox/downloads/file/1062647/sticktoyourguns-2.0-fx.xpi",
+ "https://addons.mozilla.org/en-US/firefox/downloads/file/0/bad_url.xpi",
];
let current;
diff --git a/files/en-us/mozilla/add-ons/webextensions/api/runtime/getbackgroundpage/index.md b/files/en-us/mozilla/add-ons/webextensions/api/runtime/getbackgroundpage/index.md
index 67dad912c2287b3..d0141feb3570ea0 100644
--- a/files/en-us/mozilla/add-ons/webextensions/api/runtime/getbackgroundpage/index.md
+++ b/files/en-us/mozilla/add-ons/webextensions/api/runtime/getbackgroundpage/index.md
@@ -9,7 +9,7 @@ browser-compat: webextensions.api.runtime.getBackgroundPage
Retrieves the {{DOMxRef("Window")}} object for the background page running inside the current extension. If the background page is non-persistent (an event page) and it is not running, the background page is started.
-This provides a convenient way for other privileged extension scripts to get direct access to the background script's scope. This enables them to access variables or call functions defined in that scope. "Privileged script" here includes scripts running in [options pages](/en-US/docs/Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#options_pages), or scripts running in [browser action](/en-US/docs/Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#browser_actions_2) or [page action](/en-US/docs/Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#page_actions) popups, but does _not_ include [content scripts](/en-US/docs/Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#content_scripts).
+This provides a convenient way for other privileged extension scripts to get direct access to the background script's scope. This enables them to access variables or call functions defined in that scope. "Privileged script" here includes scripts running in [options pages](/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Options_pages), or scripts running in [browser action](/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Toolbar_button) or [page action](/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Page_actions) popups, but does _not_ include [content scripts](/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts).
Note that variables that were declared using [`const`](/en-US/docs/Web/JavaScript/Reference/Statements/const) or [`let`](/en-US/docs/Web/JavaScript/Reference/Statements/let) do not appear in the `Window` object returned by this function.
@@ -56,7 +56,7 @@ function foo() {
}
```
-A script running in a [popup](/en-US/docs/Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#browser_actions_2) can call this function directly like this:
+A script running in a [popup](/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Popups) can call this function directly like this:
```js
// popup.js
diff --git a/files/en-us/mozilla/add-ons/webextensions/api/runtime/messagesender/index.md b/files/en-us/mozilla/add-ons/webextensions/api/runtime/messagesender/index.md
index b908a8b29827361..2aea678bd5fd2ca 100644
--- a/files/en-us/mozilla/add-ons/webextensions/api/runtime/messagesender/index.md
+++ b/files/en-us/mozilla/add-ons/webextensions/api/runtime/messagesender/index.md
@@ -33,7 +33,7 @@ Values of this type are objects. They contain the following properties:
- : `string`. The URL of the page or frame hosting the script that sent the message.
- If the sender is a script running in an extension page (such as a [background page](/en-US/docs/Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#background_scripts), an [options page](/en-US/docs/Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#options_pages), or a [browser action](/en-US/docs/Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#browser_actions_2) or [page action](/en-US/docs/Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#page_actions) popup), the URL is in the form `"moz-extension:///path/to/page.html"`. If the sender is a background script and you haven't included a background page, it is `"moz-extension:///_generated_background_page.html"`.
+ If the sender is a script running in an extension page (such as a [background page](/en-US/docs/Mozilla/Add-ons/WebExtensions/Background_scripts), an [options page](/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Options_pages), or a [browser action](/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Toolbar_button) or [page action](/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Page_actions) popup), the URL is in the form `"moz-extension:///path/to/page.html"`. If the sender is a background script and you haven't included a background page, it is `"moz-extension:///_generated_background_page.html"`.
If the sender is a script running in a web page (including content and normal page scripts), then `url` is the web page URL. If the script is running in an iframe, `url` is the iframe's URL.
diff --git a/files/en-us/mozilla/add-ons/webextensions/api/search/get/index.md b/files/en-us/mozilla/add-ons/webextensions/api/search/get/index.md
index 7ee29b7fe511a55..8e005d188158017 100644
--- a/files/en-us/mozilla/add-ons/webextensions/api/search/get/index.md
+++ b/files/en-us/mozilla/add-ons/webextensions/api/search/get/index.md
@@ -47,8 +47,10 @@ Get all installed search engines:
```js
function retrieved(results) {
console.log(`There were: ${results.length} search engines retrieved.`);
+ const defaultEngine = results.find((searchEngine) => searchEngine.isDefault);
+ console.log(`The default search engine is ${defaultEngine.name}.`);
for (const searchEngine of results) {
- console.log(JSON.stringify(searchEngine.name));
+ console.log(searchEngine.name);
}
}
diff --git a/files/en-us/mozilla/add-ons/webextensions/api/search/search/index.md b/files/en-us/mozilla/add-ons/webextensions/api/search/search/index.md
index 69658b9255eef3f..c59c07cbb6d240c 100644
--- a/files/en-us/mozilla/add-ons/webextensions/api/search/search/index.md
+++ b/files/en-us/mozilla/add-ons/webextensions/api/search/search/index.md
@@ -59,12 +59,20 @@ browser.browserAction.onClicked.addListener(search);
A search using Wikipedia with the results shown in a new window:
```js
-function search() {
- browser.search.search({
- query: "styracosaurus",
- engine: "Wikipedia (en)",
- disposition: "NEW_WINDOW",
- });
+async function search() {
+ try {
+ // try to search using the `Wikipedia (en)` search engine
+ await browser.search.search({
+ query: "styracosaurus",
+ engine: "Wikipedia (en)",
+ disposition: "NEW_WINDOW",
+ });
+ } catch (ex) {
+ // if the search fails, e.g., because the search engine isn't defined to the browser, initiate the search using a url
+ await browser.windows.create({
+ url: "https://en.wikipedia.org/w/index.php?title=Special:Search&search=styracosaurus",
+ });
+ }
}
browser.browserAction.onClicked.addListener(search);
@@ -73,12 +81,20 @@ browser.browserAction.onClicked.addListener(search);
A search using Wikipedia with the results shown in the current tab:
```js
-function search(tab) {
- browser.search.search({
- query: "styracosaurus",
- engine: "Wikipedia (en)",
- tabId: tab.id,
- });
+async function search(tab) {
+ try {
+ // try to search using the `Wikipedia (en)` search engine
+ await browser.search.search({
+ query: "styracosaurus",
+ engine: "Wikipedia (en)",
+ tabId: tab.id,
+ });
+ } catch (ex) {
+ // if the search fails, e.g., because the search engine isn't defined to the browser, initiate the search using a url
+ await browser.tabs.update(tab.id, {
+ url: "https://en.wikipedia.org/w/index.php?title=Special:Search&search=styracosaurus",
+ });
+ }
}
browser.browserAction.onClicked.addListener(search);
diff --git a/files/en-us/mozilla/add-ons/webextensions/api/tabs/connect/index.md b/files/en-us/mozilla/add-ons/webextensions/api/tabs/connect/index.md
index 9c1e2babb59601a..edfe4b9ddabc582 100644
--- a/files/en-us/mozilla/add-ons/webextensions/api/tabs/connect/index.md
+++ b/files/en-us/mozilla/add-ons/webextensions/api/tabs/connect/index.md
@@ -41,7 +41,7 @@ browser.tabs.connect(
## Examples
-In this example a background script listens for a click on a [browser action](/en-US/docs/Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#browser_actions_2), then connects to the currently active tab, then sends a message using the `Port` that's returned from `connect()`:
+In this example a background script listens for a click on a [browser action](/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Toolbar_button), then connects to the currently active tab, then sends a message using the `Port` that's returned from `connect()`:
```js
function connectToTab(tabs) {
diff --git a/files/en-us/mozilla/add-ons/webextensions/api/tabs/detectlanguage/index.md b/files/en-us/mozilla/add-ons/webextensions/api/tabs/detectlanguage/index.md
index c9de19c1ed96b2d..06f61aaeddf2762 100644
--- a/files/en-us/mozilla/add-ons/webextensions/api/tabs/detectlanguage/index.md
+++ b/files/en-us/mozilla/add-ons/webextensions/api/tabs/detectlanguage/index.md
@@ -29,7 +29,7 @@ let detecting = browser.tabs.detectLanguage(
### Return value
-A [`Promise`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) that will be fulfilled with a string representing an ISO language code such as `en` or `fr`. For a complete list of languages supported by this method, see [kLanguageInfoTable](https://src.chromium.org/viewvc/chrome/trunk/src/third_party/cld/languages/internal/languages.cc#l23). For an unknown language, `"und"` will be returned (but see [bug 1288263](https://bugzil.la/1288263)). If any error occurs the promise will be rejected with an error message.
+A [`Promise`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) that will be fulfilled with a string representing an ISO language code such as `en` or `fr`. For a complete list of languages supported by this method, see [kLanguageInfoTable](https://source.chromium.org/chromium/chromium/src/+/main:third_party/ced/src/util/languages/languages.cc;l=35). For an unknown language, `"und"` will be returned (but see [bug 1288263](https://bugzil.la/1288263)). If any error occurs the promise will be rejected with an error message.
## Examples
diff --git a/files/en-us/mozilla/add-ons/webextensions/api/tabs/onupdated/index.md b/files/en-us/mozilla/add-ons/webextensions/api/tabs/onupdated/index.md
index fa2f5c64128c740..b0e61c374f570b7 100644
--- a/files/en-us/mozilla/add-ons/webextensions/api/tabs/onupdated/index.md
+++ b/files/en-us/mozilla/add-ons/webextensions/api/tabs/onupdated/index.md
@@ -66,6 +66,7 @@ Events have three functions:
- "hidden"
- "isArticle"
- "mutedInfo"
+ - "openerTabId"
- "pinned"
- "status"
- "title"
@@ -101,6 +102,8 @@ Lists the changes to the state of the tab that is updated. To learn more about t
- : `boolean`. True if the tab is an article and is therefore eligible for display in [Reader Mode](/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/toggleReaderMode).
- `mutedInfo` {{optional_inline}}
- : {{WebExtAPIRef('tabs.MutedInfo')}}. The tab's new muted state and the reason for the change.
+- `openerTabId` {{optional_inline}}
+ - : `integer`. The ID of the tab that opened this tab, if any. This property is only present if the opener tab exists and is in the same window.
- `pinned` {{optional_inline}}
- : `boolean`. The tab's new pinned state.
- `status` {{optional_inline}}
diff --git a/files/en-us/mozilla/add-ons/webextensions/api/tabs/print/index.md b/files/en-us/mozilla/add-ons/webextensions/api/tabs/print/index.md
index 0a65b3b5e28ab11..20339adada95d0d 100644
--- a/files/en-us/mozilla/add-ons/webextensions/api/tabs/print/index.md
+++ b/files/en-us/mozilla/add-ons/webextensions/api/tabs/print/index.md
@@ -25,7 +25,7 @@ None.
## Examples
-In this example a background script listens for a click on a [browser action](/en-US/docs/Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#browser_actions_2), then tries to print the currently active tab:
+In this example a background script listens for a click on a [browser action](/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Toolbar_button), then tries to print the currently active tab:
```js
browser.browserAction.onClicked.addListener(() => {
diff --git a/files/en-us/mozilla/add-ons/webextensions/api/tabs/printpreview/index.md b/files/en-us/mozilla/add-ons/webextensions/api/tabs/printpreview/index.md
index d19612d0dc90dee..506c063702bf069 100644
--- a/files/en-us/mozilla/add-ons/webextensions/api/tabs/printpreview/index.md
+++ b/files/en-us/mozilla/add-ons/webextensions/api/tabs/printpreview/index.md
@@ -31,7 +31,7 @@ A [`Promise`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) that
## Examples
-In this example a background script listens for a click on a [browser action](/en-US/docs/Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#browser_actions_2), then opens print preview for the currently active tab:
+In this example a background script listens for a click on a [browser action](/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Toolbar_button), then opens print preview for the currently active tab:
```js
browser.browserAction.onClicked.addListener(() => {
diff --git a/files/en-us/mozilla/add-ons/webextensions/api/tabs/saveaspdf/index.md b/files/en-us/mozilla/add-ons/webextensions/api/tabs/saveaspdf/index.md
index 3e94e67049074b2..b778e2f870f79ce 100644
--- a/files/en-us/mozilla/add-ons/webextensions/api/tabs/saveaspdf/index.md
+++ b/files/en-us/mozilla/add-ons/webextensions/api/tabs/saveaspdf/index.md
@@ -36,7 +36,7 @@ A [`Promise`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) that
## Examples
-In this example a background script listens for a click on a [browser action](/en-US/docs/Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#browser_actions_2), then tries to save the currently active tab as a PDF file, then logs the result:
+In this example a background script listens for a click on a [browser action](/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Toolbar_button), then tries to save the currently active tab as a PDF file, then logs the result:
```js
browser.browserAction.onClicked.addListener(() => {
diff --git a/files/en-us/mozilla/add-ons/webextensions/api/tabs/update/index.md b/files/en-us/mozilla/add-ons/webextensions/api/tabs/update/index.md
index f1f9067b1dbd8ff..fd01fd4350b13b4 100644
--- a/files/en-us/mozilla/add-ons/webextensions/api/tabs/update/index.md
+++ b/files/en-us/mozilla/add-ons/webextensions/api/tabs/update/index.md
@@ -51,7 +51,7 @@ let updating = browser.tabs.update(
- `muted` {{optional_inline}}
- : `boolean`. Whether the tab should be muted.
- `openerTabId` {{optional_inline}}
- - : `integer`. The ID of the tab that opened this tab. If specified, the opener tab must be in the same window as this tab.
+ - : `integer`. The ID of the tab that opened this tab. If specified, the opener tab must be in the same window as this tab. Set to `-1` to clear the set `openerTabId`.
- `pinned` {{optional_inline}}
- : `boolean`. Whether the tab should be pinned.
- `selected` {{deprecated_inline}} {{optional_inline}}
diff --git a/files/en-us/mozilla/add-ons/webextensions/api/webrequest/filterresponsedata/index.md b/files/en-us/mozilla/add-ons/webextensions/api/webrequest/filterresponsedata/index.md
index 535bd0fef5f116a..1342077f1db8466 100644
--- a/files/en-us/mozilla/add-ons/webextensions/api/webrequest/filterresponsedata/index.md
+++ b/files/en-us/mozilla/add-ons/webextensions/api/webrequest/filterresponsedata/index.md
@@ -68,7 +68,7 @@ function listener(details) {
let str = decoder.decode(event.data, { stream: true });
// Just change any instance of Example in the HTTP response
// to WebExtension Example.
- str = str.replace(/Example/g, "WebExtension Example");
+ str = str.replaceAll("Example", "WebExtension Example");
filter.write(encoder.encode(str));
filter.disconnect();
};
diff --git a/files/en-us/mozilla/add-ons/webextensions/api/webrequest/streamfilter/write/index.md b/files/en-us/mozilla/add-ons/webextensions/api/webrequest/streamfilter/write/index.md
index daaa166ddb45f86..e3e33d3f17d6fc5 100644
--- a/files/en-us/mozilla/add-ons/webextensions/api/webrequest/streamfilter/write/index.md
+++ b/files/en-us/mozilla/add-ons/webextensions/api/webrequest/streamfilter/write/index.md
@@ -46,7 +46,7 @@ function listener(details) {
let str = decoder.decode(event.data, { stream: true });
// Just change any instance of Example in the HTTP response
// to WebExtension Example.
- str = str.replace(/Example/g, "WebExtension Example");
+ str = str.replaceAll("Example", "WebExtension Example");
filter.write(encoder.encode(str));
filter.disconnect();
};
diff --git a/files/en-us/mozilla/add-ons/webextensions/chrome_incompatibilities/index.md b/files/en-us/mozilla/add-ons/webextensions/chrome_incompatibilities/index.md
index 34b6d1e1e53e4cd..527520cc4dae11d 100644
--- a/files/en-us/mozilla/add-ons/webextensions/chrome_incompatibilities/index.md
+++ b/files/en-us/mozilla/add-ons/webextensions/chrome_incompatibilities/index.md
@@ -180,7 +180,7 @@ When calling `tabs.remove()`:
#### Manifest "key" property
- **In Firefox:** As Firefox uses random UUIDs for `web_accessible_resources`, this property is unsupported. Firefox extensions can fix their extension ID through the `browser_specific_settings.gecko.id` manifest key (see [browser_specific_settings.gecko](/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/browser_specific_settings#firefox_gecko_properties)).
-- **In Chrome:** When working with an unpacked extension, the manifest may include a [`"key"` property](https://developer.chrome.com/docs/extensions/mv3/manifest/key/) to pin the extension ID across different machines. This is mainly useful when working with `web_accessible_resources`.
+- **In Chrome:** When working with an unpacked extension, the manifest may include a [`"key"` property](https://developer.chrome.com/docs/extensions/reference/manifest/key) to pin the extension ID across different machines. This is mainly useful when working with `web_accessible_resources`.
#### Content script HTTP(S) requests
@@ -244,7 +244,7 @@ The tables are generated from compatibility data stored as [JSON files in GitHub
### App persistence
-- **In Firefox:** When a native messaging connection is closed, Firefox kills the subprocesses if they do not break away. On Windows, the browser puts the native application's process into a [Job object]() and kills the job. Suppose the native application launches other processes and wants them to remain open after the native application is killed. In that case, the native application must use `CreateProcess`, instead of `ShellExecute`, to launch the additional process with the [`CREATE_BREAKAWAY_FROM_JOB`]() flag.
+- **In Firefox:** When a native messaging connection is closed, Firefox kills the subprocesses if they do not break away. On Windows, the browser puts the native application's process into a [Job object](https://learn.microsoft.com/en-us/windows/win32/procthread/job-objects) and kills the job. Suppose the native application launches other processes and wants them to remain open after the native application is killed. In that case, the native application must use `CreateProcess`, instead of `ShellExecute`, to launch the additional process with the [`CREATE_BREAKAWAY_FROM_JOB`](https://learn.microsoft.com/en-us/windows/win32/procthread/process-creation-flags) flag.
## Data cloning algorithm
diff --git a/files/en-us/mozilla/add-ons/webextensions/content_scripts/cloneinto/index.md b/files/en-us/mozilla/add-ons/webextensions/content_scripts/cloneinto/index.md
new file mode 100644
index 000000000000000..a26f9caec46ee7e
--- /dev/null
+++ b/files/en-us/mozilla/add-ons/webextensions/content_scripts/cloneinto/index.md
@@ -0,0 +1,158 @@
+---
+title: cloneInto()
+slug: Mozilla/Add-ons/WebExtensions/Content_scripts/cloneInto
+page-type: webextension-api-function
+browser-compat: webextensions.api.contentScriptGlobalScope.cloneInto
+---
+
+{{AddonSidebar()}}
+
+This function provides a safe way to take an object defined in a privileged scope and create a [structured clone](/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm) of it in a less-privileged scope. It returns a reference to the clone:
+
+```js
+var clonedObject = cloneInto(myObject, targetWindow);
+```
+
+You can then assign the clone to an object in the target scope as an expando property, and scripts running in that scope can access it:
+
+```js
+targetWindow.foo = clonedObject;
+```
+
+This enables privileged code, such as an extension, to share an object with less-privileged code, such as a web page script.
+
+## Syntax
+
+```js-nolint
+let clonedObject = cloneInto(
+ obj, // object
+ targetScope, // object
+ options // optional object
+);
+```
+
+### Parameters
+
+- `obj`
+ - : `object`. The object to clone.
+- `targetScope`
+ - : `object`. The object to attach the object to.
+- `options` {{optional_inline}}
+ - : `object`. Options for the function.
+ - `cloneFunctions` {{optional_inline}}
+ - : `boolean`. Whether the object's functions should be cloned. Default to `false`. Cloned functions have the same semantics as functions exported using [`exportFunction`](/en-US/docs/Mozilla/Add-ons/WebExtensions/API/Content_scripts/exportFunction). See [Cloning objects that have functions](#cloning_objects_that_have_functions). {{optional_inline}}
+ - `wrapReflectors` {{optional_inline}}
+ - : `boolean`. Whether DOM objects should be passed by reference instead of cloned. DOM objects are usually not clonable. Defaults to `false`. See [Cloning objects that contain DOM elements](#cloning_objects_that_contain_dom_elements).
+
+### Return Value
+
+A reference to the cloned object.
+
+## Examples
+
+This content script creates an object, clones it into the content window and makes it a property of the content window global:
+
+```js
+// content script
+var addonScriptObject = { greeting: "hello from your extension" };
+window.addonScriptObject = cloneInto(addonScriptObject, window);
+```
+
+Scripts running in the page can access the object:
+
+```js
+// page script
+button.addEventListener(
+ "click",
+ function () {
+ console.log(window.addonScriptObject.greeting); // "hello from your extension"
+ },
+ false,
+);
+```
+
+Of course, you don't have to assign the clone to the window itself; you can assign it to some other object in the target scope:
+
+```js
+// Content script
+window.foo.addonScriptObject = cloneInto(addonScriptObject, window);
+```
+
+You can also pass it into a function defined in the page script. Suppose the page script defines a function like this:
+
+```js
+// page script
+function foo(greeting) {
+ console.log("they said: " + greeting.message);
+}
+```
+
+The content script can define an object, clone it, and pass it into this function:
+
+```js
+// content script
+var addonScriptObject = { message: "hello from your extension" };
+window.foo(cloneInto(addonScriptObject, window)); // "they said: hello from your extension"
+```
+
+### Cloning objects that have functions
+
+If the object to clone contains functions, you must pass the `{cloneFunctions:true}` flag, or you get an error. If you do pass this flag, then functions in the object are cloned using the same mechanism used in [`Components.utils.exportFunction`](/en-US/docs/Mozilla/Add-ons/WebExtensions/API/components/utils/exportFunction):
+
+```js
+// content script
+var addonScriptObject = {
+ greetMe: function () {
+ alert("hello from your extension");
+ },
+};
+window.addonScriptObject = cloneInto(addonScriptObject, window, {
+ cloneFunctions: true,
+});
+```
+
+```js
+// page script
+var test = document.getElementById("test");
+test.addEventListener(
+ "click",
+ function () {
+ window.addonScriptObject.greetMe();
+ },
+ false,
+);
+```
+
+### Cloning objects that contain DOM elements
+
+By default, if the object you clone contains objects reflected from C++, such as DOM elements, the cloning operation fails with an error. If you pass the `{wrapReflectors:true}` flag, then the object you clone contains these objects:
+
+```js
+// content script
+var addonScriptObject = {
+ body: window.document.body,
+};
+window.addonScriptObject = cloneInto(addonScriptObject, window, {
+ wrapReflectors: true,
+});
+```
+
+```js
+// page script
+var test = document.getElementById("test");
+test.addEventListener(
+ "click",
+ function () {
+ console.log(window.addonScriptObject.body.innerHTML);
+ },
+ false,
+);
+```
+
+Access to these objects in the target scope is subject to the normal [script security checks](https://firefox-source-docs.mozilla.org/dom/scriptSecurity/index.html).
+
+{{WebExtExamples}}
+
+## Browser compatibility
+
+{{Compat}}
diff --git a/files/en-us/mozilla/add-ons/webextensions/content_scripts/exportfunction/index.md b/files/en-us/mozilla/add-ons/webextensions/content_scripts/exportfunction/index.md
new file mode 100644
index 000000000000000..aa23d683fd420ce
--- /dev/null
+++ b/files/en-us/mozilla/add-ons/webextensions/content_scripts/exportfunction/index.md
@@ -0,0 +1,213 @@
+---
+title: exportFunction()
+slug: Mozilla/Add-ons/WebExtensions/Content_scripts/exportFunction
+page-type: webextension-api-function
+browser-compat: webextensions.api.contentScriptGlobalScope.exportFunction
+---
+
+{{AddonSidebar()}}
+
+This function provides a safe way to expose a function from a privileged scope to a less-privileged scope. This enables privileged code, such as an extension, to share code with less-privileged code, such as a standard web page script. A function exported from privileged to less-privileged code can be called from the less privileged code's context.
+
+The function has access to its surrounding closure as if called in the privileged context.
+
+The exported function doesn't need to be added to the less privileged code's global window object; it can be exported to any object in the target scope.
+
+See [Exporting functions that take arguments](#exporting_functions_that_take_arguments) to understand what happens if the functions you export accept arguments.
+
+## Syntax
+
+```js-nolint
+let exportedFunction = exportFunction(
+ func, // function
+ targetScope, // object
+ options // optional object
+);
+```
+
+### Parameters
+
+- `func`
+ - : `function`. The function to export.
+- `targetScope`
+ - : `object`. The object to attach the function to. This doesn't have to be the global window object; it could be an object in the target window or created by the caller.
+- `options` {{optional_inline}}
+
+ - : `object`. Options for the function.
+
+ - `defineAs` {{optional_inline}}
+ - : `string`. The name of the function in `targetScope`. If omitted, you need to assign the return value of `exportFunction()` to an object in the target scope.
+ - `allowCrossOriginArguments` {{optional_inline}}
+ - : `boolean`. Whether to check that arguments to the exported function are [subsumed](https://firefox-source-docs.mozilla.org/dom/scriptSecurity/index.html#subsumes) by the caller. This allows the caller to pass objects with a different origin into the exported function, which can then use its privileged status to make cross-origin requests with the object. Defaults to `false`.
+
+### Return value
+
+The placeholder function created in the target context.
+
+## Exporting functions that take arguments
+
+Any arguments passed into the function are not cloned. Instead, they are passed through to the privileged scope as [Xrays](https://firefox-source-docs.mozilla.org/dom/scriptSecurity/xray_vision.html).
+
+### Modifying the argument
+
+An Xray for an object refers to the original. Any changes to the argument made in the exported function affect the original object passed in. For example:
+
+```js
+// privileged scope: for example, a content script
+function changeMyName(user) {
+ user.name = "Bill";
+}
+exportFunction(changeMyName, window, {
+ defineAs: "changeMyName",
+});
+```
+
+```js
+// less-privileged scope: for example, a page script
+var user = { name: "Jim" };
+var test = document.getElementById("test");
+test.addEventListener(
+ "click",
+ function () {
+ console.log(user.name); // "Jim"
+ window.changeMyName(user);
+ console.log(user.name); // "Bill"
+ },
+ false,
+);
+```
+
+This behavior is subject to the normal rules of Xrays. For example, an expando property added to a DOM node isn't visible in the original object.
+
+### Xray filtering and waiving
+
+Xrays provide a filtered view of the original object. For example, functions aren't visible in the Xrays of JavaScript [`Object`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object) types. If you need unfiltered access to the original, you can [waive Xrays](https://firefox-source-docs.mozilla.org/dom/scriptSecurity/xray_vision.html#waiving-xray-vision):
+
+```js
+// privileged scope: for example, a content script
+function logUser(user) {
+ // console.log(user.getUser()); // error
+ console.log(user.wrappedJSObject.getUser()); // "Bill"
+}
+exportFunction(logUser, window, {
+ defineAs: "logUser",
+});
+```
+
+```js
+// less-privileged scope: for example, a page script
+var user = {
+ getUser: function () {
+ return "Bill";
+ },
+};
+var test = document.getElementById("test");
+test.addEventListener(
+ "click",
+ function () {
+ window.logUser(user);
+ },
+ false,
+);
+```
+
+See [Xray vision](https://firefox-source-docs.mozilla.org/dom/scriptSecurity/xray_vision.html) in the Firefox Source Tree documentation for more information.
+
+### Passing functions as arguments
+
+If functions are given as arguments, these are also passed as Xrays. As you can call `Function` Xrays like normal functions, this means that passing callbacks into the exported function works:
+
+```js
+// privileged scope: for example, a content script
+function logUser(getUser) {
+ console.log(getUser()); // "Bill"
+}
+exportFunction(logUser, unsafeWindow, {
+ defineAs: "logUser",
+});
+```
+
+```js
+// less-privileged scope: for example, a page script
+function getUser() {
+ return "Bill";
+}
+var test = document.getElementById("test");
+test.addEventListener(
+ "click",
+ function () {
+ window.logUser(getUser);
+ },
+ false,
+);
+```
+
+### Cross-origin checking
+
+When the exported function is called, each argument, including `this`, is checked to ensure the caller [subsumes](https://firefox-source-docs.mozilla.org/dom/scriptSecurity/index.html#subsumes) that argument. This prevents passing cross-origin objects (such as `Window` or `Location`) to privileged functions, as the privileged code has full access to those objects and could unintentionally do something dangerous. This provision can be overridden by passing `{ allowCrossOriginArguments: true }` to `exportFunction`.
+
+## Examples
+
+### Export to global scope
+
+This script defines a function and then exports it to a content window:
+
+```js
+// extension-script.js
+var salutation = "hello ";
+function greetMe(user) {
+ return salutation + user;
+}
+exportFunction(greetMe, window, { defineAs: "foo" });
+```
+
+Instead of using `defineAs`, the script can assign the result of `exportFunction` to an object in the target scope:
+
+```js
+// extension-script.js
+var salutation = "hello ";
+function greetMe(user) {
+ return salutation + user;
+}
+window.foo = exportFunction(greetMe, window);
+```
+
+Either way, code running in the content window's scope can call the function:
+
+```js
+// page-script.js
+var greeting = foo("alice");
+console.log(greeting);
+// "hello alice"
+```
+
+### Export to an existing local object
+
+Instead of attaching the function to the target's global `window` object, the caller can attach it to any other object in the target context. Suppose the content window defines a local variable `bar`:
+
+```js
+// page-script.js
+var bar = {};
+```
+
+Now the extension script can attach the function to `bar`:
+
+```js
+// extension-script.js
+exportFunction(greetMe, window.bar, {
+ defineAs: "greetMe",
+});
+```
+
+```js
+// page-script.js
+var value = bar.greetMe("bob");
+console.log(value);
+// "hello bob"
+```
+
+{{WebExtExamples}}
+
+## Browser compatibility
+
+{{Compat}}
diff --git a/files/en-us/mozilla/add-ons/webextensions/content_scripts/index.md b/files/en-us/mozilla/add-ons/webextensions/content_scripts/index.md
index 6d70a69eed5bd4b..b8e7ffac1eb3f10 100644
--- a/files/en-us/mozilla/add-ons/webextensions/content_scripts/index.md
+++ b/files/en-us/mozilla/add-ons/webextensions/content_scripts/index.md
@@ -6,11 +6,13 @@ page-type: guide
{{AddonSidebar}}
-A content script is a part of your extension that runs in the context of a particular web page (as opposed to background scripts which are part of the extension, or scripts which are part of the website itself, such as those loaded using the {{HTMLElement("script")}} element).
+A content script is a part of your extension that runs in the context of a web page (as opposed to background scripts that are part of the extension, or scripts that are part of the website itself, such as those loaded using the {{HTMLElement("script")}} element).
[Background scripts](/en-US/docs/Mozilla/Add-ons/WebExtensions/Background_scripts) can access all the [WebExtension JavaScript APIs](/en-US/docs/Mozilla/Add-ons/WebExtensions/API), but they can't directly access the content of web pages. So if your extension needs to do that, you need content scripts.
-Just like the scripts loaded by normal web pages, content scripts can read and modify the content of their pages using the standard DOM APIs. However, they can only do this when [host permissions to the web page's origin have been granted](#permissions).
+Just like the scripts loaded by normal web pages, content scripts can read and modify the content of their pages using the standard [Web APIs](/en-US/docs/Web/API). However, they can only do this when [host permissions to the web page's origin have been granted](#permissions).
+
+> [!NOTE] Some Web APIs are restricted to [secure contexts](/en-US/docs/Web/Security/Secure_Contexts), which also applies to content scripts running in these contexts. Except for {{domxref("PointerEvent.getCoalescedEvents()")}}, which can be called from content scripts in insecure contexts in Firefox.
Content scripts can only access [a small subset of the WebExtension APIs](#webextension_apis), but they can [communicate with background scripts](#communicating_with_background_scripts) using a messaging system, and thereby indirectly access the WebExtension APIs.
@@ -161,7 +163,7 @@ If a content script needs to use a JavaScript library, then the library itself s
```
> [!NOTE]
-> Firefox _does_ provide some APIs that enable content scripts to access JavaScript objects created by page scripts, and to expose their own JavaScript objects to page scripts.
+> Firefox provides [cloneInto()](/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts/cloneInto) and [exportFunction()](/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts/exportFunction) to enable content scripts to access JavaScript objects created by page scripts and expose their JavaScript objects to page scripts.
>
> See [Sharing objects with page scripts](/en-US/docs/Mozilla/Add-ons/WebExtensions/Sharing_objects_with_page_scripts) for more details.
diff --git a/files/en-us/mozilla/add-ons/webextensions/native_manifests/index.md b/files/en-us/mozilla/add-ons/webextensions/native_manifests/index.md
index 7355ff87b62357e..0747c4176e2c664 100644
--- a/files/en-us/mozilla/add-ons/webextensions/native_manifests/index.md
+++ b/files/en-us/mozilla/add-ons/webextensions/native_manifests/index.md
@@ -373,7 +373,7 @@ The key should have a single default value, which is the path to the manifest.
> [!WARNING]
> As of Firefox 64, the 32-bit registry view [Wow6432Node](https://en.wikipedia.org/wiki/WoW64#Registry_and_file_system) will be checked first for these keys, followed by the "native" registry view. Use whichever is appropriate for your application.
>
-> **For Firefox 63 and older:** This key should _not_ be created under [Wow6432Node](https://en.wikipedia.org/wiki/WoW64#Registry_and_file_system), even if the app is 32-bit. Previous versions of the browser will always look for the key under the "native" view of the registry, not the 32-bit emulation. To ensure that the key is created in the "native" view, you can pass the `KEY_WOW64_64KEY` or `KEY_WOW64_32KEY` flags into `RegCreateKeyEx`. See [Accessing an Alternate Registry View](https://docs.microsoft.com/windows/win32/winprog64/accessing-an-alternate-registry-view).
+> **For Firefox 63 and older:** This key should _not_ be created under [Wow6432Node](https://en.wikipedia.org/wiki/WoW64#Registry_and_file_system), even if the app is 32-bit. Previous versions of the browser will always look for the key under the "native" view of the registry, not the 32-bit emulation. To ensure that the key is created in the "native" view, you can pass the `KEY_WOW64_64KEY` or `KEY_WOW64_32KEY` flags into `RegCreateKeyEx`. See [Accessing an Alternate Registry View](https://learn.microsoft.com/en-us/windows/win32/winprog64/accessing-an-alternate-registry-view).
For per-user visibility, create a registry key with the following name:
diff --git a/files/en-us/mozilla/add-ons/webextensions/native_messaging/index.md b/files/en-us/mozilla/add-ons/webextensions/native_messaging/index.md
index 1d21da619027fd0..4737e189c654c8d 100644
--- a/files/en-us/mozilla/add-ons/webextensions/native_messaging/index.md
+++ b/files/en-us/mozilla/add-ons/webextensions/native_messaging/index.md
@@ -383,7 +383,7 @@ If you connected to the native application using `runtime.connectNative()`, then
To close the native application:
- On \*nix systems like macOS and Linux, the browser sends `SIGTERM` to the native application, then `SIGKILL` after the application has had a chance to exit gracefully. These signals propagate to any subprocesses unless they break away into a new process group.
-- On Windows, the browser puts the native application's process into a [Job object]() and kills the job. If the native application launches additional processes and wants them to remain open after the native application is killed, then the native application must launch the additional process with the [`CREATE_BREAKAWAY_FROM_JOB`]() flag, such as by using `CreateProcess`.
+- On Windows, the browser puts the native application's process into a [Job object](https://learn.microsoft.com/en-us/windows/win32/procthread/job-objects) and kills the job. If the native application launches additional processes and wants them to remain open after the native application is killed, then the native application must launch the additional process with the [`CREATE_BREAKAWAY_FROM_JOB`](https://learn.microsoft.com/en-us/windows/win32/procthread/process-creation-flags) flag, such as by using `CreateProcess`.
## Troubleshooting
diff --git a/files/en-us/mozilla/add-ons/webextensions/sharing_objects_with_page_scripts/index.md b/files/en-us/mozilla/add-ons/webextensions/sharing_objects_with_page_scripts/index.md
index 7524a8c730ba74c..d41c2c76ef680fa 100644
--- a/files/en-us/mozilla/add-ons/webextensions/sharing_objects_with_page_scripts/index.md
+++ b/files/en-us/mozilla/add-ons/webextensions/sharing_objects_with_page_scripts/index.md
@@ -93,7 +93,7 @@ Firefox also provides APIs enabling content scripts to make objects available to
### exportFunction
-Given a function defined in the content script, `exportFunction()` exports it to the page script's scope, so the page script can call it.
+Given a function defined in the content script, [`exportFunction()`](/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts/exportFunction) exports it to the page script's scope, so the page script can call it.
For example, let's consider an extension which has a background script like this:
@@ -153,7 +153,7 @@ window.notify("Message from the page script!");
### cloneInto
-Given an object defined in the content script, this creates a clone of the object in the page script's scope, thereby making the clone accessible to page scripts. By default, this uses the [structured clone algorithm](/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm) to clone the object, meaning that functions in the object are not included in the clone. To include functions, pass the `cloneFunctions` option.
+Given an object defined in the content script, [cloneInto()](/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts/cloneInto) creates a clone of the object in the page script's scope, thereby making the clone accessible to page scripts. By default, this uses the [structured clone algorithm](/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm) to clone the object, meaning that functions in the object are not included in the clone. To include functions, pass the `cloneFunctions` option.
For example, here's a content script that defines an object that contains a function, then clones it into the page script's scope:
diff --git a/files/en-us/mozilla/add-ons/webextensions/user_interface/browser_styles/index.md b/files/en-us/mozilla/add-ons/webextensions/user_interface/browser_styles/index.md
index 5983fe659081021..da87ddc5e20f954 100644
--- a/files/en-us/mozilla/add-ons/webextensions/user_interface/browser_styles/index.md
+++ b/files/en-us/mozilla/add-ons/webextensions/user_interface/browser_styles/index.md
@@ -342,13 +342,13 @@ button.panel-section-tabs-button {
}
.panel-section-separator {
- background-color: rgba(0, 0, 0, 0.15);
+ background-color: rgb(0 0 0 / 0.15);
min-height: 1px;
}
/* Panel Section - Header */
.panel-section-header {
- border-bottom: 1px solid rgba(0, 0, 0, 0.15);
+ border-bottom: 1px solid rgb(0 0 0 / 0.15);
padding: 16px;
}
@@ -382,13 +382,13 @@ button.panel-section-tabs-button {
}
.panel-list-item:not(.disabled):hover {
- background-color: rgba(0, 0, 0, 0.06);
- border-bottom: 1px solid rgba(0, 0, 0, 0.1);
- border-top: 1px solid rgba(0, 0, 0, 0.1);
+ background-color: rgb(0 0 0 / 0.06);
+ border-bottom: 1px solid rgb(0 0 0 / 0.1);
+ border-top: 1px solid rgb(0 0 0 / 0.1);
}
.panel-list-item:not(.disabled):hover:active {
- background-color: rgba(0, 0, 0, 0.1);
+ background-color: rgb(0 0 0 / 0.1);
}
.panel-list-item.disabled {
@@ -417,8 +417,8 @@ button.panel-section-tabs-button {
/* Panel Section - Footer */
.panel-section-footer {
- background-color: rgba(0, 0, 0, 0.06);
- border-top: 1px solid rgba(0, 0, 0, 0.15);
+ background-color: rgb(0 0 0 / 0.06);
+ border-top: 1px solid rgb(0 0 0 / 0.15);
color: #1a1a1a;
display: flex;
flex-direction: row;
@@ -442,11 +442,11 @@ button.panel-section-tabs-button {
}
.panel-section-footer-button:hover {
- background-color: rgba(0, 0, 0, 0.06);
+ background-color: rgb(0 0 0 / 0.06);
}
.panel-section-footer-button:hover:active {
- background-color: rgba(0, 0, 0, 0.1);
+ background-color: rgb(0 0 0 / 0.1);
}
.panel-section-footer-button.default {
@@ -466,7 +466,7 @@ button.panel-section-tabs-button {
}
.panel-section-footer-separator {
- background-color: rgba(0, 0, 0, 0.1);
+ background-color: rgb(0 0 0 / 0.1);
width: 1px;
z-index: 99;
}
@@ -477,10 +477,10 @@ button.panel-section-tabs-button {
body {
background: #fcfcfc;
background-clip: padding-box;
- border: 1px solid rgba(24, 26, 27, 0.2);
+ border: 1px solid rgb(24 26 27 / 0.2);
box-shadow:
- 0 3px 5px rgba(24, 26, 27, 0.1),
- 0 0 7px rgba(24, 26, 27, 0.1);
+ 0 3px 5px rgb(24 26 27 / 0.1),
+ 0 0 7px rgb(24 26 27 / 0.1);
box-sizing: content-box;
margin: 2em auto 0.5em;
width: 384px;
diff --git a/files/en-us/mozilla/add-ons/webextensions/what_are_webextensions/index.md b/files/en-us/mozilla/add-ons/webextensions/what_are_webextensions/index.md
index a4aa7348516cce8..0cb13187a525c8d 100644
--- a/files/en-us/mozilla/add-ons/webextensions/what_are_webextensions/index.md
+++ b/files/en-us/mozilla/add-ons/webextensions/what_are_webextensions/index.md
@@ -13,31 +13,31 @@ An extension adds features and functions to a browser. It's created using famili
**Enhance or complement a website**: Use an add-on to deliver additional in-browser features or information from your website. Allow users to collect details from pages they visit to enhance the service you offer.
-Examples: [Grammarly for Firefox](https://addons.mozilla.org/en-US/firefox/addon/grammarly-1/), [Enhancer for YouTube](https://addons.mozilla.org/firefox/addon/enhancer-for-youtube/), and [Control Panel for Twitter](https://addons.mozilla.org/firefox/addon/control-panel-for-twitter/).
+Examples: [Grammarly for Firefox](https://addons.mozilla.org/en-US/firefox/addon/grammarly-1/), [Enhancer for YouTube](https://addons.mozilla.org/en-US/firefox/addon/enhancer-for-youtube/), and [Control Panel for Twitter](https://addons.mozilla.org/en-US/firefox/addon/control-panel-for-twitter/).
![The Grammarly extension providing an edit hint in the GitHub editor.](grammarly-in-github-editor.png)
**Let users show their personality**: Browser extensions can manipulate the content of web pages; for example, letting users add their favorite logo or picture as a background to every page they visit. Extensions may also enable users to update the look of the Firefox UI, the same way standalone [theme add-ons](https://extensionworkshop.com/documentation/themes/) do.
-Examples: [Tabliss](https://addons.mozilla.org/en-US/firefox/addon/tabliss/), [Stylus](https://addons.mozilla.org/firefox/addon/styl-us/), and [Emoji](https://addons.mozilla.org/firefox/addon/emoji-sav/).
+Examples: [Tabliss](https://addons.mozilla.org/en-US/firefox/addon/tabliss/), [Stylus](https://addons.mozilla.org/en-US/firefox/addon/styl-us/), and [Emoji](https://addons.mozilla.org/en-US/firefox/addon/emoji-sav/).
![A new tab styled by the Tabliss extension showing a woodland picture with the time and a greeting message.](tabliss_new_tab.png)
**Add or remove content from web pages**: You might want to help users block intrusive ads from web pages, provide access to a travel guide whenever a country or city is mentioned in a web page, or reformat page content to offer a consistent reading experience. With the ability to access and update both a page's HTML and CSS, extensions can help users see the web the way they want to.
-Examples: [uBlock Origin](https://addons.mozilla.org/en-US/firefox/addon/ublock-origin/), [Return YouTube Dislike](https://addons.mozilla.org/firefox/addon/return-youtube-dislikes/), and [LeechBlock NG](https://addons.mozilla.org/firefox/addon/leechblock-ng/).
+Examples: [uBlock Origin](https://addons.mozilla.org/en-US/firefox/addon/ublock-origin/), [Return YouTube Dislike](https://addons.mozilla.org/en-US/firefox/addon/return-youtube-dislikes/), and [LeechBlock NG](https://addons.mozilla.org/en-US/firefox/addon/leechblock-ng/).
![uBlock origin pop-up showing blocked tracker statistics.](ublock_origin_add_on.png)
**Add tools and new browsing features**: Add new features to a taskboard, or generate QR code images from URLs, hyperlinks, or page text. With flexible UI options and the power of the [WebExtensions APIs](/en-US/docs/Mozilla/Add-ons/WebExtensions) you can easily add new features to a browser. And, you can enhance almost any website's features or functionality, it doesn't have to be your website.
-Examples: [Worldwide Radio](https://addons.mozilla.org/firefox/addon/worldwide-radio/), [Flagfox](https://addons.mozilla.org/firefox/addon/flagfox/), and [Tomato Clock](https://addons.mozilla.org/en-US/firefox/addon/tomato-clock/).
+Examples: [Worldwide Radio](https://addons.mozilla.org/en-US/firefox/addon/worldwide-radio/), [Flagfox](https://addons.mozilla.org/en-US/firefox/addon/flagfox/), and [Tomato Clock](https://addons.mozilla.org/en-US/firefox/addon/tomato-clock/).
![The Worldwide Radio extension showing a list of radio stations for Canada, with RadioOne selected to play.](worldwide_radio_extension.png)
**Games**: Offer traditional computer games with offline play features or explore new game possibilities, such as incorporating gameplay into everyday browsing.
-Examples: [RPG Game - Dedalium by Loycom Games](https://addons.mozilla.org/firefox/addon/rpg-game-online-dedalium/), [Solitaire Card Game](https://addons.mozilla.org/en-US/firefox/addon/solitaire-spider-freecell/), and [2048 Prime](https://addons.mozilla.org/en-US/firefox/addon/2048-prime/).
+Examples: [RPG Game - Dedalium by Loycom Games](https://addons.mozilla.org/en-US/firefox/addon/rpg-game-online-dedalium/), [Solitaire Card Game](https://addons.mozilla.org/en-US/firefox/addon/solitaire-spider-freecell/), and [2048 Prime](https://addons.mozilla.org/en-US/firefox/addon/2048-prime/).
![The Dedalium pop-up showing play status and providing options to start a battle or adventure.](dedalium_popup.png)
diff --git a/files/en-us/mozilla/firefox/experimental_features/index.md b/files/en-us/mozilla/firefox/experimental_features/index.md
index 50d64c1a9605321..24946cfa7a44d59 100644
--- a/files/en-us/mozilla/firefox/experimental_features/index.md
+++ b/files/en-us/mozilla/firefox/experimental_features/index.md
@@ -1116,6 +1116,52 @@ The CSS [`calc()`](/en-US/docs/Web/CSS/calc) function can now parse color channe
+### CSS Anchor Positioning
+
+The [CSS Anchor Positioning](/en-US/docs/Web/CSS/CSS_anchor_positioning) module defines a number of features that allow elements to be defined as anchor elements, and for other elements to be positioned relative to anchor elements.
+This allows, for example, tooltips to be displayed alongside associated content as it scrolls through the viewport, moving as needed when it would overflow the viewport, and disappearing when the anchor moves offscreen.
+The set of features are being progressively rolled out behind a preference ([Firefox bug 1889561](https://bugzil.la/1889561)).
+
+The parts that have been implemented include:
+
+- [`CSSPositionTryRule`](/en-US/docs/Web/API/CSSPositionTryRule) and [`CSSPositionTryDescriptors`](/en-US/docs/Web/API/CSSPositionTryDescriptors) (Firefox 131).
+
+
+
+
+ Release channel
+ Version added
+ Enabled by default?
+
+
+
+
+ Nightly
+ 131
+ No
+
+
+ Developer Edition
+ 131
+ No
+
+
+ Beta
+ 131
+ No
+
+
+ Release
+ 131
+ No
+
+
+ Preference name
+ layout.css.anchor-positioning.enabled
+
+
+
+
## SVG
### SVGPathSeg APIs
@@ -1515,7 +1561,7 @@ Note that, as shown below, the feature is only available on Nightly builds (irre
### OpenFont COLRv1 fonts
-This feature provides support for the [OpenFont COLRv1 font specification](https://docs.microsoft.com/en-us/typography/opentype/spec/).
+This feature provides support for the [OpenFont COLRv1 font specification](https://learn.microsoft.com/en-us/typography/opentype/spec/).
This enables compression-friendly color vector fonts with gradients, compositing and blending to be loaded using the CSS [`@font-face`](/en-US/docs/Web/CSS/@font-face) rule, or the [CSS Font Loading API](/en-US/docs/Web/API/CSS_Font_Loading_API).
See [Firefox bug 1740530](https://bugzil.la/1740530) for more details.
@@ -2204,12 +2250,9 @@ Note that supported policies can be set through the [`allow`](/en-US/docs/Web/HT
-### Clear-Site-Data "cache" directive
+### Permissions API support for microphone and camera
-The [`Clear-Site-Data`](/en-US/docs/Web/HTTP/Headers/Clear-Site-Data) HTTP response header `cache` directive clears the browser cache for the requesting website.
-
-> [!NOTE]
-> This was originally enabled by default, but put behind a preference in version 94 ([Firefox bug 1729291](https://bugzil.la/1729291)).
+The [Permissions API](/en-US/docs/Web/API/Permissions_API) permissions `microphone` and `camera` are supported, allowing a web page to {{domxref("Permissions.query()", "query","", "nocode")}} whether access to the corresponding hardware has been granted, denied, or still requires user approval ([Firefox bug 1609427](https://bugzil.la/1609427), [Firefox bug 1915222](https://bugzil.la/1915222)).
@@ -2222,36 +2265,39 @@ The [`Clear-Site-Data`](/en-US/docs/Web/HTTP/Headers/Clear-Site-Data) HTTP respo
Nightly
- 63
- No
+ 131
+ Yes
Developer Edition
- 63
- No
+ 131
+ Yes
Beta
- 63
- No
+ 131
+ Yes
Release
- 63
+ 131
No
Preference name
- privacy.clearsitedata.cache.enabled
+ permissions.media.query.enabled
-### Privacy Preserving Attribution API (PPA)
+### Clear-Site-Data "cache" directive
-[PPA API](https://support.mozilla.org/kb/privacy-preserving-attribution) provides an alternative to user tracking for ad attribution using the new `navigator.privateAttribution` object with `saveImpression()` and `measureConversion()` methods. Read more about PPA [in the explainer](https://github.com/mozilla/explainers/tree/main/ppa-experiment). This experiment can be enabled for websites via [origin trial](https://wiki.mozilla.org/Origin_Trials) or in the browser by setting the preference to `1`. ([Firefox bug 1900929](https://bugzil.la/1900929)).
+The [`Clear-Site-Data`](/en-US/docs/Web/HTTP/Headers/Clear-Site-Data) HTTP response header `cache` directive clears the browser cache for the requesting website.
+
+> [!NOTE]
+> This was originally enabled by default, but put behind a preference in version 94 ([Firefox bug 1729291](https://bugzil.la/1729291)).
@@ -2264,38 +2310,36 @@ The [`Clear-Site-Data`](/en-US/docs/Web/HTTP/Headers/Clear-Site-Data) HTTP respo
Nightly
- 128
+ 63
No
Developer Edition
- 128
+ 63
No
Beta
- 128
+ 63
No
Release
- 128
+ 63
No
Preference name
- dom.origin-trials.private-attribution.state
+ privacy.clearsitedata.cache.enabled
-## HTTP
-
-### Cookies Having Independent Partitioned State (CHIPS)
+### Privacy Preserving Attribution API (PPA)
-[CHIPS](/en-US/docs/Web/Privacy/Privacy_sandbox/Partitioned_cookies), or "partitioned cookies", allow developers to opt a cookie into partitioned storage, with separate cookie storage for each top-level site. Partitioned cookies can only be read within the same top-level site they were set on and its subdomains. This blocks cross-site tracking, while still enabling legitimate uses of third-party cookies such as persisting state of embedded maps or chat widgets across different subdomains of a site. Partitioned cookies are set using the [`partitioned`](/en-US/docs/Web/HTTP/Headers/Set-Cookie#partitioned) directive of the `Set-Cookie` HTTP header. ([Firefox bug 1898253](https://bugzil.la/1898253)).
+[PPA API](https://support.mozilla.org/en-US/kb/privacy-preserving-attribution) provides an alternative to user tracking for ad attribution using the new `navigator.privateAttribution` object with `saveImpression()` and `measureConversion()` methods. Read more about PPA [in the explainer](https://github.com/mozilla/explainers/tree/main/ppa-experiment). This experiment can be enabled for websites via [origin trial](https://wiki.mozilla.org/Origin_Trials) or in the browser by setting the preference to `1`. ([Firefox bug 1900929](https://bugzil.la/1900929)).
@@ -2309,7 +2353,7 @@ The [`Clear-Site-Data`](/en-US/docs/Web/HTTP/Headers/Clear-Site-Data) HTTP respo
Nightly
128
- Yes
+ No
Developer Edition
@@ -2329,12 +2373,14 @@ The [`Clear-Site-Data`](/en-US/docs/Web/HTTP/Headers/Clear-Site-Data) HTTP respo
Preference name
- network.cookie.CHIPS.enabled
+ dom.origin-trials.private-attribution.state
+## HTTP
+
### Accept header with MIME type image/jxl
The HTTP [`Accept`](/en-US/docs/Web/HTTP/Headers/Accept) header in [default requests and image requests](/en-US/docs/Web/HTTP/Content_negotiation/List_of_default_Accept_values) can be configured via a preference to indicate support for the `image/jxl` MIME type.
diff --git a/files/en-us/mozilla/firefox/index.md b/files/en-us/mozilla/firefox/index.md
index 0afb5cd3d7def27..d8e24fc3a9bb627 100644
--- a/files/en-us/mozilla/firefox/index.md
+++ b/files/en-us/mozilla/firefox/index.md
@@ -6,11 +6,11 @@ page-type: landing-page
{{FirefoxSidebar}}
-[Firefox](https://www.mozilla.org/firefox/) is Mozilla's popular Web browser, available for multiple platforms including Windows, macOS, and Linux on the desktop and all Android and iOS mobile devices. With broad compatibility, the latest in Web technologies, and powerful development tools, Firefox is a great choice for both Web developers and end users.
+[Firefox](https://www.mozilla.org/en-US/firefox/) is Mozilla's popular Web browser, available for multiple platforms including Windows, macOS, and Linux on the desktop and all Android and iOS mobile devices. With broad compatibility, the latest in Web technologies, and powerful development tools, Firefox is a great choice for both Web developers and end users.
Firefox is an open source project; much of the code is contributed by our huge community of volunteers. Here you can learn about how to contribute to the Firefox project and you will also find links to information about the construction of Firefox add-ons, using the developer tools in Firefox, and other topics.
-Learn how to create add-ons for [Firefox](https://www.mozilla.org/firefox/), how to develop and build Firefox itself, and how the internals of Firefox and its subprojects work.
+Learn how to create add-ons for [Firefox](https://www.mozilla.org/en-US/firefox/), how to develop and build Firefox itself, and how the internals of Firefox and its subprojects work.
## Key resources
@@ -29,31 +29,31 @@ Firefox is available in five **channels**.
Each night we build Firefox from the latest code in [mozilla-central](https://hg.mozilla.org/mozilla-central/). These builds are for Firefox developers or those who want to try out the very latest cutting edge features while they're still under active development.
-[Download Firefox Nightly](https://www.mozilla.org/firefox/channel/desktop/#nightly)
+[Download Firefox Nightly](https://www.mozilla.org/en-US/firefox/channel/desktop/#nightly)
### Firefox Developer Edition
This is a version of Firefox tailored for developers. Firefox Developer Edition has all the latest developer tools that have reached beta. We also add some extra features for developers that are only available in this channel. It uses its own path and profile, so that you can run it alongside Release or Beta Firefox.
-[Download Firefox Developer Edition](https://www.mozilla.org/firefox/developer/)
+[Download Firefox Developer Edition](https://www.mozilla.org/en-US/firefox/developer/)
### Firefox Beta
Every four weeks, we take the features that are stable enough, and create a new version of Firefox Beta. Firefox Beta builds are for Firefox enthusiasts to test what's destined to become the next released Firefox version.
-[Download Firefox Beta](https://www.mozilla.org/firefox/channel/#beta)
+[Download Firefox Beta](https://www.mozilla.org/en-US/firefox/channel/desktop/#beta)
### Firefox
After stabilizing for another four weeks in Beta, we're ready to ship the new features to hundreds of millions of users in a new release version of Firefox.
-[Download Firefox](https://www.mozilla.org/firefox/new/)
+[Download Firefox](https://www.mozilla.org/en-US/firefox/new/)
### Firefox Extended Support Release (ESR)
Firefox ESR is the long-term support edition of Firefox for desktop for use by organizations including schools, universities, businesses and others who need extended support for mass deployments.
-[Download Firefox ESR](https://www.mozilla.org/firefox/all/#product-desktop-esr)
+[Download Firefox ESR](https://www.mozilla.org/en-US/firefox/all/#product-desktop-esr)
## Contents
@@ -62,4 +62,4 @@ Firefox ESR is the long-term support edition of Firefox for desktop for use by o
## See also
- [Mailing list](https://groups.google.com/a/mozilla.org/g/firefox-dev)
-- [Release schedule](https://wiki.mozilla.org/Release_Management/Calendar)
+- [Release schedule](https://whattrainisitnow.com/calendar/)
diff --git a/files/en-us/mozilla/firefox/releases/1.5/index.md b/files/en-us/mozilla/firefox/releases/1.5/index.md
index 062573d579190ca..0a338aa881030a5 100644
--- a/files/en-us/mozilla/firefox/releases/1.5/index.md
+++ b/files/en-us/mozilla/firefox/releases/1.5/index.md
@@ -82,12 +82,12 @@ Firefox support for Web standards continues to lead the industry with consistent
- Cascading Style Sheets ([CSS](/en-US/docs/Web/CSS)): [CSS Level 1](https://www.w3.org/TR/REC-CSS1/), [CSS Level 2](https://www.w3.org/TR/CSS22/) and parts of [CSS Level 3](https://www.w3.org/Style/CSS/current-work.html)
- Document Object Model ([DOM](/en-US/docs/Web/API/Document_Object_Model)): [DOM Level 1](https://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/), [DOM Level 2](https://www.w3.org/DOM/DOMTR#dom2) and parts of [DOM Level 3](https://www.w3.org/DOM/DOMTR#dom3)
- Mathematical Markup Language: [MathML Version 2.0](https://www.w3.org/Math/)
-- Extensible Markup Language ([XML](/en-US/docs/Web/XML)): [XML 1.0](https://www.w3.org/TR/REC-xml/), [Namespaces in XML](https://www.w3.org/TR/REC-xml-names/), [Associating Style Sheets with XML Documents 1.0](https://www.w3.org/TR/xml-stylesheet/), [Fragment Identifier for XML](https://lists.w3.org/Archives/Public/www-xml-linking-comments/2001AprJun/att-0074/01-NOTE-FIXptr-20010425.htm)
+- Extensible Markup Language ([XML](/en-US/docs/Web/XML)): [XML 1.0](https://www.w3.org/TR/REC-xml/), [Namespaces in XML](https://www.w3.org/TR/REC-xml-names/), [Associating Style Sheets with XML Documents 1.0](https://www.w3.org/TR/xml-stylesheet/), [Fragment Identifier for XML](https://lists.w3.org/Archives/Public/www-xml-linking-comments/2001AprJun/att-0074/NOTE-FIXptr-20010425.htm)
- XSL Transformations ([XSLT](/en-US/docs/Web/XSLT)): [XSLT 1.0](https://www.w3.org/TR/xslt/)
- XML Path Language ([XPath](/en-US/docs/Web/XPath)): [XPath 1.0](https://www.w3.org/TR/xpath/)
- Resource Description Framework ([RDF](/en-US/docs/Glossary/RDF)): [RDF](https://www.w3.org/RDF/)
- Simple Object Access Protocol (SOAP): [SOAP 1.1](https://www.w3.org/TR/2000/NOTE-SOAP-20000508/)
-- [JavaScript](/en-US/docs/Web/JavaScript) 1.6, based on [ECMA-262, revision 3](https://www.ecma-international.org/publications-and-standards/standards/ecma-262/)
+- [JavaScript](/en-US/docs/Web/JavaScript) 1.6, based on [ECMA-262, revision 3](https://ecma-international.org/publications-and-standards/standards/ecma-262/)
Firefox 1.5 supports the following data transport protocols (HTTP, FTP, SSL, TLS, and others), multilingual character data (Unicode), graphics (GIF, JPEG, PNG, SVG, and others) and the latest version of the world's most popular scripting language, [JavaScript 1.6](/en-US/docs/New_in_JavaScript_1.6).
diff --git a/files/en-us/mozilla/firefox/releases/120/index.md b/files/en-us/mozilla/firefox/releases/120/index.md
index 70981ccf18d322f..34f0e530867ecb3 100644
--- a/files/en-us/mozilla/firefox/releases/120/index.md
+++ b/files/en-us/mozilla/firefox/releases/120/index.md
@@ -62,6 +62,7 @@ This article provides information about the changes in Firefox 120 that affect d
- The [Minimum PIN Length Extension (`minPinLength`)](/en-US/docs/Web/API/Web_Authentication_API/WebAuthn_extensions#minpinlength) of the [Web Authentication API](/en-US/docs/Web/API/Web_Authentication_API) is supported, allowing a relying party server to request the authenticator's minimum PIN length during creation/registration ([Firefox bug 1844450](https://bugzil.la/1844450)).
- The {{domxref("Navigator.userActivation")}} property and {{domxref("UserActivation")}} interface are now supported.
These can be used to check whether the user is interacting with the page, or has interacted with it since page load (see [Firefox bug 1791079](https://bugzil.la/1791079)).
+- The {{domxref("PointerEvent.getCoalescedEvents()")}} method is restricted to use in secure contexts only ([Firefox bug 1858434](https://bugzil.la/1858434)).
### WebDriver conformance (WebDriver BiDi, Marionette)
@@ -70,6 +71,10 @@ This article provides information about the changes in Firefox 120 that affect d
- Added serialization support for `Proxy` and `Generator` objects ([Firefox bug 1841786](https://bugzil.la/1841786)).
- Added `authChallenges` property (the list of authentication challenges present in the headers), to `responseStarted` and `responseCompleted` network events, which will be useful in order to handle the upcoming `network.authRequired` event ([Firefox bug 1855149](https://bugzil.la/1855149)).
+## Changes for add-on developers
+
+- Although {{domxref("PointerEvent.getCoalescedEvents()")}} has been restricted to secure contexts ([Firefox bug 1858434](https://bugzil.la/1858434)), content scripts can use this method in documents that aren't a secure context ([Firefox bug 1870498](https://bugzil.la/1870498)).
+
## Older versions
{{Firefox_for_developers}}
diff --git a/files/en-us/mozilla/firefox/releases/128/index.md b/files/en-us/mozilla/firefox/releases/128/index.md
index 0295c984ff8d18f..21f9f9772e37365 100644
--- a/files/en-us/mozilla/firefox/releases/128/index.md
+++ b/files/en-us/mozilla/firefox/releases/128/index.md
@@ -110,7 +110,7 @@ These features are newly shipped in Firefox 128 but are disabled by default. To
- **Privacy Preserving Attribution API (PPA):** `dom.origin-trials.private-attribution.state`.
- [PPA API](https://support.mozilla.org/kb/privacy-preserving-attribution) provides an alternative to user tracking for ad attribution using the new `navigator.privateAttribution` object with `saveImpression()` and `measureConversion()` methods. Read more about PPA [in the explainer](https://github.com/mozilla/explainers/tree/main/ppa-experiment). This experiment can be enabled for websites via [origin trial](https://wiki.mozilla.org/Origin_Trials) or in the browser by setting the preference to `1`. ([Firefox bug 1900929](https://bugzil.la/1900929)).
+ [PPA API](https://support.mozilla.org/en-US/kb/privacy-preserving-attribution) provides an alternative to user tracking for ad attribution using the new `navigator.privateAttribution` object with `saveImpression()` and `measureConversion()` methods. Read more about PPA [in the explainer](https://github.com/mozilla/explainers/tree/main/ppa-experiment). This experiment can be enabled for websites via [origin trial](https://wiki.mozilla.org/Origin_Trials) or in the browser by setting the preference to `1`. ([Firefox bug 1900929](https://bugzil.la/1900929)).
## Older versions
diff --git a/files/en-us/mozilla/firefox/releases/131/index.md b/files/en-us/mozilla/firefox/releases/131/index.md
index b642becb6185914..1e918697cd4ff2b 100644
--- a/files/en-us/mozilla/firefox/releases/131/index.md
+++ b/files/en-us/mozilla/firefox/releases/131/index.md
@@ -18,10 +18,14 @@ This article provides information about the changes in Firefox 131 that affect d
### CSS
+- The `inset-area` CSS property has been renamed to {{CSSXRef("position-area")}} in preparation for further implementation of [Anchor Positioning](/en-US/docs/Web/CSS/CSS_anchor_positioning), so at present this property is only used internally for parsing values. The set of Anchor Positioning features are being progressively rolled out behind a preference. See [Experimental features in Firefox: CSS Anchor Positioning](/en-US/docs/Mozilla/Firefox/Experimental_features#css_anchor_positioning) for more information. ([Firefox bug 1909358](https://bugzil.la/1909358) and [Firefox bug 1838746](https://bugzil.la/1838746)).
+
#### Removals
### JavaScript
+- Support for synchronous iterator helpers, including: {{jsxref("Iterator.prototype.drop()")}}, {{jsxref("Iterator.prototype.every()")}}, {{jsxref("Iterator.prototype.filter()")}}, {{jsxref("Iterator.prototype.find()")}}, {{jsxref("Iterator.prototype.flatMap()")}}, {{jsxref("Iterator.prototype.forEach()")}}, {{jsxref("Iterator.prototype.map()")}}, {{jsxref("Iterator.prototype.reduce()")}}, {{jsxref("Iterator.prototype.some()")}}, and {{jsxref("Iterator.prototype.take()")}}. These allow `Array`-like operations on iterators without having to create intermediate `Array` objects, and can also be used with very large data sets where creating an intermediate `Array` would not even be possible. For more information see [Iterator helpers](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Iterator#iterator_helpers) in the `Iterator` interface. ([Firefox bug 1896390](https://bugzil.la/1896390)).
+
#### Removals
### SVG
@@ -30,7 +34,9 @@ This article provides information about the changes in Firefox 131 that affect d
### HTTP
-- A {{httpheader("Set-Cookie")}} HTTP header with the attribute value of [`SameSite=None`](/en-US/docs/Web/HTTP/Headers/Set-Cookie#none) must now also include the [`Secure`](/en-US/docs/Web/HTTP/Headers/Set-Cookie#secure) attribute. This ensures that cookies set with `SameSite=None` are only ever sent over HTTPS channels. ([Firefox bug 1909673](https://bugzil.la/1909673)).
+- A {{httpheader("Set-Cookie")}} HTTP header with the attribute value of [`SameSite=None`](/en-US/docs/Web/HTTP/Headers/Set-Cookie#none) must now also include the [`Secure`](/en-US/docs/Web/HTTP/Headers/Set-Cookie#secure) attribute. This ensures that cookies set with `SameSite=None` are only ever sent over HTTPS channels. In addition, since Firefox interprets an unspecified `SameSite` value as `SameSite=None`, cookies that don't specify `SameSite` will have the same restriction. ([Firefox bug 1909673](https://bugzil.la/1909673)).
+- [Cookies Having Independent Partitioned State (CHIPS)](/en-US/docs/Web/Privacy/Privacy_sandbox/Partitioned_cookies), or "partitioned cookies", are now supported.
+ This feature allow developers to opt a cookie into partitioned storage using the [`partitioned`](/en-US/docs/Web/HTTP/Headers/Set-Cookie#partitioned) directive of the {{HTTPHeader("Set-Cookie")}} HTTP header. When set, cookies have separate storage for each top-level site, and can only be read within the same top-level site they were set on and its subdomains. This blocks cross-site tracking, while still enabling legitimate uses of third-party cookies such as persisting state of embedded maps or chat widgets across different subdomains of a site. ([Firefox bug 1908160](https://bugzil.la/1908160)).
#### Removals
@@ -40,8 +46,10 @@ This article provides information about the changes in Firefox 131 that affect d
### APIs
+- The {{domxref('PointerEvent.altitudeAngle','altitudeAngle')}} and {{domxref('PointerEvent.azimuthAngle','azimuthAngle')}} properties of the {{domxref('PointerEvent')}} interface are supported, providing the angle between the pointer/stylus and the screen (X-Y plane), and the rotation of the stylus over the screen relative to its x-axis, respectively. ([Firefox bug 1656377](https://bugzil.la/1656377)).
- [Text fragments](/en-US/docs/Web/URI/Fragment/Text_fragments) are now supported, allowing users to link to and highlight specific portions of text in a web page. This feature uses a particular syntax in the [URL fragment](/en-US/docs/Web/URI/Fragment) that identifies the target based on patterns in the rendered text.
Website developers can also use the existence of the {{domxref("Document.fragmentDirective")}} property (an instance of the {{domxref("FragmentDirective")}} interface) to feature check for text fragment support, and the {{CSSxRef("::target-text")}} pseudo element to select and style text that has been selected using a text fragment link. ([Firefox bug 1914877](https://bugzil.la/1914877))
+- The {{domxref('Document/caretPositionFromPoint','caretPositionFromPoint()')}} method of the {{domxref("Document")}} interface has been updated so that it can return the text node and offset for a caret position within a shadow DOM, provided the shadow root corresponding to the point has been supplied to the method. {{domxref("ShadowRoot")}} objects can be passed to the method using the `shadowRoots` property of the newly added `options` argument. ([Firefox bug 1914596](https://bugzil.la/1914596)).
#### DOM
@@ -63,6 +71,9 @@ This article provides information about the changes in Firefox 131 that affect d
## Changes for add-on developers
+- {{WebExtAPIRef("tabs.onUpdated")}} is now triggered when `openerTabId` is changed through `tabs.update()` ([Firefox bug 1409262](https://bugzil.la/1409262)).
+- {{WebExtAPIRef("tabs.update")}} now accepts `openerTabId` set to `-1` to clear `openerTabId` ([Firefox bug 1409262](https://bugzil.la/1409262)).
+
### Removals
### Other
@@ -75,6 +86,10 @@ These features are newly shipped in Firefox 131 but are disabled by default. To
The [(?ims-ims:...)](/en-US/docs/Web/JavaScript/Reference/Regular_expressions/Modifier) regular expression modifiers allow you to make changes to only take effect in a specific part of a regex pattern. ([Firefox bug 1899813](https://bugzil.la/1899813)).
+- **Permissions for microphone and camera:** `permissions.media.query.enabled`
+
+ The `microphone` and `camera` [permissions](/en-US/docs/Web/API/Permissions_API) can now be used in the {{domxref("Permissions.query()")}} method to test whether access to the corresponding hardware have been granted, denied, or still requires user approval ([Firefox bug 1609427](https://bugzil.la/1609427), [Firefox bug 1915222](https://bugzil.la/1915222)).
+
## Older versions
{{Firefox_for_developers}}
diff --git a/files/en-us/mozilla/firefox/releases/3.6/index.md b/files/en-us/mozilla/firefox/releases/3.6/index.md
index 8ded57fdffa6f55..6cad2ac98e0c731 100644
--- a/files/en-us/mozilla/firefox/releases/3.6/index.md
+++ b/files/en-us/mozilla/firefox/releases/3.6/index.md
@@ -6,7 +6,7 @@ page-type: firefox-release-notes
{{FirefoxSidebar}}
-[Firefox 3.6](https://www.mozilla.org/firefox/) offers support for new and developing web standards, increased performance, and an overall better experience for web users and developers. This page provides links to articles covering the new capabilities of Firefox 3.6.
+[Firefox 3.6](https://www.mozilla.org/en-US/firefox/) offers support for new and developing web standards, increased performance, and an overall better experience for web users and developers. This page provides links to articles covering the new capabilities of Firefox 3.6.
## For website and application developers
diff --git a/files/en-us/mozilla/firefox/releases/3.6/updating_themes/index.md b/files/en-us/mozilla/firefox/releases/3.6/updating_themes/index.md
index 028296c09999f96..6f98ace1cdacd26 100644
--- a/files/en-us/mozilla/firefox/releases/3.6/updating_themes/index.md
+++ b/files/en-us/mozilla/firefox/releases/3.6/updating_themes/index.md
@@ -10,7 +10,7 @@ This article intends to help theme authors update Firefox-3.5-compatible themes
## Chrome registration change
-[`contents.rdf` is not supported anymore](https://www.oxymoronical.com/blog/2009/06/Farewell-contentsrdf), you need to use `chrome.manifest` instead.
+[`contents.rdf` is not supported anymore](https://www.oxymoronical.com/blog/2009/06/Farewell-contentsrdf/), you need to use `chrome.manifest` instead.
## Emptytext styling
diff --git a/files/en-us/mozilla/firefox/releases/40/index.md b/files/en-us/mozilla/firefox/releases/40/index.md
index 188ac5ee8f85b9d..0fbcb2cab68cf7f 100644
--- a/files/en-us/mozilla/firefox/releases/40/index.md
+++ b/files/en-us/mozilla/firefox/releases/40/index.md
@@ -6,7 +6,7 @@ page-type: firefox-release-notes
{{FirefoxSidebar}}
-[To test the latest developer features of Firefox, install Firefox Developer Edition](https://www.mozilla.org/firefox/developer/) Firefox 40 was released on August 11, 2015. This article lists key changes that are useful not only for web developers, but also Firefox and Gecko developers as well as add-on developers.
+[To test the latest developer features of Firefox, install Firefox Developer Edition](https://www.mozilla.org/en-US/firefox/developer/) Firefox 40 was released on August 11, 2015. This article lists key changes that are useful not only for web developers, but also Firefox and Gecko developers as well as add-on developers.
## Changes for Web developers
diff --git a/files/en-us/mozilla/firefox/releases/41/index.md b/files/en-us/mozilla/firefox/releases/41/index.md
index 15138ae9535fc90..c46dd0cd73d2cae 100644
--- a/files/en-us/mozilla/firefox/releases/41/index.md
+++ b/files/en-us/mozilla/firefox/releases/41/index.md
@@ -6,7 +6,7 @@ page-type: firefox-release-notes
{{FirefoxSidebar}}
-[To test the latest developer features of Firefox, install Firefox Developer Edition](https://www.mozilla.org/firefox/developer/) Firefox 41 was released on September 22, 2015. This article lists key changes that are useful not only for web developers, but also Firefox and Gecko developers as well as add-on developers.
+[To test the latest developer features of Firefox, install Firefox Developer Edition](https://www.mozilla.org/en-US/firefox/developer/) Firefox 41 was released on September 22, 2015. This article lists key changes that are useful not only for web developers, but also Firefox and Gecko developers as well as add-on developers.
## Changes for Web developers
diff --git a/files/en-us/mozilla/firefox/releases/42/index.md b/files/en-us/mozilla/firefox/releases/42/index.md
index d7ce374119b6bcb..90437e362e37fc3 100644
--- a/files/en-us/mozilla/firefox/releases/42/index.md
+++ b/files/en-us/mozilla/firefox/releases/42/index.md
@@ -6,7 +6,7 @@ page-type: firefox-release-notes
{{FirefoxSidebar}}
-[To test the latest developer features of Firefox, install Firefox Developer Edition](https://www.mozilla.org/firefox/developer/) Firefox 42 was released on November 3, 2015. This article lists key changes that are useful not only for web developers, but also Firefox and Gecko developers as well as add-on developers.
+[To test the latest developer features of Firefox, install Firefox Developer Edition](https://www.mozilla.org/en-US/firefox/developer/) Firefox 42 was released on November 3, 2015. This article lists key changes that are useful not only for web developers, but also Firefox and Gecko developers as well as add-on developers.
## Changes for Web developers
diff --git a/files/en-us/mozilla/firefox/releases/43/index.md b/files/en-us/mozilla/firefox/releases/43/index.md
index b25ed320caab281..01e0bdcf5407748 100644
--- a/files/en-us/mozilla/firefox/releases/43/index.md
+++ b/files/en-us/mozilla/firefox/releases/43/index.md
@@ -6,7 +6,7 @@ page-type: firefox-release-notes
{{FirefoxSidebar}}
-[To test the latest developer features of Firefox, install Firefox Developer Edition](https://www.mozilla.org/firefox/developer/) Firefox 43 was released on December 15, 2015. This article lists key changes that are useful not only for web developers, but also Firefox and Gecko developers as well as add-on developers.
+[To test the latest developer features of Firefox, install Firefox Developer Edition](https://www.mozilla.org/en-US/firefox/developer/) Firefox 43 was released on December 15, 2015. This article lists key changes that are useful not only for web developers, but also Firefox and Gecko developers as well as add-on developers.
## Changes for Web developers
diff --git a/files/en-us/mozilla/firefox/releases/44/index.md b/files/en-us/mozilla/firefox/releases/44/index.md
index 33e0a6dbaad1242..c2caba88a7ef6a5 100644
--- a/files/en-us/mozilla/firefox/releases/44/index.md
+++ b/files/en-us/mozilla/firefox/releases/44/index.md
@@ -6,7 +6,7 @@ page-type: firefox-release-notes
{{FirefoxSidebar}}
-[To test the latest developer features of Firefox, install Firefox Developer Edition](https://www.mozilla.org/firefox/developer/).
+[To test the latest developer features of Firefox, install Firefox Developer Edition](https://www.mozilla.org/en-US/firefox/developer/).
Firefox 44 was released on January 26, 2016. This article lists key changes that are useful not only for web developers, but also Firefox and Gecko developers as well as add-on developers.
## Changes for Web developers
diff --git a/files/en-us/mozilla/firefox/releases/45/index.md b/files/en-us/mozilla/firefox/releases/45/index.md
index b8cdd79688592ac..a67519260a75f7a 100644
--- a/files/en-us/mozilla/firefox/releases/45/index.md
+++ b/files/en-us/mozilla/firefox/releases/45/index.md
@@ -128,7 +128,7 @@ _No change._
### XUL
-- Tab Groups [have been removed](https://support.mozilla.org/kb/tab-groups-removal).
+- Tab Groups [have been removed](https://support.mozilla.org/en-US/kb/tab-groups-removal).
### JavaScript code modules
diff --git a/files/en-us/mozilla/firefox/releases/46/index.md b/files/en-us/mozilla/firefox/releases/46/index.md
index 84d98364fbecb36..f2f071e0f2c3de8 100644
--- a/files/en-us/mozilla/firefox/releases/46/index.md
+++ b/files/en-us/mozilla/firefox/releases/46/index.md
@@ -6,7 +6,7 @@ page-type: firefox-release-notes
{{FirefoxSidebar}}
-[To test the latest developer features of Firefox, install Firefox Developer Edition](https://www.mozilla.org/firefox/developer/).
+[To test the latest developer features of Firefox, install Firefox Developer Edition](https://www.mozilla.org/en-US/firefox/developer/).
Firefox 46 was released on April 26, 2016. This article lists key changes that are useful not only for web developers, but also Firefox and Gecko developers as well as add-on developers.
## Changes for Web developers
diff --git a/files/en-us/mozilla/firefox/releases/47/index.md b/files/en-us/mozilla/firefox/releases/47/index.md
index 6080af87ce3e9f1..cf7e44f4a7d5ba8 100644
--- a/files/en-us/mozilla/firefox/releases/47/index.md
+++ b/files/en-us/mozilla/firefox/releases/47/index.md
@@ -6,7 +6,7 @@ page-type: firefox-release-notes
{{FirefoxSidebar}}
-[To test the latest developer features of Firefox, install Firefox Developer Edition](https://www.mozilla.org/firefox/developer/) Firefox 47 was released on June 6, 2016. This article lists key changes that are useful not only for web developers, but also Firefox and Gecko developers as well as add-on developers.
+[To test the latest developer features of Firefox, install Firefox Developer Edition](https://www.mozilla.org/en-US/firefox/developer/) Firefox 47 was released on June 6, 2016. This article lists key changes that are useful not only for web developers, but also Firefox and Gecko developers as well as add-on developers.
## Changes for Web developers
diff --git a/files/en-us/mozilla/firefox/releases/48/index.md b/files/en-us/mozilla/firefox/releases/48/index.md
index c863edceee284b4..bd9102365b03856 100644
--- a/files/en-us/mozilla/firefox/releases/48/index.md
+++ b/files/en-us/mozilla/firefox/releases/48/index.md
@@ -6,7 +6,7 @@ page-type: firefox-release-notes
{{FirefoxSidebar}}
-[To test the latest developer features of Firefox, install Firefox Developer Edition](https://www.mozilla.org/firefox/developer/) Firefox 48 was released on August 2, 2016. This article lists key changes that are useful not only for web developers, but also Firefox and Gecko developers as well as add-on developers.
+[To test the latest developer features of Firefox, install Firefox Developer Edition](https://www.mozilla.org/en-US/firefox/developer/) Firefox 48 was released on August 2, 2016. This article lists key changes that are useful not only for web developers, but also Firefox and Gecko developers as well as add-on developers.
## Changes for Web developers
diff --git a/files/en-us/mozilla/firefox/releases/49/index.md b/files/en-us/mozilla/firefox/releases/49/index.md
index 34f58913498d4a6..d681330eba1ff20 100644
--- a/files/en-us/mozilla/firefox/releases/49/index.md
+++ b/files/en-us/mozilla/firefox/releases/49/index.md
@@ -6,7 +6,7 @@ page-type: firefox-release-notes
{{FirefoxSidebar}}
-[To test the latest developer features of Firefox, install Firefox Developer Edition](https://www.mozilla.org/firefox/developer/) Firefox 49 was released on September 20, 2016. This article lists key changes that are useful not only for web developers, but also Firefox and Gecko developers as well as add-on developers.
+[To test the latest developer features of Firefox, install Firefox Developer Edition](https://www.mozilla.org/en-US/firefox/developer/) Firefox 49 was released on September 20, 2016. This article lists key changes that are useful not only for web developers, but also Firefox and Gecko developers as well as add-on developers.
## Changes for Web developers
diff --git a/files/en-us/mozilla/firefox/releases/50/index.md b/files/en-us/mozilla/firefox/releases/50/index.md
index 406c26b9b7a4346..43ffd5af2b4f525 100644
--- a/files/en-us/mozilla/firefox/releases/50/index.md
+++ b/files/en-us/mozilla/firefox/releases/50/index.md
@@ -6,7 +6,7 @@ page-type: firefox-release-notes
{{FirefoxSidebar}}
-[To test the latest developer features of Firefox, install Firefox Developer Edition](https://www.mozilla.org/firefox/developer/).
+[To test the latest developer features of Firefox, install Firefox Developer Edition](https://www.mozilla.org/en-US/firefox/developer/).
Firefox 50 was released on November 15, 2016. This article lists key changes that are useful not only for web developers, but also Firefox and Gecko developers as well as add-on developers.
## Changes for Web developers
diff --git a/files/en-us/mozilla/firefox/releases/51/index.md b/files/en-us/mozilla/firefox/releases/51/index.md
index b229e74d099d998..4f03887da3ab0de 100644
--- a/files/en-us/mozilla/firefox/releases/51/index.md
+++ b/files/en-us/mozilla/firefox/releases/51/index.md
@@ -6,7 +6,7 @@ page-type: firefox-release-notes
{{FirefoxSidebar}}
-[To test the latest developer features of Firefox, install Firefox Developer Edition](https://www.mozilla.org/firefox/developer/).
+[To test the latest developer features of Firefox, install Firefox Developer Edition](https://www.mozilla.org/en-US/firefox/developer/).
Firefox 51 was released on January 24, 2017. This article lists key changes that are useful not only for web developers, but also Firefox and Gecko developers as well as add-on developers.
## Changes for Web developers
diff --git a/files/en-us/web/accessibility/aria/attributes/aria-brailleroledescription/index.md b/files/en-us/web/accessibility/aria/attributes/aria-brailleroledescription/index.md
index fa56277c89eae53..7ce21ddaeda1c1a 100644
--- a/files/en-us/web/accessibility/aria/attributes/aria-brailleroledescription/index.md
+++ b/files/en-us/web/accessibility/aria/attributes/aria-brailleroledescription/index.md
@@ -39,7 +39,7 @@ A few rules to remember:
- Only apply `aria-brailleroledescription` to elements with a valid ARIA role or elements with implicit role semantics.
- The `aria-brailleroledescription`, if present, must have a non-empty, none null value that is different from the `aria-roledescription` value, which, in turn, is different from the ARIA explicit or role or implicit semantic role.
-- Avoid using Unicode Braille Patterns. If they must be used, ensure the `aria-brailleroledescription` value contains content other than unicode braille patterns, whitespace, and braille battern dots-0.
+- Avoid using Unicode Braille Patterns. If they must be used, ensure the `aria-brailleroledescription` value contains content other than unicode braille patterns, whitespace, and braille pattern dots-0.
- Ensure the value is always localized to the document's language.
> [!WARNING]
diff --git a/files/en-us/web/accessibility/aria/roles/row_role/index.md b/files/en-us/web/accessibility/aria/roles/row_role/index.md
index df615a976fddc30..d5d301ac4379512 100644
--- a/files/en-us/web/accessibility/aria/roles/row_role/index.md
+++ b/files/en-us/web/accessibility/aria/roles/row_role/index.md
@@ -81,7 +81,7 @@ To create an interactive widget that has a tabular structure, use the grid patte
- : The `aria-expanded` attribute, which defines the state of the row, can take one of three values, or be omitted:
- - `aria-expanded="true`: Row is currently expanded.
+ - `aria-expanded="true"`: Row is currently expanded.
- `aria-expanded="false"`: Row is currently collapsed.
- `aria-expanded="undefined"` or the attribute is missing: The row is neither expandable nor collapsible.
@@ -91,7 +91,7 @@ To create an interactive widget that has a tabular structure, use the grid patte
- : Only relevant if the row is in an interactive container, such as a grid or treegrid, but not relevant if the row is in a table. The `aria-selected` attribute can take one of three values, or be omitted:
- - `aria-selected="true`: Row is currently selected
+ - `aria-selected="true"`: Row is currently selected
- `aria-selected="false"`: Row is not currently selected.
- `aria-selected="undefined"` or the attribute is missing: The row is not selectable.
diff --git a/files/en-us/web/api/abortsignal/index.md b/files/en-us/web/api/abortsignal/index.md
index d24dd666f7d2692..628cac0a47a462b 100644
--- a/files/en-us/web/api/abortsignal/index.md
+++ b/files/en-us/web/api/abortsignal/index.md
@@ -116,7 +116,7 @@ If you need to abort the operation on timeout then you can use the static {{domx
This returns an `AbortSignal` that will automatically timeout after a certain number of milliseconds.
The code snippet below shows how you would either succeed in downloading a file, or handle a timeout error after 5 seconds.
-Note that when there is a timeout the `fetch()` promise rejects with a "`TimeoutError`" `DOMException`.
+Note that when there is a timeout the `fetch()` promise rejects with a `TimeoutError` `DOMException`.
This allows code to differentiate between timeouts (for which user notification is probably required), and user aborts.
```js
diff --git a/files/en-us/web/api/angle_instanced_arrays/index.md b/files/en-us/web/api/angle_instanced_arrays/index.md
index d344a840838e233..2d5ee1e69a1cdfd 100644
--- a/files/en-us/web/api/angle_instanced_arrays/index.md
+++ b/files/en-us/web/api/angle_instanced_arrays/index.md
@@ -12,7 +12,7 @@ The **`ANGLE_instanced_arrays`** extension is part of the [WebGL API](/en-US/doc
WebGL extensions are available using the {{domxref("WebGLRenderingContext.getExtension()")}} method. For more information, see also [Using Extensions](/en-US/docs/Web/API/WebGL_API/Using_Extensions) in the [WebGL tutorial](/en-US/docs/Web/API/WebGL_API/Tutorial).
> [!NOTE]
-> This extension is only available to {{domxref("WebGLRenderingContext", "WebGL1", "", 1)}} contexts. In {{domxref("WebGL2RenderingContext", "WebGL2", "", 1)}}, the functionality of this extension is available on the WebGL2 context by default and the constants and methods are available without the "`ANGLE`" suffix.
+> This extension is only available to {{domxref("WebGLRenderingContext", "WebGL1", "", 1)}} contexts. In {{domxref("WebGL2RenderingContext", "WebGL2", "", 1)}}, the functionality of this extension is available on the WebGL2 context by default and the constants and methods are available without the `ANGLE_` suffix.
>
> Despite the name "ANGLE", this extension works on any device if the hardware supports it and not just on Windows when using the ANGLE library. "ANGLE" just indicates that this extension has been written by the ANGLE library authors.
diff --git a/files/en-us/web/api/animationeffect/gettiming/index.md b/files/en-us/web/api/animationeffect/gettiming/index.md
index 255c0df2b4b19a0..656372eedc42ae7 100644
--- a/files/en-us/web/api/animationeffect/gettiming/index.md
+++ b/files/en-us/web/api/animationeffect/gettiming/index.md
@@ -69,7 +69,7 @@ An object containing the following properties:
- `fill`
- - : `"none"`, `"forwards"`, `"backwards"`, "`both`", or `"auto"`.
+ - : `"none"`, `"forwards"`, `"backwards"`, `"both"`, or `"auto"`.
Indicates whether the effect is reflected by its target(s) prior to playing
(`"backwards"`), retained after the effect has completed (`"forwards"`), `"both"`, or
diff --git a/files/en-us/web/api/animationplaybackevent/currenttime/index.md b/files/en-us/web/api/animationplaybackevent/currenttime/index.md
index b99992ade39006d..703a7031efa5bfb 100644
--- a/files/en-us/web/api/animationplaybackevent/currenttime/index.md
+++ b/files/en-us/web/api/animationplaybackevent/currenttime/index.md
@@ -16,9 +16,9 @@ A number representing the current time in milliseconds, or `null`.
## Reduced time precision
-To offer protection against timing attacks and [fingerprinting](/en-US/docs/Glossary/Fingerprinting), the precision of `platbackEvent.currentTime` might get rounded depending on browser settings. In Firefox, the `privacy.reduceTimerPrecision` preference is enabled by default and defaults to 2ms. You can also enable `privacy.resistFingerprinting`, in which case the precision will be 100ms or the value of `privacy.resistFingerprinting.reduceTimerPrecision.microseconds`, whichever is larger.
+To offer protection against timing attacks and [fingerprinting](/en-US/docs/Glossary/Fingerprinting), the precision of `playbackEvent.currentTime` might get rounded depending on browser settings. In Firefox, the `privacy.reduceTimerPrecision` preference is enabled by default and defaults to 2ms. You can also enable `privacy.resistFingerprinting`, in which case the precision will be 100ms or the value of `privacy.resistFingerprinting.reduceTimerPrecision.microseconds`, whichever is larger.
-For example, with reduced time precision, the result of `platbackEvent.currentTime` will always be a multiple of 0.002, or a multiple of 0.1 (or `privacy.resistFingerprinting.reduceTimerPrecision.microseconds`) with `privacy.resistFingerprinting` enabled.
+For example, with reduced time precision, the result of `playbackEvent.currentTime` will always be a multiple of 0.002, or a multiple of 0.1 (or `privacy.resistFingerprinting.reduceTimerPrecision.microseconds`) with `privacy.resistFingerprinting` enabled.
```js
// reduced time precision (2ms) in Firefox 60
diff --git a/files/en-us/web/api/audiodata/allocationsize/index.md b/files/en-us/web/api/audiodata/allocationsize/index.md
index 60247c6a8f3539c..ebd8b3e69c286e3 100644
--- a/files/en-us/web/api/audiodata/allocationsize/index.md
+++ b/files/en-us/web/api/audiodata/allocationsize/index.md
@@ -3,12 +3,10 @@ title: "AudioData: allocationSize() method"
short-title: allocationSize()
slug: Web/API/AudioData/allocationSize
page-type: web-api-instance-method
-status:
- - experimental
browser-compat: api.AudioData.allocationSize
---
-{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}{{SeeCompatTable}}
+{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}
The **`allocationSize()`** method of the {{domxref("AudioData")}} interface returns the size in bytes required to hold the current sample as filtered by options passed into the method.
diff --git a/files/en-us/web/api/audiodata/audiodata/index.md b/files/en-us/web/api/audiodata/audiodata/index.md
index f59c11a7ff1c9f7..cacbddbcff5d29c 100644
--- a/files/en-us/web/api/audiodata/audiodata/index.md
+++ b/files/en-us/web/api/audiodata/audiodata/index.md
@@ -3,12 +3,10 @@ title: "AudioData: AudioData() constructor"
short-title: AudioData()
slug: Web/API/AudioData/AudioData
page-type: web-api-constructor
-status:
- - experimental
browser-compat: api.AudioData.AudioData
---
-{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}{{SeeCompatTable}}
+{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}
The **`AudioData()`** constructor creates a new {{domxref("AudioData")}} object which represents an individual audio sample.
diff --git a/files/en-us/web/api/audiodata/clone/index.md b/files/en-us/web/api/audiodata/clone/index.md
index 552b7af14bdaed0..57cdc867724c2c5 100644
--- a/files/en-us/web/api/audiodata/clone/index.md
+++ b/files/en-us/web/api/audiodata/clone/index.md
@@ -3,12 +3,10 @@ title: "AudioData: clone() method"
short-title: clone()
slug: Web/API/AudioData/clone
page-type: web-api-instance-method
-status:
- - experimental
browser-compat: api.AudioData.clone
---
-{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}{{SeeCompatTable}}
+{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}
The **`clone()`** method of the {{domxref("AudioData")}} interface creates a new `AudioData` object with reference to the same media resource as the original.
diff --git a/files/en-us/web/api/audiodata/close/index.md b/files/en-us/web/api/audiodata/close/index.md
index f92be7d1611da80..717787794c8feaf 100644
--- a/files/en-us/web/api/audiodata/close/index.md
+++ b/files/en-us/web/api/audiodata/close/index.md
@@ -3,12 +3,10 @@ title: "AudioData: close() method"
short-title: close()
slug: Web/API/AudioData/close
page-type: web-api-instance-method
-status:
- - experimental
browser-compat: api.AudioData.close
---
-{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}{{SeeCompatTable}}
+{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}
The **`close()`** method of the {{domxref("AudioData")}} interface clears all states and releases the reference to the media resource.
diff --git a/files/en-us/web/api/audiodata/copyto/index.md b/files/en-us/web/api/audiodata/copyto/index.md
index c343a7222634d1a..3e9026a83b7eb0d 100644
--- a/files/en-us/web/api/audiodata/copyto/index.md
+++ b/files/en-us/web/api/audiodata/copyto/index.md
@@ -3,12 +3,10 @@ title: "AudioData: copyTo() method"
short-title: copyTo()
slug: Web/API/AudioData/copyTo
page-type: web-api-instance-method
-status:
- - experimental
browser-compat: api.AudioData.copyTo
---
-{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}{{SeeCompatTable}}
+{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}
The **`copyTo()`** method of the {{domxref("AudioData")}} interface copies a plane of an `AudioData` object to a destination buffer.
diff --git a/files/en-us/web/api/audiodata/duration/index.md b/files/en-us/web/api/audiodata/duration/index.md
index 7db4e35678d77bb..4afa93cabec182d 100644
--- a/files/en-us/web/api/audiodata/duration/index.md
+++ b/files/en-us/web/api/audiodata/duration/index.md
@@ -3,12 +3,10 @@ title: "AudioData: duration property"
short-title: duration
slug: Web/API/AudioData/duration
page-type: web-api-instance-property
-status:
- - experimental
browser-compat: api.AudioData.duration
---
-{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}{{SeeCompatTable}}
+{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}
The **`duration`** read-only property of the {{domxref("AudioData")}} interface returns the duration in microseconds of this `AudioData` object.
diff --git a/files/en-us/web/api/audiodata/format/index.md b/files/en-us/web/api/audiodata/format/index.md
index d08b9bdf381b744..719511a3c9aea50 100644
--- a/files/en-us/web/api/audiodata/format/index.md
+++ b/files/en-us/web/api/audiodata/format/index.md
@@ -3,12 +3,10 @@ title: "AudioData: format property"
short-title: format
slug: Web/API/AudioData/format
page-type: web-api-instance-property
-status:
- - experimental
browser-compat: api.AudioData.format
---
-{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}{{SeeCompatTable}}
+{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}
The **`format`** read-only property of the {{domxref("AudioData")}} interface returns the sample format of the `AudioData` object.
diff --git a/files/en-us/web/api/audiodata/index.md b/files/en-us/web/api/audiodata/index.md
index 938127cb6f2cc67..d4c3cf227830cca 100644
--- a/files/en-us/web/api/audiodata/index.md
+++ b/files/en-us/web/api/audiodata/index.md
@@ -2,12 +2,10 @@
title: AudioData
slug: Web/API/AudioData
page-type: web-api-interface
-status:
- - experimental
browser-compat: api.AudioData
---
-{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}{{SeeCompatTable}}
+{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}
The **`AudioData`** interface of the [WebCodecs API](/en-US/docs/Web/API/WebCodecs_API) represents an audio sample.
@@ -32,33 +30,33 @@ In planar format, the number of planes is equal to {{domxref("AudioData.numberOf
## Constructor
-- {{domxref("AudioData.AudioData", "AudioData()")}} {{Experimental_Inline}}
+- {{domxref("AudioData.AudioData", "AudioData()")}}
- : Creates a new `AudioData` object.
## Instance properties
-- {{domxref("AudioData.format")}} {{ReadOnlyInline}} {{Experimental_Inline}}
+- {{domxref("AudioData.format")}} {{ReadOnlyInline}}
- : Returns the sample format of the audio.
-- {{domxref("AudioData.sampleRate")}} {{ReadOnlyInline}} {{Experimental_Inline}}
+- {{domxref("AudioData.sampleRate")}} {{ReadOnlyInline}}
- : Returns the sample rate of the audio in Hz.
-- {{domxref("AudioData.numberOfFrames")}} {{ReadOnlyInline}} {{Experimental_Inline}}
+- {{domxref("AudioData.numberOfFrames")}} {{ReadOnlyInline}}
- : Returns the number of frames.
-- {{domxref("AudioData.numberOfChannels")}} {{ReadOnlyInline}} {{Experimental_Inline}}
+- {{domxref("AudioData.numberOfChannels")}} {{ReadOnlyInline}}
- : Returns the number of audio channels.
-- {{domxref("AudioData.duration")}} {{ReadOnlyInline}} {{Experimental_Inline}}
+- {{domxref("AudioData.duration")}} {{ReadOnlyInline}}
- : Returns the duration of the audio in microseconds.
-- {{domxref("AudioData.timestamp")}} {{ReadOnlyInline}} {{Experimental_Inline}}
+- {{domxref("AudioData.timestamp")}} {{ReadOnlyInline}}
- : Returns the timestamp of the audio in microseconds.
## Instance methods
-- {{domxref("AudioData.allocationSize()")}} {{Experimental_Inline}}
+- {{domxref("AudioData.allocationSize()")}}
- : Returns the number of bytes required to hold the sample as filtered by options passed into the method.
-- {{domxref("AudioData.copyTo()")}} {{Experimental_Inline}}
+- {{domxref("AudioData.copyTo()")}}
- : Copies the samples from the specified plane of the `AudioData` object to the destination.
-- {{domxref("AudioData.clone()")}} {{Experimental_Inline}}
+- {{domxref("AudioData.clone()")}}
- : Creates a new `AudioData` object with reference to the same media resource as the original.
-- {{domxref("AudioData.close()")}} {{Experimental_Inline}}
+- {{domxref("AudioData.close()")}}
- : Clears all states and releases the reference to the media resource.
## Specifications
diff --git a/files/en-us/web/api/audiodata/numberofchannels/index.md b/files/en-us/web/api/audiodata/numberofchannels/index.md
index 27629aa3af6b46d..ad71497ef726a2e 100644
--- a/files/en-us/web/api/audiodata/numberofchannels/index.md
+++ b/files/en-us/web/api/audiodata/numberofchannels/index.md
@@ -3,12 +3,10 @@ title: "AudioData: numberOfChannels property"
short-title: numberOfChannels
slug: Web/API/AudioData/numberOfChannels
page-type: web-api-instance-property
-status:
- - experimental
browser-compat: api.AudioData.numberOfChannels
---
-{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}{{SeeCompatTable}}
+{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}
The **`numberOfChannels`** read-only property of the {{domxref("AudioData")}} interface returns the number of channels in the `AudioData` object.
diff --git a/files/en-us/web/api/audiodata/numberofframes/index.md b/files/en-us/web/api/audiodata/numberofframes/index.md
index 6a56c91f06e0457..f8decd6aabc4d65 100644
--- a/files/en-us/web/api/audiodata/numberofframes/index.md
+++ b/files/en-us/web/api/audiodata/numberofframes/index.md
@@ -3,12 +3,10 @@ title: "AudioData: numberOfFrames property"
short-title: numberOfFrames
slug: Web/API/AudioData/numberOfFrames
page-type: web-api-instance-property
-status:
- - experimental
browser-compat: api.AudioData.numberOfFrames
---
-{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}{{SeeCompatTable}}
+{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}
The **`numberOfFrames`** read-only property of the {{domxref("AudioData")}} interface returns the number of frames in the `AudioData` object.
diff --git a/files/en-us/web/api/audiodata/samplerate/index.md b/files/en-us/web/api/audiodata/samplerate/index.md
index 97a35e675ac4246..396f4e46b416d92 100644
--- a/files/en-us/web/api/audiodata/samplerate/index.md
+++ b/files/en-us/web/api/audiodata/samplerate/index.md
@@ -3,12 +3,10 @@ title: "AudioData: sampleRate property"
short-title: sampleRate
slug: Web/API/AudioData/sampleRate
page-type: web-api-instance-property
-status:
- - experimental
browser-compat: api.AudioData.sampleRate
---
-{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}{{SeeCompatTable}}
+{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}
The **`sampleRate`** read-only property of the {{domxref("AudioData")}} interface returns the sample rate in Hz.
diff --git a/files/en-us/web/api/audiodata/timestamp/index.md b/files/en-us/web/api/audiodata/timestamp/index.md
index dc348072ad5d43b..d05fcf571353bb4 100644
--- a/files/en-us/web/api/audiodata/timestamp/index.md
+++ b/files/en-us/web/api/audiodata/timestamp/index.md
@@ -3,12 +3,10 @@ title: "AudioData: timestamp property"
short-title: timestamp
slug: Web/API/AudioData/timestamp
page-type: web-api-instance-property
-status:
- - experimental
browser-compat: api.AudioData.timestamp
---
-{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}{{SeeCompatTable}}
+{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}
The **`timestamp`** read-only property of the {{domxref("AudioData")}} interface returns the timestamp of this `AudioData` object.
diff --git a/files/en-us/web/api/audiodecoder/audiodecoder/index.md b/files/en-us/web/api/audiodecoder/audiodecoder/index.md
index c11288620c62ea8..da619bc4647771f 100644
--- a/files/en-us/web/api/audiodecoder/audiodecoder/index.md
+++ b/files/en-us/web/api/audiodecoder/audiodecoder/index.md
@@ -3,12 +3,10 @@ title: "AudioDecoder: AudioDecoder() constructor"
short-title: AudioDecoder()
slug: Web/API/AudioDecoder/AudioDecoder
page-type: web-api-constructor
-status:
- - experimental
browser-compat: api.AudioDecoder.AudioDecoder
---
-{{securecontext_header}}{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}{{SeeCompatTable}}
+{{securecontext_header}}{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}
The **`AudioDecoder()`** constructor creates a new {{domxref("AudioDecoder")}} object with the provided `init.output` callback assigned as the output callback, the provided `init.error` callback as the error callback, and the {{domxref("AudioDecoder.state")}} set to `"unconfigured"`.
diff --git a/files/en-us/web/api/audiodecoder/close/index.md b/files/en-us/web/api/audiodecoder/close/index.md
index bea8fe90377d05c..2bc8877b60d3088 100644
--- a/files/en-us/web/api/audiodecoder/close/index.md
+++ b/files/en-us/web/api/audiodecoder/close/index.md
@@ -3,12 +3,10 @@ title: "AudioDecoder: close() method"
short-title: close()
slug: Web/API/AudioDecoder/close
page-type: web-api-instance-method
-status:
- - experimental
browser-compat: api.AudioDecoder.close
---
-{{securecontext_header}}{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}{{SeeCompatTable}}
+{{securecontext_header}}{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}
The **`close()`** method of the {{domxref("AudioDecoder")}} interface ends all pending work and releases system resources.
diff --git a/files/en-us/web/api/audiodecoder/configure/index.md b/files/en-us/web/api/audiodecoder/configure/index.md
index 743f8e93cee901e..63bf6608e454260 100644
--- a/files/en-us/web/api/audiodecoder/configure/index.md
+++ b/files/en-us/web/api/audiodecoder/configure/index.md
@@ -3,12 +3,10 @@ title: "AudioDecoder: configure() method"
short-title: configure()
slug: Web/API/AudioDecoder/configure
page-type: web-api-instance-method
-status:
- - experimental
browser-compat: api.AudioDecoder.configure
---
-{{securecontext_header}}{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}{{SeeCompatTable}}
+{{securecontext_header}}{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}
The **`configure()`** method of the {{domxref("AudioDecoder")}} interface enqueues a control message to configure the audio decoder for decoding chunks.
diff --git a/files/en-us/web/api/audiodecoder/decode/index.md b/files/en-us/web/api/audiodecoder/decode/index.md
index 7cf7b11f62d89a9..7739de227185ca2 100644
--- a/files/en-us/web/api/audiodecoder/decode/index.md
+++ b/files/en-us/web/api/audiodecoder/decode/index.md
@@ -3,12 +3,10 @@ title: "AudioDecoder: decode() method"
short-title: decode()
slug: Web/API/AudioDecoder/decode
page-type: web-api-instance-method
-status:
- - experimental
browser-compat: api.AudioDecoder.decode
---
-{{securecontext_header}}{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}{{SeeCompatTable}}
+{{securecontext_header}}{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}
The **`decode()`** method of the {{domxref("AudioDecoder")}} interface enqueues a control message to decode a given chunk of audio.
diff --git a/files/en-us/web/api/audiodecoder/decodequeuesize/index.md b/files/en-us/web/api/audiodecoder/decodequeuesize/index.md
index 7a675b838685051..4c7de465f0584d1 100644
--- a/files/en-us/web/api/audiodecoder/decodequeuesize/index.md
+++ b/files/en-us/web/api/audiodecoder/decodequeuesize/index.md
@@ -3,12 +3,10 @@ title: "AudioDecoder: decodeQueueSize property"
short-title: decodeQueueSize
slug: Web/API/AudioDecoder/decodeQueueSize
page-type: web-api-instance-property
-status:
- - experimental
browser-compat: api.AudioDecoder.decodeQueueSize
---
-{{securecontext_header}}{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}{{SeeCompatTable}}
+{{securecontext_header}}{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}
The **`decodeQueueSize`** read-only property of the {{domxref("AudioDecoder")}} interface returns the number of pending decode requests in the queue.
diff --git a/files/en-us/web/api/audiodecoder/dequeue_event/index.md b/files/en-us/web/api/audiodecoder/dequeue_event/index.md
index ffcd59dc46453fc..5fcecea1b30f837 100644
--- a/files/en-us/web/api/audiodecoder/dequeue_event/index.md
+++ b/files/en-us/web/api/audiodecoder/dequeue_event/index.md
@@ -3,12 +3,10 @@ title: "AudioDecoder: dequeue event"
short-title: dequeue
slug: Web/API/AudioDecoder/dequeue_event
page-type: web-api-event
-status:
- - experimental
browser-compat: api.AudioDecoder.dequeue_event
---
-{{securecontext_header}}{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}{{SeeCompatTable}}
+{{securecontext_header}}{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}
The **`dequeue`** event of the {{domxref("AudioDecoder")}} interface fires to signal a decrease in {{domxref("AudioDecoder.decodeQueueSize")}}.
diff --git a/files/en-us/web/api/audiodecoder/flush/index.md b/files/en-us/web/api/audiodecoder/flush/index.md
index 522a45d6b20ace1..07a81b097fd3678 100644
--- a/files/en-us/web/api/audiodecoder/flush/index.md
+++ b/files/en-us/web/api/audiodecoder/flush/index.md
@@ -3,12 +3,10 @@ title: "AudioDecoder: flush() method"
short-title: flush()
slug: Web/API/AudioDecoder/flush
page-type: web-api-instance-method
-status:
- - experimental
browser-compat: api.AudioDecoder.flush
---
-{{securecontext_header}}{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}{{SeeCompatTable}}
+{{securecontext_header}}{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}
The **`flush()`** method of the {{domxref("AudioDecoder")}} interface returns a Promise that resolves once all pending messages in the queue have been completed.
diff --git a/files/en-us/web/api/audiodecoder/index.md b/files/en-us/web/api/audiodecoder/index.md
index 617b16bf3af55ec..6ac98bbcba6fc4e 100644
--- a/files/en-us/web/api/audiodecoder/index.md
+++ b/files/en-us/web/api/audiodecoder/index.md
@@ -2,12 +2,10 @@
title: AudioDecoder
slug: Web/API/AudioDecoder
page-type: web-api-interface
-status:
- - experimental
browser-compat: api.AudioDecoder
---
-{{securecontext_header}}{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}{{SeeCompatTable}}
+{{securecontext_header}}{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}
The **`AudioDecoder`** interface of the {{domxref('WebCodecs API','','',' ')}} decodes chunks of audio.
@@ -15,41 +13,41 @@ The **`AudioDecoder`** interface of the {{domxref('WebCodecs API','','',' ')}} d
## Constructor
-- {{domxref("AudioDecoder.AudioDecoder", "AudioDecoder()")}} {{Experimental_Inline}}
+- {{domxref("AudioDecoder.AudioDecoder", "AudioDecoder()")}}
- : Creates a new `AudioDecoder` object.
## Instance properties
_Inherits properties from its parent, {{DOMxRef("EventTarget")}}._
-- {{domxref("AudioDecoder.decodeQueueSize")}} {{ReadOnlyInline}} {{Experimental_Inline}}
+- {{domxref("AudioDecoder.decodeQueueSize")}} {{ReadOnlyInline}}
- : An integer representing the number of decode queue requests.
-- {{domxref("AudioDecoder.state")}} {{ReadOnlyInline}} {{Experimental_Inline}}
+- {{domxref("AudioDecoder.state")}} {{ReadOnlyInline}}
- : Represents the state of the underlying codec and whether it is configured for decoding.
### Events
-- {{domxref("AudioDecoder.dequeue_event", "dequeue")}} {{Experimental_Inline}}
+- {{domxref("AudioDecoder.dequeue_event", "dequeue")}}
- : Fires to signal a decrease in {{domxref("AudioDecoder.decodeQueueSize")}}.
## Static methods
-- {{domxref("AudioDecoder/isConfigSupported_static", "AudioDecoder.isConfigSupported()")}} {{Experimental_Inline}}
+- {{domxref("AudioDecoder/isConfigSupported_static", "AudioDecoder.isConfigSupported()")}}
- : Returns a promise indicating whether the provided `AudioDecoderConfig` is supported.
## Instance methods
_Inherits methods from its parent, {{DOMxRef("EventTarget")}}._
-- {{domxref("AudioDecoder.configure()")}} {{Experimental_Inline}}
+- {{domxref("AudioDecoder.configure()")}}
- : Enqueues a control message to configure the audio decoder for decoding chunks.
-- {{domxref("AudioDecoder.decode()")}} {{Experimental_Inline}}
+- {{domxref("AudioDecoder.decode()")}}
- : Enqueues a control message to decode a given chunk of audio.
-- {{domxref("AudioDecoder.flush()")}} {{Experimental_Inline}}
+- {{domxref("AudioDecoder.flush()")}}
- : Returns a promise that resolves once all pending messages in the queue have been completed.
-- {{domxref("AudioDecoder.reset()")}} {{Experimental_Inline}}
+- {{domxref("AudioDecoder.reset()")}}
- : Resets all states including configuration, control messages in the control message queue, and all pending callbacks.
-- {{domxref("AudioDecoder.close()")}} {{Experimental_Inline}}
+- {{domxref("AudioDecoder.close()")}}
- : Ends all pending work and releases system resources.
## Specifications
diff --git a/files/en-us/web/api/audiodecoder/isconfigsupported_static/index.md b/files/en-us/web/api/audiodecoder/isconfigsupported_static/index.md
index f82808f8867a744..842eade7923849f 100644
--- a/files/en-us/web/api/audiodecoder/isconfigsupported_static/index.md
+++ b/files/en-us/web/api/audiodecoder/isconfigsupported_static/index.md
@@ -3,12 +3,10 @@ title: "AudioDecoder: isConfigSupported() static method"
short-title: isConfigSupported()
slug: Web/API/AudioDecoder/isConfigSupported_static
page-type: web-api-static-method
-status:
- - experimental
browser-compat: api.AudioDecoder.isConfigSupported_static
---
-{{APIRef("WebCodecs API")}}{{SecureContext_Header}}{{AvailableInWorkers("window_and_dedicated")}}{{SeeCompatTable}}
+{{APIRef("WebCodecs API")}}{{SecureContext_Header}}{{AvailableInWorkers("window_and_dedicated")}}
The **`isConfigSupported()`** static method of the {{domxref("AudioDecoder")}} interface checks if the given config is supported (that is, if {{domxref("AudioDecoder")}} objects can be successfully configured with the given config).
diff --git a/files/en-us/web/api/audiodecoder/reset/index.md b/files/en-us/web/api/audiodecoder/reset/index.md
index 459a7c4c5b0fc04..51a5560a27b601f 100644
--- a/files/en-us/web/api/audiodecoder/reset/index.md
+++ b/files/en-us/web/api/audiodecoder/reset/index.md
@@ -3,12 +3,10 @@ title: "AudioDecoder: reset() method"
short-title: reset()
slug: Web/API/AudioDecoder/reset
page-type: web-api-instance-method
-status:
- - experimental
browser-compat: api.AudioDecoder.reset
---
-{{securecontext_header}}{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}{{SeeCompatTable}}
+{{securecontext_header}}{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}
The **`reset()`** method of the {{domxref("AudioDecoder")}} interface resets all states including configuration, control messages in the control message queue, and all pending callbacks.
diff --git a/files/en-us/web/api/audiodecoder/state/index.md b/files/en-us/web/api/audiodecoder/state/index.md
index 20039e3c85e0db7..d1f8e197d95f270 100644
--- a/files/en-us/web/api/audiodecoder/state/index.md
+++ b/files/en-us/web/api/audiodecoder/state/index.md
@@ -3,12 +3,10 @@ title: "AudioDecoder: state property"
short-title: state
slug: Web/API/AudioDecoder/state
page-type: web-api-instance-property
-status:
- - experimental
browser-compat: api.AudioDecoder.state
---
-{{securecontext_header}}{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}{{SeeCompatTable}}
+{{securecontext_header}}{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}
The **`state`** read-only property of the {{domxref("AudioDecoder")}} interface returns the current state of the underlying codec.
diff --git a/files/en-us/web/api/audioencoder/audioencoder/index.md b/files/en-us/web/api/audioencoder/audioencoder/index.md
index 33527d416a775e7..f3b9a9c4d84494d 100644
--- a/files/en-us/web/api/audioencoder/audioencoder/index.md
+++ b/files/en-us/web/api/audioencoder/audioencoder/index.md
@@ -3,12 +3,10 @@ title: "AudioEncoder: AudioEncoder() constructor"
short-title: AudioEncoder()
slug: Web/API/AudioEncoder/AudioEncoder
page-type: web-api-constructor
-status:
- - experimental
browser-compat: api.AudioEncoder.AudioEncoder
---
-{{securecontext_header}}{{APIRef("WebCodecs API")}}{{SeeCompatTable}}{{AvailableInWorkers("window_and_dedicated")}}
+{{securecontext_header}}{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}
The **`AudioEncoder()`** constructor creates a new {{domxref("AudioEncoder")}} object with the provided `init.output` callback assigned as the output callback, the provided `init.error` callback as the error callback, and the {{domxref("AudioEncoder.state")}} set to `"unconfigured"`.
diff --git a/files/en-us/web/api/audioencoder/close/index.md b/files/en-us/web/api/audioencoder/close/index.md
index 42dc3861b162a0b..0d7427e3673e390 100644
--- a/files/en-us/web/api/audioencoder/close/index.md
+++ b/files/en-us/web/api/audioencoder/close/index.md
@@ -3,12 +3,10 @@ title: "AudioEncoder: close() method"
short-title: close()
slug: Web/API/AudioEncoder/close
page-type: web-api-instance-method
-status:
- - experimental
browser-compat: api.AudioEncoder.close
---
-{{securecontext_header}}{{APIRef("WebCodecs API")}}{{SeeCompatTable}}{{AvailableInWorkers("window_and_dedicated")}}
+{{securecontext_header}}{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}
The **`close()`** method of the {{domxref("AudioEncoder")}} interface ends all pending work and releases system resources.
diff --git a/files/en-us/web/api/audioencoder/configure/index.md b/files/en-us/web/api/audioencoder/configure/index.md
index 454413e03534d82..ec3db9b08b31a44 100644
--- a/files/en-us/web/api/audioencoder/configure/index.md
+++ b/files/en-us/web/api/audioencoder/configure/index.md
@@ -3,12 +3,10 @@ title: "AudioEncoder: configure() method"
short-title: configure()
slug: Web/API/AudioEncoder/configure
page-type: web-api-instance-method
-status:
- - experimental
browser-compat: api.AudioEncoder.configure
---
-{{securecontext_header}}{{APIRef("WebCodecs API")}}{{SeeCompatTable}}{{AvailableInWorkers("window_and_dedicated")}}
+{{securecontext_header}}{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}
The **`configure()`** method of the {{domxref("AudioEncoder")}} interface enqueues a control message to configure the audio encoder for encoding chunks.
diff --git a/files/en-us/web/api/audioencoder/dequeue_event/index.md b/files/en-us/web/api/audioencoder/dequeue_event/index.md
index 18421b1623fae5d..a1e9c0ca3055611 100644
--- a/files/en-us/web/api/audioencoder/dequeue_event/index.md
+++ b/files/en-us/web/api/audioencoder/dequeue_event/index.md
@@ -3,12 +3,10 @@ title: "AudioEncoder: dequeue event"
short-title: dequeue
slug: Web/API/AudioEncoder/dequeue_event
page-type: web-api-event
-status:
- - experimental
browser-compat: api.AudioEncoder.dequeue_event
---
-{{securecontext_header}}{{APIRef("WebCodecs API")}}{{SeeCompatTable}}{{AvailableInWorkers("window_and_dedicated")}}
+{{securecontext_header}}{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}
The **`dequeue`** event of the {{domxref("AudioEncoder")}} interface fires to signal a decrease in {{domxref("AudioEncoder.encodeQueueSize")}}.
diff --git a/files/en-us/web/api/audioencoder/encode/index.md b/files/en-us/web/api/audioencoder/encode/index.md
index ba927968a1c221a..119cdb36a2b2d0c 100644
--- a/files/en-us/web/api/audioencoder/encode/index.md
+++ b/files/en-us/web/api/audioencoder/encode/index.md
@@ -3,12 +3,10 @@ title: "AudioEncoder: encode() method"
short-title: encode()
slug: Web/API/AudioEncoder/encode
page-type: web-api-instance-method
-status:
- - experimental
browser-compat: api.AudioEncoder.encode
---
-{{securecontext_header}}{{APIRef("WebCodecs API")}}{{SeeCompatTable}}{{AvailableInWorkers("window_and_dedicated")}}
+{{securecontext_header}}{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}
The **`encode()`** method of the {{domxref("AudioEncoder")}} interface enqueues a control message to encode a given {{domxref("AudioData")}} object.
diff --git a/files/en-us/web/api/audioencoder/encodequeuesize/index.md b/files/en-us/web/api/audioencoder/encodequeuesize/index.md
index fe6c3caedae7a40..0200ec0177adbda 100644
--- a/files/en-us/web/api/audioencoder/encodequeuesize/index.md
+++ b/files/en-us/web/api/audioencoder/encodequeuesize/index.md
@@ -3,12 +3,10 @@ title: "AudioEncoder: encodeQueueSize property"
short-title: encodeQueueSize
slug: Web/API/AudioEncoder/encodeQueueSize
page-type: web-api-instance-property
-status:
- - experimental
browser-compat: api.AudioEncoder.encodeQueueSize
---
-{{securecontext_header}}{{APIRef("WebCodecs API")}}{{SeeCompatTable}}{{AvailableInWorkers("window_and_dedicated")}}
+{{securecontext_header}}{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}
The **`encodeQueueSize`** read-only property of the {{domxref("AudioEncoder")}} interface returns the number of pending encode requests in the queue.
diff --git a/files/en-us/web/api/audioencoder/flush/index.md b/files/en-us/web/api/audioencoder/flush/index.md
index 083e4cd250b0357..e6b9a18a7ec7743 100644
--- a/files/en-us/web/api/audioencoder/flush/index.md
+++ b/files/en-us/web/api/audioencoder/flush/index.md
@@ -3,12 +3,10 @@ title: "AudioEncoder: flush() method"
short-title: flush()
slug: Web/API/AudioEncoder/flush
page-type: web-api-instance-method
-status:
- - experimental
browser-compat: api.AudioEncoder.flush
---
-{{securecontext_header}}{{APIRef("WebCodecs API")}}{{SeeCompatTable}}{{AvailableInWorkers("window_and_dedicated")}}
+{{securecontext_header}}{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}
The **`flush()`** method of the {{domxref("AudioEncoder")}} interface returns a Promise that resolves once all pending messages in the queue have been completed.
diff --git a/files/en-us/web/api/audioencoder/index.md b/files/en-us/web/api/audioencoder/index.md
index 0f5f803647a56f9..31d3319776f2dc8 100644
--- a/files/en-us/web/api/audioencoder/index.md
+++ b/files/en-us/web/api/audioencoder/index.md
@@ -2,12 +2,10 @@
title: AudioEncoder
slug: Web/API/AudioEncoder
page-type: web-api-interface
-status:
- - experimental
browser-compat: api.AudioEncoder
---
-{{APIRef("WebCodecs API")}}{{SeeCompatTable}}{{SecureContext_Header}}{{AvailableInWorkers("window_and_dedicated")}}
+{{APIRef("WebCodecs API")}}{{SecureContext_Header}}{{AvailableInWorkers("window_and_dedicated")}}
The **`AudioEncoder`** interface of the [WebCodecs API](/en-US/docs/Web/API/WebCodecs_API) encodes {{domxref("AudioData")}} objects.
@@ -15,41 +13,41 @@ The **`AudioEncoder`** interface of the [WebCodecs API](/en-US/docs/Web/API/WebC
## Constructor
-- {{domxref("AudioEncoder.AudioEncoder", "AudioEncoder()")}} {{Experimental_Inline}}
+- {{domxref("AudioEncoder.AudioEncoder", "AudioEncoder()")}}
- : Creates a new `AudioEncoder` object.
## Instance properties
_Inherits properties from its parent, {{DOMxRef("EventTarget")}}._
-- {{domxref("AudioEncoder.encodeQueueSize")}} {{ReadOnlyInline}} {{Experimental_Inline}}
+- {{domxref("AudioEncoder.encodeQueueSize")}} {{ReadOnlyInline}}
- : An integer representing the number of encode queue requests.
-- {{domxref("AudioEncoder.state")}} {{ReadOnlyInline}} {{Experimental_Inline}}
+- {{domxref("AudioEncoder.state")}} {{ReadOnlyInline}}
- : Represents the state of the underlying codec and whether it is configured for encoding.
### Events
-- {{domxref("AudioEncoder.dequeue_event", "dequeue")}} {{Experimental_Inline}}
+- {{domxref("AudioEncoder.dequeue_event", "dequeue")}}
- : Fires to signal a decrease in {{domxref("AudioEncoder.encodeQueueSize")}}.
## Static methods
-- {{domxref("AudioEncoder.isConfigSupported_static", "AudioEncoder.isConfigSupported()")}} {{Experimental_Inline}}
+- {{domxref("AudioEncoder.isConfigSupported_static", "AudioEncoder.isConfigSupported()")}}
- : Returns a promise indicating whether the provided `AudioEncoderConfig` is supported.
## Instance methods
_Inherits methods from its parent, {{DOMxRef("EventTarget")}}._
-- {{domxref("AudioEncoder.configure()")}} {{Experimental_Inline}}
+- {{domxref("AudioEncoder.configure()")}}
- : Enqueues a control message to configure the audio encoder for encoding chunks.
-- {{domxref("AudioEncoder.encode()")}} {{Experimental_Inline}}
+- {{domxref("AudioEncoder.encode()")}}
- : Enqueues a control message to encode a given {{domxref("AudioData")}} objects.
-- {{domxref("AudioEncoder.flush()")}} {{Experimental_Inline}}
+- {{domxref("AudioEncoder.flush()")}}
- : Returns a promise that resolves once all pending messages in the queue have been completed.
-- {{domxref("AudioEncoder.reset()")}} {{Experimental_Inline}}
+- {{domxref("AudioEncoder.reset()")}}
- : Resets all states including configuration, control messages in the control message queue, and all pending callbacks.
-- {{domxref("AudioEncoder.close()")}} {{Experimental_Inline}}
+- {{domxref("AudioEncoder.close()")}}
- : Ends all pending work and releases system resources.
## Specifications
diff --git a/files/en-us/web/api/audioencoder/isconfigsupported_static/index.md b/files/en-us/web/api/audioencoder/isconfigsupported_static/index.md
index f5982b92dd2519e..b9ac2819f27b563 100644
--- a/files/en-us/web/api/audioencoder/isconfigsupported_static/index.md
+++ b/files/en-us/web/api/audioencoder/isconfigsupported_static/index.md
@@ -3,12 +3,10 @@ title: "AudioEncoder: isConfigSupported() static method"
short-title: isConfigSupported()
slug: Web/API/AudioEncoder/isConfigSupported_static
page-type: web-api-static-method
-status:
- - experimental
browser-compat: api.AudioEncoder.isConfigSupported_static
---
-{{APIRef("WebCodecs API")}}{{SecureContext_Header}}{{SeeCompatTable}}{{AvailableInWorkers("window_and_dedicated")}}
+{{APIRef("WebCodecs API")}}{{SecureContext_Header}}{{AvailableInWorkers("window_and_dedicated")}}
The **`isConfigSupported()`** static method of the {{domxref("AudioEncoder")}} interface checks if the given config is supported (that is, if {{domxref("AudioEncoder")}} objects can be successfully configured with the given config).
diff --git a/files/en-us/web/api/audioencoder/reset/index.md b/files/en-us/web/api/audioencoder/reset/index.md
index 74301ac966fab1b..1ff420a37a251ee 100644
--- a/files/en-us/web/api/audioencoder/reset/index.md
+++ b/files/en-us/web/api/audioencoder/reset/index.md
@@ -3,12 +3,10 @@ title: "AudioEncoder: reset() method"
short-title: reset()
slug: Web/API/AudioEncoder/reset
page-type: web-api-instance-method
-status:
- - experimental
browser-compat: api.AudioEncoder.reset
---
-{{securecontext_header}}{{APIRef("WebCodecs API")}}{{SeeCompatTable}}{{AvailableInWorkers("window_and_dedicated")}}
+{{securecontext_header}}{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}
The **`reset()`** method of the {{domxref("AudioEncoder")}} interface resets all states including configuration, control messages in the control message queue, and all pending callbacks.
diff --git a/files/en-us/web/api/audioencoder/state/index.md b/files/en-us/web/api/audioencoder/state/index.md
index 8c533003e662738..850b03c123ae58d 100644
--- a/files/en-us/web/api/audioencoder/state/index.md
+++ b/files/en-us/web/api/audioencoder/state/index.md
@@ -3,12 +3,10 @@ title: "AudioEncoder: state property"
short-title: state
slug: Web/API/AudioEncoder/state
page-type: web-api-instance-property
-status:
- - experimental
browser-compat: api.AudioEncoder.state
---
-{{securecontext_header}}{{APIRef("WebCodecs API")}}{{SeeCompatTable}}{{AvailableInWorkers("window_and_dedicated")}}
+{{securecontext_header}}{{APIRef("WebCodecs API")}}{{AvailableInWorkers("window_and_dedicated")}}
The **`state`** read-only property of the {{domxref("AudioEncoder")}} interface returns the current state of the underlying codec.
diff --git a/files/en-us/web/api/beacon_api/index.md b/files/en-us/web/api/beacon_api/index.md
index a6bf77df4ad024d..4dba99b67c3bef7 100644
--- a/files/en-us/web/api/beacon_api/index.md
+++ b/files/en-us/web/api/beacon_api/index.md
@@ -20,7 +20,7 @@ For more details about the motivation for and usage of this API, see the documen
This API defines a single method: {{domxref("navigator.sendBeacon()")}}.
-The method takes two arguments, the URL and the data to send in the request. The data argument is optional and its type may be a string, an {{jsxref("ArrayBuffer")}}, a {{jsxref("TypedArray")}}, a {{jsxref("DataView")}}, a {{domxref("ReadableStream")}}, a {{domxref("Blob")}}, a {{domxref("FormData")}} object, or a {{domxref("URLSearchParams")}} object. If the browser successfully queues the request for delivery, the method returns "`true`"; otherwise, it returns "`false`".
+The method takes two arguments, the URL and the data to send in the request. The data argument is optional and its type may be a string, an {{jsxref("ArrayBuffer")}}, a {{jsxref("TypedArray")}}, a {{jsxref("DataView")}}, a {{domxref("ReadableStream")}}, a {{domxref("Blob")}}, a {{domxref("FormData")}} object, or a {{domxref("URLSearchParams")}} object. If the browser successfully queues the request for delivery, the method returns `true`; otherwise, it returns `false`.
## Specifications
diff --git a/files/en-us/web/api/bluetooth/requestdevice/index.md b/files/en-us/web/api/bluetooth/requestdevice/index.md
index bb4cdd371ec3486..2c4e2fc03d9fd25 100644
--- a/files/en-us/web/api/bluetooth/requestdevice/index.md
+++ b/files/en-us/web/api/bluetooth/requestdevice/index.md
@@ -54,7 +54,7 @@ requestDevice(options)
- `companyIdentifier`
- : A mandatory number identifying the manufacturer of the device.
Company identifiers are listed in the Bluetooth specification [Assigned numbers](https://www.bluetooth.com/specifications/assigned-numbers/), Section 7.
- For example, to match against devices manufacturered by "Digianswer A/S", with assigned hex number `0x000C`, you would specify `12`.
+ For example, to match against devices manufactured by "Digianswer A/S", with assigned hex number `0x000C`, you would specify `12`.
- `dataPrefix` {{optional_inline}}
- : The data prefix.
A buffer containing values to match against the values at the start of the advertising manufacturer data.
diff --git a/files/en-us/web/api/bluetoothremotegattdescriptor/index.md b/files/en-us/web/api/bluetoothremotegattdescriptor/index.md
index 7b70c6033c0ceac..fde7d1e90fbd44f 100644
--- a/files/en-us/web/api/bluetoothremotegattdescriptor/index.md
+++ b/files/en-us/web/api/bluetoothremotegattdescriptor/index.md
@@ -19,7 +19,7 @@ which provides further information about a characteristic's value.
to.
- {{DOMxRef("BluetoothRemoteGATTDescriptor.uuid")}} {{ReadOnlyInline}} {{Experimental_Inline}}
- : Returns the UUID of the characteristic descriptor, for
- example '`00002902-0000-1000-8000-00805f9b34fb`' for the Client
+ example `"00002902-0000-1000-8000-00805f9b34fb"` for the Client
Characteristic Configuration descriptor.
- {{DOMxRef("BluetoothRemoteGATTDescriptor.value")}} {{ReadOnlyInline}} {{Experimental_Inline}}
- : Returns the currently cached descriptor value. This value gets updated when the
diff --git a/files/en-us/web/api/bluetoothremotegattdescriptor/uuid/index.md b/files/en-us/web/api/bluetoothremotegattdescriptor/uuid/index.md
index d84e3cca1cd8803..f57a87317dc429c 100644
--- a/files/en-us/web/api/bluetoothremotegattdescriptor/uuid/index.md
+++ b/files/en-us/web/api/bluetoothremotegattdescriptor/uuid/index.md
@@ -11,7 +11,7 @@ browser-compat: api.BluetoothRemoteGATTDescriptor.uuid
{{APIRef("Bluetooth API")}}{{SeeCompatTable}}{{SecureContext_Header}}
The **`BluetoothRemoteGATTDescriptor.uuid`** read-only property returns the {{Glossary("UUID")}} of the characteristic descriptor.
-For example '`00002902-0000-1000-8000-00805f9b34fb`' for the Client Characteristic Configuration descriptor.
+For example `"00002902-0000-1000-8000-00805f9b34fb"` for the Client Characteristic Configuration descriptor.
## Value
diff --git a/files/en-us/web/api/canvas_api/tutorial/pixel_manipulation_with_canvas/index.md b/files/en-us/web/api/canvas_api/tutorial/pixel_manipulation_with_canvas/index.md
index 64284688607874c..1eaf9e1ee437431 100644
--- a/files/en-us/web/api/canvas_api/tutorial/pixel_manipulation_with_canvas/index.md
+++ b/files/en-us/web/api/canvas_api/tutorial/pixel_manipulation_with_canvas/index.md
@@ -21,7 +21,7 @@ The {{domxref("ImageData")}} object represents the underlying pixel data of an a
The `data` property returns a {{jsxref("Uint8ClampedArray")}} which can be accessed to look at the raw pixel data; each pixel is represented by four one-byte values (red, green, blue, and alpha, in that order; that is, "RGBA" format). Each color component is represented by an integer between 0 and 255. Each component is assigned a consecutive index within the array, with the top left pixel's red component being at index 0 within the array. Pixels then proceed from left to right, then downward, throughout the array.
-The {{jsxref("Uint8ClampedArray")}} contains `height` × `width` × 4 bytes of data, with index values ranging from 0 to (`height`×`width`×4)-1.
+The {{jsxref("Uint8ClampedArray")}} contains `height` × `width` × 4 bytes of data, with index values ranging from 0 to (`height` × `width` × 4) - 1.
For example, to read the blue component's value from the pixel at column 200, row 50 in the image, you would do the following:
diff --git a/files/en-us/web/api/canvasrenderingcontext2d/arcto/index.md b/files/en-us/web/api/canvasrenderingcontext2d/arcto/index.md
index f85e9779d7db650..21932c9bdba298b 100644
--- a/files/en-us/web/api/canvasrenderingcontext2d/arcto/index.md
+++ b/files/en-us/web/api/canvasrenderingcontext2d/arcto/index.md
@@ -724,7 +724,7 @@ can be used to change an underlined element that is in focus.
function drawCanvas() {
const rPoint = 4;
const colorConstruction = "#080";
- const colorDragable = "#00F";
+ const colorDraggable = "#00F";
const [P0, P1, P2] = state.controlPoints;
ctx.font = "italic 14pt sans-serif";
@@ -783,7 +783,7 @@ can be used to change an underlined element that is in focus.
state.controlPoints.forEach((value) => {
ctx.beginPath();
ctx.arc(value.x, value.y, rPoint, 0, 2 * Math.PI);
- ctx.fillStyle = colorDragable;
+ ctx.fillStyle = colorDraggable;
ctx.fill();
});
ctx.fillStyle = "#000";
diff --git a/files/en-us/web/api/characterdata/after/index.md b/files/en-us/web/api/characterdata/after/index.md
index b7ba9834a855096..24488e3c8991e97 100644
--- a/files/en-us/web/api/characterdata/after/index.md
+++ b/files/en-us/web/api/characterdata/after/index.md
@@ -66,6 +66,8 @@ h1TextNode.data;
- {{domxref("CharacterData.appendData()")}}
- {{domxref("CharacterData.before()")}}
+- {{domxref("DocumentType.after()")}}
+- {{domxref("Element.after()")}}
- {{domxref("Element.append()")}}
- {{domxref("Node.appendChild()")}}
- {{domxref("Element.insertAdjacentElement()")}}
diff --git a/files/en-us/web/api/characterdata/before/index.md b/files/en-us/web/api/characterdata/before/index.md
index 859612f0c5b16f6..ea3ade2239826aa 100644
--- a/files/en-us/web/api/characterdata/before/index.md
+++ b/files/en-us/web/api/characterdata/before/index.md
@@ -62,6 +62,8 @@ h1TextNode.data;
- {{domxref("CharacterData.appendData()")}}
- {{domxref("CharacterData.after()")}}
+- {{domxref("DocumentType.before()")}}
+- {{domxref("Element.before()")}}
- {{domxref("Element.append()")}}
- {{domxref("Node.appendChild()")}}
- {{domxref("Element.insertAdjacentElement()")}}
diff --git a/files/en-us/web/api/characterdata/remove/index.md b/files/en-us/web/api/characterdata/remove/index.md
index 7fa28cbb1915798..e559f3924083dd4 100644
--- a/files/en-us/web/api/characterdata/remove/index.md
+++ b/files/en-us/web/api/characterdata/remove/index.md
@@ -47,5 +47,6 @@ textnode.remove(); // Removes the text
## See also
-- {{domxref("Element.remove()")}}
- {{domxref("CharacterData.deleteData()")}}
+- {{domxref("DocumentType.remove()")}}
+- {{domxref("Element.remove()")}}
diff --git a/files/en-us/web/api/characterdata/replacewith/index.md b/files/en-us/web/api/characterdata/replacewith/index.md
index 930ee02b8b22f71..0d09ea38898cf45 100644
--- a/files/en-us/web/api/characterdata/replacewith/index.md
+++ b/files/en-us/web/api/characterdata/replacewith/index.md
@@ -64,3 +64,5 @@ text.replaceWith(em); // Replace `Some text` by `Italic text`
## See also
- {{domxref("CharacterData.replaceData()")}}
+- {{domxref("DocumentType.replaceWith()")}}
+- {{domxref("Element.replaceWith()")}}
diff --git a/files/en-us/web/api/client/postmessage/index.md b/files/en-us/web/api/client/postmessage/index.md
index c67524f21f524d7..992460e4baad165 100644
--- a/files/en-us/web/api/client/postmessage/index.md
+++ b/files/en-us/web/api/client/postmessage/index.md
@@ -11,7 +11,7 @@ browser-compat: api.Client.postMessage
The **`postMessage()`** method of the
{{domxref("Client")}} interface allows a service worker to send a message to a client
(a {{domxref("Window")}}, {{domxref("Worker")}}, or {{domxref("SharedWorker")}}). The
-message is received in the "`message`" event on
+message is received in the `message` event on
{{domxref("ServiceWorkerContainer", "navigator.serviceWorker")}}.
## Syntax
diff --git a/files/en-us/web/api/clients/claim/index.md b/files/en-us/web/api/clients/claim/index.md
index 3cf697803b2550a..b106c7c517b1121 100644
--- a/files/en-us/web/api/clients/claim/index.md
+++ b/files/en-us/web/api/clients/claim/index.md
@@ -9,7 +9,7 @@ browser-compat: api.Clients.claim
{{APIRef("Service Workers API")}}{{AvailableInWorkers("service")}}
The **`claim()`** method of the {{domxref("Clients")}} interface allows an active service worker to set itself as the {{domxref("ServiceWorkerContainer.controller", "controller")}} for all clients within its {{domxref("ServiceWorkerRegistration.scope", "scope")}}.
-This triggers a "`controllerchange`" event on {{domxref("ServiceWorkerContainer","navigator.serviceWorker")}} in any clients that become controlled by this service worker.
+This triggers a `controllerchange` event on {{domxref("ServiceWorkerContainer","navigator.serviceWorker")}} in any clients that become controlled by this service worker.
When a service worker is initially registered, pages won't use it until they next
load. The `claim()` method causes those pages to be controlled immediately.
@@ -32,7 +32,7 @@ A {{jsxref("Promise")}} that resolves to `undefined`.
## Examples
-The following example uses `claim()` inside service worker's "`activate`" event listener so that clients loaded in the same scope do not need to be reloaded before their fetches will go through this service worker.
+The following example uses `claim()` inside service worker's `activate` event listener so that clients loaded in the same scope do not need to be reloaded before their fetches will go through this service worker.
```js
self.addEventListener("activate", (event) => {
diff --git a/files/en-us/web/api/clipboard/read/index.md b/files/en-us/web/api/clipboard/read/index.md
index bc48a0188df375b..fe85ff150ec20f0 100644
--- a/files/en-us/web/api/clipboard/read/index.md
+++ b/files/en-us/web/api/clipboard/read/index.md
@@ -127,7 +127,7 @@ Copy the butterfly image on the left by right-clicking the image and selecting "
Then click on the empty frame on the right.
The example will fetch the image data from the clipboard and display the image in the empty frame.
-{{EmbedLiveSample("Reading image data from clipboard", "100%", "200")}}
+{{EmbedLiveSample("Reading image data from clipboard", "100%", "250", "", "", "", "clipboard-read")}}
> [!NOTE]
> If prompted, grant permission in order to paste the image.
@@ -242,7 +242,7 @@ async function pasteData() {
Copy some text or the butterfly (JPG) image below (to copy images right-click on them and then select "Copy image" from the context menu).
Select the indicated frame below to paste this information from the clipboard into the frame.
-{{EmbedLiveSample("Reading data from the clipboard", "100%", "450")}}
+{{EmbedLiveSample("Reading data from the clipboard", "100%", "500", "", "", "", "clipboard-read")}}
Notes:
@@ -346,7 +346,7 @@ pasteUnsanitizedButton.addEventListener("click", async () => {
First click the "Copy HTML" button to write the HTML code from the first textarea to the clipboard. Then either click the "Paste HTML" button or the "Paste unsanitized HTML" button to paste the sanitized or unsanitized HTML code into the second textarea.
-{{EmbedLiveSample("Reading unsanitized HTML from the clipboard", "100%", "220")}}
+{{EmbedLiveSample("Reading unsanitized HTML from the clipboard", "100%", "250", "", "", "", "clipboard-read; clipboard-write")}}
## Specifications
diff --git a/files/en-us/web/api/clipboard/write/index.md b/files/en-us/web/api/clipboard/write/index.md
index c3b2665775f7521..7addbf3ac671b59 100644
--- a/files/en-us/web/api/clipboard/write/index.md
+++ b/files/en-us/web/api/clipboard/write/index.md
@@ -201,9 +201,9 @@ img {
#### Result
The result is shown below.
-First click on the blue square, and then select the text "Paste here" and use your OS-specific keyboard combinatations to paste from the clipboard (such as `Ctrl+V` on Windows).
+First click on the blue square, and then select the text "Paste here" and use your OS-specific keyboard combinations to paste from the clipboard (such as `Ctrl+V` on Windows).
-{{embedlivesample("write_canvas_contents_to_the_clipboard", "", "400")}}
+{{embedlivesample("write_canvas_contents_to_the_clipboard", "", "420", "", "", "", "clipboard-write")}}
## Specifications
diff --git a/files/en-us/web/api/closeevent/closeevent/index.md b/files/en-us/web/api/closeevent/closeevent/index.md
index 6aecfca5a62cbea..bc785f293eb0a4e 100644
--- a/files/en-us/web/api/closeevent/closeevent/index.md
+++ b/files/en-us/web/api/closeevent/closeevent/index.md
@@ -6,7 +6,7 @@ page-type: web-api-constructor
browser-compat: api.CloseEvent.CloseEvent
---
-{{APIRef("Websockets API")}}
+{{APIRef("Websockets API")}}{{AvailableInWorkers}}
The **`CloseEvent()`** constructor creates a new {{domxref("CloseEvent")}} object.
diff --git a/files/en-us/web/api/closeevent/code/index.md b/files/en-us/web/api/closeevent/code/index.md
index 50f222f3e4c4d89..eaff819b0a74b6c 100644
--- a/files/en-us/web/api/closeevent/code/index.md
+++ b/files/en-us/web/api/closeevent/code/index.md
@@ -6,13 +6,13 @@ page-type: web-api-instance-property
browser-compat: api.CloseEvent.code
---
-{{APIRef("Websockets API")}}
+{{APIRef("Websockets API")}}{{AvailableInWorkers}}
-The **`code`** read-only property of the {{domxref("CloseEvent")}} interface returns a [WebSocket connection close code](https://www.rfc-editor.org/rfc/rfc6455.html#section-7.1.5) indicating the reason the server gave for closing the connection.
+The **`code`** read-only property of the {{domxref("CloseEvent")}} interface returns a [WebSocket connection close code](https://www.rfc-editor.org/rfc/rfc6455.html#section-7.1.5) indicating the reason the connection was closed.
## Value
-An integer [WebSocket connection close code](https://www.rfc-editor.org/rfc/rfc6455.html#section-7.1.5) in the range `1000` - `4999`, indicating the reason the server gave for closing the connection.
+An integer [WebSocket connection close code](https://www.rfc-editor.org/rfc/rfc6455.html#section-7.1.5) in the range `1000` - `4999`, indicating the reason the connection was closed.
diff --git a/files/en-us/web/api/closeevent/index.md b/files/en-us/web/api/closeevent/index.md
index 237ddd3b628cdbf..9d43b29e9273bf8 100644
--- a/files/en-us/web/api/closeevent/index.md
+++ b/files/en-us/web/api/closeevent/index.md
@@ -5,7 +5,7 @@ page-type: web-api-interface
browser-compat: api.CloseEvent
---
-{{APIRef("Websockets API")}}
+{{APIRef("Websockets API")}}{{AvailableInWorkers}}
A `CloseEvent` is sent to clients using {{Glossary("WebSockets")}} when the connection is closed. This is delivered to the listener indicated by the `WebSocket` object's `onclose` attribute.
@@ -21,7 +21,7 @@ A `CloseEvent` is sent to clients using {{Glossary("WebSockets")}} when the conn
_This interface also inherits properties from its parent, {{domxref("Event")}}._
- {{domxref("CloseEvent.code")}} {{ReadOnlyInline}}
- - : Returns an `unsigned short` containing the close code sent by the server.
+ - : Returns an `unsigned short` containing the close code.
- {{domxref("CloseEvent.reason")}} {{ReadOnlyInline}}
- : Returns a string indicating the reason the server closed the connection. This is specific to the particular server and sub-protocol.
- {{domxref("CloseEvent.wasClean")}} {{ReadOnlyInline}}
diff --git a/files/en-us/web/api/closeevent/reason/index.md b/files/en-us/web/api/closeevent/reason/index.md
index 691de22a424e34c..1898915b82db4ad 100644
--- a/files/en-us/web/api/closeevent/reason/index.md
+++ b/files/en-us/web/api/closeevent/reason/index.md
@@ -6,7 +6,7 @@ page-type: web-api-instance-property
browser-compat: api.CloseEvent.reason
---
-{{APIRef("Websockets API")}}
+{{APIRef("Websockets API")}}{{AvailableInWorkers}}
The **`reason`** read-only property of the {{domxref("CloseEvent")}} interface returns the [WebSocket connection close reason](https://www.rfc-editor.org/rfc/rfc6455.html#section-7.1.6) the server gave for closing the connection; that is, a concise human-readable prose explanation for the closure.
diff --git a/files/en-us/web/api/closeevent/wasclean/index.md b/files/en-us/web/api/closeevent/wasclean/index.md
index 821825ec1c3ec48..32e64b0a760fe94 100644
--- a/files/en-us/web/api/closeevent/wasclean/index.md
+++ b/files/en-us/web/api/closeevent/wasclean/index.md
@@ -6,7 +6,7 @@ page-type: web-api-instance-property
browser-compat: api.CloseEvent.wasClean
---
-{{APIRef("Websockets API")}}
+{{APIRef("Websockets API")}}{{AvailableInWorkers}}
The **`wasClean`** read-only property of the {{domxref("CloseEvent")}} interface returns `true` if the connection closed cleanly.
diff --git a/files/en-us/web/api/comment/index.md b/files/en-us/web/api/comment/index.md
index b78e6f63f698be2..0fb56fadec73206 100644
--- a/files/en-us/web/api/comment/index.md
+++ b/files/en-us/web/api/comment/index.md
@@ -9,7 +9,7 @@ browser-compat: api.Comment
The **`Comment`** interface represents textual notations within markup; although it is generally not visually shown, such comments are available to be read in the source view.
-Comments are represented in HTML and XML as content between '``'. In XML, like inside SVG or MathML markup, the character sequence '`--`' cannot be used within a comment.
+Comments are represented in HTML and XML as content between ``. In XML, like inside SVG or MathML markup, the character sequence `--` cannot be used within a comment.
{{InheritanceDiagram}}
diff --git a/files/en-us/web/api/compute_pressure_api/index.md b/files/en-us/web/api/compute_pressure_api/index.md
index cd3d8911e08a63b..c73fba53a4cef82 100644
--- a/files/en-us/web/api/compute_pressure_api/index.md
+++ b/files/en-us/web/api/compute_pressure_api/index.md
@@ -28,7 +28,7 @@ Fast and delightful web applications should balance workloads when the system's
### Pressure source types
-In your web app or website, different tasks are fighting for the processing time of different processing units (CPU, GPU, and other specialized proccessing units). The current version of the Compute Pressure API specification defines two main source types that can be queried to gather pressure information:
+In your web app or website, different tasks are fighting for the processing time of different processing units (CPU, GPU, and other specialized processing units). The current version of the Compute Pressure API specification defines two main source types that can be queried to gather pressure information:
- `"thermals"` represents the global thermal state of the entire system.
- `"cpu"` represents the average pressure of the central processing unit (CPU) across all its cores. This state can be affected by other apps and sites than the observing site.
@@ -112,4 +112,4 @@ try {
## See also
-- [Compute Pressure demo](https://w3c.github.io/compute-pressure/demo/), which uses Mandelbrot sets and workers to create artifical pressure for test purposes.
+- [Compute Pressure demo](https://w3c.github.io/compute-pressure/demo/), which uses Mandelbrot sets and workers to create artificial pressure for test purposes.
diff --git a/files/en-us/web/api/console/index.md b/files/en-us/web/api/console/index.md
index 00290d2583e8cd6..cd3027dee754040 100644
--- a/files/en-us/web/api/console/index.md
+++ b/files/en-us/web/api/console/index.md
@@ -147,7 +147,7 @@ The first parameter to the logging methods can be a string containing zero or mo
- `%c`
- : Applies CSS style rules to all following text. See [Styling console output](#styling_console_output).
-Some browsers may implement additional format specifiers. For example, Safari and Firefox support the C-style precision formating `%.f`. For example `console.log("Foo %.2f", 1.1)` will output the number to 2 decimal places: `Foo 1.10`, while `console.log("Foo %.2d", 1.1)` will output the number as two significant figures with a leading 0: `Foo 01`.
+Some browsers may implement additional format specifiers. For example, Safari and Firefox support the C-style precision formatting `%.f`. For example `console.log("Foo %.2f", 1.1)` will output the number to 2 decimal places: `Foo 1.10`, while `console.log("Foo %.2d", 1.1)` will output the number as two significant figures with a leading 0: `Foo 01`.
Each of these pulls the next argument after the format string off the parameter list. For example:
diff --git a/files/en-us/web/api/convolvernode/convolvernode/index.md b/files/en-us/web/api/convolvernode/convolvernode/index.md
index 0bc9d56a040ad30..ae417625fa6f1e6 100644
--- a/files/en-us/web/api/convolvernode/convolvernode/index.md
+++ b/files/en-us/web/api/convolvernode/convolvernode/index.md
@@ -33,7 +33,7 @@ new ConvolverNode(context, options)
- `disableNormalization`
- : A boolean value controlling
whether the impulse response from the buffer will be scaled by an equal-power
- normalization, or not. The default is '`false`'.
+ normalization, or not. The default is `false`.
- `channelCount`
- : Represents an integer used to determine how many channels are used
when [up-mixing and down-mixing](/en-US/docs/Web/API/Web_Audio_API/Basic_concepts_behind_Web_Audio_API#up-mixing_and_down-mixing) connections to any inputs to the node.
diff --git a/files/en-us/web/api/credential_management_api/credential_types/index.md b/files/en-us/web/api/credential_management_api/credential_types/index.md
index e50d788afc926a6..715fa747316ee63 100644
--- a/files/en-us/web/api/credential_management_api/credential_types/index.md
+++ b/files/en-us/web/api/credential_management_api/credential_types/index.md
@@ -38,7 +38,7 @@ Modern browsers provide users with a password manager, which enables users to st
In the Credential Management API, a password is represented by the {{domxref("PasswordCredential")}} interface. When a user successfully registers for or signs into your site, you can call the {{domxref("PasswordCredential.PasswordCredential()", "PasswordCredential()")}} constructor or {{domxref("CredentialsContainer.create", "navigator.credentials.create()")}} to create a `PasswordCredential` object from the credentials the user entered. You can then pass this into {{domxref("CredentialsContainer.store", "navigator.credentials.store()")}}, and the browser will ask the user if they want to store the password in the password manager.
-![Sequence diagram showing creation and storage of a pasword credential.](password-create.svg)
+![Sequence diagram showing creation and storage of a password credential.](password-create.svg)
When a user visits your site, you can call {{domxref("CredentialsContainer.get", "navigator.credentials.get()")}} to retrieve a stored password for your site, and use it to log the user in. Depending on the situation, you can log the user in silently or use the returned password to auto-fill a form field.
diff --git a/files/en-us/web/api/credentialscontainer/create/index.md b/files/en-us/web/api/credentialscontainer/create/index.md
index b715523bf6b4d32..093c665aabe87e5 100644
--- a/files/en-us/web/api/credentialscontainer/create/index.md
+++ b/files/en-us/web/api/credentialscontainer/create/index.md
@@ -32,7 +32,7 @@ create(options)
- : An object that contains options for the requested new `Credentials` object. It can contain the following properties:
- `signal` {{optional_inline}}
- - : An {{domxref("AbortSignal")}} object instance that allows an ongoing `create()` operation to be aborted. An aborted operation may complete normally (generally if the abort was received after the operation finished) or reject with an "`AbortError`" {{domxref("DOMException")}}.
+ - : An {{domxref("AbortSignal")}} object instance that allows an ongoing `create()` operation to be aborted. An aborted operation may complete normally (generally if the abort was received after the operation finished) or reject with an `AbortError` {{domxref("DOMException")}}.
Each of the following properties represents a _credential type_ being created. One and only one of them must be specified:
diff --git a/files/en-us/web/api/credentialscontainer/get/index.md b/files/en-us/web/api/credentialscontainer/get/index.md
index 08eda23ef795948..938cd84710767a1 100644
--- a/files/en-us/web/api/credentialscontainer/get/index.md
+++ b/files/en-us/web/api/credentialscontainer/get/index.md
@@ -51,7 +51,7 @@ get(options)
- `signal` {{optional_inline}}
- - : An {{domxref("AbortSignal")}} object instance that allows an ongoing `get()` operation to be aborted. An aborted operation may complete normally (generally if the abort was received after the operation finished) or reject with an "`AbortError`" {{domxref("DOMException")}}.
+ - : An {{domxref("AbortSignal")}} object instance that allows an ongoing `get()` operation to be aborted. An aborted operation may complete normally (generally if the abort was received after the operation finished) or reject with an `AbortError` {{domxref("DOMException")}}.
- `password` {{optional_inline}}
- : This option asks the browser to retrieve a stored [password](/en-US/docs/Web/API/Credential_Management_API/Credential_types#passwords) as a {{domxref("PasswordCredential")}} object. It is a boolean value.
diff --git a/files/en-us/web/api/crypto/getrandomvalues/index.md b/files/en-us/web/api/crypto/getrandomvalues/index.md
index 9b0bc132327862d..01d4b229a8a2aa5 100644
--- a/files/en-us/web/api/crypto/getrandomvalues/index.md
+++ b/files/en-us/web/api/crypto/getrandomvalues/index.md
@@ -6,7 +6,7 @@ page-type: web-api-instance-method
browser-compat: api.Crypto.getRandomValues
---
-{{APIRef("Web Crypto API")}}
+{{APIRef("Web Crypto API")}}{{AvailableInWorkers}}
The **`Crypto.getRandomValues()`** method lets you get cryptographically strong random values.
The array given as the parameter is filled with random numbers (random in its cryptographic meaning).
diff --git a/files/en-us/web/api/crypto/index.md b/files/en-us/web/api/crypto/index.md
index 56709ae803ce66d..586aa02128758aa 100644
--- a/files/en-us/web/api/crypto/index.md
+++ b/files/en-us/web/api/crypto/index.md
@@ -5,7 +5,7 @@ page-type: web-api-interface
browser-compat: api.Crypto
---
-{{APIRef("Web Crypto API")}} {{AvailableInWorkers}}
+{{APIRef("Web Crypto API")}}{{AvailableInWorkers}}
The **`Crypto`** interface represents basic cryptography features available in the current context.
It allows access to a cryptographically strong random number generator and to cryptographic primitives.
diff --git a/files/en-us/web/api/crypto/randomuuid/index.md b/files/en-us/web/api/crypto/randomuuid/index.md
index 72f6691df106d6e..dca27e0756b6034 100644
--- a/files/en-us/web/api/crypto/randomuuid/index.md
+++ b/files/en-us/web/api/crypto/randomuuid/index.md
@@ -6,7 +6,7 @@ page-type: web-api-instance-method
browser-compat: api.Crypto.randomUUID
---
-{{APIRef("Web Crypto API")}}{{SecureContext_header}}
+{{APIRef("Web Crypto API")}}{{SecureContext_header}}{{AvailableInWorkers}}
The **`randomUUID()`** method of the {{domxref("Crypto")}} interface is used to generate a v4 {{Glossary("UUID")}} using a cryptographically secure random number generator.
diff --git a/files/en-us/web/api/crypto/subtle/index.md b/files/en-us/web/api/crypto/subtle/index.md
index 2e0b955c70b42ff..04c9be79104a40a 100644
--- a/files/en-us/web/api/crypto/subtle/index.md
+++ b/files/en-us/web/api/crypto/subtle/index.md
@@ -6,7 +6,7 @@ page-type: web-api-instance-property
browser-compat: api.Crypto.subtle
---
-{{APIRef("Web Crypto API")}}{{SecureContext_header}}
+{{APIRef("Web Crypto API")}}{{SecureContext_header}}{{AvailableInWorkers}}
The **`Crypto.subtle`** read-only property returns a
{{domxref("SubtleCrypto")}} which can then be used to perform low-level
diff --git a/files/en-us/web/api/cryptokey/algorithm/index.md b/files/en-us/web/api/cryptokey/algorithm/index.md
index bba31f190e25793..28dbe7797dfdedd 100644
--- a/files/en-us/web/api/cryptokey/algorithm/index.md
+++ b/files/en-us/web/api/cryptokey/algorithm/index.md
@@ -6,7 +6,7 @@ page-type: web-api-instance-property
browser-compat: api.CryptoKey.algorithm
---
-{{APIRef("Web Crypto API")}}{{SecureContext_Header}}
+{{APIRef("Web Crypto API")}}{{SecureContext_Header}}{{AvailableInWorkers}}
The read-only **`algorithm`** property of the {{DOMxRef("CryptoKey")}} interface returns an object describing the algorithm for which this key can be used, and any associated extra parameters.
diff --git a/files/en-us/web/api/cryptokey/extractable/index.md b/files/en-us/web/api/cryptokey/extractable/index.md
index e6f5ef6d2a3d617..f444bdb4fc41cb3 100644
--- a/files/en-us/web/api/cryptokey/extractable/index.md
+++ b/files/en-us/web/api/cryptokey/extractable/index.md
@@ -6,7 +6,7 @@ page-type: web-api-instance-property
browser-compat: api.CryptoKey.extractable
---
-{{APIRef("Web Crypto API")}}{{SecureContext_Header}}
+{{APIRef("Web Crypto API")}}{{SecureContext_Header}}{{AvailableInWorkers}}
The read-only **`extractable`** property of the {{DOMxRef("CryptoKey")}} interface indicates whether or not the key may be extracted using [`SubtleCrypto.exportKey()`](/en-US/docs/Web/API/SubtleCrypto/exportKey) or [`SubtleCrypto.wrapKey()`](/en-US/docs/Web/API/SubtleCrypto/wrapKey).
diff --git a/files/en-us/web/api/cryptokey/index.md b/files/en-us/web/api/cryptokey/index.md
index d3ca1ec33c8fc9e..a838611fbe8d891 100644
--- a/files/en-us/web/api/cryptokey/index.md
+++ b/files/en-us/web/api/cryptokey/index.md
@@ -5,7 +5,7 @@ page-type: web-api-interface
browser-compat: api.CryptoKey
---
-{{APIRef("Web Crypto API")}}{{SecureContext_header}}
+{{APIRef("Web Crypto API")}}{{SecureContext_header}}{{AvailableInWorkers}}
The **`CryptoKey`** interface of the [Web Crypto API](/en-US/docs/Web/API/Web_Crypto_API) represents a cryptographic {{glossary("key")}} obtained from one of the {{domxref("SubtleCrypto")}} methods {{domxref("SubtleCrypto.generateKey", "generateKey()")}}, {{domxref("SubtleCrypto.deriveKey", "deriveKey()")}}, {{domxref("SubtleCrypto.importKey", "importKey()")}}, or {{domxref("SubtleCrypto.unwrapKey", "unwrapKey()")}}.
diff --git a/files/en-us/web/api/cryptokey/type/index.md b/files/en-us/web/api/cryptokey/type/index.md
index 0c16f2919ece23b..6015f40a33b2b03 100644
--- a/files/en-us/web/api/cryptokey/type/index.md
+++ b/files/en-us/web/api/cryptokey/type/index.md
@@ -6,7 +6,7 @@ page-type: web-api-instance-property
browser-compat: api.CryptoKey.type
---
-{{APIRef("Web Crypto API")}}{{SecureContext_Header}}
+{{APIRef("Web Crypto API")}}{{SecureContext_Header}}{{AvailableInWorkers}}
The read-only **`type`** property of the {{DOMxRef("CryptoKey")}} interface indicates which kind of key is represented by the object. It can have the following values:
diff --git a/files/en-us/web/api/cryptokey/usages/index.md b/files/en-us/web/api/cryptokey/usages/index.md
index 0a03b35477f9d73..839d90d812b0e4e 100644
--- a/files/en-us/web/api/cryptokey/usages/index.md
+++ b/files/en-us/web/api/cryptokey/usages/index.md
@@ -6,7 +6,7 @@ page-type: web-api-instance-property
browser-compat: api.CryptoKey.usages
---
-{{APIRef("Web Crypto API")}}{{SecureContext_Header}}
+{{APIRef("Web Crypto API")}}{{SecureContext_Header}}{{AvailableInWorkers}}
The read-only **`usages`** property of the {{DOMxRef("CryptoKey")}} interface indicates what can be done with the key.
diff --git a/files/en-us/web/api/cspviolationreportbody/blockedurl/index.md b/files/en-us/web/api/cspviolationreportbody/blockedurl/index.md
new file mode 100644
index 000000000000000..f6a2128e08750cd
--- /dev/null
+++ b/files/en-us/web/api/cspviolationreportbody/blockedurl/index.md
@@ -0,0 +1,219 @@
+---
+title: "CSPViolationReportBody: blockedURL property"
+short-title: blockedURL
+slug: Web/API/CSPViolationReportBody/blockedURL
+page-type: web-api-instance-property
+browser-compat: api.CSPViolationReportBody.blockedURL
+---
+
+{{APIRef("Reporting API")}}
+
+The **`blockedURL`** read-only property of the {{domxref("CSPViolationReportBody")}} interface is a string value that represents the resource that was blocked because it violates a [Content Security Policy (CSP)](/en-US/docs/Web/HTTP/CSP).
+
+## Value
+
+An string containing a value or URL that represents the resource that violated the policy.
+
+If the value is not the URL of a resource, it must be one of the following strings:
+
+- `inline`
+ - : An inline resource.
+ For example, an inline script that was used when [`'unsafe-inline'`](/en-US/docs/Web/HTTP/Headers/Content-Security-Policy#unsafe-inline) was not specified in the CSP.
+- `eval`
+ - : An `eval()`.
+ For example, `eval()` was used but [`'unsafe-eval'`](/en-US/docs/Web/HTTP/Headers/Content-Security-Policy#unsafe-eval) was not specified in the CSP.
+- `wasm-eval`
+ - : An WASM evaluation.
+ For example, `eval()` was used but [`'wasm-unsafe-eval'`](/en-US/docs/Web/HTTP/Headers/Content-Security-Policy#wasm-unsafe-eval) was not specified in the CSP.
+- `trusted-types-policy`
+ - : A resource that violated the [`trusted-types`](/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/trusted-types) CSP directive.
+ For example, a {{domxref("TrustedTypePolicy")}} was created using {{domxref("TrustedTypePolicyFactory/createPolicy", "window.trustedTypes.createPolicy()")}} with a name that wasn't listed in the CSP `trusted-types` directive.
+- `trusted-types-sink`
+ - : A resource that violated the [`require-trusted-types-for`](/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/trusted-types) CSP directive.
+ For example, the directive was set to `script` but the document did not use a {{domxref("TrustedTypePolicy")}} to sanitize data before passing it to a sink such as {{domxref("Element.innerHTML")}}.
+
+## Examples
+
+The following examples show HTML that would result in some of the `blockedURL` values outlined above.
+
+The examples assume that you have a JavaScript file named `main.js` imported into your script from the same domain.
+The script, which is shown below, creates a new {{domxref("ReportingObserver")}} to observe content violation reports of type `"csp-violation"`.
+Each time the callback function is invoked, we log the `blockedURL` in the first entry of the reports array.
+
+```js
+const observer = new ReportingObserver(
+ (reports, observer) => {
+ console.log(`blockedURL: ${reports[0].body.blockedURL}`);
+ },
+ {
+ types: ["csp-violation"],
+ buffered: true,
+ },
+);
+
+observer.observe();
+```
+
+Note that while there might be multiple reports in the returned array, for brevity we only log the blocked URL of the first report.
+
+### blockedURL for an external resource
+
+The HTML below sets a policy of `Content-Security-Policy: default-src 'self'`, which only allows resources from the same site to be loaded, and then attempts to load a script from the external site `https://apis.google.com`.
+
+```html
+
+
+
+
+
+
+
+
+
+
+
+```
+
+The result of logging the `blockedURL` would be:
+
+```plain
+blockedURL: https://apis.google.com/js/platform.js
+```
+
+### blockedURL for unsafe-inline resources
+
+The HTML below demonstrates the conditions that would result in a `blockedURL` of `inline`.
+This sets a policy of `Content-Security-Policy: default-src 'self'`, which does not allow inline scripts to be executed, causing a violation because the page contains an inline script.
+
+```html
+
+
+
+
+
+
+
+
+
+
+```
+
+The result of logging the `blockedURL` would be:
+
+```plain
+blockedURL: inline
+```
+
+### blockedURL for trusted-types-policy resources
+
+The HTML below demonstrates the conditions that would result in a `blockedURL` of `trusted-types-policy`.
+First it defines a policy that allows `'unsafe-inline'` scripts to be executed, so that we can create a {{domxref("TrustedTypePolicy")}} that will trigger a violation.
+The policy also uses the `trusted-types` directive to specify that a {{domxref("TrustedTypePolicy")}} with the name `myPolicy` is allowed to be created.
+
+```html
+
+
+
+
+
+
+
+
+
+
+
+```
+
+In the script a policy is created with the name `somePolicy`.
+
+> [!NOTE]
+> The particular policy we defined above is not a very good policy.
+> The aim of using trusted types is not to enforce a _particular_ policy, but to require enforcement of some policy, and ensure that the sanitization code is in one place and easy to review.
+
+Because this is not listed in the `trusted-types` directive it is a CSP violation, and we'd see the log output:
+
+```plain
+blockedURL: trusted-types-policy
+```
+
+If we changed the name of the allowed policy to `somePolicy`, the page would no longer be in violation.
+
+### blockedURL for trusted-types-sink resources
+
+The HTML below demonstrates the conditions that would result in a `blockedURL` of `trusted-types-sink`.
+First it defines a policy that allows `'unsafe-inline'` scripts to be executed, and as in the previous example it use the `trusted-types` directive to specify that a {{domxref("TrustedTypePolicy")}} with the name `myPolicy` is allowed to be created.
+
+In addition, it specifies the directive `require-trusted-types-for 'script'`, which enforces that sinks should only be passed content that has been sanitized using a trusted type.
+
+```html
+
+
+
+
+
+
+
+
+ Update Content
+
+
+
+
+
+```
+
+The `updateContent()` method passes unsanitized content to the element's `innerHTML` property, which will cause a CSP violation.
+We'd see the log output:
+
+```plain
+blockedURL: trusted-types-sink
+```
+
+In order to avoid the violation we would need to update the script to define a trusted type policy, and use it to sanitize the input passed to the element:
+
+```js
+const policy = trustedTypes.createPolicy("myPolicy", {
+ createHTML: (string) => {
+ // Some (insufficient) sanitization code
+ return string.replace(/`](/en-US/docs/Web/HTML/Element/meta) element to set the {{httpheader('Content-Security-Policy')}} `default-src` to `self`, which allows scripts and other resources to be loaded from the same origin, but does not allow inline scripts to be executed.
+The document also includes an inline script, which should therefore trigger a CSP violation.
+
+```html
+
+
+
+
+
+
+ CSP: Violation due to inline script
+
+
+ CSP: Violation due to inline script
+
+
+
+```
+
+#### JavaScript (main.js)
+
+The document above also loads the external script `main.js`, which is shown below.
+Because this is loaded from the same domain as the HTML, it is not blocked by the CSP.
+
+The script creates a new {{domxref("ReportingObserver")}} to observe content violation reports of type `"csp-violation"`.
+Each time the callback function is invoked, we get the body of the first entry of the reports array, and use it to log the file, line, and column of the violation to the console.
+
+```js
+// main.js
+const observer = new ReportingObserver(
+ (reports, observer) => {
+ const cspViolationBody = reports[0].body;
+ console.log(`sourceFile: ${cspViolationBody.sourceFile}`);
+ console.log(`lineNumber: ${cspViolationBody.lineNumber}`);
+ console.log(`columnNumber: ${cspViolationBody.columnNumber}`);
+ },
+ {
+ types: ["csp-violation"],
+ buffered: true,
+ },
+);
+
+observer.observe();
+```
+
+Note that while there might be multiple reports in the returned array, for brevity we only log the values of the first element.
+
+#### Results
+
+You can try this out using a [local server](/en-US/docs/Learn/Common_questions/Tools_and_setup/set_up_a_local_testing_server).
+Copy the above code into `test/index.html` and `test/main.js` and run the server in the root directory.
+Assuming the address of the local server is `http://127.0.0.1:9999`, you can then load the HTML file from `http://127.0.0.1:9999/test/` (or `http://127.0.0.1:9999/test/index.html`).
+
+With the above setup, the output of the log on Chrome is:
+
+```plain
+sourceFile: http://127.0.0.1:9999/test/
+lineNumber: 15
+columnNumber: 0
+```
+
+The result is similar for Firefox:
+
+```plain
+sourceFile: http://127.0.0.1:9999/test/
+lineNumber: 15
+columnNumber: 13
+```
+
+Note that the column number is different for the two browsers.
+Chrome always appears to report `0`.
+The value on Firefox represents the position of the first character after the end of the opening `
+ CSP: Violation due to inline script
+
+
+ CSP: Violation due to inline script
+
+
+