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 if( ! this.$element.find( '.elementor-column-wrap' ).first().length ) this.$element.addClass( 'ob-is-e3' ); 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 = dis.$element.find( '.elementor-column-wrap' ).first(); 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 if( ! this.isEdit ) { 116 var bb_settings = {}; 117 try { 118 bb_settings = JSON.parse( this.$element.attr( 'data-settings' ) ); 119 } catch ( error ) { 120 return; 121 } 122 // handle links 123 if( undefined !== bb_settings._ob_bbad_link ) { 124 125 var bb_link = bb_settings._ob_bbad_link; 126 if( '' === bb_link.url ) { 127 this.$element.removeClass( 'bb-column-link' ); 128 return; 129 } else { 130 this.$element.addClass( 'bb-column-link' ); 131 } 132 133 this.$element.off( 'click.bb' ); 134 this.$element.on( 'click.bb', function() { 135 if( bb_link.is_external ) window.open( bb_link.url ); 136 else location.href = bb_link.url; 137 } ); 138 139 } 140 } 141 /* Teleporter */ 142 if( this.isEdit && 'use-teleporter' === this.getElementSettings( '_ob_teleporter_use' ) ) { 143 this.$element.addClass( 'ob-is-teleporter' ); 144 this.$element.find( '.elementor-widget-wrap' ).first().addClass( 'ob-tele-midget' ); 145 this.doTeleporterEditor(); 146 } 147 if( ! this.isEdit && this.isTeleporter() ) { 148 this.$element.find( '.elementor-widget-wrap' ).first().addClass( 'ob-tele-midget' ); 149 this.doTeleporter(); 150 } 151 /* Widget Stalker */ 152 if( this.isEdit && 'yes' === this.getElementSettings( '_ob_bbad_is_stalker' ) ) { 153 this.$element.addClass( 'ob-is-stalker' ); 154 } 155 }, 156 onElementChange: function( changedProp ) { 157 158 if( changedProp === '_ob_teleporter_overlay_color' ) { 159 this.$element.find( 'div[class*="ob-teleporter-"] > .ob-tele-overlay' ).css( 'background-color', this.getElementSettings( '_ob_teleporter_overlay_color' ) ); 160 } else if( changedProp === '_ob_teleporter_no_pass_tablet' ) { 161 if( 'no-tablet' === this.getElementSettings( '_ob_teleporter_no_pass_tablet' ) ) 162 this.$element.addClass( 'ob-tele-no-tablet' ); 163 else 164 this.$element.removeClass( 'ob-tele-no-tablet' ); 165 } else if( changedProp === '_ob_teleporter_no_pass_mobile' ) { 166 if( 'no-mobile' === this.getElementSettings( '_ob_teleporter_no_pass_mobile' ) ) 167 this.$element.addClass( 'ob-tele-no-mobile' ); 168 else 169 this.$element.removeClass( 'ob-tele-no-mobile' ); 170 } 171 /* Widget Stalker */ 172 if( changedProp === '_ob_bbad_is_stalker' ) { 173 this.routeWidgetStalkerCol(); 174 } 175 }, 176 /* Widget Stalker */ 177 routeWidgetStalkerCol: function() { 178 if( ! this.isWidgetStalkerCol() && 'yes' === this.getElementSettings( '_ob_bbad_is_stalker' ) ) this.$element.addClass( 'ob-is-stalker' ); 179 else this.$element.removeClass( 'ob-is-stalker' ); 180 }, 181 /* Teleporter */ 182 doTeleporterEditor: function() { 183 184 if( 'use-teleporter' !== this.getElementSettings( '_ob_teleporter_use' ) ) return; // bail 185 186 // E3.0+ wrap the children of .elementor-widget-wrap for the animation purpose 187 var widgets_wrapper = this.$element.find( '.elementor-widget-wrap' ).first(); 188 if( widgets_wrapper.length ) { 189 widgets_wrapper.wrapInner( '<div class="widget-wrap-children" />' ); 190 if( widgets_wrapper.find( '.elementor-background-overlay' ).first().length ) { 191 widgets_wrapper.find( '.elementor-background-overlay' ).first().insertBefore( widgets_wrapper.find( '.elementor-background-overlay' ).first().parent() ); 192 } 193 } 194 195 if( 'do-pass' !== this.getElementSettings( '_ob_teleporter_pass' ) ) return; // bail too 196 197 var this_ob = this; 198 var myself = this.$element; 199 var my_id = this.$element.attr( 'data-id' ); 200 201 // default classes 202 if( 'no-tablet' === this.getElementSettings( '_ob_teleporter_no_pass_tablet' ) ) 203 this.$element.addClass( 'ob-tele-no-tablet' ); 204 if( 'no-mobile' === this.getElementSettings( '_ob_teleporter_no_pass_mobile' ) ) 205 this.$element.addClass( 'ob-tele-no-mobile' ); 206 207 // this column's parent section 208 var parent_section = ( 'section' === this.getElementSettings( '_ob_teleporter_pass_element' ) ) ? this.$element.closest( '.elementor-section' ) : this.$element.closest( '.elementor-container' ); 209 if( ! parent_section.length ) return; // bail 210 211 // parent overflow 212 parent_section.css( 'overflow', 'hidden' ); 213 214 // new element & effect 215 var hover_effect = this.getElementSettings( '_ob_teleporter_pass_effect' ); 216 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>'; 217 218 if( ! $( '.ob-teleporter-' + my_id ).length ) this.$element.prepe
218nd( hover_element ); 219 220 this.$element.off( 'mouseenter mouseleave' ); 221 this.$element.on( 'mouseenter mouseleave', function( ev ) { 222 223 if( 'mouseenter' === ev.type ) { 224 225 if( 'no-tablet' === this_ob.getElementSettings( '_ob_teleporter_no_pass_tablet' ) && 226 'tablet' === elementorFrontend.getCurrentDeviceMode() ) return; // bail 227 if( 'no-mobile' === this_ob.getElementSettings( '_ob_teleporter_no_pass_mobile' ) && 228 'mobile' === elementorFrontend.getCurrentDeviceMode() ) return; // bail 229 if( 'do-pass' !== this_ob.getElementSettings( '_ob_teleporter_pass' ) ) return; 230 231 var tele_css = { 232 'background-color': $( '.ob-teleporter-' + my_id ).css( 'background-color' ), 233 'background-image': $( '.ob-teleporter-' + my_id ).css( 'background-image' ), 234 'background-position': $( '.ob-teleporter-' + my_id ).css( 'background-position' ), 235 'background-size': $( '.ob-teleporter-' + my_id ).css( 'background-size' ), 236 'background-repeat': $( '.ob-teleporter-' + my_id ).css( 'background-repeat' ) 237 }; 238 239 if( 'section' === this_ob.getElementSettings( '_ob_teleporter_pass_element' ) ) { 240 var all_children = parent_section.children().not( '.elementor-container' ).detach(); 241 parent_section.addClass( 'ob-tele-mom-hover' ).prepend( $( '.ob-teleporter-' + my_id ) ); 242 parent_section.prepend( all_children ); 243 } else { 244 parent_section.addClass( 'ob-tele-mom-hover' ).prepend( $( '.ob-teleporter-' + my_id ) ); 245 } 246 247 $( '.ob-teleporter-' + my_id ).css( tele_css ).hide(); 248 $( '.ob-teleporter-' + my_id ).addClass( 'ob-teleporter-hover' ).show(); 249 250 } else { 251 252 parent_section.removeClass( 'ob-tele-mom-hover' ); 253 setTimeout( function() { 254 $( '.ob-teleporter-' + my_id ).removeAttr( 'style' ).removeClass( 'ob-teleporter-hover' ); 255 myself.prepend( $( '.ob-teleporter-' + my_id ) ); 256 }, 100 ); 257 258 } 259 260 } ); 261 262 }, 263 doTeleporter: function() { 264 265 var teleporter_settings = {}; 266 try { 267 teleporter_settings = JSON.parse( this.$element.attr( 'data-settings' ) ); 268 } catch ( error ) { 269 return; 270 } 271 272 if( 'use-teleporter' !== teleporter_settings._ob_teleporter_use ) return; // bail 273 274 // E3.0+ wrap the children of .elementor-widget-wrap for the animation purpose 275 var widgets_wrapper = this.$element.find( '.elementor-widget-wrap' ).first(); 276 if( widgets_wrapper.length ) { 277 widgets_wrapper.wrapInner( '<div class="widget-wrap-children" />' ); 278 if( widgets_wrapper.find( '.elementor-background-overlay' ).first().length ) { 279 widgets_wrapper.find( '.elementor-background-overlay' ).first().insertBefore( widgets_wrapper.find( '.elementor-background-overlay' ).first().parent() ); 280 } 281 } 282 283 var myself = this.$element; 284 var my_id = this.$element.attr( 'data-id' ); 285 286 // default classes 287 if( 'no-tablet' === teleporter_settings._ob_teleporter_no_pass_tablet ) 288 this.$element.addClass( 'ob-tele-no-tablet' ); 289 if( 'no-mobile' === teleporter_settings._ob_teleporter_no_pass_mobile ) 290 this.$element.addClass( 'ob-tele-no-mobile' ); 291 292 // handle links 293 if( undefined !== teleporter_settings._ob_teleporter_link ) { 294 295 var tele_link = teleporter_settings._ob_teleporter_link; 296 if( '' === tele_link.url ) return; 297 298 this.$element.off( 'click.obTeleporter' ); 299 this.$element.on( 'click.obTeleporter', function() { 300 if( tele_link.is_external ) window.open( tele_link.url ); 301 else location.href = tele_link.url; 302 } ); 303 304 } 305 306 if( 'do-pass' !== teleporter_settings._ob_teleporter_pass ) return; // bail too 307 308 // this column's parent section 309 var parent_section = ( 'section' === teleporter_settings._ob_teleporter_pass_element ) ? this.$element.closest( '.elementor-section' ) : this.$element.closest( '.elementor-container' ); 310 if( ! parent_section.length ) return; // bail 311 312 // parent overflow 313 parent_section.css( 'overflow', 'hidden' ); 314 315 // new element 316 var hover_effect = teleporter_settings._ob_teleporter_pass_effect; 317 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>'; 318 319 if( ! $( '.ob-teleporter-' + my_id ).length ) this.$element.prepe
319nd( hover_element ); 320 321 this.$element.off( 'mouseenter mouseleave' ); 322 this.$element.on( 'mouseenter', function() { 323 324 if( 'no-tablet' === teleporter_settings._ob_teleporter_no_pass_tablet && 325 'tablet' === elementorFrontend.getCurrentDeviceMode() ) return; // bail 326 if( 'no-mobile' === teleporter_settings._ob_teleporter_no_pass_mobile && 327 'mobile' === elementorFrontend.getCurrentDeviceMode() ) return; // bail 328 329 var tele_css = { 330 'background-color': $( '.ob-teleporter-' + my_id ).css( 'background-color' ), 331 'background-image': $( '.ob-teleporter-' + my_id ).css( 'background-image' ), 332 'background-position': $( '.ob-teleporter-' + my_id ).css( 'background-position' ), 333 'background-size': $( '.ob-teleporter-' + my_id ).css( 'background-size' ), 334 'background-repeat': $( '.ob-teleporter-' + my_id ).css( 'background-repeat' ) 335 }; 336 337 if( 'section' === teleporter_settings._ob_teleporter_pass_element ) { 338 var all_children = parent_section.children().not( '.elementor-container' ).detach(); 339 parent_section.addClass( 'ob-tele-mom-hover' ).prepend( $( '.ob-teleporter-' + my_id ) ); 340 parent_section.prepend( all_children ); 341 } else parent_section.addClass( 'ob-tele-mom-hover' ).prepend( $( '.ob-teleporter-' + my_id ) ); 342 343 $( '.ob-teleporter-' + my_id ).css( tele_css ).hide(); 344 $( '.ob-teleporter-' + my_id ).show().addClass( 'ob-teleporter-hover' ); 345 346 } ); 347 348 this.$element.on( 'mouseleave', function() { 349 350 parent_section.removeClass( 'ob-tele-mom-hover' ); 351 setTimeout( function() { 352 $( '.ob-teleporter-' + my_id ).removeAttr( 'style' ).removeClass( 'ob-teleporter-hover' ); 353 myself.prepend( $( '.ob-teleporter-' + my_id ) ); 354 }, 100 ); 355 356 } ); 357 358 }, 359 360 } ); 361 362 var handlersList = { 363 364 'section': SectionExtends, 365 'column': ColumnExtends, 366 367 }; 368 369 $.each( handlersList, function( widgetName, handlerClass ) { 370 371 elementorFrontend.hooks.addAction( 'frontend/element_ready/' + widgetName, function( $scope ) { 372 373 elementorFrontend.elementsHandler.addHandler( handlerClass, { $element: $scope } ); 374 375 } ); 376 377 } ); 378 379 } ); 380 381} ( 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.