Changeset 3385769
- Timestamp:
- 10/28/2025 10:43:06 AM (5 months ago)
- Location:
- understory
- Files:
-
- 30 edited
- 1 copied
-
tags/1.7.0 (copied) (copied from understory/trunk)
-
tags/1.7.0/CLAUDE.md (modified) (1 diff)
-
tags/1.7.0/assets/js/gutenberg-booking-block-editor.js (modified) (6 diffs)
-
tags/1.7.0/assets/js/gutenberg-booking-block-editor.min.js (modified) (1 diff)
-
tags/1.7.0/includes/elementor/lib/class-availability-widget.php (modified) (1 diff)
-
tags/1.7.0/includes/elementor/lib/class-booking-widget.php (modified) (2 diffs)
-
tags/1.7.0/includes/elementor/lib/class-experiences-widget.php (modified) (1 diff)
-
tags/1.7.0/includes/gutenberg/class-booking-block.php (modified) (4 diffs)
-
tags/1.7.0/includes/gutenberg/class-experiences-block.php (modified) (2 diffs)
-
tags/1.7.0/includes/shortcodes/class-booking-shortcode.php (modified) (2 diffs)
-
tags/1.7.0/includes/tabs-content.php (modified) (1 diff)
-
tags/1.7.0/includes/tabs/tab-booking-widget-shortcode.php (modified) (1 diff)
-
tags/1.7.0/includes/utils/class-options-fetcher.php (modified) (1 diff)
-
tags/1.7.0/package-lock.json (modified) (45 diffs)
-
tags/1.7.0/readme.txt (modified) (2 diffs)
-
tags/1.7.0/understory.php (modified) (2 diffs)
-
trunk/CLAUDE.md (modified) (1 diff)
-
trunk/assets/js/gutenberg-booking-block-editor.js (modified) (6 diffs)
-
trunk/assets/js/gutenberg-booking-block-editor.min.js (modified) (1 diff)
-
trunk/includes/elementor/lib/class-availability-widget.php (modified) (1 diff)
-
trunk/includes/elementor/lib/class-booking-widget.php (modified) (2 diffs)
-
trunk/includes/elementor/lib/class-experiences-widget.php (modified) (1 diff)
-
trunk/includes/gutenberg/class-booking-block.php (modified) (4 diffs)
-
trunk/includes/gutenberg/class-experiences-block.php (modified) (2 diffs)
-
trunk/includes/shortcodes/class-booking-shortcode.php (modified) (2 diffs)
-
trunk/includes/tabs-content.php (modified) (1 diff)
-
trunk/includes/tabs/tab-booking-widget-shortcode.php (modified) (1 diff)
-
trunk/includes/utils/class-options-fetcher.php (modified) (1 diff)
-
trunk/package-lock.json (modified) (45 diffs)
-
trunk/readme.txt (modified) (2 diffs)
-
trunk/understory.php (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
understory/tags/1.7.0/CLAUDE.md
r3385132 r3385769 204 204 ### Version Management 205 205 206 Current version: 1. 6.3(defined in both `package.json` and `understory.php`)206 Current version: 1.7.0 (defined in both `package.json` and `understory.php`) -
understory/tags/1.7.0/assets/js/gutenberg-booking-block-editor.js
r3351241 r3385769 33 33 default: "", 34 34 }, 35 tagIds: { 36 type: "string", 37 default: "", 38 }, 35 39 language: { 36 40 type: "string", … … 47 51 var [experiences, setExperiences] = useState([]); 48 52 var [languages, setLanguages] = useState([]); 53 var [tags, setTags] = useState([]); 49 54 var [isLoading, setIsLoading] = useState(true); 50 55 … … 62 67 63 68 function loadInitialData() { 64 const { storefronts, languages } = understoryBookingData;69 const { storefronts, languages, tags } = understoryBookingData; 65 70 66 71 // Set storefronts options from preloaded data … … 81 86 ]; 82 87 setLanguages(languageOptions); 88 89 // Set tags options from preloaded data 90 const tagOptions = [ 91 { label: "All", value: "" }, 92 ...(tags || []).map((tag) => ({ 93 label: tag.name, 94 value: tag.id, 95 })), 96 ]; 97 setTags(tagOptions); 83 98 84 99 if (!attributes.storefrontId) { … … 166 181 options: experiences, 167 182 onChange: (newVal) => setAttributes({ experienceId: newVal }), 183 }), 184 el(SelectControl, { 185 label: "Filter by tags", 186 multiple: true, 187 value: attributes.tagIds ? attributes.tagIds.split(",") : [], 188 options: tags, 189 onChange: (newVal) => { 190 setAttributes({ tagIds: newVal.join(",") }); 191 }, 168 192 }), 169 193 el(SelectControl, { … … 183 207 "data-storefront-id": attributes.storefrontId, 184 208 "data-experience-id": attributes.experienceId, 209 "data-tags": attributes.tagIds, 185 210 "data-language": attributes.language, 186 211 }) -
understory/tags/1.7.0/assets/js/gutenberg-booking-block-editor.min.js
r3351241 r3385769 1 var UNDERSTORY_WIDGET_SCRIPT="https://widgets.understory.io/widgets/understory-booking-widget.js?environment=production";!function(e,t,n,o, r){var a=t.createElement,i=e.registerBlockType,{SelectControl:d,PanelBody:s}=n,c=r.InspectorControls,l=t.useEffect,u=t.useState;i("understory/booking-widget",{title:"Understory Booking Widget",icon:"tickets-alt",category:"widgets",attributes:{storefrontId:{type:"string",default:""},experienceId:{type:"string",default:""},language:{type:"string",default:o.defaultLanguage},companyId:{type:"string",default:o.companyId}},edit:function({attributes:e,setAttributes:t}){var[r,i]=u([]),[p,g]=u([]),[f,I]=u([]),[y,w]=u(!0);function b(n){const{companyId:r,ajaxUrl:a,nonce:i}=o;jQuery.post(a,{action:"understory_gutenberg_get_experiences_by_storefront",storefront_id:n,company_id:r,nonce:i}).done(function(n){if(!n.success)return console.error("Failed to load experiences:",n),void g([]);const o=[...Object.entries(n.data.experiences).map(([e,t])=>({label:t,value:e}))];g(o),e.experienceId&&!n.data.experiences[e.experienceId]&&t({experienceId:""})}).fail(function(){console.error("Failed to load experiences for storefront"),g([])})}return l(()=>{!function(){const{storefronts:n,languages:r}=o,a=[...Object.entries(n).map(([e,t])=>({label:t,value:e}))];i(a);const d=[...Object.entries(r).map(([e,t])=>({label:t,value:e}))];I(d),e.storefrontId||t({storefrontId:a[0]?.value||""});w(!1),function(e,t){if(!document.getElementById(t)){var n=document.createElement("script");n.id=t,n.src=e,n.async=!0,document.body.appendChild(n)}}(UNDERSTORY_WIDGET_SCRIPT)}()},[]),l(()=>{e.storefrontId&&b(e.storefrontId)},[e.storefrontId]),y?a(n.Spinner):a("div",{},a(c,{},a(s,{title:"Settings",initialOpen:!0},a(d,{label:"Storefront",value:e.storefrontId,options:r,onChange:e=>{t({storefrontId:e,experienceId:""}),e?b(e):g([])}}),a(d,{label:"Experience",value:e.experienceId,options:p,onChange:e=>t({experienceId:e})}),a(d,{label:"Language",value:e.language,options:f,onChange:e=>t({language:e})}))),a("div",{className:"understory-widget-preview"},a("div",{className:"understory-booking-widget","data-company-id":e.companyId,"data-storefront-id":e.storefrontId,"data-experience-id":e.experienceId,"data-language":e.language})))},save:function(){}})}(window.wp.blocks,window.wp.element,window.wp.components,window.understoryBookingData,window.wp.blockEditor);1 var UNDERSTORY_WIDGET_SCRIPT="https://widgets.understory.io/widgets/understory-booking-widget.js?environment=production";!function(e,t,n,o,a){var r=t.createElement,i=e.registerBlockType,{SelectControl:d,PanelBody:s}=n,l=a.InspectorControls,c=t.useEffect,u=t.useState;i("understory/booking-widget",{title:"Understory Booking Widget",icon:"tickets-alt",category:"widgets",attributes:{storefrontId:{type:"string",default:""},experienceId:{type:"string",default:""},tagIds:{type:"string",default:""},language:{type:"string",default:o.defaultLanguage},companyId:{type:"string",default:o.companyId}},edit:function({attributes:e,setAttributes:t}){var[a,i]=u([]),[g,p]=u([]),[f,I]=u([]),[y,b]=u([]),[m,w]=u(!0);function v(n){const{companyId:a,ajaxUrl:r,nonce:i}=o;jQuery.post(r,{action:"understory_gutenberg_get_experiences_by_storefront",storefront_id:n,company_id:a,nonce:i}).done(function(n){if(!n.success)return console.error("Failed to load experiences:",n),void p([]);const o=[...Object.entries(n.data.experiences).map(([e,t])=>({label:t,value:e}))];p(o),e.experienceId&&!n.data.experiences[e.experienceId]&&t({experienceId:""})}).fail(function(){console.error("Failed to load experiences for storefront"),p([])})}return c(()=>{!function(){const{storefronts:n,languages:a,tags:r}=o,d=[...Object.entries(n).map(([e,t])=>({label:t,value:e}))];i(d);const s=[...Object.entries(a).map(([e,t])=>({label:t,value:e}))];I(s);const l=[{label:"All",value:""},...(r||[]).map(e=>({label:e.name,value:e.id}))];b(l),e.storefrontId||t({storefrontId:d[0]?.value||""});w(!1),function(e,t){if(!document.getElementById(t)){var n=document.createElement("script");n.id=t,n.src=e,n.async=!0,document.body.appendChild(n)}}(UNDERSTORY_WIDGET_SCRIPT)}()},[]),c(()=>{e.storefrontId&&v(e.storefrontId)},[e.storefrontId]),m?r(n.Spinner):r("div",{},r(l,{},r(s,{title:"Settings",initialOpen:!0},r(d,{label:"Storefront",value:e.storefrontId,options:a,onChange:e=>{t({storefrontId:e,experienceId:""}),e?v(e):p([])}}),r(d,{label:"Experience",value:e.experienceId,options:g,onChange:e=>t({experienceId:e})}),r(d,{label:"Filter by tags",multiple:!0,value:e.tagIds?e.tagIds.split(","):[],options:y,onChange:e=>{t({tagIds:e.join(",")})}}),r(d,{label:"Language",value:e.language,options:f,onChange:e=>t({language:e})}))),r("div",{className:"understory-widget-preview"},r("div",{className:"understory-booking-widget","data-company-id":e.companyId,"data-storefront-id":e.storefrontId,"data-experience-id":e.experienceId,"data-tags":e.tagIds,"data-language":e.language})))},save:function(){}})}(window.wp.blocks,window.wp.element,window.wp.components,window.understoryBookingData,window.wp.blockEditor); -
understory/tags/1.7.0/includes/elementor/lib/class-availability-widget.php
r3369871 r3385769 46 46 47 47 // Fetch experience tags 48 $tags_data = Understory_OptionsFetcher::get_tags($company_id); 49 48 50 if (!empty($company_id)) { 49 $tags_api_url = UNDERSTORY_API_BASE_URL . '/companies/' . urlencode($company_id) . '/experience-tags';50 $tags_data = Utils\DataFetcher::get($tags_api_url);51 52 51 $locations_api_url = UNDERSTORY_API_BASE_URL . '/companies/' . urlencode($company_id) . '/locations'; 53 52 $locations_data = Utils\DataFetcher::get($locations_api_url); -
understory/tags/1.7.0/includes/elementor/lib/class-booking-widget.php
r3369591 r3385769 68 68 ); 69 69 70 $tags = Understory_OptionsFetcher::get_tags($company_id); 71 $tags_options = []; 72 if (!empty($tags)) { 73 foreach ($tags as $tag) { 74 $tags_options[$tag['id']] = $tag['name']; 75 } 76 } 77 78 $this->add_control( 79 'tag_ids', 80 [ 81 'label' => __('Filter by tags', 'understory'), 82 'type' => \Elementor\Controls_Manager::SELECT2, 83 'default' => '', 84 'options' => $tags_options, 85 'multiple' => true, 86 ] 87 ); 88 70 89 $this->add_control( 71 90 'language', … … 106 125 } 107 126 127 if (!$settings['tag_ids']) { 128 $settings['tag_ids'] = []; 129 } 130 108 131 ?> 109 132 <div class="understory-booking-widget" data-company-id="<?php echo esc_attr($company_id); ?>" 110 133 data-storefront-id="<?php echo esc_attr($storefront_id); ?>" 111 134 data-experience-id="<?php echo esc_attr($settings['experience_id']); ?>" 135 <?php if (!empty($settings['tag_ids'])): ?> 136 data-tags="<?php echo esc_attr(implode(',', $settings['tag_ids'])); ?>" 137 <?php endif; ?> 112 138 data-language="<?php echo esc_attr($settings['language']); ?>"></div> 113 139 <?php -
understory/tags/1.7.0/includes/elementor/lib/class-experiences-widget.php
r3369591 r3385769 56 56 57 57 // Fetch experience tags 58 if (!empty($company_id)) { 59 $experience_tags_api_url = UNDERSTORY_API_BASE_URL . '/companies/' . urlencode($company_id) . '/experience-tags'; 60 $tags = Utils\DataFetcher::get($experience_tags_api_url); 61 } 58 $tags = Understory_OptionsFetcher::get_tags($company_id); 62 59 $tags_options = []; 63 60 if (!empty($tags)) { -
understory/tags/1.7.0/includes/gutenberg/class-booking-block.php
r3369591 r3385769 25 25 26 26 if ($company_id && function_exists('register_block_type')) { 27 $tags = Understory_OptionsFetcher::get_tags($company_id); 28 27 29 $script_file = defined('WP_DEBUG') && WP_DEBUG 28 30 ? 'assets/js/gutenberg-booking-block-editor.js' … … 46 48 'storefronts' => Understory_OptionsFetcher::get_storefronts($company_id), 47 49 'languages' => Understory_OptionsFetcher::get_languages(['with_all' => false]), 50 'tags' => $tags, 48 51 'nonce' => wp_create_nonce('understory_gutenberg_nonce'), 49 52 'ajaxUrl' => admin_url('admin-ajax.php'), … … 63 66 'experienceId' => array('type' => 'string', 'default' => ''), 64 67 'language' => array('type' => 'string', 'default' => Understory_Settings::get_default_language()), 68 'tagIds' => array('type' => 'string', 'default' => ''), 65 69 'companyId' => array('type' => 'string', 'default' => $company_id), 66 70 'storefrontId' => array('type' => 'string', 'default' => ''), … … 95 99 ); 96 100 101 $tag_ids = $attributes['tagIds'] ?? ''; 102 97 103 ob_start(); 98 104 ?> 99 105 <div class="understory-booking-widget" data-company-id="<?php echo esc_attr($company_id); ?>" 100 106 data-storefront-id="<?php echo esc_attr($storefront_id); ?>" 101 data-experience-id="<?php echo esc_attr($attributes['experienceId']); ?>" 107 data-experience-id="<?php echo esc_attr($attributes['experienceId']); ?>" <?php if (!empty($tag_ids)): ?> 108 data-tags="<?php echo esc_attr($tag_ids); ?>" <?php endif; ?> 102 109 data-language="<?php echo esc_attr($attributes['language']); ?>"></div> 103 110 <?php -
understory/tags/1.7.0/includes/gutenberg/class-experiences-block.php
r3369591 r3385769 38 38 39 39 if ($company_option_set && function_exists('register_block_type')) { 40 $experience_tags_api_url = UNDERSTORY_API_BASE_URL . '/companies/' . urlencode($company_id) . '/experience-tags'; 41 $tags = Utils\DataFetcher::get($experience_tags_api_url); 40 $tags = Understory_OptionsFetcher::get_tags($company_id); 42 41 43 42 $script_file = defined('WP_DEBUG') && WP_DEBUG … … 58 57 'defaultLanguage' => Understory_Settings::get_default_language(), 59 58 'languages' => Understory_OptionsFetcher::get_languages(['with_all' => false]), 60 'tags' => !empty($tags) ? $tags : [],59 'tags' => $tags, 61 60 'companyIdSet' => $company_option_set, 62 61 'storefronts' => Understory_Settings::get_all_storefronts($company_id) ?? [], -
understory/tags/1.7.0/includes/shortcodes/class-booking-shortcode.php
r3369591 r3385769 29 29 'experience_id' => '', 30 30 'language' => Understory_Settings::get_default_language(), 31 'tag_ids' => '', 31 32 // Fallback to default storefront if not set, enabling backwards 32 33 // single-storefront implementations … … 50 51 <div class="understory-booking-widget" data-company-id="<?php echo esc_attr($atts['company_id']); ?>" 51 52 data-storefront-id="<?php echo esc_attr($atts['storefront_id']); ?>" <?php if (!empty($atts['experience_id'])): ?> 52 data-experience-id="<?php echo esc_attr($atts['experience_id']); ?>" <?php endif; ?> 53 data-experience-id="<?php echo esc_attr($atts['experience_id']); ?>" <?php endif; ?> <?php if (!empty($atts['tag_ids'])): ?> data-tags="<?php echo esc_attr($atts['tag_ids']); ?>" <?php endif; ?> 53 54 data-language="<?php echo esc_attr($atts['language']); ?>"></div> 54 55 <?php -
understory/tags/1.7.0/includes/tabs-content.php
r3369591 r3385769 14 14 $languages = Understory_OptionsFetcher::get_languages(['with_all' => false]); 15 15 16 $tags_api_url = UNDERSTORY_API_BASE_URL . '/companies/' . urlencode($company_id) . '/experience-tags'; 17 $experience_tags = Utils\DataFetcher::get($tags_api_url); 16 $experience_tags = Understory_OptionsFetcher::get_tags($company_id); 18 17 19 18 $locations_api_url = UNDERSTORY_API_BASE_URL . '/companies/' . urlencode($company_id) . '/locations'; -
understory/tags/1.7.0/includes/tabs/tab-booking-widget-shortcode.php
r3351241 r3385769 31 31 </select> 32 32 </div> 33 <div class="grid-container"> 34 <label for="booking-tag-select"><?php esc_html_e('Filter by tags', 'understory'); ?></label> 35 <select id="booking-tag-select" data-shortcode-field="tag_ids" multiple> 36 <option value="" selected><?php esc_html_e('All', 'understory'); ?></option> 37 <?php foreach ($experience_tags as $experience_tag): ?> 38 <option value="<?php echo esc_attr($experience_tag['id']); ?>"><?php echo esc_html($experience_tag['name']); ?></option> 39 <?php endforeach; ?> 40 </select> 41 </div> 33 42 </div> 34 43 <div class="shortcode-container"> -
understory/tags/1.7.0/includes/utils/class-options-fetcher.php
r3369591 r3385769 112 112 } 113 113 114 public static function get_tags($company_id) 115 { 116 if (empty($company_id)) { 117 return []; 118 } 119 120 $experience_tags_api_url = UNDERSTORY_API_BASE_URL . '/companies/' . urlencode($company_id) . '/experience-tags'; 121 $tags = Utils\DataFetcher::get($experience_tags_api_url); 122 123 return !empty($tags) ? $tags : []; 124 } 125 114 126 /** 115 127 * Get a user-friendly display name for language codes -
understory/tags/1.7.0/package-lock.json
r3385132 r3385769 1 1 { 2 2 "name": "understory", 3 "version": "1. 6.3",3 "version": "1.7.0", 4 4 "lockfileVersion": 3, 5 5 "requires": true, … … 7 7 "": { 8 8 "name": "understory", 9 "version": "1. 6.3",9 "version": "1.7.0", 10 10 "dependencies": { 11 11 "@mui/material": "6.4.2", … … 112 112 "devOptional": true, 113 113 "license": "MIT", 114 "peer": true, 114 115 "dependencies": { 115 116 "@ampproject/remapping": "^2.2.0", … … 2008 2009 ], 2009 2010 "license": "MIT", 2011 "peer": true, 2010 2012 "engines": { 2011 2013 "node": ">=18" … … 2031 2033 ], 2032 2034 "license": "MIT", 2035 "peer": true, 2033 2036 "engines": { 2034 2037 "node": ">=18" … … 2151 2154 "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==", 2152 2155 "license": "MIT", 2156 "peer": true, 2153 2157 "dependencies": { 2154 2158 "@babel/runtime": "^7.18.3", … … 2194 2198 "integrity": "sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==", 2195 2199 "license": "MIT", 2200 "peer": true, 2196 2201 "dependencies": { 2197 2202 "@babel/runtime": "^7.18.3", … … 3897 3902 "integrity": "sha512-9jKr53KbAJyyBRx8LRmX7ATXHlGtxVQdPgm1uyXMoEPMVkSJW1yO3vFgfYoDbGx4ZHcCNuWa4FkFIPWVt9fghA==", 3898 3903 "license": "MIT", 3904 "peer": true, 3899 3905 "dependencies": { 3900 3906 "@babel/runtime": "^7.26.0", … … 4007 4013 "integrity": "sha512-XcbBYxDS+h/lgsoGe78ExXFZXtuIlSBpn/KsZq8PtZcIkUNJInkuDqcLd2rVBQrDC1u+rvVovdaWPf2FHKJf3w==", 4008 4014 "license": "MIT", 4015 "peer": true, 4009 4016 "dependencies": { 4010 4017 "@babel/runtime": "^7.26.0", … … 5491 5498 "dev": true, 5492 5499 "license": "MIT", 5500 "peer": true, 5493 5501 "dependencies": { 5494 5502 "@babel/core": "^7.21.3", … … 5996 6004 "devOptional": true, 5997 6005 "license": "MIT", 6006 "peer": true, 5998 6007 "dependencies": { 5999 6008 "@types/estree": "*", … … 6211 6220 "devOptional": true, 6212 6221 "license": "MIT", 6222 "peer": true, 6213 6223 "dependencies": { 6214 6224 "undici-types": "~6.20.0" … … 6263 6273 "integrity": "sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==", 6264 6274 "license": "MIT", 6275 "peer": true, 6265 6276 "dependencies": { 6266 6277 "@types/prop-types": "*", … … 6273 6284 "integrity": "sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==", 6274 6285 "license": "MIT", 6286 "peer": true, 6275 6287 "peerDependencies": { 6276 6288 "@types/react": "^18.0.0" … … 6407 6419 "dev": true, 6408 6420 "license": "MIT", 6421 "peer": true, 6409 6422 "dependencies": { 6410 6423 "@types/node": "*", … … 6541 6554 "dev": true, 6542 6555 "license": "BSD-2-Clause", 6556 "peer": true, 6543 6557 "dependencies": { 6544 6558 "@typescript-eslint/scope-manager": "6.21.0", … … 7868 7882 "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", 7869 7883 "license": "MIT", 7884 "peer": true, 7870 7885 "dependencies": { 7871 7886 "loose-envify": "^1.1.0" … … 8903 8918 "devOptional": true, 8904 8919 "license": "MIT", 8920 "peer": true, 8905 8921 "bin": { 8906 8922 "acorn": "bin/acorn" … … 8973 8989 "devOptional": true, 8974 8990 "license": "MIT", 8991 "peer": true, 8975 8992 "dependencies": { 8976 8993 "fast-deep-equal": "^3.1.1", … … 9974 9991 ], 9975 9992 "license": "MIT", 9993 "peer": true, 9976 9994 "dependencies": { 9977 9995 "caniuse-lite": "^1.0.30001688", … … 11570 11588 "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==", 11571 11589 "license": "MIT", 11590 "peer": true, 11572 11591 "funding": { 11573 11592 "type": "github", … … 11579 11598 "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", 11580 11599 "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", 11581 "license": "MIT" 11600 "license": "MIT", 11601 "peer": true 11582 11602 }, 11583 11603 "node_modules/debounce": { … … 11966 11986 "integrity": "sha512-DPnhUXvmvKT2dFA/j7B+riVLUt9Q6RKJlcppojL5CoRywJJKLDYnRlw0gTFKfgDPHP5E04UoB71SxoJlVZy8FA==", 11967 11987 "dev": true, 11968 "license": "BSD-3-Clause" 11988 "license": "BSD-3-Clause", 11989 "peer": true 11969 11990 }, 11970 11991 "node_modules/diff": { … … 12635 12656 "dev": true, 12636 12657 "license": "MIT", 12658 "peer": true, 12637 12659 "dependencies": { 12638 12660 "@eslint-community/eslint-utils": "^4.2.0", … … 12691 12713 "dev": true, 12692 12714 "license": "MIT", 12715 "peer": true, 12693 12716 "bin": { 12694 12717 "eslint-config-prettier": "bin/cli.js" … … 16231 16254 "dev": true, 16232 16255 "license": "MIT", 16256 "peer": true, 16233 16257 "dependencies": { 16234 16258 "@jest/core": "^29.7.0", … … 18238 18262 "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", 18239 18263 "license": "MIT", 18264 "peer": true, 18240 18265 "engines": { 18241 18266 "node": "*" … … 18500 18525 "dev": true, 18501 18526 "license": "MIT", 18527 "peer": true, 18502 18528 "dependencies": { 18503 18529 "ajv": "^6.12.6", … … 19547 19573 "dev": true, 19548 19574 "license": "Apache-2.0", 19549 "peer": true,19550 19575 "dependencies": { 19551 19576 "playwright-core": "1.55.0" … … 19567 19592 "dev": true, 19568 19593 "license": "Apache-2.0", 19569 "peer": true,19570 19594 "bin": { 19571 19595 "playwright-core": "cli.js" … … 19586 19610 "darwin" 19587 19611 ], 19588 "peer": true,19589 19612 "engines": { 19590 19613 "node": "^8.16.0 || ^10.6.0 || >=11.0.0" … … 19636 19659 ], 19637 19660 "license": "MIT", 19661 "peer": true, 19638 19662 "dependencies": { 19639 19663 "nanoid": "^3.3.8", … … 20359 20383 "dev": true, 20360 20384 "license": "MIT", 20385 "peer": true, 20361 20386 "bin": { 20362 20387 "prettier": "bin/prettier.cjs" … … 20747 20772 "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", 20748 20773 "license": "MIT", 20774 "peer": true, 20749 20775 "dependencies": { 20750 20776 "loose-envify": "^1.1.0" … … 20769 20795 "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", 20770 20796 "license": "MIT", 20797 "peer": true, 20771 20798 "dependencies": { 20772 20799 "loose-envify": "^1.1.0", … … 20803 20830 "dev": true, 20804 20831 "license": "MIT", 20832 "peer": true, 20805 20833 "engines": { 20806 20834 "node": ">=0.10.0" … … 21058 21086 "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", 21059 21087 "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", 21060 "license": "MIT" 21088 "license": "MIT", 21089 "peer": true 21061 21090 }, 21062 21091 "node_modules/reflect.getprototypeof": { … … 21649 21678 "dev": true, 21650 21679 "license": "MIT", 21680 "peer": true, 21651 21681 "dependencies": { 21652 21682 "chokidar": "^4.0.0", … … 21753 21783 "devOptional": true, 21754 21784 "license": "MIT", 21785 "peer": true, 21755 21786 "dependencies": { 21756 21787 "fast-deep-equal": "^3.1.3", … … 23203 23234 ], 23204 23235 "license": "MIT", 23236 "peer": true, 23205 23237 "dependencies": { 23206 23238 "@csstools/css-parser-algorithms": "^3.0.4", … … 23531 23563 "dev": true, 23532 23564 "license": "MIT", 23565 "peer": true, 23533 23566 "dependencies": { 23534 23567 "cssesc": "^3.0.0", … … 24291 24324 "dev": true, 24292 24325 "license": "(MIT OR CC0-1.0)", 24326 "peer": true, 24293 24327 "engines": { 24294 24328 "node": ">=10" … … 24935 24969 "devOptional": true, 24936 24970 "license": "MIT", 24971 "peer": true, 24937 24972 "dependencies": { 24938 24973 "@types/eslint-scope": "^3.7.7", … … 25041 25076 "dev": true, 25042 25077 "license": "MIT", 25078 "peer": true, 25043 25079 "dependencies": { 25044 25080 "@discoveryjs/json-ext": "^0.5.0", … … 25121 25157 "dev": true, 25122 25158 "license": "MIT", 25159 "peer": true, 25123 25160 "dependencies": { 25124 25161 "@types/bonjour": "^3.5.9", -
understory/tags/1.7.0/readme.txt
r3385132 r3385769 4 4 Requires at least: 5.0 5 5 Tested up to: 6.8 6 Stable tag: 1. 6.36 Stable tag: 1.7.0 7 7 Requires PHP: 7.0 8 8 License: GPLv2 or later … … 77 77 78 78 == Changelog == 79 80 = 1.7.0 = 81 * Booking widget: Add support for selecting categories. 79 82 80 83 = 1.6.3 = -
understory/tags/1.7.0/understory.php
r3385132 r3385769 3 3 Plugin Name: Understory 4 4 Description: Connect your WordPress site with Understory, to easily add your booking widget to posts and pages. 5 Version: 1. 6.35 Version: 1.7.0 6 6 Author: Understory 7 7 Text Domain: understory … … 18 18 define('UNDERSTORY_PLUGIN_URL', plugin_dir_url(__FILE__)); 19 19 define('UNDERSTORY_PLUGIN_SLUG', 'understory'); 20 define('UNDERSTORY_PLUGIN_VERSION', '1. 6.3');20 define('UNDERSTORY_PLUGIN_VERSION', '1.7.0'); 21 21 define('UNDERSTORY_OPTION_KEY', 'understory_options'); 22 22 define('UNDERSTORY_NONCE_KEY', 'understory_nonce'); -
understory/trunk/CLAUDE.md
r3385132 r3385769 204 204 ### Version Management 205 205 206 Current version: 1. 6.3(defined in both `package.json` and `understory.php`)206 Current version: 1.7.0 (defined in both `package.json` and `understory.php`) -
understory/trunk/assets/js/gutenberg-booking-block-editor.js
r3351241 r3385769 33 33 default: "", 34 34 }, 35 tagIds: { 36 type: "string", 37 default: "", 38 }, 35 39 language: { 36 40 type: "string", … … 47 51 var [experiences, setExperiences] = useState([]); 48 52 var [languages, setLanguages] = useState([]); 53 var [tags, setTags] = useState([]); 49 54 var [isLoading, setIsLoading] = useState(true); 50 55 … … 62 67 63 68 function loadInitialData() { 64 const { storefronts, languages } = understoryBookingData;69 const { storefronts, languages, tags } = understoryBookingData; 65 70 66 71 // Set storefronts options from preloaded data … … 81 86 ]; 82 87 setLanguages(languageOptions); 88 89 // Set tags options from preloaded data 90 const tagOptions = [ 91 { label: "All", value: "" }, 92 ...(tags || []).map((tag) => ({ 93 label: tag.name, 94 value: tag.id, 95 })), 96 ]; 97 setTags(tagOptions); 83 98 84 99 if (!attributes.storefrontId) { … … 166 181 options: experiences, 167 182 onChange: (newVal) => setAttributes({ experienceId: newVal }), 183 }), 184 el(SelectControl, { 185 label: "Filter by tags", 186 multiple: true, 187 value: attributes.tagIds ? attributes.tagIds.split(",") : [], 188 options: tags, 189 onChange: (newVal) => { 190 setAttributes({ tagIds: newVal.join(",") }); 191 }, 168 192 }), 169 193 el(SelectControl, { … … 183 207 "data-storefront-id": attributes.storefrontId, 184 208 "data-experience-id": attributes.experienceId, 209 "data-tags": attributes.tagIds, 185 210 "data-language": attributes.language, 186 211 }) -
understory/trunk/assets/js/gutenberg-booking-block-editor.min.js
r3351241 r3385769 1 var UNDERSTORY_WIDGET_SCRIPT="https://widgets.understory.io/widgets/understory-booking-widget.js?environment=production";!function(e,t,n,o, r){var a=t.createElement,i=e.registerBlockType,{SelectControl:d,PanelBody:s}=n,c=r.InspectorControls,l=t.useEffect,u=t.useState;i("understory/booking-widget",{title:"Understory Booking Widget",icon:"tickets-alt",category:"widgets",attributes:{storefrontId:{type:"string",default:""},experienceId:{type:"string",default:""},language:{type:"string",default:o.defaultLanguage},companyId:{type:"string",default:o.companyId}},edit:function({attributes:e,setAttributes:t}){var[r,i]=u([]),[p,g]=u([]),[f,I]=u([]),[y,w]=u(!0);function b(n){const{companyId:r,ajaxUrl:a,nonce:i}=o;jQuery.post(a,{action:"understory_gutenberg_get_experiences_by_storefront",storefront_id:n,company_id:r,nonce:i}).done(function(n){if(!n.success)return console.error("Failed to load experiences:",n),void g([]);const o=[...Object.entries(n.data.experiences).map(([e,t])=>({label:t,value:e}))];g(o),e.experienceId&&!n.data.experiences[e.experienceId]&&t({experienceId:""})}).fail(function(){console.error("Failed to load experiences for storefront"),g([])})}return l(()=>{!function(){const{storefronts:n,languages:r}=o,a=[...Object.entries(n).map(([e,t])=>({label:t,value:e}))];i(a);const d=[...Object.entries(r).map(([e,t])=>({label:t,value:e}))];I(d),e.storefrontId||t({storefrontId:a[0]?.value||""});w(!1),function(e,t){if(!document.getElementById(t)){var n=document.createElement("script");n.id=t,n.src=e,n.async=!0,document.body.appendChild(n)}}(UNDERSTORY_WIDGET_SCRIPT)}()},[]),l(()=>{e.storefrontId&&b(e.storefrontId)},[e.storefrontId]),y?a(n.Spinner):a("div",{},a(c,{},a(s,{title:"Settings",initialOpen:!0},a(d,{label:"Storefront",value:e.storefrontId,options:r,onChange:e=>{t({storefrontId:e,experienceId:""}),e?b(e):g([])}}),a(d,{label:"Experience",value:e.experienceId,options:p,onChange:e=>t({experienceId:e})}),a(d,{label:"Language",value:e.language,options:f,onChange:e=>t({language:e})}))),a("div",{className:"understory-widget-preview"},a("div",{className:"understory-booking-widget","data-company-id":e.companyId,"data-storefront-id":e.storefrontId,"data-experience-id":e.experienceId,"data-language":e.language})))},save:function(){}})}(window.wp.blocks,window.wp.element,window.wp.components,window.understoryBookingData,window.wp.blockEditor);1 var UNDERSTORY_WIDGET_SCRIPT="https://widgets.understory.io/widgets/understory-booking-widget.js?environment=production";!function(e,t,n,o,a){var r=t.createElement,i=e.registerBlockType,{SelectControl:d,PanelBody:s}=n,l=a.InspectorControls,c=t.useEffect,u=t.useState;i("understory/booking-widget",{title:"Understory Booking Widget",icon:"tickets-alt",category:"widgets",attributes:{storefrontId:{type:"string",default:""},experienceId:{type:"string",default:""},tagIds:{type:"string",default:""},language:{type:"string",default:o.defaultLanguage},companyId:{type:"string",default:o.companyId}},edit:function({attributes:e,setAttributes:t}){var[a,i]=u([]),[g,p]=u([]),[f,I]=u([]),[y,b]=u([]),[m,w]=u(!0);function v(n){const{companyId:a,ajaxUrl:r,nonce:i}=o;jQuery.post(r,{action:"understory_gutenberg_get_experiences_by_storefront",storefront_id:n,company_id:a,nonce:i}).done(function(n){if(!n.success)return console.error("Failed to load experiences:",n),void p([]);const o=[...Object.entries(n.data.experiences).map(([e,t])=>({label:t,value:e}))];p(o),e.experienceId&&!n.data.experiences[e.experienceId]&&t({experienceId:""})}).fail(function(){console.error("Failed to load experiences for storefront"),p([])})}return c(()=>{!function(){const{storefronts:n,languages:a,tags:r}=o,d=[...Object.entries(n).map(([e,t])=>({label:t,value:e}))];i(d);const s=[...Object.entries(a).map(([e,t])=>({label:t,value:e}))];I(s);const l=[{label:"All",value:""},...(r||[]).map(e=>({label:e.name,value:e.id}))];b(l),e.storefrontId||t({storefrontId:d[0]?.value||""});w(!1),function(e,t){if(!document.getElementById(t)){var n=document.createElement("script");n.id=t,n.src=e,n.async=!0,document.body.appendChild(n)}}(UNDERSTORY_WIDGET_SCRIPT)}()},[]),c(()=>{e.storefrontId&&v(e.storefrontId)},[e.storefrontId]),m?r(n.Spinner):r("div",{},r(l,{},r(s,{title:"Settings",initialOpen:!0},r(d,{label:"Storefront",value:e.storefrontId,options:a,onChange:e=>{t({storefrontId:e,experienceId:""}),e?v(e):p([])}}),r(d,{label:"Experience",value:e.experienceId,options:g,onChange:e=>t({experienceId:e})}),r(d,{label:"Filter by tags",multiple:!0,value:e.tagIds?e.tagIds.split(","):[],options:y,onChange:e=>{t({tagIds:e.join(",")})}}),r(d,{label:"Language",value:e.language,options:f,onChange:e=>t({language:e})}))),r("div",{className:"understory-widget-preview"},r("div",{className:"understory-booking-widget","data-company-id":e.companyId,"data-storefront-id":e.storefrontId,"data-experience-id":e.experienceId,"data-tags":e.tagIds,"data-language":e.language})))},save:function(){}})}(window.wp.blocks,window.wp.element,window.wp.components,window.understoryBookingData,window.wp.blockEditor); -
understory/trunk/includes/elementor/lib/class-availability-widget.php
r3369871 r3385769 46 46 47 47 // Fetch experience tags 48 $tags_data = Understory_OptionsFetcher::get_tags($company_id); 49 48 50 if (!empty($company_id)) { 49 $tags_api_url = UNDERSTORY_API_BASE_URL . '/companies/' . urlencode($company_id) . '/experience-tags';50 $tags_data = Utils\DataFetcher::get($tags_api_url);51 52 51 $locations_api_url = UNDERSTORY_API_BASE_URL . '/companies/' . urlencode($company_id) . '/locations'; 53 52 $locations_data = Utils\DataFetcher::get($locations_api_url); -
understory/trunk/includes/elementor/lib/class-booking-widget.php
r3369591 r3385769 68 68 ); 69 69 70 $tags = Understory_OptionsFetcher::get_tags($company_id); 71 $tags_options = []; 72 if (!empty($tags)) { 73 foreach ($tags as $tag) { 74 $tags_options[$tag['id']] = $tag['name']; 75 } 76 } 77 78 $this->add_control( 79 'tag_ids', 80 [ 81 'label' => __('Filter by tags', 'understory'), 82 'type' => \Elementor\Controls_Manager::SELECT2, 83 'default' => '', 84 'options' => $tags_options, 85 'multiple' => true, 86 ] 87 ); 88 70 89 $this->add_control( 71 90 'language', … … 106 125 } 107 126 127 if (!$settings['tag_ids']) { 128 $settings['tag_ids'] = []; 129 } 130 108 131 ?> 109 132 <div class="understory-booking-widget" data-company-id="<?php echo esc_attr($company_id); ?>" 110 133 data-storefront-id="<?php echo esc_attr($storefront_id); ?>" 111 134 data-experience-id="<?php echo esc_attr($settings['experience_id']); ?>" 135 <?php if (!empty($settings['tag_ids'])): ?> 136 data-tags="<?php echo esc_attr(implode(',', $settings['tag_ids'])); ?>" 137 <?php endif; ?> 112 138 data-language="<?php echo esc_attr($settings['language']); ?>"></div> 113 139 <?php -
understory/trunk/includes/elementor/lib/class-experiences-widget.php
r3369591 r3385769 56 56 57 57 // Fetch experience tags 58 if (!empty($company_id)) { 59 $experience_tags_api_url = UNDERSTORY_API_BASE_URL . '/companies/' . urlencode($company_id) . '/experience-tags'; 60 $tags = Utils\DataFetcher::get($experience_tags_api_url); 61 } 58 $tags = Understory_OptionsFetcher::get_tags($company_id); 62 59 $tags_options = []; 63 60 if (!empty($tags)) { -
understory/trunk/includes/gutenberg/class-booking-block.php
r3369591 r3385769 25 25 26 26 if ($company_id && function_exists('register_block_type')) { 27 $tags = Understory_OptionsFetcher::get_tags($company_id); 28 27 29 $script_file = defined('WP_DEBUG') && WP_DEBUG 28 30 ? 'assets/js/gutenberg-booking-block-editor.js' … … 46 48 'storefronts' => Understory_OptionsFetcher::get_storefronts($company_id), 47 49 'languages' => Understory_OptionsFetcher::get_languages(['with_all' => false]), 50 'tags' => $tags, 48 51 'nonce' => wp_create_nonce('understory_gutenberg_nonce'), 49 52 'ajaxUrl' => admin_url('admin-ajax.php'), … … 63 66 'experienceId' => array('type' => 'string', 'default' => ''), 64 67 'language' => array('type' => 'string', 'default' => Understory_Settings::get_default_language()), 68 'tagIds' => array('type' => 'string', 'default' => ''), 65 69 'companyId' => array('type' => 'string', 'default' => $company_id), 66 70 'storefrontId' => array('type' => 'string', 'default' => ''), … … 95 99 ); 96 100 101 $tag_ids = $attributes['tagIds'] ?? ''; 102 97 103 ob_start(); 98 104 ?> 99 105 <div class="understory-booking-widget" data-company-id="<?php echo esc_attr($company_id); ?>" 100 106 data-storefront-id="<?php echo esc_attr($storefront_id); ?>" 101 data-experience-id="<?php echo esc_attr($attributes['experienceId']); ?>" 107 data-experience-id="<?php echo esc_attr($attributes['experienceId']); ?>" <?php if (!empty($tag_ids)): ?> 108 data-tags="<?php echo esc_attr($tag_ids); ?>" <?php endif; ?> 102 109 data-language="<?php echo esc_attr($attributes['language']); ?>"></div> 103 110 <?php -
understory/trunk/includes/gutenberg/class-experiences-block.php
r3369591 r3385769 38 38 39 39 if ($company_option_set && function_exists('register_block_type')) { 40 $experience_tags_api_url = UNDERSTORY_API_BASE_URL . '/companies/' . urlencode($company_id) . '/experience-tags'; 41 $tags = Utils\DataFetcher::get($experience_tags_api_url); 40 $tags = Understory_OptionsFetcher::get_tags($company_id); 42 41 43 42 $script_file = defined('WP_DEBUG') && WP_DEBUG … … 58 57 'defaultLanguage' => Understory_Settings::get_default_language(), 59 58 'languages' => Understory_OptionsFetcher::get_languages(['with_all' => false]), 60 'tags' => !empty($tags) ? $tags : [],59 'tags' => $tags, 61 60 'companyIdSet' => $company_option_set, 62 61 'storefronts' => Understory_Settings::get_all_storefronts($company_id) ?? [], -
understory/trunk/includes/shortcodes/class-booking-shortcode.php
r3369591 r3385769 29 29 'experience_id' => '', 30 30 'language' => Understory_Settings::get_default_language(), 31 'tag_ids' => '', 31 32 // Fallback to default storefront if not set, enabling backwards 32 33 // single-storefront implementations … … 50 51 <div class="understory-booking-widget" data-company-id="<?php echo esc_attr($atts['company_id']); ?>" 51 52 data-storefront-id="<?php echo esc_attr($atts['storefront_id']); ?>" <?php if (!empty($atts['experience_id'])): ?> 52 data-experience-id="<?php echo esc_attr($atts['experience_id']); ?>" <?php endif; ?> 53 data-experience-id="<?php echo esc_attr($atts['experience_id']); ?>" <?php endif; ?> <?php if (!empty($atts['tag_ids'])): ?> data-tags="<?php echo esc_attr($atts['tag_ids']); ?>" <?php endif; ?> 53 54 data-language="<?php echo esc_attr($atts['language']); ?>"></div> 54 55 <?php -
understory/trunk/includes/tabs-content.php
r3369591 r3385769 14 14 $languages = Understory_OptionsFetcher::get_languages(['with_all' => false]); 15 15 16 $tags_api_url = UNDERSTORY_API_BASE_URL . '/companies/' . urlencode($company_id) . '/experience-tags'; 17 $experience_tags = Utils\DataFetcher::get($tags_api_url); 16 $experience_tags = Understory_OptionsFetcher::get_tags($company_id); 18 17 19 18 $locations_api_url = UNDERSTORY_API_BASE_URL . '/companies/' . urlencode($company_id) . '/locations'; -
understory/trunk/includes/tabs/tab-booking-widget-shortcode.php
r3351241 r3385769 31 31 </select> 32 32 </div> 33 <div class="grid-container"> 34 <label for="booking-tag-select"><?php esc_html_e('Filter by tags', 'understory'); ?></label> 35 <select id="booking-tag-select" data-shortcode-field="tag_ids" multiple> 36 <option value="" selected><?php esc_html_e('All', 'understory'); ?></option> 37 <?php foreach ($experience_tags as $experience_tag): ?> 38 <option value="<?php echo esc_attr($experience_tag['id']); ?>"><?php echo esc_html($experience_tag['name']); ?></option> 39 <?php endforeach; ?> 40 </select> 41 </div> 33 42 </div> 34 43 <div class="shortcode-container"> -
understory/trunk/includes/utils/class-options-fetcher.php
r3369591 r3385769 112 112 } 113 113 114 public static function get_tags($company_id) 115 { 116 if (empty($company_id)) { 117 return []; 118 } 119 120 $experience_tags_api_url = UNDERSTORY_API_BASE_URL . '/companies/' . urlencode($company_id) . '/experience-tags'; 121 $tags = Utils\DataFetcher::get($experience_tags_api_url); 122 123 return !empty($tags) ? $tags : []; 124 } 125 114 126 /** 115 127 * Get a user-friendly display name for language codes -
understory/trunk/package-lock.json
r3385132 r3385769 1 1 { 2 2 "name": "understory", 3 "version": "1. 6.3",3 "version": "1.7.0", 4 4 "lockfileVersion": 3, 5 5 "requires": true, … … 7 7 "": { 8 8 "name": "understory", 9 "version": "1. 6.3",9 "version": "1.7.0", 10 10 "dependencies": { 11 11 "@mui/material": "6.4.2", … … 112 112 "devOptional": true, 113 113 "license": "MIT", 114 "peer": true, 114 115 "dependencies": { 115 116 "@ampproject/remapping": "^2.2.0", … … 2008 2009 ], 2009 2010 "license": "MIT", 2011 "peer": true, 2010 2012 "engines": { 2011 2013 "node": ">=18" … … 2031 2033 ], 2032 2034 "license": "MIT", 2035 "peer": true, 2033 2036 "engines": { 2034 2037 "node": ">=18" … … 2151 2154 "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==", 2152 2155 "license": "MIT", 2156 "peer": true, 2153 2157 "dependencies": { 2154 2158 "@babel/runtime": "^7.18.3", … … 2194 2198 "integrity": "sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==", 2195 2199 "license": "MIT", 2200 "peer": true, 2196 2201 "dependencies": { 2197 2202 "@babel/runtime": "^7.18.3", … … 3897 3902 "integrity": "sha512-9jKr53KbAJyyBRx8LRmX7ATXHlGtxVQdPgm1uyXMoEPMVkSJW1yO3vFgfYoDbGx4ZHcCNuWa4FkFIPWVt9fghA==", 3898 3903 "license": "MIT", 3904 "peer": true, 3899 3905 "dependencies": { 3900 3906 "@babel/runtime": "^7.26.0", … … 4007 4013 "integrity": "sha512-XcbBYxDS+h/lgsoGe78ExXFZXtuIlSBpn/KsZq8PtZcIkUNJInkuDqcLd2rVBQrDC1u+rvVovdaWPf2FHKJf3w==", 4008 4014 "license": "MIT", 4015 "peer": true, 4009 4016 "dependencies": { 4010 4017 "@babel/runtime": "^7.26.0", … … 5491 5498 "dev": true, 5492 5499 "license": "MIT", 5500 "peer": true, 5493 5501 "dependencies": { 5494 5502 "@babel/core": "^7.21.3", … … 5996 6004 "devOptional": true, 5997 6005 "license": "MIT", 6006 "peer": true, 5998 6007 "dependencies": { 5999 6008 "@types/estree": "*", … … 6211 6220 "devOptional": true, 6212 6221 "license": "MIT", 6222 "peer": true, 6213 6223 "dependencies": { 6214 6224 "undici-types": "~6.20.0" … … 6263 6273 "integrity": "sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==", 6264 6274 "license": "MIT", 6275 "peer": true, 6265 6276 "dependencies": { 6266 6277 "@types/prop-types": "*", … … 6273 6284 "integrity": "sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==", 6274 6285 "license": "MIT", 6286 "peer": true, 6275 6287 "peerDependencies": { 6276 6288 "@types/react": "^18.0.0" … … 6407 6419 "dev": true, 6408 6420 "license": "MIT", 6421 "peer": true, 6409 6422 "dependencies": { 6410 6423 "@types/node": "*", … … 6541 6554 "dev": true, 6542 6555 "license": "BSD-2-Clause", 6556 "peer": true, 6543 6557 "dependencies": { 6544 6558 "@typescript-eslint/scope-manager": "6.21.0", … … 7868 7882 "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", 7869 7883 "license": "MIT", 7884 "peer": true, 7870 7885 "dependencies": { 7871 7886 "loose-envify": "^1.1.0" … … 8903 8918 "devOptional": true, 8904 8919 "license": "MIT", 8920 "peer": true, 8905 8921 "bin": { 8906 8922 "acorn": "bin/acorn" … … 8973 8989 "devOptional": true, 8974 8990 "license": "MIT", 8991 "peer": true, 8975 8992 "dependencies": { 8976 8993 "fast-deep-equal": "^3.1.1", … … 9974 9991 ], 9975 9992 "license": "MIT", 9993 "peer": true, 9976 9994 "dependencies": { 9977 9995 "caniuse-lite": "^1.0.30001688", … … 11570 11588 "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==", 11571 11589 "license": "MIT", 11590 "peer": true, 11572 11591 "funding": { 11573 11592 "type": "github", … … 11579 11598 "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", 11580 11599 "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", 11581 "license": "MIT" 11600 "license": "MIT", 11601 "peer": true 11582 11602 }, 11583 11603 "node_modules/debounce": { … … 11966 11986 "integrity": "sha512-DPnhUXvmvKT2dFA/j7B+riVLUt9Q6RKJlcppojL5CoRywJJKLDYnRlw0gTFKfgDPHP5E04UoB71SxoJlVZy8FA==", 11967 11987 "dev": true, 11968 "license": "BSD-3-Clause" 11988 "license": "BSD-3-Clause", 11989 "peer": true 11969 11990 }, 11970 11991 "node_modules/diff": { … … 12635 12656 "dev": true, 12636 12657 "license": "MIT", 12658 "peer": true, 12637 12659 "dependencies": { 12638 12660 "@eslint-community/eslint-utils": "^4.2.0", … … 12691 12713 "dev": true, 12692 12714 "license": "MIT", 12715 "peer": true, 12693 12716 "bin": { 12694 12717 "eslint-config-prettier": "bin/cli.js" … … 16231 16254 "dev": true, 16232 16255 "license": "MIT", 16256 "peer": true, 16233 16257 "dependencies": { 16234 16258 "@jest/core": "^29.7.0", … … 18238 18262 "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", 18239 18263 "license": "MIT", 18264 "peer": true, 18240 18265 "engines": { 18241 18266 "node": "*" … … 18500 18525 "dev": true, 18501 18526 "license": "MIT", 18527 "peer": true, 18502 18528 "dependencies": { 18503 18529 "ajv": "^6.12.6", … … 19547 19573 "dev": true, 19548 19574 "license": "Apache-2.0", 19549 "peer": true,19550 19575 "dependencies": { 19551 19576 "playwright-core": "1.55.0" … … 19567 19592 "dev": true, 19568 19593 "license": "Apache-2.0", 19569 "peer": true,19570 19594 "bin": { 19571 19595 "playwright-core": "cli.js" … … 19586 19610 "darwin" 19587 19611 ], 19588 "peer": true,19589 19612 "engines": { 19590 19613 "node": "^8.16.0 || ^10.6.0 || >=11.0.0" … … 19636 19659 ], 19637 19660 "license": "MIT", 19661 "peer": true, 19638 19662 "dependencies": { 19639 19663 "nanoid": "^3.3.8", … … 20359 20383 "dev": true, 20360 20384 "license": "MIT", 20385 "peer": true, 20361 20386 "bin": { 20362 20387 "prettier": "bin/prettier.cjs" … … 20747 20772 "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", 20748 20773 "license": "MIT", 20774 "peer": true, 20749 20775 "dependencies": { 20750 20776 "loose-envify": "^1.1.0" … … 20769 20795 "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", 20770 20796 "license": "MIT", 20797 "peer": true, 20771 20798 "dependencies": { 20772 20799 "loose-envify": "^1.1.0", … … 20803 20830 "dev": true, 20804 20831 "license": "MIT", 20832 "peer": true, 20805 20833 "engines": { 20806 20834 "node": ">=0.10.0" … … 21058 21086 "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", 21059 21087 "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", 21060 "license": "MIT" 21088 "license": "MIT", 21089 "peer": true 21061 21090 }, 21062 21091 "node_modules/reflect.getprototypeof": { … … 21649 21678 "dev": true, 21650 21679 "license": "MIT", 21680 "peer": true, 21651 21681 "dependencies": { 21652 21682 "chokidar": "^4.0.0", … … 21753 21783 "devOptional": true, 21754 21784 "license": "MIT", 21785 "peer": true, 21755 21786 "dependencies": { 21756 21787 "fast-deep-equal": "^3.1.3", … … 23203 23234 ], 23204 23235 "license": "MIT", 23236 "peer": true, 23205 23237 "dependencies": { 23206 23238 "@csstools/css-parser-algorithms": "^3.0.4", … … 23531 23563 "dev": true, 23532 23564 "license": "MIT", 23565 "peer": true, 23533 23566 "dependencies": { 23534 23567 "cssesc": "^3.0.0", … … 24291 24324 "dev": true, 24292 24325 "license": "(MIT OR CC0-1.0)", 24326 "peer": true, 24293 24327 "engines": { 24294 24328 "node": ">=10" … … 24935 24969 "devOptional": true, 24936 24970 "license": "MIT", 24971 "peer": true, 24937 24972 "dependencies": { 24938 24973 "@types/eslint-scope": "^3.7.7", … … 25041 25076 "dev": true, 25042 25077 "license": "MIT", 25078 "peer": true, 25043 25079 "dependencies": { 25044 25080 "@discoveryjs/json-ext": "^0.5.0", … … 25121 25157 "dev": true, 25122 25158 "license": "MIT", 25159 "peer": true, 25123 25160 "dependencies": { 25124 25161 "@types/bonjour": "^3.5.9", -
understory/trunk/readme.txt
r3385132 r3385769 4 4 Requires at least: 5.0 5 5 Tested up to: 6.8 6 Stable tag: 1. 6.36 Stable tag: 1.7.0 7 7 Requires PHP: 7.0 8 8 License: GPLv2 or later … … 77 77 78 78 == Changelog == 79 80 = 1.7.0 = 81 * Booking widget: Add support for selecting categories. 79 82 80 83 = 1.6.3 = -
understory/trunk/understory.php
r3385132 r3385769 3 3 Plugin Name: Understory 4 4 Description: Connect your WordPress site with Understory, to easily add your booking widget to posts and pages. 5 Version: 1. 6.35 Version: 1.7.0 6 6 Author: Understory 7 7 Text Domain: understory … … 18 18 define('UNDERSTORY_PLUGIN_URL', plugin_dir_url(__FILE__)); 19 19 define('UNDERSTORY_PLUGIN_SLUG', 'understory'); 20 define('UNDERSTORY_PLUGIN_VERSION', '1. 6.3');20 define('UNDERSTORY_PLUGIN_VERSION', '1.7.0'); 21 21 define('UNDERSTORY_OPTION_KEY', 'understory_options'); 22 22 define('UNDERSTORY_NONCE_KEY', 'understory_nonce');
Note: See TracChangeset
for help on using the changeset viewer.