1/* global jQuery:false */ 2 3(function() { 4 5 "use strict"; 6 7 var $window = jQuery( window ), 8 $document = jQuery( document ), 9 $body = jQuery( 'body' ); 10 11 var $lazy_images; 12 13 // Update links and values after the new post added 14 $document.on( 'action.got_ajax_response', update_jquery_links ); 15 $document.on( 'action.init_hidden_elements', update_jquery_links ); 16 var first_run = true; 17 function update_jquery_links(e) { 18 if ( first_run && e && e.namespace == 'init_hidden_elements' ) { 19 first_run = false; 20 return; 21 } 22 $lazy_images = jQuery('img[loading="lazy"]'); 23 } 24 update_jquery_links(); 25 26 27 // Init bg canvas 28 var _bg_canvas = false; 29 30 $document.on('action.init_trx_addons', function() { 31 32 var cnt = 0; 33 34 jQuery( '[data-bg-canvas-type="start"]' ).each( function() { 35 var $start = jQuery( this ), 36 id = $start.data('bg-canvas-id'), 37 $end = $body.find( '[data-bg-canvas-id="' + id + '"][data-bg-canvas-type="end"]' ), 38 effect_start = $start.data('bg-canvas-effect') ? $start.data('bg-canvas-effect') : 'round', 39 effect_end = $end.data('bg-canvas-effect') ? $end.data('bg-canvas-effect') : 'round', 40 color_start = $start.data('bg-canvas-color'), 41 color_end = $end.data('bg-canvas-color') ? $end.data('bg-canvas-color') : color_start; 42 43 if ( id && color_start && $end.length > 0 ) { 44 if ( _bg_canvas === false ) { 45 _bg_canvas = []; 46 } 47 $body 48 .addClass( 'with_bg_canvas' ) 49 .append( '<div id="bg_canvas_' + id + '" class="bg_canvas"></div>' ); 50 51 _bg_canvas.push( { 52 canvas: { 53 obj: $body.find( '#bg_canvas_' + id ) 54 }, 55 start: { 56 obj: $start, 57 color: color_start, 58 effect: effect_start, 59 size: $start.data('bg-canvas-size') ? $start.data('bg-canvas-size') : 0, 60 shift: $start.data('bg-canvas-shift') ? $start.data('bg-canvas-shift') : 0 61 }, 62 end: { 63 obj: $end, 64 color: color_end, 65 effect: effect_end, 66 size: $end.data('bg-canvas-size') ? $end.data('bg-canvas-size') : 0, 67 shift: $end.data('bg-canvas-shift') ? $end.data('bg-canvas-shift') : 0 68 } 69 } ); 70 71 if ( effect_start == 'round' || effect_end == 'round' ) { 72 _bg_canvas[cnt].canvas.cnv = document.createElement("canvas"); 73 _bg_canvas[cnt].canvas.ctx = _bg_canvas[cnt].canvas.cnv.getContext("2d"); 74 _bg_canvas[cnt].canvas.obj.append( _bg_canvas[cnt].canvas.cnv ); 75 } 76 77 if ( effect_start == 'fade' || effect_end == 'fade' ) { 78 _bg_canvas[cnt].canvas.obj.css( { 79 'background-color': color_start, 80 'opacity': 0 81 } ); 82 } 83 84 cnt++; 85 } 86 } ); 87 88 if ( _bg_canvas !== false ) { 89 90 if ( _bg_canvas.length > 1 ) { 91 $body.addClass( 'multi_bg_canvas' ); 92 } 93 94 // Recalc positions on resize 95 $document.on( 'action.resize_trx_addons', trx_addons_debounce( trx_addons_bg_canvas_set_positions, 500 ) ); 96 97 // Recalc positions on new posts are loaded 98 $document.on( 'action.got_ajax_response', function() { 99 trx_addons_bg_canvas_set_positions(); 100 setTimeout( function() { 101 trx_addons_bg_canvas_set_positions(); 102 }, 1000 ); 103 } ); 104 105 // Recalcs positions on internal lazy images are loaded 106 $document.on( 'action.init_lazy_load_elements', function() { 107 trx_addons_bg_canvas_set_positions(); 108 } ); 109 110 // Recalcs positions on external lazy images are loaded 111 var check_lazy_images = trx_addons_debounce( function() { 112 var chg = false; 113 $lazy_images.each( function() { 114 var img = jQuery(this); 115 if ( ! img.data('lazy-complete') && img.get(0).complete ) { 116 chg = true; 117 img.data('lazy-complete', true); 118 } 119 } ); 120 if ( chg ) { 121 trx_addons_bg_canvas_set_positions(); 122 } 123 }, 100 ); 124 125 // Draw background on scroll 126 $window.on( 'action.scroll_trx_addons', function() { 127 // Some browsers hide address bar on scroll (window height is increased, but resize event is not generated) 128 if ( trx_addons_window_height() != $window.height() || Math.abs( _bg_canvas[0].canvas.obj.height() - trx_addons_window_height() ) > 1 ) { 129 trx_addons_window_height( _bg_canvas[0].canvas.obj.height() ); //$window.height(); 130 trx_addons_bg_canvas_set_positions(); 131 } 132 // Check lazy images on load 133 check_lazy_images(); 134 // Draw element 135 trx_addons_bg_canvas_draw( false ); 136 } ); 137 138 trx_addons_bg_canvas_set_positions(); 139 140 $document.trigger( 'action.trx_addons_bg_canvas', [_bg_canvas] ); 141 } 142 143 function trx_addons_bg_canvas_draw( force ) { 144 for (var i=0; i < _bg_canvas.length; i++ ) { 145 trx_addons_bg_canvas_draw_item( _bg_canvas[i], force ); 146 } 147 } 148 149 function trx_addons_bg_canvas_set_positions() { 150 for (var i=0; i < _bg_canvas.length; i++ ) { 151 trx_addons_bg_canvas_item_set_position( _bg_canvas[i] ); 152 } 153 trx_addons_bg_canvas_draw( true ); 154 } 155 156 function trx_addons_bg_canvas_item_set_position( item ) { 157 var o, 158 is_mobile = trx_addons_browser_is_mobile() || jQuery('body').hasClass('ua_mobile'); 159 160 jQuery( item.canvas.cnv ) 161 .css( { 162 width: is_mobile ? '100vw' : trx_addons_window_width() + 'px', 163 height: is_mobile ? '100vh' : trx_addons_window_height() + 'px' 164 } ) 165 .attr( { 166 width: trx_addons_window_width(), 167 height: trx_addons_window_height() 168 } ); 169 170 item.w = trx_addons_window_width(); 171 item.h = trx_addons_window_height(); 172 item.size = ( is_mobile ? 1.5 : 1 ) * Math.sqrt(Math.pow(trx_addons_window_width(), 2) + Math.pow(trx_addons_window_height() + Math.abs( Math.min(0, item.start.shift, item.end.shift) ) * trx_addons_window_height() / 100, 2)); 173 174 o = item.start.obj.offset(); 175 item.start.w = Math.max(1, item.start.obj.width()); 176 item.start.h = Math.max(1, item.start.obj.height()); 177 item.start.left = o.left; 178 item.start.top = o.top; 179 180 o = item.end.obj.offset(); 181 item.end.w = Math.max(1, item.end.obj.width()); 182 item.end.h = Math.max(1, item.end.obj.height()); 183 item.end.left = o.left; 184 item.end.top = o.top; 185 } 186 187 function trx_addons_bg_canvas_set_coords( item ) { 188 189 var t = item.start.top - trx_addons_window_scroll_top(), 190 dt = trx_addons_window_height() * item.start.shift / 100,
191 rt = 1 - Math.max( 0, Math.min( 1, ( t + dt ) / trx_addons_window_height() ) ), 192 b = item.end.top + item.end.h - trx_addons_window_scroll_top() - trx_addons_window_height(), 193 db = trx_addons_window_height() * item.end.shift / 100, 194 rb = Math.max( 0, Math.min( 1, ( b + db ) / trx_addons_window_height() ) ); 195 item.progress = Math.min(rt, rb); 196 item.distance = rt == 1 && rb == 1 ? -t / ( -t - dt + b + db - trx_addons_window_height() ) : 0; 197 item.coords = item.end.top - trx_addons_window_scroll_top() + db < trx_addons_window_height() * 1.5 || rb < 1 198 ? { 199 x: item.end.left + item.end.w / 2, 200 y: item.end.top + item.end.h / 2 - trx_addons_window_scroll_top(), 201 r: item.end.size, 202 d: 'end' 203 } 204 : { 205 x: item.start.left + item.start.w / 2, 206 y: Math.max(item.start.top + item.start.h / 2 - trx_addons_window_scroll_top(), trx_addons_window_height() / 2), 207 r: item.start.size, 208 d: 'start' 209 }; 210 } 211 212 function trx_addons_bg_canvas_draw_item( item, force ) { 213 trx_addons_bg_canvas_set_coords( item ); 214 if ( force || ! item.done || ( item.progress > 0 && item.progress < 1 ) ) { 215 var effect = item.coords.d == 'start' ? item.start.effect : item.end.effect, 216 color = item.coords.d == 'start' ? item.start.color : item.end.color; 217 if ( item.start.color != item.end.color && item.distance > 0 ) { 218 var rgb_start = trx_addons_hex2rgb( item.start.color ), 219 rgb_end = trx_addons_hex2rgb( item.end.color ); 220 rgb_start['r'] += Math.round( ( rgb_end['r'] - rgb_start['r'] ) * item.distance ); 221 rgb_start['g'] += Math.round( ( rgb_end['g'] - rgb_start['g'] ) * item.distance ); 222 rgb_start['b'] += Math.round( ( rgb_end['b'] - rgb_start['b'] ) * item.distance ); 223 color = trx_addons_components2hex(rgb_start['r'],rgb_start['g'],rgb_start['b']); 224 } 225 if ( effect == 'round' ) { 226 if ( item.effect != effect ) { 227 item.effect = effect; 228 item.canvas.obj.css( { 229 'background-color': 'transparent', 230 'opacity': 1 231 } ); 232 jQuery( item.canvas.cnv ).show(); 233 } 234 var t = item.progress * item.size; 235 t = t < item.coords.r + 10 ? item.coords.r : t; 236 item.canvas.ctx.clearRect(0, 0, item.w, item.h); 237 item.canvas.ctx.beginPath(); 238 item.canvas.ctx.fillStyle = color; 239 item.canvas.ctx.ellipse(item.coords.x, item.coords.y, t, t, 0, 0, 2 * Math.PI); 240 item.canvas.ctx.closePath(); 241 item.canvas.ctx.fill(); 242 } else if ( effect == 'fade' ) { 243 if ( item.effect != effect || item.start.color != item.end.color ) { 244 item.canvas.obj.css( { 245 'background-color': color 246 } ); 247 } 248 if ( item.effect != effect ) { 249 item.effect = effect; 250 jQuery( item.canvas.cnv ).hide(); 251 } 252 item.canvas.obj.css( { 253 'opacity': item.progress 254 } ); 255 } else { 256 $document.trigger( 'action.trx_addons_bg_canvas_draw', [item] ); 257 } 258 } 259 item.done = ( item.progress === 0 || item.progress == 1 ) 260 && item.start.color == item.end.color 261 && ( item.end.top + item.end.h / 2 + item.end.size < trx_addons_window_scroll_top() || item.end.top > trx_addons_window_scroll_top() + trx_addons_window_height() ) 262 && item.start.shift === 0; 263 } 264 } ); 265 266 267 // Mark Elementor sections between start & end with class 'bg_canvas_covered' 268 $document.on( 'action.trx_addons_bg_canvas', function(e, _bg_canvas) { 269 if ( _bg_canvas !== false ) { 270 for (var i=0; i < _bg_canvas.length; i++ ) { 271 var start = _bg_canvas[i].start.obj.parents( '.elementor-section:not(.elementor-inner-section)' ).eq(0), 272 end = _bg_canvas[i].end.obj.parents( '.elementor-section:not(.elementor-inner-section)' ).eq(0); 273 if ( start.length > 0 && end.length > 0 ) { 274 do { 275 start.addClass( 'bg_canvas_covered' ); 276 if ( start.data('id') != end.data('id') ) { 277 start = start.next( '.elementor-section' ).eq(0); 278 } else { 279 break; 280 } 281 } while ( start.length > 0 ); 282 } 283 } 284 } 285 } ); 286 287})();
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.