=== StrollPlace Widgets ===
Tags: places, real-estate, widgets
Requires at least: 6.5
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 0.1.1
License: GPL-2.0-or-later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Public place cards and listing enrichment using the StrollPlace widget service.

== Installation ==
Upload the ZIP under Plugins > Add New > Upload Plugin, activate it, then visit
StrollPlace. No StrollPlace account or MLS feed credentials required.
Open StrollPlace > Overview to review and explicitly enable the external service.
It stays off after activation until you opt in. Enabled indicates permission,
not a successful connection test.
Open StrollPlace > Shortcodes > Add new to create a named place card or listing
configuration. Choose content, provider, supported placements and appearance.
Copy [strollplace id="SAVED-UUID"], or select the saved name in the StrollPlace
Gutenberg block. Gutenberg selects saved configurations; legacy direct blocks
and shortcodes still work. Edit once to update every use; trash suppresses output
and restore preserves its ID. Copy creates another independently editable entry.
Open StrollPlace > Listing pages to choose Auto mode for site-wide enrichment or
Manual mode for explicitly placed listing configurations. Containers do not
activate listing detection by themselves. Only users allowed to activate plugins
can manage the library, consent or listing settings.
Its rendering includes StrollPlace branding and source links. All local code is included as readable PHP and JavaScript. Original SCSS and
shared TypeScript with build tooling are included under source/. The installed
plugin requires no compilation; developer rebuild instructions are in the
repository integrations/wordpress/README.md.

== External service ==
This plugin intentionally loads executable JavaScript and styles from
https://widgets.strollplace.com to render the shared StrollPlace runtime.
The immutable bootstrap is integrity checked; compatible v1 runtime updates
are delivered by StrollPlace automatically. The bootstrap does not pin runtime
releases. No remote code is executed by PHP.
Editor/admin searches send the entered place query to the public search service.
Visitors send selected place IDs or detected listing city/state (and coordinates
where the shared adapter supports them) to the public service. Browser requests
also expose normal connection metadata such as IP address to that service.
Requests omit credentials; no MLS feed keys or StrollPlace login is collected.
Missing data or blocked
service delivery leaves the widget empty. Review your site's privacy disclosure
before enabling. Terms of service: https://strollplace.com/terms
Privacy information: https://strollplace.com/privacy

== Shortcodes ==
[strollplace id="SAVED-UUID"]

Legacy direct forms remain supported:
[strollplace place_type="city" place_id="UUID-FROM-PLACE-SEARCH"]
[strollplace mode="listing"]
[strollplace mode="container" container="strollplace-listing-context"]

== Multisite ==

Supports both network activation and per-site activation where network policy
permits it. Network activation makes the plugin available; it does not enable
the external service on every site. Each site's plugin manager configures its
own StrollPlace pages. Consent, saved shortcodes, provider, appearance and automatic
mode use that site's options table. There are no shared network defaults.
New sites start without service consent, so external requests and automatic
enrichment stay inactive until a plugin manager opts in. Auto mode is selected
by default.
Only users with activate_plugins for that site can configure it; a site admin
cannot configure a different site. Super administrators retain normal access.
No activation-time scan or write across the network is performed. On permanent
removal, delete strollplace_settings and strollplace_shortcodes for each site that used
the plugin.

== Compatibility ==
Requires a theme that calls wp_footer for place cards and listing enrichment.
Place blocks and shortcodes enqueue their loader for footer delivery. Dynamic
navigation must preserve the loaded runtime or execute WordPress-rendered embed scripts.
No third-party IDX plugins are modified. Closed roots and cross-origin iframes
cannot be inspected from the outer document. Install inside the IDX document.
Settings are retained on deactivation and uninstall; delete the
strollplace_settings and strollplace_shortcodes options manually if permanently
removing the plugin.

== Frequently Asked Questions ==

= Does activation contact StrollPlace? =
No. External requests are disabled until a plugin manager enables the service
in StrollPlace. This applies to editor/admin searches and visitors.

= Is this an official integration with the IDX providers? =
No provider affiliation is implied. Adapters read supported public rendered
markup; custom templates, closed roots and cross-origin frames may not work.

= Can I cache pages or use CSP? =
Yes. Purge HTML caches after changing settings. Preserve script data attributes,
integrity and crossorigin; do not combine or rewrite remote widget scripts.
Hash/origin CSP modes suit full-page caching. Nonce mode requires coordinated
fresh header and HTML nonces per response, or a full-page cache bypass.

== Changelog ==

= 0.1.1 =
* Make settings sanitization explicit for every field and use WordPress color
  sanitization. Clarify footer delivery and default Auto mode documentation.

= 0.1.0 =
* Initial place card block and shortcode, provider-aware listing enrichment,
  explicit service opt-in, appearance settings and immutable bootstrap support.
