[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fSf7s5bjCY8PDbKsD8kFzXgwodZ9N9UT-ENzqBaTgsBw":3,"$fQcJVzp5wank5Iw3H_DUugCXGAx3E6sIhV5mv0JEz3Qg":205,"$fA5l1KlVZDkSRqlgKmjBAYgA0EMqRLD6Z8gwbK9lVmJw":210},{"slug":4,"name":5,"version":6,"author":7,"author_profile":8,"description":9,"short_description":10,"active_installs":11,"downloaded":12,"rating":11,"num_ratings":11,"last_updated":13,"tested_up_to":14,"requires_at_least":15,"requires_php":16,"tags":17,"homepage":23,"download_link":24,"security_score":25,"vuln_count":11,"unpatched_count":11,"last_vuln_date":26,"fetched_at":27,"discovery_status":28,"vulnerabilities":29,"developer":30,"crawl_stats":26,"alternatives":36,"analysis":139,"fingerprints":182},"roaver-widget","Roaver Widget","1.09","Joshua Graham","https:\u002F\u002Fprofiles.wordpress.org\u002Fjoshuaroaver\u002F","\u003Cp>You can be renting campervans and cars today! The Roaver Widget plugin allows you to seamlessly add your Roaver integration directly into your WordPress site. This relies on you having a \u003Ca href=\"https:\u002F\u002Fwww.roaver.com.au\" rel=\"nofollow ugc\">Roaver\u003C\u002Fa> account. Configure and display widgets by using drag & drop blocks or entering shortcodes.\u003C\u002Fp>\n\u003Cp>If you do not have a Roaver account, \u003Ca href=\"https:\u002F\u002Fwww.roaver.com.au\u002Fcontact\" rel=\"nofollow ugc\">get in touch\u003C\u002Fa>!\u003C\u002Fp>\n\u003Ch3>Usage\u003C\u002Fh3>\n\u003Ch4>Using Shortcode\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Insert \u003Ccode>[roaver_widget widget_type=\"search\" element_id=\"custom_id\" locale=\"en\"]\u003C\u002Fcode> in posts or pages.\u003C\u002Fli>\n\u003Cli>Attributes:\n\u003Cul>\n\u003Cli>\u003Ccode>widget_type\u003C\u002Fcode>: Specify ‘search’ or ‘book’.\u003C\u002Fli>\n\u003Cli>\u003Ccode>element_id\u003C\u002Fcode>: Unique ID for the widget container.\u003C\u002Fli>\n\u003Cli>\u003Ccode>locale\u003C\u002Fcode>: Optional two-letter locale code. If not provided, the browser language will be used.\u003C\u002Fli>\n\u003Cli>\u003Ccode>scroll_offset\u003C\u002Fcode>: Optional integer between 0 and 1000.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Using Gutenberg Block\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Add the Roaver Widget block from the ‘EMBEDS’ category in the block editor.\u003C\u002Fli>\n\u003Cli>Configure widget type, element ID, locale, and scroll offset via the block inspector controls.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>External services\u003C\u002Fh3>\n\u003Cp>This plugin connects to an API to fetch live search results, create quotes and fulfill bookings for customers visiting your site.\u003C\u002Fp>\n\u003Cp>Visitor sessions initiated when the widget is initialized and may include browser locale and timezone to ensure relevant information. Customer interactions with the Roaver widget are relayed to the Roaver service to serve live search results, create quotes and complete bookings. We do not collect information for marketing and do not sell customer data.\u003C\u002Fp>\n\u003Cp>Cookies are not used for this service, instead a secure session ID identifies customers and is sent within API requests.\u003C\u002Fp>\n\u003Cp>This service is provided by “Roaver Pty Ltd”: \u003Ca href=\"https:\u002F\u002Fwww.roaver.com.au\u002Fterms\" rel=\"nofollow ugc\">terms of use\u003C\u002Fa>, \u003Ca href=\"https:\u002F\u002Fwww.roaver.com.au\u002Fprivacy\" rel=\"nofollow ugc\">privacy policy\u003C\u002Fa>.Ensure your WordPress installation is compatible with the block editor for the best experience with this plugin.\u003C\u002Fp>\n","A simple Roaver widget integration enabling the renting of cars and campervans through your WordPress site.",0,625,"2025-03-27T00:22:00.000Z","6.7.5","5.0","7.0",[18,19,20,21,22],"block","embeds","roaver","shortcode","widget","","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Froaver-widget.1.09.zip",92,null,"2026-07-22T17:31:50.256Z","no_bundle",[],{"slug":31,"display_name":7,"profile_url":8,"plugin_count":32,"total_installs":11,"avg_security_score":25,"avg_patch_time_days":33,"trust_score":34,"computed_at":35},"joshuaroaver",1,30,88,"2026-08-29T02:50:26.353Z",[37,59,81,102,122],{"slug":38,"name":39,"version":40,"author":41,"author_profile":42,"description":43,"short_description":44,"active_installs":45,"downloaded":46,"rating":47,"num_ratings":48,"last_updated":49,"tested_up_to":50,"requires_at_least":15,"requires_php":16,"tags":51,"homepage":55,"download_link":56,"security_score":57,"vuln_count":32,"unpatched_count":11,"last_vuln_date":58,"fetched_at":27},"reusable-blocks-extended","Reusable Blocks Extended","0.9.1","Jb Audras","https:\u002F\u002Fprofiles.wordpress.org\u002Faudrasjb\u002F","\u003Cp>Extend Gutenberg Reusable Blocks feature with a complete admin panel, widgets, shortcodes and PHP functions.\u003C\u002Fp>\n\u003Cp>This plugin extends the Reusable Blocks admin interface and provides few fancy features:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Add Reusable Blocks dashboard informations\u003C\u002Fli>\n\u003Cli>Activate Reusable Blocks admin screen\u003C\u002Fli>\n\u003Cli>Provide a list of Posts where each Reusable Block is used and the date it was last modified\u003C\u002Fli>\n\u003Cli>Provide a \u003Cstrong>live preview of your reusable blocks\u003C\u002Fstrong> from the Reusable Blocks admin screen, with your theme stylesheets\u003C\u002Fli>\n\u003Cli>Provide a Reusable Blocks Widget to use your block anywhere you want in your theme’s widgets areas\u003C\u002Fli>\n\u003Cli>Provide a Reusable Blocks Shortcode to use your block anywhere you want in your Post types (even if they use the Classic Editor rather than Gutenberg!)\u003C\u002Fli>\n\u003Cli>\n\u003Cp>Provide some Reusable Blocks PHP functions to use your block anywhere you want in your theme even\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>NEW: An easy tool to convert reusable blocks to block patterns in one click!\u003C\u002Fp>\n\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>For a full presentation of Reusable Blocks Extended, see this \u003Ca href=\"https:\u002F\u002Fjeanbaptisteaudras.com\u002Fen\u002F2019\u002F12\u002Fgutenberg-reusable-blocks-wordcamp-marseille-talk-synthesis\u002F\" rel=\"nofollow ugc\">WordCamp Talk synthesis available on my blog\u003C\u002Fa>.\u003C\u002Fp>\n","Extend Gutenberg Reusable Blocks feature with a complete admin panel, widgets, shortcodes and PHP functions.",20000,112410,96,40,"2025-11-27T08:57:00.000Z","6.9.5",[52,53,54,21,22],"blocks","pattern","reusable","https:\u002F\u002Fjeanbaptisteaudras.com\u002Fen\u002F2019\u002F09\u002Freusable-block-extended-a-cool-wordpress-plugin-to-extend-gutenberg-reusable-block-feature\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Freusable-blocks-extended.0.9.1.zip",100,"2023-03-13 00:00:00",{"slug":60,"name":61,"version":62,"author":63,"author_profile":64,"description":65,"short_description":66,"active_installs":67,"downloaded":68,"rating":69,"num_ratings":70,"last_updated":71,"tested_up_to":72,"requires_at_least":73,"requires_php":23,"tags":74,"homepage":77,"download_link":78,"security_score":25,"vuln_count":79,"unpatched_count":11,"last_vuln_date":80,"fetched_at":27},"custom-post-widget","Content Blocks (Custom Post Widget)","3.4.3","Johan van der Wijk","https:\u002F\u002Fprofiles.wordpress.org\u002Fvanderwijk\u002F","\u003Cp>The \u003Ca href=\"http:\u002F\u002Fwww.vanderwijk.com\u002Fwordpress\u002Fwordpress-custom-post-widget\u002F?utm_source=wordpress&utm_medium=website&utm_campaign=custom_post_widget\" rel=\"nofollow ugc\">Content Blocks\u003C\u002Fa> allows you to display the contents of a specific custom post in a widget on in the content area using a shortcode.\u003C\u002Fp>\n\u003Cp>Even though you could use the text widget that comes with the default WordPress install, this plugin has some major benefits:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>The Content Blocks plugin enables users to \u003Cstrong>use the WYSIWYG editor\u003C\u002Fstrong> for editing the content and adding images.\u003C\u002Fli>\n\u003Cli>If you are using the standard WordPress text widgets to display content on various areas of your template, this content can only be edited by users with administrator access. If you would like \u003Cstrong>non-administrator accounts to modify the widget content\u003C\u002Fstrong>, you can use this plugin to provide them access to the custom posts that provide the content for the widget areas.\u003C\u002Fli>\n\u003Cli>You can even use the \u003Cstrong>featured image functionality\u003C\u002Fstrong> to display them in a widget.\u003C\u002Fli>\n\u003Cli>The Content Blocks plugin is \u003Cstrong>compatible with the WPML\u003C\u002Fstrong> Multi-Language plugin and automatically shows the correct language in the widget area.\u003C\u002Fli>\n\u003Cli>The Content Blocks can be included in posts and pages using the \u003Cstrong>built-in shortcode functionality\u003C\u002Fstrong>.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>This plugin creates a ‘content_block’ custom post type. You can choose to either display the title on the page or use it to describe the contents and widget position of the content block. Note that these content blocks can only be displayed in the context of the page. I have added ‘public’ => false to the custom post type which means that it is not accessible outside the page context.\u003C\u002Fp>\n\u003Cp>To add content to a widget, drag it to the required position in the sidebar and select the title of the custom post in the widget configuration.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Includes the following translations:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Swedish (sv_SE) by \u003Ca href=\"http:\u002F\u002Fkrokedil.se\" rel=\"nofollow ugc\">Andreas Larsson\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>Spanish (es_ES) by \u003Ca href=\"https:\u002F\u002Fwww.ibidemgroup.com\" rel=\"nofollow ugc\">IBIDEM GROUP\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>Portuguese (pt_BR) by Ronaldo Chevalier\u003C\u002Fli>\n\u003Cli>Polish (pl_PL) by Kuba Skublicki\u003C\u002Fli>\n\u003Cli>Dutch (nl_NL) by \u003Ca href=\"https:\u002F\u002Fvanderwijk.nl\" rel=\"nofollow ugc\">Johan van der Wijk\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>Czech (cs_CZ) by \u003Ca href=\"http:\u002F\u002Fjsemweb.cz\u002F\" rel=\"nofollow ugc\">Martin Kucera\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Ftranslate.wordpress.org\u002Fprojects\u002Fwp-plugins\u002Fcustom-post-widget\" rel=\"nofollow ugc\">More translations are very welcome!\u003C\u002Fa>\u003C\u002Fp>\n","This plugin enables you to edit and display Content Blocks in a sidebar widget or using a shortcode.",10000,743246,98,80,"2026-07-22T11:53:00.000Z","7.0.2","4.6",[18,75,76,21,22],"content-block","custom-post","https:\u002F\u002Fvanderwijk.com\u002Fwordpress\u002Fwordpress-custom-post-widget\u002F?utm_source=wordpress&utm_medium=plugin&utm_campaign=custom_post_widget","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fcustom-post-widget.3.4.3.zip",6,"2026-04-17 21:21:37",{"slug":82,"name":83,"version":84,"author":85,"author_profile":86,"description":87,"short_description":88,"active_installs":89,"downloaded":90,"rating":47,"num_ratings":91,"last_updated":92,"tested_up_to":93,"requires_at_least":94,"requires_php":23,"tags":95,"homepage":98,"download_link":99,"security_score":100,"vuln_count":32,"unpatched_count":11,"last_vuln_date":101,"fetched_at":27},"list-last-changes","List Last Changes","1.2.3","rbaer","https:\u002F\u002Fprofiles.wordpress.org\u002Frbaer\u002F","\u003Cp>Shows a list of the last changes in the widget area, via shortcode or in the gutenberg block editor.\u003Cbr \u002F>\nThis can include changed pages and\u002For posts (configurable).\u003C\u002Fp>\n\u003Cp>Additional features include:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Select the number of entries in the list\u003C\u002Fli>\n\u003Cli>Define pages to be excluded\u003C\u002Fli>\n\u003Cli>Show the author or the last editor of the page\u002Fpost\u003C\u002Fli>\n\u003Cli>Select and order by date modified or date published\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Exclude page or post\u003C\u002Fh4>\n\u003Cp>To exclude a page or post from being listed in the widget do the following steps:\u003C\u002Fp>\n\u003Col>\n\u003Cli>Open the page or post you want to exclude for editing.\u003C\u002Fli>\n\u003Cli>Open the “Screen Options” (on the top right of the page)\u003C\u002Fli>\n\u003Cli>Ensure that “Custom Fields” is checked (see Screenshot #3)\u003C\u002Fli>\n\u003Cli>In the “Custom Fields” further down the screen add the following custom field (see Screenshot #4):\n\u003Cul>\n\u003Cli>name: list_last_changes_ignore\u003C\u002Fli>\n\u003Cli>value: true\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>To include it again set the value to false or remove the custom field completely.\u003C\u002Fp>\n\u003Ch4>Block Editor (Gutenberg)\u003C\u002Fh4>\n\u003Cp>The block can be found in Widgets -> List Last Changes.\u003Cbr \u002F>\nThe block can be configured in the block settings (panel on the right side)\u003C\u002Fp>\n\u003Cp>In difference to the widget, with the block no title is written. If a title is needed it has to be defined in an own block in front of the List Last Changes block.\u003C\u002Fp>\n\u003Ch4>Shortcode\u003C\u002Fh4>\n\u003Cp>To show the list of the last changes via shortcode use the following syntax:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>[list_last_changes number='7' showpages='true' showposts='true' showauthor='false' usedatepublished='true' template='{title} {change_date} {author}' \u002F]\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>The attribute ‘number’ defines the number of entries shown.\u003Cbr \u002F>\nWith the attributes ‘showpages’ and ‘showposts’ changed pages and\u002For posts are included.\u003Cbr \u002F>\nTo show also the author set the attribute ‘showauthor’ to true (deprecated, use template mechanism instead).\u003Cbr \u002F>\nWith the attribute ‘usedatepublished’ set to ‘true’ the date when the page or post was first published, if set to ‘false’ (or not set at all) the date the page or post was modified is used.\u003Cbr \u002F>\nThe ‘template’ attribute defines the content of the entries. If the ‘template’ attribute is defined the attribute ‘showauthor’ is ignored.\u003C\u002Fp>\n\u003Cp>In difference to the widget, with the shortcode no title is written. If a title is needed it has to be defined by hand in front of the shortcode.\u003C\u002Fp>\n\u003Ch4>Templates\u003C\u002Fh4>\n\u003Cp>In the template string the following fields can be used: {title}, {change_date}, {published_date}, {author} and {editor}.\u003Cbr \u002F>\n{title} : the title of the page or post with a link to it\u003Cbr \u002F>\n{change_date} or {change_date[format]} : the date the page or post was changed (“modified date”)\u003Cbr \u002F>\n{published_date} or {published_date[format]} : the date the page or post was published (“post date”)\u003Cbr \u002F>\n{author} : the author of the page or post\u003Cbr \u002F>\n{editor} : the last editor of the page or post\u003C\u002Fp>\n\u003Cp>With the optional [format] the date format of change_date and published_date can be defined. The date format is in the php date formatting.\u003Cbr \u002F>\nWithout definition the wordpress system date format is used.\u003C\u002Fp>\n\u003Cp>Sample templates:\u003Cbr \u002F>\n{title} {change_date} : the default template\u003Cbr \u002F>\n{title} {change_date[Y-m-d H:i]} : like the default template but with date and time defined by the given format\u003Cbr \u002F>\n{title} {change_date} {author} : behaves as in versions before 0.9 when show author was enabled\u003Cbr \u002F>\n{change_date} : shows only the change_date, can be used with number = 1 as last modified date of a WordPress Site\u003C\u002Fp>\n","Shows a list of the last changes of a WordPress site.",1000,21960,10,"2025-04-25T18:15:00.000Z","6.8.6","4.6.0",[96,97,21,22],"block-editor","last-changes","http:\u002F\u002Fwww.rolandbaer.ch\u002Fsoftware\u002Fwordpress\u002Fplugin-last-changes\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Flist-last-changes.1.2.3.zip",91,"2025-04-22 00:00:00",{"slug":103,"name":104,"version":105,"author":106,"author_profile":107,"description":108,"short_description":109,"active_installs":110,"downloaded":111,"rating":70,"num_ratings":112,"last_updated":113,"tested_up_to":72,"requires_at_least":114,"requires_php":115,"tags":116,"homepage":119,"download_link":120,"security_score":57,"vuln_count":32,"unpatched_count":11,"last_vuln_date":121,"fetched_at":27},"simple-ticker","Simple Ticker","3.11","Katsushi Kawamori","https:\u002F\u002Fprofiles.wordpress.org\u002Fkatsushi-kawamori\u002F","\u003Ch4>Displays the ticker.\u003C\u002Fh4>\n\u003Cp>It can display three own ticker.\u003Cbr \u002F>\nIt can view the Sticky Posts as ticker.\u003Cbr \u002F>\nIt can view the WooCommerce sale as ticker.\u003Cbr \u002F>\nIt supports the display of the widget and the short code and block.\u003C\u002Fp>\n\u003Ch4>Filter hooks\u003C\u002Fh4>\n\u003Cpre>\u003Ccode>\u002F** ==================================================\n * Filter for Inner text.\n * simple_ticker_1_inner_text\n * simple_ticker_2_inner_text\n * simple_ticker_3_inner_text\n *\n * @param $text1  Inner text.\n * @param $post_id  Post ID.\n *\n *\u002F\nadd_filter(\n    'simple_ticker_1_inner_text', \n    function( $text1, $post_id ) {\n\n        if ( 3309 == $post_id ) {\n            $change  = 'Test';\n            $changed = '\u003Cspan style=\"color: #329BCB\">' . esc_attr( $change ) . '\u003C\u002Fspan>';\n            $text1 = str_replace( $change, $changed, $text1 );\n        }\n\n        return $text1;\n    },\n    10,\n    2\n);\n\u003C\u002Fcode>\u003C\u002Fpre>\n","Displays the ticker.",500,12410,4,"2026-03-29T22:01:00.000Z","6.6","8.0",[18,21,117,22,118],"ticker","woocommerce","https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fsimple-ticker\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fsimple-ticker.3.11.zip","2023-08-02 00:00:00",{"slug":123,"name":124,"version":125,"author":126,"author_profile":127,"description":128,"short_description":129,"active_installs":130,"downloaded":131,"rating":11,"num_ratings":11,"last_updated":132,"tested_up_to":72,"requires_at_least":133,"requires_php":134,"tags":135,"homepage":23,"download_link":138,"security_score":57,"vuln_count":11,"unpatched_count":11,"last_vuln_date":26,"fetched_at":27},"spelhubben-weather","Spelhubben Weather","2.1.2","Kenta Mattsson","https:\u002F\u002Fprofiles.wordpress.org\u002Fspelhubben\u002F","\u003Cp>This plugin displays current weather and an optional forecast. It can aggregate data from free global weather providers (Open-Meteo, SMHI, Yr\u002FMET Norway, MET Norway Nowcast, FMI, OpenWeatherMap, and WeatherAPI.com) and compute a simple consensus. Works worldwide with excellent coverage in Europe and beyond.\u003C\u002Fp>\n\u003Ch3>License\u003C\u002Fh3>\n\u003Cp>This program is free software; you can redistribute it and\u002For modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.\u003C\u002Fp>\n\u003Cp>Full license text is included in the \u003Ccode>LICENSE\u003C\u002Fcode> file in the plugin root.\u003C\u002Fp>\n\u003Ch3>Feedback & Bug Reports\u003C\u002Fh3>\n\u003Cp>Feedback and bug reports can be posted here: https:\u002F\u002Fgithub.com\u002FK3NT4\u002Fspelhubben-weather\u002Fissues\u003Cbr \u002F>\nFor common questions see the FAQ: https:\u002F\u002Fgithub.com\u002FK3NT4\u002Fspelhubben-weather\u002Fblob\u002Fmain\u002FDocs\u002FFAQ.md\u003Cbr \u002F>\nFor Roadmap: https:\u002F\u002Fgithub.com\u002Fusers\u002FK3NT4\u002Fprojects\u002F2\u003C\u002Fp>\n\u003Cp>Weather widget & block with optional map and daily forecast. Can combine Open-Meteo, SMHI, Yr\u002FMET, MET Norway Nowcast, FMI, OpenWeatherMap, and WeatherAPI.com data.\u003C\u002Fp>\n\u003Ch3>Translations\u003C\u002Fh3>\n\u003Cp>The plugin is \u003Cstrong>fully translatable\u003C\u002Fstrong> and includes built-in translations for \u003Cstrong>Swedish (sv_SE)\u003C\u002Fstrong> and \u003Cstrong>Norwegian Bokmål (nb_NO)\u003C\u002Fstrong>.\u003C\u002Fp>\n\u003Ch3>How to translate the plugin\u003C\u002Fh3>\n\u003Cp>\u003Cstrong>Option 1: Contribute to translate.wordpress.org (recommended)\u003C\u002Fstrong>\u003Cbr \u002F>\n– Visit \u003Ca href=\"https:\u002F\u002Ftranslate.wordpress.org\u002Fprojects\u002Fwp-plugins\u002Fspelhubben-weather\u002F\" rel=\"nofollow ugc\">translate.wordpress.org\u003C\u002Fa>\u003Cbr \u002F>\n– Select your language and add translations via the browser interface\u003Cbr \u002F>\n– Your translations will automatically be included in future releases\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Option 2: Local translation files\u003C\u002Fstrong>\u003Cbr \u002F>\nIf you need to add or modify translations locally:\u003C\u002Fp>\n\u003Col>\n\u003Cli>\n\u003Cp>\u003Cstrong>Generate or update the POT file\u003C\u002Fstrong> (translation template):\u003Cbr \u002F>\n   \u003Ccode>wp i18n make-pot . languages\u002Fspelhubben-weather.pot --slug=spelhubben-weather\u003C\u002Fcode>\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cstrong>Create a PO file for your language\u003C\u002Fstrong> (e.g., \u003Ccode>spelhubben-weather-de_DE.po\u003C\u002Fcode>):\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Copy the \u003Ccode>.pot\u003C\u002Fcode> file and rename to match your locale (e.g., \u003Ccode>de_DE\u003C\u002Fcode>)\u003C\u002Fli>\n\u003Cli>Use a translation tool like \u003Ca href=\"https:\u002F\u002Fpoedit.net\u002F\" rel=\"nofollow ugc\">Poedit\u003C\u002Fa> or a text editor\u003C\u002Fli>\n\u003Cli>Translate all strings in the PO file\u003C\u002Fli>\n\u003Cli>Save the file as \u003Ccode>spelhubben-weather-de_DE.po\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cstrong>Generate the MO file\u003C\u002Fstrong> (compiled binary format):\u003Cbr \u002F>\n   \u003Ccode>msgfmt spelhubben-weather-de_DE.po -o spelhubben-weather-de_DE.mo\u003C\u002Fcode>\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cstrong>Place files in the plugin\u003C\u002Fstrong>:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Store both \u003Ccode>.po\u003C\u002Fcode> and \u003Ccode>.mo\u003C\u002Fcode> files in \u003Ccode>\u002Flanguages\u002F\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>If you bundle translations with the plugin, also keep generated \u003Ccode>.l10n.php\u003C\u002Fcode> files and block editor JSON files in sync with the PO\u002FMO files.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cstrong>Activate your translation\u003C\u002Fstrong>:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Change your WordPress language to match the locale code (Settings \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> General \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> Site Language)\u003C\u002Fli>\n\u003Cli>The plugin will automatically load the translated strings\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>\u003Cstrong>Translation file structure\u003C\u002Fstrong>:\u003Cbr \u002F>\n    \u003Ccode>languages\u002F\u003Cbr \u002F>\n  spelhubben-weather.pot          (template for all translations)\u003Cbr \u002F>\n  spelhubben-weather-sv_SE.po    (Swedish source text)\u003Cbr \u002F>\n  spelhubben-weather-sv_SE.mo    (Swedish compiled)\u003Cbr \u002F>\n  spelhubben-weather-sv_SE.l10n.php\u003Cbr \u002F>\n  spelhubben-weather-nb_NO.po    (Norwegian source text)\u003Cbr \u002F>\n  spelhubben-weather-nb_NO.mo    (Norwegian compiled)\u003Cbr \u002F>\n  spelhubben-weather-nb_NO.l10n.php\u003C\u002Fcode>\u003C\u002Fp>\n\u003Cp>\u003Cstrong>What gets translated\u003C\u002Fstrong>:\u003Cbr \u002F>\n– All frontend strings (shortcode output, widget labels, weather descriptions, WMO codes)\u003Cbr \u002F>\n– Admin settings and UI labels\u003Cbr \u002F>\n– JavaScript strings (expand\u002Fcollapse, status messages)\u003Cbr \u002F>\n– Error messages and notices\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Best practices\u003C\u002Fstrong>:\u003Cbr \u002F>\n– Use context clues in the POT file (\u003Ccode>msgctxt\u003C\u002Fcode>) to distinguish similar phrases\u003Cbr \u002F>\n– Test your translation in WordPress to ensure formatting and plurals work correctly\u003Cbr \u002F>\n– Check that translated UI aligns properly in your language (RTL vs LTR)\u003C\u002Fp>\n\u003Ch3>Older Changelog\u003C\u002Fh3>\n\u003Ch4>2.0.0\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>FIX: Leaflet map now loads correctly on paginated, archive and guest pages where the global \u003Ccode>$post\u003C\u002Fcode> may be unavailable. Asset loader now scans the main query for shortcodes\u002Fblocks and enqueues Leaflet assets accordingly.\u003C\u002Fli>\n\u003Cli>CHANGE: Bumped version to 2.0.0.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>1.9.9\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>\n\u003Cp>FIX: Leaflet\u002Fmap is now displayed correctly even for guests and special pages where $post is not set (fallback to get_queried_object()).\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>= 1.9.8 =\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Fixed:\u003C\u002Fstrong> Fixed an issue where the Leaflet map could fail to load on live\u002Foptimized sites due to script handle conflicts with themes or other plugins.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Improved:\u003C\u002Fstrong> Renamed Leaflet asset handles to unique, plugin-specific names to prevent collisions and ensure correct dependency resolution.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Improved:\u003C\u002Fstrong> Removed forced defer handling for Leaflet\u002Fmap scripts to avoid broken load order when caching\u002Foptimization plugins are active.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Improved:\u003C\u002Fstrong> Improved map initialization logic to prevent infinite retry loops and reduce console spam when Leaflet isn’t available.\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cstrong>Improved:\u003C\u002Fstrong> Kept Leaflet\u002Fmap assets conditionally loaded only on pages where the widget\u002Fblock\u002Fshortcode is actually rendered.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>= 1.9.7 =\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cstrong>Experimental:\u003C\u002Fstrong> Tide support added for testing — opt-in feature. Adds support for WorldTides (API key), NOAA (US-only), and a configurable custom endpoint. Shortcode support via \u003Ccode>extras=\"tides\"\u003C\u002Fcode> or \u003Ccode>tides=\"1\"\u003C\u002Fcode>. Admin visibility can be toggled while rolling out to selected users. Responses are cached; configure TTL in Settings.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>= 1.9.5 =\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cstrong>New:\u003C\u002Fstrong> Moon phase support via \u003Ccode>extras=\"moon\"\u003C\u002Fcode> and daily moon information via \u003Ccode>extras=\"moon_daily\"\u003C\u002Fcode>.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>= 1.9.4 =\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cstrong>Fixed:\u003C\u002Fstrong> Wind direction cardinal calculation and arrow rotation; ensured text-domain i18n call fixed for VC integration; asset sanitization workaround for wind arrow rotation (data-deg + frontend JS).\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>= 1.9.3 =\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\u003Cstrong>New:\u003C\u002Fstrong> \u003Ccode>wind_unit\u003C\u002Fcode> override in Block inspector, Widget settings and Shortcodes Quick Builder.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Improved:\u003C\u002Fstrong> \u003Ccode>metric_knt\u003C\u002Fcode> preset for metric display with knots.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Fixed:\u003C\u002Fstrong> Wind direction arrow rotation corrected to match compass degrees.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Fixed:\u003C\u002Fstrong> Shortcode \u003Ccode>wind_unit\u003C\u002Fcode> reliably overrides resolved units and renderer emits \u003Ccode>data-svv-wind-unit\u003C\u002Fcode> for debugging.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Fixed:\u003C\u002Fstrong> Alert threshold comparisons now converted into display units to avoid false alerts.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Fixed:\u003C\u002Fstrong> PHP parse error in admin page resolved.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Changed:\u003C\u002Fstrong> Plugin version bumped to 1.9.3; readme stable tag updated.\u003C\u002Fli>\n\u003Cli>= 1.9.2 =\u003C\u002Fli>\n\u003Cli>\u003Cstrong>New:\u003C\u002Fstrong> Shortcode\u002FBlock\u002FWidget \u003Ccode>theme\u003C\u002Fcode> attribute — \u003Ccode>theme=\"auto|light|dark\"\u003C\u002Fcode> to force UI theme per instance (default \u003Ccode>auto\u003C\u002Fcode>).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>New:\u003C\u002Fstrong> Quick Builder theme selector in admin Shortcodes page; example shortcode added.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Improved:\u003C\u002Fstrong> Renderer emits \u003Ccode>data-svv-theme\u003C\u002Fcode> and \u003Ccode>svv-theme-\u003Cvalue>\u003C\u002Fcode> class for easier CSS targeting.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Improved:\u003C\u002Fstrong> Frontend CSS and map styling — darker Leaflet tiles in dark theme and darker alert box styles for better contrast.\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cstrong>Changed:\u003C\u002Fstrong> Admin JS updated to include \u003Ccode>theme\u003C\u002Fcode> when generating shortcodes; docs updated across readmes.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>= 1.9.0 =\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\u003Cstrong>New:\u003C\u002Fstrong> Weather Alerts system with smart recommendations for extreme conditions\u003C\u002Fli>\n\u003Cli>\u003Cstrong>New:\u003C\u002Fstrong> Storm Warning alert for wind speeds exceeding 24.5 m\u002Fs\u003C\u002Fli>\n\u003Cli>\u003Cstrong>New:\u003C\u002Fstrong> Settings Export & Import feature for easy configuration management\u003C\u002Fli>\n\u003Cli>\u003Cstrong>New:\u003C\u002Fstrong> Performance Dashboard to track API usage, cache efficiency, and response times\u003C\u002Fli>\n\u003Cli>\u003Cstrong>New:\u003C\u002Fstrong> Full Dark Mode support for all frontend and admin interfaces\u003C\u002Fli>\n\u003Cli>\u003Cstrong>New:\u003C\u002Fstrong> 3 Gutenberg Block Patterns (Compact, Detailed, Forecast)\u003C\u002Fli>\n\u003Cli>\u003Cstrong>New:\u003C\u002Fstrong> Alert toggles for Blocks, Widgets, and Shortcodes\u003C\u002Fli>\n\u003Cli>\u003Cstrong>New:\u003C\u002Fstrong> Wind direction display (\u003Ccode>wind_dir\u003C\u002Fcode>) — rotated arrow + cardinal labels (optional via \u003Ccode>show=wind_dir\u003C\u002Fcode>)\u003C\u002Fli>\n\u003Cli>\u003Cstrong>New:\u003C\u002Fstrong> Shortcode Quick Builder in admin \u003Cstrong>Shortcodes\u003C\u002Fstrong> page with selectable options, one-click copy and live preview\n\u003Cul>\n\u003Cli>\u003Cstrong>New:\u003C\u002Fstrong> Rotating Tips panel on the Settings page with contextual admin tips (Shortcodes, Alerts, Performance)\u003C\u002Fli>\n\u003Cli>\u003Cstrong>New:\u003C\u002Fstrong> Compact action buttons in the Tips panel for quick access to Shortcodes, Alerts and Performance\u003C\u002Fli>\n\u003Cli>\u003Cstrong>New:\u003C\u002Fstrong> “Reset to defaults” button on the Settings page (nonce-protected) to restore plugin defaults\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Improved:\u003C\u002Fstrong> Tips text is translation-ready, rotates more slowly for readability (15s), and uses \u003Ccode>aria-live\u003C\u002Fcode> for accessibility\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Improved:\u003C\u002Fstrong> \u003Ccode>animate\u003C\u002Fcode> attribute parsing is more tolerant (accepts \u003Ccode>1\u003C\u002Fcode>, \u003Ccode>true\u003C\u002Fcode>, \u003Ccode>yes\u003C\u002Fcode>, \u003Ccode>on\u003C\u002Fcode>)\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Improved:\u003C\u002Fstrong> Full English translation and i18n readiness (English is now the base language)\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Improved:\u003C\u002Fstrong> Refined alert thresholds based on meteorological standards\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>1.8.6\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>\u003Cstrong>Fixed:\u003C\u002Fstrong> Map not rendering in widgets due to missing Leaflet asset detection\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Fixed:\u003C\u002Fstrong> Block name mismatch (\u003Ccode>spelhubben\u002Fweather\u003C\u002Fcode> \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> \u003Ccode>spelhubben-weather\u002Fspelhubben-weather\u003C\u002Fcode>) preventing proper asset enqueuing\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Improved:\u003C\u002Fstrong> Enhanced Leaflet initialization with better timing and error handling in \u003Ccode>map.js\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Improved:\u003C\u002Fstrong> Added widget detection in asset loading logic using \u003Ccode>is_active_widget()\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Improved:\u003C\u002Fstrong> Added fallback height (\u003Ccode>height: 240px;\u003C\u002Fcode>) to \u003Ccode>.svv-map\u003C\u002Fcode> CSS class for better Leaflet container sizing\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Improved:\u003C\u002Fstrong> Better error reporting and retry logic in map initialization with Leaflet availability checks\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>1.8.5\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>\u003Cstrong>Performance:\u003C\u002Fstrong> Conditional Leaflet asset loading — only loads when shortcode or Gutenberg block is present on the page.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Fix:\u003C\u002Fstrong> Added \u003Ccode>.htaccess\u003C\u002Fcode> files to prevent WordPress rewrite rules from interfering with static assets.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Fix:\u003C\u002Fstrong> Ensure correct MIME types for CSS and JS files to prevent browser strict MIME checking warnings.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>UX:\u003C\u002Fstrong> Eliminates unnecessary 404 errors on pages without weather widget.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>1.8.4\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>\u003Cstrong>Maintenance:\u003C\u002Fstrong> Added centralized configuration constants file (\u003Ccode>includes\u002Fconstants.php\u003C\u002Fcode>) for improved code maintainability and reduced magic numbers.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Performance:\u003C\u002Fstrong> Settings page now loads 6-30x faster with lazy-loaded WP.org plugin showcase via AJAX.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Fix:\u003C\u002Fstrong> Fixed memory leaks from uncleanup event listeners in admin interface with proper cleanup handlers.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Fix:\u003C\u002Fstrong> Fixed WMO weather code duplication—fog (codes 45, 48) now displays correctly instead of showing cloud icon.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Fix:\u003C\u002Fstrong> Fixed geocoding cache to include API language, ensuring proper locale-specific results for multi-language sites.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Fix:\u003C\u002Fstrong> Fixed widget null-safety with null-coalesce operators to prevent PHP Notices.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Fix:\u003C\u002Fstrong> Standardized API error handling with consistent response validation across all providers.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Fix:\u003C\u002Fstrong> Fixed syntax error in WP.org plugin showcase API call (missing closing parenthesis).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Compliance:\u003C\u002Fstrong> Verified full WordPress Consent API and GDPR compliance—no cookies, no tracking, no personal data collection.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Code Quality:\u003C\u002Fstrong> Debounce timeout optimized (400ms \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> 600ms) reducing AJAX traffic by 50% during live preview.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Documentation:\u003C\u002Fstrong> Comprehensive audit and testing guides included for developers.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>1.8.3\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Version bump for production release.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>1.8.2\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>\u003Cstrong>Fix:\u003C\u002Fstrong> WordPress naming convention compliance – all global functions and variables now use proper \u003Ccode>sv_vader_\u003C\u002Fcode> prefix.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Fix:\u003C\u002Fstrong> Corrected asset paths for Leaflet library (vendor directory structure).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Tech:\u003C\u002Fstrong> Code review and standards compliance (no breaking changes).\u003C\u002Fli>\n\u003Cli>Tested up to: WordPress 6.9\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>1.8.1\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>\u003Cstrong>New:\u003C\u002Fstrong> 3 selectable icon themes: \u003Cstrong>Classic\u003C\u002Fstrong>, \u003Cstrong>Modern Flat\u003C\u002Fstrong>, and \u003Cstrong>Modern Gradient\u003C\u002Fstrong> (set in Settings \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> Icon style).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Performance:\u003C\u002Fstrong> Optimized icon rendering with static variable caching for icon style preference (reduces repeated \u003Ccode>sv_vader_get_options()\u003C\u002Fcode> calls).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Tech:\u003C\u002Fstrong> Added private helper method \u003Ccode>build_icon_url()\u003C\u002Fcode> to centralize icon URL logic and improve maintainability.\u003C\u002Fli>\n\u003Cli>All icon themes include: sun, partly-cloudy, cloud, fog, rain, sleet, snow, thunderstorm (8 distinct weather conditions per theme).\u003C\u002Fli>\n\u003Cli>Updated README and readme.txt with icon theme documentation and admin settings guide.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>1.8.0\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>\u003Cstrong>BREAKING CHANGE:\u003C\u002Fstrong> Removed legacy \u003Ccode>[sv_vader …]\u003C\u002Fcode> shortcode. Use \u003Ccode>[spelhubben_weather …]\u003C\u002Fcode> exclusively.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>New Providers:\u003C\u002Fstrong> Added \u003Cstrong>Open-Weathermap\u003C\u002Fstrong> and \u003Cstrong>Weatherapi.com\u003C\u002Fstrong> for better global coverage (6 total providers).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>New Feature:\u003C\u002Fstrong> \u003Ccode>comparison=\"1\"\u003C\u002Fcode> attribute shows all providers’ data side-by-side for easy comparison and debugging.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Performance:\u003C\u002Fstrong> Fixed memory leak in map.js (persistent MutationObserver, proper ResizeObserver cleanup).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Performance:\u003C\u002Fstrong> Added 7-day transient caching for geocoding lookups to reduce external API calls.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Performance:\u003C\u002Fstrong> CSS containment (\u003Ccode>contain: layout style paint\u003C\u002Fcode>) optimizes rendering on pages with multiple weather cards.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Caching:\u003C\u002Fstrong> Improved debounce function to prevent race conditions during window resizes.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Security:\u003C\u002Fstrong> Fixed unsafe XML parsing in FMI provider (now uses \u003Ccode>LIBXML_NOCDATA\u003C\u002Fcode> flag with proper error handling).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Feature:\u003C\u002Fstrong> New \u003Cstrong>plugin showcase\u003C\u002Fstrong> on settings page displaying other Spelhubben plugins (grid layout, auto-fetches from WordPress.org).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>UX:\u003C\u002Fstrong> Plugin showcase auto-excludes Spelhubben Weather itself to avoid redundancy.\u003C\u002Fli>\n\u003Cli>Tested up to: WordPress 6.8+\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>1.7.5\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Tested up to: 6.9\u003C\u002Fli>\n\u003Cli>New: \u003Cstrong>FMI (Finnish Meteorological Institute)\u003C\u002Fstrong> as a free, optional provider (t2m, ws_10min, r_1h, n_man via WFS). Toggle in \u003Cstrong>Settings \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> Providers\u003C\u002Fstrong> and via \u003Ccode>providers=\"…\"\u003C\u002Fcode> in block\u002Fshortcode\u002Fwidget.\u003C\u002Fli>\n\u003Cli>Shortcodes\u002FBlocks: \u003Ccode>providers\u003C\u002Fcode> now accepts \u003Ccode>fmi\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>Docs: Updated examples and FAQ to include FMI.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>1.7.0\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>New: \u003Cstrong>Shortcodes\u003C\u002Fstrong> admin page with searchable examples, one-click copy & \u003Cstrong>copy all\u003C\u002Fstrong>.\u003C\u002Fli>\n\u003Cli>New: \u003Cstrong>Live preview\u003C\u002Fstrong> inside WP-admin (sandboxed iframe) that renders shortcodes and loads front assets (Leaflet, widget CSS\u002FJS).\u003C\u002Fli>\n\u003Cli>New: \u003Cstrong>Units & format\u003C\u002Fstrong> settings (preset + overrides: temp\u002Fwind\u002Fprecip units, \u003Ccode>date_format\u003C\u002Fcode>).\u003C\u002Fli>\n\u003Cli>New: \u003Cstrong>Clear cache\u003C\u002Fstrong> button (transients) on settings page.\u003C\u002Fli>\n\u003Cli>New: \u003Cstrong>Translations included:\u003C\u002Fstrong> Swedish (sv_SE), Norwegian (nb_NO), English (en_US).\u003C\u002Fli>\n\u003Cli>UX: Unified light card design across admin pages.\u003C\u002Fli>\n\u003Cli>Tech: Robust admin enqueue with cache-busting via \u003Ccode>filemtime\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>i18n: All admin strings localized (including JS: expand\u002Fcollapse, statuses).\u003C\u002Fli>\n\u003Cli>Docs: Marked legacy shortcode as \u003Cstrong>deprecated – will be removed soon\u003C\u002Fstrong>.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>1.6.2\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Minor fixes and readme updates.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>1.6.1\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Version bump for WordPress.org sync. No functional changes.\u003C\u002Fli>\n\u003C\u002Ful>\n","Weather widget, Gutenberg block and shortcode with hourly forecasts, smart local maps and multi-provider forecasts.",20,1855,"2026-05-31T06:40:00.000Z","6.8","7.4",[52,136,21,137,22],"forecast","weather","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fspelhubben-weather.2.1.2.zip",{"attackSurface":140,"codeSignals":164,"taintFlows":172,"riskAssessment":173,"analyzedAt":181},{"hooks":141,"ajaxHandlers":156,"restRoutes":157,"shortcodes":158,"cronEvents":163,"entryPointCount":32,"unprotectedCount":11},[142,148,152],{"type":143,"name":144,"callback":145,"file":146,"line":147},"action","admin_menu","roaver_widget_menu","roaver-plugin.php",27,{"type":143,"name":149,"callback":150,"file":146,"line":151},"admin_init","roaver_widget_settings",86,{"type":143,"name":153,"callback":154,"file":146,"line":155},"enqueue_block_editor_assets","roaver_widget_block_assets",148,[],[],[159],{"tag":160,"callback":161,"file":146,"line":162},"roaver_widget","roaver_widget_shortcode",172,[],{"dangerousFunctions":165,"sqlUsage":166,"outputEscaping":168,"fileOperations":11,"externalRequests":11,"nonceChecks":11,"capabilityChecks":11,"bundledLibraries":171},[],{"prepared":11,"raw":11,"locations":167},[],{"escaped":169,"rawEcho":11,"locations":170},15,[],[],[],{"summary":174,"deductions":175},"The roaver-widget plugin v1.09 exhibits a strong security posture based on the provided static analysis and vulnerability history. The absence of dangerous functions, file operations, and external HTTP requests, coupled with 100% of SQL queries using prepared statements and all output being properly escaped, indicates excellent coding practices. The plugin also has a clean vulnerability history with zero recorded CVEs of any severity, which is a positive indicator of its stability and secure development over time.\n\nHowever, the analysis does highlight a few areas of potential concern. The presence of a shortcode, while a valid entry point, is not accompanied by any explicit capability checks or nonce checks. While the total number of entry points is low and there are no unprotected AJAX handlers or REST API routes, the lack of specific security measures around the shortcode could be a point of exploitation if the shortcode's functionality is sensitive or can be manipulated by unauthenticated users.\n\nOverall, roaver-widget v1.09 appears to be a secure plugin with a good track record. The primary area for improvement lies in reinforcing the security around its single shortcode entry point by implementing capability checks. The plugin's strengths lie in its robust handling of SQL and output, and its clean vulnerability history.",[176,179],{"reason":177,"points":178},"Missing capability checks on shortcode",5,{"reason":180,"points":178},"Missing nonce checks on shortcode","2026-03-17T05:56:37.223Z",{"wat":183,"direct":190},{"assetPaths":184,"generatorPatterns":186,"scriptPaths":187,"versionParams":189},[185],"\u002Fwp-content\u002Fplugins\u002Froaver-widget\u002Fblock.js",[],[188],"https:\u002F\u002F\u002Fapp.roaver.com.au\u002Fassets\u002Fscripts\u002Fbuild\u002Fwidget.js",[],{"cssClasses":191,"htmlComments":192,"htmlAttributes":193,"restEndpoints":199,"jsGlobals":200,"shortcodeOutput":202},[],[],[194,195,196,197,198],"data-key","data-type","data-inject","data-scroll-offset","data-locale",[],[201],"roaverWidgetDefaults",[203,204],"\u003Cdiv id=\"","\" style=\"max-width:85rem;\">\u003C\u002Fdiv>\u003Cscript defer  src=\"https:\u002F\u002F\u002Fapp.roaver.com.au\u002Fassets\u002Fscripts\u002Fbuild\u002Fwidget.js\" data-key=\"",{"error":206,"url":207,"statusCode":208,"statusMessage":209,"message":209},true,"http:\u002F\u002Flocalhost\u002Fapi\u002Fplugins\u002Froaver-widget\u002Fbundle",404,"no bundle for this plugin yet",{"slug":4,"current_version":6,"total_versions":112,"versions":211},[212,218,225,232],{"version":6,"download_url":24,"svn_tag_url":213,"released_at":26,"has_diff":214,"diff_files_changed":215,"diff_lines":26,"trac_diff_url":216,"vulnerabilities":217,"is_current":206},"https:\u002F\u002Fplugins.svn.wordpress.org\u002Froaver-widget\u002Ftags\u002F1.09\u002F",false,[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Froaver-widget%2Ftags%2F1.08&new_path=%2Froaver-widget%2Ftags%2F1.09",[],{"version":219,"download_url":220,"svn_tag_url":221,"released_at":26,"has_diff":214,"diff_files_changed":222,"diff_lines":26,"trac_diff_url":223,"vulnerabilities":224,"is_current":214},"1.08","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Froaver-widget.1.08.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Froaver-widget\u002Ftags\u002F1.08\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Froaver-widget%2Ftags%2F1.07&new_path=%2Froaver-widget%2Ftags%2F1.08",[],{"version":226,"download_url":227,"svn_tag_url":228,"released_at":26,"has_diff":214,"diff_files_changed":229,"diff_lines":26,"trac_diff_url":230,"vulnerabilities":231,"is_current":214},"1.07","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Froaver-widget.1.07.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Froaver-widget\u002Ftags\u002F1.07\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Froaver-widget%2Ftags%2F1.06&new_path=%2Froaver-widget%2Ftags%2F1.07",[],{"version":233,"download_url":234,"svn_tag_url":235,"released_at":26,"has_diff":214,"diff_files_changed":236,"diff_lines":26,"trac_diff_url":26,"vulnerabilities":237,"is_current":214},"1.06","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Froaver-widget.1.06.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Froaver-widget\u002Ftags\u002F1.06\u002F",[],[]]