PageSourceSearch

https://www.creativeyoko.co.jp/wp-content/plugins/ooohboi-steroids…/js/ooohboi-steroids.js?ver=2.1.28aaa

js creativeyoko.co.jp collected 2026-09-24 09:58:19 UTC 21,439 bytes, 432 lines download raw bytes

1/* Elementor hooks - editor - frontend */
2
3'use strict';
4
5( function ( $, w ) {
6    
7    var $window = $( w );
8
9    $window.on( 'elementor/frontend/init', function() {
10
11        var SectionExtends = elementorModules.frontend.handlers.Base.extend( {
12
13            onInit: function onInit() {
14
15                elementorModules.frontend.handlers.Base.prototype.onInit.apply( this, arguments );
16                this.initSectionExtends();
17
18            },
19            isBreakingBad: function() {
20
21                return this.$element.hasClass( 'ob-is-breaking-bad' );
22
23            },
24            /* needed for Inner Section stickyness */
25            isInnerSection: function() {
26                return this.$element.hasClass( 'elementor-inner-section' );
27            }, 
28            onElementChange: function( changedProp ) {
29
30                // Breaking Bad
31                if( changedProp === '_ob_bbad_use_it' ) {
32                    if( 'yes' === this.getElementSettings( '_ob_bbad_use_it' ) ) {
33                        this.$element.addClass( 'ob-is-breaking-bad' );
34                        if( this.isInnerSection() ) this.$element.addClass( 'ob-bb-inner' );
35                    }
36                    else {
37                        this.$element.removeClass( 'ob-is-breaking-bad' ); 
38                        if( this.isInnerSection() ) this.$element.removeClass( 'ob-bb-inner' );
39                    }
40                }
41                // Inner Section
42                if( changedProp === '_ob_bbad_sssic_use' && this.isInnerSection() ) {
43                    if( 'yes' === this.getElementSettings( '_ob_bbad_sssic_use' ) ) this.$element.addClass( 'ob-is-sticky-inner-section' );
44                    else this.$element.removeClass( 'ob-is-sticky-inner-section' );
45                }
46                
47            },
48
49            initSectionExtends: function() {
50            
51                if( this.isEdit ) {
52                    // Breaking Bad
53                    if( 'yes' === this.getElementSettings( '_ob_bbad_use_it' ) && ! this.isBreakingBad() ) {
54                        this.$element.addClass( 'ob-is-breaking-bad' ); 
55                        if( this.isInnerSection() ) this.$element.addClass( 'ob-bb-inner' ); 
56                    }
57                }
58                // Sticky Inner Section - identical for both front-and-back-end
59                if( 'yes' === this.getElementSettings( '_ob_bbad_sssic_use' ) && this.isInnerSection() ) {
60                    if( this.isEdit ) this.$element.addClass( 'ob-is-sticky-inner-section' );
61                    // find first wrapping element; must match some class name(s)
62                    var parent_wrapper = this.$element.closest( '.elementor-widget-wrap' );
63                    if( parent_wrapper.length ) parent_wrapper.addClass( 'ob-sssic-wrapper' );
64                }
65            }, 
66
67        } );
68
69        var ColumnExtends = elementorModules.frontend.handlers.Base.extend( {
70
71            onInit: function onInit() {
72
73                elementorModules.frontend.handlers.Base.prototype.onInit.apply( this, arguments );
74                // is E3.0 column?
75
76                // Teleporter issue with Chrome
77                var ua = navigator.userAgent.toLowerCase();
78                if( ua.indexOf( 'chrome' ) > -1 ) this.teleporterChromeResize();
79                // columns...
80                this.initColumnExtends();
81
82            },
83            teleporterChromeResize: function() {
84
85                if( ! this.isTeleporter() ) return;
86
87                var dis = this;
88                var myID = this.$element.attr( 'data-id' ); 
89                $window.on( 'resize', function() { 
90                    dis.$element.closest( '.ob-is-teleporter' ).addClass( 'ob-chrome-resize' );
91                    clearTimeout( myID );   
92                    myID = setTimeout( function() { 
93                        var column_height = parseInt( dis.$element.closest( '.ob-is-teleporter' ).css( 'height' ) );
94                        var col_wrap = "";
95                        if( col_wrap.length ) col_wrap.css( { 'height': column_height } );
96                        else {
97                            dis.$element.find( '.elementor-widget-wrap' ).first().css( { 'height': column_height } );
98                        }
99                        dis.$element.closest( '.ob-is-teleporter' ).removeClass( 'ob-chrome-resize' ); 
100                    }, 500 );
101                } ); 
102                $window.trigger( 'resize' );
103                
104            },
105            /* Teleporter */
106            isTeleporter: function() {
107                return this.$element.hasClass( 'ob-is-teleporter' );
108            }, 
109            /* Widget Stalker */
110            isWidgetStalkerCol: function() {
111                return this.$element.hasClass( 'ob-is-stalker' );
112            },
113            initColumnExtends: function() {
114                /* breaking bad */
115
116                function getSafeUrl(url) {
117                    try {
118                        var parsed = new URL(url, window.location.origin);
119                        var allowedProtocols = ['http:', 'https:', 'mailto:', 'tel:'];
120
121                        if (!allowedProtocols.includes(parsed.protocol)) {
122                            return false;
123                        }
124
125                        return parsed.href;
126                    } catch (e) {
127                        return false;
128                    }
129                }
130                if( ! this.isEdit ) {
131                    var bb_settings = {};
132                    try {
133                        bb_settings = JSON.parse( this.$element.attr( 'data-settings' ) );
134                    } catch ( error ) {
135                        return;
136                    }
137                    // handle links
138                    if( undefined !== bb_settings._ob_bbad_link ) { 
139
140                        var bb_link = bb_settings._ob_bbad_link;
141
142                        if( ! bb_link.url || bb_link.url === '' ) { 
143                            this.$element.removeClass( 'bb-column-link' );
144                            return;
145                        }
146
147                        // Validate URL before using
148                        var safeUrl = getSafeUrl( bb_link.url );
149
150                        if ( ! safeUrl ) {
151                            this.$element.removeClass( 'bb-column-link' );
152                            return;
153                        }
154
155                        this.$element.addClass( 'bb-column-link' );
156                        this.$element.off( 'click.bb' );
157
158                        this.$element.on( 'click.bb', function() {
159                            if( bb_link.is_external ) {
160                                window.open( safeUrl, '_blank', 'noopener,noreferrer' );
161                            } else {
162                                window.location.href = safeUrl;
163                            }
164                        } );
165                    }
166                }
167                /* Teleporter */
168                if( this.isEdit && 'use-teleporter' === this.getElementSettings( '_ob_teleporter_use' ) ) { 
169                    this.$element.addClass( 'ob-is-teleporter' ); 
170                    this.$element.find( '.elementor-widget-wrap' ).first().addClass( 'ob-tele-midget' ); 
171                    this.doTeleporterEditor(); 
172                } 
173                if( ! this.isEdit && this.isTeleporter() ) {
174                    this.$element.find( '.elementor-widget-wrap' ).first().addClass( 'ob-tele-midget' ); 
175                    this.doTeleporter(); 
176                }
177                /* Widget Stalker */
178                if( this.isEdit && 'yes' === this.getElementSettings( '_ob_bbad_is_stalker' ) ) {
179                    this.$element.addClass( 'ob-is-stalker' ); 
180                }
181            }, 
182            onElementChange: function( changedProp ) {
183                
184                if( changedProp === '_ob_teleporter_overlay_color' ) {
185                    this.$element.find( 'div[class*="ob-teleporter-"] > .ob-tele-overlay' ).css( 'background-color', this.getElementSettings( '_ob_teleporter_overlay_color' ) );
186                } else if( changedProp === '_ob_teleporter_no_pass_tablet' ) {
187                    if( 'no-tablet' === this.getElementSettings( '_ob_teleporter_no_pass_tablet' ) ) 
188                        this.$element.addClass( 'ob-tele-no-tablet' );
189                    else 
190                        this.$element.removeClass( 'ob-tele-no-tablet' );
191                } else if( changedProp === '_ob_teleporter_no_pass_mobile' ) {
192                    if( 'no-mobile' === this.getElementSettings( '_ob_teleporter_no_pass_mobile' ) ) 
193                        this.$element.addClass( 'ob-tele-no-mobile' ); 
194                    else 
195                        this.$element.removeClass( 'ob-tele-no-mobile' ); 
196                }
197                /* Widget Stalker */
198                if( changedProp === '_ob_bbad_is_stalker' ) {
199                    this.routeWidgetStalkerCol();
200                }
201            },
202            /* Widget Stalker */
203            routeWidgetStalkerCol: function() {
204                if( ! this.isWidgetStalkerCol() && 'yes' === this.getElementSettings( '_ob_bbad_is_stalker' ) ) this.$element.addClass( 'ob-is-stalker' ); 
205                else this.$element.removeClass( 'ob-is-stalker' );
206            },
207            /* Teleporter */
208            doTeleporterEditor: function() {
209
210                if( 'use-teleporter' !== this.getElementSettings( '_ob_teleporter_use' ) ) return; // bail
211
212                // E3.0+ wrap the children of .elementor-widget-wrap for the animation purpose
213                var widgets_wrapper = this.$element.find( '.elementor-widget-wrap' ).first();
214                if( widgets_wrapper.length ) {
215                    widgets_wrapper.wrapInner( '<div class="widget-wrap-children" />' );
216                    if( widgets_wrapper.find( '.elementor-background-overlay' ).first().length ) {
217                        widgets_wrapper.find( '.elementor-background-overlay' ).first().insertBefore( widgets_wrapper.find( '.elementor-background-overlay' ).first().parent() );
218                    }
219                }
220
221                if( 'do-pass' !== this.getElementSettings( '_ob_teleporter_pass' ) ) return; // bail too    
222
223                var this_ob = this;
224                var myself  = this.$element;
225                var my_id   = this.$element.attr( 'data-id' ); 
226
227                // default classes
228                if( 'no-tablet' === this.getElementSettings( '_ob_teleporter_no_pass_tablet' ) ) 
229                    this.$element.addClass( 'ob-tele-no-tablet' );
230                if( 'no-mobile' === this.getElementSettings( '_ob_teleporter_no_pass_mobile' ) ) 
231                    this.$element.addClass( 'ob-tele-no-mobile' ); 
232
233                // this column's parent section
234                var parent_section = ( 'section' === this.getElementSettings( '_ob_teleporter_pass_element' ) ) ? this.$element.closest( '.elementor-section' ) : this.$element.closest( '.elementor-container' ); 
235                if( ! parent_section.length ) return; // bail
236
237                // parent overflow
238                parent_section.css( 'overflow', 'hidden' ); 
239
240                // new element & effect
241                var hover_effect  = this.getElementSettings( '_ob_teleporter_pass_effect' );
242                var hover_element = '<div class="ob-teleporter-' + my_id + ' ob-tele-eff-' + hover_effect + '" data-id-teleporter="' + my_id + '"><div class="ob-tele-overlay" style="background-color: ' + this.getElementSettings( '_ob_teleporter_overlay_color' ) + ';"></div></div>';
243
244                if( ! $( '.ob-teleporter-' + my_id ).length ) this.$element.prepe
244nd( hover_element );
245
246                this.$element.off( 'mouseenter mouseleave' );
247                this.$element.on( 'mouseenter mouseleave', function( ev ) {
248
249                    if( 'mouseenter' === ev.type ) {
250
251                        if( 'no-tablet' === this_ob.getElementSettings( '_ob_teleporter_no_pass_tablet' ) && 
252                        'tablet' === elementorFrontend.getCurrentDeviceMode() ) return; // bail
253                        if( 'no-mobile' === this_ob.getElementSettings( '_ob_teleporter_no_pass_mobile' ) && 
254                            'mobile' === elementorFrontend.getCurrentDeviceMode() ) return; // bail
255                        if( 'do-pass' !== this_ob.getElementSettings( '_ob_teleporter_pass' ) ) return;
256
257                        var tele_css = { 
258                            'background-color': $( '.ob-teleporter-' + my_id ).css( 'background-color' ),
259                            'background-image': $( '.ob-teleporter-' + my_id ).css( 'background-image' ),
260                            'background-position': $( '.ob-teleporter-' + my_id ).css( 'background-position' ),
261                            'background-size': $( '.ob-teleporter-' + my_id ).css( 'background-size' ),
262                            'background-repeat': $( '.ob-teleporter-' + my_id ).css( 'background-repeat' )
263                        };
264                        
265                        if( 'section' === this_ob.getElementSettings( '_ob_teleporter_pass_element' ) ) {
266                            var all_children = parent_section.children().not( '.elementor-container' ).detach();
267                            parent_section.addClass( 'ob-tele-mom-hover' ).prepend( $( '.ob-teleporter-' + my_id ) );
268                            parent_section.prepend( all_children );
269                        } else { 
270                            parent_section.addClass( 'ob-tele-mom-hover' ).prepend( $( '.ob-teleporter-' + my_id ) );
271                        }
272                        
273                        $( '.ob-teleporter-' + my_id ).css( tele_css ).hide();
274                        $( '.ob-teleporter-' + my_id ).addClass(  'ob-teleporter-hover' ).show(); 
275
276                    } else {
277
278                        parent_section.removeClass( 'ob-tele-mom-hover' );
279                        setTimeout( function() {
280                            $( '.ob-teleporter-' + my_id ).removeAttr( 'style' ).removeClass( 'ob-teleporter-hover' );
281                            myself.prepend( $( '.ob-teleporter-' + my_id ) ); 
282                        }, 100 );
283
284                    }
285
286                } );
287            
288            }, 
289            doTeleporter: function() {
290
291                var teleporter_settings = {};
292                try {
293                    teleporter_settings = JSON.parse( this.$element.attr( 'data-settings' ) );
294                } catch ( error ) {
295                    return;
296                }
297
298                if( 'use-teleporter' !== teleporter_settings._ob_teleporter_use ) return; // bail
299
300                // E3.0+ wrap the children of .elementor-widget-wrap for the animation purpose
301                var widgets_wrapper = this.$element.find( '.elementor-widget-wrap' ).first();
302                if( widgets_wrapper.length ) {
303                    widgets_wrapper.wrapInner( '<div class="widget-wrap-children" />' );
304                    if( widgets_wrapper.find( '.elementor-background-overlay' ).first().length ) {
305                        widgets_wrapper.find( '.elementor-background-overlay' ).first().insertBefore( widgets_wrapper.find( '.elementor-background-overlay' ).first().parent() );
306                    }
307                }
308
309                var myself = this.$element;
310                var my_id  = this.$element.attr( 'data-id' ); 
311
312                // default classes
313                if( 'no-tablet' === teleporter_settings._ob_teleporter_no_pass_tablet ) 
314                    this.$element.addClass( 'ob-tele-no-tablet' );
315                if( 'no-mobile' === teleporter_settings._ob_teleporter_no_pass_mobile ) 
316                    this.$element.addClass( 'ob-tele-no-mobile' ); 
317
318                function getSafeUrl(url) {
319                    try {
320                        var parsed = new URL(url, window.location.origin);
321                        var allowedProtocols = ['http:', 'https:', 'mailto:', 'tel:'];
322
323                        if (!allowedProtocols.includes(parsed.protocol)) {
324                            return false;
325                        }
326
327                        return parsed.href;
328                    } catch (e) {
329                        return false;
330                    }
331                }
332                // handle links
333                if( undefined !== teleporter_settings._ob_teleporter_link ) { 
334
335                    var tele_link = teleporter_settings._ob_teleporter_link;
336                    if( ! tele_link.url || tele_link.url === '' ) {
337                        return;
338                    }
339
340                    var safeUrl = getSafeUrl( tele_link.url );
341
342                    if ( ! safeUrl ) {
343                        return;
344                    }
345
346                    this.$element.off( 'click.obTeleporter' );
347                    this.$element.on( 'click.obTeleporter', function() {
348                        if( tele_link.is_external ) {
349                            window.open( safeUrl, '_blank', 'noopener,noreferrer' );
350                        } else {
351                            window.location.href = safeUrl;
352                        }
353                    });
354
355                }
356
357                if( 'do-pass' !== teleporter_settings._ob_teleporter_pass ) return; // bail too
358
359                // this column's parent section
360                var parent_section = ( 'section' === teleporter_settings._ob_teleporter_pass_element ) ? this.$element.closest( '.elementor-section' ) : this.$element.closest( '.elementor-container' ); 
361                if( ! parent_section.length ) return; // bail
362
363                // parent overflow
364                parent_section.css( 'overflow', 'hidden' );
365
366                // new element
367                var hover_effect  = teleporter_settings._ob_teleporter_pass_effect;
368                var hover_element = '<div class="ob-teleporter-' + my_id + ' ob-tele-eff-' + hover_effect + '" data-id-teleporter="' + my_id + '"><div class="ob-tele-overlay" style="background-color: ' + teleporter_settings._ob_teleporter_overlay_color + ';"></div>';
369
370                if( ! $( '.ob-teleporter-' + my_id ).length ) this.$element.prepe
370nd( hover_element );
371
372                this.$element.off( 'mouseenter mouseleave' );
373                this.$element.on( 'mouseenter', function() { 
374
375                    if( 'no-tablet' === teleporter_settings._ob_teleporter_no_pass_tablet && 
376                        'tablet' === elementorFrontend.getCurrentDeviceMode() ) return; // bail
377                    if( 'no-mobile' === teleporter_settings._ob_teleporter_no_pass_mobile && 
378                        'mobile' === elementorFrontend.getCurrentDeviceMode() ) return; // bail
379
380                    var tele_css = { 
381                        'background-color': $( '.ob-teleporter-' + my_id ).css( 'background-color' ),
382                        'background-image': $( '.ob-teleporter-' + my_id ).css( 'background-image' ),
383                        'background-position': $( '.ob-teleporter-' + my_id ).css( 'background-position' ),
384                        'background-size': $( '.ob-teleporter-' + my_id ).css( 'background-size' ),
385                        'background-repeat': $( '.ob-teleporter-' + my_id ).css( 'background-repeat' )
386                    };
387                    
388                    if( 'section' === teleporter_settings._ob_teleporter_pass_element ) {
389                        var all_children = parent_section.children().not( '.elementor-container' ).detach();
390                        parent_section.addClass( 'ob-tele-mom-hover' ).prepend( $( '.ob-teleporter-' + my_id ) );
391                        parent_section.prepend( all_children );
392                    } else parent_section.addClass( 'ob-tele-mom-hover' ).prepend( $( '.ob-teleporter-' + my_id ) );
393                    
394                    $( '.ob-teleporter-' + my_id ).css( tele_css ).hide();
395                    $( '.ob-teleporter-' + my_id ).show().addClass( 'ob-teleporter-hover' );
396                    
397                } );
398                
399                this.$element.on( 'mouseleave', function() {
400                    
401                    parent_section.removeClass( 'ob-tele-mom-hover' );
402                    setTimeout( function() {
403                        $( '.ob-teleporter-' + my_id ).removeAttr( 'style' ).removeClass( 'ob-teleporter-hover' );
404                        myself.prepend( $( '.ob-teleporter-' + my_id ) );
405                    }, 100 );
406
407                } );
408 
409            }, 
410
411        } );
412
413        var handlersList = {
414
415            'section': SectionExtends, 
416            'column': ColumnExtends, 
417
418        };
419
420        $.each( handlersList, function( widgetName, handlerClass ) {
421
422            elementorFrontend.hooks.addAction( 'frontend/element_ready/' + widgetName, function( $scope ) {
423                
424                elementorFrontend.elementsHandler.addHandler( handlerClass, { $element: $scope } );
425
426            } );
427
428        } );
429
430    } ); 
431
432} ( jQuery, window ) );

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.