Plugin Directory

Changeset 2983303


Ignore:
Timestamp:
10/24/2023 10:52:48 PM (2 years ago)
Author:
advancedgridbuilder
Message:

version 6

Location:
agb-free/trunk
Files:
20 edited

Legend:

Unmodified
Added
Removed
  • agb-free/trunk/agb-free.php

    r2962710 r2983303  
    1010 * Plugin URI:        https://www.advancedgridbuilder.com
    1111 * Description:       The ultimate grid and list generator for all Wordpress content types
    12  * Version:           5.9.5
     12 * Version:           6.0.0
    1313 * License:           GPL-2.0+
    1414 * License URI:       http://www.gnu.org/licenses/gpl-2.0.txt
  • agb-free/trunk/dyg-form/css/dygform-public.css

    r2924333 r2983303  
    3333    padding: 26px 24px 10px 24px;
    3434}
    35 form.dygform .dygpg-placeholder-initial + .dygform-input {
     35form.dygform div.dygpg-placeholder-initial + .dygform-input {
    3636    padding: 18px 24px;
    3737}
    38 form.dygform .dygpg-placeholder-initial {
     38form.dygform div.dygpg-placeholder-initial {
    3939    font-size: 100%;
    4040    top: 1.8em;
  • agb-free/trunk/dyg-form/includes/class-dyg-form-storage.php

    r2924333 r2983303  
    9393
    9494
    95     function db_insert($data) {
    96         global $wpdb;
    97 
    98         $wpdb->insert(
     95        public function db_insert($data) {
     96            global $wpdb;
     97   
     98            // Check if all data is empty or contains only empty objects
     99            if ($this->is_empty_or_all_elements_empty($data)) {
     100                return; // Exit the method without inserting into the database
     101            }
     102   
     103            $wpdb->insert(
    99104                $this->table_name, [
    100             'form' => $data['dygform-name']['name'],
    101             'time' => date_i18n('Y-m-d H:i:s'),
    102             'json' => json_encode($data)
     105                    'form' => $data['dygform-name']['name'],
     106                    'time' => date_i18n('Y-m-d H:i:s'),
     107                    'json' => json_encode($data)
    103108                ]
    104         );
    105     }
     109            );
     110        }
     111   
     112        // Private helper method to check if all elements in data are empty or contain only empty objects
     113        private function is_empty_or_all_elements_empty($data) {
     114            if (empty($data)) {
     115                return true;
     116            }
     117   
     118            foreach ($data as $key => $value) {
     119                if (is_object($value) && !empty((array) $value)) {
     120                    return false;
     121                }
     122                if (is_array($value) && !empty($value)) {
     123                    return false;
     124                }
     125                if (!empty($value)) {
     126                    return false;
     127                }
     128            }
     129   
     130            return true;
     131        }
     132   
    106133
    107134
     
    227254        echo "<div class='dygfs-filter-wrapper'><i class='fas fa-filter'></i>";
    228255        foreach ($forms as $form) {
    229             echo sprintf("<div class='dygfs-filter' data-form='%s'>%s</div>", esc_attr($form->form), esc_html($form->form));
     256            echo sprintf("<div class='dygfs-filter' data-form='%s'>%s</div>", esc_attr(sanitize_title($form->form)), esc_html($form->form));
    230257        }
    231258        echo "</div>";
  • agb-free/trunk/dyg-form/includes/dyg-form-ajax.php

    r2924333 r2983303  
    103103    ];
    104104
    105     if (!wp_verify_nonce($data['nonce'], "dyg-form-nonce-{$data['dygform-name']['name']}")) {
     105    if (!wp_verify_nonce($data['nonce'], "dyg-form-nonce-{$data['dygform-name']['name']}") && !apply_filters('dygform-is-demo-id', false, $data['dygform-name']['name'])) {
    106106        $response = [
    107107            'success' => false,
  • agb-free/trunk/dyg-form/js/dyg-form.js

    r2927870 r2983303  
    5656    //handle dygform-data-list as jQuery sortable
    5757    jQuery('.dygform-select-list').each(function () {
    58 
    59         //destory an existing sortable instance to avoid duplicates
    60         jQuery(this).find('ul').each(function () {
    61             var sortableInstance = jQuery(this).data("ui-sortable");
    62             if (sortableInstance) {
     58        const ul_elements = jQuery(this).find('ul');
     59        const input_element = jQuery(this).find('input');
     60        const included_list = jQuery(this).find('.dygform-included-list');
     61        const source_list = jQuery(this).find('.dygform-source-list');
     62
     63        // Destroy any existing sortable instances to avoid duplicates
     64        ul_elements.each(function () {
     65            const sortable_instance = jQuery(this).data("ui-sortable");
     66            if (sortable_instance) {
    6367                jQuery(this).sortable("destroy");
    6468            }
    6569        });
    6670
    67         //initialise the lists based on the value of the hidden input field
    68         var values = jQuery(this).find('input').val()
    69         var values = values.split(',');
    70         var parentThis = this;
    71         var to = jQuery(parentThis).find('.dygform-included-list');
    72         jQuery(this).find('.dygform-included-list li').appendTo(jQuery(this).find('.dygform-source-list'));
     71        // Initialise lists based on the hidden input field value
     72        let values = input_element.val().split(',');
     73        included_list.find('li').appendTo(source_list);
    7374        values.forEach(function (value) {
    74             var from = jQuery(parentThis).find(`li[value='${value}']`);
    75             jQuery(from).appendTo(to);
    76         });
    77 
    78         //initialise the sortable elements
    79         jQuery(this).find('ul').sortable({
    80             connectWith: jQuery(this).find('ul'),
    81             //duplicates rather than moves when initialising.  needs more work
    82             //            remove: function (e, li) {
    83             //                copyHelper = li.item.clone().insertAfter(li.item);
    84             //                $(this).sortable('cancel');
    85             //                return li.item.clone();
    86             //            }
     75            const list_item = source_list.find(`li[value='${value}']`);
     76            list_item.appendTo(included_list);
     77        });
     78
     79        // Make the lists sortable
     80        ul_elements.sortable({
     81            connectWith: ul_elements,
    8782        }).disableSelection();
    8883
    89         //handle the sortable list change event
    90         jQuery(this).find('ul').off('sortupdate').on('sortupdate', function (event, ui) {
     84        // Update the hidden input field when the list changes
     85        ul_elements.off('sortupdate').on('sortupdate', function () {
    9186            if (jQuery(this).hasClass("dygform-included-list")) {
    92                 var ids = jQuery(this).sortable("toArray");
    93                 var cats = '';
    94                 var parentE = jQuery(this).closest('.dygform-select-list');
    95                 ids.forEach(function (id) {
    96                     cats += jQuery(`#${id}`).attr('value') + ',';
    97                 });
    98                 jQuery(parentE).find('input').val(cats.replace(/^,+|,+$/gm, ''));
     87                const ids = jQuery(this).sortable("toArray");
     88                let cats = ids.map(id => jQuery(`#${id}`).attr('value')).join(',');
     89                input_element.val(cats);
    9990            }
    10091        });
     
    109100    });
    110101
    111     //show or hide placeholder labels when the input value changes
    112     jQuery('.placeholder-label ~ .dygform-input, .placeholder-label ~ textarea').each(function () {
    113         var previous = jQuery(this).prev();
    114         if (jQuery(this).val() == '') {
    115             jQuery(previous).addClass('dygpg-placeholder-initial')
    116             jQuery(this).removeClass('dygpg-placeholder-hidden');
    117 
     102    function togglePlaceholderLabel() {
     103        var input = jQuery(this);
     104        var previous = input.prev();
     105        if (input.val() == '') {
     106            previous.addClass('dygpg-placeholder-initial');
     107            input.removeClass('dygpg-placeholder-hidden');
    118108        } else {
    119             jQuery(previous).removeClass('dygpg-placeholder-initial')
    120             jQuery(this).addClass('dygpg-placeholder-hidden');
     109            previous.removeClass('dygpg-placeholder-initial');
     110            input.addClass('dygpg-placeholder-hidden');
    121111        }
    122     });
    123     //show or hide placeholder labels when the input value changes
    124     jQuery('.placeholder-label ~ .dygform-input, .placeholder-label ~ textarea').off('focus').on('focus', function () {
    125         var previous = jQuery(this).prev();
    126         jQuery(previous).removeClass('dygpg-placeholder-initial')
    127         jQuery(this).addClass('dygpg-placeholder-hidden');
    128     });
    129     jQuery('.placeholder-label ~ .dygform-input, .placeholder-label ~ textarea').off('keyup focusout').on('keyup focusout', function () {
    130         var previous = jQuery(this).prev();
    131         if (jQuery(this).val() == '') {
    132             jQuery(previous).addClass('dygpg-placeholder-initial')
    133             jQuery(this).removeClass('dygpg-placeholder-hidden');
    134         } else {
    135             jQuery(previous).removeClass('dygpg-placeholder-initial')
    136             jQuery(this).addClass('dygpg-placeholder-hidden');
    137         }
    138     });
     112    }
     113
     114    jQuery('.placeholder-label ~ .dygform-input, .placeholder-label ~ textarea')
     115        .each(togglePlaceholderLabel)
     116        .on('focus', function () {
     117            var input = jQuery(this);
     118            var previous = input.prev();
     119            previous.removeClass('dygpg-placeholder-initial');
     120            input.addClass('dygpg-placeholder-hidden');
     121        })
     122        .on('keyup focusout', togglePlaceholderLabel);
     123
    139124    //Handle conditional logic
    140125    jQuery('[data-show-class],[data-hide-class]').off('change.dygShowHide').on('change.dygShowHide', function () {
  • agb-free/trunk/dyg-grid/addons/free/dygpg_carousel.js

    r2958600 r2983303  
    1313
    1414        // Bind the afterChange event to call checkSlickChangeMore
    15         $carousel.off('afterChange').on('afterChange', function () {
     15        $carousel.off('afterChange.dygpgCarousel').on('afterChange.dygpgCarousel', function () {
    1616            checkSlickChangeMore(this);
    17             apply_filter('dygpg-resize', null);
     17            apply_filters('dygpg-resize', null);
    1818        });
    1919
     
    6666        return $wrapper;
    6767
     68
     69    let $slickParent = $wrapper.closest('.slick-initialized');
     70    let lastSlideIndex = $slickParent.slick('getSlick').slideCount - 1;
     71
    6872    $wrapper.find('> .dygpg-cell').each(function () {
    69         jQuery(this).parent().slick('slickAdd', jQuery(this));
     73        $slickParent.slick('slickAdd', jQuery(this));
    7074    });
    7175
    7276
    7377    $wrapper.find('.slick-track').css('transition', 'none');
     78    $slickParent.slick('slickGoTo', lastSlideIndex + 1);
     79
    7480
    7581    // Advance to the next slide
     
    8591
    8692//removeres the spinner icon parent slide if one exists after load more content is appended to the wrapper
    87 add_filter('dygpg-remove-spinner', function (selector) {
    88     let button = jQuery(selector);
    89     let slickSlideParents = button.closest('.slick-slide');
    90 
    91     if (slickSlideParents.length) {
    92         slickSlideParents.each(function () {
    93             let slideIndex = jQuery(this).data('slick-index');
    94             jQuery(this).closest('.slick-initialized').slick('slickRemove', slideIndex);
    95         });
    96         button.remove();
     93add_filter('dygpg-after-load-more-success', function ($dygLoadMoreWrapper) {
     94    if ($dygLoadMoreWrapper.children().children('.slick-list').length === 0) {
     95        return $dygLoadMoreWrapper;
    9796    }
    98     return selector;
     97    let $parentSlide = $dygLoadMoreWrapper.find('.slick-slide:not(.slick-cloned):has(.dyg-load-more-wrapper)');
     98    let $slickParent = $parentSlide.closest('.slick-initialized');
     99    let slideIndex = $parentSlide.data('slick-index');
     100    $slickParent.slick('slickRemove', slideIndex);
    99101});
    100102
    101103
    102104// adds the spinner icon to the button slide if slick is initialized on the element
    103 add_filter('dygpg-add-spinner', function (selector) {
    104     if (!jQuery(selector).hasClass('slick-initialized'))
    105         return selector;
     105add_filter('dygpg-add-spinner', function ($dygOuterWrapper) {
     106    if ($dygOuterWrapper.children().children('.slick-list').length === 0) {
     107        return $dygOuterWrapper;
     108    }
    106109
    107     jQuery(selector).find('.slick-active.dyg-load-more-wrapper,.slick-active .dyg-load-more-wrapper').append("<i class='fas fa-spinner fa-spin dyg-spinner'></i>");
    108     return '';
     110    $dygOuterWrapper.find('.dygpg-load-more-button').replaceWith("<i class='fas fa-spinner fa-spin dyg-spinner'></i>");
     111    return null;
    109112});
  • agb-free/trunk/dyg-grid/addons/free/dygpg_image_settings_free.php

    r2962710 r2983303  
    1414        add_filter('dygpg-cell-content', [$this, 'add_overlay_element'], 1, 3);
    1515        add_filter('dygpg-modify-style-array', [$this, 'modify_style_array'], 10, 2);
    16         add_filter('dygpg-modify-cell-style-array', [$this, 'modify_cell_style_array'], 10, 2);
     16        add_filter('dygpg-cell-inline-style', [$this, 'modify_cell_style_array'], 10, 2);
    1717    }
    1818
     
    2222     * @param DygPostGrid object $obj
    2323     */
    24     public function modify_cell_style_array($css, $obj) {
    25         $cell_selector = "#dygpg-{$obj->args['id']}-{$obj->qid}";
     24    public function modify_cell_style_array($inline_style, $obj) {
    2625 
    27         $style =  $this->inline_style($obj, $obj->args['image'] ?? 'N');
    28         if (!empty($style)) {
    29             $css[$cell_selector]['selector'] = $cell_selector;
    30             $css[$cell_selector]['statements'][] = $style;
    31         }
     26        $inline_style .=  $this->inline_style($obj, $obj->args['image'] ?? 'N');
     27        $inline_style .= $this->inline_style($obj, $obj->args['content_background_images'] ?? 'N');
    3228
    33         $style =  $this->inline_style($obj, $obj->args['content_background_images'] ?? 'N');
    34         if (!empty($style)) {
    35             $css["{$cell_selector}-content"]['selector'] = "$cell_selector .dygpg-content";
    36             $css["{$cell_selector}-content"]['statements'][] = $style;
    37         }
    38 
    39         return $css;
     29        return $inline_style;
    4030    }
    4131
     
    4636     */
    4737    public function inline_style($obj, $arg) {
    48         $src = empty($obj->qsrcset) ? $obj->qsrc : $obj->qsrcfull;
     38        $src = empty($obj->qsrcfull) ? $obj->qsrc : $obj->qsrcfull;
    4939
    5040        switch ($arg) {
    5141            case 'B':
    52                 return "background-image: url(\"$src\");background-size: cover;background-position: center;background-repeat: no-repeat";
     42                return "background-image: url(\"$src\");background-size: cover;background-position: center;background-repeat: no-repeat;";
    5343            case 'C':
    5444                return "background-image: url(\"$src\");background-size: contain;background-position: center;background-repeat: no-repeat;";
  • agb-free/trunk/dyg-grid/addons/free/dygpg_main_features.php

    r2958600 r2983303  
    3939        dyg_enqueue_script('dygpg-fancybox', DYG_STYLESHEET_DIRECTORY_URI . '/dyg-grid/js/fancybox-3-5-7.js', ['jquery']); //require jquery if using
    4040        dyg_enqueue_style('dygpg-fancybox', DYG_STYLESHEET_DIRECTORY_URI . '/dyg-grid/css/fancybox-3-5-7.css');
     41        dyg_enqueue_script('dygpg-tagify', DYG_STYLESHEET_DIRECTORY_URI . '/dyg-grid/js/tagify-4.3.1.js', ['jquery']); //require jquery if using
     42        dyg_enqueue_style('dygpg-tagify', DYG_STYLESHEET_DIRECTORY_URI . '/dyg-grid/css/tagify-4.3.1.css');
     43        dyg_enqueue_script('dygpg-dragsort', DYG_STYLESHEET_DIRECTORY_URI . '/dyg-grid/js/dragsort-1.3.1.js', ['jquery']); //require jquery if using
     44        dyg_enqueue_style('dygpg-dragsort', DYG_STYLESHEET_DIRECTORY_URI . '/dyg-grid/css/dragsort-1.3.1.css');
    4145       
    4246    }
  • agb-free/trunk/dyg-grid/addons/free/dygpg_pagination.php

    r2958600 r2983303  
    2121        add_filter('dygpg-pre-main-loop-args', [$this, 'modify_args'], 10, 2);
    2222        add_filter("dygpg-load-more-ajax-class", [$this, 'modify_load_more_wrapper_classes'], 10, 2);
     23        add_filter('dygpg-class', [$this, 'modify_wrapper_classes'], 10, 2);
     24    }
     25
     26        /**
     27     * adds an additional class to the cell wrapper to enable lightbox
     28     * @param type $html
     29     */
     30    public function modify_wrapper_classes($class, $obj) {
     31        if ($obj->args['use-ajax'] !== 'P') {
     32            return $class;
     33        }
     34
     35        return "$class dygpg-load-more-cleanse";
    2336    }
    2437
     
    8598        $startPage = max(1, min($startPage, $endPage - $numOfLinks + 1)); // Adjust the start page if we are near the end
    8699
    87         $html .= '<div class="dygpg-pagination dygpg-load-more-cleanse">';
     100        $html .= '<div class="dygpg-pagination">';
    88101
    89102        if ($currentPage > 1) {
     
    139152
    140153        $html .= strtr(
    141             "<div class = '[class]'><button id='dyg-post-grid-[id]' class='[load_more_class] [ajax_class]' [onclick]>[button_text]</button></div>",
     154            "<div class = '[class]'><button id='dyg-post-grid-[id]' class='dygpg-load-more-button [load_more_class] [ajax_class]' [onclick]>[button_text]</button></div>",
    142155            [
    143156                "[class]"           => apply_filters('dygpg-load-more-wrapper-class', 'dyg-load-more-wrapper', $obj),
     
    162175     */
    163176    private function generate_onclick($id, $startIndex) {
    164         return "onclick=\"dygLoadMore('$id', '$startIndex', this)\"";
     177        return "onclick=\"dygLoadMore(event, '$id', '$startIndex', this)\"";
    165178    }
    166179
  • agb-free/trunk/dyg-grid/addons/free/dygpg_styles_free_data.php

    r2962710 r2983303  
    4545      'pattern-direction' => '%facebook_share%,%twitter_share%,%linkedin_share%,%date%,%author%,%category%,%download_image%',
    4646      'show_meta_icons' => 'Y',
     47      'style-image-hover-zoom' => 'Y',
    4748      'title' => 'N',
    4849    ),
  • agb-free/trunk/dyg-grid/css/dyg-post-grid-templates.css

    r2958600 r2983303  
    5252    z-index: -1;
    5353    box-shadow: 0px 0px 30px 10px rgba(0, 0, 0, 0.2);
     54}
     55.dyg-post-grid-wrapper.dygpg-shadow .slick-slide .dyg-load-more-wrapper.dygpg-cell:before {
     56    box-shadow: none;
     57}
     58.dyg-post-grid-wrapper.dygpg-shadow .slick-slide .dyg-load-more-wrapper.dygpg-cell {
     59    background-color: inherit;
    5460}
    5561
  • agb-free/trunk/dyg-grid/css/dyg-post-grid.css

    r2958600 r2983303  
    5656.dyg-post-grid-wrapper div.dygpg-filter {
    5757    text-align: left;
    58     margin-bottom: 30px;
     58    margin-bottom: 20px;
    5959    width: 100%;
    6060}
     
    7474.dyg-post-grid-wrapper .dygpg-filter tr,
    7575.dyg-post-grid-wrapper .dygpg-filter td {
    76     line-height: 0px;
     76    /* line-height: 0px; */
    7777    table-layout: auto;
    7878    border: none !important;
     
    115115    border: 1px solid var(--agb-accent-color);
    116116    margin: 0px -1px -1px 0px;
     117    border-left:  1px solid white;
    117118}
    118119
     
    124125    color: var(--agb-accent-color) !important;
    125126    background-color: white;
     127    border: 1px solid var(--agb-accent-color);
    126128}
    127129
     
    426428.dygpg-load-more-spinner {
    427429    margin:auto;
    428 }
     430    text-align: center;
     431}
  • agb-free/trunk/dyg-grid/css/dygpg-form.css

    r2958600 r2983303  
    8282}
    8383
    84 form.dygform.dygform-dygpg-form input.dygform-input, form.dygform.dygform-dygpg-form .select2-container--default .select2-selection--multiple, form.dygform.dygform-dygpg-form textarea.dygform-textarea, form.dygform.dygform-dygpg-form .dygform-select-list ul, form.dygform.dygform-dygpg-form select.dygform-dropdown-group, form.dygform.dygform-dygpg-form select.dygform-select-option-group {
     84form.dygform.dygform-dygpg-form input.dygform-input, tags.dygpg-tagify, form.dygform.dygform-dygpg-form textarea.dygform-textarea, form.dygform.dygform-dygpg-form .dygform-select-list ul, form.dygform.dygform-dygpg-form select.dygform-dropdown-group, form.dygform.dygform-dygpg-form select.dygform-select-option-group {
    8585    padding: 8px 0px 8px 11px;
    8686    border-radius: 8px;
     
    147147    font-size: 75%;
    148148}
    149 form.dygform.dygform-dygpg-form .dygform-container-css_matrix_wrapper .dygpg-placeholder-initial {
     149form.dygform.dygform-dygpg-form .dygform-container-css_matrix_wrapper div.dygpg-placeholder-initial {
    150150    font-size: 81%;
    151151    top: 20px;
     
    156156}
    157157
    158 form.dygform .dygpg-placeholder-initial + .dygform-input {
     158form.dygform div.dygpg-placeholder-initial + .dygform-input {
    159159    padding: 18px 0px 1px 10px !important;
    160160}
    161161
    162 form.dygform.dygform-dygpg-form .dygpg-placeholder-initial {
     162form.dygform.dygform-dygpg-form div.dygpg-placeholder-initial {
    163163    font-size: 100%;
    164     top: 1.1em;
     164    top: 18px;
    165165    /* left: 11px; */
    166166    pointer-events: none;
    167167}
    168168
    169 form.dygform.dygform-dygpg-form .dygform-select-list .dygpg-placeholder-initial {
     169form.dygform.dygform-dygpg-form .dygform-select-list div.dygpg-placeholder-initial {
    170170    top: 0.4em;
    171171}
     
    253253    background-color: #ffffffbb;
    254254}
     255.tagify__dropdown {
     256    z-index: 9999999 !important; /* Use a high value */
     257}
     258
     259tags.tagify span.tagify__input {
     260    margin: 0px;
     261    padding: 7px 0px 0px 4px;
     262}
     263.dygpg-tagify {
     264    --tag-bg: #9eacd2;
     265    --tag-hover: #9eacd2;
     266    --tag-remove-bg: #9eacd2;
     267    --tag-text-color: white;
     268    --tag-pad: 1px 6px;
     269}
     270.tagify__tag>div {
     271    border-radius: 5px;
     272}
     273tags.dygpg-tagify {
     274    padding: 2px;
     275    background-color: white;
     276    min-height: 37px;
     277}
     278.tagify__tag:hover {
     279    cursor: move;
     280}
  • agb-free/trunk/dyg-grid/dyg-post-grid.php

    r2962710 r2983303  
    1111$dygpg_state = [];
    1212
    13 define('AGB_VERSION', '5.9.5');
     13define('AGB_VERSION', '6.0.0');
    1414
    1515function get_agb_version() {
     
    7676        wp_enqueue_script("jquery-ui-sortable");
    7777
    78         dyg_enqueue_script('dyg-misc-script', DYG_STYLESHEET_DIRECTORY_URI . '/dyg-grid/js/dygpg-misc.js', ['jquery']); //require jquery if using
    79         dyg_enqueue_script('dyg-resize-script', DYG_STYLESHEET_DIRECTORY_URI . '/dyg-grid/js/dyg-resize.js', ['jquery']); //require jquery if using
    80         dyg_enqueue_script('dygpg-edit-script', DYG_STYLESHEET_DIRECTORY_URI . '/dyg-grid/js/dygpg-edit.js', ['jquery']); //require jquery if using
    81         dyg_enqueue_script('dyg-load-more-script', DYG_STYLESHEET_DIRECTORY_URI . '/dyg-grid/js/dygpg-ajax-load-more.js', ['jquery']);
    82         dyg_enqueue_script('dygpg-edit-ajax', DYG_STYLESHEET_DIRECTORY_URI . '/dyg-grid/js/dygpg-edit-ajax.js', ['jquery']);
     78        dyg_enqueue_script('dyg-misc-script', DYG_STYLESHEET_DIRECTORY_URI . '/dyg-grid/js/dygpg-misc.js', ['jquery']);
     79        dyg_enqueue_script('dyg-resize-script', DYG_STYLESHEET_DIRECTORY_URI . '/dyg-grid/js/dyg-resize.js', ['jquery', 'dyg-misc-script']);
     80        dyg_enqueue_script('dyg-load-more-script', DYG_STYLESHEET_DIRECTORY_URI . '/dyg-grid/js/dygpg-load-more.js', ['jquery', 'dyg-misc-script']);
     81        dyg_enqueue_script('dygpg-editor', DYG_STYLESHEET_DIRECTORY_URI . '/dyg-grid/js/dygpg-editor.js', ['jquery', 'dyg-misc-script']);
    8382        wp_localize_script("dyg-load-more-script", "dyg_load_more_ajax_obj", ['ajaxurl' => admin_url('admin-ajax.php')]); //needed for wp_ajax_nopriv
    8483    }
  • agb-free/trunk/dyg-grid/includes/class-dygpg-ajax.php

    r2958600 r2983303  
    1111        add_action("wp_ajax_nopriv_{$ajaxF}", [$this, $ajaxF]); //remember to append the function name to wp_ajax_nopriv_
    1212        add_filter('et_builder_load_actions', [$this, 'et_builder_load_actions']);
     13        add_filter('dygpg-after-process-atts', [$this, 'after_process_atts'], 10, 2);
    1314    }
    1415
    1516    public function get_args() {
    1617        return $this->args ?? null;
     18    }
     19
     20    function sanitise_filter($filters) {
     21
    1722    }
    1823 
     
    4045            'start'   => sanitize_text_field($_GET['start'] ?? ''),
    4146            'params'  =>apply_filters('dygpg-load-more-params', dyg_encryption::decode_data($_GET['params'])),
    42             'filters' => sanitize_text_field($_GET['filters'] ?? ''),
    4347        ];
    4448
     
    4650        global $dygpg_state;
    4751
    48         $dygpg_state = $this->args['params']['dygpg_state'];
     52        $dygpg_state = $this->args['params']['dygpg_state'] ?? [];
    4953        $postgrid    = new DygPostGrid();
    5054        $postgrid->handle_id($this->args['id']);
    51         $postgrid->args['start-index'] = $this->args['start'];
    52         $postgrid->ajax_filters        = $this->args['filters'];
    5355
    5456        //decide if we need to return the full grid including wrapper, or just the inner portion
     
    5961        }
    6062        die();
     63    }
     64
     65    /**
     66     * modify the args at the end of process args if the id matches that of the load more ajax
     67     * @param type $args
     68     */
     69    function after_process_atts($args, $atts) {
     70        if (($this->args['id'] ?? '') !== $args['id']) {
     71            return $args;
     72        }
     73        $args['params'] = $this->args['params'];
     74        $args['start-index'] = $this->args['start'];
     75        return $args;
    6176    }
    6277
  • agb-free/trunk/dyg-grid/includes/class-dygpg-postgrid.php

    r2962710 r2983303  
    164164        $this->args               = $shortcode_atts;
    165165        $this->doing_full_wrapper = TRUE; // this will not be set during load more.  used to check if filter widgets etc are required
    166                                           //dont continue if no shortcode is provided
     166       
     167        //dont continue if no shortcode is provided
    167168        if (empty($shortcode_atts['id'] ?? '') && empty($shortcode_atts['post-id'] ?? '')) {
    168169            return "<div>Your agb shortcode is missing 'id=put-id-here'</div>";
     
    353354            $this->args['link-images'] = '';
    354355            $this->args['link-titles'] = '';
    355             $this->args['link'] = '';
     356            $this->args['link']        = '';
    356357        }
    357358
     
    675676    function grid_query_term() {
    676677        if (!isset($this->query)) {
    677             $this->build_filter();
    678 
    679678            //do we need to limit the terms to those attached to the current post?
    680679            if (($this->args['attached-taxonomies'] ?? '') === 'Y') {
     
    721720                $this->qsrcset  = $this->dyg_get_attachment_image_srcset($this->qpid, 'full');
    722721            }
     722
     723            // This code block attempts to find the first post with the current term assigned and a featured image set.
     724            // It loops through all post types and queries for posts that have the term assigned and a featured image set.
     725            // If a valid post is found, it sets the image source link and source set and breaks out of the loop.
     726            // If no valid post is found, it does not set the image source link and source set.
     727            if (empty($this->qsrc)) {
     728                $post_types = get_post_types(['public' => true], 'names');
     729                foreach ($post_types as $post_type) {
     730                    $posts = get_posts([
     731                        'post_type'      => $post_type,
     732                        'tax_query'      => [
     733                            [
     734                                'taxonomy' => $this->qterm->taxonomy,
     735                                'field'    => 'term_id',
     736                                'terms'    => $this->qterm->term_id,
     737                            ],
     738                        ],
     739                        'meta_query'     => [
     740                            [
     741                                'key'     => '_thumbnail_id',
     742                                'compare' => 'EXISTS',
     743                            ],
     744                        ],
     745                        'posts_per_page' => 1,
     746                    ]);
     747
     748                    if (!empty($posts)) {
     749                        $post          = $posts[0];
     750                        $this->qsrc    = get_the_post_thumbnail_url($post->ID, $this->args['size']);
     751                        $this->qsrcset = wp_get_attachment_image_srcset(get_post_thumbnail_id($post->ID), 'full');
     752                        break;
     753                    }
     754                }
     755            }
     756
    723757            $this->qsizes     = $this->srcset_sizes;
    724758            $this->qalt       = $this->qterm->name;
     
    747781    function grid_query_post() {
    748782        if (!isset($this->query)) {
    749             $this->build_filter();
    750783            $this->qindex                   = $this->qstart_index - 1;
    751784            $this->args['params']['offset'] = $this->qindex;
     
    773806            $this->qalt         = get_post_meta($this->qpid, '_wp_attachment_image_alt', true);
    774807            $this->qsizes       = $this->srcset_sizes;
    775             $this->filter_class = $this->get_filter_classes();
    776808            return true;
    777809        } else {
     
    779811            return false;
    780812        }
    781     }
    782 
    783     function build_filter() {
    784         unset($this->filter);
    785         if (empty($this->args['filter-term'])) {
    786             return;
    787         }
    788 
    789         $tax                   = $this->args['filter-term'];
    790         $this->filter          = [];
    791         $this->filter_taxonomy = $tax;
    792 
    793         if ($this->args['use-dynamic-filter-links'] === 'Y') {
    794             $query_args = [
    795                 'post_type' => $this->args['content'] === 'LOOP' ? get_post_type() : $this->args['params']['post_type'],
    796                 'orderby'   => $this->args['orderby'],
    797                 'order'     => $this->args['order'],
    798             ];
    799         } else {
    800             $query_args = $this->args['params'];
    801         }
    802         $query_args['nopaging'] = true; //make sure all posts are returned
    803 
    804         $query = new WP_Query($query_args);
    805 
    806         while ($query->have_posts()) {
    807             $query->the_post();
    808             $terms = get_the_terms($query->post->ID, $tax);
    809             if ($terms === false OR is_wp_error($terms)) {
    810                 continue;
    811             }
    812             foreach ($terms as $term) {
    813                 if (isset($this->filter[$term->slug])) {
    814                     $this->filter[$term->slug]['count']++;
    815                 } else {
    816                     $this->filter[$term->slug]['parent']      = $term->parent;
    817                     $parent                                   = get_term($term->parent, $tax);
    818                     $this->filter[$term->slug]['parent_name'] = $parent->name ?? '';
    819                     $this->filter[$term->slug]['count']       = 1;
    820                     $this->filter[$term->slug]['name']        = $term->name;
    821                     $this->filter[$term->slug]['slug']        = $term->slug;
    822                 }
    823             }
    824         }
    825         wp_reset_postdata();
    826 
    827         usort($this->filter, function ($a, $b) {
    828             if ($a['parent'] === $b['parent']) {
    829                 return (int) ($a['name'] > $b['name']);
    830             } else {
    831                 return (int) ($a['parent'] > $b['parent']);
    832             }
    833         });
    834 
    835         $this->filter_taxonomy = $tax;
    836 
    837         return apply_filters('dygpg-after-build-filter', $this);
    838     }
    839 
    840     function get_filter_classes() {
    841         if (!isset($this->filter_taxonomy)) {
    842             return "";
    843         }
    844 
    845         $terms = get_the_terms($this->qid ?? '', $this->filter_taxonomy);
    846         if ($terms === false OR is_wp_error($terms)) {
    847             return "";
    848         }
    849 
    850         $filter_classes = "";
    851         //handle ajax load more filtering
    852         if (!empty($this->ajax_filters) && !in_array("dygpg-filter-{$terms->slug}", $this->ajax_filters)) {
    853             $filter_classes = 'dygpg-filter-hide ';
    854         }
    855 
    856         foreach ($terms as $term) {
    857             $filter_classes .= "dygpg-filter-{$term->slug} ";
    858         }
    859         return $filter_classes;
    860     }
     813        error_log("qindex=$this->qindex, offset={$this->args['params']['offset']}, total=$this->qtotal, qid=$this->qid");
     814    }
     815
     816
    861817
    862818    // determine which content loop function to call unless the current page size is reached
     
    11621118            $href = $this->get_href();
    11631119
    1164             $grid_content .= strtr("<%el id='dygpg-%id-%post_id' %aspect %lightbox class = 'dygpg-cell dygpg-cell-%id %aclass %heights %filters' style = '%style' href = '%href'>%insert</%el>",
     1120            $grid_content .= strtr("<%el id='dygpg-%id-%post_id' %aspect %lightbox class = 'dygpg-cell dygpg-cell-%id %aclass %heights' style = '%style' href = '%href'>%insert</%el>",
    11651121                [
    11661122                    '%el'       => $this->args['cell-element'],
     
    11681124                    '%aclass'   => dygpg_toolbox::sanitize_classes(apply_filters('dygpg-aclass', $this->args['aclass'], $this)),
    11691125                    '%heights'  => $this->args['equal-grid-heights'] === "Y" ? "dyg-equal-height-{$this->args['id']}" : '',
    1170                     '%filters'  => dygpg_toolbox::sanitize_classes($this->get_filter_classes()),
    1171                     '%style'    => apply_filters('dygpg-cell-inline-style', '', $this, $this),
     1126                    '%style'    => apply_filters('dygpg-cell-inline-style', '', $this),
    11721127                    '%href'     => esc_url($href),
    11731128                    '%id'       => $this->args['id'],
  • agb-free/trunk/dyg-grid/includes/slick/slick-theme.css

    r2958600 r2983303  
    214214
    215215.dygpg-slick-carousel .dyg-spinner {
    216     position: absolute;
     216    position: relative;
    217217    margin: 0px;
    218     top: 50%;
     218    top: -10px;
    219219    font-size: 33px;
    220     transform: translateY(-50%);
    221     color: var(--agb-accent-color);
    222 }
     220    color: var(--agb-accent-color);
     221}
  • agb-free/trunk/dyg-grid/js/dyg-resize.js

    r2958600 r2983303  
    77    equalizeAllRowHeights();
    88    equal_height();
    9     apply_filter('dygpg-resize', '');
     9    apply_filters('dygpg-resize', '');
    1010}
    1111
  • agb-free/trunk/dyg-grid/js/dygpg-misc.js

    r2958600 r2983303  
    1 /*
    2  * To change this license header, choose License Headers in Project Properties.
    3  * To change this template file, choose Tools | Templates
    4  * and open the template in the editor.
    5  */
    6 
    7 
    8 function dygpgFilter(elem, dygclass, index) {
    9     if (dygclass === 'all') {
    10         jQuery(`.dyg-post-grid-wrapper-${index} > .dygpg-cell`).removeClass('dygpg-filter-hide');
    11     } else {
    12         jQuery(`.dyg-post-grid-wrapper-${index} > .dygpg-cell`).addClass('dygpg-filter-hide');
    13         jQuery(`.dyg-post-grid-wrapper-${index} > .dygpg-cell.${dygclass}`).removeClass('dygpg-filter-hide');
    14 
    15     }
    16     jQuery(`.dyg-post-grid-wrapper-${index} .dygpg-filter-a`).addClass('dygpg-filter-disabled');
    17     jQuery(elem).toggleClass('dygpg-filter-disabled');
    18     scrollEventHandler();
    19     dygpgEqualiseFunctions()
    20 }
    21 
    22 function dygpgReapplyFilters(id) {
    23     jQuery(`.dyg-post-grid-wrapper-${id} .dygpg-filter-a:not(.dygpg-filter-disabled):not(.dygpg-filter-links)`).each(function () {
    24         jQuery(this).trigger('click');
    25     });
    26 }
    27 
    281
    292let filters = {};
     
    5225 * @returns {any} The filtered value.
    5326 */
    54 function apply_filter(tag, value) {
     27function apply_filters(tag, value) {
    5528    if(!filters[tag]){
    5629        return value;
  • agb-free/trunk/readme.txt

    r2962710 r2983303  
    44Contributors: AGB
    55Requires PHP: 7.4
    6 Tested up to: 6.3
    7 Stable tag: 5.9.5
     6Tested up to: 6.3.2
     7Stable tag: 6.0.0
    88License: GPLv2
    99License URI: http://www.gnu.org/licenses/gpl-2.0.html
Note: See TracChangeset for help on using the changeset viewer.