{"id":221679,"date":"2025-02-11T05:20:56","date_gmt":"2025-02-11T05:20:56","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/mosne-text-to-speech-block\/"},"modified":"2025-12-07T14:10:26","modified_gmt":"2025-12-07T14:10:26","slug":"mosne-text-to-speech-block","status":"publish","type":"plugin","link":"https:\/\/pcd.wordpress.org\/plugins\/mosne-text-to-speech-block\/","author":5709024,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"0.3.5","stable_tag":"0.3.5","tested":"6.8.5","requires":"6.5","requires_php":"7.4","requires_plugins":null,"header_name":"Mosne Text to Speech Block","header_author":"Mosne","header_description":"Read the content of of a page using native Speech Synthesis and  Interactivity API.","assets_banners_color":"c8c8c8","last_updated":"2025-12-07 14:10:26","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/mosne.it","rating":5,"author_block_rating":0,"active_installs":0,"downloads":966,"num_ratings":1,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.1.1":{"tag":"0.1.1","author":"mosne","date":"2025-02-11 05:20:22"},"0.2.0":{"tag":"0.2.0","author":"mosne","date":"2025-02-23 13:17:44"},"0.3.0":{"tag":"0.3.0","author":"mosne","date":"2025-03-25 22:27:06"},"0.3.1":{"tag":"0.3.1","author":"mosne","date":"2025-03-26 19:40:24"},"0.3.2":{"tag":"0.3.2","author":"mosne","date":"2025-03-28 22:22:48"},"0.3.3":{"tag":"0.3.3","author":"mosne","date":"2025-05-16 14:57:21"},"0.3.4":{"tag":"0.3.4","author":"mosne","date":"2025-10-23 07:57:11"},"0.3.5":{"tag":"0.3.5","author":"mosne","date":"2025-12-07 14:10:26"}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3261818,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3261818,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3261818,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3261818,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":{"mosne\/text-to-speech":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"mosne\/text-to-speech","version":"0.3.4","title":"Text to Speech","category":"widgets","description":"Read the content of of a page using native Speech Synthesis and Interactivity API.","example":{},"supports":{"interactivity":true,"multiple":false,"ariaLabel":true,"align":true,"color":{"gradient":true},"shadow":true,"spacing":{"padding":true,"margin":true,"blockGap":["horizontal","vertical"]},"typography":{"lineHeight":true,"letterSpacing":true,"textTransform":true,"fontFamily":true,"fontWeights":true,"fontStyle":true,"fontSize":true,"textAlign":true},"dimensions":{"aspectRatio":true,"minHeight":true},"position":{"sticky":true},"className":true,"customClassName":true,"anchor":true,"background":{"backgroundSize":true,"backgroundImage":true},"border":{"all":true,"radius":true,"style":true}},"attributes":{"label":{"type":"string"},"classOptions":{"type":"string","default":"has-icon has-label"},"highlightBackground":{"type":"string","default":"#ffeb3b"},"highlightColor":{"type":"string","default":"#000000"},"excludeClass":{"type":"string","default":""}},"textdomain":"mosne-text-to-speech","editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","render":"file:.\/render.php","viewScriptModule":"file:.\/view.js"}},"tagged_versions":["0.1.1","0.2.0","0.3.0","0.3.1","0.3.2","0.3.3","0.3.4","0.3.5"],"block_files":[],"assets_screenshots":{"screenshot-1.gif":{"filename":"screenshot-1.gif","revision":3238289,"resolution":"1","location":"assets","locale":""}},"screenshots":{"1":"Example of the plugin in action"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[1953,452,1220,1448,1449],"plugin_category":[34,50],"plugin_contributors":[228843],"plugin_business_model":[],"class_list":["post-221679","plugin","type-plugin","status-publish","hentry","plugin_tags-accessibility","plugin_tags-audio","plugin_tags-block","plugin_tags-speech","plugin_tags-tts","plugin_category-accessibility","plugin_category-media","plugin_contributors-mosne","plugin_committers-mosne"],"banners":{"banner":"https:\/\/ps.w.org\/mosne-text-to-speech-block\/assets\/banner-772x250.png?rev=3261818","banner_2x":"https:\/\/ps.w.org\/mosne-text-to-speech-block\/assets\/banner-1544x500.png?rev=3261818","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/mosne-text-to-speech-block\/assets\/icon-128x128.png?rev=3261818","icon_2x":"https:\/\/ps.w.org\/mosne-text-to-speech-block\/assets\/icon-256x256.png?rev=3261818","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/mosne-text-to-speech-block\/assets\/screenshot-1.gif?rev=3238289","caption":"Example of the plugin in action"}],"raw_content":"<!--section=description-->\n<p>This is a block that allows you to add a text-to-speech feature to your website.\nUsing the Web Speech API, the plugin will read the content of the page according to the document language and user's preferences.\nNo third-party services are used, so no cookies are required. GDPR-friendly. Accessibility-ready.<\/p>\n\n<h3>Key Features<\/h3>\n\n<ul>\n<li>Listen to the content of a page according to the document language and user's preferences.<\/li>\n<li>(New) Highlight the current sentence being spoken with custom colors.<\/li>\n<li>Skip undesired content by adding the class .skip-speech to the element.<\/li>\n<li>Accessibility-ready<\/li>\n<li>No cookies used (GDPR-friendly)<\/li>\n<li>Performance-optimized and lightweight<\/li>\n<li>No block library required<\/li>\n<li>Primarily built with native WordPress components<\/li>\n<li>Developer-friendly and easy to customize<\/li>\n<\/ul>\n\n<h3>Stay Connected<\/h3>\n\n<ul>\n<li><a href=\"https:\/\/github.com\/mosne\/mosne-text-to-speech-block\">View on GitHub<\/a><\/li>\n<li><a href=\"https:\/\/mosne.it\/\">Visit my website<\/a><\/li>\n<\/ul>\n\n<h3>Credits<\/h3>\n\n<p>The icons of this block come from Heroicons with MIT license\n<a href=\"https:\/\/heroicons.com\/\">heroicons.com<\/a><\/p>\n\n<!--section=installation-->\n<ol>\n<li>You have a couple of options:\n\n<ul>\n<li>Go to Plugins &rarr; Add New and search for \"Mosne text to speech\". Once found, click \"Install\".<\/li>\n<li>Download the Mosne text to speech from wordpress.org and make sure the folder is zipped. Then upload via Plugins &rarr; Add New &rarr; Upload.<\/li>\n<\/ul><\/li>\n<li>Activate the plugin through the 'Plugins' screen on WordPress.<\/li>\n<li>Search for the \"Mosne text to speech\" block within the Block Editor (Gutenberg) and add it to a block navigation.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id='can%20i%20skip%20some%20content%3F'><h3>Can I skip some content?<\/h3><\/dt>\n<dd><p>You can skip some content by adding the class <code>.skip-speech<\/code> to the element.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.3.5 - 2025-12-30<\/h4>\n\n<ul>\n<li>Comprehensive security improvements<\/li>\n<li>Input validation for all user inputs<\/li>\n<li>Content sanitization for all text processing<\/li>\n<li>Secure localStorage operations with validation<\/li>\n<li>Enhanced error handling that doesn't expose sensitive information<\/li>\n<li>Fixed class exclusion filter functionality<\/li>\n<\/ul>\n\n<h4>0.3.4 - 2025-10-23<\/h4>\n\n<ul>\n<li>Fix A11y issues on svg icons<\/li>\n<li>Fix hidden buttons styles<\/li>\n<li>Fix block support declaration issue<\/li>\n<\/ul>\n\n<h4>0.3.3 - 2025-05-16<\/h4>\n\n<ul>\n<li>Fix selected text highlighting after pause and button flex wrap on mobile<\/li>\n<\/ul>\n\n<h4>0.3.2 - 2025-03-28<\/h4>\n\n<ul>\n<li>Complete refactor and bug fix<\/li>\n<\/ul>\n\n<h4>0.3.1 - 2025-03-26<\/h4>\n\n<ul>\n<li>Minor bug fix<\/li>\n<\/ul>\n\n<h4>0.3.0 - 2025-03-25<\/h4>\n\n<ul>\n<li>Added a new custom skip classes field <\/li>\n<li>Fix compatibility issues with Firefox and Android.<\/li>\n<li>Improved performance<\/li>\n<\/ul>\n\n<h4>0.1.1 - 2025-02-05<\/h4>\n\n<ul>\n<li>Fix security issue<\/li>\n<\/ul>\n\n<h4>0.1.0 - 2025-02-01<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<\/ul>","raw_excerpt":"Read the content of a page using native Speech Synthesis and Interactivity API.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/221679","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=221679"}],"author":[{"embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/mosne"}],"wp:attachment":[{"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=221679"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=221679"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=221679"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=221679"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=221679"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=221679"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}