diff --git a/.github/workflows/auto-cleanup-bot.yml b/.github/workflows/auto-cleanup-bot.yml
index 485f6b7a7207600..620555d775b641a 100644
--- a/.github/workflows/auto-cleanup-bot.yml
+++ b/.github/workflows/auto-cleanup-bot.yml
@@ -31,6 +31,8 @@ jobs:
yarn content fix-flaws
yarn fix:md
yarn fix:fm
+ node scripts/sort_and_unique_file_lines.js .vscode/ignore-list.txt
+ node scripts/sort_and_unique_file_lines.js .vscode/terms-abbreviations.txt
- name: Create PR with only fixable issues
if: success()
diff --git a/.github/workflows/pr-check_cspell_lists.yml b/.github/workflows/pr-check_cspell_lists.yml
new file mode 100644
index 000000000000000..a40d41797fd9669
--- /dev/null
+++ b/.github/workflows/pr-check_cspell_lists.yml
@@ -0,0 +1,33 @@
+name: Check cSpell lists
+
+on:
+ pull_request:
+ branches:
+ - main
+ paths:
+ - .vscode/ignore-list.txt
+ - .vscode/terms-abbreviations.txt
+
+jobs:
+ docs:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ sparse-checkout-cone-mode: false
+ sparse-checkout: |
+ .vscode/ignore-list.txt
+ .vscode/terms-abbreviations.txt
+ .nvmrc
+ package.json
+ scripts/sort_and_unique_file_lines.js
+
+ - name: Setup Node.js environment
+ uses: actions/setup-node@v4
+ with:
+ node-version-file: ".nvmrc"
+
+ - name: Check if cSpell word lists are in correct order
+ run: |
+ node scripts/sort_and_unique_file_lines.js .vscode/ignore-list.txt --check
+ node scripts/sort_and_unique_file_lines.js .vscode/terms-abbreviations.txt --check
diff --git a/.github/workflows/spelling-check-bot.yml b/.github/workflows/spelling-check-bot.yml
index cc04cb4776acc40..f8eacc8444f979d 100644
--- a/.github/workflows/spelling-check-bot.yml
+++ b/.github/workflows/spelling-check-bot.yml
@@ -44,7 +44,7 @@ jobs:
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TITLE: Weekly spelling check
- LABELS: reported by automation,good first issue
+ LABELS: reported by automation
BODY: |
Typos and unknown words:
diff --git a/.lintstagedrc.js b/.lintstagedrc.js
index 4204b0b0beb4f16..decfb9664873fbd 100644
--- a/.lintstagedrc.js
+++ b/.lintstagedrc.js
@@ -17,4 +17,10 @@ export default {
`yarn filecheck ${filenames.join(" ")}`,
],
"*": (filenames) => [`node scripts/log-url-issues.js`],
+ ".vscode/ignore-list.txt": (filenames) => [
+ `node scripts/sort_and_unique_file_lines.js .vscode/ignore-list.txt`,
+ ],
+ ".vscode/terms-abbreviations.txt": (filenames) => [
+ `node scripts/sort_and_unique_file_lines.js .vscode/terms-abbreviations.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 5b8bf9c17347399..80797e93d6c6a44 100644
--- a/.vscode/ignore-list.txt
+++ b/.vscode/ignore-list.txt
@@ -1,22 +1,19 @@
-Amit
-Scrimba
-rvfc
-Azarath
-Tamaran
AAAAAAABAAE
AAAAD
AAABAAEAEBAAA
+aaabcc
aaba
+aabaac
AABB
+AABB's
aabbcc
aabbccdd
-AABB's
+aacbbbcac
AAEC
AAFEI
AAGUID
AAQAB
aarch
-Áaron
abaac
Ababa
ABAQ
@@ -65,10 +62,12 @@ accentlightesthighlight
accentlightshadow
accentregularhighlight
accentregularshadow
+ACCEPTEDTOS
Accessibilità
Accessibles
accesskeys
acclmtr
+accname
accountnum
accu
accumsan
@@ -81,9 +80,7 @@ achromatopsia
acknowl
acknowled
acodec
-𝚊𝚌𝚘𝚜
acosh
-𝚊𝚌𝚘𝚜𝚑
Acrosync
ACSS
activatable
@@ -98,6 +95,7 @@ addressbar
addsourcebuffer
addstream
addtrack
+adduser
Addy
ADHD
Adilah
@@ -106,16 +104,19 @@ adipiscing
adipisicing
adipscing
adjtimes
+adjtimescapheight
+adjtimesexheight
Adlam
adlm
ADPCM
+adrianroselli
ADSR
adtech
+advertisementreceived
AEDT
aeio
AEIOU
aeiouy
-ˈælfa
Aenean
AEST
afes
@@ -128,6 +129,7 @@ afterprint
afterscriptexecute
afunkydomainname
agere
+aggregatable
aggregately
Agnostify
AGWG
@@ -135,6 +137,7 @@ Ahom
AIAAAA
Akhgari
ALAC
+alastairc
alaw
albumicon
Alem
@@ -152,6 +155,7 @@ aliquid
aliquip
aliquyam
alispivak
+alistapart
ality
allbooks
ALLCAPS
@@ -159,10 +163,12 @@ Allons
allowdirs
allowdropevent
allowevents
+ALLOWFROM
ALLPASS
allsettled
allsmallcaps
Alman
+alphanumerals
alphatransparency
ALPN
alternatingbackground
@@ -172,6 +178,7 @@ ambisonic
Amet
Amete
Amiri
+Amit
Amit's
amore
Amorim
@@ -185,10 +192,10 @@ analyser's
analyzability
anana
Anand
-André
Andreas
Andreessen
Andrzej
+André
Anek
angleminus
ANGLETYPE
@@ -200,7 +207,9 @@ animationend
animationiteration
animationstart
animi
+Animometer
ANMF
+Annonay
annunaki
anonid
Anonymization
@@ -210,11 +219,14 @@ anotherscript
anothertarget
Ansari
Ansyari
+antialiasing
antitracking
Anurag
anyfunc
anypage
Anytown
+apacheconf
+apachectl
Apapou
APCA
aperiam
@@ -273,18 +285,18 @@ Arun
Asana
ASCAP
ascendingly
+ASCIIID
Asclepias
ASGI
Ashita
Ashlyn
Ashok's
-𝚊𝚜𝚒𝚗
asinh
-𝚊𝚜𝚒𝚗𝚑
asintn
ASLR
asmo
Assemblée
+assetlinks
associationlist
associationlistitemkey
associationlistitemvalue
@@ -294,10 +306,8 @@ asuintn
asynchrony
asynciterator
ATAG
-𝚊𝚝𝚊𝚗
Atanassov
atanh
-𝚊𝚝𝚊𝚗𝚑
atexits
atlasing
Atmark
@@ -310,6 +320,7 @@ Attributs
Attrx
auctor
Audiocogs
+audiocontext
audioend
Audiofile
audioinput
@@ -368,6 +379,7 @@ Axess
AXQB
Aylin
Ayşe
+Azarath
Azeri
AZERTY
Aziz
@@ -420,12 +432,15 @@ beforeend
beforeevicted
beforeinput
beforeinstallprompt
+beforeinstallpromptevent
beforematch
beforeprint
beforescriptexecute
+beforetoggle
beforeunload
beforexrselect
Beihang
+belgin
belowbreve
belowcircumflex
belowcomma
@@ -442,8 +457,6 @@ Bernouilli
beststartupever
Beverloo's
Bezier
-Bézier
-Béziers
bezje
bfalse
bfcache
@@ -501,6 +514,7 @@ blit
blitting
blobconstructor
Blobular
+blockable
blockified
blockiness
blocklists
@@ -553,13 +567,13 @@ Boxrender
boxtitle
BPPV
BPTC
-ˈbraːˈvo
braceless
brah
Brai
braillelabel
brailleroledescription
bram
+brians
brickfield
brighttext
Broadcastchannel
@@ -569,7 +583,9 @@ browserless
Browsershots
browserslistrc
BROWSERSTACK
+Browsersync
browsertabbar
+browsingtopics
Bruant
brucelindbloom
BSAC
@@ -608,11 +624,15 @@ byterange
byteranges
bytestream
Bytestreams
+bytestring
+Bézier
+Béziers
caaaaaaandy
caaandy
caandy
Cachable
Cacheable
+CACHEDIR
CAFEBABE
CAIND
caitmuenster
@@ -651,6 +671,8 @@ Cassini
caststatus
Català
Catan
+catchable
+Caterina
catfishhead
catflap
catfront
@@ -663,7 +685,6 @@ CBDT
CBJS
CBOR
cbrt
-𝚌𝚋𝚛𝚝
ccall
CCITT
CCPA
@@ -672,7 +693,6 @@ cdbbdbsbz
CDLR
cdylib
Ceci
-Célestes
cellhighlight
cellhighlighttext
CELP
@@ -686,6 +706,7 @@ Chakra
Chakra's
Chamakh
changeme
+characterboundsupdate
characteristicvaluechanged
characterset
charat
@@ -698,10 +719,13 @@ chatbox
chatserver
chbox
chbx
+Cheatsheet
+checkboard
checkedness
checkiandj
checkin
checkj
+checkmarks
checkmenuitem
Chiki
childlist
@@ -751,6 +775,7 @@ clienthello
clientkey
clig
clike
+clipboardchange
Clippy
clipspace
cliptext
@@ -761,8 +786,8 @@ cloneable
closebutton
closeme
Cloudinary
-Clóvis
CLREQ
+Clóvis
CMAMBAAAAAA
CMYK
cndy
@@ -773,6 +798,7 @@ codebases
Codecademy
Codedread
Codeinput
+Codelab
codementor
CODEOWNERS
codepaths
@@ -793,8 +819,10 @@ colex
colexographical
colindextext
collapser
+collectability
Collectn
collectstatic
+collinearity
Colomb
colorbox
colorchange
@@ -830,6 +858,7 @@ compositionend
compositionstart
compositionupdate
CONCAT
+concatenator
Cond
Conde
Condei
@@ -856,22 +885,29 @@ consetetur
Consolas
constructio
Containerless
+contenido
contentaccessible
contentarea
contentdelete
Contentful
+contentlost
+contentscripts
contenttypes
+contentvisibilityautostatechange
contentvisibilityautostatechanged
contextlost
contextrestored
+controlbar
controllerchange
controlslist
conubia
convallis
Convolutional
cookiechange
+cookieless
coolexample
coolmodule
+cooluser
Coprime
copysign
copywithin
@@ -880,9 +916,7 @@ CORB
Corber
CORSM
Cortana
-𝐜𝐨𝐬
COSE
-𝚌𝚘𝚜𝚑
couleur
countername
Coursera
@@ -894,16 +928,18 @@ cpuworker
cqmax
cqmin
Cras
+crashextensions
Cratchit
crbug
createpattern
createreader
createsuperuser
+credentialled
Credentialless
-crédit
creds
cript
Crockford
+crookedtimber
cros
crossbrowser
crossdomain
@@ -913,6 +949,7 @@ cryptokey
CRYPTOMINING
cryptosystem
cryptosystems
+crédit
csbig
Cscript
cseuckr
@@ -935,6 +972,7 @@ csscomputed
cssdb
cssfontstack
cssgrid
+cssgridgarden
cssgridlegacy
csshiftjis
cssinfo
@@ -947,6 +985,7 @@ cssremedy
cssruleview
csssubgrid
csssyntax
+csstricks
cssvisual
CSSWG
CSSX
@@ -958,7 +997,9 @@ ctlr
ctron
ctrz
ctypes
+Cubehelix
cubemap
+cubemaps
cubetexture
cubilia
cuechange
@@ -971,15 +1012,19 @@ Curlz
curr
currentcolor
currententrychange
+currentscreenchange
cursus
Curveto
CUSEL
customelements
customshapes
+customstateset
CWND
cwrap
Cyberduck
+cycletracker
Cylon
+Célestes
DAAA
daala
dafont
@@ -1011,6 +1056,7 @@ datetimeformat
datetimes
Datumizer
davbrito
+davidwalsh
davidwalshblog
dbbd
DBFF
@@ -1045,17 +1091,16 @@ delectus
deleniti
deleteoperator
deleteproperty
-ˈdeltɑ
Demi
-démonstration
demozilla
demultiplexing
demux
+demuxing
Denicola
Denicola's
Deno
-denormalized
Deno's
+denormalized
deoptimize
depreceted
deprioritized
@@ -1070,6 +1115,7 @@ Desaulniers
descendingly
descr
descript
+Descripton
deserunt
desinis
Desproges
@@ -1236,6 +1282,7 @@ Dreamweaver
dropevent
dropmarker
dropshadow
+dropshow
droptarget
DSCP
DSLs
@@ -1263,6 +1310,7 @@ Dyno
Dynos
dyscalculia
Dyslexi
+démonstration
Eader
EAEFF
Ealert
@@ -1320,7 +1368,6 @@ elot
elts
emailme
emailoptin
-Émanuel
embeddable
Embedder
Embedders
@@ -1337,6 +1384,7 @@ Emptytext
EMSCRIPTEN
Emscripting
emsdk
+enablei
Encod
encodeuri
encodeuricomponent
@@ -1351,6 +1399,7 @@ Endtest
endtime
engageability
engageable
+Engish
enim
ENLW
ENOENT
@@ -1395,6 +1444,7 @@ Esta
Etag
etags
Etarget
+Ethere
ethertank
ethi
ethioaa
@@ -1407,6 +1457,8 @@ eveniet
evenodd
eventname
eventtarget
+everytime
+evilsite
Examp
examplebutton
examplecheckbox
@@ -1430,6 +1482,7 @@ exampleradio
examplerange
examplereset
examplesearch
+examplestyles
examplesubmit
exampletel
exampletext
@@ -1446,11 +1499,9 @@ Exfiltration
EXIF
exitpictureinpicture
Exljbris
-𝚎𝚡𝚙
Expando
expedita
expm
-𝚎𝚡𝚙𝚖
expressjs
expresstests
exprgen
@@ -1481,6 +1532,7 @@ factfile
factit
Factsheet
failovers
+Fairchild
fakeid
fakepath
falsey
@@ -1508,6 +1560,9 @@ fedcm
feedforward
FEFD
felis
+fencedframe
+fencedframeconfig
+fencedframes
feoffset
fermentum
fers
@@ -1534,9 +1589,11 @@ filesharing
filesize
filestream
Filesystems
+filetext
Filezilla
FILLMODE
fillstyle
+filterfunctions
filteron
fina
finalizer
@@ -1568,13 +1625,14 @@ flabada
FLAC
FLAC's
flagcolors
+Flagfox
flashtext
flatmap
Flavio
fleurons
Flexbox
-Flexboxes
flexbox's
+Flexboxes
Flexbugs
flexy
Flickr
@@ -1633,6 +1691,7 @@ forof
Fortnite
Forw
forwardonly
+forwidth
FOSS
Foti
FOUC
@@ -1673,8 +1732,8 @@ fromentries
frontmatter
frontmost
fround
-Früh
fruitbear
+Früh
Fscreen
Fscript
fugiat
@@ -1734,6 +1793,7 @@ gangnam
Gannen
gatheringstatechange
Gato
+gattserverdisconnected
Gayatri
Gbps
GCLI
@@ -1745,6 +1805,7 @@ geckoversion
geckoview
Gedit
gement
+generatable
generix
geng
geolocate
@@ -1756,11 +1817,11 @@ geor
GEOSTD
GEQUAL
Gerd
-GESÄSS
-Gesäß
gesturechange
gestureend
gesturestart
+GESÄSS
+Gesäß
getbigint
getbiguint
getcanonicallocales
@@ -1772,6 +1833,7 @@ getfloat
getfullyear
gethours
getint
+GETMATCHEDRULES
getmilliseconds
getminutes
getmonth
@@ -1804,6 +1866,7 @@ Gillenwater's
gims
giphy
Gitbash
+givenname
glanceable
Glat
glcanvas
@@ -1841,9 +1904,11 @@ graylevel
Grayscale
Grayscaling
Graywolf
+greenblue
Greenify
Greensock
greentoggle
+greenzero
grek
greklow
greon
@@ -1866,6 +1931,7 @@ groupbytomap
groupingoperator
groupname
growsandstays
+growshrink
GSAP
GSSAPI
Gstreamer
@@ -1882,7 +1948,6 @@ gzipped
Gzipping
Gzzh
habitasse
-háček
halehame
HALFWIDTH
Halloumi
@@ -1901,6 +1966,7 @@ HANKAKU
hansfin
hantfin
harissa
+harpercollins
harum
Hashbang
hashchange
@@ -1954,6 +2020,7 @@ HIGHPASS
highres
Highrise
HIGHSHELF
+highspeed
Hijri
Hildy
hilite
@@ -1991,7 +2058,6 @@ Holzman
Homescreen
homothetic
Honigswald
-Hönigswald
hoosteeno
horizontalstrike
horzvert
@@ -2056,7 +2122,8 @@ Hyperaudio's
hyperlinktext
hypertexts
hypot
-𝚑𝚢𝚙𝚘𝚝
+háček
+Hönigswald
iaculis
iarc
ICAI
@@ -2148,7 +2215,9 @@ Ilter
Ilya
imag
imageattr
+imagebad
imagedata
+imagegrid
imagemaps
IMAGESET
imageurl
@@ -2161,8 +2230,8 @@ impedit
imperdiet
importmap
IMSC
-imscjs
IMSC's
+imscjs
imul
inactivetitlebarcolor
inceptos
@@ -2174,6 +2243,9 @@ indexeddb
indexof
infile
infobar
+infobox
+infobox's
+infoboxes
inga
initialimage
Initialise
@@ -2183,6 +2255,7 @@ Inkscape's
inlinable
Inlines
innerht
+innertext
innolitics
inoperator
inputdevices
@@ -2206,6 +2279,7 @@ Intelli
Intellifont
Interactability
interactable
+interarrival
interceptable
intercooler
Interdimensional
@@ -2227,6 +2301,7 @@ invidunt
Invision
Ionos
ipaddr
+ipados
IPFS
ipns
ipsa
@@ -2287,6 +2362,7 @@ iyqi
Jaenisch
Jalad
Jalkhov
+jamiedoe
Jank
janking
Jankord
@@ -2304,7 +2380,6 @@ Jehl's
Jeni's
Jeonja
Jeremie
-Jérémie
jeremiepat
Jewett
jfgd
@@ -2312,7 +2387,7 @@ JFIF
jgndmic
jhokmfdskl
jibbering
-jícama
+Jinping
JISHO
Jitsi
Jjom
@@ -2361,16 +2436,18 @@ jswebm
jsxref
jumpless
jumpterm
-Júnior
JUNJA
justo
justone
juxtaposi
JXON
+Jérémie
+jícama
+Júnior
Kadir
Kadlec
-kaios
Kahlo
+kaios
Kakao
Kaku
Kaply
@@ -2442,6 +2519,7 @@ Kneeland
Knocky
Knolwedgement
Knowbility
+Kobabe
Kokoro
Kolkata
kombu
@@ -2456,9 +2534,12 @@ Kravets
Kulikov
KUMA
kumascript
-Kütük
kwargs
Kyouko
+Kütük
+L'homme
+l'oignon
+l'âge
labelable
labeledby
labore
@@ -2467,7 +2548,6 @@ laboris
laborum
lacinia
lacus
-l'âge
Lagerblad
laggy
Laing
@@ -2496,6 +2576,7 @@ laudatur
Lauke
lazify
lazyload
+lazyloaded
lazysizes
Lbitfield
Lclampf
@@ -2519,13 +2600,12 @@ Lempel
LENGTHADJUST
LENGTHTYPE
Lennart
-Léonie
-Léonie's
leopardskin
lepc
Lepcha
LEQUAL
Lesh
+letmein
letterboxed
letterboxing
letterform
@@ -2535,7 +2615,6 @@ levelchange
levent
Lexi
Leyla
-L'homme
Lianghekou
Libav
Libertinus
@@ -2552,16 +2631,19 @@ liga
Lightbox
lightgoldenrod
lightnesses
+lightpurple
lightshow
Lighttpd
Limbu
Limin
Lindbloom's
+Lindenberg
Lindesay
lineargradient
Linearize
lineboundary
linebreak
+linecaps
linename
Lineto
linewidth
@@ -2585,7 +2667,6 @@ Llanfair
LLLLLLLLLLLLLLLLRRRRRRRRRRRRRRRR
LMENU
lmodern
-𝙻𝙽
lname
lnum
loadeddata
@@ -2612,12 +2693,9 @@ localtime
locationbar
lockscreens
lofi
-𝚕𝚘𝚐
-𝙻𝙾𝙶
logarithmed
logline
Logpoints
-l'oignon
longdiv
longhands
longspan
@@ -2625,15 +2703,18 @@ longtask
longtasks
Longterm
longwave
+longwinded
Lookaheads
lookbehinds
loopend
loopstart
+loopstarted
Losslessly
lostcapture
lostpackets
lostpointercapture
Lovie
+lowdelay
lowlights
lowp
LOWPASS
@@ -2665,6 +2746,9 @@ lvmax
lvmin
LWIN
lwtheme
+Léonie
+Léonie's
+macaron
Macarons
Machrek
Macknik
@@ -2689,6 +2773,7 @@ Majestatis
Majumdar
makemigrations
Makey
+Malala
malesuada
malloc
Mamitiana
@@ -2708,7 +2793,6 @@ MARKERUNITS
Markmarkimark
Martell
martinfowler
-März
Masaram
Masayuki
Maski
@@ -2716,11 +2800,11 @@ MASSHOU
Massieux
matchall
MATF
-𝙼𝚊𝚝𝚑
mathbb
mathbold
mathdbl
mathfont
+mathit
MATHML
mathmono
Mathoid
@@ -2742,6 +2826,7 @@ maxgreen
maxime
Maximiliano
maximus
+maxplaybackrate
maxrow
maxsafeinteger
maxvalue
@@ -2767,6 +2852,7 @@ mediump
Medline
Meetei
MEETORSLICE
+megastore
Meggin
meinheld
memcpy
@@ -2799,6 +2885,7 @@ messagebox
messageerror
Metafile
metalness
+metastring
meterbar
meterchunk
METHODTYPE
@@ -2840,16 +2927,19 @@ minimalistic
minmax
minuto
minutos
+miplevel
MIPMAP
mipmapped
Mipmapping
Mipmaps
Miracast
+Miroslav
mirrorable
mirunacurtean
misissuance
misissuances
misissued
+Misparsed
mitigations
MITM
Mitzie
@@ -2873,6 +2963,7 @@ Moderna
Modernizr
Modernizr's
Modif
+modulepreloaded
Moin
Moiré
Mojibake
@@ -2887,6 +2978,7 @@ momot
monkeypatch
monoscopic
Montag
+montecarlo
moof
Moonrocks
Mooog
@@ -2900,6 +2992,7 @@ Mork
morx
Mothman
MOUSEDOWN
+mouseentry
MOUSEHWHEEL
mouseleave
mouselook
@@ -2957,13 +3050,14 @@ MUAT
Mufasa
MUHENKAN
Mullany
-Müller
mult
Multicol
multicolumn
multicolumns
multicore
+multifactor
multihomed
+multimemory
multimessaging
multipage
multipass
@@ -2983,12 +3077,12 @@ Multiview
Mundo
Munsell
muscaria
-Musée
musicdsp
Musicogenic
musicplayer
Musicr
Mustafa
+Musée
MVVM
myaddon
MYAGE
@@ -3028,6 +3122,7 @@ myfoot
myform
myframe
mygraphic
+mygroupmarker
myhead
myhost
myid
@@ -3068,12 +3163,14 @@ myrenderpassencoder
myrenderpipeline
myroutine
myrows
+mysampler
myscript
myserver
myshader
myshov
mysprite
mystate
+mystatename
mystring
mystunserver
mystylesheet
@@ -3093,10 +3190,11 @@ myview
myweb
mywindow
myworkerurl
+März
+Müller
Nacl
Nada
Naeher
-naïvely
Nakamura
Nakano's
Nally
@@ -3113,11 +3211,13 @@ nativehyperlinktext
natoque
natus
Navara
+navigables
navigateerror
navigatesuccess
Navigations
-Nazário
Nazarrudin
+Nazário
+naïvely
NCBI
NCLX
ndata
@@ -3162,6 +3262,7 @@ newtab
newtarget
newtext
newval
+nextslide
nextstep
NEXTTRACK
nextul
@@ -3170,9 +3271,9 @@ NFKC
NFKD
nguy
nibh
+NIC's
nicezero
nicht
-NIC's
niform
nightlies
nightwatch
@@ -3187,6 +3288,7 @@ nobis
nobooks
nobullets
nocache
+Nodepad
nodeset
nodownload
noemit
@@ -3228,6 +3330,7 @@ notanaudio
Notar
notaurl
notavideo
+noteblocks
notebox
notecard
notfound
@@ -3236,11 +3339,13 @@ notificationbox
notificationclick
notificationclose
Noto
+notrendered
notservice
NOTSUPPORTEDERR
nourl
nowledge
nowledgement
+Nowrapping
NPAPI
npmjs
NPNVDOM
@@ -3290,6 +3395,7 @@ offmainthreadcomposition
offscreencanvas
offsetblur
offsetleft
+offsetted
oggz
Ogonek
OIDC
@@ -3344,6 +3450,8 @@ onscreenschange
onscrollend
onsinkchange
ontent
+ontextformatupdate
+ontextupdate
ontrol
onum
onuncapturederror
@@ -3395,7 +3503,6 @@ osma
Osmani
Osmani's
Osmanya
-Österreich
otation
othercompany
otherdoc
@@ -3443,15 +3550,19 @@ pageinfo
Pagella
pageload
pageloadtime
+pagereveal
pageshow
-páginas
+pageswap
Pahawh
+paintable
+paintsize
paintworklet
paintworklet's
pais
Palatino
Paletton
pantherina
+papermakers
paragraaf
paragraphboundary
paragraphe
@@ -3503,8 +3614,8 @@ Pedestaling
peerconnection
peerjs
Pelientesque
-Pellentesque
Pell's
+Pellentesque
Penadés
penatibus
Pereira
@@ -3514,6 +3625,7 @@ periodicsync
perispomeni
Perlin
permessage
+permissionspolicy
pers
personalbar
personaltoolbar
@@ -3534,7 +3646,6 @@ phonorecords
photopic
Photoshop
PHPSESSID
-𝙿𝙸
Picryl
Picturefill
PIDOM
@@ -3548,6 +3659,7 @@ Pinia
PINP
Pinterest
Piotrek
+pipline
Pissuti
Pitstop
Pixabay
@@ -3559,9 +3671,11 @@ placeat
placerat
Platane
platea
+Platformer
platformers
platformversion
playbackorder
+playbackrate
playbackspeed
playbutton
playcanvas
@@ -3611,6 +3725,8 @@ pomm
pomr
popcnt
popout
+popovertarget
+popovertargetaction
popstate
populatedb
popuponclick
@@ -3639,7 +3755,6 @@ potappo
potenti
potl
potr
-𝚙𝚘𝚠
Powerbook
powerefficient
Powermapper's
@@ -3651,9 +3766,14 @@ Praesent
pranswer
Prateek
preactivate
+precache
+precached
+precaches
+precaching
precoded
Precomposed
preconnecting
+preconnects
predeclared
preffed
prefixless
@@ -3665,7 +3785,9 @@ prefwindow
preg
preinstall
prelighting
+preloaders
premkproject
+premultiplication
PREMULTIPLY
preorder
prepopulate
@@ -3676,9 +3798,10 @@ preprocessors
Prerender
prerendered
prerendering
+prerenderingchange
+prerenders
preresolved
presentationml
-présenté
PRESERVEASPECTRATIO
presnap
pressable
@@ -3690,9 +3813,11 @@ pretium
prettyping
preventdefault
preventextensions
+previousslide
PREVIOUSTRACK
PREVUNIQUE
prflx
+pricelist
primarykey
primcount
primis
@@ -3716,6 +3841,7 @@ proident
Proin
proinde
promobutton
+properities
propertyaccessors
propertyisenumerable
propfind
@@ -3730,6 +3856,7 @@ proxify
proxyfied
proxyhandler
Proxying
+présenté
pseudoclass
pseudoclasses
Pseudocode
@@ -3753,16 +3880,19 @@ purejsgame
purgecaches
pushsubscriptionchange
PVRTC
+PWA's
pwabuilder
pwamp
pwas
-PWA's
pwid
pwllgwyngyllgogerychwyrngogogoch
PXHQTXP
pylint
Pythagora
+pythonanywhere
+pythonaware
pyxpidl
+páginas
Qbsshxk
QCIF
QCMS
@@ -3781,7 +3911,6 @@ quaxxor
queryphrase
queryset
querysets
-querystring
quibusdam
QUIC
quickbrownfox
@@ -3824,6 +3953,7 @@ ratechange
ratione
Rauschmayer
Rauschmayer's
+rawupdate
Raytracer
RBGA
rcap
@@ -3837,10 +3967,12 @@ Readablestream
readback
readdir
readingerror
+readonlyinline
readwrite
readwriteflush
READYSTATE
realid
+realpython
Realtek
Rearrangeable
reate
@@ -3851,6 +3983,7 @@ receivebox
Recep
Rects
recvonly
+redblue
reddinate
Redeclaration
Redeclarations
@@ -3863,14 +3996,14 @@ redsquare
redtext
redtoggle
redtogreen
+redyellow
+redzero
reen
Reeza
-Référence
referenceable
referer
referralpolicy
reflectionchange
-Régagnon
regexes
regionless
reimplementation
@@ -3911,19 +4044,22 @@ reprioritize
reproject
repudiandae
requirable
+requireinteraction
requireuserinteraction
Reregister
rerum
rescan
rescoping
+reselecting
resends
-réservé
resh
Resig
Resig's
resizability
+Resizeable
resizer
resizerpanel
+resnapped
resolvedoptions
resourcetimingbufferfull
respecified
@@ -3934,7 +4070,6 @@ restcookbook
restofurl
restparameters
resultobj
-résumé
retarget
retargeted
retargeting
@@ -3980,6 +4115,7 @@ roletype
rolloff
Romaji
romanlow
+Ronaldo
Roselli
Rossen
Rossum
@@ -4011,6 +4147,7 @@ RTCICE
RTCIP
RTCP
RTCRTP
+rtctransform
RTCWEB
RTMP
RTMPE
@@ -4030,8 +4167,14 @@ Runtimes
rustc
Rustup
rutrum
+rvfc
RWIN
Ryuno
+Référence
+Régagnon
+réservé
+résumé
+s'écrase
sadipscing
Saepe
safariextz
@@ -4048,6 +4191,7 @@ Saltasaurus
Salva
SAMEORIGIN
Samesite
+samplepay
Samplerate
samplesize
samr
@@ -4074,6 +4218,7 @@ scalethumbend
scalethumbstart
scalethumbtick
scalex
+scanability
scancode
scanf
scangamepads
@@ -4086,10 +4231,10 @@ Schiff
Schola
Scholz
schon
-schön
Schonheit
schreibt
Schwarz
+schön
scooby
scopable
scottohara
@@ -4099,8 +4244,11 @@ screenful
screenleft
screenorientation
screenreader
+screenreaders
+screenschange
screentop
Scribie
+Scrimba
Scriptable
Scripters
scriptname
@@ -4132,12 +4280,12 @@ SECAM
Sechelt
secmetadata
secp
-s'écrase
sectionhead
Securecontext
securityheaders
securitypolicy
securitypolicyviolation
+seecompattable
Seekable
seekbackward
seeked
@@ -4149,7 +4297,9 @@ Segoe
segundos
Seizureless
selectables
+selectchange
selectedcandidatepairchange
+selectedness
selectend
selectionchange
selectrepo
@@ -4168,14 +4318,15 @@ senectus
sentenceboundary
Separatei
sequi
-será
serialno
serialnumber
+Serpentina
serverhello
Serverside
serverstart
SERVFAIL
serviceworker
+será
SESAC
sess
sessionhistory
@@ -4213,10 +4364,14 @@ SFNT
Shadeed
shadowdom
shadowrootclonable
-shān
+shadowrootdelegatesfocus
+shadowrootmode
+shadowrootserializable
Sharada
sharedarraybuffer
+sharedmem
sharedworker
+sharpyuv
Shazaam
Sheppy
shexp
@@ -4228,12 +4383,16 @@ shippingoptionchange
Shireen
Shoeshop
shortlink
+shortlinks
showable
showbf
shrd
+shrinkwap
+shrinkwrapping
shtm
SHTTP
Shumway
+shān
sidebox
sideload
sideloaded
@@ -4251,8 +4410,8 @@ SIGTERM
Silf
Silverlight
SIMD
-𝚜𝚒𝚗𝚑
Sinhala
+sinkchange
Sino
sint
Sintel
@@ -4279,7 +4438,6 @@ skjfndskjfnbdskjfb
skybox
skyboxes
Skywalker
-𝔰𝔩
slabcraft
Slaght
slideheading
@@ -4296,6 +4454,7 @@ smakar
smallcaps
SMARTPOSTER
smartquotes
+smashingmagazine
smbps
smcp
SMIL
@@ -4308,6 +4467,7 @@ Smus
Snackbars
snapport
snapshotted
+Snapshotting
snapsvg
SNES
snews
@@ -4351,6 +4511,7 @@ someroute
Somers
somescript
somesite
+somestate
somesystem
someusername
somevideo
@@ -4411,8 +4572,6 @@ spritesheets
sprop
sqlzoo
Sqrd
-𝚜𝚚𝚛𝚝
-𝚂𝚀𝚁𝚃
squarefree
squeezeend
squeezestart
@@ -4425,6 +4584,7 @@ sref
srflx
SRGB
srgba
+srihash
SRTP
sscanf
ssedemo
@@ -4432,6 +4592,7 @@ SSIDs
SSML
SSRC
ssthresh
+stackexchange
Stackoverflow
Stalybridge
Starcraft
@@ -4455,6 +4616,8 @@ steponup
STITCHTYPE
STIX
Storei
+Stormys
+Stratford
strawman
strcat
strcmp
@@ -4486,6 +4649,7 @@ studiorum
stunprotocol
stunserver
Stylable
+styleable
styleeditor
styleguide
stylemap
@@ -4508,12 +4672,15 @@ subexpression
subexpressions
subfeature
subfolders
+subformula
+subformulas
subframe
subframes
Subgrid
-subgridded
subgrid's
+subgridded
subgrids
+subheaders
Subinstruction
subkey
sublicensable
@@ -4531,7 +4698,10 @@ subpage
Subpages
subpanels
subpaths
+subpattern
subpatterns
+subpopover
+subproject
subprojects
subproperty
subrectangle
@@ -4542,6 +4712,8 @@ Subresource
subresources
subsampled
Subsampling
+Subsentence
+subsetting
substate
substeps
substr
@@ -4549,6 +4721,8 @@ substream
substreams
Subtag
Subtags
+subteam
+subteams
subtr
Subtractor
subvalue
@@ -4565,6 +4739,7 @@ sund
sundried
Sundström
sunhpark
+sunsetting
sunt
suntheme
Superc
@@ -4573,6 +4748,7 @@ superdomain
superfast
Supermedium
superscaling
+supersets
superspeed
supportedlocalesof
supportedvaluesof
@@ -4607,6 +4783,7 @@ svgz
svmax
svmin
Svpf
+swashoff
swashon
swimjiy
Swisswatch
@@ -4634,13 +4811,14 @@ takimata
takr
Takri
talu
+Tamaran
tamen
taml
tamldec
-𝚝𝚊𝚗𝚑
Tanx
targetable
TARGETDURATION
+targettable
taskattribution
taskbars
taskboard
@@ -4682,10 +4860,12 @@ textarget
textboxes
textcolor
textencoder
+textformatupdate
textnode
TEXTPATH
texttop
texttrack
+textupdate
TEXTUREI
tgfe
Thaana
@@ -4726,6 +4906,7 @@ timecodes
Timecount
timedelta
timefield
+timeframe
Timepicker
timerange
timeslice
@@ -4881,16 +5062,18 @@ truedoc
truetype
Trunc
Trustwave
+truthyness
trycatch
tsize
TSLÍ
-ˈtʃɑːli
TTFB
TTML
TTSI
+tunetheweb
turnpassword
turnserver
turpis
+tutsplus
tvkeys
tvremote
tweened
@@ -4955,6 +5138,8 @@ undecoded
undeletable
underflowing
underflows
+underliner
+underlyingly
underover
Underscript
Underscripts
@@ -5069,7 +5254,9 @@ urlscheme
urna
urpmi
Uruk
+usecase
usedtx
+useinbandfec
usepackage
useragentstring
userbase
@@ -5102,6 +5289,7 @@ vaii
validlink
Vallejoanderson
vals
+valuechange
valueof
Vanderheiden
Vandermonde
@@ -5151,6 +5339,7 @@ videooutput
videoplayer
vidi
Vieno
+viewbox
Viewmodel
Viewports
viewsource
@@ -5160,6 +5349,7 @@ VIRTUALENV
virtualenvs
VIRTUALENVWRAPPER
virtualizes
+virtualkeyboardpolicy
Virtuals
visibilitychange
visibilitystate
@@ -5256,14 +5446,19 @@ weakmap
weakset
Weathersby
weba
+webappmanifest
Webapps
webassembly
webaudio
webauthn
+webbundle
webcal
+webcodecs
Webcompat
webcomponents
webconsole
+webdav
+webdesignerdepot
Webdev
webdeveloper
webext
@@ -5280,6 +5475,7 @@ webglreport
webglsamples
webgpu
webhint
+webidentity
Webidl
webkitdirectory
webkitmouseforcechanged
@@ -5308,6 +5504,7 @@ webshell
Websniffer
Websockets
webspeech
+webtransport
Webvr
WEBVTT
webxr
@@ -5327,6 +5524,7 @@ WHATWG's
Whereami
wherearemyglasses
Whitenoise
+whitepoint
whitespaces
Whitlock
Whittaker
@@ -5349,6 +5547,7 @@ wireframed
wirelessly
Wireshark
Wirfs
+wisedog
Wisen
wisi
Wolenetz
@@ -5357,6 +5556,7 @@ Wordmark
wordmarks
wordprocessingml
workfile
+workgroups
Worklet
worklet's
Worklets
@@ -5371,6 +5571,7 @@ writability
writeln
WRITEMASK
writemasks
+writingsuggestions
wrnogly
Wrox
WSCTRL
@@ -5481,6 +5682,9 @@ Zehe
Zenevich
ZENKAKU
Zepto
+zeroblue
+zeroyellow
+zerozero
zfail
Zheng
zhuyin
@@ -5503,6 +5707,13 @@ Zstandard
zvon
ZWNBSP
ZWSP
+Áaron
+Émanuel
+Österreich
+ˈbraːˈvo
+ˈdeltɑ
+ˈtʃɑːli
+ˈælfa
ζήτα
θdeg
Θεϊκό
@@ -5546,13 +5757,13 @@ ZWSP
לדוגמא
עִבְרִית
أحلامك
-اَلأَعْشَى
الانتقال
التطبيق
العربية
الفقرة
اليسار
اليمين
+اَلأَعْشَى
باللغة
تحقيق
تطبيق
@@ -5562,4 +5773,27 @@ ZWSP
شسيبتنمك
طولا
مرحبا
+𝐜𝐨𝐬
+𝔰𝔩
+𝙻𝙽
+𝙻𝙾𝙶
+𝙼𝚊𝚝𝚑
+𝙿𝙸
+𝚂𝚀𝚁𝚃
+𝚊𝚌𝚘𝚜
+𝚊𝚌𝚘𝚜𝚑
+𝚊𝚜𝚒𝚗
+𝚊𝚜𝚒𝚗𝚑
+𝚊𝚝𝚊𝚗
+𝚊𝚝𝚊𝚗𝚑
+𝚌𝚋𝚛𝚝
+𝚌𝚘𝚜𝚑
+𝚎𝚡𝚙
+𝚎𝚡𝚙𝚖
+𝚑𝚢𝚙𝚘𝚝
+𝚕𝚘𝚐
+𝚙𝚘𝚠
+𝚜𝚒𝚗𝚑
+𝚜𝚚𝚛𝚝
+𝚝𝚊𝚗𝚑
𞤲𞥋𞤣𞤫
diff --git a/.vscode/terms-abbreviations.txt b/.vscode/terms-abbreviations.txt
index e297fc75815e594..917bcc4a462c317 100644
--- a/.vscode/terms-abbreviations.txt
+++ b/.vscode/terms-abbreviations.txt
@@ -2,10 +2,10 @@ affordance
affordances
APNG
Axess
-bézier
Bhattacharya
Brosset
Brotli
+bézier
callouts
Caniuse
cdylib
diff --git a/files/en-us/_redirects.txt b/files/en-us/_redirects.txt
index b587e9a63a476e3..55f23e627bf333c 100644
--- a/files/en-us/_redirects.txt
+++ b/files/en-us/_redirects.txt
@@ -8784,7 +8784,7 @@
/en-US/docs/Web/API/IdleDetector/onchange /en-US/docs/Web/API/IdleDetector/change_event
/en-US/docs/Web/API/IdleDetector/requestPermission /en-US/docs/Web/API/IdleDetector/requestPermission_static
/en-US/docs/Web/API/Image /en-US/docs/Web/API/HTMLImageElement/Image
-/en-US/docs/Web/API/ImageBitmapFactories/createImageBitmap /en-US/docs/Web/API/createImageBitmap
+/en-US/docs/Web/API/ImageBitmapFactories/createImageBitmap /en-US/docs/Web/API/Window/createImageBitmap
/en-US/docs/Web/API/ImageBitmapRenderingContext/transferImageBitmap /en-US/docs/Web/API/ImageBitmapRenderingContext/transferFromImageBitmap
/en-US/docs/Web/API/ImageData.ImageData /en-US/docs/Web/API/ImageData/ImageData
/en-US/docs/Web/API/ImageData.data /en-US/docs/Web/API/ImageData/data
@@ -10256,17 +10256,17 @@
/en-US/docs/Web/API/WindowOrWorkerGlobalScope/caches /en-US/docs/Web/API/Window/caches
/en-US/docs/Web/API/WindowOrWorkerGlobalScope/clearInterval /en-US/docs/Web/API/clearInterval
/en-US/docs/Web/API/WindowOrWorkerGlobalScope/clearTimeout /en-US/docs/Web/API/clearTimeout
-/en-US/docs/Web/API/WindowOrWorkerGlobalScope/createImageBitmap /en-US/docs/Web/API/createImageBitmap
+/en-US/docs/Web/API/WindowOrWorkerGlobalScope/createImageBitmap /en-US/docs/Web/API/Window/createImageBitmap
/en-US/docs/Web/API/WindowOrWorkerGlobalScope/crossOriginIsolated /en-US/docs/Web/API/Window/crossOriginIsolated
/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch /en-US/docs/Web/API/Window/fetch
/en-US/docs/Web/API/WindowOrWorkerGlobalScope/indexedDB /en-US/docs/Web/API/Window/indexedDB
/en-US/docs/Web/API/WindowOrWorkerGlobalScope/isSecureContext /en-US/docs/Web/API/Window/isSecureContext
/en-US/docs/Web/API/WindowOrWorkerGlobalScope/origin /en-US/docs/Web/API/Window/origin
-/en-US/docs/Web/API/WindowOrWorkerGlobalScope/queueMicrotask /en-US/docs/Web/API/queueMicrotask
+/en-US/docs/Web/API/WindowOrWorkerGlobalScope/queueMicrotask /en-US/docs/Web/API/Window/queueMicrotask
/en-US/docs/Web/API/WindowOrWorkerGlobalScope/rejectionhandled_event /en-US/docs/Web/API/Window/rejectionhandled_event
/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setInterval /en-US/docs/Web/API/setInterval
/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout /en-US/docs/Web/API/setTimeout
-/en-US/docs/Web/API/WindowOrWorkerGlobalScope/structuredClone /en-US/docs/Web/API/structuredClone
+/en-US/docs/Web/API/WindowOrWorkerGlobalScope/structuredClone /en-US/docs/Web/API/Window/structuredClone
/en-US/docs/Web/API/WindowOrWorkerGlobalScope/unhandledrejection_event /en-US/docs/Web/API/Window/unhandledrejection_event
/en-US/docs/Web/API/WindowSessionStorage /en-US/docs/Web/API/Window/sessionStorage
/en-US/docs/Web/API/WindowSessionStorage.sessionStorage /en-US/docs/Web/API/Window/sessionStorage
@@ -10439,6 +10439,7 @@
/en-US/docs/Web/API/console/timeStamp /en-US/docs/Web/API/console/timeStamp_static
/en-US/docs/Web/API/console/trace /en-US/docs/Web/API/console/trace_static
/en-US/docs/Web/API/console/warn /en-US/docs/Web/API/console/warn_static
+/en-US/docs/Web/API/createImageBitmap /en-US/docs/Web/API/Window/createImageBitmap
/en-US/docs/Web/API/crossOriginIsolated /en-US/docs/Web/API/Window/crossOriginIsolated
/en-US/docs/Web/API/crypto_property /en-US/docs/Web/API/Window/crypto
/en-US/docs/Web/API/document.URL /en-US/docs/Web/API/Document/URL
@@ -10709,6 +10710,7 @@
/en-US/docs/Web/API/onMSVideoOptimalLayoutChanged_ /en-US/docs/Web/API/HTMLVideoElement
/en-US/docs/Web/API/origin /en-US/docs/Web/API/Window/origin
/en-US/docs/Web/API/performance_property /en-US/docs/Web/API/Window/performance
+/en-US/docs/Web/API/queueMicrotask /en-US/docs/Web/API/Window/queueMicrotask
/en-US/docs/Web/API/range.cloneContents /en-US/docs/Web/API/range/cloneContents
/en-US/docs/Web/API/range.cloneRange /en-US/docs/Web/API/range/cloneRange
/en-US/docs/Web/API/range.collapse /en-US/docs/Web/API/range/collapse
@@ -10740,9 +10742,11 @@
/en-US/docs/Web/API/range.startOffset /en-US/docs/Web/API/range/startOffset
/en-US/docs/Web/API/range.surroundContents /en-US/docs/Web/API/range/surroundContents
/en-US/docs/Web/API/range.toString /en-US/docs/Web/API/range/toString
+/en-US/docs/Web/API/reportError /en-US/docs/Web/API/Window/reportError
/en-US/docs/Web/API/scheduler_property /en-US/docs/Web/API/Window/scheduler
/en-US/docs/Web/API/select.type /en-US/docs/Web/API/HTMLSelectElement/type
/en-US/docs/Web/API/sessionStorage /en-US/docs/Web/API/Window/sessionStorage
+/en-US/docs/Web/API/structuredClone /en-US/docs/Web/API/Window/structuredClone
/en-US/docs/Web/API/style.media /en-US/docs/Web/API/HTMLStyleElement/media
/en-US/docs/Web/API/style.type /en-US/docs/Web/API/HTMLStyleElement/type
/en-US/docs/Web/API/success /en-US/docs/Web/API/IDBRequest/success_event
diff --git a/files/en-us/_wikihistory.json b/files/en-us/_wikihistory.json
index 9d074f9ae90e53a..56fedd50797192d 100644
--- a/files/en-us/_wikihistory.json
+++ b/files/en-us/_wikihistory.json
@@ -66604,6 +66604,28 @@
"modified": "2020-10-15T22:16:13.286Z",
"contributors": ["mfuji09", "wbamberg"]
},
+ "Web/API/Window/createImageBitmap": {
+ "modified": "2020-10-15T21:37:56.407Z",
+ "contributors": [
+ "gmanpersona",
+ "mfluehr",
+ "styfle",
+ "fscholz",
+ "DomenicDenicola",
+ "Halfman",
+ "jaffathecake",
+ "jpmedley",
+ "Brettz9",
+ "MatthiasSaihttam",
+ "nmve",
+ "chrisdavidmills",
+ "yisibl",
+ "DrRataplan",
+ "zeird",
+ "Kaku",
+ "adria"
+ ]
+ },
"Web/API/Window/crossOriginIsolated": {
"modified": "2020-10-15T22:25:16.295Z",
"contributors": ["ExE-Boss", "chrisdavidmills"]
@@ -68208,6 +68230,16 @@
"JesseW"
]
},
+ "Web/API/Window/queueMicrotask": {
+ "modified": "2020-10-15T22:21:06.789Z",
+ "contributors": [
+ "Kaiido",
+ "chrisdavidmills",
+ "Sheppy",
+ "zbjornson",
+ "DomenicDenicola"
+ ]
+ },
"Web/API/Window/rejectionhandled_event": {
"modified": "2020-10-15T21:44:33.123Z",
"contributors": [
@@ -71496,38 +71528,6 @@
"myakura"
]
},
- "Web/API/createImageBitmap": {
- "modified": "2020-10-15T21:37:56.407Z",
- "contributors": [
- "gmanpersona",
- "mfluehr",
- "styfle",
- "fscholz",
- "DomenicDenicola",
- "Halfman",
- "jaffathecake",
- "jpmedley",
- "Brettz9",
- "MatthiasSaihttam",
- "nmve",
- "chrisdavidmills",
- "yisibl",
- "DrRataplan",
- "zeird",
- "Kaku",
- "adria"
- ]
- },
- "Web/API/queueMicrotask": {
- "modified": "2020-10-15T22:21:06.789Z",
- "contributors": [
- "Kaiido",
- "chrisdavidmills",
- "Sheppy",
- "zbjornson",
- "DomenicDenicola"
- ]
- },
"Web/API/setInterval": {
"modified": "2020-12-09T23:19:41.310Z",
"contributors": [
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/deep_copy/index.md b/files/en-us/glossary/deep_copy/index.md
index 297ea42bc2fdd67..49d900eb4bdfbee 100644
--- a/files/en-us/glossary/deep_copy/index.md
+++ b/files/en-us/glossary/deep_copy/index.md
@@ -48,10 +48,11 @@ console.log(ingredientsList[1].list);
However, while the object in the code above is simple enough to be {{Glossary("serialization", "serializable")}}, many JavaScript objects are not serializable at all — for example, [functions](/en-US/docs/Web/JavaScript/Guide/Functions) (with closures), [Symbols](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol), objects that represent HTML elements in the [HTML DOM API](/en-US/docs/Web/API/HTML_DOM_API), recursive data, and many other cases. Calling `JSON.stringify()` to serialize the objects in those cases will fail. So there's no way to make deep copies of such objects.
-The web API [`structuredClone()`](/en-US/docs/Web/API/structuredClone) also creates deep copies and has the advantage of allowing [transferable objects](/en-US/docs/Web/API/Web_Workers_API/Transferable_objects) in the source to be _transferred_ to the new copy, rather than just cloned. It also handles more data types, such as `Error`. But note that `structuredClone()` isn't a feature of the JavaScript language itself — instead it's a feature of browsers and other JavaScript hosts that implement web APIs. And calling `structuredClone()` to clone a non-serializable object will fail in the same way that calling `JSON.stringify()` to serialize it will fail.
+The web API {{DOMxRef("Window.structuredClone", "structuredClone()")}} also creates deep copies and has the advantage of allowing [transferable objects](/en-US/docs/Web/API/Web_Workers_API/Transferable_objects) in the source to be _transferred_ to the new copy, rather than just cloned. It also handles more data types, such as `Error`. But note that `structuredClone()` isn't a feature of the JavaScript language itself — instead it's a feature of browsers and other JavaScript hosts that implement web APIs. And calling `structuredClone()` to clone a non-serializable object will fail in the same way that calling `JSON.stringify()` to serialize it will fail.
## See also
- Related glossary terms:
- {{glossary("Shallow copy")}}
-- [`window.structuredClone()`](/en-US/docs/Web/API/structuredClone)
+- {{DOMxRef("Window.structuredClone()")}}
+- {{DOMxRef("WorkerGlobalScope.structuredClone()")}}
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/serializable_object/index.md b/files/en-us/glossary/serializable_object/index.md
index 40c3d9462839371..bfa77cce88e8ac7 100644
--- a/files/en-us/glossary/serializable_object/index.md
+++ b/files/en-us/glossary/serializable_object/index.md
@@ -7,7 +7,7 @@ page-type: glossary-definition
{{GlossarySidebar}}
**Serializable objects** are objects that can be serialized and later deserialized in any JavaScript environment ("realm").
-This allows them to, for example, be stored on disk and later restored, or cloned with {{domxref("structuredClone()")}}, or shared between workers using {{domxref("DedicatedWorkerGlobalScope.postMessage()")}}.
+This allows them to, for example, be stored on disk and later restored, or cloned with {{DOMxRef("Window.structuredClone", "structuredClone()")}}, or shared between workers using {{domxref("DedicatedWorkerGlobalScope.postMessage()")}}.
The serialization may not include all the properties and other aspects of the original object.
For example, a serialization of a {{domxref("DOMException")}} must include the `name` and `message` properties, but whether it includes other properties is implementation dependent.
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/organizing/index.md b/files/en-us/learn/css/building_blocks/organizing/index.md
index b6de822a7edd92c..0a33fddc876f462 100644
--- a/files/en-us/learn/css/building_blocks/organizing/index.md
+++ b/files/en-us/learn/css/building_blocks/organizing/index.md
@@ -332,7 +332,7 @@ Read more about this system [BEM 101](https://css-tricks.com/bem-101/) on CSS Tr
#### Other common systems
-There are a large number of these systems in use. Other popular approaches include [Scalable and Modular Architecture for CSS (SMACSS)](https://smacss.com/), created by Jonathan Snook, [ITCSS](https://itcss.io/) from Harry Roberts, and [Atomic CSS (ACSS)](https://acss.io/), originally created by Yahoo!. If you come across a project that uses one of these approaches, then the advantage is that you will be able to search and find many articles and guides to help you understand how to code in the same style.
+There are a large number of these systems in use. Other popular approaches include [Scalable and Modular Architecture for CSS (SMACSS)](https://smacss.com/), created by Jonathan Snook, [ITCSS](https://itcss.io/) from Harry Roberts, and [Atomizer CSS (ACSS)](https://acss-io.github.io/atomizer/), originally created by Yahoo!. If you come across a project that uses one of these approaches, then the advantage is that you will be able to search and find many articles and guides to help you understand how to code in the same style.
The disadvantage of using such a system is that they can seem overly complex, especially for smaller projects.
diff --git a/files/en-us/learn/css/css_layout/practical_positioning_examples/index.md b/files/en-us/learn/css/css_layout/practical_positioning_examples/index.md
index 9763fb5e047c8bf..cae4a47972d6ec8 100644
--- a/files/en-us/learn/css/css_layout/practical_positioning_examples/index.md
+++ b/files/en-us/learn/css/css_layout/practical_positioning_examples/index.md
@@ -258,7 +258,7 @@ In our second example, we will take our first example — our info-box — and a
> [!NOTE]
> You can see the finished example running live at [fixed-info-box.html](https://mdn.github.io/learning-area/css/css-layout/practical-positioning-examples/fixed-info-box.html) ([source code](https://github.com/mdn/learning-area/blob/main/css/css-layout/practical-positioning-examples/fixed-info-box.html)). Check it out to get an idea of what you will be building in this section of the article.
-As a starting point, you can use your completed example from the first section of the article, or make a local copy of [info-box.html](https://github.com/mdn/learning-area/blob/main/css/css-layout/practical-positioning-examples/info-box.html) from our GitHub repo.
+As a starting point, you can use your completed example from the first section of the article, or make a local copy of [tabbed-info-box.html](https://github.com/mdn/learning-area/blob/main/css/css-layout/practical-positioning-examples/tabbed-info-box.html) from our GitHub repo.
### HTML additions
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/css/styling_text/web_fonts/index.md b/files/en-us/learn/css/styling_text/web_fonts/index.md
index 67746b51cf8c4e0..3da26ecf79b015b 100644
--- a/files/en-us/learn/css/styling_text/web_fonts/index.md
+++ b/files/en-us/learn/css/styling_text/web_fonts/index.md
@@ -119,7 +119,7 @@ Web services for font generation typically limit file sizes. In such a case, con
1. [sfnt2woff-zopfli](https://github.com/bramstein/sfnt2woff-zopfli) for converting ttf to woff
2. [fontforge](https://fontforge.org/) for converting from ttf to svg
-3. [batik ttf2svg](https://people.apache.org/~clay/batik/ttf2svg.html) for converting from ttf to svg
+3. [batik ttf2svg](https://xmlgraphics.apache.org/batik/tools/font-converter.html) for converting from ttf to svg
4. [woff2](https://github.com/google/woff2) for converting from ttf to woff2
### Implementing the code in your demo
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 e6a3a0534b78dca..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.
+- **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..5bf53da692ce1f1 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/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/javascript/index.md b/files/en-us/learn/performance/javascript/index.md
index 7edc89f049d1172..c28c3e747f30bf3 100644
--- a/files/en-us/learn/performance/javascript/index.md
+++ b/files/en-us/learn/performance/javascript/index.md
@@ -208,30 +208,22 @@ async function main() {
}
```
-To improve this further, we can use {{domxref("Scheduling.isInputPending", "navigator.scheduling.isInputPending()")}} to run the `yield()` function only when the user is attempting to interact with the page:
+To improve this further, we can use {{domxref("Scheduler.yield")}} where available to allow this code to continue executing ahead of other less critical tasks in the queue:
```js
-async function main() {
- // Create an array of functions to run
- const tasks = [a, b, c, d, e];
-
- while (tasks.length > 0) {
- // Yield to a pending user input
- if (navigator.scheduling.isInputPending()) {
- await yield();
- } else {
- // Shift the first task off the tasks array
- const task = tasks.shift();
-
- // Run the task
- task();
- }
+function yield() {
+ // Use scheduler.yield() if available
+ if ("scheduler" in window && "yield" in scheduler) {
+ return scheduler.yield();
}
+
+ // Fall back to setTimeout:
+ return new Promise((resolve) => {
+ setTimeout(resolve, 0);
+ });
}
```
-This allows you to avoid blocking the main thread when the user is actively interacting with the page, potentially providing a smoother user experience. However, by only yielding when necessary, we can continue running the current task when there are no user inputs to process. This also avoids tasks being placed at the back of the queue behind other non-essential browser-initiated tasks that were scheduled after the current one.
-
## Handling JavaScript animations
Animations can improve perceived performance, making interfaces feel snappier and making users feel like progress is being made when they are waiting for a page to load (loading spinners, for example). However, larger animations and a higher number of animations will naturally require more processing power to handle, which can degrade performance.
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/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/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/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/community/issues/index.md b/files/en-us/mdn/community/issues/index.md
index ffb7de143ad1e3f..5316815665c88df 100644
--- a/files/en-us/mdn/community/issues/index.md
+++ b/files/en-us/mdn/community/issues/index.md
@@ -103,7 +103,7 @@ These are the general steps for working on an issue:
> [!NOTE]
> An issue with the `needs triage` label indicates that the MDN Web Docs core team has not reviewed the issue yet, and you shouldn't begin work on it.
-2. **Assign the issue to yourself:** After finding an issue you'd like to work on, make sure that the issue is not assigned to anybody else. Add a comment saying you would like to work on the issue, and if you are able to, [assign the issue to yourself](https://docs.github.com/en/issues/tracking-your-work-with-issues/assigning-issues-and-pull-requests-to-other-github-users#assigning-an-individual-issue-or-pull-request).
+2. **Assign the issue to yourself:** After finding an issue you'd like to work on, make sure that the issue is not assigned to anybody else. Add a comment saying you would like to work on the issue, and if you are able to, [assign the issue to yourself](https://docs.github.com/en/issues/tracking-your-work-with-issues/using-issues/assigning-issues-and-pull-requests-to-other-github-users#assigning-an-individual-issue-or-pull-request).
3. **Do the research:** Most issues need some investigation before work can start.
@@ -111,7 +111,7 @@ These are the general steps for working on an issue:
- If the issue is well-described, and the work is pretty obvious, go ahead and do it.
- If the issue is not well-described, and/or you are not sure what is needed, feel free to @mention the poster and ask for more information.
-4. **Make the changes:** Fork and branch the repository. Do your work and open a [pull request](/en-US/docs/MDN/Community/Pull_requests) in the repository. [Reference the issue](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue) in the pull request description. Depending on the files you've updated in the pull request, a reviewer will be assigned to your pull request automatically. (Teams per topic area are defined in the [CODEOWNERS](https://github.com/mdn/content/blob/main/.github/CODEOWNERS) file).
+4. **Make the changes:** Fork and branch the repository. Do your work and open a [pull request](/en-US/docs/MDN/Community/Pull_requests) in the repository. [Reference the issue](https://docs.github.com/en/issues/tracking-your-work-with-issues/using-issues/linking-a-pull-request-to-an-issue) in the pull request description. Depending on the files you've updated in the pull request, a reviewer will be assigned to your pull request automatically. (Teams per topic area are defined in the [CODEOWNERS](https://github.com/mdn/content/blob/main/.github/CODEOWNERS) file).
After opening the pull request, if you find you no longer have the time to make changes or incorporate review feedback, let the team know as soon as possible in a comment in the pull request. This will help the team assign another interested contributor to complete the work on the pull request and close the linked issue.
diff --git a/files/en-us/mdn/community/pull_requests/index.md b/files/en-us/mdn/community/pull_requests/index.md
index 05761cfa36c65ac..bc75f4ffe3626e7 100644
--- a/files/en-us/mdn/community/pull_requests/index.md
+++ b/files/en-us/mdn/community/pull_requests/index.md
@@ -62,7 +62,7 @@ When you're ready to open a pull request, follow these guidelines:
If a pull request becomes too large, the reviewer may close it and ask that you to submit pull requests for each logical set of changes that belong together.
- **Add a description of the changes:** Provide as much context and rationale for the pull request as possible.
- **Add the link to the issue you are closing:** In the pull request description, add 'Fixes' if it fully resolves the issue or 'Relates to' if it is a related issue.
- More information about linking to issues in pull requests can be found in [GitHub docs](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword).
+ More information about linking to issues in pull requests can be found in [GitHub docs](https://docs.github.com/en/issues/tracking-your-work-with-issues/using-issues/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword).
- **Add 'depends on'** with a link to a dependency if there are pull requests that must be merged first (e.g., code examples in other repositories).
- **Accompany code example changes with content changes:** This is important to ensure that updated examples are served correctly.
If you're making content changes that affect how examples are used, the related code examples should also be updated.
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/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/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/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/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/webnavigation/index.md b/files/en-us/mozilla/add-ons/webextensions/api/webnavigation/index.md
index ef40b20e525dc55..39749671dba3630 100644
--- a/files/en-us/mozilla/add-ons/webextensions/api/webnavigation/index.md
+++ b/files/en-us/mozilla/add-ons/webextensions/api/webnavigation/index.md
@@ -25,8 +25,8 @@ Each event corresponds to a particular stage in the navigation. The sequence of
- Additionally:
- `{{WebExtAPIRef("webNavigation.onCreatedNavigationTarget", "onCreatedNavigationTarget")}}` is fired before `onBeforeNavigate` if the browser needed to create a new tab or window for the navigation (for example, because the user opened a link in a new tab).
- - {{WebExtAPIRef("webNavigation.onHistoryStateUpdated", "onHistoryStateUpdated")}} is fired if a page uses the [history API (2011)](http://diveintohtml5.info/history.html) to update the URL displayed in the browser's location bar.
- - {{WebExtAPIRef("webNavigation.onReferenceFragmentUpdated", "onReferenceFragmentUpdated")}} is fired if the [fragment identifier](https://en.wikipedia.org/wiki/Fragment_identifier) for a page is changed.
+ - {{WebExtAPIRef("webNavigation.onHistoryStateUpdated", "onHistoryStateUpdated")}} is fired if a page uses the [history API](/en-US/docs/Web/API/History_API) to update the URL displayed in the browser's location bar.
+ - {{WebExtAPIRef("webNavigation.onReferenceFragmentUpdated", "onReferenceFragmentUpdated")}} is fired if the [fragment identifier](/en-US/docs/Web/URI/Fragment) for a page is changed.
- {{WebExtAPIRef("webNavigation.onErrorOccurred", "onErrorOccurred")}} can be fired at any point.
Each navigation is a URL transition in a particular browser frame. The browser frame is identified by a tab ID and a frame ID. The frame may be the top-level browsing context in the tab, or may be a nested browsing context implemented as an [iframe](/en-US/docs/Web/HTML/Element/iframe).
@@ -70,7 +70,7 @@ To use this API you need to have the "webNavigation" [permission](/en-US/docs/Mo
- {{WebExtAPIRef("webNavigation.onTabReplaced")}}
- : Fired when the contents of the tab is replaced by a different (usually previously pre-rendered) tab.
- {{WebExtAPIRef("webNavigation.onHistoryStateUpdated")}}
- - : Fired when the page used the [history API (2011)](http://diveintohtml5.info/history.html) to update the URL displayed in the browser's location bar.
+ - : Fired when the page used the [history API (2011)](/en-US/docs/Web/API/History_API) to update the URL displayed in the browser's location bar.
## Browser compatibility
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/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/omnibox/index.md b/files/en-us/mozilla/add-ons/webextensions/user_interface/omnibox/index.md
index 42247387afacd40..31c1a2708d6b5ed 100644
--- a/files/en-us/mozilla/add-ons/webextensions/user_interface/omnibox/index.md
+++ b/files/en-us/mozilla/add-ons/webextensions/user_interface/omnibox/index.md
@@ -29,7 +29,7 @@ browser.omnibox.setDefaultSuggestion({
});
```
-You can then add the code to provide the customized content by listening for {{WebExtAPIRef("omnibox.onInputStarted")}}, which is dispatched when the user has typed the keyword and a space, and {{WebExtAPIRef("omnibox.onInputChanged")}}, which is dispatched whenever the user updates the address bar entry. You can then populate the suggestions, in this case building a [search of mozilla-central](https://searchfox.org/mozilla-central) using the term entered by the user:
+You can then add the code to provide the customized content by listening for {{WebExtAPIRef("omnibox.onInputStarted")}}, which is dispatched when the user has typed the keyword and a space, and {{WebExtAPIRef("omnibox.onInputChanged")}}, which is dispatched whenever the user updates the address bar entry. You can then populate the suggestions, in this case building a [search of mozilla-central](https://searchfox.org/mozilla-central/search) using the term entered by the user:
```js
browser.omnibox.onInputChanged.addListener((text, addSuggestions) => {
diff --git a/files/en-us/mozilla/firefox/releases/101/index.md b/files/en-us/mozilla/firefox/releases/101/index.md
index fbed28675c020b3..6966fcd2e3d397a 100644
--- a/files/en-us/mozilla/firefox/releases/101/index.md
+++ b/files/en-us/mozilla/firefox/releases/101/index.md
@@ -35,7 +35,7 @@ No notable changes.
- [`HTMLInputElement.showPicker()`](/en-US/docs/Web/API/HTMLInputElement/showPicker) is now supported, allowing the picker for an input element to be displayed when a user interacts with some other element, such as a button ([Firefox bug 1745005](https://bugzil.la/1745005)).
-- [`DOMException`](/en-US/docs/Web/API/DOMException) is now a {{Glossary("serializable object")}}, so it can be cloned with {{domxref("structuredClone()")}} or copied between [workers](/en-US/docs/Web/API/Worker) using {{domxref("Worker.postMessage()", "postMessage()")}} ([Firefox bug 1561357](https://bugzil.la/1561357)).
+- [`DOMException`](/en-US/docs/Web/API/DOMException) is now a {{Glossary("serializable object")}}, so it can be cloned with {{DOMxRef("Window.structuredClone", "structuredClone()")}} or copied between [workers](/en-US/docs/Web/API/Worker) using {{domxref("Worker.postMessage()", "postMessage()")}} ([Firefox bug 1561357](https://bugzil.la/1561357)).
- _Constructable stylesheets_ are now supported, making it much easier to create reusable stylesheets for use with [Shadow DOM](/en-US/docs/Web/API/Web_components/Using_shadow_DOM).
The update includes the addition of a [`CSSStyleSheet()` constructor](/en-US/docs/Web/API/CSSStyleSheet/CSSStyleSheet) for creating new stylesheets, the {{domxref("CSSStyleSheet.replace()")}} and {{domxref("CSSStyleSheet.replaceSync()")}} methods that can be used to add/replace CSS rules in the sheet, and the [`Document.adoptedStyleSheets`](/en-US/docs/Web/API/Document/adoptedStyleSheets) and [`ShadowRoot.adoptedStyleSheets`](/en-US/docs/Web/API/ShadowRoot/adoptedStyleSheets) properties that are used to share sheets to a document and its shadow DOM subtrees.
diff --git a/files/en-us/mozilla/firefox/releases/103/index.md b/files/en-us/mozilla/firefox/releases/103/index.md
index 2a8ff2cad8e94fc..a75f9851ba6035b 100644
--- a/files/en-us/mozilla/firefox/releases/103/index.md
+++ b/files/en-us/mozilla/firefox/releases/103/index.md
@@ -40,7 +40,7 @@ This article provides information about the changes in Firefox 103 that will aff
### APIs
-- [`ReadableStream`](/en-US/docs/Web/API/ReadableStream), [`WritableStream`](/en-US/docs/Web/API/WritableStream), [`TransformStream`](/en-US/docs/Web/API/TransformStream) are now [Transferable objects](/en-US/docs/Web/API/Web_Workers_API/Transferable_objects), which means that ownership can be transferred when sharing the objects between a window and workers using `postMessage`, or when using [`structuredClone()`](/en-US/docs/Web/API/structuredClone) to copy an object.
+- [`ReadableStream`](/en-US/docs/Web/API/ReadableStream), [`WritableStream`](/en-US/docs/Web/API/WritableStream), [`TransformStream`](/en-US/docs/Web/API/TransformStream) are now [Transferable objects](/en-US/docs/Web/API/Web_Workers_API/Transferable_objects), which means that ownership can be transferred when sharing the objects between a window and workers using `postMessage`, or when using {{DOMxRef("Window.structuredClone", "structuredClone()")}} to copy an object.
After transferring, the original object cannot be used.
See [Firefox bug 1659025](https://bugzil.la/1659025) for more details.
diff --git a/files/en-us/mozilla/firefox/releases/104/index.md b/files/en-us/mozilla/firefox/releases/104/index.md
index 3f1b6a1b2af46b0..e9883da70ff6a27 100644
--- a/files/en-us/mozilla/firefox/releases/104/index.md
+++ b/files/en-us/mozilla/firefox/releases/104/index.md
@@ -24,7 +24,7 @@ No notable changes.
These are used to find the value and index (respectively) of the last element in an {{jsxref("Array")}} or {{jsxref("TypedArray")}} that matches a supplied test function.
(See [Firefox bug 1775026](https://bugzil.la/1775026) for more details.)
-- Serialization of [native Error types](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#error_types) additionally includes the [`stack`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/stack) property when used with [`window.postMessage()`](/en-US/docs/Web/API/Window/postMessage) and [`structuredClone()`](/en-US/docs/Web/API/structuredClone) (on error types that include `stack`).
+- Serialization of [native Error types](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#error_types) additionally includes the [`stack`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/stack) property when used with [`window.postMessage()`](/en-US/docs/Web/API/Window/postMessage) and {{DOMxRef("Window.structuredClone", "structuredClone()")}} (on error types that include `stack`).
The `stack` is not yet serialized when errors are sent using other APIs, such as [`Worker.postMessage()`](/en-US/docs/Web/API/Worker/postMessage)
(See [Firefox bug 1774866](https://bugzil.la/1774866) for more details.)
diff --git a/files/en-us/mozilla/firefox/releases/110/index.md b/files/en-us/mozilla/firefox/releases/110/index.md
index e381f337b4984b6..accda8ca173e481 100644
--- a/files/en-us/mozilla/firefox/releases/110/index.md
+++ b/files/en-us/mozilla/firefox/releases/110/index.md
@@ -24,7 +24,7 @@ No notable changes.
### JavaScript
-- Serialization of [native Error types](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#error_types) now includes the [`stack`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/stack) property in workers when using [`Worker.postMessage()`](/en-US/docs/Web/API/Worker/postMessage) and [`structuredClone()`](/en-US/docs/Web/API/structuredClone).
+- Serialization of [native Error types](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#error_types) now includes the [`stack`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/stack) property in workers when using [`Worker.postMessage()`](/en-US/docs/Web/API/Worker/postMessage) and {{DOMxRef("Window.structuredClone", "structuredClone()")}}.
With this addition, cloning native error stacks now works for all methods that use the [structured clone algorithm](/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm), in both the main thread and workers.
(See [Firefox bug 1774866](https://bugzil.la/1774866) for more details.)
diff --git a/files/en-us/mozilla/firefox/releases/111/index.md b/files/en-us/mozilla/firefox/releases/111/index.md
index cd0524c7cfdb7fd..6d6c889946af47e 100644
--- a/files/en-us/mozilla/firefox/releases/111/index.md
+++ b/files/en-us/mozilla/firefox/releases/111/index.md
@@ -43,7 +43,7 @@ No notable changes.
See [Firefox bug 1785123](https://bugzil.la/1785123) for more details.
- The HTTP [`Authorization`](/en-US/docs/Web/HTTP/Headers/Authorization) header is removed from [`fetch()`](/en-US/docs/Web/API/Window/fetch) and [`XMLHttpRequest`](/en-US/docs/Web/API/XMLHttpRequest) requests that are redirected cross-origin (`fetch()` headers may be added by developers using the [`option.headers`](/en-US/docs/Web/API/Window/fetch#headers) argument).
See [Firefox bug 1802086](https://bugzil.la/1802086) for more details.
-- The `none` value of the `options.imageOrientation` parameter passed to [`createImageBitmap()`](/en-US/docs/Web/API/createImageBitmap) has been renamed to [`from-image`](/en-US/docs/Web/API/createImageBitmap#from-image).
+- The `none` value of the `options.imageOrientation` parameter passed to {{domxref("Window.createImageBitmap()")}} and {{domxref("WorkerGlobalScope.createImageBitmap()")}} has been renamed to `from-image`.
This is to better match the meaning of the equivalent CSS [`image-orientation`](/en-US/docs/Web/CSS/image-orientation) property. ([Firefox bug 1809740](https://bugzil.la/1809740)).
#### DOM
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/131/index.md b/files/en-us/mozilla/firefox/releases/131/index.md
index e026d9cedecf147..c23251a517b2c77 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,7 @@ 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)).
@@ -45,6 +49,7 @@ This article provides information about the changes in Firefox 131 that affect d
- 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
@@ -60,12 +65,22 @@ This article provides information about the changes in Firefox 131 that affect d
#### General
+- For both WebDriver Classic and BiDi the `keyUp` and `keyDown` actions will no longer accept multiple characters for the `value` ([Firefox bug 1910352](https://bugzil.la/1910352)).
+
#### WebDriver BiDi
-#### Marionette
+- Added support for remaining arguments of `network.continueResponse` command:
+ - The cookies and headers arguments ([Firefox bug 1853887](https://bugzil.la/1853887)).
+ - The `statusCode` (e.g., 200, 304) and `reasonPhrase` (e.g., "OK", "Not modified") arguments ([Firefox bug 1913737](https://bugzil.la/1913737)).
+- The `browsingContext.navigate` command will now return if the `wait` argument is `none` and a beforeunload prompt is triggered ([Firefox bug 1763134](https://bugzil.la/1763134)).
+- The `browsingContext.navigate` command will return an `unknown error` in all cases where a navigation failure occurs, as required by the specification ([Firefox bug 1905083](https://bugzil.la/1905083)).
+- The `session.new` command will no longer include the `unhandledPromptBehavior` capability in its response if it was not specified by the client as an argument ([Firefox bug 1909455](https://bugzil.la/1909455)).
## 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
diff --git a/files/en-us/mozilla/firefox/releases/42/index.md b/files/en-us/mozilla/firefox/releases/42/index.md
index 90437e362e37fc3..459f5db89fc8346 100644
--- a/files/en-us/mozilla/firefox/releases/42/index.md
+++ b/files/en-us/mozilla/firefox/releases/42/index.md
@@ -91,7 +91,7 @@ Our experimental implementation of the [Shadow DOM](/en-US/docs/Web/API/Web_comp
#### New APIs
-- The {{domxref("ImageBitmap")}} interface and the {{domxref("createImageBitmap()")}} method have been implemented. They are available on regular window scripts and in Web workers and allow efficient posting of images between window and worker contexts ([Firefox bug 1044102](https://bugzil.la/1044102)).
+- The {{domxref("ImageBitmap")}} interface, the {{domxref("Window.createImageBitmap()")}} and {{domxref("WorkerGlobalScope.createImageBitmap()")}} method have been implemented. They are available on regular window scripts and in Web workers and allow efficient posting of images between window and worker contexts ([Firefox bug 1044102](https://bugzil.la/1044102)).
#### Miscellaneous
diff --git a/files/en-us/mozilla/firefox/releases/65/index.md b/files/en-us/mozilla/firefox/releases/65/index.md
index 2a5aff63e9b50b5..47063d4a3ef0e4b 100644
--- a/files/en-us/mozilla/firefox/releases/65/index.md
+++ b/files/en-us/mozilla/firefox/releases/65/index.md
@@ -93,7 +93,7 @@ _No changes._
- {{domxref("Performance.toJSON()")}} has been exposed to {{domxref("Web_Workers_API", "Web Workers", "", "1")}} ([Firefox bug 1504958](https://bugzil.la/1504958)).
- {{domxref("XMLHttpRequest")}} requests will now throw a `NetworkError` if the requested content type is a `Blob`, and the request method is not `GET` ([Firefox bug 1502599](https://bugzil.la/1502599)).
- The `-moz-` prefixed versions of many of the {{domxref("Fullscreen API", "", "", "1")}} features have been deprecated, and will now display deprecation warnings in the JavaScript console when encountered ([Firefox bug 1504946](https://bugzil.la/1504946)).
-- {{domxref("createImageBitmap()")}} now supports SVG images ({{domxref("SVGImageElement")}}) as an image source ([Firefox bug 1500768](https://bugzil.la/1500768)).
+- {{domxref("Window.createImageBitmap()")}} and {{domxref("WorkerGlobalScope.createImageBitmap()")}} now supports SVG images ({{domxref("SVGImageElement")}}) as an image source ([Firefox bug 1500768](https://bugzil.la/1500768)).
#### DOM events
diff --git a/files/en-us/mozilla/firefox/releases/69/index.md b/files/en-us/mozilla/firefox/releases/69/index.md
index 59e9a47290996b4..ff62c309f20365a 100644
--- a/files/en-us/mozilla/firefox/releases/69/index.md
+++ b/files/en-us/mozilla/firefox/releases/69/index.md
@@ -84,7 +84,7 @@ This article provides information about the changes in Firefox 69 that will affe
#### New APIs
- The [Resize Observer API](/en-US/docs/Web/API/Resize_Observer_API) is supported by default ([Firefox bug 1543839](https://bugzil.la/1543839)).
-- The Microtask API ({{domxref("queueMicrotask()")}}) has been implemented ([Firefox bug 1480236](https://bugzil.la/1480236)).
+- The Microtask API ({{domxref("Window.queueMicrotask()")}} and {{domxref("WorkerGlobalScope.queueMicrotask()")}}) has been implemented ([Firefox bug 1480236](https://bugzil.la/1480236)).
#### DOM
diff --git a/files/en-us/mozilla/firefox/releases/93/index.md b/files/en-us/mozilla/firefox/releases/93/index.md
index f06225ecb7b7ce9..ea0031e358ae38b 100644
--- a/files/en-us/mozilla/firefox/releases/93/index.md
+++ b/files/en-us/mozilla/firefox/releases/93/index.md
@@ -25,7 +25,7 @@ This article provides information about the changes in Firefox 93 that will affe
### JavaScript
- [Class `static` initialization blocks](/en-US/docs/Web/JavaScript/Reference/Classes/Static_initialization_blocks) are now supported, allowing more flexible initialization of {{jsxref("Classes/static", "static")}} properties ([Firefox bug 1725689](https://bugzil.la/1725689)).
-- The properties `imageOrientation` and `premultiplyAlpha` can be passed to the method {{domxref("createImageBitmap()")}} using the `options` object ([Firefox bug 1367251](https://bugzil.la/1367251)).
+- The properties `imageOrientation` and `premultiplyAlpha` can be passed to the method {{domxref("Window.createImageBitmap()")}} and {{domxref("WorkerGlobalScope.createImageBitmap()")}} using the `options` object ([Firefox bug 1367251](https://bugzil.la/1367251)).
- {{jsxref("Intl.supportedValuesOf()")}} is now supported, allowing code to enumerate values supported by an implementation, This might be used, for example, to download a polyfill for just the missing category of values ([Firefox bug 1670033](https://bugzil.la/1670033)).
### HTTP
@@ -37,7 +37,7 @@ This article provides information about the changes in Firefox 93 that will affe
- {{domxref("ElementInternals.shadowRoot")}} and {{domxref("HTMLElement.attachInternals")}} are now supported ([Firefox bug 1723521](https://bugzil.la/1723521)).
- The value `device-pixel-content-box` is now supported for {{domxref("ResizeObserver.Observe()")}} ([Firefox bug 1587973](https://bugzil.la/1587973)).
-- The {{domxref("reportError()")}} global function is now supported, allowing scripts to report errors to the console or global event handlers, emulating an uncaught JavaScript exception ([Firefox bug 1722448](https://bugzil.la/1722448)).
+- The {{domxref("Window.reportError()")}} and {{domxref("WorkerGlobalScope.reportError()")}} is now supported, allowing scripts to report errors to the console or global event handlers, emulating an uncaught JavaScript exception ([Firefox bug 1722448](https://bugzil.la/1722448)).
#### Events
diff --git a/files/en-us/mozilla/firefox/releases/94/index.md b/files/en-us/mozilla/firefox/releases/94/index.md
index 5672bb2fadb00d0..77ba25650309641 100644
--- a/files/en-us/mozilla/firefox/releases/94/index.md
+++ b/files/en-us/mozilla/firefox/releases/94/index.md
@@ -24,7 +24,7 @@ No notable changes
### APIs
-- The {{domxref("structuredClone()")}} global function is now supported for copying complex JavaScript objects ([Firefox bug 1722576](https://bugzil.la/1722576)).
+- The {{DOMxRef("Window.structuredClone()")}} and {{DOMxRef("WorkerGlobalScope.structuredClone()")}} function is now supported for copying complex JavaScript objects ([Firefox bug 1722576](https://bugzil.la/1722576)).
#### DOM
diff --git a/files/en-us/mozilla/firefox/releases/98/index.md b/files/en-us/mozilla/firefox/releases/98/index.md
index 66684cff8d807a9..3f98fff0678b7f9 100644
--- a/files/en-us/mozilla/firefox/releases/98/index.md
+++ b/files/en-us/mozilla/firefox/releases/98/index.md
@@ -29,7 +29,7 @@ No notable changes
#### DOM
- {{domxref("HTMLElement.outerText")}} is now supported ([Firefox bug 1709790](https://bugzil.la/1709790)).
-- The properties `colorSpaceConversion`, `resizeWidth` and `resizeHeight` can be passed to the method {{domxref("createImageBitmap()")}} using the `options` object ([Firefox bug 1748868](https://bugzil.la/1748868) and [Firefox bug 1733559](https://bugzil.la/1733559)).
+- The properties `colorSpaceConversion`, `resizeWidth` and `resizeHeight` can be passed to the method {{domxref("Window.createImageBitmap()")}} and {{domxref("WorkerGlobalScope.createImageBitmap()")}} using the `options` object ([Firefox bug 1748868](https://bugzil.la/1748868) and [Firefox bug 1733559](https://bugzil.la/1733559)).
#### Removals
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/abortsignal/timeout_static/index.md b/files/en-us/web/api/abortsignal/timeout_static/index.md
index ed71f07b3e5c61a..43fefb813faa3f6 100644
--- a/files/en-us/web/api/abortsignal/timeout_static/index.md
+++ b/files/en-us/web/api/abortsignal/timeout_static/index.md
@@ -27,6 +27,7 @@ AbortSignal.timeout(time)
- `time`
- : The "active" time in milliseconds before the returned {{domxref("AbortSignal")}} will abort.
+ The value must be within range of 0 and {{jsxref("Number.MAX_SAFE_INTEGER")}}.
### Return value
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/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/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 dd80a8d6f92fcc5..eaff819b0a74b6c 100644
--- a/files/en-us/web/api/closeevent/code/index.md
+++ b/files/en-us/web/api/closeevent/code/index.md
@@ -6,7 +6,7 @@ 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 connection was closed.
diff --git a/files/en-us/web/api/closeevent/index.md b/files/en-us/web/api/closeevent/index.md
index 2800eb565cadec7..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.
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..121ebc7472b9082 100644
--- a/files/en-us/web/api/console/index.md
+++ b/files/en-us/web/api/console/index.md
@@ -112,7 +112,7 @@ If you are going to mutate your object and you want to prevent the logged inform
console.log(JSON.parse(JSON.stringify(obj)));
```
-There are other alternatives that work in browsers, such as [`structuredClone()`](/en-US/docs/Web/API/structuredClone), which are more effective at cloning different types of objects.
+There are other alternatives that work in browsers, such as {{DOMxRef("Window.structuredClone", "structuredClone()")}}, which are more effective at cloning different types of objects.
#### Outputting multiple objects
@@ -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
+
+
+