Changeset 2983303
- Timestamp:
- 10/24/2023 10:52:48 PM (2 years ago)
- Location:
- agb-free/trunk
- Files:
-
- 20 edited
-
agb-free.php (modified) (1 diff)
-
dyg-form/css/dygform-public.css (modified) (1 diff)
-
dyg-form/includes/class-dyg-form-storage.php (modified) (2 diffs)
-
dyg-form/includes/dyg-form-ajax.php (modified) (1 diff)
-
dyg-form/js/dyg-form.js (modified) (2 diffs)
-
dyg-grid/addons/free/dygpg_carousel.js (modified) (3 diffs)
-
dyg-grid/addons/free/dygpg_image_settings_free.php (modified) (3 diffs)
-
dyg-grid/addons/free/dygpg_main_features.php (modified) (1 diff)
-
dyg-grid/addons/free/dygpg_pagination.php (modified) (4 diffs)
-
dyg-grid/addons/free/dygpg_styles_free_data.php (modified) (1 diff)
-
dyg-grid/css/dyg-post-grid-templates.css (modified) (1 diff)
-
dyg-grid/css/dyg-post-grid.css (modified) (5 diffs)
-
dyg-grid/css/dygpg-form.css (modified) (4 diffs)
-
dyg-grid/dyg-post-grid.php (modified) (2 diffs)
-
dyg-grid/includes/class-dygpg-ajax.php (modified) (4 diffs)
-
dyg-grid/includes/class-dygpg-postgrid.php (modified) (9 diffs)
-
dyg-grid/includes/slick/slick-theme.css (modified) (1 diff)
-
dyg-grid/js/dyg-resize.js (modified) (1 diff)
-
dyg-grid/js/dygpg-misc.js (modified) (2 diffs)
-
readme.txt (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
agb-free/trunk/agb-free.php
r2962710 r2983303 10 10 * Plugin URI: https://www.advancedgridbuilder.com 11 11 * Description: The ultimate grid and list generator for all Wordpress content types 12 * Version: 5.9.512 * Version: 6.0.0 13 13 * License: GPL-2.0+ 14 14 * License URI: http://www.gnu.org/licenses/gpl-2.0.txt -
agb-free/trunk/dyg-form/css/dygform-public.css
r2924333 r2983303 33 33 padding: 26px 24px 10px 24px; 34 34 } 35 form.dygform .dygpg-placeholder-initial + .dygform-input {35 form.dygform div.dygpg-placeholder-initial + .dygform-input { 36 36 padding: 18px 24px; 37 37 } 38 form.dygform .dygpg-placeholder-initial {38 form.dygform div.dygpg-placeholder-initial { 39 39 font-size: 100%; 40 40 top: 1.8em; -
agb-free/trunk/dyg-form/includes/class-dyg-form-storage.php
r2924333 r2983303 93 93 94 94 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( 99 104 $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) 103 108 ] 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 106 133 107 134 … … 227 254 echo "<div class='dygfs-filter-wrapper'><i class='fas fa-filter'></i>"; 228 255 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)); 230 257 } 231 258 echo "</div>"; -
agb-free/trunk/dyg-form/includes/dyg-form-ajax.php
r2924333 r2983303 103 103 ]; 104 104 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'])) { 106 106 $response = [ 107 107 'success' => false, -
agb-free/trunk/dyg-form/js/dyg-form.js
r2927870 r2983303 56 56 //handle dygform-data-list as jQuery sortable 57 57 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) { 63 67 jQuery(this).sortable("destroy"); 64 68 } 65 69 }); 66 70 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); 73 74 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, 87 82 }).disableSelection(); 88 83 89 // handle the sortable list change event90 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 () { 91 86 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); 99 90 } 100 91 }); … … 109 100 }); 110 101 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'); 118 108 } 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'); 121 111 } 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 139 124 //Handle conditional logic 140 125 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 13 13 14 14 // Bind the afterChange event to call checkSlickChangeMore 15 $carousel.off('afterChange ').on('afterChange', function () {15 $carousel.off('afterChange.dygpgCarousel').on('afterChange.dygpgCarousel', function () { 16 16 checkSlickChangeMore(this); 17 apply_filter ('dygpg-resize', null);17 apply_filters('dygpg-resize', null); 18 18 }); 19 19 … … 66 66 return $wrapper; 67 67 68 69 let $slickParent = $wrapper.closest('.slick-initialized'); 70 let lastSlideIndex = $slickParent.slick('getSlick').slideCount - 1; 71 68 72 $wrapper.find('> .dygpg-cell').each(function () { 69 jQuery(this).parent().slick('slickAdd', jQuery(this));73 $slickParent.slick('slickAdd', jQuery(this)); 70 74 }); 71 75 72 76 73 77 $wrapper.find('.slick-track').css('transition', 'none'); 78 $slickParent.slick('slickGoTo', lastSlideIndex + 1); 79 74 80 75 81 // Advance to the next slide … … 85 91 86 92 //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(); 93 add_filter('dygpg-after-load-more-success', function ($dygLoadMoreWrapper) { 94 if ($dygLoadMoreWrapper.children().children('.slick-list').length === 0) { 95 return $dygLoadMoreWrapper; 97 96 } 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); 99 101 }); 100 102 101 103 102 104 // 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; 105 add_filter('dygpg-add-spinner', function ($dygOuterWrapper) { 106 if ($dygOuterWrapper.children().children('.slick-list').length === 0) { 107 return $dygOuterWrapper; 108 } 106 109 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; 109 112 }); -
agb-free/trunk/dyg-grid/addons/free/dygpg_image_settings_free.php
r2962710 r2983303 14 14 add_filter('dygpg-cell-content', [$this, 'add_overlay_element'], 1, 3); 15 15 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); 17 17 } 18 18 … … 22 22 * @param DygPostGrid object $obj 23 23 */ 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) { 26 25 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'); 32 28 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; 40 30 } 41 31 … … 46 36 */ 47 37 public function inline_style($obj, $arg) { 48 $src = empty($obj->qsrc set) ? $obj->qsrc : $obj->qsrcfull;38 $src = empty($obj->qsrcfull) ? $obj->qsrc : $obj->qsrcfull; 49 39 50 40 switch ($arg) { 51 41 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;"; 53 43 case 'C': 54 44 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 39 39 dyg_enqueue_script('dygpg-fancybox', DYG_STYLESHEET_DIRECTORY_URI . '/dyg-grid/js/fancybox-3-5-7.js', ['jquery']); //require jquery if using 40 40 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'); 41 45 42 46 } -
agb-free/trunk/dyg-grid/addons/free/dygpg_pagination.php
r2958600 r2983303 21 21 add_filter('dygpg-pre-main-loop-args', [$this, 'modify_args'], 10, 2); 22 22 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"; 23 36 } 24 37 … … 85 98 $startPage = max(1, min($startPage, $endPage - $numOfLinks + 1)); // Adjust the start page if we are near the end 86 99 87 $html .= '<div class="dygpg-pagination dygpg-load-more-cleanse">';100 $html .= '<div class="dygpg-pagination">'; 88 101 89 102 if ($currentPage > 1) { … … 139 152 140 153 $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>", 142 155 [ 143 156 "[class]" => apply_filters('dygpg-load-more-wrapper-class', 'dyg-load-more-wrapper', $obj), … … 162 175 */ 163 176 private function generate_onclick($id, $startIndex) { 164 return "onclick=\"dygLoadMore( '$id', '$startIndex', this)\"";177 return "onclick=\"dygLoadMore(event, '$id', '$startIndex', this)\""; 165 178 } 166 179 -
agb-free/trunk/dyg-grid/addons/free/dygpg_styles_free_data.php
r2962710 r2983303 45 45 'pattern-direction' => '%facebook_share%,%twitter_share%,%linkedin_share%,%date%,%author%,%category%,%download_image%', 46 46 'show_meta_icons' => 'Y', 47 'style-image-hover-zoom' => 'Y', 47 48 'title' => 'N', 48 49 ), -
agb-free/trunk/dyg-grid/css/dyg-post-grid-templates.css
r2958600 r2983303 52 52 z-index: -1; 53 53 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; 54 60 } 55 61 -
agb-free/trunk/dyg-grid/css/dyg-post-grid.css
r2958600 r2983303 56 56 .dyg-post-grid-wrapper div.dygpg-filter { 57 57 text-align: left; 58 margin-bottom: 30px;58 margin-bottom: 20px; 59 59 width: 100%; 60 60 } … … 74 74 .dyg-post-grid-wrapper .dygpg-filter tr, 75 75 .dyg-post-grid-wrapper .dygpg-filter td { 76 line-height: 0px;76 /* line-height: 0px; */ 77 77 table-layout: auto; 78 78 border: none !important; … … 115 115 border: 1px solid var(--agb-accent-color); 116 116 margin: 0px -1px -1px 0px; 117 border-left: 1px solid white; 117 118 } 118 119 … … 124 125 color: var(--agb-accent-color) !important; 125 126 background-color: white; 127 border: 1px solid var(--agb-accent-color); 126 128 } 127 129 … … 426 428 .dygpg-load-more-spinner { 427 429 margin:auto; 428 } 430 text-align: center; 431 } -
agb-free/trunk/dyg-grid/css/dygpg-form.css
r2958600 r2983303 82 82 } 83 83 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 {84 form.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 { 85 85 padding: 8px 0px 8px 11px; 86 86 border-radius: 8px; … … 147 147 font-size: 75%; 148 148 } 149 form.dygform.dygform-dygpg-form .dygform-container-css_matrix_wrapper .dygpg-placeholder-initial {149 form.dygform.dygform-dygpg-form .dygform-container-css_matrix_wrapper div.dygpg-placeholder-initial { 150 150 font-size: 81%; 151 151 top: 20px; … … 156 156 } 157 157 158 form.dygform .dygpg-placeholder-initial + .dygform-input {158 form.dygform div.dygpg-placeholder-initial + .dygform-input { 159 159 padding: 18px 0px 1px 10px !important; 160 160 } 161 161 162 form.dygform.dygform-dygpg-form .dygpg-placeholder-initial {162 form.dygform.dygform-dygpg-form div.dygpg-placeholder-initial { 163 163 font-size: 100%; 164 top: 1 .1em;164 top: 18px; 165 165 /* left: 11px; */ 166 166 pointer-events: none; 167 167 } 168 168 169 form.dygform.dygform-dygpg-form .dygform-select-list .dygpg-placeholder-initial {169 form.dygform.dygform-dygpg-form .dygform-select-list div.dygpg-placeholder-initial { 170 170 top: 0.4em; 171 171 } … … 253 253 background-color: #ffffffbb; 254 254 } 255 .tagify__dropdown { 256 z-index: 9999999 !important; /* Use a high value */ 257 } 258 259 tags.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 } 273 tags.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 11 11 $dygpg_state = []; 12 12 13 define('AGB_VERSION', ' 5.9.5');13 define('AGB_VERSION', '6.0.0'); 14 14 15 15 function get_agb_version() { … … 76 76 wp_enqueue_script("jquery-ui-sortable"); 77 77 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']); 83 82 wp_localize_script("dyg-load-more-script", "dyg_load_more_ajax_obj", ['ajaxurl' => admin_url('admin-ajax.php')]); //needed for wp_ajax_nopriv 84 83 } -
agb-free/trunk/dyg-grid/includes/class-dygpg-ajax.php
r2958600 r2983303 11 11 add_action("wp_ajax_nopriv_{$ajaxF}", [$this, $ajaxF]); //remember to append the function name to wp_ajax_nopriv_ 12 12 add_filter('et_builder_load_actions', [$this, 'et_builder_load_actions']); 13 add_filter('dygpg-after-process-atts', [$this, 'after_process_atts'], 10, 2); 13 14 } 14 15 15 16 public function get_args() { 16 17 return $this->args ?? null; 18 } 19 20 function sanitise_filter($filters) { 21 17 22 } 18 23 … … 40 45 'start' => sanitize_text_field($_GET['start'] ?? ''), 41 46 'params' =>apply_filters('dygpg-load-more-params', dyg_encryption::decode_data($_GET['params'])), 42 'filters' => sanitize_text_field($_GET['filters'] ?? ''),43 47 ]; 44 48 … … 46 50 global $dygpg_state; 47 51 48 $dygpg_state = $this->args['params']['dygpg_state'] ;52 $dygpg_state = $this->args['params']['dygpg_state'] ?? []; 49 53 $postgrid = new DygPostGrid(); 50 54 $postgrid->handle_id($this->args['id']); 51 $postgrid->args['start-index'] = $this->args['start'];52 $postgrid->ajax_filters = $this->args['filters'];53 55 54 56 //decide if we need to return the full grid including wrapper, or just the inner portion … … 59 61 } 60 62 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; 61 76 } 62 77 -
agb-free/trunk/dyg-grid/includes/class-dygpg-postgrid.php
r2962710 r2983303 164 164 $this->args = $shortcode_atts; 165 165 $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 167 168 if (empty($shortcode_atts['id'] ?? '') && empty($shortcode_atts['post-id'] ?? '')) { 168 169 return "<div>Your agb shortcode is missing 'id=put-id-here'</div>"; … … 353 354 $this->args['link-images'] = ''; 354 355 $this->args['link-titles'] = ''; 355 $this->args['link'] = '';356 $this->args['link'] = ''; 356 357 } 357 358 … … 675 676 function grid_query_term() { 676 677 if (!isset($this->query)) { 677 $this->build_filter();678 679 678 //do we need to limit the terms to those attached to the current post? 680 679 if (($this->args['attached-taxonomies'] ?? '') === 'Y') { … … 721 720 $this->qsrcset = $this->dyg_get_attachment_image_srcset($this->qpid, 'full'); 722 721 } 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 723 757 $this->qsizes = $this->srcset_sizes; 724 758 $this->qalt = $this->qterm->name; … … 747 781 function grid_query_post() { 748 782 if (!isset($this->query)) { 749 $this->build_filter();750 783 $this->qindex = $this->qstart_index - 1; 751 784 $this->args['params']['offset'] = $this->qindex; … … 773 806 $this->qalt = get_post_meta($this->qpid, '_wp_attachment_image_alt', true); 774 807 $this->qsizes = $this->srcset_sizes; 775 $this->filter_class = $this->get_filter_classes();776 808 return true; 777 809 } else { … … 779 811 return false; 780 812 } 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 861 817 862 818 // determine which content loop function to call unless the current page size is reached … … 1162 1118 $href = $this->get_href(); 1163 1119 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>", 1165 1121 [ 1166 1122 '%el' => $this->args['cell-element'], … … 1168 1124 '%aclass' => dygpg_toolbox::sanitize_classes(apply_filters('dygpg-aclass', $this->args['aclass'], $this)), 1169 1125 '%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), 1172 1127 '%href' => esc_url($href), 1173 1128 '%id' => $this->args['id'], -
agb-free/trunk/dyg-grid/includes/slick/slick-theme.css
r2958600 r2983303 214 214 215 215 .dygpg-slick-carousel .dyg-spinner { 216 position: absolute;216 position: relative; 217 217 margin: 0px; 218 top: 50%;218 top: -10px; 219 219 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 7 7 equalizeAllRowHeights(); 8 8 equal_height(); 9 apply_filter ('dygpg-resize', '');9 apply_filters('dygpg-resize', ''); 10 10 } 11 11 -
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 | Templates4 * 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 28 1 29 2 let filters = {}; … … 52 25 * @returns {any} The filtered value. 53 26 */ 54 function apply_filter (tag, value) {27 function apply_filters(tag, value) { 55 28 if(!filters[tag]){ 56 29 return value; -
agb-free/trunk/readme.txt
r2962710 r2983303 4 4 Contributors: AGB 5 5 Requires PHP: 7.4 6 Tested up to: 6.3 7 Stable tag: 5.9.56 Tested up to: 6.3.2 7 Stable tag: 6.0.0 8 8 License: GPLv2 9 9 License URI: http://www.gnu.org/licenses/gpl-2.0.html
Note: See TracChangeset
for help on using the changeset viewer.