Changeset 3421916
- Timestamp:
- 12/17/2025 12:54:14 PM (3 months ago)
- Location:
- feedspace/trunk
- Files:
-
- 4 edited
-
build/js/widgets-block.js (modified) (1 diff)
-
feedspace.php (modified) (2 diffs)
-
includes/class-feedspace-admin.php (modified) (2 diffs)
-
readme.txt (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
feedspace/trunk/build/js/widgets-block.js
r3400157 r3421916 1 !function(){"use strict";var e=wp.blocks,t=wp.i18n,a=wp.blockEditor,s=wp.components,d=wp.element;(0,e.registerBlockType)("feedspace/widgets",{apiVersion:3,title:(0,t.__)("Feedspace Widget","feedspace"),description:(0,t.__)("Display any Feedspace widget using widget code.","feedspace"),category:"feedspace",icon:"embed-generic",keywords:[(0,t.__)("widget","feedspace"),(0,t.__)("feedspace","feedspace"),(0,t.__)("widget","feedspace"),(0,t.__)("reviews","feedspace")],supports:{html:!1,align:["wide","full"]},attributes:{widgetId:{type:"string",default:""},embedCode:{type:"string",default:""},align:{type:"string",default:"wide"},className:{type:"string",default:""}},edit:function({attributes:e,setAttributes: i}){const{widgetId:c,embedCode:l,align:n}=e,[r,p]=(0,d.useState)(""),[o,f]=(0,d.useState)(!1),[m,u]=(0,d.useState)(""),[g,w]=(0,d.useState)(!1),_=(0,a.useBlockProps)({className:`wp-block-feedspace-widgets align${n}`}),v=e=>{if(!e)return{valid:!1,error:""};const a=/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i.test(e),s=/^[a-zA-Z0-9._-]+$/.test(e)&&e.length>=8;return a||s?{valid:!0,error:""}:{valid:!1,error:(0,t.__)("Widget ID must be a valid UUID or alphanumeric string (8+ characters)","feedspace")}};return(0,d.useEffect)(()=>{if(c&&g)p(`<div class="feedspace-embed" data-id="${c}"></div>`);else if(l){const e=l.match(/<div[^>]*class="[^"]*feedspace-widget[^"]*"[^>]*data-id="([^"]*)"[^>]*>/);if(e){const t=e[1];p(`<div class="feedspace-widget" data-id="${t}"></div>`)}else p(l)}else p("")},[c,l,g]),(0,d.useEffect)(()=>{if(!document.querySelector('script[src*="js.feedspace.io"]')){const e=document.createElement("script");e.src=window.feedspace_admin&&window.feedspace_admin.widgetScriptUrl||window.feedspace_admin&&window.feedspace_admin.widgetScriptFallbackUrl||"https://js.feedspace.io/v1/embed/embed.min.js",e.type="text/javascript",e.async=!0,document.head.appendChild(e)}},[]),(0,d.useEffect)(()=>{if(c){const e=v(c);w(e.valid)}else if(l){const e=extractWidgetIdFromEmbedCode(l);if(e){const t=v(e);w(t.valid)}}},[]),React.createElement("div",_,React.createElement(a.InspectorControls,null,React.createElement(s.PanelBody,{title:(0,t.__)("Widget Settings","feedspace"),initialOpen:!0},React.createElement(s.TextControl,{label:(0,t.__)("Widget ID","feedspace"),value:c,onChange:e=>{i({widgetId:e}),u(""),f(!0),setTimeout(()=>{const t=v(e);w(t.valid),u(t.error),f(!1)},500)},help:(0,t.__)("Enter your Feedspace Widget ID directly (recommended)","feedspace"),placeholder:(0,t.__)("e.g., 12345678-1234-1234-1234-123456789abc","feedspace")}),o&&React.createElement("div",{className:"feedspace-validation-status"},React.createElement(s.Spinner,null),React.createElement("span",null,(0,t.__)("Validating...","feedspace"))),m&&React.createElement(s.Notice,{status:"error",isDismissible:!1},m),c&&g&&!o&&React.createElement(s.Notice,{status:"success",isDismissible:!1},(0,t.__)("Widget ID is valid!","feedspace")))),React.createElement("div",{className:"feedspace-widgets-preview"},r?React.createElement("div",{className:"feedspace-widget-preview",dangerouslySetInnerHTML:{__html:r}}):React.createElement("div",{className:"feedspace-widget-placeholder"},React.createElement("p",null,(0,t.__)("Feedspace Widget Preview","feedspace")),React.createElement("p",null,(0,t.__)("Enter a Widget ID to get started","feedspace")))))},save:function(){return null}})}();1 !function(){"use strict";var e=wp.blocks,t=wp.i18n,a=wp.blockEditor,s=wp.components,d=wp.element;(0,e.registerBlockType)("feedspace/widgets",{apiVersion:3,title:(0,t.__)("Feedspace Widget","feedspace"),description:(0,t.__)("Display any Feedspace widget using widget code.","feedspace"),category:"feedspace",icon:"embed-generic",keywords:[(0,t.__)("widget","feedspace"),(0,t.__)("feedspace","feedspace"),(0,t.__)("widget","feedspace"),(0,t.__)("reviews","feedspace")],supports:{html:!1,align:["wide","full"]},attributes:{widgetId:{type:"string",default:""},embedCode:{type:"string",default:""},align:{type:"string",default:"wide"},className:{type:"string",default:""}},edit:function({attributes:e,setAttributes:c}){const{widgetId:i,embedCode:n,align:l}=e,[r,p]=(0,d.useState)(""),[o,f]=(0,d.useState)(!1),[m,u]=(0,d.useState)(""),[g,w]=(0,d.useState)(!1),_=(0,a.useBlockProps)({className:`wp-block-feedspace-widgets align${l}`}),v=e=>{if(!e)return{valid:!1,error:""};const a=/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i.test(e),s=/^[a-zA-Z0-9._-]+$/.test(e)&&e.length>=8;return a||s?{valid:!0,error:""}:{valid:!1,error:(0,t.__)("Widget ID must be a valid UUID or alphanumeric string (8+ characters)","feedspace")}},E=e=>{const t={"&":"&","<":"<",">":">",'"':""","'":"'"};return e.replace(/[&<>"']/g,e=>t[e])};return(0,d.useEffect)(()=>{if(i&&g){const e=E(i);p(`<div class="feedspace-embed" data-id="${e}"></div>`)}else if(n){const e=n.match(/<div[^>]*class="[^"]*feedspace-widget[^"]*"[^>]*data-id="([^"]*)"[^>]*>/);if(e){const t=e[1],a=E(t);p(`<div class="feedspace-widget" data-id="${a}"></div>`)}else p("")}else p("")},[i,n,g]),(0,d.useEffect)(()=>{if(!document.querySelector('script[src*="js.feedspace.io"]')){const e=document.createElement("script");e.src=window.feedspace_admin&&window.feedspace_admin.widgetScriptUrl||window.feedspace_admin&&window.feedspace_admin.widgetScriptFallbackUrl||"https://js.feedspace.io/v1/embed/embed.min.js",e.type="text/javascript",e.async=!0,document.head.appendChild(e)}},[]),(0,d.useEffect)(()=>{if(i){const e=v(i);w(e.valid)}else if(n){const e=extractWidgetIdFromEmbedCode(n);if(e){const t=v(e);w(t.valid)}}},[]),React.createElement("div",_,React.createElement(a.InspectorControls,null,React.createElement(s.PanelBody,{title:(0,t.__)("Widget Settings","feedspace"),initialOpen:!0},React.createElement(s.TextControl,{label:(0,t.__)("Widget ID","feedspace"),value:i,onChange:e=>{c({widgetId:e}),u(""),f(!0),setTimeout(()=>{const t=v(e);w(t.valid),u(t.error),f(!1)},500)},help:(0,t.__)("Enter your Feedspace Widget ID directly (recommended)","feedspace"),placeholder:(0,t.__)("e.g., 12345678-1234-1234-1234-123456789abc","feedspace")}),o&&React.createElement("div",{className:"feedspace-validation-status"},React.createElement(s.Spinner,null),React.createElement("span",null,(0,t.__)("Validating...","feedspace"))),m&&React.createElement(s.Notice,{status:"error",isDismissible:!1},m),i&&g&&!o&&React.createElement(s.Notice,{status:"success",isDismissible:!1},(0,t.__)("Widget ID is valid!","feedspace")))),React.createElement("div",{className:"feedspace-widgets-preview"},r?React.createElement("div",{className:"feedspace-widget-preview",dangerouslySetInnerHTML:{__html:r}}):React.createElement("div",{className:"feedspace-widget-placeholder"},React.createElement("p",null,(0,t.__)("Feedspace Widget Preview","feedspace")),React.createElement("p",null,(0,t.__)("Enter a Widget ID to get started","feedspace")))))},save:function(){return null}})}(); 2 2 //# sourceMappingURL=widgets-block.js.map -
feedspace/trunk/feedspace.php
r3419846 r3421916 9 9 * 10 10 * @wordpress-plugin 11 * Plugin Name: Feedspace : Best Testimonials & Reviews Widget for WordPress Sites11 * Plugin Name: Feedspace Review Widgets 12 12 * Plugin URI: https://feedspace.io/ 13 13 * Description: Embed Feedspace widgets using widget IDs with a modern, user-friendly interface. 14 * Version: 1.0. 514 * Version: 1.0.6 15 15 * Requires at least: 5.0 16 16 * Requires PHP: 7.0 … … 30 30 31 31 // Define plugin constants. 32 define( 'FEEDSPACE_VERSION', '1.0. 5' );32 define( 'FEEDSPACE_VERSION', '1.0.6' ); 33 33 define( 'FEEDSPACE_PLUGIN_FILE', __FILE__ ); 34 34 define( 'FEEDSPACE_PLUGIN_DIR', plugin_dir_path( __FILE__ ) ); -
feedspace/trunk/includes/class-feedspace-admin.php
r3400157 r3421916 235 235 public function ajax_save_advanced_settings() { 236 236 // Verify nonce 237 if ( ! wp_verify_nonce( $_POST['nonce'], 'feedspace_admin_nonce' ) ) {237 if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['nonce'] ) ), 'feedspace_admin_nonce' ) ) { 238 238 wp_die( esc_html__( 'Security check failed.', 'feedspace' ) ); 239 239 } … … 245 245 246 246 // Save preserve settings option 247 $preserve_settings = isset( $_POST['preserve_settings'] ) ? (bool) $_POST['preserve_settings']: false;247 $preserve_settings = isset( $_POST['preserve_settings'] ) ? (bool) sanitize_text_field( wp_unslash( $_POST['preserve_settings'] ) ) : false; 248 248 update_option( Feedspace_Constants::OPTION_PRESERVE_SETTINGS, $preserve_settings ); 249 249 -
feedspace/trunk/readme.txt
r3421082 r3421916 1 === Feedspace : Best Testimonials & Reviews Widget for WordPress Sites ===1 === Feedspace Review Widgets === 2 2 Contributors: feedspace 3 3 Tags: testimonials, reviews, widgets … … 5 5 Tested up to: 6.8 6 6 Requires PHP: 7.0 7 Stable tag: 1.0. 57 Stable tag: 1.0.6 8 8 License: GPL-2.0-or-later 9 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 29 29 ✔ Customize layouts, colors, and styles without coding 30 30 ✔ Show reviewer names, roles, photos, and star ratings 31 ✔ Works with Elementor, Gutenberg, and all major page builders31 ✔ Works with Elementor, Gutenberg, and popular page builders 32 32 ✔ Suitable for any type of website, including SaaS, agencies, and eCommerce 33 33 … … 41 41 ✔ Easy Customization 42 42 ✔ Import & Sync Easily 43 ✔ Best SEO & Performance43 ✔ Excellent SEO & Performance 44 44 ✔ Smooth Integration 45 45
Note: See TracChangeset
for help on using the changeset viewer.