{"jsonapi":{"version":"1.0","meta":{"links":{"self":{"href":"http:\/\/jsonapi.org\/format\/1.0\/"}}}},"data":[{"type":"node--project_module","id":"6f8d5b16-b15d-4f5c-b94c-c00c80210f2d","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/6f8d5b16-b15d-4f5c-b94c-c00c80210f2d?resourceVersion=id%3A20051321"}},"attributes":{"drupal_internal__nid":3187132,"status":true,"title":"Editoria11y Accessibility Checker","created":"2020-12-08T01:52:59+00:00","changed":"2025-01-13T05:20:03+00:00","body":{"value":"\u003Cp\u003EEditoria11y (\u0022editorial accessibility ally\u0022) is built around three key needs for ongoing content quality assurance:\u003C\/p\u003E\r\n    \r\n\u003Col\u003E\r\n  \u003Cli\u003EIt checks \u003Cstrong\u003Eautomatically\u003C\/strong\u003E. Authors do not need be taught to (and remember to!) press a button or visit a dashboard.\u003Cbr\u003E\u0026nbsp;\u003C\/li\u003E\r\n  \u003Cli\u003EIt checks \u003Cstrong\u003Erendered content\u003C\/strong\u003E, allowing it to detect issues that only appear after Drupal assembles the page.\u003Cbr\u003E\u0026nbsp;\u003C\/li\u003E\r\n  \u003Cli\u003EIt focuses \u003Cstrong\u003Eexclusively on content issues\u003C\/strong\u003E: inserting alerts and tooltips to assist authors at fixing the things that are their responsibility, without confusing or annoying them with code or theme issues. Editoria11y is meant to supplement, not replace, \u003Ca href=\u0022https:\/\/webaim.org\/resources\/evalquickref\/\u0022\u003Etesting with comprehensive tools and real assistive devices\u003C\/a\u003E.\u003Cbr\u003E\u0026nbsp;\u003C\/li\u003E\r\n\u003C\/ol\u003E\r\n\r\n\u003Ch2\u003EDemo\u003C\/h2\u003E\r\n\u003Cp\u003ENote that these show what an \u003Cstrong\u003E\u003Cem\u003Eauthor\u003C\/em\u003E\u003C\/strong\u003E would experience; the Editoria11y checker does not appear for anonymous users on a real site.\u003C\/p\u003E\r\n\u003Cul\u003E\r\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/editoria11y.princeton.edu\/demo\/\u0022\u003E\u003Cstrong\u003EAuthor\u0027s view of the checker interactive demo\u003C\/strong\u003E\u003C\/a\u003E\u003Cbr\u003E\u0026nbsp;\u003C\/li\u003E\r\n\u003Cli\u003E\u003Cstrong\u003E\u003Ca href=\u0022https:\/\/jjameson.mycpanel.princeton.edu\/editoria11y\/admin\/reports\/editoria11y\u0022\u003ESite-wide report demo\u003C\/a\u003E\u003C\/strong\u003E\u003Cbr\u003E\u0026nbsp;\u003C\/li\u003E\r\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/youtu.be\/9hev_6L8SPk?feature=shared\u0026t=764\u0022\u003E\u003Cstrong\u003EVideo tour: \u003C\/strong\u003E \u003Cbr\u003E\u003Cimg src=\u0022https:\/\/www.drupal.org\/files\/govcon-editoria11y.png\u0022 alt=\u0022Content creators want automatic accessibility checks\u0022 width=\u0022300\u0022\u003E\u003C\/a\u003E\u0026nbsp;\u003C\/li\u003E\r\n\u003C\/ul\u003E\r\n\r\n\u003Cp\u003E\u0026nbsp;\u003C\/p\u003E\r\n\r\n\u003Ch2\u003EThe authoring experience\u003C\/h2\u003E\r\n\r\n\u003Cp\u003EWhen authenticated users with appropriate roles are viewing pages, Editoria11y\u0027s toggle indicates what was found (no issues, some definite issues found, only some manual checks needed):\u003C\/p\u003E\r\n\u003Cimg src=\u0022https:\/\/www.drupal.org\/files\/toggles_3.png\u0022 alt=\u0022toggle with no issues, 3 issues and 26 issues\u0022 \/\u003E\r\n\r\n\u003Cp\u003EWhen the toggle is clicked, alerts are placed on elements with issues, with tooltips that explain the problem and what actions are needed to resolve it. If the item might be a false positive, buttons are available to ignore the alert on this page for the current user or for all users (\u0022Mark as Checked and OK\u0022). By default, these alerts appear automatically the first time new issues are detected:\u003C\/p\u003E\r\n\r\n\u003Cimg src=\u0022\/files\/manual-check-needed.png\u0022 alt=\u0022Open tooltip indicating a manual check is needed for a link labelled only \u0022click here\u0022\u0022 \/\u003E\r\n\r\n\r\n\u003Cp\u003EThe main panel allows authors to step through the issues on the page, restore previously dismissed alerts, and visualize \u003Ca href=\u0022https:\/\/accessibility.princeton.edu\/how\/content\/alternative-text\u0022\u003Etext alternatives for images on the page\u003C\/a\u003E (\u0022alts\u0022) and the \u003Ca href=\u0022https:\/\/accessibility.princeton.edu\/how\/content\/headings\u0022\u003Edocument\u0027s heading outline\u003C\/a\u003E.\u003C\/p\u003E\r\n\r\n\u003Cimg src=\u0022\/files\/alt-text-visualization.png\u0022 alt=\u0022Alt text overlaid on an image, and shown on main panel in list of thumbnails\u0022 \/\u003E\r\n\r\n\u003Cp\u003EWhen sync is enabled, all issues detected can be reviewed in the Reports section of the administrative toolbar:\u003C\/p\u003E\r\n\u003Cimg src=\u0022\/files\/Screen%20Shot%202022-09-26%20at%2010.46.09%20AM.png\u0022 alt=\u0022Admin results tables showing most recent issues and issues organized by type.\u0022 \/\u003E\r\n\r\n\u003Cp\u003E\u0026nbsp;\u003C\/p\u003E\r\n\r\n\u003Ch3\u003EThe tests\u003C\/h3\u003E\r\n\r\n\u003Cul\u003E\r\n\t\u003Cli\u003E\u003Ca href=\u0022https:\/\/accessibility.princeton.edu\/how\/content\/alternative-text\u0022\u003EText alternatives\u003C\/a\u003E\r\n\t\u003Cul\u003E\r\n\t\t\u003Cli\u003EImages with no alt text\u003C\/li\u003E\r\n\t\t\u003Cli\u003EImages with a filename as alt text\u003C\/li\u003E\r\n\t\t\u003Cli\u003EImages with very long alt text\u003C\/li\u003E\r\n\t\t\u003Cli\u003EAlt text that contains redundant text like \u201cimage of\u201d or \u201cphoto of\u201d\u003C\/li\u003E\r\n\t\t\u003Cli\u003EImages in links with alt text that appears to be describing the image instead of the link destination\u003C\/li\u003E\r\n\t\t\u003Cli\u003EEmbedded visualizations that usually require a text alternative\u003C\/li\u003E\r\n\t\u003C\/ul\u003E\r\n\t\u003C\/li\u003E\r\n\t\u003Cli\u003E\u003Ca href=\u0022https:\/\/accessibility.princeton.edu\/how\/content\/links\u0022\u003EMeaningful links\u003C\/a\u003E\r\n\t\u003Cul\u003E\r\n\t\t\u003Cli\u003ELinks with no text\u003C\/li\u003E\r\n\t\t\u003Cli\u003ELinks titled with a filename\u003C\/li\u003E\r\n\t\t\u003Cli\u003ELinks only titled with generic text: \u201cclick here,\u201d \u201clearn more,\u201d \u201cdownload,\u201d etc.\u003C\/li\u003E\r\n\t\t\u003Cli\u003ELinks that open in a new window without warning\u003C\/li\u003E\r\n\t\u003C\/ul\u003E\r\n\t\u003C\/li\u003E\r\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/accessibility.princeton.edu\/how\/content\/headings\u0022\u003EDocument outline and structure\u003C\/a\u003E\r\n\t\u003Cul\u003E\r\n\t\t\u003Cli\u003ESkipped heading levels\u003C\/li\u003E\r\n\t\t\u003Cli\u003EEmpty headings\u003C\/li\u003E\r\n\t\t\u003Cli\u003EVery long headings\u003C\/li\u003E\r\n                \u003Cli\u003ESuspiciously short blockquotes that may actually be headings\u003C\/li\u003E\r\n                \u003Cli\u003EAll-bold paragraphs with no punctuation that may actually be headings\u003C\/li\u003E\r\n                \u003Cli\u003ESuspicious formatting that should probably be converted to a list (asterisks and incrementing numbers\/letters prefixes)\u003C\/li\u003E\r\n\u003Cli\u003ETables without headers and tables with document headers (\u0022Header 3\u0022) instead of table headers (\u0026lt;th\u0026gt;)\u003C\/li\u003E\r\n\t\u003C\/ul\u003E\r\n\t\u003C\/li\u003E\r\n\u003Cli\u003EGeneral quality assurance\r\n\u003Cul\u003E\r\n\t\u003Cli\u003ELARGE QUANTITIES OF CAPS LOCK TEXT\u003C\/li\u003E\r\n\t\u003Cli\u003ELinks to PDFs and other documents, reminding the user to test the download for accessibility or provide an alternate, accessible format\u003C\/li\u003E\r\n\t\u003Cli\u003EVideo embeds, reminding the user to add closed captions\u003C\/li\u003E\r\n\t\u003Cli\u003EAudio embeds, reminding the user to provide a transcript\u003C\/li\u003E\r\n\t\u003Cli\u003ESocial media embeds, reminding the user to provide alt elements\u003C\/li\u003E\u003C\/ul\u003E\r\n\u003C\/li\u003E\r\n\u003C\/ul\u003E\r\n\r\n\r\n\u003Cp\u003E\u0026nbsp;\u003C\/p\u003E\r\n\r\n\r\n\u003Ch2\u003EInstallation and configuration\u003C\/h2\u003E\r\n\r\n\u003Cp\u003EIf you are installing from the command line, do note the \u003Ca href=\u0022https:\/\/www.a11yproject.com\/\u0022\u003E\u0022eleventy\u0022\u003C\/a\u003E when spelling the module\u0027s name! Those are not L\u0027s.\u003C\/p\u003E\r\n\r\n\u003Cp\u003EEditoria11y\u0027s default configuration should work decently out of the box on most sites, but the following things should be reviewed before telling content authors it is good to go:\u003C\/p\u003E\r\n\u003Col\u003E\r\n\u003Cli\u003E\u003Cstrong\u003EReview roles and permissions\u003C\/strong\u003E. Users must have the \u0022View Editoria11y Checker\u0022 permission to see the checker, and there are \u003Cstrong\u003Eseparate\u003C\/strong\u003E permissions to enable the \u0022ignore\u0022 and \u0022mark OK\u0022 buttons, and to review the site-wide reports. The module attempts to enable the first two by default on roles with common node edit permissions; you should add \u0022mark OK\u0022 to trusted roles and \u0022view dashboard\u0022 as you deem fit.\u003C\/li\u003E\r\n\u003Cli\u003ESelect a color theme that works well with your site. Light and dark are available in the GUI; custom colors can be injected using JS parameters.\u003C\/li\u003E\r\n\u003Cli\u003EOn the module configuration page, set the checker to check regions your editors can modify (e.g., \u0022main, #footer-content\u0022).\u003C\/li\u003E\r\n\u003Cli\u003EClick through key pages and at least one page for each content type on your site, paying special attention to custom views and embeds, to look for theme-level issues or false positives. Fix these issues before rolling the module out, or add selectors to the module configuration\u0027s \u0022skip over these elements\u0022 list to suppress repeated alerts (e.g., \u0022#sidebar-menu a, .custom-card-view h3\u0022). Please do not skip this step! You will prevent frustration for your editors, and viewing the nodes will populate your reporting dashboard.\u003C\/li\u003E\r\n\u003Cli\u003ETell us how it went! This module and its base library are both under active development. Send thoughts through the issue queue or find \u003Ccode\u003Eitmaybejj\u003C\/code\u003E on the Drupal Slack\u003C\/li\u003E\r\n\u003C\/ol\u003E\r\n\r\n\u003Cp\u003EThere are many additional configuration options available on the module page for more complicated situations: selectors for shadow components to check, changes to which document filetypes should be flagged, the ability to disable checking if certain selectors are present (code-only pages) or absent (user does not have an edit button on this content type), etc.\u003C\/p\u003E\r\n\r\n\u003Cp\u003EThe ReadMe also details a method for developers to programmatically modify JS parameters at runtime, which can be used to inject custom defaults on multi-site installs, handle long skip-element lists without cluttering the GUI, modify the color scheme or even rewrite tooltip messages.\u003C\/p\u003E\r\n\r\n\u003Cp\u003EAlso note that the library dispatches JavaScript events at key moments (scan finishes, panel opens, tooltip opens or shuts...), allowing developers to attach custom functionality. JavaScript on sites running Editoria11y can watch for these events to automatically open accordion widgets if they contain hidden alerts, to disable \u0022sticky\u0022 site menus when the panel opens, or even to sync the count and type of alerts found to third-party analytics platforms.\u003C\/p\u003E\r\n\r\n\u003Cp\u003E\u0026nbsp;\u003C\/p\u003E\r\n\r\n\u003Ch2\u003ESee also\u003C\/h2\u003E\r\n\u003Cul\u003E\r\n\u003Cli\u003EThe Editoria11y library is developed in parallel with the \u003Ca href=\u0022https:\/\/sa11y.netlify.app\/\u0022\u003ESa11y accessibility checker\u003C\/a\u003E, and they have almost identical core test suites. Editoria11y focuses on providing a minimalist GUI and provides additional admin-facing tools like site-wide reporting and dismissal governance; Sa11y provides additional author-facing tools like color checking and readability scoring. There is a \u003Ca href=\u0022https:\/\/www.drupal.org\/project\/sa11y\u0022\u003EDrupal wrapper for Sa11y\u003C\/a\u003E.\u003C\/li\u003E\r\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/decorative_image_widget\u0022\u003EDecorative Image Widget\u003C\/a\u003E makes alt text required unless the user checks a box to affirm the image is decorative.\u003C\/li\u003E\r\n\u003C\/ul\u003E\r\n\u003Cp\u003ENote that modules that claim they can \u003Cstrong\u003E\u003Cem\u003Efix\u003C\/em\u003E\u003C\/strong\u003E issues automatically based on AI or the like, or provide untested at-runtime theme modifications, are \u003Ca href=\u0022https:\/\/overlayfactsheet.com\/\u0022\u003Enot recommended by many disabled Web users\u003C\/a\u003E.\u003C\/p\u003E\u003Cp\u003E\u0026nbsp;\u003C\/p\u003E\r\n\r\n\r\n\u003Ch2\u003EAdvanced configuration and custom tests\u003C\/h2\u003E\r\nThe \u003Ca href=\u0022https:\/\/editoria11y.princeton.edu\/configuration\/\u0022\u003E\u003Cstrong\u003Elibrary configuration guide\u003C\/strong\u003E\u003C\/a\u003E has details and examples for parameters not exposed in the GUI, including how to write custom tests and how to open tabs and accordions before highlighting hidden alerts. The \u003Ca href=\u0022https:\/\/git.drupalcode.org\/project\/editoria11y\/-\/blob\/2.1.x\/README.md#extending-and-modifying-editorially\u0022\u003E\u003Cstrong\u003Emodule ReadMe has instructions for modifying these parameters\u003C\/strong\u003E\u003C\/a\u003E within a Drupal theme or module.\r\n\r\n\u003Cp\u003E\u0026nbsp;\u003C\/p\u003E\r\n\r\n\u003Ch2\u003EProject Info\u003C\/h2\u003E","format":"1","processed":"\u003Cdiv class=\u0022toc-filter\u0022\u003E\u003Cp\u003EEditoria11y (\u0022editorial accessibility ally\u0022) is built around three key needs for ongoing content quality assurance:\u003C\/p\u003E\n\u003Col\u003E\n\u003Cli\u003EIt checks \u003Cstrong\u003Eautomatically\u003C\/strong\u003E. Authors do not need be taught to (and remember to!) press a button or visit a dashboard.\u003Cbr\u003E\u0026nbsp;\u003C\/li\u003E\n\u003Cli\u003EIt checks \u003Cstrong\u003Erendered content\u003C\/strong\u003E, allowing it to detect issues that only appear after Drupal assembles the page.\u003Cbr\u003E\u0026nbsp;\u003C\/li\u003E\n\u003Cli\u003EIt focuses \u003Cstrong\u003Eexclusively on content issues\u003C\/strong\u003E: inserting alerts and tooltips to assist authors at fixing the things that are their responsibility, without confusing or annoying them with code or theme issues. Editoria11y is meant to supplement, not replace, \u003Ca href=\u0022https:\/\/webaim.org\/resources\/evalquickref\/\u0022 rel=\u0022nofollow\u0022\u003Etesting with comprehensive tools and real assistive devices\u003C\/a\u003E.\u003Cbr\u003E\u0026nbsp;\u003C\/li\u003E\n\u003C\/ol\u003E\n\u003Ca href=\u0022#top\u0022 class=\u0022back-to-top\u0022\u003EBack to top\u003C\/a\u003E\n\n\u003Ch2 id=\u0022demo\u0022\u003EDemo\u003C\/h2\u003E\n\u003Cp\u003ENote that these show what an \u003Cstrong\u003E\u003Cem\u003Eauthor\u003C\/em\u003E\u003C\/strong\u003E would experience; the Editoria11y checker does not appear for anonymous users on a real site.\u003C\/p\u003E\n\u003Cul\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/editoria11y.princeton.edu\/demo\/\u0022 rel=\u0022nofollow\u0022\u003E\u003Cstrong\u003EAuthor\u0027s view of the checker interactive demo\u003C\/strong\u003E\u003C\/a\u003E\u003Cbr\u003E\u0026nbsp;\u003C\/li\u003E\n\u003Cli\u003E\u003Cstrong\u003E\u003Ca href=\u0022https:\/\/jjameson.mycpanel.princeton.edu\/editoria11y\/admin\/reports\/editoria11y\u0022 rel=\u0022nofollow\u0022\u003ESite-wide report demo\u003C\/a\u003E\u003C\/strong\u003E\u003Cbr\u003E\u0026nbsp;\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/youtu.be\/9hev_6L8SPk?feature=shared\u0026amp;t=764\u0022 rel=\u0022nofollow\u0022\u003E\u003Cstrong\u003EVideo tour: \u003C\/strong\u003E \u003Cbr\u003E\u003Cimg src=\u0022\/core\/misc\/icons\/e32700\/error.svg\u0022 alt=\u0022Image removed.\u0022 width=\u002216\u0022 title=\u0022This image has been removed. For security reasons, only images from the local domain are allowed.\u0022 height=\u002216\u0022 class=\u0022filter-image-invalid\u0022\u003E\u003C\/a\u003E\u0026nbsp;\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Cp\u003E\u0026nbsp;\u003C\/p\u003E\n\u003Ca href=\u0022#top\u0022 class=\u0022back-to-top\u0022\u003EBack to top\u003C\/a\u003E\n\n\u003Ch2 id=\u0022the-authoring-experience\u0022\u003EThe authoring experience\u003C\/h2\u003E\n\u003Cp\u003EWhen authenticated users with appropriate roles are viewing pages, Editoria11y\u0027s toggle indicates what was found (no issues, some definite issues found, only some manual checks needed):\u003C\/p\u003E\n\u003Cp\u003E\u003Cimg src=\u0022\/core\/misc\/icons\/e32700\/error.svg\u0022 alt=\u0022Image removed.\u0022 title=\u0022This image has been removed. For security reasons, only images from the local domain are allowed.\u0022 height=\u002216\u0022 width=\u002216\u0022 class=\u0022filter-image-invalid\u0022\u003E\u003C\/p\u003E\n\u003Cp\u003EWhen the toggle is clicked, alerts are placed on elements with issues, with tooltips that explain the problem and what actions are needed to resolve it. If the item might be a false positive, buttons are available to ignore the alert on this page for the current user or for all users (\u0022Mark as Checked and OK\u0022). By default, these alerts appear automatically the first time new issues are detected:\u003C\/p\u003E\n\u003Cp\u003E\u003Cimg src=\u0022\/core\/misc\/icons\/e32700\/error.svg\u0022 alt=\u0022Image removed.\u0022 title=\u0022This image has been removed. For security reasons, only images from the local domain are allowed.\u0022 height=\u002216\u0022 width=\u002216\u0022 class=\u0022filter-image-invalid\u0022\u003E\u003C\/p\u003E\n\u003Cp\u003EThe main panel allows authors to step through the issues on the page, restore previously dismissed alerts, and visualize \u003Ca href=\u0022https:\/\/accessibility.princeton.edu\/how\/content\/alternative-text\u0022 rel=\u0022nofollow\u0022\u003Etext alternatives for images on the page\u003C\/a\u003E (\u0022alts\u0022) and the \u003Ca href=\u0022https:\/\/accessibility.princeton.edu\/how\/content\/headings\u0022 rel=\u0022nofollow\u0022\u003Edocument\u0027s heading outline\u003C\/a\u003E.\u003C\/p\u003E\n\u003Cp\u003E\u003Cimg src=\u0022\/core\/misc\/icons\/e32700\/error.svg\u0022 alt=\u0022Image removed.\u0022 title=\u0022This image has been removed. For security reasons, only images from the local domain are allowed.\u0022 height=\u002216\u0022 width=\u002216\u0022 class=\u0022filter-image-invalid\u0022\u003E\u003C\/p\u003E\n\u003Cp\u003EWhen sync is enabled, all issues detected can be reviewed in the Reports section of the administrative toolbar:\u003C\/p\u003E\n\u003Cp\u003E\u003Cimg src=\u0022\/core\/misc\/icons\/e32700\/error.svg\u0022 alt=\u0022Image removed.\u0022 title=\u0022This image has been removed. For security reasons, only images from the local domain are allowed.\u0022 height=\u002216\u0022 width=\u002216\u0022 class=\u0022filter-image-invalid\u0022\u003E\u003C\/p\u003E\n\u003Cp\u003E\u0026nbsp;\u003C\/p\u003E\n\u003Ch3 id=\u0022the-tests\u0022\u003EThe tests\u003C\/h3\u003E\n\u003Cul\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/accessibility.princeton.edu\/how\/content\/alternative-text\u0022 rel=\u0022nofollow\u0022\u003EText alternatives\u003C\/a\u003E\n\u003Cul\u003E\n\u003Cli\u003EImages with no alt text\u003C\/li\u003E\n\u003Cli\u003EImages with a filename as alt text\u003C\/li\u003E\n\u003Cli\u003EImages with very long alt text\u003C\/li\u003E\n\u003Cli\u003EAlt text that contains redundant text like \u201cimage of\u201d or \u201cphoto of\u201d\u003C\/li\u003E\n\u003Cli\u003EImages in links with alt text that appears to be describing the image instead of the link destination\u003C\/li\u003E\n\u003Cli\u003EEmbedded visualizations that usually require a text alternative\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/accessibility.princeton.edu\/how\/content\/links\u0022 rel=\u0022nofollow\u0022\u003EMeaningful links\u003C\/a\u003E\n\u003Cul\u003E\n\u003Cli\u003ELinks with no text\u003C\/li\u003E\n\u003Cli\u003ELinks titled with a filename\u003C\/li\u003E\n\u003Cli\u003ELinks only titled with generic text: \u201cclick here,\u201d \u201clearn more,\u201d \u201cdownload,\u201d etc.\u003C\/li\u003E\n\u003Cli\u003ELinks that open in a new window without warning\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/accessibility.princeton.edu\/how\/content\/headings\u0022 rel=\u0022nofollow\u0022\u003EDocument outline and structure\u003C\/a\u003E\n\u003Cul\u003E\n\u003Cli\u003ESkipped heading levels\u003C\/li\u003E\n\u003Cli\u003EEmpty headings\u003C\/li\u003E\n\u003Cli\u003EVery long headings\u003C\/li\u003E\n\u003Cli\u003ESuspiciously short blockquotes that may actually be headings\u003C\/li\u003E\n\u003Cli\u003EAll-bold paragraphs with no punctuation that may actually be headings\u003C\/li\u003E\n\u003Cli\u003ESuspicious formatting that should probably be converted to a list (asterisks and incrementing numbers\/letters prefixes)\u003C\/li\u003E\n\u003Cli\u003ETables without headers and tables with document headers (\u0022Header 3\u0022) instead of table headers (\u0026lt;th\u0026gt;)\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003C\/li\u003E\n\u003Cli\u003EGeneral quality assurance\n\u003Cul\u003E\n\u003Cli\u003ELARGE QUANTITIES OF CAPS LOCK TEXT\u003C\/li\u003E\n\u003Cli\u003ELinks to PDFs and other documents, reminding the user to test the download for accessibility or provide an alternate, accessible format\u003C\/li\u003E\n\u003Cli\u003EVideo embeds, reminding the user to add closed captions\u003C\/li\u003E\n\u003Cli\u003EAudio embeds, reminding the user to provide a transcript\u003C\/li\u003E\n\u003Cli\u003ESocial media embeds, reminding the user to provide alt elements\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Cp\u003E\u0026nbsp;\u003C\/p\u003E\n\u003Ca href=\u0022#top\u0022 class=\u0022back-to-top\u0022\u003EBack to top\u003C\/a\u003E\n\n\u003Ch2 id=\u0022installation-and-configuration\u0022\u003EInstallation and configuration\u003C\/h2\u003E\n\u003Cp\u003EIf you are installing from the command line, do note the \u003Ca href=\u0022https:\/\/www.a11yproject.com\/\u0022 rel=\u0022nofollow\u0022\u003E\u0022eleventy\u0022\u003C\/a\u003E when spelling the module\u0027s name! Those are not L\u0027s.\u003C\/p\u003E\n\u003Cp\u003EEditoria11y\u0027s default configuration should work decently out of the box on most sites, but the following things should be reviewed before telling content authors it is good to go:\u003C\/p\u003E\n\u003Col\u003E\n\u003Cli\u003E\u003Cstrong\u003EReview roles and permissions\u003C\/strong\u003E. Users must have the \u0022View Editoria11y Checker\u0022 permission to see the checker, and there are \u003Cstrong\u003Eseparate\u003C\/strong\u003E permissions to enable the \u0022ignore\u0022 and \u0022mark OK\u0022 buttons, and to review the site-wide reports. The module attempts to enable the first two by default on roles with common node edit permissions; you should add \u0022mark OK\u0022 to trusted roles and \u0022view dashboard\u0022 as you deem fit.\u003C\/li\u003E\n\u003Cli\u003ESelect a color theme that works well with your site. Light and dark are available in the GUI; custom colors can be injected using JS parameters.\u003C\/li\u003E\n\u003Cli\u003EOn the module configuration page, set the checker to check regions your editors can modify (e.g., \u0022main, #footer-content\u0022).\u003C\/li\u003E\n\u003Cli\u003EClick through key pages and at least one page for each content type on your site, paying special attention to custom views and embeds, to look for theme-level issues or false positives. Fix these issues before rolling the module out, or add selectors to the module configuration\u0027s \u0022skip over these elements\u0022 list to suppress repeated alerts (e.g., \u0022#sidebar-menu a, .custom-card-view h3\u0022). Please do not skip this step! You will prevent frustration for your editors, and viewing the nodes will populate your reporting dashboard.\u003C\/li\u003E\n\u003Cli\u003ETell us how it went! This module and its base library are both under active development. Send thoughts through the issue queue or find \u003Ccode\u003Eitmaybejj\u003C\/code\u003E on the Drupal Slack\u003C\/li\u003E\n\u003C\/ol\u003E\n\u003Cp\u003EThere are many additional configuration options available on the module page for more complicated situations: selectors for shadow components to check, changes to which document filetypes should be flagged, the ability to disable checking if certain selectors are present (code-only pages) or absent (user does not have an edit button on this content type), etc.\u003C\/p\u003E\n\u003Cp\u003EThe ReadMe also details a method for developers to programmatically modify JS parameters at runtime, which can be used to inject custom defaults on multi-site installs, handle long skip-element lists without cluttering the GUI, modify the color scheme or even rewrite tooltip messages.\u003C\/p\u003E\n\u003Cp\u003EAlso note that the library dispatches JavaScript events at key moments (scan finishes, panel opens, tooltip opens or shuts...), allowing developers to attach custom functionality. JavaScript on sites running Editoria11y can watch for these events to automatically open accordion widgets if they contain hidden alerts, to disable \u0022sticky\u0022 site menus when the panel opens, or even to sync the count and type of alerts found to third-party analytics platforms.\u003C\/p\u003E\n\u003Cp\u003E\u0026nbsp;\u003C\/p\u003E\n\u003Ca href=\u0022#top\u0022 class=\u0022back-to-top\u0022\u003EBack to top\u003C\/a\u003E\n\n\u003Ch2 id=\u0022see-also\u0022\u003ESee also\u003C\/h2\u003E\n\u003Cul\u003E\n\u003Cli\u003EThe Editoria11y library is developed in parallel with the \u003Ca href=\u0022https:\/\/sa11y.netlify.app\/\u0022 rel=\u0022nofollow\u0022\u003ESa11y accessibility checker\u003C\/a\u003E, and they have almost identical core test suites. Editoria11y focuses on providing a minimalist GUI and provides additional admin-facing tools like site-wide reporting and dismissal governance; Sa11y provides additional author-facing tools like color checking and readability scoring. There is a \u003Ca href=\u0022https:\/\/www.drupal.org\/project\/sa11y\u0022 rel=\u0022nofollow\u0022\u003EDrupal wrapper for Sa11y\u003C\/a\u003E.\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/decorative_image_widget\u0022 rel=\u0022nofollow\u0022\u003EDecorative Image Widget\u003C\/a\u003E makes alt text required unless the user checks a box to affirm the image is decorative.\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Cp\u003ENote that modules that claim they can \u003Cstrong\u003E\u003Cem\u003Efix\u003C\/em\u003E\u003C\/strong\u003E issues automatically based on AI or the like, or provide untested at-runtime theme modifications, are \u003Ca href=\u0022https:\/\/overlayfactsheet.com\/\u0022 rel=\u0022nofollow\u0022\u003Enot recommended by many disabled Web users\u003C\/a\u003E.\u003C\/p\u003E\n\u003Cp\u003E\u0026nbsp;\u003C\/p\u003E\n\u003Ca href=\u0022#top\u0022 class=\u0022back-to-top\u0022\u003EBack to top\u003C\/a\u003E\n\n\u003Ch2 id=\u0022advanced-configuration-and-custom-tests\u0022\u003EAdvanced configuration and custom tests\u003C\/h2\u003E\n\u003Cp\u003EThe \u003Ca href=\u0022https:\/\/editoria11y.princeton.edu\/configuration\/\u0022 rel=\u0022nofollow\u0022\u003E\u003Cstrong\u003Elibrary configuration guide\u003C\/strong\u003E\u003C\/a\u003E has details and examples for parameters not exposed in the GUI, including how to write custom tests and how to open tabs and accordions before highlighting hidden alerts. The \u003Ca href=\u0022https:\/\/git.drupalcode.org\/project\/editoria11y\/-\/blob\/2.1.x\/README.md#extending-and-modifying-editorially\u0022 rel=\u0022nofollow\u0022\u003E\u003Cstrong\u003Emodule ReadMe has instructions for modifying these parameters\u003C\/strong\u003E\u003C\/a\u003E within a Drupal theme or module.\u003C\/p\u003E\n\u003Cp\u003E\u0026nbsp;\u003C\/p\u003E\n\u003Ca href=\u0022#top\u0022 class=\u0022back-to-top\u0022\u003EBack to top\u003C\/a\u003E\n\n\u003Ch2 id=\u0022project-info\u0022\u003EProject Info\u003C\/h2\u003E\u003Ca href=\u0022#top\u0022 class=\u0022back-to-top\u0022\u003EBack to top\u003C\/a\u003E\u003C\/div\u003E","summary":"Editoria11y is an automatic (not manual!) accessibility checker focused exclusively on flagging issues a content editor can easily fix."},"field_active_installs":"{\u00221.0.x\u0022:123,\u00227.x-1.x\u0022:13,\u00222.0.x\u0022:546,\u00222.1.x\u0022:14288,\u00222.2.x\u0022:194}","field_active_installs_total":15164,"field_composer_namespace":"drupal\/editoria11y","field_composer_types":[],"field_core_semver_maximum":12000000,"field_core_semver_minimum":8000000,"field_issue_summary_template":null,"field_logo_url":null,"field_project_has_releases":true,"field_project_machine_name":"editoria11y","field_security_advisory_coverage":"covered"},"relationships":{"uid":{"data":{"type":"user--user","id":"ebd9c743-897d-4c43-aaf8-b9e1acfe8e26","meta":{"drupal_internal__target_id":1177504}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/6f8d5b16-b15d-4f5c-b94c-c00c80210f2d\/uid?resourceVersion=id%3A20051321"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/6f8d5b16-b15d-4f5c-b94c-c00c80210f2d\/relationships\/uid?resourceVersion=id%3A20051321"}}},"field_development_status":{"data":{"type":"taxonomy_term--development_status","id":"e767288c-9800-4fb4-aeb8-8c311533838a","meta":{"drupal_internal__target_id":27274}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/6f8d5b16-b15d-4f5c-b94c-c00c80210f2d\/field_development_status?resourceVersion=id%3A20051321"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/6f8d5b16-b15d-4f5c-b94c-c00c80210f2d\/relationships\/field_development_status?resourceVersion=id%3A20051321"}}},"field_maintenance_status":{"data":{"type":"taxonomy_term--maintenance_status","id":"089406ad-304d-4737-80d1-2f08527ae49e","meta":{"drupal_internal__target_id":27271}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/6f8d5b16-b15d-4f5c-b94c-c00c80210f2d\/field_maintenance_status?resourceVersion=id%3A20051321"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/6f8d5b16-b15d-4f5c-b94c-c00c80210f2d\/relationships\/field_maintenance_status?resourceVersion=id%3A20051321"}}},"field_module_categories":{"data":[{"type":"taxonomy_term--module_categories","id":"3df293b3-c9a1-4232-962b-3c8169e8e6e3","meta":{"drupal_internal__target_id":203}},{"type":"taxonomy_term--module_categories","id":"86237004-3801-40cf-96b5-fe7d60efccb5","meta":{"drupal_internal__target_id":187}},{"type":"taxonomy_term--module_categories","id":"01df2105-2397-4a0e-b34c-80da1c3b1208","meta":{"drupal_internal__target_id":201}}],"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/6f8d5b16-b15d-4f5c-b94c-c00c80210f2d\/field_module_categories?resourceVersion=id%3A20051321"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/6f8d5b16-b15d-4f5c-b94c-c00c80210f2d\/relationships\/field_module_categories?resourceVersion=id%3A20051321"}}},"field_project_images":{"data":[{"type":"file--file","id":"02ee2895-127b-4aa3-8c05-f120c585da46","meta":{"alt":"Alert panel showing no errors","title":null,"width":470,"height":182,"drupal_internal__target_id":34682}}],"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/6f8d5b16-b15d-4f5c-b94c-c00c80210f2d\/field_project_images?resourceVersion=id%3A20051321"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/6f8d5b16-b15d-4f5c-b94c-c00c80210f2d\/relationships\/field_project_images?resourceVersion=id%3A20051321"}}}}},{"type":"node--project_module","id":"9ea06ebb-d5e9-46cb-b5a1-c7db73cf2283","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/9ea06ebb-d5e9-46cb-b5a1-c7db73cf2283?resourceVersion=id%3A20044590"}},"attributes":{"drupal_internal__nid":2951108,"status":true,"title":"View Password","created":"2018-03-08T10:32:25+00:00","changed":"2025-01-13T05:20:03+00:00","body":{"value":"This is a lightweight, user-friendly module that allows a user to toggle between showing or hiding the entered password before submitting the form. \r\n\r\nThis module does not in any way display existing encrypted passwords from the database, but merely allows the user to display the entered password before submission as plain text via JavaScript.\r\n\r\n\u003Ch2\u003EFunctionality\u003C\/h2\u003E\r\nWhen installed, an icon of a crossed eye is added next to the password field on the log in form. \r\nBy toggling on the eye icon the password will be displayed or hidden.\r\n\r\n\r\n\u003Ch2\u003EConfiguration\u003C\/h2\u003E\r\nTo enable this feature for any form, it needs to be configured on the configuration page of the module. This configuration can then be exported\/imported.\r\n\r\n\r\n\u003Cstrong\u003E#D8AX - I \u003Ca href=\u0022http:\/\/groups.drupal.org\/node\/66323\u0022\u003Epledge\u003C\/a\u003E to make this module as \u003Ca href=\u0022http:\/\/drupal.org\/node\/394094\u0022\u003Eaccessible as it can be\u003C\/a\u003E. If you find any flaws, please \u003Ca href=\u0022\/project\/issues\/view_password\u0022\u003Esubmit an issue\u003C\/a\u003E. Help me fix them if you can.\u003C\/strong\u003E\r\n\r\n\r\nThe 6.0.x branch is also Drupal 9\/10 compatible, and new features are being added. \r\n","format":"1","processed":"\u003Cdiv class=\u0022toc-filter\u0022\u003E\u003Cp\u003EThis is a lightweight, user-friendly module that allows a user to toggle between showing or hiding the entered password before submitting the form. \u003C\/p\u003E\n\u003Cp\u003EThis module does not in any way display existing encrypted passwords from the database, but merely allows the user to display the entered password before submission as plain text via JavaScript.\u003C\/p\u003E\n\u003Ca href=\u0022#top\u0022 class=\u0022back-to-top\u0022\u003EBack to top\u003C\/a\u003E\n\n\u003Ch2 id=\u0022functionality\u0022\u003EFunctionality\u003C\/h2\u003E\n\u003Cp\u003EWhen installed, an icon of a crossed eye is added next to the password field on the log in form.\u003Cbr\u003E\nBy toggling on the eye icon the password will be displayed or hidden.\u003C\/p\u003E\n\u003Ca href=\u0022#top\u0022 class=\u0022back-to-top\u0022\u003EBack to top\u003C\/a\u003E\n\n\u003Ch2 id=\u0022configuration\u0022\u003EConfiguration\u003C\/h2\u003E\n\u003Cp\u003ETo enable this feature for any form, it needs to be configured on the configuration page of the module. This configuration can then be exported\/imported.\u003C\/p\u003E\n\u003Cp\u003E\u003Cstrong\u003E#D8AX - I \u003Ca href=\u0022http:\/\/groups.drupal.org\/node\/66323\u0022 rel=\u0022nofollow\u0022\u003Epledge\u003C\/a\u003E to make this module as \u003Ca href=\u0022http:\/\/drupal.org\/node\/394094\u0022 rel=\u0022nofollow\u0022\u003Eaccessible as it can be\u003C\/a\u003E. If you find any flaws, please \u003Ca href=\u0022\/project\/issues\/view_password\u0022 rel=\u0022nofollow\u0022\u003Esubmit an issue\u003C\/a\u003E. Help me fix them if you can.\u003C\/strong\u003E\u003C\/p\u003E\n\u003Cp\u003EThe 6.0.x branch is also Drupal 9\/10 compatible, and new features are being added. \u003C\/p\u003E\u003Ca href=\u0022#top\u0022 class=\u0022back-to-top\u0022\u003EBack to top\u003C\/a\u003E\u003C\/div\u003E","summary":"Allows the site users to validate their password input before the submission of the form. \r\nDoes this by exposing the password content when clicking on the icon of an \u003Cem\u003Eeye\u003C\/em\u003E next to password input field before submission of the form. \r\n\r\nSite builders can choose in which form to apply the functionality by accessing the configuration page of the module."},"field_active_installs":"{\u00228.x-4.x\u0022:4,\u00228.x-5.x\u0022:49,\u00226.0.x\u0022:7584}","field_active_installs_total":7637,"field_composer_namespace":"drupal\/view_password","field_composer_types":[],"field_core_semver_maximum":12000000,"field_core_semver_minimum":8000000,"field_issue_summary_template":null,"field_logo_url":null,"field_project_has_releases":true,"field_project_machine_name":"view_password","field_security_advisory_coverage":"covered"},"relationships":{"uid":{"data":{"type":"user--user","id":"e8a182f9-9f1d-4273-9720-93a6d64fc697","meta":{"drupal_internal__target_id":3494063}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/9ea06ebb-d5e9-46cb-b5a1-c7db73cf2283\/uid?resourceVersion=id%3A20044590"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/9ea06ebb-d5e9-46cb-b5a1-c7db73cf2283\/relationships\/uid?resourceVersion=id%3A20044590"}}},"field_development_status":{"data":{"type":"taxonomy_term--development_status","id":"e767288c-9800-4fb4-aeb8-8c311533838a","meta":{"drupal_internal__target_id":27274}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/9ea06ebb-d5e9-46cb-b5a1-c7db73cf2283\/field_development_status?resourceVersion=id%3A20044590"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/9ea06ebb-d5e9-46cb-b5a1-c7db73cf2283\/relationships\/field_development_status?resourceVersion=id%3A20044590"}}},"field_maintenance_status":{"data":{"type":"taxonomy_term--maintenance_status","id":"089406ad-304d-4737-80d1-2f08527ae49e","meta":{"drupal_internal__target_id":27271}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/9ea06ebb-d5e9-46cb-b5a1-c7db73cf2283\/field_maintenance_status?resourceVersion=id%3A20044590"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/9ea06ebb-d5e9-46cb-b5a1-c7db73cf2283\/relationships\/field_maintenance_status?resourceVersion=id%3A20044590"}}},"field_module_categories":{"data":[{"type":"taxonomy_term--module_categories","id":"3df293b3-c9a1-4232-962b-3c8169e8e6e3","meta":{"drupal_internal__target_id":203}},{"type":"taxonomy_term--module_categories","id":"086cebcf-200f-4c34-886e-f9921919b292","meta":{"drupal_internal__target_id":189}}],"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/9ea06ebb-d5e9-46cb-b5a1-c7db73cf2283\/field_module_categories?resourceVersion=id%3A20044590"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/9ea06ebb-d5e9-46cb-b5a1-c7db73cf2283\/relationships\/field_module_categories?resourceVersion=id%3A20044590"}}},"field_project_images":{"data":[{"type":"file--file","id":"03315b7d-1050-4e55-9447-0ea166a500c3","meta":{"alt":"The module adds the crossed eye icon when the password is not shown","title":null,"width":490,"height":317,"drupal_internal__target_id":30201}},{"type":"file--file","id":"b713ecbe-9331-4ac5-a08e-2c31f5cb255b","meta":{"alt":"When clicked, the eye opens and the password is visible","title":null,"width":483,"height":321,"drupal_internal__target_id":30202}}],"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/9ea06ebb-d5e9-46cb-b5a1-c7db73cf2283\/field_project_images?resourceVersion=id%3A20044590"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/9ea06ebb-d5e9-46cb-b5a1-c7db73cf2283\/relationships\/field_project_images?resourceVersion=id%3A20044590"}}}}},{"type":"node--project_module","id":"9e229b08-f58e-4a14-8249-d10a66ca43ac","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/9e229b08-f58e-4a14-8249-d10a66ca43ac?resourceVersion=id%3A20051487"}},"attributes":{"drupal_internal__nid":3192447,"status":true,"title":"Decorative Image Widget","created":"2021-01-13T00:40:21+00:00","changed":"2025-01-20T11:35:37+00:00","body":{"value":"This module provides a solution for site builders that want to make the option of leaving an image\u0027s alternative text blank \u003Cem\u003Eexplicit\u003C\/em\u003E (by checking a new \u0022Decorative\u0022 checkbox) rather than \u003Cem\u003Eimplicit\u003C\/em\u003E (by simply leaving the alt text field blank).\r\n\r\nIn other words, editors are forced to affirm that the reason they\u0027re leaving alt text empty is because the image is \u003Ca href=\u0022https:\/\/www.w3.org\/WAI\/tutorials\/images\/decorative\/\u0022\u003Edecorative\u003C\/a\u003E and should be hidden from screen readers.\r\n\r\nIf the new \u0022Decorative\u0022 checkbox is not checked and no alt text is provided, the form will fail validation.\r\n\r\n\u003Ch2\u003EHow to Use\u003C\/h2\u003E\r\n\u003Col\u003E\r\n  \u003Cli\u003EEnable the module.\u003C\/li\u003E\r\n  \u003Cli\u003EEdit an image field and make sure alt text is enabled and NOT required.\u003C\/li\u003E\r\n  \u003Cli\u003EEdit the form display settings for the image and enable the option to force the image to be marked decorative when no alt text is provided.*\u003C\/li\u003E\r\n  \u003Cli\u003EAdd an image and observe you users cannot leave alt text blank without checking the \u0022Decorative\u0022 checkbox.\u003C\/li\u003E\r\n\u003C\/ol\u003E\r\n\r\n*Assumes your selected form widget is the one provided by core, or one that extends it.\r\n\r\n\u003Ch2\u003EFeatures\u003C\/h2\u003E\r\n\u003Col\u003E\r\n\u003Cli\u003EAdds a \u0022Decorative\u0022 checkbox to image widgets that must be checked if the user wants to leave the alt text empty.\r\n\u003Cli\u003EForces users to stop and think about alternative text rather than leaving it blank.\r\n\u003Cli\u003EWorks with any existing image widget that extends from core\u0027s default. For example, you can use this with the default image widget or the one provided by \u003Ca href=\u0022https:\/\/www.drupal.org\/project\/image_widget_crop\u0022\u003EImage Widget Crop\u003C\/a\u003E.\r\n\u003Cli\u003EDoes not require any data model changes - the state of the \u0022Decorative\u0022 checkbox is inferred entirely from the value of the alt text.\r\n\u003C\/ol\u003E\r\n\r\n\u003Ch2\u003EA note on Media module usage\u003C\/h2\u003E\r\nMost Drupal 8 and newer sites are using core\u0027s Media and Media Library modules, which decouple images from the entity (e.g. a content type), allowing the same media to be used in many places on your site by reference.\r\n\r\nIt\u0027s important to keep in mind that good alternative text \u003Cstrong\u003Evaries depending on the context it is used\u003C\/strong\u003E. A content author should describe a picture of fireworks differently when displayed in an article about photography techniques vs an article about the event in general.\r\n\r\nAs such, while this module works just fine with the Media module, it\u0027s best not to rely on it if your site uses the same image in multiple different contexts, as you won\u0027t be able to change the alt text per context.\r\n\r\n\u003Ch2\u003EFurther Reading\u003C\/h2\u003E\r\nThere is an effort to make similar functionality available in Drupal core: [#2934405]","format":"1","processed":"\u003Cdiv class=\u0022toc-filter\u0022\u003E\u003Cp\u003EThis module provides a solution for site builders that want to make the option of leaving an image\u0027s alternative text blank \u003Cem\u003Eexplicit\u003C\/em\u003E (by checking a new \u0022Decorative\u0022 checkbox) rather than \u003Cem\u003Eimplicit\u003C\/em\u003E (by simply leaving the alt text field blank).\u003C\/p\u003E\n\u003Cp\u003EIn other words, editors are forced to affirm that the reason they\u0027re leaving alt text empty is because the image is \u003Ca href=\u0022https:\/\/www.w3.org\/WAI\/tutorials\/images\/decorative\/\u0022 rel=\u0022nofollow\u0022\u003Edecorative\u003C\/a\u003E and should be hidden from screen readers.\u003C\/p\u003E\n\u003Cp\u003EIf the new \u0022Decorative\u0022 checkbox is not checked and no alt text is provided, the form will fail validation.\u003C\/p\u003E\n\u003Ca href=\u0022#top\u0022 class=\u0022back-to-top\u0022\u003EBack to top\u003C\/a\u003E\n\n\u003Ch2 id=\u0022how-to-use\u0022\u003EHow to Use\u003C\/h2\u003E\n\u003Col\u003E\n\u003Cli\u003EEnable the module.\u003C\/li\u003E\n\u003Cli\u003EEdit an image field and make sure alt text is enabled and NOT required.\u003C\/li\u003E\n\u003Cli\u003EEdit the form display settings for the image and enable the option to force the image to be marked decorative when no alt text is provided.*\u003C\/li\u003E\n\u003Cli\u003EAdd an image and observe you users cannot leave alt text blank without checking the \u0022Decorative\u0022 checkbox.\u003C\/li\u003E\n\u003C\/ol\u003E\n\u003Cp\u003E*Assumes your selected form widget is the one provided by core, or one that extends it.\u003C\/p\u003E\n\u003Ca href=\u0022#top\u0022 class=\u0022back-to-top\u0022\u003EBack to top\u003C\/a\u003E\n\n\u003Ch2 id=\u0022features\u0022\u003EFeatures\u003C\/h2\u003E\n\u003Col\u003E\n\u003Cli\u003EAdds a \u0022Decorative\u0022 checkbox to image widgets that must be checked if the user wants to leave the alt text empty.\n\u003C\/li\u003E\u003Cli\u003EForces users to stop and think about alternative text rather than leaving it blank.\n\u003C\/li\u003E\u003Cli\u003EWorks with any existing image widget that extends from core\u0027s default. For example, you can use this with the default image widget or the one provided by \u003Ca href=\u0022https:\/\/www.drupal.org\/project\/image_widget_crop\u0022 rel=\u0022nofollow\u0022\u003EImage Widget Crop\u003C\/a\u003E.\n\u003C\/li\u003E\u003Cli\u003EDoes not require any data model changes - the state of the \u0022Decorative\u0022 checkbox is inferred entirely from the value of the alt text.\n\u003C\/li\u003E\u003C\/ol\u003E\n\u003Ca href=\u0022#top\u0022 class=\u0022back-to-top\u0022\u003EBack to top\u003C\/a\u003E\n\n\u003Ch2 id=\u0022a-note-on-media-module-usage\u0022\u003EA note on Media module usage\u003C\/h2\u003E\n\u003Cp\u003EMost Drupal 8 and newer sites are using core\u0027s Media and Media Library modules, which decouple images from the entity (e.g. a content type), allowing the same media to be used in many places on your site by reference.\u003C\/p\u003E\n\u003Cp\u003EIt\u0027s important to keep in mind that good alternative text \u003Cstrong\u003Evaries depending on the context it is used\u003C\/strong\u003E. A content author should describe a picture of fireworks differently when displayed in an article about photography techniques vs an article about the event in general.\u003C\/p\u003E\n\u003Cp\u003EAs such, while this module works just fine with the Media module, it\u0027s best not to rely on it if your site uses the same image in multiple different contexts, as you won\u0027t be able to change the alt text per context.\u003C\/p\u003E\n\u003Ca href=\u0022#top\u0022 class=\u0022back-to-top\u0022\u003EBack to top\u003C\/a\u003E\n\n\u003Ch2 id=\u0022further-reading\u0022\u003EFurther Reading\u003C\/h2\u003E\n\u003Cp\u003EThere is an effort to make similar functionality available in Drupal core: [#2934405]\u003C\/p\u003E\u003Ca href=\u0022#top\u0022 class=\u0022back-to-top\u0022\u003EBack to top\u003C\/a\u003E\u003C\/div\u003E","summary":""},"field_active_installs":"{\u00221.0.x\u0022:4097}","field_active_installs_total":4097,"field_composer_namespace":"drupal\/decorative_image_widget","field_composer_types":[],"field_core_semver_maximum":12000000,"field_core_semver_minimum":8007007,"field_issue_summary_template":null,"field_logo_url":null,"field_project_has_releases":true,"field_project_machine_name":"decorative_image_widget","field_security_advisory_coverage":"covered"},"relationships":{"uid":{"data":{"type":"user--user","id":"d6052c61-dbd3-4f7b-90b6-d96142308e98","meta":{"drupal_internal__target_id":788032}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/9e229b08-f58e-4a14-8249-d10a66ca43ac\/uid?resourceVersion=id%3A20051487"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/9e229b08-f58e-4a14-8249-d10a66ca43ac\/relationships\/uid?resourceVersion=id%3A20051487"}}},"field_development_status":{"data":{"type":"taxonomy_term--development_status","id":"e767288c-9800-4fb4-aeb8-8c311533838a","meta":{"drupal_internal__target_id":27274}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/9e229b08-f58e-4a14-8249-d10a66ca43ac\/field_development_status?resourceVersion=id%3A20051487"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/9e229b08-f58e-4a14-8249-d10a66ca43ac\/relationships\/field_development_status?resourceVersion=id%3A20051487"}}},"field_maintenance_status":{"data":{"type":"taxonomy_term--maintenance_status","id":"089406ad-304d-4737-80d1-2f08527ae49e","meta":{"drupal_internal__target_id":27271}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/9e229b08-f58e-4a14-8249-d10a66ca43ac\/field_maintenance_status?resourceVersion=id%3A20051487"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/9e229b08-f58e-4a14-8249-d10a66ca43ac\/relationships\/field_maintenance_status?resourceVersion=id%3A20051487"}}},"field_module_categories":{"data":[{"type":"taxonomy_term--module_categories","id":"3df293b3-c9a1-4232-962b-3c8169e8e6e3","meta":{"drupal_internal__target_id":203}},{"type":"taxonomy_term--module_categories","id":"68428c33-1db7-438d-b1b3-e23004e0982b","meta":{"drupal_internal__target_id":192}}],"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/9e229b08-f58e-4a14-8249-d10a66ca43ac\/field_module_categories?resourceVersion=id%3A20051487"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/9e229b08-f58e-4a14-8249-d10a66ca43ac\/relationships\/field_module_categories?resourceVersion=id%3A20051487"}}},"field_project_images":{"data":[{"type":"file--file","id":"e5acbd7a-78ed-46ab-8104-62919169d6fe","meta":{"alt":"screenshot of image widget form with the new \u0022decorative\u0022 checkbox checked","title":null,"width":834,"height":338,"drupal_internal__target_id":30858}}],"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/9e229b08-f58e-4a14-8249-d10a66ca43ac\/field_project_images?resourceVersion=id%3A20051487"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/9e229b08-f58e-4a14-8249-d10a66ca43ac\/relationships\/field_project_images?resourceVersion=id%3A20051487"}}}}},{"type":"node--project_module","id":"cdadcaff-090c-4635-8389-f373196130ae","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/cdadcaff-090c-4635-8389-f373196130ae?resourceVersion=id%3A20008040"}},"attributes":{"drupal_internal__nid":299083,"status":true,"title":"Floating block","created":"2008-08-23T17:18:14+00:00","changed":"2025-01-13T05:20:03+00:00","body":{"value":"The Floating block module allows you to keep html blocks, selected using jquery selectors in a fixed position on the page \u003Cstrong\u003Eas you scroll\u003C\/strong\u003E. It works in a similar way the table header fixer in Drupal Core. This means that when the user scrolls their browser selected parts of the page can stay in the users view. \r\n\r\nThis is extremely useful when you have pages with lots of content and you want a side menu to stay in view.\r\n\r\n\u003Ch3\u003ETypical block selectors\u003C\/h3\u003E\r\nDefault theme block selectors in Drupal are:\r\n\u003Cul\u003E\r\n  \u003Cli\u003E\u003Ccode\u003E#sidebar-left\u003C\/code\u003E Float the left sidebar \u003C\/li\u003E\r\n  \u003Cli\u003E\u003Ccode\u003E.primary-links\u003C\/code\u003E Float the primary menu\u003C\/li\u003E\r\n  \u003Cli\u003E\u003Ccode\u003E.block-user\u003C\/code\u003E Float the user login block\u003C\/li\u003E\r\n\u003C\/ul\u003E\r\n\r\nThe important thing is to look at the html Drupal is generating for your page and look at the \u003Cstrong\u003Eid\u003C\/strong\u003E or \u003Cstrong\u003Eclass\u003C\/strong\u003E of the element your want to float. \u003Ca href=\u0022http:\/\/api.jquery.com\/category\/selectors\/\u0022\u003EFind out more about jQuery selectors...\u003C\/a\u003E Additionally another very useful tool (if you are using Firefox) is \u003Ca href=\u0022http:\/\/getfirebug.com\/\u0022\u003EFirebug\u003C\/a\u003E.\r\n\r\n","format":"1","processed":"\u003Cp\u003EThe Floating block module allows you to keep html blocks, selected using jquery selectors in a fixed position on the page \u003Cstrong\u003Eas you scroll\u003C\/strong\u003E. It works in a similar way the table header fixer in Drupal Core. This means that when the user scrolls their browser selected parts of the page can stay in the users view. \u003C\/p\u003E\n\u003Cp\u003EThis is extremely useful when you have pages with lots of content and you want a side menu to stay in view.\u003C\/p\u003E\n\u003Ch3\u003ETypical block selectors\u003C\/h3\u003E\n\u003Cp\u003EDefault theme block selectors in Drupal are:\u003C\/p\u003E\n\u003Cul\u003E\n\u003Cli\u003E\u003Ccode\u003E#sidebar-left\u003C\/code\u003E Float the left sidebar \u003C\/li\u003E\n\u003Cli\u003E\u003Ccode\u003E.primary-links\u003C\/code\u003E Float the primary menu\u003C\/li\u003E\n\u003Cli\u003E\u003Ccode\u003E.block-user\u003C\/code\u003E Float the user login block\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Cp\u003EThe important thing is to look at the html Drupal is generating for your page and look at the \u003Cstrong\u003Eid\u003C\/strong\u003E or \u003Cstrong\u003Eclass\u003C\/strong\u003E of the element your want to float. \u003Ca href=\u0022http:\/\/api.jquery.com\/category\/selectors\/\u0022 rel=\u0022nofollow\u0022\u003EFind out more about jQuery selectors...\u003C\/a\u003E Additionally another very useful tool (if you are using Firefox) is \u003Ca href=\u0022http:\/\/getfirebug.com\/\u0022 rel=\u0022nofollow\u0022\u003EFirebug\u003C\/a\u003E.\u003C\/p\u003E","summary":"The Floating block module allows you to keep html blocks, selected using jquery selectors in a fixed position on the page \u003Cstrong\u003Eas you scroll\u003C\/strong\u003E. It works in a similar way the table header fixer in Drupal Core. This means that when the user scrolls their browser selected parts of the page can stay in the users view. \r\n\r\nThis is extremely useful when you have pages with lots of content and you want a side menu to stay in view. Visit \u003Ca href=\u0022http:\/\/dev.vit-al.co.uk\/floating_block\u0022\u003Ehttp:\/\/dev.vit-al.co.uk\/floating_block\u003C\/a\u003E to see the module in action.\r\n\r\n\u003Cstrong\u003ETips for using jQuery selectors\u003C\/strong\u003E\r\nUsing the default Garland theme in Drupal 6 example selectors would be:\r\n\u003Ccode\u003E#sidebar-left\u003C\/code\u003E Float the left sidebar \r\n\u003Ccode\u003E.primary-links\u003C\/code\u003E Float the primary menu\r\n\u003Ccode\u003E.block-user\u003C\/code\u003E Float the user login block\r\n\r\nThe important thing is to look at the html drupal is generating for your page and look at the \u003Cstrong\u003Eid\u003C\/strong\u003E or \u003Cstrong\u003Eclass\u003C\/strong\u003E of the element your want to float. \u003Ca href=\u0022http:\/\/api.jquery.com\/category\/selectors\/\u0022\u003EFind out more about jQuery selectors...\u003C\/a\u003E Additionally another very useful tool (if you are using Firefox) is \u003Ca href=\u0022http:\/\/getfirebug.com\/\u0022\u003EFirebug\u003C\/a\u003E.\r\n\r\n"},"field_active_installs":"{\u00226.x-1.x\u0022:21,\u00227.x-1.x\u0022:2778,\u00228.x-1.x\u0022:105,\u00222.0.x\u0022:363}","field_active_installs_total":3267,"field_composer_namespace":"drupal\/floating_block","field_composer_types":[],"field_core_semver_maximum":12000000,"field_core_semver_minimum":8000000,"field_issue_summary_template":null,"field_logo_url":null,"field_project_has_releases":true,"field_project_machine_name":"floating_block","field_security_advisory_coverage":"covered"},"relationships":{"uid":{"data":{"type":"user--user","id":"3ac95b7d-e4c9-417a-831f-9d7fd1ba96e2","meta":{"drupal_internal__target_id":157725}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/cdadcaff-090c-4635-8389-f373196130ae\/uid?resourceVersion=id%3A20008040"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/cdadcaff-090c-4635-8389-f373196130ae\/relationships\/uid?resourceVersion=id%3A20008040"}}},"field_development_status":{"data":{"type":"taxonomy_term--development_status","id":"e767288c-9800-4fb4-aeb8-8c311533838a","meta":{"drupal_internal__target_id":27274}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/cdadcaff-090c-4635-8389-f373196130ae\/field_development_status?resourceVersion=id%3A20008040"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/cdadcaff-090c-4635-8389-f373196130ae\/relationships\/field_development_status?resourceVersion=id%3A20008040"}}},"field_maintenance_status":{"data":{"type":"taxonomy_term--maintenance_status","id":"089406ad-304d-4737-80d1-2f08527ae49e","meta":{"drupal_internal__target_id":27271}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/cdadcaff-090c-4635-8389-f373196130ae\/field_maintenance_status?resourceVersion=id%3A20008040"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/cdadcaff-090c-4635-8389-f373196130ae\/relationships\/field_maintenance_status?resourceVersion=id%3A20008040"}}},"field_module_categories":{"data":[{"type":"taxonomy_term--module_categories","id":"3df293b3-c9a1-4232-962b-3c8169e8e6e3","meta":{"drupal_internal__target_id":203}},{"type":"taxonomy_term--module_categories","id":"abf23828-f269-4d39-8589-b731209eb154","meta":{"drupal_internal__target_id":186}},{"type":"taxonomy_term--module_categories","id":"754c04cb-6da2-42ba-9032-d64307f68f45","meta":{"drupal_internal__target_id":188}},{"type":"taxonomy_term--module_categories","id":"086cebcf-200f-4c34-886e-f9921919b292","meta":{"drupal_internal__target_id":189}}],"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/cdadcaff-090c-4635-8389-f373196130ae\/field_module_categories?resourceVersion=id%3A20008040"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/cdadcaff-090c-4635-8389-f373196130ae\/relationships\/field_module_categories?resourceVersion=id%3A20008040"}}},"field_project_images":{"data":[],"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/cdadcaff-090c-4635-8389-f373196130ae\/field_project_images?resourceVersion=id%3A20008040"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/cdadcaff-090c-4635-8389-f373196130ae\/relationships\/field_project_images?resourceVersion=id%3A20008040"}}}}},{"type":"node--project_module","id":"f283be13-fc68-4ae4-b69f-931ac231d517","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/f283be13-fc68-4ae4-b69f-931ac231d517?resourceVersion=id%3A20057298"}},"attributes":{"drupal_internal__nid":3464777,"status":true,"title":"CKEditor Responsive Table","created":"2024-07-30T19:43:46+00:00","changed":"2025-01-13T05:20:03+00:00","body":{"value":"This module is a CKEditor 5 plugin that adds a table button with some accessibility improvements over the default CKE table button. It also integrates with the \u003Ca href=\u0022https:\/\/github.com\/Lullabot\/tabled\u0022\u003ETabled\u003C\/a\u003E plugin for making tables to be adaptable to different devices.\r\n\r\n\u003Ch3 id=\u0022module-project--features\u0022\u003EFeatures\u003C\/h3\u003E\r\n\r\nThis responsive table is accessible by default. The button provides controls to set the number of \u003Cstrong\u003ERows\u003C\/strong\u003E and \u003Cstrong\u003EColumns\u003C\/strong\u003E. It also provides \u003Cstrong\u003EHeaders\u003C\/strong\u003E options, \u003Cstrong\u003ECaption\u003C\/strong\u003E, and a \u003Cstrong\u003ECaption Visible?\u003C\/strong\u003E checkbox.\r\n\r\nThe main differences with the built-in table CKE button are:\r\n\u003Cul\u003E\r\n  \u003Cli\u003ECaption is mandatory, you can choose to hide them or showing them but it needs to be present. \u003C\/li\u003E\r\n  \u003Cli\u003ECaptions are always present for assistive technologies.\u003C\/li\u003E\r\n  \u003Cli\u003EHeaders are mandatory, either by rows or rows and columns.\u003C\/li\u003E\r\n  \u003Cli\u003EHeaders have a \u003Ccode\u003Escope=column\u003C\/code\u003E added when appropriate.\u003C\/li\u003E\r\n\u003C\/ul\u003E\r\n\r\nOnce the table is inserted into the editor, there are controls for inserting, deleting, splitting, and merging columns and rows, as well toggling the caption visibility.\r\n\r\nThis plugin doesn\u0027t make any efforts on cleaning up or fixing copy and pasted tables, but it ensures that tables created through the table button to be accessible.\r\n\r\n\u003Ch3 id=\u0022module-project--post-installation\u0022\u003EPost-Installation\u003C\/h3\u003E\r\n\r\n\u003Cul\u003E\r\n    \u003Cli\u003EConfigure text formats by navigating to \u003Cstrong\u003EConfiguration \u003E Content authoring \u003E Text formats and editors\u003C\/strong\u003E, or visiting \u003Ccode\u003E\/admin\/config\/content\/formats\u003C\/code\u003E.\u003C\/li\u003E\r\n    \u003Cli\u003EClick \u003Cstrong\u003EConfigure\u003C\/strong\u003E next to a text format that has CKEditor 5 enabled as the \u003Cstrong\u003EText format\u003C\/strong\u003E that you\u0027d like to add the responsive table functionality to.\u003C\/li\u003E\r\n    \u003Cli\u003EDrag the Responsive Table button from the \u003Cstrong\u003EAvailable Buttons\u003C\/strong\u003E area to the \u003Cstrong\u003EActive toolbar\u003C\/strong\u003E area.\u003C\/li\u003E\r\n    \u003Cli\u003EClick \u003Cstrong\u003ESave configuration\u003C\/strong\u003E.\u003C\/li\u003E\r\n\u003C\/ul\u003E\r\n\r\n\r\n\u003Ch3 id=\u0022module-project--additional-requirements\u0022\u003EAdditional Requirements\u003C\/h3\u003E\r\n\r\nDrupal 9.3 or greater.\r\n\r\n\u003Ch3 id=\u0022module-project--credits\u0022\u003ECredits\u003C\/h3\u003E\r\n\r\nDeveloped by:\r\n\r\n\u003Cul\u003E\r\n  \u003Cli\u003EElvis Moreta\u003C\/li\u003E\r\n  \u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/u\/javi-er\u0022\u003EJavier Reartes\u003C\/a\u003E\u003C\/li\u003E\r\n  \u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/u\/monicadear\u0022\u003ENikki Flores\u003C\/a\u003E\u003C\/li\u003E\r\n  \u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/u\/deviantintegral\u0022\u003EAndrew Berry\u003C\/a\u003E\u003C\/li\u003E\r\n\u003C\/ul\u003E","format":"1","processed":"\u003Cdiv class=\u0022toc-filter\u0022\u003E\u003Cp\u003EThis module is a CKEditor 5 plugin that adds a table button with some accessibility improvements over the default CKE table button. It also integrates with the \u003Ca href=\u0022https:\/\/github.com\/Lullabot\/tabled\u0022 rel=\u0022nofollow\u0022\u003ETabled\u003C\/a\u003E plugin for making tables to be adaptable to different devices.\u003C\/p\u003E\n\u003Ch3 id=\u0022module-project--features-01\u0022\u003EFeatures\u003C\/h3\u003E\n\u003Cp\u003EThis responsive table is accessible by default. The button provides controls to set the number of \u003Cstrong\u003ERows\u003C\/strong\u003E and \u003Cstrong\u003EColumns\u003C\/strong\u003E. It also provides \u003Cstrong\u003EHeaders\u003C\/strong\u003E options, \u003Cstrong\u003ECaption\u003C\/strong\u003E, and a \u003Cstrong\u003ECaption Visible?\u003C\/strong\u003E checkbox.\u003C\/p\u003E\n\u003Cp\u003EThe main differences with the built-in table CKE button are:\u003C\/p\u003E\n\u003Cul\u003E\n\u003Cli\u003ECaption is mandatory, you can choose to hide them or showing them but it needs to be present. \u003C\/li\u003E\n\u003Cli\u003ECaptions are always present for assistive technologies.\u003C\/li\u003E\n\u003Cli\u003EHeaders are mandatory, either by rows or rows and columns.\u003C\/li\u003E\n\u003Cli\u003EHeaders have a \u003Ccode\u003Escope=column\u003C\/code\u003E added when appropriate.\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Cp\u003EOnce the table is inserted into the editor, there are controls for inserting, deleting, splitting, and merging columns and rows, as well toggling the caption visibility.\u003C\/p\u003E\n\u003Cp\u003EThis plugin doesn\u0027t make any efforts on cleaning up or fixing copy and pasted tables, but it ensures that tables created through the table button to be accessible.\u003C\/p\u003E\n\u003Ch3 id=\u0022module-project--post-installation-01\u0022\u003EPost-Installation\u003C\/h3\u003E\n\u003Cul\u003E\n\u003Cli\u003EConfigure text formats by navigating to \u003Cstrong\u003EConfiguration \u0026gt; Content authoring \u0026gt; Text formats and editors\u003C\/strong\u003E, or visiting \u003Ccode\u003E\/admin\/config\/content\/formats\u003C\/code\u003E.\u003C\/li\u003E\n\u003Cli\u003EClick \u003Cstrong\u003EConfigure\u003C\/strong\u003E next to a text format that has CKEditor 5 enabled as the \u003Cstrong\u003EText format\u003C\/strong\u003E that you\u0027d like to add the responsive table functionality to.\u003C\/li\u003E\n\u003Cli\u003EDrag the Responsive Table button from the \u003Cstrong\u003EAvailable Buttons\u003C\/strong\u003E area to the \u003Cstrong\u003EActive toolbar\u003C\/strong\u003E area.\u003C\/li\u003E\n\u003Cli\u003EClick \u003Cstrong\u003ESave configuration\u003C\/strong\u003E.\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Ch3 id=\u0022module-project--additional-requirements-01\u0022\u003EAdditional Requirements\u003C\/h3\u003E\n\u003Cp\u003EDrupal 9.3 or greater.\u003C\/p\u003E\n\u003Ch3 id=\u0022module-project--credits-01\u0022\u003ECredits\u003C\/h3\u003E\n\u003Cp\u003EDeveloped by:\u003C\/p\u003E\n\u003Cul\u003E\n\u003Cli\u003EElvis Moreta\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/u\/javi-er\u0022 rel=\u0022nofollow\u0022\u003EJavier Reartes\u003C\/a\u003E\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/u\/monicadear\u0022 rel=\u0022nofollow\u0022\u003ENikki Flores\u003C\/a\u003E\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/u\/deviantintegral\u0022 rel=\u0022nofollow\u0022\u003EAndrew Berry\u003C\/a\u003E\u003C\/li\u003E\n\u003C\/ul\u003E\u003Ca href=\u0022#top\u0022 class=\u0022back-to-top\u0022\u003EBack to top\u003C\/a\u003E\u003C\/div\u003E","summary":""},"field_active_installs":"{\u00221.0.x\u0022:1744}","field_active_installs_total":1744,"field_composer_namespace":"drupal\/ckeditor_responsive_table","field_composer_types":[],"field_core_semver_maximum":12000000,"field_core_semver_minimum":9000000,"field_issue_summary_template":null,"field_logo_url":null,"field_project_has_releases":true,"field_project_machine_name":"ckeditor_responsive_table","field_security_advisory_coverage":"covered"},"relationships":{"uid":{"data":{"type":"user--user","id":"f97fd29f-58b6-48bb-871a-ba8d3f89e800","meta":{"drupal_internal__target_id":409665}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/f283be13-fc68-4ae4-b69f-931ac231d517\/uid?resourceVersion=id%3A20057298"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/f283be13-fc68-4ae4-b69f-931ac231d517\/relationships\/uid?resourceVersion=id%3A20057298"}}},"field_development_status":{"data":{"type":"taxonomy_term--development_status","id":"e767288c-9800-4fb4-aeb8-8c311533838a","meta":{"drupal_internal__target_id":27274}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/f283be13-fc68-4ae4-b69f-931ac231d517\/field_development_status?resourceVersion=id%3A20057298"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/f283be13-fc68-4ae4-b69f-931ac231d517\/relationships\/field_development_status?resourceVersion=id%3A20057298"}}},"field_maintenance_status":{"data":{"type":"taxonomy_term--maintenance_status","id":"089406ad-304d-4737-80d1-2f08527ae49e","meta":{"drupal_internal__target_id":27271}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/f283be13-fc68-4ae4-b69f-931ac231d517\/field_maintenance_status?resourceVersion=id%3A20057298"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/f283be13-fc68-4ae4-b69f-931ac231d517\/relationships\/field_maintenance_status?resourceVersion=id%3A20057298"}}},"field_module_categories":{"data":[{"type":"taxonomy_term--module_categories","id":"3df293b3-c9a1-4232-962b-3c8169e8e6e3","meta":{"drupal_internal__target_id":203}},{"type":"taxonomy_term--module_categories","id":"754c04cb-6da2-42ba-9032-d64307f68f45","meta":{"drupal_internal__target_id":188}},{"type":"taxonomy_term--module_categories","id":"86237004-3801-40cf-96b5-fe7d60efccb5","meta":{"drupal_internal__target_id":187}}],"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/f283be13-fc68-4ae4-b69f-931ac231d517\/field_module_categories?resourceVersion=id%3A20057298"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/f283be13-fc68-4ae4-b69f-931ac231d517\/relationships\/field_module_categories?resourceVersion=id%3A20057298"}}},"field_project_images":{"data":[{"type":"file--file","id":"ad7d430e-3bda-4f74-b2ba-a0bfd2346dee","meta":{"alt":"CKEditor 5 responsive table insert dialog featuring fields for rows, columns, headers and optional caption","title":null,"width":600,"height":778,"drupal_internal__target_id":37601}},{"type":"file--file","id":"cc3665be-4de1-4428-8b48-be7306f79d20","meta":{"alt":"Example of a table rendering using the Tabled JS plugin","title":null,"width":1732,"height":1956,"drupal_internal__target_id":37602}}],"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/f283be13-fc68-4ae4-b69f-931ac231d517\/field_project_images?resourceVersion=id%3A20057298"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/f283be13-fc68-4ae4-b69f-931ac231d517\/relationships\/field_project_images?resourceVersion=id%3A20057298"}}}}},{"type":"node--project_module","id":"6eeac486-e095-4704-bd36-06a48c72a965","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/6eeac486-e095-4704-bd36-06a48c72a965?resourceVersion=id%3A20054552"}},"attributes":{"drupal_internal__nid":3326993,"status":true,"title":"Tour","created":"2022-12-13T23:19:03+00:00","changed":"2025-01-13T05:20:03+00:00","body":{"value":"The Tour module provides users with guided tours of the site interface. Each tour consists of several tips that highlight elements of the user interface, guide the user through a workflow, or explain key concepts of the website.\r\n\r\n\u003Cimg src=\u0022https:\/\/www.drupal.org\/files\/Screenshot%202024-08-31%20at%2012.27.29%E2%80%AFPM.png\u0022 alt=\u0022example\u0022 \/\u003E\r\n\r\n\u003Ch2\u003EImprovements from core\u003C\/h2\u003E\r\n\u003Cul\u003E\r\n  \u003Cli\u003EIntegrated the Tour UI module to provide a visual interface for creating new and editing existing tours\u003C\/li\u003E\r\n  \u003Cli\u003EAlmost 4 times as many default Tours\u003C\/li\u003E\r\n  \u003Cli\u003EImproved accessibility\u003C\/li\u003E\r\n  \u003Cli\u003ESettings form to control the label of the button for starting a tour\u003C\/li\u003E\r\n  \u003Cli\u003EThe button block for starting a tour to allow to run tours without the toolbar\u003C\/li\u003E\r\n\u003C\/ul\u003E\r\n\r\n\u003Cstrong\u003EDisclaimer: Due to Tours being config and possible to be edited on a site basis we will not be doing any Tour or Tip updates retroactively.\u003C\/strong\u003E\r\n\r\n\u003Ch2\u003EConfig moved to recipes!\u003C\/h2\u003E\r\n\r\n\u003Cul\u003E\r\n  \u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/tour_core\u0022\u003ETour Core\u003C\/a\u003E\u003C\/li\u003E\r\n  \u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/tour_core_language\u0022\u003ETour Core Language\u003C\/a\u003E\u003C\/li\u003E\r\n\u003C\/ul\u003E\r\n\r\n\u003Ch2\u003ERequirements\u003C\/h2\u003E\r\nSince Tour was removed from core a copy of \u003Ca href=\u0022https:\/\/github.com\/shepherd-pro\/shepherd\u0022\u003EshepherdJs\u003C\/a\u003E was copied to the module.\r\n\r\n\u003Ch2\u003EBranches\u003C\/h2\u003E\r\n2.0.x = will be the new contrib branch.\r\n1.0.x = is the split from Drupal core.\r\n","format":"1","processed":"\u003Cdiv class=\u0022toc-filter\u0022\u003E\u003Cp\u003EThe Tour module provides users with guided tours of the site interface. Each tour consists of several tips that highlight elements of the user interface, guide the user through a workflow, or explain key concepts of the website.\u003C\/p\u003E\n\u003Cp\u003E\u003Cimg src=\u0022\/core\/misc\/icons\/e32700\/error.svg\u0022 alt=\u0022Image removed.\u0022 title=\u0022This image has been removed. For security reasons, only images from the local domain are allowed.\u0022 height=\u002216\u0022 width=\u002216\u0022 class=\u0022filter-image-invalid\u0022\u003E\u003C\/p\u003E\n\u003Ca href=\u0022#top\u0022 class=\u0022back-to-top\u0022\u003EBack to top\u003C\/a\u003E\n\n\u003Ch2 id=\u0022improvements-from-core\u0022\u003EImprovements from core\u003C\/h2\u003E\n\u003Cul\u003E\n\u003Cli\u003EIntegrated the Tour UI module to provide a visual interface for creating new and editing existing tours\u003C\/li\u003E\n\u003Cli\u003EAlmost 4 times as many default Tours\u003C\/li\u003E\n\u003Cli\u003EImproved accessibility\u003C\/li\u003E\n\u003Cli\u003ESettings form to control the label of the button for starting a tour\u003C\/li\u003E\n\u003Cli\u003EThe button block for starting a tour to allow to run tours without the toolbar\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Cp\u003E\u003Cstrong\u003EDisclaimer: Due to Tours being config and possible to be edited on a site basis we will not be doing any Tour or Tip updates retroactively.\u003C\/strong\u003E\u003C\/p\u003E\n\u003Ca href=\u0022#top\u0022 class=\u0022back-to-top\u0022\u003EBack to top\u003C\/a\u003E\n\n\u003Ch2 id=\u0022config-moved-to-recipes\u0022\u003EConfig moved to recipes!\u003C\/h2\u003E\n\u003Cul\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/tour_core\u0022 rel=\u0022nofollow\u0022\u003ETour Core\u003C\/a\u003E\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/tour_core_language\u0022 rel=\u0022nofollow\u0022\u003ETour Core Language\u003C\/a\u003E\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Ca href=\u0022#top\u0022 class=\u0022back-to-top\u0022\u003EBack to top\u003C\/a\u003E\n\n\u003Ch2 id=\u0022requirements\u0022\u003ERequirements\u003C\/h2\u003E\n\u003Cp\u003ESince Tour was removed from core a copy of \u003Ca href=\u0022https:\/\/github.com\/shepherd-pro\/shepherd\u0022 rel=\u0022nofollow\u0022\u003EshepherdJs\u003C\/a\u003E was copied to the module.\u003C\/p\u003E\n\u003Ca href=\u0022#top\u0022 class=\u0022back-to-top\u0022\u003EBack to top\u003C\/a\u003E\n\n\u003Ch2 id=\u0022branches\u0022\u003EBranches\u003C\/h2\u003E\n\u003Cp\u003E2.0.x = will be the new contrib branch.\u003Cbr\u003E\n1.0.x = is the split from Drupal core.\u003C\/p\u003E\u003Ca href=\u0022#top\u0022 class=\u0022back-to-top\u0022\u003EBack to top\u003C\/a\u003E\u003C\/div\u003E","summary":""},"field_active_installs":"{\u00221.0.x\u0022:552,\u00222.0.x\u0022:1067}","field_active_installs_total":1619,"field_composer_namespace":"drupal\/tour","field_composer_types":[],"field_core_semver_maximum":12999999,"field_core_semver_minimum":10000000,"field_issue_summary_template":null,"field_logo_url":null,"field_project_has_releases":true,"field_project_machine_name":"tour","field_security_advisory_coverage":"covered"},"relationships":{"uid":{"data":{"type":"user--user","id":"f2e2ea48-c23d-401f-a3c2-a7b2985bb613","meta":{"drupal_internal__target_id":3252890}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/6eeac486-e095-4704-bd36-06a48c72a965\/uid?resourceVersion=id%3A20054552"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/6eeac486-e095-4704-bd36-06a48c72a965\/relationships\/uid?resourceVersion=id%3A20054552"}}},"field_development_status":{"data":{"type":"taxonomy_term--development_status","id":"e767288c-9800-4fb4-aeb8-8c311533838a","meta":{"drupal_internal__target_id":27274}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/6eeac486-e095-4704-bd36-06a48c72a965\/field_development_status?resourceVersion=id%3A20054552"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/6eeac486-e095-4704-bd36-06a48c72a965\/relationships\/field_development_status?resourceVersion=id%3A20054552"}}},"field_maintenance_status":{"data":{"type":"taxonomy_term--maintenance_status","id":"089406ad-304d-4737-80d1-2f08527ae49e","meta":{"drupal_internal__target_id":27271}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/6eeac486-e095-4704-bd36-06a48c72a965\/field_maintenance_status?resourceVersion=id%3A20054552"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/6eeac486-e095-4704-bd36-06a48c72a965\/relationships\/field_maintenance_status?resourceVersion=id%3A20054552"}}},"field_module_categories":{"data":[{"type":"taxonomy_term--module_categories","id":"3df293b3-c9a1-4232-962b-3c8169e8e6e3","meta":{"drupal_internal__target_id":203}}],"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/6eeac486-e095-4704-bd36-06a48c72a965\/field_module_categories?resourceVersion=id%3A20054552"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/6eeac486-e095-4704-bd36-06a48c72a965\/relationships\/field_module_categories?resourceVersion=id%3A20054552"}}},"field_project_images":{"data":[],"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/6eeac486-e095-4704-bd36-06a48c72a965\/field_project_images?resourceVersion=id%3A20054552"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/6eeac486-e095-4704-bd36-06a48c72a965\/relationships\/field_project_images?resourceVersion=id%3A20054552"}}}}},{"type":"node--project_module","id":"3c5a26ec-220c-474b-b82d-7bc76be5fa16","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/3c5a26ec-220c-474b-b82d-7bc76be5fa16?resourceVersion=id%3A20051465"}},"attributes":{"drupal_internal__nid":3191857,"status":true,"title":"OEmbed Lazyload","created":"2021-01-09T19:05:08+00:00","changed":"2025-01-13T05:20:03+00:00","body":{"value":"\u003Ch2\u003EMotivation\u003C\/h2\u003E\r\n\u003Cblockquote\u003EThe OEmbed Lazyload module aims to prevent the unnecessary loading of third party assets until such time that a user expresses interest in viewing the third party content or such content enters the viewport, depending on how the module is configured.\u003C\/blockquote\u003E\r\n\r\n\u003Ch3\u003ELoading third party content is slow\u003C\/h3\u003E\r\nThis project was developed in order to help optimize projects that rely heavily on \u003Cstrong\u003Ecore media\u003C\/strong\u003E oembed content.  Oembed on its own has the potential to load excessive third party assets even if a user has no intention of consuming the content.\r\n\r\nFor example, loading oembed content from YouTube can add nearly 750kB to what a user has to download on every page view.\r\n\u003Cimg src=\u0022\/files\/youtube-assets.png\u0022 alt=\u0022Chrome developer tools showing that third party YouTube assets cost approximately 750 kilobytes\u0022 \/\u003E\r\n\r\n\u003Ch3\u003ESome third party content providers offer a rich API\u003C\/h3\u003E\r\nOut of the box, there really isn\u0027t a good way to tap into any custom API\u0027s that a particular provider supports.  For example, there is an option to turn off YouTube branding on video embeds.  This module provides a mechanism to tap into these otherwise inaccessible customization points.\r\n\r\n\u003Ch2\u003EInstallation\u003C\/h2\u003E\r\nThe recommended installation method for this module is via composer.\r\n\u003Ccode\u003Ecomposer require drupal\/oembed_lazyload\u003C\/code\u003E\r\n\r\n\u003Ch2\u003EConfiguration\u003C\/h2\u003E\r\nAfter installing the module and any appropriate sub-module(s), the site builder must select the \u0022Lazy load oEmbed video\u0022 formatter in the appropriate media view display configuration.\r\n\u003Cimg src=\u0022\/files\/oembed-lazyload-config.png\u0022 alt=\u0022Image depicting a site builder setting the Lazy load oEmbed video formatter\u0022 \/\u003E\r\n\r\n\u003Ch2\u003EHow does it work?\u003C\/h2\u003E\r\nThe premise behind the mechanism is deceptively simple.  It leverages the fact that Drupal wraps oEmbed content in an iframe for security purposes (https:\/\/oembed.com\/#section3).  This module provides a Field Formatter that delays the loading of this iframe until a user clicks a \u0022Play\u0022 button or when the iframe enters the viewport.  It also allows plugins to influence the content returned from the oembed provider before serving it to the user.\r\n\r\nSub-modules (notably the \u003Ccode\u003Eoembed_lazyload_youtube\u003C\/code\u003E module), enhances the user-experience through various mechanisms introduced by the new formatter type.\r\n\r\n\u003Ch2\u003EPage Speed Metrics\u003C\/h2\u003E\r\nPage speed insights (https:\/\/developers.google.com\/speed\/pagespeed\/insights\/) shows that lazy loading oEmbed content can have a dramatic effect on perceived page load times.\r\n\u003Ch3\u003EBefore\u003C\/h3\u003E\r\n\u003Cimg src=\u0022\/files\/bartik-before_0.png\u0022 alt=\u0022Page speed insights score of 60 with the core oEmbed formatter\u0022 \/\u003E\r\n\u003Ch3\u003EAfter\u003C\/h3\u003E\r\n\u003Cimg src=\u0022\/files\/bartik-after_0.png\u0022 alt=\u0022Page speed insights score of 98 after switching to the Lazy load formatter\u0022 \/\u003E\r\n\r\n\u003Ch2\u003EBackward Compatibility \/ Upgrade Paths\u003C\/h2\u003E\r\nDev releases offer no BC guarantees whatsoever nor do they guarantee upgrade paths.  Any data model and interface changes can be made without any release notes.  Dev releases are not ready for production use.\r\n\r\nAlpha releases offer no BC guarantees on interfaces.  Data model changes will be communicated out via release notes.  No automated upgrade paths will be made available.\r\n\r\nBeta releases offer no BC guarantees on interfaces.  Any breaking changes will be communicated out via release notes.  No automated upgrade paths will be made available.\r\n\r\nRC releases offer BC guarantees on interfaces and data models.  Upgrade paths will be made available.\r\n\r\nStable releases offer the same guarantees as RC releases, but will also be under the Security Advisory Program.\r\n\r\n\u003Ch2\u003ENeed Help?\u003C\/h2\u003E\r\nFeel free to reach out at #oembed-lazyload at https:\/\/drupal.slack.com or send me a DM.  I\u0027m \u003Ccode\u003Elleber\u003C\/code\u003E on slack.","format":"1","processed":"\u003Cdiv class=\u0022toc-filter\u0022\u003E\u003Ca href=\u0022#top\u0022 class=\u0022back-to-top\u0022\u003EBack to top\u003C\/a\u003E\n\n\u003Ch2 id=\u0022motivation\u0022\u003EMotivation\u003C\/h2\u003E\n\u003Cblockquote\u003E\u003Cp\u003EThe OEmbed Lazyload module aims to prevent the unnecessary loading of third party assets until such time that a user expresses interest in viewing the third party content or such content enters the viewport, depending on how the module is configured.\u003C\/p\u003E\u003C\/blockquote\u003E\n\u003Ch3 id=\u0022loading-third-party-content-is-slow\u0022\u003ELoading third party content is slow\u003C\/h3\u003E\n\u003Cp\u003EThis project was developed in order to help optimize projects that rely heavily on \u003Cstrong\u003Ecore media\u003C\/strong\u003E oembed content.  Oembed on its own has the potential to load excessive third party assets even if a user has no intention of consuming the content.\u003C\/p\u003E\n\u003Cp\u003EFor example, loading oembed content from YouTube can add nearly 750kB to what a user has to download on every page view.\u003Cbr\u003E\n\u003Cimg src=\u0022\/core\/misc\/icons\/e32700\/error.svg\u0022 alt=\u0022Image removed.\u0022 title=\u0022This image has been removed. For security reasons, only images from the local domain are allowed.\u0022 height=\u002216\u0022 width=\u002216\u0022 class=\u0022filter-image-invalid\u0022\u003E\u003C\/p\u003E\n\u003Ch3 id=\u0022some-third-party-content-providers-offer-a-rich-api\u0022\u003ESome third party content providers offer a rich API\u003C\/h3\u003E\n\u003Cp\u003EOut of the box, there really isn\u0027t a good way to tap into any custom API\u0027s that a particular provider supports.  For example, there is an option to turn off YouTube branding on video embeds.  This module provides a mechanism to tap into these otherwise inaccessible customization points.\u003C\/p\u003E\n\u003Ca href=\u0022#top\u0022 class=\u0022back-to-top\u0022\u003EBack to top\u003C\/a\u003E\n\n\u003Ch2 id=\u0022installation\u0022\u003EInstallation\u003C\/h2\u003E\n\u003Cp\u003EThe recommended installation method for this module is via composer.\u003Cbr\u003E\n\u003Ccode\u003Ecomposer require drupal\/oembed_lazyload\u003C\/code\u003E\u003C\/p\u003E\n\u003Ca href=\u0022#top\u0022 class=\u0022back-to-top\u0022\u003EBack to top\u003C\/a\u003E\n\n\u003Ch2 id=\u0022configuration\u0022\u003EConfiguration\u003C\/h2\u003E\n\u003Cp\u003EAfter installing the module and any appropriate sub-module(s), the site builder must select the \u0022Lazy load oEmbed video\u0022 formatter in the appropriate media view display configuration.\u003Cbr\u003E\n\u003Cimg src=\u0022\/core\/misc\/icons\/e32700\/error.svg\u0022 alt=\u0022Image removed.\u0022 title=\u0022This image has been removed. For security reasons, only images from the local domain are allowed.\u0022 height=\u002216\u0022 width=\u002216\u0022 class=\u0022filter-image-invalid\u0022\u003E\u003C\/p\u003E\n\u003Ca href=\u0022#top\u0022 class=\u0022back-to-top\u0022\u003EBack to top\u003C\/a\u003E\n\n\u003Ch2 id=\u0022how-does-it-work\u0022\u003EHow does it work?\u003C\/h2\u003E\n\u003Cp\u003EThe premise behind the mechanism is deceptively simple.  It leverages the fact that Drupal wraps oEmbed content in an iframe for security purposes (\u003Ca href=\u0022https:\/\/oembed.com\/#section3\u0022 rel=\u0022nofollow\u0022\u003Ehttps:\/\/oembed.com\/#section3\u003C\/a\u003E).  This module provides a Field Formatter that delays the loading of this iframe until a user clicks a \u0022Play\u0022 button or when the iframe enters the viewport.  It also allows plugins to influence the content returned from the oembed provider before serving it to the user.\u003C\/p\u003E\n\u003Cp\u003ESub-modules (notably the \u003Ccode\u003Eoembed_lazyload_youtube\u003C\/code\u003E module), enhances the user-experience through various mechanisms introduced by the new formatter type.\u003C\/p\u003E\n\u003Ca href=\u0022#top\u0022 class=\u0022back-to-top\u0022\u003EBack to top\u003C\/a\u003E\n\n\u003Ch2 id=\u0022page-speed-metrics\u0022\u003EPage Speed Metrics\u003C\/h2\u003E\n\u003Cp\u003EPage speed insights (\u003Ca href=\u0022https:\/\/developers.google.com\/speed\/pagespeed\/insights\/\u0022 rel=\u0022nofollow\u0022\u003Ehttps:\/\/developers.google.com\/speed\/pagespeed\/insights\/\u003C\/a\u003E) shows that lazy loading oEmbed content can have a dramatic effect on perceived page load times.\u003C\/p\u003E\n\u003Ch3 id=\u0022before\u0022\u003EBefore\u003C\/h3\u003E\n\u003Cp\u003E\u003Cimg src=\u0022\/files\/bartik-before_0.png\u0022 alt=\u0022Page speed insights score of 60 with the core oEmbed formatter\u0022\u003E\u003C\/p\u003E\n\u003Ch3 id=\u0022after\u0022\u003EAfter\u003C\/h3\u003E\n\u003Cp\u003E\u003Cimg src=\u0022\/files\/bartik-after_0.png\u0022 alt=\u0022Page speed insights score of 98 after switching to the Lazy load formatter\u0022\u003E\u003C\/p\u003E\n\u003Ca href=\u0022#top\u0022 class=\u0022back-to-top\u0022\u003EBack to top\u003C\/a\u003E\n\n\u003Ch2 id=\u0022backward-compatibility-upgrade-paths\u0022\u003EBackward Compatibility \/ Upgrade Paths\u003C\/h2\u003E\n\u003Cp\u003EDev releases offer no BC guarantees whatsoever nor do they guarantee upgrade paths.  Any data model and interface changes can be made without any release notes.  Dev releases are not ready for production use.\u003C\/p\u003E\n\u003Cp\u003EAlpha releases offer no BC guarantees on interfaces.  Data model changes will be communicated out via release notes.  No automated upgrade paths will be made available.\u003C\/p\u003E\n\u003Cp\u003EBeta releases offer no BC guarantees on interfaces.  Any breaking changes will be communicated out via release notes.  No automated upgrade paths will be made available.\u003C\/p\u003E\n\u003Cp\u003ERC releases offer BC guarantees on interfaces and data models.  Upgrade paths will be made available.\u003C\/p\u003E\n\u003Cp\u003EStable releases offer the same guarantees as RC releases, but will also be under the Security Advisory Program.\u003C\/p\u003E\n\u003Ca href=\u0022#top\u0022 class=\u0022back-to-top\u0022\u003EBack to top\u003C\/a\u003E\n\n\u003Ch2 id=\u0022need-help\u0022\u003ENeed Help?\u003C\/h2\u003E\n\u003Cp\u003EFeel free to reach out at #oembed-lazyload at \u003Ca href=\u0022https:\/\/drupal.slack.com\u0022 rel=\u0022nofollow\u0022\u003Ehttps:\/\/drupal.slack.com\u003C\/a\u003E or send me a DM.  I\u0027m \u003Ccode\u003Elleber\u003C\/code\u003E on slack.\u003C\/p\u003E\u003Ca href=\u0022#top\u0022 class=\u0022back-to-top\u0022\u003EBack to top\u003C\/a\u003E\u003C\/div\u003E","summary":""},"field_active_installs":"{\u00221.0.x\u0022:72,\u00222.0.x\u0022:1435}","field_active_installs_total":1507,"field_composer_namespace":"drupal\/oembed_lazyload","field_composer_types":[],"field_core_semver_maximum":12000000,"field_core_semver_minimum":8000000,"field_issue_summary_template":null,"field_logo_url":null,"field_project_has_releases":true,"field_project_machine_name":"oembed_lazyload","field_security_advisory_coverage":"covered"},"relationships":{"uid":{"data":{"type":"user--user","id":"b838d119-25c6-44b2-adc2-372e8a8b87cd","meta":{"drupal_internal__target_id":3509746}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/3c5a26ec-220c-474b-b82d-7bc76be5fa16\/uid?resourceVersion=id%3A20051465"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/3c5a26ec-220c-474b-b82d-7bc76be5fa16\/relationships\/uid?resourceVersion=id%3A20051465"}}},"field_development_status":{"data":{"type":"taxonomy_term--development_status","id":"e767288c-9800-4fb4-aeb8-8c311533838a","meta":{"drupal_internal__target_id":27274}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/3c5a26ec-220c-474b-b82d-7bc76be5fa16\/field_development_status?resourceVersion=id%3A20051465"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/3c5a26ec-220c-474b-b82d-7bc76be5fa16\/relationships\/field_development_status?resourceVersion=id%3A20051465"}}},"field_maintenance_status":{"data":{"type":"taxonomy_term--maintenance_status","id":"089406ad-304d-4737-80d1-2f08527ae49e","meta":{"drupal_internal__target_id":27271}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/3c5a26ec-220c-474b-b82d-7bc76be5fa16\/field_maintenance_status?resourceVersion=id%3A20051465"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/3c5a26ec-220c-474b-b82d-7bc76be5fa16\/relationships\/field_maintenance_status?resourceVersion=id%3A20051465"}}},"field_module_categories":{"data":[{"type":"taxonomy_term--module_categories","id":"3df293b3-c9a1-4232-962b-3c8169e8e6e3","meta":{"drupal_internal__target_id":203}},{"type":"taxonomy_term--module_categories","id":"68428c33-1db7-438d-b1b3-e23004e0982b","meta":{"drupal_internal__target_id":192}},{"type":"taxonomy_term--module_categories","id":"d1322ab4-e2be-4f21-9e01-8c19b3da8bea","meta":{"drupal_internal__target_id":197}}],"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/3c5a26ec-220c-474b-b82d-7bc76be5fa16\/field_module_categories?resourceVersion=id%3A20051465"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/3c5a26ec-220c-474b-b82d-7bc76be5fa16\/relationships\/field_module_categories?resourceVersion=id%3A20051465"}}},"field_project_images":{"data":[],"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/3c5a26ec-220c-474b-b82d-7bc76be5fa16\/field_project_images?resourceVersion=id%3A20051465"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/3c5a26ec-220c-474b-b82d-7bc76be5fa16\/relationships\/field_project_images?resourceVersion=id%3A20051465"}}}}},{"type":"node--project_module","id":"6dc3aa24-eb6f-4ccd-854d-c08303bf15f1","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/6dc3aa24-eb6f-4ccd-854d-c08303bf15f1?resourceVersion=id%3A20048919"}},"attributes":{"drupal_internal__nid":3090051,"status":true,"title":"Status Messages","created":"2019-10-25T06:09:58+00:00","changed":"2025-01-13T05:20:03+00:00","body":{"value":"Status Messages which floats to the top right of the page as a pop-up message and has a close button.\r\nIt has configuration until how much time we want to display the message. For eg [5,10,15,20     seconds or never]. \r\nAfter selected time status message will be faded out and will hide from the display.\r\n\r\n\u003Cimg src=\u0022https:\/\/www.drupal.org\/files\/project-images\/status-messages-config.png\u0022 width=\u0022100%\u0022 height=\u0022166\u0022 alt=\u0022\u0022 title=\u0022\u0022\u003E\r\n\r\n\u003Cimg src=\u0022https:\/\/www.drupal.org\/files\/project-images\/status-messages.png\u0022 width=\u0022100%\u0022 height=\u0022166\u0022 alt=\u0022\u0022 title=\u0022\u0022\u003E\r\n\r\n\u003Ch3\u003E Credits \u003C\/h3\u003E\r\nStatus Messages Logo by \u003Ca href=\u0022https:\/\/www.drupal.org\/u\/grienauer\u0022\u003ENico Grienauer (Grienauer)\u003C\/a\u003E\r\n\r\n\u003Ch3\u003EWant to support the development of this project?\u003C\/h3\u003E\r\n \t \t\r\n\u003Ca class=\u0022action-button\u0022 href=\u0022https:\/\/www.buymeacoffee.com\/neslee\u0022 target=\u0022blank\u0022 rel=\u0022nofollow\u0022\u003EBuy me a coffee \u2615\ufe0f\u003C\/a\u003E","format":"1","processed":"\u003Cdiv class=\u0022toc-filter\u0022\u003E\u003Cp\u003EStatus Messages which floats to the top right of the page as a pop-up message and has a close button.\u003Cbr\u003E\nIt has configuration until how much time we want to display the message. For eg [5,10,15,20     seconds or never].\u003Cbr\u003E\nAfter selected time status message will be faded out and will hide from the display.\u003C\/p\u003E\n\u003Cp\u003E\u003Cimg src=\u0022\/files\/project-images\/status-messages-config.png\u0022 width=\u0022100%\u0022 height=\u0022166\u0022 alt\u003E\u003C\/p\u003E\n\u003Cp\u003E\u003Cimg src=\u0022\/files\/project-images\/status-messages.png\u0022 width=\u0022100%\u0022 height=\u0022166\u0022 alt\u003E\u003C\/p\u003E\n\u003Ch3 id=\u0022credits\u0022\u003E Credits \u003C\/h3\u003E\n\u003Cp\u003EStatus Messages Logo by \u003Ca href=\u0022https:\/\/www.drupal.org\/u\/grienauer\u0022 rel=\u0022nofollow\u0022\u003ENico Grienauer (Grienauer)\u003C\/a\u003E\u003C\/p\u003E\n\u003Ch3 id=\u0022want-to-support-the-development-of-this-project\u0022\u003EWant to support the development of this project?\u003C\/h3\u003E\n\u003Cp\u003E\u003Ca href=\u0022https:\/\/www.buymeacoffee.com\/neslee\u0022 rel=\u0022nofollow\u0022\u003EBuy me a coffee \u2615\ufe0f\u003C\/a\u003E\u003C\/p\u003E\u003Ca href=\u0022#top\u0022 class=\u0022back-to-top\u0022\u003EBack to top\u003C\/a\u003E\u003C\/div\u003E","summary":""},"field_active_installs":"{\u00228.x-2.x\u0022:4,\u00228.x-4.x\u0022:1482}","field_active_installs_total":1486,"field_composer_namespace":"drupal\/status_messages","field_composer_types":[],"field_core_semver_maximum":12000000,"field_core_semver_minimum":8000000,"field_issue_summary_template":null,"field_logo_url":null,"field_project_has_releases":true,"field_project_machine_name":"status_messages","field_security_advisory_coverage":"covered"},"relationships":{"uid":{"data":{"type":"user--user","id":"b4fede92-954d-4456-a20e-61dd14401155","meta":{"drupal_internal__target_id":3580850}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/6dc3aa24-eb6f-4ccd-854d-c08303bf15f1\/uid?resourceVersion=id%3A20048919"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/6dc3aa24-eb6f-4ccd-854d-c08303bf15f1\/relationships\/uid?resourceVersion=id%3A20048919"}}},"field_development_status":{"data":{"type":"taxonomy_term--development_status","id":"e767288c-9800-4fb4-aeb8-8c311533838a","meta":{"drupal_internal__target_id":27274}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/6dc3aa24-eb6f-4ccd-854d-c08303bf15f1\/field_development_status?resourceVersion=id%3A20048919"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/6dc3aa24-eb6f-4ccd-854d-c08303bf15f1\/relationships\/field_development_status?resourceVersion=id%3A20048919"}}},"field_maintenance_status":{"data":{"type":"taxonomy_term--maintenance_status","id":"089406ad-304d-4737-80d1-2f08527ae49e","meta":{"drupal_internal__target_id":27271}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/6dc3aa24-eb6f-4ccd-854d-c08303bf15f1\/field_maintenance_status?resourceVersion=id%3A20048919"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/6dc3aa24-eb6f-4ccd-854d-c08303bf15f1\/relationships\/field_maintenance_status?resourceVersion=id%3A20048919"}}},"field_module_categories":{"data":[{"type":"taxonomy_term--module_categories","id":"3df293b3-c9a1-4232-962b-3c8169e8e6e3","meta":{"drupal_internal__target_id":203}},{"type":"taxonomy_term--module_categories","id":"abf23828-f269-4d39-8589-b731209eb154","meta":{"drupal_internal__target_id":186}},{"type":"taxonomy_term--module_categories","id":"086cebcf-200f-4c34-886e-f9921919b292","meta":{"drupal_internal__target_id":189}}],"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/6dc3aa24-eb6f-4ccd-854d-c08303bf15f1\/field_module_categories?resourceVersion=id%3A20048919"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/6dc3aa24-eb6f-4ccd-854d-c08303bf15f1\/relationships\/field_module_categories?resourceVersion=id%3A20048919"}}},"field_project_images":{"data":[{"type":"file--file","id":"1b7b7c0f-ca36-4dc7-95b5-7df8211eba53","meta":{"alt":"Status Messages","title":null,"width":600,"height":600,"drupal_internal__target_id":29427}}],"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/6dc3aa24-eb6f-4ccd-854d-c08303bf15f1\/field_project_images?resourceVersion=id%3A20048919"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/6dc3aa24-eb6f-4ccd-854d-c08303bf15f1\/relationships\/field_project_images?resourceVersion=id%3A20048919"}}}}},{"type":"node--project_module","id":"dcbd138d-8a12-41ed-b41d-517609d9634f","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/dcbd138d-8a12-41ed-b41d-517609d9634f?resourceVersion=id%3A20050698"}},"attributes":{"drupal_internal__nid":3161395,"status":true,"title":"Text field formatter","created":"2020-07-25T07:19:52+00:00","changed":"2025-01-13T05:20:03+00:00","body":{"value":"This module is the extension of the plain text formatter. \r\n\r\n\u003Cstrong\u003EThe module features:\u003C\/strong\u003E\r\n\u003Cul\u003E\r\n  \u003Cli\u003EAbility to add an additional wrapper to the text field.\u003C\/li\u003E\r\n  \u003Cli\u003EAbility to add classes to this wrapper.\u003C\/li\u003E\r\n  \u003Cli\u003EAbility to add any of the attributes to this wrapper.\u003C\/li\u003E\r\n  \u003Cli\u003EThe option for overriding a link label (tokens are supported).\u003C\/li\u003E\r\n\u003C\/ul\u003E\r\n\r\n\u003Cstrong\u003ECompatible with Layout Builder - the easiest way to add an H1 tag to the node title on the page.\u003C\/strong\u003E\r\nCompatible with the \u003Ca href=\u0022https:\/\/www.drupal.org\/project\/linked_field\u0022\u003ELinked field\u003C\/a\u003E.\r\n\r\nThe idea behind this module is taken from another similar module: \u003Ca href=\u0022https:\/\/www.drupal.org\/project\/string_field_formatter\u0022\u003EString field formatter\u003C\/a\u003E\r\n\r\nBut they have a difference:\r\nThe String field formatter is an independent formatter but this module extended the plain text formatter from the Drupal core and inherit options like this - \u0022Link to the Content\u0022 checkbox.","format":"1","processed":"\u003Cp\u003EThis module is the extension of the plain text formatter. \u003C\/p\u003E\n\u003Cp\u003E\u003Cstrong\u003EThe module features:\u003C\/strong\u003E\u003C\/p\u003E\n\u003Cul\u003E\n\u003Cli\u003EAbility to add an additional wrapper to the text field.\u003C\/li\u003E\n\u003Cli\u003EAbility to add classes to this wrapper.\u003C\/li\u003E\n\u003Cli\u003EAbility to add any of the attributes to this wrapper.\u003C\/li\u003E\n\u003Cli\u003EThe option for overriding a link label (tokens are supported).\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Cp\u003E\u003Cstrong\u003ECompatible with Layout Builder - the easiest way to add an H1 tag to the node title on the page.\u003C\/strong\u003E\u003Cbr\u003E\nCompatible with the \u003Ca href=\u0022https:\/\/www.drupal.org\/project\/linked_field\u0022 rel=\u0022nofollow\u0022\u003ELinked field\u003C\/a\u003E.\u003C\/p\u003E\n\u003Cp\u003EThe idea behind this module is taken from another similar module: \u003Ca href=\u0022https:\/\/www.drupal.org\/project\/string_field_formatter\u0022 rel=\u0022nofollow\u0022\u003EString field formatter\u003C\/a\u003E\u003C\/p\u003E\n\u003Cp\u003EBut they have a difference:\u003Cbr\u003E\nThe String field formatter is an independent formatter but this module extended the plain text formatter from the Drupal core and inherit options like this - \u0022Link to the Content\u0022 checkbox.\u003C\/p\u003E","summary":""},"field_active_installs":"{\u00222.0.x\u0022:1402}","field_active_installs_total":1402,"field_composer_namespace":"drupal\/text_field_formatter","field_composer_types":[],"field_core_semver_maximum":12999999,"field_core_semver_minimum":8000000,"field_issue_summary_template":null,"field_logo_url":null,"field_project_has_releases":true,"field_project_machine_name":"text_field_formatter","field_security_advisory_coverage":"covered"},"relationships":{"uid":{"data":{"type":"user--user","id":"92fc198c-6cdd-4353-9689-ee069cf5805e","meta":{"drupal_internal__target_id":3558183}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/dcbd138d-8a12-41ed-b41d-517609d9634f\/uid?resourceVersion=id%3A20050698"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/dcbd138d-8a12-41ed-b41d-517609d9634f\/relationships\/uid?resourceVersion=id%3A20050698"}}},"field_development_status":{"data":{"type":"taxonomy_term--development_status","id":"e767288c-9800-4fb4-aeb8-8c311533838a","meta":{"drupal_internal__target_id":27274}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/dcbd138d-8a12-41ed-b41d-517609d9634f\/field_development_status?resourceVersion=id%3A20050698"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/dcbd138d-8a12-41ed-b41d-517609d9634f\/relationships\/field_development_status?resourceVersion=id%3A20050698"}}},"field_maintenance_status":{"data":{"type":"taxonomy_term--maintenance_status","id":"089406ad-304d-4737-80d1-2f08527ae49e","meta":{"drupal_internal__target_id":27271}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/dcbd138d-8a12-41ed-b41d-517609d9634f\/field_maintenance_status?resourceVersion=id%3A20050698"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/dcbd138d-8a12-41ed-b41d-517609d9634f\/relationships\/field_maintenance_status?resourceVersion=id%3A20050698"}}},"field_module_categories":{"data":[{"type":"taxonomy_term--module_categories","id":"3df293b3-c9a1-4232-962b-3c8169e8e6e3","meta":{"drupal_internal__target_id":203}},{"type":"taxonomy_term--module_categories","id":"86237004-3801-40cf-96b5-fe7d60efccb5","meta":{"drupal_internal__target_id":187}},{"type":"taxonomy_term--module_categories","id":"754c04cb-6da2-42ba-9032-d64307f68f45","meta":{"drupal_internal__target_id":188}}],"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/dcbd138d-8a12-41ed-b41d-517609d9634f\/field_module_categories?resourceVersion=id%3A20050698"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/dcbd138d-8a12-41ed-b41d-517609d9634f\/relationships\/field_module_categories?resourceVersion=id%3A20050698"}}},"field_project_images":{"data":[{"type":"file--file","id":"bfb0e572-38b2-49e9-ba74-97c8247e3158","meta":{"alt":"","title":null,"width":1803,"height":758,"drupal_internal__target_id":30456}},{"type":"file--file","id":"3d8b01fc-bdfc-4748-864f-60a51c1587de","meta":{"alt":"","title":null,"width":1806,"height":135,"drupal_internal__target_id":30037}},{"type":"file--file","id":"d245efd1-1031-405a-98d6-fda75f375c7c","meta":{"alt":"","title":null,"width":1404,"height":452,"drupal_internal__target_id":30038}}],"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/dcbd138d-8a12-41ed-b41d-517609d9634f\/field_project_images?resourceVersion=id%3A20050698"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/dcbd138d-8a12-41ed-b41d-517609d9634f\/relationships\/field_project_images?resourceVersion=id%3A20050698"}}}}},{"type":"node--project_module","id":"95ff683c-a25b-41af-b1d5-a286fab3867a","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/95ff683c-a25b-41af-b1d5-a286fab3867a?resourceVersion=id%3A20015222"}},"attributes":{"drupal_internal__nid":1207958,"status":true,"title":"Language Cookie","created":"2011-07-03T15:16:44+00:00","changed":"2025-01-13T05:20:03+00:00","body":{"value":"Adds an extra \u0022Cookie\u0022 field to the Language Negotiation settings, allowing the language to be set according to a cookie.\r\n\r\nThe cookie name, domain \u0026 expiration are configurable in the settings page.\r\n\r\n\u003Ch3\u003EUsage\u003C\/h3\u003E\r\n\r\n\u003Cul\u003E\r\n  \u003Cli\u003EEnable the module and go to: Administration \u00bb Configuration \u00bb Regional and language \u00bb Languages\u003C\/li\u003E\r\n  \u003Cli\u003EEnable the \u0022Cookie\u0022 detection method and re-arrange the detection methods as you see fit. The recommended arrangement is: \u0022URL -\u003E Cookie\u0022.\u003C\/li\u003E\r\n  \u003Cli\u003EIf you a language selection splash screen is needed, the \u003Ca href=\u0022https:\/\/drupal.org\/project\/language_selection_page\u0022\u003ELanguage Selection Page\u003C\/a\u003E module is recommended. In this case, the recommended setup is: \u0022URL -\u003E Cookie -\u003E Language Selection Page\u0022.\u003C\/li\u003E\r\n  \u003Cli\u003EFor the cookie to be set properly on cached pages, the variable \u003Ccode\u003Epage_cache_invoke_hooks\u003C\/code\u003E has to be set to TRUE. This can be done by adding the following line to your settings.php file: \u003Ccode\u003E$conf[\u0027page_cache_invoke_hooks\u0027] = TRUE;\u003C\/code\u003E\u003C\/li\u003E\r\n\u003C\/ul\u003E\r\n\r\n\u003Ch3\u003EMajor versions\u003C\/h3\u003E\r\n\r\nVersions 1.x of this module requires prefix\/domain based interface language detection, whereas version 2.x will attempt to get the language from any interface language provider with a lower weight than the Cookie language type. For instance, arrangements such as \u0022Session -\u003E Cookie\u0022 should also work now.","format":"1","processed":"\u003Cdiv class=\u0022toc-filter\u0022\u003E\u003Cp\u003EAdds an extra \u0022Cookie\u0022 field to the Language Negotiation settings, allowing the language to be set according to a cookie.\u003C\/p\u003E\n\u003Cp\u003EThe cookie name, domain \u0026amp; expiration are configurable in the settings page.\u003C\/p\u003E\n\u003Ch3 id=\u0022usage\u0022\u003EUsage\u003C\/h3\u003E\n\u003Cul\u003E\n\u003Cli\u003EEnable the module and go to: Administration \u00bb Configuration \u00bb Regional and language \u00bb Languages\u003C\/li\u003E\n\u003Cli\u003EEnable the \u0022Cookie\u0022 detection method and re-arrange the detection methods as you see fit. The recommended arrangement is: \u0022URL -\u0026gt; Cookie\u0022.\u003C\/li\u003E\n\u003Cli\u003EIf you a language selection splash screen is needed, the \u003Ca href=\u0022https:\/\/drupal.org\/project\/language_selection_page\u0022 rel=\u0022nofollow\u0022\u003ELanguage Selection Page\u003C\/a\u003E module is recommended. In this case, the recommended setup is: \u0022URL -\u0026gt; Cookie -\u0026gt; Language Selection Page\u0022.\u003C\/li\u003E\n\u003Cli\u003EFor the cookie to be set properly on cached pages, the variable \u003Ccode\u003Epage_cache_invoke_hooks\u003C\/code\u003E has to be set to TRUE. This can be done by adding the following line to your settings.php file: \u003Ccode\u003E$conf[\u0027page_cache_invoke_hooks\u0027] = TRUE;\u003C\/code\u003E\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Ch3 id=\u0022major-versions\u0022\u003EMajor versions\u003C\/h3\u003E\n\u003Cp\u003EVersions 1.x of this module requires prefix\/domain based interface language detection, whereas version 2.x will attempt to get the language from any interface language provider with a lower weight than the Cookie language type. For instance, arrangements such as \u0022Session -\u0026gt; Cookie\u0022 should also work now.\u003C\/p\u003E\u003Ca href=\u0022#top\u0022 class=\u0022back-to-top\u0022\u003EBack to top\u003C\/a\u003E\u003C\/div\u003E","summary":""},"field_active_installs":"{\u00227.x-1.x\u0022:18,\u00227.x-2.x\u0022:219,\u00228.x-1.x\u0022:73,\u00222.0.x\u0022:781}","field_active_installs_total":1091,"field_composer_namespace":"drupal\/language_cookie","field_composer_types":[],"field_core_semver_maximum":12000000,"field_core_semver_minimum":8000000,"field_issue_summary_template":null,"field_logo_url":null,"field_project_has_releases":true,"field_project_machine_name":"language_cookie","field_security_advisory_coverage":"covered"},"relationships":{"uid":{"data":{"type":"user--user","id":"07e0e0f4-a5d1-4394-b99f-df2757a249d0","meta":{"drupal_internal__target_id":850856}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/95ff683c-a25b-41af-b1d5-a286fab3867a\/uid?resourceVersion=id%3A20015222"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/95ff683c-a25b-41af-b1d5-a286fab3867a\/relationships\/uid?resourceVersion=id%3A20015222"}}},"field_development_status":{"data":{"type":"taxonomy_term--development_status","id":"e767288c-9800-4fb4-aeb8-8c311533838a","meta":{"drupal_internal__target_id":27274}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/95ff683c-a25b-41af-b1d5-a286fab3867a\/field_development_status?resourceVersion=id%3A20015222"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/95ff683c-a25b-41af-b1d5-a286fab3867a\/relationships\/field_development_status?resourceVersion=id%3A20015222"}}},"field_maintenance_status":{"data":{"type":"taxonomy_term--maintenance_status","id":"089406ad-304d-4737-80d1-2f08527ae49e","meta":{"drupal_internal__target_id":27271}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/95ff683c-a25b-41af-b1d5-a286fab3867a\/field_maintenance_status?resourceVersion=id%3A20015222"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/95ff683c-a25b-41af-b1d5-a286fab3867a\/relationships\/field_maintenance_status?resourceVersion=id%3A20015222"}}},"field_module_categories":{"data":[{"type":"taxonomy_term--module_categories","id":"3df293b3-c9a1-4232-962b-3c8169e8e6e3","meta":{"drupal_internal__target_id":203}},{"type":"taxonomy_term--module_categories","id":"3cf38e0a-d4b1-426d-9b8e-008e7a41cf8d","meta":{"drupal_internal__target_id":194}},{"type":"taxonomy_term--module_categories","id":"dcb48e9f-6afa-4842-8ef6-44b90b083fcc","meta":{"drupal_internal__target_id":200}}],"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/95ff683c-a25b-41af-b1d5-a286fab3867a\/field_module_categories?resourceVersion=id%3A20015222"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/95ff683c-a25b-41af-b1d5-a286fab3867a\/relationships\/field_module_categories?resourceVersion=id%3A20015222"}}},"field_project_images":{"data":[{"type":"file--file","id":"74167f27-5c4f-4704-97c1-d5d77ef200af","meta":{"alt":"language-cookie-full.jpg","title":null,"width":1271,"height":427,"drupal_internal__target_id":3817}}],"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/95ff683c-a25b-41af-b1d5-a286fab3867a\/field_project_images?resourceVersion=id%3A20015222"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/95ff683c-a25b-41af-b1d5-a286fab3867a\/relationships\/field_project_images?resourceVersion=id%3A20015222"}}}}},{"type":"node--project_module","id":"44027a5f-b753-4add-857f-8f6f2a02df9b","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/44027a5f-b753-4add-857f-8f6f2a02df9b?resourceVersion=id%3A20044673"}},"attributes":{"drupal_internal__nid":2953253,"status":true,"title":"Animate On Scroll (AOS)","created":"2018-03-15T12:06:13+00:00","changed":"2025-01-13T05:20:03+00:00","body":{"value":"Animate On Scroll (AOS) library allows you to animate elements as you scroll down and up. If you scroll back to top, elements will animate to it\u0027s previous state and are ready to animate again if you scroll down. This module provides integration with AOS library.\r\n\r\n\u003Ch3\u003ERequirements\u003C\/h3\u003E\r\nAnimate On Scroll Library. (Check demo at: http:\/\/michalsnik.github.io\/aos\/). \r\n\r\n\u003Col\u003E\r\n  \u003Cli\u003EClick \u003Ca href=\u0022https:\/\/github.com\/michalsnik\/aos\/archive\/refs\/heads\/v2.zip\u0022\u003Ehere\u003C\/a\u003E to download the AOS library (v2).\u003C\/li\u003E\r\n  \u003Cli\u003ECopy aos library in your libraries directory, so  aos.js will be located in libraries at \u003Cstrong\u003E\/aos\/dist\/aos.js\u003C\/strong\u003E .\u003C\/li\u003E\r\n\u003C\/ol\u003E\r\n\r\n\u003Ch3\u003EInstallation\u003C\/h3\u003E\r\n\u003Col\u003E\r\n  \u003Cli\u003ECopy the \u0027aos\u0027 module into your Drupal modules directory and enable it.\u003C\/li\u003E\r\n  \u003Cli\u003EAs this module provides the integration of AOS library, to get the animations on page simply add `data-aos` attribute to element, like \r\n\u003Ccode\u003E\u003Cdiv data-aos=\u0022\u003Cem\u003Eanimation_name\u003C\/em\u003E\u0022\u003E\u003C\/div\u003E\u003C\/code\u003E in your html.\r\n       e.g. \u003Ccode\u003E\u003Cdiv data-aos=\u0022fade-zoom-in\u0022 data-aos-offset=\u0022200\u0022 data-aos-easing=\u0022ease-in-sine\u0022 data-aos-duration=\u0022600\u0022\u003E\u003C\/div\u003E\u003C\/code\u003E\r\n       You can check all available animations \u0026 easing options at https:\/\/github.com\/michalsnik\/aos\u003C\/li\u003E\r\n\u003C\/ol\u003E\r\n\r\n\u003Ch3\u003ERoadmap\u003C\/h3\u003E\r\n \u003Col\u003E\r\n  \u003Cli\u003EExpose configurations for AOS global options.\u003C\/li\u003E\r\n  \u003Cli\u003EExpose configuration to disable AOS library on admin pages.\u003C\/li\u003E\r\n\u003C\/ol\u003E\r\n\r\n","format":"1","processed":"\u003Cdiv class=\u0022toc-filter\u0022\u003E\u003Cp\u003EAnimate On Scroll (AOS) library allows you to animate elements as you scroll down and up. If you scroll back to top, elements will animate to it\u0027s previous state and are ready to animate again if you scroll down. This module provides integration with AOS library.\u003C\/p\u003E\n\u003Ch3 id=\u0022requirements\u0022\u003ERequirements\u003C\/h3\u003E\n\u003Cp\u003EAnimate On Scroll Library. (Check demo at: \u003Ca href=\u0022http:\/\/michalsnik.github.io\/aos\/\u0022 rel=\u0022nofollow\u0022\u003Ehttp:\/\/michalsnik.github.io\/aos\/\u003C\/a\u003E). \u003C\/p\u003E\n\u003Col\u003E\n\u003Cli\u003EClick \u003Ca href=\u0022https:\/\/github.com\/michalsnik\/aos\/archive\/refs\/heads\/v2.zip\u0022 rel=\u0022nofollow\u0022\u003Ehere\u003C\/a\u003E to download the AOS library (v2).\u003C\/li\u003E\n\u003Cli\u003ECopy aos library in your libraries directory, so  aos.js will be located in libraries at \u003Cstrong\u003E\/aos\/dist\/aos.js\u003C\/strong\u003E .\u003C\/li\u003E\n\u003C\/ol\u003E\n\u003Ch3 id=\u0022installation\u0022\u003EInstallation\u003C\/h3\u003E\n\u003Col\u003E\n\u003Cli\u003ECopy the \u0027aos\u0027 module into your Drupal modules directory and enable it.\u003C\/li\u003E\n\u003Cli\u003EAs this module provides the integration of AOS library, to get the animations on page simply add `data-aos` attribute to element, like\u003Cbr\u003E\n\u003Ccode\u003E\u003Cbr\u003E\n\u003Cdiv\u003Eanimation_name\u0022\u0026gt;\u003C\/div\u003E\n\u003Cp\u003E\u003C\/p\u003E\u003C\/code\u003E in your html.\u003Cbr\u003E\n       e.g. \u003Ccode\u003E\u003Cbr\u003E\n\u003Cdiv\u003E\u003C\/div\u003E\n\u003Cp\u003E\u003C\/p\u003E\u003C\/code\u003E\u003Cbr\u003E\n       You can check all available animations \u0026amp; easing options at \u003Ca href=\u0022https:\/\/github.com\/michalsnik\/aos\u0022 rel=\u0022nofollow\u0022\u003Ehttps:\/\/github.com\/michalsnik\/aos\u003C\/a\u003E\u003C\/li\u003E\n\u003C\/ol\u003E\n\u003Ch3 id=\u0022roadmap\u0022\u003ERoadmap\u003C\/h3\u003E\n\u003Col\u003E\n\u003Cli\u003EExpose configurations for AOS global options.\u003C\/li\u003E\n\u003Cli\u003EExpose configuration to disable AOS library on admin pages.\u003C\/li\u003E\n\u003C\/ol\u003E\u003Ca href=\u0022#top\u0022 class=\u0022back-to-top\u0022\u003EBack to top\u003C\/a\u003E\u003C\/div\u003E","summary":""},"field_active_installs":"{\u00227.x-1.x\u0022:377,\u00228.x-1.x\u0022:305,\u00222.0.x\u0022:214}","field_active_installs_total":896,"field_composer_namespace":"drupal\/animate_on_scroll","field_composer_types":[],"field_core_semver_maximum":12000000,"field_core_semver_minimum":8000000,"field_issue_summary_template":null,"field_logo_url":null,"field_project_has_releases":true,"field_project_machine_name":"animate_on_scroll","field_security_advisory_coverage":"not-covered"},"relationships":{"uid":{"data":{"type":"user--user","id":"e21878c3-0407-4b90-9ffc-8bceab357f48","meta":{"drupal_internal__target_id":2996369}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/44027a5f-b753-4add-857f-8f6f2a02df9b\/uid?resourceVersion=id%3A20044673"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/44027a5f-b753-4add-857f-8f6f2a02df9b\/relationships\/uid?resourceVersion=id%3A20044673"}}},"field_development_status":{"data":{"type":"taxonomy_term--development_status","id":"e767288c-9800-4fb4-aeb8-8c311533838a","meta":{"drupal_internal__target_id":27274}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/44027a5f-b753-4add-857f-8f6f2a02df9b\/field_development_status?resourceVersion=id%3A20044673"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/44027a5f-b753-4add-857f-8f6f2a02df9b\/relationships\/field_development_status?resourceVersion=id%3A20044673"}}},"field_maintenance_status":{"data":{"type":"taxonomy_term--maintenance_status","id":"089406ad-304d-4737-80d1-2f08527ae49e","meta":{"drupal_internal__target_id":27271}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/44027a5f-b753-4add-857f-8f6f2a02df9b\/field_maintenance_status?resourceVersion=id%3A20044673"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/44027a5f-b753-4add-857f-8f6f2a02df9b\/relationships\/field_maintenance_status?resourceVersion=id%3A20044673"}}},"field_module_categories":{"data":[{"type":"taxonomy_term--module_categories","id":"3df293b3-c9a1-4232-962b-3c8169e8e6e3","meta":{"drupal_internal__target_id":203}},{"type":"taxonomy_term--module_categories","id":"086cebcf-200f-4c34-886e-f9921919b292","meta":{"drupal_internal__target_id":189}},{"type":"taxonomy_term--module_categories","id":"3322058a-a158-4806-ac5b-9bcabc95edac","meta":{"drupal_internal__target_id":185}}],"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/44027a5f-b753-4add-857f-8f6f2a02df9b\/field_module_categories?resourceVersion=id%3A20044673"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/44027a5f-b753-4add-857f-8f6f2a02df9b\/relationships\/field_module_categories?resourceVersion=id%3A20044673"}}},"field_project_images":{"data":[{"type":"file--file","id":"3693a0d9-06be-4d91-b7b2-c00f6f584524","meta":{"alt":"Animate On Scroll","title":null,"width":1280,"height":288,"drupal_internal__target_id":24161}}],"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/44027a5f-b753-4add-857f-8f6f2a02df9b\/field_project_images?resourceVersion=id%3A20044673"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/44027a5f-b753-4add-857f-8f6f2a02df9b\/relationships\/field_project_images?resourceVersion=id%3A20044673"}}}}},{"type":"node--project_module","id":"b3572f6a-dad6-4810-bb85-5fa7c59ff04e","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/b3572f6a-dad6-4810-bb85-5fa7c59ff04e?resourceVersion=id%3A20052550"}},"attributes":{"drupal_internal__nid":3230331,"status":true,"title":"Drupal REST \u0026 JSON API Authentication","created":"2021-08-28T12:54:01+00:00","changed":"2025-01-20T11:35:37+00:00","body":{"value":"Drupal REST \u0026 JSON API Authentication module restricts and secures unauthorized access to your Drupal site APIs using different authentication methods including Basic Authentication , API Key Authentication , JWT Authentication , OAuth Authentication , External \/ Third-Party Provider Authentication, etc.\r\n\r\nA REST API defines a set of functions in which developers can perform requests such as GET, POST, PUT, PATCH, DELETE, and receive responses via HTTP protocol. For example, when a client application calls a Drupal API to fetch a specific user (the resource), the API will return the state of that user, including their name, email, user ID, etc.\r\n\r\n\u003Cp\u003E\u003Ca class=\u0022button-link whitebg\u0022 href=\u0022https:\/\/playground.miniorange.com\/drupal.php?mo_module=rest_api_authentication\u0026drupal_version=10\u0022 target=\u0022_blank\u0022\u003EPlayground Environment\u003C\/a\u003E \u003Ca class=\u0022button-link whitebg\u0022 href=\u0022https:\/\/plugins.miniorange.com\/drupal-api-authentication\u0022 target=\u0022_blank\u0022\u003ESetup Guide\u003C\/a\u003E \u003Ca class=\u0022button-link whitebg\u0022 href=\u0022https:\/\/www.drupal.org\/node\/3196471\/case-studies\u0022 target=\u0022_blank\u0022\u003EUnique case-studies\u003C\/a\u003E\u003C\/p\u003E\r\n\r\n\u003Cstrong\u003EWhat are the different authentication methods that our module supports:\u003C\/strong\u003E\r\n\r\nThe Drupal REST \u0026 JSON API authentication module provides the below methods for authenticating all your Drupal APIs:\r\n\r\n1) \u003Cstrong\u003EAPI Key Authentication:\u003C\/strong\u003E If you want to protect your Drupal REST APIs from unauthenticated users but you don\u2019t want to share users login credentials or client id and secret to authenticate the REST API, then you can use API Key authentication, which will generate a random authentication key for you. Using this key, you can authenticate any APIs on your site\r\n\r\n2) \u003Cstrong\u003EBasic Authentication\u003C\/strong\u003E : If you want to protect your Drupal REST APIs with the user\u0027s login credentials, then you can opt for this method. It is recommended that you should use this method on HTTPS or secure socket layers.\r\n\r\n3) \u003Cstrong\u003EJWT Authentication\u003C\/strong\u003E : If you are looking to protect your REST APIs using the JWT token and if you do not have any third party provider\/identity provider that issues the JWT token, then you should go for the JWT Authentication method. In this case, our Drupal REST API Authentication itself issues the JWT token and works as an API Authenticator to protect your REST APIs.\r\n\r\n4) \u003Cstrong\u003EOAuth 2.0 Authentication\u003C\/strong\u003E: If you are looking for protecting your REST APIs using the access token and at the same time you do not have any third-party provider\/identity provider, then you should go for OAuth 2.0 Authentication method. In this scenario, our Drupal REST API Authentication works as both OAuth Server and API Authenticator to protect your REST APIs.\r\n\r\n5) \u003Cstrong\u003EThird-Party Provider Authentication\u003C\/strong\u003E: If you are looking for protecting\/restricting access to your Drupal REST APIs using your OAuth Provider\/Identity provider, then you should go for the Third Party Provider Authentication method. In this method, you just need to configure the module with the User Info Endpoint provided by your Identity Provider and you will be able to authenticate the API Request using the token provided by your provider.\r\n\r\n\u003Cb\u003EThis module is compatible with both REST and the JSON API module and even support authentication for custom APIs\u003C\/b\u003E\r\n\u003Cbr\u003E\r\n\u003Cstrong\u003EFeatures Supported (please note that not all features are supported in the free version of the module) \u003C\/strong\u003E\r\n\u003Cul\u003E\r\n\u003Cli\u003ESupports JSON API module \u003C\/li\u003E\r\n\u003Cli\u003ESupports REST APIs\u003C\/li\u003E\r\n\u003Cli\u003ESupports Restriction of Custom APIs\u003C\/li\u003E\r\n\u003Cli\u003EAPI Key Authentication\u003C\/li\u003E\r\n\u003Cli\u003EBasic Authentication\u003C\/li\u003E\r\n\u003Cli\u003EAccess Token Authentication\u003C\/li\u003E\r\n\u003Cli\u003EJWT Authentication\u003C\/li\u003E\r\n\u003Cli\u003EOAuth 2 Authentication\u003C\/li\u003E\r\n\u003Cli\u003EGenerate separate API Keys for every user\u003C\/li\u003E\r\n\u003Cli\u003ECustom Header\u003C\/li\u003E\r\n\u003Cli\u003ECustom Token Expiry\u003C\/li\u003E\r\n\u003Cli\u003ECustom API Restrictions\u003C\/li\u003E\r\n\u003Cli\u003EIP Address Based Restriction\u003C\/li\u003E\r\n\u003Cli\u003ERole Based Restriction\u003C\/li\u003E\r\nand much more...\r\n\u003C\/ul\u003E\u003Cbr\u003E\r\n\u003Cstrong\u003E24\/7 Support:\u003C\/strong\u003E\r\nIf you require any sort of help or assistance in installing or configuring this module, please feel free to reach out to us on our 24*7 support at \u003Ca href=\u0022drupalsupport@xecurify.com\u0022\u003Edrupalsupport@xecurify.com\u003C\/a\u003E or \u003Ca href=\u0022https:\/\/www.miniorange.com\/contact\u0022\u003EContact us\u003C\/a\u003E\r\n\r\n\u003Cstrong\u003EAbout Us\u003C\/strong\u003E\r\nCheck out our website \u003Ca target=\u0022_blank\u0022 href=\u0022https:\/\/www.miniorange.com\/\u0022\u003Ehttps:\/\/www.miniorange.com\/\u003C\/a\u003E or \u003Ca target=\u0022_blank\u0022 href=\u0022https:\/\/plugins.miniorange.com\/drupal\u0022\u003EClick here\u003C\/a\u003E to see all our listed Drupal modules. For more support or information, please email us at info@xecurify.com or \u003Ca target=\u0022_blank\u0022 href=\u0022https:\/\/www.miniorange.com\/contact\u0022\u003EContact us\u003C\/a\u003E. You can also submit your query from the module\u2019s configuration page as well.\r\n\u003Cbr\u003E\r\n\u003Ch3\u003EInstallation:\u003C\/h3\u003E\r\n\u003Cul\u003E\r\n\u003Cli\u003E\u003Ch4\u003EUsing Composer:\u003C\/h4\u003E\r\n\u003Col\u003E\r\n  \u003Cli\u003E\u003Ccode\u003Ecomposer require drupal\/rest_api_authentication\u003C\/code\u003E\u003C\/li\u003E\r\n  \u003Cli\u003EGo to \u003Cstrong\u003EExtend\u003C\/strong\u003E menu on your Drupal admin console and enable the module by checking the checkbox and click on \u003Cstrong\u003Einstall\u003C\/strong\u003E button.\u003C\/li\u003E\r\n  \u003Cli\u003EConfigure the module at \u003Ccode\u003E{BaseURL}\/admin\/config\/people\/rest_api_authentication\/auth_settings\u003C\/code\u003E\u003C\/li\u003E \r\n\u003C\/ol\u003E\u003C\/li\u003E\r\n\u003Cli\u003E\u003Ch4\u003EUsing Drush:\u003C\/h4\u003E\r\n\u003Col\u003E\r\n  \u003Cli\u003EDownload the module: \u003Ccode\u003Edrush dl rest_api_authentication\u003C\/code\u003E\u003C\/li\u003E\r\n  \u003Cli\u003EInstall the module: \u003Ccode\u003Edrush en rest_api_authentication\u003C\/code\u003E\u003C\/li\u003E\r\n  \u003Cli\u003EClear the cache: \u003Ccode\u003Edrush cr\u003C\/code\u003E\u003C\/li\u003E\r\n  \u003Cli\u003EConfigure the module at \u003Ccode\u003E{BaseURL}\/admin\/config\/people\/rest_api_authentication\/auth_settings\u003C\/code\u003E\u003C\/li\u003E\r\n\u003C\/ol\u003E\u003C\/li\u003E\r\n\u003Cli\u003E\u003Ch4\u003EManual installation:\u003C\/h4\u003E\r\n\u003Col\u003E\r\n  \u003Cli\u003EGo to \u003Cstrong\u003EExtend\u003C\/strong\u003E menu on your Drupal admin console and click on \u003Cstrong\u003EInstall new module\u003C\/strong\u003E.\u003C\/li\u003E\r\n  \u003Cli\u003EInstall the Drupal \u003Cem\u003EDrupal REST \u0026 JSON API Authentication\u003C\/em\u003E module either by downloading the zip or from the URL of the package(tar\/zip).\u003C\/li\u003E\r\n  \u003Cli\u003EClick on \u003Cstrong\u003EEnable newly added modules\u003C\/strong\u003E.\u003C\/li\u003E\r\n  \u003Cli\u003EEnable this module by checking the checkbox and click on \u003Cstrong\u003Einstall\u003C\/strong\u003E button.\u003C\/li\u003E \r\n  \u003Cli\u003EConfigure the module at \u003Ccode\u003E{BaseURL}\/admin\/config\/people\/rest_api_authentication\/auth_settings\u003C\/code\u003E\u003C\/li\u003E\r\n\u003C\/ol\u003E\u003C\/li\u003E\r\n\u003C\/ul\u003E\r\n","format":"1","processed":"\u003Cp\u003EDrupal REST \u0026amp; JSON API Authentication module restricts and secures unauthorized access to your Drupal site APIs using different authentication methods including Basic Authentication , API Key Authentication , JWT Authentication , OAuth Authentication , External \/ Third-Party Provider Authentication, etc.\u003C\/p\u003E\n\u003Cp\u003EA REST API defines a set of functions in which developers can perform requests such as GET, POST, PUT, PATCH, DELETE, and receive responses via HTTP protocol. For example, when a client application calls a Drupal API to fetch a specific user (the resource), the API will return the state of that user, including their name, email, user ID, etc.\u003C\/p\u003E\n\u003Cp\u003E\u003Ca href=\u0022https:\/\/playground.miniorange.com\/drupal.php?mo_module=rest_api_authentication\u0026amp;drupal_version=10\u0022 rel=\u0022nofollow\u0022\u003EPlayground Environment\u003C\/a\u003E \u003Ca href=\u0022https:\/\/plugins.miniorange.com\/drupal-api-authentication\u0022 rel=\u0022nofollow\u0022\u003ESetup Guide\u003C\/a\u003E \u003Ca href=\u0022https:\/\/www.drupal.org\/node\/3196471\/case-studies\u0022 rel=\u0022nofollow\u0022\u003EUnique case-studies\u003C\/a\u003E\u003C\/p\u003E\n\u003Cp\u003E\u003Cstrong\u003EWhat are the different authentication methods that our module supports:\u003C\/strong\u003E\u003C\/p\u003E\n\u003Cp\u003EThe Drupal REST \u0026amp; JSON API authentication module provides the below methods for authenticating all your Drupal APIs:\u003C\/p\u003E\n\u003Cp\u003E1) \u003Cstrong\u003EAPI Key Authentication:\u003C\/strong\u003E If you want to protect your Drupal REST APIs from unauthenticated users but you don\u2019t want to share users login credentials or client id and secret to authenticate the REST API, then you can use API Key authentication, which will generate a random authentication key for you. Using this key, you can authenticate any APIs on your site\u003C\/p\u003E\n\u003Cp\u003E2) \u003Cstrong\u003EBasic Authentication\u003C\/strong\u003E : If you want to protect your Drupal REST APIs with the user\u0027s login credentials, then you can opt for this method. It is recommended that you should use this method on HTTPS or secure socket layers.\u003C\/p\u003E\n\u003Cp\u003E3) \u003Cstrong\u003EJWT Authentication\u003C\/strong\u003E : If you are looking to protect your REST APIs using the JWT token and if you do not have any third party provider\/identity provider that issues the JWT token, then you should go for the JWT Authentication method. In this case, our Drupal REST API Authentication itself issues the JWT token and works as an API Authenticator to protect your REST APIs.\u003C\/p\u003E\n\u003Cp\u003E4) \u003Cstrong\u003EOAuth 2.0 Authentication\u003C\/strong\u003E: If you are looking for protecting your REST APIs using the access token and at the same time you do not have any third-party provider\/identity provider, then you should go for OAuth 2.0 Authentication method. In this scenario, our Drupal REST API Authentication works as both OAuth Server and API Authenticator to protect your REST APIs.\u003C\/p\u003E\n\u003Cp\u003E5) \u003Cstrong\u003EThird-Party Provider Authentication\u003C\/strong\u003E: If you are looking for protecting\/restricting access to your Drupal REST APIs using your OAuth Provider\/Identity provider, then you should go for the Third Party Provider Authentication method. In this method, you just need to configure the module with the User Info Endpoint provided by your Identity Provider and you will be able to authenticate the API Request using the token provided by your provider.\u003C\/p\u003E\n\u003Cp\u003E\u003Cb\u003EThis module is compatible with both REST and the JSON API module and even support authentication for custom APIs\u003C\/b\u003E\u003Cbr\u003E\n\u003Cbr\u003E\u003Cbr\u003E\n\u003Cstrong\u003EFeatures Supported (please note that not all features are supported in the free version of the module) \u003C\/strong\u003E\u003C\/p\u003E\n\u003Cul\u003E\n\u003Cli\u003ESupports JSON API module \u003C\/li\u003E\n\u003Cli\u003ESupports REST APIs\u003C\/li\u003E\n\u003Cli\u003ESupports Restriction of Custom APIs\u003C\/li\u003E\n\u003Cli\u003EAPI Key Authentication\u003C\/li\u003E\n\u003Cli\u003EBasic Authentication\u003C\/li\u003E\n\u003Cli\u003EAccess Token Authentication\u003C\/li\u003E\n\u003Cli\u003EJWT Authentication\u003C\/li\u003E\n\u003Cli\u003EOAuth 2 Authentication\u003C\/li\u003E\n\u003Cli\u003EGenerate separate API Keys for every user\u003C\/li\u003E\n\u003Cli\u003ECustom Header\u003C\/li\u003E\n\u003Cli\u003ECustom Token Expiry\u003C\/li\u003E\n\u003Cli\u003ECustom API Restrictions\u003C\/li\u003E\n\u003Cli\u003EIP Address Based Restriction\u003C\/li\u003E\n\u003Cli\u003ERole Based Restriction\u003C\/li\u003E\n\u003Cp\u003Eand much more...\n\u003C\/p\u003E\u003C\/ul\u003E\n\u003Cp\u003E\u003Cbr\u003E\u003Cbr\u003E\n\u003Cstrong\u003E24\/7 Support:\u003C\/strong\u003E\u003Cbr\u003E\nIf you require any sort of help or assistance in installing or configuring this module, please feel free to reach out to us on our 24*7 support at \u003Ca href=\u0022drupalsupport@xecurify.com\u0022 rel=\u0022nofollow\u0022\u003Edrupalsupport@xecurify.com\u003C\/a\u003E or \u003Ca href=\u0022https:\/\/www.miniorange.com\/contact\u0022 rel=\u0022nofollow\u0022\u003EContact us\u003C\/a\u003E\u003C\/p\u003E\n\u003Cp\u003E\u003Cstrong\u003EAbout Us\u003C\/strong\u003E\u003Cbr\u003E\nCheck out our website \u003Ca href=\u0022https:\/\/www.miniorange.com\/\u0022 rel=\u0022nofollow\u0022\u003Ehttps:\/\/www.miniorange.com\/\u003C\/a\u003E or \u003Ca href=\u0022https:\/\/plugins.miniorange.com\/drupal\u0022 rel=\u0022nofollow\u0022\u003EClick here\u003C\/a\u003E to see all our listed Drupal modules. For more support or information, please email us at \u003Ca href=\u0022mailto:info@xecurify.com\u0022 rel=\u0022nofollow\u0022\u003Einfo@xecurify.com\u003C\/a\u003E or \u003Ca href=\u0022https:\/\/www.miniorange.com\/contact\u0022 rel=\u0022nofollow\u0022\u003EContact us\u003C\/a\u003E. You can also submit your query from the module\u2019s configuration page as well.\u003Cbr\u003E\n\u003Cbr\u003E\u003C\/p\u003E\n\u003Ch3\u003EInstallation:\u003C\/h3\u003E\n\u003Cul\u003E\n\u003Cli\u003E\n\u003Ch4\u003EUsing Composer:\u003C\/h4\u003E\n\u003Col\u003E\n\u003Cli\u003E\u003Ccode\u003Ecomposer require drupal\/rest_api_authentication\u003C\/code\u003E\u003C\/li\u003E\n\u003Cli\u003EGo to \u003Cstrong\u003EExtend\u003C\/strong\u003E menu on your Drupal admin console and enable the module by checking the checkbox and click on \u003Cstrong\u003Einstall\u003C\/strong\u003E button.\u003C\/li\u003E\n\u003Cli\u003EConfigure the module at \u003Ccode\u003E{BaseURL}\/admin\/config\/people\/rest_api_authentication\/auth_settings\u003C\/code\u003E\u003C\/li\u003E\n\u003C\/ol\u003E\n\u003C\/li\u003E\n\u003Cli\u003E\n\u003Ch4\u003EUsing Drush:\u003C\/h4\u003E\n\u003Col\u003E\n\u003Cli\u003EDownload the module: \u003Ccode\u003Edrush dl rest_api_authentication\u003C\/code\u003E\u003C\/li\u003E\n\u003Cli\u003EInstall the module: \u003Ccode\u003Edrush en rest_api_authentication\u003C\/code\u003E\u003C\/li\u003E\n\u003Cli\u003EClear the cache: \u003Ccode\u003Edrush cr\u003C\/code\u003E\u003C\/li\u003E\n\u003Cli\u003EConfigure the module at \u003Ccode\u003E{BaseURL}\/admin\/config\/people\/rest_api_authentication\/auth_settings\u003C\/code\u003E\u003C\/li\u003E\n\u003C\/ol\u003E\n\u003C\/li\u003E\n\u003Cli\u003E\n\u003Ch4\u003EManual installation:\u003C\/h4\u003E\n\u003Col\u003E\n\u003Cli\u003EGo to \u003Cstrong\u003EExtend\u003C\/strong\u003E menu on your Drupal admin console and click on \u003Cstrong\u003EInstall new module\u003C\/strong\u003E.\u003C\/li\u003E\n\u003Cli\u003EInstall the Drupal \u003Cem\u003EDrupal REST \u0026amp; JSON API Authentication\u003C\/em\u003E module either by downloading the zip or from the URL of the package(tar\/zip).\u003C\/li\u003E\n\u003Cli\u003EClick on \u003Cstrong\u003EEnable newly added modules\u003C\/strong\u003E.\u003C\/li\u003E\n\u003Cli\u003EEnable this module by checking the checkbox and click on \u003Cstrong\u003Einstall\u003C\/strong\u003E button.\u003C\/li\u003E\n\u003Cli\u003EConfigure the module at \u003Ccode\u003E{BaseURL}\/admin\/config\/people\/rest_api_authentication\/auth_settings\u003C\/code\u003E\u003C\/li\u003E\n\u003C\/ol\u003E\n\u003C\/li\u003E\n\u003C\/ul\u003E","summary":"Drupal API Authentication module restricts and secures unauthorized access to your Drupal site APIs using different authentication methods. The module supports authentication for all REST, JSON, GraphQL, and custom APIs"},"field_active_installs":"{\u00228.x-1.x\u0022:69,\u00222.0.x\u0022:778}","field_active_installs_total":847,"field_composer_namespace":"drupal\/rest_api_authentication","field_composer_types":[],"field_core_semver_maximum":12000000,"field_core_semver_minimum":8000000,"field_issue_summary_template":null,"field_logo_url":{"uri":"https:\/\/git.drupalcode.org\/project\/rest_api_authentication\/-\/avatar","title":null,"options":[]},"field_project_has_releases":true,"field_project_machine_name":"rest_api_authentication","field_security_advisory_coverage":"covered"},"relationships":{"uid":{"data":{"type":"user--user","id":"28b4e500-69e6-4518-936a-019a8265c104","meta":{"drupal_internal__target_id":3619504}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/b3572f6a-dad6-4810-bb85-5fa7c59ff04e\/uid?resourceVersion=id%3A20052550"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/b3572f6a-dad6-4810-bb85-5fa7c59ff04e\/relationships\/uid?resourceVersion=id%3A20052550"}}},"field_development_status":{"data":{"type":"taxonomy_term--development_status","id":"e767288c-9800-4fb4-aeb8-8c311533838a","meta":{"drupal_internal__target_id":27274}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/b3572f6a-dad6-4810-bb85-5fa7c59ff04e\/field_development_status?resourceVersion=id%3A20052550"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/b3572f6a-dad6-4810-bb85-5fa7c59ff04e\/relationships\/field_development_status?resourceVersion=id%3A20052550"}}},"field_maintenance_status":{"data":{"type":"taxonomy_term--maintenance_status","id":"089406ad-304d-4737-80d1-2f08527ae49e","meta":{"drupal_internal__target_id":27271}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/b3572f6a-dad6-4810-bb85-5fa7c59ff04e\/field_maintenance_status?resourceVersion=id%3A20052550"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/b3572f6a-dad6-4810-bb85-5fa7c59ff04e\/relationships\/field_maintenance_status?resourceVersion=id%3A20052550"}}},"field_module_categories":{"data":[{"type":"taxonomy_term--module_categories","id":"24830916-5c07-4446-89de-960915f87bf6","meta":{"drupal_internal__target_id":199}},{"type":"taxonomy_term--module_categories","id":"3df293b3-c9a1-4232-962b-3c8169e8e6e3","meta":{"drupal_internal__target_id":203}},{"type":"taxonomy_term--module_categories","id":"86237004-3801-40cf-96b5-fe7d60efccb5","meta":{"drupal_internal__target_id":187}}],"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/b3572f6a-dad6-4810-bb85-5fa7c59ff04e\/field_module_categories?resourceVersion=id%3A20052550"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/b3572f6a-dad6-4810-bb85-5fa7c59ff04e\/relationships\/field_module_categories?resourceVersion=id%3A20052550"}}},"field_project_images":{"data":[{"type":"file--file","id":"bcfdf3d3-3e22-4b25-82e2-edaa04ab20c6","meta":{"alt":"","title":null,"width":500,"height":500,"drupal_internal__target_id":33159}}],"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/b3572f6a-dad6-4810-bb85-5fa7c59ff04e\/field_project_images?resourceVersion=id%3A20052550"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/node\/project_module\/b3572f6a-dad6-4810-bb85-5fa7c59ff04e\/relationships\/field_project_images?resourceVersion=id%3A20052550"}}}}}],"included":[{"type":"taxonomy_term--module_categories","id":"3df293b3-c9a1-4232-962b-3c8169e8e6e3","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/taxonomy_term\/module_categories\/3df293b3-c9a1-4232-962b-3c8169e8e6e3?resourceVersion=id%3A203"}},"attributes":{"name":"Accessibility","drupal_internal__tid":203,"status":true,"description":{"value":"Enhance the site to provide a great user experience to the broadest range of people or help to audit for compliance with accessibility standards like the Web Content Accessibility Guidelines (WCAG).","format":"1","processed":"\u003Cp\u003EEnhance the site to provide a great user experience to the broadest range of people or help to audit for compliance with accessibility standards like the Web Content Accessibility Guidelines (WCAG).\u003C\/p\u003E"}}},{"type":"taxonomy_term--module_categories","id":"86237004-3801-40cf-96b5-fe7d60efccb5","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/taxonomy_term\/module_categories\/86237004-3801-40cf-96b5-fe7d60efccb5?resourceVersion=id%3A187"}},"attributes":{"name":"Content editing experience","drupal_internal__tid":187,"status":true,"description":{"value":"Enhance the editorial interface and improve the processes and workflows around creating, editing or removing content.","format":"1","processed":"\u003Cp\u003EEnhance the editorial interface and improve the processes and workflows around creating, editing or removing content.\u003C\/p\u003E"}}},{"type":"taxonomy_term--module_categories","id":"01df2105-2397-4a0e-b34c-80da1c3b1208","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/taxonomy_term\/module_categories\/01df2105-2397-4a0e-b34c-80da1c3b1208?resourceVersion=id%3A201"}},"attributes":{"name":"Search engine optimization (SEO)","drupal_internal__tid":201,"status":true,"description":{"value":"Manage or improve the site\u0027s search engine ranking by running audits, assessing metrics, or making the site\u2019s content and data more digestible by search engines.","format":"1","processed":"\u003Cp\u003EManage or improve the site\u0027s search engine ranking by running audits, assessing metrics, or making the site\u2019s content and data more digestible by search engines.\u003C\/p\u003E"}}},{"type":"taxonomy_term--module_categories","id":"086cebcf-200f-4c34-886e-f9921919b292","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/taxonomy_term\/module_categories\/086cebcf-200f-4c34-886e-f9921919b292?resourceVersion=id%3A189"}},"attributes":{"name":"Developer tools","drupal_internal__tid":189,"status":true,"description":{"value":"Empower developers with tools that assist with developing and debugging the frontend or backend of the site.","format":"1","processed":"\u003Cp\u003EEmpower developers with tools that assist with developing and debugging the frontend or backend of the site.\u003C\/p\u003E"}}},{"type":"taxonomy_term--module_categories","id":"68428c33-1db7-438d-b1b3-e23004e0982b","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/taxonomy_term\/module_categories\/68428c33-1db7-438d-b1b3-e23004e0982b?resourceVersion=id%3A192"}},"attributes":{"name":"Media","drupal_internal__tid":192,"status":true,"description":{"value":"Enhance functionality related to media, or expand media resource types, such as images, videos, audio files, or documents.","format":"1","processed":"\u003Cp\u003EEnhance functionality related to media, or expand media resource types, such as images, videos, audio files, or documents.\u003C\/p\u003E"}}},{"type":"taxonomy_term--module_categories","id":"abf23828-f269-4d39-8589-b731209eb154","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/taxonomy_term\/module_categories\/abf23828-f269-4d39-8589-b731209eb154?resourceVersion=id%3A186"}},"attributes":{"name":"Administration tools","drupal_internal__tid":186,"status":true,"description":{"value":"Empower site builders and administrators with no-code tools to setup, enhance, configure, or maintain the site.","format":"1","processed":"\u003Cp\u003EEmpower site builders and administrators with no-code tools to setup, enhance, configure, or maintain the site.\u003C\/p\u003E"}}},{"type":"taxonomy_term--module_categories","id":"754c04cb-6da2-42ba-9032-d64307f68f45","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/taxonomy_term\/module_categories\/754c04cb-6da2-42ba-9032-d64307f68f45?resourceVersion=id%3A188"}},"attributes":{"name":"Content display","drupal_internal__tid":188,"status":true,"description":{"value":"Configure the layout and format of content and data presented to site visitors.","format":"1","processed":"\u003Cp\u003EConfigure the layout and format of content and data presented to site visitors.\u003C\/p\u003E"}}},{"type":"taxonomy_term--module_categories","id":"d1322ab4-e2be-4f21-9e01-8c19b3da8bea","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/taxonomy_term\/module_categories\/d1322ab4-e2be-4f21-9e01-8c19b3da8bea?resourceVersion=id%3A197"}},"attributes":{"name":"Performance","drupal_internal__tid":197,"status":true,"description":{"value":"Improve the real or perceived speed of the site, or monitor performance metrics.","format":"1","processed":"\u003Cp\u003EImprove the real or perceived speed of the site, or monitor performance metrics.\u003C\/p\u003E"}}},{"type":"taxonomy_term--module_categories","id":"3cf38e0a-d4b1-426d-9b8e-008e7a41cf8d","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/taxonomy_term\/module_categories\/3cf38e0a-d4b1-426d-9b8e-008e7a41cf8d?resourceVersion=id%3A194"}},"attributes":{"name":"Multilingual","drupal_internal__tid":194,"status":true,"description":{"value":"Provide tools for translation and display of text in multiple languages and support for regionalization\/localization for dates, numbers, currency, measurement, or other local contexts.","format":"1","processed":"\u003Cp\u003EProvide tools for translation and display of text in multiple languages and support for regionalization\/localization for dates, numbers, currency, measurement, or other local contexts.\u003C\/p\u003E"}}},{"type":"taxonomy_term--module_categories","id":"dcb48e9f-6afa-4842-8ef6-44b90b083fcc","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/taxonomy_term\/module_categories\/dcb48e9f-6afa-4842-8ef6-44b90b083fcc?resourceVersion=id%3A200"}},"attributes":{"name":"Site structure","drupal_internal__tid":200,"status":true,"description":{"value":"Extend the structure of the site by way of content models, data storage, field types, and navigation, so it is more understandable to users.","format":"1","processed":"\u003Cp\u003EExtend the structure of the site by way of content models, data storage, field types, and navigation, so it is more understandable to users.\u003C\/p\u003E"}}},{"type":"taxonomy_term--module_categories","id":"3322058a-a158-4806-ac5b-9bcabc95edac","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/taxonomy_term\/module_categories\/3322058a-a158-4806-ac5b-9bcabc95edac?resourceVersion=id%3A185"}},"attributes":{"name":"Integrations","drupal_internal__tid":185,"status":true,"description":{"value":"Use a third-party CSS or JS Framework, a self-hosted service like a CRM, or a third-party service with the site.","format":"1","processed":"\u003Cp\u003EUse a third-party CSS or JS Framework, a self-hosted service like a CRM, or a third-party service with the site.\u003C\/p\u003E"}}},{"type":"taxonomy_term--module_categories","id":"24830916-5c07-4446-89de-960915f87bf6","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/taxonomy_term\/module_categories\/24830916-5c07-4446-89de-960915f87bf6?resourceVersion=id%3A199"}},"attributes":{"name":"Access control","drupal_internal__tid":199,"status":true,"description":{"value":"Grant or restrict access to content, assets, or site functionality, or extend the authentication\/login process.","format":"1","processed":"\u003Cp\u003EGrant or restrict access to content, assets, or site functionality, or extend the authentication\/login process.\u003C\/p\u003E"}}},{"type":"taxonomy_term--maintenance_status","id":"089406ad-304d-4737-80d1-2f08527ae49e","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/taxonomy_term\/maintenance_status\/089406ad-304d-4737-80d1-2f08527ae49e?resourceVersion=id%3A27271"}},"attributes":{"drupal_internal__tid":27271,"status":true,"name":"Actively maintained","description":{"value":"Maintainers strive to actively monitor issues and respond in a timely manner.","format":"1","processed":"\u003Cp\u003EMaintainers strive to actively monitor issues and respond in a timely manner.\u003C\/p\u003E"}}},{"type":"taxonomy_term--development_status","id":"e767288c-9800-4fb4-aeb8-8c311533838a","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/taxonomy_term\/development_status\/e767288c-9800-4fb4-aeb8-8c311533838a?resourceVersion=id%3A27274"}},"attributes":{"drupal_internal__tid":27274,"status":true,"name":"Under active development","description":{"value":"This project is under active development.","format":"1","processed":"\u003Cp\u003EThis project is under active development.\u003C\/p\u003E"}}},{"type":"user--user","id":"ebd9c743-897d-4c43-aaf8-b9e1acfe8e26","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/ebd9c743-897d-4c43-aaf8-b9e1acfe8e26"}},"attributes":{"display_name":"itmaybejj","drupal_internal__uid":1177504,"name":"itmaybejj","drupalorg_id":null,"field_country":"US","field_crosssite_first_name":null,"field_crosssite_last_name":null,"field_first_name":"John","field_git_username":"itmaybejj","field_industries_worked_in":[],"field_last_name":"Jameson","field_user_location":null,"field_user_picture":null,"field_user_pronouns":null},"relationships":{"field_mentors":{"data":[{"type":"user--user","id":"d6052c61-dbd3-4f7b-90b6-d96142308e98","meta":{"drupal_internal__target_id":788032}},{"type":"user--user","id":"c3086ad8-5009-4918-a187-8a6f05898a11","meta":{"drupal_internal__target_id":566352}},{"type":"user--user","id":"54f81a09-1528-47a0-adbd-55bf0c336f7b","meta":{"drupal_internal__target_id":1030276}},{"type":"user--user","id":"a7f46e31-040f-407b-9157-3f8cdde267d2","meta":{"drupal_internal__target_id":1171846}},{"type":"user--user","id":"b8759284-928b-454f-a6f4-c651833df119","meta":{"drupal_internal__target_id":608688}},{"type":"user--user","id":"6561fcbb-22e0-44c2-bd65-7c6d4260ee4b","meta":{"drupal_internal__target_id":1128182}},{"type":"user--user","id":"7dc3f843-df17-479c-a410-d67939260345","meta":{"drupal_internal__target_id":49851}},{"type":"user--user","id":"292df876-a39c-413e-818e-ed1836bc5ac1","meta":{"drupal_internal__target_id":325798}}],"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/ebd9c743-897d-4c43-aaf8-b9e1acfe8e26\/field_mentors"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/ebd9c743-897d-4c43-aaf8-b9e1acfe8e26\/relationships\/field_mentors"}}},"user_picture":{"data":{"type":"file--file","id":"7b57a1cb-8bc5-4934-9cc1-64e155a7cf1d","meta":{"alt":null,"title":null,"width":627,"height":627,"drupal_internal__target_id":102595}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/ebd9c743-897d-4c43-aaf8-b9e1acfe8e26\/user_picture"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/ebd9c743-897d-4c43-aaf8-b9e1acfe8e26\/relationships\/user_picture"}}}}},{"type":"user--user","id":"e8a182f9-9f1d-4273-9720-93a6d64fc697","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/e8a182f9-9f1d-4273-9720-93a6d64fc697"}},"attributes":{"display_name":"ahana92","drupal_internal__uid":3494063,"name":"ahana92","drupalorg_id":null,"field_country":"IN","field_crosssite_first_name":null,"field_crosssite_last_name":null,"field_first_name":"Ahana","field_git_username":"ahana92","field_industries_worked_in":[],"field_last_name":"Kundu","field_user_location":null,"field_user_picture":null,"field_user_pronouns":null},"relationships":{"field_mentors":{"data":[],"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/e8a182f9-9f1d-4273-9720-93a6d64fc697\/field_mentors"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/e8a182f9-9f1d-4273-9720-93a6d64fc697\/relationships\/field_mentors"}}},"user_picture":{"data":null,"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/e8a182f9-9f1d-4273-9720-93a6d64fc697\/user_picture"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/e8a182f9-9f1d-4273-9720-93a6d64fc697\/relationships\/user_picture"}}}}},{"type":"user--user","id":"d6052c61-dbd3-4f7b-90b6-d96142308e98","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/d6052c61-dbd3-4f7b-90b6-d96142308e98"}},"attributes":{"display_name":"bkosborne","drupal_internal__uid":788032,"name":"bkosborne","drupalorg_id":null,"field_country":"US","field_crosssite_first_name":null,"field_crosssite_last_name":null,"field_first_name":"Brian","field_git_username":"bkosborne","field_industries_worked_in":["Higher Ed","Advertising","Marketing","Cable\/Telco","Media","Community TV"],"field_last_name":"Osborne","field_user_location":"New Jersey, USA","field_user_picture":null,"field_user_pronouns":null},"relationships":{"field_mentors":{"data":[],"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/d6052c61-dbd3-4f7b-90b6-d96142308e98\/field_mentors"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/d6052c61-dbd3-4f7b-90b6-d96142308e98\/relationships\/field_mentors"}}},"user_picture":{"data":{"type":"file--file","id":"af08499c-51e1-4376-a172-7215c2c1c3f7","meta":{"alt":null,"title":null,"width":1024,"height":1024,"drupal_internal__target_id":205975}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/d6052c61-dbd3-4f7b-90b6-d96142308e98\/user_picture"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/d6052c61-dbd3-4f7b-90b6-d96142308e98\/relationships\/user_picture"}}}}},{"type":"user--user","id":"3ac95b7d-e4c9-417a-831f-9d7fd1ba96e2","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/3ac95b7d-e4c9-417a-831f-9d7fd1ba96e2"}},"attributes":{"display_name":"alexpott","drupal_internal__uid":157725,"name":"alexpott","drupalorg_id":null,"field_country":"GB","field_crosssite_first_name":null,"field_crosssite_last_name":null,"field_first_name":"Alex","field_git_username":"alexpott","field_industries_worked_in":[],"field_last_name":"Pott","field_user_location":"\ud83c\uddea\ud83c\uddfa\ud83c\udf0d","field_user_picture":null,"field_user_pronouns":"he\/they"},"relationships":{"field_mentors":{"data":[{"type":"user--user","id":"efd49201-6351-4da6-a26c-67aa7ec84b7d","meta":{"drupal_internal__target_id":54136}},{"type":"user--user","id":"f88d2e42-826d-411c-a248-7b3dd98b3828","meta":{"drupal_internal__target_id":128537}},{"type":"user--user","id":"0187f519-306c-48e8-bade-b93c1e5d67f9","meta":{"drupal_internal__target_id":107403}},{"type":"user--user","id":"32645ded-1857-4fd1-b0b7-bfd739fe2e80","meta":{"drupal_internal__target_id":9446}},{"type":"user--user","id":"f6edeceb-ee40-4571-9535-ffb3d116170f","meta":{"drupal_internal__target_id":99340}},{"type":"user--user","id":"1598bf69-7810-439c-94d0-6421da1e40cb","meta":{"drupal_internal__target_id":161058}},{"type":"user--user","id":"86397228-903e-44ff-8f59-dcb6c3aa2c86","meta":{"drupal_internal__target_id":35733}},{"type":"user--user","id":"2901a125-7be6-4905-8ae1-bab42281fec7","meta":{"drupal_internal__target_id":395439}}],"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/3ac95b7d-e4c9-417a-831f-9d7fd1ba96e2\/field_mentors"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/3ac95b7d-e4c9-417a-831f-9d7fd1ba96e2\/relationships\/field_mentors"}}},"user_picture":{"data":null,"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/3ac95b7d-e4c9-417a-831f-9d7fd1ba96e2\/user_picture"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/3ac95b7d-e4c9-417a-831f-9d7fd1ba96e2\/relationships\/user_picture"}}}}},{"type":"user--user","id":"f97fd29f-58b6-48bb-871a-ba8d3f89e800","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/f97fd29f-58b6-48bb-871a-ba8d3f89e800"}},"attributes":{"display_name":"bronzehedwick","drupal_internal__uid":409665,"name":"bronzehedwick","drupalorg_id":null,"field_country":"US","field_crosssite_first_name":null,"field_crosssite_last_name":null,"field_first_name":"Chris","field_git_username":"bronzehedwick","field_industries_worked_in":["Media","Magazine","Gaming","Education","Medical"],"field_last_name":"DeLuca","field_user_location":"New York","field_user_picture":null,"field_user_pronouns":"he\/him"},"relationships":{"field_mentors":{"data":[],"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/f97fd29f-58b6-48bb-871a-ba8d3f89e800\/field_mentors"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/f97fd29f-58b6-48bb-871a-ba8d3f89e800\/relationships\/field_mentors"}}},"user_picture":{"data":{"type":"file--file","id":"cb6bad31-61e1-474e-93e3-d5f0a34b151f","meta":{"alt":null,"title":null,"width":200,"height":200,"drupal_internal__target_id":147355}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/f97fd29f-58b6-48bb-871a-ba8d3f89e800\/user_picture"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/f97fd29f-58b6-48bb-871a-ba8d3f89e800\/relationships\/user_picture"}}}}},{"type":"user--user","id":"f2e2ea48-c23d-401f-a3c2-a7b2985bb613","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/f2e2ea48-c23d-401f-a3c2-a7b2985bb613"}},"attributes":{"display_name":"smustgrave","drupal_internal__uid":3252890,"name":"smustgrave","drupalorg_id":null,"field_country":"US","field_crosssite_first_name":null,"field_crosssite_last_name":null,"field_first_name":"Stephen","field_git_username":"smustgrave","field_industries_worked_in":[],"field_last_name":"Mustgrave","field_user_location":null,"field_user_picture":null,"field_user_pronouns":null},"relationships":{"field_mentors":{"data":[{"type":"user--user","id":"2901a125-7be6-4905-8ae1-bab42281fec7","meta":{"drupal_internal__target_id":395439}},{"type":"user--user","id":"1bc829a4-affe-4a04-91fd-90572525a484","meta":{"drupal_internal__target_id":65776}},{"type":"user--user","id":"8bd4cb82-3285-4e84-a526-c748598d55ab","meta":{"drupal_internal__target_id":2572884}},{"type":"user--user","id":"86397228-903e-44ff-8f59-dcb6c3aa2c86","meta":{"drupal_internal__target_id":35733}},{"type":"user--user","id":"7b32130a-491b-4178-bc55-7b1bf365fe90","meta":{"drupal_internal__target_id":246492}},{"type":"user--user","id":"0a8bfd77-becb-404f-aa25-0f8a25402256","meta":{"drupal_internal__target_id":1078742}}],"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/f2e2ea48-c23d-401f-a3c2-a7b2985bb613\/field_mentors"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/f2e2ea48-c23d-401f-a3c2-a7b2985bb613\/relationships\/field_mentors"}}},"user_picture":{"data":{"type":"file--file","id":"d7b9e5a3-6a70-4166-a87c-b427ea6c871b","meta":{"alt":null,"title":null,"width":768,"height":1024,"drupal_internal__target_id":206578}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/f2e2ea48-c23d-401f-a3c2-a7b2985bb613\/user_picture"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/f2e2ea48-c23d-401f-a3c2-a7b2985bb613\/relationships\/user_picture"}}}}},{"type":"user--user","id":"b838d119-25c6-44b2-adc2-372e8a8b87cd","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/b838d119-25c6-44b2-adc2-372e8a8b87cd"}},"attributes":{"display_name":"luke.leber","drupal_internal__uid":3509746,"name":"luke.leber","drupalorg_id":null,"field_country":"US","field_crosssite_first_name":"Luke","field_crosssite_last_name":"Leber","field_first_name":"Luke","field_git_username":"lleber","field_industries_worked_in":["E-Commerce","Education","Automotive"],"field_last_name":"Leber","field_user_location":"Pennsylvania","field_user_picture":null,"field_user_pronouns":null},"relationships":{"field_mentors":{"data":[{"type":"user--user","id":"ac31d9c9-9a4f-400f-893b-a8b4e4fb1de0","meta":{"drupal_internal__target_id":371407}}],"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/b838d119-25c6-44b2-adc2-372e8a8b87cd\/field_mentors"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/b838d119-25c6-44b2-adc2-372e8a8b87cd\/relationships\/field_mentors"}}},"user_picture":{"data":{"type":"file--file","id":"437feffb-fe1b-47d3-b58a-9460db6e6bf6","meta":{"alt":null,"title":null,"width":1024,"height":1024,"drupal_internal__target_id":150593}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/b838d119-25c6-44b2-adc2-372e8a8b87cd\/user_picture"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/b838d119-25c6-44b2-adc2-372e8a8b87cd\/relationships\/user_picture"}}}}},{"type":"user--user","id":"b4fede92-954d-4456-a20e-61dd14401155","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/b4fede92-954d-4456-a20e-61dd14401155"}},"attributes":{"display_name":"neslee canil pinto","drupal_internal__uid":3580850,"name":"neslee canil pinto","drupalorg_id":null,"field_country":"NO","field_crosssite_first_name":"Neslee Canil","field_crosssite_last_name":"Pinto","field_first_name":"Neslee Canil","field_git_username":"NesleeCanilPinto","field_industries_worked_in":[],"field_last_name":"Pinto","field_user_location":"India","field_user_picture":null,"field_user_pronouns":"he\/him"},"relationships":{"field_mentors":{"data":[{"type":"user--user","id":"998af69d-1b32-46a8-b16c-83bf4ec6ed17","meta":{"drupal_internal__target_id":667244}},{"type":"user--user","id":"3030d8c2-7a61-4b3b-9dab-474e34b2a9a4","meta":{"drupal_internal__target_id":153069}},{"type":"user--user","id":"5fa25c9d-6328-4022-90cc-2474e2d3fb33","meta":{"drupal_internal__target_id":52638}},{"type":"user--user","id":"8cf9ec39-1811-42af-94c0-edd695c6cf04","meta":{"drupal_internal__target_id":1414312}},{"type":"user--user","id":"f40eb39c-3ce1-4fee-b876-ff8d19c5c9ae","meta":{"drupal_internal__target_id":108450}},{"type":"user--user","id":"ce1b3be2-5e32-4f94-866d-281e10b635f0","meta":{"drupal_internal__target_id":767652}},{"type":"user--user","id":"75c201c7-8d62-4dc0-983e-560ec307bf66","meta":{"drupal_internal__target_id":2848443}},{"type":"user--user","id":"d1377c34-65ca-410d-a84c-dbf6b26a9455","meta":{"drupal_internal__target_id":1567500}},{"type":"user--user","id":"34211c3e-5d46-45fb-a91a-791ae133815a","meta":{"drupal_internal__target_id":3328267}},{"type":"user--user","id":"d43277a3-f6fe-45af-bd3b-7ea9a5f3ebe2","meta":{"drupal_internal__target_id":4166}},{"type":"user--user","id":"4d14e67d-3442-4900-b72e-fd7b46adbaf1","meta":{"drupal_internal__target_id":1331334}},{"type":"user--user","id":"25591dab-5ff0-4aed-b178-9836974aa53f","meta":{"drupal_internal__target_id":107701}},{"type":"user--user","id":"428363f8-0cdf-46b7-81f7-67a842f5ba09","meta":{"drupal_internal__target_id":205645}},{"type":"user--user","id":"600a4ea6-eb2b-4789-9ac0-c1ae51210010","meta":{"drupal_internal__target_id":80801}},{"type":"user--user","id":"49abacb0-0054-4dd1-b21a-adeb40e39c0b","meta":{"drupal_internal__target_id":214652}},{"type":"user--user","id":"919e6d75-f594-4785-9f7d-e36cbebe58d8","meta":{"drupal_internal__target_id":1344166}},{"type":"user--user","id":"3e2f4c81-41ee-4f06-a57d-ea32580d2380","meta":{"drupal_internal__target_id":160302}},{"type":"user--user","id":"d2733dd6-8cb4-461d-b769-f78be142def2","meta":{"drupal_internal__target_id":2641255}},{"type":"user--user","id":"872745bc-7439-42f1-ba40-64b168f10a85","meta":{"drupal_internal__target_id":556138}}],"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/b4fede92-954d-4456-a20e-61dd14401155\/field_mentors"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/b4fede92-954d-4456-a20e-61dd14401155\/relationships\/field_mentors"}}},"user_picture":{"data":{"type":"file--file","id":"acde2628-391c-43cc-82be-741152d0bdf2","meta":{"alt":null,"title":null,"width":623,"height":701,"drupal_internal__target_id":196468}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/b4fede92-954d-4456-a20e-61dd14401155\/user_picture"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/b4fede92-954d-4456-a20e-61dd14401155\/relationships\/user_picture"}}}}},{"type":"user--user","id":"92fc198c-6cdd-4353-9689-ee069cf5805e","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/92fc198c-6cdd-4353-9689-ee069cf5805e"}},"attributes":{"display_name":"alexander.levitsky","drupal_internal__uid":3558183,"name":"alexander.levitsky","drupalorg_id":null,"field_country":"TR","field_crosssite_first_name":null,"field_crosssite_last_name":null,"field_first_name":"Alexander","field_git_username":"alexander.levitsky","field_industries_worked_in":[],"field_last_name":"Levitsky","field_user_location":"Antalya","field_user_picture":null,"field_user_pronouns":"he\/him"},"relationships":{"field_mentors":{"data":[],"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/92fc198c-6cdd-4353-9689-ee069cf5805e\/field_mentors"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/92fc198c-6cdd-4353-9689-ee069cf5805e\/relationships\/field_mentors"}}},"user_picture":{"data":{"type":"file--file","id":"3f5cf6cb-2b33-4242-87e2-58e236705df6","meta":{"alt":null,"title":null,"width":1024,"height":682,"drupal_internal__target_id":150143}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/92fc198c-6cdd-4353-9689-ee069cf5805e\/user_picture"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/92fc198c-6cdd-4353-9689-ee069cf5805e\/relationships\/user_picture"}}}}},{"type":"user--user","id":"07e0e0f4-a5d1-4394-b99f-df2757a249d0","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/07e0e0f4-a5d1-4394-b99f-df2757a249d0"}},"attributes":{"display_name":"alexweber","drupal_internal__uid":850856,"name":"alexweber","drupalorg_id":null,"field_country":"BR","field_crosssite_first_name":null,"field_crosssite_last_name":null,"field_first_name":"Alex","field_git_username":"alexweber","field_industries_worked_in":["Web Development"],"field_last_name":"Weber","field_user_location":null,"field_user_picture":null,"field_user_pronouns":null},"relationships":{"field_mentors":{"data":[{"type":"user--user","id":"79fe3177-7dc1-4f68-8b75-1748fcbb2b01","meta":{"drupal_internal__target_id":324393}},{"type":"user--user","id":"0a373b6f-2f71-4364-8159-973a6e25e9eb","meta":{"drupal_internal__target_id":125473}},{"type":"user--user","id":"4bdbff59-197e-4aa3-8ba3-d0d2eca92288","meta":{"drupal_internal__target_id":122862}}],"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/07e0e0f4-a5d1-4394-b99f-df2757a249d0\/field_mentors"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/07e0e0f4-a5d1-4394-b99f-df2757a249d0\/relationships\/field_mentors"}}},"user_picture":{"data":{"type":"file--file","id":"d6f79494-da65-4a6e-8313-7d58c5f800ac","meta":{"alt":null,"title":null,"width":500,"height":375,"drupal_internal__target_id":70473}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/07e0e0f4-a5d1-4394-b99f-df2757a249d0\/user_picture"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/07e0e0f4-a5d1-4394-b99f-df2757a249d0\/relationships\/user_picture"}}}}},{"type":"user--user","id":"e21878c3-0407-4b90-9ffc-8bceab357f48","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/e21878c3-0407-4b90-9ffc-8bceab357f48"}},"attributes":{"display_name":"priyankanarsule","drupal_internal__uid":2996369,"name":"priyankanarsule","drupalorg_id":null,"field_country":"IN","field_crosssite_first_name":null,"field_crosssite_last_name":null,"field_first_name":"Priyanka","field_git_username":"priyankanarsule","field_industries_worked_in":[],"field_last_name":null,"field_user_location":null,"field_user_picture":null,"field_user_pronouns":null},"relationships":{"field_mentors":{"data":[],"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/e21878c3-0407-4b90-9ffc-8bceab357f48\/field_mentors"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/e21878c3-0407-4b90-9ffc-8bceab357f48\/relationships\/field_mentors"}}},"user_picture":{"data":{"type":"file--file","id":"a5efccd9-13f5-4be6-9c77-3bf06d2c29f8","meta":{"alt":null,"title":null,"width":180,"height":180,"drupal_internal__target_id":129711}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/e21878c3-0407-4b90-9ffc-8bceab357f48\/user_picture"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/e21878c3-0407-4b90-9ffc-8bceab357f48\/relationships\/user_picture"}}}}},{"type":"user--user","id":"28b4e500-69e6-4518-936a-019a8265c104","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/28b4e500-69e6-4518-936a-019a8265c104"}},"attributes":{"display_name":"arsh244","drupal_internal__uid":3619504,"name":"arsh244","drupalorg_id":null,"field_country":"IN","field_crosssite_first_name":null,"field_crosssite_last_name":null,"field_first_name":"Arsh","field_git_username":"arsh244","field_industries_worked_in":[],"field_last_name":"Sabharwal","field_user_location":null,"field_user_picture":null,"field_user_pronouns":"he\/him"},"relationships":{"field_mentors":{"data":[],"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/28b4e500-69e6-4518-936a-019a8265c104\/field_mentors"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/28b4e500-69e6-4518-936a-019a8265c104\/relationships\/field_mentors"}}},"user_picture":{"data":{"type":"file--file","id":"a6006831-0994-4414-aa78-24d6b6698637","meta":{"alt":null,"title":null,"width":1024,"height":768,"drupal_internal__target_id":156841}},"links":{"related":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/28b4e500-69e6-4518-936a-019a8265c104\/user_picture"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/user\/user\/28b4e500-69e6-4518-936a-019a8265c104\/relationships\/user_picture"}}}}},{"type":"file--file","id":"02ee2895-127b-4aa3-8c05-f120c585da46","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/file\/file\/02ee2895-127b-4aa3-8c05-f120c585da46"}},"attributes":{"uri":{"value":"public:\/\/project-images\/Screen Shot 2023-02-08 at 9.48.38 AM.png","url":"\/assets\/project-images\/Screen%20Shot%202023-02-08%20at%209.48.38%20AM.png"}}},{"type":"file--file","id":"03315b7d-1050-4e55-9447-0ea166a500c3","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/file\/file\/03315b7d-1050-4e55-9447-0ea166a500c3"}},"attributes":{"uri":{"value":"public:\/\/project-images\/Screenshot from 2020-08-26 18-06-53.png","url":"\/assets\/project-images\/Screenshot%20from%202020-08-26%2018-06-53.png"}}},{"type":"file--file","id":"b713ecbe-9331-4ac5-a08e-2c31f5cb255b","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/file\/file\/b713ecbe-9331-4ac5-a08e-2c31f5cb255b"}},"attributes":{"uri":{"value":"public:\/\/project-images\/Screenshot from 2020-08-26 18-06-38.png","url":"\/assets\/project-images\/Screenshot%20from%202020-08-26%2018-06-38.png"}}},{"type":"file--file","id":"e5acbd7a-78ed-46ab-8104-62919169d6fe","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/file\/file\/e5acbd7a-78ed-46ab-8104-62919169d6fe"}},"attributes":{"uri":{"value":"public:\/\/project-images\/Screen Shot 2021-01-16 at 12.59.54 PM.png","url":"\/assets\/project-images\/Screen%20Shot%202021-01-16%20at%2012.59.54%20PM.png"}}},{"type":"file--file","id":"ad7d430e-3bda-4f74-b2ba-a0bfd2346dee","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/file\/file\/ad7d430e-3bda-4f74-b2ba-a0bfd2346dee"}},"attributes":{"uri":{"value":"public:\/\/project-images\/javi-er 2024-08-08 a la(s) 4.18.00\u202fp.\u00a0m..png","url":"\/assets\/project-images\/javi-er%202024-08-08%20a%20la%28s%29%204.18.00%E2%80%AFp.%C2%A0m..png"}}},{"type":"file--file","id":"cc3665be-4de1-4428-8b48-be7306f79d20","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/file\/file\/cc3665be-4de1-4428-8b48-be7306f79d20"}},"attributes":{"uri":{"value":"public:\/\/project-images\/javi-er 2024-08-08 a la(s) 5.20.50\u202fp.\u00a0m..png","url":"\/assets\/project-images\/javi-er%202024-08-08%20a%20la%28s%29%205.20.50%E2%80%AFp.%C2%A0m..png"}}},{"type":"file--file","id":"1b7b7c0f-ca36-4dc7-95b5-7df8211eba53","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/file\/file\/1b7b7c0f-ca36-4dc7-95b5-7df8211eba53"}},"attributes":{"uri":{"value":"public:\/\/project-images\/drupal-module-messages-logo.jpg","url":"\/assets\/project-images\/drupal-module-messages-logo.jpg"}}},{"type":"file--file","id":"bfb0e572-38b2-49e9-ba74-97c8247e3158","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/file\/file\/bfb0e572-38b2-49e9-ba74-97c8247e3158"}},"attributes":{"uri":{"value":"public:\/\/project-images\/snapshot_753.png","url":"\/assets\/project-images\/snapshot_753.png"}}},{"type":"file--file","id":"3d8b01fc-bdfc-4748-864f-60a51c1587de","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/file\/file\/3d8b01fc-bdfc-4748-864f-60a51c1587de"}},"attributes":{"uri":{"value":"public:\/\/project-images\/snapshot_312.png","url":"\/assets\/project-images\/snapshot_312.png"}}},{"type":"file--file","id":"d245efd1-1031-405a-98d6-fda75f375c7c","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/file\/file\/d245efd1-1031-405a-98d6-fda75f375c7c"}},"attributes":{"uri":{"value":"public:\/\/project-images\/snapshot_313.png","url":"\/assets\/project-images\/snapshot_313.png"}}},{"type":"file--file","id":"74167f27-5c4f-4704-97c1-d5d77ef200af","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/file\/file\/74167f27-5c4f-4704-97c1-d5d77ef200af"}},"attributes":{"uri":{"value":"public:\/\/images\/language-cookie-full.jpg","url":"\/assets\/images\/language-cookie-full.jpg"}}},{"type":"file--file","id":"3693a0d9-06be-4d91-b7b2-c00f6f584524","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/file\/file\/3693a0d9-06be-4d91-b7b2-c00f6f584524"}},"attributes":{"uri":{"value":"public:\/\/project-images\/68747470733a2f2f7333322e706f7374696d672e6f72672f6b7476743539686f6c2f616f735f6865616465722e706e67.png","url":"\/assets\/project-images\/68747470733a2f2f7333322e706f7374696d672e6f72672f6b7476743539686f6c2f616f735f6865616465722e706e67.png"}}},{"type":"file--file","id":"bcfdf3d3-3e22-4b25-82e2-edaa04ab20c6","links":{"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/file\/file\/bcfdf3d3-3e22-4b25-82e2-edaa04ab20c6"}},"attributes":{"uri":{"value":"public:\/\/project-images\/Logo 500x500 px (1)_8.png","url":"\/assets\/project-images\/Logo%20500x500%20px%20%281%29_8.png"}}}],"meta":{"count":205},"links":{"last":{"href":"https:\/\/www.drupal.org\/jsonapi\/index\/project_modules?filter%5Bstatus%5D=1\u0026filter%5Btype%5D=project_module\u0026filter%5Bproject_type%5D=full\u0026filter%5Bmodule_categories_uuid%5D%5Bvalue%5D%5B0%5D=3df293b3-c9a1-4232-962b-3c8169e8e6e3\u0026filter%5Bmodule_categories_uuid%5D%5Boperator%5D=IN\u0026filter%5Bmodule_categories_uuid%5D%5Bpath%5D=module_categories_uuid\u0026filter%5Bn_security_coverage%5D%5Bvalue%5D%5B0%5D=revoked\u0026filter%5Bn_security_coverage%5D%5Boperator%5D=NOT%20IN\u0026filter%5Bn_security_coverage%5D%5Bpath%5D=security_coverage\u0026page%5Boffset%5D=204\u0026page%5Blimit%5D=12\u0026include=field_module_categories%2Cfield_maintenance_status%2Cfield_development_status%2Cuid%2Cfield_project_images"},"next":{"href":"https:\/\/www.drupal.org\/jsonapi\/index\/project_modules?filter%5Bstatus%5D=1\u0026filter%5Btype%5D=project_module\u0026filter%5Bproject_type%5D=full\u0026filter%5Bmodule_categories_uuid%5D%5Bvalue%5D%5B0%5D=3df293b3-c9a1-4232-962b-3c8169e8e6e3\u0026filter%5Bmodule_categories_uuid%5D%5Boperator%5D=IN\u0026filter%5Bmodule_categories_uuid%5D%5Bpath%5D=module_categories_uuid\u0026filter%5Bn_security_coverage%5D%5Bvalue%5D%5B0%5D=revoked\u0026filter%5Bn_security_coverage%5D%5Boperator%5D=NOT%20IN\u0026filter%5Bn_security_coverage%5D%5Bpath%5D=security_coverage\u0026page%5Boffset%5D=12\u0026page%5Blimit%5D=12\u0026include=field_module_categories%2Cfield_maintenance_status%2Cfield_development_status%2Cuid%2Cfield_project_images"},"self":{"href":"https:\/\/www.drupal.org\/jsonapi\/index\/project_modules?filter%5Bstatus%5D=1\u0026filter%5Btype%5D=project_module\u0026filter%5Bproject_type%5D=full\u0026filter%5Bmodule_categories_uuid%5D%5Bvalue%5D%5B0%5D=3df293b3-c9a1-4232-962b-3c8169e8e6e3\u0026filter%5Bmodule_categories_uuid%5D%5Boperator%5D=IN\u0026filter%5Bmodule_categories_uuid%5D%5Bpath%5D=module_categories_uuid\u0026filter%5Bn_security_coverage%5D%5Bvalue%5D%5B0%5D=revoked\u0026filter%5Bn_security_coverage%5D%5Boperator%5D=NOT%20IN\u0026filter%5Bn_security_coverage%5D%5Bpath%5D=security_coverage\u0026include=field_module_categories%2Cfield_maintenance_status%2Cfield_development_status%2Cuid%2Cfield_project_images\u0026page%5Blimit%5D=12\u0026page%5Boffset%5D=0"}}}