{"jsonapi":{"version":"1.0","meta":{"links":{"self":{"href":"http:\/\/jsonapi.org\/format\/1.0\/"}}}},"data":[{"type":"node--project_module","id":"f4d6de54-2808-4cf7-9251-bc747da66740","links":{"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/f4d6de54-2808-4cf7-9251-bc747da66740?resourceVersion=id%3A20010071"},"working-copy":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/f4d6de54-2808-4cf7-9251-bc747da66740?resourceVersion=rel%3Aworking-copy"}},"attributes":{"drupal_internal__nid":605898,"status":true,"title":"Commerce Core","created":"2009-10-15T21:41:50+00:00","changed":"2026-04-07T05:20:02+00:00","moderation_state":null,"body":{"value":"Drupal Commerce powers eCommerce innovation through every stage of growth. At its core it is lean and mean, enforcing strict development standards and leveraging the greatest features of Drupal for maximum flexibility.\r\n\r\neCommerce platforms are often developed with an \u003Cem\u003Eapplication\u003C\/em\u003E mindset, highlighting what you can \u003Cem\u003Edo\u003C\/em\u003E with them out of the box. Drupal Commerce was developed with a \u003Cem\u003Eframework first\u003C\/em\u003E mindset, focusing on what you can \u003Cem\u003Ebuild\u003C\/em\u003E with it. The Commerce Core project was designed to enable teams to adapt to change and scale with ease.\r\n\r\nSponsored and maintained by \u003Ca href=\u0022https:\/\/www.centarro.io\u0022\u003ECentarro\u003C\/a\u003E.\r\n\u003C!--break--\u003E\r\n\r\n\u003Cdiv class=\u0022note-version\u0022\u003E\r\n\u003Ch4\u003ECommerce Core Features\u003C\/h4\u003E\r\n\r\n\u003Cul\u003E\r\n\u003Cli\u003ECreate product types with custom attributes\u003C\/li\u003E\r\n\u003Cli\u003EDynamic product pages with one or many variations\u003C\/li\u003E\r\n\u003Cli\u003EMultiple order types and correlated checkout flows\u003C\/li\u003E\r\n\u003Cli\u003EPromotions with multiple offer types, conditions, and coupons\u003C\/li\u003E\r\n\u003Cli\u003ERobust payment API, integrating 100+ payment gateways\u003C\/li\u003E\r\n\u003Cli\u003EAddress book and order management\u003C\/li\u003E\r\n\u003Cli\u003ETax calculation \/ VAT support\u003C\/li\u003E\r\n\u003C\/ul\u003E\r\n\u003C\/div\u003E\r\n\r\nAdditional functionality is provided through contributed modules, such as \u003Ca href=\u0022https:\/\/www.drupal.org\/project\/commerce_recurring\u0022\u003ERecurring\u003C\/a\u003E, \u003Ca href=\u0022https:\/\/www.drupal.org\/project\/commerce_shipping\u0022\u003EShipping\u003C\/a\u003E, \u003Ca href=\u0022https:\/\/www.drupal.org\/project\/commerce_stock\u0022\u003EStock\u003C\/a\u003E, \u003Ca href=\u0022https:\/\/www.drupal.org\/project\/commerce_paypal\u0022\u003EPayPal\u003C\/a\u003E, \u003Ca href=\u0022https:\/\/www.drupal.org\/project\/commerce_avatax\u0022\u003EAvaTax\u003C\/a\u003E, and \u003Ca href=\u0022https:\/\/www.drupalcommerce.org\/contrib\u0022\u003Emany more\u003C\/a\u003E...\r\n\r\n\u003Cdiv class=\u0022note-tip\u0022\u003E\r\n\u003Ch2\u003ELooking for Drupal Commerce support?\u003C\/h2\u003E\r\n\u003Cdl\u003E\r\n\u003Cimg align=\u0022right\u0022 width=\u002275\u0022 src=\u0022https:\/\/www.drupal.org\/files\/styles\/grid-3-2x\/public\/project-images\/centarro_logo_0.png?itok=SVhqpe1M\u0022 \/\u003E\r\n\u003Cdt\u003EHire the project maintainers:\u003C\/dt\u003E\r\n\u003Cdd\u003ECentarro offers \u003Ca href=\u0022https:\/\/www.centarro.io\/products\/centarro-support\u0022 target=\u0022_blank\u0022\u003EDrupal Commerce Support and Development\u003C\/a\u003E services, ranging from a flat monthly fee for maintenance support (with optional development retainers) to full site architecture and development.\u003C\/dd\u003E\r\n\u003Cdt\u003ECommunity support options:\u003C\/dt\u003E\r\n\u003Cdd\u003EOver 2,000 developers participate in our two support channels on a best-effort basis, \u003Ca href=\u0022https:\/\/drupal.stackexchange.com\/questions\/tagged\/commerce\u0022 target=\u0022_blank\u0022\u003EDrupal Answers\u003C\/a\u003E and \u003Ca href=\u0022\/slack\u0022\u003EDrupal Slack\u003C\/a\u003E (channel: \u003Ca href=\u0022https:\/\/drupal.slack.com\/messages\/C1TLCCF9B\u0022 rel=\u0022nofollow\u0022\u003E#commerce\u003C\/a\u003E).\r\n\u003C\/dl\u003E\r\n\u003C\/div\u003E\r\n\r\n\u003Ch3\u003EDocumentation\u003C\/h3\u003E\r\n\r\n\u003Cul\u003E\r\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/docs.drupalcommerce.org\/commerce2\u0022\u003ECommerce 2.x documentation\u003C\/a\u003E\u003C\/li\u003E\r\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/docs.drupalcommerce.org\/commerce1\u0022\u003ECommerce 1.x documentation\u003C\/a\u003E\u003C\/li\u003E\r\n\u003C\/ul\u003E\r\n\r\nYou are responsible to ensure your merchants and customers are protected from online payment fraud. For more information, we recommend you read the \u003Ca href=\u0022http:\/\/drupalpcicompliance.org\/\u0022\u003EDrupal PCI Compliance white paper\u003C\/a\u003E maintained by third party eCommerce security experts.\r\n\r\n\u003Cdiv class=\u0022note-version\u0022\u003E\r\n\u003Ch4\u003EDrupal \u003E=10.3 \u0026 11 \/ Commerce 3.x\u003C\/h4\u003E\r\nCommerce 3.x supports Drupal \u003E=10.3 and 11, upgrading from Commerce 2.x is supported and should be relatively straighforward assuming services \u0026 APIS deprecated during the 2.x lifecycle aren\u0027t used within your codebase. \r\n\r\nFor a detailed explanation of our approach to semantic versioning, see this \u003Ca href=\u0022https:\/\/www.centarro.io\/blog\/revisiting-semantic-versioning-drupal-commerce\u0022 target=\u0022_blank\u0022\u003Eblog post\u003C\/a\u003E.\r\n\u003C\/div\u003E\r\n\r\n\u003Cdiv class=\u0022note-version\u0022\u003E\r\n\u003Ch4\u003EDrupal 9 \u0026 10 \/ Commerce 2.x\u003C\/h4\u003E\r\n\r\nCommerce 2.x should only be installed via Composer. The zip files on this page are provided for informative purposes only. See our \u003Ca href=\u0022https:\/\/docs.drupalcommerce.org\/commerce2\/developer-guide\/install-update\/installation\u0022\u003Einstallation docs\u003C\/a\u003E.\r\n\r\nDrupal 9.3.0 or newer is required.\r\n\u003C\/div\u003E\r\n\r\n\u003Cdiv class=\u0022note-version\u0022\u003E\r\n\u003Ch4\u003EDrupal 7 \/ Commerce 1.x\u003C\/h4\u003E\r\n\r\nDrupal Commerce currently depends on Drupal 7 (\u003E= 7.15) with the latest releases of a few modules: \u003Ca href=\u0022http:\/\/drupal.org\/project\/ctools\u0022\u003ECtools\u003C\/a\u003E, \u003Ca href=\u0022http:\/\/drupal.org\/project\/views\u0022\u003EViews\u003C\/a\u003E, \u003Ca href=\u0022http:\/\/drupal.org\/project\/entity\u0022\u003EEntity API\u003C\/a\u003E, \u003Ca href=\u0022http:\/\/drupal.org\/project\/rules\u0022\u003ERules\u003C\/a\u003E, and \u003Ca href=\u0022http:\/\/drupal.org\/project\/addressfield\u0022\u003EAddress field\u003C\/a\u003E.\r\n\u003C\/div\u003E","format":"1","processed":"\u003Cdiv class=\u0022toc-filter\u0022\u003E\u003Cp\u003EDrupal Commerce powers eCommerce innovation through every stage of growth. At its core it is lean and mean, enforcing strict development standards and leveraging the greatest features of Drupal for maximum flexibility.\u003C\/p\u003E\n\u003Cp\u003EeCommerce platforms are often developed with an \u003Cem\u003Eapplication\u003C\/em\u003E mindset, highlighting what you can \u003Cem\u003Edo\u003C\/em\u003E with them out of the box. Drupal Commerce was developed with a \u003Cem\u003Eframework first\u003C\/em\u003E mindset, focusing on what you can \u003Cem\u003Ebuild\u003C\/em\u003E with it. The Commerce Core project was designed to enable teams to adapt to change and scale with ease.\u003C\/p\u003E\n\u003Cp\u003ESponsored and maintained by \u003Ca href=\u0022https:\/\/www.centarro.io\u0022 rel=\u0022nofollow\u0022\u003ECentarro\u003C\/a\u003E.\u003C\/p\u003E\n\u003Cdiv class=\u0022note-version\u0022\u003E\n\u003Ch4 id=\u0022commerce-core-features\u0022\u003ECommerce Core Features\u003C\/h4\u003E\n\u003Cul\u003E\n\u003Cli\u003ECreate product types with custom attributes\u003C\/li\u003E\n\u003Cli\u003EDynamic product pages with one or many variations\u003C\/li\u003E\n\u003Cli\u003EMultiple order types and correlated checkout flows\u003C\/li\u003E\n\u003Cli\u003EPromotions with multiple offer types, conditions, and coupons\u003C\/li\u003E\n\u003Cli\u003ERobust payment API, integrating 100+ payment gateways\u003C\/li\u003E\n\u003Cli\u003EAddress book and order management\u003C\/li\u003E\n\u003Cli\u003ETax calculation \/ VAT support\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003C\/div\u003E\n\u003Cp\u003EAdditional functionality is provided through contributed modules, such as \u003Ca href=\u0022https:\/\/www.drupal.org\/project\/commerce_recurring\u0022 rel=\u0022nofollow\u0022\u003ERecurring\u003C\/a\u003E, \u003Ca href=\u0022https:\/\/www.drupal.org\/project\/commerce_shipping\u0022 rel=\u0022nofollow\u0022\u003EShipping\u003C\/a\u003E, \u003Ca href=\u0022https:\/\/www.drupal.org\/project\/commerce_stock\u0022 rel=\u0022nofollow\u0022\u003EStock\u003C\/a\u003E, \u003Ca href=\u0022https:\/\/www.drupal.org\/project\/commerce_paypal\u0022 rel=\u0022nofollow\u0022\u003EPayPal\u003C\/a\u003E, \u003Ca href=\u0022https:\/\/www.drupal.org\/project\/commerce_avatax\u0022 rel=\u0022nofollow\u0022\u003EAvaTax\u003C\/a\u003E, and \u003Ca href=\u0022https:\/\/www.drupalcommerce.org\/contrib\u0022 rel=\u0022nofollow\u0022\u003Emany more\u003C\/a\u003E...\u003C\/p\u003E\n\u003Cdiv class=\u0022note-tip\u0022\u003E\n\u003Ca href=\u0022#top\u0022 class=\u0022back-to-top\u0022\u003EBack to top\u003C\/a\u003E\n\n\u003Ch2 id=\u0022looking-for-drupal-commerce-support\u0022\u003ELooking for Drupal Commerce support?\u003C\/h2\u003E\n\u003Cdl\u003E\n\u003Cimg width=\u002216\u0022 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 class=\u0022filter-image-invalid\u0022\u003E\n\u003Cdt\u003EHire the project maintainers:\u003C\/dt\u003E\n\u003Cdd\u003ECentarro offers \u003Ca href=\u0022https:\/\/www.centarro.io\/products\/centarro-support\u0022 rel=\u0022nofollow\u0022\u003EDrupal Commerce Support and Development\u003C\/a\u003E services, ranging from a flat monthly fee for maintenance support (with optional development retainers) to full site architecture and development.\u003C\/dd\u003E\n\u003Cdt\u003ECommunity support options:\u003C\/dt\u003E\n\u003Cdd\u003EOver 2,000 developers participate in our two support channels on a best-effort basis, \u003Ca href=\u0022https:\/\/drupal.stackexchange.com\/questions\/tagged\/commerce\u0022 rel=\u0022nofollow\u0022\u003EDrupal Answers\u003C\/a\u003E and \u003Ca href=\u0022\/slack\u0022 rel=\u0022nofollow\u0022\u003EDrupal Slack\u003C\/a\u003E (channel: \u003Ca href=\u0022https:\/\/drupal.slack.com\/messages\/C1TLCCF9B\u0022 rel=\u0022nofollow\u0022\u003E#commerce\u003C\/a\u003E).\n\u003C\/dd\u003E\u003C\/dl\u003E\n\u003C\/div\u003E\n\u003Ch3 id=\u0022documentation\u0022\u003EDocumentation\u003C\/h3\u003E\n\u003Cul\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/docs.drupalcommerce.org\/commerce2\u0022 rel=\u0022nofollow\u0022\u003ECommerce 2.x documentation\u003C\/a\u003E\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/docs.drupalcommerce.org\/commerce1\u0022 rel=\u0022nofollow\u0022\u003ECommerce 1.x documentation\u003C\/a\u003E\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Cp\u003EYou are responsible to ensure your merchants and customers are protected from online payment fraud. For more information, we recommend you read the \u003Ca href=\u0022http:\/\/drupalpcicompliance.org\/\u0022 rel=\u0022nofollow\u0022\u003EDrupal PCI Compliance white paper\u003C\/a\u003E maintained by third party eCommerce security experts.\u003C\/p\u003E\n\u003Cdiv class=\u0022note-version\u0022\u003E\n\u003Ch4 id=\u0022drupal-gt-10-3-amp-11-commerce-3-x\u0022\u003EDrupal \u0026gt;=10.3 \u0026amp; 11 \/ Commerce 3.x\u003C\/h4\u003E\n\u003Cp\u003ECommerce 3.x supports Drupal \u0026gt;=10.3 and 11, upgrading from Commerce 2.x is supported and should be relatively straighforward assuming services \u0026amp; APIS deprecated during the 2.x lifecycle aren\u0027t used within your codebase. \u003C\/p\u003E\n\u003Cp\u003EFor a detailed explanation of our approach to semantic versioning, see this \u003Ca href=\u0022https:\/\/www.centarro.io\/blog\/revisiting-semantic-versioning-drupal-commerce\u0022 rel=\u0022nofollow\u0022\u003Eblog post\u003C\/a\u003E.\n\u003C\/p\u003E\u003C\/div\u003E\n\u003Cdiv class=\u0022note-version\u0022\u003E\n\u003Ch4 id=\u0022drupal-9-amp-10-commerce-2-x\u0022\u003EDrupal 9 \u0026amp; 10 \/ Commerce 2.x\u003C\/h4\u003E\n\u003Cp\u003ECommerce 2.x should only be installed via Composer. The zip files on this page are provided for informative purposes only. See our \u003Ca href=\u0022https:\/\/docs.drupalcommerce.org\/commerce2\/developer-guide\/install-update\/installation\u0022 rel=\u0022nofollow\u0022\u003Einstallation docs\u003C\/a\u003E.\u003C\/p\u003E\n\u003Cp\u003EDrupal 9.3.0 or newer is required.\n\u003C\/p\u003E\u003C\/div\u003E\n\u003Cdiv class=\u0022note-version\u0022\u003E\n\u003Ch4 id=\u0022drupal-7-commerce-1-x\u0022\u003EDrupal 7 \/ Commerce 1.x\u003C\/h4\u003E\n\u003Cp\u003EDrupal Commerce currently depends on Drupal 7 (\u0026gt;= 7.15) with the latest releases of a few modules: \u003Ca href=\u0022http:\/\/drupal.org\/project\/ctools\u0022 rel=\u0022nofollow\u0022\u003ECtools\u003C\/a\u003E, \u003Ca href=\u0022http:\/\/drupal.org\/project\/views\u0022 rel=\u0022nofollow\u0022\u003EViews\u003C\/a\u003E, \u003Ca href=\u0022http:\/\/drupal.org\/project\/entity\u0022 rel=\u0022nofollow\u0022\u003EEntity API\u003C\/a\u003E, \u003Ca href=\u0022http:\/\/drupal.org\/project\/rules\u0022 rel=\u0022nofollow\u0022\u003ERules\u003C\/a\u003E, and \u003Ca href=\u0022http:\/\/drupal.org\/project\/addressfield\u0022 rel=\u0022nofollow\u0022\u003EAddress field\u003C\/a\u003E.\n\u003C\/p\u003E\u003C\/div\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:14732,\u00223.0.x\u0022:864,\u00223.x\u0022:6,\u00223.1.x\u0022:914,\u00223.2.x\u0022:4186,\u00223.3.x\u0022:3860}","field_active_installs_total":24562,"field_composer_namespace":"drupal\/commerce","field_core_semver_maximum":12000000,"field_core_semver_minimum":8000000,"field_issue_summary_template":{"value":"\u003Ch3\u003EDescribe your bug or feature request.\u003C\/h3\u003E\r\n\r\n\u003Ch3\u003EIf a bug, provide steps to reproduce it from a clean install.\u003C\/h3\u003E","format":"1","processed":"\u003Cdiv class=\u0022toc-filter\u0022\u003E\u003Ch3 id=\u0022describe-your-bug-or-feature-request\u0022\u003EDescribe your bug or feature request.\u003C\/h3\u003E\n\u003Ch3 id=\u0022if-a-bug-provide-steps-to-reproduce-it-from-a-clean-install\u0022\u003EIf a bug, provide steps to reproduce it from a clean install.\u003C\/h3\u003E\u003Ca href=\u0022#top\u0022 class=\u0022back-to-top\u0022\u003EBack to top\u003C\/a\u003E\u003C\/div\u003E"},"field_logo_url":{"uri":"https:\/\/git.drupalcode.org\/project\/commerce\/-\/avatar","title":null,"options":[]},"field_project_has_releases":true,"field_project_machine_name":"commerce","field_security_advisory_coverage":"covered"},"relationships":{"uid":{"data":{"type":"user--user","id":"45dce456-4ddf-4269-9cd4-2e46bb0760ed","meta":{"drupal_internal__target_id":3661446}},"links":{"related":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/f4d6de54-2808-4cf7-9251-bc747da66740\/uid?resourceVersion=id%3A20010071"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/f4d6de54-2808-4cf7-9251-bc747da66740\/relationships\/uid?resourceVersion=id%3A20010071"}}},"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:\/\/new.drupal.org\/jsonapi\/node\/project_module\/f4d6de54-2808-4cf7-9251-bc747da66740\/field_development_status?resourceVersion=id%3A20010071"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/f4d6de54-2808-4cf7-9251-bc747da66740\/relationships\/field_development_status?resourceVersion=id%3A20010071"}}},"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:\/\/new.drupal.org\/jsonapi\/node\/project_module\/f4d6de54-2808-4cf7-9251-bc747da66740\/field_maintenance_status?resourceVersion=id%3A20010071"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/f4d6de54-2808-4cf7-9251-bc747da66740\/relationships\/field_maintenance_status?resourceVersion=id%3A20010071"}}},"field_module_categories":{"data":[{"type":"taxonomy_term--module_categories","id":"0cd80c8e-5c20-43a8-aa3e-ec701007d443","meta":{"drupal_internal__target_id":195}}],"links":{"related":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/f4d6de54-2808-4cf7-9251-bc747da66740\/field_module_categories?resourceVersion=id%3A20010071"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/f4d6de54-2808-4cf7-9251-bc747da66740\/relationships\/field_module_categories?resourceVersion=id%3A20010071"}}},"field_project_images":{"data":[{"type":"file--file","id":"6c2cdb38-58d3-43ac-9bb8-8910b4efbc61","meta":{"alt":"Commerce Core is maintained by Centarro.","title":null,"width":235,"height":220,"drupal_internal__target_id":20036}}],"links":{"related":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/f4d6de54-2808-4cf7-9251-bc747da66740\/field_project_images?resourceVersion=id%3A20010071"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/f4d6de54-2808-4cf7-9251-bc747da66740\/relationships\/field_project_images?resourceVersion=id%3A20010071"}}}}},{"type":"node--project_module","id":"6f8d5b16-b15d-4f5c-b94c-c00c80210f2d","links":{"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/6f8d5b16-b15d-4f5c-b94c-c00c80210f2d?resourceVersion=id%3A20051321"},"working-copy":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/6f8d5b16-b15d-4f5c-b94c-c00c80210f2d?resourceVersion=rel%3Aworking-copy"}},"attributes":{"drupal_internal__nid":3187132,"status":true,"title":"Editoria11y Accessibility Checker","created":"2020-12-08T01:52:59+00:00","changed":"2026-04-08T10:51:51+00:00","moderation_state":null,"body":{"value":"\u003Cp\u003EEditoria11y (\u0022editorial accessibility ally\u0022) is built around the key needs for ongoing quality assurance, both before and after a site launch:\u003C\/p\u003E\r\n    \r\n\u003Col\u003E\r\n  \u003Cli\u003ETests run in real-time, offering inline corrections and advice \u003Cstrong\u003Eas authors type\u003C\/strong\u003E in CKEditor in Gutenberg.\u003Cbr\u003E\u0026nbsp;\u003C\/li\u003E\r\n  \u003Cli\u003EIt checks \u003Cstrong\u003Erendered content\u003C\/strong\u003E in published pages and previews, allowing it to detect issues that only appear after Drupal assembles the content.\u003Cbr\u003E\u0026nbsp;\u003C\/li\u003E\r\n  \u003Cli\u003ETips use \u003Cstrong\u003Eplain language\u003C\/strong\u003E, to both correct and teach.\u003Cbr\u003E\u0026nbsp;\u003C\/li\u003E\r\n  \u003Cli\u003E\u003Cstrong\u003EResults are private\u003C\/strong\u003E. Tests run in-browser, and reports are stored on your own server.\u003C\/li\u003E\r\n\u003C\/ol\u003E\r\n  \u003Cp\u003E Editoria11y is meant to supplement, not replace, \u003Cstrong\u003E\u003Ca href=\u0022https:\/\/webaim.org\/resources\/evalquickref\/\u0022\u003Etesting with comprehensive tools and real assistive devices\u003C\/a\u003E\u003C\/strong\u003E\u003C\/p\u003E.\r\n\r\n\u003Ch2\u003EDemos\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\u003Cimg width=\u0022300\u0022 src=\u0022\/files\/Screenshot%202025-01-15%20at%204.04.05%E2%80%AFPM.png\u0022 alt=\u0022\u0022\u003E\u003Cbr\u003E\u003Cstrong\u003EInteractive Demo\u003C\/strong\u003E\u003C\/a\u003E\u003Cbr\u003E\u0026nbsp;\u003C\/li\u003E\r\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/youtu.be\/dnfQ8G-haXs?feature=shared\u0026t=2250\u0022\u003E\u003Cimg src=\u0022https:\/\/www.drupal.org\/files\/drupalcon-singapore-sm.png\u0022 alt=\u0022\u0022 width=\u0022300\u0022\u003E\u003Cbr\u003E\u003Cstrong\u003EVideo: authoring interface\u003C\/strong\u003E\u003C\/a\u003E tour \u003Cem\u003E(thanks to \u003Ca href=\u0022https:\/\/www.drupal.org\/u\/the_g_bomb\u0022\u003EGareth Alexander\u003C\/a\u003E)\u003C\/em\u003E\u003Cbr\u003E\u0026nbsp;\u003C\/li\u003E\r\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/youtu.be\/9hev_6L8SPk?feature=shared\u0026t=764\u0022\u003E\u003Cimg src=\u0022https:\/\/www.drupal.org\/files\/govcon-editoria11y.png\u0022 alt=\u0022\u0022 width=\u0022300\u0022\u003E\u003Cbr\u003E\u003Cstrong\u003EVideo: 2.1.x (previous version) authoring interface\u003C\/strong\u003E\u003C\/a\u003E and \u003Ca href=\u0022https:\/\/youtu.be\/9hev_6L8SPk?feature=shared\u0026t=1109\u0022\u003E\u003Cstrong\u003Esite reports\u003C\/strong\u003E\u003C\/a\u003E\u003Cbr\u003E\u0026nbsp;\u003C\/li\u003E\r\n\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 width=\u0022300\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\/Screenshot%202024-11-20%20at%203.55.28%E2%80%AFPM.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 \u003Cstrong\u003E\u003Ca href=\u0022https:\/\/accessibility.princeton.edu\/how\/content\/alternative-text\u0022\u003Etext alternatives for images on the page\u003C\/a\u003E\u003C\/strong\u003E (\u0022alts\u0022) and the \u003Cstrong\u003E\u003Ca href=\u0022https:\/\/accessibility.princeton.edu\/how\/content\/headings\u0022\u003Edocument\u0027s heading outline\u003C\/a\u003E\u003C\/strong\u003E.\u003C\/p\u003E\r\n\r\n\u003Cimg src=\u0022\/files\/Screenshot 2024-11-20 at 4.22.58%E2%80%AFPM.png\u0022 alt=\u0022Open heading and alt text panels, showing the document outline and alt text for each image.\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\u003Cstrong\u003E\u003Ca href=\u0022https:\/\/accessibility.princeton.edu\/how\/content\/alternative-text\u0022\u003EText alternatives\u003C\/a\u003E\u003C\/strong\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\u003Cstrong\u003E\u003Ca href=\u0022https:\/\/accessibility.princeton.edu\/how\/content\/links\u0022\u003EMeaningful links\u003C\/a\u003E\u003C\/strong\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\u003Cstrong\u003E\u003Ca href=\u0022https:\/\/accessibility.princeton.edu\/how\/content\/headings\u0022\u003EDocument outline and structure\u003C\/a\u003E\u003C\/strong\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 be fake headings\u003C\/li\u003E\r\n                \u003Cli\u003EAll-bold paragraphs with no punctuation that may need heading tags\u003C\/li\u003E\r\n                \u003Cli\u003ESuspicious patterns of paragraph prefixes that may need list tags (e.g. *, \u2022, \u2611\ufe0f, \ud83d\udc49, or incrementing numbers\/letters)\u003C\/li\u003E\r\n\u003Cli\u003ETables without headers, and overrides for the CKEditor5 table plugin to \u003Ca href=\u0022https:\/\/www.drupal.org\/project\/editoria11y\/issues\/3527991\u0022\u003Einsert new tables with header rows or columns by default\u003C\/a\u003E\u003C\/li\u003E\r\n\u003Cli\u003ETables 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\u003EEditoria11y is included in the Drupal CMS Accessibility Tools recipe available on install.\u003C\/p\u003E\r\n\r\n\u003Cp\u003EIf you prefer to watch: \u003Cstrong\u003E\u003Ca href=\u0022https:\/\/youtu.be\/uYvNYPg38nU?feature=shared\u0026t=579\u0022\u003E2.x Installation \u0026 Configuration Tips Video\u003C\/a\u003E\u003C\/strong\u003E.\u003C\/p\u003E\r\n\r\n\u003Cp\u003EIf you are installing from the command line, do note the \u003Cstrong\u003E\u003Ca href=\u0022https:\/\/www.a11yproject.com\/\u0022\u003E\u0022eleventy\u0022\u003C\/a\u003E\u003C\/strong\u003E when spelling the module\u0027s name! Those are not L\u0027s.\u003C\/p\u003E\r\n\r\n\u003Cp\u003EEditoria11y\u0027s default configuration (or the Drupal CMS \u0022Accessibility Tools\u0022 recipe) should work decently on most sites, but the following items should be reviewed:\u003C\/p\u003E\r\n\u003Col\u003E\r\n\u003Cli\u003E\u003Cstrong\u003E\u003Ca href=\u0022https:\/\/www.youtube.com\/watch?v=uYvNYPg38nU\u0026t=718s\u0022\u003EReview roles and permissions\u003C\/a\u003E\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\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 \u003Ca href=\u0022https:\/\/www.youtube.com\/watch?v=uYvNYPg38nU\u0026t=862s\u0022\u003E\u003Cstrong\u003Emodule configuration\u0027s \u0022skip over these elements\u0022 list\u003C\/strong\u003E\u003C\/a\u003E to suppress repeated alerts (e.g., \u0022#sidebar-menu a, .custom-card-view h3\u0022), or set the checker to only check regions your editors can modify (e.g., \u0022main, #footer-content\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\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\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 \u003Ca href=\u0022https:\/\/www.youtube.com\/watch?v=uYvNYPg38nU\u0026t=1261s\u0022\u003Eshadow components to check\u003C\/a\u003E, changes to which document filetypes should be flagged, the ability to \u003Ca href=\u0022https:\/\/youtu.be\/uYvNYPg38nU?feature=shared\u0026t=1454\u0022\u003Edisable checking if certain selectors are present or absent\u003C\/a\u003E (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\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/ai_editoria11y\u0022\u003E\u003Cstrong\u003EAI: Editoria11y\u003C\/strong\u003E\u003C\/a\u003E adds a \u0022Fix with AI\u0022 button to tool-tips while editing, which displays a dialog with suggestions for revising the content.\u003C\/li\u003E\r\n\u003Cli\u003ENate Millins\u0027 \u003Cstrong\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/editoria11y_si\u0022\u003EEditoria11y SI\u003C\/a\u003E\u003C\/strong\u003E connector module uses SiteImprove data to highlight broken links inline.\u003C\/li\u003E\r\n\u003Cli\u003EThe Editoria11y library is developed in parallel with the \u003Cstrong\u003E\u003Ca href=\u0022https:\/\/sa11y.netlify.app\/\u0022\u003ESa11y accessibility checker\u003C\/a\u003E\u003C\/strong\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\u003E\u003Cstrong\u003EDrupal wrapper for Sa11y\u003C\/strong\u003E\u003C\/a\u003E.\u003C\/li\u003E\r\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/decorative_image_widget\u0022\u003E\u003Cstrong\u003EDecorative Image Widget\u003C\/strong\u003E\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\u003E\u003Cstrong\u003Enot recommended by many disabled Web users\u003C\/strong\u003E\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\/install\/\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. There is also a \u003Ca href=\u0022https:\/\/youtu.be\/uYvNYPg38nU?feature=shared\u0026t=1648\u0022\u003E\u003Cstrong\u003Evideo guide to the JS events and test system\u003C\/strong\u003E\u003C\/a\u003E.\u003C\/p\u003E\u003Cp\u003EThe \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 the key needs for ongoing quality assurance, both before and after a site launch:\u003C\/p\u003E\n\u003Col\u003E\n\u003Cli\u003ETests run in real-time, offering inline corrections and advice \u003Cstrong\u003Eas authors type\u003C\/strong\u003E in CKEditor in Gutenberg.\u003Cbr\u003E\u0026nbsp;\u003C\/li\u003E\n\u003Cli\u003EIt checks \u003Cstrong\u003Erendered content\u003C\/strong\u003E in published pages and previews, allowing it to detect issues that only appear after Drupal assembles the content.\u003Cbr\u003E\u0026nbsp;\u003C\/li\u003E\n\u003Cli\u003ETips use \u003Cstrong\u003Eplain language\u003C\/strong\u003E, to both correct and teach.\u003Cbr\u003E\u0026nbsp;\u003C\/li\u003E\n\u003Cli\u003E\u003Cstrong\u003EResults are private\u003C\/strong\u003E. Tests run in-browser, and reports are stored on your own server.\u003C\/li\u003E\n\u003C\/ol\u003E\n\u003Cp\u003E Editoria11y is meant to supplement, not replace, \u003Cstrong\u003E\u003Ca href=\u0022https:\/\/webaim.org\/resources\/evalquickref\/\u0022 rel=\u0022nofollow\u0022\u003Etesting with comprehensive tools and real assistive devices\u003C\/a\u003E\u003C\/strong\u003E\u003C\/p\u003E\n\u003Cp\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=\u0022demos\u0022\u003EDemos\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\u003Cimg width=\u002216\u0022 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 class=\u0022filter-image-invalid\u0022\u003E\u003Cbr\u003E\u003Cstrong\u003EInteractive Demo\u003C\/strong\u003E\u003C\/a\u003E\u003Cbr\u003E\u0026nbsp;\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/youtu.be\/dnfQ8G-haXs?feature=shared\u0026amp;t=2250\u0022 rel=\u0022nofollow\u0022\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\u003Cbr\u003E\u003Cstrong\u003EVideo: authoring interface\u003C\/strong\u003E\u003C\/a\u003E tour \u003Cem\u003E(thanks to \u003Ca href=\u0022https:\/\/www.drupal.org\/u\/the_g_bomb\u0022 rel=\u0022nofollow\u0022\u003EGareth Alexander\u003C\/a\u003E)\u003C\/em\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\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\u003Cbr\u003E\u003Cstrong\u003EVideo: 2.1.x (previous version) authoring interface\u003C\/strong\u003E\u003C\/a\u003E and \u003Ca href=\u0022https:\/\/youtu.be\/9hev_6L8SPk?feature=shared\u0026amp;t=1109\u0022 rel=\u0022nofollow\u0022\u003E\u003Cstrong\u003Esite reports\u003C\/strong\u003E\u003C\/a\u003E\u003Cbr\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 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\/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 \u003Cstrong\u003E\u003Ca href=\u0022https:\/\/accessibility.princeton.edu\/how\/content\/alternative-text\u0022 rel=\u0022nofollow\u0022\u003Etext alternatives for images on the page\u003C\/a\u003E\u003C\/strong\u003E (\u0022alts\u0022) and the \u003Cstrong\u003E\u003Ca href=\u0022https:\/\/accessibility.princeton.edu\/how\/content\/headings\u0022 rel=\u0022nofollow\u0022\u003Edocument\u0027s heading outline\u003C\/a\u003E\u003C\/strong\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\u003Cstrong\u003E\u003Ca href=\u0022https:\/\/accessibility.princeton.edu\/how\/content\/alternative-text\u0022 rel=\u0022nofollow\u0022\u003EText alternatives\u003C\/a\u003E\u003C\/strong\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\u003Cstrong\u003E\u003Ca href=\u0022https:\/\/accessibility.princeton.edu\/how\/content\/links\u0022 rel=\u0022nofollow\u0022\u003EMeaningful links\u003C\/a\u003E\u003C\/strong\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\u003Cstrong\u003E\u003Ca href=\u0022https:\/\/accessibility.princeton.edu\/how\/content\/headings\u0022 rel=\u0022nofollow\u0022\u003EDocument outline and structure\u003C\/a\u003E\u003C\/strong\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 be fake headings\u003C\/li\u003E\n\u003Cli\u003EAll-bold paragraphs with no punctuation that may need heading tags\u003C\/li\u003E\n\u003Cli\u003ESuspicious patterns of paragraph prefixes that may need list tags (e.g. *, \u2022, \u2611\ufe0f, \ud83d\udc49, or incrementing numbers\/letters)\u003C\/li\u003E\n\u003Cli\u003ETables without headers, and overrides for the CKEditor5 table plugin to \u003Ca href=\u0022https:\/\/www.drupal.org\/project\/editoria11y\/issues\/3527991\u0022 rel=\u0022nofollow\u0022\u003Einsert new tables with header rows or columns by default\u003C\/a\u003E\u003C\/li\u003E\n\u003Cli\u003ETables 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\u003EEditoria11y is included in the Drupal CMS Accessibility Tools recipe available on install.\u003C\/p\u003E\n\u003Cp\u003EIf you prefer to watch: \u003Cstrong\u003E\u003Ca href=\u0022https:\/\/youtu.be\/uYvNYPg38nU?feature=shared\u0026amp;t=579\u0022 rel=\u0022nofollow\u0022\u003E2.x Installation \u0026amp; Configuration Tips Video\u003C\/a\u003E\u003C\/strong\u003E.\u003C\/p\u003E\n\u003Cp\u003EIf you are installing from the command line, do note the \u003Cstrong\u003E\u003Ca href=\u0022https:\/\/www.a11yproject.com\/\u0022 rel=\u0022nofollow\u0022\u003E\u0022eleventy\u0022\u003C\/a\u003E\u003C\/strong\u003E when spelling the module\u0027s name! Those are not L\u0027s.\u003C\/p\u003E\n\u003Cp\u003EEditoria11y\u0027s default configuration (or the Drupal CMS \u0022Accessibility Tools\u0022 recipe) should work decently on most sites, but the following items should be reviewed:\u003C\/p\u003E\n\u003Col\u003E\n\u003Cli\u003E\u003Cstrong\u003E\u003Ca href=\u0022https:\/\/www.youtube.com\/watch?v=uYvNYPg38nU\u0026amp;t=718s\u0022 rel=\u0022nofollow\u0022\u003EReview roles and permissions\u003C\/a\u003E\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\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 \u003Ca href=\u0022https:\/\/www.youtube.com\/watch?v=uYvNYPg38nU\u0026amp;t=862s\u0022 rel=\u0022nofollow\u0022\u003E\u003Cstrong\u003Emodule configuration\u0027s \u0022skip over these elements\u0022 list\u003C\/strong\u003E\u003C\/a\u003E to suppress repeated alerts (e.g., \u0022#sidebar-menu a, .custom-card-view h3\u0022), or set the checker to only check regions your editors can modify (e.g., \u0022main, #footer-content\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\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\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 \u003Ca href=\u0022https:\/\/www.youtube.com\/watch?v=uYvNYPg38nU\u0026amp;t=1261s\u0022 rel=\u0022nofollow\u0022\u003Eshadow components to check\u003C\/a\u003E, changes to which document filetypes should be flagged, the ability to \u003Ca href=\u0022https:\/\/youtu.be\/uYvNYPg38nU?feature=shared\u0026amp;t=1454\u0022 rel=\u0022nofollow\u0022\u003Edisable checking if certain selectors are present or absent\u003C\/a\u003E (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\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/ai_editoria11y\u0022 rel=\u0022nofollow\u0022\u003E\u003Cstrong\u003EAI: Editoria11y\u003C\/strong\u003E\u003C\/a\u003E adds a \u0022Fix with AI\u0022 button to tool-tips while editing, which displays a dialog with suggestions for revising the content.\u003C\/li\u003E\n\u003Cli\u003ENate Millins\u0027 \u003Cstrong\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/editoria11y_si\u0022 rel=\u0022nofollow\u0022\u003EEditoria11y SI\u003C\/a\u003E\u003C\/strong\u003E connector module uses SiteImprove data to highlight broken links inline.\u003C\/li\u003E\n\u003Cli\u003EThe Editoria11y library is developed in parallel with the \u003Cstrong\u003E\u003Ca href=\u0022https:\/\/sa11y.netlify.app\/\u0022 rel=\u0022nofollow\u0022\u003ESa11y accessibility checker\u003C\/a\u003E\u003C\/strong\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\u003E\u003Cstrong\u003EDrupal wrapper for Sa11y\u003C\/strong\u003E\u003C\/a\u003E.\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/decorative_image_widget\u0022 rel=\u0022nofollow\u0022\u003E\u003Cstrong\u003EDecorative Image Widget\u003C\/strong\u003E\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\u003E\u003Cstrong\u003Enot recommended by many disabled Web users\u003C\/strong\u003E\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\/install\/\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. There is also a \u003Ca href=\u0022https:\/\/youtu.be\/uYvNYPg38nU?feature=shared\u0026amp;t=1648\u0022 rel=\u0022nofollow\u0022\u003E\u003Cstrong\u003Evideo guide to the JS events and test system\u003C\/strong\u003E\u003C\/a\u003E.\u003C\/p\u003E\n\u003Cp\u003EThe \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:26,\u00222.0.x\u0022:87,\u00222.1.x\u0022:804,\u00222.2.x\u0022:19325,\u00223.0.x\u0022:260}","field_active_installs_total":20502,"field_composer_namespace":"drupal\/editoria11y","field_core_semver_maximum":12000000,"field_core_semver_minimum":8000000,"field_issue_summary_template":null,"field_logo_url":{"uri":"https:\/\/git.drupalcode.org\/project\/editoria11y\/-\/avatar","title":null,"options":[]},"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:\/\/new.drupal.org\/jsonapi\/node\/project_module\/6f8d5b16-b15d-4f5c-b94c-c00c80210f2d\/uid?resourceVersion=id%3A20051321"},"self":{"href":"https:\/\/new.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:\/\/new.drupal.org\/jsonapi\/node\/project_module\/6f8d5b16-b15d-4f5c-b94c-c00c80210f2d\/field_development_status?resourceVersion=id%3A20051321"},"self":{"href":"https:\/\/new.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:\/\/new.drupal.org\/jsonapi\/node\/project_module\/6f8d5b16-b15d-4f5c-b94c-c00c80210f2d\/field_maintenance_status?resourceVersion=id%3A20051321"},"self":{"href":"https:\/\/new.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:\/\/new.drupal.org\/jsonapi\/node\/project_module\/6f8d5b16-b15d-4f5c-b94c-c00c80210f2d\/field_module_categories?resourceVersion=id%3A20051321"},"self":{"href":"https:\/\/new.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":"missing","meta":{"links":{"help":{"href":"https:\/\/www.drupal.org\/docs\/8\/modules\/json-api\/core-concepts#missing","meta":{"about":"Usage and meaning of the \u0027missing\u0027 resource identifier."}}}}}],"links":{"related":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/6f8d5b16-b15d-4f5c-b94c-c00c80210f2d\/field_project_images?resourceVersion=id%3A20051321"},"self":{"href":"https:\/\/new.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:\/\/new.drupal.org\/jsonapi\/node\/project_module\/9ea06ebb-d5e9-46cb-b5a1-c7db73cf2283?resourceVersion=id%3A20044590"},"working-copy":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/9ea06ebb-d5e9-46cb-b5a1-c7db73cf2283?resourceVersion=rel%3Aworking-copy"}},"attributes":{"drupal_internal__nid":2951108,"status":true,"title":"View Password","created":"2018-03-08T10:32:25+00:00","changed":"2026-04-07T05:20:02+00:00","moderation_state":null,"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:1,\u00228.x-5.x\u0022:25,\u00226.0.x\u0022:13474}","field_active_installs_total":13500,"field_composer_namespace":"drupal\/view_password","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:\/\/new.drupal.org\/jsonapi\/node\/project_module\/9ea06ebb-d5e9-46cb-b5a1-c7db73cf2283\/uid?resourceVersion=id%3A20044590"},"self":{"href":"https:\/\/new.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:\/\/new.drupal.org\/jsonapi\/node\/project_module\/9ea06ebb-d5e9-46cb-b5a1-c7db73cf2283\/field_development_status?resourceVersion=id%3A20044590"},"self":{"href":"https:\/\/new.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:\/\/new.drupal.org\/jsonapi\/node\/project_module\/9ea06ebb-d5e9-46cb-b5a1-c7db73cf2283\/field_maintenance_status?resourceVersion=id%3A20044590"},"self":{"href":"https:\/\/new.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:\/\/new.drupal.org\/jsonapi\/node\/project_module\/9ea06ebb-d5e9-46cb-b5a1-c7db73cf2283\/field_module_categories?resourceVersion=id%3A20044590"},"self":{"href":"https:\/\/new.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:\/\/new.drupal.org\/jsonapi\/node\/project_module\/9ea06ebb-d5e9-46cb-b5a1-c7db73cf2283\/field_project_images?resourceVersion=id%3A20044590"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/9ea06ebb-d5e9-46cb-b5a1-c7db73cf2283\/relationships\/field_project_images?resourceVersion=id%3A20044590"}}}}},{"type":"node--project_module","id":"eb147506-e5b6-497a-b649-89396968188a","links":{"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/eb147506-e5b6-497a-b649-89396968188a?resourceVersion=id%3A20016431"},"working-copy":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/eb147506-e5b6-497a-b649-89396968188a?resourceVersion=rel%3Aworking-copy"}},"attributes":{"drupal_internal__nid":1287958,"status":true,"title":"Physical Fields","created":"2011-09-22T19:15:36+00:00","changed":"2026-04-07T05:20:02+00:00","moderation_state":null,"body":{"value":"\u003Cp\u003EThis module provides an API for storing and manipulating physical measurements. It also supports unit conversions.\u003C\/p\u003E\r\n\u003Cdiv class=\u0022note-version\u0022\u003E\r\n  \u003Ch4\u003EFeatures\u003C\/h4\u003E\r\nSupported measurement types:\r\n\u003Cul\u003E\r\n\u003Cli\u003E Area  \u003C\/li\u003E\r\n\u003Cli\u003E Length  \u003C\/li\u003E\r\n\u003Cli\u003E Temperature \u003C\/li\u003E\r\n\u003Cli\u003E Volume  \u003C\/li\u003E\r\n\u003Cli\u003E Weight  \u003C\/li\u003E\r\n\u003C\/ul\u003E\r\n\r\nProvided field types:\r\n\u003Cul\u003E\r\n\u003Cli\u003E Physical measurement: Stores a single measurement and its unit. \u003C\/li\u003E\r\n\u003Cli\u003E Physical dimensions: Stores the length\/width\/height measurements and their unit.\u003C\/li\u003E\r\n\u003C\/ul\u003E\r\n\r\nOther features:\r\n\u003Cul\u003E\r\n\u003Cli\u003E Language-specific number input and formatting \u003C\/li\u003E\r\n\u003Cli\u003E Value objects with support for bcmath-based arithmetic. \u003C\/li\u003E\r\n\u003C\/ul\u003E\r\n\u003C\/div\u003E\r\n\u003Cdiv class=\u0022note-version\u0022\u003E\r\n  \u003Ch4\u003EDrupal 9 \u0026 10 \u0026 11\u003C\/h4\u003E\r\n  \u003Ch5\u003EInstallation\u003C\/h5\u003E\r\n  \u003Cp\u003EPhysical should only be installed via Composer. The zip files on this page are provided for informative purposes only.\u003C\/p\u003E\r\n  \u003Cp\u003EDrupal 9 or newer is required.\u003C\/p\u003E\r\n\u003C\/div\u003E\r\n\r\n\u003Cdiv class=\u0022note-tip\u0022\u003E\r\nExample:\r\n\u003C?php\r\nuse Drupal\\physical\\Weight;\r\nuse Drupal\\physical\\WeightUnit;\r\n\r\n$weight = new Weight(\u0027100\u0027, WeightUnit::KILOGRAM);\r\n$other_weight = new Weight(\u0027120\u0027, WeightUnit::KILOGRAM);\r\n\/\/ Add the two weights together then express them in pounds.\r\n$new_weight = $weight-\u003Eadd($other_weight)-\u003Econvert(WeightUnit::POUND);\r\n?\u003E\r\n\u003C\/div\u003E\r\n\r\n\u003Ch4\u003EIncompatibility notes\u003C\/h4\u003E\r\nPhysical 1.3+ is incompatible with Commerce versions prior to 2.34 (See https:\/\/www.drupal.org\/project\/physical\/issues\/3345698#comment-15019339).\r\n","format":"1","processed":"\u003Cdiv class=\u0022toc-filter\u0022\u003E\u003Cp\u003EThis module provides an API for storing and manipulating physical measurements. It also supports unit conversions.\u003C\/p\u003E\n\u003Cdiv class=\u0022note-version\u0022\u003E\n\u003Ch4 id=\u0022features\u0022\u003EFeatures\u003C\/h4\u003E\n\u003Cp\u003ESupported measurement types:\u003C\/p\u003E\n\u003Cul\u003E\n\u003Cli\u003E Area  \u003C\/li\u003E\n\u003Cli\u003E Length  \u003C\/li\u003E\n\u003Cli\u003E Temperature \u003C\/li\u003E\n\u003Cli\u003E Volume  \u003C\/li\u003E\n\u003Cli\u003E Weight  \u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Cp\u003EProvided field types:\u003C\/p\u003E\n\u003Cul\u003E\n\u003Cli\u003E Physical measurement: Stores a single measurement and its unit. \u003C\/li\u003E\n\u003Cli\u003E Physical dimensions: Stores the length\/width\/height measurements and their unit.\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Cp\u003EOther features:\u003C\/p\u003E\n\u003Cul\u003E\n\u003Cli\u003E Language-specific number input and formatting \u003C\/li\u003E\n\u003Cli\u003E Value objects with support for bcmath-based arithmetic. \u003C\/li\u003E\n\u003C\/ul\u003E\n\u003C\/div\u003E\n\u003Cdiv class=\u0022note-version\u0022\u003E\n\u003Ch4 id=\u0022drupal-9-amp-10-amp-11\u0022\u003EDrupal 9 \u0026amp; 10 \u0026amp; 11\u003C\/h4\u003E\n\u003Ch5\u003EInstallation\u003C\/h5\u003E\n\u003Cp\u003EPhysical should only be installed via Composer. The zip files on this page are provided for informative purposes only.\u003C\/p\u003E\n\u003Cp\u003EDrupal 9 or newer is required.\u003C\/p\u003E\n\u003C\/div\u003E\n\u003Cdiv class=\u0022note-tip\u0022\u003E\nExample:\u003Cbr\u003E\n\u0026lt;?php\u003Cbr\u003E\nuse Drupal\\physical\\Weight;\u003Cbr\u003E\nuse Drupal\\physical\\WeightUnit;\n\u003Cp\u003E$weight = new Weight(\u0027100\u0027, WeightUnit::KILOGRAM);\u003Cbr\u003E\n$other_weight = new Weight(\u0027120\u0027, WeightUnit::KILOGRAM);\u003Cbr\u003E\n\/\/ Add the two weights together then express them in pounds.\u003Cbr\u003E\n$new_weight = $weight-\u0026gt;add($other_weight)-\u0026gt;convert(WeightUnit::POUND);\u003Cbr\u003E\n?\u0026gt;\n\u003C\/p\u003E\u003C\/div\u003E\n\u003Ch4 id=\u0022incompatibility-notes\u0022\u003EIncompatibility notes\u003C\/h4\u003E\n\u003Cp\u003EPhysical 1.3+ is incompatible with Commerce versions prior to 2.34 (See \u003Ca href=\u0022https:\/\/www.drupal.org\/project\/physical\/issues\/3345698#comment-15019339\u0022 rel=\u0022nofollow\u0022\u003Ehttps:\/\/www.drupal.org\/project\/physical\/issues\/3345698#comment-15019339\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-1.x\u0022:11532}","field_active_installs_total":11532,"field_composer_namespace":"drupal\/physical","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":"physical","field_security_advisory_coverage":"covered"},"relationships":{"uid":{"data":{"type":"user--user","id":"45dce456-4ddf-4269-9cd4-2e46bb0760ed","meta":{"drupal_internal__target_id":3661446}},"links":{"related":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/eb147506-e5b6-497a-b649-89396968188a\/uid?resourceVersion=id%3A20016431"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/eb147506-e5b6-497a-b649-89396968188a\/relationships\/uid?resourceVersion=id%3A20016431"}}},"field_development_status":{"data":{"type":"taxonomy_term--development_status","id":"219c1cf2-dd7f-474b-9dd5-a26643fbc699","meta":{"drupal_internal__target_id":27276}},"links":{"related":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/eb147506-e5b6-497a-b649-89396968188a\/field_development_status?resourceVersion=id%3A20016431"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/eb147506-e5b6-497a-b649-89396968188a\/relationships\/field_development_status?resourceVersion=id%3A20016431"}}},"field_maintenance_status":{"data":{"type":"taxonomy_term--maintenance_status","id":"cee844e2-68b5-489d-bafa-6a0ade2b6dfd","meta":{"drupal_internal__target_id":27273}},"links":{"related":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/eb147506-e5b6-497a-b649-89396968188a\/field_maintenance_status?resourceVersion=id%3A20016431"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/eb147506-e5b6-497a-b649-89396968188a\/relationships\/field_maintenance_status?resourceVersion=id%3A20016431"}}},"field_module_categories":{"data":[{"type":"taxonomy_term--module_categories","id":"0cd80c8e-5c20-43a8-aa3e-ec701007d443","meta":{"drupal_internal__target_id":195}},{"type":"taxonomy_term--module_categories","id":"dcb48e9f-6afa-4842-8ef6-44b90b083fcc","meta":{"drupal_internal__target_id":200}}],"links":{"related":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/eb147506-e5b6-497a-b649-89396968188a\/field_module_categories?resourceVersion=id%3A20016431"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/eb147506-e5b6-497a-b649-89396968188a\/relationships\/field_module_categories?resourceVersion=id%3A20016431"}}},"field_project_images":{"data":[],"links":{"related":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/eb147506-e5b6-497a-b649-89396968188a\/field_project_images?resourceVersion=id%3A20016431"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/eb147506-e5b6-497a-b649-89396968188a\/relationships\/field_project_images?resourceVersion=id%3A20016431"}}}}},{"type":"node--project_module","id":"0f6a13e0-9a1e-4358-8fff-b0641f8e3b26","links":{"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/0f6a13e0-9a1e-4358-8fff-b0641f8e3b26?resourceVersion=id%3A20050315"},"working-copy":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/0f6a13e0-9a1e-4358-8fff-b0641f8e3b26?resourceVersion=rel%3Aworking-copy"}},"attributes":{"drupal_internal__nid":3139023,"status":true,"title":"COOKiES Consent Management","created":"2020-05-22T12:32:29+00:00","changed":"2026-04-07T05:20:02+00:00","moderation_state":null,"body":{"value":"User consent management module for Drupal.\r\n\r\nThe module enables existing third-party-integration modules continued to be used in compliance with the GDPR (of course without manipulating their code). It solves the basic problem that when using third-party-integration modules, the user must agree to the use of cookies (according to GDPR) \u003Cstrong\u003Ebefore\u003C\/strong\u003E they are installed.\r\n\r\nIMPORTANT: No liability is assumed regarding compliance with the GDPR.\r\n\r\nThe COOKiES module provides (in conjunction with \u003Ca href=\u0022https:\/\/github.com\/jfeltkamp\/cookiesjsr\u0022 title=\u0022See on GitHub\u0022\u003ECookies JSR\u003C\/a\u003E) a fully configurable user interface for user decisions. It also supports out-of-the-box key third-party integration modules for:\r\n\u003Cul\u003E\r\n  \u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/asset_injector\u0022\u003EAsset Injector\u003C\/a\u003E\u003C\/li\u003E\r\n  \u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/google_analytics\u0022\u003EGoogle Analytics module\u003C\/a\u003E [DEPRECATED support in 2.x]\u003C\/li\u003E\r\n  \u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/google_tag\u0022\u003EGoogle Tag Manager\u003C\/a\u003E\u003C\/li\u003E\r\n  \u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/ivw_integration\u0022\u003EIVW Integration \u003C2.4\u003C\/a\u003E\u003C\/li\u003E\r\n  \u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/recaptcha\u0022\u003EreCAPTCHA\u003C\/a\u003E\u003C\/li\u003E\r\n  \u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/matomo\u0022\u003EMatomo Analytics\u003C\/a\u003E\u003C\/li\u003E\r\n  \u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/etracker\u0022\u003EeTracker Analytics\u003C\/a\u003E\u003C\/li\u003E\r\n  \u003Cli\u003EVideo embed with oembed from core:media module (recommended) or \u003Ca href=\u0022https:\/\/www.drupal.org\/project\/video_embed_field\u0022\u003EVideo Embed Field\u003C\/a\u003E (iframe, not recom.)\u003C\/li\u003E\r\n  \u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/media_entity_twitter\u0022\u003ETwitter media module\u003C\/a\u003E\u003C\/li\u003E\r\n  \u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/media_entity_instagram\u0022\u003EInstagram media module\u003C\/a\u003E\u003C\/li\u003E\r\n  \u003Cli\u003E \u003Ca href=\u0022https:\/\/www.drupal.org\/project\/facebook_pixel\u0022\u003EMeta Pixel (Facebook Pixel)\u003C\/a\u003E\u003C\/li\u003E\r\n\u003C\/ul\u003E\r\n\r\n\u003Cdiv class=\u0022note-version\u0022\u003E\r\n\u003Ch4\u003ERecommendation\u003C\/h4\u003E\r\n\u003Cp\u003EIf you are looking for the \u003Cstrong\u003Ebest-supported solution\u003C\/strong\u003E for a consent privacy system \u003Cstrong\u003Erecommended by the Drupal community\u003C\/strong\u003E, please also consider the \u003Cstrong\u003EKlaro module\u003C\/strong\u003E  (https:\/\/www.drupal.org\/project\/klaro), which is integrated into the Drupal CMS stack.\u003C\/p\u003E\r\n\u003Cp\u003E\u003Cstrong\u003EThis \u0022COOKiES\u0022 module\u003C\/strong\u003E has roughly the same range of features, is being further developed, and \u003Cstrong\u003Eis not outdated\u003C\/strong\u003E. At least for the module\u0027s maintainers, it will definitly continue to be used and will receive all security and core-release updates in the coming years. With upcoming version 2.0, the JavaScript frontend will be freely available for customization. Additional features are not currently planned, but are possible. \u003C\/p\u003E\r\n\u003C\/div\u003E\r\n\r\n\u003Ch2\u003E2.x release\u003C\/h2\u003E\r\n\u003Cul\u003E\r\n  \u003Cli\u003EUses \u003Ca href=\u0022https:\/\/github.com\/jfeltkamp\/cookiesjsr\/tree\/2.x\u0022\u003Enew cookiesjsr 2.x library\u003C\/a\u003E completely rebuilt using Svelte. Only ~40 kb in size. This library is \u003Cstrong\u003Eopen source\u003C\/strong\u003E, fully customizable, un-branded and under GPL 3 licence.\u003C\/li\u003E\r\n  \u003Cli\u003EDeprecates \u0022COOKiES Google Analytics\u0022 (cookies_ga) in favor of \u0022COOKiES Google Tag Manager (cookies_gtag).\u003C\/li\u003E\r\n  \u003Cli\u003EIf you are upgrading from 1.x and have advanced custom style changes, you should expect to update some of these. Essentially, class names have been changed to bring us closer to Drupal best practices.\u003C\/li\u003E\r\n\u003C\/ul\u003E\r\n\u003Ch2\u003EFeatures\u003C\/h2\u003E\r\n1. Full responsive design.\r\n2. Full translatable by Drupal UI\r\n3. Full accessibility\r\n4. Customizable styling. \r\n4.1. \u003Cstrong\u003ELight:\u003C\/strong\u003E Use CSS-vars to customize colors and some params as \u003Ca href=\u0022https:\/\/github.com\/jfeltkamp\/cookiesjsr\/blob\/master\/README.md#styling\u0022\u003Edescribed here\u003C\/a\u003E.\r\n4.2. \u003Cstrong\u003EHeavy:\u003C\/strong\u003E Disable original CSS in the config and start to customize from scatch - or with \u003Ca href=\u0022https:\/\/github.com\/jfeltkamp\/cookiesjsr\/tree\/master\/styles\u0022\u003Eoriginal SCSS download here\u003C\/a\u003E) \r\n\r\n\u003Ch2\u003EInstallation\u003C\/h2\u003E\r\n1. Require the module via \u003Ccode\u003Ecomposer require \u0027drupal\/cookies\u0027\u003C\/code\u003E. This will automatically require the \u003Ccode\u003Ejfeltkamp\/cookiesjsr\u003C\/code\u003E library as well.\r\n2. Add the \u0022COOKiES UI\u0022 block in the block configuration at \u003Cem\u003EAdmin\u003EStructure\u003EBlocks\u003C\/em\u003E (\u003Ccode\u003E\/admin\/structure\/block\u003C\/code\u003E). Simply place the block anywhere.\r\n3. Activate submodules for third party module support (e.g. cookies_gtag to support Google Tag Manager).\r\n\r\n\u003Ch3\u003EConfiguration\u003C\/h3\u003E\r\n1. Configure the COOKiES module under \u003Cem\u003EAdmin\u003EConfig\u003ESystem\u003ECOOKiES\u003C\/em\u003E (\u003Ccode\u003E\/admin\/config\/cookies\/config\u003C\/code\u003E)\r\n2. Users may want to change their cookie preferences. For this reason, a \u0022Cookies settings\u0022 link in the tools menu is created. Move the link to the menu, where you want to place it. (You can create a custom Link very easy with \u003Ccode\u003E\u003Ca href=\u0022#editCookieSettings\u0022\u003Ecookies\u003C\/a\u003E\u003C\/code\u003E)\r\n3. You can also add a \u0022Cookies Documentation\u0022 block at \u003Cem\u003EAdmin\u003EStructure\u003EBlocks\u003C\/em\u003E (\u003Ccode\u003E\/admin\/structure\/block\u003C\/code\u003E). This block will display the cookie documentation of each cookies service provided (which can be changed manually).\r\n\r\n\u003Ch2\u003EImportant Note\u003C\/h2\u003E\r\nFor reasons of performance and in order not to influence the first impression of the page with the cookie banner, a \u003Cstrong\u003Escroll limit\u003C\/strong\u003E is set by default. If your website is not scrollable or your homepage is very short, you should set the \u003Cstrong\u003Esroll limit to zero\u003C\/strong\u003E so that the banner loads immediately.\r\n\r\n\u003Ch2\u003EOther third party modules \/ submodules\u003C\/h2\u003E\r\n\u003Cul\u003E\r\n  \u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/cookies_module_handler\u0022\u003ECOOKiES Module Handler\u003C\/a\u003E: covers the handling of Javascript (disable\/enable depending on users consent)\u003C\/li\u003E\r\n  \u003Cli\u003ECOOKiES Filter (Submodule): Covers the handling of 3rd party code snippets pasted to the text editor.\u003C\/li\u003E\r\n  \u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/etracker\u0022\u003ECOOKiES Etracker\u003C\/a\u003E (Submodule of etracker):COOKiES compatibility with etracker\u003C\/li\u003E\r\n  \u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/posthog\u0022\u003ECOOKiES Posthog\u003C\/a\u003E (Submodule of posthog):COOKiES compatibility with posthog\u003C\/li\u003E\r\n\u003C\/ul\u003E\r\n\u003Ch2\u003EPossible alternatives\u003C\/h2\u003E\r\n\u003Cul\u003E\r\n  \u003Cli\u003Ehttps:\/\/www.drupal.org\/project\/klaro (favourite)\u003C\/li\u003E\r\n  \u003Cli\u003Ehttps:\/\/www.drupal.org\/project\/eu_cookie_compliance\u003C\/li\u003E\r\n  \u003Cli\u003Ehttps:\/\/www.drupal.org\/project\/tacjs\u003C\/li\u003E\r\n  \u003Cli\u003Ehttps:\/\/www.drupal.org\/project\/simple_klaro\u003C\/li\u003E\r\n  \u003Cli\u003Ehttps:\/\/www.drupal.org\/project\/cookieconsent\u003C\/li\u003E\r\n  \u003Cli\u003Ehttps:\/\/www.drupal.org\/project\/cookie_content_blocker\u003C\/li\u003E\r\n  \u003Cli\u003Ehttps:\/\/www.drupal.org\/project\/usercentrics_cmp\u003C\/li\u003E\r\n  \u003Cli\u003Ehttps:\/\/www.drupal.org\/project\/cookiebot\u003C\/li\u003E\r\n  \u003Cli\u003Ehttps:\/\/www.drupal.org\/project\/cookiebot_gtm\u003C\/li\u003E\r\n  \u003Cli\u003Ehttps:\/\/www.drupal.org\/project\/cookie_script\u003C\/li\u003E\r\n\u003C\/ul\u003E","format":"1","processed":"\u003Cdiv class=\u0022toc-filter\u0022\u003E\u003Cp\u003EUser consent management module for Drupal.\u003C\/p\u003E\n\u003Cp\u003EThe module enables existing third-party-integration modules continued to be used in compliance with the GDPR (of course without manipulating their code). It solves the basic problem that when using third-party-integration modules, the user must agree to the use of cookies (according to GDPR) \u003Cstrong\u003Ebefore\u003C\/strong\u003E they are installed.\u003C\/p\u003E\n\u003Cp\u003EIMPORTANT: No liability is assumed regarding compliance with the GDPR.\u003C\/p\u003E\n\u003Cp\u003EThe COOKiES module provides (in conjunction with \u003Ca href=\u0022https:\/\/github.com\/jfeltkamp\/cookiesjsr\u0022 rel=\u0022nofollow\u0022\u003ECookies JSR\u003C\/a\u003E) a fully configurable user interface for user decisions. It also supports out-of-the-box key third-party integration modules for:\u003C\/p\u003E\n\u003Cul\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/asset_injector\u0022 rel=\u0022nofollow\u0022\u003EAsset Injector\u003C\/a\u003E\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/google_analytics\u0022 rel=\u0022nofollow\u0022\u003EGoogle Analytics module\u003C\/a\u003E [DEPRECATED support in 2.x]\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/google_tag\u0022 rel=\u0022nofollow\u0022\u003EGoogle Tag Manager\u003C\/a\u003E\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/ivw_integration\u0022 rel=\u0022nofollow\u0022\u003EIVW Integration \u0026lt;2.4\u003C\/a\u003E\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/recaptcha\u0022 rel=\u0022nofollow\u0022\u003EreCAPTCHA\u003C\/a\u003E\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/matomo\u0022 rel=\u0022nofollow\u0022\u003EMatomo Analytics\u003C\/a\u003E\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/etracker\u0022 rel=\u0022nofollow\u0022\u003EeTracker Analytics\u003C\/a\u003E\u003C\/li\u003E\n\u003Cli\u003EVideo embed with oembed from core:media module (recommended) or \u003Ca href=\u0022https:\/\/www.drupal.org\/project\/video_embed_field\u0022 rel=\u0022nofollow\u0022\u003EVideo Embed Field\u003C\/a\u003E (iframe, not recom.)\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/media_entity_twitter\u0022 rel=\u0022nofollow\u0022\u003ETwitter media module\u003C\/a\u003E\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/media_entity_instagram\u0022 rel=\u0022nofollow\u0022\u003EInstagram media module\u003C\/a\u003E\u003C\/li\u003E\n\u003Cli\u003E \u003Ca href=\u0022https:\/\/www.drupal.org\/project\/facebook_pixel\u0022 rel=\u0022nofollow\u0022\u003EMeta Pixel (Facebook Pixel)\u003C\/a\u003E\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Cdiv class=\u0022note-version\u0022\u003E\n\u003Ch4 id=\u0022recommendation\u0022\u003ERecommendation\u003C\/h4\u003E\n\u003Cp\u003EIf you are looking for the \u003Cstrong\u003Ebest-supported solution\u003C\/strong\u003E for a consent privacy system \u003Cstrong\u003Erecommended by the Drupal community\u003C\/strong\u003E, please also consider the \u003Cstrong\u003EKlaro module\u003C\/strong\u003E  (\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/klaro\u0022 rel=\u0022nofollow\u0022\u003Ehttps:\/\/www.drupal.org\/project\/klaro\u003C\/a\u003E), which is integrated into the Drupal CMS stack.\u003C\/p\u003E\n\u003Cp\u003E\u003Cstrong\u003EThis \u0022COOKiES\u0022 module\u003C\/strong\u003E has roughly the same range of features, is being further developed, and \u003Cstrong\u003Eis not outdated\u003C\/strong\u003E. At least for the module\u0027s maintainers, it will definitly continue to be used and will receive all security and core-release updates in the coming years. With upcoming version 2.0, the JavaScript frontend will be freely available for customization. Additional features are not currently planned, but are possible. \u003C\/p\u003E\n\u003C\/div\u003E\n\u003Ca href=\u0022#top\u0022 class=\u0022back-to-top\u0022\u003EBack to top\u003C\/a\u003E\n\n\u003Ch2 id=\u0022x-release\u0022\u003E2.x release\u003C\/h2\u003E\n\u003Cul\u003E\n\u003Cli\u003EUses \u003Ca href=\u0022https:\/\/github.com\/jfeltkamp\/cookiesjsr\/tree\/2.x\u0022 rel=\u0022nofollow\u0022\u003Enew cookiesjsr 2.x library\u003C\/a\u003E completely rebuilt using Svelte. Only ~40 kb in size. This library is \u003Cstrong\u003Eopen source\u003C\/strong\u003E, fully customizable, un-branded and under GPL 3 licence.\u003C\/li\u003E\n\u003Cli\u003EDeprecates \u0022COOKiES Google Analytics\u0022 (cookies_ga) in favor of \u0022COOKiES Google Tag Manager (cookies_gtag).\u003C\/li\u003E\n\u003Cli\u003EIf you are upgrading from 1.x and have advanced custom style changes, you should expect to update some of these. Essentially, class names have been changed to bring us closer to Drupal best practices.\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=\u0022features\u0022\u003EFeatures\u003C\/h2\u003E\n\u003Cp\u003E1. Full responsive design.\u003Cbr\u003E\n2. Full translatable by Drupal UI\u003Cbr\u003E\n3. Full accessibility\u003Cbr\u003E\n4. Customizable styling.\u003Cbr\u003E\n4.1. \u003Cstrong\u003ELight:\u003C\/strong\u003E Use CSS-vars to customize colors and some params as \u003Ca href=\u0022https:\/\/github.com\/jfeltkamp\/cookiesjsr\/blob\/master\/README.md#styling\u0022 rel=\u0022nofollow\u0022\u003Edescribed here\u003C\/a\u003E.\u003Cbr\u003E\n4.2. \u003Cstrong\u003EHeavy:\u003C\/strong\u003E Disable original CSS in the config and start to customize from scatch - or with \u003Ca href=\u0022https:\/\/github.com\/jfeltkamp\/cookiesjsr\/tree\/master\/styles\u0022 rel=\u0022nofollow\u0022\u003Eoriginal SCSS download here\u003C\/a\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=\u0022installation\u0022\u003EInstallation\u003C\/h2\u003E\n\u003Cp\u003E1. Require the module via \u003Ccode\u003Ecomposer require \u0027drupal\/cookies\u0027\u003C\/code\u003E. This will automatically require the \u003Ccode\u003Ejfeltkamp\/cookiesjsr\u003C\/code\u003E library as well.\u003Cbr\u003E\n2. Add the \u0022COOKiES UI\u0022 block in the block configuration at \u003Cem\u003EAdmin\u0026gt;Structure\u0026gt;Blocks\u003C\/em\u003E (\u003Ccode\u003E\/admin\/structure\/block\u003C\/code\u003E). Simply place the block anywhere.\u003Cbr\u003E\n3. Activate submodules for third party module support (e.g. cookies_gtag to support Google Tag Manager).\u003C\/p\u003E\n\u003Ch3 id=\u0022configuration\u0022\u003EConfiguration\u003C\/h3\u003E\n\u003Cp\u003E1. Configure the COOKiES module under \u003Cem\u003EAdmin\u0026gt;Config\u0026gt;System\u0026gt;COOKiES\u003C\/em\u003E (\u003Ccode\u003E\/admin\/config\/cookies\/config\u003C\/code\u003E)\u003Cbr\u003E\n2. Users may want to change their cookie preferences. For this reason, a \u0022Cookies settings\u0022 link in the tools menu is created. Move the link to the menu, where you want to place it. (You can create a custom Link very easy with \u003Ccode\u003E\u003Ca href=\u0022#editCookieSettings\u0022 rel=\u0022nofollow\u0022\u003Ecookies\u003C\/a\u003E\u003C\/code\u003E)\u003Cbr\u003E\n3. You can also add a \u0022Cookies Documentation\u0022 block at \u003Cem\u003EAdmin\u0026gt;Structure\u0026gt;Blocks\u003C\/em\u003E (\u003Ccode\u003E\/admin\/structure\/block\u003C\/code\u003E). This block will display the cookie documentation of each cookies service provided (which can be changed manually).\u003C\/p\u003E\n\u003Ca href=\u0022#top\u0022 class=\u0022back-to-top\u0022\u003EBack to top\u003C\/a\u003E\n\n\u003Ch2 id=\u0022important-note\u0022\u003EImportant Note\u003C\/h2\u003E\n\u003Cp\u003EFor reasons of performance and in order not to influence the first impression of the page with the cookie banner, a \u003Cstrong\u003Escroll limit\u003C\/strong\u003E is set by default. If your website is not scrollable or your homepage is very short, you should set the \u003Cstrong\u003Esroll limit to zero\u003C\/strong\u003E so that the banner loads immediately.\u003C\/p\u003E\n\u003Ca href=\u0022#top\u0022 class=\u0022back-to-top\u0022\u003EBack to top\u003C\/a\u003E\n\n\u003Ch2 id=\u0022other-third-party-modules-submodules\u0022\u003EOther third party modules \/ submodules\u003C\/h2\u003E\n\u003Cul\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/cookies_module_handler\u0022 rel=\u0022nofollow\u0022\u003ECOOKiES Module Handler\u003C\/a\u003E: covers the handling of Javascript (disable\/enable depending on users consent)\u003C\/li\u003E\n\u003Cli\u003ECOOKiES Filter (Submodule): Covers the handling of 3rd party code snippets pasted to the text editor.\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/etracker\u0022 rel=\u0022nofollow\u0022\u003ECOOKiES Etracker\u003C\/a\u003E (Submodule of etracker):COOKiES compatibility with etracker\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/posthog\u0022 rel=\u0022nofollow\u0022\u003ECOOKiES Posthog\u003C\/a\u003E (Submodule of posthog):COOKiES compatibility with posthog\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=\u0022possible-alternatives\u0022\u003EPossible alternatives\u003C\/h2\u003E\n\u003Cul\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/klaro\u0022 rel=\u0022nofollow\u0022\u003Ehttps:\/\/www.drupal.org\/project\/klaro\u003C\/a\u003E (favourite)\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/eu_cookie_compliance\u0022 rel=\u0022nofollow\u0022\u003Ehttps:\/\/www.drupal.org\/project\/eu_cookie_compliance\u003C\/a\u003E\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/tacjs\u0022 rel=\u0022nofollow\u0022\u003Ehttps:\/\/www.drupal.org\/project\/tacjs\u003C\/a\u003E\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/simple_klaro\u0022 rel=\u0022nofollow\u0022\u003Ehttps:\/\/www.drupal.org\/project\/simple_klaro\u003C\/a\u003E\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/cookieconsent\u0022 rel=\u0022nofollow\u0022\u003Ehttps:\/\/www.drupal.org\/project\/cookieconsent\u003C\/a\u003E\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/cookie_content_blocker\u0022 rel=\u0022nofollow\u0022\u003Ehttps:\/\/www.drupal.org\/project\/cookie_content_blocker\u003C\/a\u003E\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/usercentrics_cmp\u0022 rel=\u0022nofollow\u0022\u003Ehttps:\/\/www.drupal.org\/project\/usercentrics_cmp\u003C\/a\u003E\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/cookiebot\u0022 rel=\u0022nofollow\u0022\u003Ehttps:\/\/www.drupal.org\/project\/cookiebot\u003C\/a\u003E\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/cookiebot_gtm\u0022 rel=\u0022nofollow\u0022\u003Ehttps:\/\/www.drupal.org\/project\/cookiebot_gtm\u003C\/a\u003E\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/cookie_script\u0022 rel=\u0022nofollow\u0022\u003Ehttps:\/\/www.drupal.org\/project\/cookie_script\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:476,\u00221.1.x\u0022:189,\u00221.2.x\u0022:9692,\u00222.0.x\u0022:800}","field_active_installs_total":11157,"field_composer_namespace":"drupal\/cookies","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":"cookies","field_security_advisory_coverage":"covered"},"relationships":{"uid":{"data":{"type":"user--user","id":"a2524084-7d93-463f-af4a-507077045868","meta":{"drupal_internal__target_id":2471686}},"links":{"related":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/0f6a13e0-9a1e-4358-8fff-b0641f8e3b26\/uid?resourceVersion=id%3A20050315"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/0f6a13e0-9a1e-4358-8fff-b0641f8e3b26\/relationships\/uid?resourceVersion=id%3A20050315"}}},"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:\/\/new.drupal.org\/jsonapi\/node\/project_module\/0f6a13e0-9a1e-4358-8fff-b0641f8e3b26\/field_development_status?resourceVersion=id%3A20050315"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/0f6a13e0-9a1e-4358-8fff-b0641f8e3b26\/relationships\/field_development_status?resourceVersion=id%3A20050315"}}},"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:\/\/new.drupal.org\/jsonapi\/node\/project_module\/0f6a13e0-9a1e-4358-8fff-b0641f8e3b26\/field_maintenance_status?resourceVersion=id%3A20050315"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/0f6a13e0-9a1e-4358-8fff-b0641f8e3b26\/relationships\/field_maintenance_status?resourceVersion=id%3A20050315"}}},"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":"754c04cb-6da2-42ba-9032-d64307f68f45","meta":{"drupal_internal__target_id":188}},{"type":"taxonomy_term--module_categories","id":"0cd80c8e-5c20-43a8-aa3e-ec701007d443","meta":{"drupal_internal__target_id":195}}],"links":{"related":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/0f6a13e0-9a1e-4358-8fff-b0641f8e3b26\/field_module_categories?resourceVersion=id%3A20050315"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/0f6a13e0-9a1e-4358-8fff-b0641f8e3b26\/relationships\/field_module_categories?resourceVersion=id%3A20050315"}}},"field_project_images":{"data":[{"type":"file--file","id":"23da7a06-75a1-4ad7-92d3-d6ce014ef22a","meta":{"alt":"Cookies","title":null,"width":1310,"height":428,"drupal_internal__target_id":29815}},{"type":"file--file","id":"0ecd59e5-294c-4e43-b6bc-7478ff7504eb","meta":{"alt":"User Consent Layer","title":null,"width":2526,"height":1386,"drupal_internal__target_id":29819}},{"type":"file--file","id":"db94321e-b46f-4314-9162-af10ef79915d","meta":{"alt":"User Consent Banner","title":null,"width":2528,"height":1354,"drupal_internal__target_id":29820}},{"type":"file--file","id":"74f8a604-637d-44e5-be91-dd386e14efb2","meta":{"alt":"Cookies configuration","title":null,"width":1998,"height":1318,"drupal_internal__target_id":29818}}],"links":{"related":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/0f6a13e0-9a1e-4358-8fff-b0641f8e3b26\/field_project_images?resourceVersion=id%3A20050315"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/0f6a13e0-9a1e-4358-8fff-b0641f8e3b26\/relationships\/field_project_images?resourceVersion=id%3A20050315"}}}}},{"type":"node--project_module","id":"f8cf6c9c-2bfd-42ab-830d-9b04bb049cd2","links":{"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/f8cf6c9c-2bfd-42ab-830d-9b04bb049cd2?resourceVersion=id%3A20012840"},"working-copy":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/f8cf6c9c-2bfd-42ab-830d-9b04bb049cd2?resourceVersion=rel%3Aworking-copy"}},"attributes":{"drupal_internal__nid":1076370,"status":true,"title":"Commerce Shipping","created":"2011-02-28T18:41:18+00:00","changed":"2026-04-07T05:20:02+00:00","moderation_state":null,"body":{"value":"Commerce Shipping provides a shipping rate calculation system for \u003Ca href=\u0022http:\/\/drupal.org\/project\/commerce\u0022\u003EDrupal Commerce\u003C\/a\u003E, integrating shipping service selection into both the checkout form and order edit form. This module is a framework that is meant to be used in conjunction with shipping method modules like \u003Ca href=\u0022http:\/\/drupal.org\/project\/commerce_flat_rate\u0022\u003ECommerce Flat Rate\u003C\/a\u003E, \u003Ca href=\u0022http:\/\/drupal.org\/project\/commerce_ups\u0022\u003ECommerce UPS\u003C\/a\u003E, and others.\r\n\r\nShipping service availability and rate calculation is handled in the user interface through Rules and is backed up by an API that gives you a high level of flexibility to implement simple or complex shipping scenarios.\r\n\r\nDevelopers and users of this module should use the new and improved Commerce Shipping 2.x version. Sites created using Commerce Shipping 1.x can find notes on what has changed and how to update in the \u003Ca href=\u0022http:\/\/drupal.org\/node\/1841266\u0022\u003Erelease notes\u003C\/a\u003E for the Commerce Shipping 2.0 release.\r\n\r\nDevelopment sponsored by \u003Ca href=\u0022http:\/\/revealit.dk\u0022\u003EReveal IT\u003C\/a\u003E and \u003Ca href=\u0022https:\/\/www.centarro.io\u0022\u003ECentarro\u003C\/a\u003E.\r\n\u003C!--break--\u003E\r\n\r\n\u003Ch3\u003EJust getting started?\u003C\/h3\u003E\r\n\r\nWe are still adding to the Commerce Shipping 2.0 \u003Ca href=\u0022http:\/\/www.drupalcommerce.org\/commerce-kickstart-2\/shipping\u0022\u003Euser documentation\u003C\/a\u003E, and there is also a set of screencasts you can watch to learn about the following topics:\r\n\r\n\u003Cul\u003E\r\n\u003Cli\u003E\u003Ca href=\u0022http:\/\/www.commerceguys.com\/resources\/articles\/246\u0022\u003EIntroduction to Commerce Shipping\u003C\/a\u003E\u003C\/li\u003E\r\n\u003Cli\u003E\u003Ca href=\u0022http:\/\/www.commerceguys.com\/resources\/articles\/247\u0022\u003EIntroduction to Commerce UPS\u003C\/a\u003E\u003C\/li\u003E\r\n\u003Cli\u003E\u003Ca href=\u0022http:\/\/www.commerceguys.com\/resources\/articles\/248\u0022\u003EImplementing free shipping based on order total \/ user role\u003C\/a\u003E\u003C\/li\u003E\r\n\u003Cli\u003E\u003Ca href=\u0022http:\/\/www.commerceguys.com\/resources\/articles\/249\u0022\u003EImplementing per-item shipping using rate calculation rules\u003C\/a\u003E\u003C\/li\u003E\r\n\u003Cli\u003E\u003Ca href=\u0022http:\/\/www.commerceguys.com\/resources\/articles\/250\u0022\u003EImplementing a discount based on an item in the cart\u003C\/a\u003E\u003C\/li\u003E\r\n\u003C\/ul\u003E\r\n\r\nIf you can\u0027t find what you need in the documentation or screencasts, consider searching the issue queues or \u003Ca href=\u0022https:\/\/drupal.stackexchange.com\/\u0022\u003EDrupal Answers\u003C\/a\u003E (using the drupal-commerce tag) to see if your question has been dealt with. General Rules inquiries should not be posted to this module\u0027s issue queue. You can always find help on \u003Ca href=\u0022https:\/\/www.drupal.org\/slack\u0022\u003EDrupal Slack\u003C\/a\u003E in the #commerce channel.\r\n\r\n\u003Ch3\u003EShipping method modules\u003C\/h3\u003E\r\n\r\nThese modules have been designed to work with Commerce Shipping 2.x. Some require API credentials to retrieve calculated rates from shipping carriers, like UPS and USPS, while modules like Flat Rate simply let you define shipping services on your site with flat base rates that can be manipulated further through Rules.\r\n\r\n\u003Cul\u003E\r\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/commerce_flat_rate\u0022\u003ECommerce Flat Rate\u003C\/a\u003E\u003C\/li\u003E\r\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/commerce_ups\u0022\u003ECommerce UPS\u003C\/a\u003E\u003C\/li\u003E\r\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/commerce_fedex\u0022\u003ECommerce FedEx\u003C\/a\u003E\u003C\/li\u003E\r\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/commerce_usps\u0022\u003ECommerce USPS\u003C\/a\u003E\u003C\/li\u003E\r\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/node\/1356090\u0022\u003ECommerce Canada Post\u003C\/a\u003E\u003C\/li\u003E\r\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/commerce_connectship\u0022\u003ECommerce ConnectShip\u003C\/a\u003E\u003C\/li\u003E\r\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/commerce_kiala\u0022\u003ECommerce Kiala\u003C\/a\u003E\u003C\/li\u003E\r\n\u003C\/ul\u003E\r\n\r\nIf you know of a shipping method module that isn\u0027t listed here, please let us know in an issue.\r\n\r\nAdditional shipping related contributed modules include:\r\n\r\n\u003Cul\u003E\r\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/commerce_cp\u0022\u003ECommerce Cart Pane\u003C\/a\u003E (embed the shipping pane on the shopping cart page)\u003C\/li\u003E\r\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/commerce_cart_estimate\u0022\u003ECommerce Cart Estimate\u003C\/a\u003E (estimate shipping and taxes on the cart page)\u003C\/li\u003E\r\n\u003C\/ul\u003E\r\n\r\n\u003Ch3\u003EDeveloper documentation\u003C\/h3\u003E\r\n\r\nDocumentation for developers can be found in the example module included in the project. It demonstrates how to define a shipping method and how to collect additional information from the user on the checkout form. If you use it as a starting point for your shipping method module, you should copy it to a new folder and rename it so you can continue to update Commerce Shipping 2.x as new releases are created.\r\n\r\nThe API documentation is currently inline and in commerce_shipping.api.php. We\u0027ll be providing a full developer overview as soon as possible.","format":"1","processed":"\u003Cdiv class=\u0022toc-filter\u0022\u003E\u003Cp\u003ECommerce Shipping provides a shipping rate calculation system for \u003Ca href=\u0022http:\/\/drupal.org\/project\/commerce\u0022 rel=\u0022nofollow\u0022\u003EDrupal Commerce\u003C\/a\u003E, integrating shipping service selection into both the checkout form and order edit form. This module is a framework that is meant to be used in conjunction with shipping method modules like \u003Ca href=\u0022http:\/\/drupal.org\/project\/commerce_flat_rate\u0022 rel=\u0022nofollow\u0022\u003ECommerce Flat Rate\u003C\/a\u003E, \u003Ca href=\u0022http:\/\/drupal.org\/project\/commerce_ups\u0022 rel=\u0022nofollow\u0022\u003ECommerce UPS\u003C\/a\u003E, and others.\u003C\/p\u003E\n\u003Cp\u003EShipping service availability and rate calculation is handled in the user interface through Rules and is backed up by an API that gives you a high level of flexibility to implement simple or complex shipping scenarios.\u003C\/p\u003E\n\u003Cp\u003EDevelopers and users of this module should use the new and improved Commerce Shipping 2.x version. Sites created using Commerce Shipping 1.x can find notes on what has changed and how to update in the \u003Ca href=\u0022http:\/\/drupal.org\/node\/1841266\u0022 rel=\u0022nofollow\u0022\u003Erelease notes\u003C\/a\u003E for the Commerce Shipping 2.0 release.\u003C\/p\u003E\n\u003Cp\u003EDevelopment sponsored by \u003Ca href=\u0022http:\/\/revealit.dk\u0022 rel=\u0022nofollow\u0022\u003EReveal IT\u003C\/a\u003E and \u003Ca href=\u0022https:\/\/www.centarro.io\u0022 rel=\u0022nofollow\u0022\u003ECentarro\u003C\/a\u003E.\u003C\/p\u003E\n\u003Ch3 id=\u0022just-getting-started\u0022\u003EJust getting started?\u003C\/h3\u003E\n\u003Cp\u003EWe are still adding to the Commerce Shipping 2.0 \u003Ca href=\u0022http:\/\/www.drupalcommerce.org\/commerce-kickstart-2\/shipping\u0022 rel=\u0022nofollow\u0022\u003Euser documentation\u003C\/a\u003E, and there is also a set of screencasts you can watch to learn about the following topics:\u003C\/p\u003E\n\u003Cul\u003E\n\u003Cli\u003E\u003Ca href=\u0022http:\/\/www.commerceguys.com\/resources\/articles\/246\u0022 rel=\u0022nofollow\u0022\u003EIntroduction to Commerce Shipping\u003C\/a\u003E\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022http:\/\/www.commerceguys.com\/resources\/articles\/247\u0022 rel=\u0022nofollow\u0022\u003EIntroduction to Commerce UPS\u003C\/a\u003E\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022http:\/\/www.commerceguys.com\/resources\/articles\/248\u0022 rel=\u0022nofollow\u0022\u003EImplementing free shipping based on order total \/ user role\u003C\/a\u003E\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022http:\/\/www.commerceguys.com\/resources\/articles\/249\u0022 rel=\u0022nofollow\u0022\u003EImplementing per-item shipping using rate calculation rules\u003C\/a\u003E\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022http:\/\/www.commerceguys.com\/resources\/articles\/250\u0022 rel=\u0022nofollow\u0022\u003EImplementing a discount based on an item in the cart\u003C\/a\u003E\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Cp\u003EIf you can\u0027t find what you need in the documentation or screencasts, consider searching the issue queues or \u003Ca href=\u0022https:\/\/drupal.stackexchange.com\/\u0022 rel=\u0022nofollow\u0022\u003EDrupal Answers\u003C\/a\u003E (using the drupal-commerce tag) to see if your question has been dealt with. General Rules inquiries should not be posted to this module\u0027s issue queue. You can always find help on \u003Ca href=\u0022https:\/\/www.drupal.org\/slack\u0022 rel=\u0022nofollow\u0022\u003EDrupal Slack\u003C\/a\u003E in the #commerce channel.\u003C\/p\u003E\n\u003Ch3 id=\u0022shipping-method-modules\u0022\u003EShipping method modules\u003C\/h3\u003E\n\u003Cp\u003EThese modules have been designed to work with Commerce Shipping 2.x. Some require API credentials to retrieve calculated rates from shipping carriers, like UPS and USPS, while modules like Flat Rate simply let you define shipping services on your site with flat base rates that can be manipulated further through Rules.\u003C\/p\u003E\n\u003Cul\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/commerce_flat_rate\u0022 rel=\u0022nofollow\u0022\u003ECommerce Flat Rate\u003C\/a\u003E\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/commerce_ups\u0022 rel=\u0022nofollow\u0022\u003ECommerce UPS\u003C\/a\u003E\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/commerce_fedex\u0022 rel=\u0022nofollow\u0022\u003ECommerce FedEx\u003C\/a\u003E\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/commerce_usps\u0022 rel=\u0022nofollow\u0022\u003ECommerce USPS\u003C\/a\u003E\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/node\/1356090\u0022 rel=\u0022nofollow\u0022\u003ECommerce Canada Post\u003C\/a\u003E\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/commerce_connectship\u0022 rel=\u0022nofollow\u0022\u003ECommerce ConnectShip\u003C\/a\u003E\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/commerce_kiala\u0022 rel=\u0022nofollow\u0022\u003ECommerce Kiala\u003C\/a\u003E\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Cp\u003EIf you know of a shipping method module that isn\u0027t listed here, please let us know in an issue.\u003C\/p\u003E\n\u003Cp\u003EAdditional shipping related contributed modules include:\u003C\/p\u003E\n\u003Cul\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/commerce_cp\u0022 rel=\u0022nofollow\u0022\u003ECommerce Cart Pane\u003C\/a\u003E (embed the shipping pane on the shopping cart page)\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/commerce_cart_estimate\u0022 rel=\u0022nofollow\u0022\u003ECommerce Cart Estimate\u003C\/a\u003E (estimate shipping and taxes on the cart page)\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Ch3 id=\u0022developer-documentation\u0022\u003EDeveloper documentation\u003C\/h3\u003E\n\u003Cp\u003EDocumentation for developers can be found in the example module included in the project. It demonstrates how to define a shipping method and how to collect additional information from the user on the checkout form. If you use it as a starting point for your shipping method module, you should copy it to a new folder and rename it so you can continue to update Commerce Shipping 2.x as new releases are created.\u003C\/p\u003E\n\u003Cp\u003EThe API documentation is currently inline and in commerce_shipping.api.php. We\u0027ll be providing a full developer overview as soon as possible.\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:10095,\u00223.x\u0022:6,\u00223.0.x\u0022:611}","field_active_installs_total":10712,"field_composer_namespace":"drupal\/commerce_shipping","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":"commerce_shipping","field_security_advisory_coverage":"covered"},"relationships":{"uid":{"data":{"type":"user--user","id":"a24fa9e6-3d3e-4fd8-ac93-777183ecb2ca","meta":{"drupal_internal__target_id":386230}},"links":{"related":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/f8cf6c9c-2bfd-42ab-830d-9b04bb049cd2\/uid?resourceVersion=id%3A20012840"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/f8cf6c9c-2bfd-42ab-830d-9b04bb049cd2\/relationships\/uid?resourceVersion=id%3A20012840"}}},"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:\/\/new.drupal.org\/jsonapi\/node\/project_module\/f8cf6c9c-2bfd-42ab-830d-9b04bb049cd2\/field_development_status?resourceVersion=id%3A20012840"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/f8cf6c9c-2bfd-42ab-830d-9b04bb049cd2\/relationships\/field_development_status?resourceVersion=id%3A20012840"}}},"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:\/\/new.drupal.org\/jsonapi\/node\/project_module\/f8cf6c9c-2bfd-42ab-830d-9b04bb049cd2\/field_maintenance_status?resourceVersion=id%3A20012840"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/f8cf6c9c-2bfd-42ab-830d-9b04bb049cd2\/relationships\/field_maintenance_status?resourceVersion=id%3A20012840"}}},"field_module_categories":{"data":[{"type":"taxonomy_term--module_categories","id":"0cd80c8e-5c20-43a8-aa3e-ec701007d443","meta":{"drupal_internal__target_id":195}}],"links":{"related":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/f8cf6c9c-2bfd-42ab-830d-9b04bb049cd2\/field_module_categories?resourceVersion=id%3A20012840"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/f8cf6c9c-2bfd-42ab-830d-9b04bb049cd2\/relationships\/field_module_categories?resourceVersion=id%3A20012840"}}},"field_project_images":{"data":[],"links":{"related":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/f8cf6c9c-2bfd-42ab-830d-9b04bb049cd2\/field_project_images?resourceVersion=id%3A20012840"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/f8cf6c9c-2bfd-42ab-830d-9b04bb049cd2\/relationships\/field_project_images?resourceVersion=id%3A20012840"}}}}},{"type":"node--project_module","id":"6eeac486-e095-4704-bd36-06a48c72a965","links":{"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/6eeac486-e095-4704-bd36-06a48c72a965?resourceVersion=id%3A20054552"},"working-copy":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/6eeac486-e095-4704-bd36-06a48c72a965?resourceVersion=rel%3Aworking-copy"}},"attributes":{"drupal_internal__nid":3326993,"status":true,"title":"Tour","created":"2022-12-13T23:19:03+00:00","changed":"2026-04-07T05:20:02+00:00","moderation_state":null,"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\u003EExtension modules\u003C\/h2\u003E\r\n\r\n\u003Cul\u003E\r\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/tour_extras\u0022\u003ETour Extras\u003C\/a\u003E\u003C\/li\u003E\r\n\u003C\/ul\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","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=\u0022extension-modules\u0022\u003EExtension modules\u003C\/h2\u003E\n\u003Cul\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/tour_extras\u0022 rel=\u0022nofollow\u0022\u003ETour Extras\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=\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\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:254,\u00222.0.x\u0022:9419}","field_active_installs_total":9673,"field_composer_namespace":"drupal\/tour","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:\/\/new.drupal.org\/jsonapi\/node\/project_module\/6eeac486-e095-4704-bd36-06a48c72a965\/uid?resourceVersion=id%3A20054552"},"self":{"href":"https:\/\/new.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:\/\/new.drupal.org\/jsonapi\/node\/project_module\/6eeac486-e095-4704-bd36-06a48c72a965\/field_development_status?resourceVersion=id%3A20054552"},"self":{"href":"https:\/\/new.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:\/\/new.drupal.org\/jsonapi\/node\/project_module\/6eeac486-e095-4704-bd36-06a48c72a965\/field_maintenance_status?resourceVersion=id%3A20054552"},"self":{"href":"https:\/\/new.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:\/\/new.drupal.org\/jsonapi\/node\/project_module\/6eeac486-e095-4704-bd36-06a48c72a965\/field_module_categories?resourceVersion=id%3A20054552"},"self":{"href":"https:\/\/new.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:\/\/new.drupal.org\/jsonapi\/node\/project_module\/6eeac486-e095-4704-bd36-06a48c72a965\/field_project_images?resourceVersion=id%3A20054552"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/6eeac486-e095-4704-bd36-06a48c72a965\/relationships\/field_project_images?resourceVersion=id%3A20054552"}}}}},{"type":"node--project_module","id":"97912cca-e75b-49ed-8139-1aec45643edc","links":{"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/97912cca-e75b-49ed-8139-1aec45643edc?resourceVersion=id%3A20048795"},"working-copy":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/97912cca-e75b-49ed-8139-1aec45643edc?resourceVersion=rel%3Aworking-copy"}},"attributes":{"drupal_internal__nid":3085845,"status":true,"title":"Sitewide Alert","created":"2019-10-04T14:09:24+00:00","changed":"2026-04-07T05:20:02+00:00","moderation_state":null,"body":{"value":"\u003Cp\u003EThe Sitewide Alert module adds the ability to show alerts at the top of your site.\u003C\/p\u003E\r\n\u003Cp\u003EThis module can be used for showing alerts to your visitors to inform them of planned maintenance periods, emergency\/weather information, shipping delays, flash sales, and more. How you use it is up to you.\u003C\/p\u003E\r\n  \u003Ch2\u003EFeatures\u003C\/h2\u003E\r\n  \u003Cul\u003E\r\n      \u003Cli\u003E\u003Cstrong\u003ECache-friendly by design. Adding or updating alerts does not invalidate the full page cache for all pages on the site.\u003C\/strong\u003E\r\n          \u003Cul\u003E\u003Cli\u003E(Experimental) Server-side rendering available to reduce layout shift. See the README for caching considerations.\u003C\/li\u003E\u003C\/ul\u003E\u003C\/li\u003E\r\n      \u003Cli\u003ERenders at the top of every page, no block configuration needed.\r\n          \u003Cul\u003E\u003Cli\u003EOptional sub-module for block placement.\u003C\/li\u003E\u003C\/ul\u003E\u003C\/li\u003E\r\n      \u003Cli\u003EMultiple alerts with configurable styles (e.g., red for urgent, white for subtle).\u003C\/li\u003E\r\n      \u003Cli\u003EVisitor-dismissible, with editor option to reset dismissals.\u003C\/li\u003E\r\n      \u003Cli\u003EPage visibility controls and scheduled start\/end times.\u003C\/li\u003E\r\n      \u003Cli\u003ELive updates -- new alerts appear without a page reload.\u003C\/li\u003E\r\n      \u003Cli\u003EFieldable, themeable, and works with \u003Ca href=\u0022https:\/\/www.drupal.org\/project\/domain\u0022\u003EDomain\u003C\/a\u003E.\u003C\/li\u003E\r\n  \u003C\/ul\u003E\r\n\u003Ch2\u003EGetting started\u003C\/h2\u003E\r\n\u003Ch3\u003EInstallation\u003C\/h3\u003E\r\n\u003Cp\u003EInstall the Sitewide Alert module with \u003Ca href=\u0022https:\/\/www.drupal.org\/docs\/develop\/using-composer\/manage-dependencies\u0022 title=\u0022Using composer to manage dependencies\u0022\u003EComposer\u003C\/a\u003E.\u003C\/p\u003E\r\n\u003Cp\u003E\u003Ccode\u003E$ composer require \u0027drupal\/sitewide_alert:^3.1\u0027\u003C\/code\u003E\u003C\/p\u003E\r\n\u003Ch3\u003EConfiguration\u003C\/h3\u003E\r\n\u003Cp\u003EOnce installed, Sitewide Alert is ready to use. However, some customization is likely necessary.\u003C\/p\u003E\r\n\u003Cp\u003EUpon installation, there is only one Alert Style (Default). This can be extended by navigating to \/admin\/config\/sitewide_alerts and defining new Alert Style types. Define each key|value pair on its own line.\u003C\/p\u003E\r\n\u003Cp\u003ETo show Sitewide Alerts on administrative pages, navigate to \/admin\/config\/sitewide_alerts and select the \u0022Show on Administrative Pages\u0022 checkbox.\u003C\/p\u003E\r\n\u003Ch3\u003ECreating a Sitewide Alert\u003C\/h3\u003E\r\n\u003Cp\u003ENavigate to \/admin\/content\/sitewide_alert and click the \u0022Add New Sitewide Alert\u0022 button and complete the following fields:\u003C\/p\u003E\r\n\u003Cul\u003E\r\n    \u003Cli\u003EName\u003Cul\u003E\r\n        \u003Cli\u003EGive your alert an administrative name.\u003C\/li\u003E\u003C\/ul\u003E\u003C\/li\u003E\r\n    \u003Cli\u003EAlert Style\u003Cul\u003E\r\n        \u003Cli\u003ESelect a style for your alert.\u003C\/li\u003E\u003C\/ul\u003E\u003C\/li\u003E\r\n    \u003Cli\u003EAlert Message\u003Cul\u003E\r\n        \u003Cli\u003ECompose your alert message. Full WYSIWYG support available.\u003C\/li\u003E\u003C\/ul\u003E\u003C\/li\u003E\r\n    \u003Cli\u003EDismissible\u003Cul\u003E\r\n        \u003Cli\u003ESelect this checkbox if the alert should be dismissable by visitors.\u003C\/li\u003E\u003C\/ul\u003E\u003C\/li\u003E\r\n    \u003Cli\u003ESchedule Alert\u003Cul\u003E\r\n        \u003Cli\u003ESelect this checkbox if the alert should only appear during a specific time period.\u003C\/li\u003E\u003C\/ul\u003E\u003C\/li\u003E\r\n    \u003Cli\u003EPAGE VISIBILITY - Limit by Page\u003Cul\u003E\r\n        \u003Cli\u003ESelect this checkbox if alert should only appear on specific pages. Use the \u0022Pages\u0022 input field to specify pages by using their paths.\u003C\/li\u003E\u003C\/ul\u003E\u003C\/li\u003E\r\n    \u003Cli\u003EAny additional fields\u003Cul\u003E\r\n        \u003Cli\u003EAdditional fields can be added to alerts by site builders with sufficient permissions.\u003C\/li\u003E\u003C\/ul\u003E\u003C\/li\u003E\r\n\u003C\/ul\u003E\r\n\u003Ch2 id=\u0022styling\u0022\u003ETheming\/Styling Sidewide Alerts\u003C\/h2\u003E\r\n\r\n\u003Ch3\u003EUsing CSS classes\u003C\/h3\u003E\r\n\u003Cp\u003ESitewide Alerts receive a wrapping class that can be used to apply specific styles. For each entry added to the Alert Style field, a corresponding HTML class is added to the element\u0027s wrapper. The class is created by concatenating \u0022alert-\u0022 with each key defined under Alert Style. Use these classes to apply different styles to each type of alert needed.\u003C\/p\u003E\r\n\r\n\u003Ch3\u003EUsing twig templates\u003C\/h3\u003E\r\n\u003Cp\u003EAlerts can themed by overriding the \u003Ccode\u003Esitewide-alert.html.twig\u003C\/code\u003E twig templates. Template suggestions also exist for each\r\n    of the Alert Style types and if the alert is or is not dismissible.\u003C\/p\u003E\r\n\r\n\u003Ch4\u003ETemplate suggestions\u003C\/h4\u003E\r\n\u003Cul\u003E\r\n    \u003Cli\u003E\u003Ccode\u003Esitewide-alert.html.twig\u003C\/code\u003E\u003C\/li\u003E\r\n    \u003Cli\u003E\u003Ccode\u003Esitewide-alert--STYLETYPE.html.twig\u003C\/code\u003E\u003C\/li\u003E\r\n    \u003Cli\u003E\u003Ccode\u003Esitewide-alert--dismissible.html.twig\u003C\/code\u003E\u003C\/li\u003E\r\n    \u003Cli\u003E\u003Ccode\u003Esitewide-alert--notdismissible.html.twig\u003C\/code\u003E\u003C\/li\u003E\r\n    \u003Cli\u003E\u003Ccode\u003Esitewide-alert--STYLETYPE--dismissible.html.twig\u003C\/code\u003E\u003C\/li\u003E\r\n    \u003Cli\u003E\u003Ccode\u003Esitewide-alert--STYLETYPE--notdismissible.html.twig\u003C\/code\u003E\u003C\/li\u003E\r\n\u003C\/ul\u003E\r\n\r\n\u003Ch2 id=\u0022troubleshooting\u0022\u003ETroubleshooting\u003C\/h2\u003E\r\n\u003Ch3\u003EScheduled alerts not showing\/disappearing when they should.\u003C\/h3\u003E\r\n\u003Cul\u003E\r\n    \u003Cli\u003EMake sure the scheduled sitewide alert is marked as \u0022Active\u0022. Scheduled alerts still need to be set as active to be shown.\u003C\/li\u003E\r\n    \u003Cli\u003EIf using the \u003Ca href=\u0022https:\/\/www.drupal.org\/project\/redis\u0022\u003ERedis caching module\u003C\/a\u003E, you may need to apply \u003Ca href=\u0022https:\/\/www.drupal.org\/project\/redis\/issues\/2877893#comment-12082921\u0022 target=\u0022_blank\u0022\u003Ethis patch\u003C\/a\u003E to allow Drupal\u0027s Page Cache to actually expire when it should.\u003C\/li\u003E\r\n\u003C\/ul\u003E\r\n\r\n\u003Ch2\u003ESimilar modules\u003C\/h2\u003E\r\n\u003Cul\u003E\r\n    \u003Cli\u003E\u003Ca href=\u0022\/project\/site_alert\u0022\u003ESite Alert\u003C\/a\u003E\u003C\/li\u003E\r\n\u003C\/ul\u003E","format":"1","processed":"\u003Cdiv class=\u0022toc-filter\u0022\u003E\u003Cp\u003EThe Sitewide Alert module adds the ability to show alerts at the top of your site.\u003C\/p\u003E\n\u003Cp\u003EThis module can be used for showing alerts to your visitors to inform them of planned maintenance periods, emergency\/weather information, shipping delays, flash sales, and more. How you use it is up to you.\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\u003Cul\u003E\n\u003Cli\u003E\u003Cstrong\u003ECache-friendly by design. Adding or updating alerts does not invalidate the full page cache for all pages on the site.\u003C\/strong\u003E\n\u003Cul\u003E\n\u003Cli\u003E(Experimental) Server-side rendering available to reduce layout shift. See the README for caching considerations.\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003C\/li\u003E\n\u003Cli\u003ERenders at the top of every page, no block configuration needed.\n\u003Cul\u003E\n\u003Cli\u003EOptional sub-module for block placement.\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003C\/li\u003E\n\u003Cli\u003EMultiple alerts with configurable styles (e.g., red for urgent, white for subtle).\u003C\/li\u003E\n\u003Cli\u003EVisitor-dismissible, with editor option to reset dismissals.\u003C\/li\u003E\n\u003Cli\u003EPage visibility controls and scheduled start\/end times.\u003C\/li\u003E\n\u003Cli\u003ELive updates -- new alerts appear without a page reload.\u003C\/li\u003E\n\u003Cli\u003EFieldable, themeable, and works with \u003Ca href=\u0022https:\/\/www.drupal.org\/project\/domain\u0022 rel=\u0022nofollow\u0022\u003EDomain\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=\u0022getting-started\u0022\u003EGetting started\u003C\/h2\u003E\n\u003Ch3 id=\u0022installation\u0022\u003EInstallation\u003C\/h3\u003E\n\u003Cp\u003EInstall the Sitewide Alert module with \u003Ca href=\u0022https:\/\/www.drupal.org\/docs\/develop\/using-composer\/manage-dependencies\u0022 rel=\u0022nofollow\u0022\u003EComposer\u003C\/a\u003E.\u003C\/p\u003E\n\u003Cp\u003E\u003Ccode\u003E$ composer require \u0027drupal\/sitewide_alert:^3.1\u0027\u003C\/code\u003E\u003C\/p\u003E\n\u003Ch3 id=\u0022configuration\u0022\u003EConfiguration\u003C\/h3\u003E\n\u003Cp\u003EOnce installed, Sitewide Alert is ready to use. However, some customization is likely necessary.\u003C\/p\u003E\n\u003Cp\u003EUpon installation, there is only one Alert Style (Default). This can be extended by navigating to \/admin\/config\/sitewide_alerts and defining new Alert Style types. Define each key|value pair on its own line.\u003C\/p\u003E\n\u003Cp\u003ETo show Sitewide Alerts on administrative pages, navigate to \/admin\/config\/sitewide_alerts and select the \u0022Show on Administrative Pages\u0022 checkbox.\u003C\/p\u003E\n\u003Ch3 id=\u0022creating-a-sitewide-alert\u0022\u003ECreating a Sitewide Alert\u003C\/h3\u003E\n\u003Cp\u003ENavigate to \/admin\/content\/sitewide_alert and click the \u0022Add New Sitewide Alert\u0022 button and complete the following fields:\u003C\/p\u003E\n\u003Cul\u003E\n\u003Cli\u003EName\n\u003Cul\u003E\n\u003Cli\u003EGive your alert an administrative name.\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003C\/li\u003E\n\u003Cli\u003EAlert Style\n\u003Cul\u003E\n\u003Cli\u003ESelect a style for your alert.\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003C\/li\u003E\n\u003Cli\u003EAlert Message\n\u003Cul\u003E\n\u003Cli\u003ECompose your alert message. Full WYSIWYG support available.\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003C\/li\u003E\n\u003Cli\u003EDismissible\n\u003Cul\u003E\n\u003Cli\u003ESelect this checkbox if the alert should be dismissable by visitors.\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003C\/li\u003E\n\u003Cli\u003ESchedule Alert\n\u003Cul\u003E\n\u003Cli\u003ESelect this checkbox if the alert should only appear during a specific time period.\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003C\/li\u003E\n\u003Cli\u003EPAGE VISIBILITY - Limit by Page\n\u003Cul\u003E\n\u003Cli\u003ESelect this checkbox if alert should only appear on specific pages. Use the \u0022Pages\u0022 input field to specify pages by using their paths.\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003C\/li\u003E\n\u003Cli\u003EAny additional fields\n\u003Cul\u003E\n\u003Cli\u003EAdditional fields can be added to alerts by site builders with sufficient permissions.\u003C\/li\u003E\n\u003C\/ul\u003E\n\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=\u0022styling-01\u0022\u003ETheming\/Styling Sidewide Alerts\u003C\/h2\u003E\n\u003Ch3 id=\u0022using-css-classes\u0022\u003EUsing CSS classes\u003C\/h3\u003E\n\u003Cp\u003ESitewide Alerts receive a wrapping class that can be used to apply specific styles. For each entry added to the Alert Style field, a corresponding HTML class is added to the element\u0027s wrapper. The class is created by concatenating \u0022alert-\u0022 with each key defined under Alert Style. Use these classes to apply different styles to each type of alert needed.\u003C\/p\u003E\n\u003Ch3 id=\u0022using-twig-templates\u0022\u003EUsing twig templates\u003C\/h3\u003E\n\u003Cp\u003EAlerts can themed by overriding the \u003Ccode\u003Esitewide-alert.html.twig\u003C\/code\u003E twig templates. Template suggestions also exist for each\u003Cbr\u003E\n    of the Alert Style types and if the alert is or is not dismissible.\u003C\/p\u003E\n\u003Ch4 id=\u0022template-suggestions\u0022\u003ETemplate suggestions\u003C\/h4\u003E\n\u003Cul\u003E\n\u003Cli\u003E\u003Ccode\u003Esitewide-alert.html.twig\u003C\/code\u003E\u003C\/li\u003E\n\u003Cli\u003E\u003Ccode\u003Esitewide-alert--STYLETYPE.html.twig\u003C\/code\u003E\u003C\/li\u003E\n\u003Cli\u003E\u003Ccode\u003Esitewide-alert--dismissible.html.twig\u003C\/code\u003E\u003C\/li\u003E\n\u003Cli\u003E\u003Ccode\u003Esitewide-alert--notdismissible.html.twig\u003C\/code\u003E\u003C\/li\u003E\n\u003Cli\u003E\u003Ccode\u003Esitewide-alert--STYLETYPE--dismissible.html.twig\u003C\/code\u003E\u003C\/li\u003E\n\u003Cli\u003E\u003Ccode\u003Esitewide-alert--STYLETYPE--notdismissible.html.twig\u003C\/code\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=\u0022troubleshooting-01\u0022\u003ETroubleshooting\u003C\/h2\u003E\n\u003Ch3 id=\u0022scheduled-alerts-not-showing-disappearing-when-they-should\u0022\u003EScheduled alerts not showing\/disappearing when they should.\u003C\/h3\u003E\n\u003Cul\u003E\n\u003Cli\u003EMake sure the scheduled sitewide alert is marked as \u0022Active\u0022. Scheduled alerts still need to be set as active to be shown.\u003C\/li\u003E\n\u003Cli\u003EIf using the \u003Ca href=\u0022https:\/\/www.drupal.org\/project\/redis\u0022 rel=\u0022nofollow\u0022\u003ERedis caching module\u003C\/a\u003E, you may need to apply \u003Ca href=\u0022https:\/\/www.drupal.org\/project\/redis\/issues\/2877893#comment-12082921\u0022 rel=\u0022nofollow\u0022\u003Ethis patch\u003C\/a\u003E to allow Drupal\u0027s Page Cache to actually expire when it should.\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=\u0022similar-modules\u0022\u003ESimilar modules\u003C\/h2\u003E\n\u003Cul\u003E\n\u003Cli\u003E\u003Ca href=\u0022\/project\/site_alert\u0022 rel=\u0022nofollow\u0022\u003ESite Alert\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":"{\u00228.x-1.x\u0022:84,\u00222.0.x\u0022:36,\u00222.1.x\u0022:48,\u00222.2.x\u0022:1920,\u00223.0.x\u0022:2916,\u00223.1.x\u0022:2136}","field_active_installs_total":7140,"field_composer_namespace":"drupal\/sitewide_alert","field_core_semver_maximum":12000000,"field_core_semver_minimum":8000000,"field_issue_summary_template":null,"field_logo_url":{"uri":"https:\/\/git.drupalcode.org\/project\/sitewide_alert\/-\/avatar","title":null,"options":[]},"field_project_has_releases":true,"field_project_machine_name":"sitewide_alert","field_security_advisory_coverage":"covered"},"relationships":{"uid":{"data":{"type":"user--user","id":"ddcffd2b-2a0a-466b-95f8-477931743a72","meta":{"drupal_internal__target_id":1988434}},"links":{"related":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/97912cca-e75b-49ed-8139-1aec45643edc\/uid?resourceVersion=id%3A20048795"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/97912cca-e75b-49ed-8139-1aec45643edc\/relationships\/uid?resourceVersion=id%3A20048795"}}},"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:\/\/new.drupal.org\/jsonapi\/node\/project_module\/97912cca-e75b-49ed-8139-1aec45643edc\/field_development_status?resourceVersion=id%3A20048795"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/97912cca-e75b-49ed-8139-1aec45643edc\/relationships\/field_development_status?resourceVersion=id%3A20048795"}}},"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:\/\/new.drupal.org\/jsonapi\/node\/project_module\/97912cca-e75b-49ed-8139-1aec45643edc\/field_maintenance_status?resourceVersion=id%3A20048795"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/97912cca-e75b-49ed-8139-1aec45643edc\/relationships\/field_maintenance_status?resourceVersion=id%3A20048795"}}},"field_module_categories":{"data":[{"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}},{"type":"taxonomy_term--module_categories","id":"0cd80c8e-5c20-43a8-aa3e-ec701007d443","meta":{"drupal_internal__target_id":195}}],"links":{"related":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/97912cca-e75b-49ed-8139-1aec45643edc\/field_module_categories?resourceVersion=id%3A20048795"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/97912cca-e75b-49ed-8139-1aec45643edc\/relationships\/field_module_categories?resourceVersion=id%3A20048795"}}},"field_project_images":{"data":[{"type":"file--file","id":"3d440455-66d9-4a82-98a7-8a6f6ec7d789","meta":{"alt":"Sitewide Alert Module administration add alert page","title":null,"width":1086,"height":1291,"drupal_internal__target_id":1456950}},{"type":"file--file","id":"8a8c69b7-9ec5-4cf4-9105-e7e1741dc97f","meta":{"alt":"Sitewide Alert module styled screenshot","title":null,"width":847,"height":95,"drupal_internal__target_id":28948}},{"type":"file--file","id":"856f3e3d-964d-454e-b781-9992f3c38c53","meta":{"alt":"Sitewide Alert module screenshot of an un-styled example alert ","title":null,"width":667,"height":203,"drupal_internal__target_id":27835}}],"links":{"related":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/97912cca-e75b-49ed-8139-1aec45643edc\/field_project_images?resourceVersion=id%3A20048795"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/97912cca-e75b-49ed-8139-1aec45643edc\/relationships\/field_project_images?resourceVersion=id%3A20048795"}}}}},{"type":"node--project_module","id":"f58e3714-2506-43c5-b3ca-6b10617d6098","links":{"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/f58e3714-2506-43c5-b3ca-6b10617d6098?resourceVersion=id%3A20011676"},"working-copy":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/f58e3714-2506-43c5-b3ca-6b10617d6098?resourceVersion=rel%3Aworking-copy"}},"attributes":{"drupal_internal__nid":906998,"status":true,"title":"Commerce PayPal","created":"2010-09-09T21:04:36+00:00","changed":"2026-04-07T05:20:02+00:00","moderation_state":null,"body":{"value":"\u003Ch2\u003ETransform Your Payment Experience with Seamless PayPal Integration\u003Ch2\u003E\r\n\r\nUnlock the full potential of your online store by integrating \u003Ca href=\u0022https:\/\/www.drupal.org\/project\/commerce\u0022\u003EDrupal Commerce\u003C\/a\u003E with a suite of \u003Cstrong\u003EPayPal payment solutions\u003C\/strong\u003E. \r\n\r\nOur primary integration method, \u003Cstrong\u003EPayPal Checkout\u003C\/strong\u003E (PayPal Complete Payments), offers your customers a variety of payment options, including:\r\n\u003Cul\u003E\r\n  \u003Cli\u003EPayPal accounts\u003C\/li\u003E\r\n  \u003Cli\u003EVenmo\u003C\/li\u003E\r\n  \u003Cli\u003EPay Later\u003C\/li\u003E\r\n  \u003Cli\u003Edebit or credit cards\u003C\/li\u003E\r\n\u003C\/ul\u003E\r\n\r\nThis flexibility not only enhances the shopping experience but also increases your conversion rates.\r\n\r\nElevate your e-commerce platform today with our powerful PayPal integration, including the new \u003Cstrong\u003EFastlane by PayPal\u003C\/strong\u003E!\r\n\r\n\u003Cdiv class=\u0022note-version\u0022\u003E\r\n\u003Ch4\u003EEmpower Your Customers with Pay Later\u003C\/h4\u003E\r\n\r\nWith \u003Cstrong\u003EPay Later\u003C\/strong\u003E\u2014formerly known as PayPal Credit\u2014merchants can provide financing options directly to customers. This feature can be prominently advertised on your \u003Cstrong\u003EAdd to Cart\u003C\/strong\u003E forms or through a custom block defined by our module. Imagine the impact of offering your customers the ability to finance their purchases right at the point of sale! For more details on how this works, check out the \u003Ca href=\u0022https:\/\/developer.paypal.com\/docs\/checkout\/pay-later\/us\/commerce-platforms\/centarro\/\u0022\u003EPayPal documentation\u003C\/a\u003E.\r\n\u003C\/div\u003E\r\n\u003Cdiv class=\u0022note-version\u0022\u003E\r\n\u003Ch4\u003EIntroducing Fastlane by PayPal\u003C\/h4\u003E\r\n\r\n\r\n\r\nWe are excited to announce the integration of \u003Cstrong\u003EFastlane by PayPal\u003C\/strong\u003E, a revolutionary solution designed to streamline the checkout process for your customers. Fastlane allows users to complete their purchases in just a few clicks, significantly reducing cart abandonment rates. With its intuitive interface, customers can quickly select their preferred payment method, whether it\u0027s through PayPal, credit cards, or other options, all while enjoying a seamless experience.\r\n\r\nFastlane\u0027s features include:\r\n\r\n\u003Cul\u003E\r\n  \u003Cli\u003E\u003Cstrong\u003EOne-Click Checkout\u003C\/strong\u003E: Customers can save their payment information for future purchases, making repeat transactions faster and easier.\u003C\/li\u003E\r\n  \u003Cli\u003E\u003Cstrong\u003EMobile Optimization\u003C\/strong\u003E: Fastlane is designed to work flawlessly on mobile devices, ensuring that your customers have a smooth shopping experience, no matter where they are.\u003C\/li\u003E\r\n  \u003Cli\u003E\u003Cstrong\u003EEnhanced Security\u003C\/strong\u003E: With advanced fraud protection and secure payment processing, Fastlane ensures that both you and your customers can shop with confidence.\u003C\/li\u003E\r\n\u003C\/ul\u003E\r\n\r\n\u003Ca href=\u0022https:\/\/docs.drupalcommerce.org\/v2\/user-guide\/payment\/integrations\/fastlane-by-paypal\/fastlane-by-paypal\/\u0022\u003EIntegrating Fastlane\u003C\/a\u003E into your Drupal Commerce setup is straightforward, and it can lead to increased customer satisfaction and loyalty. \r\n\u003C\/div\u003E\r\n\r\n\u003Cdiv class=\u0022note-tip\u0022\u003E\r\n\u003Ch2\u003ELooking for Drupal Commerce support?\u003C\/h2\u003E\r\n\u003Cdl\u003E\r\n\u003Cimg align=\u0022right\u0022 width=\u002275\u0022 src=\u0022\/files\/styles\/grid-3-2x\/public\/project-images\/centarro_logo_0.png\u0022\u003E\r\n\u003Cdt\u003EHire the project maintainers:\u003C\/dt\u003E\r\n\u003Cdd\u003ECentarro offers \u003Ca href=\u0022https:\/\/www.centarro.io\/products\/centarro-support\u0022 target=\u0022_blank\u0022 rel=\u0022nofollow\u0022\u003EDrupal Commerce Support and Development\u003C\/a\u003E services, ranging from a flat monthly fee for maintenance support (with optional development retainers) to full site architecture and development.\u003C\/dd\u003E\r\n\u003Cdt\u003E Join Our Development Community:\u003C\/dt\u003E\r\n\u003Cdd\u003EOver 2,000 developers participate in our two support channels on a best-effort basis, \u003Ca href=\u0022https:\/\/drupal.stackexchange.com\/questions\/tagged\/commerce\u0022 target=\u0022_blank\u0022 rel=\u0022nofollow\u0022\u003EDrupal Answers\u003C\/a\u003E and \u003Ca href=\u0022\/slack\u0022 rel=\u0022nofollow\u0022\u003EDrupal Slack\u003C\/a\u003E (channel: \u003Ca href=\u0022https:\/\/drupal.slack.com\/messages\/C1TLCCF9B\u0022 rel=\u0022nofollow\u0022\u003E#commerce\u003C\/a\u003E).\u003Cbr\u003E\r\n\u003C\/dd\u003E\u003C\/dl\u003E\r\n\u003C\/div\u003E\r\n\r\n\r\n\u003Cdiv class=\u0022note-version\u0022\u003E\r\n\u003Ch4\u003EUpgrade to the Best Payment Solutions\u003C\/h4\u003E\r\n\r\nWe highly recommend migrating to \u003Cstrong\u003EPayPal Checkout\u003C\/strong\u003E from older payment solutions to take advantage of its advanced features. However, if you need to use a third-party payment processor, \u003Cstrong\u003EPayflow\u003C\/strong\u003E remains essential. Our comprehensive list of supported payment solutions also includes:\r\n\r\n\u003Cul\u003E\r\n  \u003Cli\u003E\u003Cstrong\u003EPayflow Link\u003C\/strong\u003E\u003C\/li\u003E\r\n  \u003Cli\u003E\u003Cstrong\u003EPayflow Pro\u003C\/strong\u003E\u003C\/li\u003E\r\n  \u003Cli\u003E\u003Cstrong\u003EPayPal Express Checkout (EC)\u003C\/strong\u003E\u003C\/li\u003E\r\n\u003C\/ul\u003E\r\n\u003C\/div\u003E\r\n\u003Cdiv class=\u0022note-tip\u0022\u003E\r\n\u003Ch4\u003ECertified and Reliable\u003C\/h4\u003E\r\n\r\nAll integrations have been thoroughly reviewed and certified by \u003Cstrong\u003EPayPal\u003C\/strong\u003E, ensuring you can trust the reliability of our solutions. If you\u0027re interested in adding new features or certified integrations to the module, don\u0027t hesitate to contact \u003Ca href=\u0022https:\/\/www.centarro.io\/products\/centarro-support#contact\u0022\u003ECentarro\u003C\/a\u003E.\r\n\u003C\/div\u003E\r\n\r\n","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=\u0022transform-your-payment-experience-with-seamless-paypal-integration-unlock-the-full-potential-of-your-online-store-by-integrating-drupal-commerce-with-a-suite-of-paypal-payment-solutions-our-primary-integration-method-paypal-checkout-paypal-complete-payments-offers-your-customers-a-variety-of-payment-options-including-paypal-accounts-venmo-pay-later-debit-or-credit-cards-this-flexibility-not-only-enhances-the-shopping-experience-but-also-increases-your-conversion-rates-elevate-your-e-commerce-platform-today-with-our-powerful-paypal-integration-including-the-new-fastlane-by-paypal-empower-your-customers-with-pay-later-with-pay-later-formerly-known-as-paypal-credit-merchants-can-provide-financing-options-directly-to-customers-this-feature-can-be-prominently-advertised-on-your-add-to-cart-forms-or-through-a-custom-block-defined-by-our-module-imagine-the-impact-of-offering-your-customers-the-ability-to-finance-their-purchases-right-at-the-point-of-sale-for-more-details-on-how-this-works-check-out-the-paypal-documentation-introducing-fastlane-by-paypal-we-are-excited-to-announce-the-integration-of-fastlane-by-paypal-a-revolutionary-solution-designed-to-streamline-the-checkout-process-for-your-customers-fastlane-allows-users-to-complete-their-purchases-in-just-a-few-clicks-significantly-reducing-cart-abandonment-rates-with-its-intuitive-interface-customers-can-quickly-select-their-preferred-payment-method-whether-it-through-paypal-credit-cards-or-other-options-all-while-enjoying-a-seamless-experience-fastlane-features-include-one-click-checkout-customers-can-save-their-payment-information-for-future-purchases-making-repeat-transactions-faster-and-easier-mobile-optimization-fastlane-is-designed-to-work-flawlessly-on-mobile-devices-ensuring-that-your-customers-have-a-smooth-shopping-experience-no-matter-where-they-are-enhanced-security-with-advanced-fraud-protection-and-secure-payment-processing-fastlane-ensures-that-both-you-and-your-customers-can-shop-with-confidence-integrating-fastlane-into-your-drupal-commerce-setup-is-straightforward-and-it-can-lead-to-increased-customer-satisfaction-and-loyalty-looking-for-drupal-commerce-support-hire-the-project-maintainers-centarro-offers-drupal-commerce-support-and-development-services-ranging-from-a-flat-monthly-fee-for-maintenance-support-with-optional-development-retainers-to-full-site-architecture-and-development-join-our-development-community-over-2-000-developers-participate-in-our-two-support-channels-on-a-best-effort-basis-drupal-answers-and-drupal-slack-channel-commerce-upgrade-to-the-best-payment-solutions-we-highly-recommend-migrating-to-paypal-checkout-from-older-payment-solutions-to-take-advantage-of-its-advanced-features-however-if-you-need-to-use-a-third-party-payment-processor-payflow-remains-essential-our-comprehensive-list-of-supported-payment-solutions-also-includes-payflow-link-payflow-pro-paypal-express-checkout-ec-certified-and-reliable-all-integrations-have-been-thoroughly-reviewed-and-certified-by-paypal-ensuring-you-can-trust-the-reliability-of-our-solutions-if-you-re-interested-in-adding-new-features-or-certified-integrations-to-the-module-don-t-hesitate-to-contact-centarro\u0022\u003ETransform Your Payment Experience with Seamless PayPal Integration\n\nUnlock the full potential of your online store by integrating Drupal Commerce with a suite of \u003Cstrong\u003EPayPal payment solutions\u003C\/strong\u003E. \nOur primary integration method, \u003Cstrong\u003EPayPal Checkout\u003C\/strong\u003E (PayPal Complete Payments), offers your customers a variety of payment options, including:\n\nPayPal accounts\nVenmo\nPay Later\ndebit or credit cards\n\nThis flexibility not only enhances the shopping experience but also increases your conversion rates.\nElevate your e-commerce platform today with our powerful PayPal integration, including the new \u003Cstrong\u003EFastlane by PayPal\u003C\/strong\u003E!\n\nEmpower Your Customers with Pay Later\nWith \u003Cstrong\u003EPay Later\u003C\/strong\u003E\u2014formerly known as PayPal Credit\u2014merchants can provide financing options directly to customers. This feature can be prominently advertised on your \u003Cstrong\u003EAdd to Cart\u003C\/strong\u003E forms or through a custom block defined by our module. Imagine the impact of offering your customers the ability to finance their purchases right at the point of sale! For more details on how this works, check out the PayPal documentation.\n\n\nIntroducing Fastlane by PayPal\nWe are excited to announce the integration of \u003Cstrong\u003EFastlane by PayPal\u003C\/strong\u003E, a revolutionary solution designed to streamline the checkout process for your customers. Fastlane allows users to complete their purchases in just a few clicks, significantly reducing cart abandonment rates. With its intuitive interface, customers can quickly select their preferred payment method, whether it\u0027s through PayPal, credit cards, or other options, all while enjoying a seamless experience.\nFastlane\u0027s features include:\n\n\u003Cstrong\u003EOne-Click Checkout\u003C\/strong\u003E: Customers can save their payment information for future purchases, making repeat transactions faster and easier.\n\u003Cstrong\u003EMobile Optimization\u003C\/strong\u003E: Fastlane is designed to work flawlessly on mobile devices, ensuring that your customers have a smooth shopping experience, no matter where they are.\n\u003Cstrong\u003EEnhanced Security\u003C\/strong\u003E: With advanced fraud protection and secure payment processing, Fastlane ensures that both you and your customers can shop with confidence.\n\nIntegrating Fastlane into your Drupal Commerce setup is straightforward, and it can lead to increased customer satisfaction and loyalty.\n\n\nLooking for Drupal Commerce support?\n\n\nHire the project maintainers:\nCentarro offers Drupal Commerce Support and Development services, ranging from a flat monthly fee for maintenance support (with optional development retainers) to full site architecture and development.\n Join Our Development Community:\nOver 2,000 developers participate in our two support channels on a best-effort basis, Drupal Answers and Drupal Slack (channel: #commerce).\n\n\n\n\nUpgrade to the Best Payment Solutions\nWe highly recommend migrating to \u003Cstrong\u003EPayPal Checkout\u003C\/strong\u003E from older payment solutions to take advantage of its advanced features. However, if you need to use a third-party payment processor, \u003Cstrong\u003EPayflow\u003C\/strong\u003E remains essential. Our comprehensive list of supported payment solutions also includes:\n\n\u003Cstrong\u003EPayflow Link\u003C\/strong\u003E\n\u003Cstrong\u003EPayflow Pro\u003C\/strong\u003E\n\u003Cstrong\u003EPayPal Express Checkout (EC)\u003C\/strong\u003E\n\n\n\nCertified and Reliable\nAll integrations have been thoroughly reviewed and certified by \u003Cstrong\u003EPayPal\u003C\/strong\u003E, ensuring you can trust the reliability of our solutions. If you\u0027re interested in adding new features or certified integrations to the module, don\u0027t hesitate to contact Centarro.\n\n\u003C\/h2\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-1.x\u0022:6058,\u00222.0.x\u0022:262,\u00222.1.x\u0022:603}","field_active_installs_total":6923,"field_composer_namespace":"drupal\/commerce_paypal","field_core_semver_maximum":12000000,"field_core_semver_minimum":8000000,"field_issue_summary_template":null,"field_logo_url":{"uri":"https:\/\/git.drupalcode.org\/project\/commerce_paypal\/-\/avatar","title":null,"options":[]},"field_project_has_releases":true,"field_project_machine_name":"commerce_paypal","field_security_advisory_coverage":"covered"},"relationships":{"uid":{"data":{"type":"user--user","id":"45dce456-4ddf-4269-9cd4-2e46bb0760ed","meta":{"drupal_internal__target_id":3661446}},"links":{"related":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/f58e3714-2506-43c5-b3ca-6b10617d6098\/uid?resourceVersion=id%3A20011676"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/f58e3714-2506-43c5-b3ca-6b10617d6098\/relationships\/uid?resourceVersion=id%3A20011676"}}},"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:\/\/new.drupal.org\/jsonapi\/node\/project_module\/f58e3714-2506-43c5-b3ca-6b10617d6098\/field_development_status?resourceVersion=id%3A20011676"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/f58e3714-2506-43c5-b3ca-6b10617d6098\/relationships\/field_development_status?resourceVersion=id%3A20011676"}}},"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:\/\/new.drupal.org\/jsonapi\/node\/project_module\/f58e3714-2506-43c5-b3ca-6b10617d6098\/field_maintenance_status?resourceVersion=id%3A20011676"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/f58e3714-2506-43c5-b3ca-6b10617d6098\/relationships\/field_maintenance_status?resourceVersion=id%3A20011676"}}},"field_module_categories":{"data":[{"type":"taxonomy_term--module_categories","id":"0cd80c8e-5c20-43a8-aa3e-ec701007d443","meta":{"drupal_internal__target_id":195}},{"type":"taxonomy_term--module_categories","id":"3322058a-a158-4806-ac5b-9bcabc95edac","meta":{"drupal_internal__target_id":185}}],"links":{"related":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/f58e3714-2506-43c5-b3ca-6b10617d6098\/field_module_categories?resourceVersion=id%3A20011676"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/f58e3714-2506-43c5-b3ca-6b10617d6098\/relationships\/field_module_categories?resourceVersion=id%3A20011676"}}},"field_project_images":{"data":[{"type":"file--file","id":"9c7f71be-932f-4f85-a060-e88b28c638b0","meta":{"alt":"","title":null,"width":706,"height":518,"drupal_internal__target_id":21067}}],"links":{"related":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/f58e3714-2506-43c5-b3ca-6b10617d6098\/field_project_images?resourceVersion=id%3A20011676"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/f58e3714-2506-43c5-b3ca-6b10617d6098\/relationships\/field_project_images?resourceVersion=id%3A20011676"}}}}},{"type":"node--project_module","id":"0e3556a8-6a8a-4675-861c-e4ed9accd0ee","links":{"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/0e3556a8-6a8a-4675-861c-e4ed9accd0ee?resourceVersion=id%3A20057380"},"working-copy":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/0e3556a8-6a8a-4675-861c-e4ed9accd0ee?resourceVersion=rel%3Aworking-copy"}},"attributes":{"drupal_internal__nid":3468983,"status":true,"title":"AI Image Alt Text","created":"2024-08-19T15:39:18+00:00","changed":"2026-04-07T05:20:02+00:00","moderation_state":null,"body":{"value":"\u003Cp\u003EThis module is part of the \u003Ca href=\u0022https:\/\/www.drupal.org\/project\/ai\u0022\u003EAI module\u003C\/a\u003E ecosystem and included in \u003Ca href=\u0022https:\/\/www.drupal.org\/project\/dxpr_cms\u0022\u003EDXPR CMS\u003C\/a\u003E.\u003C\/p\u003E\r\n\r\n\u003Cblockquote\u003EGenerate accurate, descriptive alt text automatically using AI vision models. Improve accessibility and search rankings while maintaining editorial control through human-in-the-loop verification.\u003C\/blockquote\u003E\r\n\r\n\u003Cimg src=\u0022\/files\/project-images\/ai_alt_image_text.png\u0022 alt=\u0022AI Alt Image Text\u0022 \/\u003E\r\n\r\n\u003Ch3\u003EYou need AI Image Alt Text if\u003C\/h3\u003E\r\n\u003Cul\u003E\r\n  \u003Cli\u003EYou manage sites with hundreds or thousands of images lacking alt text\u003C\/li\u003E\r\n  \u003Cli\u003EYou need to improve accessibility compliance and SEO rankings\u003C\/li\u003E\r\n  \u003Cli\u003EYour content team struggles to write consistent, descriptive alt text\u003C\/li\u003E\r\n  \u003Cli\u003EYou want to speed up content publishing while maintaining quality\u003C\/li\u003E\r\n\u003C\/ul\u003E\r\n\r\n\u003Ch3 id=\u0022module-project--features\u0022\u003EFeatures\u003C\/h3\u003E\r\n  \u003Cp\u003E\r\n    The AI Image Alt Text module allows you to generate alt texts for image fields using AI vision models. As it is widget-based, it incorporates a human-in-the-loop process, enabling manual generation and verification of the alt text before saving.\r\n  \u003C\/p\u003E\r\n  \u003Cp\u003E\r\n    Additionally, the module utilizes the entity\u2019s language (when available) to generate alt texts in the corresponding language.\r\n  \u003C\/p\u003E\r\n\r\n  \u003Ch3 id=\u0022module-project--seo\u0022\u003ESEO benefits\u003C\/h3\u003E\r\n  \u003Cp\u003E\r\n    Generating accurate and descriptive alt texts enhances your website\u0027s accessibility and improves search engine optimization (SEO). Alt texts help search engines understand image content, which can improve your site\u0027s ranking in image search results. By using this module, you ensure high-quality, consistent alt text generation that adheres to best practices for both accessibility and SEO.\r\n  \u003C\/p\u003E\r\n\r\n  \u003Ch3 id=\u0022module-project--post-installation\u0022\u003EPost-installation\u003C\/h3\u003E\r\n  \u003Col\u003E\r\n    \u003Cli\u003ESet up permissions to determine which roles can generate alt texts using AI.\u003C\/li\u003E\r\n    \u003Cli\u003E\r\n      Access the settings page at \/admin\/config\/ai\/ai_image_alt_text to customize the prompt or adjust how the image is preprocessed before being sent to the AI.\r\n    \u003C\/li\u003E\r\n    \u003Cli\u003EA button will then appear on image fields for generating alt texts.\u003C\/li\u003E\r\n  \u003C\/ol\u003E\r\n\r\n  \u003Cdiv class=\u0022note-tip\u0022\u003E\r\n    \u003Ch4\u003EPrefer a turnkey demo site?\u003C\/h4\u003E\r\n    \u003Cp\u003ESpin up \u003Cstrong\u003EDXPR CMS\u003C\/strong\u003E\u2014Drupal pre-configured with DXPR Builder, DXPR Theme, AI Image Alt Text module, and security best practices.\u003C\/p\u003E\r\n    \u003Cp\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/dxpr_cms\u0022 title=\u0022DXPR CMS platform\u0022\u003EGet DXPR CMS \u00bb\u003C\/a\u003E\u003C\/p\u003E\r\n  \u003C\/div\u003E\r\n\r\n  \u003Ch3 id=\u0022module-project--additional-requirements\u0022\u003EAdditional requirements\u003C\/h3\u003E\r\n  \u003Cp\u003E\r\n    This module uses the \u003Ca href=\u0022https:\/\/www.drupal.org\/project\/ai\u0022\u003EAI module\u003C\/a\u003E as its foundation. It supports any vision model available through providers like OpenAI, Anthropic, and Fireworks AI.\r\n  \u003C\/p\u003E\r\n\r\n  \u003Ch3 id=\u0022module-project--similar-projects\u0022\u003ESimilar projects\u003C\/h3\u003E\r\n  \u003Cp\u003E\r\n    The \u003Ca href=\u0022https:\/\/www.drupal.org\/project\/auto_alter\u0022\u003EAutomatic Alternative Text\u003C\/a\u003E module offers similar functionality by leveraging Azure Computer Vision to generate alt texts when an entity is saved.\r\n  \u003C\/p\u003E","format":"1","processed":"\u003Cdiv class=\u0022toc-filter\u0022\u003E\u003Cp\u003EThis module is part of the \u003Ca href=\u0022https:\/\/www.drupal.org\/project\/ai\u0022 rel=\u0022nofollow\u0022\u003EAI module\u003C\/a\u003E ecosystem and included in \u003Ca href=\u0022https:\/\/www.drupal.org\/project\/dxpr_cms\u0022 rel=\u0022nofollow\u0022\u003EDXPR CMS\u003C\/a\u003E.\u003C\/p\u003E\n\u003Cblockquote\u003E\u003Cp\u003EGenerate accurate, descriptive alt text automatically using AI vision models. Improve accessibility and search rankings while maintaining editorial control through human-in-the-loop verification.\u003C\/p\u003E\u003C\/blockquote\u003E\n\u003Cp\u003E\u003Cimg src=\u0022\/files\/project-images\/ai_alt_image_text.png\u0022 alt=\u0022AI Alt Image Text\u0022\u003E\u003C\/p\u003E\n\u003Ch3 id=\u0022you-need-ai-image-alt-text-if\u0022\u003EYou need AI Image Alt Text if\u003C\/h3\u003E\n\u003Cul\u003E\n\u003Cli\u003EYou manage sites with hundreds or thousands of images lacking alt text\u003C\/li\u003E\n\u003Cli\u003EYou need to improve accessibility compliance and SEO rankings\u003C\/li\u003E\n\u003Cli\u003EYour content team struggles to write consistent, descriptive alt text\u003C\/li\u003E\n\u003Cli\u003EYou want to speed up content publishing while maintaining quality\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Ch3 id=\u0022module-project--features-01\u0022\u003EFeatures\u003C\/h3\u003E\n\u003Cp\u003E\n    The AI Image Alt Text module allows you to generate alt texts for image fields using AI vision models. As it is widget-based, it incorporates a human-in-the-loop process, enabling manual generation and verification of the alt text before saving.\n  \u003C\/p\u003E\n\u003Cp\u003E\n    Additionally, the module utilizes the entity\u2019s language (when available) to generate alt texts in the corresponding language.\n  \u003C\/p\u003E\n\u003Ch3 id=\u0022module-project--seo-01\u0022\u003ESEO benefits\u003C\/h3\u003E\n\u003Cp\u003E\n    Generating accurate and descriptive alt texts enhances your website\u0027s accessibility and improves search engine optimization (SEO). Alt texts help search engines understand image content, which can improve your site\u0027s ranking in image search results. By using this module, you ensure high-quality, consistent alt text generation that adheres to best practices for both accessibility and SEO.\n  \u003C\/p\u003E\n\u003Ch3 id=\u0022module-project--post-installation-01\u0022\u003EPost-installation\u003C\/h3\u003E\n\u003Col\u003E\n\u003Cli\u003ESet up permissions to determine which roles can generate alt texts using AI.\u003C\/li\u003E\n\u003Cli\u003E\n      Access the settings page at \/admin\/config\/ai\/ai_image_alt_text to customize the prompt or adjust how the image is preprocessed before being sent to the AI.\n    \u003C\/li\u003E\n\u003Cli\u003EA button will then appear on image fields for generating alt texts.\u003C\/li\u003E\n\u003C\/ol\u003E\n\u003Cdiv class=\u0022note-tip\u0022\u003E\n\u003Ch4 id=\u0022prefer-a-turnkey-demo-site\u0022\u003EPrefer a turnkey demo site?\u003C\/h4\u003E\n\u003Cp\u003ESpin up \u003Cstrong\u003EDXPR CMS\u003C\/strong\u003E\u2014Drupal pre-configured with DXPR Builder, DXPR Theme, AI Image Alt Text module, and security best practices.\u003C\/p\u003E\n\u003Cp\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/dxpr_cms\u0022 rel=\u0022nofollow\u0022\u003EGet DXPR CMS \u00bb\u003C\/a\u003E\u003C\/p\u003E\n\u003C\/div\u003E\n\u003Ch3 id=\u0022module-project--additional-requirements-01\u0022\u003EAdditional requirements\u003C\/h3\u003E\n\u003Cp\u003E\n    This module uses the \u003Ca href=\u0022https:\/\/www.drupal.org\/project\/ai\u0022 rel=\u0022nofollow\u0022\u003EAI module\u003C\/a\u003E as its foundation. It supports any vision model available through providers like OpenAI, Anthropic, and Fireworks AI.\n  \u003C\/p\u003E\n\u003Ch3 id=\u0022module-project--similar-projects-01\u0022\u003ESimilar projects\u003C\/h3\u003E\n\u003Cp\u003E\n    The \u003Ca href=\u0022https:\/\/www.drupal.org\/project\/auto_alter\u0022 rel=\u0022nofollow\u0022\u003EAutomatic Alternative Text\u003C\/a\u003E module offers similar functionality by leveraging Azure Computer Vision to generate alt texts when an entity is saved.\n  \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:6842}","field_active_installs_total":6842,"field_composer_namespace":"drupal\/ai_image_alt_text","field_core_semver_maximum":12000000,"field_core_semver_minimum":10002000,"field_issue_summary_template":null,"field_logo_url":null,"field_project_has_releases":true,"field_project_machine_name":"ai_image_alt_text","field_security_advisory_coverage":"covered"},"relationships":{"uid":{"data":{"type":"user--user","id":"33d5f6fe-142c-475b-abf6-656b0c581540","meta":{"drupal_internal__target_id":385947}},"links":{"related":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/0e3556a8-6a8a-4675-861c-e4ed9accd0ee\/uid?resourceVersion=id%3A20057380"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/0e3556a8-6a8a-4675-861c-e4ed9accd0ee\/relationships\/uid?resourceVersion=id%3A20057380"}}},"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:\/\/new.drupal.org\/jsonapi\/node\/project_module\/0e3556a8-6a8a-4675-861c-e4ed9accd0ee\/field_development_status?resourceVersion=id%3A20057380"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/0e3556a8-6a8a-4675-861c-e4ed9accd0ee\/relationships\/field_development_status?resourceVersion=id%3A20057380"}}},"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:\/\/new.drupal.org\/jsonapi\/node\/project_module\/0e3556a8-6a8a-4675-861c-e4ed9accd0ee\/field_maintenance_status?resourceVersion=id%3A20057380"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/0e3556a8-6a8a-4675-861c-e4ed9accd0ee\/relationships\/field_maintenance_status?resourceVersion=id%3A20057380"}}},"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:\/\/new.drupal.org\/jsonapi\/node\/project_module\/0e3556a8-6a8a-4675-861c-e4ed9accd0ee\/field_module_categories?resourceVersion=id%3A20057380"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/0e3556a8-6a8a-4675-861c-e4ed9accd0ee\/relationships\/field_module_categories?resourceVersion=id%3A20057380"}}},"field_project_images":{"data":[{"type":"file--file","id":"98f55b60-1b67-411a-bdcf-761c654d3b91","meta":{"alt":"","title":null,"width":654,"height":219,"drupal_internal__target_id":37823}}],"links":{"related":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/0e3556a8-6a8a-4675-861c-e4ed9accd0ee\/field_project_images?resourceVersion=id%3A20057380"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/0e3556a8-6a8a-4675-861c-e4ed9accd0ee\/relationships\/field_project_images?resourceVersion=id%3A20057380"}}}}},{"type":"node--project_module","id":"e21ac647-51a7-4e1e-92f5-2d70db7ff3bb","links":{"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/e21ac647-51a7-4e1e-92f5-2d70db7ff3bb?resourceVersion=id%3A20040927"},"working-copy":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/e21ac647-51a7-4e1e-92f5-2d70db7ff3bb?resourceVersion=rel%3Aworking-copy"}},"attributes":{"drupal_internal__nid":2846758,"status":true,"title":"Siteimprove.ai","created":"2017-01-25T17:07:59+00:00","changed":"2026-04-07T05:20:02+00:00","moderation_state":null,"body":{"value":"\u003Ch2\u003EDrupal 10\u003C\/h2\u003E\r\nThe new 2.0.x major version supports Drupal 9.2+ and Drupal 10. Deprecated JavaScript libraries has been replaced by their succeeders. \r\n\r\n\u003Ch2\u003ESiteimprove.ai Plugins \u2013 Your Insights Always Within Reach\u003C\/h2\u003E\r\n\r\nThe Siteimprove.ai plugin bridges the gap between Drupal and the Siteimprove.ai Intelligence Platform.\r\nThanks to the seamless integration, you are now able to put your Siteimprove.ai results to use where they are most valuable \u2013 during your content creation and editing process.\r\n\r\nWith analytics and content insights always at hand, contributors can test, fix, and optimize their work continuously. Once the detected issues have been assessed, you can directly re-check the relevant page when it is published and see if further actions are needed.\r\nDelivering a superior digital experience has never been more efficient and convenient. \r\n\r\n\u003Ch2\u003ESiteimprove.ai Analytics\u003C\/h2\u003E\r\nEnabling Siteimprove.ai Analytics to a Drupal site is out of scope of this module. Refer to Siteimprove.ai\u0027s documentation for \u003Ca href=\u0022https:\/\/help.siteimprove.com\/support\/solutions\/articles\/80000448448-addi\u0022\u003Eadding Siteimprove Analytics Javascript to a website\u003C\/a\u003E or install the Drupal module \u003Ca href=\u0022https:\/\/www.drupal.org\/project\/siteimprove_analytics\u0022\u003ESiteimprove.ai Analytics\u003C\/a\u003E.\r\n\r\n\u003Ch2\u003EAbout Siteimprove.ai\u003C\/h2\u003E\r\nSiteimprove.ai offers the world\u0027s most comprehensive cloud-based Digital Presence Optimization (DPO) software. The Siteimprove.ai Intelligence Platform provides eye-opening insights that empower you and your team to create higher quality content, drive better traffic, measure digital performance, and work towards regulatory compliance\u2014all from one place. Siteimprove.ai is also proud to offer best-in-class technical support, academy courses, services, and technology integrations.\r\n\r\nFind out why more than 7,000 organizations around the world practice DPO using the Siteimprove Intelligence Platform at \u003Ca href=\u0022https:\/\/siteimprove.com\/en\/\u0022\u003Esiteimprove.com\u003C\/a\u003E\r\n\r\n\r\n\u003Cstrong\u003EInstallation guide\u003C\/strong\u003E\r\nSiteimprove.ai Plugin can be installed like any other Drupal module. \r\nPlace it in the modules directory for your site and enable it on the \u0027admin\/modules\u0027 page.\r\nBy default the plugin is only available for administrators. If you want to allow other roles to use the plugin, go to your permissions page and enable it on the option \u201cAccess Siteimprove.ai Plugin\u201d (under the group \u201cSiteimprove.ai Plugin\u201d).\r\n\r\n\u003Cstrong\u003EFrontend Domain Plugin\u003C\/strong\u003E\r\n\r\nIf a Drupal site has a domain for the frontend site that is different from the\r\nbackend domain, this can be configured with existing plugins, or you can make\r\nyour own.\r\n\r\nIncluded with the module are two plugins for (1) the default case where the\r\nfrontend domain is the same as the backend domain, and (2) the frontend domain\r\nis a single domain and doesn\u0027t need advanced configuration.\r\n\r\nIf you need Domain Access support, you can install the module\r\nsiteimprove_domain_access. This module doesn\u0027t need to be configured, just\r\nenable it and it will make sure Siteimprove.ai is notified with the correct\r\nurl(s) for a given entity.\r\n\r\n\u003Cstrong\u003EAdding your own plugin\u003C\/strong\u003E\r\n\r\nUse the annotation discovery method with the annotation \u0027@SiteimproveDomain\u0027.\r\nThis annotation has the variables \u0027id\u0027, \u0027label\u0027 (translatable), and\r\n\u0027description\u0027 (translatable). See the plugin Simple\r\n(src\/Plugin\/SiteimproveDomain\/Simple.php) for a plugin with no additional\r\nconfiguration, and the plugin Single (src\/Plugin\/SiteimproveDomain\/Single.php)\r\nfor a plugin with configuration.\r\n\r\nThe plugin uses the ConfigFormBase trait, so if you want to save configuration\r\nfor your plugin, you have to add the function \u0027getEditableConfigNames()\u0027, that\r\nshould return a list of setting names. You can see the Single plugin for how to\r\nsave configuration in the \u0027submitForm()\u0027 function, or - if you need a more\r\nadvanced example - see the module siteimprove_domain_access.\r\n\r\nThe following methods are required in a custom plugin: \u0027buildForm()\u0027 (will be\r\ndisplayed on the Siteimprove.ai settings page) and \u0027getUrls()\u0027 (returns the urls\r\nfor the current entity including http scheme \u0022http:\/\/\u0022 or \u0022https:\/\/\u0022).\r\n\r\nThe following methods are optional: \u0027validateForm()\u0027 (validates the form, if\r\nyour plugin requires configuration), \u0027submitForm()\u0027 (saves any changes to the\r\nplugin\u0027s configuration), \u0027getEditableConfigNames()\u0027 (returns a list of setting\r\nnames).","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=\u0022drupal-10\u0022\u003EDrupal 10\u003C\/h2\u003E\n\u003Cp\u003EThe new 2.0.x major version supports Drupal 9.2+ and Drupal 10. Deprecated JavaScript libraries has been replaced by their succeeders. \u003C\/p\u003E\n\u003Ca href=\u0022#top\u0022 class=\u0022back-to-top\u0022\u003EBack to top\u003C\/a\u003E\n\n\u003Ch2 id=\u0022siteimprove-ai-plugins-your-insights-always-within-reach\u0022\u003ESiteimprove.ai Plugins \u2013 Your Insights Always Within Reach\u003C\/h2\u003E\n\u003Cp\u003EThe Siteimprove.ai plugin bridges the gap between Drupal and the Siteimprove.ai Intelligence Platform.\u003Cbr\u003E\nThanks to the seamless integration, you are now able to put your Siteimprove.ai results to use where they are most valuable \u2013 during your content creation and editing process.\u003C\/p\u003E\n\u003Cp\u003EWith analytics and content insights always at hand, contributors can test, fix, and optimize their work continuously. Once the detected issues have been assessed, you can directly re-check the relevant page when it is published and see if further actions are needed.\u003Cbr\u003E\nDelivering a superior digital experience has never been more efficient and convenient. \u003C\/p\u003E\n\u003Ca href=\u0022#top\u0022 class=\u0022back-to-top\u0022\u003EBack to top\u003C\/a\u003E\n\n\u003Ch2 id=\u0022siteimprove-ai-analytics\u0022\u003ESiteimprove.ai Analytics\u003C\/h2\u003E\n\u003Cp\u003EEnabling Siteimprove.ai Analytics to a Drupal site is out of scope of this module. Refer to Siteimprove.ai\u0027s documentation for \u003Ca href=\u0022https:\/\/help.siteimprove.com\/support\/solutions\/articles\/80000448448-addi\u0022 rel=\u0022nofollow\u0022\u003Eadding Siteimprove Analytics Javascript to a website\u003C\/a\u003E or install the Drupal module \u003Ca href=\u0022https:\/\/www.drupal.org\/project\/siteimprove_analytics\u0022 rel=\u0022nofollow\u0022\u003ESiteimprove.ai Analytics\u003C\/a\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=\u0022about-siteimprove-ai\u0022\u003EAbout Siteimprove.ai\u003C\/h2\u003E\n\u003Cp\u003ESiteimprove.ai offers the world\u0027s most comprehensive cloud-based Digital Presence Optimization (DPO) software. The Siteimprove.ai Intelligence Platform provides eye-opening insights that empower you and your team to create higher quality content, drive better traffic, measure digital performance, and work towards regulatory compliance\u2014all from one place. Siteimprove.ai is also proud to offer best-in-class technical support, academy courses, services, and technology integrations.\u003C\/p\u003E\n\u003Cp\u003EFind out why more than 7,000 organizations around the world practice DPO using the Siteimprove Intelligence Platform at \u003Ca href=\u0022https:\/\/siteimprove.com\/en\/\u0022 rel=\u0022nofollow\u0022\u003Esiteimprove.com\u003C\/a\u003E\u003C\/p\u003E\n\u003Cp\u003E\u003Cstrong\u003EInstallation guide\u003C\/strong\u003E\u003Cbr\u003E\nSiteimprove.ai Plugin can be installed like any other Drupal module.\u003Cbr\u003E\nPlace it in the modules directory for your site and enable it on the \u0027admin\/modules\u0027 page.\u003Cbr\u003E\nBy default the plugin is only available for administrators. If you want to allow other roles to use the plugin, go to your permissions page and enable it on the option \u201cAccess Siteimprove.ai Plugin\u201d (under the group \u201cSiteimprove.ai Plugin\u201d).\u003C\/p\u003E\n\u003Cp\u003E\u003Cstrong\u003EFrontend Domain Plugin\u003C\/strong\u003E\u003C\/p\u003E\n\u003Cp\u003EIf a Drupal site has a domain for the frontend site that is different from the\u003Cbr\u003E\nbackend domain, this can be configured with existing plugins, or you can make\u003Cbr\u003E\nyour own.\u003C\/p\u003E\n\u003Cp\u003EIncluded with the module are two plugins for (1) the default case where the\u003Cbr\u003E\nfrontend domain is the same as the backend domain, and (2) the frontend domain\u003Cbr\u003E\nis a single domain and doesn\u0027t need advanced configuration.\u003C\/p\u003E\n\u003Cp\u003EIf you need Domain Access support, you can install the module\u003Cbr\u003E\nsiteimprove_domain_access. This module doesn\u0027t need to be configured, just\u003Cbr\u003E\nenable it and it will make sure Siteimprove.ai is notified with the correct\u003Cbr\u003E\nurl(s) for a given entity.\u003C\/p\u003E\n\u003Cp\u003E\u003Cstrong\u003EAdding your own plugin\u003C\/strong\u003E\u003C\/p\u003E\n\u003Cp\u003EUse the annotation discovery method with the annotation \u0027@SiteimproveDomain\u0027.\u003Cbr\u003E\nThis annotation has the variables \u0027id\u0027, \u0027label\u0027 (translatable), and\u003Cbr\u003E\n\u0027description\u0027 (translatable). See the plugin Simple\u003Cbr\u003E\n(src\/Plugin\/SiteimproveDomain\/Simple.php) for a plugin with no additional\u003Cbr\u003E\nconfiguration, and the plugin Single (src\/Plugin\/SiteimproveDomain\/Single.php)\u003Cbr\u003E\nfor a plugin with configuration.\u003C\/p\u003E\n\u003Cp\u003EThe plugin uses the ConfigFormBase trait, so if you want to save configuration\u003Cbr\u003E\nfor your plugin, you have to add the function \u0027getEditableConfigNames()\u0027, that\u003Cbr\u003E\nshould return a list of setting names. You can see the Single plugin for how to\u003Cbr\u003E\nsave configuration in the \u0027submitForm()\u0027 function, or - if you need a more\u003Cbr\u003E\nadvanced example - see the module siteimprove_domain_access.\u003C\/p\u003E\n\u003Cp\u003EThe following methods are required in a custom plugin: \u0027buildForm()\u0027 (will be\u003Cbr\u003E\ndisplayed on the Siteimprove.ai settings page) and \u0027getUrls()\u0027 (returns the urls\u003Cbr\u003E\nfor the current entity including http scheme \u0022http:\/\/\u0022 or \u0022https:\/\/\u0022).\u003C\/p\u003E\n\u003Cp\u003EThe following methods are optional: \u0027validateForm()\u0027 (validates the form, if\u003Cbr\u003E\nyour plugin requires configuration), \u0027submitForm()\u0027 (saves any changes to the\u003Cbr\u003E\nplugin\u0027s configuration), \u0027getEditableConfigNames()\u0027 (returns a list of setting\u003Cbr\u003E\nnames).\u003C\/p\u003E\u003Ca href=\u0022#top\u0022 class=\u0022back-to-top\u0022\u003EBack to top\u003C\/a\u003E\u003C\/div\u003E","summary":"Siteimprove.ai Plugins keep insights within reach by integrating Drupal with the Siteimprove.ai Intelligence Platform, streamlining content creation with real-time results where they matter most."},"field_active_installs":"{\u00228.x-1.x\u0022:74,\u00222.0.x\u0022:2228,\u00223.0.x\u0022:4477}","field_active_installs_total":6779,"field_composer_namespace":"drupal\/siteimprove","field_core_semver_maximum":12000000,"field_core_semver_minimum":8000000,"field_issue_summary_template":null,"field_logo_url":{"uri":"https:\/\/git.drupalcode.org\/project\/siteimprove\/-\/avatar","title":null,"options":[]},"field_project_has_releases":true,"field_project_machine_name":"siteimprove","field_security_advisory_coverage":"covered"},"relationships":{"uid":{"data":{"type":"user--user","id":"e3e4aacb-139d-4d91-b390-0134be3b5c8b","meta":{"drupal_internal__target_id":3521441}},"links":{"related":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/e21ac647-51a7-4e1e-92f5-2d70db7ff3bb\/uid?resourceVersion=id%3A20040927"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/e21ac647-51a7-4e1e-92f5-2d70db7ff3bb\/relationships\/uid?resourceVersion=id%3A20040927"}}},"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:\/\/new.drupal.org\/jsonapi\/node\/project_module\/e21ac647-51a7-4e1e-92f5-2d70db7ff3bb\/field_development_status?resourceVersion=id%3A20040927"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/e21ac647-51a7-4e1e-92f5-2d70db7ff3bb\/relationships\/field_development_status?resourceVersion=id%3A20040927"}}},"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:\/\/new.drupal.org\/jsonapi\/node\/project_module\/e21ac647-51a7-4e1e-92f5-2d70db7ff3bb\/field_maintenance_status?resourceVersion=id%3A20040927"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/e21ac647-51a7-4e1e-92f5-2d70db7ff3bb\/relationships\/field_maintenance_status?resourceVersion=id%3A20040927"}}},"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:\/\/new.drupal.org\/jsonapi\/node\/project_module\/e21ac647-51a7-4e1e-92f5-2d70db7ff3bb\/field_module_categories?resourceVersion=id%3A20040927"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/e21ac647-51a7-4e1e-92f5-2d70db7ff3bb\/relationships\/field_module_categories?resourceVersion=id%3A20040927"}}},"field_project_images":{"data":[{"type":"file--file","id":"daabda23-e2df-41f2-885b-6b3ae2b4eb43","meta":{"alt":"","title":null,"width":1204,"height":1560,"drupal_internal__target_id":35326}}],"links":{"related":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/e21ac647-51a7-4e1e-92f5-2d70db7ff3bb\/field_project_images?resourceVersion=id%3A20040927"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/e21ac647-51a7-4e1e-92f5-2d70db7ff3bb\/relationships\/field_project_images?resourceVersion=id%3A20040927"}}}}},{"type":"node--project_module","id":"aba6c13f-0638-4681-8b5c-127443b04762","links":{"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/aba6c13f-0638-4681-8b5c-127443b04762?resourceVersion=id%3A20037128"},"working-copy":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/aba6c13f-0638-4681-8b5c-127443b04762?resourceVersion=rel%3Aworking-copy"}},"attributes":{"drupal_internal__nid":2627476,"status":true,"title":"Facebook Pixel","created":"2015-12-02T16:59:23+00:00","changed":"2026-04-07T05:20:02+00:00","moderation_state":null,"body":{"value":"\u003Ch3\u003EAbout\u003C\/h3\u003E\r\n\r\nBasic \u003Ca href=\u0022https:\/\/www.facebook.com\/business\/help\/651294705016616\/\u0022\u003EFacebook Pixel\u003C\/a\u003E integration, allowing you to place a single pixel across your entire website to report conversions, build audiences and get rich insights about how people use your website.\r\n\r\nHandled events:\r\n\u003Cul\u003E\r\n\u003Cli\u003EViewContent\u003C\/li\u003E\r\n\u003Cli\u003ECompleteRegistration\u003C\/li\u003E\r\n\u003Cli\u003EAddToCart\u003C\/li\u003E\r\n\u003Cli\u003EInitiateCheckout\u003C\/li\u003E\r\n\u003Cli\u003EPurchase\u003C\/li\u003E\r\n\u003C\/ul\u003E\r\n\r\n(last 3 are based on the Drupal Commerce integration).\r\n\r\n\u003Ch3\u003EDevelopers\u003C\/h3\u003E\r\n\u003Cul\u003E\r\n  \u003Cli\u003E\u003Ca href=\u0022http:\/\/cgit.drupalcode.org\/facebook_pixel\/tree\/facebook_pixel.api.php\u0022\u003Efacebook_pixel.api.php\u003C\/a\u003E\u003C\/li\u003E\r\n\u003C\/ul\u003E\r\n\r\n\u003Ch3\u003ESimilar modules\u003C\/h3\u003E\r\n\u003Cul\u003E\r\n  \u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/facebook_tracking_pixel\u0022\u003EFacebook Tracking Pixel\u003C\/a\u003E (D7)\u003C\/li\u003E\r\n  \u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/simple_facebook_pixel\u0022\u003ESimple Facebook Pixel\u003C\/a\u003E (D8)\u003C\/li\u003E\r\n\u003C\/ul\u003E","format":"1","processed":"\u003Cdiv class=\u0022toc-filter\u0022\u003E\u003Ch3 id=\u0022about\u0022\u003EAbout\u003C\/h3\u003E\n\u003Cp\u003EBasic \u003Ca href=\u0022https:\/\/www.facebook.com\/business\/help\/651294705016616\/\u0022 rel=\u0022nofollow\u0022\u003EFacebook Pixel\u003C\/a\u003E integration, allowing you to place a single pixel across your entire website to report conversions, build audiences and get rich insights about how people use your website.\u003C\/p\u003E\n\u003Cp\u003EHandled events:\u003C\/p\u003E\n\u003Cul\u003E\n\u003Cli\u003EViewContent\u003C\/li\u003E\n\u003Cli\u003ECompleteRegistration\u003C\/li\u003E\n\u003Cli\u003EAddToCart\u003C\/li\u003E\n\u003Cli\u003EInitiateCheckout\u003C\/li\u003E\n\u003Cli\u003EPurchase\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Cp\u003E(last 3 are based on the Drupal Commerce integration).\u003C\/p\u003E\n\u003Ch3 id=\u0022developers\u0022\u003EDevelopers\u003C\/h3\u003E\n\u003Cul\u003E\n\u003Cli\u003E\u003Ca href=\u0022http:\/\/cgit.drupalcode.org\/facebook_pixel\/tree\/facebook_pixel.api.php\u0022 rel=\u0022nofollow\u0022\u003Efacebook_pixel.api.php\u003C\/a\u003E\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Ch3 id=\u0022similar-modules\u0022\u003ESimilar modules\u003C\/h3\u003E\n\u003Cul\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/facebook_tracking_pixel\u0022 rel=\u0022nofollow\u0022\u003EFacebook Tracking Pixel\u003C\/a\u003E (D7)\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.drupal.org\/project\/simple_facebook_pixel\u0022 rel=\u0022nofollow\u0022\u003ESimple Facebook Pixel\u003C\/a\u003E (D8)\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":"{\u00228.x-1.x\u0022:346,\u00222.x\u0022:2,\u00222.0.x\u0022:5458}","field_active_installs_total":5806,"field_composer_namespace":"drupal\/facebook_pixel","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":"facebook_pixel","field_security_advisory_coverage":"covered"},"relationships":{"uid":{"data":{"type":"user--user","id":"6e717507-c7fd-4d60-96db-688a25ad4b95","meta":{"drupal_internal__target_id":271491}},"links":{"related":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/aba6c13f-0638-4681-8b5c-127443b04762\/uid?resourceVersion=id%3A20037128"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/aba6c13f-0638-4681-8b5c-127443b04762\/relationships\/uid?resourceVersion=id%3A20037128"}}},"field_development_status":{"data":{"type":"taxonomy_term--development_status","id":"219c1cf2-dd7f-474b-9dd5-a26643fbc699","meta":{"drupal_internal__target_id":27276}},"links":{"related":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/aba6c13f-0638-4681-8b5c-127443b04762\/field_development_status?resourceVersion=id%3A20037128"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/aba6c13f-0638-4681-8b5c-127443b04762\/relationships\/field_development_status?resourceVersion=id%3A20037128"}}},"field_maintenance_status":{"data":{"type":"taxonomy_term--maintenance_status","id":"cee844e2-68b5-489d-bafa-6a0ade2b6dfd","meta":{"drupal_internal__target_id":27273}},"links":{"related":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/aba6c13f-0638-4681-8b5c-127443b04762\/field_maintenance_status?resourceVersion=id%3A20037128"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/aba6c13f-0638-4681-8b5c-127443b04762\/relationships\/field_maintenance_status?resourceVersion=id%3A20037128"}}},"field_module_categories":{"data":[{"type":"taxonomy_term--module_categories","id":"0cd80c8e-5c20-43a8-aa3e-ec701007d443","meta":{"drupal_internal__target_id":195}},{"type":"taxonomy_term--module_categories","id":"3322058a-a158-4806-ac5b-9bcabc95edac","meta":{"drupal_internal__target_id":185}}],"links":{"related":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/aba6c13f-0638-4681-8b5c-127443b04762\/field_module_categories?resourceVersion=id%3A20037128"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/aba6c13f-0638-4681-8b5c-127443b04762\/relationships\/field_module_categories?resourceVersion=id%3A20037128"}}},"field_project_images":{"data":[],"links":{"related":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/aba6c13f-0638-4681-8b5c-127443b04762\/field_project_images?resourceVersion=id%3A20037128"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/node\/project_module\/aba6c13f-0638-4681-8b5c-127443b04762\/relationships\/field_project_images?resourceVersion=id%3A20037128"}}}}}],"included":[{"type":"taxonomy_term--module_categories","id":"0cd80c8e-5c20-43a8-aa3e-ec701007d443","links":{"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/taxonomy_term\/module_categories\/0cd80c8e-5c20-43a8-aa3e-ec701007d443?resourceVersion=id%3A195"},"working-copy":{"href":"https:\/\/new.drupal.org\/jsonapi\/taxonomy_term\/module_categories\/0cd80c8e-5c20-43a8-aa3e-ec701007d443?resourceVersion=rel%3Aworking-copy"}},"attributes":{"name":"E-commerce","drupal_internal__tid":195,"status":true,"description":{"value":"Assist with aspects of running an online store, such as product management and display, shopping carts, inventory management, fulfillment, payments, taxes, and shipping.","format":"1","processed":"\u003Cp\u003EAssist with aspects of running an online store, such as product management and display, shopping carts, inventory management, fulfillment, payments, taxes, and shipping.\u003C\/p\u003E"}}},{"type":"taxonomy_term--module_categories","id":"3df293b3-c9a1-4232-962b-3c8169e8e6e3","links":{"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/taxonomy_term\/module_categories\/3df293b3-c9a1-4232-962b-3c8169e8e6e3?resourceVersion=id%3A203"},"working-copy":{"href":"https:\/\/new.drupal.org\/jsonapi\/taxonomy_term\/module_categories\/3df293b3-c9a1-4232-962b-3c8169e8e6e3?resourceVersion=rel%3Aworking-copy"}},"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:\/\/new.drupal.org\/jsonapi\/taxonomy_term\/module_categories\/86237004-3801-40cf-96b5-fe7d60efccb5?resourceVersion=id%3A187"},"working-copy":{"href":"https:\/\/new.drupal.org\/jsonapi\/taxonomy_term\/module_categories\/86237004-3801-40cf-96b5-fe7d60efccb5?resourceVersion=rel%3Aworking-copy"}},"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:\/\/new.drupal.org\/jsonapi\/taxonomy_term\/module_categories\/01df2105-2397-4a0e-b34c-80da1c3b1208?resourceVersion=id%3A201"},"working-copy":{"href":"https:\/\/new.drupal.org\/jsonapi\/taxonomy_term\/module_categories\/01df2105-2397-4a0e-b34c-80da1c3b1208?resourceVersion=rel%3Aworking-copy"}},"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:\/\/new.drupal.org\/jsonapi\/taxonomy_term\/module_categories\/086cebcf-200f-4c34-886e-f9921919b292?resourceVersion=id%3A189"},"working-copy":{"href":"https:\/\/new.drupal.org\/jsonapi\/taxonomy_term\/module_categories\/086cebcf-200f-4c34-886e-f9921919b292?resourceVersion=rel%3Aworking-copy"}},"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":"dcb48e9f-6afa-4842-8ef6-44b90b083fcc","links":{"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/taxonomy_term\/module_categories\/dcb48e9f-6afa-4842-8ef6-44b90b083fcc?resourceVersion=id%3A200"},"working-copy":{"href":"https:\/\/new.drupal.org\/jsonapi\/taxonomy_term\/module_categories\/dcb48e9f-6afa-4842-8ef6-44b90b083fcc?resourceVersion=rel%3Aworking-copy"}},"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":"24830916-5c07-4446-89de-960915f87bf6","links":{"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/taxonomy_term\/module_categories\/24830916-5c07-4446-89de-960915f87bf6?resourceVersion=id%3A199"},"working-copy":{"href":"https:\/\/new.drupal.org\/jsonapi\/taxonomy_term\/module_categories\/24830916-5c07-4446-89de-960915f87bf6?resourceVersion=rel%3Aworking-copy"}},"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--module_categories","id":"754c04cb-6da2-42ba-9032-d64307f68f45","links":{"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/taxonomy_term\/module_categories\/754c04cb-6da2-42ba-9032-d64307f68f45?resourceVersion=id%3A188"},"working-copy":{"href":"https:\/\/new.drupal.org\/jsonapi\/taxonomy_term\/module_categories\/754c04cb-6da2-42ba-9032-d64307f68f45?resourceVersion=rel%3Aworking-copy"}},"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":"3322058a-a158-4806-ac5b-9bcabc95edac","links":{"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/taxonomy_term\/module_categories\/3322058a-a158-4806-ac5b-9bcabc95edac?resourceVersion=id%3A185"},"working-copy":{"href":"https:\/\/new.drupal.org\/jsonapi\/taxonomy_term\/module_categories\/3322058a-a158-4806-ac5b-9bcabc95edac?resourceVersion=rel%3Aworking-copy"}},"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":"68428c33-1db7-438d-b1b3-e23004e0982b","links":{"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/taxonomy_term\/module_categories\/68428c33-1db7-438d-b1b3-e23004e0982b?resourceVersion=id%3A192"},"working-copy":{"href":"https:\/\/new.drupal.org\/jsonapi\/taxonomy_term\/module_categories\/68428c33-1db7-438d-b1b3-e23004e0982b?resourceVersion=rel%3Aworking-copy"}},"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--maintenance_status","id":"089406ad-304d-4737-80d1-2f08527ae49e","links":{"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/taxonomy_term\/maintenance_status\/089406ad-304d-4737-80d1-2f08527ae49e?resourceVersion=id%3A27271"},"working-copy":{"href":"https:\/\/new.drupal.org\/jsonapi\/taxonomy_term\/maintenance_status\/089406ad-304d-4737-80d1-2f08527ae49e?resourceVersion=rel%3Aworking-copy"}},"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--maintenance_status","id":"cee844e2-68b5-489d-bafa-6a0ade2b6dfd","links":{"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/taxonomy_term\/maintenance_status\/cee844e2-68b5-489d-bafa-6a0ade2b6dfd?resourceVersion=id%3A27273"},"working-copy":{"href":"https:\/\/new.drupal.org\/jsonapi\/taxonomy_term\/maintenance_status\/cee844e2-68b5-489d-bafa-6a0ade2b6dfd?resourceVersion=rel%3Aworking-copy"}},"attributes":{"drupal_internal__tid":27273,"status":true,"name":"Minimally maintained","description":{"value":"Maintainers monitor issues, but fast responses are not guaranteed.","format":"1","processed":"\u003Cp\u003EMaintainers monitor issues, but fast responses are not guaranteed.\u003C\/p\u003E"}}},{"type":"taxonomy_term--development_status","id":"e767288c-9800-4fb4-aeb8-8c311533838a","links":{"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/taxonomy_term\/development_status\/e767288c-9800-4fb4-aeb8-8c311533838a?resourceVersion=id%3A27274"},"working-copy":{"href":"https:\/\/new.drupal.org\/jsonapi\/taxonomy_term\/development_status\/e767288c-9800-4fb4-aeb8-8c311533838a?resourceVersion=rel%3Aworking-copy"}},"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":"taxonomy_term--development_status","id":"219c1cf2-dd7f-474b-9dd5-a26643fbc699","links":{"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/taxonomy_term\/development_status\/219c1cf2-dd7f-474b-9dd5-a26643fbc699?resourceVersion=id%3A27276"},"working-copy":{"href":"https:\/\/new.drupal.org\/jsonapi\/taxonomy_term\/development_status\/219c1cf2-dd7f-474b-9dd5-a26643fbc699?resourceVersion=rel%3Aworking-copy"}},"attributes":{"drupal_internal__tid":27276,"status":true,"name":"Maintenance fixes only","description":{"value":"Considered feature-complete by its maintainers.","format":"1","processed":"\u003Cp\u003EConsidered feature-complete by its maintainers.\u003C\/p\u003E"}}},{"type":"user--user","id":"45dce456-4ddf-4269-9cd4-2e46bb0760ed","links":{"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/user\/user\/45dce456-4ddf-4269-9cd4-2e46bb0760ed"}},"attributes":{"display_name":"centarro","drupal_internal__uid":3661446,"name":"centarro","field_country":"US","field_first_name":null,"field_git_username":"centarro","field_last_name":null},"relationships":{"user_picture":{"data":{"type":"file--file","id":"6bc46d67-73f3-4c2d-be8c-4bb55ac8f7c5","meta":{"alt":null,"title":null,"width":400,"height":400,"drupal_internal__target_id":154011}},"links":{"related":{"href":"https:\/\/new.drupal.org\/jsonapi\/user\/user\/45dce456-4ddf-4269-9cd4-2e46bb0760ed\/user_picture"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/user\/user\/45dce456-4ddf-4269-9cd4-2e46bb0760ed\/relationships\/user_picture"}}}}},{"type":"user--user","id":"ebd9c743-897d-4c43-aaf8-b9e1acfe8e26","links":{"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/user\/user\/ebd9c743-897d-4c43-aaf8-b9e1acfe8e26"}},"attributes":{"display_name":"itmaybejj","drupal_internal__uid":1177504,"name":"itmaybejj","field_country":"US","field_first_name":"John","field_git_username":"itmaybejj","field_last_name":"Jameson"},"relationships":{"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:\/\/new.drupal.org\/jsonapi\/user\/user\/ebd9c743-897d-4c43-aaf8-b9e1acfe8e26\/user_picture"},"self":{"href":"https:\/\/new.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:\/\/new.drupal.org\/jsonapi\/user\/user\/e8a182f9-9f1d-4273-9720-93a6d64fc697"}},"attributes":{"display_name":"ahana92","drupal_internal__uid":3494063,"name":"ahana92","field_country":"IN","field_first_name":"Ahana","field_git_username":"ahana92","field_last_name":"Kundu"},"relationships":{"user_picture":{"data":null,"links":{"related":{"href":"https:\/\/new.drupal.org\/jsonapi\/user\/user\/e8a182f9-9f1d-4273-9720-93a6d64fc697\/user_picture"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/user\/user\/e8a182f9-9f1d-4273-9720-93a6d64fc697\/relationships\/user_picture"}}}}},{"type":"user--user","id":"a2524084-7d93-463f-af4a-507077045868","links":{"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/user\/user\/a2524084-7d93-463f-af4a-507077045868"}},"attributes":{"display_name":"jfeltkamp","drupal_internal__uid":2471686,"name":"jfeltkamp","field_country":"DE","field_first_name":"Joachim","field_git_username":"JFeltkamp","field_last_name":"Feltkamp"},"relationships":{"user_picture":{"data":{"type":"file--file","id":"d855459c-6a35-445b-9ec0-217cd5e47572","meta":{"alt":null,"title":null,"width":768,"height":1024,"drupal_internal__target_id":87480}},"links":{"related":{"href":"https:\/\/new.drupal.org\/jsonapi\/user\/user\/a2524084-7d93-463f-af4a-507077045868\/user_picture"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/user\/user\/a2524084-7d93-463f-af4a-507077045868\/relationships\/user_picture"}}}}},{"type":"user--user","id":"a24fa9e6-3d3e-4fd8-ac93-777183ecb2ca","links":{"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/user\/user\/a24fa9e6-3d3e-4fd8-ac93-777183ecb2ca"}},"attributes":{"display_name":"googletorp","drupal_internal__uid":386230,"name":"googletorp","field_country":"DK","field_first_name":"Jakob","field_git_username":"googletorp","field_last_name":"Larsen"},"relationships":{"user_picture":{"data":{"type":"file--file","id":"79b0d5b3-f9ec-468e-97c3-47143e72dc94","meta":{"alt":null,"title":null,"width":214,"height":224,"drupal_internal__target_id":77738}},"links":{"related":{"href":"https:\/\/new.drupal.org\/jsonapi\/user\/user\/a24fa9e6-3d3e-4fd8-ac93-777183ecb2ca\/user_picture"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/user\/user\/a24fa9e6-3d3e-4fd8-ac93-777183ecb2ca\/relationships\/user_picture"}}}}},{"type":"user--user","id":"f2e2ea48-c23d-401f-a3c2-a7b2985bb613","links":{"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/user\/user\/f2e2ea48-c23d-401f-a3c2-a7b2985bb613"}},"attributes":{"display_name":"smustgrave","drupal_internal__uid":3252890,"name":"smustgrave","field_country":"US","field_first_name":"Stephen","field_git_username":"smustgrave","field_last_name":"Mustgrave"},"relationships":{"user_picture":{"data":{"type":"file--file","id":"a64d1b62-3e77-4c1f-b54b-bf33c1dd99d5","meta":{"alt":null,"title":null,"width":768,"height":1024,"drupal_internal__target_id":753451}},"links":{"related":{"href":"https:\/\/new.drupal.org\/jsonapi\/user\/user\/f2e2ea48-c23d-401f-a3c2-a7b2985bb613\/user_picture"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/user\/user\/f2e2ea48-c23d-401f-a3c2-a7b2985bb613\/relationships\/user_picture"}}}}},{"type":"user--user","id":"ddcffd2b-2a0a-466b-95f8-477931743a72","links":{"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/user\/user\/ddcffd2b-2a0a-466b-95f8-477931743a72"}},"attributes":{"display_name":"chrissnyder","drupal_internal__uid":1988434,"name":"chrissnyder","field_country":"US","field_first_name":"Chris","field_git_username":"chrissnyder","field_last_name":"Snyder"},"relationships":{"user_picture":{"data":{"type":"file--file","id":"b12ae8ba-9718-4c79-a78c-e9272aab878f","meta":{"alt":null,"title":null,"width":1024,"height":1024,"drupal_internal__target_id":164732}},"links":{"related":{"href":"https:\/\/new.drupal.org\/jsonapi\/user\/user\/ddcffd2b-2a0a-466b-95f8-477931743a72\/user_picture"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/user\/user\/ddcffd2b-2a0a-466b-95f8-477931743a72\/relationships\/user_picture"}}}}},{"type":"user--user","id":"33d5f6fe-142c-475b-abf6-656b0c581540","links":{"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/user\/user\/33d5f6fe-142c-475b-abf6-656b0c581540"}},"attributes":{"display_name":"marcus_johansson","drupal_internal__uid":385947,"name":"marcus_johansson","field_country":"DE","field_first_name":"Marcus","field_git_username":"Marcus_Johansson","field_last_name":"Johansson"},"relationships":{"user_picture":{"data":{"type":"file--file","id":"5d85626e-8520-4faa-b638-3b8977d8537e","meta":{"alt":null,"title":null,"width":196,"height":196,"drupal_internal__target_id":746882}},"links":{"related":{"href":"https:\/\/new.drupal.org\/jsonapi\/user\/user\/33d5f6fe-142c-475b-abf6-656b0c581540\/user_picture"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/user\/user\/33d5f6fe-142c-475b-abf6-656b0c581540\/relationships\/user_picture"}}}}},{"type":"user--user","id":"e3e4aacb-139d-4d91-b390-0134be3b5c8b","links":{"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/user\/user\/e3e4aacb-139d-4d91-b390-0134be3b5c8b"}},"attributes":{"display_name":"siteimprove","drupal_internal__uid":3521441,"name":"siteimprove","field_country":"DK","field_first_name":null,"field_git_username":"Siteimprove","field_last_name":null},"relationships":{"user_picture":{"data":{"type":"file--file","id":"5b931b84-56b8-4806-a76b-32d9c190fc11","meta":{"alt":null,"title":null,"width":170,"height":170,"drupal_internal__target_id":756880}},"links":{"related":{"href":"https:\/\/new.drupal.org\/jsonapi\/user\/user\/e3e4aacb-139d-4d91-b390-0134be3b5c8b\/user_picture"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/user\/user\/e3e4aacb-139d-4d91-b390-0134be3b5c8b\/relationships\/user_picture"}}}}},{"type":"user--user","id":"6e717507-c7fd-4d60-96db-688a25ad4b95","links":{"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/user\/user\/6e717507-c7fd-4d60-96db-688a25ad4b95"}},"attributes":{"display_name":"maciej.zgadzaj","drupal_internal__uid":271491,"name":"maciej.zgadzaj","field_country":"FR","field_first_name":null,"field_git_username":"maciej.zgadzaj","field_last_name":null},"relationships":{"user_picture":{"data":{"type":"file--file","id":"30397641-92fd-47f0-ae54-04882ee709f0","meta":{"alt":null,"title":null,"width":180,"height":180,"drupal_internal__target_id":66098}},"links":{"related":{"href":"https:\/\/new.drupal.org\/jsonapi\/user\/user\/6e717507-c7fd-4d60-96db-688a25ad4b95\/user_picture"},"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/user\/user\/6e717507-c7fd-4d60-96db-688a25ad4b95\/relationships\/user_picture"}}}}},{"type":"file--file","id":"6c2cdb38-58d3-43ac-9bb8-8910b4efbc61","links":{"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/file\/file\/6c2cdb38-58d3-43ac-9bb8-8910b4efbc61"}},"attributes":{"uri":{"value":"public:\/\/project-images\/centarro_logo_0.png","url":"\/assets\/project-images\/centarro_logo_0.png"}}},{"type":"file--file","id":"03315b7d-1050-4e55-9447-0ea166a500c3","links":{"self":{"href":"https:\/\/new.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:\/\/new.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":"23da7a06-75a1-4ad7-92d3-d6ce014ef22a","links":{"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/file\/file\/23da7a06-75a1-4ad7-92d3-d6ce014ef22a"}},"attributes":{"uri":{"value":"public:\/\/project-images\/cookies_logo.png","url":"\/assets\/project-images\/cookies_logo.png"}}},{"type":"file--file","id":"0ecd59e5-294c-4e43-b6bc-7478ff7504eb","links":{"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/file\/file\/0ecd59e5-294c-4e43-b6bc-7478ff7504eb"}},"attributes":{"uri":{"value":"public:\/\/project-images\/cookies_layer_3.png","url":"\/assets\/project-images\/cookies_layer_3.png"}}},{"type":"file--file","id":"db94321e-b46f-4314-9162-af10ef79915d","links":{"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/file\/file\/db94321e-b46f-4314-9162-af10ef79915d"}},"attributes":{"uri":{"value":"public:\/\/project-images\/cookies_banner_2.png","url":"\/assets\/project-images\/cookies_banner_2.png"}}},{"type":"file--file","id":"74f8a604-637d-44e5-be91-dd386e14efb2","links":{"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/file\/file\/74f8a604-637d-44e5-be91-dd386e14efb2"}},"attributes":{"uri":{"value":"public:\/\/project-images\/cookies_config.png","url":"\/assets\/project-images\/cookies_config.png"}}},{"type":"file--file","id":"3d440455-66d9-4a82-98a7-8a6f6ec7d789","links":{"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/file\/file\/3d440455-66d9-4a82-98a7-8a6f6ec7d789"}},"attributes":{"uri":{"value":"public:\/\/project-images\/Add_Sitewide_Alert.png","url":"\/assets\/project-images\/Add_Sitewide_Alert.png"}}},{"type":"file--file","id":"8a8c69b7-9ec5-4cf4-9105-e7e1741dc97f","links":{"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/file\/file\/8a8c69b7-9ec5-4cf4-9105-e7e1741dc97f"}},"attributes":{"uri":{"value":"public:\/\/project-images\/sitewide_alert_screenshot2.png","url":"\/assets\/project-images\/sitewide_alert_screenshot2.png"}}},{"type":"file--file","id":"856f3e3d-964d-454e-b781-9992f3c38c53","links":{"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/file\/file\/856f3e3d-964d-454e-b781-9992f3c38c53"}},"attributes":{"uri":{"value":"public:\/\/project-images\/sitewide_alert_screenshot.png","url":"\/assets\/project-images\/sitewide_alert_screenshot.png"}}},{"type":"file--file","id":"9c7f71be-932f-4f85-a060-e88b28c638b0","links":{"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/file\/file\/9c7f71be-932f-4f85-a060-e88b28c638b0"}},"attributes":{"uri":{"value":"public:\/\/project-images\/PayPal-payment-buttons.png","url":"\/assets\/project-images\/PayPal-payment-buttons.png"}}},{"type":"file--file","id":"98f55b60-1b67-411a-bdcf-761c654d3b91","links":{"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/file\/file\/98f55b60-1b67-411a-bdcf-761c654d3b91"}},"attributes":{"uri":{"value":"public:\/\/project-images\/ai_alt_image_text.png","url":"\/assets\/project-images\/ai_alt_image_text.png"}}},{"type":"file--file","id":"daabda23-e2df-41f2-885b-6b3ae2b4eb43","links":{"self":{"href":"https:\/\/new.drupal.org\/jsonapi\/file\/file\/daabda23-e2df-41f2-885b-6b3ae2b4eb43"}},"attributes":{"uri":{"value":"public:\/\/project-images\/siteimprove-cms-plugin-live-page_1.png","url":"\/assets\/project-images\/siteimprove-cms-plugin-live-page_1.png"}}}],"meta":{"count":3695},"links":{"last":{"href":"https:\/\/new.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%5Bvalue%5D%5B1%5D=0cd80c8e-5c20-43a8-aa3e-ec701007d443\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=3684\u0026page%5Blimit%5D=12\u0026include=field_module_categories%2Cfield_maintenance_status%2Cfield_development_status%2Cuid%2Cfield_project_images"},"next":{"href":"https:\/\/new.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%5Bvalue%5D%5B1%5D=0cd80c8e-5c20-43a8-aa3e-ec701007d443\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:\/\/new.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%5Bvalue%5D%5B1%5D=0cd80c8e-5c20-43a8-aa3e-ec701007d443\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"}}}