1(function($) { 2 'use strict'; 3 $.fn.dlAddonsGridLayout = function () { 4 var $el, $grid, resizeTimer; 5 /** 6 * Calculate size for grid items 7 */ 8 function calculateMasonrySize(isotopeOptions) { 9 var tabletBreakPoint = 1025, 10 mobileBreakPoint = 768, 11 windowWidth = window.innerWidth, 12 gridWidth = $grid[0].getBoundingClientRect().width, 13 gridColumns = 1, 14 gridGutter = 0, 15 zigzagHeight = 0, 16 settings = $el.data('grid'), 17 lgGutter = settings.gutter ? settings.gutter : 0, 18 mdGutter = settings.gutterTablet ? settings.gutterTablet : lgGutter, 19 smGutter = settings.gutterMobile ? settings.gutterMobile : mdGutter, 20 lgColumns = settings.columns ? settings.columns : 1, 21 mdColumns = settings.columnsTablet ? settings.columnsTablet : lgColumns, 22 smColumns = settings.columnsMobile ? settings.columnsMobile : mdColumns, 23 lgZigzagHeight = settings.zigzagHeight ? settings.zigzagHeight : 0, 24 mdZigzagHeight = settings.zigzagHeightTablet ? settings.zigzagHeightTablet : lgZigzagHeight, 25 smZigzagHeight = settings.zigzagHeightMobile ? settings.zigzagHeightMobile : mdZigzagHeight, 26 zigzagReversed = settings.zigzagReversed && settings.zigzagReversed === 1 ? true : false; 27 28 if (typeof elementorFrontendConfig !== 'undefined') { 29 tabletBreakPoint = elementorFrontendConfig.breakpoints.lg; 30 mobileBreakPoint = elementorFrontendConfig.breakpoints.md; 31 } 32 33 if (windowWidth >= tabletBreakPoint) { 34 gridColumns = lgColumns; 35 gridGutter = lgGutter; 36 zigzagHeight = lgZigzagHeight; 37 } else if (windowWidth >= mobileBreakPoint) { 38 gridColumns = mdColumns; 39 gridGutter = mdGutter; 40 zigzagHeight = mdZigzagHeight; 41 } else { 42 gridColumns = smColumns; 43 gridGutter = smGutter; 44 zigzagHeight = smZigzagHeight; 45 } 46 47 var totalGutterPerRow = ( 48 gridColumns - 1 49 ) * gridGutter; 50 51 var columnWidth = ( 52 gridWidth - totalGutterPerRow 53 ) / gridColumns; 54 55 columnWidth = Math.floor(columnWidth); 56 57 var columnWidth2 = columnWidth; 58 if (gridColumns > 1) { 59 columnWidth2 = columnWidth * 2 + gridGutter; 60 } 61 62 $grid.children('.grid-sizer').css({ 63 'width': columnWidth + 'px' 64 }); 65 66 var columnHeight = 0, 67 columnHeight2 = 0, // 200%. 68 columnHeight7 = 0, // 70%. 69 columnHeight13 = 0, // 130%. 70 isMetro = false, 71 ratioW = 1, 72 ratioH = 1; 73 74 if (settings.ratio) { 75 ratioH = settings.ratio; 76 isMetro = true; 77 } 78 79 // Calculate item height for only metro type. 80 if (isMetro) { 81 columnHeight = columnWidth * ratioH / ratioW; 82 columnHeight = Math.floor(columnHeight); 83 84 if (gridColumns > 1) { 85 columnHeight2 = columnHeight * 2 + gridGutter; 86 columnHeight13 = parseInt(columnHeight * 1.3); 87 columnHeight7 = columnHeight2 - gridGutter - columnHeight13; 88 } else { 89 columnHeight2 = columnHeight7 = columnHeight13 = columnHeight; 90 } 91 } 92 93 $grid.children('.grid-item').each(function (index) { 94 var gridItem = $(this); 95 96 // Zigzag. 97 if ( 98 zigzagHeight > 0 // Has zigzag. 99 && 100 gridColumns > 1 // More than 1 column. 101 && 102 index + 1 <= gridColumns // On top items. 103 ) { 104 if (zigzagReversed === false) { // Is odd item. 105 if (index % 2 === 0) { 106 gridItem.css({ 107 'marginTop': zigzagHeight + 'px' 108 });
109 } else { 110 gridItem.css({ 111 'marginTop': '0px' 112 }); 113 } 114 } else { 115 if (index % 2 !== 0) { 116 gridItem.css({ 117 'marginTop': zigzagHeight + 'px' 118 }); 119 } else { 120 gridItem.css({ 121 'marginTop': '0px' 122 }); 123 } 124 } 125 126 } else { 127 gridItem.css({ 128 'marginTop': '0px' 129 }); 130 } 131 132 if (gridItem.data('width') === 2) { 133 gridItem.css({ 134 'width': columnWidth2 + 'px' 135 }); 136 } else { 137 gridItem.css({ 138 'width': columnWidth + 'px' 139 }); 140 } 141 142 if ('grid' === settings.type) { 143 gridItem.css({ 144 'marginBottom': gridGutter + 'px' 145 }); 146 } 147 148 if (isMetro) { 149 var $itemHeight; 150 151 if (gridItem.hasClass('grid-item-height')) { 152 $itemHeight = gridItem; 153 } else { 154 $itemHeight = gridItem.find('.grid-item-height'); 155 } 156 157 if (gridItem.data('height') === 2) { 158 $itemHeight.css({ 159 'height': columnHeight2 + 'px' 160 }); 161 } else if (gridItem.data('height') === 1.3) { 162 $itemHeight.css({ 163 'height': columnHeight13 + 'px' 164 }); 165 } else if (gridItem.data('height') === 0.7) { 166 $itemHeight.css({ 167 'height': columnHeight7 + 'px' 168 }); 169 } else { 170 $itemHeight.css({ 171 'height': columnHeight + 'px' 172 }); 173 } 174 } 175 }); 176 177 if (isotopeOptions) { 178 isotopeOptions.packery.gutter = gridGutter; 179 isotopeOptions.fitRows.gutter = gridGutter; 180 $grid.isotope(isotopeOptions); 181 } 182 183 $grid.isotope('layout'); 184 } 185 return this.each(function () { 186 $el = $(this); 187 $grid = $el.find('.dl_addons_grid'); 188 189 var settings = $el.data('grid'); 190 var gridData; 191 192 if ($grid.length > 0 && settings && typeof settings.type !== 'undefined') { 193 var isotopeOptions = { 194 itemSelector: '.grid-item', 195 percentPosition: true, 196 // transitionDuration: 0, 197 packery: { 198 columnWidth: '.grid-sizer', 199 }, 200 fitRows: { 201 gutter: 10 202 } 203 }; 204 205 if ('masonry' === settings.type || 'metro' === settings.type) { 206 isotopeOptions.layoutMode = 'packery'; 207 } else { 208 isotopeOptions.layoutMode = 'fitRows'; 209 } 210 211 gridData = $grid.imagesLoaded(function () { 212 calculateMasonrySize(isotopeOptions); 213 $grid.addClass('loaded'); 214 }); 215 216 $(window).resize(function () { 217 calculateMasonrySize(isotopeOptions); 218 219 // Sometimes layout can be overlap. then re-cal layout one time. 220 clearTimeout(resizeTimer); 221 resizeTimer = setTimeout(function () { 222 // Run code here, resizing has "stopped" 223 calculateMasonrySize(isotopeOptions); 224 }, 500); // DO NOT decrease the time. Sometime, It'll make layout overlay on resize. 225 }); 226 } 227 228 }); 229 }; 230}(jQuery));
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.