Plugin Directory

Changeset 3457266


Ignore:
Timestamp:
02/09/2026 04:29:14 PM (8 weeks ago)
Author:
jajasolutions
Message:

Version 2.0.2: Fix sticky nav, show_image_count setting, German translations, grid image height, hover border-radius, pagination dots, enable load_plugin_textdomain

Location:
luxe-gallery
Files:
8 edited
33 copied

Legend:

Unmodified
Added
Removed
  • luxe-gallery/tags/2.0.2/admin/class-luxe-gallery-settings.php

    r3456001 r3457266  
    349349            array(
    350350                'field' => 'enable_lightbox',
    351                 'description' => __( 'Enable the PhotoSwipe lightbox for galleries by default.', 'luxe-gallery' )
     351                'description' => __( 'Enable the lightbox for galleries by default.', 'luxe-gallery' )
    352352            )
    353353        );
     
    433433        $output = array();
    434434
    435         if ( isset( $input['enable_webp'] ) ) {
    436             $output['enable_webp'] = (bool) $input['enable_webp'];
    437         }
     435        $output['enable_webp'] = ! empty( $input['enable_webp'] );
    438436
    439437        if ( isset( $input['webp_quality'] ) ) {
     
    458456        }
    459457
    460         if ( isset( $input['lazy_loading'] ) ) {
    461             $output['lazy_loading'] = (bool) $input['lazy_loading'];
    462         }
    463 
    464         if ( isset( $input['preload_hero_images'] ) ) {
    465             $output['preload_hero_images'] = (bool) $input['preload_hero_images'];
    466         }
    467 
    468         if ( isset( $input['show_image_count'] ) ) {
    469             $output['show_image_count'] = (bool) $input['show_image_count'];
    470         }
    471 
    472         if ( isset( $input['enable_image_titles'] ) ) {
    473             $output['enable_image_titles'] = (bool) $input['enable_image_titles'];
    474         }
     458        $output['lazy_loading'] = ! empty( $input['lazy_loading'] );
     459
     460        $output['preload_hero_images'] = ! empty( $input['preload_hero_images'] );
     461
     462        $output['show_image_count'] = ! empty( $input['show_image_count'] );
     463
     464        $output['enable_image_titles'] = ! empty( $input['enable_image_titles'] );
    475465
    476466        if ( isset( $input['nav_height'] ) ) {
     
    502492        }
    503493
    504         if ( isset( $input['enable_lightbox'] ) ) {
    505             $output['enable_lightbox'] = (bool) $input['enable_lightbox'];
    506         }
    507 
    508         if ( isset( $input['enable_sharing'] ) ) {
    509             $output['enable_sharing'] = (bool) $input['enable_sharing'];
    510         }
     494        $output['enable_lightbox'] = ! empty( $input['enable_lightbox'] );
     495
     496        $output['enable_sharing'] = ! empty( $input['enable_sharing'] );
    511497
    512498        // Branding options.
  • luxe-gallery/tags/2.0.2/includes/class-luxe-gallery-shortcode.php

    r3457250 r3457266  
    267267
    268268        // Single CSS file (includes slider + lightbox styles — no external libraries).
    269         wp_enqueue_style( 'luxe-gallery-public', plugin_dir_url( __FILE__ ) . '../public/css/luxe-gallery-public.css', array(), '2.0.1', 'all' );
     269        wp_enqueue_style( 'luxe-gallery-public', plugin_dir_url( __FILE__ ) . '../public/css/luxe-gallery-public.css', array(), '2.0.2', 'all' );
    270270
    271271        // Single JS file (includes custom slider + lightbox — no jQuery, Swiper, or PhotoSwipe).
    272         wp_enqueue_script( 'luxe-gallery-public-js', plugin_dir_url( __FILE__ ) . '../public/js/luxe-gallery-public.js', array(), '2.0.1', true );
     272        wp_enqueue_script( 'luxe-gallery-public-js', plugin_dir_url( __FILE__ ) . '../public/js/luxe-gallery-public.js', array(), '2.0.2', true );
    273273
    274274        // Pass translatable strings to JavaScript.
     
    332332        if ( ! empty( $settings['border_radius'] ) ) {
    333333            $inline_css .= sprintf(
    334                 ' #luxe-gallery-%s .hero-image-item img, #luxe-gallery-%s .grid-image-item img { border-radius: %dpx; }',
     334                ' #luxe-gallery-%s .hero-image-item, #luxe-gallery-%s .grid-image-item { border-radius: %dpx; overflow: hidden; }',
    335335                esc_attr( $gallery_id ),
    336336                esc_attr( $gallery_id ),
  • luxe-gallery/tags/2.0.2/languages/luxe-gallery-de_DE.po

    r3434264 r3457266  
    44msgid ""
    55msgstr ""
    6 "Project-Id-Version: Luxe Gallery 1.1.0\n"
     6"Project-Id-Version: Luxe Gallery 2.0.2\n"
    77"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/luxe-gallery\n"
    88"POT-Creation-Date: 2025-01-07 10:00+0000\n"
     
    297297#: admin/class-luxe-gallery-settings.php:343
    298298msgid "Enable the PhotoSwipe lightbox for galleries by default."
    299 msgstr "PhotoSwipe-Lightbox für Galerien standardmäßig aktivieren."
     299msgstr "Lightbox für Galerien standardmäßig aktivieren."
     300
     301#: admin/class-luxe-gallery-settings.php
     302msgid "Enable the lightbox for galleries by default."
     303msgstr "Lightbox für Galerien standardmäßig aktivieren."
    300304
    301305#: admin/class-luxe-gallery-settings.php:350
     
    305309#: admin/class-luxe-gallery-settings.php:355
    306310msgid "Enable social sharing buttons in the lightbox by default."
    307 msgstr "Soziale Teilen-Buttons in der Lightbox standardmäßig aktivieren."
     311msgstr "Teilen-Buttons in der Lightbox standardmäßig aktivieren."
    308312
    309313#: admin/class-luxe-gallery-settings.php:362
     
    410414msgid "Gallery Settings"
    411415msgstr "Galerie-Einstellungen"
     416
     417#: public/partials/gallery-display.php
     418msgid "photo"
     419msgid_plural "photos"
     420msgstr[0] "Foto"
     421msgstr[1] "Fotos"
     422
     423#: admin/class-luxe-gallery-settings.php:216
     424msgid "Show Image Count"
     425msgstr "Anzahl der Bilder anzeigen"
     426
     427#: admin/class-luxe-gallery-settings.php:222
     428msgid "Displays the number of images in each category."
     429msgstr "Zeigt die Anzahl der Bilder in jeder Kategorie an."
     430
     431#: includes/class-luxe-gallery-shortcode.php
     432msgid "Link copied to clipboard!"
     433msgstr "Link in die Zwischenablage kopiert!"
     434
     435#: includes/class-luxe-gallery-shortcode.php
     436msgid "Image lightbox"
     437msgstr "Bild-Lightbox"
     438
     439#: includes/class-luxe-gallery-shortcode.php
     440msgid "Close"
     441msgstr "Schließen"
     442
     443#: includes/class-luxe-gallery-shortcode.php
     444msgid "Previous image"
     445msgstr "Vorheriges Bild"
     446
     447#: includes/class-luxe-gallery-shortcode.php
     448msgid "Next image"
     449msgstr "Nächstes Bild"
     450
     451#: includes/class-luxe-gallery-shortcode.php
     452msgid "Share"
     453msgstr "Teilen"
     454
     455#: includes/class-luxe-gallery-shortcode.php
     456msgid "Go to slide"
     457msgstr "Gehe zu Folie"
     458
     459#: includes/class-luxe-gallery-shortcode.php
     460msgid "Image could not be loaded"
     461msgstr "Bild konnte nicht geladen werden"
  • luxe-gallery/tags/2.0.2/luxe-gallery.php

    r3457250 r3457266  
    44 * Plugin URI:        https://jajasolutions.de/luxe-gallery
    55 * Description:       Premium gallery with category management - Ideal for real estate, vacation rentals and portfolios. Features customizable hero grid, automatic categorization, WebP optimization and immersive fullscreen view for professional presentations.
    6  * Version:           2.0.1
     6 * Version:           2.0.2
    77 * Author:            Janni Hares
    88 * Author URI:        https://jajasolutions.de
     
    2929 * Load plugin textdomain for internationalization
    3030 *
    31  * Note: Commented out as WordPress.org handles this automatically since WP 4.6
    32  * Uncomment if distributing outside of WordPress.org
    33  *
    3431 * @since 1.0.0
    3532 * @return void
    3633 */
    37 // function luxe_gallery_load_textdomain() {
    38 //     load_plugin_textdomain( 'luxe-gallery', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
    39 // }
    40 // add_action( 'plugins_loaded', 'luxe_gallery_load_textdomain' );
     34function luxe_gallery_load_textdomain() {
     35    load_plugin_textdomain( 'luxe-gallery', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
     36}
     37add_action( 'init', 'luxe_gallery_load_textdomain' );
    4138
    4239// Include all plugin classes
  • luxe-gallery/tags/2.0.2/public/css/luxe-gallery-public.css

    r3457250 r3457266  
    22 * Luxe Gallery Frontend Styles - Optimized Build
    33 * Includes custom slider + lightbox styles (replaces Swiper CSS + PhotoSwipe CSS)
    4  * @version 2.0.1
     4 * @version 2.0.2
    55 */
    66
     
    5959.luxe-gallery-hero-grid .hero-image-item { overflow: hidden; }
    6060.luxe-gallery-hero-grid .hero-image-item a { display: block; width: 100%; height: 100%; }
    61 .luxe-gallery-hero-grid .hero-image-item img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.3s ease; }
     61.luxe-gallery-hero-grid .hero-image-item .luxe-gallery-image-wrapper { width: 100%; height: 100%; }
     62.luxe-gallery-hero-grid .hero-image-item picture { display: block; width: 100%; height: 100%; }
     63.luxe-gallery-hero-grid .hero-image-item img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform 0.3s ease; }
    6264.luxe-gallery-hero-grid .hero-image-item a:hover img { transform: scale(1.05); }
    6365
     
    116118
    117119.luxe-slider-dot {
    118     width: 8px; height: 8px; border-radius: 50%; border: none;
     120    width: 8px; height: 8px; border-radius: 50%;
     121    border: 1px solid rgba(0, 0, 0, 0.4);
    119122    background: rgba(255, 255, 255, 0.5); cursor: pointer; padding: 0;
    120     transition: background 0.2s, transform 0.2s;
    121 }
    122 .luxe-slider-dot.active { background: #fff; transform: scale(1.25); }
     123    transition: background 0.2s, transform 0.2s, opacity 0.2s;
     124}
     125.luxe-slider-dot.active { background: #fff; transform: scale(1.25); border-color: rgba(0, 0, 0, 0.6); }
     126.luxe-slider-dot.luxe-dot-hidden { display: none; }
    123127
    124128.luxe-gallery-mobile-slider .show-all-photos-mobile {
     
    153157/* Category Navigation */
    154158.luxe-gallery-category-nav {
    155     position: sticky; top: 0; background: #fff; border-bottom: 1px solid #ddd;
    156     margin-bottom: 32px; z-index: 100; padding-top: 16px; margin-top: -16px;
    157 }
    158 .luxe-gallery-category-nav.is-sticky { box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); }
     159    background: #fff; border-bottom: 1px solid #ddd;
     160    margin-bottom: 32px; z-index: 100; padding-top: 16px;
     161}
    159162
    160163.luxe-gallery-category-nav ul {
     
    184187.luxe-gallery-category-section h6 { font-size: 24px; margin-bottom: 24px; }
    185188.luxe-gallery-category-section .image-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 16px; }
    186 .luxe-gallery-category-section .grid-image-item { display: block; width: 100%; aspect-ratio: 4 / 3; overflow: hidden; border-radius: 8px; text-decoration: none; }
     189.luxe-gallery-category-section .grid-image-item { display: block; width: 100%; aspect-ratio: 4 / 3; overflow: hidden; border-radius: 8px; text-decoration: none; cursor: pointer; }
     190.luxe-gallery-category-section .grid-image-item:hover img { transform: scale(1.05); }
     191.luxe-gallery-category-section .grid-image-item img { transition: transform 0.3s ease; }
    187192.luxe-gallery-category-section .grid-image-item .luxe-gallery-image-wrapper { width: 100%; height: 100%; }
     193.luxe-gallery-category-section .grid-image-item picture { display: block; width: 100%; height: 100%; }
    188194.luxe-gallery-category-section .grid-image-item img { width: 100%; height: 100%; object-fit: cover; display: block; }
    189195
     
    401407    .luxe-gallery-full-view { background: #1a1a1a; color: #f0f0f0; }
    402408    .luxe-gallery-category-nav { background: #1a1a1a; border-bottom-color: #333; }
    403     .luxe-gallery-category-nav.is-sticky { box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3); }
    404409    .luxe-gallery-category-nav a { color: #999; }
    405410    .luxe-gallery-category-nav a:hover, .luxe-gallery-category-nav a.active { color: #fff; border-bottom-color: #fff; }
  • luxe-gallery/tags/2.0.2/public/js/luxe-gallery-public.js

    r3457250 r3457266  
    22 * Luxe Gallery Public JavaScript - Zero-Dependency Optimized Build
    33 * Custom slider (replaces Swiper 151KB) + Custom lightbox (replaces PhotoSwipe 68KB)
    4  * @version 2.0.1
     4 * @version 2.0.2
    55 */
    66
     
    6565    updatePagination() {
    6666        if (!this.dots) return;
    67         this.dots.forEach((dot, i) => dot.classList.toggle('active', i === this.currentIndex));
     67        const total = this.dots.length;
     68        const maxVisible = 5;
     69        this.dots.forEach((dot, i) => {
     70            dot.classList.toggle('active', i === this.currentIndex);
     71            if (total > maxVisible) {
     72                const half = Math.floor(maxVisible / 2);
     73                let start = Math.max(0, this.currentIndex - half);
     74                let end = start + maxVisible;
     75                if (end > total) { end = total; start = Math.max(0, end - maxVisible); }
     76                dot.classList.toggle('luxe-dot-hidden', i < start || i >= end);
     77            }
     78        });
    6879    }
    6980
  • luxe-gallery/tags/2.0.2/readme.txt

    r3457250 r3457266  
    66Tested up to: 6.9
    77Requires PHP: 7.4
    8 Stable tag: 2.0.1
     8Stable tag: 2.0.2
    99License: GPLv2 or later
    1010License URI: https://www.gnu.org/licenses/gpl-2.0.html
     
    1919
    2020* **🎨 Visual Grid Editor**: Create custom hero layouts with drag & drop - uniquely customizable for each gallery
    21 * **📱 Mobile-First Design**: Responsive design with Swiper slider for mobile devices
     21* **📱 Mobile-First Design**: Responsive design with custom slider for mobile devices
    2222* **🗂️ Category-Based Organization**: Organize images in custom categories
    23 * **💡 PhotoSwipe Lightbox**: Modern, touch-friendly lightbox experience
     23* **💡 Lightbox**: Modern, touch-friendly lightbox experience
    2424* **⚡ WebP Optimization**: Automatic WebP conversion for better performance
    2525* **🎨 Drag & Drop Interface**: Intuitive admin interface for managing images
     
    1511512. Mobile Slider - Optimized display for mobile devices
    1521523. Category-Based Gallery - Organized image display with navigation
    153 4. PhotoSwipe Lightbox - Modern lightbox experience
     1534. Lightbox - Modern lightbox experience
    1541545. Admin Interface - Intuitive drag & drop management
    1551556. Plugin Settings - Comprehensive configuration options
    156156
    157157== Changelog ==
     158
     159= 2.0.2 =
     160* Fixed category navigation no longer scrolls sticky with page
     161* Fixed show_image_count setting being ignored when unchecked
     162* Fixed all checkbox settings not saving correctly when unchecked
     163* Fixed German translations not loading (enabled load_plugin_textdomain)
     164* Added German translations for plural photo/photos, settings descriptions, and lightbox strings
     165* Fixed grid images not filling full height (picture element + wrapper height)
     166* Fixed hover removing rounded borders on grid images
     167* Added black border to slider pagination dots for better visibility
     168* Slider pagination now shows max 5 dots with sliding window navigation
     169* Updated settings description to remove outdated PhotoSwipe reference
     170* Regenerated .mo translation file
     171
     172= 2.0.1 =
     173* Fixed critical SyntaxError caused by ES module export statement
     174* Fixed grid image display issues
     175* Fixed button icon alignment
     176* Added proper version bumping for WordPress update detection
    158177
    159178= 2.0.0 =
     
    240259= Used Libraries =
    241260
    242 * PhotoSwipe 5.4.4 (MIT License)
    243 * Swiper.js 12.0.2 (MIT License)
    244 * All licenses are GPL-compatible
     261* No external JavaScript libraries — all components are custom-built
     262* Zero dependencies for optimal performance
    245263
    246264= Support =
  • luxe-gallery/trunk/admin/class-luxe-gallery-settings.php

    r3456001 r3457266  
    349349            array(
    350350                'field' => 'enable_lightbox',
    351                 'description' => __( 'Enable the PhotoSwipe lightbox for galleries by default.', 'luxe-gallery' )
     351                'description' => __( 'Enable the lightbox for galleries by default.', 'luxe-gallery' )
    352352            )
    353353        );
     
    433433        $output = array();
    434434
    435         if ( isset( $input['enable_webp'] ) ) {
    436             $output['enable_webp'] = (bool) $input['enable_webp'];
    437         }
     435        $output['enable_webp'] = ! empty( $input['enable_webp'] );
    438436
    439437        if ( isset( $input['webp_quality'] ) ) {
     
    458456        }
    459457
    460         if ( isset( $input['lazy_loading'] ) ) {
    461             $output['lazy_loading'] = (bool) $input['lazy_loading'];
    462         }
    463 
    464         if ( isset( $input['preload_hero_images'] ) ) {
    465             $output['preload_hero_images'] = (bool) $input['preload_hero_images'];
    466         }
    467 
    468         if ( isset( $input['show_image_count'] ) ) {
    469             $output['show_image_count'] = (bool) $input['show_image_count'];
    470         }
    471 
    472         if ( isset( $input['enable_image_titles'] ) ) {
    473             $output['enable_image_titles'] = (bool) $input['enable_image_titles'];
    474         }
     458        $output['lazy_loading'] = ! empty( $input['lazy_loading'] );
     459
     460        $output['preload_hero_images'] = ! empty( $input['preload_hero_images'] );
     461
     462        $output['show_image_count'] = ! empty( $input['show_image_count'] );
     463
     464        $output['enable_image_titles'] = ! empty( $input['enable_image_titles'] );
    475465
    476466        if ( isset( $input['nav_height'] ) ) {
     
    502492        }
    503493
    504         if ( isset( $input['enable_lightbox'] ) ) {
    505             $output['enable_lightbox'] = (bool) $input['enable_lightbox'];
    506         }
    507 
    508         if ( isset( $input['enable_sharing'] ) ) {
    509             $output['enable_sharing'] = (bool) $input['enable_sharing'];
    510         }
     494        $output['enable_lightbox'] = ! empty( $input['enable_lightbox'] );
     495
     496        $output['enable_sharing'] = ! empty( $input['enable_sharing'] );
    511497
    512498        // Branding options.
  • luxe-gallery/trunk/includes/class-luxe-gallery-shortcode.php

    r3457250 r3457266  
    267267
    268268        // Single CSS file (includes slider + lightbox styles — no external libraries).
    269         wp_enqueue_style( 'luxe-gallery-public', plugin_dir_url( __FILE__ ) . '../public/css/luxe-gallery-public.css', array(), '2.0.1', 'all' );
     269        wp_enqueue_style( 'luxe-gallery-public', plugin_dir_url( __FILE__ ) . '../public/css/luxe-gallery-public.css', array(), '2.0.2', 'all' );
    270270
    271271        // Single JS file (includes custom slider + lightbox — no jQuery, Swiper, or PhotoSwipe).
    272         wp_enqueue_script( 'luxe-gallery-public-js', plugin_dir_url( __FILE__ ) . '../public/js/luxe-gallery-public.js', array(), '2.0.1', true );
     272        wp_enqueue_script( 'luxe-gallery-public-js', plugin_dir_url( __FILE__ ) . '../public/js/luxe-gallery-public.js', array(), '2.0.2', true );
    273273
    274274        // Pass translatable strings to JavaScript.
     
    332332        if ( ! empty( $settings['border_radius'] ) ) {
    333333            $inline_css .= sprintf(
    334                 ' #luxe-gallery-%s .hero-image-item img, #luxe-gallery-%s .grid-image-item img { border-radius: %dpx; }',
     334                ' #luxe-gallery-%s .hero-image-item, #luxe-gallery-%s .grid-image-item { border-radius: %dpx; overflow: hidden; }',
    335335                esc_attr( $gallery_id ),
    336336                esc_attr( $gallery_id ),
  • luxe-gallery/trunk/languages/luxe-gallery-de_DE.po

    r3434264 r3457266  
    44msgid ""
    55msgstr ""
    6 "Project-Id-Version: Luxe Gallery 1.1.0\n"
     6"Project-Id-Version: Luxe Gallery 2.0.2\n"
    77"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/luxe-gallery\n"
    88"POT-Creation-Date: 2025-01-07 10:00+0000\n"
     
    297297#: admin/class-luxe-gallery-settings.php:343
    298298msgid "Enable the PhotoSwipe lightbox for galleries by default."
    299 msgstr "PhotoSwipe-Lightbox für Galerien standardmäßig aktivieren."
     299msgstr "Lightbox für Galerien standardmäßig aktivieren."
     300
     301#: admin/class-luxe-gallery-settings.php
     302msgid "Enable the lightbox for galleries by default."
     303msgstr "Lightbox für Galerien standardmäßig aktivieren."
    300304
    301305#: admin/class-luxe-gallery-settings.php:350
     
    305309#: admin/class-luxe-gallery-settings.php:355
    306310msgid "Enable social sharing buttons in the lightbox by default."
    307 msgstr "Soziale Teilen-Buttons in der Lightbox standardmäßig aktivieren."
     311msgstr "Teilen-Buttons in der Lightbox standardmäßig aktivieren."
    308312
    309313#: admin/class-luxe-gallery-settings.php:362
     
    410414msgid "Gallery Settings"
    411415msgstr "Galerie-Einstellungen"
     416
     417#: public/partials/gallery-display.php
     418msgid "photo"
     419msgid_plural "photos"
     420msgstr[0] "Foto"
     421msgstr[1] "Fotos"
     422
     423#: admin/class-luxe-gallery-settings.php:216
     424msgid "Show Image Count"
     425msgstr "Anzahl der Bilder anzeigen"
     426
     427#: admin/class-luxe-gallery-settings.php:222
     428msgid "Displays the number of images in each category."
     429msgstr "Zeigt die Anzahl der Bilder in jeder Kategorie an."
     430
     431#: includes/class-luxe-gallery-shortcode.php
     432msgid "Link copied to clipboard!"
     433msgstr "Link in die Zwischenablage kopiert!"
     434
     435#: includes/class-luxe-gallery-shortcode.php
     436msgid "Image lightbox"
     437msgstr "Bild-Lightbox"
     438
     439#: includes/class-luxe-gallery-shortcode.php
     440msgid "Close"
     441msgstr "Schließen"
     442
     443#: includes/class-luxe-gallery-shortcode.php
     444msgid "Previous image"
     445msgstr "Vorheriges Bild"
     446
     447#: includes/class-luxe-gallery-shortcode.php
     448msgid "Next image"
     449msgstr "Nächstes Bild"
     450
     451#: includes/class-luxe-gallery-shortcode.php
     452msgid "Share"
     453msgstr "Teilen"
     454
     455#: includes/class-luxe-gallery-shortcode.php
     456msgid "Go to slide"
     457msgstr "Gehe zu Folie"
     458
     459#: includes/class-luxe-gallery-shortcode.php
     460msgid "Image could not be loaded"
     461msgstr "Bild konnte nicht geladen werden"
  • luxe-gallery/trunk/luxe-gallery.php

    r3457250 r3457266  
    44 * Plugin URI:        https://jajasolutions.de/luxe-gallery
    55 * Description:       Premium gallery with category management - Ideal for real estate, vacation rentals and portfolios. Features customizable hero grid, automatic categorization, WebP optimization and immersive fullscreen view for professional presentations.
    6  * Version:           2.0.1
     6 * Version:           2.0.2
    77 * Author:            Janni Hares
    88 * Author URI:        https://jajasolutions.de
     
    2929 * Load plugin textdomain for internationalization
    3030 *
    31  * Note: Commented out as WordPress.org handles this automatically since WP 4.6
    32  * Uncomment if distributing outside of WordPress.org
    33  *
    3431 * @since 1.0.0
    3532 * @return void
    3633 */
    37 // function luxe_gallery_load_textdomain() {
    38 //     load_plugin_textdomain( 'luxe-gallery', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
    39 // }
    40 // add_action( 'plugins_loaded', 'luxe_gallery_load_textdomain' );
     34function luxe_gallery_load_textdomain() {
     35    load_plugin_textdomain( 'luxe-gallery', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
     36}
     37add_action( 'init', 'luxe_gallery_load_textdomain' );
    4138
    4239// Include all plugin classes
  • luxe-gallery/trunk/public/css/luxe-gallery-public.css

    r3457250 r3457266  
    22 * Luxe Gallery Frontend Styles - Optimized Build
    33 * Includes custom slider + lightbox styles (replaces Swiper CSS + PhotoSwipe CSS)
    4  * @version 2.0.1
     4 * @version 2.0.2
    55 */
    66
     
    5959.luxe-gallery-hero-grid .hero-image-item { overflow: hidden; }
    6060.luxe-gallery-hero-grid .hero-image-item a { display: block; width: 100%; height: 100%; }
    61 .luxe-gallery-hero-grid .hero-image-item img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.3s ease; }
     61.luxe-gallery-hero-grid .hero-image-item .luxe-gallery-image-wrapper { width: 100%; height: 100%; }
     62.luxe-gallery-hero-grid .hero-image-item picture { display: block; width: 100%; height: 100%; }
     63.luxe-gallery-hero-grid .hero-image-item img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform 0.3s ease; }
    6264.luxe-gallery-hero-grid .hero-image-item a:hover img { transform: scale(1.05); }
    6365
     
    116118
    117119.luxe-slider-dot {
    118     width: 8px; height: 8px; border-radius: 50%; border: none;
     120    width: 8px; height: 8px; border-radius: 50%;
     121    border: 1px solid rgba(0, 0, 0, 0.4);
    119122    background: rgba(255, 255, 255, 0.5); cursor: pointer; padding: 0;
    120     transition: background 0.2s, transform 0.2s;
    121 }
    122 .luxe-slider-dot.active { background: #fff; transform: scale(1.25); }
     123    transition: background 0.2s, transform 0.2s, opacity 0.2s;
     124}
     125.luxe-slider-dot.active { background: #fff; transform: scale(1.25); border-color: rgba(0, 0, 0, 0.6); }
     126.luxe-slider-dot.luxe-dot-hidden { display: none; }
    123127
    124128.luxe-gallery-mobile-slider .show-all-photos-mobile {
     
    153157/* Category Navigation */
    154158.luxe-gallery-category-nav {
    155     position: sticky; top: 0; background: #fff; border-bottom: 1px solid #ddd;
    156     margin-bottom: 32px; z-index: 100; padding-top: 16px; margin-top: -16px;
    157 }
    158 .luxe-gallery-category-nav.is-sticky { box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); }
     159    background: #fff; border-bottom: 1px solid #ddd;
     160    margin-bottom: 32px; z-index: 100; padding-top: 16px;
     161}
    159162
    160163.luxe-gallery-category-nav ul {
     
    184187.luxe-gallery-category-section h6 { font-size: 24px; margin-bottom: 24px; }
    185188.luxe-gallery-category-section .image-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 16px; }
    186 .luxe-gallery-category-section .grid-image-item { display: block; width: 100%; aspect-ratio: 4 / 3; overflow: hidden; border-radius: 8px; text-decoration: none; }
     189.luxe-gallery-category-section .grid-image-item { display: block; width: 100%; aspect-ratio: 4 / 3; overflow: hidden; border-radius: 8px; text-decoration: none; cursor: pointer; }
     190.luxe-gallery-category-section .grid-image-item:hover img { transform: scale(1.05); }
     191.luxe-gallery-category-section .grid-image-item img { transition: transform 0.3s ease; }
    187192.luxe-gallery-category-section .grid-image-item .luxe-gallery-image-wrapper { width: 100%; height: 100%; }
     193.luxe-gallery-category-section .grid-image-item picture { display: block; width: 100%; height: 100%; }
    188194.luxe-gallery-category-section .grid-image-item img { width: 100%; height: 100%; object-fit: cover; display: block; }
    189195
     
    401407    .luxe-gallery-full-view { background: #1a1a1a; color: #f0f0f0; }
    402408    .luxe-gallery-category-nav { background: #1a1a1a; border-bottom-color: #333; }
    403     .luxe-gallery-category-nav.is-sticky { box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3); }
    404409    .luxe-gallery-category-nav a { color: #999; }
    405410    .luxe-gallery-category-nav a:hover, .luxe-gallery-category-nav a.active { color: #fff; border-bottom-color: #fff; }
  • luxe-gallery/trunk/public/js/luxe-gallery-public.js

    r3457250 r3457266  
    22 * Luxe Gallery Public JavaScript - Zero-Dependency Optimized Build
    33 * Custom slider (replaces Swiper 151KB) + Custom lightbox (replaces PhotoSwipe 68KB)
    4  * @version 2.0.1
     4 * @version 2.0.2
    55 */
    66
     
    6565    updatePagination() {
    6666        if (!this.dots) return;
    67         this.dots.forEach((dot, i) => dot.classList.toggle('active', i === this.currentIndex));
     67        const total = this.dots.length;
     68        const maxVisible = 5;
     69        this.dots.forEach((dot, i) => {
     70            dot.classList.toggle('active', i === this.currentIndex);
     71            if (total > maxVisible) {
     72                const half = Math.floor(maxVisible / 2);
     73                let start = Math.max(0, this.currentIndex - half);
     74                let end = start + maxVisible;
     75                if (end > total) { end = total; start = Math.max(0, end - maxVisible); }
     76                dot.classList.toggle('luxe-dot-hidden', i < start || i >= end);
     77            }
     78        });
    6879    }
    6980
  • luxe-gallery/trunk/readme.txt

    r3457250 r3457266  
    66Tested up to: 6.9
    77Requires PHP: 7.4
    8 Stable tag: 2.0.1
     8Stable tag: 2.0.2
    99License: GPLv2 or later
    1010License URI: https://www.gnu.org/licenses/gpl-2.0.html
     
    1919
    2020* **🎨 Visual Grid Editor**: Create custom hero layouts with drag & drop - uniquely customizable for each gallery
    21 * **📱 Mobile-First Design**: Responsive design with Swiper slider for mobile devices
     21* **📱 Mobile-First Design**: Responsive design with custom slider for mobile devices
    2222* **🗂️ Category-Based Organization**: Organize images in custom categories
    23 * **💡 PhotoSwipe Lightbox**: Modern, touch-friendly lightbox experience
     23* **💡 Lightbox**: Modern, touch-friendly lightbox experience
    2424* **⚡ WebP Optimization**: Automatic WebP conversion for better performance
    2525* **🎨 Drag & Drop Interface**: Intuitive admin interface for managing images
     
    1511512. Mobile Slider - Optimized display for mobile devices
    1521523. Category-Based Gallery - Organized image display with navigation
    153 4. PhotoSwipe Lightbox - Modern lightbox experience
     1534. Lightbox - Modern lightbox experience
    1541545. Admin Interface - Intuitive drag & drop management
    1551556. Plugin Settings - Comprehensive configuration options
    156156
    157157== Changelog ==
     158
     159= 2.0.2 =
     160* Fixed category navigation no longer scrolls sticky with page
     161* Fixed show_image_count setting being ignored when unchecked
     162* Fixed all checkbox settings not saving correctly when unchecked
     163* Fixed German translations not loading (enabled load_plugin_textdomain)
     164* Added German translations for plural photo/photos, settings descriptions, and lightbox strings
     165* Fixed grid images not filling full height (picture element + wrapper height)
     166* Fixed hover removing rounded borders on grid images
     167* Added black border to slider pagination dots for better visibility
     168* Slider pagination now shows max 5 dots with sliding window navigation
     169* Updated settings description to remove outdated PhotoSwipe reference
     170* Regenerated .mo translation file
     171
     172= 2.0.1 =
     173* Fixed critical SyntaxError caused by ES module export statement
     174* Fixed grid image display issues
     175* Fixed button icon alignment
     176* Added proper version bumping for WordPress update detection
    158177
    159178= 2.0.0 =
     
    240259= Used Libraries =
    241260
    242 * PhotoSwipe 5.4.4 (MIT License)
    243 * Swiper.js 12.0.2 (MIT License)
    244 * All licenses are GPL-compatible
     261* No external JavaScript libraries — all components are custom-built
     262* Zero dependencies for optimal performance
    245263
    246264= Support =
Note: See TracChangeset for help on using the changeset viewer.