2016-03-19 01:51:35 +00:00
/*! UIkit 2.25.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
2016-01-30 20:28:43 +00:00
( function ( UI ) {
"use strict" ;
var stacks = [ ] ;
UI . component ( 'stackMargin' , {
defaults : {
2016-03-19 01:51:35 +00:00
cls : 'uk-margin-small-top' ,
rowfirst : false
2016-01-30 20:28:43 +00:00
} ,
boot : function ( ) {
// init code
UI . ready ( function ( context ) {
UI . $ ( "[data-uk-margin]" , context ) . each ( function ( ) {
2016-03-19 01:51:35 +00:00
var ele = UI . $ ( this ) ;
2016-01-30 20:28:43 +00:00
if ( ! ele . data ( "stackMargin" ) ) {
2016-03-19 01:51:35 +00:00
UI . stackMargin ( ele , UI . Utils . options ( ele . attr ( "data-uk-margin" ) ) ) ;
2016-01-30 20:28:43 +00:00
}
} ) ;
} ) ;
} ,
init : function ( ) {
var $this = this ;
UI . $win . on ( 'resize orientationchange' , ( function ( ) {
var fn = function ( ) {
$this . process ( ) ;
} ;
UI . $ ( function ( ) {
fn ( ) ;
UI . $win . on ( "load" , fn ) ;
} ) ;
return UI . Utils . debounce ( fn , 20 ) ;
} ) ( ) ) ;
UI . $html . on ( "changed.uk.dom" , function ( e ) {
$this . process ( ) ;
} ) ;
this . on ( "display.uk.check" , function ( e ) {
if ( this . element . is ( ":visible" ) ) this . process ( ) ;
} . bind ( this ) ) ;
stacks . push ( this ) ;
} ,
process : function ( ) {
2016-03-19 01:51:35 +00:00
var $this = this , columns = this . element . children ( ) ;
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
UI . Utils . stackMargin ( columns , this . options ) ;
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
if ( ! this . options . rowfirst ) {
return this ;
}
// Mark first column elements
var pos _cache = columns . removeClass ( this . options . rowfirst ) . filter ( ':visible' ) . first ( ) . position ( ) ;
if ( pos _cache ) {
columns . each ( function ( ) {
UI . $ ( this ) [ UI . $ ( this ) . position ( ) . left == pos _cache . left ? 'addClass' : 'removeClass' ] ( $this . options . rowfirst ) ;
} ) ;
}
2016-01-30 20:28:43 +00:00
return this ;
}
2016-03-19 01:51:35 +00:00
2016-01-30 20:28:43 +00:00
} ) ;
// responsive element e.g. iframes
( function ( ) {
var elements = [ ] , check = function ( ele ) {
if ( ! ele . is ( ':visible' ) ) return ;
var width = ele . parent ( ) . width ( ) ,
iwidth = ele . data ( 'width' ) ,
ratio = ( width / iwidth ) ,
height = Math . floor ( ratio * ele . data ( 'height' ) ) ;
ele . css ( { 'height' : ( width < iwidth ) ? height : ele . data ( 'height' ) } ) ;
} ;
UI . component ( 'responsiveElement' , {
defaults : { } ,
boot : function ( ) {
// init code
UI . ready ( function ( context ) {
UI . $ ( "iframe.uk-responsive-width, [data-uk-responsive]" , context ) . each ( function ( ) {
var ele = UI . $ ( this ) , obj ;
2016-03-19 01:51:35 +00:00
if ( ! ele . data ( "responsiveElement" ) ) {
2016-01-30 20:28:43 +00:00
obj = UI . responsiveElement ( ele , { } ) ;
}
} ) ;
} ) ;
} ,
init : function ( ) {
var ele = this . element ;
if ( ele . attr ( 'width' ) && ele . attr ( 'height' ) ) {
ele . data ( {
'width' : ele . attr ( 'width' ) ,
'height' : ele . attr ( 'height' )
} ) . on ( 'display.uk.check' , function ( ) {
check ( ele ) ;
} ) ;
check ( ele ) ;
elements . push ( ele ) ;
}
}
} ) ;
UI . $win . on ( 'resize load' , UI . Utils . debounce ( function ( ) {
elements . forEach ( function ( ele ) {
check ( ele ) ;
} ) ;
} , 15 ) ) ;
} ) ( ) ;
// helper
UI . Utils . stackMargin = function ( elements , options ) {
options = UI . $ . extend ( {
'cls' : 'uk-margin-small-top'
} , options ) ;
options . cls = options . cls ;
elements = UI . $ ( elements ) . removeClass ( options . cls ) ;
var skip = false ,
firstvisible = elements . filter ( ":visible:first" ) ,
offset = firstvisible . length ? ( firstvisible . position ( ) . top + firstvisible . outerHeight ( ) ) - 1 : false ; // (-1): weird firefox bug when parent container is display:flex
2016-03-19 01:51:35 +00:00
if ( offset === false || elements . length == 1 ) return ;
2016-01-30 20:28:43 +00:00
elements . each ( function ( ) {
var column = UI . $ ( this ) ;
if ( column . is ( ":visible" ) ) {
if ( skip ) {
column . addClass ( options . cls ) ;
} else {
if ( column . position ( ) . top >= offset ) {
skip = column . addClass ( options . cls ) ;
}
}
}
} ) ;
} ;
UI . Utils . matchHeights = function ( elements , options ) {
elements = UI . $ ( elements ) . css ( 'min-height' , '' ) ;
options = UI . $ . extend ( { row : true } , options ) ;
var matchHeights = function ( group ) {
if ( group . length < 2 ) return ;
var max = 0 ;
group . each ( function ( ) {
max = Math . max ( max , UI . $ ( this ) . outerHeight ( ) ) ;
} ) . each ( function ( ) {
var element = UI . $ ( this ) ,
height = max - ( element . css ( 'box-sizing' ) == 'border-box' ? 0 : ( element . outerHeight ( ) - element . height ( ) ) ) ;
element . css ( 'min-height' , height + 'px' ) ;
} ) ;
} ;
if ( options . row ) {
elements . first ( ) . width ( ) ; // force redraw
setTimeout ( function ( ) {
var lastoffset = false , group = [ ] ;
elements . each ( function ( ) {
var ele = UI . $ ( this ) , offset = ele . offset ( ) . top ;
if ( offset != lastoffset && group . length ) {
matchHeights ( UI . $ ( group ) ) ;
group = [ ] ;
offset = ele . offset ( ) . top ;
}
group . push ( ele ) ;
lastoffset = offset ;
} ) ;
if ( group . length ) {
matchHeights ( UI . $ ( group ) ) ;
}
} , 0 ) ;
} else {
matchHeights ( elements ) ;
}
} ;
2016-03-19 01:51:35 +00:00
( function ( cacheSvgs ) {
UI . Utils . inlineSvg = function ( selector , root ) {
var images = UI . $ ( selector || 'img[src$=".svg"]' , root || document ) . each ( function ( ) {
var img = UI . $ ( this ) ,
src = img . attr ( 'src' ) ;
if ( ! cacheSvgs [ src ] ) {
var d = UI . $ . Deferred ( ) ;
UI . $ . get ( src , { nc : Math . random ( ) } , function ( data ) {
d . resolve ( UI . $ ( data ) . find ( 'svg' ) ) ;
} ) ;
cacheSvgs [ src ] = d . promise ( ) ;
}
cacheSvgs [ src ] . then ( function ( svg ) {
var $svg = UI . $ ( svg ) . clone ( ) ;
if ( img . attr ( 'id' ) ) $svg . attr ( 'id' , img . attr ( 'id' ) ) ;
if ( img . attr ( 'class' ) ) $svg . attr ( 'class' , img . attr ( 'class' ) ) ;
if ( img . attr ( 'style' ) ) $svg . attr ( 'style' , img . attr ( 'style' ) ) ;
if ( img . attr ( 'width' ) ) {
$svg . attr ( 'width' , img . attr ( 'width' ) ) ;
if ( ! img . attr ( 'height' ) ) $svg . removeAttr ( 'height' ) ;
}
if ( img . attr ( 'height' ) ) {
$svg . attr ( 'height' , img . attr ( 'height' ) ) ;
if ( ! img . attr ( 'width' ) ) $svg . removeAttr ( 'width' ) ;
}
img . replaceWith ( $svg ) ;
} ) ;
} ) ;
} ;
// init code
UI . ready ( function ( context ) {
UI . Utils . inlineSvg ( '[data-uk-svg]' , context ) ;
} ) ;
} ) ( { } ) ;
2016-01-30 20:28:43 +00:00
} ) ( UIkit ) ;