PageSourceSearch

https://rqipartners.com/wp-content/plugins/bold-timeline-lite/assets/js/bold-timeline.js?ver=7.1.2

js rqipartners.com collected 2026-09-24 18:43:25 UTC 8,837 bytes, 233 lines download raw bytes

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.