From 0ab262675372b83fc870accf3dc46d6a367c451c Mon Sep 17 00:00:00 2001 From: Estelle Weyl Date: Thu, 12 Feb 2026 07:14:25 -0800 Subject: [PATCH 1/4] Replace curly quote with straight quote (#43104) * single quote/ apostrophe in blockquote typo not really a typo, but a markdown thing * Fix more --------- Co-authored-by: Joshua Chen --- .../structuring_content/splash_page/index.md | 22 +++++++++---------- .../css/guides/fonts/variable_fonts/index.md | 4 ++-- .../web/css/guides/multicol_layout/index.md | 8 +++---- .../layout_cookbook/grid_wrapper/index.md | 4 ++-- .../reference/properties/clip-path/index.md | 8 +++---- .../properties/font-kerning/index.md | 2 +- .../properties/shape-image-threshold/index.md | 8 +++---- .../properties/shape-margin/index.md | 8 +++---- .../properties/shape-outside/index.md | 8 +++---- .../reference/selectors/_colon_lang/index.md | 4 ++-- .../web/css/reference/values/attr/index.md | 2 +- .../reference/elements/blockquote/index.md | 4 ++-- .../web/html/reference/elements/br/index.md | 2 +- .../html/reference/elements/header/index.md | 2 +- .../web/html/reference/elements/menu/index.md | 2 +- .../html/reference/elements/summary/index.md | 2 +- 16 files changed, 45 insertions(+), 45 deletions(-) diff --git a/files/en-us/learn_web_development/core/structuring_content/splash_page/index.md b/files/en-us/learn_web_development/core/structuring_content/splash_page/index.md index 06b83b40266a79d..1a2e530f244e47a 100644 --- a/files/en-us/learn_web_development/core/structuring_content/splash_page/index.md +++ b/files/en-us/learn_web_development/core/structuring_content/splash_page/index.md @@ -41,8 +41,8 @@ To solve this challenge we are expecting you to create a simple website project,

Creepy-crawlies splash page!

- In casual language, people use “bugs” to mean all sorts of small - creepy-crawlies: insects, spiders, etc. However, “Bugs” (true bugs) + In casual language, people use "bugs" to mean all sorts of small + creepy-crawlies: insects, spiders, etc. However, "Bugs" (true bugs) are actually just one order of insects (Hemiptera). This page provides a summary of the main classes or groups of creepy-crawlies. @@ -89,7 +89,7 @@ To solve this challenge we are expecting you to create a simple website project, possess distinctive piercing-sucking mouthparts. These mouthparts are adapted for feeding on plant sap, blood, or other insects. Many true bugs have scent glands that produce strong odors as a defense - mechanism, which is why some are called “stink bugs.” + mechanism, which is why some are called "stink bugs."

@@ -153,8 +153,8 @@ To solve this challenge we are expecting you to create a simple website project,

Flies & Mosquitoes (Diptera)

- Flies and mosquitoes belong to the order Diptera, meaning “two - wings.” Unlike most other insects, they have only one functional + Flies and mosquitoes belong to the order Diptera, meaning "two + wings." Unlike most other insects, they have only one functional pair of wings; the hind pair has evolved into tiny balancing organs called halteres. This adaptation gives them incredible agility in flight. Their mouthparts vary widely: some species have sponging @@ -233,7 +233,7 @@ To solve this challenge we are expecting you to create a simple website project, a danger to humans. In fact, spiders are highly beneficial because they help control insect populations, including pests. They play a crucial role in balancing ecosystems, making them one of the most - important non-insect “bugs” people commonly encounter. + important non-insect "bugs" people commonly encounter.

- In casual language, people use “bugs” to mean all sorts of small - creepy-crawlies: insects, spiders, etc. However, “Bugs” (true bugs) + In casual language, people use "bugs" to mean all sorts of small + creepy-crawlies: insects, spiders, etc. However, "Bugs" (true bugs) are actually just one order of insects (Hemiptera). This page provides a summary of the main classes or groups of creepy-crawlies.

@@ -488,7 +488,7 @@ Your finished HTML should look something like this: piercing-sucking mouthparts. These mouthparts are adapted for feeding on plant sap, blood, or other insects. Many true bugs have scent glands that produce strong odors as a defense mechanism, which is why - some are called “stink bugs.” + some are called "stink bugs."

@@ -569,7 +569,7 @@ Your finished HTML should look something like this:

- Flies and mosquitoes belong to the order Diptera, meaning “two wings.” + Flies and mosquitoes belong to the order Diptera, meaning "two wings." Unlike most other insects, they have only one functional pair of wings; the hind pair has evolved into tiny balancing organs called halteres. This adaptation gives them incredible agility in flight. @@ -663,7 +663,7 @@ Your finished HTML should look something like this: danger to humans. In fact, spiders are highly beneficial because they help control insect populations, including pests. They play a crucial role in balancing ecosystems, making them one of the most important - non-insect “bugs” people commonly encounter. + non-insect "bugs" people commonly encounter.

@@ -757,7 +757,7 @@ The following example pages show two different ways to structure your CSS. The f before coffin warehouses, and bringing up the rear of every funeral I meet; and especially whenever my hypos get such an upper hand of me, that it requires a strong moral principle to prevent me from deliberately stepping - into the street, and methodically knocking people’s hats off then, I account + into the street, and methodically knocking people's hats off then, I account it high time to get to sea as soon as I can.

diff --git a/files/en-us/web/css/guides/multicol_layout/index.md b/files/en-us/web/css/guides/multicol_layout/index.md index b35d37f484df594..25688b15a18c759 100644 --- a/files/en-us/web/css/guides/multicol_layout/index.md +++ b/files/en-us/web/css/guides/multicol_layout/index.md @@ -29,8 +29,8 @@ In this example, the 1967 speech from Canada's centennial, _A Lament for Confede

For I have known you when your forests were mine; when they gave me my meat and my clothing. I have known you in your fruits and rivers where your fish - flashed and danced in the sun, where the waters said ‘come and eat of my - abundance.’ I have known you in the freedom of your winds. And my spirit, + flashed and danced in the sun, where the waters said 'come and eat of my + abundance.' I have known you in the freedom of your winds. And my spirit, like your winds, once roamed this good lands.

@@ -40,7 +40,7 @@ In this example, the 1967 speech from Canada's centennial, _A Lament for Confede

- The white man’s strange customs I could not understand, pressed down upon me + The white man's strange customs I could not understand, pressed down upon me until I could no longer breathe.

@@ -69,7 +69,7 @@ In this example, the 1967 speech from Canada's centennial, _A Lament for Confede

Oh god, like the thunderbird of old, I shall rise again out of the sea. I - shall grab the instruments of the white man’s success – his education, his + shall grab the instruments of the white man's success – his education, his skills, and with these new tools I shall build my race into the proudest segment of your society. And, before I follow the great chiefs who have gone before us, I shall see these things come to pass. diff --git a/files/en-us/web/css/how_to/layout_cookbook/grid_wrapper/index.md b/files/en-us/web/css/how_to/layout_cookbook/grid_wrapper/index.md index dec41f9d06f2be5..b1d655923cb745e 100644 --- a/files/en-us/web/css/how_to/layout_cookbook/grid_wrapper/index.md +++ b/files/en-us/web/css/how_to/layout_cookbook/grid_wrapper/index.md @@ -19,7 +19,7 @@ Click "Play" in the code blocks below to edit the example in the MDN Playground:

- This item aligns to a central “wrapper” – columns that have a maximum + This item aligns to a central "wrapper" – columns that have a maximum width.

@@ -33,7 +33,7 @@ Click "Play" in the code blocks below to edit the example in the MDN Playground:

-

This item aligns to the right edge of the “wrapper” columns.

+

This item aligns to the right edge of the "wrapper" columns.

``` diff --git a/files/en-us/web/css/reference/properties/clip-path/index.md b/files/en-us/web/css/reference/properties/clip-path/index.md index 84d21eab97f89b2..beed0f2c0098fb3 100644 --- a/files/en-us/web/css/reference/properties/clip-path/index.md +++ b/files/en-us/web/css/reference/properties/clip-path/index.md @@ -43,11 +43,11 @@ clip-path: xywh(0 5px 100% 75% round 15% 0); src="/shared-assets/images/examples/balloon-small.jpg" width="150" /> We had agreed, my companion and I, that I should call for him at his house, - after dinner, not later than eleven o’clock. This athletic young Frenchman - belongs to a small set of Parisian sportsmen, who have taken up “ballooning” + after dinner, not later than eleven o'clock. This athletic young Frenchman + belongs to a small set of Parisian sportsmen, who have taken up "ballooning" as a pastime. After having exhausted all the sensations that are to be found - in ordinary sports, even those of “automobiling” at a breakneck speed, the - members of the “Aéro Club” now seek in the air, where they indulge in all + in ordinary sports, even those of "automobiling" at a breakneck speed, the + members of the "Aéro Club" now seek in the air, where they indulge in all kinds of daring feats, the nerve-racking excitement that they have ceased to find on earth. diff --git a/files/en-us/web/css/reference/properties/font-kerning/index.md b/files/en-us/web/css/reference/properties/font-kerning/index.md index 86c2186c7f789f6..2e211658ec4cfe3 100644 --- a/files/en-us/web/css/reference/properties/font-kerning/index.md +++ b/files/en-us/web/css/reference/properties/font-kerning/index.md @@ -25,7 +25,7 @@ font-kerning: none; ```html interactive-example
- “We took Tracy to see ‘THE WATERFALL’ in W. Virginia.” + "We took Tracy to see 'THE WATERFALL' in W. Virginia."
``` diff --git a/files/en-us/web/css/reference/properties/shape-image-threshold/index.md b/files/en-us/web/css/reference/properties/shape-image-threshold/index.md index 19a1e3cf1e3b20e..91be0172bc5a6ae 100644 --- a/files/en-us/web/css/reference/properties/shape-image-threshold/index.md +++ b/files/en-us/web/css/reference/properties/shape-image-threshold/index.md @@ -45,11 +45,11 @@ shape-image-threshold: 0.6;
We had agreed, my companion and I, that I should call for him at his house, - after dinner, not later than eleven o’clock. This athletic young Frenchman - belongs to a small set of Parisian sportsmen, who have taken up “ballooning” + after dinner, not later than eleven o'clock. This athletic young Frenchman + belongs to a small set of Parisian sportsmen, who have taken up "ballooning" as a pastime. After having exhausted all the sensations that are to be found - in ordinary sports, even those of “automobiling” at a breakneck speed, the - members of the “Aéro Club” now seek in the air, where they indulge in all + in ordinary sports, even those of "automobiling" at a breakneck speed, the + members of the "Aéro Club" now seek in the air, where they indulge in all kinds of daring feats, the nerve-racking excitement that they have ceased to find on earth.
diff --git a/files/en-us/web/css/reference/properties/shape-margin/index.md b/files/en-us/web/css/reference/properties/shape-margin/index.md index a546c46f5a834ad..5e468b78247e42c 100644 --- a/files/en-us/web/css/reference/properties/shape-margin/index.md +++ b/files/en-us/web/css/reference/properties/shape-margin/index.md @@ -31,11 +31,11 @@ shape-margin: 5%;
We had agreed, my companion and I, that I should call for him at his house, - after dinner, not later than eleven o’clock. This athletic young Frenchman - belongs to a small set of Parisian sportsmen, who have taken up “ballooning” + after dinner, not later than eleven o'clock. This athletic young Frenchman + belongs to a small set of Parisian sportsmen, who have taken up "ballooning" as a pastime. After having exhausted all the sensations that are to be found - in ordinary sports, even those of “automobiling” at a breakneck speed, the - members of the “Aéro Club” now seek in the air, where they indulge in all + in ordinary sports, even those of "automobiling" at a breakneck speed, the + members of the "Aéro Club" now seek in the air, where they indulge in all kinds of daring feats, the nerve-racking excitement that they have ceased to find on earth.
diff --git a/files/en-us/web/css/reference/properties/shape-outside/index.md b/files/en-us/web/css/reference/properties/shape-outside/index.md index ebb2b6b10670612..d4d5278099fe5fa 100644 --- a/files/en-us/web/css/reference/properties/shape-outside/index.md +++ b/files/en-us/web/css/reference/properties/shape-outside/index.md @@ -35,11 +35,11 @@ shape-outside: polygon(50% 0, 100% 50%, 50% 100%, 0 50%); src="/shared-assets/images/examples/round-balloon.png" width="150" /> We had agreed, my companion and I, that I should call for him at his house, - after dinner, not later than eleven o’clock. This athletic young Frenchman - belongs to a small set of Parisian sportsmen, who have taken up “ballooning” + after dinner, not later than eleven o'clock. This athletic young Frenchman + belongs to a small set of Parisian sportsmen, who have taken up "ballooning" as a pastime. After having exhausted all the sensations that are to be found - in ordinary sports, even those of “automobiling” at a breakneck speed, the - members of the “Aéro Club” now seek in the air, where they indulge in all + in ordinary sports, even those of "automobiling" at a breakneck speed, the + members of the "Aéro Club" now seek in the air, where they indulge in all kinds of daring feats, the nerve-racking excitement that they have ceased to find on earth. diff --git a/files/en-us/web/css/reference/selectors/_colon_lang/index.md b/files/en-us/web/css/reference/selectors/_colon_lang/index.md index 4461b3b8d30a4a1..16b1d5eceea8078 100644 --- a/files/en-us/web/css/reference/selectors/_colon_lang/index.md +++ b/files/en-us/web/css/reference/selectors/_colon_lang/index.md @@ -18,8 +18,8 @@ The **`:lang()`** [CSS](/en-US/docs/Web/CSS) [pseudo-class](/en-US/docs/Web/CSS/ ```html interactive-example

- Music during road trips and long commutes aren’t a problem, but using - headphones isn’t the best thing to do while driving in your car. + Music during road trips and long commutes aren't a problem, but using + headphones isn't the best thing to do while driving in your car.

diff --git a/files/en-us/web/css/reference/values/attr/index.md b/files/en-us/web/css/reference/values/attr/index.md index 5f34a27e9897154..847390622b18cb7 100644 --- a/files/en-us/web/css/reference/values/attr/index.md +++ b/files/en-us/web/css/reference/values/attr/index.md @@ -369,7 +369,7 @@ The HTML contains four cards with different `id` attributes and a "Shuffle cards

Your browser does not support advanced attr(). As a result, - this demo won’t do anything. + this demo won't do anything.

``` diff --git a/files/en-us/web/html/reference/elements/blockquote/index.md b/files/en-us/web/html/reference/elements/blockquote/index.md index 57c33b50e25b4c2..6b64ccf8b2841a6 100644 --- a/files/en-us/web/html/reference/elements/blockquote/index.md +++ b/files/en-us/web/html/reference/elements/blockquote/index.md @@ -14,8 +14,8 @@ The **`
`** [HTML](/en-US/docs/Web/HTML) element indicates that the e

- Words can be like X-rays, if you use them properly—they’ll go through - anything. You read and you’re pierced. + Words can be like X-rays, if you use them properly—they'll go through + anything. You read and you're pierced.

—Aldous Huxley, Brave New World

diff --git a/files/en-us/web/html/reference/elements/br/index.md b/files/en-us/web/html/reference/elements/br/index.md index ef0b983911c7f0c..bfacaa9cbb90bc8 100644 --- a/files/en-us/web/html/reference/elements/br/index.md +++ b/files/en-us/web/html/reference/elements/br/index.md @@ -12,7 +12,7 @@ The **`
`** [HTML](/en-US/docs/Web/HTML) element produces a line break in tex ```html interactive-example

- O’er all the hilltops
+ O'er all the hilltops
Is quiet now,
In all the treetops
Hearest thou
diff --git a/files/en-us/web/html/reference/elements/header/index.md b/files/en-us/web/html/reference/elements/header/index.md index 242c54d50d458c9..281872236b6a5e6 100644 --- a/files/en-us/web/html/reference/elements/header/index.md +++ b/files/en-us/web/html/reference/elements/header/index.md @@ -21,7 +21,7 @@ The **`

`** [HTML](/en-US/docs/Web/HTML) element represents introductory

- I love beagles so much! Like, really, a lot. They’re adorable and + I love beagles so much! Like, really, a lot. They're adorable and their ears are so, so snugly soft!

diff --git a/files/en-us/web/html/reference/elements/menu/index.md b/files/en-us/web/html/reference/elements/menu/index.md index 9a893bd2608df68..750f1657a0848ee 100644 --- a/files/en-us/web/html/reference/elements/menu/index.md +++ b/files/en-us/web/html/reference/elements/menu/index.md @@ -12,7 +12,7 @@ The **``** [HTML](/en-US/docs/Web/HTML) element is described in the HTML s ```html interactive-example
- NASA’s Webb Delivers Deepest Infrared Image of Universe Yet + NASA's Webb Delivers Deepest Infrared Image of Universe Yet
  • diff --git a/files/en-us/web/html/reference/elements/summary/index.md b/files/en-us/web/html/reference/elements/summary/index.md index c868424cc9d489a..4876be31acb83a6 100644 --- a/files/en-us/web/html/reference/elements/summary/index.md +++ b/files/en-us/web/html/reference/elements/summary/index.md @@ -13,7 +13,7 @@ The **``** [HTML](/en-US/docs/Web/HTML) element specifies a summary, ca ```html interactive-example
    - I have keys but no doors. I have space but no room. You can enter but can’t + I have keys but no doors. I have space but no room. You can enter but can't leave. What am I? A keyboard. From 735976ba98a4de14f7b568aba220841f14c2d65d Mon Sep 17 00:00:00 2001 From: Rob Wu Date: Thu, 12 Feb 2026 16:16:45 +0100 Subject: [PATCH 2/4] Remove obsolete toBlob examples (#43105) Remove two examples that are obsolete: The "Convert a canvas to an ico (Mozilla only)" is obsolete, the "image/vnd.microsoft.icon" format is not documented and seems non-functional when I tested in Firefox 147. The mention of "Windows XP" is also dating the age of this section. The "Save toBlob to disk with OS.File (Chrome/add-on context only)" is obsolete because these kinds of add-ons are not supported since Firefox 57 (almost 9 years ago). --- .../web/api/htmlcanvaselement/toblob/index.md | 85 ------------------- 1 file changed, 85 deletions(-) diff --git a/files/en-us/web/api/htmlcanvaselement/toblob/index.md b/files/en-us/web/api/htmlcanvaselement/toblob/index.md index 75dc1443fb5474d..44e2156a46b9a58 100644 --- a/files/en-us/web/api/htmlcanvaselement/toblob/index.md +++ b/files/en-us/web/api/htmlcanvaselement/toblob/index.md @@ -80,91 +80,6 @@ canvas.toBlob( Note that we don't immediately revoke the object URL after the image has loaded, because doing so would make the image unusable for user interactions (such as right-clicking to save the image or opening it in a new tab). For long-lived applications, you should revoke object URLs when they're no longer needed (such as when the image is removed from the DOM) to free up memory by calling the {{DOMxref("URL.revokeObjectURL_static", "URL.revokeObjectURL()")}} method and passing in the object URL string. -### Convert a canvas to an ico (Mozilla only) - -This uses `-moz-parse` to convert the canvas to ico, and hence only works on Firefox. -Windows XP doesn't support converting from PNG to ico, so it uses bmp instead. -A download link is created by setting the download attribute. The value of the download attribute is the name it will use as the file name. - -```js -const canvas = document.getElementById("canvas"); -const d = canvas.width; -const ctx = canvas.getContext("2d"); -ctx.beginPath(); -ctx.moveTo(d / 2, 0); -ctx.lineTo(d, d); -ctx.lineTo(0, d); -ctx.closePath(); -ctx.fillStyle = "yellow"; -ctx.fill(); - -function blobCallback(iconName) { - return (b) => { - const a = document.createElement("a"); - a.textContent = "Download"; - document.body.appendChild(a); - a.style.display = "block"; - a.download = `${iconName}.ico`; - a.href = window.URL.createObjectURL(b); - }; -} -canvas.toBlob( - blobCallback("passThisString"), - "image/vnd.microsoft.icon", - "-moz-parse-options:format=bmp;bpp=32", -); -``` - -### Save toBlob to disk with OS.File (Chrome/add-on context only) - -> [!NOTE] -> This technique saves it to the desktop and is only useful in Firefox chrome context or add-on code, as OS APIs are not present on websites. - -```js -const canvas = document.getElementById("canvas"); -const d = canvas.width; -ctx = canvas.getContext("2d"); -ctx.beginPath(); -ctx.moveTo(d / 2, 0); -ctx.lineTo(d, d); -ctx.lineTo(0, d); -ctx.closePath(); -ctx.fillStyle = "yellow"; -ctx.fill(); - -function blobCallback(iconName) { - return (b) => { - const r = new FileReader(); - r.onloadend = () => { - // r.result contains the ArrayBuffer. - Cu.import("resource://gre/modules/osfile.jsm"); - const writePath = OS.Path.join( - OS.Constants.Path.desktopDir, - `${iconName}.ico`, - ); - const promise = OS.File.writeAtomic(writePath, new Uint8Array(r.result), { - tmpPath: `${writePath}.tmp`, - }); - promise.then( - () => { - console.log("successfully wrote file"); - }, - () => { - console.log("failure writing file"); - }, - ); - }; - r.readAsArrayBuffer(b); - }; -} - -canvas.toBlob( - blobCallback("passThisString"), - "image/vnd.microsoft.icon", - "-moz-parse-options:format=bmp;bpp=32", -); -``` - ## Specifications {{Specifications}} From fca04c24a85a752549b12e64f0abd2e320c9cc1c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Feb 2026 10:20:06 -0500 Subject: [PATCH 3/4] chore(deps-dev): bump lefthook from 2.1.0 to 2.1.1 (#43102) Bumps [lefthook](https://github.com/evilmartians/lefthook) from 2.1.0 to 2.1.1. - [Release notes](https://github.com/evilmartians/lefthook/releases) - [Changelog](https://github.com/evilmartians/lefthook/blob/master/CHANGELOG.md) - [Commits](https://github.com/evilmartians/lefthook/compare/v2.1.0...v2.1.1) --- updated-dependencies: - dependency-name: lefthook dependency-version: 2.1.1 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 88 +++++++++++++++++++++++------------------------ package.json | 2 +- 2 files changed, 45 insertions(+), 45 deletions(-) diff --git a/package-lock.json b/package-lock.json index 59d641e85b0c07b..6baf23bb0befab9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -34,7 +34,7 @@ "imagemin-pngquant": "^10.0.0", "imagemin-svgo": "^11.0.1", "is-svg": "^6.1.0", - "lefthook": "^2.1.0", + "lefthook": "^2.1.1", "markdownlint-cli2": "0.20.0", "markdownlint-rule-search-replace": "1.2.0", "node-html-parser": "^7.0.2", @@ -6153,9 +6153,9 @@ } }, "node_modules/lefthook": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lefthook/-/lefthook-2.1.0.tgz", - "integrity": "sha512-+vS+yywGQW6CN1J1hbGkez//6ixGHIQqfxDN/d3JDm531w9GfGt2lAWTDfZTw/CEl80XsN0raFcnEraR3ldw9g==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/lefthook/-/lefthook-2.1.1.tgz", + "integrity": "sha512-Tl9h9c+sG3ShzTHKuR3LAIblnnh+Mgxnm2Ul7yu9cu260Z27LEbO3V6Zw4YZFP59/2rlD42pt/llYsQCkkCFzw==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -6163,22 +6163,22 @@ "lefthook": "bin/index.js" }, "optionalDependencies": { - "lefthook-darwin-arm64": "2.1.0", - "lefthook-darwin-x64": "2.1.0", - "lefthook-freebsd-arm64": "2.1.0", - "lefthook-freebsd-x64": "2.1.0", - "lefthook-linux-arm64": "2.1.0", - "lefthook-linux-x64": "2.1.0", - "lefthook-openbsd-arm64": "2.1.0", - "lefthook-openbsd-x64": "2.1.0", - "lefthook-windows-arm64": "2.1.0", - "lefthook-windows-x64": "2.1.0" + "lefthook-darwin-arm64": "2.1.1", + "lefthook-darwin-x64": "2.1.1", + "lefthook-freebsd-arm64": "2.1.1", + "lefthook-freebsd-x64": "2.1.1", + "lefthook-linux-arm64": "2.1.1", + "lefthook-linux-x64": "2.1.1", + "lefthook-openbsd-arm64": "2.1.1", + "lefthook-openbsd-x64": "2.1.1", + "lefthook-windows-arm64": "2.1.1", + "lefthook-windows-x64": "2.1.1" } }, "node_modules/lefthook-darwin-arm64": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lefthook-darwin-arm64/-/lefthook-darwin-arm64-2.1.0.tgz", - "integrity": "sha512-u2hjHLQXWSFfzO7ln2n/uEydSzfC9sc5cDC7tvKSuOdhvBwaJ0AQ7ZeuqqCQ4YfVIJfYOom1SVE9CBd10FVyig==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/lefthook-darwin-arm64/-/lefthook-darwin-arm64-2.1.1.tgz", + "integrity": "sha512-O/RS1j03/Fnq5zCzEb2r7UOBsqPeBuf1C5pMkIJcO4TSE6hf3rhLUkcorKc2M5ni/n5zLGtzQUXHV08/fSAT3Q==", "cpu": [ "arm64" ], @@ -6190,9 +6190,9 @@ ] }, "node_modules/lefthook-darwin-x64": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lefthook-darwin-x64/-/lefthook-darwin-x64-2.1.0.tgz", - "integrity": "sha512-zz5rcyrtOZpxon7uE+c0KC/o2ypJeLZql5CL0Y9oaTuECbmhfokm8glsGnyWstW/++PuMpZYYr/qsCJA5elxkQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/lefthook-darwin-x64/-/lefthook-darwin-x64-2.1.1.tgz", + "integrity": "sha512-mm/kdKl81ROPoYnj9XYk5JDqj+/6Al8w/SSPDfhItkLJyl4pqS+hWUOP6gDGrnuRk8S0DvJ2+hzhnDsQnZohWQ==", "cpu": [ "x64" ], @@ -6204,9 +6204,9 @@ ] }, "node_modules/lefthook-freebsd-arm64": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lefthook-freebsd-arm64/-/lefthook-freebsd-arm64-2.1.0.tgz", - "integrity": "sha512-+mXNCNuFHNGYLrDqYWDeHH7kWCLCJFPpspx5PAAm+PD37PRMZJrTqDbaNK9qCghC1tdmT4/Lvilf/ewXHPlaKw==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/lefthook-freebsd-arm64/-/lefthook-freebsd-arm64-2.1.1.tgz", + "integrity": "sha512-F7JXlKmjxGqGbCWPLND0bVB4DMQezIe48pEwTlUQZbxh450c2gP5Q8FdttMZKOT163kBGGTqJAJSEC6zW+QSxA==", "cpu": [ "arm64" ], @@ -6218,9 +6218,9 @@ ] }, "node_modules/lefthook-freebsd-x64": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lefthook-freebsd-x64/-/lefthook-freebsd-x64-2.1.0.tgz", - "integrity": "sha512-+AU2HD7szuDsUdHue/E3OnF84B2ae/h7CGKpuIUHJntgoJ4kxf89oDvq2/xl8kDCn9cT76UUjgeZUgFYLRj+6Q==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/lefthook-freebsd-x64/-/lefthook-freebsd-x64-2.1.1.tgz", + "integrity": "sha512-Po8/lJMqNzKSZPuEI46dLuWoBoXtAxCuRpeOh6DAV/M4RhBynaCu8rLMZ9BqF7cVbZEWoplOmYo6HdOuiYpCkQ==", "cpu": [ "x64" ], @@ -6232,9 +6232,9 @@ ] }, "node_modules/lefthook-linux-arm64": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lefthook-linux-arm64/-/lefthook-linux-arm64-2.1.0.tgz", - "integrity": "sha512-KM70eV1tsEib1/tk+3TFxIdH84EaYlIg5KTQWAg+LB1N23nTQ7lL4Dnh1je6f6KW4tf21nmoMUqsh0xvMkQk8Q==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/lefthook-linux-arm64/-/lefthook-linux-arm64-2.1.1.tgz", + "integrity": "sha512-mI2ljFgPEqHxI8vrN9nKgnVu63Rz1KisDbPwlvs7BTYNwq3sncdK5ukpGR4zzWdh6saNJ5tCtHEtep5GQI11nw==", "cpu": [ "arm64" ], @@ -6246,9 +6246,9 @@ ] }, "node_modules/lefthook-linux-x64": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lefthook-linux-x64/-/lefthook-linux-x64-2.1.0.tgz", - "integrity": "sha512-6Bxmv+l7LiYq9W0IE6v2lmlRtBp6pisnlzhcouMGvH3rDwEGw11NAyRJZA3IPGEMAkIuhnlnVTUwAUzKomfJLg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/lefthook-linux-x64/-/lefthook-linux-x64-2.1.1.tgz", + "integrity": "sha512-m3G/FaxC+crxeg9XeaUuHfEoL+i9gbkg2Hp2KD2IcVVIxprqlyqf0Hb8zbLV2NMXuo5RSGokJu44oAoTO3Ou2g==", "cpu": [ "x64" ], @@ -6260,9 +6260,9 @@ ] }, "node_modules/lefthook-openbsd-arm64": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lefthook-openbsd-arm64/-/lefthook-openbsd-arm64-2.1.0.tgz", - "integrity": "sha512-ppJNK0bBSPLC8gqksRw5zI/0uLeMA5cK+hmZ4ofcuGNmdrN1dfl2Tx84fdeef0NcQY0ii9Y3j3icIKngIoid/g==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/lefthook-openbsd-arm64/-/lefthook-openbsd-arm64-2.1.1.tgz", + "integrity": "sha512-gz/8FJPvhjOdOFt1GmFvuvDOe+W+BBRjoeAT1/mTgkN7HCXMXgqNjjvakQKQeGz1I1v08wXG1ZNf5y+T9XBCDQ==", "cpu": [ "arm64" ], @@ -6274,9 +6274,9 @@ ] }, "node_modules/lefthook-openbsd-x64": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lefthook-openbsd-x64/-/lefthook-openbsd-x64-2.1.0.tgz", - "integrity": "sha512-8k9lQsMYqQGu4spaQ8RNSOJidxIcOyfaoF2FPZhthtBfRV3cgVFGrsQ0hbIi5pvQRGUlCqYuCN79qauXHmnL3Q==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/lefthook-openbsd-x64/-/lefthook-openbsd-x64-2.1.1.tgz", + "integrity": "sha512-ch3lyMUtbmtWUufaQVn4IoEs/2hjK51XqaCdY1mh5ca//VctR1peknIwQ5feHu+vATCDviWQ7HsdNDewm3HMPg==", "cpu": [ "x64" ], @@ -6288,9 +6288,9 @@ ] }, "node_modules/lefthook-windows-arm64": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lefthook-windows-arm64/-/lefthook-windows-arm64-2.1.0.tgz", - "integrity": "sha512-0WN+grrxt9zP9NGRcztoPXcz25tteem91rfLWgQFab+50csJ47zldlsB7/eOS/eHG5mUg5g5NPR4XefnXtjOcQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/lefthook-windows-arm64/-/lefthook-windows-arm64-2.1.1.tgz", + "integrity": "sha512-mm3PZhKDs9FE/jQDimkfWxtoj9xQ2k8uw2MdhtC825bhvIh+MEi0WFj/MOW+ug0RBg0I55tGYzZ5aVuozAWpTQ==", "cpu": [ "arm64" ], @@ -6302,9 +6302,9 @@ ] }, "node_modules/lefthook-windows-x64": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lefthook-windows-x64/-/lefthook-windows-x64-2.1.0.tgz", - "integrity": "sha512-XbO/5nAZQLpUn0tPpgCYfFBFJHnymSglQ73jD6wymNrR1j8I5EcXGlP6YcLhnZ83yzsdLC+gup+N6IqUeiyRdw==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/lefthook-windows-x64/-/lefthook-windows-x64-2.1.1.tgz", + "integrity": "sha512-1L2oGIzmhfOTxfwbe5mpSQ+m3ilpvGNymwIhn4UHq6hwHsUL6HEhODqx02GfBn6OXpVIr56bvdBAusjL/SVYGQ==", "cpu": [ "x64" ], diff --git a/package.json b/package.json index 5ba0633626a9644..3888c8ab3f15c6e 100644 --- a/package.json +++ b/package.json @@ -68,7 +68,7 @@ "imagemin-pngquant": "^10.0.0", "imagemin-svgo": "^11.0.1", "is-svg": "^6.1.0", - "lefthook": "^2.1.0", + "lefthook": "^2.1.1", "markdownlint-cli2": "0.20.0", "markdownlint-rule-search-replace": "1.2.0", "node-html-parser": "^7.0.2", From 6b19a13cc0dcc30e9cd55ba3a9b2722bfa0ce69c Mon Sep 17 00:00:00 2001 From: Chris Mills Date: Thu, 12 Feb 2026 18:35:56 +0000 Subject: [PATCH 4/4] Editorial review: Add clipboardchange event page (#43014) * Add clipboardchange event page * Update files/en-us/web/api/clipboard/index.md Co-authored-by: wbamberg * Update files/en-us/web/api/clipboard/clipboardchange_event/index.md Co-authored-by: wbamberg * Update files/en-us/web/api/clipboard/clipboardchange_event/index.md Co-authored-by: wbamberg --------- Co-authored-by: wbamberg --- .../clipboard/clipboardchange_event/index.md | 110 ++++++++++++++++++ files/en-us/web/api/clipboard/index.md | 5 + files/en-us/web/api/clipboard_api/index.md | 2 + 3 files changed, 117 insertions(+) create mode 100644 files/en-us/web/api/clipboard/clipboardchange_event/index.md diff --git a/files/en-us/web/api/clipboard/clipboardchange_event/index.md b/files/en-us/web/api/clipboard/clipboardchange_event/index.md new file mode 100644 index 000000000000000..ddcbe2d184f5b27 --- /dev/null +++ b/files/en-us/web/api/clipboard/clipboardchange_event/index.md @@ -0,0 +1,110 @@ +--- +title: "Clipboard: clipboardchange event" +slug: Web/API/Clipboard/clipboardchange_event +page-type: web-api-event +browser-compat: api.Clipboard.clipboardchange_event +--- + +{{APIRef("HTML DOM")}} + +The **`clipboardchange`** event of the {{domxref("Clipboard")}} interface is fired when the system clipboard contents are changed in any way, for example via a system copy command, or via an API method such as {{domxref("Clipboard.writeText()")}}. + +## Syntax + +Use the event name in methods like {{domxref("EventTarget.addEventListener", "addEventListener()")}}, or set an event handler property. + +```js-nolint +addEventListener("clipboardchange", (event) => { }) + +onclipboardchange = (event) => { } +``` + +## Event type + +A {{domxref("ClipboardChangeEvent")}}. Inherits from {{domxref("Event")}}. + +{{InheritanceDiagram("ClipboardChangeEvent")}} + +## Examples + +### Listening for system copy commands + +This example shows how to listen for system copy commands and display the content that was copied to the clipboard. + +#### HTML + +The HTML consists of three {{htmlelement("p")}} elements — one to display the clipboard contents and two containing sample text to copy. + +```html live-sample___basic-usage +

    Copied text:

    + +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed a mattis purus. + Donec at ipsum libero. Maecenas at dictum turpis. Vivamus eget aliquet augue. + Aenean tempor dictum posuere. Vestibulum vehicula, nulla ac convallis feugiat, + tortor velit lobortis est, vitae convallis velit libero vel urna. Suspendisse + potenti. In bibendum ex et pellentesque gravida. Phasellus magna risus, + euismod vitae sem in, viverra venenatis lacus. Sed dignissim risus eu congue + consequat. Vestibulum nec feugiat libero. Maecenas quis sodales lorem, eu + luctus nisl. Cras vel diam sed lacus finibus elementum sed sed nunc. +

    + +

    + Nam ac metus eget est bibendum pulvinar. Nunc a venenatis lorem. Lorem ipsum + dolor sit amet, consectetur adipiscing elit. In dignissim, arcu ornare luctus + pharetra, dui velit faucibus leo, ac posuere ipsum risus vel ligula. Morbi + varius, felis et ornare efficitur, tortor erat imperdiet lacus, non rhoncus + lectus sapien sit amet augue. Suspendisse potenti. Sed fringilla mi augue, at + laoreet felis varius in. Donec venenatis gravida lacus ut rutrum. Donec + suscipit egestas justo. Proin semper nibh tortor, sit amet elementum metus + placerat quis. Sed consectetur leo sed lorem varius, sit amet ultrices sem + tincidunt. Vivamus facilisis at velit eget commodo. +

    +``` + +```css hidden live-sample___basic-usage +body { + margin: 0 5px; +} +#output { + font-family: Arial, Helvetica, sans-serif; + padding: 10px; + border: 2px solid #ccc; + border-radius: 5px; +} +``` + +#### JavaScript + +In our script, we first grab a reference to the output `

    ` element. We then define a `clipboardchange` event handler on the browser's {{domxref("Clipboard")}} object. When the event fires, we invoke the {{domxref("Clipboard.readText()")}} method to read the text that was just copied to the clipboard. When the result is returned, we set it as the value of the output paragraph's `textContent`. + +```js live-sample___basic-usage +const outputPara = document.querySelector("#output"); + +navigator.clipboard.addEventListener("clipboardchange", (event) => { + navigator.clipboard + .readText() + .then((text) => (outputPara.textContent = `Copied text: ${text}`)); +}); +``` + +#### Result + +The rendered example is as follows: + +{{EmbedLiveSample("basic-usage", '100%', "350px", "", "", "", "clipboard-read")}} + +Try selecting some text from the example and then copying it to the clipboard using Ctrl + C (or Cmd + C if you are using a Mac). On your first attempt, you will see a permission prompt asking you to allow permission to read the clipboard contents. After that (or immediately, on subsequent attempts), you should see the text that you copied printed to the output paragraph at the top of the UI. + +## Specifications + +{{Specifications}} + +## Browser compatibility + +{{Compat}} + +## See also + +- {{domxref("ClipboardChangeEvent")}} +- [Clipboard API](/en-US/docs/Web/API/Clipboard_API) diff --git a/files/en-us/web/api/clipboard/index.md b/files/en-us/web/api/clipboard/index.md index 2e9bd4a9a8c5c99..dbcd8b9bc8b4bd3 100644 --- a/files/en-us/web/api/clipboard/index.md +++ b/files/en-us/web/api/clipboard/index.md @@ -33,6 +33,11 @@ _`Clipboard` is based on the {{domxref("EventTarget")}} interface, and includes - {{domxref("Clipboard.writeText()","writeText()")}} - : Writes text to the system clipboard, returning a {{jsxref("Promise")}} that is resolved once the text is fully copied into the clipboard. +## Events + +- {{domxref("Clipboard.clipboardchange_event","clipboardchange")}} + - : Fired when the system clipboard contents are changed in any way, for example via a system copy command, or via an API method such as {{domxref("Clipboard.writeText()")}}. + ## Specifications {{Specifications}} diff --git a/files/en-us/web/api/clipboard_api/index.md b/files/en-us/web/api/clipboard_api/index.md index fd5e9462da3bcb9..b4ea6aaf1b72467 100644 --- a/files/en-us/web/api/clipboard_api/index.md +++ b/files/en-us/web/api/clipboard_api/index.md @@ -30,6 +30,8 @@ Events are fired as the result of {{domxref("Element/cut_event", "cut")}}, {{dom The events have a default action, for example the `copy` action copies the current selection to the system clipboard by default. The default action can be overridden by the event handler — see each of the events for more information. +There is also a {{domxref("Clipboard.clipboardchange_event","clipboardchange")}} event fired directly on the {{domxref("Clipboard")}} object whenever the system clipboard's contents are changed. This is useful for notifying apps of a change to the system clipboard, for example if they have their own clipboard that needs to be kept in sync. + ## Interfaces - {{domxref("Clipboard")}} {{securecontext_inline}}