=== EffortLess Floating Social Network ===
Contributors: domclic
Tags: social media, floating icons, widget, customization
Requires at least: 6.9
Tested up to: 6.9
Requires PHP: 8.0
Stable tag: 1.0.18
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Displays a customizable floating social icons widget with position and icon settings.

== Description ==

The EffortLess Floating Social Network plugin allows you to add a customizable floating social icons widget to your WordPress site. Easily configure the position, icons, URLs, and background styles through the admin settings. This plugin is designed for WordPress 6.9+ and PHP 8.0+, ensuring compatibility with modern WordPress environments.

= Features =
* Customizable icon positions (left or right, X and Y coordinates).
* Support for default and custom icons.
* Background options (white or transparent).
* Easy management of social links via the WordPress admin.

== Installation ==

1. Upload the `effortless-floating-social-network` folder to the `/wp-content/plugins/` directory.
2. Activate the plugin through the 'Plugins' menu in WordPress.
3. Go to Settings > Social Icons to configure your social links and positions.

== Frequently Asked Questions ==

= How do I add a custom icon? =
Go to the Social Icons settings, select "Custom (Media Library)" for an icon, and upload or input a URL.

= Why aren't my icons showing? =
Ensure the `assets/images/` directory contains the default icon files (e.g., `facebook-icon.png`, `twitter-icon.png`) or verify your custom icon URLs.

= Does this plugin support translations? =
Yes, translations are automatically handled by WordPress for plugins hosted on WordPress.org.

== Screenshots ==

1. Social Icons Settings page.
2. Example of floating icons on the frontend.

== Changelog ==

= 1.0.18 =
* Removed dead `$text_domain` property (never used; text domain is passed inline to every i18n call).
* Moved frontend CSS to `wp_add_inline_style()` in `elfsn_enqueue_frontend_assets()` so styles are output in `<head>` via the enqueue system; removed the duplicated inline `<style>` block and the now-unnecessary `$frontend_styles_printed` guard.
* Fixed empty container: both the floating widget and the shortcode now bail before rendering the wrapper `<div>` when no link has a usable URL and icon.
* Translated the previously hard-coded `'Unauthorized'` error message.
* Fixed variable alignment in `elfsn_ajax_push_to_network()`.
* Push button HTML is now captured on page load and restored on AJAX success/failure instead of being duplicated as a hard-coded string in JS.
* `uninstall.php` now paginates `get_sites()` in batches of 100 instead of loading all sites at once.
* Updated FAQ to reflect that `load_plugin_textdomain()` is no longer called.

= 1.0.17 =
* Removed discouraged `load_plugin_textdomain()` call; WordPress.org handles translations automatically since WP 4.6.
* Added missing `translators:` comment above `esc_html__()` call containing a `%d` placeholder.
* Prefixed global variables `$sites` and `$site` in `uninstall.php` to `$elfsn_sites` / `$elfsn_site` per plugin naming conventions.

= 1.0.16 =
* Fixed PHP parse error in elfsn_render_social_icons and elfsn_render_shortcode: removed invalid PHP open/close tags inside class methods; both methods now use pure PHP echo/foreach throughout.

= 1.0.15 =
* Fixed all issues found in code review: missing return after permission check, CSS injection via position values, XSS sink in buildSocialLinkRow, icon field not allowlisted, push handler now re-sanitizes before replicating, sanitize_position now guards against non-array input.
* Multisite push now paginates get_sites() in batches of 100 instead of loading all sites at once.
* file_exists() in icon resolution is now memoized per request to avoid repeated filesystem stats.
* Shared frontend CSS is now printed only once even when both the floating widget and shortcode are on the same page.
* Added uninstall.php to clean up all plugin options on deletion.
* Version constant ELFSN_VERSION defined in bootstrap; asset enqueue version updated to match.
* Removed emoji from translatable string in Remove row button.
* Fixed readme: Requires at least, Tested up to, and description now all consistently reference WordPress 6.9.
* Restored load_plugin_textdomain() for non-WordPress.org deployments.

= 1.0.14 =
* Added multisite support: super admins can push current site's social icons settings to all other sites in the network with one click.
* Tested up to WordPress 6.9.

= 1.0.13 =
* Fixed Facebook icon: use `dashicons-facebook-alt` (solid variant).
* Fixed X (Twitter) icon: use `dashicons-x-twitter` (WP 6.1+ rebrand).
* Removed GitHub from Dashicons map (no glyph exists); GitHub rows show an empty preview until a custom image is uploaded.
* Default background changed from white to transparent.
* Settings row fields are now top-aligned (align-items: flex-start).
* Background field replaced with a CSS toggle switch (off = transparent, on = white).

= 1.0.12 =
* Fixed icon preview flickering: PHP now renders the initial state; JS only updates on user interaction.
* Added more social networks with Dashicons support: WhatsApp, GitHub, Reddit, Spotify, Twitch, X (Twitter).
* Removed "Save Changes" button; settings now auto-save via AJAX with debounce and a "Saved" status indicator.
* Added AJAX endpoint `elfsn_save_settings` for secure dynamic saving with nonce verification.

= 1.0.11 =
* Redesigned settings UI: icon rows now display in a compact horizontal card layout with a live icon preview (Dashicon or custom image thumbnail).
* Raw custom icon URL input replaced by a hidden field; user interacts only with the media picker and a "Remove" button.
* Added Dashicons as font icon fallback on the frontend when no custom image is set.
* Frontend rendering now uses `<span class="dashicons">` for font icons and background-image for custom images.
* Dashicons enqueued on the frontend via `wp_enqueue_style( 'dashicons' )`.
* Bumped version number.

= 1.0.10 =
* Added always-visible media library picker for each social link icon; custom icon overrides the default icon file if set.
* Added `[elfsn_social_icons]` shortcode to render social icons horizontally inline in any page or post.
* Extracted icon URL resolution into a shared private method to avoid duplication between the floating widget and the shortcode.
* Bumped version number.

= 1.0.9 =
* Refactored plugin class into `includes/class-elfsn-social-icons-floating.php` to follow WordPress file naming conventions.
* Fixed all WordPress Coding Standards (phpcs) violations: added PHPDoc blocks, strict `in_array()` comparisons, Yoda conditions, and inline comment punctuation.
* Bumped version number.

= 1.0.8 =
* Removed `load_plugin_textdomain()` as it’s handled automatically by WordPress.org.
* Updated Plugin URI and Author URI to valid domains.
* Bumped version number.

= 1.0.7 =
* Initial release with basic functionality.

== Upgrade Notice ==

= 1.0.18 =
Code-quality pass: moves CSS to enqueue system, fixes empty container output, cleans up dead code and JS duplication, paginates uninstall cleanup.

= 1.0.17 =
Removes discouraged `load_plugin_textdomain()`, adds translators comment, and fixes global variable prefixing in uninstall.php.

= 1.0.16 =
Fixes a PHP parse error introduced in 1.0.15 that prevented the plugin from loading.

= 1.0.15 =
Security and code-quality fixes. Recommended update for all users.

= 1.0.12 =
Update for dynamic auto-saving, more social networks, and a fixed icon preview.

= 1.0.11 =
Update for improved admin UI with live icon previews and Dashicons font icon support on the frontend.

= 1.0.10 =
Update to use the media library for icon images and to embed social icons inline with the new shortcode.

= 1.0.9 =
Update to benefit from improved code structure and full WordPress Coding Standards compliance.

= 1.0.8 =
Update to benefit from automatic translation loading and ensure compliance with WordPress URI standards.