diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index a319321cb26..b2188ec1be6 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -24,8 +24,8 @@
/docker-compose.yaml @hguthrie
-LICENSE.txt @leslietilling
+LICENSE.txt @jeff-matthews
-COPYING.txt @leslietilling
+COPYING.txt @jeff-matthews
-CODEOWNERS @leslietilling @dshevtsov
+CODEOWNERS @jeff-matthews @dshevtsov
diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md
index 1a6f267d8e4..a02084614d5 100644
--- a/.github/CODE_OF_CONDUCT.md
+++ b/.github/CODE_OF_CONDUCT.md
@@ -1,73 +1,76 @@
-# Contributor Covenant Code of Conduct
+# Magento Code of Conduct
## Our Pledge
-In the interest of fostering an open and welcoming environment, we as
-contributors and maintainers pledge to making participation in our project and
-our community a harassment-free experience for everyone, regardless of age, body
-size, disability, ethnicity, gender identity and expression, level of experience,
-education, socio-economic status, nationality, personal appearance, race,
-religion, or sexual identity and orientation.
+We as members, contributors, and leaders pledge to make participation in our project and community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.
+
+We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.
## Our Standards
-Examples of behavior that contributes to creating a positive environment
-include:
+Examples of behavior that contribute to a positive environment for our project and community include:
-* Using welcoming and inclusive language
-* Being respectful of differing viewpoints and experiences
-* Gracefully accepting constructive criticism
-* Focusing on what is best for the community
-* Showing empathy towards other community members
+* Demonstrating empathy and kindness toward other people
+* Being respectful of differing opinions, viewpoints, and experiences
+* Giving and gracefully accepting constructive feedback
+* Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
+* Focusing on what is best, not just for us as individuals but for the overall community
-Examples of unacceptable behavior by participants include:
+Examples of unacceptable behavior include:
-* Using sexualized language or imagery and unwelcome sexual attention or
- advances
-* Trolling, insulting/derogatory comments, and personal or political attacks
+* The use of sexualized language or imagery, and sexual attention or advances of any kind
+* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
-* Publishing others' private information, such as a physical or electronic
- address, without explicit permission
-* Other conduct which could reasonably be considered inappropriate in a
- professional setting
+* Publishing others' private information, such as a physical or email address, without their explicit permission
+* Other conduct which could reasonably be considered inappropriate in a professional setting
## Our Responsibilities
-Project maintainers are responsible for clarifying the standards of acceptable
-behavior and are expected to take appropriate and fair corrective action in
-response to any instances of unacceptable behavior.
+Project maintainers are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any instances of unacceptable behavior.
-Project maintainers have the right and responsibility to remove, edit, or
-reject comments, commits, code, wiki edits, issues, and other contributions
-that are not aligned to this Code of Conduct, or to ban temporarily or
-permanently any contributor for other behaviors that they deem inappropriate,
-threatening, offensive, or harmful.
+Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for behaviors that they deem inappropriate, threatening, offensive, or harmful.
## Scope
-This Code of Conduct applies both within project spaces and in public spaces
-when an individual is representing the project or its community. Examples of
-representing a project or community include using an official project e-mail
-address, posting via an official social media account, or acting as an appointed
-representative at an online or offline event. Representation of a project may be
-further defined and clarified by project maintainers.
+This Code of Conduct applies when an individual is representing the project or its community both within project spaces and in public spaces. Examples of representing a project or community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
## Enforcement
-Instances of abusive, harassing, or otherwise unacceptable behavior may be
-reported by contacting the project team in [Slack](https://magentocommeng.slack.com/archives/CAN932A3H). All
-complaints will be reviewed and investigated and will result in a response that
-is deemed necessary and appropriate to the circumstances. The project team is
-obligated to maintain confidentiality with regard to the reporter of an incident.
-Further details of specific enforcement policies may be posted separately.
+Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by first contacting the project team at `engcom@adobe.com`. Oversight of Adobe projects is handled by the Adobe Open Source Office, which has final say in any violations and enforcement of this Code of Conduct and can be reached at `Grp-opensourceoffice@adobe.com`. All complaints will be reviewed and investigated promptly and fairly.
-Project maintainers who do not follow or enforce the Code of Conduct in good
-faith may face temporary or permanent repercussions as determined by other
-members of the project's leadership.
+The project team must respect the privacy and security of the reporter of any incident.
-## Attribution
+Project maintainers who do not follow or enforce the Code of Conduct may face temporary or permanent repercussions as determined by other members of the project's leadership or the Adobe Open Source Office.
+
+## Enforcement Guidelines
+
+Project maintainers will follow these Community Impact Guidelines in determining the consequences for any action they deem to be in violation of this Code of Conduct:
+
+### 1. Correction
+
+Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.
+
+Consequence: A private, written warning from project maintainers describing the violation and why the behavior was unacceptable. A public apology may be requested from the violator before any further involvement in the project by violator.
+
+### 2. Warning
+
+Community Impact: A relatively minor violation through a single incident or series of actions.
-This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
-available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
+Consequence: A written warning from project maintainers that includes stated consequences for continued unacceptable behavior. Violator must refrain from interacting with the people involved for a specified period of time as determined by the project maintainers, including, but not limited to, unsolicited interaction with those enforcing the Code of Conduct through channels such as community spaces and social media. Continued violations may lead to a temporary or permanent ban.
+
+### 3. Temporary Ban
+
+Community Impact: A more serious violation of community standards, including sustained unacceptable behavior.
+
+Consequence: A temporary ban from any interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Failure to comply with the temporary ban may lead to a permanent ban.
+
+### 4. Permanent Ban
+
+Community Impact: Demonstrating a consistent pattern of violation of community standards or an egregious violation of community standards, including, but not limited to, sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.
+
+Consequence: A permanent ban from any interaction with the community.
+
+## Attribution
-[homepage]: https://www.contributor-covenant.org
+This Code of Conduct is adapted from the Contributor Covenant, version 2.1,
+available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.
diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml
index e106a7b7c21..14995a92a49 100644
--- a/.github/workflows/linter.yml
+++ b/.github/workflows/linter.yml
@@ -20,16 +20,17 @@ on:
###############
# Set the Job #
###############
+permissions:
+ contents: read
+
jobs:
mdl:
name: mdl
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v2
+ - uses: actions/checkout@v3
- name: Set up Ruby
- uses: actions/setup-ruby@v1
- with:
- ruby-version: 2.6
+ uses: ruby/setup-ruby@v1
- name: Install mdl gem
run: gem install mdl
- name: Run mdl
@@ -46,7 +47,7 @@ jobs:
# Checkout the code base #
##########################
- name: Checkout Code
- uses: actions/checkout@v2
+ uses: actions/checkout@v3
with:
# Full git history is needed to get a proper list of changed files within `super-linter`
fetch-depth: 0
@@ -55,7 +56,7 @@ jobs:
# Run Linter against code base #
################################
- name: Lint Code Base
- uses: github/super-linter/slim@v4.9.2
+ uses: github/super-linter/slim@v4.9.7
env:
VALIDATE_ALL_CODEBASE: false
DEFAULT_BRANCH: master
diff --git a/.gitignore b/.gitignore
index 682bab6a230..10339208556 100644
--- a/.gitignore
+++ b/.gitignore
@@ -27,6 +27,4 @@ _algolia_api_key
/src/mbi/
/src/page-builder/
-/src/page-builder-migration/
-/src/guides/m1x/
/src/mftf/
diff --git a/Docfile.yml b/Docfile.yml
index 8ba3ef68e6c..6b93f68f76a 100644
--- a/Docfile.yml
+++ b/Docfile.yml
@@ -7,12 +7,12 @@ content_map:
filter: true
-
directory: src/mftf
- repository: magento/magento2-functional-testing-framework
- branch: master
+ repository: commerce-docs/magento2-functional-testing-framework-public
+ branch: migrated-docs
filter: true
-
directory: src/mftf/v2
- repository: magento/magento2-functional-testing-framework
+ repository: commerce-docs/magento2-functional-testing-framework-public
branch: 2.x-develop
filter: true
-
diff --git a/Gemfile b/Gemfile
index 55d297c215e..633d70e8fa0 100644
--- a/Gemfile
+++ b/Gemfile
@@ -2,29 +2,33 @@
source 'https://rubygems.org'
-gem 'devdocs', git: 'https://github.com/magento-devdocs/devdocs-theme.git'
-gem 'jekyll'
+gem 'devdocs', git: 'https://github.com/commerce-docs/devdocs-theme.git'
+gem 'jekyll', '4.2.2'
gem 'rake'
-gem 'whatsup_github'
+# gem 'whatsup_github'
-gem 'wdm', platform: :mswin
+# gem 'wdm', platform: :mswin
group :test do
gem 'html-proofer'
gem 'launchy'
- gem 'mdl'
+ # gem 'mdl'
end
-group :optimization do
- gem 'image_optim'
- gem 'image_optim_pack'
-end
+# group :optimization do
+# gem 'image_optim'
+# gem 'image_optim_pack'
+# end
group :jekyll_plugins do
- gem 'jekyll-algolia', '~> 1.0'
+ # gem 'jekyll-algolia', '~> 1.0'
gem 'jekyll-optional-front-matter'
gem 'jekyll-redirect-from'
gem 'jekyll-relative-links'
gem 'jekyll-sitemap'
gem 'jekyll-titles-from-headings'
end
+
+group :resolutions do
+ gem 'ffi', '1.15.5'
+end
\ No newline at end of file
diff --git a/Gemfile.lock b/Gemfile.lock
index 48c4ded247c..7c5117154af 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,85 +1,38 @@
GIT
- remote: https://github.com/magento-devdocs/devdocs-theme.git
- revision: d8dd15c703cd55a4f04ff798df63a7238d43eb2d
+ remote: https://github.com/commerce-docs/devdocs-theme.git
+ revision: 04462e71c495bb63ecdf0fd61ca679b116da9026
specs:
- devdocs (18)
+ devdocs (20)
jekyll (>= 4.0)
GEM
remote: https://rubygems.org/
specs:
- addressable (2.8.0)
- public_suffix (>= 2.0.2, < 5.0)
- algolia_html_extractor (2.6.4)
- json (~> 2.0)
- nokogiri (~> 1.10)
- algoliasearch (1.27.5)
- httpclient (~> 2.8, >= 2.8.3)
- json (>= 1.5.1)
- chef-utils (17.10.0)
- concurrent-ruby
+ addressable (2.8.7)
+ public_suffix (>= 2.0.2, < 7.0)
+ childprocess (5.0.0)
colorator (1.1.0)
- concurrent-ruby (1.1.10)
+ concurrent-ruby (1.3.3)
em-websocket (0.5.3)
eventmachine (>= 0.12.9)
http_parser.rb (~> 0)
- ethon (0.15.0)
+ ethon (0.16.0)
ffi (>= 1.15.0)
eventmachine (1.2.7)
- exifr (1.3.9)
- faraday (1.10.0)
- faraday-em_http (~> 1.0)
- faraday-em_synchrony (~> 1.0)
- faraday-excon (~> 1.1)
- faraday-httpclient (~> 1.0)
- faraday-multipart (~> 1.0)
- faraday-net_http (~> 1.0)
- faraday-net_http_persistent (~> 1.0)
- faraday-patron (~> 1.0)
- faraday-rack (~> 1.0)
- faraday-retry (~> 1.0)
- ruby2_keywords (>= 0.0.4)
- faraday-em_http (1.0.0)
- faraday-em_synchrony (1.0.0)
- faraday-excon (1.1.0)
- faraday-httpclient (1.0.1)
- faraday-multipart (1.0.3)
- multipart-post (>= 1.2, < 3)
- faraday-net_http (1.0.1)
- faraday-net_http_persistent (1.2.0)
- faraday-patron (1.0.0)
- faraday-rack (1.0.0)
- faraday-retry (1.0.3)
ffi (1.15.5)
- filesize (0.2.0)
forwardable-extended (2.6.0)
- fspath (3.1.2)
- html-proofer (3.19.3)
+ html-proofer (4.4.3)
addressable (~> 2.3)
mercenary (~> 0.3)
- nokogiri (~> 1.12)
- parallel (~> 1.3)
+ nokogiri (~> 1.13)
+ parallel (~> 1.10)
rainbow (~> 3.0)
typhoeus (~> 1.3)
yell (~> 2.0)
+ zeitwerk (~> 2.5)
http_parser.rb (0.8.0)
- httpclient (2.8.3)
- i18n (1.10.0)
+ i18n (1.14.5)
concurrent-ruby (~> 1.0)
- image_optim (0.31.1)
- exifr (~> 1.2, >= 1.2.2)
- fspath (~> 3.0)
- image_size (>= 1.5, < 4)
- in_threads (~> 1.3)
- progress (~> 3.0, >= 3.0.1)
- image_optim_pack (0.8.0.20220131)
- fspath (>= 2.1, < 4)
- image_optim (~> 0.19)
- image_optim_pack (0.8.0.20220131-x86_64-darwin)
- fspath (>= 2.1, < 4)
- image_optim (~> 0.19)
- image_size (3.0.1)
- in_threads (1.6.0)
jekyll (4.2.2)
addressable (~> 2.4)
colorator (~> 1.0)
@@ -95,20 +48,11 @@ GEM
rouge (~> 3.0)
safe_yaml (~> 1.0)
terminal-table (~> 2.0)
- jekyll-algolia (1.7.1)
- algolia_html_extractor (~> 2.6)
- algoliasearch (~> 1.26)
- filesize (~> 0.1)
- jekyll (>= 3.6, < 5.0)
- json (~> 2.0)
- nokogiri (~> 1.6)
- progressbar (~> 1.9)
- verbal_expressions (~> 0.1.5)
jekyll-optional-front-matter (0.3.2)
jekyll (>= 3.0, < 5.0)
jekyll-redirect-from (0.16.0)
jekyll (>= 3.3, < 5.0)
- jekyll-relative-links (0.6.1)
+ jekyll-relative-links (0.7.0)
jekyll (>= 3.3, < 5.0)
jekyll-sass-converter (2.2.0)
sassc (> 2.0.1, < 3.0)
@@ -118,99 +62,71 @@ GEM
jekyll (>= 3.3, < 5.0)
jekyll-watch (2.2.1)
listen (~> 3.0)
- json (2.6.1)
- kramdown (2.3.2)
+ kramdown (2.4.0)
rexml
kramdown-parser-gfm (1.1.0)
kramdown (~> 2.0)
- launchy (2.5.0)
- addressable (~> 2.7)
- liquid (4.0.3)
- listen (3.7.1)
+ launchy (3.0.1)
+ addressable (~> 2.8)
+ childprocess (~> 5.0)
+ liquid (4.0.4)
+ listen (3.9.0)
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
- mdl (0.11.0)
- kramdown (~> 2.3)
- kramdown-parser-gfm (~> 1.1)
- mixlib-cli (~> 2.1, >= 2.1.1)
- mixlib-config (>= 2.2.1, < 4)
- mixlib-shellout
mercenary (0.4.0)
- mini_portile2 (2.8.0)
- mixlib-cli (2.1.8)
- mixlib-config (3.0.9)
- tomlrb
- mixlib-shellout (3.2.6)
- chef-utils
- multipart-post (2.1.1)
- netrc (0.11.0)
- nokogiri (1.13.4)
- mini_portile2 (~> 2.8.0)
+ mini_portile2 (2.8.7)
+ nokogiri (1.15.6)
+ mini_portile2 (~> 2.8.2)
+ racc (~> 1.4)
+ nokogiri (1.15.6-arm64-darwin)
racc (~> 1.4)
- nokogiri (1.13.4-x86_64-darwin)
+ nokogiri (1.15.6-x86_64-darwin)
racc (~> 1.4)
- octokit (4.22.0)
- faraday (>= 0.9)
- sawyer (~> 0.8.0, >= 0.5.3)
- parallel (1.22.1)
+ parallel (1.25.1)
pathutil (0.16.2)
forwardable-extended (~> 2.6)
- progress (3.6.0)
- progressbar (1.11.0)
- public_suffix (4.0.6)
- racc (1.6.0)
+ public_suffix (5.1.1)
+ racc (1.8.1)
rainbow (3.1.1)
- rake (13.0.6)
- rb-fsevent (0.11.1)
- rb-inotify (0.10.1)
+ rake (13.2.1)
+ rb-fsevent (0.11.2)
+ rb-inotify (0.11.1)
ffi (~> 1.0)
- rexml (3.2.5)
- rouge (3.28.0)
- ruby2_keywords (0.0.5)
+ rexml (3.3.6)
+ strscan
+ rouge (3.30.0)
safe_yaml (1.0.5)
sassc (2.4.0)
ffi (~> 1.9)
- sawyer (0.8.2)
- addressable (>= 2.3.5)
- faraday (> 0.8, < 2.0)
+ strscan (3.1.0)
terminal-table (2.0.0)
unicode-display_width (~> 1.1, >= 1.1.1)
- thor (1.2.1)
- tomlrb (2.0.1)
- typhoeus (1.4.0)
+ typhoeus (1.4.1)
ethon (>= 0.9.0)
unicode-display_width (1.8.0)
- verbal_expressions (0.1.5)
- wdm (0.1.1)
- whatsup_github (0.4.2)
- netrc (~> 0.11)
- octokit (~> 4.20)
- thor (~> 1.1)
yell (2.2.2)
+ zeitwerk (2.6.17)
PLATFORMS
+ arm64-darwin-22
ruby
x86-mswin32
x86_64-darwin-19
x86_64-darwin-21
+ x86_64-darwin-22
DEPENDENCIES
devdocs!
+ ffi (= 1.15.5)
html-proofer
- image_optim
- image_optim_pack
- jekyll
- jekyll-algolia (~> 1.0)
+ jekyll (= 4.2.2)
jekyll-optional-front-matter
jekyll-redirect-from
jekyll-relative-links
jekyll-sitemap
jekyll-titles-from-headings
launchy
- mdl
rake
- wdm
- whatsup_github
BUNDLED WITH
2.1.4
diff --git a/README.md b/README.md
index 13a83832b8b..169996e61be 100644
--- a/README.md
+++ b/README.md
@@ -1,20 +1,20 @@
# Adobe Commerce Developer Documentation
-Welcome! This site contains the latest Adobe Commerce and Magento Open Source developer documentation for ongoing releases of both products. For additional information, see our [Contribution Guide](https://github.com/magento/devdocs/blob/master/.github/CONTRIBUTING.md).
+This project contains the source code of the Adobe Commerce and Magento Open Source developer documentation website for the latest 2.3 release.
> **Important update**
>
-> The developer documentation for Adobe Commerce and Magento Open Source is moving to the [Adobe Developer](developer.adobe.com/commerce) and [Adobe Experience League](https://experienceleague.adobe.com/docs/commerce.html) sites. After a topic is moved, use the link in the topic header to find the new location.
+> Adobe Commerce and Magento Open Source 2.4.x documentation has been migrated to Adobe sites. See our new landing pages to access the most current information.
>
->
+>[Adobe Commerce Developer Documentation](https://developer.adobe.com/commerce/docs/) (Adobe Developer site)—Develop, customize, integrate, extend, and use advanced capabilities
>
-> To track relocated topics by guide, see [Migrated Topics](https://devdocs.magento.com/migrated.html).
-
-## Contributors
-
-Our goal is to provide the Commerce and Open Source communities with comprehensive and quality technical documentation. We believe that to accomplish that goal we need experts from the community to share their knowledge with us and each other. We are thankful to all of our contributors for improving the documentation.
-
-
+>[Adobe Commerce Documentation](https://experienceleague.adobe.com/docs/commerce.html) (Adobe Experience League)—Plan, implement, operate, upgrade, and maintain your Commerce projects
+>
+> Some content was consolidated or moved to different guides. If you have trouble finding a topic, see the [Migrated topics](https://commerce-docs.github.io/devdocs-archive/migrated-topics.html).
+>
+> We welcome contributions to migrated content! You can find similar links to GitHub on the Adobe sites.
+>
+> The content at https://devdocs.magento.com is no longer supported since [the 2.3 release line has reached end of support](https://experienceleague.adobe.com/docs/commerce-operations/release/versions.html#2.3).
## Building this site
@@ -24,7 +24,7 @@ You can build the site locally in the following ways:
- [Installing the project dependencies locally](#build-locally) (Mac, Linux)
- [Using Docker (docker-compose)](https://github.com/magento/devdocs/wiki/Build-DevDocs-with-Docker) (Mac, Linux, Windows)
-- [Using a Vagrant virtual machine](https://github.com/magento-devdocs/vagrant-for-magento-devdocs) (Mac, Linux, Windows)
+- [Using a Vagrant virtual machine](https://github.com/commerce-docs/vagrant-for-magento-devdocs) (Mac, Linux, Windows)
- [Build DevDocs in Windows](https://github.com/magento/devdocs/wiki/Build-DevDocs-in-Windows) (Windows 7 & 10)
- [Building older versions of the documentation](https://github.com/magento/devdocs/wiki/Build-DevDocs-with-Docker)
@@ -129,30 +129,9 @@ Once you have completed preparing your environment, you can build locally and pr
> ***TIP***
> Leave the serve terminal open and running. Every time you save changes to a file, it automatically regenerates the site so you can test the output immediately. Changing the `_config.yml` file or other YAML file with data or configuration requires a fresh build (stop and start the server again with `rake preview`).
-### Exclude private repositories
-
-If you do not have access to the private repositories required by Docfile, you can exclude them in `_config.local.yml` to avoid the link checking report about missing pages.
-
-Create a `_config.local.yml` file at the root of the project directory and exclude the paths you do not want to generate:
-
-```yaml
-exclude:
- - page-builder
-```
-
->**TIP**
->You can override any other configuration options using this file.
-
->**TIP**
->To ignore the `_config.local.yml` file and preview the site with default configuration, use the `preview:all` option :
->
->```bash
->rake preview:all
->```
-
## Building old versions
-The published website contains documentation for the most current Adobe Commerce and Magento Open Source releases only. For cases, when you need to view the content as it was for an earlier release, we created [tags](https://github.com/magento/devdocs/tags) in this repository. Typically, they point at the commit when the release notes were finalized and published.
+The published website contains documentation for the latest 2.3.x Adobe Commerce and Magento Open Source release only. For cases, when you need to view the content as it was for an earlier release, we created [tags](https://github.com/magento/devdocs/tags) in this repository. Typically, they point at the commit when the release notes were finalized and published.
To view the list of available tags:
@@ -171,10 +150,13 @@ Find guidelines for building the site locally in the checked out README.
>**NOTE**
>There is no guarantee the site will be built, since it can have dependencies on the external resources that are not available anymore.
+## Archived docs
+
+To view the archived documentation, see
Everything you need to build and manage a customized Commerce store.
- {% include layout/search-form.html %} + {% if page.guide_version != "2.4" %} + {% include layout/search-form.html %} + {% endif %} diff --git a/src/_includes/install/allowoverrides24.md b/src/_includes/install/allowoverrides24.md index b290a07f1c2..ce5c992c71b 100644 --- a/src/_includes/install/allowoverrides24.md +++ b/src/_includes/install/allowoverrides24.md @@ -1,4 +1,4 @@ -Use this section to enable Apache 2.4 rewrites and specify a setting for the [distributed configuration file, `.htaccess`](http://httpd.apache.org/docs/current/howto/htaccess.html) +Use this section to enable Apache 2.4 rewrites and specify a setting for the [distributed configuration file, `.htaccess`](https://httpd.apache.org/docs/current/howto/htaccess.html) Magento uses server rewrites and `.htaccess` to provide directory-level instructions for Apache. @@ -11,7 +11,7 @@ Failure to enable these settings typically results in no styles displaying on yo a2enmod rewrite ``` -1. To enable Magento to use the distributed `.htaccess` configuration file, see the guidelines in the [Apache 2.4 documentation](http://httpd.apache.org/docs/current/mod/mod_rewrite.html). +1. To enable Magento to use the distributed `.htaccess` configuration file, see the guidelines in the [Apache 2.4 documentation](https://httpd.apache.org/docs/current/mod/mod_rewrite.html). Note that in Apache 2.4, the server's default site configuration file is `/etc/apache2/sites-available/000-default.conf`. diff --git a/src/_includes/install/file-system-umask.md b/src/_includes/install/file-system-umask.md index 7931bdd8051..322f62b795e 100644 --- a/src/_includes/install/file-system-umask.md +++ b/src/_includes/install/file-system-umask.md @@ -38,4 +38,4 @@ To set `magento_umask`: [file system owner]: {{ page.baseurl }}/install-gde/prereq/file-sys-perms-over.html -[umask]: http://www.cyberciti.biz/tips/understanding-linux-unix-umask-value-usage.html +[umask]: https://www.cyberciti.biz/tips/understanding-linux-unix-umask-value-usage.html diff --git a/src/_includes/install/first-steps-cli.md b/src/_includes/install/first-steps-cli.md index a0a7e296812..f769f84028f 100644 --- a/src/_includes/install/first-steps-cli.md +++ b/src/_includes/install/first-steps-cli.md @@ -14,7 +14,7 @@ 1. To run Magento commands from any directory, add `Choose either the software or the software and sample data:
Magento-CE-<version>.* (without sample data)Magento-CE-<version>+Samples.* (with sample data)- Elasticsearch version support and compatibility for {{site.data.var.ece}} is determined by service versions deployed on the Cloud infrastructure, and in rare cases may differ from the versions supported by {{site.data.var.ee}} on-premises deployments. -
diff --git a/src/_includes/install/ulimit.md b/src/_includes/install/ulimit.md index d560990dbbb..ae9d51cafcd 100644 --- a/src/_includes/install/ulimit.md +++ b/src/_includes/install/ulimit.md @@ -6,7 +6,7 @@ In some cases, a very long query string causes the user's allocated memory space ## How to set open files ulimit -We recommend setting the open files [`ulimit`](http://ss64.com/bash/ulimit.html) for the Magento file system user to a value of 65536 or more. +We recommend setting the open files [`ulimit`](https://ss64.com/bash/ulimit.html) for the Magento file system user to a value of 65536 or more. You can do this either on the command line or you can make it a permanent setting for the user by editing their shell script. @@ -36,4 +36,4 @@ To optionally set the value in the user's Bash shell: 1. Save your changes to `.bashrc` and exit the text editor. {:.bs-callout-warning} -We recommend you avoid setting a value for [`pcre.recursion_limit`](http://php.net/manual/en/pcre.configuration.php) in `php.ini` because it can result in incomplete rollbacks with no failure notice. +We recommend you avoid setting a value for [`pcre.recursion_limit`](https://php.net/manual/en/pcre.configuration.php) in `php.ini` because it can result in incomplete rollbacks with no failure notice. diff --git a/src/_includes/layout/header-scripts.html b/src/_includes/layout/header-scripts.html index 0625420cf3b..5ae0261c8a4 100644 --- a/src/_includes/layout/header-scripts.html +++ b/src/_includes/layout/header-scripts.html @@ -7,7 +7,7 @@ }; var indices = [{ - label: "DevDocs", + label: "Results", name: "devdocs", facetFilters: [ ["guide_version: {% if page.guide_version == nil %}{{ site.version }}{% else %}{{ page.guide_version }}{% endif %}", @@ -19,26 +19,6 @@ attribute: "functional_areas" }], baseUrl: "{{ site.baseurl }}" - }, - { - label: "User Guide", - name: "merchdocs", - baseUrl: "{{ site.user_guide_url }}" - }, - { - label: "Commerce Reporting User Guide", - name: "merchdocs-mbi", - baseUrl: "https://docs.magento.com/mbi" - }, - { - label: "PWA", - name: "pwa-devdocs", - baseUrl: "https://developer.adobe.com" - }, - { - label: "Order Management", - name: "oms-en", - baseUrl: "https://omsdocs.magento.com" } ]; diff --git a/src/_includes/layout/header-styles.html b/src/_includes/layout/header-styles.html index 76dbbbdc3e5..a884e32a5f9 100644 --- a/src/_includes/layout/header-styles.html +++ b/src/_includes/layout/header-styles.html @@ -1,8 +1,2 @@ - - -{% if page.canonical_url != nil %} - -{% endif %} - diff --git a/src/_includes/layout/page-header.html b/src/_includes/layout/page-header.html index 29e6190b528..b2f7a0fff1b 100644 --- a/src/_includes/layout/page-header.html +++ b/src/_includes/layout/page-header.html @@ -1,20 +1,9 @@
With the Fusion Backpack strapped on, every trek is an adventure - even a bus ride to work. That's partly because two large zippered compartments store everything you need, while a front zippered pocket and side mesh pouches are perfect for stashing those little extras, in case you change your mind and take the day off.
\r\nThe Ajax Full-Zip Sweatshirt makes the optimal layering or outer piece for archers, golfers, hikers and virtually any other sportsmen. Not only does it have top-notch moisture-wicking abilities, but the tight-weave fabric also prevents pilling from repeated wash-and-wear cycles.
\r\n• Mint striped full zip hoodie.
• 100% bonded polyester fleece.
• Pouch pocket.
• Rib cuffs and hem.
• Machine washable.
| Incoming IP addresses | -||||||
|---|---|---|---|---|---|---|
| US Region | -US-2 Region | -US-3 Region | -US-5 Region | -EU Region | -EU-3 Region | -AP-3 Region | -
|
- 52.200.159.23 -52.200.159.125 -52.200.160.5 - |
-
- 34.197.214.148 -34.197.144.144 -34.196.44.47 - |
-
- 34.210.133.187 -34.214.72.239 -34.215.10.85 - |
-
- 50.112.160.58 -`54.213.195.223` -`35.163.170.185` - |
-
- 52.209.44.44 -52.209.23.96 -52.51.117.101 - |
-
- 34.240.75.192 -34.251.110.37 -52.19.113.35 - |
-
- 52.65.39.201 -52.65.10.202 -52.65.30.37 - |
-
| Outgoing IP addresses | -||||||
|---|---|---|---|---|---|---|
| US Region | -US-2 Region | -US-3 Region | -US-5 Region | -EU Region | -EU-3 Region | -AP-3 Region | -
|
- 52.200.155.111 -52.200.149.44 -50.17.163.75 - |
-
- 34.197.219.58 -34.197.201.45 -34.197.217.71 - |
-
- 34.210.166.180 -34.215.83.92 -34.213.20.158 - |
-
- 54.70.238.217 -52.88.113.98 -52.36.188.230 - |
-
- 52.51.163.159 -52.209.44.60 -52.208.156.247 - |
-
- 34.240.57.142 -52.16.140.48 -52.209.134.55 - |
-
- 52.65.143.178 -13.54.80.197 -52.62.224.4 - |
-
| Incoming IP addresses | -
|---|
| US-A1 Region | -
|
- 40.79.241.76 -52.147.176.136 -20.49.0.170 - |
-
| Outgoing IP addresses | -
|---|
| US-A1 Region | -
|
- 40.79.241.76 -52.147.176.136 -20.49.0.170 - |
-
[['one', 'two', 'three'], ['foo', 'bar']]
var obj = {};
obj[1] = 'bar';Space-separated list of ISO-639 language codes for which to output static view files. (Default is +
Space-separated list of ISO-639 language codes for which to output static view files. (Default is
en_US.)
You can find the list by running bin/magento info:language:list.
Generate files only for the specified languages. The default, with no option specified, is to generate files for all ISO-639 language codes. You can specify the name of one language code at a time. Default value is all.
+Generate files only for the specified languages. The default, with no option specified, is to generate files for all ISO-639 language codes. You can specify the name of one language code at a time. Default value is all.
For example, --language en_US --language es_ES
<SCOPE>__<SYSTEM__VARIABLE__NAME>+`
CONFIG__DEFAULT__<SYSTEM__VARIABLE__NAME>+ `CONFIG__DEFAULT__
CONFIG__STORES__ <STORE_VIEW_CODE>__<SYSTEM__VARIABLE__NAME>+ `CONFIG__STORES__
customer data object in the POST call payload, specify JSON or [XML](https://glossary.magento.com/xml) request body on the call.
### Customers Search API request example {#customers-search-api-request-example}
diff --git a/src/guides/v2.3/graphql/custom-filters.md b/src/guides/v2.3/graphql/custom-filters.md
index cb9ec707358..a5e9c0efeb9 100644
--- a/src/guides/v2.3/graphql/custom-filters.md
+++ b/src/guides/v2.3/graphql/custom-filters.md
@@ -18,7 +18,7 @@ You have several options when enabling a custom attribute (or any attribute that
The [`filter`]({{page.baseurl}}/graphql/queries/products.html#ProductFilterInput) definition for your custom attribute requires one of the following input data types:
- `FilterEqualTypeInput` - Specify this data type when the **Catalog Input Type for Store Owner** field for your custom attribute is set to Yes/No, Select, or Multiple select. Your filter can contain the `eq` or `in` attribute. Use the `eq` attribute to exactly match the specified string. Use the `in` attribute to filter on a comma-separated list of values.
-- `FilterMatchTypeInput` - Specify this data type when the **Catalog Input Type for Store Owner** field for your custom attribute is set to Text Field or Text Area. Your filter must contain the `match` attribute, which will return all items that exactly match the specified string.
+- `FilterMatchTypeInput` - Specify this data type when the **Catalog Input Type for Store Owner** field for your custom attribute is set to Text Field or Text Area. Your filter must contain the `match` attribute, which will return all items that partially fuzzy match the specified string.
- `FilterRangeTypeInput` - Specify this data type when the **Catalog Input Type for Store Owner** field for your custom attribute is set to Price or Date. Your filter can contain one or both of the `to` and `from` attributes, which serve to provide a range of values to filter on.
## Example
diff --git a/src/guides/v2.3/graphql/index.md b/src/guides/v2.3/graphql/index.md
index 91c2de97e8c..1665fc6d05f 100755
--- a/src/guides/v2.3/graphql/index.md
+++ b/src/guides/v2.3/graphql/index.md
@@ -4,7 +4,7 @@ title: GraphQL Overview
landing-page: GraphQL Developer's Guide
---
-[GraphQL](http://graphql.org/) is a data query language developed internally by Facebook in 2012 before being publicly released in 2015. Magento implements GraphQL to provide an alternative to REST and SOAP web APIs for frontend development.
+[GraphQL](https://graphql.org/) is a data query language developed internally by Facebook in 2012 before being publicly released in 2015. Magento implements GraphQL to provide an alternative to REST and SOAP web APIs for frontend development.
## The current state of Magento GraphQL
diff --git a/src/guides/v2.3/graphql/protected-mutations.md b/src/guides/v2.3/graphql/protected-mutations.md
index f9d4552ccbc..6a8d9f2e3aa 100644
--- a/src/guides/v2.3/graphql/protected-mutations.md
+++ b/src/guides/v2.3/graphql/protected-mutations.md
@@ -3,10 +3,19 @@ group: graphql
title: Protected mutations
---
-If CAPTCHA is enabled on pages requiring shopper input, then in most cases, the corresponding mutations that send requests to the Magento server must include the shopper's CAPTCHA response. Supply the shopper's response in the HTTP `X-Captcha` header. The exception to this policy is that you do not send the CAPTCHA response if you specify an integration authorization token in the header of the mutation.
+If CAPTCHA or reCAPTCHA is enabled on pages requiring shopper input, then in most cases, the corresponding mutations that send requests to the Magento server must include an HTTP header that contains a value entered by the shopper (for CAPTCHA) or generated by the Google API (for reCAPTCHA). However, if you specify an integration authorization token in the header of the mutation, then you do not supply a header specific to CAPTCHA or reCAPTCHA.
+
+The HTTP `X-Captcha` and `X-ReCaptcha` headers:
+
+* Cannot be received by an automated script or a non-UI API call. They are captured and returned by the UI Web form only.
+* Are optional in protected mutation API calls that provide **_integration authorization_** tokens only. They cannot be skipped when you provide an Admin or Bearer token.
+
+## CAPTCHA
The following table lists the forms that can be configured to require CAPTCHA. Go to **Stores** > **Configuration** > **Customers** > **Customer Configuration** > **CAPTCHA** > **Forms** to enable or disable CAPTCHA on these forms.
+The mutation that corresponds to a CAPTCHA-enabled form must include the HTTP `X-Captcha` header, along with the text the shopper entered in response to the CAPTCHA challenge.
+
Form name | Mutation
--- | ---
Add Gift Card Code | `applyGiftCardToCart`
@@ -22,6 +31,25 @@ Payflow Pro | `setPaymentMethodOnCart`, `setPaymentMethodAndPlaceOrder`
Send to Friend Form | `sendEmailToFriend`
Share Wishlist Form | Not applicable
+## reCAPTCHA
+
+The following table lists the forms that can be configured to require reCAPTCHA. Go to **Stores** > **Configuration** > **Security** > **Google reCAPTCHA Storefront** > **Storefront** to enable or disable reCAPTCHA on these forms. If reCAPTCHA is enabled, unless an integration token is provided, always specify the HTTP `X-ReCaptcha` header and the value generated by the Google API.
+
+Field name | Mutation
+--- | ---
+Enable for Customer Login | `generateCustomerToken`
+Enable for Forgot Password | `changeCustomerPassword`
+Enable for Create New Customer Account | `createCustomer`
+Enable for Edit Customer Account | `updateCustomer`
+Enable for Contact Us | Not applicable
+Enable for Product Review | `createProductReview`
+Enable for Newsletter Subscription | `subscribeEmailToNewsletter`
+Enable for Send To Friend | `sendEmailToFriend`
+Enable for PayPal PayflowPro payment form | `createPayflowProToken`
+Enable for Braintree payment form | Not applicable
+Enable for Checkout/Placing Order | `setPaymentMethodOnCart`, `setPaymentMethodAndPlaceOrder`
+Enable for Coupon Codes | `applyCouponToCart`
+
{:.ref-header}
Related topics
diff --git a/src/guides/v2.3/graphql/queries/products.md b/src/guides/v2.3/graphql/queries/products.md
index 9f63e818daf..6f0a3a5fb91 100644
--- a/src/guides/v2.3/graphql/queries/products.md
+++ b/src/guides/v2.3/graphql/queries/products.md
@@ -81,11 +81,11 @@ Attribute | Data type | Description
#### FilterMatchTypeInput attributes
-Use the `FilterMatchTypeInput` object to construct a filter that returns products that exactly match a string or contain the specified pattern.
+Use the `FilterMatchTypeInput` object to construct a filter that returns products that partially fuzzy match a string or contain the specified pattern.
Attribute | Data type | Description
--- | --- | ---
-`match` | String | Use this attribute to exactly match the specified string. For example, to filter on a specific SKU, specify a value such as `24-MB01`
+`match` | String | Use this attribute to partially fuzzy match the specified string. For example, to filter on a specific SKU, specify a value such as `24-MB01`
You must specify a `FilterMatchTypeInput` object to filter on a custom product attribute of the following types:
diff --git a/src/guides/v2.3/howdoi/checkout/checkout_address.md b/src/guides/v2.3/howdoi/checkout/checkout_address.md
index e7f0cd7bd4c..197cbc6fb08 100644
--- a/src/guides/v2.3/howdoi/checkout/checkout_address.md
+++ b/src/guides/v2.3/howdoi/checkout/checkout_address.md
@@ -79,7 +79,7 @@ define([
## Step 2: Create a template for the shipping address renderer {#template}
-In your custom module directory, create a new `admin_jkhgdfq....
+...
+...
+...
+...
+...
+HTML has been created to semantically represent documents.
+Warning: Following the procedure described below may irreparably damage your equipment.
+``` + +**Unacceptable:** + +```html +HTML has been created to semantically represent documents.
+Warning: Following the procedure described below may irreparably damage your equipment.
+``` + +## Code demarcation + +### Visual representation must rely only on HTML `class` attributes, CSS pseudo-classes and pseudo-elements, HTML tags, and form element's type attribute and form elements state attributes (example: `disabled`, `checked`). + +As the first option, you are required to use [HTML](https://glossary.magento.com/html) class attributes. In case this option is not applicable then it is recommended to use HTML tags and form element's type attribute. + +- Enforces clean, strict separation between visual and business logic layers. +- Allows [frontend](https://glossary.magento.com/frontend) and [backend](https://glossary.magento.com/backend) teams to work independently. +- Allows changing look and feel without affecting business functionality, and vice versa. +- Enables frontend teams to clean up old styles quickly and easily when refactoring. + +**Acceptable CSS selectors:** + +```css +.notices-wrapper { ... } +.page-header:after { ... } +.payment-list:first-child { ... } +.caution { ... } +.caution.link { ... } +form input[type="password"] { ... } +.control-text:focus { ... } +a:hover { ... } +nav li._active { ... } +``` + +**Unacceptable CSS selectors:** + +```css +#header { ... } +[data-action="delete"] { ... } +form input[name="password"] { ... } +section[role="main"] { ... } +[role="menu] [role="menuitem"] { ... } +[role="menu] [role="menuitem"].active { ... } +``` + +### You must not hard-code CSS styles in JavaScript files + +{% +include note.html +type='info' +content='Exception: CSS attributes where values must be calculated beyond the css-topics/LESS code. + +- Simplifies change of the default look and feel by adding CSS classes to and removing them from elements. +- Improves style extensibility. +- Reduces long-term maintenance efforts by containing CSS styles in a single place.' + +%} + +**Acceptable [JavaScript](https://glossary.magento.com/javascript) [widget](https://glossary.magento.com/widget) file:** + +```js +... + options: { + hOffset: 0, + myCustomElement: '[data-container="my-custom-element"]', + hiddenClass: '_hidden' + } +... + this.element.toggleClass(this.options.hiddenClass); +... + this.options.hOffset = /* calculation based on dimensions of some DOM elements within a widget */ + this.element.find(this.options.myCustomElement).css({'margin-top', this.options.hOffset + 'px'}); +... +``` + +**Unacceptable JavaScript file:** + +```js +this.element.on('click', function() { + if ($(this).is(':visible')) { + $(this).css({ visibility: 'hidden' }); + } else { + $(this).css({ visibility: 'visible' }); + } +}); +``` + +### You must not use inline CSS styles inside HTML tags + +- Improves style extensibility allowing engineers to overload styles easier by toggling classes. +- Enforces clean, strict separation between visual presentation and markup. +- Enables frontend teams quickly and easily clean up old styles. + +**Acceptable PHTML template:** + +```php +
+
+```
+
+**Recommended:**
+
+```html
+
+
+```
+
+## Line length
+
+Avoid code lines longer than 120 characters. When using an editor, it is inconvenient to scroll right and left to read the HTML code. Align tag attributes one under another to increase code readability.
+
+**Inappropriate:**
+
+```html
+
+```
+
+**Recommended:**
+
+```html
+
+```
+
+## Spaces around equals sign ("=")
+
+Spaces around equals sign ("=") are acceptable, but not recommended. The code without spaces is easier to read.
+
+**Not recommended:**
+
+```html
+
+```
+
+**Recommended:**
+
+```html
+
+```
+
+## Spaces and colon in attributes
+
+Use no space before the colon and one space after the colon for the sake of readability.
+
+**Not recommended:**
+
+```html
+
+
+```
+
+**Recommended:**
+
+```html
+
+```
+
+## Block-level elements
+
+Use appropriate HTML5 elements for blocks. The following diagram shows how to define which HTML5 element to use for a block:
+
+
+
+## Class names
+
+Use semantic class names and IDs. Avoid presentational class names.
+
+**Inappropriate:**
+
+```html
+
+```
+
+**Recommended:**
+
+```html
+
+
+```
+
+## Accessibility
+
+All pages should comply with the [Web Content Accessibility Guidelines (WCAG) 2.0](https://www.w3.org/TR/WCAG20/).
+
+## Microdata
+
+All crucial pages (like product page) should contain [microdata](https://www.w3.org/TR/microdata/). Please pay attention to this recommendation when adding new functionality.
diff --git a/src/guides/v2.4/coding-standards/code-standard-javascript.md b/src/guides/v2.4/coding-standards/code-standard-javascript.md
index 7fcad041123..db846e56ab8 100644
--- a/src/guides/v2.4/coding-standards/code-standard-javascript.md
+++ b/src/guides/v2.4/coding-standards/code-standard-javascript.md
@@ -4,12 +4,14 @@ title: JavaScript coding standard
landing-page: Coding standards
functional_areas:
- Standards
+redirect_to: https://developer.adobe.com/commerce/php/coding-standards/js/
+status: migrated
---
Use Magento's [ESLint Rules][eslint-rules] to make sure your code adheres to Magento's coding standards.
Developers writing [JavaScript](https://glossary.magento.com/javascript) and [jQuery](https://glossary.magento.com/jquery) code for Magento must adhere to these guidelines and follow the standards listed in this document.
-Use [RFC 2119](http://www.ietf.org/rfc/rfc2119.txt) to interpret the "must," "must not," "required," "shall," "shall not," "should," "should not," "recommended," "may," and "optional" keywords.
+Use [RFC 2119](https://www.ietf.org/rfc/rfc2119.txt) to interpret the "must," "must not," "required," "shall," "shall not," "should," "should not," "recommended," "may," and "optional" keywords.
Magento uses the [jQuery library][jquery] including standard and custom [jQuery widgets][jquery-widgets].
For the jQuery widget coding standard, see [jQuery widget coding standard][jquery-widget-coding-standard].
@@ -363,9 +365,9 @@ These custom rules are included using the `rulePaths` setting in the [Eslint Gru
The source code of the rules can be found in the [Eslint custom rules folder][eslint-custom-rules-folder].
[jquery]: https://jquery.com/
-[jquery-widgets]: http://api.jqueryui.com/category/widgets
+[jquery-widgets]: https://api.jqueryui.com/category/widgets
[jquery-widget-coding-standard]: {{ page.baseurl }}/coding-standards/code-standard-jquery-widgets.html
-[eslint]: http://eslint.org/
+[eslint]: https://eslint.org/
[eslint-rules]: https://github.com/magento/magento-coding-standard/blob/develop/eslint/.eslintrc-magento
[grunt-eslint-configuration]: {{ site.mage2bloburl }}/{{ page.guide_version }}/dev/tools/grunt/configs/eslint.json
[eslint-custom-rules-folder]: {{ site.mage2bloburl }}/{{ page.guide_version }}/dev/tests/static/testsuite/Magento/Test/Js/_files/eslint/rules/
diff --git a/src/guides/v2.4/coding-standards/code-standard-jquery-widgets.md b/src/guides/v2.4/coding-standards/code-standard-jquery-widgets.md
deleted file mode 120000
index 9ce02c39eab..00000000000
--- a/src/guides/v2.4/coding-standards/code-standard-jquery-widgets.md
+++ /dev/null
@@ -1 +0,0 @@
-../../v2.3/coding-standards/code-standard-jquery-widgets.md
\ No newline at end of file
diff --git a/src/guides/v2.4/coding-standards/code-standard-jquery-widgets.md b/src/guides/v2.4/coding-standards/code-standard-jquery-widgets.md
new file mode 100644
index 00000000000..6251a40ecdb
--- /dev/null
+++ b/src/guides/v2.4/coding-standards/code-standard-jquery-widgets.md
@@ -0,0 +1,357 @@
+---
+group: coding-standards
+subgroup: 01_Coding standards
+title: jQuery widget coding standard
+landing-page: Coding standards
+menu_title: jQuery widget coding standard
+menu_order: 7
+functional_areas:
+ - Standards
+redirect_to: https://developer.adobe.com/commerce/php/coding-standards/jquery-widgets/
+status: migrated
+---
+
+In the Magento system, all jQuery UI widgets and interactions are built on a simple, reusable base---the [jQuery UI Widget Factory][jquery-ui-widget-factory].
+
+The factory provides a flexible base for building complex, stateful plug-ins with a consistent [API](https://glossary.magento.com/api).
+It is designed not only for plug-ins that are part of [jQuery](https://glossary.magento.com/jquery) UI, but for general usage by developers who want to create object-oriented components without reinventing common infrastructure.
+
+For more information, see the [jQuery Widget API documentation][jquery-ui-api-doc].
+
+This standard is mandatory for Magento core developers and recommended for third-party [extension](https://glossary.magento.com/extension) developers.
+Some parts of Magento code might not comply with the standard, but we are working to gradually improve this.
+
+Use [RFC 2119][rfc2119] to interpret the "must," "must not," "required," "shall," "shall not," "should," "should not," "recommended," "may," and "optional" keywords.
+
+## Naming conventions
+
+* [Widget](https://glossary.magento.com/widget) names must consist of one or more non-abbreviated English word and in camelcase format.
+
+ ```javascript
+ (function($) {
+ $.widget('mage.accordion', $.ui.accordion, {
+ // ... My custom code ...
+ });
+ ```
+
+* Widget names should be verbose enough to fully describe their purpose and behavior.
+
+ ```javascript
+ // Declaration of the frontend.advancedEventTrigger widget
+ (function($) {
+ "use strict";
+
+ $.widget('mage.advancedEventTrigger', $.ui.button, {
+ // ... My custom code ...
+ });
+ }) (jQuery);
+ ```
+
+## Instantiation and resources
+
+* Additional [JavaScript](https://glossary.magento.com/javascript) files used as a resources must be dynamically loaded using the `$.mage.components()` method and must not be included in the `` block.
+* Use the `$.mage.components()` method to load additional JavaScript resource files not included in the `` block.
+* You must use `$.mage.extend()` to extend an existing set of widget resources.
+* You must instantiate widgets using the `data-mage-init` attribute.
+ You can use the `.mage()` [plug-in](https://glossary.magento.com/plug-in) to instantiate widgets that use callback methods.
+
+ Benefits:
+
+ * You leverage the benefits of `$.mage.extend()` and `$.mage.components()`.
+ * Using `data-mage-init` minimizes the inline JavaScript code footprint.
+ * You can modify widget initialization parameters.
+
+ ```javascript
+ // Widget initialization using the data-mage-init attribute
+
+
+ // Widget initialization using the mage plug-in
+ (function($) {
+ $('selector').mage('dialog', {
+ close: function(e) {
+ $(this).dialog('destroy');
+ }
+ });
+ })(jQuery);
+ ```
+
+* You can declare callback methods inline JavaScript but not methods and widgets.
+
+ ```javascript
+ // Widget initialization and configuration
+ $('selector').mage('dialog', {
+ close: function(e) {
+ $(this).dialog('destroy');
+ }
+ });
+
+ // Widget initialization and binding event handlers
+ $('selector').mage('dialog').on('dialogclose', {
+ $(this).dialog('destroy');
+ });
+
+ // Extension for widget in a JavaScript file
+ $.widget('mage.dialog', $.ui.dialog, {
+ close: function() {
+ this.destroy();
+ }
+ });
+
+ // Extension of widget resources
+ (function($) {
+ $.mage
+ .extend('dialog', 'dialog',
+ 'getViewFileUrl('Enterprise_\*Module\*::page/js/dialog.js') ?>')
+ })(jQuery);
+ ```
+
+### Initializing a component on a selector
+
+There are two ways to initialize a component on a selector:
+
+* Initialize the component in the `data-mage-init` attribute:
+
+ ```html
+
+ ```
+
+* Use a script type `text/x-magento-init` attribute:
+
+ ```html
+
+ ```
+
+In these cases the path to the file is:
+
+ `Vendor/Module/view/frontend/web/js/jsfilename.js`
+
+ which contains your code:
+
+ ```javascript
+ define(['uiComponent'],
+ function (Component) {
+ 'use strict';
+ return Component.extend({
+ initialize: function (config, node) {
+ // some code
+ }
+ });
+ });
+ ```
+
+### Initializing a component on a selector with parameters
+
+When a component is initialized, it is also important to send parameters to it, which are normally determined dynamically in PHP.
+
+* `data-mage-init`
+
+ ```html
+
+ ```
+
+* Using a script type `text/x-magento-init` attribute. For example:
+
+ ```html
+
+ ```
+
+## Development standards
+
+* Widgets should comply with the [single responsibility principle][single-responsibility-principle].
+
+ Widgets should not have responsibilities not related to the [entity](https://glossary.magento.com/entity) described by the widget.
+
+ ```javascript
+ // Widget "dialog" that is responsible
+ // only for opening content in an interactive overlay.
+ $.widget('mage.dialog', {
+ // Code logic
+ });
+
+ // Widget "validation" that is responsible
+ // only for validating the form fields.
+ $.widget('mage.validation', $.ui.sortable, {
+ // Code logic
+ });
+
+ $('selector')
+ .mage('dialog')
+ .find('form')
+ .mage('validation');
+ ```
+
+* Widget properties that modify the widget's behavior must be located in the widget's options to make them configurable and reusable.
+
+ ```javascript
+ //Declaration of the backend.dialog widget
+ $.widget('mage.dialog', {
+ options: {
+ modal: false,
+ autoOpen: true,
+ // Additional widget options
+ },
+ // Additional widget properties
+ });
+
+ // Initializing
+ $('selector').mage('dialog', {
+ modal: true,
+ autoOpen: false
+ });
+ ```
+
+* Widget communications must be handled by jQuery events
+
+ ```html
+
+ ...
+
+ ...
+
+ ...
+
+ ```
+
+ ```javascript
+ // Declaration of the mage.form widget
+ $.widget("mage.form," {
+ _create: function() {
+ this._bind();
+ },
+ _bind: function() {
+ this._on({
+ save: this._submit
+ })
+ },
+ _submit: function(e, data) {
+ this._rollback();
+ if (false !== this._beforeSubmit(e.type, data)) {
+ this.element.trigger('submit', e);
+ }
+ }
+ });
+ ```
+
+* You must use [DOM event bubbling][dom-event-bubbling] to perform one-way communication between a child widget and its parent widget.
+
+* Widgets must comply with the [Law of Demeter][law-of-demeter] principle.
+
+ Do not instantiate a widget or call a widget's methods inside another widget.
+
+* Make widgets abstract enough so that they can be used anywhere in Magento.
+
+ For example, the `mage.dropdown` widget is applicable in many other scenarios, unlike `mage.topShoppingCart`.
+
+* Place abstract, share-able widgets under the `