{"id":395228,"date":"2026-10-29T14:56:31","date_gmt":"2026-10-29T14:56:31","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/novelience-accessible-tabs\/"},"modified":"2026-10-30T18:35:11","modified_gmt":"2026-10-30T18:35:11","slug":"novelience-accessible-tabs","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/novelience-accessible-tabs\/","author":23595553,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.1","stable_tag":"1.2.1","tested":"7.1.4","requires":"6.3","requires_php":"8.2","requires_plugins":null,"header_name":"Novelience Accessible Tabs","header_author":"Novelience","header_description":"Adds keyboard-accessible tabs with server-side rendering and no theme dependency.","assets_banners_color":"","last_updated":"2026-10-30 18:35:11","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/novelience.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":123,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.3.2":{"tag":"0.3.2","author":"novelience","date":"2026-10-29 14:55:55","revision":3773309},"1.2.0":{"tag":"1.2.0","author":"novelience","date":"2026-10-30 17:50:09","revision":3775814},"1.2.1":{"tag":"1.2.1","author":"novelience","date":"2026-10-30 18:35:11","revision":3775871}},"upgrade_notice":[],"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":{"accessible-tabs\/tabs":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"accessible-tabs\/tabs","version":"1.2.1","title":"Novelience Accessible Tabs","category":"design","icon":"index-card","description":"Groups headings and content in keyboard-accessible tabs.","textdomain":"novelience-accessible-tabs","attributes":{"tabs":{"type":"array","default":[{"title":"First tab","content":"Content"}]}},"editorScript":"file:.\/index.js","viewScript":"file:.\/view.js","render":"file:.\/render.php"}},"tagged_versions":["0.3.2","1.2.0","1.2.1"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[1447,1953,1220,148076,2148],"plugin_category":[34],"plugin_contributors":[],"plugin_business_model":[],"class_list":["post-395228","plugin","type-plugin","status-publish","hentry","plugin_tags-a11y","plugin_tags-accessibility","plugin_tags-block","plugin_tags-gutenberg","plugin_tags-tabs","plugin_category-accessibility","plugin_committers-novelience"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/novelience-accessible-tabs.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Novelience Accessible Tabs implements the ARIA tabs pattern while keeping content\nserver-rendered and indexable:<\/p>\n\n<ul>\n<li><code>tablist<\/code>, <code>tab<\/code>, and <code>tabpanel<\/code> roles with matching ARIA relationships.<\/li>\n<li>Arrow, Home, and End keyboard navigation with managed focus.<\/li>\n<li>Dynamic rendering through Block API v3.<\/li>\n<li>No imposed stylesheet or theme dependency.<\/li>\n<li>Filters for tab data and final markup when a project needs custom behavior.<\/li>\n<\/ul>\n\n<p>Developed and maintained by Novelience.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>novelience-accessible-tabs<\/code> folder or install the plugin ZIP.<\/li>\n<li>Activate Novelience Accessible Tabs, then add its block in the editor.<\/li>\n<li>If a private installation already uses Accessible Tabs Block from the\n   accessible-tabs-block folder, deactivate that copy before activating this\none. The block identifier and saved content are unchanged; no database\nmigration or re-creation of existing tabs is needed.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20the%20block%20impose%20visual%20styles%3F\"><h3>Does the block impose visual styles?<\/h3><\/dt>\n<dd><p>No. It provides accessible structure and states; the active theme controls the\nappearance.<\/p><\/dd>\n<dt id=\"does%20the%20content%20remain%20available%20without%20front-end%20javascript%3F\"><h3>Does the content remain available without front-end JavaScript?<\/h3><\/dt>\n<dd><p>Yes. Every panel is rendered on the server. JavaScript enhances the result with\nthe tab interaction.<\/p><\/dd>\n<dt id=\"is%20the%20editor%20available%20in%20french%3F\"><h3>Is the editor available in French?<\/h3><\/dt>\n<dd><p>Yes. The plugin includes French translations for its block label, editor\ncontrols, new-block example text, and server-rendered accessibility label.\nThe editor follows the user's WordPress locale; the public page follows the\nsite locale. Text already saved in a post is never translated by the plugin.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20tabs%20created%20with%20the%20earlier%20private%20plugin%3F\"><h3>What happens to tabs created with the earlier private plugin?<\/h3><\/dt>\n<dd><p>They continue to use <code>accessible-tabs\/tabs<\/code> and retain the same saved content.\nThe public plugin folder and translation domain now use the Novelience name.\nDeactivate the earlier plugin first. If both copies are active, the new copy\nleaves block registration to the earlier one and shows an administrator notice;\nit does not register the block twice or delete content.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Added bundled French translations for block metadata, editor controls, and server-rendered accessibility labels.<\/li>\n<li>New blocks inserted in a French editor start with localized example text; saved block content and the historical English default stay unchanged.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Aligned the release version across the plugin header, block metadata, script assets, and WordPress.org stable tag.<\/li>\n<li>Kept the existing block name, saved attributes, public filters, and server-rendered content; no data migration is required.<\/li>\n<\/ul>\n\n<h4>0.3.2<\/h4>\n\n<ul>\n<li>Branded the plugin and editor block as Novelience Accessible Tabs.<\/li>\n<li>Aligned the public folder, main file and translation domain with <code>novelience-accessible-tabs<\/code>.<\/li>\n<li>Kept the existing block identifier, attributes, filters and front-end script.<\/li>\n<li>Added a safe overlap guard and migration instructions for earlier private installations.<\/li>\n<\/ul>\n\n<h4>0.3.1<\/h4>\n\n<ul>\n<li>The tabs now fold correctly whatever moment the public script is served,\ninstead of showing every panel at once on some WordPress versions.<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>Declared editor dependencies and added translated editor strings.<\/li>\n<li>Added tab removal and documented server-render extension points.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Initial server-rendered ARIA tabs implementation.<\/li>\n<\/ul>","raw_excerpt":"Adds lightweight, server-rendered tabs with complete keyboard navigation and no theme dependency.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/395228","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=395228"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/novelience"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=395228"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=395228"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=395228"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=395228"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=395228"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=395228"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}