PageSourceSearch

https://speechi.com/wp-content/plugins/diviflash/public/js/df-tabs.js?ver=1.4.13

js speechi.com collected 2026-10-10 00:31:11 UTC 8,141 bytes, 216 lines download raw bytes

1(function($){
2    window.df_at_sticky = [];
3    $('.difl_advancedtab').each(function(index, ele){
4        var _this = $(this);
5        var container = _this.find('.df_at_container');
6        var nav_container = _this.find('.df_at_nav_container');
7        var navs = _this.find('.df_at_nav');
8        var settings = _this.find('.df_at_container').data().settings;
9        var sticky_selector = '.' + settings.module_class + ' .df_at_nav_wrap';
10        var sticky_container = '.' + settings.module_class + ' .df_at_container';
11        var Sticky = null;
12        var space = df_tab_distance(settings);
13
14        if (settings.use_sticky_nav === 'on') {
15            Sticky = new hcSticky(sticky_selector, {
16                stickTo: sticky_container,
17                top: space.desktop,
18                responsive: {
19                    980: {
20                        top: space.tablet,
21                        disable: settings.turn_off_sticky === 'tablet_phone' ? true : false
22                    },
23                    767: {
24                        top: space.phone,
25                        disable: settings.turn_off_sticky === 'phone' ||  settings.turn_off_sticky === 'tablet_phone' ? true : false
26                    }
27                }
28            });
29            Sticky.refresh();
30            window.df_at_sticky.push(Sticky);
31        }
32        const hash = window.location.hash;
33        if(hash && hash.substring(1).includes("difl_advancedtab") && _this.find(`.df_at_nav[data-hash='${hash.substring(1)}']`).length > 0){
34            const hash_data = hash.substring(1);
35            _this.find(`.df_at_nav[data-hash='${hash_data}']`).addClass('df_at_nav_active');
36            _this.find(`.difl_advancedtabitem.${hash_data}`).addClass('df_at_content_active');
37            $('html, body').animate({
38                scrollTop: $(ele).offset().top - 150
39            }, 2000);
40        }else if("" !== settings.default_active){
41            _this.find(`.df_at_nav.${settings.default_active}`).addClass('df_at_nav_active');
42            _this.find(`.difl_advancedtabitem.${settings.default_active}`).addClass('df_at_content_active');
43        } else{
44            _this.find('.df_at_nav:first-child').addClass('df_at_nav_active');
45            _this.find('.difl_advancedtabitem:first-child').addClass('df_at_content_active');
46        }
47
48        navs.on(settings.tab_event_type, function(e){
49            var active_class = e.currentTarget.classList[0];
50
51            navs.removeClass('df_at_nav_active');
52            $(this).addClass('df_at_nav_active');
53
54            if(settings.use_sticky_nav === 'on') {
55                df_at_nav_sticky_scroll(container, space);
56            }
57            if(settings.use_sticky_nav !== 'on' && settings.use_scroll_to_content === 'on') {
58                df_scroll_to_content(_this.find('.df_at_all_tabs_wrap'));
59            }
60
61            df_tab_anime(
62                _this,
63                `.${settings.module_class} .df_at_all_tabs`,
64                settings.tab_animation,
65                parseInt(settings.animation_duration),
66                active_class
67            );
68            
69            // Check if timeline is available
70            const selectActiveTab   = _this.find('.difl_advancedtabitem.' + active_class);
71            const availableTimeline = selectActiveTab.find(".difl_timeline");
72            
73            if (availableTimeline.length > 0) {
74                setTimeout(function() {  
75                    initializeTimeline(availableTimeline);
76                }, 300);
77            }
78            
79        });
80
81    });
82
83    onElementHeightChange(document.body, function(){
84        if(window.df_at_sticky.length > 0) {
85            for (var i = 0; i < window.df_at_sticky.length; i++) {
86                window.df_at_sticky[i].refresh()
87            }
88        }
89    });
90
91    function onElementHeightChange(elm, callback){
92        var lastHeight = elm.clientHeight, newHeight;
93        (function run(){
94            newHeight = elm.clientHeight;
95            if( lastHeight !== newHeight )
96                callback();
97            lastHeight = newHeight;
98
99            if( elm.onElementHeightChangeTimer )
100                clearTimeout(elm.onElementHeightChangeTimer);
101
102            elm.onElementHeightChangeTimer = setTimeout(run, 200);
103        })();
104    }
105
106    function df_tab_distance(settings){
107        var extra_space     = settings.extra_space === true ? 32 : 0;
108        var space           = parseInt(settings.sticky_distance) + extra_space;
109        var space_tablet    = settings.sticky_distance_tablet !== '' ?
110                            parseInt(settings.sticky_distance_tablet) + extra_space : space;
111        var space_phone     = settings.sticky_distance_phone !== '' ?
112                            parseInt(settings.sticky_distance_phone) + extra_space : space_tablet;
113
114        return {
115            'desktop' : space,
116            'tablet' : space_tablet,
117            'phone' : space_phone
118        };
119    }
120
121    function df_at_nav_sticky_scroll(selector, space) {
122        var position_top = selector.offset().top;
123
124        if($(window).width() > 980) {
125            position_top = position_top - space.desktop;
126        }
127        if($(window).width() < 981 && $(window).width() > 767) {
128            position_top = position_top - space.tablet;
129        }
130        if($(window).width() < 768) {
131            position_top = position_top - space.phone;
132        }
133
134        $([document.documentElement, document.body]).animate({
135            scrollTop: position_top
136        }, 700);
137
138    }
139    function df_scroll_to_content(selector) {
140        var position_top = selector.offset().top;
141        if($(window).width() < 981) {
142            $([document.documentElement, document.body]).animate({
143                scrollTop: position_top
144            }, 500);
145        }
146    }
147
148    var animations = {
149        slide_left : {
150            opacity: ['1', '0'],
151            translateX: ['0', '-100px']
152        },
153        slide_right : {
154            opacity: ['1', '0'],
155            translateX: ['0', '100px']
156        },
157        slide_up : {
158            opacity: ['1', '0'],
159            translateY: ['0', '-100px']
160        },
161        slide_down : {
162            opacity: ['1', '0'],
163            translateY: ['0', '100px']
164        },
165        fade_in : {
166            opacity: ['1', '0'],
167        },
168        zoom_left : {
169            opacity: ['1', '0'],
170            scale: ['1', '.5'],
171            transformOrigin: ['0% 50%', '0% 50%'],
172            // duration: 200
173        },
174        zoom_center : {
175            opacity: ['1', '0'],
176            scale: ['1', '.5'],
177            transformOrigin: ['50% 50%', '50% 50%'],
178            // duration: 200
179        },
180        zoom_right : {
181            opacity: ['1', '0'],
182            scale: ['1', '.5'],
183            transformOrigin: ['100% 50%', '100% 50%'],
184            // duration: 200
185        }
186    }
187
188    function df_tab_anime(_this, selector, config = 'slide_left', duration, active_class) {
189        var object = {
190            targets: selector,
191            direction: 'alternate',
192            easing: 'linear',
193            duration: duration,
194            endDelay: 1,
195            update: function(anim) {
196                if(anim.progress === 100) {
197                    _this.find('.difl_advancedtabitem')
198                        .removeClass('df_at_content_active');
199                    _this.find('.df_at_all_tabs .' + active_class)
200                        .addClass('df_at_content_active');
201                }
202                // Fire custom event for cpt filter if cpt filter uses as lib item as content
203                if ( window?.df_cpt_filter ) {
204                    const evnt = new Event('resize')
205                    window.dispatchEvent(evnt)
206                }
207            }
208        };
209        var anime_config = Object.assign(object, animations[config]);
210
211        if( window.anime ) {
212            window.anime(anime_config);
213        }
214    }
215
216})(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.