1( function( $ ) { 2 "use strict"; 3 4 function boldTimelineFixLineHeight() { 5 6 // Fix line height for vertical timeline 7 8 // console.log( 'boldTimelineFixLineHeight' ); 9 10 jQuery( '.bold_timeline_container.bold_timeline_container_has_line_style.bold_timeline_container_line_position_vertical' ).each( function( index ) { 11 12 var $lastItem = jQuery( this ).find( '.bold_timeline_item' ).last(); 13 var $firstGroup = jQuery( this ).find( '.bold_timeline_group' ).first(); 14 var $line = jQuery( this ).find( '.bold_timeline_container_line' ).first(); 15 16 // console.log( $lastItem ); 17 18 if ( $lastItem.length > 0 ) { 19 var th = $lastItem.outerHeight(); 20 21 // console.log( th ); 22 23 var tl = $line.outerHeight(); 24 //console.log( $lastItem ); 25 var $itemMarker = $lastItem.find( '.bold_timeline_item_marker' ).last(); 26 //console.log( $itemMarker ); 27 var mt = $itemMarker.length > 0 ? $itemMarker.position().top : 32; 28 var mh = $itemMarker.length > 0 ? $itemMarker.outerHeight() : 16; 29 30 var b = th - mt - mh / 2; 31 jQuery( this ).find( '.bold_timeline_container_line' ).css( 'bottom', b + 'px' ); 32 } 33 var t = $firstGroup.find('.bold_timeline_group_header').outerHeight(); 34 jQuery( this ).find( '.bold_timeline_container_line' ).css( 'top', t + 'px' ); 35 } ); 36 37 } 38 39 /** 40 * Gets computed translate values 41 * @param {HTMLElement} element 42 * @returns {Object} 43 */ 44 function getTranslateY ( targetNode ) { 45 var transform = $( targetNode ).css( 'transform' ); 46 var transformMatrix = transform.slice( 7, transform.length - 1 ).split( ', ' ); 47 // console.log( transformMatrix ); 48 // var output = isNaN ( transformMatrix[ transformMatrix.length-1 ] ) ? 0 : parseInt( transformMatrix[ transformMatrix.length-1 ] ) ; 49 var output = parseInt( transformMatrix[ transformMatrix.length-1 ] ) || 0; 50 // console.log( output ); 51 return parseInt( output ); 52 53 // return 0; 54 } 55 56 function boldTimelineMoveOverlapingItems() { 57 58 // Move overlaping items 59 60 var mt = 0; 61 var default_gap = 64; // Default gap 62 var connector_top = 32; // Default connector top position, TODO: izracunati ovo tako da bude standardan razmak 63 64 jQuery( '.bold_timeline_container.bold_timeline_container_line_position_center.bold_timeline_container_line_position_overlap .bold_timeline_group_content' ).each( function( index ) { 65 66 jQuery( this ).find( '.bold_timeline_item:not(:first-child)' ).each( function( index ) { 67 68 69 70 var $this = jQuery( this ); 71 var $prev = jQuery( this ).prev( '.bold_timeline_item' ); 72 var $prev_prev = $prev.prev( '.bold_timeline_item' ); 73 74 // var this_h = $this.outerHeight(); 75 var this_t = $this.position().top - getTranslateY( $this ); 76 // var this_t = $this.position().top; 77 78 var prev_h = $prev.length > 0 ? $prev.outerHeight() : 0; 79 var prev_mt = $prev.length > 0 ? $prev.data( 'margin-top' ) : 0; 80 var prev_t = $prev.length > 0 ? $prev.position().top - getTranslateY( $prev ) : 0; 81 // var prev_t = $prev.length > 0 ? $prev.position().top : 0; 82 var prev_b = prev_t + prev_h + prev_mt; 83 84 var prev_prev_h = $prev_prev.length > 0 ? $prev_prev.outerHeight() : 0; 85 var prev_prev_mt = $prev_prev.length > 0 ? $prev_prev.data( 'margin-top' ) : 0; 86 var prev_prev_t = $prev_prev.length > 0 ? $prev_prev.position().top - getTranslateY( $prev_prev ) : 0; 87 // var prev_prev_t = $prev_prev.length > 0 ? $prev_prev.position().top : 0; 88 var prev_prev_b = prev_prev_t + prev_prev_h + prev_prev_mt; 89 90 var prev_b = $prev.is(":visible") ? prev_b : prev_prev_b; 91 92 93 if ( index == 0 ) { 94 /* second item in a group */ 95 mt = -( prev_h - default_gap); 96 } else if ( prev_prev_b > prev_t + prev_mt ) { 97 /* align to prev prev bottom */ 98 mt = prev_prev_b - this_t + default_gap; 99 if ( prev_prev_b > prev_b) { 100 mt = prev_prev_b - prev_b + default_gap; 101 } 102 } else if ( prev_t + prev_mt > prev_prev_b ) { 103 /* align to prev top */ 104 mt = prev_t - this_t + prev_mt + default_gap + connector_top; 105 } else { 106 /* align to prev bottom */ 107 mt = prev_b - this_t + default_gap + connector_top; 108 } 109 110 111 /*console.log( 'prev_h: ' + prev_h ); 112 console.log( 'prev_mt: ' + prev_mt ); 113 console.log( 'index: ' + index ); 114 console.log( 'mt: ' + mt );*/ 115 116 117 118 jQuery( this ).css( 'margin-top', '' + mt + 'px' ); 119 jQuery( this ).data( 'margin-top', mt ); 120 121 } ); 122 123 } ); 124
125 // fix when last item is shorter than the previous one 126 var g = jQuery( '.bold_timeline_container.bold_timeline_container_line_position_center.bold_timeline_container_line_position_overlap .bold_timeline_group:last .bold_timeline_group_content' ); 127 var c = g.find(".bold_timeline_item:last").prev(); 128 if ( c.length > 0 ) { 129 var cp = c.position(); 130 var mb_fix = cp.top + c.outerHeight() + c.data( 'margin-top' ) - g.outerHeight() - connector_top - default_gap; 131 if ( mb_fix > 0 ) g.css( 'margin-bottom', '' + mb_fix + 'px' ); 132 } 133 134 boldTimelineAnimateItems(); 135 136 } 137 138 function boldTimelineInitHorizontalTimeline() { 139 140 // Init sliders (vertical timelines) 141 jQuery('.bold_timeline_container.bold_timeline_container_line_position_horizontal .bold_timeline_container_content').each( function( index ) { 142 jQuery( this ).find( '.bold_timeline_group_show_button' ).remove(); 143 jQuery( this ).find( '.bold_timeline_group' ).each( function( index ) { 144 if ( jQuery( this ).find( '.bold_timeline_item' ).length > 0 ) { 145 jQuery( this ).find( '.bold_timeline_item' ).unwrap().insertAfter( jQuery( this ) ); 146 // Move group into next item 147 jQuery( this ).addClass( 'bold_timeline_group_prepended' ).prependTo( jQuery( this ).next() ); 148 } else { 149 // Empty group 150 jQuery( this ).remove(); 151 } 152 }); 153 jQuery( this ).slick(); 154 } ); 155 } 156 157 function boldTimelineInitShowHideItem() { 158 // items 159 jQuery('.bold_timeline_container_item_content_display_hide .bold_timeline_item_override_content_display_inherit.bold_timeline_item .bold_timeline_item_header, .bold_timeline_container .bold_timeline_item_override_content_display_hide.bold_timeline_item .bold_timeline_item_header').on( 'click', function() { 160 jQuery( this ).parents( '.bold_timeline_item' ).toggleClass('on'); 161 boldTimelineFixLineHeight(); 162 boldTimelineAnimateItems(); 163 return false; 164 }); 165 166 // groups 167 jQuery('.bold_timeline_group_show_button .bold_timeline_item_button').on( 'click', function() { 168 jQuery( this ).parents('.bold_timeline_group').toggleClass('on'); 169 boldTimelineFixLineHeight(); 170 boldTimelineAnimateItems(); 171 return false; 172 }); 173 } 174 175 function boldTimelineAnimateItems() { 176 var $all_elems = jQuery( '.bold_timeline_animate:not(.bold_timeline_animated)' ); 177 var $visible_elems = []; 178 179 if ( $all_elems.length > 0 ) { 180 var counter = 1; 181 $all_elems.each(function() { 182 var top_offset = counter == $all_elems.length ? 50 : 75; 183 if ( boldTimelineIsItemOnScreen( jQuery(this), top_offset ) ) { 184 $visible_elems.push( jQuery(this) ); 185 } 186 counter++; 187 }); 188 } 189 if ( $visible_elems.length > 0 ) { 190 jQuery.each( $visible_elems, function( index ) { 191 jQuery(this).css( 'transition-delay', index * 200 + 'ms'); 192 jQuery(this).addClass( 'bold_timeline_animated' ); 193 }); 194 } 195 // boldTimelineFixLineHeight(); 196 } 197 198 function boldTimelineIsItemOnScreen( elem, top_offset ) { 199 top_offset = ( top_offset === undefined ) ? 75 : top_offset; 200 var element = elem.get( 0 ); 201 if ( element == undefined ) return false; 202 var bounds = element.getBoundingClientRect(); 203 return bounds.top + top_offset < window.innerHeight && bounds.bottom > 0; 204 } 205 206 207 // general init 208 209 var bold_timeline_init_finished; 210 window.bold_timeline_init_finished = false; 211 212 document.addEventListener('readystatechange', function() { 213 // if ( ! window.bold_timeline_init_finished && ( document.readyState === 'interactive' || document.readyState === 'complete' ) ) { 214 if ( ! window.bold_timeline_init_finished && ( document.readyState === 'complete' ) ) { 215 boldTimelineFixLineHeight(); 216 boldTimelineInitHorizontalTimeline(); 217 boldTimelineMoveOverlapingItems(); 218 boldTimelineInitShowHideItem(); 219 // boldTimelineAnimateItems(); /* call from moveoverlaping items */ 220 window.bold_timeline_init_finished = true; 221 } 222 jQuery( document ).on( 'scroll', function() { 223 boldTimelineAnimateItems(); 224 }); 225 $(window).on('resize', function() { 226 boldTimelineMoveOverlapingItems(); 227 }); 228 229 }, false); 230 231 // end init 232 233} )( 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.