1/* global jQuery */ 2 3(function() { 4 5 "use strict"; 6 7 var $window = jQuery( window ), 8 $document = jQuery( document ), 9 $body = jQuery( 'body' ); 10 11 var bg_colors_sections = [], 12 bg_colors_selectors = []; 13 14 // Init bg colors 15 $document.on('action.init_trx_addons', function() { 16 17 var bg_colors_calc_sections_pos = trx_addons_debounce( function() { 18 if ( bg_colors_sections.length ) { 19 var offset = false; 20 for ( var i = 0; i < bg_colors_sections.length; i++ ) { 21 offset = bg_colors_sections[i].offset(); 22 bg_colors_sections[i].data( { 23 'trx-bg-colors-section-top': offset.top, 24 'trx-bg-colors-section-middle': offset.top + bg_colors_sections[i].outerHeight() / 2 25 } ); 26 } 27 } 28 }, 100 ); 29 30 // Update global values 31 $document.on( 'action.resize_trx_addons', function() { 32 bg_colors_calc_sections_pos(); 33 } ); 34 35 var smoke_present = $body.hasClass( 'trx_addons_smoke_present' ), 36 smoke_selector = '.trx_addons_smoke_place_body'; 37 38 jQuery( '[data-trx-bg-colors-color]' ).each( function() { 39 var $self = jQuery( this ), 40 selector = $self.data('trx-bg-colors-selector') 41 || ( ! smoke_present ? TRX_ADDONS_STORAGE['bg_colors_selector'] : smoke_selector ); 42 if ( ! selector ) { 43 var id = 'trx_bg_colors_' + trx_addons_get_unique_id(); 44 $body.append( '<div id="' + id + '" class="trx_bg_colors"></div>' ); 45 TRX_ADDONS_STORAGE['bg_colors_selector'] = selector = 'body > #' + id; 46 } 47 if ( selector ) { 48 var $target = jQuery( selector ), 49 offset = $self.offset(); 50 if ( $target.length ) { 51 $self.data( { 52 'trx-bg-colors-section-top': offset.top, 53 'trx-bg-colors-section-middle': offset.top + $self.outerHeight() / 2, 54 'trx-bg-colors-target-selector': selector, 55 'trx-bg-colors-target': $target 56 } ); 57 bg_colors_sections.push( $self ); 58 if ( bg_colors_selectors.indexOf( selector ) < 0 ) { 59 bg_colors_selectors.push( selector ); 60 } 61 } else { 62 $self.removeAttr( 'data-trx-bg-colors-color' ); 63 $self.removeAttr( 'data-trx-bg-colors-selector' ); 64 } 65 } 66 if ( bg_colors_sections.length ) { 67 $body.addClass( 'with_bg_colors' ); 68 } 69 } ); 70 71 // Draw background on scroll 72 $document.on( 'action.scroll_trx_addons', function() { 73 bg_colors_draw(); 74 } ); 75 76 // Draw background on init hidden elements 77 $document.on( 'action.got_ajax_response action.init_hidden_elements', function() { 78 bg_colors_calc_sections_pos(); 79 bg_colors_draw(); 80 } ); 81 82 } ); 83 84 85 // Set background color 86 function bg_colors_draw() { 87 88 var wh = trx_addons_window_height(), 89 wm = trx_addons_window_scroll_top() + wh / 2, 90 alpha, 91 start_color, start_middle, end_color, end_middle, 92 cur_color, cur_middle, cur_selector, $cur_target, 93 smoke_selector = '.trx_addons_smoke_place_body', 94 theme_bg_color = typeof TRX_ADDONS_STORAGE['theme_bg_color'] != 'undefined' ? TRX_ADDONS_STORAGE['theme_bg_color'] : ''; 95 96 for ( var s = 0; s < bg_colors_selectors.length; s++ ) { 97 cur_selector = bg_colors_selectors[s]; 98 alpha = 255; 99 start_color = ''; 100 start_middle = 0; 101 end_color = ''; 102 end_middle = 0; 103 cur_color = ''; 104 cur_middle = 0; 105 $cur_target = ''; 106 for ( var i = 0; i < bg_colors_sections.length; i++ ) { 107 if ( cur_selector != bg_colors_sections[i].data( 'trx-bg-colors-target-selector' ) ) continue; 108 cur_middle = bg_colors_sections[i].data( 'trx-bg-colors-section-middle' ); 109 cur_color = bg_colors_sections[i].data( 'trx-bg-colors-color' ); 110 $cur_target = bg_colors_sections[i].data( 'trx-bg-colors-target' ); 111 if ( cur_middle < wm ) { 112 start_middle = cur_middle; 113 start_color = cur_color; 114 } else { 115 if ( ! start_color ) { 116 start_middle = Math.max( 0, Math.min( cur_middle - wh, wh / 2 ) ); 117 start_color = theme_bg_color ? theme_bg_color : cur_color; 118 alpha = 0; 119 } 120 end_middle = cur_middle; 121 end_color = cur_color; 122 break; 123 } 124 } 125 if ( start_color && ! end_color ) { 126 end_middle = cur_middle + wh; 127 end_color = theme_bg_color ? theme_bg_color : cur_color; 128 alpha = 1; 129 } 130 if ( start_color && end_color && ( start_color != end_color || alph
130a === 0 || alpha === 1 ) ) { 131 var rgb_start = trx_addons_hex2rgb( start_color ), 132 rgb_end = trx_addons_hex2rgb( end_color ), 133 distance = Math.max( 0, Math.min( 1, ( wm - start_middle ) / ( end_middle - start_middle ) ) ); 134 rgb_start['r'] += Math.round( ( rgb_end['r'] - rgb_start['r'] ) * distance ); 135 rgb_start['g'] += Math.round( ( rgb_end['g'] - rgb_start['g'] ) * distance ); 136 rgb_start['b'] += Math.round( ( rgb_end['b'] - rgb_start['b'] ) * distance ); 137 cur_color = trx_addons_components2hex( rgb_start['r'], rgb_start['g'], rgb_start['b'], 138 theme_bg_color 139 ? false 140 : ( alpha === 0 141 ? Math.round( 255 * distance ) 142 : ( alpha === 1 143 ? Math.round( 255 * 1 - distance ) 144 : false 145 ) 146 ) 147 ); 148 } 149 if ( cur_color ) { 150 if ( cur_selector == smoke_selector ) { 151 if ( typeof window.trx_addons_smoke_set_bg_color != 'undefined' ) { 152 trx_addons_smoke_set_bg_color( cur_color ); 153 } 154 } else { 155 $cur_target.css( 'background-color', cur_color ); 156 } 157 } 158 } 159 } 160 161})();
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.