diff --git a/.github/workflows/auto-merge.yml b/.github/workflows/auto-merge.yml
index 4692216e7a79c2..d7fefa973063b8 100644
--- a/.github/workflows/auto-merge.yml
+++ b/.github/workflows/auto-merge.yml
@@ -6,7 +6,7 @@ on:
jobs:
auto-merge:
runs-on: ubuntu-latest
- if: github.actor == 'dependabot[bot]'
+ if: github.event.pull_request.user.login == 'dependabot[bot]'
steps:
- uses: ahmadnassri/action-dependabot-auto-merge@v2
with:
diff --git a/.github/workflows/markdown-lint-fix.yml b/.github/workflows/markdown-lint-fix.yml
index 7eccce9477b3f7..2a08c4b94b0bd8 100644
--- a/.github/workflows/markdown-lint-fix.yml
+++ b/.github/workflows/markdown-lint-fix.yml
@@ -61,7 +61,7 @@ jobs:
- name: Create PR with only fixable issues
if: success()
- uses: peter-evans/create-pull-request@v6
+ uses: peter-evans/create-pull-request@v7
with:
commit-message: "${{ matrix.lang }}: auto-fix Markdownlint issues"
branch: markdownlint-auto-cleanup-${{ matrix.lang }}
@@ -76,7 +76,7 @@ jobs:
- name: Create PR with notice on unfixed issues
if: failure()
- uses: peter-evans/create-pull-request@v6
+ uses: peter-evans/create-pull-request@v7
with:
commit-message: "${{ matrix.lang }}: auto-fix Markdownlint issues"
branch: markdownlint-auto-cleanup-${{ matrix.lang }}
diff --git a/.github/workflows/pr-check-lint_content.yml b/.github/workflows/pr-check-lint_content.yml
index 420ece9b848453..db6aa54875f824 100644
--- a/.github/workflows/pr-check-lint_content.yml
+++ b/.github/workflows/pr-check-lint_content.yml
@@ -32,7 +32,7 @@ jobs:
run: |
# Use the GitHub API to get the list of changed files
# documentation: https://docs.github.com/rest/commits/commits#compare-two-commits
- DIFF_DOCUMENTS=$(gh api repos/{owner}/{repo}/compare/${{ env.BASE_SHA }}...${{ env.HEAD_SHA }} \
+ DIFF_DOCUMENTS=$(gh api repos/{owner}/{repo}/compare/${BASE_SHA}...${HEAD_SHA} \
--jq '.files | .[] | select(.status|IN("added", "modified", "renamed", "copied", "changed")) | .filename')
# filter out files that are not markdown
DIFF_DOCUMENTS=$(echo "${DIFF_DOCUMENTS}" | egrep -i ".*\.md$" | xargs)
@@ -96,7 +96,7 @@ jobs:
# https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings
EOF="$(openssl rand -hex 8)"
- files_to_lint="${{ env.DIFF_DOCUMENTS }}"
+ files_to_lint="${DIFF_DOCUMENTS}"
echo "Running markdownlint --fix"
MD_LINT_FAILED=false
@@ -160,7 +160,7 @@ jobs:
env:
REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
- echo "${{ env.MD_LINT_LOG }}" | \
+ echo "${MD_LINT_LOG}" | \
reviewdog \
-efm="%f:%l:%c %m" \
-efm="%f:%l %m" \
@@ -172,8 +172,8 @@ jobs:
if: env.FILES_MODIFIED == 'true' || env.MD_LINT_FAILED == 'true' || env.FM_LINT_FAILED == 'true'
run: |
echo -e "\nLogs from markdownlint:"
- echo "${{ env.MD_LINT_LOG }}"
+ echo "${MD_LINT_LOG}"
echo -e "\nLogs from front-matter linter:"
- echo "${{ env.FM_LINT_LOG }}"
+ echo "${FM_LINT_LOG}"
echo -e "\nPlease fix all the linting issues mentioned in above logs and in the review comments."
exit 1
diff --git a/.github/workflows/pr-test.yml b/.github/workflows/pr-test.yml
index 9d764782ab2c92..2f9710626f4117 100644
--- a/.github/workflows/pr-test.yml
+++ b/.github/workflows/pr-test.yml
@@ -42,7 +42,7 @@ jobs:
run: |
# Use the GitHub API to get the list of changed files
# documentation: https://docs.github.com/rest/commits/commits#compare-two-commits
- DIFF_DOCUMENTS=$(gh api repos/{owner}/{repo}/compare/${{ env.BASE_SHA }}...${{ env.HEAD_SHA }} \
+ DIFF_DOCUMENTS=$(gh api repos/{owner}/{repo}/compare/${BASE_SHA}...${HEAD_SHA} \
--jq '.files | .[] | select(.status|IN("added", "modified", "renamed", "copied", "changed")) | .filename')
# filter out files that are not markdown files
@@ -112,23 +112,23 @@ jobs:
working-directory: ${{ github.workspace }}/mdn/content
run: |
- mkdir -p ${{ env.BUILD_OUT_ROOT }}
+ mkdir -p ${BUILD_OUT_ROOT}
# Don't use `yarn build` (from mdn/content) because that one hardcodes
# the BUILD_OUT_ROOT and CONTENT_ROOT env vars.
- node node_modules/@mdn/yari/build/cli.js ${{ env.GIT_DIFF_CONTENT }}
+ node node_modules/@mdn/yari/build/cli.js ${GIT_DIFF_CONTENT}
echo "Disk usage size of build"
- du -sh ${{ env.BUILD_OUT_ROOT }}
+ du -sh ${BUILD_OUT_ROOT}
# Save the PR number into the build
- echo ${{ github.event.number }} > ${{ env.BUILD_OUT_ROOT }}/NR
+ echo ${{ github.event.number }} > ${BUILD_OUT_ROOT}/NR
# Download the raw diff blob and store that inside the build
# directory.
# The purpose of this is for the PR Review Companion to later
# be able to use this raw diff file for the benefit of analyzing.
- wget https://github.com/${{ github.repository }}/compare/${{ env.BASE_SHA }}...${{ env.HEAD_SHA }}.diff -O ${{ env.BUILD_OUT_ROOT }}/DIFF
+ wget https://github.com/${{ github.repository }}/compare/${BASE_SHA}...${HEAD_SHA}.diff -O ${BUILD_OUT_ROOT}/DIFF
# Set the output variable so the next job could skip if there are no assets
echo "has_assets=true" >> "$GITHUB_OUTPUT"
@@ -137,9 +137,9 @@ jobs:
if: ${{ env.GIT_DIFF_CONTENT }}
run: |
# Exclude the .map files, as they're used for debugging JS and CSS.
- rsync -a --exclude "*.map" ${{ github.workspace }}/mdn/content/node_modules/@mdn/yari/client/build/ ${{ env.BUILD_OUT_ROOT }}
+ rsync -a --exclude "*.map" ${{ github.workspace }}/mdn/content/node_modules/@mdn/yari/client/build/ ${BUILD_OUT_ROOT}
# Show the final disk usage size of the build.
- du -sh ${{ env.BUILD_OUT_ROOT }}
+ du -sh ${BUILD_OUT_ROOT}
- uses: actions/upload-artifact@v4
if: ${{ env.GIT_DIFF_CONTENT }}
@@ -154,9 +154,9 @@ jobs:
CONTENT_TRANSLATED_ROOT: ${{ github.workspace }}/files
working-directory: ${{ github.workspace }}/mdn/content
run: |
- echo ${{ env.GIT_DIFF_FILES }}
+ echo ${GIT_DIFF_FILES}
- yarn filecheck ${{ env.GIT_DIFF_FILES }}
+ yarn filecheck ${GIT_DIFF_FILES}
review:
needs: tests
diff --git a/.github/workflows/sync-translated-content.yml b/.github/workflows/sync-translated-content.yml
index caa4ac61add85a..4dff81d67da06c 100644
--- a/.github/workflows/sync-translated-content.yml
+++ b/.github/workflows/sync-translated-content.yml
@@ -90,7 +90,7 @@ jobs:
} >> "$GITHUB_ENV"
- name: Create PR with sync for ${{ matrix.lang }}
- uses: peter-evans/create-pull-request@v6
+ uses: peter-evans/create-pull-request@v7
with:
commit-message: "${{ matrix.lang }}: sync translated content"
branch: content-sync-${{ matrix.lang }}
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 8568bf437711a7..8513c932dedfb0 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -34,7 +34,7 @@ See the [Creating a pull request](#creating-a-pull-request) for more details on
If you're not certain of the changes that you want to make, [get in touch with us][]!
-> **Note:** You can click the **View the source on GitHub** or **Edit the page on GitHub** link at the bottom of an MDN page to jump directly to the page source on GitHub.
+> **Note:** You may click the **View this page on GitHub** or **Report a problem with this content** link at the bottom of an MDN page, to either jump directly to the page source or raise an issue on GitHub.
### Forking and cloning the repository
diff --git a/docs/ko/guides/glossary-guide.md b/docs/ko/guides/glossary-guide.md
index b3a7706cc4df67..b1688f2a8b6a2c 100644
--- a/docs/ko/guides/glossary-guide.md
+++ b/docs/ko/guides/glossary-guide.md
@@ -22,9 +22,9 @@
## 용어 안내서 `참고 링크` 우선 순위
-- 1. 해당 단어에 대한 의견을 나눈 PR 링크
-- 2. 적절한 ko MDN 문서 링크
-- 3. 적절한 en-us MDN 문서 링크
+1. 해당 단어에 대한 의견을 나눈 PR 링크
+2. 적절한 ko MDN 문서 링크
+3. 적절한 en-us MDN 문서 링크
## Section Title
diff --git a/docs/ko/guides/macro-guide.md b/docs/ko/guides/macro-guide.md
index 2ccd4d0ac066c1..a874074acb4f31 100644
--- a/docs/ko/guides/macro-guide.md
+++ b/docs/ko/guides/macro-guide.md
@@ -29,5 +29,3 @@ EmbedLiveSample/MacroLiveSampleError 오류 찾는 [스크립트 링크 참고](
## 매크로 수정 및 번역
MDN은 초창기에 [kuma](https://github.com/mdn/kuma) 플랫폼으로 MDN 웹 문서를 구동해왔습니다. 그 당시 사용한 많은 매크로들이 레거시로 남아 있습니다. 레거시로 남은 매크로를 [Kumascript](https://github.com/mdn/kumascript)라고 부릅니다. 현재는 [yari 저장소 내의 kumascript 폴더](https://github.com/mdn/yari/tree/main/kumascript)로 대체되어 사용되고 있습니다([참고](https://egas.tistory.com/168#%EB%AF%B8%EC%82%AC%EC%9A%A9-macro-%EC%A0%9C%EA%B1%B0)).
-
-만약 `{{DOMAttributeMethods}}` 매크로를 수정하자고 한다면 `kumascript/macros/DOMAttributeMethods.ejs`를 확인하면 됩니다([관련 PR](https://github.com/mdn/yari/pull/10502)).
diff --git a/docs/ko/guides/translation-guide.md b/docs/ko/guides/translation-guide.md
index 27cc6a6ce7a182..4014bda32b4eb9 100644
--- a/docs/ko/guides/translation-guide.md
+++ b/docs/ko/guides/translation-guide.md
@@ -41,57 +41,34 @@
| 용어 | 번역 | 참고 링크 |
| ------------- | ---------------- | ----------------------------- |
-| Note | 참고 | |
-| Warning | 경고 | |
-| Callout | 알림 | |
| Objective | 목표 | [링크][What_is_accessibility] |
| Prerequisites | 필요한 사전 지식 | [링크][What_is_accessibility] |
### 교육 과정 callout
```markdown
-> **알림:**
+> [!CALLOUT]
>
> #### 프론트엔드 웹 개발자가 되고자 하시나요?
>
-> 목표를 달성하기 위한 모든 필수 정보가 들어있는 교육 과정을 준비했습니다.
+> 프론트엔드 웹 개발자가 되고 싶지만 무엇을 먼저 배워야 할지 모르겠다면, MDN 커리큘럼을 참고해 학습 계획을 세우는 것을 추천합니다. 이 커리큘럼은 성공적인 프론트엔드 개발자가 되기 위한 필수 기술과 실습을 체계적으로 학습할 수 있는 경로를 제공하며, 추천 학습 자료도 함께 제공합니다.
>
-> [**시작하기**](/ko/docs/Learn/Front-end_web_developer)
+> [**시작하기**](/ko/curriculum/)
```
-### 카드 번역
+## GFM Alerts
-카드는 참고, 경고 그리고 알림의 세 가지 유형이 있으며, 영어 원문에서는 다음과 같이 표시됩니다.
+`> [!NOTE]`, `> [!TIP]`, `> [!IMPORTANT]`, `> [!CAUTION]`, `> [!WARNING]`은 새로 추가된 github markdown으로 영어 문법만 사용할 수 있습니다.
```markdown
-# 참고
-
-> **Note:** This is a note.
-
-# 경고
-
-> **Warning:** This is a warning.
-
-# 알림
+// bad
-> **Callout:** This is a callout.
+> [!참고]
+> ...
```
-이런 카드는 아래와 같이 번역해주시면 됩니다.
-
-```markdown
-# 참고
-
-> **참고:** 참고입니다.
-
-# 경고
-
-> **경고:** 경고입니다.
-
-# 알림
-
-> **알림:** 알림입니다.
-```
+- [[Markdown] An option to highlight a "Note" and "Warning" using blockquote (Beta)](https://github.com/orgs/community/discussions/16925)
+- [Incorrect formatting for highlighted notes in GitHub flavoured Markdown](https://github.com/prettier/prettier/issues/16454)
## 역주/역자주
diff --git a/docs/zh-cn/glossary.md b/docs/zh-cn/glossary.md
index 3bb943afe0379b..6c6faf8b8ede9e 100644
--- a/docs/zh-cn/glossary.md
+++ b/docs/zh-cn/glossary.md
@@ -58,26 +58,27 @@
## 标题/表格
-| 英文词汇 | 翻译 | 备注 | 引用来源 |
-| ---------------------- | ------------ | ------------------ | --------------------------------------------------------------------------- |
-| Accessibility concerns | 无障碍考虑 | | https://github.com/mdn/translated-content/issues/11456 |
-| Active learning | 动手练习 | | https://github.com/mdn/translated-content/pull/12696#discussion_r1164859935 |
-| Associated interfaces | 相关接口 | | |
-| Associated roles | 相关角色 | | |
-| Browser compatibility | 浏览器兼容性 | | |
-| Conclusion | 总结 | | https://github.com/mdn/translated-content/pull/13329#discussion_r1199677894 |
-| Examples | 示例 | | |
-| Exceptions | 异常 | | |
-| Formal Definition | 形式定义 | | https://zh.wikipedia.org/zh-cn/形式文法 |
-| Formal syntax | 形式语法 | | https://zh.wikipedia.org/zh-cn/形式文法 |
-| Objective | 目标 | 在学习区表格中使用 | |
-| Parameters | 参数 | | |
-| Prerequisites | 前提 | 在学习区表格中使用 | |
-| See also | 参见 | | |
-| Specifications | 规范 | | |
-| Technical summary | 技术概要 | | https://github.com/mdn/translated-content/issues/11456 |
-| Test your skills | 技能测试 | | |
-| Usage notes | 使用说明 | | https://github.com/mdn/translated-content/pull/12600#discussion_r1161045585 |
+| 英文词汇 | 翻译 | 备注 | 引用来源 |
+| ---------------------- | ------------ | ------------------ | ---------------------------------------------------------------------------- |
+| Accessibility concerns | 无障碍考虑 | | https://github.com/mdn/translated-content/issues/11456 |
+| Active learning | 动手练习 | | https://github.com/mdn/translated-content/pull/12696#discussion_r1164859935 |
+| Associated interfaces | 相关接口 | | |
+| Associated roles | 相关角色 | | |
+| Browser compatibility | 浏览器兼容性 | | |
+| Conclusion | 总结 | | https://github.com/mdn/translated-content/pull/13329#discussion_r1199677894 |
+| Examples | 示例 | | |
+| Exceptions | 异常 | | |
+| Formal Definition | 形式定义 | | https://zh.wikipedia.org/zh-cn/形式文法 |
+| Formal syntax | 形式语法 | | https://zh.wikipedia.org/zh-cn/形式文法 |
+| Objective | 目标 | 在学习区表格中使用 | |
+| Parameters | 参数 | | |
+| Prerequisites | 前提 | 在学习区表格中使用 | |
+| See also | 参见 | | |
+| Specifications | 规范 | | |
+| Technical summary | 技术概要 | | https://github.com/mdn/translated-content/issues/11456 |
+| Test your skills | 技能测试 | | |
+| Usage context | 使用上下文 | | https://github.com/mdn/translated-content/pull/23257#issuecomment-2309852450 |
+| Usage notes | 使用说明 | | https://github.com/mdn/translated-content/pull/12600#discussion_r1161045585 |
## 通用术语
diff --git a/files/es/_redirects.txt b/files/es/_redirects.txt
index 9008c9944159d8..92ee1067e9a079 100644
--- a/files/es/_redirects.txt
+++ b/files/es/_redirects.txt
@@ -1686,6 +1686,7 @@
/es/docs/Web/API/Media_Streams_API /es/docs/Web/API/Media_Capture_and_Streams_API
/es/docs/Web/API/Media_Streams_API/Taking_still_photos /es/docs/Web/API/Media_Capture_and_Streams_API/Taking_still_photos
/es/docs/Web/API/Navigator.getUserMedia /es/docs/Web/API/Navigator/getUserMedia
+/es/docs/Web/API/Navigator/registerProtocolHandler/Web-based_protocol_handlers /es/docs/conflicting/Web/API/Navigator/registerProtocolHandler
/es/docs/Web/API/NavigatorConcurrentHardware /es/docs/Web/API/Navigator
/es/docs/Web/API/NavigatorConcurrentHardware/hardwareConcurrency /es/docs/Web/API/Navigator/hardwareConcurrency
/es/docs/Web/API/NavigatorGeolocation/geolocation /es/docs/Web/API/Navigator/geolocation
@@ -1737,7 +1738,7 @@
/es/docs/Web/API/WindowOrWorkerGlobalScope/caches /es/docs/Web/API/Window/caches
/es/docs/Web/API/WindowOrWorkerGlobalScope/clearInterval /es/docs/Web/API/clearInterval
/es/docs/Web/API/WindowOrWorkerGlobalScope/clearTimeout /es/docs/Web/API/clearTimeout
-/es/docs/Web/API/WindowOrWorkerGlobalScope/createImageBitmap /es/docs/Web/API/createImageBitmap
+/es/docs/Web/API/WindowOrWorkerGlobalScope/createImageBitmap /es/docs/Web/API/Window/createImageBitmap
/es/docs/Web/API/WindowOrWorkerGlobalScope/fetch /es/docs/Web/API/Window/fetch
/es/docs/Web/API/WindowOrWorkerGlobalScope/indexedDB /es/docs/Web/API/Window/indexedDB
/es/docs/Web/API/WindowOrWorkerGlobalScope/isSecureContext /es/docs/Web/API/Window/isSecureContext
@@ -1763,9 +1764,10 @@
/es/docs/Web/API/console/log /es/docs/Web/API/console/log_static
/es/docs/Web/API/console/table /es/docs/Web/API/console/table_static
/es/docs/Web/API/console/time /es/docs/Web/API/console/time_static
-/es/docs/Web/API/console/timeEnd /es/docs/Web/API/console/timeend_static
+/es/docs/Web/API/console/timeEnd /es/docs/Web/API/console/timeEnd_static
/es/docs/Web/API/console/trace /es/docs/Web/API/console/trace_static
/es/docs/Web/API/console/warn /es/docs/Web/API/console/warn_static
+/es/docs/Web/API/createImageBitmap /es/docs/Web/API/Window/createImageBitmap
/es/docs/Web/API/crypto_property /es/docs/Web/API/Window/crypto
/es/docs/Web/API/event.defaultPrevented /es/docs/Web/API/Event/defaultPrevented
/es/docs/Web/API/event.which /es/docs/Web/API/UIEvent/which
@@ -1882,6 +1884,7 @@
/es/docs/Web/CSS/CSS_Positioning/entendiendo_z_index/ejemplo_3_del_contexto_de_apilamiento /es/docs/Web/CSS/CSS_positioned_layout/Understanding_z-index/Stacking_context_example_3
/es/docs/Web/CSS/CSS_Properties_Reference /es/docs/orphaned/Web/CSS/CSS_Properties_Reference
/es/docs/Web/CSS/CSS_Reglas_Condicionales /es/docs/Web/CSS/CSS_conditional_rules
+/es/docs/Web/CSS/CSS_animations/Tips /es/docs/Web/API/Web_Animations_API/Tips
/es/docs/Web/CSS/CSS_container_queries /es/docs/Web/CSS/CSS_containment/Container_queries
/es/docs/Web/CSS/CSS_flexible_box_layout/Backwards_compatibility_of_flexbox /es/docs/conflicting/Glossary/Flexbox
/es/docs/Web/CSS/Child_selectors /es/docs/Web/CSS/Child_combinator
@@ -1930,7 +1933,7 @@
/es/docs/Web/CSS/env() /es/docs/Web/CSS/env
/es/docs/Web/CSS/filter-function/blur() /es/docs/Web/CSS/filter-function/blur
/es/docs/Web/CSS/filter-function/brightness() /es/docs/Web/CSS/filter-function/brightness
-/es/docs/Web/CSS/filter-function/url /es/docs/Web/CSS/url
+/es/docs/Web/CSS/filter-function/url /es/docs/Web/CSS/url_value
/es/docs/Web/CSS/filtro /es/docs/Web/CSS/filter
/es/docs/Web/CSS/grid-column-gap /es/docs/Web/CSS/column-gap
/es/docs/Web/CSS/grid-gap /es/docs/Web/CSS/gap
@@ -1949,7 +1952,8 @@
/es/docs/Web/CSS/transform-function/translate() /es/docs/Web/CSS/transform-function/translate
/es/docs/Web/CSS/transform-function/translateY() /es/docs/Web/CSS/transform-function/translateY
/es/docs/Web/CSS/transform-function/translateZ() /es/docs/Web/CSS/transform-function/translateZ
-/es/docs/Web/CSS/url() /es/docs/Web/CSS/url
+/es/docs/Web/CSS/url /es/docs/Web/CSS/url_value
+/es/docs/Web/CSS/url() /es/docs/Web/CSS/url_value
/es/docs/Web/CSS/var() /es/docs/Web/CSS/var
/es/docs/Web/Demos /es/docs/orphaned/Web/Demos
/es/docs/Web/Demos_of_open_web_technologies /es/docs/orphaned/Web/Demos
@@ -2196,10 +2200,17 @@
/es/docs/Web/HTML/microformatos /es/docs/Web/HTML/microformats
/es/docs/Web/HTML/Índice /es/docs/Web/HTML
/es/docs/Web/HTTP/Access_control_CORS /es/docs/Web/HTTP/CORS
-/es/docs/Web/HTTP/Basics_of_HTTP/Data_URIs /es/docs/Web/HTTP/Basics_of_HTTP/Data_URLs
-/es/docs/Web/HTTP/Basics_of_HTTP/Datos_URIs /es/docs/Web/HTTP/Basics_of_HTTP/Data_URLs
-/es/docs/Web/HTTP/Basics_of_HTTP/Identificación_recursos_en_la_Web /es/docs/Web/HTTP/Basics_of_HTTP/Identifying_resources_on_the_Web
-/es/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Lista_completa_de_tipos_MIME /es/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types
+/es/docs/Web/HTTP/Basics_of_HTTP /es/docs/conflicting/Web/HTTP
+/es/docs/Web/HTTP/Basics_of_HTTP/Choosing_between_www_and_non-www_URLs /es/docs/Web/URI/Authority/Choosing_between_www_and_non-www_URLs
+/es/docs/Web/HTTP/Basics_of_HTTP/Data_URIs /es/docs/Web/URI/Schemes/data
+/es/docs/Web/HTTP/Basics_of_HTTP/Data_URLs /es/docs/Web/URI/Schemes/data
+/es/docs/Web/HTTP/Basics_of_HTTP/Datos_URIs /es/docs/Web/URI/Schemes/data
+/es/docs/Web/HTTP/Basics_of_HTTP/Evolution_of_HTTP /es/docs/Web/HTTP/Evolution_of_HTTP
+/es/docs/Web/HTTP/Basics_of_HTTP/Identificación_recursos_en_la_Web /es/docs/orphaned/Web/HTTP/Basics_of_HTTP/Identifying_resources_on_the_Web
+/es/docs/Web/HTTP/Basics_of_HTTP/Identifying_resources_on_the_Web /es/docs/orphaned/Web/HTTP/Basics_of_HTTP/Identifying_resources_on_the_Web
+/es/docs/Web/HTTP/Basics_of_HTTP/MIME_types /es/docs/Web/HTTP/MIME_types
+/es/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types /es/docs/Web/HTTP/MIME_types/Common_types
+/es/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Lista_completa_de_tipos_MIME /es/docs/Web/HTTP/MIME_types/Common_types
/es/docs/Web/HTTP/Gestion_de_la_conexion_en_HTTP_1.x /es/docs/Web/HTTP/Connection_management_in_HTTP_1.x
/es/docs/Web/HTTP/Peticiones_condicionales /es/docs/Web/HTTP/Conditional_requests
/es/docs/Web/HTTP/Sesión /es/docs/Web/HTTP/Session
@@ -2996,7 +3007,7 @@
/es/docs/conflicting/web/api/file/name /es/docs/web/api/file/name
/es/docs/conflicting/web/javascript/reference/deprecated_and_obsolete_features /es/docs/web/javascript/reference/deprecated_and_obsolete_features
/es/docs/conflicting/web/javascript/reference/deprecated_and_obsolete_features_a91664716c4f7753074ac042780999e0 /es/docs/web/javascript/reference/deprecated_and_obsolete_features
-/es/docs/controladores_protocolos_web /es/docs/Web/API/Navigator/registerProtocolHandler/Web-based_protocol_handlers
+/es/docs/controladores_protocolos_web /es/docs/conflicting/Web/API/Navigator/registerProtocolHandler
/es/docs/en /en-US/
/es/docs/firefox_Web_Developer_(externo) https://addons.mozilla.org/firefox/60/
/es/docs/orphaned/MDN/Tools https://github.com/mdn/yari/tree/main/docs
diff --git a/files/es/_wikihistory.json b/files/es/_wikihistory.json
index 6175879ac7affd..3bc79705abf482 100644
--- a/files/es/_wikihistory.json
+++ b/files/es/_wikihistory.json
@@ -4744,10 +4744,6 @@
"modified": "2019-03-23T23:53:04.318Z",
"contributors": ["fscholz", "khalid32", "Nukeador", "HenryGR", "Mgjbot"]
},
- "Web/API/Navigator/registerProtocolHandler/Web-based_protocol_handlers": {
- "modified": "2019-03-23T22:06:43.969Z",
- "contributors": ["chrisdavidmills", "AngelFQC"]
- },
"Web/API/Navigator/vibrate": {
"modified": "2019-03-23T23:32:23.651Z",
"contributors": ["fscholz", "jsx", "mmednik"]
@@ -5340,6 +5336,10 @@
"modified": "2020-10-12T08:06:57.683Z",
"contributors": ["SphinxKnight", "MarioA19", "geryescalier", "karlalhdz"]
},
+ "Web/API/Web_Animations_API/Tips": {
+ "modified": "2020-08-16T13:05:40.057Z",
+ "contributors": ["CamilaAchury", "SphinxKnight", "AlbertoVargasMoreno"]
+ },
"Web/API/Web_Audio_API": {
"modified": "2019-03-23T23:31:19.634Z",
"contributors": ["estebanborai", "AngelFQC", "Pau_Ilargia", "maedca"]
@@ -5472,6 +5472,10 @@
"modified": "2019-03-23T22:45:47.266Z",
"contributors": ["julian3xl"]
},
+ "Web/API/Window/createImageBitmap": {
+ "modified": "2020-10-15T22:14:17.553Z",
+ "contributors": ["Bumxu"]
+ },
"Web/API/Window/crypto": {
"modified": "2020-02-12T20:26:38.795Z",
"contributors": ["joseluisq", "AlePerez92", "victorjavierss"]
@@ -5751,14 +5755,14 @@
"modified": "2019-03-23T22:20:30.589Z",
"contributors": ["AlePerez92"]
},
+ "Web/API/console/timeEnd_static": {
+ "modified": "2020-10-15T22:13:11.825Z",
+ "contributors": ["xlhector10"]
+ },
"Web/API/console/time_static": {
"modified": "2019-03-18T21:42:22.745Z",
"contributors": ["jotaoncode"]
},
- "Web/API/console/timeend_static": {
- "modified": "2020-10-15T22:13:11.825Z",
- "contributors": ["xlhector10"]
- },
"Web/API/console/trace_static": {
"modified": "2019-03-23T22:22:51.545Z",
"contributors": ["Axl-Nolasco"]
@@ -5767,10 +5771,6 @@
"modified": "2020-10-15T21:53:36.780Z",
"contributors": ["juanluisrp", "oderflaj"]
},
- "Web/API/createImageBitmap": {
- "modified": "2020-10-15T22:14:17.553Z",
- "contributors": ["Bumxu"]
- },
"Web/API/notification/icon": {
"modified": "2019-03-23T22:59:32.492Z",
"contributors": ["joxhker"]
@@ -6535,10 +6535,6 @@
"modified": "2019-03-18T21:35:39.343Z",
"contributors": ["lajaso"]
},
- "Web/CSS/CSS_animations/Tips": {
- "modified": "2020-08-16T13:05:40.057Z",
- "contributors": ["CamilaAchury", "SphinxKnight", "AlbertoVargasMoreno"]
- },
"Web/CSS/CSS_animations/Using_CSS_animations": {
"modified": "2020-07-06T16:16:21.887Z",
"contributors": [
@@ -8277,7 +8273,7 @@
"modified": "2020-10-15T21:58:20.034Z",
"contributors": ["juan-ferrer-toribio"]
},
- "Web/CSS/url": {
+ "Web/CSS/url_value": {
"modified": "2020-01-10T13:46:46.404Z",
"contributors": ["roocce"]
},
@@ -9419,46 +9415,6 @@
"DavidPeniafiel"
]
},
- "Web/HTTP/Basics_of_HTTP": {
- "modified": "2020-04-20T02:59:31.392Z",
- "contributors": [
- "obed3113",
- "sanxofon",
- "Sergio_Gonzalez_Collado",
- "cissoid"
- ]
- },
- "Web/HTTP/Basics_of_HTTP/Choosing_between_www_and_non-www_URLs": {
- "modified": "2019-03-18T21:22:07.450Z",
- "contributors": ["Adorta4", "carlosgocereceda"]
- },
- "Web/HTTP/Basics_of_HTTP/Data_URLs": {
- "modified": "2019-03-23T22:24:54.977Z",
- "contributors": ["Sergio_Gonzalez_Collado", "AzazelN28", "uclides"]
- },
- "Web/HTTP/Basics_of_HTTP/Evolution_of_HTTP": {
- "modified": "2019-03-23T22:10:11.567Z",
- "contributors": ["Sergio_Gonzalez_Collado", "ChrisMHM"]
- },
- "Web/HTTP/Basics_of_HTTP/Identifying_resources_on_the_Web": {
- "modified": "2019-03-23T22:24:51.387Z",
- "contributors": ["DaniNz", "Sergio_Gonzalez_Collado", "ChrisMHM", "uclides"]
- },
- "Web/HTTP/Basics_of_HTTP/MIME_types": {
- "modified": "2019-11-18T08:03:54.325Z",
- "contributors": [
- "IsaacAaron",
- "sanxofon",
- "Sergio_Gonzalez_Collado",
- "kevinmont",
- "juanrarodriguez18",
- "strattadb"
- ]
- },
- "Web/HTTP/Basics_of_HTTP/MIME_types/Common_types": {
- "modified": "2020-02-28T13:10:45.613Z",
- "contributors": ["chrisdavidmills", "sanxofon", "franklevel", "gabrielnoe"]
- },
"Web/HTTP/CORS": {
"modified": "2020-08-10T16:23:20.546Z",
"contributors": [
@@ -9537,6 +9493,10 @@
"omertafox"
]
},
+ "Web/HTTP/Evolution_of_HTTP": {
+ "modified": "2019-03-23T22:10:11.567Z",
+ "contributors": ["Sergio_Gonzalez_Collado", "ChrisMHM"]
+ },
"Web/HTTP/Headers": {
"modified": "2019-12-10T13:29:15.931Z",
"contributors": [
@@ -9735,6 +9695,21 @@
"modified": "2020-10-15T21:59:06.897Z",
"contributors": ["JulioMoreyra", "francinysalles", "tonialfaro"]
},
+ "Web/HTTP/MIME_types": {
+ "modified": "2019-11-18T08:03:54.325Z",
+ "contributors": [
+ "IsaacAaron",
+ "sanxofon",
+ "Sergio_Gonzalez_Collado",
+ "kevinmont",
+ "juanrarodriguez18",
+ "strattadb"
+ ]
+ },
+ "Web/HTTP/MIME_types/Common_types": {
+ "modified": "2020-02-28T13:10:45.613Z",
+ "contributors": ["chrisdavidmills", "sanxofon", "franklevel", "gabrielnoe"]
+ },
"Web/HTTP/Messages": {
"modified": "2019-11-12T11:40:26.816Z",
"contributors": [
@@ -13453,6 +13428,14 @@
"diegogaysaez"
]
},
+ "Web/URI/Authority/Choosing_between_www_and_non-www_URLs": {
+ "modified": "2019-03-18T21:22:07.450Z",
+ "contributors": ["Adorta4", "carlosgocereceda"]
+ },
+ "Web/URI/Schemes/data": {
+ "modified": "2019-03-23T22:24:54.977Z",
+ "contributors": ["Sergio_Gonzalez_Collado", "AzazelN28", "uclides"]
+ },
"Web/XML/Parsing_and_serializing_XML": {
"modified": "2019-03-23T22:10:22.365Z",
"contributors": ["FenixAlive"]
@@ -14046,6 +14029,10 @@
"modified": "2019-03-18T21:11:08.379Z",
"contributors": ["duduindo", "teoli", "semptrion", "CHORVAT", "inma_610"]
},
+ "conflicting/Web/API/Navigator/registerProtocolHandler": {
+ "modified": "2019-03-23T22:06:43.969Z",
+ "contributors": ["chrisdavidmills", "AngelFQC"]
+ },
"conflicting/Web/API/Node": {
"modified": "2019-03-23T22:08:57.260Z",
"contributors": ["tureey"]
@@ -14292,6 +14279,15 @@
"Nukeador"
]
},
+ "conflicting/Web/HTTP": {
+ "modified": "2020-04-20T02:59:31.392Z",
+ "contributors": [
+ "obed3113",
+ "sanxofon",
+ "Sergio_Gonzalez_Collado",
+ "cissoid"
+ ]
+ },
"conflicting/Web/HTTP/Basics_of_HTTP/MIME_types": {
"modified": "2019-01-16T15:43:53.805Z",
"contributors": [
@@ -15330,6 +15326,10 @@
"modified": "2019-03-23T22:46:15.359Z",
"contributors": ["juanbrujo", "raecillacastellana", "vltamara"]
},
+ "orphaned/Web/HTTP/Basics_of_HTTP/Identifying_resources_on_the_Web": {
+ "modified": "2019-03-23T22:24:51.387Z",
+ "contributors": ["DaniNz", "Sergio_Gonzalez_Collado", "ChrisMHM", "uclides"]
+ },
"orphaned/Web/JavaScript/Reference/Errors/Undefined_prop": {
"modified": "2020-03-12T19:47:46.684Z",
"contributors": ["antixsuperstar"]
diff --git a/files/es/web/api/navigator/registerprotocolhandler/web-based_protocol_handlers/index.md b/files/es/conflicting/web/api/navigator/registerprotocolhandler/index.md
similarity index 97%
rename from files/es/web/api/navigator/registerprotocolhandler/web-based_protocol_handlers/index.md
rename to files/es/conflicting/web/api/navigator/registerprotocolhandler/index.md
index f38b1e28cfdb25..43f0f427ba2c10 100644
--- a/files/es/web/api/navigator/registerprotocolhandler/web-based_protocol_handlers/index.md
+++ b/files/es/conflicting/web/api/navigator/registerprotocolhandler/index.md
@@ -1,6 +1,7 @@
---
title: Controladores de protocolos basados en web
-slug: Web/API/Navigator/registerProtocolHandler/Web-based_protocol_handlers
+slug: conflicting/Web/API/Navigator/registerProtocolHandler
+original_slug: Web/API/Navigator/registerProtocolHandler/Web-based_protocol_handlers
---
## Antecedentes
diff --git a/files/es/web/http/basics_of_http/index.md b/files/es/conflicting/web/http/index.md
similarity index 98%
rename from files/es/web/http/basics_of_http/index.md
rename to files/es/conflicting/web/http/index.md
index 89eb19f963bab5..0725dbfefbb528 100644
--- a/files/es/web/http/basics_of_http/index.md
+++ b/files/es/conflicting/web/http/index.md
@@ -1,6 +1,7 @@
---
title: Conceptos básicos de HTTP
-slug: Web/HTTP/Basics_of_HTTP
+slug: conflicting/Web/HTTP
+original_slug: Web/HTTP/Basics_of_HTTP
---
{{HTTPSidebar}}
diff --git a/files/es/learn/common_questions/design_and_accessibility/common_web_layouts/index.md b/files/es/learn/common_questions/design_and_accessibility/common_web_layouts/index.md
index 99d13a1cb97e16..30191759ae307f 100644
--- a/files/es/learn/common_questions/design_and_accessibility/common_web_layouts/index.md
+++ b/files/es/learn/common_questions/design_and_accessibility/common_web_layouts/index.md
@@ -1,28 +1,30 @@
---
title: ¿Qué contienen los diseños web comunes?
slug: Learn/Common_questions/Design_and_accessibility/Common_web_layouts
+l10n:
+ sourceCommit: 530c1f54e63834411aa38789b1ac82e3831c4dfa
---
{{QuicklinksWithSubPages("Learn/Common_questions")}}
-Cuando diseña páginas para su sitio web es bueno tener una idea de los diseños más comunes.
+Cuando diseñas páginas para tú sitio web es bueno tener una idea de los diseños más comunes.
-
+
Prerrequisitos:
- Asegúrese que usted ya ha pensado sobre
- lo que quiere lograrlo que quieres lograr
- con su proyecto web.
+ con tú proyecto web.
Objetivo:
- Aprender dónde colocar las cosas en sus páginas web, y cómo hacerlo.
+ Aprender dónde colocar las cosas en tus páginas web, y cómo hacerlo.
@@ -30,9 +32,9 @@ Cuando diseña páginas para su sitio web es bueno tener una idea de los diseño
## Resumen
-Existe una razón para que hablemos sobre diseño web. Se comienza con una página en blanco, y se pueden tomar muchas direcciones. Si no tienes mucha experiencia, comenzar con una página en blanco pudiera ser un poco temible. Nosotros tenemos alrededor de 25 años de experiencia y te daremos algunas reglas básicas para ayudarte a diseñar tu sitio.
+Existe una razón para que hablemos sobre diseño web. Comienzas con una página en blanco, y puedes tomar muchas direcciones. Y si no tienes mucha experiencia, comenzar con una página en blanco puede ser un poco intimidante. Nosotros tenemos alrededor de 25 años de experiencia y te daremos algunas reglas básicas para ayudarte a diseñar tu sitio.
-Aún ahora con el nuevo enfoque de la web para móviles, la mayoría de las páginas web principales son construídas a partir de las siguientes partes:
+Aún ahora con el nuevo enfoque de la web para móviles, la mayoría de las páginas web convencionales son construídas a partir de las siguientes partes:
- Encabezado
- : Visible en la parte superior de cada página de un sitio. Contiene información relevante para todas las páginas (como el nombre del sitio o el logo) y un sistema de navegación fácil de usar.
@@ -63,11 +65,11 @@ La verdadera diversión comienza cuando empiezas a mezclarlos todos juntos.
Estos son solo ejemplos y eres bastante libre de diseñar las cosas como quieras. Puedes notar que mientras el contenido se puede mover alrededor de la pantalla, siempre se mantiene el encabezado (1) en la parte superior y el pie de página (2) en la parte inferior. Además, el contenido principal (A) es lo más importante, así que dale la mayor parte del espacio.
-Estas son reglas del juego que puedes aprovechar. Desde luego, existen diseños complejos y excepciones. En otros artículos discutiremos cómo diseñar sitios responsivos (sitios que cambian en dependencia del tamaño de la pantalla) y sitios cuyos diseños varían entre las páginas. Por ahora, es mejor mantener tu diseño consistente en todo tu sitio.
+Estas son reglas generales que puedes aprovechar. Desde luego, existen diseños complejos y excepciones. En otros artículos discutiremos cómo diseñar sitios responsivos (sitios que cambian dependiendo del tamaño de la pantalla) y sitios cuyos diseños varían entre las páginas. Por ahora, es mejor mantener tu diseño consistente en todo tu sitio.
## Aprendizaje activo
-_Aún no hay aprendizaje activo disponible. [Por favor, considere contribuir](/es/docs/MDN/Getting_started)._
+_Aún no hay aprendizaje activo disponible. [Por favor, considere contribuir](/es/docs/MDN/Community/Contributing/Getting_started)._
## Profundización
@@ -83,7 +85,7 @@ Bastante sencillo. Sólo recuerda que muchas personas navegarán por tu sitio de
### Diseño de dos columnas
-**[Abduzeedo](http://abduzeedo.com/typography-mania-261)**, un simple diseño de blog. Los blogs usualmente tienen dos columnas, una para el contenido principal que es más ancha y otra más estrecha para el contenido secundario (como widgets, niveles de navegación secundarios y anuncios).
+Los blogs usualmente tienen dos columnas, una para el contenido principal que es más ancha y otra más estrecha para el contenido secundario (como widgets, niveles de navegación secundarios y anuncios).
![Example of a 2 column layout for a blog](screenshot-blog.jpg) ![A 2 column layout with the main content on the left column](screenshot-blog-overlay.jpg)
@@ -91,11 +93,11 @@ En este ejemplo, mira la imagen (B1) justo debajo del encabezado. Está relacion
### Es una trampa
-**[MICA](http://www.mica.edu/About_MICA.html)**. Este es un poco más complicado. Parece un diseño de tres columnas...
+**[MICA](http://www.mica.edu/About_MICA.html)**. Este es un poco más complicado. Parece un diseño de tres columnas:
![Example of a false 3 columns layout](screenshot-education.jpg) ![It looks like a 3 columns layout but actually, the aside content is floating around.](screenshot-education-overlay.jpg)
-...pero no lo es. B1 y B2 flotan alrededor del contenido principal. Recuerda esa palabra "float"--te acordarás cuando empieces a aprender sobre {{Glossary("CSS")}}.
+Pero no lo es. B1 y B2 flotan alrededor del contenido principal. Recuerda esa palabra "float"--te acordarás cuando empieces a aprender sobre {{Glossary("CSS")}}.
¿Por qué pensarías que es un diseño de tres columnas? Porque la imagen en la parte superior derecha está en forma de L, porque B1 parece una columna sosteniendo el conenido principal desplazado, y porque la "M" y la "I" del logo MICA crean una línea de fuerza vertical.
@@ -103,10 +105,10 @@ Este es un buen ejemplo de diseño clásico que admite cierta creatividad. Los d
### Un diseño mucho más complicado
-**La [Opera de Paris](https://www.operadeparis.fr/en/saison-2014-2015/opera/la-boheme-puccini).**
+**La Opera de Paris**.
![An example of a tricky layout.](screenshot-opera.jpg) ![This is a 2 column layout but the header is overlaping the main content.](screenshot-opera-overlay.jpg)
-Básicamente un diseño de dos columnas, pero notarás muchos ajustes por aquí y por allá que rompen visualmente el diseño. Especialmente, el encabezado se superposiciona a la imagen del contenido principal. La manera en que la curva del menú del encabezado se une con la curva en el fondo de la imagen, hacen que el encabezado y el contenido principal parezcan un solo componente a pesar de que son técnicamente completamente distintos.
+Básicamente un diseño de dos columnas, pero notarás muchos ajustes por aquí y por allá que visualmente rompen el diseño. Especialmente, el encabezado se superposiciona a la imagen del contenido principal. La manera en que la curva del menú del encabezado se une con la curva en el fondo de la imagen, hacen que el encabezado y el contenido principal parezcan un solo componente a pesar de que son técnicamente completamente distintos. El ejemplo de la Opera parece más complejo que el de MICA, pero en realidad es más fácil de implementar (bueno, "fácil" es un concepto relativo).
-Como ves, puedes crear maravillosos sitios web incluso sólo con diseños básicos. Échale una mirada a tus propios sitos web favoritos y pregúntate a ti mismo, ¿dónde está el encabezado, el pie de página, el contenido principal y el contenido secundario? Esto te inspirará para tu propio diseño y te dará buenas pistas sobre para cuáles diseños funciona y para cuáles no.
+Como ves, puedes crear maravillosos sitios web incluso sólo con diseños básicos. Échale una mirada a tus sitos web favoritos y pregúntate a ti mismo, ¿dónde está el encabezado, el pie de página, el contenido principal y el contenido secundario? Esto te inspirará para tu propio diseño y te dará buenas pistas sobre para cuáles diseños funciona y para cuáles no.
diff --git a/files/es/learn/common_questions/tools_and_setup/what_are_browser_developer_tools/index.md b/files/es/learn/common_questions/tools_and_setup/what_are_browser_developer_tools/index.md
index 636f1e1d72f122..a85ab0474f4bfe 100644
--- a/files/es/learn/common_questions/tools_and_setup/what_are_browser_developer_tools/index.md
+++ b/files/es/learn/common_questions/tools_and_setup/what_are_browser_developer_tools/index.md
@@ -227,7 +227,7 @@ Obtén más información sobre la consola de JavaScript en diferentes navegadore
- [Consola Web de Firefox.](/es/docs/Tools/Web_Console)
- [Consola de JavaScript Edge.](https://docs.microsoft.com/es-es/microsoft-edge/devtools-guide-chromium)
-- [Consola JavaScript de Chrome.](https://developer.chrome.com/devtools/docs/console) (el inspector de Opera funciona de la misma manera)
+- [Consola JavaScript de Chrome.](https://developer.chrome.com/docs/devtools/console/) (el inspector de Opera funciona de la misma manera)
- [Consola en Safari.](https://developer.apple.com/library/safari/documentation/AppleApplications/Conceptual/Safari_Developer_Guide/Console/Console.html#//apple_ref/doc/uid/TP40007874-CH6-SW1)
## Ve también
diff --git a/files/es/learn/common_questions/web_mechanics/pages_sites_servers_and_search_engines/index.md b/files/es/learn/common_questions/web_mechanics/pages_sites_servers_and_search_engines/index.md
index 04c01fd0868190..21d9737960e25f 100644
--- a/files/es/learn/common_questions/web_mechanics/pages_sites_servers_and_search_engines/index.md
+++ b/files/es/learn/common_questions/web_mechanics/pages_sites_servers_and_search_engines/index.md
@@ -1,6 +1,8 @@
---
title: ¿Cuál es la diferencia entre la página web, el sitio web, el servidor web y el motor de búsqueda?
slug: Learn/Common_questions/Web_mechanics/Pages_sites_servers_and_search_engines
+l10n:
+ sourceCommit: 9de3d03957f1d66f02f45400a6981372aa368c1f
---
{{QuicklinksWithSubPages("Learn/Common_questions")}}
@@ -30,12 +32,12 @@ En este artículo se describen varios conceptos referidos a la web: Páginas web
## Resumen
-Como cualquier área de conocimiento, la web viene con un montón de jerga. No te preocupes, no te abrumaremos con todo esto (tenemos un glosario por si tienes curiosidad). Sin embargo, hay unos términos básicos que necesitas entender al principio, ya que escucharás estas expresiones todo el tiempo mientras lees. A veces es fácil de confundir estos términos, puesto que hacen referencia a funcionalidades relacionadas pero diferentes. De hecho, a veces veras estos términos mal utilizados en las noticias y en otros lugares ¡por lo que llegar a mezclarlos es entendible!
+Como cualquier área de conocimiento, la web viene con un montón de jerga. No te preocupes, no te abrumaremos con todo esto (tenemos un [glosario](/es/docs/Glossary) por si tienes curiosidad). Sin embargo, hay unos términos básicos que necesitas entender al principio, ya que escucharás estas expresiones todo el tiempo mientras lees. A veces es fácil de confundir estos términos, puesto que hacen referencia a funcionalidades relacionadas pero diferentes. De hecho, a veces veras estos términos mal utilizados en las noticias y en otros lugares ¡por lo que llegar a mezclarlos es entendible!
Cubriremos estos términos y tecnologías con más detalle mientras exploramos más, pero estas definiciones rápidas serán un gran comienzo para ti:
- Página web
- - : Un documento que se puede mostrar en un navegador web como Firefox, Google Chrome, Microsoft Internet Explorer o Edge, o Safary de Apple. A menudo se las denomina simplemente "páginas".
+ - : Un documento que se puede mostrar en un navegador web como Firefox, Google Chrome, Microsoft Edge, o Safari de Apple. A menudo se las denomina simplemente "páginas".
- Sitio web
- : Es una colección de páginas web agrupadas y que normalmente se conectan entre sí de varias maneras. A menudo llamados simplemente "sitios".
- Servidor web
@@ -56,7 +58,9 @@ Vamos a comparar la biblioteca con un servidor web:
- Los libros en cada sección son como páginas web. Un sitio web puede tener varias páginas web, por ejemplo, la sección de Ciencias (el sitio web) tendrá libros sobre calor, sonido, termodinámica, estadísticas, etc. (las páginas web). Cada una de las páginas web puede ser encontrada en una ubicación única (URL).
- El índice de búsqueda es como el motor de búsqueda. Cada libro tiene su propia ubicación única en la biblioteca (dos libros no se pueden mantener en el mismo lugar) que se especifica mediante el número de catálogo.
-_No esta disponible aprendizaje activo aun. [Por favor, considere la posibilidad de contribuir](/es/docs/MDN/Getting_started)._
+## Aprendizaje activo
+
+_Todavía no hay ningún aprendizaje activo disponible. [Por favor, considere la posibilidad de contribuir](/es/docs/MDN/Getting_started)._
## Profundizando
@@ -64,30 +68,32 @@ Entonces, vamos a profundizar en cómo estos cuatro términos serán relacionado
### Página web
-Una **página web** es un simple documento que puede ser mostrado por un {{Glossary("browser")}}. Estos documentos están escritos en lenguaje {{Glossary("HTML")}} (el que veremos en más detalle en [otros artículos](/es/docs/Web/HTML)). Una página web puede incluir una variedad de diferentes tipos de recursos, tales como:
+Una **página web** es un simple documento que puede ser mostrado por un {{Glossary("browser", "navegador")}}. Estos documentos están escritos en lenguaje {{Glossary("HTML")}} (el que veremos en más detalle en [otros artículos](/es/docs/Web/HTML)). Una página web puede incluir una variedad de diferentes tipos de recursos, tales como:
- _información de estilos_ — para controlar la apariencia de una página
- _scripts_ — que agrega interactividad a la página
- _medios_ — imágenes, sonidos, y vídeos.
> [!NOTE]
-> Los buscadores pueden mostrar distintos tipos de documentos, como archivos {{Glossary("PDF")}} o imágenes. Pero el término **página web** específicamente hace referencia a documentos HTML. Para los demás, usaremos sólo el termino **document**(documento).
+> Los navegadores pueden mostrar distintos tipos de documentos, como archivos {{Glossary("PDF")}} o imágenes. Pero el término **página web** específicamente hace referencia a documentos HTML. Para los demás, usaremos sólo el término **document**(documento).
-Todas las páginas web disponibles en la red son accesibles mediante una dirección única. Para acceder a una página, simplemente escribe su direcciones en la barra de búsqueda de tu navegador:
+Todas las páginas web disponibles en la red son accesibles mediante una dirección única. Para acceder a una página, simplemente escribe su dirección en la barra de búsqueda de tu navegador:
![Ejemplo de dirección de una página web en la barra de direcciones del navegador](web-page.jpg)
-Un _sitio web_ es una colección de páginas web vinculadas (más sus recursos asociados) que comparten un único nombre de dominio. Cada página web de un sitio web determinado proporciona enlaces explícitos —habitualmente en forma de porciones del texto en que se puede hacer clic— que permiten al usuario moverse de una página del sitio a otra.
+### Sitio web
+
+Un _sitio web_ es una colección de páginas web vinculadas (más sus recursos asociados) que comparten un único nombre de dominio. Cada página web de un sitio web determinado proporciona enlaces explícitos —habitualmente en forma de porciones de texto sobre los que se puede hacer clic— que permiten al usuario moverse de una página del sitio a otra.
-Para acceder a un sitio web, escribe su nombre de dominio en la barra de direcciones de tu buscador, y él te mostrará la página principal del sitio web, o _homepage_ (informalmente denominada "el home"):
+Para acceder a un sitio web, escribe su nombre de dominio en la barra de direcciones de su navegador, y el navegador mostrará la página principal del sitio web, o _página de inicio_ (conocida casualmente como "inicio"):
![Ejemplo de nombre de dominio de un sitio web en la barra de direcciones del navegador](web-site.jpg)
-_Página web_ y _sitio web_ son especialmente fáciles de confundir cuando un _sitio_ contiene una única _página web_ Tales sitios son denominados _sitios de una sola página._
+Note que también es posible tener _sitios web de una sola página_: un sitio que consta de una sola página web, la cual es actualizada dinamicamente con nuevo contenido cuando es necesario.
### Servidor web
-Un _servidor web_ es una computadora que aloja uno o mas _sitios web_. "Alojar" (_hosting_) significa que todas las _páginas web_ y sus archivos soportes están disponibles en esa computadora. El _servidor web_ enviará cualquier _página web_ del _sitio web_ que aloja, al navegador de cualquier usuario, por cada solicitud del usuario.
+Un _servidor web_ es una computadora que aloja uno o mas _sitios web_. "Alojar" (_hosting_) significa que todas las _páginas web_ y sus archivos base están disponibles en esa computadora. El _servidor web_ enviará cualquier _página web_ del _sitio web_ que aloja, al navegador de cualquier usuario, por cada solicitud del usuario.
No confundir _sito web_ y _servidor web_. Por ejemplo, la expresión "Mi sitio web no responde", en realidad significa que el _servidor web_ no responde y, por lo tanto, el _sitio web_ no está disponible. Más importante aún, dado que un servidor web puede alojar varios sitios web, la expresión _servidor web_ nunca se utiliza para designar un sitio web, pues podría causar una gran confusión. En nuestro ejemplo anterior, si dijéramos: "Mi servidor web no responde", significaría que múltiples sitios web alojados en ese servidor web no están disponibles.
@@ -95,7 +101,7 @@ No confundir _sito web_ y _servidor web_. Por ejemplo, la expresión "Mi sitio w
Los buscadores son una fuente común de confusión en la web. Un buscador es un tipo especial de sitio web que ayuda a los usuarios a encontrar páginas web de otros sitios web.
-Hay muchos por ahí: [Google](https://www.google.com/), [Bing](https://www.bing.com/), [Yandex](https://www.yandex.com/), [DuckDuckGo](https://duckduckgo.com/),y muchos mas. Algunos son genéricos, otros están especializados en ciertos temas. Utilice los que prefiera.
+Hay muchos por ahí: [Google](https://www.google.com/), [Bing](https://www.bing.com/), [Yandex](https://www.yandex.com/), [DuckDuckGo](https://duckduckgo.com/),y muchos más. Algunos son genéricos, otros están especializados en ciertos temas. Utilice los que prefiera.
Muchos principiantes en la web confunden motores de búsqueda con navegadores. Aclaremos esto: Un _**navegador**_ es una pieza de software que obtiene y muestra páginas web; un **_buscador_** es un sitio web que ayuda a las personas a encontrar páginas web alojadas en otros sitios web. La confusión surge porque la primera vez que alguien inicia un navegador, el navegador muestra la página principal de un motor de búsqueda. Esto tiene sentido, porque, obviamente, lo primero que quieres hacer con un navegador es encontrar una página web para mostrar. No confundas la infraestructura (el navegador) con el servicio (el buscador). La distinción te ayudará un poco, pero incluso algunos profesionales hablan imprecisamente, así que no te sientas angustiado por eso.
diff --git a/files/es/learn/forms/index.md b/files/es/learn/forms/index.md
index f96343d156b549..b1809fdbf86880 100644
--- a/files/es/learn/forms/index.md
+++ b/files/es/learn/forms/index.md
@@ -1,109 +1,71 @@
---
-title: Formularios en HTML5
+title: Pilares de los formularios web
slug: Learn/Forms
+l10n:
+ sourceCommit: b76266228bd0900aa1256902c7858971156a58c9
---
{{LearnSidebar}}
-Los elementos y atributos para formularios en HTML5 proveen un mayor grado de marcado semántico que en HTML4 y eliminan gran parte del tedioso trabajo de programar y diseñar que se necesitaba en HTML4. Las funcionalidades de los formularios en HTML5 brindan una experiencia mejor para los usuarios al permitir que los formularios tengan un comportamiento más consistente entre diferentes sitios web y al darle una devolución inmediata acerca de la información ingresada. También proveen esta experiencia a los usuarios que han deshabilitado javascript en sus navegadores.
+Este módulo provee una serie de artículos que te ayudarán a dominar los conocimientos imprecendibles de los formularios web. Los formularios web son una poderosa herramienta para interactuar con usuarios — comunmente son usados para obtener información de los usuarios, o permitirles controlar la interfaz de usuario. Sin embargo, por razones históricas y técnicas, no siempre es obvio como usarlos a su máximo potencial. En los artículos listados a continuación, vamos a cubrir todos los aspectos imprecendibles de los formularios web incluyendo el marcado de su estructura HTML, esilizado de los controles, validación de los datos, y entrega de los datos al servidor.
-Este documento describe los elementos nuevos o que han cambiado que están disponibles en Gecko/Firefox.
+## Prerrequisitos
-### El elemento ``
+Antes de comenzar este módulo, deberías al menos completar nuestra [Introducción a HTML](/es/docs/Learn/HTML/Introduction_to_HTML). Hasta este punto, deberías ser capaz de comprender fácilmente las [Guías Introductorias](#guías_introductorias), y también ser capaz de usar nuestra guía de [Controles de formulario nativos básicos](/es/docs/Learn/Forms/Basic_native_form_controls).
-El elemento `{{ HTMLElement("input") }}` tiene nuevos valores para el atributo [`type`](/es/docs/Web/HTML/Element/input#type).
+Sin embargo para dominar los formularios, se require mas que conocimiento en HTML — también necesitas aprender algunas técnicas específicas para estlizar los controles del formulario, y es necesario un poco de conocimiento de _scripting_ para manejar cosas como, validación y creación de controles personalizados. Por lo tanto, antes de que revises las secciones listadas a continuación, te recomendamos que primero vayas y aprendas un poco acerca de [CSS](/es/docs/Learn/CSS) y [JavaScript](/es/docs/Learn/JavaScript).
-- `search`: El elemento representa una caja de búsqueda. Los saltos de línea son quitados del valor ingresado pero no se modifica ninguna otra sintaxis.
-- `tel`: El elemento representa un control para editar un número de teléfono, porque los números teléfonicos varían ampliamente en el mundo. Puedes usar atributos como [`pattern`](/es/docs/Web/HTML/Element/input#pattern) y [`maxlength`](/es/docs/Web/HTML/Element/input#maxlength) para restringir los valores ingresados en la caja.
-- `url`: El elemento representa un control para editar una [URL](http://es.wikipedia.org/URL). Se quitan los saltos de línea y espacios en blanco antes y después del valor ingresados.
-- `email`: El elemento representa una dirección de correo electrónico. Los saltos de línea se quitan automáticamente del valor ingresado. Puede ingresarse una direccón de correo no válida, pero el campo de ingreso sólo funcionará si la dirección ingresada satisface la producción ABNF `1*( atext / "." ) "@" ldh-str 1*( "." ldh-str )` donde `atext` está definida en RFC 5322, sección 3.2.3 y `ldh-str` está definida en RFC 1034, sección 3.5.
+Lo antes mencionado es un buen indicador de porque pusimos los formularios web en su propio módulo independiente, en lugar de intentar mezclar pedazos de información dentro de areas como HTML, CSS y JavaScript — los elementos de formulario son más complejos que la mayoría de los elemento de HTML, y también requieren de una cercana relación con técnicas de CSS y JavaScript para obtener lo mejor de ellos.
- > [!NOTE]
- > Si el atributo [`multiple`](/es/docs/Web/HTML/Element/input#multiple) está agregado, pueden ingresarse muchas direcciones de correo electrónico en ese campo {{ HTMLElement("input") }}, como una lista separada por espacios, pero no está implementado actualmente en Firefox.
+> [!NOTE]
+> Si estas trabajando en una computadora/tableta/otro dispósitivo, donde no tienes la habilidad de crear tus propios archivos, podrías probar (la mayoría) del código de ejemplo en un sitio de programación en línea como [JSBin](https://jsbin.com/) o [Glitch](https://glitch.com/).
-El elemento {{ HTMLElement("input") }} también tiene nuevos atributos:
+## Guías Introductorias
-- [`list`](/es/docs/Web/HTML/Element/input#list): El ID de un elemento {{ HTMLElement("datalist") }} cuyo contenido, los elementos {{ HTMLElement("option") }}, van a ser usados como ayudas y serán mostrados como propuestas en el área de sugerencias del campo input.
-- [`pattern`](/es/docs/Web/HTML/Element/input#pattern): Una expresión regular contra la que es verificado el valor del control, que puede ser usada con valores de [`type`](/es/docs/Web/HTML/Element/input#type) de `text`, `tel`, `search`, `url` y `email`.
-- [`formmethod`](/es/docs/Web/HTML/Element/input#formmethod): Una cadena que indica qué método HTTP (GET, POST, PUT o DELETE) debe ser usado cuando se envía; sobrescribe el [`method`](/es/docs/Web/HTML/Element/form#method) del elemento {{ HTMLElement("form") }}, si se define. El [`formmethod`](/es/docs/Web/HTML/Element/input#formmethod) sólo se aplica cuando el [`type`](/es/docs/Web/HTML/Element/input#type) es image o submit, y, para los métodos PUT y DELETE, sólo funcionará con un destino que esté en el mismo dominio (política del mismo origen).
+- [Tu primer formulario](/es/docs/Learn/Forms/Your_first_form)
+ - : El primer artículo de nuestra serie, te provee la experiencia de crear por primera vez un formulario web, incluyendo diseñar un formulario sencillo, hacer una implementación usando los elementos HTML adecuados, agregar un estilizado simple a través de CSS, y como se envian los datos al servidor.
+- [Como estructurar un formulario web](/es/docs/Learn/Forms/How_to_structure_a_web_form)
+ - : Con los conceptos básicos fuera de nuestro camino, podemos ver más a detalle los elementos usados para proveer estructura y significado a diferentes partes del formulario.
-### El elemento `
-> **Note :** Quelquefois les nombres impliqués dans des opérations sont nommés [opérandes](/fr/docs/Glossary/Operand).
+> [!NOTE]
+> Quelquefois les nombres impliqués dans des opérations sont nommés [opérandes](/fr/docs/Glossary/Operand).
-> **Note :** Vous pourrez parfois voir les puissances calculées à l'aide de la méthode [`Math.pow()`](/fr/docs/Web/JavaScript/Reference/Global_Objects/Math/pow) qui existait avant `**` et qui fonctionne de façon semblable. Ainsi, `Math.pow(7, 3)` exprime `7` à la puissance `3`, ce qui est équivalent à `7**3`, et qui donne `343`.
+> [!NOTE]
+> Vous pourrez parfois voir les puissances calculées à l'aide de la méthode [`Math.pow()`](/fr/docs/Web/JavaScript/Reference/Global_Objects/Math/pow) qui existait avant `**` et qui fonctionne de façon semblable. Ainsi, `Math.pow(7, 3)` exprime `7` à la puissance `3`, ce qui est équivalent à `7**3`, et qui donne `343`.
Nous n'avons certainement pas besoin de vous apprendre les quatre opérations, mais ce serait bien de tester si vous avez bien compris la syntaxe. Entrez les exemples ci‑dessous dans la [console des outils de développement JavaScript](/fr/docs/Learn/Common_questions/What_are_browser_developer_tools).
@@ -230,7 +233,8 @@ Si vous voulez contourner les règles de précédence des opérateurs, vous pouv
Essayez-le et voyez le résultat obtenu.
-> **Note :** La liste complète de tous les opérateurs JavaScript et de leur précédence peut être trouvée dans [la page de référence sur les expressions et les opérateurs](/fr/docs/Web/JavaScript/Guide/Expressions_and_Operators#précédence_des_opérateurs).
+> [!NOTE]
+> La liste complète de tous les opérateurs JavaScript et de leur précédence peut être trouvée dans [la page de référence sur les expressions et les opérateurs](/fr/docs/Web/JavaScript/Guide/Expressions_and_Operators#précédence_des_opérateurs).
## Opérateurs d'incrémentation et de décrémentation
@@ -267,7 +271,8 @@ num2--;
num2;
```
-> **Note :** En mettant l'opérateur avant la variable plutôt qu'après, le navigateur agira dans l'ordre inverse (incrément/décrément de la variable _puis_ renvoi de la valeur). Essayez les exemples plus haut, mais cette fois avec `++num1` et `--num2`.
+> [!NOTE]
+> En mettant l'opérateur avant la variable plutôt qu'après, le navigateur agira dans l'ordre inverse (incrément/décrément de la variable _puis_ renvoi de la valeur). Essayez les exemples plus haut, mais cette fois avec `++num1` et `--num2`.
## Opérateurs d'affectation
@@ -298,7 +303,8 @@ let y = 4; // y contient la valeur 4
x *= y; // x contient maintenant la valeur 12
```
-> **Note :** Il y a des tas d'[autres opérateurs d'affectation disponibles](/fr/docs/Web/JavaScript/Guide/Expressions_and_Operators#opérateurs_d'affectation), mais ceux‑ci sont les plus courants, à apprendre dès maintenant.
+> [!NOTE]
+> Il y a des tas d'[autres opérateurs d'affectation disponibles](/fr/docs/Web/JavaScript/Guide/Expressions_and_Operators#opérateurs_d'affectation), mais ceux‑ci sont les plus courants, à apprendre dès maintenant.
## Apprentissage actif : dimensionner la boîte d'un canevas
@@ -332,7 +338,8 @@ Parfois nous avons besoin d'exécuter des tests vrai/faux, puis d'agir en foncti
| <= | Inférieur ou égal à | Teste si la valeur de gauche est plus petite ou égale à celle de droite. | `3 <= 2` |
| >= | Supérieur ou égal à | Teste si la valeur de gauche est supérieure ou égale à celle de droite. | `5 >= 4` |
-> **Note :** Vous verrez peut‑être certaines personnes utiliser `==` et `!=` pour leurs tests d'égalité ou non-égalité. Ces opérateurs sont valides en JavaScript, mais différents de `===`/`!==`. Les versions avec deux caractères testent si les valeurs sont les mêmes, mais pas si les types de données sont les mêmes. Les versions strictes à trois caractères testent à la fois l'égalité des valeurs _et_ des types de données. Il y a moins d'erreurs avec les versions strictes, donc nous vous engageons à les utiliser dans tous les cas.
+> [!NOTE]
+> Vous verrez peut‑être certaines personnes utiliser `==` et `!=` pour leurs tests d'égalité ou non-égalité. Ces opérateurs sont valides en JavaScript, mais différents de `===`/`!==`. Les versions avec deux caractères testent si les valeurs sont les mêmes, mais pas si les types de données sont les mêmes. Les versions strictes à trois caractères testent à la fois l'égalité des valeurs _et_ des types de données. Il y a moins d'erreurs avec les versions strictes, donc nous vous engageons à les utiliser dans tous les cas.
Si vous entrez certaines de ces valeurs dans une console, vous constaterez que toutes renvoient une valeur `true`/`false` — les booléens mentionnés dans l'article précédent. Ces opérateurs sont très utiles, car ils nous permettent de prendre des décisions dans le code, et ils sont utilisés chaque fois que nous avons besoin de faire un choix. Par exemple, les booléens s'utilisent pour :
@@ -371,7 +378,8 @@ function updateBtn() {
Vous pouvez voir l'utilisation de l'opérateur d'égalité stricte dans la fonction `updateBtn()`. Dans ce cas, nous ne testons pas si deux expressions mathématiques ont la même valeur : nous testons si le contenu textuel d'un bouton contient une certaine chaîne, mais c'est toujours le même principe. Si le bouton affiche « Démarrer la machine » quand on le presse, nous changeons son libellé en « Arrêter la machine » et mettons à jour le libellé comme il convient. Si le bouton indique « Arrêter la machine » au moment de le presser, nous basculons le libellé à nouveau.
-> **Note :** Un contrôle qui alterne entre deux états porte généralement le nom d'interrupteur (à bascule) ou toggle en anglais. Il bascule d'un état à l'autre : allumé, éteint, etc.
+> [!NOTE]
+> Un contrôle qui alterne entre deux états porte généralement le nom d'interrupteur (à bascule) ou toggle en anglais. Il bascule d'un état à l'autre : allumé, éteint, etc.
## Testez vos compétences !
@@ -383,6 +391,7 @@ Dans cet article, nous avons abordé les informations fondamentales concernant l
Dans l'article suivant, nous étudierons le texte et les façons dont JavaScript nous permet de le manipuler.
-> **Note :** Si les maths vous plaisent et que vous souhaitez en savoir plus sur la manière dont elles sont implémentées en JavaScript, vous trouverez plus de précisions dans la section principale JavaScript de MDN. Pour commencer, nous vous conseillons [Nombres et dates](/fr/docs/Web/JavaScript/Guide/Numbers_and_dates) et [Expressions et opérateurs](/fr/docs/Web/JavaScript/Guide/Expressions_and_Operators).
+> [!NOTE]
+> Si les maths vous plaisent et que vous souhaitez en savoir plus sur la manière dont elles sont implémentées en JavaScript, vous trouverez plus de précisions dans la section principale JavaScript de MDN. Pour commencer, nous vous conseillons [Nombres et dates](/fr/docs/Web/JavaScript/Guide/Numbers_and_dates) et [Expressions et opérateurs](/fr/docs/Web/JavaScript/Guide/Expressions_and_Operators).
{{PreviousMenuNext("Learn/JavaScript/First_steps/Variables", "Learn/JavaScript/First_steps/Strings", "Learn/JavaScript/First_steps")}}
diff --git a/files/fr/learn/javascript/first_steps/strings/index.md b/files/fr/learn/javascript/first_steps/strings/index.md
index f1f8fe65ee7f08..ec76d3e1cf882e 100644
--- a/files/fr/learn/javascript/first_steps/strings/index.md
+++ b/files/fr/learn/javascript/first_steps/strings/index.md
@@ -243,7 +243,8 @@ Cela fonctionne à la perfection. Vous pouvez échapper d'autres caractères de
response;
```
-> **Note :** Quand vous entrez une chaîne dans votre code, entre guillemets simples ou doubles, on l'appelle **chaîne littérale**.
+> [!NOTE]
+> Quand vous entrez une chaîne dans votre code, entre guillemets simples ou doubles, on l'appelle **chaîne littérale**.
### Concaténation dans un contexte
diff --git a/files/fr/learn/javascript/first_steps/test_your_skills_colon__arrays/index.md b/files/fr/learn/javascript/first_steps/test_your_skills_colon__arrays/index.md
index aa67a7d81304f5..ae2a8f369a340a 100644
--- a/files/fr/learn/javascript/first_steps/test_your_skills_colon__arrays/index.md
+++ b/files/fr/learn/javascript/first_steps/test_your_skills_colon__arrays/index.md
@@ -7,11 +7,13 @@ slug: Learn/JavaScript/First_steps/Test_your_skills:_Arrays
L'objectif de ce test est d'évaluer votre compréhension [de l'article sur les tableaux en JavaScript (_arrays_)](/fr/docs/Learn/JavaScript/First_steps/Arrays).
-> **Note :** Vous pouvez essayer vos solutions dans les éditeurs interactifs qui suivent. Toutefois, il peut aussi être utile de télécharger le code et d'utiliser un outil en ligne comme [CodePen](https://codepen.io/), [jsFiddle](https://jsfiddle.net/), ou [Glitch](https://glitch.com/) afin de travailler sur ces tâches.
+> [!NOTE]
+> Vous pouvez essayer vos solutions dans les éditeurs interactifs qui suivent. Toutefois, il peut aussi être utile de télécharger le code et d'utiliser un outil en ligne comme [CodePen](https://codepen.io/), [jsFiddle](https://jsfiddle.net/), ou [Glitch](https://glitch.com/) afin de travailler sur ces tâches.
>
> Si vous vous retrouvez bloqué·e, vous pouvez demander de l'aide (voir [la section à ce sujet en fin de page](#assessment_or_further_help)).
-> **Note :** Dans les exemples qui suivent, s'il y a une erreur dans votre code, celle-ci s'affichera dans le panneau des résultats, sur la page, afin de vous aider à trouver la solution (ou bien dans la console JavaScript du navigateur si vous utilisez la version téléchargeable).
+> [!NOTE]
+> Dans les exemples qui suivent, s'il y a une erreur dans votre code, celle-ci s'affichera dans le panneau des résultats, sur la page, afin de vous aider à trouver la solution (ou bien dans la console JavaScript du navigateur si vous utilisez la version téléchargeable).
## Tableaux - Exercice 1
diff --git a/files/fr/learn/javascript/first_steps/useful_string_methods/index.md b/files/fr/learn/javascript/first_steps/useful_string_methods/index.md
index 8d8a840a067a88..6177fd5f7e0ab1 100644
--- a/files/fr/learn/javascript/first_steps/useful_string_methods/index.md
+++ b/files/fr/learn/javascript/first_steps/useful_string_methods/index.md
@@ -211,7 +211,8 @@ La longueur de « mozilla » est de 7 caractères, mais comme le déco
Elle renvoie « zilla » — le caractère à la position 2 est « z » et comme nous n'avons pas mis de second paramètre, la sous-chaîne retournée comporte tous les caractères restants de la chaîne.
-> **Note :** Le second paramètre de `slice()` est optionnel : s'il n'est pas defini, l'extraction va jusqu'à la fin de la chaîne originale. Il existe aussi d'autres options, allez à la page de {{jsxref("String.prototype.slice()", "slice()")}} pour voir ces autres options.
+> [!NOTE]
+> Le second paramètre de `slice()` est optionnel : s'il n'est pas defini, l'extraction va jusqu'à la fin de la chaîne originale. Il existe aussi d'autres options, allez à la page de {{jsxref("String.prototype.slice()", "slice()")}} pour voir ces autres options.
### Changer la casse
@@ -322,7 +323,8 @@ Dans cet exercice, nous avons des noms des villes du Royaume-Uni, mais les majus
3. En utilisant la dernière variable comme une sous-chaîne, remplacez la première lettre de la chaîne en minuscules par la première lettre de la chaîne en minuscules transformé en majuscules. Stockez le résultat de cette procédure de remplacement dans une autre nouvelle variable.
4. Changez la valeur de la variable `result` afin qu'elle soit égale au résultat final plutôt qu'à `input`.
-> **Note :** Un conseil — les paramètres des méthodes de chaîne n'ont pas besoin d'être des chaînes, elle peuvent aussi être des variables, ou même des variables avec une méthode invoquée sur elles.
+> [!NOTE]
+> Un conseil — les paramètres des méthodes de chaîne n'ont pas besoin d'être des chaînes, elle peuvent aussi être des variables, ou même des variables avec une méthode invoquée sur elles.
```html hidden
diff --git a/files/fr/learn/javascript/first_steps/variables/index.md b/files/fr/learn/javascript/first_steps/variables/index.md
index f87425b75da15a..1e31a9dcf59f69 100644
--- a/files/fr/learn/javascript/first_steps/variables/index.md
+++ b/files/fr/learn/javascript/first_steps/variables/index.md
@@ -78,7 +78,8 @@ Les variables sont essentielles et à mesure que vous en apprendrez plus sur Jav
Une autre particularité des variables : elle peuvent contenir pratiquement de tout — pas uniquement des chaînes ou des nombres. Elles peuvent aussi contenir des données complexes et même des fonctions, ce qui permet de réaliser des choses étonnantes. Vous en apprendrez plus à ce propos au long de ce parcours.
-> **Note :** Nous disons que les variables contiennent des valeurs. C'est un distingo important. Les variables ne sont pas les valeurs elles‑mêmes : ce sont des conteneurs pour ces valeurs. Vous pouvez vous les représenter comme une boîte en carton dans laquelle il est possible de ranger des choses.
+> [!NOTE]
+> Nous disons que les variables contiennent des valeurs. C'est un distingo important. Les variables ne sont pas les valeurs elles‑mêmes : ce sont des conteneurs pour ces valeurs. Vous pouvez vous les représenter comme une boîte en carton dans laquelle il est possible de ranger des choses.
![](boxes.png)
@@ -198,7 +199,8 @@ Dans ces lignes, nous venons de créer deux variables nommées respectivement `m
{{ EmbedLiveSample('Déclarer_une_variable', '100%', 300) }}
-> **Note :** En JavaScript, le code de toute instruction doit se terminer par un point‑virgule (`;`) — il peut fonctionner correctement sans ce point‑virgule pour des lignes isolées, mais ce ne sera probablement pas le cas si vous écrivez plusieurs lignes de code ensemble. Prenez l'habitude de mettre ce point‑virgule.
+> [!NOTE]
+> En JavaScript, le code de toute instruction doit se terminer par un point‑virgule (`;`) — il peut fonctionner correctement sans ce point‑virgule pour des lignes isolées, mais ce ne sera probablement pas le cas si vous écrivez plusieurs lignes de code ensemble. Prenez l'habitude de mettre ce point‑virgule.
Vous pouvez maintenant tester si ces valeurs existent dans l'environnement d'exécution en saisissant simplement le nom de ces variables, par exemple
@@ -213,7 +215,8 @@ Actuellement elles ne contiennent aucune valeur ; ce sont des conteneurs vi
scoobyDoo;
```
-> **Note :** Ne confondez pas une variable qui existe mais sans valeur définie avec une variable qui n'existe pas du tout — ce sont deux choses tout à fait différentes. Dans l'analogie des boîtes, _ne pas exister_ correspond à l'absence de boîte ; _valeur indéfinie_ correspond à une boîte vide.
+> [!NOTE]
+> Ne confondez pas une variable qui existe mais sans valeur définie avec une variable qui n'existe pas du tout — ce sont deux choses tout à fait différentes. Dans l'analogie des boîtes, _ne pas exister_ correspond à l'absence de boîte ; _valeur indéfinie_ correspond à une boîte vide.
## Initialisation d'une variable
@@ -261,7 +264,8 @@ logName();
var myName;
```
-> **Note :** l'exemple ci-dessus ne fonctionnera pas si on tape des lignes une à une dans la console, mais seulement quand on exécute un script JavaScript multi-lignes dans un document web.
+> [!NOTE]
+> L'exemple ci-dessus ne fonctionnera pas si on tape des lignes une à une dans la console, mais seulement quand on exécute un script JavaScript multi-lignes dans un document web.
Ce processus se nomme **«** **hoisting »** (en français, "hissage") — lisez [var hoisting](/fr/docs/Web/JavaScript/Reference/Statements/var#var_hoisting) pour plus de précisions sur ce sujet.
@@ -314,7 +318,8 @@ Vous pouvez nommer une variable comme vous l'entendez, mais il y a des restricti
- Les variables sont sensibles à la casse — donc `myage` et `myAge` correspondent à deux variables différentes.
- Enfin les _mots réservés_ du langage JavaScript ne peuvent pas être choisis comme nom pour une variable — les mots réservés sont les mots qui font effectivement partie de la syntaxe du JavaScript. Donc, vous ne pouvez pas utiliser des mots comme `var`, `function`, `let` ou `for` comme noms de variable. Les navigateurs les reconnaîtront en tant qu'éléments de code, et cela déclenchera des erreurs.
-> **Note :** Une liste exhaustive des mots réservés est proposée dans la page [Lexical grammar — keywords](/fr/docs/Web/JavaScript/Reference/Lexical_grammar#keywords).
+> [!NOTE]
+> Une liste exhaustive des mots réservés est proposée dans la page [Lexical grammar — keywords](/fr/docs/Web/JavaScript/Reference/Lexical_grammar#keywords).
Exemples de noms corrects :
diff --git a/files/fr/learn/javascript/first_steps/what_is_javascript/index.md b/files/fr/learn/javascript/first_steps/what_is_javascript/index.md
index 03dd851a8d1775..5ad0a97e01ee64 100644
--- a/files/fr/learn/javascript/first_steps/what_is_javascript/index.md
+++ b/files/fr/learn/javascript/first_steps/what_is_javascript/index.md
@@ -110,14 +110,16 @@ Elles se divisent généralement en deux catégories :
- les API [Canvas](/fr/docs/Web/API/Canvas_API) et [WebGL](/fr/docs/Web/API/WebGL_API) permettent de créer des animations 2D et 3D. On fait des choses incroyables avec ces technologies, voyez [Chrome Experiments](https://www.chromeexperiments.com/webgl) et [webglsamples](https://webglsamples.org/).
- [les API Audio et Video](/fr/docs/Web/Apps/Fundamentals/Audio_and_video_delivery), comme {{domxref("HTMLMediaElement")}} et [WebRTC](/fr/docs/Web/API/WebRTC_API) permettent des actions intéressantes sur le multimédia, telles que jouer de l'audio ou de la vidéo directement dans une page web, ou récupérer le flux vidéo de votre webcam et l'afficher sur l'ordinateur de quelqu'un d'autre (essayez la [Snapshot demo](http://chrisdavidmills.github.io/snapshot/) pour vous faire une idée).
-> **Note :** Beaucoup des exemples ci-dessus ne fonctionneront pas dans un ancien navigateur. Il vaut mieux utiliser un navigateur moderne comme Firefox, Chrome, Edge ou Opera pour exécuter votre code et faire vos tests. Si vous êtes amené à écrire du code de production (c'est-à-dire destiné à de véritables utilisateurs), il vous faudra prendre en compte la compatibilité pour différents navigateurs.
+> [!NOTE]
+> Beaucoup des exemples ci-dessus ne fonctionneront pas dans un ancien navigateur. Il vaut mieux utiliser un navigateur moderne comme Firefox, Chrome, Edge ou Opera pour exécuter votre code et faire vos tests. Si vous êtes amené à écrire du code de production (c'est-à-dire destiné à de véritables utilisateurs), il vous faudra prendre en compte la compatibilité pour différents navigateurs.
Les **APIs tierces** ne font par défaut pas partie de votre navigateur, et vous devrez en général récupérer le code et les informations les concernant quelque part sur le web. Par exemple :
- l'[API Twitter](https://dev.twitter.com/overview/documentation) vous permet par exemple d'afficher vos derniers tweets sur votre site.
- l'[API Google Maps](https://developers.google.com/maps/) permet d'intégrer à votre site des cartes personnalisées et d'autres fonctionnalités de ce type.
-> **Note :** ces APIs sont d'un niveau avancé et nous ne couvrirons aucune d'entre elles dans ce cours, mais les liens ci-dessus fournissent une large documentation si vous voulez en savoir davantage.
+> [!NOTE]
+> Ces APIs sont d'un niveau avancé et nous ne couvrirons aucune d'entre elles dans ce cours, mais les liens ci-dessus fournissent une large documentation si vous voulez en savoir davantage.
Et il y a bien plus encore ! Pas de précipitation cependant. Vous ne serez pas en mesure de créer le nouveau Facebook, Google Maps ou Instagram après une journée de travail sur JavaScript, il y a d'abord beaucoup de bases à assimiler. Et c'est pourquoi vous êtes ici. Allons-y !
@@ -137,7 +139,8 @@ C'est une bonne chose, étant donné qu'un usage fréquent de JavaScript est de
Chaque onglet du navigateur constitue un périmètre séparé dans lequel s'exécute le code (en termes techniques ces périmètres sont des « environnements d'exécution ») ce qui signifie que, dans la plupart des cas, le code de chaque onglet est exécuté complètement séparément, et le code d'un onglet ne peut affecter directement le code d'un autre onglet ou d'un autre site. C'est une bonne mesure de sécurité. Si ce n'était pas le cas, des pirates pourraient par exemple écrire du code pour voler des informations sur d'autres sites web.
-> **Note :** il existe des moyens d'envoyer du code et des données entre différents sites/onglets de façon sécurisée, mais ce sont des techniques avancées que ne nous couvrirons pas dans ce cours.
+> [!NOTE]
+> Il existe des moyens d'envoyer du code et des données entre différents sites/onglets de façon sécurisée, mais ce sont des techniques avancées que ne nous couvrirons pas dans ce cours.
### Ordre d'exécution du JavaScript
@@ -158,7 +161,8 @@ Nous sélectionnons ici un paragraphe de texte (ligne 1), puis lui attachons un
Si vous échangiez les deux premières lignes de code, rien ne fonctionnerait plus, vous obtiendriez une erreur dans la console développeur du navigateur : `TypeError: para is undefined`. Cela signifie que l'objet `para` n'existe pas encore, donc nous ne pouvons pas y ajouter de gestionnaire d'évènement.
-> **Note :** c'est une erreur très fréquente. Il faut veiller à ce que les objets référencés dans votre code existent avant d'essayer de les utiliser.
+> [!NOTE]
+> C'est une erreur très fréquente. Il faut veiller à ce que les objets référencés dans votre code existent avant d'essayer de les utiliser.
### Code interprété contre code compilé
@@ -216,9 +220,11 @@ Le JavaScript est appliqué à votre page HTML un peu comme le CSS. Les élémen
5. Enregistrez le fichier et actualisez le navigateur. Vous pouvez maintenant voir que, lorsque vous cliquez sur le bouton, un nouveau paragraphe est généré et placé en dessous.
-> **Note :** si l'exemple ne semble pas marcher, reprenez pas à pas chaque étape. Avez-vous bien enregistré le code de départ comme un fichier `.html` ? Avez-vous bien ajouté l'élément {{htmlelement("script")}} juste après la balise `` ? Avez-vous collé le bon code JavaScript au bon endroit ? **JavaScript est sensible à la casse, et assez tatillon, il faut donc respecter scrupuleusement la syntaxe indiquée, sans quoi il peut ne pas fonctionner.**
+> [!NOTE]
+> Si l'exemple ne semble pas marcher, reprenez pas à pas chaque étape. Avez-vous bien enregistré le code de départ comme un fichier `.html` ? Avez-vous bien ajouté l'élément {{htmlelement("script")}} juste après la balise `` ? Avez-vous collé le bon code JavaScript au bon endroit ? **JavaScript est sensible à la casse, et assez tatillon, il faut donc respecter scrupuleusement la syntaxe indiquée, sans quoi il peut ne pas fonctionner.**
-> **Note :** vous pouvez voir cette version sur GitHub avec [apply-javascript-internal.html](https://github.com/mdn/learning-area/blob/master/javascript/introduction-to-js-1/what-is-js/apply-javascript-internal.html) ([et aussi en live](https://mdn.github.io/learning-area/javascript/introduction-to-js-1/what-is-js/apply-javascript-internal.html)).
+> [!NOTE]
+> Vous pouvez voir cette version sur GitHub avec [apply-javascript-internal.html](https://github.com/mdn/learning-area/blob/master/javascript/introduction-to-js-1/what-is-js/apply-javascript-internal.html) ([et aussi en live](https://mdn.github.io/learning-area/javascript/introduction-to-js-1/what-is-js/apply-javascript-internal.html)).
### JavaScript externe
@@ -274,7 +280,8 @@ for (let i = 0; i < buttons.length; i++) {
Cela peut sembler un peu plus long que l'attribut `onclick`, mais cela fonctionnera pour tous les boutons peu importe leur nombre sur la page, et peu importe si des boutons sont ajoutés ou retirés, le code JavaScript n'aura pas besoin d'être modifié.
-> **Note :** essayez de modifier votre version de `apply-javascript.html` et d'y ajouter quelques boutons dans le fichier. En actualisant la page, tous les boutons devraient créer un paragraphe quand ils sont cliqués. Pas mal, non ?
+> [!NOTE]
+> Essayez de modifier votre version de `apply-javascript.html` et d'y ajouter quelques boutons dans le fichier. En actualisant la page, tous les boutons devraient créer un paragraphe quand ils sont cliqués. Pas mal, non ?
### Stratégies de chargement de script
@@ -300,7 +307,8 @@ Dans l'exemple externe, nous utilisons une fonctionnalité JavaScript plus moder
Dans ce cas, le script et le code HTML se chargeront simultanément et le code fonctionnera.
-> **Note :** Dans le cas externe, nous n'avions pas besoin d'utiliser l'événement `DOMContentLoaded`, car l'attribut `async` a résolu le problème pour nous. Nous n'avons pas utilisé la solution `async` pour l'exemple JavaScript interne, car elle ne fonctionne que pour les scripts externes.
+> [!NOTE]
+> Dans le cas externe, nous n'avions pas besoin d'utiliser l'événement `DOMContentLoaded`, car l'attribut `async` a résolu le problème pour nous. Nous n'avons pas utilisé la solution `async` pour l'exemple JavaScript interne, car elle ne fonctionne que pour les scripts externes.
Auparavant, une solution à ce problème consistait à placer votre élément de script juste au bas du corps (par exemple, juste avant la balise), afin qu'il soit chargé après que tout le code HTML a été analysé. Le problème de cette solution (et de la solution `DOMContentLoaded` vue ci-dessus) est que le chargement et l'analyse du script sont complètements bloqués jusqu'à ce que le DOM HTML soit chargé. Sur des sites plus importants avec beaucoup de JavaScript, cela peut entraîner un problème de performances majeur, ce qui ralentit votre site. C'est pourquoi `async` a été ajouté aux navigateurs !
diff --git a/files/fr/learn/javascript/first_steps/what_went_wrong/index.md b/files/fr/learn/javascript/first_steps/what_went_wrong/index.md
index cd76c6796dbe99..956d9fb0d7f3c5 100644
--- a/files/fr/learn/javascript/first_steps/what_went_wrong/index.md
+++ b/files/fr/learn/javascript/first_steps/what_went_wrong/index.md
@@ -48,7 +48,8 @@ Pour commencer, revenons à notre jeu de devinettes numériques — sauf que cet
, cela ne fonctionne pas!
-> **Note :** Votre propre version de l'exemple de jeu ne fonctionne pas, vous pourriez vouloir la corriger ! Il nous semble plus efficace que vous travailliez sur notre version boguée, afin que vous puissiez apprendre les techniques que nous enseignons ici. Ensuite, vous pouvez revenir en arrière et essayer de réparer votre exemple.
+> [!NOTE]
+> Votre propre version de l'exemple de jeu ne fonctionne pas, vous pourriez vouloir la corriger ! Il nous semble plus efficace que vous travailliez sur notre version boguée, afin que vous puissiez apprendre les techniques que nous enseignons ici. Ensuite, vous pouvez revenir en arrière et essayer de réparer votre exemple.
À ce stade, consultons la [console du développeur](/fr/docs/Apprendre/Découvrir_outils_développement_navigateurs) pour voir si nous pouvons voir des erreurs de syntaxe, puis essayez de les corriger. Vous apprendrez comment ci-dessous.
@@ -74,7 +75,8 @@ Antérieurement dans le cours, nous vous avons demandé de taper quelques comman
4. Le message d'erreur dit "guessSubmit.addeventListener n'est pas une fonction", donc nous avons probablement mal orthographié quelque chose. Si vous n'êtes pas sûr de la bonne orthographe d'un élément syntaxique, il est fréquemment opportun de regarder dans MDN. Actuellement, la meilleure façon d'opérer consiste à faire une recherche pour "mdn _nom-de-fonctionnalité_" avec votre moteur de recherche préféré. Voici un raccourci pour gagner un peu de temps dans le cas présent : [`addEventListener()`](/fr/docs/Web/API/EventTarget/addEventListener).
5. Donc, en regardant cette page, il apparaît que nous avions mal orthographié le nom de la fonction ! Souvenez-vous que JavaScript est sensible à la casse, et que la moindre différence dans l'orthographe ou la casse déclenchera une erreur. Remplacer `addeventListener` par `addEventListener` corrigera cela. Faisons‑le maintenant.
-> **Note :** Voyez la page relative à [TypeError: "x" is not a function](/fr/docs/Web/JavaScript/Reference/Errors/Not_a_function) pour plus de précisions à propos de cette erreur.
+> [!NOTE]
+> Voyez la page relative à [TypeError: "x" is not a function](/fr/docs/Web/JavaScript/Reference/Errors/Not_a_function) pour plus de précisions à propos de cette erreur.
### Erreurs de syntaxe : deuxième tour
@@ -84,7 +86,8 @@ Antérieurement dans le cours, nous vous avons demandé de taper quelques comman
> **Note :** [`Null`](/fr/docs/Glossary/Null) est une valeur spéciale signifiant "rien" ou "aucune valeur". Or `lowOrHi` a été déclaré et initialisé, mais sans valeur signifiante — il n'a ni type ni valeur.
- > **Note :** Cette erreur n'apparaît pas au moment du chargement de la page car elle survient à l'intérieur d'une fonction (dans `checkGuess() { ... }`). Comme vous l'apprendrez de manière plus précise plus loin dans l'article à propos des fonctions, le code dans les fonctions s'exécute dans une instance séparée du code en dehors des fonctions. Dans notre cas, le code n'avait pas été exécuté et l'erreur ne pouvait pas survenir avant que la fonction `checkGuess()` soit lancée à la ligne 86.
+ > [!NOTE]
+ > Cette erreur n'apparaît pas au moment du chargement de la page car elle survient à l'intérieur d'une fonction (dans `checkGuess() { ... }`). Comme vous l'apprendrez de manière plus précise plus loin dans l'article à propos des fonctions, le code dans les fonctions s'exécute dans une instance séparée du code en dehors des fonctions. Dans notre cas, le code n'avait pas été exécuté et l'erreur ne pouvait pas survenir avant que la fonction `checkGuess()` soit lancée à la ligne 86.
4. Regardez à la ligne 78, vous verrez ce code :
@@ -116,7 +119,8 @@ Antérieurement dans le cours, nous vous avons demandé de taper quelques comman
9. Donc, il nous faut un sélecteur de classe ici, précédé d'un point (.), alors que le sélecteur passé à la méthode `querySelector()` en ligne 48 n'en a pas. Ce pourrait être le problème ! Changeons `lowOrHi` en `.lowOrHi` à la ligne 48.
10. Enregistrons et actualisons à nouveau, et la directive `console.log()` renvoie bien l'élément `
` attendu. Pfff ! Une autre erreur corrigée ! On peut enlever la ligne `console.log()` maintenant, ou bien la garder pour s'y reporter plus tard — comme vous l'entendez.
-> **Note :** Voyez la page relative à [TypeError: "x" is (not) "y"](/fr/docs/Web/JavaScript/Reference/Errors/Unexpected_type) pour plus de précisions à propos de cette erreur.
+> [!NOTE]
+> Voyez la page relative à [TypeError: "x" is (not) "y"](/fr/docs/Web/JavaScript/Reference/Errors/Unexpected_type) pour plus de précisions à propos de cette erreur.
### Erreurs de syntaxe : troisième tour
@@ -198,7 +202,8 @@ let userGuess === Number(guessField.value);
cela déclenchera cette même erreur car le logiciel pense que vous êtes en train de faire quelque chose d'autre. Vous devez vous assurer que vous n'avez pas confondu l'opérateur d'assignation (`=`) — qui fixe une valeur donnée à une variable — avec l'opérateur (`===`) qui teste la stricte égalité de deux valeurs, et renvoie un résultat `true`/`false` (vrai/faux).
-> **Note :** Voyez la page relative à [SyntaxError: missing ; before statement](/fr/docs/Web/JavaScript/Reference/Errors/Missing_semicolon_before_statement) pour plus de précisions à propos de cette erreur.
+> [!NOTE]
+> Voyez la page relative à [SyntaxError: missing ; before statement](/fr/docs/Web/JavaScript/Reference/Errors/Missing_semicolon_before_statement) pour plus de précisions à propos de cette erreur.
### Le programme dit que vous avez gagné quelle que soit votre suggestion
@@ -220,7 +225,8 @@ le test renverra toujours `true` (vrai) et le programme indiquera que vous avez
Cette erreur est triviale — elle indique en général que vous avez oublié une parenthèse fermante à la fin de l'appel d'une fonction ou d'une méthode.
-> **Note :** Voyez la page relative à [SyntaxError: missing ) after argument list](/fr/docs/Web/JavaScript/Reference/Errors/Missing_parenthesis_after_argument_list) pour plus de précisions à ce propos.
+> [!NOTE]
+> Voyez la page relative à [SyntaxError: missing ) after argument list](/fr/docs/Web/JavaScript/Reference/Errors/Missing_parenthesis_after_argument_list) pour plus de précisions à ce propos.
### SyntaxError: missing : after property id
@@ -248,7 +254,8 @@ Ces erreurs signalent généralement l'oubli de guillemets ouvrants ou fermants
Pour toutes ces erreurs, revoyez comment nous avons opéré dans les exemples de ce parcours. Quand une erreur survient, regardez le numéro de ligne indiqué, allez à cette ligne et voyez si vous remarquez ce qui ne va pas. N'oubliez pas que l'erreur n'est pas forcément sur la ligne indiquée, et qu'elle ne provient pas forcément d'un des problèmes évoqués plus haut !
-> **Note :** Voyez les pages relatives à [SyntaxError: Unexpected token](/fr/docs/Web/JavaScript/Reference/Errors/Unexpected_token) et [SyntaxError: unterminated string literal](/fr/docs/Web/JavaScript/Reference/Errors/Unterminated_string_literal) pour plus de précisions à ce propos.
+> [!NOTE]
+> Voyez les pages relatives à [SyntaxError: Unexpected token](/fr/docs/Web/JavaScript/Reference/Errors/Unexpected_token) et [SyntaxError: unterminated string literal](/fr/docs/Web/JavaScript/Reference/Errors/Unterminated_string_literal) pour plus de précisions à ce propos.
## Résumé
diff --git a/files/fr/learn/javascript/objects/basics/index.md b/files/fr/learn/javascript/objects/basics/index.md
index 85c599d28714e0..d9859e66bf1ecb 100644
--- a/files/fr/learn/javascript/objects/basics/index.md
+++ b/files/fr/learn/javascript/objects/basics/index.md
@@ -90,7 +90,8 @@ personne.salutation();
Vous avez désormais des données et des fonctionnalités dans votre objet, et vous pouvez y accéder avec une une syntaxe simple et claire !
-> **Note :** Si vous avez des difficultés pour le faire fonctionner, comparez votre code avec notre version — voir [oojs-finished.html](https://github.com/mdn/learning-area/blob/master/javascript/oojs/introduction/oojs-finished.html) (ou [voir en action](https://mdn.github.io/learning-area/javascript/oojs/introduction/oojs-finished.html)). Une erreur courante, quand on commence avec les objets, est de mettre une virgule après la dernière propriété — ce qui provoque une erreur.
+> [!NOTE]
+> Si vous avez des difficultés pour le faire fonctionner, comparez votre code avec notre version — voir [oojs-finished.html](https://github.com/mdn/learning-area/blob/master/javascript/oojs/introduction/oojs-finished.html) (ou [voir en action](https://mdn.github.io/learning-area/javascript/oojs/introduction/oojs-finished.html)). Une erreur courante, quand on commence avec les objets, est de mettre une virgule après la dernière propriété — ce qui provoque une erreur.
Alors, comment ça fonctionne ? Un objet est fait de plusieurs membres, qui ont chacun un nom (par exemple `nom` et `age` ci-dessus) et une valeur (par exemple. `['Jean', 'Martin']` et `32`).
@@ -306,7 +307,8 @@ var maNotification = new Notification("Bonjour !");
Nous verrons les constructeurs dans un prochain article.
-> **Note :** On peut voir le mode de communication des objets comme un **envoi de message**. Quand un objet a besoin d'un autre pour faire une action, souvent il va envoyer un message à un autre objet via l'une de ses méthode et attendre une réponse, qui retournera une valeur.
+> [!NOTE]
+> On peut voir le mode de communication des objets comme un **envoi de message**. Quand un objet a besoin d'un autre pour faire une action, souvent il va envoyer un message à un autre objet via l'une de ses méthode et attendre une réponse, qui retournera une valeur.
## Résumé
diff --git a/files/fr/learn/javascript/objects/index.md b/files/fr/learn/javascript/objects/index.md
index 1d11774ef6498b..d0e5d4954b3888 100644
--- a/files/fr/learn/javascript/objects/index.md
+++ b/files/fr/learn/javascript/objects/index.md
@@ -23,7 +23,8 @@ Avant de commencer ce module, vous devriez connaître les bases de [HTML](/fr/do
Vous devriez également connaître les notions de bases sur JavaScript avant d'étudier les objets JavaScript en détails. Avant de démarrer ce module, lisez [Premiers pas en JavaScript](/fr/docs/Learn/JavaScript/First_steps) et [Blocs de construction de JavaScript](/fr/docs/Learn/JavaScript/Building_blocks).
-> **Note :** Si vous travaillez depuis un appareil où vous ne pouvez pas créer vos propres fichiers, vous pouvez essayer la plupart des exemples de code dans un outil de programmation en ligne tel que [JSBin](https://jsbin.com/) ou [Glitch](https://glitch.com/).
+> [!NOTE]
+> Si vous travaillez depuis un appareil où vous ne pouvez pas créer vos propres fichiers, vous pouvez essayer la plupart des exemples de code dans un outil de programmation en ligne tel que [JSBin](https://jsbin.com/) ou [Glitch](https://glitch.com/).
## Guides
diff --git a/files/fr/learn/javascript/objects/json/index.md b/files/fr/learn/javascript/objects/json/index.md
index 8f2c9371fa08df..a2cc1267d99272 100644
--- a/files/fr/learn/javascript/objects/json/index.md
+++ b/files/fr/learn/javascript/objects/json/index.md
@@ -38,7 +38,8 @@ Le JavaScript Object Notation (JSON) est un format standard utilisé pour repré
Le JSON se présente sous la forme d'une chaîne de caractères —utile lorsque vous souhaitez transmettre les données sur un réseau. Il a donc besoin d'être converti en un objet JavaScript natif lorsque vous souhaitez accéder aux données. Ce n'est pas vraiment un souci puisque le JavaScript fournit un objet global [JSON](/fr/docs/Web/JavaScript/Reference/Global_Objects/JSON) disposant des méthodes pour assurer la conversion entre les deux.
-> **Note :** Convertir une chaîne de caractères en un objet natif se nomme **analyse syntaxique (parsage)** tandis que le contraire porte le nom de la **linéarisation (stringification)**.
+> [!NOTE]
+> Convertir une chaîne de caractères en un objet natif se nomme **analyse syntaxique (parsage)** tandis que le contraire porte le nom de la **linéarisation (stringification)**.
Un objet JSON peut être stocké dans son propre fichier qui se présente simplement sous la forme d'un fichier texte avec l'extension `.json` et le {{glossary("MIME type")}} `application/json`.
@@ -105,7 +106,8 @@ superHeroes["members"][1]["powers"][2];
4. À l'intérieur de cet objet, nous souhaitons accéder à la propriété `powers`, donc, nous utilisons `["powers"]`.
5. Enfin, à l'intérieur de cette propriété `powers` nous trouvons un nouveau tableau qui contient les super pouvoirs de ce héros. Nous désirons obtenir le troisième, donc nous tapons `[2]`.
-> **Note :** L'objet JSON vu ci-dessus est disponible au sein d'une variable dans notre exemple [JSONTest.html](http://mdn.github.io/learning-area/javascript/oojs/json/JSONTest.html) (voir le [code source](https://github.com/mdn/learning-area/blob/master/javascript/oojs/json/JSONTest.html)). Essayez de le charger et d'accéder aux données en utilisant la console Javascript de votre navigateur.
+> [!NOTE]
+> L'objet JSON vu ci-dessus est disponible au sein d'une variable dans notre exemple [JSONTest.html](http://mdn.github.io/learning-area/javascript/oojs/json/JSONTest.html) (voir le [code source](https://github.com/mdn/learning-area/blob/master/javascript/oojs/json/JSONTest.html)). Essayez de le charger et d'accéder aux données en utilisant la console Javascript de votre navigateur.
### Des tableaux en tant que JSON
@@ -286,9 +288,11 @@ Maintenant, on utilise une [boucle for](/fr/docs/Apprendre/JavaScript/Building_b
5. Utiliser une autre boucle `for` pour parcourir les super-pouvoirs du héros actuel — créer pour chacun d'entre eux un élément `
`, y placer le super-pouvoir et placer le `listItem` dans l'élément `
` (`myList`) en utilisant `appendChild()`.
6. Pour finir, on ajoute `
`, les `
`s et `
` à `` (`myArticle`), et on ajoute `` à ``. L'ordre d'ajout est important, c'est l'ordre dans lequel les éléments seront affichés dans le HTML.
-> **Note :** Si vous ne parvenez pas à faire fonctionner l'exemple, consultez notre code source [heroes-finished.html](https://github.com/mdn/learning-area/blob/master/javascript/oojs/json/heroes-finished.html) (ou regardez-le [en action](http://mdn.github.io/learning-area/javascript/oojs/json/heroes-finished.html).)
+> [!NOTE]
+> Si vous ne parvenez pas à faire fonctionner l'exemple, consultez notre code source [heroes-finished.html](https://github.com/mdn/learning-area/blob/master/javascript/oojs/json/heroes-finished.html) (ou regardez-le [en action](http://mdn.github.io/learning-area/javascript/oojs/json/heroes-finished.html).)
-> **Note :** Si vous comprenez difficilement la notation avec un point/une accolade utilisée pour accéder au JSON, ouvrez le fichier [superheroes.json](http://mdn.github.io/learning-area/javascript/oojs/json/superheroes.json) dans un nouvel onglet ou dans votre éditeur de texte et consultez-le pendant la lecture de notre code Javascript. Vous pouvez également vous reporter à notre article [Les bases du JavaScript orienté objet](/fr/docs/Learn/JavaScript/Objects/Basics) pour obtenir plus de détails sur la notation avec un point et avec une accolade.
+> [!NOTE]
+> Si vous comprenez difficilement la notation avec un point/une accolade utilisée pour accéder au JSON, ouvrez le fichier [superheroes.json](http://mdn.github.io/learning-area/javascript/oojs/json/superheroes.json) dans un nouvel onglet ou dans votre éditeur de texte et consultez-le pendant la lecture de notre code Javascript. Vous pouvez également vous reporter à notre article [Les bases du JavaScript orienté objet](/fr/docs/Learn/JavaScript/Objects/Basics) pour obtenir plus de détails sur la notation avec un point et avec une accolade.
## Conversion entre objets et textes
diff --git a/files/fr/learn/javascript/objects/object-oriented_programming/index.md b/files/fr/learn/javascript/objects/object-oriented_programming/index.md
index 36924787eb88fd..28559dedefd83e 100644
--- a/files/fr/learn/javascript/objects/object-oriented_programming/index.md
+++ b/files/fr/learn/javascript/objects/object-oriented_programming/index.md
@@ -15,7 +15,8 @@ La programmation orientée objet est un paradigme de programmation fondamental p
Nous décrirons ces concepts sans référence particulière à JavaScript, les exemples seront écrits en [pseudo-code](/fr/docs/Glossary/Pseudocode).
-> **Note :** Pour être tout à fait précis, les fonctionnalités décrites ici appartiennent à un style particulier de programmation orienté objet basé sur les classes. La plupart du temps, quand on parle de programmation orientée objet, on parle de ce modèle utilisant des classes.
+> [!NOTE]
+> Pour être tout à fait précis, les fonctionnalités décrites ici appartiennent à un style particulier de programmation orienté objet basé sur les classes. La plupart du temps, quand on parle de programmation orientée objet, on parle de ce modèle utilisant des classes.
Après ces descriptions, nous verrons en JavaScript comment les constructeurs et la chaîne de prototypes peuvent être rapprochés de ces concepts objets et leurs différences. Dans l'article suivant, nous verrons d'autres fonctionnalités de JavaScript qui simplifient l'implémentation de programmes orientés objet.
diff --git a/files/fr/learn/javascript/objects/object_building_practice/index.md b/files/fr/learn/javascript/objects/object_building_practice/index.md
index 4c135a9f0c3c12..2fe608f39aba5c 100644
--- a/files/fr/learn/javascript/objects/object_building_practice/index.md
+++ b/files/fr/learn/javascript/objects/object_building_practice/index.md
@@ -300,7 +300,8 @@ Maintenant, pour un peu de plaisir, ajoutons une détection de collision à notr
3. Enregistrez et rafraîchissez la démo à nouveau, et vous verrez vos balles changer de couleur quand elles entrent en collision !
-> **Note :** Si vous avez des difficultés à faire fonctionner cet exemple, essayez de comparer votre code JavaScript avec notre [version finale](https://github.com/mdn/learning-area/blob/master/javascript/oojs/bouncing-balls/main-finished.js) (voir également la [démo en ligne](http://mdn.github.io/learning-area/javascript/oojs/bouncing-balls/index-finished.html)).
+> [!NOTE]
+> Si vous avez des difficultés à faire fonctionner cet exemple, essayez de comparer votre code JavaScript avec notre [version finale](https://github.com/mdn/learning-area/blob/master/javascript/oojs/bouncing-balls/main-finished.js) (voir également la [démo en ligne](http://mdn.github.io/learning-area/javascript/oojs/bouncing-balls/index-finished.html)).
## Résumé
diff --git a/files/fr/learn/javascript/objects/object_prototypes/index.md b/files/fr/learn/javascript/objects/object_prototypes/index.md
index e56a299268cfed..2a122335bef9dc 100644
--- a/files/fr/learn/javascript/objects/object_prototypes/index.md
+++ b/files/fr/learn/javascript/objects/object_prototypes/index.md
@@ -32,7 +32,8 @@ En réalité, les méthodes et attributs sont définis dans l'attribut `prototyp
En programmation orientée objet classique, les classes sont définies, puis lorsque des instances sont créées, l'ensemble des attributs et des méthodes sont copiés dans l'instance. En JavaScript en revanche, tout n'est pas copié : on établit un lien entre l'objet instancié et son constructeur (c'est un lien dans la chaîne de prototypage). On détermine alors les méthodes et les attributs en remontant la chaîne.
-> **Note :** Il faut bien comprendre qu'il y a une différence entre la notion de prototype d'un objet (qu'on obtient via [`Object.getPrototypeOf(obj)`](/fr/docs/Web/JavaScript/Reference/Global_Objects/Object/getPrototypeOf), ou via la propriété dépréciée [`__proto__`](/fr/docs/Web/JavaScript/Reference/Global_Objects/Object/proto) ) et l' attribut `prototype` d'une fonction constructrice. La première concerne chaque instance, le dernier existe uniquement sur une fonction constructrice. Cela dit, `Object.getPrototypeOf(new Object())` renvoie au même object que `Object.prototype`.
+> [!NOTE]
+> Il faut bien comprendre qu'il y a une différence entre la notion de prototype d'un objet (qu'on obtient via [`Object.getPrototypeOf(obj)`](/fr/docs/Web/JavaScript/Reference/Global_Objects/Object/getPrototypeOf), ou via la propriété dépréciée [`__proto__`](/fr/docs/Web/JavaScript/Reference/Global_Objects/Object/proto) ) et l' attribut `prototype` d'une fonction constructrice. La première concerne chaque instance, le dernier existe uniquement sur une fonction constructrice. Cela dit, `Object.getPrototypeOf(new Object())` renvoie au même object que `Object.prototype`.
Prenons un exemple afin de rendre cela un peu plus clair.
@@ -74,9 +75,11 @@ Cette méthode renvoie simplement la valeur de l'objet pour lequel elle est appe
- Aucune n'est présente, le navigateur vérifie donc si le prototype objet de `personne1` (`Personne`) contient cette méthode.
- Pas de `valueOf()` non plus, donc le navigateur regarde si le prototype objet du constructeur `Personne()` (`Object`) possède cette méthode. Il y en a une, donc il l'appelle et tout va bien !
-> **Note :** Encore une fois, il est important d'insister sur le fait que les méthodes et attributs ne sont **pas** copiés d'un objet à un autre, mais qu'on y accède à chaque fois en remontant la chaine de prototypage.
+> [!NOTE]
+> Encore une fois, il est important d'insister sur le fait que les méthodes et attributs ne sont **pas** copiés d'un objet à un autre, mais qu'on y accède à chaque fois en remontant la chaine de prototypage.
-> **Note :** Il n'existe pas de façon officielle d'accéder directement au prototype d'un objet donné. Les « liens » entre les éléments de la chaine sont définis au sein d'une propriété interne appelée `[[prototype]]` définie dans la spécification de JavaScript. (voir [ECMAScript](/fr/docs/Web/JavaScript/Language_Resources)). Néanmoins, la plupart des navigateurs modernes implémentent l'attribut [`__proto__`](/fr/docs/Web/JavaScript/Reference/Global_Objects/Object/proto) (deux tirets soulignés ou _underscore_ de chaque côté) qui contient le prototype objet d'un objet. Vous pouvez tenter `personne1.__proto__` et `personne1.__proto__.__proto__` pour voir à quoi ressemble une chaine de prototypage dans la console !
+> [!NOTE]
+> Il n'existe pas de façon officielle d'accéder directement au prototype d'un objet donné. Les « liens » entre les éléments de la chaine sont définis au sein d'une propriété interne appelée `[[prototype]]` définie dans la spécification de JavaScript. (voir [ECMAScript](/fr/docs/Web/JavaScript/Language_Resources)). Néanmoins, la plupart des navigateurs modernes implémentent l'attribut [`__proto__`](/fr/docs/Web/JavaScript/Reference/Global_Objects/Object/proto) (deux tirets soulignés ou _underscore_ de chaque côté) qui contient le prototype objet d'un objet. Vous pouvez tenter `personne1.__proto__` et `personne1.__proto__.__proto__` pour voir à quoi ressemble une chaine de prototypage dans la console !
## L'attribut prototype : là où l'on définit les éléments héritables
@@ -88,7 +91,8 @@ Ainsi [`Object.prototype.toString()`](/fr/docs/Web/JavaScript/Reference/Global_O
[`Object.is()`](/fr/docs/Web/JavaScript/Reference/Global_Objects/Object/is), [`Object.keys()`](/fr/docs/Web/JavaScript/Reference/Global_Objects/Object/keys), ainsi que d'autres membres non définis dans `prototype` ne sont pas hérités par les instances d'objet ou les objets qui héritent de `Object.prototype`. Ces méthodes et attributs sont disponibles uniquement pour le constructeur `Object()`.
-> **Note :** Ça paraît bizarre, d'avoir une méthode définie au sein d'un constructeur qui est lui même une fonction non ? Eh bien, une fonction est aussi un type d'objet — vous pouvez jeter un œil à la documentation du constructeur [`Function()`](/fr/docs/Web/JavaScript/Reference/Global_Objects/Function) si vous ne nous croyez pas.
+> [!NOTE]
+> Ça paraît bizarre, d'avoir une méthode définie au sein d'un constructeur qui est lui même une fonction non ? Eh bien, une fonction est aussi un type d'objet — vous pouvez jeter un œil à la documentation du constructeur [`Function()`](/fr/docs/Web/JavaScript/Reference/Global_Objects/Function) si vous ne nous croyez pas.
1. Vous pouvez vérifier les attributs du prototype en reprenant l'exemple précédent et en entrant le code suivant dans la console JavaScript :
@@ -112,7 +116,8 @@ let maChaine = "Ceci est ma chaine de caractères.";
`maChaine` possède aussitôt plusieurs méthodes utiles pour manipuler les chaines de caractères telles que [`split()`](/fr/docs/Web/JavaScript/Reference/Global_Objects/String/split), [`indexOf()`](/fr/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf), [`replace()`](/fr/docs/Web/JavaScript/Reference/Global_Objects/String/replace)…
-> **Attention :** L'attribut `prototype` est un des éléments JavaScript qui peut le plus prêter à confusion. On pourrait penser qu'il s'agit du prototype objet de l'objet courant mais ça ne l'est pas (on peut y accéder via `__proto__`). L'attribut `prototype` est un attribut qui contient un objet où l'on définit les éléments dont on va pouvoir hériter.
+> [!WARNING]
+> L'attribut `prototype` est un des éléments JavaScript qui peut le plus prêter à confusion. On pourrait penser qu'il s'agit du prototype objet de l'objet courant mais ça ne l'est pas (on peut y accéder via `__proto__`). L'attribut `prototype` est un attribut qui contient un objet où l'on définit les éléments dont on va pouvoir hériter.
## Revenons sur create()
diff --git a/files/fr/learn/performance/multimedia/index.md b/files/fr/learn/performance/multimedia/index.md
index f76be929aed025..8fc4bc68b5bc32 100644
--- a/files/fr/learn/performance/multimedia/index.md
+++ b/files/fr/learn/performance/multimedia/index.md
@@ -34,7 +34,8 @@ Les fichiers média, et plus précisément les images et les vidéos, représent
-> **Note :** Cet article est une introduction à l'optimisation des éléments multimédia sur le web, couvrant les principes généraux et les techniques de base. Pour aller plus loin, consultez des ressources plus spécialisées, telles que [https://images.guide (en anglais)](https://images.guide).
+> [!NOTE]
+> Cet article est une introduction à l'optimisation des éléments multimédia sur le web, couvrant les principes généraux et les techniques de base. Pour aller plus loin, consultez des ressources plus spécialisées, telles que [https://images.guide (en anglais)](https://images.guide).
## Pourquoi optimiser vos éléments multimédia ?
@@ -62,7 +63,8 @@ En plus de charger un sous-ensemble d'images, vous devriez ensuite vous attarder
Le format de fichier le plus optimisé dépend directement du type d'image à charger.
-> **Note :** Pour obtenir des informations plus générales sur les types d'images, consultez le [guide des types d'images et de formats d'images](/fr/docs/Web/Media/Formats/Image_types).
+> [!NOTE]
+> Pour obtenir des informations plus générales sur les types d'images, consultez le [guide des types d'images et de formats d'images](/fr/docs/Web/Media/Formats/Image_types).
Le format [SVG](/fr/docs/Web/Media/Formats/Image_types#svg) est le plus approprié pour les images qui ne comprennent que quelques couleurs et qui n'ont pas la complexité d'une photographie. Cela nécessite la mise à disposition d'une source dans un format vectoriel. Si cette image n'est disponible qu'en format bitmap, alors le format [PNG](/fr/docs/Web/Media/Formats/Image_types#png) sera la solution de repli idéale. De bons exemples d'images idéalement fournies en SVG sont les logos, les illustrations, les graphiques ou les icônes (veuillez noter qu'il vaut mieux utiliser des images au format SVG que des polices d'icônes !). Qu'il s'agisse de SVG ou de PNG, les deux formats prennent en charge la transparence.
@@ -80,7 +82,8 @@ D'autres formats proposent des compressions encore plus efficaces que le format
- [WebP](/fr/docs/Web/Media/Formats/Image_types#webp) : un choix excellent pour les images, qu'elles soient fixes ou animées. WebP offre une meilleure compression que PNG ou JPEG et prend en charge les grandes profondeurs de couleurs, les animations, la transparence et de nombreuses autres fonctionnalités, à l'exception de l'affichage progressif. WebP est pris en charge par tous les navigateurs les plus utilisés à l'exception de Safari 14 sur macOS 14 sur ordinateur.
- > **Note :** en dépit de [la prise en charge annoncée de WebP sur Safari 14](https://developer.apple.com/videos/play/wwdc2020/10663/?time=1174), les images `.webp` ne s'affiche pas bien sur macOS sur ordinateur, alors qu'elles s'affichent bien sur iOS 14 sur mobile.
+ > [!NOTE]
+ > En dépit de [la prise en charge annoncée de WebP sur Safari 14](https://developer.apple.com/videos/play/wwdc2020/10663/?time=1174), les images `.webp` ne s'affiche pas bien sur macOS sur ordinateur, alors qu'elles s'affichent bien sur iOS 14 sur mobile.
- [AVIF](/fr/docs/Web/Media/Formats/Image_types#avif) : un bon choix pour les images fixes ou animées, du fait du haut niveau de performances et du fait qu'il est libre de droits. AVIF est encore plus efficient que WebP, mais il n'est pas aussi bien pris en charge : il est actuellement pris en charge sur Chrome, Opera et Firefox (à l'aide des [réglages de préférences](/fr/docs/Mozilla/Firefox/Experimental_features#avif_av1_image_file_format_support)).
Vous pouvez utiliser cet [outil en ligne pour convertir différents formats d'images en AVIF](https://avif-converter.online).
diff --git a/files/fr/learn/server-side/django/admin_site/index.md b/files/fr/learn/server-side/django/admin_site/index.md
index 074c3b4750062a..b14d8d430fe25d 100644
--- a/files/fr/learn/server-side/django/admin_site/index.md
+++ b/files/fr/learn/server-side/django/admin_site/index.md
@@ -58,7 +58,8 @@ admin.site.register(Genre)
admin.site.register(BookInstance)
```
-> **Note :** Si vous avez répondu au défi de la modelisation des langues des livres ([voir le chapitre précédent sur les modèles de données](/fr/docs/Learn/Server-side/Django/Models)), vous pouvez aussi importer cet objet !
+> [!NOTE]
+> Si vous avez répondu au défi de la modelisation des langues des livres ([voir le chapitre précédent sur les modèles de données](/fr/docs/Learn/Server-side/Django/Models)), vous pouvez aussi importer cet objet !
>
> Cela devrait être de la forme : `admin.site.register(Language)` et n'oubliez pas d'importer l'objet.
@@ -84,7 +85,8 @@ python3 manage.py runserver
Pour vous authentifier au site, ouvrez l'URL _/admin_ du site local (concrètement, [http://127.0.0.1:8000/admin](http://127.0.0.1:8000/admin/)) et identifiez vous avec votre compte de super-utilisateur.
-> **Note :** Vous serez redirigé⋅e vers l'application interne à Django de gestion de l'authentification et la pages de demande d'authentitification avant d'accéder réellement au site d'administration.
+> [!NOTE]
+> Vous serez redirigé⋅e vers l'application interne à Django de gestion de l'authentification et la pages de demande d'authentitification avant d'accéder réellement au site d'administration.
>
> Si vous accéder au site local sans /admin, vous aurez un message d'erreur car les routages d'URL n'ont pas encore été traité. ne vous en inquiétez pas cela va venir...
@@ -98,7 +100,8 @@ Entrez les valeurs des champs. Pour les champs qui relèvent de relations entre
![Admin Site - Book Add](admin_book_add.png)
-> **Note :** À ce stade, prenez le temps d'enregistrer plusieurs livres, genres et auteurs. Assurez-vous que chacun est associé à plusieurs autres éléments cela rendra vos listes à venir plus riches et intéressantes quand nous aborderons ces sujets.
+> [!NOTE]
+> À ce stade, prenez le temps d'enregistrer plusieurs livres, genres et auteurs. Assurez-vous que chacun est associé à plusieurs autres éléments cela rendra vos listes à venir plus riches et intéressantes quand nous aborderons ces sujets.
Après avoir saisie les informations et ajouté vos livres, cliquez sur le lien **Accueil** pour revenir à la page principale du site d'administration. Cliquez sur le lien **Books** pour afficher la liste des livres enregistrés (ou sur d'autres liens pour voir les autres objets présents en base). Après avoir ajouter quelques livres, votre page devrait ressembler à celle ci-dessous. La liste des livres est affichée par titre ; c'est, en fait, la valeur délivrée par la méthode `__str__()` du modèle d'objet Book comme cela a été codé dans le précédent chapitre.
@@ -212,7 +215,8 @@ class BookAdmin(admin.ModelAdmin):
Le champ genre représente une relation n à n (`ManyToManyField`) qui ne peut pas être prise en charge par la directive `list_display`. Le coût d'accès à la base de donnée peut être important et donc le cadriciel se protège de ce phénomène. A la place, nous devons définir une fonction(`display_genre`) qui permettra de traiter l'affichage des informations souhaitées pour le genre.
-> **Note :** C'est dans un but pédagogique que nous recherchons ici l'affichage du `genre` qui n'a peut-être pas nécessaire d'intérêt et peut représenter un coût d'accès. Nous montrons, ici, comment appler les fonctions dans vos modèles ce qui sera très utile pour la suite de vos applications — par exemple pour ajouter un lien de suppression de vos enregistrements en liste.
+> [!NOTE]
+> C'est dans un but pédagogique que nous recherchons ici l'affichage du `genre` qui n'a peut-être pas nécessaire d'intérêt et peut représenter un coût d'accès. Nous montrons, ici, comment appler les fonctions dans vos modèles ce qui sera très utile pour la suite de vos applications — par exemple pour ajouter un lien de suppression de vos enregistrements en liste.
Ajoutez le code ci-dessous dans votre modèle d'objet `Book` (concrètement dans le fichier **locallibrary/catalog/models.py**). Cette fonction génère une chaîne de caractère contenant les trois premières valeurs de tous les genres (s'ils existent) et créer une courte destription (`short_description`) qui sera utilisé par le site d'administration avec cette méthode.
@@ -230,7 +234,8 @@ Après avoir sauvegardé vos fichiers models.py et admin.py, vous pouvez accéde
Les champs `Genre` `Language` ne dispose que d'une seule valeur. Il n'est donc pas utile de créer une page d'affichage spélicale.
-> **Note :** Vous trouverez en fin d'article dans la défis personnel des propositions pour améliorer les ouvrages en prêt `BookInstance` !
+> [!NOTE]
+> Vous trouverez en fin d'article dans la défis personnel des propositions pour améliorer les ouvrages en prêt `BookInstance` !
### Ajouter des filtres
@@ -249,7 +254,8 @@ La page de la vue en liste des ouvrages à consultation (BookInstance) est déso
La vue est agencée, par défaut, en affichant verticalement dans l'ordre de déclaration des champs de l'objet modèle. Cette règle d'affichage peut être modifiée en indiquant quels champs afficher (ou exclure) et organiser les informations en sections avec un affichage horizontal ou vertical et les widgets à utiliser.
-> **Note :** Les modèles de l'application _LocalLibrary_ ne sont pas très compliqués sans énormément d'information à traiter. Il n'y a pas un grand besoin de changement d'affichage ; les éléments ci-dessous sont données pour avoir une idée des possibilités et savoir, le moment venu, comment faire.
+> [!NOTE]
+> Les modèles de l'application _LocalLibrary_ ne sont pas très compliqués sans énormément d'information à traiter. Il n'y a pas un grand besoin de changement d'affichage ; les éléments ci-dessous sont données pour avoir une idée des possibilités et savoir, le moment venu, comment faire.
#### Contrôler l'affichage et la dispostion des champs
@@ -267,7 +273,8 @@ La page web de votre application locale devrait ressembler à celle ci-dessous :
![Admin Site - Improved Author Detail](admin_improved_author_detail.png)
-> **Note :** Vous pouvez aussi utiliser l'attribut `exclude` pour identifier des attributs du modèle que vous souhaitez exclure de l'affichage (les autres attributs seront alors affichés). Pour plus de détails vous pouvez consulter la documentation Django sur l'attribut [`exclude`](https://docs.djangoproject.com/fr/2.2/ref/contrib/admin/#django.contrib.admin.ModelAdmin.exclude).
+> [!NOTE]
+> Vous pouvez aussi utiliser l'attribut `exclude` pour identifier des attributs du modèle que vous souhaitez exclure de l'affichage (les autres attributs seront alors affichés). Pour plus de détails vous pouvez consulter la documentation Django sur l'attribut [`exclude`](https://docs.djangoproject.com/fr/2.2/ref/contrib/admin/#django.contrib.admin.ModelAdmin.exclude).
#### Organiser des sections dans votre vue de détail
@@ -318,7 +325,8 @@ Si vous allez consulter un livre, vous devriez pouvoir, au bas de la page, consu
Dans le cas présent nous avons juste décidé d'afficher toutes les informations des copies associées à un livre. Si vous consultez sur la documentation Django les informations relatives au type [TabularInline](https://docs.djangoproject.com/fr/2.2/ref/contrib/admin/#django.contrib.admin.TabularInline) vous aurez accès à l'ensemble des éléments qui permettent de filtrer et afficher les éléments dont vous aurez besoin.
-> **Note :** Il y a quelques limitations pénibles à ces outils. Si vous observez bien la liste des copies pour un ouvrage, vous decouvrirez des copies fantômes sans nom et informations pré-reservées pour de futures instances à enregistrer. Il serait préférable de ne pas les avoir et vous devriez alors appliquer un filtre pour éliminer de l'affichage ces copies. Vous pourriez aussi ajouter une section particulière pour permettre d'ajouter de nouvelles copies dans les rayonnages... La première solution est assez rapide à traiter en utilisant l'attribut `extra` à 0 dans la définition de l'objet `BooksInstanceInline` ... essayez !
+> [!NOTE]
+> Il y a quelques limitations pénibles à ces outils. Si vous observez bien la liste des copies pour un ouvrage, vous decouvrirez des copies fantômes sans nom et informations pré-reservées pour de futures instances à enregistrer. Il serait préférable de ne pas les avoir et vous devriez alors appliquer un filtre pour éliminer de l'affichage ces copies. Vous pourriez aussi ajouter une section particulière pour permettre d'ajouter de nouvelles copies dans les rayonnages... La première solution est assez rapide à traiter en utilisant l'attribut `extra` à 0 dans la définition de l'objet `BooksInstanceInline` ... essayez !
## Défi
diff --git a/files/fr/learn/server-side/django/development_environment/index.md b/files/fr/learn/server-side/django/development_environment/index.md
index 8b78b5f71f368a..6a8e7c533caf5f 100644
--- a/files/fr/learn/server-side/django/development_environment/index.md
+++ b/files/fr/learn/server-side/django/development_environment/index.md
@@ -50,7 +50,8 @@ Django est extrêmement flexible sur sa manière d'être installé et configuré
Chacune de ces options requiert une configuration et une installation légèrement différente. Les sous-sections ci-dessous vous expliquent différents choix. Dans le reste de l'article, nous vous montrerons comment installer Django sur un nombre restreint de systèmes d'exploitation, et nous supposerons que cette installation aura été suivie pour tout le reste du module.
-> **Note :** D'autres options d'installation possibles sont traitées dans la documentation officielle de Django. Les liens vers la [documentation appropriée peuvent-être trouvés ci-dessous](/fr/docs/Learn/Server-side/Django/development_environment).
+> [!NOTE]
+> D'autres options d'installation possibles sont traitées dans la documentation officielle de Django. Les liens vers la [documentation appropriée peuvent-être trouvés ci-dessous](/fr/docs/Learn/Server-side/Django/development_environment).
#### Quels systèmes d'exploitation sont supportés ?
@@ -64,7 +65,8 @@ Nous vous recommandons d'utiliser la version la plus récente disponible — au
Si besoin, les versions de Python 3.5 et ultérieures peuvent être utilisées (le support pour Python 3.5 sera abandonné lors de la sortie des prochaines versions).
-> **Note :** Python 2.7 ne peut pas être utilisé avec Django 2.1 (la série Django 1.11.x est la dernière à supporter Python 2.7).
+> [!NOTE]
+> Python 2.7 ne peut pas être utilisé avec Django 2.1 (la série Django 1.11.x est la dernière à supporter Python 2.7).
#### Où peut-on télécharger Django ?
@@ -82,13 +84,15 @@ Django supporte quatre bases de données principales (PostgreSQL, MySQL, Oracle
Dans cet article (et quasiment tout le module), nous utiliserons la base _SQLite_, qui sauvegarde ses données dans des fichiers. SQLite a été conçu pour être utilisé comme une base de données légère, mais elle ne peut pas supporter un haut niveau de compétition. Elle est cependant un excellent choix pour des applications qui sont prioritairement en lecture seule.
-> **Note :** Django est configuré pour utiliser SQLite par défaut lorsque vous démarrez le projet de votre site web en utilisant les outils standards (_django-admin_). C'est un très bon choix lorsque vous débutez car elle ne requiert aucune configuration ou installation particulière.
+> [!NOTE]
+> Django est configuré pour utiliser SQLite par défaut lorsque vous démarrez le projet de votre site web en utilisant les outils standards (_django-admin_). C'est un très bon choix lorsque vous débutez car elle ne requiert aucune configuration ou installation particulière.
#### Installation globale ou dans un environnement virtuel Python ?
Lorsque vous installez Python3, vous obtenez un environnement global unique partagé par tout le code Python3. Bien que vous puissiez installer n'importe quel package Python souhaité dans cet environnement, vous ne pouvez disposer que d'une seule version d'un package donné à la fois.
-> **Note :** Les applications installées dans l'environnement global peuvent potentiellement entrer en conflit avec les autres (i.e. si elles dépendent de versions différentes d'un même package).
+> [!NOTE]
+> Les applications installées dans l'environnement global peuvent potentiellement entrer en conflit avec les autres (i.e. si elles dépendent de versions différentes d'un même package).
Si vous installez Django dans l'environnement par défaut/global, vous ne pourrez alors cibler qu'une seule version de Django sur votre machine. Cela peut devenir un problème si vous souhaitez créer de nouveaux sites web (utilisant la dernière version de Django) tout en maintenant d'autres sites web dépendant de versions antérieures.
@@ -102,7 +106,8 @@ Si vous souhaitez utiliser Django, vous devrez installer Python sur votre systè
Cette section décrit brièvement comment vérifier quelle version de Python sont disponibles, et comment installer de nouvelles versions si nécessaire, sur Ubuntu Linux 18.04, macOS et Windows 10.
-> **Note :** En fonction de votre plateforme, vous aurez probablement aussi besoin d'installer Python/pip depuis le gestionnaire de packages de votre système d'exploitation, ou via d'autre moyens. Pour la plupart des plateformes, vous pouvez télécharger les fichiers d'installation requis depuis et les installer en utilisant la méthode appropriée à votre plateforme.
+> [!NOTE]
+> En fonction de votre plateforme, vous aurez probablement aussi besoin d'installer Python/pip depuis le gestionnaire de packages de votre système d'exploitation, ou via d'autre moyens. Pour la plupart des plateformes, vous pouvez télécharger les fichiers d'installation requis depuis et les installer en utilisant la méthode appropriée à votre plateforme.
### Ubuntu 18.04
@@ -175,7 +180,8 @@ L'installeur Windows inclut _pip3_ (le gestionnaire de packages Python) par déf
pip3 list
```
-> **Note :** L'installeur devrait configurer tout ce dont vous avez besoin pour que les commandes ci-dessus fonctionnent. Toutefois, si vous obtenez un message vous indiquant que Python ne peut pas être trouvé (Python cannot be found), il est possible que vous ayez oublié de l'ajouter à votre PATH système. Vous pouvez faire cela en réexécutant l'installeur, sélectionnez "Modifier", puis cochez la case intitulée "Ajouter Python aux variables d'environnement" sur le deuxième page.
+> [!NOTE]
+> L'installeur devrait configurer tout ce dont vous avez besoin pour que les commandes ci-dessus fonctionnent. Toutefois, si vous obtenez un message vous indiquant que Python ne peut pas être trouvé (Python cannot be found), il est possible que vous ayez oublié de l'ajouter à votre PATH système. Vous pouvez faire cela en réexécutant l'installeur, sélectionnez "Modifier", puis cochez la case intitulée "Ajouter Python aux variables d'environnement" sur le deuxième page.
## Utiliser Django dans un environnement virtuel Python
@@ -203,7 +209,8 @@ export PROJECT_HOME=$HOME/Devel
source /usr/local/bin/virtualenvwrapper.sh
```
-> **Note :** Les variables `VIRTUALENVWRAPPER_PYTHON` et `VIRTUALENVWRAPPER_VIRTUALENV_ARGS` pointent vers l'emplacement d'installation par défaut de Python3, et `source /usr/local/bin/virtualenvwrapper.sh` pointe vers l'emplacement par défaut du script `virtualenvwrapper.sh`. Si le _virtualenv_ ne fonctionne pas quand vous le testez, vérifiez que Python et le script sont bien aux emplacements attendus (puis modifiez le fichier de configuration en conséquence).
+> [!NOTE]
+> Les variables `VIRTUALENVWRAPPER_PYTHON` et `VIRTUALENVWRAPPER_VIRTUALENV_ARGS` pointent vers l'emplacement d'installation par défaut de Python3, et `source /usr/local/bin/virtualenvwrapper.sh` pointe vers l'emplacement par défaut du script `virtualenvwrapper.sh`. Si le _virtualenv_ ne fonctionne pas quand vous le testez, vérifiez que Python et le script sont bien aux emplacements attendus (puis modifiez le fichier de configuration en conséquence).
>
> Vous pourrez trouver les bons emplacements de votre système en utilisant les commandes `which virtualenvwrapper.sh` et `which python3`.
@@ -245,7 +252,8 @@ export PROJECT_HOME=$HOME/Devel
source /usr/local/bin/virtualenvwrapper.sh
```
-> **Note :** La variable `VIRTUALENVWRAPPER_PYTHON` pointe vers l'emplacement d'installation par défaut de Python3, et `source /usr/local/bin/virtualenvwrapper.sh` pointe vers l'emplacement par défaut du script `virtualenvwrapper.sh`. Si le _virtualenv_ ne fonctionne pas quand vous le testez, vérifiez que Python et le script sont bien aux emplacements attendus (puis modifiez le fichier de configuration en conséquence).
+> [!NOTE]
+> La variable `VIRTUALENVWRAPPER_PYTHON` pointe vers l'emplacement d'installation par défaut de Python3, et `source /usr/local/bin/virtualenvwrapper.sh` pointe vers l'emplacement par défaut du script `virtualenvwrapper.sh`. Si le _virtualenv_ ne fonctionne pas quand vous le testez, vérifiez que Python et le script sont bien aux emplacements attendus (puis modifiez le fichier de configuration en conséquence).
>
> Par exemple, une installation test sur macOS a résulté en l'ajout des lignes suivantes dans le fichier startup :
>
@@ -260,7 +268,8 @@ source /usr/local/bin/virtualenvwrapper.sh
Ce sont les mêmes lignes que pour Ubuntu, mais le nom du fichier de configuration caché du répertoire home est différent : **.bash_profile** dans votre répertoire home.
-> **Note :** Si vous n'arrivez pas à trouver le fichier **.bash_profile** depuis le finder, vous pouvez aussi l'ouvrir depuis le terminal en utilisant nano.
+> [!NOTE]
+> Si vous n'arrivez pas à trouver le fichier **.bash_profile** depuis le finder, vous pouvez aussi l'ouvrir depuis le terminal en utilisant nano.
>
> La commande sera la suivante :
>
@@ -307,7 +316,8 @@ virtualenvwrapper.user_scripts creating /home/ubuntu/.virtualenvs/t_env7/bin/get
Maintenant que vous êtes dans votre environnement virtuel vous pouvez installer Django et commencer à développer.
-> **Note :** A partir de ce point dans l'article (et donc dans le module), vous pourrez considérer que toutes les commandes seront exécutées dans un environnement virtuel Python comme celui que nous avons mis en place plus haut.
+> [!NOTE]
+> A partir de ce point dans l'article (et donc dans le module), vous pourrez considérer que toutes les commandes seront exécutées dans un environnement virtuel Python comme celui que nous avons mis en place plus haut.
### Utiliser un environnement virtuel
@@ -338,7 +348,8 @@ py -3 -m django --version
2.1.5
```
-> **Note :** Si la commande Windows ci-dessus n'indique aucun module Django présent, essayez :
+> [!NOTE]
+> Si la commande Windows ci-dessus n'indique aucun module Django présent, essayez :
>
> ```bash
> py -m django --version
@@ -346,7 +357,8 @@ py -3 -m django --version
>
> Dans Windows, les scripts _Python 3_ sont exécutés en préfixant la commande avec `py -3`, bien que ceci puisse varier suivant votre installation. Essayer en enlevant le modificateur `-3` si vous rencontrez un problème avec la commande. Dans Linux/macOS, la commande est `python3.`
-> **Attention :** Le reste de ce **module** utilise les commandes _Linux_ pour invoquer Python 3 (`python3`) . . Si vous travaillez sous _Windows_ , remplacez simplement ce préfixe avec : `py -3`
+> [!WARNING]
+> Le reste de ce **module** utilise les commandes _Linux_ pour invoquer Python 3 (`python3`) . . Si vous travaillez sous _Windows_ , remplacez simplement ce préfixe avec : `py -3`
## Tester votre installation
@@ -381,7 +393,8 @@ Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
```
-> **Note :** La commande ci-dessus montre le résultat de l'exécution sur Linux/macOS. Vous pouvez ignorer les warnings à propos des "15 unapplied migration(s)" à partir de là !
+> [!NOTE]
+> La commande ci-dessus montre le résultat de l'exécution sur Linux/macOS. Vous pouvez ignorer les warnings à propos des "15 unapplied migration(s)" à partir de là !
Maintenant que votre serveur est lancé, vous pouvez voir le site en naviguant vers l'URL suivante depuis votre navigateur local : `http://127.0.0.1:8000/`. Vous devriez voir un site ressemblant à celui-ci :
diff --git a/files/fr/learn/server-side/django/forms/index.md b/files/fr/learn/server-side/django/forms/index.md
index 5ddb3a973495c2..ea1db48cfa08bb 100644
--- a/files/fr/learn/server-side/django/forms/index.md
+++ b/files/fr/learn/server-side/django/forms/index.md
@@ -100,7 +100,8 @@ En se basant sur la lecture du diagramme ci-dessus, les tâches principales dont
Django fournit une multitude d'outils et de méthodes pour vous assister dans les tâches mentionnées ci-dessus. Parmi eux, la plus importante est la classe `Form`, qui simplifie à la fois la production de formulaire HTML mais aussi la validation des données. Dans la section suivante, nous décrivons comment les formulaires fonctionnent en prenant l'exemple d'une page qui permet aux bibliothécaires de renouveler des livres.
-> **Note :** Comprendre l'utilisation de `Form` vous aidera quand nous parlerons des classes de formulaires de Django plus complexes.
+> [!NOTE]
+> Comprendre l'utilisation de `Form` vous aidera quand nous parlerons des classes de formulaires de Django plus complexes.
## Formulaire de renouvellement de livre par l'utilisation de Form et d'une vue fonctionnelle
@@ -180,7 +181,8 @@ Il y a deux choses importantes à noter. La première est que nous accédons à
Le deuxième point est que, si une valeur tombe en dehors de l'intervalle que nous avons autorisé, nous levons une `ValidationError`, en spécifiant le texte d'erreur que nous voulons afficher dans la zone du formulaire prévue pour le cas où l'utilisateur entre une valeur non valide. L'exemple ci-dessus enveloppe aussi ce texte dans `ugettext_lazy()` (importée comme `_()`), une des [fonctions de traduction Django](https://docs.djangoproject.com/fr/3.1/topics/i18n/translation/), ce qui est une bonne pratique si vous voulez traduire votre site plus tard.
-> **Note :** Il y a un grand nombre d'autres méthodes et exemples au sujet de la validation des formulaires dans [La validation de formulaires et de champs](https://docs.djangoproject.com/fr/3.1/ref/forms/validation/) (Documentation de Django). Par exemple, au cas où vous avez plusieurs champs dépendants les uns des autres, vous pouvez réécrire la fonction [Form.clean()](https://docs.djangoproject.com/fr/3.1/ref/forms/api/#django.forms.Form.clean), et lever de nouveau une `ValidationError`.
+> [!NOTE]
+> Il y a un grand nombre d'autres méthodes et exemples au sujet de la validation des formulaires dans [La validation de formulaires et de champs](https://docs.djangoproject.com/fr/3.1/ref/forms/validation/) (Documentation de Django). Par exemple, au cas où vous avez plusieurs champs dépendants les uns des autres, vous pouvez réécrire la fonction [Form.clean()](https://docs.djangoproject.com/fr/3.1/ref/forms/api/#django.forms.Form.clean), et lever de nouveau une `ValidationError`.
C'est tout ce dont nous avons besoin pour notre formulaire dans cet exemple.
@@ -196,7 +198,8 @@ urlpatterns += [
La configuration d'URL va rediriger les URLs ayant le format **/catalog/book/_\_/renew/** vers la fonction appelée `renew_book_librarian()` dans **views.py**, et envoyer l'`id` de `BookInstance` comme paramètre sous le nom `pk`. Le motif ne fonctionnera que si `pk` est un `uuid` correctement formaté.
-> **Note :** Nous pouvons appeler comme bon nous semble la donnée d'URL "`pk`" que nous avons capturée, car nous contrôlons complètement la fonction de notre vue (nous n'utilisons pas une vue générique "détail", laquelle attendrait des paramètres avec un certain nom). Cependant, le raccourci `pk`, pour "primary key", est une convention qu'il est raisonnable d'utiliser !
+> [!NOTE]
+> Nous pouvons appeler comme bon nous semble la donnée d'URL "`pk`" que nous avons capturée, car nous contrôlons complètement la fonction de notre vue (nous n'utilisons pas une vue générique "détail", laquelle attendrait des paramètres avec un certain nom). Cependant, le raccourci `pk`, pour "primary key", est une convention qu'il est raisonnable d'utiliser !
### Vue
@@ -307,7 +310,8 @@ Si le formulaire n'est pas valide, nous appelons à nouveau la fonction `render(
Si le formulaire est valide, alors nous pouvons commencer à utiliser les données, en y accédant à travers l'attribut `form.cleaned_data` (par exemple, `data = form.cleaned_data['renewal_date']`). Ici, nous ne faisons que sauvegarder les données reçues dans la valeur `due_back` de l'objet `BookInstance` associé.
-> **Attention :** Alors que vous pouvez accéder aussi aux données de formulaire directement à travers la requête (par exemple, `request.POST['renewal_date']`, ou `request.GET['renewal_date']` si vous utilisez une requête GET), ce n'est PAS recommandé. Les données nettoyées sont assainies, validées et converties en types standard Python.
+> [!WARNING]
+> Alors que vous pouvez accéder aussi aux données de formulaire directement à travers la requête (par exemple, `request.POST['renewal_date']`, ou `request.GET['renewal_date']` si vous utilisez une requête GET), ce n'est PAS recommandé. Les données nettoyées sont assainies, validées et converties en types standard Python.
L'étape finale dans la partie "gestion de formulaire" de la vue est de rediriger vers une autre page, habituellement une page "success". Dans ce cas, nous utilisons `HttpResponseRedirect` et `reverse()` pour rediriger vers la vue appelée `'all-borrowed'` (qui a été créée dans la partie "challenge" de [Django didactique section 8 : Authentification des utilisateurs et permissions](/fr/docs/Learn/Server-side/Django/Authentication#challenge_yourself). Si vous n'avez pas créé cette page, vous pouvez rediriger vers la page d'accueil à l'URL '`/`').
@@ -387,7 +391,8 @@ Nous étendons le template de base et ensuite redéfinissons le block "content".
Le code du formulaire est relativement simple. Nous déclarons d'abord les balises `form`, en précisant où le formulaire doit être adressé (`action`) et la `method` utilisée pour soumettre les données (ici un "HTTP `POST`"). Si vous vous rappelez ce qui a été dit en haut de cette page (aperçu sur les [Formulaires HTML](#formulaires_html)), une `action` vide comme ici signifie que les données de formulaire seront postées à nouveau à l'URL actuelle (ce qui est le comportement que nous voulons !). À l'intérieur des balises, nous définissons le bouton `submit` sur lequel l'utilisateur peut appuyer pour envoyer les données. Le `{% csrf_token %}` ajouté juste à l'intérieur des balises `form` est un des éléments de protection utilisés par Django contre les "_cross-site forgery_" (falsification de requête inter-site).
-> **Note :** Ajoutez le `{% csrf_token %}` à tout template Django que vous créez et qui utilise `POST` pour soumettre les données. Cela réduira les risques qu'un utilisateur mal intentionné pirate vos formulaires.
+> [!NOTE]
+> Ajoutez le `{% csrf_token %}` à tout template Django que vous créez et qui utilise `POST` pour soumettre les données. Cela réduira les risques qu'un utilisateur mal intentionné pirate vos formulaires.
Tout ce qui reste est la variable de template `\{{ form }}`, que nous avons passée au template dans le dictionnaire de contexte. Peut-être sans surprise, quand il est utilisé comme indiqué, il fournit le rendu par défaut de tous les champs de formulaire, y compris leurs labels, widgets et textes d'aide. Voici le rendu :
@@ -409,7 +414,8 @@ Tout ce qui reste est la variable de template `\{{ form }}`, que nous avons pass
```
-> **Note :** Ce n'est peut-être pas évident, car nous n'avons qu'un seul champ, mais, par défaut, chaque champ est défini dans sa propre ligne de tableau. Ce même rendu est fourni si vous référencez la variable de template `\{{ form.as_table }}`.
+> [!NOTE]
+> Ce n'est peut-être pas évident, car nous n'avons qu'un seul champ, mais, par défaut, chaque champ est défini dans sa propre ligne de tableau. Ce même rendu est fourni si vous référencez la variable de template `\{{ form.as_table }}`.
Si vous aviez entré une date invalide, vous obtiendriez en plus sur la page une liste des erreurs (voir `errorlist` ci-dessous).
@@ -457,7 +463,8 @@ Si vous avez accepté le "challenge" dans [Django didactique - section 8 :
{% endif %}
```
-> **Note :** Souvenez-vous que votre login de test devra avoir la permission "`catalog.can_mark_returned`" pour pouvoir accéder à la page de renouvellement de livre (utilisez peut-être votre compte superuser).
+> [!NOTE]
+> Souvenez-vous que votre login de test devra avoir la permission "`catalog.can_mark_returned`" pour pouvoir accéder à la page de renouvellement de livre (utilisez peut-être votre compte superuser).
Vous pouvez aussi construire manuellement une URL de test comme ceci : `http://127.0.0.1:8000/catalog/book//renew/` (un `bookinstance_id` valide peut être obtenu en naviguant vers une page de détail de livre dans votre bibliothèque, et en copiant le champ `id`).
@@ -494,11 +501,13 @@ class RenewBookModelForm(ModelForm):
fields = ['due_back']
```
-> **Note :** Vous pouvez inclure tous les champs en utilisant `fields = '__all__'`, ou bien utiliser `exclude` (au lieu de `fields`) pour préciser les champs à ne _pas_ importer du modèle.
+> [!NOTE]
+> Vous pouvez inclure tous les champs en utilisant `fields = '__all__'`, ou bien utiliser `exclude` (au lieu de `fields`) pour préciser les champs à ne _pas_ importer du modèle.
>
> Aucune approche n'est recommandée, car tout nouveau champ ajouté au modèle est automatiquement inclus dans le formulaire (sans considération du développeur de répercussions sécuritaires éventuelles).
-> **Note :** Cela peut ne pas sembler beaucoup plus simple que d'utiliser un simple `Form`, et ça ne l'est effectivement pas dans ce cas, parce que nous n'avons qu'un seul champ. Cependant, si vous avez beaucoup de champs, cela peut réduire notablement la quantité de code !
+> [!NOTE]
+> Cela peut ne pas sembler beaucoup plus simple que d'utiliser un simple `Form`, et ça ne l'est effectivement pas dans ce cas, parce que nous n'avons qu'un seul champ. Cependant, si vous avez beaucoup de champs, cela peut réduire notablement la quantité de code !
Le reste de l'information vient des définitions de champ données par le modèle (par exemple, les labels, les widgets, le texte d'aide, les messages d'erreur). S'ils ne sont pas suffisamment satisfaisants, nous pouvons les réécrire dans notre `class Meta`, en précisant un dictionnaire contenant le champ à modifier et sa nouvelle valeur. Par exemple, dans ce formulaire, nous pourrions souhaiter, pour notre champ, un label tel que "_Renewal date_" (plutôt que celui par défaut, basé sur le nom du champ : _Due Back_), et nous voulons aussi que notre texte d'aide soit spécifique à ce cas d'utilisation. La classe `Meta` ci-dessous vous montre comment réécrire ces champs, et vous pouvez pareillement définir `widgets` et `error_messages` si les valeurs par défaut ne sont pas suffisantes.
@@ -545,7 +554,8 @@ La classe `RenewBookModelForm` ci-dessus est maintenant fonctionnellement équiv
L'algorithme de gestion des formulaires que nous avons utilisé ci-dessus, dans notre exemple de vue fonctionnelle, représente un processus extrêmement commun dans les vues destinées à éditer un formulaire. Django abstrait pour vous la plus grande partie de ce processus répétitif (boilerplate) en proposant des [vues génériques d'édition](https://docs.djangoproject.com/fr/3.1/ref/class-based-views/generic-editing/) pour les vues de création, édition et suppression basées sur des modèles. Ces vues génériques non seulement assument le comportement d'une vue, mais elles créent automatiquement la classe de formulaire (un `ModelForm`) pour vous à partir du modèle.
-> **Note :** En plus des vues d'édition décrites ici, il existe aussi une classe [FormView](https://docs.djangoproject.com/fr/3.1/ref/class-based-views/generic-editing/#formview), qui se tient, en termes de rapport "flexibilité"/"effort codage", à mi-chemin entre notre vue basée sur une fonction et les autres vues génériques. En utilisant `FormView`, vous avez encore besoin de créer votre `Form`, mais vous n'avez pas besoin d'implémenter tous les éléments d'une gestion standard de formulaire. À la place, vous n'avez qu'à fournir une implémentation de la fonction qui sera appelée une fois que les données envoyées sont reconnues valides.
+> [!NOTE]
+> En plus des vues d'édition décrites ici, il existe aussi une classe [FormView](https://docs.djangoproject.com/fr/3.1/ref/class-based-views/generic-editing/#formview), qui se tient, en termes de rapport "flexibilité"/"effort codage", à mi-chemin entre notre vue basée sur une fonction et les autres vues génériques. En utilisant `FormView`, vous avez encore besoin de créer votre `Form`, mais vous n'avez pas besoin d'implémenter tous les éléments d'une gestion standard de formulaire. À la place, vous n'avez qu'à fournir une implémentation de la fonction qui sera appelée une fois que les données envoyées sont reconnues valides.
Dans cette section, nous allons utiliser des vues génériques d'édition pour créer des pages afin de pouvoir ajouter les fonctionnalités de création, d'édition et de suppression des enregistrements de type `Author` de notre bibliothèque, fournissant efficacement une réimplémentation basique de certaines parties du site Admin (cela peut être intéressant si vous avez besoin d'offrir une fonctionnalité admin d'une manière plus flexible que ce qui peut être présenté par le site admin).
@@ -636,7 +646,8 @@ Il n'y a rien de particulièrement nouveau ici ! Vous pouvez voir que les vues s
Les pages de création, modification et suppression d'auteur sont maintenant prêtes à être testées (nous ne nous mettons pas en peine pour cette fois, bien que vous puissiez le faire si vous le souhaiter, de les accrocher dans la barre latérale du site).
-> **Note :** Les utilisateurs observateurs auront remarqué que nous n'avons rien fait pour empêcher les utilisateurs non autorisés d'accéder à ces pages ! Nous laissons cela comme exercice pour vous (suggestion : vous pourriez utiliser le `PermissionRequiredMixin`, et soit créer une nouvelle permission, soit réutiliser notre permission `can_mark_returned`).
+> [!NOTE]
+> Les utilisateurs observateurs auront remarqué que nous n'avons rien fait pour empêcher les utilisateurs non autorisés d'accéder à ces pages ! Nous laissons cela comme exercice pour vous (suggestion : vous pourriez utiliser le `PermissionRequiredMixin`, et soit créer une nouvelle permission, soit réutiliser notre permission `can_mark_returned`).
### Test de la page
diff --git a/files/fr/learn/server-side/django/generic_views/index.md b/files/fr/learn/server-side/django/generic_views/index.md
index d7e3482ba26639..2252ce3cc102ad 100644
--- a/files/fr/learn/server-side/django/generic_views/index.md
+++ b/files/fr/learn/server-side/django/generic_views/index.md
@@ -75,7 +75,8 @@ class BookListView(generic.ListView):
C'est tout ! La vue générique va adresser une requête à la base de données pour obtenir tous les enregistrements du modèle spécifié (`Book`), et ensuite rendre un template situé à l'adresse **/locallibrary/catalog/templates/catalog/book_list.html** (que nous allons créer ci-dessous). À l'intérieur du template vous pouvez accéder à la liste de livres grâce à la variable de template appelée `object_list` OU `book_list` (c'est-à-dire l'appellation générique "`the_model_name_list`").
-> **Note :** Ce chemin étrange vers le lieu du template n'est pas une faute de frappe : les vues génériques cherchent les templates dans `/application_name/the_model_name_list.html` (`catalog/book_list.html` dans ce cas) à l'intérieur du répertoire `/application_name/templates/` (`/catalog/templates/`).
+> [!NOTE]
+> Ce chemin étrange vers le lieu du template n'est pas une faute de frappe : les vues génériques cherchent les templates dans `/application_name/the_model_name_list.html` (`catalog/book_list.html` dans ce cas) à l'intérieur du répertoire `/application_name/templates/` (`/catalog/templates/`).
Vous pouvez ajouter des attributs pour changer le comportement par défaut utilisé ci-dessus. Par exemple, vous pouvez spécifier un autre fichier de template si vous souhaitez avoir plusieurs vues qui utilisent ce même modèle, ou bien vous pourriez vouloir utiliser un autre nom de variable de template, si book_list n'est pas intuitif par rapport à l'usage que vous faites de vos templates. Probablement, le changement le plus utile est de changer/filtrer le sous-ensemble des résultats retournés : au lieu de lister tous les livres, vous pourriez lister les 5 premiers livres lus par d'autres utilisateurs.
@@ -121,7 +122,8 @@ Quand vous faites cela, il est important de suivre la procédure indiquée ci-de
- Ensuite ajouter la nouvelle information de contexte.
- Enfin retourner le nouveau contexte (mis à jour).
-> **Note :** Voyez dans [Built-in class-based generic views](https://docs.djangoproject.com/en/2.1/topics/class-based-views/generic-display/) (doc de Django) pour avoir beaucoup plus d'exemples de ce que vous pouvez faire.
+> [!NOTE]
+> Voyez dans [Built-in class-based generic views](https://docs.djangoproject.com/en/2.1/topics/class-based-views/generic-display/) (doc de Django) pour avoir beaucoup plus d'exemples de ce que vous pouvez faire.
### Créer le template pour la Vue Liste
@@ -188,7 +190,8 @@ Nous accédons aux _champs_ de l'enregistrement "livre" associé, en utilisant l
Nous pouvons aussi appeler des _fonctions_ contenues dans le modèle depuis l'intérieur de notre template — dans ce cas nous appelons `Book.get_absolute_url()` pour obtenir une URL que vous pouvez utiliser pour afficher dans la vue détail l'enregistrement associé. Cela fonctionne, pourvu que la fonction ne comporte pas d'arguments (il n'y a aucun moyen de passer des arguments !).
-> **Note :** Il nous faut être quelque peu attentifs aux "effets de bord" quand nous appelons des fonctions dans nos templates. Ici nous récupérons simplement une URL à afficher, mais une fonction peut faire à peu près n'importe quoi — nous ne voudrions pas effacer notre base de données (par exemple) juste parce que nous avons affiché notre template !
+> [!NOTE]
+> Il nous faut être quelque peu attentifs aux "effets de bord" quand nous appelons des fonctions dans nos templates. Ici nous récupérons simplement une URL à afficher, mais une fonction peut faire à peu près n'importe quoi — nous ne voudrions pas effacer notre base de données (par exemple) juste parce que nous avons affiché notre template !
#### Mettre à jour le template de base
@@ -224,13 +227,16 @@ Pour le chemin _book-detail_, le pattern d'URL utilise une syntaxe spéciale pou
Dans ce cas, nous utilisons `''` pour capturer l'id du livre, qui doit être une chaîne formatée d'une certaine manière, et passer cet id à la vue en tant que paramètre nommé `pk` (abréviation pour primary key - clé primaire). C'est l'id qui doit être utilisé pour stocker le livre de manière unique dans la base de données, comme défini dans le modèle Book.
-> **Note :** Comme nous l'avons dit précédemment, notre URL correcte est en réalité `catalog/book/` (comme nous sommes dans l'application **catalog**, `/catalog/` est supposé).
+> [!NOTE]
+> Comme nous l'avons dit précédemment, notre URL correcte est en réalité `catalog/book/` (comme nous sommes dans l'application **catalog**, `/catalog/` est supposé).
-> **Attention :** La vue générique basée sur classe "détail" _s'attend_ à recevoir un paramètre appelé **pk**. Si vous écrivez votre propre fonction, vous pouvez utiliser le nom que vous voulez pour votre paramètre, ou même passer l'information avec un argument non nommé.
+> [!WARNING]
+> La vue générique basée sur classe "détail" _s'attend_ à recevoir un paramètre appelé **pk**. Si vous écrivez votre propre fonction, vous pouvez utiliser le nom que vous voulez pour votre paramètre, ou même passer l'information avec un argument non nommé.
#### Introduction aux chemins et expressions régulières avancés
-> **Note :** Vous n'aurez pas besoin de cette section pour achever le tutoriel ! Nous en parlons parce que nous savons que cette option vous sera probablement utile dans votre avenir centré sur Django.
+> [!NOTE]
+> Vous n'aurez pas besoin de cette section pour achever le tutoriel ! Nous en parlons parce que nous savons que cette option vous sera probablement utile dans votre avenir centré sur Django.
La recherche de pattern fournie par `path()` est simple et utile pour les cas (très communs) où vous voulez seulement capturer _n'importe quelle_ chaîne ou entier. Si vous avez besoin d'un filtre plus affiné (par exemple pour filtrer seulement les chaînes qui ont un certain nombre de caractères), alors vous pouvez utiliser la méthode [re_path()](https://docs.djangoproject.com/en/2.1/ref/urls/#django.urls.re_path).
@@ -330,7 +336,8 @@ Considérons quelques exemples réels de patterns :
Vous pouvez capturer plusieurs patterns en une seule fois, et donc encoder beaucoup d'informations différentes dans l'URL.
-> **Note :** Comme défi, essayez d'envisager comment vous devriez encoder une URL pour lister tous les livres sortis en telle année, à tel mois et à tel jour, et l'expression régulière qu'il faudrait utiliser pour la rechercher.
+> [!NOTE]
+> Comme défi, essayez d'envisager comment vous devriez encoder une URL pour lister tous les livres sortis en telle année, à tel mois et à tel jour, et l'expression régulière qu'il faudrait utiliser pour la rechercher.
#### Passer des options supplémentaires dans vos mappages d'URL
@@ -341,7 +348,8 @@ path('url/', views.my_reused_view, {'my_template_name': 'some_path'}, name='aurl
path('anotherurl/', views.my_reused_view, {'my_template_name': 'another_path'}, name='anotherurl'),
```
-> **Note :** Les options supplémentaires aussi bien que les patterns capturés sont passés à la vue comme arguments _nommés_. Si vous utilisez le **même nom** pour un pattern capturé et une option supplémentaire, alors seul la value du pattern capturé sera envoyé à la vue (la valeur spécifiée dans l'option supplémentaire sera abandonnée).
+> [!NOTE]
+> Les options supplémentaires aussi bien que les patterns capturés sont passés à la vue comme arguments _nommés_. Si vous utilisez le **même nom** pour un pattern capturé et une option supplémentaire, alors seul la value du pattern capturé sera envoyé à la vue (la valeur spécifiée dans l'option supplémentaire sera abandonnée).
### Vue (basée sur classe)
@@ -418,7 +426,8 @@ Créez le fichier HTML **/locallibrary/catalog/templates/catalog/book_detail.htm
{% endblock %}
```
-> **Note :** Le lien vers l'auteur dans le template ci-dessus est vide, parce que nous n'avons pas encore crée de page détail pour un auteur. Une fois que cette page sera créée, vous pourrez remplacer l'URL par ceci :
+> [!NOTE]
+> Le lien vers l'auteur dans le template ci-dessus est vide, parce que nous n'avons pas encore crée de page détail pour un auteur. Une fois que cette page sera créée, vous pourrez remplacer l'URL par ceci :
>
> ```python
> \{{ book.author }}
@@ -441,7 +450,8 @@ Une chose intéressante que nous n'avons pas encore vue, c'est la fonction `book
Cette méthode est requise parce que vous déclarez un champ `ForeignKey` (one-to-many) seulement du côté "one" de la relation. Comme vous ne faites rien pour déclarer la relation dans les modèles opposés ("many"), Django n'a pas de champ pour récupérer l'ensemble des enregistrements associés. Pour remédier à ce problème, Django construit une fonction justement nommée "recherche inversée", que vous pouvez utiliser. Le nom de la fonction est construit en mettant en minuscule le nom du modèle où a été déclarée la `ForeignKey`, suivi de `_set` (ainsi la fonction créée dans `Book` est `bookinstance_set()`).
-> **Note :** Ici nous utilisons `all()` pour récupérer tous les enregistrements (comportement par défaut). Bien que vous puissiez utiliser la méthode `filter()` pour obtenir un sous-ensemble d'enregistrements dans le code, vous ne pouvez faire cela directement dans le template, parce que vous ne pouvez pas spécifier d'arguments dans les fonctions.
+> [!NOTE]
+> Ici nous utilisons `all()` pour récupérer tous les enregistrements (comportement par défaut). Bien que vous puissiez utiliser la méthode `filter()` pour obtenir un sous-ensemble d'enregistrements dans le code, vous ne pouvez faire cela directement dans le template, parce que vous ne pouvez pas spécifier d'arguments dans les fonctions.
>
> Prenez garde également que, si vous ne définissez pas un ordre (dans votre vue basée sur classe ou votre modèle), vous allez voir des erreurs de ce genre en provenance du serveur de développement :
>
@@ -486,7 +496,8 @@ Cette méthode est requise parce que vous déclarez un champ `ForeignKey` (one-t
À ce point, nous devrions avoir créé tout ce qu'il faut pour afficher à la fois la liste des livres et les pages de détail pour chaque livre. Lancez le serveur (`python3 manage.py runserver`) et ouvrez votre navigateur à l'adresse .
-> **Attention :** Ne cliquez pas sur les liens vers le détail des auteurs : vous allez les créer lors du prochain défi !
+> [!WARNING]
+> Ne cliquez pas sur les liens vers le détail des auteurs : vous allez les créer lors du prochain défi !
Cliquez sur le lien **Tous les livres** pour afficher la liste des livres.
@@ -565,7 +576,7 @@ Le challenge dans cet article consiste à créer les vues détail et liste néce
Le code requis pour le mappeur d'URL et les vues sera virtuellement identique aux vues liste et détail du modèle `Book`, créées ci-dessus. Les templates seront différents, mais auront un comportement semblable.
-> **Note :**
+> [!NOTE]
>
> - Une fois que vous aurez créé le mappeur d'URL pour la page "liste d'auteurs", vous aurez besoin de mettre aussi à jour le lien **All authors** dans le template de base. Suivez la [même procédure](#Update_the_base_template) que celle adoptée quand nous avons mis à jour le lien **All books**.
> - Une fois créé le mappeur d'URL pour la page de détails sur l'auteur, vous devrez aussi mettre à jour le [template de la vue détail d'un livre](#Creating_the_Detail_View_template) (**/locallibrary/catalog/templates/catalog/book_detail.html**), de sorte que le lien vers l'auteur pointe vers votre nouvelle page de détails sur l'auteur (au lieu d'être une URL vide). La ligne va avoir comme changement la balise montrée en gras ci-dessous.
diff --git a/files/fr/learn/server-side/django/home_page/index.md b/files/fr/learn/server-side/django/home_page/index.md
index db6b0d6e32b7cc..5a1607cff649d5 100644
--- a/files/fr/learn/server-side/django/home_page/index.md
+++ b/files/fr/learn/server-side/django/home_page/index.md
@@ -64,7 +64,8 @@ Bien que les données dépendent du contenu de la base de données, les trois pr
En revanche, les pages concernant le détail d'un livre ou d'un auteur nécessiteront de traiter l'identifiant d'un objet. Il sera nécessaire d'extraire de la requête HTTP l'information encodée de cet identifiant pour obtenir ensuite le détail depuis la base de données. Pour cela nous utiliserons un seul jeu de vue et de gabarit pour publier les informations sur les livres (et auteurs).
-> **Note :** Avec le cadriciel Django, vous pouvez élaborer vos URLs comme bon vous semble — Vous pouvez avoir une approche comme celle présentée ci-dessus, ou de faire un appel de la méthode `GET` avec un passage de paramètres (`/book/?id=6`). Cependant, quelle que soit l'approche pour laquelle vous opterez, garder en mémoire d'avoir des URLs claires, logique et compréhensibles comme cela est [recommandé par le W3C](https://www.w3.org/Provider/Style/URI).
+> [!NOTE]
+> Avec le cadriciel Django, vous pouvez élaborer vos URLs comme bon vous semble — Vous pouvez avoir une approche comme celle présentée ci-dessus, ou de faire un appel de la méthode `GET` avec un passage de paramètres (`/book/?id=6`). Cependant, quelle que soit l'approche pour laquelle vous opterez, garder en mémoire d'avoir des URLs claires, logique et compréhensibles comme cela est [recommandé par le W3C](https://www.w3.org/Provider/Style/URI).
>
> La documentation de Django recommande aussi de coder les informations dans le corps des URLs pour avoir une meilleure conception de ces URLs.
@@ -74,7 +75,8 @@ La suite de cette section s'intéresse à la conception de la page d'accueil.
La toute première page à créer est la page d'accueil (`catalog/`). Cette page d'index est globalement une page statique contenant le décompte des différents enregistrements de la base de données. Pour faire cela, il sera nécessaire de créer un routage d'URL, une vue et un gabarit.
-> **Note :** Cette section est essentielle, et cela vaut vraiment la peine d'être attentif aux concepts déployés dans celle-ci. La plupart des éléments abordé ici seront ré-utilisés par la suite.
+> [!NOTE]
+> Cette section est essentielle, et cela vaut vraiment la peine d'être attentif aux concepts déployés dans celle-ci. La plupart des éléments abordé ici seront ré-utilisés par la suite.
### Routage d'URL
@@ -107,7 +109,8 @@ Le paramètre `name` utilisé dans la fonction `path()` permet aussi de définir
Home.
```
-> **Note :** Vous pourriez bien évidemment coder en dur l'accès à la page d'accueil de cette manière `Home`), mais si nous changions le modèle d'URL, par exemple en `/catalog/index`, alors le gabarit ne fonctionnerait plus correctement et présenterait un lien mort. L'utilisation des noms et des routages inversés est plus robuste et adapté aux évolutions de l'application.
+> [!NOTE]
+> Vous pourriez bien évidemment coder en dur l'accès à la page d'accueil de cette manière `Home`), mais si nous changions le modèle d'URL, par exemple en `/catalog/index`, alors le gabarit ne fonctionnerait plus correctement et présenterait un lien mort. L'utilisation des noms et des routages inversés est plus robuste et adapté aux évolutions de l'application.
### Vue (_View function-based_)
@@ -170,7 +173,8 @@ Le cadriciel Django va rechercher automatiquement ces gabarits dans un répertoi
Vous pouvez en faire l'expérience dès à présent, après avoir redémarré votre serveur local, en accédant à l'URL `127.0.0.1:8000` de votre navigateur. Une page d'erreur explicite s'affiche en indiquant un message du type : "`TemplateDoesNotExist at /catalog/`", ainsi que de nombreux détails sur l'enchaînement des fonctions aboutissant à cette erreur.
-> **Note :** En fonction du paramétrage de votre projet - le fichier settings.py de votre projet - Django va chercher pour des gabarits dans différents répertoires et dans ceux de votre application par défaut. Si vous souhaitez approfondir ce sujet vous pouvez consulter la [documentation Django relative aux gabarits](https://docs.djangoproject.com/fr/2.2/topics/templates/).
+> [!NOTE]
+> En fonction du paramétrage de votre projet - le fichier settings.py de votre projet - Django va chercher pour des gabarits dans différents répertoires et dans ceux de votre application par défaut. Si vous souhaitez approfondir ce sujet vous pouvez consulter la [documentation Django relative aux gabarits](https://docs.djangoproject.com/fr/2.2/topics/templates/).
#### Concevoir les gabarits
@@ -178,7 +182,8 @@ Django utilise un langage pour les gabarits qui permet de résoudre certains suj
Le langage de gabarit de Django permet de définir un modèle de base puis de l'étendre ensuite. L'extrait de code ci-dessous vient du fichier de gabarit **base_generic.html**, vous constaterez qu'il s'y mélange du code HTML et des sections nommées contenu dans entre des marqueurs `block` et `endblock` qui peut contenir ou non des données.
-> **Note :** Les marqueurs de gabarits sont des fonctions que vous pouvez utiliser dans un modèle pour parcourir des listes, effectuer des opérations conditionnelles en fonction de la valeur d'une variable, etc. Outre les balises de modèle, la syntaxe de gabarit vous permet de référencer les variables qui sont transmises au modèle à partir de la vue et d'utiliser des filtres de gabarit pour mettre en forme les variables (par exemple, pour convertir une chaîne en minuscule).
+> [!NOTE]
+> Les marqueurs de gabarits sont des fonctions que vous pouvez utiliser dans un modèle pour parcourir des listes, effectuer des opérations conditionnelles en fonction de la valeur d'une variable, etc. Outre les balises de modèle, la syntaxe de gabarit vous permet de référencer les variables qui sont transmises au modèle à partir de la vue et d'utiliser des filtres de gabarit pour mettre en forme les variables (par exemple, pour convertir une chaîne en minuscule).
Dans l'extrait ci-dessous vous avec trois sections nommées qui pourront être remplacés par la suite :
@@ -225,7 +230,8 @@ Lorsque l'on définit un gabarit pour une vue particulière, il convient de déf
Nous allons nous appuyer sur le gabarit ci-dessous pour construire la page de base de la bibliothèque locale. Vous le constatez, il contient des éléments HTML et des blocs dédiés Django pour spécifier trois sections `title`, `sidebar`, et `content`. La section `title` contient un titre par défaut. De même la section `sidebar` contient un lien vers la liste des livres et des auteurs qui pourra être modifié ensuite.
-> **Note :** Il y a aussi deux balises supplémentaires : `url` et `load static`. Elles seront étudiées dans le chapitre suivant.
+> [!NOTE]
+> Il y a aussi deux balises supplémentaires : `url` et `load static`. Elles seront étudiées dans le chapitre suivant.
Créez un nouveau fichier nommé **_base_generic.html_** dans le dossier **/locallibrary/catalog/templates/** (à créer aussi) et copiez-y le texte ci-dessous :
@@ -304,7 +310,8 @@ Maintenant créez le fichier HTML **_index.html_** dans le dossier **/locallibra
Dans la section contenu dynamique, des emplacements réservés sont définis pour pouvoir y insérer le contenu de variable qui sont identifiées à l'intérieur de doubles accolades (ouvrantes et fermantes). Pour une meilleure visibilité ces emplacements et les variables nommées sont identifiées en caractères gras dans l'extrait de code ci-dessus.
-> **Note :** Vous pouvez constater simplement que les balises de gabarit (fonctions) et les balises de variables sont entre accolades ; double accolades pour une variable (`\{{ num_books }}`), et simple accolade avec le pourcentage (`{% extends "base_generic.html" %}`) pour les balises.
+> [!NOTE]
+> Vous pouvez constater simplement que les balises de gabarit (fonctions) et les balises de variables sont entre accolades ; double accolades pour une variable (`\{{ num_books }}`), et simple accolade avec le pourcentage (`{% extends "base_generic.html" %}`) pour les balises.
Gardez en mémoire que les variables utilisées dans les gabarits sont des clés d'un dictionnaire `context` transmis à la fonction `render()` de la vue (revenez à l'exemple plus haut, ou l'extrait ci-dessous). La fonction `render()` traitera le dictionnaire pour restituer une page HTML où les variables nommées auront été remplacées par leur valeur dans le dictionnaire.
@@ -341,7 +348,8 @@ De la même manière, vous pouvez par exemple :
style="width:555px;height:540px;" />
```
-> **Note :** Les exemples ci-dessus indiquent où se trouvent les fichiers, mais le cadriciel ne travaille pas ainsi par défaut. Nous avons configuré le serveur web de développement en modifiant le routage des URL (**/locallibrary/locallibrary/urls.py**) à [la création du squelette du site](/fr/docs/Learn/Server-side/Django/skeleton_website). Cependant nous devrons travailler plus tard la mise en production.
+> [!NOTE]
+> Les exemples ci-dessus indiquent où se trouvent les fichiers, mais le cadriciel ne travaille pas ainsi par défaut. Nous avons configuré le serveur web de développement en modifiant le routage des URL (**/locallibrary/locallibrary/urls.py**) à [la création du squelette du site](/fr/docs/Learn/Server-side/Django/skeleton_website). Cependant nous devrons travailler plus tard la mise en production.
Pour plus de détails sur les fichiers statiques vous pouvez consulter la documentation Django sur [la gestion des fichiers statiques](https://docs.djangoproject.com/fr/2.2/howto/static-files/).
@@ -385,7 +393,8 @@ A ce niveau, nous avons créé l'ensemble des ressources nécessaires à l'affic
![Page d'accueil en Français](index_fr_page_ok.png)
-> **Note :** Toutes les ressources n'ayant pas été encore créées les liens vers Tous les livres et Tous les auteurs ne fonctionnent pas encore.
+> [!NOTE]
+> Toutes les ressources n'ayant pas été encore créées les liens vers Tous les livres et Tous les auteurs ne fonctionnent pas encore.
## Défi
@@ -393,7 +402,8 @@ Voici deux suggestions pour tester votre connaissance de Django et des requêtes
1. La bibliothèque locale dispose d'un gabarit d'origine qui inclut une section `title`. Surchargez cette section dans le gabarit index et créer un nouveau titre.
- > **Note :** La section Concevoir un gabarit détaille la manière de modifier une section.
+ > [!NOTE]
+ > La section Concevoir un gabarit détaille la manière de modifier une section.
2. Modifiez la vue pour disposer de décomptes pour les genres et les titres de livre qui contiennent un mot (en repectant la casse) et transmettez cela via le `context.` Pour faire cela utilisez les variables `num_books` et `num_instances_available`. Ensuite vous pourrez mettre à jour le gabarit de la page d'accueil.
diff --git a/files/fr/learn/server-side/django/index.md b/files/fr/learn/server-side/django/index.md
index d19351182e0129..364aeeba00532a 100644
--- a/files/fr/learn/server-side/django/index.md
+++ b/files/fr/learn/server-side/django/index.md
@@ -13,7 +13,8 @@ Aucune connaissance sur ce framework n'est requise. Il vous faudra seulement com
Une connaissance générale en programmation et plus précisement en [Python](/fr/docs/Glossaire/Python) est recommandée, mais pas nécessaire pour comprendre la majeure partie de ce module.
-> **Note :** Python est un des languages les plus faciles à apprendre, lire et comprendre pour les novices. Ceci dit, si vous voulez mieux comprendre ce module, il existe beaucoup de livres gratuits et de tutoriaux sur internet (les nouveaux programmeurs pourraient être intéressés par la page du [Python pour les non-programmeurs](https://wiki.python.org/moin/BeginnersGuide/NonProgrammers) dans la documentation sur le site officiel de Python: python.org).
+> [!NOTE]
+> Python est un des languages les plus faciles à apprendre, lire et comprendre pour les novices. Ceci dit, si vous voulez mieux comprendre ce module, il existe beaucoup de livres gratuits et de tutoriaux sur internet (les nouveaux programmeurs pourraient être intéressés par la page du [Python pour les non-programmeurs](https://wiki.python.org/moin/BeginnersGuide/NonProgrammers) dans la documentation sur le site officiel de Python: python.org).
## Guides
diff --git a/files/fr/learn/server-side/django/introduction/index.md b/files/fr/learn/server-side/django/introduction/index.md
index 098f861a71ddbe..f12658ab5be196 100644
--- a/files/fr/learn/server-side/django/introduction/index.md
+++ b/files/fr/learn/server-side/django/introduction/index.md
@@ -69,7 +69,8 @@ Django vous aide à écrire une application qui est:
Django a continué à se développer et à s'améliorer, depuis sa première sortie (1.0) en Septembre 2008 jusqu'à la version 2.0 récemment sortie (2017). Chaque sortie a ajouté son lot de nouvelles fonctionnalités et de corrections de bugs, allant du support de nouveaux types de bases de données, de moteurs de templates et de cache, à l'addition de fonctions et de classes de vues 'génériques' (qui réduisent la quantité de code que doivent écrire les développeurs pour tout un tas de tâches de programmation).
-> **Note :** Consultez les [notes de publication](https://docs.djangoproject.com/en/1.10/releases/) sur le site web de Django pour voir les changements apportés dans les versions récentes, ainsi que tout le travail accompli pour améliorer Django.
+> [!NOTE]
+> Consultez les [notes de publication](https://docs.djangoproject.com/en/1.10/releases/) sur le site web de Django pour voir les changements apportés dans les versions récentes, ainsi que tout le travail accompli pour améliorer Django.
Désormais, Django est un projet open-source collaboratif florissant, avec plusieurs milliers d'utilisateurs et de contributeurs. Bien que plusieurs fonctionnalités reflètent encore ses origines, Django a évolué en un framework versatile capable de développer n'importe quel type de site web.
@@ -104,7 +105,8 @@ Les applications web Django regroupent généralement le code qui gère chacune
- **Modèles :** Les modèles sont des objets Python, qui définissent la structure des données d'une application, et fournissent des mécanismes de gestion (ajout, modification, suppression) et requêtent les enregistrements d'une base de données.
- **Templates:** Un template est un fichier texte qui définit la structure ou la mise en page d'un fichier (comme une page HTML), avec des balises utilisées pour représenter le contenu. Une _vue_ peut créer une page HTML en dynamique en utilisant un template HTML, en la peuplant avec les données d'un _modèle_. Un template peut-être utilisé pour définir la structure de n'importe quel type de fichier; il n'est pas obligatoire que ce dernier soit un HTML !
-> **Note :** Django mentionne cette organisation sous le nom d'architecture "Modèle Vue Template". Elle a plusieurs similarités avec l'architecture [Modèle Vue Contrôleur](/fr/docs/Web/Apps/Fundamentals/Modern_web_app_architecture/MVC_architecture).
+> [!NOTE]
+> Django mentionne cette organisation sous le nom d'architecture "Modèle Vue Template". Elle a plusieurs similarités avec l'architecture [Modèle Vue Contrôleur](/fr/docs/Web/Apps/Fundamentals/Modern_web_app_architecture/MVC_architecture).
Les sections ci-dessous vous donneront une idée de ce à quoi ressemble ces différentes parties d'une application Django (nous verrons plus de détails plus tard dans le jeu, une fois que nous aurons configuré l'environnement de développement).
@@ -146,7 +148,8 @@ def index(request):
return HttpResponse('Hello from Django!')
```
-> **Note :** Un peu de Python :
+> [!NOTE]
+> Un peu de Python :
>
> - Les [modules Python](https://docs.python.org/3/tutorial/modules.html) sont des librairies de fonctions, stockés dans des fichiers séparés que l'on peut vouloir utiliser dans notre code. Ici, nous importons l'objet `HttpResponse` du module `django.http` pour qu'on puisse l'utiliser dans notre vue : `from django.http import HttpResponse` . Il y a d'autres façons d'importer quelques objets (ou tous les objets) d'un module.
> - Les fonctions sont déclarées en utilisant le mot-clé `def` comme indiqué ci-dessus, avec des paramètres nommés listés entre parenthèses après le nom de la fonction; la ligne se termine ensuite par deux points. Notez que les lignes suivantes sont **indentées**. L'indentation est importante, car elle spécifie que les lignes de code sont contenues dans un bloc particulier (l'indentation obligatoire est un élément clé de Python, et une des raisons pour lesquelles le code Python est si simple à lire).
@@ -176,7 +179,8 @@ class Team(models.Model):
team_level = models.CharField(max_length=3,choices=TEAM_LEVELS,default='U11')
```
-> **Note :** Un peu de Python :
+> [!NOTE]
+> Un peu de Python :
>
> - Python supporte la "programmation orientée-objet", un type de programmation où l'on organise notre code en objets, ce qui inclut les données et fonctions liées qui agiront sur les données. Les objets peuvent être hérités/étendus/dérivés d'autres objets, ce qui permet à ces objets de partager un comportement commun. En Python, on utilise le mot-clé `class` pour définir le "squelette" d'un objet. On peut créer plusieurs _instances_ spécifiques de ce type d'objet d'après le modèle d'une classe.
>
diff --git a/files/fr/learn/server-side/django/models/index.md b/files/fr/learn/server-side/django/models/index.md
index d957dde6ed7a33..9dc4aca804cd7b 100644
--- a/files/fr/learn/server-side/django/models/index.md
+++ b/files/fr/learn/server-side/django/models/index.md
@@ -57,7 +57,8 @@ Le modèle ainsi créé, décrit l'objet livre - _Book_ - avec une description g
Le diagramme met aussi en évidence les relations entre les objets et la cardinalité des relations. La cardinalité est représentée par les nombres entre crochet avec, si nécessaire, un minimum et un maximum. Par exemple, un ouvrage a, au moins un genre (\[1..\*]) alors qu'un genre peut ne pas référencer un livre (\[0..\*]) ce qui se traduira en définition des objets dans models.py.
-> **Note :** La section ci-dessous est une introduction générale à la modélisation des objets pour les modèles de données dans Django. Gardez à l'esprit la bibliothèque locale et imaginez comment devraient être décrits les objets pour cette bibliothèque.
+> [!NOTE]
+> La section ci-dessous est une introduction générale à la modélisation des objets pour les modèles de données dans Django. Gardez à l'esprit la bibliothèque locale et imaginez comment devraient être décrits les objets pour cette bibliothèque.
## Introduction au modèle de données
@@ -190,7 +191,8 @@ def get_absolute_url(self):
return reverse('model-detail-view', args=[str(self.id)])
```
-> **Note :** En supposant que vous allez utiliser des URLs du type `/myapplication/mymodelname/2` pour afficher individuellement les données des enregistrements de la table associée à votre modèle de données (où "2" est l'`id` d'un enregistrement donné), vous devrez créer un routage d'URL pour vous permettre de transmettre l'id à une vue détaillée de l'enregistrement (model detail view dans le cadriciel Django). Cette vue détaillée réalisera l'affichage de l'enregistrement. La fonction `reverse()` a pour objectif d'écrire l'URL dans un format cohérent avec le traitement des URL par les navigateurs.
+> [!NOTE]
+> En supposant que vous allez utiliser des URLs du type `/myapplication/mymodelname/2` pour afficher individuellement les données des enregistrements de la table associée à votre modèle de données (où "2" est l'`id` d'un enregistrement donné), vous devrez créer un routage d'URL pour vous permettre de transmettre l'id à une vue détaillée de l'enregistrement (model detail view dans le cadriciel Django). Cette vue détaillée réalisera l'affichage de l'enregistrement. La fonction `reverse()` a pour objectif d'écrire l'URL dans un format cohérent avec le traitement des URL par les navigateurs.
>
> Bien entendu, cela requiert d'écrire le routage de l'URL, la vue et le gabarit...
@@ -212,7 +214,8 @@ record = MyModelName(my_field_name="Instance #1")
record.save()
```
-> **Note :** Si aucun champs n'a été défini comme une clé primaire (option `primary_key`), un champs nommé `id` ou `pk` sera affecté au modèle et sera incrémenté automatiquement. Vous pouvez requêter cet enregistrement à l'aide de ce champ ; le premier enregistrement aura habituellement la valeur entière 1.
+> [!NOTE]
+> Si aucun champs n'a été défini comme une clé primaire (option `primary_key`), un champs nommé `id` ou `pk` sera affecté au modèle et sera incrémenté automatiquement. Vous pouvez requêter cet enregistrement à l'aide de ce champ ; le premier enregistrement aura habituellement la valeur entière 1.
Les champs de l'enregistrement sont accessibles à l'aide des attributs de la classe d'objet. En utilisant la syntaxe pointée, vous pouvez modifier les valeurs des champs de l'enregistrement. Vous devez utiliser la méthode `save()` pour enregistrer en base de données les modifications.
@@ -230,7 +233,8 @@ record.save()
La classe de base `objects` permet de faire des recherches d'enregistrement qui correspondront aux critères de recherche souhaités.
-> **Note :** Nous utiliserons dans les explications le modèle de données d'un livre (`Book`)avec des titres (`title`) et des genres littéraires (`genre`), car expliquer la manière de rechercher sur un modèle théorique n'est pas très pédagogique.
+> [!NOTE]
+> Nous utiliserons dans les explications le modèle de données d'un livre (`Book`)avec des titres (`title`) et des genres littéraires (`genre`), car expliquer la manière de rechercher sur un modèle théorique n'est pas très pédagogique.
Vous pouvez obtenir tous les enregistrements d'un modèle de données sous la forme d'un jeu de données ou `QuerySet`, en utilisant `objects.all()`. Un `QuerySet` est un objet itérable, c'est-à-dire jeu de données contenant des objets que l'on peut parcourir.
@@ -254,7 +258,8 @@ Le marqueur "double souligné" permet de construire une chaîne de navigation à
books_containing_genre = Book.objects.filter(genre__name__icontains='fiction')
```
-> **Note :** Vous pouvez construire une chemin pour naviguer dans autant de niveaux de relation (`ForeignKey`/`ManyToManyField`) que vous en avez besoin en concaténant des noms de champs à l'aide (\_\_) . Si par exemple vous souhaitez trouver un livre (`Book`) qui possède différents type (`type`) de couvertures (`cover`) identifiées par des noms (`name`) alors le chemin sera du type : `type__cover__name__exact='hard'.`
+> [!NOTE]
+> Vous pouvez construire une chemin pour naviguer dans autant de niveaux de relation (`ForeignKey`/`ManyToManyField`) que vous en avez besoin en concaténant des noms de champs à l'aide (\_\_) . Si par exemple vous souhaitez trouver un livre (`Book`) qui possède différents type (`type`) de couvertures (`cover`) identifiées par des noms (`name`) alors le chemin sera du type : `type__cover__name__exact='hard'.`
La mise en oeuvre des requêtes est très riches en fonction des modèles et des relations, de sous-ensemble de données, etc. Pour une informations détaillées, vous devez consulter [les requêtes](https://docs.djangoproject.com/fr/2.2/topics/db/queries/) sur le site de référence de Django.
@@ -376,7 +381,8 @@ De nouveaux types de champs sont utilisés :
La méthode `__str__()` obligatoirement requise par Django pour manipuler les instances d'objet et les enregistrements associés en base. Elle offre cependant la particularité d'associer l'identifiant unique et le titre du livre qui lui est associé.
-> **Note :** Un aspect de Python:
+> [!NOTE]
+> Un aspect de Python:
>
> - Si vous démarrez avec une version postérieure à la version 3.6, vous pouvez utiliser le formatage des chaînes de caractère avec la fonction f-strings : `f'{self.id} ({self.book.title})'`.
> - Dans les versions précédente ce formatage était réalisé de manière différente utilisant la fonction de formatage format : `'{0} ({1})'.format(self.id,self.book.title)`).
diff --git a/files/fr/learn/server-side/django/skeleton_website/index.md b/files/fr/learn/server-side/django/skeleton_website/index.md
index e2efed2928f14e..d8b1876919fd5c 100644
--- a/files/fr/learn/server-side/django/skeleton_website/index.md
+++ b/files/fr/learn/server-side/django/skeleton_website/index.md
@@ -40,7 +40,8 @@ La création est aisée:
1. Utilisez la commande `django-admin` pour créer le dossier du projet ainsi que les sous-dossiers et fichiers de base ainsi que le script de gestion du projet (**manage.py**).
2. Utilisez **manage.py** pour créer une ou plusieurs _applications_ du projet.
- > **Note :** Un site web consiste en une ou plusieurs sections, par exemple un site principal, un blog, un wiki,... La bonne pratique avec Django est de réaliser chacun des composants comme des applications séparées qui pourront éventuellement être réutilisées dans d'autres projets.
+ > [!NOTE]
+ > Un site web consiste en une ou plusieurs sections, par exemple un site principal, un blog, un wiki,... La bonne pratique avec Django est de réaliser chacun des composants comme des applications séparées qui pourront éventuellement être réutilisées dans d'autres projets.
3. Enregistrez la nouvelle application dans le projet.
4. Liez les urls et chemins pour chaque application.
@@ -54,7 +55,8 @@ locallibrary/ # Website folder
catalog/ # Application folder (created using manage.py)
```
-> **Note :** Afin de respecter la cohérence du code et pouvoir utiliser les développements sur GitHub, les noms du site et des applications, _en anglais_, n'ont pas été modifiés.
+> [!NOTE]
+> Afin de respecter la cohérence du code et pouvoir utiliser les développements sur GitHub, les noms du site et des applications, _en anglais_, n'ont pas été modifiés.
La suite de ce chapitre est consacrée pas à pas aux étapes de création d'un projet et d'une application. La fin du chapitre sera consacré à quelques éléments de configuration du site qui peuvent être réalisés à ce stade.
@@ -109,7 +111,8 @@ La commande ci-dessous va créer l'application _catalog_. Vous devez être dans
python3 manage.py startapp catalog
```
-> **Note :** La commande ci-dessus est exécutée dans un environnement Linux/macOS X. Sous Windows, il se peut que la commande soit : `py -3 manage.py startapp catalog`
+> [!NOTE]
+> La commande ci-dessus est exécutée dans un environnement Linux/macOS X. Sous Windows, il se peut que la commande soit : `py -3 manage.py startapp catalog`
>
> Si vous travaillez dans un environnement Windows, l'ensemble de la série didactique est écrite pour un environnement Linux/MacOS. Pensez, alors, à remplacer les commandes `python3` par `py -3`.
>
@@ -138,7 +141,8 @@ A ceci s'ajoute :
- Un dossier _migrations_, qui sera utilisé par django pour gérer les migrations et les modifications progressives apportées à la base de données quand des modifications seront faîtes dans les fichiers _models.py._
- **\_\_init\_\_.py** — est un fichier vide qui indique au langage Python de considérer ce dossier comme un module Python.
-> **Note :** Vous pouvez constater que dans le dossier de l'application, il n'y a pas de fichier pour gérer les urls, les gabarits ou les fichiers statiques. Nouys verrons ce point un peu plus loin, ils ne sont pas systématiquement nécessaires.
+> [!NOTE]
+> Vous pouvez constater que dans le dossier de l'application, il n'y a pas de fichier pour gérer les urls, les gabarits ou les fichiers statiques. Nouys verrons ce point un peu plus loin, ils ne sont pas systématiquement nécessaires.
## Enregistrer l'application _catalog_
@@ -160,7 +164,8 @@ INSTALLED_APPS = [
Le nouvel enregistrement défini l'objet pour cette nouvelle application avec le nom (`CatalogConfig`) qui a été généré dans le fichier **/locallibrary/catalog/apps.py** quand l'application a été créée.
-> **Note :** Nous verrons plus loin les autres paramètres de ce fichier(comme `MIDDLEWARE`). Cela permet la prise en charge par [Django administration site](/fr/docs/Learn/Server-side/Django/Admin_site) et donne accès à de nombreuses fonctionnalités (gestion des sessions, de l'authentication, etc).
+> [!NOTE]
+> Nous verrons plus loin les autres paramètres de ce fichier(comme `MIDDLEWARE`). Cela permet la prise en charge par [Django administration site](/fr/docs/Learn/Server-side/Django/Admin_site) et donne accès à de nombreuses fonctionnalités (gestion des sessions, de l'authentication, etc).
## Définir la base de données
@@ -222,7 +227,8 @@ urlpatterns = [
Le routage des URLs est géré à l'aide de la variable `urlpatterns`. Elle consititue une liste Python de fonctions `path()`. Chaque instance `path()` peut associer des motifs d'URL à une vue particulière, qui sera appelée si l'URL appellée correspond au motif décrit, ou vers une autre liste d'URL (dans ce cas, le motif est à considérer comme le motif de base pour le module dans lequel il est décrit). La variable `urlpatterns` contient au démarrage une seule fonction qui permet de gérer l'URL d'administration du site et utilisant le module par défaut de Django `admin.site.urls`.
-> **Note :** Dans la fonction `path()`, une route est une chaîne de caractères définissant une URL ou un motif d'URL. Cette chaîne peut inclure des variables nommées (entre < et >, par exemple `'catalog//'`). Ce motif correspondra à une URL du type **/catalog/_des_caractères_/**. La chaîne _des_caractères_ sera transmis à la vue comme une chaîne de caractère associée à une variable nommée `id`. Ce point sera vu en détails plus loin dans la série didactique.
+> [!NOTE]
+> Dans la fonction `path()`, une route est une chaîne de caractères définissant une URL ou un motif d'URL. Cette chaîne peut inclure des variables nommées (entre < et >, par exemple `'catalog//'`). Ce motif correspondra à une URL du type **/catalog/_des_caractères_/**. La chaîne _des_caractères_ sera transmis à la vue comme une chaîne de caractère associée à une variable nommée `id`. Ce point sera vu en détails plus loin dans la série didactique.
Ajoutez les lignes ci-dessous à la fin du fichier de manière à ajouter dans la variable `urlpatterns` une nouvelle entrée à la liste des routes. Cette nouvelle entrée permet une nouvelle route pour `catalog/` dont la gestion est déléguée au fichier **urls.py** du module **catalog** (c'est-à-dire le fichier **catalog/urls.py**).
@@ -271,7 +277,8 @@ from django.conf.urls.static import static
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
```
-> **Note :** Il y a plusieurs manière pour ajouter des routes à la variable `urlpatterns` (dans les étapes décrites ci-dessus nous avons ajouté petit à patir en utilisant l'opérateur `+=` pour bien séparer les étapes). Il est en réalité tout à fait possible de tout regrouper dans une seule étape :
+> [!NOTE]
+> Il y a plusieurs manière pour ajouter des routes à la variable `urlpatterns` (dans les étapes décrites ci-dessus nous avons ajouté petit à patir en utilisant l'opérateur `+=` pour bien séparer les étapes). Il est en réalité tout à fait possible de tout regrouper dans une seule étape :
>
> ```python
> urlpatterns = [
@@ -311,19 +318,22 @@ python3 manage.py makemigrations
python3 manage.py migrate
```
-> **Attention :** Chaque fois que vous ferez évoluer le modèle de données, vous devrez exécuter le commandes ci-dessus (elles seront traduites en structure dans la base de données que cela conduise à l'ajout ou au retrait d'objets ou d'attributs).
+> [!WARNING]
+> Chaque fois que vous ferez évoluer le modèle de données, vous devrez exécuter le commandes ci-dessus (elles seront traduites en structure dans la base de données que cela conduise à l'ajout ou au retrait d'objets ou d'attributs).
L'option `makemigrations` réalise (sans les appliquer) les migrations nécessaires à toutes les applications du projet. Vous pouvez cependant préciser le nom de l'application pour laquelle vous souhaitez réaliser la migration. Ceci permet de vérifier le code et la cohérence du modèle de donner avant de l'appliquer réellement. Quand vous aurez un niveau expert, vous pourrez choisir de les modifier à la marge.
L'option `migrate` applique les modifications sur la base de données (Django trace les modifications réalisées dans la base de données).
-> **Note :** Vous pouvez consulter la documentation [Migrations](https://docs.djangoproject.com/fr/2.2/topics/migrations/) (sur le site Django) pour plus d'informations.
+> [!NOTE]
+> Vous pouvez consulter la documentation [Migrations](https://docs.djangoproject.com/fr/2.2/topics/migrations/) (sur le site Django) pour plus d'informations.
### Démarrer le site web
Pendant la phase de développement, vous pouvez tester votre serveur sur un mode local et le consulter avec votre navigateur.
-> **Note :** Le serveur local n'est ni robuste ni performant, il n'est donc pas fait pour être utilisé en production, mais il permet d'être autonome pour les travaux de développement. La configuration par défaut de ce serveur est telle que votre site est accessible à l'URL `http://127.0.0.1:8000/`. Cependant, vous pouvez modifier ces paramètres et pour plus d'information vous pouvez consulter la documentation sur le site Django des commandes [django-admin and manage.py: runserver](https://docs.djangoproject.com/fr/2.2/ref/django-admin/#runserver).
+> [!NOTE]
+> Le serveur local n'est ni robuste ni performant, il n'est donc pas fait pour être utilisé en production, mais il permet d'être autonome pour les travaux de développement. La configuration par défaut de ce serveur est telle que votre site est accessible à l'URL `http://127.0.0.1:8000/`. Cependant, vous pouvez modifier ces paramètres et pour plus d'information vous pouvez consulter la documentation sur le site Django des commandes [django-admin and manage.py: runserver](https://docs.djangoproject.com/fr/2.2/ref/django-admin/#runserver).
Pour démarrer le serveur local, il suffit d'exécuter la commande ci-dessous dans le répertoire du projet (dossier où se trouver **manage.py**) :
@@ -345,11 +355,13 @@ Dès que le serveur est actif, vous pouvez utiliser votre navigateur est accéde
Ne vous inquitez ! Cette erreur était attendue ; elle est due à l'absence de défintion de routes dans le fichier catalog/urls.py ou dans le module `catalog.urls` module (que nous avons déclaré dans le fichier urls.py du projet).
-> **Note :** La page web ci-dessus met en exergue une fonctionnalité utile de Django ; le mode des traces de debogag. Au lieu d'une simple erreur renvoyée par le serveur, celui-ci affiche un écran d'erreur avec des informations utiles pour corriger le développement conduisant à cette erreur d'affichage. Dans le cas présent, l'erreur est due au motif de l'URL qui ne correspond pas à ce qui a été configuré.
+> [!NOTE]
+> La page web ci-dessus met en exergue une fonctionnalité utile de Django ; le mode des traces de debogag. Au lieu d'une simple erreur renvoyée par le serveur, celui-ci affiche un écran d'erreur avec des informations utiles pour corriger le développement conduisant à cette erreur d'affichage. Dans le cas présent, l'erreur est due au motif de l'URL qui ne correspond pas à ce qui a été configuré.
À ce stade, nous pouvons considérer que le serveur fonctionne !
-> **Note :** Chaque fois que vous apportez des modifications significatives, il est important d'exécuter à nouveau un migration et un test du serveur. Cela est assez rapide, pour ne pas s'en priver !
+> [!NOTE]
+> Chaque fois que vous apportez des modifications significatives, il est important d'exécuter à nouveau un migration et un test du serveur. Cela est assez rapide, pour ne pas s'en priver !
## Relevez le défi
diff --git a/files/fr/learn/server-side/django/testing/index.md b/files/fr/learn/server-side/django/testing/index.md
index 66993f2f5bc8ba..6aee1e4f4fbd86 100644
--- a/files/fr/learn/server-side/django/testing/index.md
+++ b/files/fr/learn/server-side/django/testing/index.md
@@ -49,7 +49,8 @@ Il y a beaucoup de genres, de niveaux et de classifications de tests, ainsi que
- Les test d'intégration
- : Ils vérifient comment les groupes de composants fonctionnent quand ils sont utilisés ensemble. Les tests d'intégraion sont attentifs aux interactions souhaitées entre composants, mais pas nécessairement aux opérations internes de chaque composant. Ils peuvent couvrir des groupes simples de composants à travers tout le site.
-> **Note :** Les autres genres habituels de tests comprennent : la boîte noire, la boîte blanche, les tests manuels, automatiques, de canari (canary), de fumée (smoke), de conformité (conformance), d'approbation (acceptance), fonctionnels, système, performance, chargement et stress. Consultez pour plus d'information sur chacun d'eux.
+> [!NOTE]
+> Les autres genres habituels de tests comprennent : la boîte noire, la boîte blanche, les tests manuels, automatiques, de canari (canary), de fumée (smoke), de conformité (conformance), d'approbation (acceptance), fonctionnels, système, performance, chargement et stress. Consultez pour plus d'information sur chacun d'eux.
### Que fournit Django pour tester ?
@@ -78,7 +79,8 @@ class YourTestClass(TestCase):
La meilleure classe de base pour la plupart des tests est [django.test.TestCase](https://docs.djangoproject.com/en/2.1/topics/testing/tools/#testcase). Cette classe de test crée une base de données vide avant que ses tests ne soient lancés, et lance toutes les fonctions de test dans sa propre transaction. La classe possède aussi un [Client](https://docs.djangoproject.com/en/2.1/topics/testing/tools/#django.test.Client) de test, que vous pouvez utiliser pour simuler l'interaction entre un utilisateur et le code au niveau de la vue. Dans les sections suivantes, nous allons nous concentrer sur les tests unitaires, créés en utilisant la classe de base [TestCase](https://docs.djangoproject.com/en/2.1/topics/testing/tools/#testcase).
-> **Note :** La classe [django.test.TestCase](https://docs.djangoproject.com/en/2.1/topics/testing/tools/#testcase) est très commode, mais peut avoir pour effet de ralentir certains tests plus que nécessaire (tous les tests n'ont pas besoin de créer leur propre base de données ni de simuler une interaction au niveau de la vue). Une fois que vous serez familiarisé avec ce que vous pouvez faire avec cette classe, vous voudrez sans doute remplacer certains de vos tests avec d'autres classes plus simples parmi celles qui sont disponibles.
+> [!NOTE]
+> La classe [django.test.TestCase](https://docs.djangoproject.com/en/2.1/topics/testing/tools/#testcase) est très commode, mais peut avoir pour effet de ralentir certains tests plus que nécessaire (tous les tests n'ont pas besoin de créer leur propre base de données ni de simuler une interaction au niveau de la vue). Une fois que vous serez familiarisé avec ce que vous pouvez faire avec cette classe, vous voudrez sans doute remplacer certains de vos tests avec d'autres classes plus simples parmi celles qui sont disponibles.
### Que faut-il tester ?
@@ -104,7 +106,8 @@ class Author(models.Model):
De même, vous pouvez tester que les méthodes personnalisées `get_absolute_url()` et `__str__()` se comportent comme prévu, car elles appartiennent à votre logique code/métier. Dans le cas de `get_absolute_url()`, vous pouvez supposer que la méthode Django `reverse()` a été implémentée correctement, aussi ce que vous allez tester, c'est que la vue associée a été effectivement définie.
-> **Note :** Les lecteurs attentifs auront noté que nous pourrions aussi vouloir limiter les dates de naissance et de décès à des valeurs sensibles, et vérifier que le décès intervient après la naissance. En Django, cette contrainte est ajoutée à vos classes de formulaires (bien que vous puissiez définir des validateurs pour les champs du modèle et des validateurs de modèles, ceux-ci ne sont utilisés qu'au niveau du formulaire s'ils sont appelés par la méthode clean() du modèle. Cela requière un ModelForm ou bien la méthode clean() du modèle a besoin d'être appelée explicitement.)
+> [!NOTE]
+> Les lecteurs attentifs auront noté que nous pourrions aussi vouloir limiter les dates de naissance et de décès à des valeurs sensibles, et vérifier que le décès intervient après la naissance. En Django, cette contrainte est ajoutée à vos classes de formulaires (bien que vous puissiez définir des validateurs pour les champs du modèle et des validateurs de modèles, ceux-ci ne sont utilisés qu'au niveau du formulaire s'ils sont appelés par la méthode clean() du modèle. Cela requière un ModelForm ou bien la méthode clean() du modèle a besoin d'être appelée explicitement.)
Avec cela en tête, commençons à voir comment définir et lancer des tests.
@@ -125,7 +128,8 @@ catalog/
Créez une structure de fichier comme montré ci-dessus, dans votre projet _LocalLibrary_. Le ficheir **\_\_init\_\_.py** doit être vide (il dit simplement à Python que ce répertoire est un package). Vous pouvez créer les trois fichiers de test en copiant et renommant le fichier de test du squelette **/catalog/tests.py**.
-> **Note :** le fichier de test du squelette **/catalog/tests.py** a été créé automatiquement quand nous avons [construit le squelette du site web Django](/fr/docs/Learn/Server-side/Django/skeleton_website). Il est parfaitement "légal" de mettre tous vos tests dedans, mais si vous testez correctement, vous allez rapidement vous retrouver avec un fichier de test énorme et impossible à gérer.
+> [!NOTE]
+> Le fichier de test du squelette **/catalog/tests.py** a été créé automatiquement quand nous avons [construit le squelette du site web Django](/fr/docs/Learn/Server-side/Django/skeleton_website). Il est parfaitement "légal" de mettre tous vos tests dedans, mais si vous testez correctement, vous allez rapidement vous retrouver avec un fichier de test énorme et impossible à gérer.
>
> Supprimez le fichier de squelette, car nous n'en aurons plus besoin.
@@ -172,13 +176,15 @@ La nouvelle classe définit deux méthodes que vous pouvez utiliser pour une con
- `setUpTestData()` est appelée une fois au début du lancement des tests pour un réglage au niveau de la classe. Vous pouvez l'utiliser pour créer des objets qui ne sont pas destinés à être modifiés ou changés dans les méthodes de test.
- `setUp()` est appelée avant chaque fonction de test pour définir des objets qui peuvent être modifiés par le test (chaque fonction de test obtiendra une version "fraîche" de ces objets).
-> **Note :** Les classes de test ont aussi une méthode `tearDown()`, que nous n'avons pas utilisée. Cette méthode n'est pas particulièrement utile pour les tests avec bases de données, dans la mesure où la classe de base `TestCase` prend soin pour vous de supprimer la base de données utilisées pour les tests.
+> [!NOTE]
+> Les classes de test ont aussi une méthode `tearDown()`, que nous n'avons pas utilisée. Cette méthode n'est pas particulièrement utile pour les tests avec bases de données, dans la mesure où la classe de base `TestCase` prend soin pour vous de supprimer la base de données utilisées pour les tests.
En dessous de ces méthodes, nous avons un certain nombre de méthodes de test, qui utilisent des fonctions `Assert`, pour tester si certaines conditions sont vraies, fausses ou égales (`AssertTrue`, `AssertFalse`, `AssertEqual`). Si la condition ne renvoie pas le résultat escompté, le test plante et renvoie une erreur à votre console.
Les méthodes `AssertTrue`, `AssertFalse` et `AssertEqual` sont des assertions standard fournies par **unittest**. Il y a d'autres assertions standard dans le framework, et aussi des [assertions spécifiques à Django](https://docs.djangoproject.com/en/2.1/topics/testing/tools/#assertions), pour tester si une vue redirige (`assertRedirects`), pour tester si tel template a été utilisé (`assertTemplateUsed`), etc.
-> **Note :** Normallement vous ne devriez **pas** inclure de fonctions **print()** dans vos tests, comme montré ci-dessus. Nous avons fait cela uniquement pour que vous puissiez voir dans la console (dans la section suivante) l'ordre dans lequel les fonctions de setup sont appelées.
+> [!NOTE]
+> Normallement vous ne devriez **pas** inclure de fonctions **print()** dans vos tests, comme montré ci-dessus. Nous avons fait cela uniquement pour que vous puissiez voir dans la console (dans la section suivante) l'ordre dans lequel les fonctions de setup sont appelées.
## Comment lancer les tests
@@ -190,7 +196,8 @@ python3 manage.py test
Cette commande va lancer la recherche de tous les fichiers ayant la forme **test.py** sous le répertoire courant, et lancer tous les tests définis, en utilisant les classes de base appropriées (ici nous avons un certain nombre de fichiers de test, mais pour le moment seul **/catalog/tests/test_models.py** contient des tests). Par défaut, chaque test ne fera de rapport qu'en cas d'échec, avec ensuite un résumé du test.
-> **Note :** Si vous obtenez des erreurs telles que : `ValueError: Missing staticfiles manifest entry ...`, cela peut être dû au fait que le test ne lance pas _collectstatic_ par défaut, et que votre application utilise une classe de storage qui le requiert (voyez [manifest_strict](https://docs.djangoproject.com/en/2.1/ref/contrib/staticfiles/#django.contrib.staticfiles.storage.ManifestStaticFilesStorage.manifest_strict) pour plus d'information). Il y a plusieurs façons de remédier à ce problème - la plus facile est de lancer tout simplement _collectstatic_ avant de lancer les tests :
+> [!NOTE]
+> Si vous obtenez des erreurs telles que : `ValueError: Missing staticfiles manifest entry ...`, cela peut être dû au fait que le test ne lance pas _collectstatic_ par défaut, et que votre application utilise une classe de storage qui le requiert (voyez [manifest_strict](https://docs.djangoproject.com/en/2.1/ref/contrib/staticfiles/#django.contrib.staticfiles.storage.ManifestStaticFilesStorage.manifest_strict) pour plus d'information). Il y a plusieurs façons de remédier à ce problème - la plus facile est de lancer tout simplement _collectstatic_ avant de lancer les tests :
>
> ```bash
> python3 manage.py collectstatic
@@ -228,7 +235,8 @@ Destroying test database for alias 'default'...
Ici nous voyons que nous avons eu un échec pour un test, et nous pouvons voir exactement quelle fonction a planté et pourquoi (cet échec était prévu, car `False` n'est pas `True` !).
-> **Note :** La chose la plus importante à apprendre de la sortie de test ci-dessus est qu'il est bien mieux d'utiliser des noms descriptifs/informatifs pour vos objets et méthodes.
+> [!NOTE]
+> La chose la plus importante à apprendre de la sortie de test ci-dessus est qu'il est bien mieux d'utiliser des noms descriptifs/informatifs pour vos objets et méthodes.
Le texte en **gras** ci-dessus n'apparaîtra pas normalement dans la sortie de test (elle est générée par les fonctions `print()` dans nos tests). Cela montre comment la méthode `setUpTestData()` est appelée une fois pour l'ensemble de classe, tandis que `setUp()` est appelée avant chaque méthode.
@@ -266,7 +274,8 @@ python3 manage.py test catalog.tests.test_models.YourTestClass.test_one_plus_one
Maintenant que nous savons comment lancer nos tests et quel genre de choses nous avons besoin de tester, regardons quelques exemples pratiques.
-> **Note :** Nous n'allons pas écrire tous les tests possibles, mais ce qui suit devrait vous donner une idée sur le fonctionnement des tests, et ce que vous pouvez faire ensuite.
+> [!NOTE]
+> Nous n'allons pas écrire tous les tests possibles, mais ce qui suit devrait vous donner une idée sur le fonctionnement des tests, et ce que vous pouvez faire ensuite.
### Modèles
@@ -347,7 +356,8 @@ Les choses intéressantes à noter sont :
- Nous ne pouvons obtenir le `verbose_name` directement en utilisant `author.first_name.verbose_name`, car `author.first_name` est une _chaîne_ (non un moyen d'accéder à l'objet `first_name`, que nous pourrions utiliser pour accéder à ses propriétés). À la place nous devons utiliser l'attribut `_meta` de author afin d'obtenir une instance de ses champs et utiliser celle-ci pour demander l'information que nous cherchons.
- Nous avons fait le choix d'utiliser `assertEquals(field_label,'first name')` plutôt que `assertTrue(field_label == 'first name')`. La raison en est que, en cas d'échec du test, la sortie vous dira, dans le premier cas, quel est effectivement le label du champ, ce qui rend un peu plus facile le débogage du problème.
-> **Note :** Les tests pour les labels de `last_name` et `date_of_birth`, ainsi que le test de la longueur du champ `last_name`, ont été omis. Ajoutez vos propres versions maintenant, en suivant les conventions de nommage et les approches que nous vous avons montrées ci-dessus.
+> [!NOTE]
+> Les tests pour les labels de `last_name` et `date_of_birth`, ainsi que le test de la longueur du champ `last_name`, ont été omis. Ajoutez vos propres versions maintenant, en suivant les conventions de nommage et les approches que nous vous avons montrées ci-dessus.
Il nous faut également tester nos méthodes personnalisées. Essentiellement, celles-ci vérifient uniquement que le nom de l'objet a été construit comme prévu, en utilisant le format "Last name", "First name", et que l'URL que nous obtenons pour un élément `Author` est telle que nous l'attendons.
@@ -381,7 +391,8 @@ AssertionError: 'Died' != 'died'
C'est vraiment un bug mineur, mais il met en lumière comment écrire des test peut vérifier de plus près les hypothèses que vous pourriez avoir supposées vraies.
-> **Note :** Changez en "died" le label pour le champ date_of_death (/catalog/models.py) et relancez les tests.
+> [!NOTE]
+> Changez en "died" le label pour le champ date_of_death (/catalog/models.py) et relancez les tests.
La configuration pour tester les autres modèles est semblable pour tous, aussi nous n'allons pas discuter chacune plus longuement. Sentez-vous libre de créer vos propres tests pour nos autres modèles.
@@ -457,7 +468,8 @@ Les deux premières fonctions testent que le `label` et le `help_text` du champ
Les autres fonctions testent que le formulaire est valide avec des dates de renouvellement situées à l'intérieur des limites acceptables, et invalide avec des valeurs en dehors de ces limites. Notez comment nous construisons des valeurs de dates de test autour de notre date actuelle (`datetime.date.today()`) en utilisant `datetime.timedelta()` (dans ce cas en spécifiant un nombre de jours ou de semaines). Ensuite nous créons juste le formulaire en lui passant nos données, et nous testons s'il est valide.
-> **Note :** Ici nous n'utilisons pas réellement la base de données ni le client de test. Envisagez de modifier ces tests pour utiliser [SimpleTestCase](https://docs.djangoproject.com/en/2.1/topics/testing/tools/#django.test.SimpleTestCase).
+> [!NOTE]
+> Ici nous n'utilisons pas réellement la base de données ni le client de test. Envisagez de modifier ces tests pour utiliser [SimpleTestCase](https://docs.djangoproject.com/en/2.1/topics/testing/tools/#django.test.SimpleTestCase).
>
> Nous avons aussi besoin de vérifier que les erreurs correctes sont levées si le formulaire est invalide. Cependant cela se fait habituellement dans la partie view, c'est pourquoi nous allons nous y attacher dans la prochaine section.
@@ -535,7 +547,8 @@ response = self.client.get(reverse('authors'))
Une fois que nous avons la réponse, nous lui demandons son code de statut, le template utilisé, si la réponse est paginée ou non, le nombre d'éléments retournés et le nombre total d'éléments.
-> **Note :** Si, dans votre fichier **/catalog/views.py**, vous mettez la variable `paginate_by` à un nombre autre que 10, assurez-vous de mettre à jour les lignes qui testent le nombre correct d'éléments affichés dans les templates paginés, ci-dessus et dans les sections qui suivent. Par exemple, si vous mettez à 5 la variable pour la liste des auteurs, changez ainsi la ligne ci-dessus :
+> [!NOTE]
+> Si, dans votre fichier **/catalog/views.py**, vous mettez la variable `paginate_by` à un nombre autre que 10, assurez-vous de mettre à jour les lignes qui testent le nombre correct d'éléments affichés dans les templates paginés, ci-dessus et dans les sections qui suivent. Par exemple, si vous mettez à 5 la variable pour la liste des auteurs, changez ainsi la ligne ci-dessus :
>
> ```python
> self.assertTrue(len(response.context['author_list']) == 5)
@@ -562,7 +575,8 @@ class LoanedBooksByUserListView(LoginRequiredMixin, generic.ListView):
Ajoutez le code de test suivant à **/catalog/tests/test_views.py**. Ici nous utilisons d'abord la méthode `SetUp()` pour créer des logins de comptes d'utilisateurs et des objets de type `BookInstance` (avec leurs livres et autres enregistrements associés), que nous utiliserons plus tard dans les tests. La moitié des livres sont empruntés par chaque utilisateur-test, mais nous avons initialement mis le statut de tous les livres à "maintenance". Nous avons utilisé `SetUp()` plutôt que `setUpTestData()`, parce que nous allons modifier plus tard certains de ces objets.
-> **Note :** Le code de `setUp()` ci-dessous crée un livre avec un `Language` spécifique, mais _votre_ code n'inclut peut-être pas le modèle `Language`, étant donné que celui-ci a été créé lors d'un _défi_. Si c'est le cas, commentez simplement les bouts de code qui créent ou importent des objets de type Language. Vous devrez aussi le faire dans la section `RenewBookInstancesViewTest` qui suit.
+> [!NOTE]
+> Le code de `setUp()` ci-dessous crée un livre avec un `Language` spécifique, mais _votre_ code n'inclut peut-être pas le modèle `Language`, étant donné que celui-ci a été créé lors d'un _défi_. Si c'est le cas, commentez simplement les bouts de code qui créent ou importent des objets de type Language. Vous devrez aussi le faire dans la section `RenewBookInstancesViewTest` qui suit.
```python
import datetime
@@ -854,7 +868,8 @@ Ajoutez la méthode de test suivante, comme montré ci-dessous. Elle vérifie qu
self.assertEqual(response.context['form'].initial['renewal_date'], date_3_weeks_in_future)
```
-> **Attention :** Si vous utilisez la class de formulaire `RenewBookModelForm(forms.ModelForm)` à la place de la classe `RenewBookForm(forms.Form)`, le nom du champ est **'due_back'** et non **'renewal_date'**.
+> [!WARNING]
+> Si vous utilisez la class de formulaire `RenewBookModelForm(forms.ModelForm)` à la place de la classe `RenewBookForm(forms.Form)`, le nom du champ est **'due_back'** et non **'renewal_date'**.
Le test suivant (ajoutez-le à la classe également) vérifie que la vue redirige vers une liste de tous les livres empruntés si le renouvellement réussit. Ce qui diffère ici est que, pour la première fois, nous montrons comment vous pouvez `POST`er des données en utilisant le client. Les données postées forment le second argument de la fonction post, et elles sont spécifiées comme un dictionnaire de clés/valeurs.
@@ -866,7 +881,8 @@ Le test suivant (ajoutez-le à la classe également) vérifie que la vue redirig
self.assertRedirects(response, reverse('all-borrowed'))
```
-> **Attention :** La vue _all-borrowed_ a été ajoutée comme _défi_, et votre code peut, à la place, rediriger vers la page d'accueil '/'. Si c'est le cas, modifiez les deux dernières lignes du code de test pour qu'elles ressemblent au code ci-dessous. L'expression `follow=True` dans la requête s'assure que la requête retourne l'URL de la destination finale (donc vérifie `/catalog/` plutôt que `/`).
+> [!WARNING]
+> La vue _all-borrowed_ a été ajoutée comme _défi_, et votre code peut, à la place, rediriger vers la page d'accueil '/'. Si c'est le cas, modifiez les deux dernières lignes du code de test pour qu'elles ressemblent au code ci-dessous. L'expression `follow=True` dans la requête s'assure que la requête retourne l'URL de la destination finale (donc vérifie `/catalog/` plutôt que `/`).
>
> ```python
> response = self.client.post(reverse('renew-book-librarian', kwargs={'pk':self.test_bookinstance1.pk,}), {'renewal_date':valid_date_in_future}, follow=True )
diff --git a/files/fr/learn/server-side/express_nodejs/index.md b/files/fr/learn/server-side/express_nodejs/index.md
index 24fe7e35b72c6c..7a7f016676db0a 100644
--- a/files/fr/learn/server-side/express_nodejs/index.md
+++ b/files/fr/learn/server-side/express_nodejs/index.md
@@ -11,7 +11,8 @@ Express est une infrastructure d'application (framework), écrit en JavaScript e
Avant d'aller plus loin, vous devrez avoir compris ce qu'est la programmation côté serveur et le concept de "framework", idéalement en ayant lu notre article [Premiers pas en programmation côté-serveur](/fr/docs/Learn/Server-side/First_steps). Une connaissance générale des concepts de programmation et du [JavaScript](/fr/docs/Web/JavaScript) est vivement recommandée, sans pour autant être essentielle à la compréhension des concepts fondamentaux.
-> **Note :** Le site MDN possède de nombreuses ressources utiles pour apprendre JavaScript dans le contexte du _développement côté client_ : [Référence JavaScript](/fr/docs/Web/JavaScript), [Guide JavaScript](/fr/docs/Web/JavaScript/Guide), [Les bases de JavaScript](/fr/docs/Learn/Getting_started_with_the_web/JavaScript_basics), [Apprendre JavaScript](/fr/docs/Learn/JavaScript). Le noyau du langage et les principaux concepts de JavaScript sont les mêmes que pour le développement côté serveur sur Node.js, il est donc important d'avoir déjà une bonne compréhension de JavaScript avant de continuer. Node.js offre des [API supplémentaires](https://nodejs.org/dist/latest/docs/api/) pour supporter des fonctionnalités utiles dans des environnements sans navigateur, par ex. pour créer des serveurs HTTP et accéder au système de fichiers, mais ne prend pas en charge les API JavaScript pour travailler avec le navigateur et le DOM.
+> [!NOTE]
+> Le site MDN possède de nombreuses ressources utiles pour apprendre JavaScript dans le contexte du _développement côté client_ : [Référence JavaScript](/fr/docs/Web/JavaScript), [Guide JavaScript](/fr/docs/Web/JavaScript/Guide), [Les bases de JavaScript](/fr/docs/Learn/Getting_started_with_the_web/JavaScript_basics), [Apprendre JavaScript](/fr/docs/Learn/JavaScript). Le noyau du langage et les principaux concepts de JavaScript sont les mêmes que pour le développement côté serveur sur Node.js, il est donc important d'avoir déjà une bonne compréhension de JavaScript avant de continuer. Node.js offre des [API supplémentaires](https://nodejs.org/dist/latest/docs/api/) pour supporter des fonctionnalités utiles dans des environnements sans navigateur, par ex. pour créer des serveurs HTTP et accéder au système de fichiers, mais ne prend pas en charge les API JavaScript pour travailler avec le navigateur et le DOM.
>
> Ce guide vous fournira des informations sur l'utilisation de Node.js et Express, et contient de nombreuses références à d'autres excellentes ressources sur Internet et dans des livres — dont des liens depuis [How do I get started with Node.js](https://stackoverflow.com/questions/2353818/how-do-i-get-started-with-node-js/5511507#5511507) (StackOverflow) et [What are the best resources for learning Node.js?](https://www.quora.com/What-are-the-best-resources-for-learning-Node-js?) (Quora).
diff --git a/files/fr/learn/server-side/express_nodejs/introduction/index.md b/files/fr/learn/server-side/express_nodejs/introduction/index.md
index 205e675133dc15..813b0f89dee51d 100644
--- a/files/fr/learn/server-side/express_nodejs/introduction/index.md
+++ b/files/fr/learn/server-side/express_nodejs/introduction/index.md
@@ -108,7 +108,8 @@ D'autres tâches de développement web ne sont pas directement prises en charge
Bien qu'Express soit assez minimaliste, des _middlewares_ (fonctions intermédiaires) compatibles ont été créés pour résoudre quasiment tous les problèmes de développement web. Il existe des bibliothèques pour se servir des cookies, gérer les sessions, la connexion de l'utilisateur, les paramètres de l'URL, les données `POST`, les entêtes de sécurité et d'autres encore. Vous trouverez une liste des paquets maintenus par l'équipe Express ici : [Express Middleware](https://expressjs.com/fr/resources/middleware.html) (ainsi que la liste de paquets tiers populaires).
-> **Note :** Cette flexibilité est à double tranchant. Il y a une multitude de paquets pour résoudre chaque problème mais trouver le bon paquet à utiliser peut vite devenir un défi. Il n'y a pas non plus de « bonne manière » pour structurer une application et beaucoup d'exemples que vous trouverez sur le net ne sont pas optimisés ou montrent seulement une infime partie de ce que vous devez faire pour développer une application web.
+> [!NOTE]
+> Cette flexibilité est à double tranchant. Il y a une multitude de paquets pour résoudre chaque problème mais trouver le bon paquet à utiliser peut vite devenir un défi. Il n'y a pas non plus de « bonne manière » pour structurer une application et beaucoup d'exemples que vous trouverez sur le net ne sont pas optimisés ou montrent seulement une infime partie de ce que vous devez faire pour développer une application web.
## D'où viennent Node et Express ?
@@ -146,7 +147,8 @@ Les sections suivantes expliquent quelques choses communes que vous verrez en tr
Tout d'abord intéressons-nous à l'exemple [Hello World](https://expressjs.com/fr/starter/hello-world.html) standard d'Express (nous expliquons chaque partie de cet exemple ci-dessous, et dans les sections suivantes).
-> **Note :** Si vous avez déjà installé Node et Express (ou si vous les installez comme montré dans [l'article suivant](/fr/docs/Learn/Server-side/Express_Nodejs/development_environment)), vous pouvez enregistrer ce code dans un fichier texte appelé **app.js** et l'exécuter via un terminal en tapant :
+> [!NOTE]
+> Si vous avez déjà installé Node et Express (ou si vous les installez comme montré dans [l'article suivant](/fr/docs/Learn/Server-side/Express_Nodejs/development_environment)), vous pouvez enregistrer ce code dans un fichier texte appelé **app.js** et l'exécuter via un terminal en tapant :
>
> **`node app.js`**
@@ -183,7 +185,8 @@ const app = express();
Vous pouvez également créer vos propres modules qui peuvent être importés de la même manière.
-> **Note :** Vous _voudrez_ créer vos propres modules, car cela vous permet d'organiser votre code en parties maniables — une application monolithique à fichier unique est difficile à comprendre et à maintenir. L'utilisation de modules vous aide également à gérer votre espace de noms, car seules les variables que vous exportez explicitement sont importées lorsque vous utilisez un module.
+> [!NOTE]
+> Vous _voudrez_ créer vos propres modules, car cela vous permet d'organiser votre code en parties maniables — une application monolithique à fichier unique est difficile à comprendre et à maintenir. L'utilisation de modules vous aide également à gérer votre espace de noms, car seules les variables que vous exportez explicitement sont importées lorsque vous utilisez un module.
Pour rendre les objets disponibles en dehors d'un module, il suffit de les affecter à l'objet `exports`. Par exemple, le module **square.js** ci-dessous est un fichier qui exporte les méthodes `area()` et `perimeter()` :
@@ -206,7 +209,8 @@ console.log(
);
```
-> **Note :** Vous pouvez également spécifier un chemin absolu vers le module (ou un nom, comme nous l'avons fait initialement).
+> [!NOTE]
+> Vous pouvez également spécifier un chemin absolu vers le module (ou un nom, comme nous l'avons fait initialement).
Si vous souhaitez exporter un objet complet en une seule affectation au lieu de le construire une propriété à la fois, affectez-le à `module.exports` comme indiqué ci-dessous (vous pouvez également procéder ainsi pour faire de la racine de l'objet exports un constructeur ou une autre fonction) :
@@ -222,7 +226,8 @@ module.exports = {
};
```
-> **Note :** L'objet `exports` peut être vu comme un [raccourci](https://nodejs.org/api/modules.html#modules_exports_shortcut) vers `module.exports` au sein d'un module donné. En fait, `exports` est simplement une variable qui est initialisée avec la valeur de `module.exports` avant que le module soit évalué. Cette valeur est une référence vers un objet. Cela signifie que `exports` référence le même objet que celui référencé par `module.exports`. Cela signifie également qu'affecter une autre valeur à `exports` le détachera complètement de `module.exports`.
+> [!NOTE]
+> L'objet `exports` peut être vu comme un [raccourci](https://nodejs.org/api/modules.html#modules_exports_shortcut) vers `module.exports` au sein d'un module donné. En fait, `exports` est simplement une variable qui est initialisée avec la valeur de `module.exports` avant que le module soit évalué. Cette valeur est une référence vers un objet. Cela signifie que `exports` référence le même objet que celui référencé par `module.exports`. Cela signifie également qu'affecter une autre valeur à `exports` le détachera complètement de `module.exports`.
Pour de plus amples informations sur les modules, voir [Modules](https://nodejs.org/api/modules.html#modules_modules) (documentation Node).
@@ -248,9 +253,11 @@ L'utilisation d'API asynchrones non bloquantes est encore plus importante sur No
Il existe plusieurs façons pour une API asynchrone d'informer votre application de la fin d'une opération. La méthode la plus courante consiste à enregistrer une fonction de rappel lorsque vous invoquez l'API asynchrone, qui sera rappelée lorsque l'opération sera terminée. C'est l'approche utilisée ci-dessus.
-> **Note :** L'utilisation des rappels (« _callbacks_ ») peut être assez « désordonnée » si vous avez une séquence d'opérations asynchrones dépendantes qui doivent être exécutées dans l'ordre, car cela entraîne de multiples niveaux de rappels imbriqués. Ce problème est communément appelé « l'enfer des callbacks ». Ce problème peut être réduit par de bonnes pratiques de codage dont l'utilisation des [promesses](/fr/docs/Web/JavaScript/Reference/Global_Objects/Promise) ou de [`async`](/fr/docs/Web/JavaScript/Reference/Statements/async_function)/[`await`](/fr/docs/Web/JavaScript/Reference/Operators/await).
+> [!NOTE]
+> L'utilisation des rappels (« _callbacks_ ») peut être assez « désordonnée » si vous avez une séquence d'opérations asynchrones dépendantes qui doivent être exécutées dans l'ordre, car cela entraîne de multiples niveaux de rappels imbriqués. Ce problème est communément appelé « l'enfer des callbacks ». Ce problème peut être réduit par de bonnes pratiques de codage dont l'utilisation des [promesses](/fr/docs/Web/JavaScript/Reference/Global_Objects/Promise) ou de [`async`](/fr/docs/Web/JavaScript/Reference/Statements/async_function)/[`await`](/fr/docs/Web/JavaScript/Reference/Operators/await).
-> **Note :** Une convention courante pour Node et Express est d'utiliser des callbacks de type error-first. Dans cette convention, la première valeur de vos _fonctions de rappel_ est une valeur d'erreur, tandis que les arguments suivants contiennent des données de succès. Il y a une bonne explication de l'utilité de cette approche dans ce blog : [The Node.js Way - Comprendre les callbacks de type « Error First ».](https://fredkschott.com/post/2014/03/understanding-error-first-callbacks-in-node-js) (fredkschott.com).
+> [!NOTE]
+> Une convention courante pour Node et Express est d'utiliser des callbacks de type error-first. Dans cette convention, la première valeur de vos _fonctions de rappel_ est une valeur d'erreur, tandis que les arguments suivants contiennent des données de succès. Il y a une bonne explication de l'utilité de cette approche dans ce blog : [The Node.js Way - Comprendre les callbacks de type « Error First ».](https://fredkschott.com/post/2014/03/understanding-error-first-callbacks-in-node-js) (fredkschott.com).
### Créer des gestionnaires de route
@@ -264,7 +271,8 @@ app.get("/", (req, res) => {
La fonction de rappel prend une requête et un objet réponse comme arguments. Dans ce cas, la méthode appelle simplement [`send()`](https://expressjs.com/en/4x/api.html#res.send) sur la réponse pour renvoyer la chaîne de caractères « Hello World ! ». Il existe un [nombre d'autres méthodes de réponse](https://expressjs.com/fr/guide/routing.html#response-methods) pour terminer le cycle requête/réponse, par exemple vous pourriez appeler [`res.json()`](https://expressjs.com/en/4x/api.html#res.json) pour envoyer une réponse JSON ou [`res.sendFile()`](https://expressjs.com/en/4x/api.html#res.sendFile) pour envoyer un fichier.
-> **Note :** Vous pouvez utiliser les noms d'arguments de votre choix dans les fonctions de rappel ; lorsque le rappel est invoqué, le premier argument sera toujours la requête et le second sera toujours la réponse. Il est judicieux de les nommer de telle sorte que vous puissiez identifier l'objet avec lequel vous travaillez dans le corps du _callback_.
+> [!NOTE]
+> Vous pouvez utiliser les noms d'arguments de votre choix dans les fonctions de rappel ; lorsque le rappel est invoqué, le premier argument sera toujours la requête et le second sera toujours la réponse. Il est judicieux de les nommer de telle sorte que vous puissiez identifier l'objet avec lequel vous travaillez dans le corps du _callback_.
L'objet _Express_ `application` fournit également des méthodes permettant de définir des gestionnaires de route pour tous les autres verbes HTTP, qui sont pour la plupart utilisés exactement de la même manière :
@@ -302,7 +310,8 @@ router.get("/about", (req, res) => {
module.exports = router;
```
-> **Note :** L'ajout de routes à l'objet `Router` est identique à l'ajout de routes à l'objet `app` (comme indiqué précédemment).
+> [!NOTE]
+> L'ajout de routes à l'objet `Router` est identique à l'ajout de routes à l'objet `app` (comme indiqué précédemment).
Pour utiliser le routeur dans notre fichier d'application principal, nous devrions alors `require()` le module route (**wiki.js**), puis appeler `use()` sur l'application _Express_ pour ajouter le routeur au chemin de manipulation du middleware. Les deux routes seront alors accessibles depuis `/wiki/` et `/wiki/about/`.
@@ -318,7 +327,8 @@ Nous vous montrerons beaucoup plus en détails comment travailler avec les route
L'intergiciel (aussi appelé « _middleware_ ») est largement utilisé dans les applications d'Express, pour des tâches allant du service de fichiers statiques à la gestion des erreurs, en passant par la compression des réponses HTTP. Alors que les fonctions de route terminent le cycle requête-réponse HTTP en renvoyant une réponse au client HTTP, les fonctions d'intergiciel effectuent _typiquement_ une opération sur la demande ou la réponse, puis appellent la fonction suivante dans la « pile », qui peut être un autre intergiciel ou un gestionnaire de route. L'ordre dans lequel les intergiciels sont appelés dépend du code de l'application.
-> **Note :** L'intergiciel peut effectuer n'importe quelle opération, exécuter n'importe quel code, apporter des modifications à l'objet requête et réponse, et il peut _aussi mettre fin au cycle requête-réponse_. S'il ne met pas fin au cycle, alors il doit appeler `next()` pour passer le contrôle à la fonction suivante de l'intergiciel (ou la requête sera laissée en suspens).
+> [!NOTE]
+> L'intergiciel peut effectuer n'importe quelle opération, exécuter n'importe quel code, apporter des modifications à l'objet requête et réponse, et il peut _aussi mettre fin au cycle requête-réponse_. S'il ne met pas fin au cycle, alors il doit appeler `next()` pour passer le contrôle à la fonction suivante de l'intergiciel (ou la requête sera laissée en suspens).
La plupart des apps utiliseront des _programmes intermédiaires tiers_ afin de simplifier les tâches courantes de développement web comme le travail avec les cookies, les sessions, l'authentification des utilisateurs, l'accès aux données `POST` et JSON des requêtes, la journalisation, etc. Vous pouvez trouver une [liste des paquets _middleware_ maintenus par l'équipe Express](https://expressjs.com/fr/resources/middleware.html) (qui inclut également d'autres paquets populaires de tiers). D'autres paquets Express sont disponibles sur le gestionnaire de paquets NPM.
@@ -338,7 +348,8 @@ app.use(logger('dev'));
...
```
-> **Note :** Les fonctions d'intergiciel et de routage sont appelées dans l'ordre où elles sont déclarées. Pour certains intergiciels, l'ordre est important (par exemple, si l'intergiciel de session dépend de l'intergiciel de cookie, alors le gestionnaire de cookie doit être ajouté en premier). Il est presque toujours nécessaire d'appeler l'intergiciel avant de définir les routes, sinon vos gestionnaires de routes n'auront pas accès aux fonctionnalités ajoutées par votre intergiciel.
+> [!NOTE]
+> Les fonctions d'intergiciel et de routage sont appelées dans l'ordre où elles sont déclarées. Pour certains intergiciels, l'ordre est important (par exemple, si l'intergiciel de session dépend de l'intergiciel de cookie, alors le gestionnaire de cookie doit être ajouté en premier). Il est presque toujours nécessaire d'appeler l'intergiciel avant de définir les routes, sinon vos gestionnaires de routes n'auront pas accès aux fonctionnalités ajoutées par votre intergiciel.
Vous pouvez écrire vos propres fonctions intergiciels, et vous serez probablement amené à le faire (ne serait-ce que pour créer un code de gestion des erreurs). La **seule** différence entre une fonction _middleware_ et un _callback_ de gestionnaire de route est que les fonctions _middleware_ ont un troisième argument `next`, que les fonctions _middleware_ sont censées appeler si elles ne sont pas celle qui termine le cycle de requête (lorsque la fonction _middleware_ est appelée, cela contient la fonction _next_ qui doit être appelée).
@@ -368,7 +379,8 @@ app.get("/", a_middleware_function);
app.listen(3000);
```
-> **Note :** Ci-dessus, nous déclarons la fonction _middleware_ séparément, puis nous la définissons comme fonction de rappel. Dans notre précédente fonction de gestion de route, nous avons déclaré la fonction de rappel lorsqu'elle a été utilisée. En JavaScript, les deux approches sont valables.
+> [!NOTE]
+> Ci-dessus, nous déclarons la fonction _middleware_ séparément, puis nous la définissons comme fonction de rappel. Dans notre précédente fonction de gestion de route, nous avons déclaré la fonction de rappel lorsqu'elle a été utilisée. En JavaScript, les deux approches sont valables.
La documentation d'Express contient beaucoup d'autres excellents documents sur [l'utilisation](https://expressjs.com/fr/guide/using-middleware.html) et [l'écriture](https://expressjs.com/fr/guide/writing-middleware.html) d'intergiciels Express.
@@ -410,7 +422,8 @@ https://localhost:3000/media/video/cat.mp4
https://localhost:3000/media/cry.mp3
```
-> **Note :** Voir également [Servir des fichiers statiques dans Express](https://expressjs.com/fr/starter/static-files.html).
+> [!NOTE]
+> Voir également [Servir des fichiers statiques dans Express](https://expressjs.com/fr/starter/static-files.html).
### Traitement des erreurs
@@ -427,9 +440,11 @@ Ceux-ci peuvent retourner tout contenu nécessaire, mais doivent être appelés
Express est livré avec un gestionnaire d'erreurs intégré, qui prend en charge toutes les erreurs restantes qui pourraient être rencontrées dans l'application. Cette fonction _middleware_ de gestion des erreurs par défaut est ajoutée à la fin de la pile de fonctions middleware. Si vous passez une erreur à `next()` et que vous ne la gérez pas dans un gestionnaire d'erreurs, elle sera traitée par le gestionnaire d'erreurs intégré ; l'erreur sera écrite au client avec la trace de la pile.
-> **Note :** La trace de la pile n'est pas incluse dans l'environnement de production. Pour exécuter une application serveur Express, la variable d'environnement `NODE_ENV` doit être définie avec la valeur `production`.
+> [!NOTE]
+> La trace de la pile n'est pas incluse dans l'environnement de production. Pour exécuter une application serveur Express, la variable d'environnement `NODE_ENV` doit être définie avec la valeur `production`.
-> **Note :** Les codes d'état HTTP 404 et autres « erreurs » ne sont pas traités comme des erreurs. Si vous voulez les gérer, vous pouvez ajouter une fonction _middleware_ pour le faire. Pour plus d'informations, consultez la [FAQ](https://expressjs.com/fr/starter/faq.html#how-do-i-handle-404-responses).
+> [!NOTE]
+> Les codes d'état HTTP 404 et autres « erreurs » ne sont pas traités comme des erreurs. Si vous voulez les gérer, vous pouvez ajouter une fonction _middleware_ pour le faire. Pour plus d'informations, consultez la [FAQ](https://expressjs.com/fr/starter/faq.html#how-do-i-handle-404-responses).
Pour plus d'informations, voir [Gestion des erreurs](https://expressjs.com/fr/guide/error-handling.html) (docs Express).
diff --git a/files/fr/learn/server-side/first_steps/client-server_overview/index.md b/files/fr/learn/server-side/first_steps/client-server_overview/index.md
index 0aadb13e208920..8a6a592c9c0fb6 100644
--- a/files/fr/learn/server-side/first_steps/client-server_overview/index.md
+++ b/files/fr/learn/server-side/first_steps/client-server_overview/index.md
@@ -62,7 +62,8 @@ Les sites web dynamiques ou statiques (voir sections suivantes) utilisent les m
Vous faites une simple requête `GET` en cliquant sur un lien ou en faisant une recherche sur un site (sur une page de moteur de recherche par exemple). Une requête HTTP envoyée lorsque vous effectuez une recherche sur MDN pour les termes : "La relation Client-Serveur" ressemblera beaucoup à ce qui suit mais ne sera pas identique car des parties du message dépendent des paramètres de votre navigateur.
-> **Note :** Le format des messsages HTTP est défini par un standard web ([RFC7230](http://www.rfc-editor.org/rfc/rfc7230.txt)). Vous n'avez pas besoin de connaître ce niveau de détails mais vous saurez au moins d'où vient tout ça !
+> [!NOTE]
+> Le format des messsages HTTP est défini par un standard web ([RFC7230](http://www.rfc-editor.org/rfc/rfc7230.txt)). Vous n'avez pas besoin de connaître ce niveau de détails mais vous saurez au moins d'où vient tout ça !
#### La requête
@@ -203,13 +204,15 @@ X-Cache-Info: not cacheable; request wasn't a GET or HEAD
Content-Length: 0
```
-> **Note :** Les requêtes et réponses montrées dans ces exemples ont été capturées avec l'application [Fiddler](https://www.telerik.com/download/fiddler) , mais vous pouvez avoir des informations similaires en utilisant des "renifleurs" web (e.g. [WebSniffer](https://websniffer.com/), [Wireshark](https://www.wireshark.org/)) ou des extensions de navigateur comme [HttpFox](https://addons.mozilla.org/en-US/firefox/addon/httpfox/). Vous pouvez essayer seul. Utilisez tous les outils recommandés, naviguez sur des sites et éditez des profils de données pour explorer les différentes requêtes et réponses. La plupart des navigateurs modernes ont aussi des outils qui gérent les requêtes réseau, par exemple le [Network Monitor](/fr/docs/Tools/Network_Monitor) dans Firefox).
+> [!NOTE]
+> Les requêtes et réponses montrées dans ces exemples ont été capturées avec l'application [Fiddler](https://www.telerik.com/download/fiddler) , mais vous pouvez avoir des informations similaires en utilisant des "renifleurs" web (e.g. [WebSniffer](https://websniffer.com/), [Wireshark](https://www.wireshark.org/)) ou des extensions de navigateur comme [HttpFox](https://addons.mozilla.org/en-US/firefox/addon/httpfox/). Vous pouvez essayer seul. Utilisez tous les outils recommandés, naviguez sur des sites et éditez des profils de données pour explorer les différentes requêtes et réponses. La plupart des navigateurs modernes ont aussi des outils qui gérent les requêtes réseau, par exemple le [Network Monitor](/fr/docs/Tools/Network_Monitor) dans Firefox).
## Les sites statiques
Un site statique renvoie le même contenu codé en dur depuis le serveur quelle que soit la ressource demandée. Si vous avez une page concernant un produit à l'adresse `/static/myproduct1.html`, cette même page sera retournée à chaque utilisateur. Si vous ajoutez un nouveau produit, vous devez ajouter une nouvelle page (par ex : `myproduct2.html`) et ainsi de suite. Cela peut être vraiment inefficace — Comment faire quand vous avez des milliers de pages "produit" à faire ? Vous allez répéter beaucoup de code identique dans chaque page (le modèle de base de la page, sa structure, etc.) et si vous voulez changer quoique ce soit dans la structure de la page — comme une section "produits dérivés" par exemple — alors, il faudra changer chaque page individuellement..
-> **Note :** Les sites statiques sont trés efficace quand vous avez un petit nombre de pages et que vous voulez envoyer le même contenu à chaque utilisateur. De toutes façons, ils peuvent avoir un coût certain de maintenance au fur et à mesure de l'augmentation du nombre de pages.
+> [!NOTE]
+> Les sites statiques sont trés efficace quand vous avez un petit nombre de pages et que vous voulez envoyer le même contenu à chaque utilisateur. De toutes façons, ils peuvent avoir un coût certain de maintenance au fur et à mesure de l'augmentation du nombre de pages.
Voyons comment tout cela marche en révisant un diagramme d'architecture de site statique vu dans l'article précédent.
@@ -277,7 +280,8 @@ urlpatterns = [
]
```
-> **Note :** Les premiers paramètres des fonctions url () peuvent paraître un peu bizarres (par exemple, r '^ junior / $') car ils utilisent une technique de correspondance de modèle appelée "expressions régulières" (RegEx ou RE). Vous n'avez pas besoin de savoir comment fonctionnent les expressions régulières à ce stade, car elles nous permettent également de faire correspondre les modèles de l'URL (plutôt que les valeurs codées en dur ci-dessus) et de les utiliser comme paramètres dans nos fonctions d'affichage. À titre d'exemple, un RegEx très simple pourrait dire "faire correspondre une seule lettre majuscule, suivie de 4 à 7 lettres minuscules".
+> [!NOTE]
+> Les premiers paramètres des fonctions url () peuvent paraître un peu bizarres (par exemple, r '^ junior / $') car ils utilisent une technique de correspondance de modèle appelée "expressions régulières" (RegEx ou RE). Vous n'avez pas besoin de savoir comment fonctionnent les expressions régulières à ce stade, car elles nous permettent également de faire correspondre les modèles de l'URL (plutôt que les valeurs codées en dur ci-dessus) et de les utiliser comme paramètres dans nos fonctions d'affichage. À titre d'exemple, un RegEx très simple pourrait dire "faire correspondre une seule lettre majuscule, suivie de 4 à 7 lettres minuscules".
L'infrastructure Web permet également à une fonction d'affichage d'extraire facilement des informations de la base de données. La structure de nos données est définie dans des modèles, qui sont des classes Python qui définissent les champs à stocker dans la base de données sous-jacente. Si nous avons un modèle nommé Team avec un champ "team_type", nous pouvons utiliser une syntaxe de requête simple pour récupérer toutes les équipes ayant un type particulier.L'exemple ci-dessous donne la liste de toutes les équipes ayant le type d'équipe exact (sensible à la casse) de "junior" - notez le format: nom du champ (team_type) suivi du double underscore, puis du type de match à utiliser (ici nous utilisons: exact). ). Il existe de nombreux autres types de match et nous pouvons les enchaîner. Nous pouvons également contrôler l'ordre et le nombre de résultats retournés.
diff --git a/files/fr/learn/server-side/first_steps/introduction/index.md b/files/fr/learn/server-side/first_steps/introduction/index.md
index 2606077257c43c..0517042d42c30e 100644
--- a/files/fr/learn/server-side/first_steps/introduction/index.md
+++ b/files/fr/learn/server-side/first_steps/introduction/index.md
@@ -88,7 +88,8 @@ Typiquement, les développeurs écrivent leur code en utilisant des **frameworks
Encore une fois, bien que le code côté client et côté serveur utilisent des frameworks, les domaines d'application sont très différents et par conséquent les frameworks aussi. Les frameworks web côté client simplifient les tâches de mise en page et de présentation tandis que les frameworks web côté serveur fournissent des fonctionnalités "courantes" que vous auriez probablement à implémenter vous-même autrement (comme le support des sessions, des utilisateurs et de l'authentification, l'accès à la base de données, les bibliothèques de templates, etc.).
-> **Note :** Les frameworks côté client sont souvent utilisés pour accélérer le développement du code côté client, mais vous pouvez également choisir d'écrire tout le code à la main ; en vérité, écrire votre code à la main peut être plus rapide et plus efficace si vous n'avez besoin que d'une petite interface web très simple.
+> [!NOTE]
+> Les frameworks côté client sont souvent utilisés pour accélérer le développement du code côté client, mais vous pouvez également choisir d'écrire tout le code à la main ; en vérité, écrire votre code à la main peut être plus rapide et plus efficace si vous n'avez besoin que d'une petite interface web très simple.
>
> En revanche, vous ne penseriez presque jamais à écrire les composants côté serveur d'une application web sans framework — implémenter des fonctionnalités vitales comme un serveur HTTP est très difficile à faire à partir de rien, comme disons en Python, alors que les frameworks web Python comme Django le fournissent tout prêt à l'emploi, accompagné d'autres outils très utiles.
@@ -112,7 +113,8 @@ Le serveur ne se limite pas à l'envoi d'informations à partir de bases de donn
Comme les informations se trouvent dans une base de données, elles peuvent également être partagées et mises à jour plus facilement avec d'autres systèmes (par exemple, quand des produits sont vendus en ligne ou dans un magasin, le magasin peut mettre à jour son inventaire).
-> **Note :** Votre imagination n'a pas à travailler dur pour voir les bénéfices du code côté serveur pour le stockage et distribution de l'information:
+> [!NOTE]
+> Votre imagination n'a pas à travailler dur pour voir les bénéfices du code côté serveur pour le stockage et distribution de l'information:
>
> 1. Allez sur [Amazon](https://www.amazon.com) ou tout autre site e-commerce.
> 2. Cherchez un certain nombre de mot-clés et remarquez que la structure de la page de change pas, même si les résultats oui.
@@ -145,7 +147,8 @@ Quelques exemples du monde réel incluent :
- Les réseaux sociaux comme Facebook permettent aux utilisateurs de contrôler entièrement leurs propres données, mais permettent seulement à leurs amis de les voir ou des les commenter. L'utilisateur détermine qui peut voir ses données, et par extension, dans le flux de qui elles apparaissent — l'autorisation est une partie centrale de l'expérience utilisateur !
- Le site sur lequel vous êtes en ce moment même contrôle l'accès au contenu : les articles sont visibles à tout le monde, mais seuls les utilisateurs identifiés peuvent éditer le contenu. Essayez de cliquer sur le bouton **Modifier** en haut de cette page — si vous êtes identifié, vous verrez la vue d'édition ; sinon, vous serez redirigé vers la page d'inscription.
-> **Note :** Il existe de nombreux autres exemples où l'accès au contenu est contrôlé. Par exemple, que voyez-vous si vous allez sur le site en ligne de votre banque ? Connectez-vous à votre compte — quelles autres informations pouvez-vous voir et modifier ? Quelles informations pouvez-vous voir que seule la banque peut changer ?
+> [!NOTE]
+> Il existe de nombreux autres exemples où l'accès au contenu est contrôlé. Par exemple, que voyez-vous si vous allez sur le site en ligne de votre banque ? Connectez-vous à votre compte — quelles autres informations pouvez-vous voir et modifier ? Quelles informations pouvez-vous voir que seule la banque peut changer ?
### Stocker les informations de session/d'état
@@ -153,7 +156,8 @@ La programmation côté serveur permet aux développeurs d'utiliser des **sessio
Cela permet, par exemple, à un site de savoir qu'un utilisateur s'est déjà identifié et afficher des messages qui lui sont destinés, d'afficher son historique de commande, ou peut-être encore, dans le cas d'un jeu, lui permettre de reprendre là où il en est resté.
-> **Note :** Visitez le site d'un journal qui a une offre d'abonnement et ouvrez des pages (par exemple [The Age](http://www.theage.com.au/)). Si vous continuez à visiter le site quelques heures/jours, éventuellement, vous commencerez à être redirigé vers des pages expliquant comment vous abonner, et vous ne pourrez plus accéder aux articles. Cette information est un exemple de session stockée dans des cookies.
+> [!NOTE]
+> Visitez le site d'un journal qui a une offre d'abonnement et ouvrez des pages (par exemple [The Age](http://www.theage.com.au/)). Si vous continuez à visiter le site quelques heures/jours, éventuellement, vous commencerez à être redirigé vers des pages expliquant comment vous abonner, et vous ne pourrez plus accéder aux articles. Cette information est un exemple de session stockée dans des cookies.
### Notifications et communication
@@ -165,7 +169,8 @@ Quelques exemples incluent :
- Amazon envoie régulièrement des emails qui suggèrent des produits similaires à ceux que vous avez déjà acheté ou vu, par lesquels vous pourriez être intéressé.
- Un serveur web peut envoyer des messages d'alerte aux administrateurs du site pour les prévenir en cas de mémoire insuffisante sur le serveur ou d'activité suspecte de l'utilisateur.
-> **Note :** Le type de notification le plus courant est la "confirmation d'inscription". Choisissez presque n'importe quel site qui vous intéresse (Google, Amazon, Instagram, etc.) et créez un nouveau compte en utilisant votre adresse email. Vous recevrez rapidement un email qui confirme votre inscription, ou qui exige une confirmation pour activer votre compte.
+> [!NOTE]
+> Le type de notification le plus courant est la "confirmation d'inscription". Choisissez presque n'importe quel site qui vous intéresse (Google, Amazon, Instagram, etc.) et créez un nouveau compte en utilisant votre adresse email. Vous recevrez rapidement un email qui confirme votre inscription, ou qui exige une confirmation pour activer votre compte.
### Analyse des données
@@ -173,7 +178,8 @@ Un site web peut collecter beaucoup de données sur les utilisateurs : ce qu'ils
Par exemple, Amazon et Google font tous deux de la publicité pour des produits en se basant sur les recherches précédentes, sur les achats que vous avez faits.
-> **Note :** Si vous êtes un utilisateur de Facebook, allez sur votre flux principal et regardez les posts. Notez que certains posts ne sont pas classés par ordre numérique — en particulier, les posts qui ont le plus de "likes" sont souvent placés plus haut dans la liste que les posts plus récents.
+> [!NOTE]
+> Si vous êtes un utilisateur de Facebook, allez sur votre flux principal et regardez les posts. Notez que certains posts ne sont pas classés par ordre numérique — en particulier, les posts qui ont le plus de "likes" sont souvent placés plus haut dans la liste que les posts plus récents.
>
> Observez également quels types de publicités vous voyez — vous pourrez voir des publicités pour des choses que vous avez regardé sur d'autres sites. L'algorithme de Facebook pour mettre en avant du contenu et faire de la publicité est un peu un mystérieux, mais il est clair qu'il prend en compte vos likes et ce que vous avez l'habitude de regarder !
diff --git a/files/fr/learn/server-side/first_steps/web_frameworks/index.md b/files/fr/learn/server-side/first_steps/web_frameworks/index.md
index 381d363510c9a5..62b93c13c824e4 100644
--- a/files/fr/learn/server-side/first_steps/web_frameworks/index.md
+++ b/files/fr/learn/server-side/first_steps/web_frameworks/index.md
@@ -133,7 +133,8 @@ Les frameworks web fournissent souvent un mécanisme facilitant la génération
Par exemple, le système de templates Django vous permet de spécifier des variables en utilisant une syntaxe "double-handlebars" (par exemple, `\{{ variable_name }}`), qui sera remplacée par les valeurs transmises à partir de la fonction d'affichage lors du rendu d'une page. Le système de templates prend également en charge les expressions (avec la syntaxe : `{% expression %}`), qui permettent aux templates d'effectuer des opérations simples, telles que l'itération des valeurs de liste transmises au modèle.
-> **Note :** Many other templating systems use a similar syntax, e.g.: Jinja2 (Python), handlebars (JavaScript), moustache (JavaScript), etc.
+> [!NOTE]
+> Many other templating systems use a similar syntax, e.g.: Jinja2 (Python), handlebars (JavaScript), moustache (JavaScript), etc.
L'extrait de code ci-dessous montre comment cela fonctionne. En reprenant l'exemple "youngest_teams" de la section précédente, le modèle HTML se voit transmettre par la vue une variable de liste nommée youngest_teams. Dans le squelette HTML, nous avons une expression qui vérifie d'abord si la variable youngest_teams existe, puis itère dans une boucle for. À chaque itération, le modèle affiche la valeur team_name de l'équipe dans un élément de liste.
@@ -179,7 +180,8 @@ Il existe de nombreux autres facteurs possibles, y compris les licences, que le
Si vous débutez en programmation, vous choisirez probablement un framework facile à prendre en main. Une documentation riche et une communauté active sont également des critères pertinents pour votre choix. Pour la suite de ce cours, nous avons choisi Django (Python) et Express (Node/JavaScript) principalement parce que ces frameworks sont faciles à apprendre et bénéficient d'un bon soutien.
-> **Note :** Let's go to the main websites for [Django](https://www.djangoproject.com/) (Python) and [Express](http://expressjs.com/) (Node/JavaScript) and check out their documentation and community.
+> [!NOTE]
+> Let's go to the main websites for [Django](https://www.djangoproject.com/) (Python) and [Express](http://expressjs.com/) (Node/JavaScript) and check out their documentation and community.
>
> 1. Navigate to the main sites (linked above)
>
@@ -199,7 +201,8 @@ Let's now move on, and discuss a few specific server-side web frameworks.
The server-side frameworks below represent _a few_ of the most popular available at the time of writing. All of them have everything you need to be productive — they are open source, are under active development, have enthusiastic communities creating documentation and helping users on discussion boards, and are used in large numbers of high-profile websites. There are many other great server-side frameworks that you can discover using a basic internet search.
-> **Note :** Descriptions come (partially) from the framework websites!
+> [!NOTE]
+> Descriptions come (partially) from the framework websites!
### Django (Python)
diff --git a/files/fr/learn/server-side/first_steps/website_security/index.md b/files/fr/learn/server-side/first_steps/website_security/index.md
index 56da97afd67486..c8fc4d75ed0b40 100644
--- a/files/fr/learn/server-side/first_steps/website_security/index.md
+++ b/files/fr/learn/server-side/first_steps/website_security/index.md
@@ -34,7 +34,8 @@ La sécurité efficace d'un site web nécessite un effort de conception sur l'en
Le reste de cet article détaille les menaces les plus courantes qui pèsent sur les sites web et quelques étapes simples pour protèger votre site.
-> **Note :** ceci est un article d'introduction, conçu pour vous aider à réflechir à la sécurité de votre site web. Il n'est en rien exhaustif.
+> [!NOTE]
+> Ceci est un article d'introduction, conçu pour vous aider à réflechir à la sécurité de votre site web. Il n'est en rien exhaustif.
## Menaces visant la sécurité des sites web
@@ -44,7 +45,8 @@ Cette section n'énumère que quelques-unes des menaces les plus courantes visan
XSS est un terme utilisé pour décrire une classe d'attaque qui permet à l'attaquant d'injecter des scripts, exécutés côté-client, _au travers_ du site web pour viser le navigateur web des autres utilisateurs. Comme le code injecté provient du site web le navigateur web le considère comme sûr, il peut de ce fait faire des choses comme transmettre le cookie d'authentification de l'utilisateur à l'attaquant. Une fois que l'attaquant obtient ce cookie il peut se connecter sur le site comme si il était l'utilisateur attaqué et peut faire tout ce que l'utilisateur pourrait faire. En fonction du site sur lequel l'attaque se produit, cela peut inclure l'accès aux détails de carte bancaire, les informations des contacts, la modification du mot de passe, etc.
-> **Note :** les vulnérabilités XSS ont historiquement été les plus courantes.
+> [!NOTE]
+> Les vulnérabilités XSS ont historiquement été les plus courantes.
Il y a deux manières principales pour demander au site de retourner un script injecté vers un navigateur web — elles sont désignées en tant que vulnérabilités XSS _réfléchie_ et _persistante_.
@@ -77,7 +79,8 @@ SELECT * FROM users WHERE name = 'a';DROP TABLE users; SELECT * FROM userinfo WH
Le moyen pour éviter ce type d'attaque est de s'assurer que toute saisie de l'utilisateur transmise à une requête SQL ne peut pas changer la nature de cette requête. Un moyen de faire cela est d'[échapper](https://fr.wikipedia.org/wiki/Caractère_d%27échappement) tous les caractères de la saisie utilisateur quand ils ont un sens particulier en SQL.
-> **Note :** la requête SQL considère le symbole ' comme le début et la fin d'une chaine de texte. En ajoutant le caractère \ nous allons "échapper" ce symbole, et dire à SQL de le traiter comme une simple partie de la chaîne de caractères.
+> [!NOTE]
+> La requête SQL considère le symbole ' comme le début et la fin d'une chaine de texte. En ajoutant le caractère \ nous allons "échapper" ce symbole, et dire à SQL de le traiter comme une simple partie de la chaîne de caractères.
Dans la requête ci-dessous nous avons échappé le caractère '. Le SQL va donc interpréter la chaine complète (en gras) comme un nom (un nom étrange en effet, mais pas nuisible).
@@ -87,7 +90,8 @@ SELECT * FROM users WHERE name = 'a\';DROP TABLE users; SELECT * FROM userinfo W
Les frameworks web se chargent bien souvent d'échapper ces caractères à votre place. Django, par exemple, s'assure que toute saisie d'un utilisateur transmise au modèle est bien échappée.
-> **Note :** Cette section s'inspire beaucoup des informations de [Wikipedia ici](https://en.wikipedia.org/wiki/SQL_injection).
+> [!NOTE]
+> Cette section s'inspire beaucoup des informations de [Wikipedia ici](https://en.wikipedia.org/wiki/SQL_injection).
### Falsification de requête inter-sites (CSRF)
@@ -99,7 +103,8 @@ Si un utilisateur clique sur le bouton de validation, une requête HTTP POST, co
Au final tout utilisateur qui va cliquer sur le bouton de validation, alors qu'il sera connecté sur le site d'échange d'argent, va autoriser la transaction. John va devenir riche !
-> **Note :** l'astuce ici est que John n'a pas besoin d'accéder aux cookies de l'utilisateur (ou à ses identifiants), le navigateur web stocke cette information et l'inclut automatiquement dans toute les requêtes destinées au serveur associé.
+> [!NOTE]
+> L'astuce ici est que John n'a pas besoin d'accéder aux cookies de l'utilisateur (ou à ses identifiants), le navigateur web stocke cette information et l'inclut automatiquement dans toute les requêtes destinées au serveur associé.
Un moyen de prévenir ce type d'attaque est que le serveur demande que chaque requête POST possède un secret généré par le serveur et spécifique à l'utilisateur (le secret serait transmis par le serveur lors de l'envoi du formulaire de transaction). Cette approche empêche John de créer son propre formulaire car il n'est pas capable de connaitre le secret que le serveur founit à l'utilisateur. Même si il venait à trouver ce secret et créer un formulaire pour un utilisateur particulier, il ne pourrait pas utiliser ce formulaire pour attaquer d'autres utilisateurs
@@ -121,7 +126,8 @@ Il y en a beaucoup d'autres. Pour une liste plus exhaustive vous pouvez consulte
La majorité des attaques citées précédement réusissent lorsque l'application web fait confiance aux données provenant du navigateur web. Quoique vous fassiez d'autre pour améliorer la sécurité de votre site web, vous devez désinfecter toutes les saisies des utilisateurs avant de les afficher, de les utiliser dans les requêtes SQL ou de les transmettre dans les appels du système ou du système de fichier.
-> **Attention :** la leçon la plus importante à retenir concernant la sécurité d'un site web est de ne **jamais faire confiance aux données du navigateur web**. Cela comprend les requêtes `GET` avec la présence des paramètres dans l'URL, les données envoyées avec les `POST`, les en-têtes HTTP, les cookies, les fichiers chargés par l'utilisateur, etc. Il faut toujours vérifier et assainir les données. Il faut toujours s'attendre au pire.
+> [!WARNING]
+> La leçon la plus importante à retenir concernant la sécurité d'un site web est de ne **jamais faire confiance aux données du navigateur web**. Cela comprend les requêtes `GET` avec la présence des paramètres dans l'URL, les données envoyées avec les `POST`, les en-têtes HTTP, les cookies, les fichiers chargés par l'utilisateur, etc. Il faut toujours vérifier et assainir les données. Il faut toujours s'attendre au pire.
Quelques autres points que vous pouvez mettre en place :
diff --git a/files/fr/learn/tools_and_testing/client-side_javascript_frameworks/index.md b/files/fr/learn/tools_and_testing/client-side_javascript_frameworks/index.md
index 6d0edd0a27d7e2..0e7fdd0290367a 100644
--- a/files/fr/learn/tools_and_testing/client-side_javascript_frameworks/index.md
+++ b/files/fr/learn/tools_and_testing/client-side_javascript_frameworks/index.md
@@ -41,7 +41,8 @@ Nous avons créé un cours qui inclut toutes les informations essentielles dont
## Tutoriels sur React
-> **Note :** Les tutoriels sur React ont été essayés pour la dernière fois en mai 2020, avec React/ReactDOM 16.13.1 et create-react-app 3.4.1.
+> [!NOTE]
+> Les tutoriels sur React ont été essayés pour la dernière fois en mai 2020, avec React/ReactDOM 16.13.1 et create-react-app 3.4.1.
>
> Si vous avez besoin de vérifier votre code par rapport à notre version, vous pouvez trouver une version finale de l'exemple de code d'application React dans notre [todo-react repository](https://github.com/mdn/todo-react). Pour une version exécutable en direct, voir .
@@ -62,7 +63,8 @@ Nous avons créé un cours qui inclut toutes les informations essentielles dont
## Tutoriels sur Ember
-> **Note :** Les tutoriels Ember ont été essayés pour la dernière fois en Mai 2020, avec Ember/Ember CLI version 3.18.0.
+> [!NOTE]
+> Les tutoriels Ember ont été essayés pour la dernière fois en Mai 2020, avec Ember/Ember CLI version 3.18.0.
>
> Si vous avez besoin de vérifier votre code par rapport à notre version, vous pouvez trouver une version finale de l'exemple de code d'application Ember dans le Ember app code in the [ember-todomvc-tutorial repository](https://github.com/NullVoxPopuli/ember-todomvc-tutorial/tree/master/steps/00-finished-todomvc/todomvc). Pour une version exécutable en direct, voir (cela inclut également quelques fonctionnalités supplémentaires non couvertes dans le tutoriel).
@@ -81,7 +83,8 @@ Nous avons créé un cours qui inclut toutes les informations essentielles dont
## Tutoriels sur Vue
-> **Note :** Les tutoriels sur Vue ont été essayés pour la dernière fois en mai 2020, avec Vue 2.6.11.
+> [!NOTE]
+> Les tutoriels sur Vue ont été essayés pour la dernière fois en mai 2020, avec Vue 2.6.11.
>
> Si vous avez besoin de vérifier votre code par rapport à notre version, vous pouvez trouver une version terminée de l'exemple de code d'application Vue dans notre [todo-vue repository](https://github.com/mdn/todo-vue). Pour une version exécutable en direct, voir .
@@ -106,7 +109,8 @@ Nous avons créé un cours qui inclut toutes les informations essentielles dont
## Tutoriels sur Svelte
-> **Note :** Les tutoriels sur Svelte ont été essayés pour la dernière fois en aout 2020, avec Svelte 3.24.1.
+> [!NOTE]
+> Les tutoriels sur Svelte ont été essayés pour la dernière fois en aout 2020, avec Svelte 3.24.1.
>
> Si vous avez besoin de vérifier votre code par rapport à notre version, vous pouvez trouver une version terminée de l'exemple eu code de l'application Svelte (tel qu'il est après chaque chapitre) dans le dépôt [mdn-svelte-tutorial](https://github.com/opensas/mdn-svelte-tutorial). Pour une version exécutable en direct, voir .
diff --git a/files/fr/learn/tools_and_testing/client-side_javascript_frameworks/react_components/index.md b/files/fr/learn/tools_and_testing/client-side_javascript_frameworks/react_components/index.md
index c3e4494cd42b90..99a405fdb7ffdb 100644
--- a/files/fr/learn/tools_and_testing/client-side_javascript_frameworks/react_components/index.md
+++ b/files/fr/learn/tools_and_testing/client-side_javascript_frameworks/react_components/index.md
@@ -87,7 +87,8 @@ export default function Todo() {
}
```
-> **Note :** Les composants doivent toujours retourner quelque chose. Si, à un moment donné, vous essayez de rendre un composant qui ne renvoie rien, React affichera une erreur dans votre navigateur.
+> [!NOTE]
+> Les composants doivent toujours retourner quelque chose. Si, à un moment donné, vous essayez de rendre un composant qui ne renvoie rien, React affichera une erreur dans votre navigateur.
Notre composant `Todo` est terminé, du moins pour l'instant nous pouvons maintenant l'utiliser. Dans `App.js`, ajoutez la ligne suivante en haut du fichier pour importer `Todo` :
@@ -249,7 +250,8 @@ root.render(
Ce tableau est maintenant disponible pour le composant App en tant que `props.tasks`. Vous pouvez utiliser `console.table()` pour en inspecter le contenu.
-> **Note :** Les noms de constantes `TOUT_EN_MAJUSCULES` n'ont pas de signification particulière en JavaScript. Il s'agit d'une convention qui indique que « cette donnée ne changera jamais après avoir été définie ici ».
+> [!NOTE]
+> Les noms de constantes `TOUT_EN_MAJUSCULES` n'ont pas de signification particulière en JavaScript. Il s'agit d'une convention qui indique que « cette donnée ne changera jamais après avoir été définie ici ».
## Effectuer le rendu en itérant
@@ -385,7 +387,8 @@ function FilterButton(props) {
export default FilterButton;
```
-> **Note :** Vous remarquerez peut-être que nous faisons ici la même erreur que pour le composant ``, en ce sens que chaque bouton sera le même. Ce n'est pas grave ! Nous allons corriger ce composant plus tard, dans la section [Revenons aux boutons de filtrage](/fr/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/React_interactivity_filtering_conditional_rendering#back_to_the_filter_buttons).
+> [!NOTE]
+> Vous remarquerez peut-être que nous faisons ici la même erreur que pour le composant ``, en ce sens que chaque bouton sera le même. Ce n'est pas grave ! Nous allons corriger ce composant plus tard, dans la section [Revenons aux boutons de filtrage](/fr/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/React_interactivity_filtering_conditional_rendering#back_to_the_filter_buttons).
## Importation de tous nos composants
diff --git a/files/fr/learn/tools_and_testing/client-side_javascript_frameworks/react_getting_started/index.md b/files/fr/learn/tools_and_testing/client-side_javascript_frameworks/react_getting_started/index.md
index 90a2e35722e28b..cd03584a67674a 100644
--- a/files/fr/learn/tools_and_testing/client-side_javascript_frameworks/react_getting_started/index.md
+++ b/files/fr/learn/tools_and_testing/client-side_javascript_frameworks/react_getting_started/index.md
@@ -80,7 +80,8 @@ const header = (
);
```
-> **Note :** Les parenthèses dans l'extrait de code précédent ne sont pas propres à JSX et n'ont aucun effet sur votre application. Elles sont un signal pour vous (et votre ordinateur) que plusieurs lignes de code à l'intérieur font partie de la même expression. Vous pourriez tout aussi bien écrire l'expression d'en-tête comme ceci :
+> [!NOTE]
+> Les parenthèses dans l'extrait de code précédent ne sont pas propres à JSX et n'ont aucun effet sur votre application. Elles sont un signal pour vous (et votre ordinateur) que plusieurs lignes de code à l'intérieur font partie de la même expression. Vous pourriez tout aussi bien écrire l'expression d'en-tête comme ceci :
>
> ```js
> const header = (
@@ -145,7 +146,8 @@ Cela crée un répertoire `moz-todo-react`, et réalise plusieurs choses à l'in
- Crée une structure de fichiers et de répertoires qui définissent l'architecture de base de l'application.
- Initialise le répertoire en tant que dépôt Git, au cas où Git est installé sur l'ordinateur.
-> **Note :** si vous avez installé le gestionnaire de paquets Yarn, create-react-app l'utilisera par défaut à la place de npm. Si vous avez installé les deux gestionnaires de paquets et que vous souhaitez explicitement utiliser npm, vous pouvez ajouter l'indicateur `--use-npm` lorsque vous exécutez create-react-app :
+> [!NOTE]
+> Si vous avez installé le gestionnaire de paquets Yarn, create-react-app l'utilisera par défaut à la place de npm. Si vous avez installé les deux gestionnaires de paquets et que vous souhaitez explicitement utiliser npm, vous pouvez ajouter l'indicateur `--use-npm` lorsque vous exécutez create-react-app :
>
> ```bash
> npx create-react-app moz-todo-react --use-npm
@@ -333,7 +335,8 @@ La ligne 7 exécute la fonction `ReactDOM.render()` de React avec deux arguments
Tout cela indique à React que nous voulons afficher notre application React avec le composant `App` comme racine ou premier composant.
-> **Note :** En JSX, les composants React et les éléments HTML doivent avoir des barres obliques (slash) de fermeture. Écrire uniquement `` ou simplement `` provoquera une erreur.
+> [!NOTE]
+> En JSX, les composants React et les éléments HTML doivent avoir des barres obliques (slash) de fermeture. Écrire uniquement `` ou simplement `` provoquera une erreur.
Les [service workers](/fr/docs/Web/API/Service_Worker_API/Using_Service_Workers) sont des éléments de code intéressants qui améliorent les performances des applications et permettent aux fonctionnalités de vos applications web d'être disponibles hors ligne, mais ils ne sont pas abordés dans cet article. Vous pouvez supprimer la ligne 5, ainsi que les lignes 9 à 12.
diff --git a/files/fr/learn/tools_and_testing/client-side_javascript_frameworks/react_interactivity_events_state/index.md b/files/fr/learn/tools_and_testing/client-side_javascript_frameworks/react_interactivity_events_state/index.md
index eb90b013634802..98e98dde81ecbb 100644
--- a/files/fr/learn/tools_and_testing/client-side_javascript_frameworks/react_interactivity_events_state/index.md
+++ b/files/fr/learn/tools_and_testing/client-side_javascript_frameworks/react_interactivity_events_state/index.md
@@ -48,7 +48,8 @@ Avec React, nous écrivons des gestionnaires d'évènements directement sur les
```
-> **Note :** Cela peut sembler contre-intuitif au regard des bonnes pratiques qui déconseillent l'utilisation de gestionnaires d'évènements en ligne sur le HTML, mais n'oubliez pas que JSX fait partie du code JavaScript.
+> [!NOTE]
+> Cela peut sembler contre-intuitif au regard des bonnes pratiques qui déconseillent l'utilisation de gestionnaires d'évènements en ligne sur le HTML, mais n'oubliez pas que JSX fait partie du code JavaScript.
Dans l'exemple ci-dessus, nous ajoutons un attribut `onClick` à l'élément ``. La valeur de cet attribut est une fonction qui déclenche une simple alerte.
@@ -111,7 +112,8 @@ function handleSubmit(e) {
Cliquer sur le bouton « Ajouter » dans votre navigateur prouvera que la fonction de rappel `addTask()` fonctionne, mais ce serait bien si nous pouvions faire en sorte que l'alerte nous montre ce que nous tapons dans notre champ de saisie ! C'est ce que nous allons faire maintenant.
-> **Note :** Nous avons décidé d'utiliser `addTask` comme nom pour notre prop callback afin de comprendre son rôle rapidement. Une autre convention commune que vous pouvez rencontrer dans le code React consiste à préfixer les noms des prop qui sont des fonctions avec `on`, suivi du nom de l'évènement qui les déclenchera. Par exemple, nous aurions pu donner à notre formulaire une prop `onSubmit` avec la valeur de `addTask`.
+> [!NOTE]
+> Nous avons décidé d'utiliser `addTask` comme nom pour notre prop callback afin de comprendre son rôle rapidement. Une autre convention commune que vous pouvez rencontrer dans le code React consiste à préfixer les noms des prop qui sont des fonctions avec `on`, suivi du nom de l'évènement qui les déclenchera. Par exemple, nous aurions pu donner à notre formulaire une prop `onSubmit` avec la valeur de `addTask`.
## L'état et le hook `useState'
@@ -267,7 +269,8 @@ function Form(props) {
export default Form;
```
-> **Note :** Vous remarquerez que vous pouvez soumettre des tâches vides en appuyant simplement sur le bouton Ajouter sans saisir de nom de tâche. Pouvez-vous penser à un moyen d'empêcher l'ajout de tâches vides ? En guise d'indice, vous devez probablement ajouter une sorte de vérification dans la fonction `handleSubmit()`.
+> [!NOTE]
+> Vous remarquerez que vous pouvez soumettre des tâches vides en appuyant simplement sur le bouton Ajouter sans saisir de nom de tâche. Pouvez-vous penser à un moyen d'empêcher l'ajout de tâches vides ? En guise d'indice, vous devez probablement ajouter une sorte de vérification dans la fonction `handleSubmit()`.
## Assembler le tout : ajouter une tâche
diff --git a/files/fr/learn/tools_and_testing/client-side_javascript_frameworks/react_todo_list_beginning/index.md b/files/fr/learn/tools_and_testing/client-side_javascript_frameworks/react_todo_list_beginning/index.md
index 80e8fa69ef35c3..b30952d9bf1137 100644
--- a/files/fr/learn/tools_and_testing/client-side_javascript_frameworks/react_todo_list_beginning/index.md
+++ b/files/fr/learn/tools_and_testing/client-side_javascript_frameworks/react_todo_list_beginning/index.md
@@ -9,7 +9,8 @@ l10n:
Disons que nous avons pour mission de créer une preuve de concept en React : une application qui permette d'ajouter, de modifier et de supprimer des tâches sur lesquelles on veut travailler, et de les marquer comme terminées sans les supprimer. Dans cet article, nous verrons comment mettre en place la structure de base et la mise en forme du composant `App` initial et qui servira de socle pour définir d'autres composants et implémenter l'interactivité par la suite.
-> **Note :** Si vous avez besoin de vérifier votre code par rapport à notre version, vous pouvez trouver une version terminée du code de cette application React d'exemple dans notre dépôt [`todo-react`](https://github.com/mdn/todo-react). Pour voir l'application fonctionner en direct, consultez .
+> [!NOTE]
+> Si vous avez besoin de vérifier votre code par rapport à notre version, vous pouvez trouver une version terminée du code de cette application React d'exemple dans notre dépôt [`todo-react`](https://github.com/mdn/todo-react). Pour voir l'application fonctionner en direct, consultez .
@@ -66,9 +67,11 @@ rm -- App.test.js App.css logo.svg serviceWorker.js setupTests.js
cd ..
```
-> **Note :** Deux des fichiers que nous avons supprimés sont destinés à tester l'application. Nous ne ferons pas de tests ici.
+> [!NOTE]
+> Deux des fichiers que nous avons supprimés sont destinés à tester l'application. Nous ne ferons pas de tests ici.
-> **Note :** Si vous avez arrêté votre serveur d'application afin d'effectuer les actions précédentes dans votre terminal, vous devrez redémarrer le serveur en utilisant `npm start`.
+> [!NOTE]
+> Si vous avez arrêté votre serveur d'application afin d'effectuer les actions précédentes dans votre terminal, vous devrez redémarrer le serveur en utilisant `npm start`.
## Code de démarrage pour notre projet
@@ -242,9 +245,11 @@ L'attribut `defaultChecked` dans la balise `` indique à React de coche
L'attribut `htmlFor` correspond à l'attribut `for` utilisé en HTML. Il n'est pas possible d'utiliser `for` comme attribut en JSX, car `for` est un mot réservé en JavaScript, React utilise donc `htmlFor` à la place.
-> **Note :** Pour utiliser des valeurs booléennes (`true` and `false`) dans les attributs JSX, vous devez les mettre entre accolades. Si vous écrivez `defaultChecked="true"`, la valeur de `defaultChecked` sera `"true"` : une chaine de caractère. Souvenez-vous, ce qui est écrit en JSX est interprété comme du JavaScript, pas comme du HTML !
+> [!NOTE]
+> Pour utiliser des valeurs booléennes (`true` and `false`) dans les attributs JSX, vous devez les mettre entre accolades. Si vous écrivez `defaultChecked="true"`, la valeur de `defaultChecked` sera `"true"` : une chaine de caractère. Souvenez-vous, ce qui est écrit en JSX est interprété comme du JavaScript, pas comme du HTML !
-> **Note :** L'attribut `aria-pressed` utilisé dans notre exemple de code précédent vaut `"true"` parce que `aria-pressed` n'est pas un véritable attribut booléen comme `checked`.
+> [!NOTE]
+> L'attribut `aria-pressed` utilisé dans notre exemple de code précédent vaut `"true"` parce que `aria-pressed` n'est pas un véritable attribut booléen comme `checked`.
### Implémenter la mise en forme
diff --git a/files/fr/learn/tools_and_testing/client-side_javascript_frameworks/vue_getting_started/index.md b/files/fr/learn/tools_and_testing/client-side_javascript_frameworks/vue_getting_started/index.md
index d1bfd2f8f21d4a..8b9b2dec50441b 100644
--- a/files/fr/learn/tools_and_testing/client-side_javascript_frameworks/vue_getting_started/index.md
+++ b/files/fr/learn/tools_and_testing/client-side_javascript_frameworks/vue_getting_started/index.md
@@ -76,7 +76,8 @@ However, this approach has some limitations. To build more complex apps, you'll
1. Node.js 8.11+ installed.
2. npm or yarn.
-> **Note :** If you don't have the above installed, find out [more about installing npm and Node.js](/fr/docs/Learn/Tools_and_testing/Understanding_client-side_tools/Command_line#Adding_powerups) here.
+> [!NOTE]
+> If you don't have the above installed, find out [more about installing npm and Node.js](/fr/docs/Learn/Tools_and_testing/Understanding_client-side_tools/Command_line#Adding_powerups) here.
To install the CLI, run the following command in your terminal:
@@ -129,7 +130,8 @@ The CLI will now begin scaffolding out your project, and installing all of your
If you've never run the Vue CLI before, you'll get one more question — you'll be asked to choose a package manager. You can use the arrow keys to select which one you prefer. The Vue CLI will default to this package manager from now on. If you need to use a different package manager after this, you can pass in a flag `--packageManager=`, when you run `vue create`. So if you wanted to create the `moz-todo-vue` project with npm and you'd previously chosen yarn, you'd run `vue create moz-todo-vue --packageManager=npm`.
-> **Note :** We've not gone over all of the options here, but you can [find more information on the CLI](https://cli.vuejs.org) in the Vue docs.
+> [!NOTE]
+> We've not gone over all of the options here, but you can [find more information on the CLI](https://cli.vuejs.org) in the Vue docs.
## Project structure
@@ -143,7 +145,8 @@ If everything went successfully, the CLI should have created a series of files a
- `favicon.ico`: This is the favicon for your app. Currently, it's the Vue logo.
- `index.html`: This is the template for your app. Your Vue app is run from this HTML page, and you can use lodash template syntax to interpolate values into it.
- > **Note :** this is not the template for managing the layout of your application — this template is for managing static HTML that sits outside of your Vue app. Editing this file typically only occurs in advanced use cases.
+ > [!NOTE]
+ > This is not the template for managing the layout of your application — this template is for managing static HTML that sits outside of your Vue app. Editing this file typically only occurs in advanced use cases.
- `src`: This directory contains the core of your Vue app.
@@ -152,7 +155,8 @@ If everything went successfully, the CLI should have created a series of files a
- `components`: this directory is where you keep your components. Currently it just has one example component.
- `assets`: This directory is for storing static assets like CSS and images. Because these files are in the source directory, they can be processed by Webpack. This means you can use pre-processors like [Sass/SCSS](https://sass-lang.com/) or [Stylus](https://stylus-lang.com/).
-> **Note :** Depending on the options you select when creating a new project, there might be other directories present (for example, if you choose a router, you will also have a directory).`views`
+> [!NOTE]
+> Depending on the options you select when creating a new project, there might be other directories present (for example, if you choose a router, you will also have a directory).`views`
## .vue files (single file components)
@@ -170,7 +174,8 @@ Open your `App.vue` file — you'll see that it has three parts: ``, `
`` contains all the markup structure and display logic of your component. Your template can contain any valid HTML, as well as some Vue-specific syntax that we'll cover later.
-> **Note:** By setting the `lang` attribute on the `` tag, you can use Pug template syntax instead of standard HTML — ``. We'll stick to standard HTML through this tutorial, but it is worth knowing that this is possible.
+> [!NOTE]
+> By setting the `lang` attribute on the `` tag, you can use Pug template syntax instead of standard HTML — ``. We'll stick to standard HTML through this tutorial, but it is worth knowing that this is possible.
`` タグの間に配置されます。
+`charset` を定義し、 {{htmlelement("title")}} と簡単な CSS をヘッダーに記述しました。本体には {{htmlelement("canvas")}} と {{htmlelement("script")}} 要素があり、前者にはゲームを描画し、後者にはそれを制御する JavaScript のコードを記述します。 {{htmlelement("canvas")}} 要素は簡単に参照を取得できるように `id` を `myCanvas` とし、幅は 480 ピクセル、高さは 320 ピクセルとしています。このチュートリアルで書くすべての JavaScript のコードは開始の `` タグの間に配置されます。
## キャンバスの基本
diff --git a/files/ja/glossary/accent/index.md b/files/ja/glossary/accent/index.md
index c33890fb377ef4..a42980c83b1c24 100644
--- a/files/ja/glossary/accent/index.md
+++ b/files/ja/glossary/accent/index.md
@@ -1,22 +1,18 @@
---
-title: accent (強調表示)
+title: Accent (強調色)
slug: Glossary/Accent
+l10n:
+ sourceCommit: ada5fa5ef15eadd44b549ecf906423b4a2092f34
---
{{GlossarySidebar}}
-**強調表示** は主に明るい色によって、配色内でよりわかりやすく背景色と前景色を引き立たせます。これらは多くのプラットフォームの視覚スタイルに存在します (しかしながら、全てではありません) 。
+**強調色**は主に明るい色であり、配色内で実用的な色である背景色や前景色と対照的な色です。これらは多くのプラットフォームの視覚スタイルに存在します(ただし、すべてではありません)。
-ウェブにおいて、強調表示は {{HTMLElement("input")}} 要素で操作の活性状態の部分に使われることがあります。例えばチェックした [checkbox](/ja/docs/Web/HTML/Element/input/checkbox) の背景です。
+ウェブにおいて、強調色は {{HTMLElement("input")}} 要素で操作のアクティブな位置を示すために使われることがあります。例えばチェックした[チェックボックス](/ja/docs/Web/HTML/Element/input/checkbox)の背景に使われます。
## 関連情報
-### 強調表示に関連する CSS
+### 強調色に関連する CSS
-特定の要素の CSS {{cssxref("accent-color")}} プロパティに適切な {{cssxref("<color>")}} 値を設定することで、強調表示の色を設定できます。
-
-### 強調表示を持つHTML要素
-
-- [``](/ja/docs/Web/HTML/Element/input/checkbox)
-- [``](/ja/docs/Web/HTML/Element/input/radio)
-- [``](/ja/docs/Web/HTML/Element/input/range)
+特定の要素の CSS {{cssxref("accent-color")}} プロパティに適切な {{cssxref("<color>")}} 値を設定することで、強調色を設定できます。
diff --git a/files/ja/glossary/aspect_ratio/index.md b/files/ja/glossary/aspect_ratio/index.md
new file mode 100644
index 00000000000000..f390cd74e6cad0
--- /dev/null
+++ b/files/ja/glossary/aspect_ratio/index.md
@@ -0,0 +1,50 @@
+---
+title: Aspect ratio (アスペクト比)
+slug: Glossary/Aspect_ratio
+l10n:
+ sourceCommit: 1197521ff42256b9d298144330cfd5b6e0d98c33
+---
+
+{{GlossarySidebar}}
+
+**アスペクト比**とは、要素または{{glossary("viewport", "ビューポート")}}の幅と高さの比のことで、比率または 2 つの数値で表します。
+
+アスペクト比を維持することで、画像や動画のような内在的なアスペクト比であろうと、外在的に設定されたものであろうと、要素の意図する縦横比を維持します。要素やビューポートのアスペクト比による問い合わせを行うこともでき、柔軟な部品やレイアウトを開発するのに有益です。
+
+CSS では、{{cssxref("ratio")}} のデータ型は `width / height` (例えば、正方形の場合は `1 / 1`、ワイドスクリーンの場合は `16 / 9`)、または単一の数値(この場合、数値は幅を表し、高さは `1`)で入力します。
+
+```css
+.wideBox {
+ aspect-ratio: 5 / 2;
+}
+.tallBox {
+ aspect-ratio: 0.25;
+}
+```
+
+SVG では、アスペクト比は [`viewBox`](/ja/docs/Web/SVG/Attribute/viewBox) 属性の 4 つの値によって定義されます。最初の 2 つの値は SVG が持っている最小の X と Y の原点座標で、次の 2 つの値は SVG のアスペクト比を設定する幅と高さです。
+
+```svg
+
+```
+
+JavaScript API でアスペクト比を問い合わせると、幅を高さで割った倍精度浮動小数点数が返されます。JavaScript を使用して要素のアスペクト比を設定することもできます。例えば、{{domxref("MediaStreamTrack")}} または {{domxref("MediaTrackSettings")}} 辞書の [`aspectRatio`](/ja/docs/Web/API/MediaTrackSettings/aspectRatio) プロパティを使用して 1920x1080 動画のアスペクト比制約を設定するには、16/9、または 1920/1080 として計算され、`1.7777778` となります。
+
+```js
+const constraints = {
+ width: 1920,
+ height: 1080,
+ aspectRatio: 1.777777778,
+};
+
+myTrack.applyConstraints(constraints);
+```
+
+## 関連情報
+
+- CSS の {{cssxref("aspect-ratio")}} プロパティ
+- [アスペクト比の理解](/ja/docs/Web/CSS/CSS_box_sizing/Understanding_aspect-ratio)ガイド
+- [CSS ボックスサイズ指定](/ja/docs/Web/CSS/CSS_box_sizing)モジュール
+- 関連用語:
+ - {{glossary("intrinsic size", "内在サイズ")}}
+- CSS の {{cssxref("min-content")}}、{{cssxref("max-content")}}、{{cssxref("fit-content")}} プロパティ値
diff --git a/files/ja/glossary/bitwise_flags/index.md b/files/ja/glossary/bitwise_flags/index.md
new file mode 100644
index 00000000000000..f5724c35351e74
--- /dev/null
+++ b/files/ja/glossary/bitwise_flags/index.md
@@ -0,0 +1,50 @@
+---
+title: Bitwise flags (ビットフラグ)
+slug: Glossary/Bitwise_flags
+l10n:
+ sourceCommit: ada5fa5ef15eadd44b549ecf906423b4a2092f34
+---
+
+{{GlossarySidebar}}
+
+**ビットフラグ**は変数 (通常はシンプルな整数値) の集合で、メソッドやその他のコードの構造において、特定の使用法や機能を有効にしたり無効にしたりするのに使用できるものです。ビットレベルで操作を行うので、これを高速に効率よくできます。一般的に、同じグループ内の関連するフラグには単一の値 (たとえば、十六進数) の中の異なるビット位置を表す相補的な値が割り当てられるので、単一の値で複数のフラグ設定を表すことができます。
+
+たとえば、{{domxref("WebGPU API", "WebGPU API", "", "nocode")}} では、{{domxref("GPUDevice.createBuffer()")}} メソッドで {{domxref("GPUBuffer")}} オブジェクトを作成します。このメソッドを呼び出す際、ディスクリプターで、バッファーで許される異なる使用法を有効化する 1 個または複数のフラグが入った `usage` プロパティを定義します。
+
+```js
+usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.MAP_WRITE;
+```
+
+これらの値は同じ名前空間内で定義されており、それぞれに十六進数の値があります。
+
+| 使用法フラグ | 十六進表現 | 十進数で相当する値 |
+| ------------------------------ | ---------- | ------------------ |
+| `GPUBufferUsage.MAP_READ` | 0x0001 | 1 |
+| `GPUBufferUsage.MAP_WRITE` | 0x0002 | 2 |
+| `GPUBufferUsage.COPY_SRC` | 0x0004 | 4 |
+| `GPUBufferUsage.COPY_DST` | 0x0008 | 8 |
+| `GPUBufferUsage.INDEX` | 0x0010 | 16 |
+| `GPUBufferUsage.VERTEX` | 0x0020 | 32 |
+| `GPUBufferUsage.UNIFORM` | 0x0040 | 64 |
+| `GPUBufferUsage.STORAGE` | 0x0080 | 128 |
+| `GPUBufferUsage.INDIRECT` | 0x0100 | 256 |
+| `GPUBufferUsage.QUERY_RESOLVE` | 0x0200 | 512 |
+
+{{domxref("GPUBuffer.usage")}} プロパティから値を読み出すと、1 個の十進数が返され、これは異なる使用法フラグに対応する異なる十進数の値の和です。上記の例に戻ると、ここで指定した使用法で作成した `GPUBuffer` の `GPUBuffer.usage` から値を読み出すと、以下が返るでしょう。
+
+- `GPUBufferUsage.COPY_SRC` に対応する十進数の 4 に
+- `GPUBufferUsage.MAP_WRITE` に対応する十進数の 2 を加え
+- 結果は 6
+
+値は異なるフラグから選ばれているため、それぞれの値の組み合わせは一意であり、プログラムは単一の値からどのフラグが設定されているかをすぐに知ることができます。さらに、ビット論理積演算子を用いて合成された値の中でフラグが設定されているかを簡単にチェックできます。
+
+```js
+if (buffer.usage & GPUBufferUsage.MAP_WRITE) {
+ // バッファーに使用法 MAP_WRITE がある
+}
+```
+
+## 関連情報
+
+- [Bitwise Flags are Beautiful, and Here's Why](https://www.hendrik-erz.de/post/bitwise-flags-are-beautiful-and-heres-why)
+- [ビット演算](https://ja.wikipedia.org/wiki/%E3%83%93%E3%83%83%E3%83%88%E6%BC%94%E7%AE%97) (Wikipedia)
diff --git a/files/ja/glossary/kebab_case/index.md b/files/ja/glossary/kebab_case/index.md
index 86a44e6cd4082e..3dd05f70841961 100644
--- a/files/ja/glossary/kebab_case/index.md
+++ b/files/ja/glossary/kebab_case/index.md
@@ -9,7 +9,7 @@ l10n:
**ケバブケース**とは、スペースを入れずにフレーズを書く方法で、スペースはハイフン `-` で置き換えられ、単語はすべて小文字になるのが一般的です。ケバブの串に刺さった肉に似ていることから名付けられました。その姿を読者に連想させるため、よく "kebab-case" と表記されます。
-ケバブケースは変数の名前付き規約として多く使用されています。しかし、多くの言語ではハイフンは引き算を表しますので、ケーバブケースは選択されていません。 {{cssxref("background-color")}} や {{cssxref("font-family")}} のような CSS プロパティ、また [`aria-label`](/ja/docs/Web/Accessibility/ARIA/Attributes/aria-label) や [`data-*`](/ja/docs/Web/HTML/Global_attributes/data-*) のような HTML 属性はケバブケースです。
+ケバブケースは変数の名前付き規約として多く使用されています。しかし、多くの言語ではハイフンは引き算を表しますので、ケバブケースは選択されていません。 {{cssxref("background-color")}} や {{cssxref("font-family")}} のような CSS プロパティ、また [`aria-label`](/ja/docs/Web/Accessibility/ARIA/Attributes/aria-label) や [`data-*`](/ja/docs/Web/HTML/Global_attributes/data-*) のような HTML 属性はケバブケースです。
ケバブケースの語は、よく「ハイフン区切り」と呼ばれます。
diff --git a/files/ja/glossary/static_method/index.md b/files/ja/glossary/static_method/index.md
index f1bf52c7e7e1f8..9033482eb2a72f 100644
--- a/files/ja/glossary/static_method/index.md
+++ b/files/ja/glossary/static_method/index.md
@@ -1,6 +1,8 @@
---
title: Static method (静的メソッド)
slug: Glossary/Static_method
+l10n:
+ sourceCommit: 424582339e3d3de819667b2e5e2ea52a180fe84c
---
{{GlossarySidebar}}
@@ -13,7 +15,7 @@ slug: Glossary/Static_method
## 例
-[Notifications API](/ja/docs/Web/API/Notifications_API) では、{{domxref("Notification.requestPermission()")}} メソッドは実際は {{domxref("Notification")}} コンストラクター自身に対して呼び出されます。— これが静的メソッドです。
+[通知 API](/ja/docs/Web/API/Notifications_API) では、{{domxref("Notification.requestPermission_static")}} メソッドは実際は {{domxref("Notification")}} コンストラクター自身に対して呼び出されます。— これが静的メソッドです。
```js
let promise = Notification.requestPermission();
@@ -27,15 +29,10 @@ let myNotification = new Notification("This is my notification");
myNotification.close();
```
-1. 一般知識
+## 関連情報
- 1. Techopedia の [Static Method](https://www.techopedia.com/definition/24034/static-method)
-
-2. JavaScript リファレンス
-
- 1. [static](/ja/docs/Web/JavaScript/Reference/Classes/static)
-
-3. 関連用語:
-
- 1. {{Glossary("Object", "オブジェクト")}}
- 2. {{Glossary("Method", "メソッド")}}
+- [Static Method](https://www.techopedia.com/definition/24034/static-method) (Techopedia)
+- [static](/ja/docs/Web/JavaScript/Reference/Classes/static)
+- 関連用語:
+ - {{Glossary("Object", "オブジェクト")}}
+ - {{Glossary("Method", "メソッド")}}
diff --git a/files/ja/glossary/world_wide_web/index.md b/files/ja/glossary/world_wide_web/index.md
index 3f5c9c25fdc91c..268d51cc66ba29 100644
--- a/files/ja/glossary/world_wide_web/index.md
+++ b/files/ja/glossary/world_wide_web/index.md
@@ -1,32 +1,28 @@
---
title: World Wide Web
slug: Glossary/World_Wide_Web
+l10n:
+ sourceCommit: ada5fa5ef15eadd44b549ecf906423b4a2092f34
---
{{GlossarySidebar}}
-_World Wide Web_ は、一般に **WWW**, **W3**, もしくは **ウェブ** と呼ばれ、{{Glossary("Internet", "インターネット")}} を通じて公開されたウェブページが相互に接続されたシステムのことです。ウェブはインターネットと同義ではありません。ウェブは、インターネット上に構築された多くのアプリケーションの中の一つなのです。
+_World Wide Web_ は、一般に **WWW**, **W3**, もしくは **ウェブ** と呼ばれ、{{Glossary("Internet", "インターネット")}} を通じて公開されたウェブページが相互に接続されたシステムのことです。ウェブはインターネットと同義ではありません。ウェブは、インターネット上に構築された多くのアプリケーションの中の一つです。
-ティム・バーナーズ=リー卿は、World Wide Web として知られることとなったアーキテクチャを提唱しました。彼は、1990 年に世界初のウェブ {{Glossary("Server","サーバー")}} とウェブ {{Glossary("Browser","ブラウザー")}}、そしてウェブページを CERN 物理学研究所の自身のコンピューター上に構築しました。1991 年に、彼は alt.hypertext ニュースグループで自身の成果を公表しました。ウェブが世界で初めて公になった瞬間でした。
+ティム・バーナーズ=リーは、World Wide Web として知られることとなったアーキテクチャを提唱しました。彼は、1990 年に世界初のウェブ{{Glossary("Server","サーバー")}}とウェブ{{Glossary("Browser","ブラウザー")}}、そしてウェブページを CERN 物理学研究所の自身のコンピューター上に構築しました。1991 年に、彼は alt.hypertext ニュースグループで自身の成果を公表しました。ウェブが世界で初めて公になった瞬間でした。
今日、「ウェブ」として知られているシステムは、いくつかの構成要素から成り立っています。
- **{{Glossary("HTTP")}}** プロトコルがサーバーとクライアント間のデータ転送を管理しています。
-- ウェブの構成要素へアクセスするため、クライアントは **{{Glossary("URL")}}** (uniform resource location) もしくは (以前は Universal Document Identifier (UDI) と呼ばれていた) {{Glossary("URI")}} (uniform resource identifier) と呼ばれる固有の識別子を提供します。
-- **{{Glossary("HTML")}}** (hypertext markup language) は、ドキュメントを公開する最も一般的な形式です。
+- ウェブの構成要素へアクセスするため、クライアントは **{{Glossary("URL")}}** (uniform resource location) もしくは {{Glossary("URI")}} (uniform resource identifier、以前は Universal Document Identifier (UDI) と呼ばれていた) と呼ばれる固有の識別子を提供します。
+- **{{Glossary("HTML")}}** (hypertext markup language) は、文書を公開する最も一般的な形式です。
-リンクする、もしくは {{Glossary("Hyperlink","ハイパーリンク")}} を介してリソースを結びつけることは、関連するドキュメントをひとまとめに識別できるようにする、ウェブの特徴的な概念です。
+リンクする、もしくは{{Glossary("Hyperlink","ハイパーリンク")}}を介してリソースを結びつけることは、関連するドキュメントをひとまとめに識別できるようにする、ウェブの特徴的な概念です。
-ウェブを発明した後すぐに、ティム・バーナーズ=リー卿は、ウェブを標準化し、さらに開発を進めるべく、{{Glossary("W3C")}} (World Wide Web Consortium) を設立しました。この協会は、ウェブブラウザーの開発者、政府団体、研究者および大学などの主要なウェブの利益団体で構成されています。その使命には、教育や地域社会への貢献も含まれています。
+ウェブを発明した後でまもなく、ティム・バーナーズ=リーは、ウェブを標準化し、さらに開発を進めるべく、{{Glossary("W3C")}} (World Wide Web Consortium) を設立しました。この協会は、ウェブブラウザーの開発者、政府団体、研究者および大学などの主要なウェブの利益団体で構成されています。その使命には、教育や地域社会への貢献も含まれています。
## 関連情報
-### ウェブについて学ぶ
-
- [Learn the Web](/ja/docs/Learn)
-- [Web literacy map](https://learning.mozilla.org/web-literacy) (ウェブ開発に必要なスキル項目)
-
-### 基礎知識
-
-- Wikipedia 上の [World Wide Web](https://ja.wikipedia.org/wiki/World_Wide_Web)
-- [W3C のウェブサイト](http://w3.org)
+- [World Wide Web](https://ja.wikipedia.org/wiki/World_Wide_Web)(ウィキペディア)
+- [W3C のウェブサイト](https://www.w3.org/)
diff --git a/files/ja/learn/accessibility/mobile/index.md b/files/ja/learn/accessibility/mobile/index.md
index ae880bc176ed62..fca578256b0455 100644
--- a/files/ja/learn/accessibility/mobile/index.md
+++ b/files/ja/learn/accessibility/mobile/index.md
@@ -73,7 +73,7 @@ TalkBack をオフにしたい場合は、
> [!NOTE]
> 連続した動きで上にスワイプしてから左にスワイプすると、いつでもホーム画面にアクセスできます。複数のホーム画面がある場合は、左右に 2 本指でスワイプすることでそれらの間を移動できます。
-TalkBack ジェスチャーのより完全なリストについては、[TalkBack ジェスチャーを利用する](https://support.google.com/accessibility/android/answer/6151827?hl=ja)を参照してください。
+TalkBack ジェスチャーのより完全なリストについては、[TalkBack ジェスチャーを利用する](https://support.google.com/accessibility/android/answer/6151827)を参照してください。
#### 端末のロックを解除する
@@ -94,7 +94,7 @@ TalkBack を使用すると、端末上のどこに移動しても、グロー
3. 左右にスワイプしてさまざまなオプションを切り替えます。
4. 必要なオプションを選択したら、ダブルタップしてそのオプションを選択します。
-グローバルおよびローカルのコンテキストメニューで使用可能なすべてのオプションの詳細については、[グローバル コンテキストメニューとローカル コンテキスト メニューを使う](https://support.google.com/accessibility/android/answer/6007066?hl=ja)を参照してください。
+グローバルおよびローカルのコンテキストメニューで使用可能なすべてのオプションの詳細については、[グローバル コンテキストメニューとローカル コンテキスト メニューを使う](https://support.google.com/accessibility/android/answer/6007066)を参照してください。
#### ウェブページのブラウジング
@@ -117,7 +117,7 @@ TalkBack を使用すると、端末上のどこに移動しても、グロー
8. デフォルトモードに戻るには、上にスワイプしてから右にスワイプしてローカルコンテキストメニューに再度入り、\[デフォルト] を選択してからダブルタップしてアクティブにします。
> [!NOTE]
-> より完全なドキュメントは [Android で TalkBack を使ってみる](https://support.google.com/accessibility/android/answer/6283677?hl=ja)をご覧ください。
+> より完全なドキュメントは [Android で TalkBack を使ってみる](https://support.google.com/accessibility/android/answer/6283677)をご覧ください。
### iOS VoiceOver
diff --git a/files/ja/learn/common_questions/design_and_accessibility/html_features_for_accessibility/index.md b/files/ja/learn/common_questions/design_and_accessibility/html_features_for_accessibility/index.md
index d2eb9a11857aaf..5058e4da400dff 100644
--- a/files/ja/learn/common_questions/design_and_accessibility/html_features_for_accessibility/index.md
+++ b/files/ja/learn/common_questions/design_and_accessibility/html_features_for_accessibility/index.md
@@ -57,7 +57,7 @@ l10n:
## 画像の alt 属性
-すべての画像には [`alt`](/ja/docs/Web/HTML/Element/img#alt) 属性を設定すべきです。画像が純粋に装飾であり、文書のコンテンツやコンテキストに何の意味も与えない場合、 `alt` 属性は空ですが存在する必要があります。オプションとして、 [`role="presentation"`](/ja/docs/Web/Accessibility/ARIA/Roles/presentation_role) を追加することもできます。それ以外の画像ニはすべて `alt` 属性を設定し、他のコンテンツは読めても画像が見えないユーザーに役立つ方法で[画像を説明する代替テキスト](/ja/docs/Web/API/HTMLImageElement/alt#usage_notes)を提供すべきです。画像を読み込むことができない人に、画像をどのように説明するかを考えてみてください。それが `alt` 属性の値として記載すべき情報です。
+すべての画像には [`alt`](/ja/docs/Web/HTML/Element/img#alt) 属性を設定すべきです。画像が純粋に装飾であり、文書のコンテンツやコンテキストに何の意味も与えない場合、 `alt` 属性は空ですが存在する必要があります。オプションとして、 [`role="presentation"`](/ja/docs/Web/Accessibility/ARIA/Roles/presentation_role) を追加することもできます。それ以外の画像にはすべて `alt` 属性を設定し、他のコンテンツは読めても画像が見えないユーザーに役立つ方法で[画像を説明する代替テキスト](/ja/docs/Web/API/HTMLImageElement/alt#usage_notes)を提供すべきです。画像を読み込むことができない人に、画像をどのように説明するかを考えてみてください。それが `alt` 属性の値として記載すべき情報です。
```html
diff --git a/files/ja/learn/forms/html_forms_in_legacy_browsers/index.md b/files/ja/learn/forms/html_forms_in_legacy_browsers/index.md
index 4083b324d2169c..656a30a0d03dac 100644
--- a/files/ja/learn/forms/html_forms_in_legacy_browsers/index.md
+++ b/files/ja/learn/forms/html_forms_in_legacy_browsers/index.md
@@ -13,7 +13,7 @@ l10n:
## 問題について知る
-一般的なパターンを理解するには、ブラウザーのドキュメントを読むことが役立ちます。 [MDN](/) でこの記事を読んでいるのであれば、始めるのにふさわしい場所にいます。使用したい要素(または DOM インタフェース)の対応状況を確認するだけです。 MDN には、ウェブページで使用できるほとんどの要素、プロパティ、API の互換性一覧表が用意されています。他にも驚くほど役に立つリソースがあります。
+一般的なパターンを理解するには、ブラウザーのドキュメントを読むことが役立ちます。 [MDN](/) でこの記事を読んでいるのであれば、始めるのにふさわしい場所にいます。使用したい要素(または DOM インターフェイス)の対応状況を確認するだけです。 MDN には、ウェブページで使用できるほとんどの要素、プロパティ、API の互換性一覧表が用意されています。他にも驚くほど役に立つリソースがあります。
[HTML フォーム](/ja/docs/Learn/Forms)では複雑なやり取りが行われるため、シンプルに保つという経験則があり、「[KISS の原則](https://ja.wikipedia.org/wiki/KISS%E3%81%AE%E5%8E%9F%E5%89%87)」とも呼ばれています。フォームを「よりかっこよく」あるいは「高機能に」したい場合はたくさんありますが、効率的なフォームの作成はデザインや技術の問題ではありません。むしろ、シンプルさ、直感性、そしてユーザーとの対話のしやすさが重要なのです。 [forms usability on UX For The Masses](https://www.uxforthemasses.com/forms-usability/) のチュートリアルがこれをよく説明しています。
diff --git a/files/ja/learn/html/tables/advanced/index.md b/files/ja/learn/html/tables/advanced/index.md
index 699fee57838605..609daf8cc069b1 100644
--- a/files/ja/learn/html/tables/advanced/index.md
+++ b/files/ja/learn/html/tables/advanced/index.md
@@ -101,7 +101,7 @@ l10n:
> [!NOTE]
> 現時点で私たちはあなたが CSS を完全に理解しているとは思っていません。 あなたが私たちの CSS モジュールを一通り学ぶとき、これについてより多くを学ぶでしょう([CSS 入門](/ja/docs/Learn/CSS/First_steps)は始めるのに良い場所です。 [スタイル設定された表](/ja/docs/Learn/CSS/Building_blocks/Styling_tables)に関する具体的な記事もあります)。
-最終的な票は、次のようになるでしょう。
+最終的な表は、次のようになるでしょう。
{{ EmbedGHLiveSample('learning-area/html/tables/advanced/spending-record-finished.html', '100%', 400) }}
diff --git a/files/ja/learn/javascript/client-side_web_apis/drawing_graphics/index.md b/files/ja/learn/javascript/client-side_web_apis/drawing_graphics/index.md
index 4c5b0ce6501d54..2dfb6f466d792c 100644
--- a/files/ja/learn/javascript/client-side_web_apis/drawing_graphics/index.md
+++ b/files/ja/learn/javascript/client-side_web_apis/drawing_graphics/index.md
@@ -389,7 +389,7 @@ canvas.setAttribute("aria-label", "Canvas text");
- 6 番目と 7 番目の引数は、画像の切り出し部分の左上隅をキャンバスの左上隅と関連させて描画する座標を定義します。
- 8 番目と 9 番目の引数は、画像の切り出し領域を描画するための幅と高さを定義するものです。今回は、元のスライスと同じ寸法を保有しましたが、異なる値を指定することでリサイズすることも可能です。
-5. 画像が有意に更新された場合、{{glossary("accessable description", "アクセシブル説明")}}も更新しななければなりません。
+5. 画像が有意に更新された場合、{{glossary("accessable description", "アクセシブル説明")}}も更新しなければなりません。
```js
canvas.setAttribute("aria-label", "Firefox Logo");
diff --git a/files/ja/learn/javascript/first_steps/what_is_javascript/index.md b/files/ja/learn/javascript/first_steps/what_is_javascript/index.md
index 6643147ac91f29..2ed78efac56737 100644
--- a/files/ja/learn/javascript/first_steps/what_is_javascript/index.md
+++ b/files/ja/learn/javascript/first_steps/what_is_javascript/index.md
@@ -90,7 +90,7 @@ JavaScript は次のことを実現する一般的なプログラミング機能
- ウェブページで起きるイベントに対処します。先ほどの例では {{domxref("Element/click_event", "click")}} イベントを使用して、ボタンがクリックされたことを検出し、ラベルを更新するコードを実行しました。
- 他にもたくさんのことができます。
-しかしさらに期待が大きいのは、クライアントサイド JavaScript 言語の上に構築された機能です。いわゆる**アプリケーションプログラミングインタフェース** (**API**) は、JavaScript コードで使用するための特別なスーパーパワーを提供します。
+しかしさらに期待が大きいのは、クライアントサイド JavaScript 言語の上に構築された機能です。いわゆる**アプリケーションプログラミングインターフェイス** (**API**) は、JavaScript コードで使用するための特別なスーパーパワーを提供します。
API がなければ難しかったり、不可能であるようなコードを、すぐに使えるブロックのように、開発者がプログラムを作ることができるようになります。
家を作るときの既製の家具と同じことを、プログラミングでしてくれるのです。自分で設計し、使用する木材を選定し、正しい形で板を切り出して、正しいサイズのネジを見つけて、自分で組み立てるよりも、既に切り出されたボードとネジを使って本棚を組み立てるだけの方がずっと簡単ですよね。
diff --git a/files/ja/learn/javascript/objects/adding_bouncing_balls_features/index.md b/files/ja/learn/javascript/objects/adding_bouncing_balls_features/index.md
index 62e62c17ec4619..10f7d00b3b6e20 100644
--- a/files/ja/learn/javascript/objects/adding_bouncing_balls_features/index.md
+++ b/files/ja/learn/javascript/objects/adding_bouncing_balls_features/index.md
@@ -63,7 +63,7 @@ l10n:
`Ball` クラスは `extends` を使用して `Shape` から派生させる必要があります。 `Ball` のコンストラクターは以下のようになります。
- 引数として、 `x`, `y`, `velX`, `velY`, `size`, `color` を受け取ります。
-- `super()` を使用して `Shape` コンストラクタを呼び出し、 `x`、`y`、`velX`、`velY` の各引数を渡します。
+- `super()` を使用して `Shape` コンストラクターを呼び出し、 `x`、`y`、`velX`、`velY` の各引数を渡します。
- 与えられた引数から `color` と `size` のプロパティを初期化します。
`Ball` コンストラクターは `exists` という新しいプロパティを定義する必要があります。これは、ボールがプログラム内に存在するかどうか(悪のサークルに食べられていないかどうか)を追跡するために使用されます。これは論理値 (`true`/`false`) で、コンストラクターの中で `true` に初期化する必要があります。
diff --git a/files/ja/learn/javascript/objects/index.md b/files/ja/learn/javascript/objects/index.md
index 543c15df73627d..8239bfc52d3f87 100644
--- a/files/ja/learn/javascript/objects/index.md
+++ b/files/ja/learn/javascript/objects/index.md
@@ -31,7 +31,7 @@ JavaScript では、文字列や配列などの JavaScript のコア機能から
- [オブジェクトの基本](/ja/docs/Learn/JavaScript/Objects/Basics)
- : JavaScript オブジェクトについて記載している最初の記事では、基本的な JavaScript オブジェクト構文を見てみます。コースの初期段階で既に見た JavaScript の機能を再び見てみたり、すでに扱っている機能の多くは実際にオブジェクトであるという事実を繰り返し述べています。
- [オブジェクトプロトタイプ](/ja/docs/Learn/JavaScript/Objects/Object_prototypes)
- - : プロトタイプは、JavaScript オブジェクトが互いに機能を継承するメカニズムであり、古典的なオブジェクト指向プログラミング言語の継承メカニズムとは異なる働きをします。この記事では、その違いを探り、プロトタイプチェーンの仕組みを説明し、prototype プロパティを使用して既存のコンストラクタにメソッドを追加する方法を見ていきます。
+ - : プロトタイプは、JavaScript オブジェクトが互いに機能を継承するメカニズムであり、古典的なオブジェクト指向プログラミング言語の継承メカニズムとは異なる働きをします。この記事では、その違いを探り、プロトタイプチェーンの仕組みを説明し、prototype プロパティを使用して既存のコンストラクターにメソッドを追加する方法を見ていきます。
- [オブジェクト指向プログラミング](/ja/docs/Learn/JavaScript/Objects/Object-oriented_programming)
- : この記事では、「古典的」オブジェクト指向プログラミングの基本的な原則をいくつか説明し、JavaScript でのプロトタイプモデルとは異なるところを見ていきます。
- [JavaScript でのクラス](/ja/docs/Learn/JavaScript/Objects/Classes_in_JavaScript)
diff --git a/files/ja/learn/javascript/objects/object_prototypes/index.md b/files/ja/learn/javascript/objects/object_prototypes/index.md
index 056bb3c26fc8fd..5742a4e1cd708e 100644
--- a/files/ja/learn/javascript/objects/object_prototypes/index.md
+++ b/files/ja/learn/javascript/objects/object_prototypes/index.md
@@ -234,7 +234,7 @@ JavaScript で、`Professor` と `Student` のオブジェクトが `Person` プ
## まとめ
-この記事では、プロトタイプオブジェクトチェーンによってオブジェクトが互いに機能を継承する方法、プロトタイププロパティとそれを使ってコンストラクタにメソッドを追加する方法など、JavaScript オブジェクトのプロトタイプを取り上げてきました。
+この記事では、プロトタイプオブジェクトチェーンによってオブジェクトが互いに機能を継承する方法、プロトタイププロパティとそれを使ってコンストラクターにメソッドを追加する方法など、JavaScript オブジェクトのプロトタイプを取り上げてきました。
次の記事では、オブジェクト指向プログラミングの基盤となる概念について見ていきます。
diff --git a/files/ja/learn/server-side/express_nodejs/index.md b/files/ja/learn/server-side/express_nodejs/index.md
index cc12427f57cd2b..ea3b09f7e5f21f 100644
--- a/files/ja/learn/server-side/express_nodejs/index.md
+++ b/files/ja/learn/server-side/express_nodejs/index.md
@@ -20,7 +20,7 @@ Express は、JavaScript で書かれ、Node.js 実行環境内でホストさ
## ガイド
-- [Express/Node の入門](/ja/docs/Learn/Server-side/Express_Nodejs/Introduction)
+- [Express/Node の紹介](/ja/docs/Learn/Server-side/Express_Nodejs/Introduction)
- : この最初の Express 記事では、"Node とは何ですか?"、"Express とは何ですか?" という質問に答えます。Express ウェブフレームワークが特別になった理由の概要を説明します。主な機能の概要を説明し、Express アプリケーションの主な構成要素をいくつか紹介します (ただし、現時点ではテスト用の開発環境はまだありません)。
- [Node (Express) 開発環境の設定](/ja/docs/Learn/Server-side/Express_Nodejs/development_environment)
- : Express の目的がわかったので、Windows、Linux (Ubuntu)、および macOS 上で Node/Express 開発環境を設定およびテストする方法を説明します。この記事は、オペレーティングシステム共通の、Express アプリの開発を始めるために必要なものを提供します。
diff --git a/files/ja/learn/server-side/express_nodejs/introduction/index.md b/files/ja/learn/server-side/express_nodejs/introduction/index.md
index a177cdc3245985..8e0b6abaa6ab63 100644
--- a/files/ja/learn/server-side/express_nodejs/introduction/index.md
+++ b/files/ja/learn/server-side/express_nodejs/introduction/index.md
@@ -28,7 +28,7 @@ Express の最初の記事では「Node って何だろう?」、「Express
## Node の紹介
-[Node](https://nodejs.org/)(正式には _Node.js_)はオープンソースのクロスプラットフォーム、実行環境で、開発者はあらゆるサーバーサイドのツールやアプリケーションを [JavaScript](/ja/docs/Glossary/JavaScript) で作成することができます。この実行環境はブラウザーコンテキスト外での使用 (すなわち、コンピューターまたはサーバー OS 上での直接実行) を目的としています。そのため、クライアントサイドではブラウザー固有の JavaScript API が省略され、HTTP やファイルシステムライブラリーを含む従来の OS API がサポートされます。
+[Node](https://nodejs.org/)(正式には _Node.js_)はオープンソースのクロスプラットフォーム、実行環境で、開発者はあらゆるサーバーサイドのツールやアプリケーションを [JavaScript](/ja/docs/Glossary/JavaScript) で作成することができます。この実行環境は閲覧コンテキスト外での使用 (すなわち、コンピューターまたはサーバー OS 上での直接実行) を目的としています。そのため、クライアントサイドではブラウザー固有の JavaScript API が省略され、HTTP やファイルシステムライブラリーを含む従来の OS API がサポートされます。
ウェブサーバー開発の観点から Node には多くの利点があります。
@@ -201,7 +201,7 @@ console.log(`The area of a square with a width of 4 is ${square.area(4)}`);
> [!NOTE]
> モジュールへの絶対パス (または最初に行ったように名前) を指定することもできます。
-一度に 1 つのプロパティを構築するのではなく、1 つの割り当てで完全なオブジェクトをエクスポートする場合は、次のように `module.exports` に割り当てます (これを実行して、エクスポートオブジェクトのルートをコンストラクタまたは他の関数にすることもできます)。
+一度に 1 つのプロパティを構築するのではなく、1 つの割り当てで完全なオブジェクトをエクスポートする場合は、次のように `module.exports` に割り当てます (これを実行して、エクスポートオブジェクトのルートをコンストラクターまたは他の関数にすることもできます)。
```js
module.exports = {
diff --git a/files/ja/learn/server-side/express_nodejs/mongoose/index.md b/files/ja/learn/server-side/express_nodejs/mongoose/index.md
index 5237791ef277c5..80b1d22be041eb 100644
--- a/files/ja/learn/server-side/express_nodejs/mongoose/index.md
+++ b/files/ja/learn/server-side/express_nodejs/mongoose/index.md
@@ -143,7 +143,7 @@ db.on("error", console.error.bind(console, "MongoDB connection error:"));
#### スキーマの定義
-以下のコードは、単純なスキーマを定義する方法を示しています。最初に mongoose を `require()` し、次に Schema コンストラクタを使用して新しいスキーマインスタンスを作成し、コンストラクタの object 引数で内部のさまざまなフィールドを定義します。
+以下のコードは、単純なスキーマを定義する方法を示しています。最初に mongoose を `require()` し、次に Schema コンストラクターを使用して新しいスキーマインスタンスを作成し、コンストラクターの object 引数で内部のさまざまなフィールドを定義します。
```js
//Require Mongoose
diff --git a/files/ja/learn/tools_and_testing/understanding_client-side_tools/deployment/index.md b/files/ja/learn/tools_and_testing/understanding_client-side_tools/deployment/index.md
index 58dbdaf09f8e7a..2409ef8810901e 100644
--- a/files/ja/learn/tools_and_testing/understanding_client-side_tools/deployment/index.md
+++ b/files/ja/learn/tools_and_testing/understanding_client-side_tools/deployment/index.md
@@ -312,7 +312,7 @@ Netlify については以上です。 必要に応じて、Netlify プロジェ
- ビルドステップ中に[画像を圧縮](https://github.com/ralscha/parcel-plugin-compress)できますか?
- React を [もっと小さいもの](https://preactjs.com/) に置き換えることはできますか?
-- [パフォーマンス監査](https://developer.chrome.com/docs/lighthouse/performance/) など、不正なビルドのデプロイを防ぐためのテストをさらに追加していただけますか?
+- [パフォーマンス監査](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring) など、不正なビルドのデプロイを防ぐためのテストをさらに追加していただけますか?
- 新しいデプロイが成功したか失敗したかを知らせる通知を設定していただけますか?
{{PreviousMenu("Learn/Tools_and_testing/Understanding_client-side_tools/Introducing_complete_toolchain", "Learn/Tools_and_testing/Understanding_client-side_tools")}}
diff --git a/files/ja/mdn/writing_guidelines/writing_style_guide/index.md b/files/ja/mdn/writing_guidelines/writing_style_guide/index.md
index bdab328ef493ba..6247b14938cdda 100644
--- a/files/ja/mdn/writing_guidelines/writing_style_guide/index.md
+++ b/files/ja/mdn/writing_guidelines/writing_style_guide/index.md
@@ -2,7 +2,7 @@
title: 執筆スタイルガイド
slug: MDN/Writing_guidelines/Writing_style_guide
l10n:
- sourceCommit: e60194342c9666ad8a2e6e5e6c25705fe818bcde
+ sourceCommit: 4ecbac9e89961a132c1e7f5493ec94f60dcb1ee4
---
{{MDNSidebar}}
@@ -160,9 +160,11 @@ MDN Web Docs で書くことの第一の目標は、常にオープンなウェ
- **例を追加する**。すべての引数、あるいは少なくとも初級から中級レベルのユーザーが使用する可能性のある引数(またはプロパティや属性)と、追加の説明が必要な高度な引数を網羅した例を用意する必要があります。それぞれの例の前には、その例が何をするのか、それを理解するためにはどのような知識が必要なのかなどの概要を示す必要があります。例の後(または例の一部の間)には、コードがどのように動作するかを説明する文章が必要です。例の詳細やエラー処理についても手を抜いてはいけません。読者は例をコピー&ペーストして自分のプロジェクトで使用するでしょうから、そのコードが本番サイトで使用されることになるでしょう。より有用な情報は、[サンプルコードのガイドライン](/ja/docs/MDN/Writing_guidelines/Writing_style_guide/Code_style_guide)を参照してください。
- **使用例を説明する**。説明されている機能について、特に一般的な使用例がある場合は、それについて話してください。一般的な開発上の問題を解決するために文書化された方法を読者が理解すると仮定するのではなく、実際にその利用例についての節を追加し、例とその例がどのように機能するかを説明するテキストを追加してください。
- **画像情報を追加する**。すべての画像や図に適切な [`alt`](/ja/docs/Web/HTML/Element/img#alt) テキストを入れてください。このテキストは、表などのキャプションと同様に重要です。スパイダーは画像をクロールすることができないため、 [`alt`](/ja/docs/Web/HTML/Element/img#alt) テキストによって、埋め込まれたメディアに含まれるコンテンツを検索エンジンのクローラーに伝えることができます。
+
> [!NOTE]
> 検索エンジンのランキングを操作するために、キーワードを入れすぎたり、関係のないキーワードを使ったりすることは、良い慣習ではありません。このような行為は発見されやすく、罰せられる傾向にあります。
> 同様に、ページのサイズや検索順位を上げるために、反復的で役に立たない内容や、キーワードの塊を実際のページ内に追加するようなことも**しないでください**。これは、コンテンツの読みやすさと検索結果の両方に悪影響を及ぼします。
+
- **トピックの内容を重視する**。特定のキーワードではなく、記事のトピックに沿ってコンテンツを書く方がはるかに良いことです。実際、多くの SEO 担当者は、記事の長さに応じて 5 ~ 100 種類のキーワード(ショートテール、ミディアムテール、ロングテール)をリストアップし、記事に含めるようにしています。そうすることで、表現が多様化し、繰り返しが少なくなります。
## 執筆スタイル
@@ -443,7 +445,7 @@ MDN で他のページやページの節のタイトルで参照する場合、
リンク先の節が同じページにある場合は、「上記」 (above) や「下記」 (below) の言葉を用いて、その節の場所を示唆することができます。
-- **正**: この概念は下記の[アクセシビリティの考慮](/ja/docs/Web/CSS/gradient/repeating-conic-gradient#accessibility_concerns)の節で詳しく説明しています。
+- **正**: この概念は下記の[アクセシビリティ](/ja/docs/Web/CSS/gradient/repeating-conic-gradient#アクセシビリティ)の節で詳しく説明しています。
文章の一部を記事や記事の節にリンクすることができます。リンクテキストとして説明的な語句を使用し、リンクされているページに十分なコンテキストを提供するように注意してください。
@@ -519,7 +521,7 @@ markdown の見出しレベルをスキップすることなく、小さい順
ページ内に画像やその他のメディアを載せる場合は、以下のガイドラインに従ってください。
-- メディアのライセンスが使用することを許可していることを確認してください。 [CC0](https://creativecommons.org/share-your-work/public-domain/cc0/) のようなとても寛容なライセンスを有するメディア、または少なくとも私たちの一般的なコンテンツライセンス - [クリエイティブ・コモンズ - 表示・継承ライセンス](https://creativecommons.org/licenses/by-sa/2.5/) (CC-BY-SA) と互換性のあるものを使用するようにしましょう。
+- メディアのライセンスが使用することを許可していることを確認してください。 [CC0](https://creativecommons.org/public-domain/cc0/) のようなとても寛容なライセンスを有するメディア、または少なくとも私たちの一般的なコンテンツライセンス - [クリエイティブ・コモンズ - 表示・継承ライセンス](https://creativecommons.org/licenses/by-sa/2.5/) (CC-BY-SA) と互換性のあるものを使用するようにしましょう。
- 画像の場合、 または を通すとページが軽量化されます。
- `SVG` の場合は、 [SVGOMG](https://jakearchibald.github.io/svgomg/) を通してコードを実行し、 `SVG` ファイルの最後に空行があることを確認してください。
- すべての画像に[説明的な `alt` テキストを入れる](/ja/docs/MDN/Writing_guidelines/Howto/Images_media#画像に代替テキストを追加)必要があります。
@@ -670,16 +672,15 @@ MDN Web Docs 全体の一貫性を保つため、関連情報の節を追加ま
### おすすめのスタイルガイド
-ここで取り扱われていない用法とスタイルについて疑問があれば、 [Microsoft Writing Style Guide](https://docs.microsoft.com/style-guide/welcome/) を、それでもダメなら [Chicago Manual of Style](https://www.chicagomanualofstyle.org) を参照してください。
-[非公式の crib sheet for the Chicago Manual of Style](https://faculty.cascadia.edu/cma/HIST148/cmscrib.pdf) がオンラインで利用できます。
+ここで取り扱われていない用法とスタイルについて疑問があれば、 [Microsoft Writing Style Guide](https://learn.microsoft.com/en-us/style-guide/welcome/) を、それでもダメなら [Chicago Manual of Style](https://www.chicagomanualofstyle.org) を参照してください。
### 言語、文法、綴り
記事の執筆と編集スキルを磨きたければ、以下のリソースが役立つことでしょう。(英語の情報)
- [Common errors in English usage](https://brians.wsu.edu/common-errors-in-english-usage/) on brians.wsu.edu
-- [English grammar FAQ](https://www-personal.umich.edu/~jlawler/aue.html) on alt-usage-english.org
+- [English grammar FAQ](https://websites.umich.edu/~jlawler/aue.html) on alt-usage-english.org
- [English language and usage](https://english.stackexchange.com/) on english.stackexchange.com: Question and answer site for English language usage
-- [Merriam-Webster's Concise Dictionary of English Usage](https://www.google.com/books/edition/Merriam_Webster_s_Dictionary_of_English/UDIjAQAAIAAJ) on google.com/books (published 2002): Scholarly but user-friendly, evidence-based advice; very good for non-native speakers, especially for preposition usage
+- [Merriam-Webster's Concise Dictionary of English Usage](https://books.google.com/books?id=UDIjAQAAIAAJ) on google.com/books (published 2002): Scholarly but user-friendly, evidence-based advice; very good for non-native speakers, especially for preposition usage
- [On Writing Well](https://www.harpercollins.com/products/on-writing-well-william-zinsser) by William Zinsser on harpercollins.com (published 2016)
-- [Style: Lessons in Clarity and Grace](https://www.google.ca/books/edition/Style/QjskvgEACAAJ) by Joseph Williams and Gregory Colomb on google.com/books (published 2019)
+- [Style: Lessons in Clarity and Grace](https://books.google.com/books?id=QjskvgEACAAJ) by Joseph Williams and Gregory Colomb on google.com/books (published 2019)
diff --git a/files/ja/mozilla/add-ons/webextensions/api/alarms/alarm/index.md b/files/ja/mozilla/add-ons/webextensions/api/alarms/alarm/index.md
index 0f82cbb3547260..9d11a72b50c18b 100644
--- a/files/ja/mozilla/add-ons/webextensions/api/alarms/alarm/index.md
+++ b/files/ja/mozilla/add-ons/webextensions/api/alarms/alarm/index.md
@@ -25,4 +25,4 @@ slug: Mozilla/Add-ons/WebExtensions/API/alarms/Alarm
{{WebExtExamples}}
> [!NOTE]
-> この API は Chromium の [`chrome.alarms`](https://developer.chrome.com/extensions/alarms) API に基づいています。
+> この API は Chromium の [`chrome.alarms`](https://developer.chrome.com/docs/extensions/reference/api/alarms) API に基づいています。
diff --git a/files/ja/mozilla/add-ons/webextensions/api/alarms/clear/index.md b/files/ja/mozilla/add-ons/webextensions/api/alarms/clear/index.md
index fd15811519959d..da2105b8967259 100644
--- a/files/ja/mozilla/add-ons/webextensions/api/alarms/clear/index.md
+++ b/files/ja/mozilla/add-ons/webextensions/api/alarms/clear/index.md
@@ -34,4 +34,4 @@ browser.alarms.clear(
{{WebExtExamples}}
> [!NOTE]
-> この API は Chromium の [`chrome.alarms`](https://developer.chrome.com/extensions/alarms) API に基づいています。
+> この API は Chromium の [`chrome.alarms`](https://developer.chrome.com/docs/extensions/reference/api/alarms) API に基づいています。
diff --git a/files/ja/mozilla/add-ons/webextensions/api/alarms/clearall/index.md b/files/ja/mozilla/add-ons/webextensions/api/alarms/clearall/index.md
index 575076bac251fd..c5ca0fa15fca69 100644
--- a/files/ja/mozilla/add-ons/webextensions/api/alarms/clearall/index.md
+++ b/files/ja/mozilla/add-ons/webextensions/api/alarms/clearall/index.md
@@ -31,4 +31,4 @@ browser.alarms.clearAll(
{{WebExtExamples}}
> [!NOTE]
-> この API は Chromium の [`chrome.alarms`](https://developer.chrome.com/extensions/alarms) API に基づいています。
+> この API は Chromium の [`chrome.alarms`](https://developer.chrome.com/docs/extensions/reference/api/alarms) API に基づいています。
diff --git a/files/ja/mozilla/add-ons/webextensions/api/alarms/create/index.md b/files/ja/mozilla/add-ons/webextensions/api/alarms/create/index.md
index b10579b465bc08..11701453cd5676 100644
--- a/files/ja/mozilla/add-ons/webextensions/api/alarms/create/index.md
+++ b/files/ja/mozilla/add-ons/webextensions/api/alarms/create/index.md
@@ -78,7 +78,7 @@ chrome.alarms.create("my-periodic-alarm", {
```
> [!NOTE]
-> この API は Chromium の [`chrome.alarms`](https://developer.chrome.com/extensions/alarms) API に基づいています。Microsoft Edge での実装状況は Microsoft Corporation から提供されたものであり、ここでは Creative Commons Attribution 3.0 United States License に従っています。
+> この API は Chromium の [`chrome.alarms`](https://developer.chrome.com/docs/extensions/reference/api/alarms) API に基づいています。Microsoft Edge での実装状況は Microsoft Corporation から提供されたものであり、ここでは Creative Commons Attribution 3.0 United States License に従っています。
+## API 仕様書日本語索引
### ア
- [位置情報 API](/ja/docs/Web/API/Geolocation_API)
+- [IndexedDB](/ja/docs/Web/API/IndexedDB_API)
+- [ウィンドウ制御 API](/ja/docs/Web/API/Window_Management_API)
+- [ウィンドウ制御オーバーレイ API](/ja/docs/Web/API/Window_Controls_Overlay_API)
+- [ウェブ音声 API](/ja/docs/Web/API/Web_Speech_API)
+- [ウェブ共有 API](/ja/docs/Web/API/Web_Share_API)
+- [ウェブシリアル API](/ja/docs/Web/API/Web_Serial_API)
+- [ウェブ定期バックグラウンド同期 API](/ja/docs/Web/API/Web_Periodic_Background_Synchronization_API)
+- [WebVTT API](/ja/docs/Web/API/WebVTT_API)
+- [ウェブ MIDI API](/ja/docs/Web/API/Web_MIDI_API)
### カ
-- [CSS カウンタースタイル](/ja/docs/Web/API/CSS_Counter_Styles)
+- [画面起動ロック API](/ja/docs/Web/API/Screen_Wake_Lock_API)
+- [画面キャプチャ API](/ja/docs/Web/API/Screen_Capture_API)
+- [画面方向 API](/ja/docs/Web/API/Screen_Orientation_API)
+- [決済ハンドラー API](/ja/docs/Web/API/Payment_Handler_API)
+- [決済リクエスト API](/ja/docs/Web/API/Payment_Request_API)
+- [権限 API](/ja/docs/Web/API/Permissions_API)
- [交差オブザーバー API](/ja/docs/Web/API/Intersection_Observer_API)
+### サ
+
+- [CSS カウンタースタイル](/ja/docs/Web/API/CSS_Counter_Styles)
+- [ストレージ API](/ja/docs/Web/API/Storage_API)
+- [ストレージアクセス API](/ja/docs/Web/API/Storage_Access_API)
+- [センサー API 群](/ja/docs/Web/API/Sensor_APIs)
+
### タ
+- [通知 API](/ja/docs/Web/API/Notifications_API)
- [DOM](/ja/docs/Web/API/Document_Object_Model)
+### ナ
+
+- [ネットワーク情報 API](/ja/docs/Web/API/Network_Information_API)
+
### ハ
+- [バックグラウンド同期 API](/ja/docs/Web/API/Background_Synchronization_API)
+- [バックグラウンドフェッチ API](/ja/docs/Web/API/Background_Fetch_API)
+- [バッジ API](/ja/docs/Web/API/Badging_API)
+- [パフォーマンス API](/ja/docs/Web/API/Performance_API)
+- [ビュー遷移 API](/ja/docs/Web/API/View_Transitions_API)
- [フェッチ API](/ja/docs/Web/API/Fetch_API)
+- [プッシュ通知 API](/ja/docs/Web/API/Push_API)
+- [プレゼンテーション API](/ja/docs/Web/API/Presentation_API)
+
+### マ
+
+- [メディアキャプチャとストリーム API](/ja/docs/Web/API/Media_Capture_and_Streams_API)
-## 仕様書
+## API 仕様書英語索引
利用可能なすべての API の一覧です。
diff --git a/files/ja/web/api/indexeddb_api/basic_terminology/index.md b/files/ja/web/api/indexeddb_api/basic_terminology/index.md
index 58980574c73db6..f62fbab21b3aff 100644
--- a/files/ja/web/api/indexeddb_api/basic_terminology/index.md
+++ b/files/ja/web/api/indexeddb_api/basic_terminology/index.md
@@ -2,7 +2,7 @@
title: IndexedDB の主な特徴と基本用語
slug: Web/API/IndexedDB_API/Basic_Terminology
l10n:
- sourceCommit: 2f87739e5ad2231acad10157f97b45579af511d6
+ sourceCommit: f2088b8912ef205a737551441d54b73507bd3ac6
---
{{DefaultAPISidebar("IndexedDB")}}
@@ -13,7 +13,7 @@ l10n:
- API の使用方法に関する詳細なチュートリアルについては、[IndexedDB の使用](/ja/docs/Web/API/IndexedDB_API/Using_IndexedDB)を参照してください。
- IndexedDB API のリファレンス文書については、[IndexedDB API](/ja/docs/Web/API/IndexedDB_API) のメイン記事と、IndexedDB で使用されるオブジェクトの型を記したそのサブページを参照してください。
-- ブラウザーがバックグラウンドでデータを保存する方法の詳細については、[ブラウザーのストレージ制限と削除基準](/ja/docs/Web/API/IndexedDB_API/Browser_storage_limits_and_eviction_criteria)を参照してください。
+- ブラウザーがバックグラウンドでデータを保存する方法の詳細については、[ブラウザーのストレージ容量と削除基準](/ja/docs/Web/API/Storage_API/Storage_quotas_and_eviction_criteria)を参照してください。
## 主な特徴
@@ -24,16 +24,16 @@ IndexedDB では、「キー」に基づいてインデックス化されたオ
他の種類のデータベースでの作業を前提としていると、IndexedDB での作業に戸惑うことがあるかもしれません。そのため、以下のような IndexedDB の主な特徴を覚えておくことが重要です。
- **IndexedDB データベースは、キーと値の組を格納します。** 値は複雑な構造のオブジェクトで、キーはそのオブジェクトのプロパティです。オブジェクトの任意のプロパティを使用するインデックスを作成して、迅速な検索や並べ替えされた列挙を行うことができます。キーにはバイナリーオブジェクトを使用することができます。
-- **IndexedDB は、トランザクションデータベースモデルに基づいて構築されています。** IndexedDB で行うことは、常に[トランザクション](#トランザクション)のコンテキストで行われます。IndexedDB API には、インデックス、テーブル、カーソルなどを表す多くのオブジェクトが用意されていますが、これらはそれぞれ特定のトランザクションに関連付けられています。そのため、トランザクションの外でコマンドを実行したり、カーソルを開いたりすることはできません。トランザクションには十分に定義された有効期間があるため、トランザクションが完了した後に使用しようとすると、例外が発生します。また、トランザクションは自動コミットされ、手動でコミットすることはできません。
+- **IndexedDB は、トランザクションデータベースモデルに基づいて構築されています。** IndexedDB で行うことは、常に[トランザクション](#トランザクション)のコンテキストで行われます。IndexedDB API には、インデックス、テーブル、カーソルなどを表す多くのオブジェクトが用意されていますが、これらはそれぞれ特定のトランザクションに関連付けられています。そのため、トランザクションの外でコマンドを実行したり、カーソルを開いたりすることはできません。トランザクションには十分に定義された有効期間があるため、トランザクションが完了した後に使用しようとすると、例外が発生します。また、トランザクションがアクティブなときに新しいリクエストがされない場合、トランザクションは自動的にコミットされます。
このトランザクションモデルは、ユーザーがウェブアプリケーションの 2 つのインスタンスを 2 つの異なるタブで同時に開いた場合のことを考えると、とても有用です。トランザクション操作がなければ、 2 つのインスタンスが互いの変更に干渉してしまう可能性があります。データベースのトランザクションに慣れていない方は、[Wikipedia のトランザクションに関する記事](https://ja.wikipedia.org/wiki/%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B6%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3)をご覧ください。また、「定義」の章の[トランザクション](#トランザクション)もご覧ください。
-- **IndexedDB API は、ほとんどが非同期です。** API は値を返すことでデータを提供するわけではありません。コールバック関数を渡す必要があります。同期的な方法でデータベースに値を「格納」したり、データベースから値を「取り出す」ことはしません。代わりに、データベース操作を「リクエスト」します。操作が終了すると DOM イベントで通知され、そのイベントの種類によって操作が成功したか失敗したかが分かります。最初は少し複雑に聞こえるかもしれませんが、そこには健全性を保つための対策が組み込まれています。これは、[XMLHttpRequest](/ja/docs/Web/API/XMLHttpRequest) が動作する方法と大きな違いはありません。
+- **IndexedDB API は、ほとんどが非同期です。** API は値を返すことでデータを提供するわけではありません。コールバック関数を渡す必要があります。同期的な方法でデータベースに値を「格納」したり、データベースから値を「取り出す」ことはしません。代わりに、データベース操作を「リクエスト」します。操作が終了すると DOM イベントで通知され、そのイベントの種類によって操作が成功したか失敗したかが分かります。
- **IndexedDB は多くのリクエストを使用します。** リクエストは、前述の成功または失敗の DOM イベントを受け取るオブジェクトです。このオブジェクトには `onsuccess` と `onerror` のプロパティがあり、`addEventListener()` と `removeEventListener()` を呼び出すことができます。また、`readyState`、`result`、`errorCode` の各プロパティがあり、リクエストの状態を知ることができます。`result` プロパティは、リクエストの生成方法 (例えば `IDBCursor` インスタンスや、データベースに挿入したばかりの値のキー) に応じて、さまざまなものになるため、特に魔法のようなものです。
- **IndexedDB は DOM イベントを使って、結果が利用可能になったことを通知します。** DOM イベントには、必ず `type` プロパティがあります (IndexedDB では、最も一般的に `"success"` または `"error"` に設定されます)。また、DOM イベントには、イベントの目的地を示す `target` プロパティがあります。ほとんどの場合、イベントの `target` は、何らかのデータベース操作の結果として生成された `IDBRequest` オブジェクトです。成功イベントはバブルアップしませんし、キャンセルもできません。一方、エラーイベントはバブリングします、キャンセルも可能です。これは非常に重要なことで、エラーイベントはキャンセルされない限り、実行中のトランザクションを中断します。
- **IndexedDB はオブジェクト指向です。** IndexedDB は、行と列の集合体であるテーブルを持つリレーショナルデータベースではありません。この重要かつ根本的な違いは、アプリケーションの設計・構築方法に影響します。
- 従来のリレーショナルデータストアでは、データの行と名前の付いたデータの列の集合体を格納するテーブルがあります。一方、IndexedDB では、データの種類に応じてオブジェクトストアを作成し、そのストアに JavaScript オブジェクトを永続化する必要があります。各オブジェクトストアには、クエリや反復処理を効率的に行うためのインデックスのコレクションを持つことができます。オブジェクト指向データベース管理システムに慣れていない方は、[Wikipedia のオブジェクトデータベースの記事](https://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9)をお読みください。
+ 従来のリレーショナルデータストアでは、データの行と名前の付いたデータの列の集合体を格納するテーブルがあります。一方、IndexedDB では、データの種類に応じてオブジェクトストアを作成し、そのストアに JavaScript オブジェクトを永続化する必要があります。各オブジェクトストアには、クエリーや反復処理を効率的に行うためのインデックスのコレクションを持つことができます。オブジェクト指向データベース管理システムに慣れていない方は、[Wikipedia のオブジェクトデータベースの記事](https://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9)をお読みください。
- **IndexedDB は Structured Query Language (SQL) を使用しません。** インデックスに対するクエリーを使用してカーソルを生成し、そのカーソルを使用して結果セットを反復処理します。NoSQL システムについてよく知らない方は、[Wikipedia の NoSQL に関する記事](https://ja.wikipedia.org/wiki/NoSQL)をご覧ください。
- **IndexedDB は、同一オリジンポリシーを採用しています**。オリジンとは、スクリプトを実行している文書の URL のドメイン、アプリケーション層のプロトコル、およびポートのことです。各オリジンには、それぞれ関連するデータベースのセットがあります。すべてのデータベースには、オリジン内で識別するための名前があります。
@@ -47,7 +47,7 @@ IndexedDB では、「キー」に基づいてインデックス化されたオ
IndexedDB は、クライアントサイドのストレージを必要とするほとんどのケースをカバーするように設計されています。しかし、以下のようないくつかのケースには対応していません。
-- 国際化に対応した並べ替え。すべての言語で文字列が同じように並べ替えされるわけではないので、国際化に対応した並べ替えには対応していません。データベースは特定の国際化に対応した順序でデータを保存することはできませんが、データベースから読み取ったデータを自分で並べ替えすることはできます。ただし、Firefox 43 以降、実験的なフラグを有効にすることで、[ロケールを考慮した並べ替え](/ja/docs/Web/API/IndexedDB_API/Using_IndexedDB#locale-aware_sorting)が可能になっています (現在は Firefox のみ)。
+- 国際化に対応した並べ替え。すべての言語で文字列が同じように並べ替えされるわけではないので、国際化に対応した並べ替えには対応していません。データベースは特定の国際化に対応した順序でデータを保存することはできませんが、データベースから読み取ったデータを自分で並べ替えすることはできます。
- 同期。この API は、サーバー側のデータベースとの同期を行うようには設計されていません。クライアント側の indexedDB データベースとサーバー側のデータベースを同期させるコードを書く必要があります。
- 全文検索。この API には、 SQL の `LIKE` 演算子に相当するものがありません。
@@ -165,7 +165,7 @@ Firefox 40 では、IndexedDB トランザクションは、パフォーマン
#### キーレンジ
-キーとして使用する、何らかのデータ型の連続的な区間です。キーまたはキーレンジを使用して、オブジェクトストアやインデックスからレコードを取り出すことができます。下限または上限を使用して、レンジを制限またはフィルターリングできます。例えばキーが x から y の間であるすべての値に対して、反復処理を行うことができます。
+キーとして使用する、何らかのデータ型の連続的な区間です。キーまたはキーレンジを使用して、オブジェクトストアやインデックスからレコードを取り出すことができます。下限または上限を使用して、レンジを制限またはフィルタリングできます。例えばキーが x から y の間であるすべての値に対して、反復処理を行うことができます。
キーレンジのリファレンス文書として、{{domxref("IDBKeyRange")}} をご覧ください。
@@ -182,4 +182,4 @@ IndexedDB の主な特徴と主要な用語を理解できたら、より具体
- [Indexed Database API 仕様書](https://www.w3.org/TR/IndexedDB/)
- [IndexedDB API リファレンス](/ja/docs/Web/API/IndexedDB_API)
- [IndexedDB の使用](/ja/docs/Web/API/IndexedDB_API/Using_IndexedDB)
-- [IndexedDB — The Store in Your Browser]()
+- [IndexedDB — The Store in Your Browser]()
diff --git a/files/ja/web/api/inputdeviceinfo/getcapabilities/index.md b/files/ja/web/api/inputdeviceinfo/getcapabilities/index.md
new file mode 100644
index 00000000000000..d385177997e480
--- /dev/null
+++ b/files/ja/web/api/inputdeviceinfo/getcapabilities/index.md
@@ -0,0 +1,91 @@
+---
+title: "InputDeviceInfo: getCapabilities() メソッド"
+short-title: getCapabilities()
+slug: Web/API/InputDeviceInfo/getCapabilities
+l10n:
+ sourceCommit: d16706e4e930c57161d473287374a9286c663147
+---
+
+{{APIRef("Media Capture and Streams")}}{{securecontext_header}}
+
+**`getCapabilities()`** は {{domxref("InputDeviceInfo")}} インターフェイスのメソッドで、この機器の {{domxref("MediaStream")}} の主音声トラックまたは主映像トラックを記述する `MediaTrackCapabilities` オブジェクトを返します。
+
+## 構文
+
+```js-nolint
+getCapabilities()
+```
+
+### 引数
+
+なし。
+
+### 返値
+
+`MediaTrackCapabilities` オブジェクトで、ユーザーエージェントが対応する制約可能なプロパティごとに対応している値または値の範囲を指定し、以下のメンバーを含みます。
+
+- `deviceId`
+ - : [`ConstrainDOMString`](/ja/docs/Web/API/MediaTrackConstraints#constraindomstring) オブジェクトで、機器 ID が入ります。
+- `groupId`
+ - : [`ConstrainDOMString`](/ja/docs/Web/API/MediaTrackConstraints#constraindomstring) オブジェクトで、グループ ID が入ります。
+- `autoGainControl`
+ - : [`ConstrainBoolean`](/ja/docs/Web/API/MediaTrackConstraints#constrainboolean) オブジェクトで、ソースが自動ゲイン制御ができるかどうかを報告します。
+ この機能がスクリプトで制御できる場合、ソースは true と false の両方を可能な値として報告します。
+- `channelCount`
+ - : [`ConstrainULong`](/ja/docs/Web/API/MediaTrackConstraints#constrainulong) で、チャンネル数またはチャンネル数の範囲が入ります。
+- `echoCancellation`
+ - : [`ConstrainBoolean`](/ja/docs/Web/API/MediaTrackConstraints#constrainboolean) オブジェクトで、ソースがエコーキャンセルができるかどうかを報告します。
+ この機能がスクリプトで制御できる場合、ソースは true と false の両方を可能な値として報告します。
+- `latency`
+ - : [`ConstrainDouble`](/ja/docs/Web/API/MediaTrackConstraints#constraindouble) で、レイテンシーまたはレイテンシーの範囲が入ります。
+- `noiseSuppression`
+ - : [`ConstrainBoolean`](/ja/docs/Web/API/MediaTrackConstraints#constrainboolean) object reporting if the source can do noise suppression.
+ この機能がスクリプトで制御できる場合、ソースは true と false の両方を可能な値として報告します。
+- `sampleRate`
+ - : [`ConstrainULong`](/ja/docs/Web/API/MediaTrackConstraints#constrainulong) で、サンプリングレートまたはサンプリングレートの範囲が入ります。
+- `sampleSize`
+ - : [`ConstrainULong`](/ja/docs/Web/API/MediaTrackConstraints#constrainulong) で、サンプルサイズまたはサンプルサイズの範囲が入ります。
+- `aspectRatio`
+ - : [`ConstrainDouble`](/ja/docs/Web/API/MediaTrackConstraints#constraindouble) で、映像の{{glossary("aspect ratio", "アスペクト比")}}(幅のピクセル数を高さのピクセル数で割ったもの)またはアスペクト比の範囲が入ります。
+- `facingMode`
+ - : [`ConstrainDOMString`](/ja/docs/Web/API/MediaTrackConstraints#constraindomstring) オブジェクトで、カメラの向きのモードが入ります。カメラは "left" および "user" のように複数の向きを報告することがあります。
+- `frameRate`
+ - : [`ConstrainDouble`](/ja/docs/Web/API/MediaTrackConstraints#constraindouble) で、受け入れ可能なフレームレートまたはフレームレートの範囲が入ります。
+- `height`
+ - : [`ConstrainULong`](/ja/docs/Web/API/MediaTrackConstraints#constrainulong) で、映像のピクセル単位での高さまたは高さの範囲が入ります。
+- `width`
+ - : [`ConstrainULong`](/ja/docs/Web/API/MediaTrackConstraints#constrainulong) で、映像のピクセル単位での幅または幅の範囲が入ります。
+- `resizeMode`
+ - : [`ConstrainDOMString`](/ja/docs/Web/API/MediaTrackConstraints#constraindomstring) オブジェクトで、UAが映像トラックの解像度を導き出すために使用できるモード、またはモードの配列が入ります。
+
+> [!NOTE]
+> ユーザーが入力機器にアクセスする許可を与えていない場合、空のオブジェクトが返されます。
+
+## 例
+
+次の例では、音声と映像機器にアクセスする許可を {{domxref("mediaDevices.getUserMedia()")}} で求めています。`getCapabilities()` を使用するには、端末にアクセスする許可が必要です。
+
+`device` が `InputDeviceInfo` オブジェクトの場合、`getCapabilities()` はその機能を示すメンバーを含むオブジェクトを返します。例えば、映像ストリームには `noiseSuppression` などの自動プロパティは記載されません。
+
+```js
+// 音声または映像機器にアクセスする許可を得る
+navigator.mediaDevices.getUserMedia({ audio: true, video: true });
+
+navigator.mediaDevices.enumerateDevices().then((devices) => {
+ devices.forEach((device) => {
+ console.log(device.getCapabilities()); // MediaTrackCapabilities オブジェクト
+ });
+});
+```
+
+## 仕様書
+
+{{Specifications}}
+
+## ブラウザーの互換性
+
+{{Compat}}
+
+## 関連情報
+
+- {{domxref("MediaStreamTrack.getCapabilities()")}}: `MediaTrackCapabilities` オブジェクトを返す
diff --git a/files/ja/web/api/inputdeviceinfo/index.md b/files/ja/web/api/inputdeviceinfo/index.md
new file mode 100644
index 00000000000000..0ff31c799878ae
--- /dev/null
+++ b/files/ja/web/api/inputdeviceinfo/index.md
@@ -0,0 +1,44 @@
+---
+title: InputDeviceInfo
+slug: Web/API/InputDeviceInfo
+l10n:
+ sourceCommit: 4232f4067388fc9b2c55c5f9200dddf05bd99b74
+---
+
+{{APIRef("Media Capture and Streams")}}{{securecontext_header}}
+
+**`InputDeviceInfo`** は {{domxref("Media Capture and Streams API", "メディアキャプチャとストリーム API", "", "nocode")}} のインターフェイスで、これが表す入力機器の能力にアクセスするためのものです。
+`InputDeviceInfo` オブジェクトは、返された機器が音声または動画入力機器である場合、{{domxref("MediaDevices.enumerateDevices()")}} によって返されます。
+
+{{InheritanceDiagram}}
+
+## インスタンスプロパティ
+
+_親インターフェイスである {{DOMxRef("MediaDeviceInfo")}} から継承したプロパティもあります。_
+
+## インスタンスメソッド
+
+_親インターフェイスである {{DOMxRef("MediaDeviceInfo")}} から継承したメソッドもあります。_
+
+- {{domxref("InputDeviceInfo.getCapabilities()")}}
+ - : 機器の `MediaStream` の主音声トラックまたは映像トラックを記述する `MediaTrackCapabilities` オブジェクトを返します。
+
+## 例
+
+次の例では、{{domxref("MediaDevices.enumerateDevices()")}} に従うことで、すべてのメディア機器を取得します。機器のいずれかが入力機器である場合、`console.log(device)` により、`InputDeviceInfo` オブジェクトがコンソールに表示されます。
+
+```js
+navigator.mediaDevices.enumerateDevices().then((devices) => {
+ devices.forEach((device) => {
+ console.log(device); // 機器が入力機器の場合は InputDeviceInfo オブジェクト、それ以外は MediaDeviceInfo オブジェクトです。
+ });
+});
+```
+
+## 仕様書
+
+{{Specifications}}
+
+## ブラウザーの互換性
+
+{{Compat}}
diff --git a/files/ja/web/api/insertable_streams_for_mediastreamtrack_api/index.md b/files/ja/web/api/insertable_streams_for_mediastreamtrack_api/index.md
index 3f8a5c029844a4..ddf04d8541cd1e 100644
--- a/files/ja/web/api/insertable_streams_for_mediastreamtrack_api/index.md
+++ b/files/ja/web/api/insertable_streams_for_mediastreamtrack_api/index.md
@@ -22,7 +22,7 @@ l10n:
## 例
-以下の例は記事 [Insertable streams for MediaStreamTrack](https://developer.chrome.com/articles/mediastreamtrack-insertable-media-processing/) に載っているもので、ビデオストリーム内のバーコードをハイライトするバーコードスキャナーアプリケーションのデモを行います。これは、{{domxref("MediaStreamTrackProcessor.readable")}} 経由でアクセスしているストリームを変換します。
+以下の例は記事 [Insertable streams for MediaStreamTrack](https://developer.chrome.com/docs/capabilities/web-apis/mediastreamtrack-insertable-media-processing) に載っているもので、ビデオストリーム内のバーコードをハイライトするバーコードスキャナーアプリケーションのデモを行います。これは、{{domxref("MediaStreamTrackProcessor.readable")}} 経由でアクセスしているストリームを変換します。
```js
const stream = await getUserMedia({ video: true });
diff --git a/files/ja/web/api/intersectionobserverentry/index.md b/files/ja/web/api/intersectionobserverentry/index.md
index 0445017f58b59e..e30daab1e0882b 100644
--- a/files/ja/web/api/intersectionobserverentry/index.md
+++ b/files/ja/web/api/intersectionobserverentry/index.md
@@ -30,7 +30,7 @@ l10n:
## メソッド
-_このインタフェースにはメソッドがありません。_
+_このインターフェイスにはメソッドがありません。_
## 仕様書
diff --git a/files/ja/web/api/keyboardevent/index.md b/files/ja/web/api/keyboardevent/index.md
index e4fb1473b0bf42..536db1dd84778e 100644
--- a/files/ja/web/api/keyboardevent/index.md
+++ b/files/ja/web/api/keyboardevent/index.md
@@ -2,14 +2,14 @@
title: KeyboardEvent
slug: Web/API/KeyboardEvent
l10n:
- sourceCommit: 56c76424a5edb45f6716ac4ee48861dac8e7ae38
+ sourceCommit: cfb7587e3e3122630ad6cbd94d834ecadbe0a746
---
{{APIRef("UI Events")}}
**`KeyboardEvent`** オブジェクトは、キーボードによるユーザーの操作を示します。個々のイベントがユーザーとキーとの間の単一の操作(または修飾キーとの組み合わせ)を表します。イベントの種類 ({{domxref("Element/keydown_event", "keydown")}}, {{domxref("Element/keypress_event", "keypress")}}, {{domxref("Element/keyup_event", "keyup")}}) はキーボード操作が発生した種類を識別します。
-> **メモ:** `KeyboardEvent` は、単にユーザーがキーボードのキーで行った操作が何であるかを低水準で示すものであり、その操作のその場面における意味は持ちません。テキストの入力を処理したい場合は、代わりに {{domxref("HTMLElement/input_event", "input")}} イベントを使用してください。ユーザーが他の種類のテキスト入力、例えば、タブレット端末やタブレット機器による手書き入力システムなどを使用している場合、キーボードイベントが発生することはありません。
+> **メモ:** `KeyboardEvent` は、単にユーザーがキーボードのキーで行った操作が何であるかを低水準で示すものであり、その操作のその場面における意味は持ちません。テキストの入力を処理したい場合は、代わりに {{domxref("Element/input_event", "input")}} イベントを使用してください。ユーザーが他の種類のテキスト入力、例えば、タブレット端末やタブレット機器による手書き入力システムなどを使用している場合、キーボードイベントが発生することはありません。
{{InheritanceDiagram}}
@@ -20,7 +20,7 @@ l10n:
## 定数
-`KeyboardEvent` インターフェースは、以下の定数を定義しています。
+`KeyboardEvent` インターフェイスは、以下の定数を定義しています。
### キーボード上の位置
@@ -110,13 +110,6 @@ _このインターフェイスには、親である {{domxref("UIEvent")}} お
- : 論理値で、このイベントが `compositionstart` と `compositionend` の間に発生したものであれば `true` を返します。
- {{domxref("KeyboardEvent.key")}} {{ReadOnlyInline}}
- : 文字列で、このイベントが表すキーのキー値を表します。
-- {{domxref("KeyboardEvent.locale")}} {{ReadOnlyInline}}
-
- - : 文字列で、キーボードに設定されているロケールを示すロケール文字列を返します。ブラウザーや端末がキーボードのロケールを知らない場合は空文字列となります。
-
- > [!NOTE]
- > このプロパティは入力データのロケールを表すわけではありません。例えば、ユーザーが使用するキーボードレイアウトと入力テキストとで言語が異なる場合があります。
-
- {{domxref("KeyboardEvent.location")}} {{ReadOnlyInline}}
- : 数値で、キーボードなどの入力機器上のキーの位置を表す値を返します。位置を特定する定数の一覧は、上記の[キーボード上の位置](#キーボード上の位置)にあります。
- {{domxref("KeyboardEvent.metaKey")}} {{ReadOnlyInline}}
@@ -129,6 +122,19 @@ _このインターフェイスには、親である {{domxref("UIEvent")}} お
- : 論理値で、このキーイベントが発生した際に Shift キーが押されていれば `true` を返します。
+### 古いプロパティ
+
+- {{domxref("KeyboardEvent.charCode")}} {{Deprecated_inline}} {{ReadOnlyInline}}
+
+ - : キーの Unicode 参照番号を表す数値を返します。このプロパティは `keypress` イベントでのみ使用されます。 `char` プロパティが複数の文字を含むキーの場合、これはそのプロパティの最初の文字の Unicode 値です。Firefox 26 では、表示可能な文字のコードが返されます。
+
+- {{domxref("KeyboardEvent.keyCode")}} {{deprecated_inline}} {{ReadOnlyInline}}
+
+ - : 押されたキーの修飾されていない値を識別する、システムおよび実装に依存する数値コードを表す数値を返します。
+
+- {{domxref("KeyboardEvent.keyIdentifier")}} {{Non-standard_inline}} {{deprecated_inline}} {{ReadOnlyInline}}
+ - : このプロパティは標準外であり、{{domxref("KeyboardEvent.key")}} に置き換えられて非推奨とされています。これは、DOM Level 3 Events の古い版に含まれていました。
+
## インスタンスメソッド
_このインターフェイスには、親である {{domxref("UIEvent")}} および {{domxref("Event")}} から継承したメソッドもあります。_
@@ -137,47 +143,13 @@ _このインターフェイスには、親である {{domxref("UIEvent")}} お
- : そのイベントが発生した際に修飾キー (Alt / Shift / Ctrl / Meta) が押されていたかどうかを表す論理値を返します。
-## 廃止されたメソッド
+### 古いメソッド
- {{domxref("KeyboardEvent.initKeyEvent()")}} {{deprecated_inline}}
- : `KeyboardEvent` オブジェクトを初期化します。これは Firefox でのみ実装されていたものですが、もう Firefox でも対応していません。代わりに {{domxref("KeyboardEvent.KeyboardEvent", "KeyboardEvent()")}} コンストラクターを使用してください。
- {{domxref("KeyboardEvent.initKeyboardEvent()")}} {{deprecated_inline}}
- : `KeyboardEvent` オブジェクトを初期化します。これは非推奨になりました。代わりに {{domxref("KeyboardEvent.KeyboardEvent", "KeyboardEvent()")}} コンストラクターを使用してください。
-## 廃止されたプロパティ
-
-- {{domxref("KeyboardEvent.char")}} {{Non-standard_inline}} {{Deprecated_inline}} {{ReadOnlyInline}}
-
- - : このキーの文字値を表す文字列を返します。キーが表示可能な文字に対応している場合、この値はその文字を含む空でない Unicode 文字列となります。キーが表示可能な表現を持たない場合は、これは空文字列です。
-
- > [!NOTE]
- > キーが複数の文字を挿入するマクロとして使用されている場合、このプロパティの値は最初の文字だけでなく、文字列全体になります。
-
-- {{domxref("KeyboardEvent.charCode")}} {{Deprecated_inline}}{{ReadOnlyInline}}
-
- - : このキーの Unicode 参照番号を表す数値を返します。この属性は、`keypress` イベントでのみ使用されます。 `char` 属性が複数の文字を含むキーの場合、これはその属性の最初の文字の Unicode 値となります。 Firefox 26 では、これは表示可能な文字のコードを返します。
-
- > [!WARNING]
- > この属性は非推奨です。可能であれば、代わりに {{domxref("KeyboardEvent.key")}} を使用してください。
-
-- {{domxref("KeyboardEvent.keyCode")}} {{deprecated_inline}} {{ReadOnlyInline}}
-
- - : 押されたキーの修飾されていない値を示す、 システムや実装に依存した数値コードを数値で返します。
-
- > [!WARNING]
- > この属性は非推奨です。可能であれば、代わりに {{domxref("KeyboardEvent.key")}} を使用してください。
-
-- {{domxref("KeyboardEvent.keyIdentifier")}} {{Non-standard_inline}} {{deprecated_inline}} {{ReadOnlyInline}}
- - : このプロパティは標準外であり、{{domxref("KeyboardEvent.key")}} に置き換えられ非推奨になりました。これは DOM Level 3 Events の古い版に含まれていました。
-- {{domxref("KeyboardEvent.keyLocation")}} {{Non-standard_inline}} {{deprecated_inline}} {{ReadOnlyInline}}
- - : これは {{domxref("KeyboardEvent.location")}} の標準外で非推奨の別名です。これは DOM Level 3 Events の古い版に含まれていました。
-- {{domxref("UIEvent.which")}} {{deprecated_inline}} {{ReadOnlyInline}}
-
- - : 押されたキーの修飾されていない値を示す、 システムや実装に依存した数値コードを数値で返します。これは通常 `keyCode` と同じです。
-
- > [!WARNING]
- > この属性は非推奨です。可能であれば、代わりに {{domxref("KeyboardEvent.key")}} を使用してください。
-
## イベント
以下のイベントは `KeyboardEvent` 型に基づいています。以下のリストでは、各イベントは、そのイベントの `Element` のハンドラーのドキュメントにリンクしおり、これは一般的にすべての宛先、例えば {{domxref("Element")}}、{{domxref("Document")}}、{{domxref("Window")}} に適用されます。
@@ -187,7 +159,7 @@ _このインターフェイスには、親である {{domxref("UIEvent")}} お
- {{domxref("Element.keyup_event", "keyup")}}
- : キーが離されました。
-### 廃止されたイベント
+### 古いイベント
- {{domxref("Element.keypress_event", "keypress")}} {{deprecated_inline}}
- : 通常は文字値を生成するキーが押されました。このイベントは端末への依存度が高いため、廃止されました。使用すべきではありません。
@@ -288,10 +260,10 @@ document.addEventListener(
### 互換性のメモ
-- Firefox 65 では、 `keypress` イベントは[表示可能でないキー]()では発生しなくなりました([Firefox バグ 968056](https://bugzil.la/968056))が、 Enter キー、 Shift + Enter キー、 Ctrl + Enter キーの組み合わせでは発生します (これらはブラウザー間の互換性の目的のために維持されています)。
+- Firefox 65 では、 `keypress` イベントは[表示可能でないキー](/ja/docs/Web/API/KeyboardEvent/keyCode#非表示キー(機能キー))では発生しなくなりました([Firefox バグ 968056](https://bugzil.la/968056))が、 Enter キー、 Shift + Enter キー、 Ctrl + Enter キーの組み合わせでは発生します (これらはブラウザー間の互換性の目的のために維持されています)。
## 関連情報
-- {{domxref("KeyboardEvent.code")}}.
-- {{domxref("KeyboardEvent.key")}}.
+- {{domxref("KeyboardEvent.code")}}
+- {{domxref("KeyboardEvent.key")}}
- {{domxref("KeyboardEvent.getModifierState()")}}
diff --git a/files/ja/web/api/linearaccelerationsensor/index.md b/files/ja/web/api/linearaccelerationsensor/index.md
index 99ef83d036cb6c..164756e6c82e54 100644
--- a/files/ja/web/api/linearaccelerationsensor/index.md
+++ b/files/ja/web/api/linearaccelerationsensor/index.md
@@ -9,7 +9,7 @@ l10n:
[Sensor APIs](/ja/docs/Web/API/Sensor_APIs) の **`LinearAccelerationSensor`** インターフェイスは、デバイスの 3 軸それぞれにかかっている加速度の測定値を、重力の影響を除いて提供します。
-このセンサーを使用するには、ユーザーが [Permissions API](/ja/docs/Web/API/Permissions_API) により `'accelerometer'` デバイスセンサーを使用する許可を与える必要があります。さらに、この機能はサーバーで設定された [Permissions Policy](/ja/docs/Web/HTTP/Permissions_Policy) でブロックされる可能性があります。
+このセンサーを使用するには、ユーザーが [権限 API](/ja/docs/Web/API/Permissions_API) により `'accelerometer'` デバイスセンサーを使用する許可を与える必要があります。さらに、この機能はサーバーで設定された [権限ポリシー](/ja/docs/Web/HTTP/Permissions_Policy) でブロックされる可能性があります。
{{InheritanceDiagram}}
diff --git a/files/ja/web/api/linearaccelerationsensor/linearaccelerationsensor/index.md b/files/ja/web/api/linearaccelerationsensor/linearaccelerationsensor/index.md
index 45afabcd368ea9..e8bd293c27f6d8 100644
--- a/files/ja/web/api/linearaccelerationsensor/linearaccelerationsensor/index.md
+++ b/files/ja/web/api/linearaccelerationsensor/linearaccelerationsensor/index.md
@@ -30,7 +30,7 @@ new LinearAccelerationSensor(options)
### 例外
- `SecurityError` {{domxref("DOMException")}}
- - : この機能の使用が [Permissions Policy](/ja/docs/Web/HTTP/Permissions_Policy) によりブロックされました。
+ - : この機能の使用が [権限ポリシー](/ja/docs/Web/HTTP/Permissions_Policy) によりブロックされました。
## 仕様書
diff --git a/files/ja/web/api/magnetometer/index.md b/files/ja/web/api/magnetometer/index.md
index 83f2ffc3dd8be0..b247905c14e895 100644
--- a/files/ja/web/api/magnetometer/index.md
+++ b/files/ja/web/api/magnetometer/index.md
@@ -9,7 +9,7 @@ l10n:
[Sensor APIs](/ja/docs/Web/API/Sensor_APIs) の **`Magnetometer`** インターフェイスは、デバイスのプライマリー磁気センサーで検出される磁場の情報を提供します。
-このセンサーを使用するには、ユーザーが [Permissions API](/ja/docs/Web/API/Permissions_API) により `'magnetometer'` デバイスセンサーを使用する許可を与える必要があります。さらに、この機能はサーバーで設定された [Permissions Policy](/ja/docs/Web/HTTP/Permissions_Policy) でブロックされる可能性があります。
+このセンサーを使用するには、ユーザーが [権限 API](/ja/docs/Web/API/Permissions_API) により `'magnetometer'` デバイスセンサーを使用する許可を与える必要があります。さらに、この機能はサーバーで設定された [権限ポリシー](/ja/docs/Web/HTTP/Permissions_Policy) でブロックされる可能性があります。
{{InheritanceDiagram}}
diff --git a/files/ja/web/api/magnetometer/magnetometer/index.md b/files/ja/web/api/magnetometer/magnetometer/index.md
index 2058eca001db7c..3b385cfe317766 100644
--- a/files/ja/web/api/magnetometer/magnetometer/index.md
+++ b/files/ja/web/api/magnetometer/magnetometer/index.md
@@ -30,7 +30,7 @@ new Magnetometer(options)
### 例外
- `SecurityError` {{domxref("DOMException")}}
- - : この機能の使用が [Permissions Policy](/ja/docs/Web/HTTP/Permissions_Policy) によりブロックされました。
+ - : この機能の使用が [権限ポリシー](/ja/docs/Web/HTTP/Permissions_Policy) によりブロックされました。
## 仕様書
diff --git a/files/ja/web/api/mathmlelement/attributestylemap/index.md b/files/ja/web/api/mathmlelement/attributestylemap/index.md
new file mode 100644
index 00000000000000..5997620bf4d59e
--- /dev/null
+++ b/files/ja/web/api/mathmlelement/attributestylemap/index.md
@@ -0,0 +1,72 @@
+---
+title: "MathMLElement: attributeStyleMap プロパティ"
+short-title: attributeStyleMap
+slug: Web/API/MathMLElement/attributeStyleMap
+l10n:
+ sourceCommit: 4f263d8dfb90fa2253e090ee339ae14d1907fa63
+---
+
+{{APIRef("CSSOM")}}
+
+**`attributeStyleMap`** は {{domxref("MathMLElement")}} インターフェイスの読み取り専用プロパティで、生きた {{domxref("StylePropertyMap")}} オブジェクトを返します。これは、要素のインラインの `style` 属性で定義されているか、スクリプトを介して {{domxref("MathMLElement")}} インターフェイスの {{domxref("MathMLElement.style", "style")}} プロパティを使用して割り当てられている、要素のスタイルプロパティのリストです。
+
+一括指定プロパティは展開されます。`border-top: 1px solid black` を設定すると、個別指定プロパティ ({{cssxref("border-top-color")}}, {{cssxref("border-top-style")}}, {{cssxref("border-top-width")}}) が代わりに設定されます。
+
+{{domxref("MathMLElement.style", "style")}} プロパティと `attributeStyleMap` プロパティの主な違いは、`style` プロパティが {{domxref("CSSStyleDeclaration")}} オブジェクトを返すのに対し、`attributeStyleMap` プロパティは {{domxref("StylePropertyMap")}} オブジェクトを返すことです。
+
+自分自身を書き込むことはできませんが、{{domxref("StylePropertyMap")}} オブジェクトを通してインラインスタイルを読み書きすることができます。これは `style` プロパティから返される {{domxref("CSSStyleDeclaration")}} オブジェクトと同様です。
+
+## 値
+
+生きた {{domxref("StylePropertyMap")}} オブジェクトです。
+
+## 例
+
+以下は `style` 属性と `attributeStyleMap` プロパティの関係を示すコードです。
+
+```html
+
- Click the "Start Recording" button to begin video recording for a few seconds.
- You can stop recording by clicking the "Stop Recording" button. The "Download"
- button will download the received data (although it's in a raw, unwrapped form
- that isn't very useful).
+ 「録画を開始」ボタンをクリックすると、数秒間の間の録画を始めます。
+ 「録画を停止」ボタンをクリックすると、録画を停止することができます。「ダウンロード」ボタンをクリックすると、受信したデータをダウンロードすることができます(ただし、これは生データであり、まだラップされていないため、あまり有益なものではありません)。