diff --git a/.github/ISSUE_TEMPLATE/content-bug.yml b/.github/ISSUE_TEMPLATE/content-bug.yml
index 6a18dc073dc4cde..2bad4412c180fe1 100644
--- a/.github/ISSUE_TEMPLATE/content-bug.yml
+++ b/.github/ISSUE_TEMPLATE/content-bug.yml
@@ -8,7 +8,7 @@ body:
### Before you start
**Want to change a page yourself?** This content is open source!
- ↩ Look for the _Edit on GitHub_ link on any MDN page.
+ ↩ Look for the _View this page on GitHub_ link on any MDN page to edit the content on GitHub.com afterwards.
**Is your issue about a browser compatibility table?**
↩ Use the _Report problems with this compatibility data on GitHub_ link next to a compatibility table.
diff --git a/.github/ISSUE_TEMPLATE/page-report.yml b/.github/ISSUE_TEMPLATE/page-report.yml
index c1260f59928bfda..a3bf5b8519c90e3 100644
--- a/.github/ISSUE_TEMPLATE/page-report.yml
+++ b/.github/ISSUE_TEMPLATE/page-report.yml
@@ -8,7 +8,7 @@ body:
### Before you start
**Want to change this page yourself?** This content is open source!
- ↩ Go back and use the _Edit on GitHub_ link on the page.
+ ↩ Go back and use the _View this page on GitHub_ link on the page to edit the content on GitHub.com afterwards.
**Is your issue about the browser compatibility table?**
↩ Go back and use the _Report problems with this compatibility data on GitHub_ link on the page.
diff --git a/files/en-us/_redirects.txt b/files/en-us/_redirects.txt
index cf6ea6df153ca55..a5545b4e1cc5251 100644
--- a/files/en-us/_redirects.txt
+++ b/files/en-us/_redirects.txt
@@ -10118,6 +10118,7 @@
/en-US/docs/Web/API/Web_Audio_API/Migrating_from_webkitAudioContext /en-US/docs/Web/API/Web_Audio_API
/en-US/docs/Web/API/Web_Audio_API/Porting_webkitAudioContext_code_to_standards_based_AudioContext /en-US/docs/Web/API/Web_Audio_API
/en-US/docs/Web/API/Web_Audio_API/Targeting /en-US/docs/Web/API/WebXR_Device_API/Targeting
+/en-US/docs/Web/API/Web_Audio_API/Tools /en-US/docs/Web/API/Web_Audio_API
/en-US/docs/Web/API/Web_Audio_API/Web_audio_spatialisation_basics /en-US/docs/Web/API/Web_Audio_API/Web_audio_spatialization_basics
/en-US/docs/Web/API/Web_Audio_API/ended_event /en-US/docs/Web/API/AudioScheduledSourceNode/ended_event
/en-US/docs/Web/API/Web_Crypto_API/Supported_algorithms /en-US/docs/Web/API/SubtleCrypto
diff --git a/files/en-us/_wikihistory.json b/files/en-us/_wikihistory.json
index 1d7a283be7aa228..62927eab5bedeb1 100644
--- a/files/en-us/_wikihistory.json
+++ b/files/en-us/_wikihistory.json
@@ -65415,10 +65415,6 @@
"modified": "2020-06-16T14:49:12.422Z",
"contributors": ["jmcantrell", "DianeLooney", "Sheppy"]
},
- "Web/API/Web_Audio_API/Tools": {
- "modified": "2019-03-18T21:37:44.787Z",
- "contributors": ["chrisdavidmills", "alien35", "Sheppy"]
- },
"Web/API/Web_Audio_API/Using_AudioWorklet": {
"modified": "2020-10-11T19:28:05.402Z",
"contributors": ["hamishwillee", "tcveatch", "Sheppy"]
diff --git a/files/en-us/games/techniques/3d_on_the_web/building_up_a_basic_demo_with_playcanvas/editor/index.md b/files/en-us/games/techniques/3d_on_the_web/building_up_a_basic_demo_with_playcanvas/editor/index.md
index f426366e52cf110..d44ce90accda428 100644
--- a/files/en-us/games/techniques/3d_on_the_web/building_up_a_basic_demo_with_playcanvas/editor/index.md
+++ b/files/en-us/games/techniques/3d_on_the_web/building_up_a_basic_demo_with_playcanvas/editor/index.md
@@ -77,7 +77,7 @@ Now click on the play arrow in the top right corner of the scene to launch and r
This looks great! Let's add more shapes to the scene to make it look more interesting.
-![PlayCanvas Editor - Boxrender](playcanvas-editor-boxrender.png)
+![PlayCanvas Editor - Box render](playcanvas-editor-boxrender.png)
## Adding more shapes
@@ -97,7 +97,7 @@ Now follow the same steps as we did before when coloring the cube:
![PlayCanvas Editor - Cylinder material](playcanvas-editor-cylindermaterial.png)
-Follow the same approach again to add a cone to the scene, giving it a grayish color (we used EAEFF2.) You should now have three shapes on your scene, something like the below screenshot.
+Follow the same approach again to add a cone to the scene, giving it a grayish color (we used `#EAEFF2`.) You should now have three shapes on your scene, something like the below screenshot.
![PlayCanvas Editor - Cone](playcanvas-editor-cone.png)
diff --git a/files/en-us/games/techniques/3d_on_the_web/building_up_a_basic_demo_with_three.js/index.md b/files/en-us/games/techniques/3d_on_the_web/building_up_a_basic_demo_with_three.js/index.md
index b9d8454c21a9398..849b89cd4432e82 100644
--- a/files/en-us/games/techniques/3d_on_the_web/building_up_a_basic_demo_with_three.js/index.md
+++ b/files/en-us/games/techniques/3d_on_the_web/building_up_a_basic_demo_with_three.js/index.md
@@ -214,7 +214,7 @@ dodecahedron.position.x = 25;
scene.add(dodecahedron);
```
-This time, we are creating a dodecahedron, a shape containing twelve flat faces. The parameter, `DodecahedronGeometry(),` defines the size of the object. We're using a Lambert material, similar to Phong, but should be less glossy. Again it's black, for now. We're moving the object to the right, so it's not in the same position as the box, or torus.
+This time, we are creating a dodecahedron, a shape containing twelve flat faces. The parameter to `DodecahedronGeometry()` defines the size of the object. We're using a Lambert material, similar to Phong, but should be less glossy. Again it's black, for now. We're moving the object to the right, so it's not in the same position as the box, or torus.
As mentioned above, the new objects currently just look black. To have both, the Phong and Lambert materials properly visible, we need to introduce a source of light.
@@ -250,7 +250,7 @@ This rotates the cube on every frame, by a tiny bit, so the animation looks smoo
### Scaling
-We can also scale an object. Applying a constant value, we would make it grow, or shrink just once. Let's make things more interesting. First, we implement a helper variable, called `t,` for counting elapsed time. Add it right before the `render()` function:
+We can also scale an object. Applying a constant value, we would make it grow, or shrink just once. Let's make things more interesting. First, we implement a helper variable called `t` for counting elapsed time. Add it right before the `render()` function:
```js
let t = 0;
diff --git a/files/en-us/games/techniques/audio_for_web_games/index.md b/files/en-us/games/techniques/audio_for_web_games/index.md
index a21425554bb5e9d..d2593d6b52808bd 100644
--- a/files/en-us/games/techniques/audio_for_web_games/index.md
+++ b/files/en-us/games/techniques/audio_for_web_games/index.md
@@ -143,7 +143,7 @@ The advantage is that we can prime one piece of audio and have our sprites ready
```js
const myAudio = document.createElement("audio");
-myAudio.src = "mysprite.mp3";
+myAudio.src = "my-sprite.mp3";
myAudio.play();
myAudio.pause();
```
diff --git a/files/en-us/games/techniques/control_mechanisms/desktop_with_gamepad/index.md b/files/en-us/games/techniques/control_mechanisms/desktop_with_gamepad/index.md
index da104d7f69b9791..f75e1fb5aa5bdf8 100644
--- a/files/en-us/games/techniques/control_mechanisms/desktop_with_gamepad/index.md
+++ b/files/en-us/games/techniques/control_mechanisms/desktop_with_gamepad/index.md
@@ -346,9 +346,9 @@ if (gamepadAPI.buttonPressed("B")) {
}
```
-## The paused and gameover states
+## The paused and game-over states
-We already learned how to control the whole lifecycle of the game: pausing the gameplay, restarting it, or getting back to the main menu. It works smooth on mobile and desktop, and adding gamepad controls is just as straightforward — in the `update()` function, we check to see if the current state status is `paused` — if so, the relevant actions are enabled:
+We already learned how to control the whole lifecycle of the game: pausing the gameplay, restarting it, or getting back to the main menu. It works smooth on mobile and desktop, and adding gamepad controls is just as straightforward — in the `update()` function, we check to see if the current state status is "paused" — if so, the relevant actions are enabled:
```js
if (GamepadAPI.buttons.pressed("Start")) {
@@ -360,7 +360,7 @@ if (GamepadAPI.buttons.pressed("Back")) {
}
```
-Similarly, when the `gameover` state status is active, then we can allow the user to restart the game instead of continuing it:
+Similarly, when the "game-over" state status is active, then we can allow the user to restart the game instead of continuing it:
```js
if (GamepadAPI.buttons.pressed("Start")) {
diff --git a/files/en-us/games/techniques/control_mechanisms/other/index.md b/files/en-us/games/techniques/control_mechanisms/other/index.md
index abbc4f722173692..463c0375a3bbde1 100644
--- a/files/en-us/games/techniques/control_mechanisms/other/index.md
+++ b/files/en-us/games/techniques/control_mechanisms/other/index.md
@@ -72,7 +72,7 @@ You can see it in action by watching [this video](https://www.youtube.com/watch?
Have you ever thought about controlling a game only with your hands? It's possible with [Leap Motion](https://www.ultraleap.com/), an immersive controller for games and apps.
-Leapmotion is becoming more and more popular due to very good integration with VR headsets — demoing [Rainbow Membrane](https://mozilla.github.io/rainbow/) on an Oculus Rift with Leap Motion attached to it was voted one of the best WebVR experiences by JavaScript developers visiting demo booths at conferences around the world.
+Leap Motion is becoming more and more popular due to very good integration with VR headsets — demoing [Rainbow Membrane](https://mozilla.github.io/rainbow/) on an Oculus Rift with Leap Motion attached to it was voted one of the best WebVR experiences by JavaScript developers visiting demo booths at conferences around the world.
As well as being great for virtual interfaces, it can also be used for a casual 2D gaming experiences. It would be very difficult to do everything with only your hands, but it's totally doable for the simple Captain Roger's gameplay — steering the ship and shooting the bullets.
@@ -158,15 +158,15 @@ The `diff` would be the difference between the initial position of the hand and
This approach won't give us the full flexibility of using a Gamepad, or even Leap Motion, but it's definitely an interesting, unconventional alternative. You can use it to scroll a page hands-free, or play theremin, but it should also be enough to move the ship up and down the screen if implemented correctly.
-## MaKey MaKey
+## Makey Makey
-If you want to go completely bananas you can use [MaKey MaKey](https://makeymakey.com/), a board that can turn anything into a controller — it's all about connecting real-world, conductive objects to a computer and using them as touch interfaces.
+If you want to go completely bananas you can use [Makey Makey](https://makeymakey.com/), a board that can turn anything into a controller — it's all about connecting real-world, conductive objects to a computer and using them as touch interfaces.
![Controlling a banana piano using Makey Makey.](controls-banana.png)
Check out the [banana piano video](https://www.youtube.com/watch?v=_DWQ6ce2Ags), and be sure to visit the [quick start guide](https://learn.sparkfun.com/tutorials/makey-makey-quickstart-guide) for all the needed info.
-There's even a [Cylon.js-supported Makey Button functionality](https://cylonjs.com/documentation/drivers/makey-button/) inspired by the MaKey MaKey board, so you can use the popular Cylon robotics framework for your experiments with Arduino or Raspberry Pi. Connecting the boards and using them may look like this:
+There's even a [Cylon.js-supported Makey Button functionality](https://cylonjs.com/documentation/drivers/makey-button/) inspired by the Makey Makey board, so you can use the popular Cylon robotics framework for your experiments with Arduino or Raspberry Pi. Connecting the boards and using them may look like this:
```js
const Cylon = require("cylon");
diff --git a/files/en-us/games/techniques/tilemaps/index.md b/files/en-us/games/techniques/tilemaps/index.md
index d96511c9995b60c..456185408c7f465 100644
--- a/files/en-us/games/techniques/tilemaps/index.md
+++ b/files/en-us/games/techniques/tilemaps/index.md
@@ -133,4 +133,4 @@ In fast games that might still not be enough. An alternative method would be to
- [Demos and source code](https://mozdevs.github.io/gamedev-js-tiles/)
- [Grid parts and relationships](https://www.redblobgames.com/grids/parts/) by Amit Patel (May 2021)
- - [Isometric graphics in videogames](https://en.wikipedia.org/wiki/Isometric_graphics_in_video_games_and_pixel_art) (Wikipedia)
+ - [Isometric graphics in video games](https://en.wikipedia.org/wiki/Isometric_graphics_in_video_games_and_pixel_art) (Wikipedia)
diff --git a/files/en-us/games/tutorials/2d_breakout_game_phaser/index.md b/files/en-us/games/tutorials/2d_breakout_game_phaser/index.md
index 1dff3c1ff633907..c1fc64c70c6581f 100644
--- a/files/en-us/games/tutorials/2d_breakout_game_phaser/index.md
+++ b/files/en-us/games/tutorials/2d_breakout_game_phaser/index.md
@@ -28,7 +28,7 @@ All the lessons — and the different versions of the [MDN Breakout game](https:
6. [Bounce off the walls](/en-US/docs/Games/Tutorials/2D_breakout_game_Phaser/Bounce_off_the_walls)
7. [Player paddle and controls](/en-US/docs/Games/Tutorials/2D_breakout_game_Phaser/Player_paddle_and_controls)
8. [Game over](/en-US/docs/Games/Tutorials/2D_breakout_game_Phaser/Game_over)
-9. [Build the brickfield](/en-US/docs/Games/Tutorials/2D_breakout_game_Phaser/Build_the_brick_field)
+9. [Build the brick field](/en-US/docs/Games/Tutorials/2D_breakout_game_Phaser/Build_the_brick_field)
10. [Collision detection](/en-US/docs/Games/Tutorials/2D_breakout_game_Phaser/Collision_detection)
11. [The score](/en-US/docs/Games/Tutorials/2D_breakout_game_Phaser/The_score)
12. [Win the game](/en-US/docs/Games/Tutorials/2D_breakout_game_Phaser/Win_the_game)
diff --git a/files/en-us/glossary/accessible_name/index.md b/files/en-us/glossary/accessible_name/index.md
index d573dcb58d1eb39..7e5cbe6cdb81c7a 100644
--- a/files/en-us/glossary/accessible_name/index.md
+++ b/files/en-us/glossary/accessible_name/index.md
@@ -18,7 +18,7 @@ Other elements get their accessible name from the content of associated elements
For some elements, the accessible name comes from the element's attributes; for example, the `alt` attribute in the case of {{HTMLElement("img")}}. Given ``, the image's accessible name is "banana."
-To create an association between visible content and an element or multiple text nodes and an element, the [`aria-labeledby`](/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-labelledby) attribute can be used. If there is no visible text to associate with a UI element needing an accessible name, the [`aria-label`](/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label) attribute can be used. Names should not be added to elements marking up inline text, like {{HTMLElement("code")}}, {{HTMLElement("del")}}, and {{HTMLElement("mark")}}.
+To create an association between visible content and an element or multiple text nodes and an element, the [`aria-labelledby`](/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-labelledby) attribute can be used. If there is no visible text to associate with a UI element needing an accessible name, the [`aria-label`](/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label) attribute can be used. Names should not be added to elements marking up inline text, like {{HTMLElement("code")}}, {{HTMLElement("del")}}, and {{HTMLElement("mark")}}.
Many elements, such as sections of textual content, don't need an accessible name. All controls should have an accessible name. All images that convey information and aren't purely presentational do too.
diff --git a/files/en-us/glossary/application_context/index.md b/files/en-us/glossary/application_context/index.md
index 1156f35a3b40078..98458b26eb5b2d7 100644
--- a/files/en-us/glossary/application_context/index.md
+++ b/files/en-us/glossary/application_context/index.md
@@ -1,18 +1,30 @@
---
-title: Application Context
+title: Application context
slug: Glossary/Application_context
page-type: glossary-definition
---
{{GlossarySidebar}}
-An **application context** is a top-level {{glossary("browsing context")}} that has a [manifest](/en-US/docs/Web/Manifest) applied to it.
+**Application context** refers to the top-level {{glossary("browsing context")}} of a [web application](/en-US/docs/Web/Progressive_web_apps).
+It determines how an app's browsing context, such as a tab or a window, is presented and behaves.
-If an application context is created as a result of the user agent being asked to navigate to a deep link, the user agent must immediately navigate to the deep link with replacement enabled. Otherwise, when the application context is created, the user agent must immediately navigate to the start URL with replacement enabled.
+Web developers define the application context in the [web app's manifest file](/en-US/docs/Web/Manifest).
+They use the [`scope`](/en-US/docs/Web/Manifest/scope) member in the manifest to specify the set of URLs that are considered part of the application context and to which the manifest applies.
-Please note that the start URL is not necessarily the value of the start_url member: the user or user agent could have changed it when the application was added to home-screen or otherwise bookmarked.
+The manifest is applied after the application context is created but before navigation begins to either a start URL or a deep link.
+A **start URL** is the initial page of the web app.
+A **deep link** is a URL that directs users to a specific page within the web app, bypassing the home page.
+The application context ensures that the app's defined behavior and presentation are maintained within its scope.
+
+When an application context is created, browsers must immediately navigate to a start URL or a deep link.
+This navigation replaces the current entry in the browsing history.
+If the application context is created to navigate to a deep link, the browser navigates directly to that deep link; otherwise, it navigates to the start URL.
+
+Note that the start URL is not necessarily the value of the [`start_url`](/en-US/docs/Web/Manifest/start_url) member in the manifest. Browsers may ignore the specified `start_url` or may allow users to change its value when adding the web app to their device's home screen or bookmarking it.
## See also
-- [Progressive web apps (PWA)](/en-US/docs/Web/Progressive_web_apps)
- [`scope`](/en-US/docs/Web/Manifest/scope)
+- [Web app manifests](/en-US/docs/Web/Manifest)
+- [Progressive web apps (PWA)](/en-US/docs/Web/Progressive_web_apps)
diff --git a/files/en-us/glossary/baseline/compatibility/index.md b/files/en-us/glossary/baseline/compatibility/index.md
index 4b4c72f9e88d453..64fee9b0b72bc41 100644
--- a/files/en-us/glossary/baseline/compatibility/index.md
+++ b/files/en-us/glossary/baseline/compatibility/index.md
@@ -18,7 +18,7 @@ Baseline considers support in the following browsers:
- Mozilla Firefox (Android)
- Mozilla Firefox (desktop)
-Baseline is a summary of browser support. It is not a substitute for accessibility, usability, performance, security, or other testing. Baseline may not tell if you if a feature works with:
+Baseline is a summary of browser support. It is not a substitute for accessibility, usability, performance, security, or other testing. Baseline may not tell you if a feature works with:
- Older devices and browser releases
- Browsers not covered by the Baseline definition, such as operating system web views
diff --git a/files/en-us/glossary/boolean/html/index.md b/files/en-us/glossary/boolean/html/index.md
index 14de1fd571c1184..06577fcf0b8c0de 100644
--- a/files/en-us/glossary/boolean/html/index.md
+++ b/files/en-us/glossary/boolean/html/index.md
@@ -6,13 +6,13 @@ page-type: glossary-definition
{{GlossarySidebar}}
-A **boolean attribute** in {{Glossary("HTML")}} is an {{glossary("attribute")}} that represents `true` or `false` values. If an HTML tag contains a boolean attribute - no matter the value of that attribute - the attribute is set to `true` on that element. If an HTML tag does not contain the attribute, the attribute is set to `false`.
+A **boolean attribute** in {{Glossary("HTML")}} is an {{glossary("attribute")}} that represents `true` or `false` values. If an HTML tag contains a boolean attribute — no matter the value of that attribute — the attribute is set to `true` on that element. If an HTML tag does not contain the attribute, the attribute is set to `false`.
-If the attribute is present, it can have one of the following values:
+If the attribute is present, it can have one of the following forms:
-- no value at all, e.g. `attribute`
-- the empty string, e.g. `attribute=""`
-- attribute's name itself, with no leading or trailing whitespace, e.g. `attribute="attribute"`
+- the attribute name alone; e.g., `attribute`, meaning its implicit value is the empty string
+- the attribute with a value of the empty string; e.g., `attribute=""`
+- the attribute with a value of the attribute's name itself, with no leading or trailing whitespace and case ignored; e.g., `attribute="attribute"`, `attribute="ATTRIBUTE"`
> [!NOTE]
> The strings "true" and "false" are invalid values. To set the attribute to `false`, the attribute should be omitted altogether. Though modern browsers treat _any_ string value as `true`, you should not rely on that behavior.
@@ -24,6 +24,7 @@ Here's an example of a HTML boolean attribute `checked`:
+
diff --git a/files/en-us/glossary/cloud/index.md b/files/en-us/glossary/cloud/index.md
new file mode 100644
index 000000000000000..04bdc36da012248
--- /dev/null
+++ b/files/en-us/glossary/cloud/index.md
@@ -0,0 +1,21 @@
+---
+title: Cloud
+slug: Glossary/Cloud
+page-type: glossary-definition
+---
+
+{{GlossarySidebar}}
+
+The **Cloud** refers to servers located worldwide that are accessed over the Internet, and the software and databases that run on those servers.
+
+Instead of storing data or running programs on a local computer or server, users can access cloud resources to perform tasks: this is known as {{glossary("Cloud computing")}}.
+
+Key features of the cloud include:
+
+- Remote Access: Data and services are accessed remotely.
+- Scalability: Resources can be scaled up or down based on demand.
+- Availability: Services and data are typically accessible from anywhere with internet access.
+
+## See also
+
+- [What is the Cloud?](https://www.cloudflare.com/en-gb/learning/cloud/what-is-the-cloud/) on Cloudflare
diff --git a/files/en-us/glossary/cloud_computing/index.md b/files/en-us/glossary/cloud_computing/index.md
new file mode 100644
index 000000000000000..ae1da01b885d93c
--- /dev/null
+++ b/files/en-us/glossary/cloud_computing/index.md
@@ -0,0 +1,27 @@
+---
+title: Cloud computing
+slug: Glossary/Cloud_computing
+page-type: glossary-definition
+---
+
+{{GlossarySidebar}}
+
+**Cloud computing** refers to the on-demand delivery of a wide range of computing services such as storage, databases, networking, analytics, and intelligence via the Internet — also known as **cloud services**.
+
+Cloud services are infrastructure, platforms, or software made available to users via the internet, hosted by third-party providers such as Google (Google Cloud Platform), Amazon AWS (Amazon Web Services), and Microsoft (Azure). Users can access cloud services through a _pay-as-you-go_ pricing model, ensuring they only pay for what they use, and without requiring any complex software set up on their own computers. This model enables faster innovation, flexible scalability, and significant cost savings.
+
+The three main types of cloud computing are Infrastructure as a Service (IaaS), Platform as a Service (PaaS), and Software as a Service (SaaS). Each type of cloud computing provides different levels of control, flexibility, and management.
+
+- Infrastructure as a Service
+ - : IaaS provides virtualized computing resources over the internet, including servers, storage, and networking, allowing users to manage their infrastructure. This gives users a high level of flexibility and control over the resources. Companies using IaaS can scale their server infrastructure rapidly without owning physical servers. Examples include Amazon Web Services (AWS EC2), Microsoft Azure Virtual Machines, and Google Compute Engine (GCE).
+- Platform as a Service
+ - : PaaS provides a platform allowing customers to develop, run, and manage applications without worrying about the underlying infrastructure such as servers, storage, and networking. PaaS allows developers to focus on writing code and application logic, without managing servers or operating systems. Examples include Google App Engine, Microsoft Azure App Service, Heroku, and AWS Elastic Beanstalk.
+- Software as a Service
+ - : SaaS delivers software applications over the internet, which users can access via a web browser. The provider manages all the underlying infrastructure, platform, and data. Businesses using SaaS don't need to install or manage software locally. Instead, they can access software such as email, CRM, and collaboration tools directly from a web browser. Examples include Google Workspace, Microsoft 365, Slack, Github, and ChatGPT.
+
+## See also
+
+- [Cloud Computing](https://en.wikipedia.org/wiki/Cloud_computing) on Wikipedia
+- [What is Cloud Computing?](https://cloud.google.com/learn/what-is-cloud-computing?hl=en) on Google Cloud
+- [Cloud Service Provider](https://cloud.google.com/learn/what-is-a-cloud-service-provider?hl=en) on Google Cloud
+- [NIST Definition of Cloud Computing](https://nvlpubs.nist.gov/nistpubs/legacy/sp/nistspecialpublication800-145.pdf)
diff --git a/files/en-us/glossary/entity_header/index.md b/files/en-us/glossary/entity_header/index.md
index dc5698d0773e74c..d8d80d70fd26478 100644
--- a/files/en-us/glossary/entity_header/index.md
+++ b/files/en-us/glossary/entity_header/index.md
@@ -14,7 +14,7 @@ An entity header is an {{glossary("HTTP_header", "HTTP header")}} that describes
In the following example, {{HTTPHeader("Content-Length")}} is an entity header, while {{HTTPHeader("Host")}} and {{HTTPHeader("User-Agent")}} are requests headers:
```http
-POST /myform.html HTTP/1.1
+POST /my-form.html HTTP/1.1
Host: developer.mozilla.org
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0
Content-Length: 128
diff --git a/files/en-us/glossary/falsy/index.md b/files/en-us/glossary/falsy/index.md
index 220cbfd7449fdee..f8c80f3ed761ebb 100644
--- a/files/en-us/glossary/falsy/index.md
+++ b/files/en-us/glossary/falsy/index.md
@@ -6,6 +6,8 @@ page-type: glossary-definition
{{GlossarySidebar}}
+
+
A **falsy** (sometimes written **falsey**) value is a value that is considered false when encountered in a {{Glossary("Boolean")}} context.
{{Glossary("JavaScript")}} uses {{Glossary("Type_Conversion", "type conversion")}} to coerce any value to a Boolean in contexts that require it, such as {{Glossary("Conditional", "conditionals")}} and {{Glossary("Loop", "loops")}}.
diff --git a/files/en-us/glossary/fetch_metadata_request_header/index.md b/files/en-us/glossary/fetch_metadata_request_header/index.md
index 916af11fa2b5dc5..a0790b55248a064 100644
--- a/files/en-us/glossary/fetch_metadata_request_header/index.md
+++ b/files/en-us/glossary/fetch_metadata_request_header/index.md
@@ -8,7 +8,7 @@ page-type: glossary-definition
A **fetch metadata request header** is an {{Glossary("Request header", "HTTP request header")}} that provides additional information about the context from which the request originated. This allows the server to make decisions about whether a request should be allowed based on where the request came from and how the resource will be used.
-With this information a server can implement a resource isolation policy, allowing external sites to request only those resources that are intended for sharing, and that are used appropriately. This approach can help mitigate common cross-site web vulnerabilities such as {{Glossary("CSRF")}}, Cross-site Script Inclusion('XSSI'), timing attacks, and cross-origin information leaks.
+With this information a server can implement a resource isolation policy, allowing external sites to request only those resources that are intended for sharing, and that are used appropriately. This approach can help mitigate common cross-site web vulnerabilities such as {{Glossary("CSRF")}}, Cross-site Script Inclusion (XSSI), timing attacks, and cross-origin information leaks.
These headers are prefixed with `Sec-`, and hence have {{Glossary("Forbidden header name", "forbidden header names")}}. As such, they cannot be modified from JavaScript.
diff --git a/files/en-us/glossary/google_chrome/index.md b/files/en-us/glossary/google_chrome/index.md
index 8de6d95b3453efe..68effab268a1e90 100644
--- a/files/en-us/glossary/google_chrome/index.md
+++ b/files/en-us/glossary/google_chrome/index.md
@@ -6,7 +6,9 @@ page-type: glossary-definition
{{GlossarySidebar}}
-Google Chrome is a free Web {{glossary("browser")}} developed by Google. It's based on the [Chromium](https://www.chromium.org/) open source project. Some key differences are described on [BrowserStack](https://www.browserstack.com/guide/difference-between-chrome-and-chromium#toc5). Chrome supports its own layout called {{glossary("Blink")}}. Note that the iOS version of Chrome uses that platform's WebView, not Blink.
+Google Chrome is a free Web {{glossary("browser")}} developed by Google, based on the [Chromium](https://www.chromium.org/) open source project. Some key differences are described in BrowserStack's [Chrome vs Chromium: Core Differences](https://www.browserstack.com/guide/difference-between-chrome-and-chromium) guide.
+
+Chromium also has its own layout engine called {{glossary("Blink")}}; note however that the iOS version of Chrome uses that platform's WebView rather than Blink, due to platform restrictions.
## See also
diff --git a/files/en-us/glossary/http_2/index.md b/files/en-us/glossary/http_2/index.md
index ec4aaf9dca94daf..3aa06aa3dc1fd7e 100644
--- a/files/en-us/glossary/http_2/index.md
+++ b/files/en-us/glossary/http_2/index.md
@@ -8,7 +8,11 @@ page-type: glossary-definition
**HTTP/2** is a major revision of the [HTTP network protocol](/en-US/docs/Web/HTTP).
-The primary goals for HTTP/2 are to reduce {{glossary("latency")}} and head-of-line blocking by enabling full request and response multiplexing, minimize protocol overhead via efficient compression of HTTP header fields, and add support for request prioritization and server push.
+The primary goals for HTTP/2 are to reduce {{glossary("latency")}} and head-of-line blocking by enabling full request and response multiplexing, minimize protocol overhead via efficient compression of HTTP header fields (HPACK), and support for request prioritization.
+
+HTTP/2 also introduced a mechanism called Server Push, which allowed a server to send resources to a client in anticipation that the client would need them very soon.
+Server Push proved tricky to implement in practice, and has been removed from most major browser engines.
+It has been replaced by alternative methods such as [`rel="preload"`](/en-US/docs/Web/HTML/Attributes/rel/preload) and {{HTTPStatus("103", "103 Early hints")}}.
HTTP/2 does not modify the semantics of HTTP, meaning the core concepts found in HTTP/1.1, such as methods, status codes, URIs, and header fields, remain the same.
Instead, HTTP/2 modifies how the data is formatted (framed) and transported between the client and server, both of which manage the entire process, and hides protocol complexity within a framing layer.
@@ -17,7 +21,8 @@ As a result, all existing applications can be delivered over the protocol withou
## See also
- [HTTP on MDN](/en-US/docs/Web/HTTP)
-- [HTTP/2](https://en.wikipedia.org/wiki/HTTP/2) on Wikipedia
- Related glossary terms:
- {{glossary("HTTP")}}
- {{glossary("Latency")}}
+- {{RFC("7540", "Server Push", "8.2")}}
+- [HTTP/2](https://en.wikipedia.org/wiki/HTTP/2) on Wikipedia
diff --git a/files/en-us/glossary/intrinsic_size/index.md b/files/en-us/glossary/intrinsic_size/index.md
index 90e6be3785bb3a7..2b51089acf2a0ef 100644
--- a/files/en-us/glossary/intrinsic_size/index.md
+++ b/files/en-us/glossary/intrinsic_size/index.md
@@ -64,6 +64,8 @@ The opposite of _intrinsic size_ is **_extrinsic size_**, which is based on the
## See also
- CSS {{cssxref("min-content")}}, {{cssxref("max-content")}}, and {{cssxref("fit-content")}} property values.
-- CSS {{cssxref("aspect-ratio")}} property
+- {{cssxref("interpolate-size")}}
+- {{cssxref("aspect-ratio")}}
+- {{cssxref("calc-size()")}}
- [CSS box sizing](/en-US/docs/Web/CSS/CSS_box_sizing) module
- [CSS sizing specification: intrinsic sizes](https://www.w3.org/TR/css-sizing-3/#intrinsic-sizes)
diff --git a/files/en-us/glossary/page_load_time/index.md b/files/en-us/glossary/page_load_time/index.md
index 7a56ad16b4b2b03..9ae8ce6cd31ab18 100644
--- a/files/en-us/glossary/page_load_time/index.md
+++ b/files/en-us/glossary/page_load_time/index.md
@@ -11,7 +11,7 @@ page-type: glossary-definition
```js
let time = performance.timing;
-let pageloadtime = time.loadEventStart - time.navigationStart;
+let pageloadTime = time.loadEventStart - time.navigationStart;
```
While page load time 'sounds' like the perfect web performance metric, it isn't. Load times can vary greatly between users depending on device capabilities, network conditions, and, to a lesser extent, distance from the server. The development environment, where page load time is measured, is likely an optimal experience, not reflective of your users' reality. In addition, web performance isn't just about when the load event happens. It's also about {{Glossary("perceived performance")}}, responsiveness, {{Glossary("jank")}} and jitter.
diff --git a/files/en-us/glossary/php/index.md b/files/en-us/glossary/php/index.md
index 9aadb7a83e2c0db..9e8317259dfc554 100644
--- a/files/en-us/glossary/php/index.md
+++ b/files/en-us/glossary/php/index.md
@@ -33,15 +33,15 @@ PHP (a recursive initialism for PHP: Hypertext Preprocessor) is an open-source s
```php
```
diff --git a/files/en-us/glossary/rate_limit/index.md b/files/en-us/glossary/rate_limit/index.md
index ef949672c1d98b6..1153e2b090701bf 100644
--- a/files/en-us/glossary/rate_limit/index.md
+++ b/files/en-us/glossary/rate_limit/index.md
@@ -6,7 +6,7 @@ page-type: glossary-definition
{{GlossarySidebar}}
-In computing, especially in networking, **rate limiting** means controlling how many operations can be performed in a given amount of time, usually to avoid overloading the system and causing performance degredation. For example, a server might limit the number of requests it will accept from a single client in a given time period, which not only optimizes the server's overall performance but also mitigates attacks like {{glossary("DoS attack")}}.
+In computing, especially in networking, **rate limiting** means controlling how many operations can be performed in a given amount of time, usually to avoid overloading the system and causing performance degradation. For example, a server might limit the number of requests it will accept from a single client in a given time period, which not only optimizes the server's overall performance but also mitigates attacks like {{glossary("DoS attack")}}.
Rate limiting is typically synonymous with {{glossary("throttle", "throttling")}}, although {{glossary("debounce", "debouncing")}} is another viable strategy which provides better semantics and user experience in certain cases.
diff --git a/files/en-us/glossary/response_header/index.md b/files/en-us/glossary/response_header/index.md
index a7d68b21ee05377..7a272a0910d653a 100644
--- a/files/en-us/glossary/response_header/index.md
+++ b/files/en-us/glossary/response_header/index.md
@@ -23,7 +23,7 @@ Etag: "c561c68d0ba92bbeb8b0f612a9199f722e3a621a"
Keep-Alive: timeout=5, max=997
Last-Modified: Mon, 18 Jul 2016 02:36:04 GMT
Server: Apache
-Set-Cookie: mykey=myvalue; expires=Mon, 17-Jul-2017 16:06:00 GMT; Max-Age=31449600; Path=/; secure
+Set-Cookie: my-key=my value; expires=Mon, 17-Jul-2017 16:06:00 GMT; Max-Age=31449600; Path=/; secure
Transfer-Encoding: chunked
Vary: Cookie, Accept-Encoding
X-Backend-Server: developer2.webapp.scl3.mozilla.com
diff --git a/files/en-us/glossary/scroll_container/index.md b/files/en-us/glossary/scroll_container/index.md
index d214b2a883e66d2..6e3fed83849e6a7 100644
--- a/files/en-us/glossary/scroll_container/index.md
+++ b/files/en-us/glossary/scroll_container/index.md
@@ -15,3 +15,11 @@ A scroll container includes a scrollport and scroll bars.
## Scrollport
The scrollport is the visible part of a scroll container and coincides with the padding box of the scroll container. The scroll bars are used to move content in and out of the scrollport so that the content can be viewed.
+
+## See also
+
+- [CSS building blocks: overflowing content](/en-US/docs/Learn/CSS/Building_blocks/Overflowing_content)
+- [Scroll snapping](/en-US/docs/Glossary/Scroll_snap), including [scroll snap container](/en-US/docs/Glossary/Scroll_snap#scroll_snap_container)
+- [CSS overflow](/en-US/docs/Web/CSS/CSS_overflow) module
+- [CSS overscroll behavior](/en-US/docs/Web/CSS/CSS_overscroll_behavior) module
+- [CSS scroll snap](/en-US/docs/Web/CSS/CSS_scroll_snap) module
diff --git a/files/en-us/glossary/scroll_snap/index.md b/files/en-us/glossary/scroll_snap/index.md
new file mode 100644
index 000000000000000..8fd59588aa48a54
--- /dev/null
+++ b/files/en-us/glossary/scroll_snap/index.md
@@ -0,0 +1,30 @@
+---
+title: Scroll snap
+slug: Glossary/Scroll_snap
+page-type: glossary-definition
+---
+
+{{GlossarySidebar}}
+
+**Scroll snapping** is when content "snaps" to a specific position, rather than stopping at any random point, when a scroll operation finishes. Normal scrolling operations lack precision. They don't align to a paragraph, a sentence, or an image boundary. For example, in a carousel, a scrolling operation could finish in the middle of an image, leaving it partially visible. Web developers have long relied on JavaScript-based solutions. Browsers have recently started supporting [CSS scroll-snapping features](/en-US/docs/Web/CSS/CSS_scroll_snap) that enable defining scroll-snap containers and snapping behaviors.
+
+Scroll snapping is a well-controlled scrolling experience, whereby developers define an element as a [scroll container](/en-US/docs/Glossary/Scroll_container) with boundaries for scroll operations. Scroll operations then finish at these snap position boundaries, with the scrolled to content snapping into place. In the above carousel example, as the user finishes scrolling the carousel, its visible image will snap into place.
+
+- `Scroll snap container`
+
+ - : The **scroll snap container** is a scroll container with scroll snapping applied. For example, if a box has overflowing content and a {{CSSXref("scroll-snap-type")}} set to a value other than `none`, then the box captures snap positions. A box's scroll snap container is the element's nearest snap-position capturing scroll container ancestor. If a box has no scroll snap container, its snap positions, if any, will not trigger snapping.
+
+- `Snapport`
+
+ - : The **snapport** is the area of the [scrollport](/en-US/docs/Glossary/Scroll_container#scrollport) that is used as the alignment container for the scroll snap areas when calculating snap positions. By default, it is the same as the scroll container's visual viewport, but is the area of the scrollport defined by the {{CSSXref("scroll-padding")}} property. The [snap areas](#snap_area) are aligned to the scrollport.
+
+- `Snap area`
+ - : The **snap area** of an element in a scroll container is the area defined using {{CSSXref("scroll-margin")}} outsets specified on the element. The snap area is used to snap the element to its snapport.
+
+## See also
+
+- {{CSSXref("scroll-snap-type")}}
+- {{CSSXref("scroll-snap-align")}}
+- {{CSSXref("scroll-padding")}}
+- {{CSSXref("scroll-margin")}}
+- [CSS scroll snap](/en-US/docs/Web/CSS/CSS_scroll_snap) module
diff --git a/files/en-us/learn/accessibility/multimedia/index.md b/files/en-us/learn/accessibility/multimedia/index.md
index 5346fe1120e2d0d..5f5129e9b3c7490 100644
--- a/files/en-us/learn/accessibility/multimedia/index.md
+++ b/files/en-us/learn/accessibility/multimedia/index.md
@@ -118,7 +118,7 @@ First of all, let's look at the HTML for the video player, in the HTML:
-
+
@@ -134,7 +134,7 @@ We've inserted some simple control buttons below our video. These controls of co
We will first need to store references to each of the controls — add the following to the top of your JavaScript file:
```js
-const playPauseBtn = document.querySelector(".playpause");
+const playPauseBtn = document.querySelector(".play-pause");
const stopBtn = document.querySelector(".stop");
const rwdBtn = document.querySelector(".rwd");
const fwdBtn = document.querySelector(".fwd");
@@ -250,7 +250,7 @@ It is not OK to publish an audio resource but promise to publish the transcript
If you use an automated service, then you'll probably have to use the user interface that the tool provides. For example, take a look at our [Wait, ARIA Roles Have Categories?](https://www.youtube.com/watch?v=mwF-PpJOjMs) video and choose the three-dot menu (. . .) _> Show Transcript_. You'll see the transcript come up in a separate panel.
-If you are creating your own user interface to present your audio and associated transcript, you can do it however you like, but it might make sense to include it in a showable/hideable panel; see our [audio-transcript-ui](https://mdn.github.io/learning-area/accessibility/multimedia/audio-transcript-ui/) example (also see the [source code](https://github.com/mdn/learning-area/tree/main/accessibility/multimedia/audio-transcript-ui)).
+If you are creating your own user interface to present your audio and associated transcript, you can do it however you like, but it might make sense to include it in a showable/hidable panel; see our [audio-transcript-ui](https://mdn.github.io/learning-area/accessibility/multimedia/audio-transcript-ui/) example (also see the [source code](https://github.com/mdn/learning-area/tree/main/accessibility/multimedia/audio-transcript-ui)).
### Audio descriptions
diff --git a/files/en-us/learn/accessibility/wai-aria_basics/index.md b/files/en-us/learn/accessibility/wai-aria_basics/index.md
index c8307f478b91fe1..57c7fb54fab30c8 100644
--- a/files/en-us/learn/accessibility/wai-aria_basics/index.md
+++ b/files/en-us/learn/accessibility/wai-aria_basics/index.md
@@ -343,18 +343,18 @@ which is hidden from view using absolute positioning. When this is checked/unche
```js
function toggleMusician(bool) {
- const instruItem = formItems[formItems.length - 1];
+ const instrument = formItems[formItems.length - 1];
if (bool) {
- instruItem.input.disabled = false;
- instruItem.label.style.color = "#000";
- instruItem.input.setAttribute("aria-disabled", "false");
+ instrument.input.disabled = false;
+ instrument.label.style.color = "#000";
+ instrument.input.setAttribute("aria-disabled", "false");
hiddenAlert.textContent =
"Instruments played field now enabled; use it to tell us what you play.";
} else {
- instruItem.input.disabled = true;
- instruItem.label.style.color = "#999";
- instruItem.input.setAttribute("aria-disabled", "true");
- instruItem.input.removeAttribute("aria-label");
+ instrument.input.disabled = true;
+ instrument.label.style.color = "#999";
+ instrument.input.setAttribute("aria-disabled", "true");
+ instrument.input.removeAttribute("aria-label");
hiddenAlert.textContent = "Instruments played field now disabled.";
}
}
diff --git a/files/en-us/learn/common_questions/tools_and_setup/upload_files_to_a_web_server/index.md b/files/en-us/learn/common_questions/tools_and_setup/upload_files_to_a_web_server/index.md
index f16d6caa5f29015..079b3802ef54df6 100644
--- a/files/en-us/learn/common_questions/tools_and_setup/upload_files_to_a_web_server/index.md
+++ b/files/en-us/learn/common_questions/tools_and_setup/upload_files_to_a_web_server/index.md
@@ -54,7 +54,7 @@ There are several SFTP clients out there. Our demo covers [FileZilla](https://fi
Open the FileZilla application; you should see something like this:
-![Screenshot of the user interface of Filezilla FTP application. Host input has focus.](filezilla-ui.png)
+![Screenshot of the user interface of FileZilla FTP application. Host input has focus.](filezilla-ui.png)
### Logging in
diff --git a/files/en-us/learn/common_questions/tools_and_setup/what_software_do_i_need/index.md b/files/en-us/learn/common_questions/tools_and_setup/what_software_do_i_need/index.md
index 67912ad1ea97140..4cf5855b9b8f03f 100644
--- a/files/en-us/learn/common_questions/tools_and_setup/what_software_do_i_need/index.md
+++ b/files/en-us/learn/common_questions/tools_and_setup/what_software_do_i_need/index.md
@@ -251,20 +251,21 @@ Uploading files to a web server is a very important step while creating a websit
-### Browsing websites
+### Testing websites
-As you already know, you need a web browser to view websites. There are [dozens](https://en.wikipedia.org/wiki/List_of_web_browsers) of browser options for your personal use, but when you're developing a website you should test it at least with the following major browsers, to make sure your site works for most people:
+There are [many web browsers available](https://en.wikipedia.org/wiki/List_of_web_browsers). When you're developing a website you should test it at least with the following major browsers on both desktop and mobile platforms, to make sure your site works for most people:
- [Mozilla Firefox](https://www.mozilla.org/en-US/firefox/new/)
- [Google Chrome](https://www.google.com/chrome/)
- [Apple Safari](https://www.apple.com/safari/)
-If you're targeting a specific group (e.g., technical platform or country), you may have to test the site with additional browsers, like [Opera](https://www.opera.com/), [Konqueror](https://apps.kde.org/konqueror/).
+If you're targeting a specific group (e.g., technical platform or locale), you may have to test the site with additional browsers, like [UC Browser](https://www.ucweb.com/) or [Opera Mini](https://www.opera.com/browsers/opera-mini).
+
+Testing gets complicated because some browsers only run on certain operating systems. Notably, Apple Safari runs on iOS, iPadOS, and macOS. It's best to take advantage of services like [Browsershots](https://browsershots.org/) or [Browserstack](https://www.browserstack.com/). Browsershots creates screenshots of your website as it will look in various browsers. Browserstack gives you full remote access to virtual machines, so you can test your site in the most common environments and on different operating systems. Alternatively, you can set up your own virtual machines, but that takes some expertise.
-Testing gets complicated because some browsers only run on certain operating systems. Notably, Apple Safari runs on iOS, iPadOS, and macOS. It's best to take advantage of services like [Browsershots](https://browsershots.org/) or [Browserstack](https://www.browserstack.com/). Browsershots furnishes screenshots of your website as it will look in various browsers. Browserstack gives you full remote access to virtual machines, so you can test your site in the most common environments and on different operating systems. Alternatively, you can set up your own virtual machines, but that takes some expertise.
See [Strategies for carrying out testing: Putting together a testing lab](/en-US/docs/Learn/Tools_and_testing/Cross_browser_testing/Testing_strategies#putting_together_a_testing_lab) for more information.
-By all means run some tests on a real device, especially on real mobile devices. Mobile device simulation is a new, evolving technology and less reliable than desktop simulation. Mobile devices cost money, of course, so we suggest taking a look at the [Open Device Lab initiative](https://www.smashingmagazine.com/2016/11/worlds-best-open-device-labs/#odls-have-opened-doors-for-idls). You can also share devices if you want to test on many platforms without spending too much.
+By all means run some tests on a real device, especially on real mobile devices. Mobile devices cost money, of course, so we recommend sharing devices across a team if you want to test on many platforms without spending too much. For scalable cloud access to real device testing, we'd also recommend taking a look at [App Live: BrowserStack's Interactive Mobile App Testing platform](https://www.browserstack.com/app-live).
## Next steps
diff --git a/files/en-us/learn/common_questions/web_mechanics/what_is_a_web_server/index.md b/files/en-us/learn/common_questions/web_mechanics/what_is_a_web_server/index.md
index cb28428f967feb1..0019de10b5459f2 100644
--- a/files/en-us/learn/common_questions/web_mechanics/what_is_a_web_server/index.md
+++ b/files/en-us/learn/common_questions/web_mechanics/what_is_a_web_server/index.md
@@ -74,7 +74,7 @@ Once you have web hosting service, you must [upload your files to your web serve
### Communicating through HTTP
-Second, a web server provides support for {{Glossary("HTTP")}} (**H**yper**t**ext **T**ransfer **P**rotocol). As its name implies, HTTP specifies how to transfer hypertext (linked web documents) between two computers.
+Second, a web server provides support for {{Glossary("HTTP")}} (Hypertext Transfer Protocol). As its name implies, HTTP specifies how to transfer hypertext (linked web documents) between two computers.
A {{Glossary("Protocol")}} is a set of rules for communication between two computers. HTTP is a textual, stateless protocol.
@@ -83,9 +83,11 @@ A {{Glossary("Protocol")}} is a set of rules for communication between two compu
- Stateless
- : Neither the server nor the client remember previous communications. For example, relying on HTTP alone, a server can't remember a password you typed or remember your progress on an incomplete transaction. You need an application server for tasks like that. (We'll cover that sort of technology in other articles.)
-HTTP provides clear rules for how a client and server communicate. We'll cover HTTP itself in a [technical article](/en-US/docs/Web/HTTP) later. For now, just be aware of these things:
+HTTP provides clear rules for how a client and server communicate.
+If you want to learn more, you can read the [HTTP documentation](/en-US/docs/Web/HTTP).
+For now, there are a few things to keep in mind:
-- Usually only _clients_ make HTTP requests, and only to _servers_. Servers _respond_ to a _client_'s HTTP request. A server can also populate data into a client cache, in advance of it being requested, through a mechanism called [server push](https://en.wikipedia.org/wiki/HTTP/2_Server_Push).
+- _Clients_ make HTTP requests to _servers_. Servers _respond_ to a _client_'s HTTP request.
- When requesting a file via HTTP, clients must provide the file's {{Glossary("URL")}}.
- The web server _must answer_ every HTTP request, at least with an error message.
diff --git a/files/en-us/learn/css/building_blocks/backgrounds_and_borders/index.md b/files/en-us/learn/css/building_blocks/backgrounds_and_borders/index.md
index 5fcaf7b4fc5cb57..37a5fa7bd2e1be1 100644
--- a/files/en-us/learn/css/building_blocks/backgrounds_and_borders/index.md
+++ b/files/en-us/learn/css/building_blocks/backgrounds_and_borders/index.md
@@ -260,7 +260,7 @@ The individual properties include the {{cssxref("border-width")}}, {{cssxref("bo
}
```
-There are longhand properities for width, style, and color for each of the four sides:
+There are longhand properties for width, style, and color for each of the four sides:
```css
.box {
diff --git a/files/en-us/learn/css/building_blocks/cascade_layers/index.md b/files/en-us/learn/css/building_blocks/cascade_layers/index.md
index 6ce5a06656373ca..a30e6cd800f4a7e 100644
--- a/files/en-us/learn/css/building_blocks/cascade_layers/index.md
+++ b/files/en-us/learn/css/building_blocks/cascade_layers/index.md
@@ -285,12 +285,12 @@ Let's look at the following example:
```css
@import url("components-lib.css") layer(components);
-@import url("narrowtheme.css") layer(components.narrow);
+@import url("narrow-theme.css") layer(components.narrow);
```
In the first line, we import `components-lib.css` into the `components` layer. If that file contains any layers, named or not, those layers become nested layers within the `components` layer.
-The second line imports `narrowtheme.css` into the `narrow` layer, which is a sub-layer of `components`. The nested `components.narrow` gets created as the last layer within the `components` layer, unless `components-lib.css` already contains a `narrow` layer, in which case, the contents of `narrowtheme.css` would be appended to the `components.narrow` nested layer. Additional nested named layers can be added to the `components` layer using the pattern `components.`. As mentioned before, unnamed layers can be created but they cannot be accessed subsequently.
+The second line imports `narrow-theme.css` into the `narrow` layer, which is a sub-layer of `components`. The nested `components.narrow` gets created as the last layer within the `components` layer, unless `components-lib.css` already contains a `narrow` layer, in which case, the contents of `narrow-theme.css` would be appended to the `components.narrow` nested layer. Additional nested named layers can be added to the `components` layer using the pattern `components.`. As mentioned before, unnamed layers can be created but they cannot be accessed subsequently.
Let's look at another example, where we [import `layers1.css` into a named layer](#the_layer_block_at-rule_for_named_and_anonymous_layers) using the following statement:
diff --git a/files/en-us/learn/css/building_blocks/images_tasks/index.md b/files/en-us/learn/css/building_blocks/images_tasks/index.md
index 8419f0c11a2c30e..7b6ae4f9a36e15c 100644
--- a/files/en-us/learn/css/building_blocks/images_tasks/index.md
+++ b/files/en-us/learn/css/building_blocks/images_tasks/index.md
@@ -33,7 +33,7 @@ Try updating the live code below to recreate the finished example:
In this task, you have a simple form. Your task is to make the following changes:
-- Use attribute selectors to target the search field and button inside `.myform`.
+- Use attribute selectors to target the search field and button inside `.my-form`.
- Make the form field and button use the same text size as the rest of the form.
- Give the form field and button 10 px of padding.
- Give the button a background of `rebeccapurple`, white foreground, no border and rounded corners of 5px.
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 0a33fddc876f462..46e65d7f178c17a 100644
--- a/files/en-us/learn/css/building_blocks/organizing/index.md
+++ b/files/en-us/learn/css/building_blocks/organizing/index.md
@@ -157,7 +157,7 @@ After this section, we could define a few utility classes, for example, a class
```css
/* || UTILITIES */
-.nobullets {
+.no-bullets {
list-style: none;
margin: 0;
padding: 0;
@@ -169,7 +169,7 @@ After this section, we could define a few utility classes, for example, a class
Then we can add everything that is used sitewide. That might be things like the basic page layout, the header, navigation styling, and so on.
```css
-/* || SITEWIDE */
+/* SITEWIDE */
.main-nav {
/* … */
diff --git a/files/en-us/learn/css/first_steps/how_css_is_structured/index.md b/files/en-us/learn/css/first_steps/how_css_is_structured/index.md
index 8efff32c9d6d0ee..9e02b57b08b572e 100644
--- a/files/en-us/learn/css/first_steps/how_css_is_structured/index.md
+++ b/files/en-us/learn/css/first_steps/how_css_is_structured/index.md
@@ -184,8 +184,8 @@ Each CSS rule starts with a selector — or a list of selectors — in order to
```css
h1
a:link
-.manythings
-#onething
+.many-things
+#one-thing
*
.box p
.box p:first-child
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 3da26ecf79b015b..f190270ebf0f6a2 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
@@ -90,7 +90,7 @@ You should use the [web-font-start.html](https://github.com/mdn/learning-area/bl
For this example, we'll use two web fonts: one for the headings and one for the body text. To start with, we need to find the font files that contain the fonts. Fonts are created by font foundries and are stored in different file formats. There are generally three types of sites where you can obtain fonts:
-- A free font distributor: This is a site that makes free fonts available for download (there may still be some license conditions, such as crediting the font creator). Examples include [Font Squirrel](https://www.fontsquirrel.com/), [dafont](https://www.dafont.com/), and [Everything Fonts](https://everythingfonts.com/).
+- A free font distributor: This is a site that makes free fonts available for download (there may still be some license conditions, such as crediting the font creator). Examples include [Font Squirrel](https://www.fontsquirrel.com/), [DaFont](https://www.dafont.com/), and [Everything Fonts](https://everythingfonts.com/).
- A paid font distributor: This is a site that makes fonts available for a charge, such as [fonts.com](https://www.fonts.com/) or [myfonts.com](https://www.myfonts.com/). You can also buy fonts directly from font foundries, for example [Linotype](https://www.linotype.com/), [Monotype](https://www.monotype.com/), or [Exljbris](https://www.exljbris.com/).
- An online font service: This is a site that stores and serves the fonts for you, making the whole process easier. See the [Using an online font service](#using_an_online_font_service) section for more details.
@@ -118,7 +118,7 @@ If you need to support legacy browsers, select the "Expert" mode in the Fontsqui
Web services for font generation typically limit file sizes. In such a case, consider using tools such as:
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
+2. [FontForge](https://fontforge.org/) 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
diff --git a/files/en-us/learn/forms/basic_native_form_controls/index.md b/files/en-us/learn/forms/basic_native_form_controls/index.md
index 5a6255a361fb0e4..628cb55ee614985 100644
--- a/files/en-us/learn/forms/basic_native_form_controls/index.md
+++ b/files/en-us/learn/forms/basic_native_form_controls/index.md
@@ -222,7 +222,7 @@ Then we also have the {{htmlelement("button")}} element itself. This can take a
```
```html hidden
-
+
Using <input>
@@ -243,8 +243,8 @@ button,
input {
display: none;
}
-.buttondemo button,
-.buttondemo input {
+.button-demo button,
+.button-demo input {
all: revert;
}
```
diff --git a/files/en-us/learn/forms/form_validation/index.md b/files/en-us/learn/forms/form_validation/index.md
index 7ff8c7033360ead..8fcc4762571654c 100644
--- a/files/en-us/learn/forms/form_validation/index.md
+++ b/files/en-us/learn/forms/form_validation/index.md
@@ -520,6 +520,49 @@ You can try it out below:
> [!NOTE]
> You can find this example live on GitHub as [custom-error-message.html](https://mdn.github.io/learning-area/html/forms/form-validation/custom-error-message.html) (see also the [source code](https://github.com/mdn/learning-area/blob/main/html/forms/form-validation/custom-error-message.html).)
+#### Extending built-in form validation
+
+The previous example showed how you can add a customized message for a particular type of error (`validity.typeMismatch`).
+It is also possible to use all of the built in form validation, and then add to it using `setCustomValidity()`.
+
+Here we demonstrate how you can extend the built in [``](/en-US/docs/Web/HTML/Element/input/email) validation to only accept addresses with the `@example.com` domain.
+We start with the HTML {{htmlelement("form")}} below.
+
+```html
+
+```
+
+The validation code is shown below.
+In the event of any new input the code first resets the custom validity message by calling `setCustomValidity("")`.
+It then uses `email.validity.valid` to check if the entered address is invalid and if so, returns from the event handler.
+This ensures that all the normal built-in validation checks are run while the entered text is not a valid email address.
+
+Once the email address is valid, the code adds a custom constraint, calling `setCustomValidity()` with an error message if the address does not end with `@example.com`.
+
+```js
+const email = document.getElementById("mail");
+
+email.addEventListener("input", (event) => {
+ // Validate with the built-in constraints
+ email.setCustomValidity("");
+ if (!email.validity.valid) {
+ return;
+ }
+
+ // Extend with a custom constraints
+ if (!email.value.endsWith("@example.com")) {
+ email.setCustomValidity("Please enter an email address of @example.com");
+ }
+});
+```
+
+You can try this example in the page at the {{LiveSampleLink('Extending_built-in_form_validation', 'Live sample demo link')}}.
+Try submitting an invalid email address, a valid email address that doesn't end in `@example.com`, and one that does end in `@example.com`.
+
#### A more detailed example
Now that we've seen a really simple example, let's see how we can use this API to build some slightly more complex custom validation.
diff --git a/files/en-us/learn/forms/how_to_structure_a_web_form/example/index.md b/files/en-us/learn/forms/how_to_structure_a_web_form/example/index.md
index ea509ab353c9bd7..4fb9b79cd177dfb 100644
--- a/files/en-us/learn/forms/how_to_structure_a_web_form/example/index.md
+++ b/files/en-us/learn/forms/how_to_structure_a_web_form/example/index.md
@@ -56,7 +56,7 @@ This the example for a basic payment form for the article [How to structure an H
Email: *
-
+
-
+
diff --git a/files/en-us/learn/forms/how_to_structure_a_web_form/index.md b/files/en-us/learn/forms/how_to_structure_a_web_form/index.md
index b3a34492f1ba5d9..5e3a64c34c518b6 100644
--- a/files/en-us/learn/forms/how_to_structure_a_web_form/index.md
+++ b/files/en-us/learn/forms/how_to_structure_a_web_form/index.md
@@ -241,7 +241,7 @@ Let's put these ideas into practice and build a slightly more involved form —
Email: *
-
+
@@ -269,7 +269,7 @@ Let's put these ideas into practice and build a slightly more involved form —
Card type:
-
-
+
diff --git a/files/en-us/learn/forms/styling_web_forms/index.md b/files/en-us/learn/forms/styling_web_forms/index.md
index 9c6c006855492cd..ef12566c4ffca05 100644
--- a/files/en-us/learn/forms/styling_web_forms/index.md
+++ b/files/en-us/learn/forms/styling_web_forms/index.md
@@ -318,7 +318,7 @@ textarea:focus {
Now that our text fields are complete, we need to adjust the display of the single and multiple-line text fields to match, since they won't typically look the same using the defaults.
-#### Tweaking the textareas
+#### Tweaking the text areas
{{HTMLElement("textarea")}} elements default to being rendered as an inline-block element. The two important things here are the {{cssxref("resize")}} and {{cssxref("overflow")}} properties. While our design is a fixed-size design, and we could use the `resize` property to prevent users from resizing our multi-line text field, it is best to not prevent users from resizing a textarea if they so choose. The {{cssxref("overflow")}} property is used to make the field render more consistently across browsers. Some browsers default to the value `auto`, while some default to the value `scroll`. In our case, it's better to be sure everyone will use `auto`:
diff --git a/files/en-us/learn/forms/ui_pseudo-classes/index.md b/files/en-us/learn/forms/ui_pseudo-classes/index.md
index bf098b8229bf719..7668e4107761429 100644
--- a/files/en-us/learn/forms/ui_pseudo-classes/index.md
+++ b/files/en-us/learn/forms/ui_pseudo-classes/index.md
@@ -357,8 +357,8 @@ Let's have a look at an example that does just this. First of all, the HTML is a
- Zip/postal code:
-
+ Zip/postal code:
+
-
+
Zip/postal code:
-
+
@@ -438,7 +438,7 @@ You can see the example in action below (also [see it live here](https://mdn.git
### Read-only and read-write
-In a similar manner to `:disabled` and `:enabled`, the `:read-only` and `:read-write` pseudo-classes target two states that form inputs toggle between. Read-only inputs have their values submitted to the server, but the user can't edit them, whereas read-write means they can be edited — their default state.
+In a similar manner to `:disabled` and `:enabled`, the `:read-only` and `:read-write` pseudo-classes target two states that form inputs toggle between. As with disabled inputs, the user can't edit read-only inputs. However, unlike disabled inputs, read-only input values will be submitted to the server. Read-write means they can be edited — their default state.
An input is set to read-only using the `readonly` attribute. As an example, imagine a confirmation page where the developer has sent the details filled in on previous pages over to this page, with the aim of getting the user to check them all in one place, add any final data that is needed, and then confirm the order by submitting. At this point, all the final form data can be sent to the server in one go.
@@ -453,7 +453,7 @@ A fragment of the HTML is as follows — note the readonly attribute:
```
-If you try the live example, you'll see that the top set of form elements are not focusable, however, the values are submitted when the form is submitted. We've styled the form controls using the `:read-only` and `:read-write` pseudo-classes, like so:
+If you try the live example, you'll see that the top set of form elements are not editable, however, the values are submitted when the form is submitted. We've styled the form controls using the `:read-only` and `:read-write` pseudo-classes, like so:
```css
input:read-only,
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 a961ef1f442e70b..944fd714185d06e 100644
--- a/files/en-us/learn/forms/your_first_form/index.md
+++ b/files/en-us/learn/forms/your_first_form/index.md
@@ -214,7 +214,7 @@ label {
input,
textarea {
/* To make sure that all text fields have the same font settings
- By default, textareas have a monospace font */
+ By default, text areas have a monospace font */
font: 1em sans-serif;
/* Uniform text field size */
width: 300px;
@@ -225,8 +225,10 @@ textarea {
input:focus,
textarea:focus {
- /* Additional highlight for focused elements */
- border-color: #000;
+ /* Set the outline width and style */
+ outline-style: solid;
+ /* To give a little highlight on active elements */
+ outline-color: #000;
}
textarea {
diff --git a/files/en-us/learn/getting_started_with_the_web/css_basics/index.md b/files/en-us/learn/getting_started_with_the_web/css_basics/index.md
index 9ee6d422b58681e..30d546a8c54837c 100644
--- a/files/en-us/learn/getting_started_with_the_web/css_basics/index.md
+++ b/files/en-us/learn/getting_started_with_the_web/css_basics/index.md
@@ -125,7 +125,7 @@ There are many different types of selectors. The examples above use **element se
The element(s) on the page with the specified attribute.
img[src] selects
- <img src="myimage.png"> but not
+ <img src="my-image.png"> but not
<img>
diff --git a/files/en-us/learn/getting_started_with_the_web/dealing_with_files/index.md b/files/en-us/learn/getting_started_with_the_web/dealing_with_files/index.md
index 73ba249874039fe..f621dde2388c892 100644
--- a/files/en-us/learn/getting_started_with_the_web/dealing_with_files/index.md
+++ b/files/en-us/learn/getting_started_with_the_web/dealing_with_files/index.md
@@ -19,7 +19,7 @@ When you are working on a website locally on your computer, you should keep all
You'll notice that throughout this article, we ask you to name folders and files completely in lowercase with no spaces. This is because:
-1. Many computers, particularly web servers, are case-sensitive. So for example, if you put an image on your website at `test-site/MyImage.jpg` and then in a different file you try to invoke the image as `test-site/myimage.jpg`, it may not work.
+1. Many computers, particularly web servers, are case-sensitive. So for example, if you put an image on your website at `test-site/My_Image.jpg` and then in a different file you try to invoke the image as `test-site/my_image.jpg`, it may not work.
2. There are many ways in which using spaces in file names create issues:
- When you invoke commands in the terminal, you have to put quotes around file names with spaces in them, or the path will be interpreted as two separate items.
- Some programming languages (e.g. Python) do not work well with spaces in file names if these files are modules to be imported.
diff --git a/files/en-us/learn/getting_started_with_the_web/how_the_web_works/index.md b/files/en-us/learn/getting_started_with_the_web/how_the_web_works/index.md
index 299c541f377698f..894eb3b8988d651 100644
--- a/files/en-us/learn/getting_started_with_the_web/how_the_web_works/index.md
+++ b/files/en-us/learn/getting_started_with_the_web/how_the_web_works/index.md
@@ -74,6 +74,6 @@ Earlier we used the term "packets" to describe the format in which the data is t
## Credit
-Street photo: [Street composing](https://www.pinterest.com/pin/400538960580676851/), by [kevin digga](https://www.pinterest.com/kevindigga/).
+Street photo: [Street composing](https://www.pinterest.com/pin/400538960580676851/), by [Kevin Digga](https://www.pinterest.com/kevindigga/).
{{PreviousMenu("Learn/Getting_started_with_the_web/Publishing_your_website", "Learn/Getting_started_with_the_web")}}
diff --git a/files/en-us/learn/html/cheatsheet/index.md b/files/en-us/learn/html/cheatsheet/index.md
index dd1adb460417b58..b4191cf605fbcc0 100644
--- a/files/en-us/learn/html/cheatsheet/index.md
+++ b/files/en-us/learn/html/cheatsheet/index.md
@@ -188,7 +188,7 @@ see <cite>The Monster Book of Monsters</cite>.
Used to format the date. For example:
-<time datetime="2020-05-24" pubdate>
+<time datetime="2020-05-24">
published on 23-05-2020</time>.
{{EmbedLiveSample("time-example", 100, 60)}}
diff --git a/files/en-us/learn/html/introduction_to_html/html_text_fundamentals/index.md b/files/en-us/learn/html/introduction_to_html/html_text_fundamentals/index.md
index 185e81b2e334bda..098010eb8b8aef4 100644
--- a/files/en-us/learn/html/introduction_to_html/html_text_fundamentals/index.md
+++ b/files/en-us/learn/html/introduction_to_html/html_text_fundamentals/index.md
@@ -993,6 +993,8 @@ Always keep an accessibility mindset. The concept of italics isn't very helpful
> [!NOTE]
> People strongly associate underlining with hyperlinks. Therefore, on the web, it's best to only underline links. Use the `` element when it's semantically appropriate, but consider using CSS to change the default underline to something more appropriate on the web. The example below illustrates how it can be done.
+
+
```html
diff --git a/files/en-us/learn/html/multimedia_and_embedding/mozilla_splash_page/index.md b/files/en-us/learn/html/multimedia_and_embedding/mozilla_splash_page/index.md
index 15db567f93636fc..6a6163ceb0dd1a8 100644
--- a/files/en-us/learn/html/multimedia_and_embedding/mozilla_splash_page/index.md
+++ b/files/en-us/learn/html/multimedia_and_embedding/mozilla_splash_page/index.md
@@ -52,7 +52,7 @@ Using your favorite image editor, create 400px wide and 120px wide versions of:
- `firefox-addons.jpg`
- `mozilla-dinosaur-head.png`
-Call them something sensible, e.g. `firefoxlogo400.png` and `firefoxlogo120.png`.
+Call them something sensible, e.g. `firefox-logo400.png` and `firefox-logo120.png`.
Along with `mdn.svg`, these images will be your icons to link to further resources, inside the `further-info` area. You'll also link to the Firefox logo in the site header. Save copies of all these inside the same directory as `index.html`.
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 42ad829f9990ff6..e749e333252b673 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
@@ -356,10 +356,10 @@ If you find yourself needing to embed plugin content, this is the kind of inform
Let's look at an `