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 ( core ) {
if ( typeof define == "function" && define . amd ) { // AMD
define ( "uikit" , function ( ) {
var uikit = window . UIkit || core ( window , window . jQuery , window . document ) ;
uikit . load = function ( res , req , onload , config ) {
var resources = res . split ( ',' ) , load = [ ] , i , base = ( config . config && config . config . uikit && config . config . uikit . base ? config . config . uikit . base : "" ) . replace ( /\/+$/g , "" ) ;
if ( ! base ) {
throw new Error ( "Please define base path to UIkit in the requirejs config." ) ;
}
for ( i = 0 ; i < resources . length ; i += 1 ) {
var resource = resources [ i ] . replace ( /\./g , '/' ) ;
load . push ( base + '/components/' + resource ) ;
}
req ( load , function ( ) {
onload ( uikit ) ;
} ) ;
} ;
return uikit ;
} ) ;
}
if ( ! window . jQuery ) {
throw new Error ( "UIkit requires jQuery" ) ;
}
if ( window && window . jQuery ) {
core ( window , window . jQuery , window . document ) ;
}
} ) ( function ( global , $ , doc ) {
"use strict" ;
var UI = { } , _UI = global . UIkit ? Object . create ( global . UIkit ) : undefined ;
2016-03-19 01:51:35 +00:00
UI . version = '2.25.0' ;
2016-01-30 20:28:43 +00:00
UI . noConflict = function ( ) {
// restore UIkit version
if ( _UI ) {
global . UIkit = _UI ;
$ . UIkit = _UI ;
$ . fn . uk = _UI . fn ;
}
return UI ;
} ;
UI . prefix = function ( str ) {
return str ;
} ;
// cache jQuery
UI . $ = $ ;
UI . $doc = UI . $ ( document ) ;
UI . $win = UI . $ ( window ) ;
UI . $html = UI . $ ( 'html' ) ;
UI . support = { } ;
UI . support . transition = ( function ( ) {
var transitionEnd = ( function ( ) {
var element = doc . body || doc . documentElement ,
transEndEventNames = {
WebkitTransition : 'webkitTransitionEnd' ,
MozTransition : 'transitionend' ,
OTransition : 'oTransitionEnd otransitionend' ,
transition : 'transitionend'
} , name ;
for ( name in transEndEventNames ) {
if ( element . style [ name ] !== undefined ) return transEndEventNames [ name ] ;
}
} ( ) ) ;
return transitionEnd && { end : transitionEnd } ;
} ) ( ) ;
UI . support . animation = ( function ( ) {
var animationEnd = ( function ( ) {
var element = doc . body || doc . documentElement ,
animEndEventNames = {
WebkitAnimation : 'webkitAnimationEnd' ,
MozAnimation : 'animationend' ,
OAnimation : 'oAnimationEnd oanimationend' ,
animation : 'animationend'
} , name ;
for ( name in animEndEventNames ) {
if ( element . style [ name ] !== undefined ) return animEndEventNames [ name ] ;
}
} ( ) ) ;
return animationEnd && { end : animationEnd } ;
} ) ( ) ;
// requestAnimationFrame polyfill
2016-03-19 01:51:35 +00:00
//https://github.com/darius/requestAnimationFrame
( function ( ) {
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
Date . now = Date . now || function ( ) { return new Date ( ) . getTime ( ) ; } ;
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
var vendors = [ 'webkit' , 'moz' ] ;
for ( var i = 0 ; i < vendors . length && ! window . requestAnimationFrame ; ++ i ) {
var vp = vendors [ i ] ;
window . requestAnimationFrame = window [ vp + 'RequestAnimationFrame' ] ;
window . cancelAnimationFrame = ( window [ vp + 'CancelAnimationFrame' ]
|| window [ vp + 'CancelRequestAnimationFrame' ] ) ;
}
if ( /iP(ad|hone|od).*OS 6/ . test ( window . navigator . userAgent ) // iOS6 is buggy
|| ! window . requestAnimationFrame || ! window . cancelAnimationFrame ) {
var lastTime = 0 ;
window . requestAnimationFrame = function ( callback ) {
var now = Date . now ( ) ;
var nextTime = Math . max ( lastTime + 16 , now ) ;
return setTimeout ( function ( ) { callback ( lastTime = nextTime ) ; } ,
nextTime - now ) ;
2016-01-30 20:28:43 +00:00
} ;
2016-03-19 01:51:35 +00:00
window . cancelAnimationFrame = clearTimeout ;
2016-01-30 20:28:43 +00:00
}
2016-03-19 01:51:35 +00:00
} ( ) ) ;
2016-01-30 20:28:43 +00:00
UI . support . touch = (
( 'ontouchstart' in document ) ||
( global . DocumentTouch && document instanceof global . DocumentTouch ) ||
( global . navigator . msPointerEnabled && global . navigator . msMaxTouchPoints > 0 ) || //IE 10
( global . navigator . pointerEnabled && global . navigator . maxTouchPoints > 0 ) || //IE >=11
false
) ;
UI . support . mutationobserver = ( global . MutationObserver || global . WebKitMutationObserver || null ) ;
UI . Utils = { } ;
UI . Utils . isFullscreen = function ( ) {
2016-03-19 01:51:35 +00:00
return document . webkitFullscreenElement || document . mozFullScreenElement || document . msFullscreenElement || document . fullscreenElement || false ;
2016-01-30 20:28:43 +00:00
} ;
UI . Utils . str2json = function ( str , notevil ) {
try {
if ( notevil ) {
return JSON . parse ( str
// wrap keys without quote with valid double quote
. replace ( /([\$\w]+)\s*:/g , function ( _ , $1 ) { return '"' + $1 + '":' ; } )
// replacing single quote wrapped ones to double quote
. replace ( /'([^']+)'/g , function ( _ , $1 ) { return '"' + $1 + '"' ; } )
) ;
} else {
return ( new Function ( "" , "var json = " + str + "; return JSON.parse(JSON.stringify(json));" ) ) ( ) ;
}
} catch ( e ) { return false ; }
} ;
UI . Utils . debounce = function ( func , wait , immediate ) {
var timeout ;
return function ( ) {
var context = this , args = arguments ;
var later = function ( ) {
timeout = null ;
if ( ! immediate ) func . apply ( context , args ) ;
} ;
var callNow = immediate && ! timeout ;
clearTimeout ( timeout ) ;
timeout = setTimeout ( later , wait ) ;
if ( callNow ) func . apply ( context , args ) ;
} ;
} ;
UI . Utils . removeCssRules = function ( selectorRegEx ) {
var idx , idxs , stylesheet , _i , _j , _k , _len , _len1 , _len2 , _ref ;
if ( ! selectorRegEx ) return ;
setTimeout ( function ( ) {
try {
_ref = document . styleSheets ;
for ( _i = 0 , _len = _ref . length ; _i < _len ; _i ++ ) {
stylesheet = _ref [ _i ] ;
idxs = [ ] ;
stylesheet . cssRules = stylesheet . cssRules ;
for ( idx = _j = 0 , _len1 = stylesheet . cssRules . length ; _j < _len1 ; idx = ++ _j ) {
if ( stylesheet . cssRules [ idx ] . type === CSSRule . STYLE _RULE && selectorRegEx . test ( stylesheet . cssRules [ idx ] . selectorText ) ) {
idxs . unshift ( idx ) ;
}
}
for ( _k = 0 , _len2 = idxs . length ; _k < _len2 ; _k ++ ) {
stylesheet . deleteRule ( idxs [ _k ] ) ;
}
}
} catch ( _error ) { }
} , 0 ) ;
} ;
UI . Utils . isInView = function ( element , options ) {
var $element = $ ( element ) ;
if ( ! $element . is ( ':visible' ) ) {
return false ;
}
var window _left = UI . $win . scrollLeft ( ) , window _top = UI . $win . scrollTop ( ) , offset = $element . offset ( ) , left = offset . left , top = offset . top ;
options = $ . extend ( { topoffset : 0 , leftoffset : 0 } , options ) ;
if ( top + $element . height ( ) >= window _top && top - options . topoffset <= window _top + UI . $win . height ( ) &&
left + $element . width ( ) >= window _left && left - options . leftoffset <= window _left + UI . $win . width ( ) ) {
return true ;
} else {
return false ;
}
} ;
UI . Utils . checkDisplay = function ( context , initanimation ) {
var elements = UI . $ ( '[data-uk-margin], [data-uk-grid-match], [data-uk-grid-margin], [data-uk-check-display]' , context || document ) , animated ;
if ( context && ! elements . length ) {
elements = $ ( context ) ;
}
elements . trigger ( 'display.uk.check' ) ;
// fix firefox / IE animations
if ( initanimation ) {
if ( typeof ( initanimation ) != 'string' ) {
initanimation = '[class*="uk-animation-"]' ;
}
elements . find ( initanimation ) . each ( function ( ) {
var ele = UI . $ ( this ) ,
cls = ele . attr ( 'class' ) ,
anim = cls . match ( /uk\-animation\-(.+)/ ) ;
ele . removeClass ( anim [ 0 ] ) . width ( ) ;
ele . addClass ( anim [ 0 ] ) ;
} ) ;
}
return elements ;
} ;
UI . Utils . options = function ( string ) {
2016-03-19 01:51:35 +00:00
if ( $ . type ( string ) != 'string' ) return string ;
if ( string . indexOf ( ':' ) != - 1 && string . trim ( ) . substr ( - 1 ) != '}' ) {
string = '{' + string + '}' ;
}
2016-01-30 20:28:43 +00:00
var start = ( string ? string . indexOf ( "{" ) : - 1 ) , options = { } ;
if ( start != - 1 ) {
try {
options = UI . Utils . str2json ( string . substr ( start ) ) ;
} catch ( e ) { }
}
return options ;
} ;
UI . Utils . animate = function ( element , cls ) {
var d = $ . Deferred ( ) ;
element = UI . $ ( element ) ;
element . css ( 'display' , 'none' ) . addClass ( cls ) . one ( UI . support . animation . end , function ( ) {
element . removeClass ( cls ) ;
d . resolve ( ) ;
2016-03-19 01:51:35 +00:00
} ) ;
2016-01-30 20:28:43 +00:00
element . css ( 'display' , '' ) ;
return d . promise ( ) ;
} ;
UI . Utils . uid = function ( prefix ) {
return ( prefix || 'id' ) + ( new Date ( ) . getTime ( ) ) + "RAND" + ( Math . ceil ( Math . random ( ) * 100000 ) ) ;
} ;
UI . Utils . template = function ( str , data ) {
var tokens = str . replace ( /\n/g , '\\n' ) . replace ( /\{\{\{\s*(.+?)\s*\}\}\}/g , "{{!$1}}" ) . split ( /(\{\{\s*(.+?)\s*\}\})/g ) ,
i = 0 , toc , cmd , prop , val , fn , output = [ ] , openblocks = 0 ;
while ( i < tokens . length ) {
toc = tokens [ i ] ;
if ( toc . match ( /\{\{\s*(.+?)\s*\}\}/ ) ) {
i = i + 1 ;
toc = tokens [ i ] ;
cmd = toc [ 0 ] ;
prop = toc . substring ( toc . match ( /^(\^|\#|\!|\~|\:)/ ) ? 1 : 0 ) ;
switch ( cmd ) {
case '~' :
output . push ( "for(var $i=0;$i<" + prop + ".length;$i++) { var $item = " + prop + "[$i];" ) ;
openblocks ++ ;
break ;
case ':' :
output . push ( "for(var $key in " + prop + ") { var $val = " + prop + "[$key];" ) ;
openblocks ++ ;
break ;
case '#' :
output . push ( "if(" + prop + ") {" ) ;
openblocks ++ ;
break ;
case '^' :
output . push ( "if(!" + prop + ") {" ) ;
openblocks ++ ;
break ;
case '/' :
output . push ( "}" ) ;
openblocks -- ;
break ;
case '!' :
output . push ( "__ret.push(" + prop + ");" ) ;
break ;
default :
output . push ( "__ret.push(escape(" + prop + "));" ) ;
break ;
}
} else {
output . push ( "__ret.push('" + toc . replace ( /\'/g , "\\'" ) + "');" ) ;
}
i = i + 1 ;
}
fn = new Function ( '$data' , [
'var __ret = [];' ,
'try {' ,
'with($data){' , ( ! openblocks ? output . join ( '' ) : '__ret = ["Not all blocks are closed correctly."]' ) , '};' ,
'}catch(e){__ret = [e.message];}' ,
'return __ret.join("").replace(/\\n\\n/g, "\\n");' ,
"function escape(html) { return String(html).replace(/&/g, '&').replace(/\"/g, '"').replace(/</g, '<').replace(/>/g, '>');}"
] . join ( "\n" ) ) ;
return data ? fn ( data ) : fn ;
} ;
UI . Utils . events = { } ;
UI . Utils . events . click = UI . support . touch ? 'tap' : 'click' ;
global . UIkit = UI ;
// deprecated
UI . fn = function ( command , options ) {
var args = arguments , cmd = command . match ( /^([a-z\-]+)(?:\.([a-z]+))?/i ) , component = cmd [ 1 ] , method = cmd [ 2 ] ;
if ( ! UI [ component ] ) {
$ . error ( "UIkit component [" + component + "] does not exist." ) ;
return this ;
}
return this . each ( function ( ) {
var $this = $ ( this ) , data = $this . data ( component ) ;
if ( ! data ) $this . data ( component , ( data = UI [ component ] ( this , method ? undefined : options ) ) ) ;
if ( method ) data [ method ] . apply ( data , Array . prototype . slice . call ( args , 1 ) ) ;
} ) ;
} ;
$ . UIkit = UI ;
$ . fn . uk = UI . fn ;
UI . langdirection = UI . $html . attr ( "dir" ) == "rtl" ? "right" : "left" ;
UI . components = { } ;
UI . component = function ( name , def ) {
var fn = function ( element , options ) {
var $this = this ;
this . UIkit = UI ;
this . element = element ? UI . $ ( element ) : null ;
this . options = $ . extend ( true , { } , this . defaults , options ) ;
this . plugins = { } ;
if ( this . element ) {
this . element . data ( name , this ) ;
}
this . init ( ) ;
( this . options . plugins . length ? this . options . plugins : Object . keys ( fn . plugins ) ) . forEach ( function ( plugin ) {
if ( fn . plugins [ plugin ] . init ) {
fn . plugins [ plugin ] . init ( $this ) ;
$this . plugins [ plugin ] = true ;
}
} ) ;
this . trigger ( 'init.uk.component' , [ name , this ] ) ;
return this ;
} ;
fn . plugins = { } ;
$ . extend ( true , fn . prototype , {
defaults : { plugins : [ ] } ,
boot : function ( ) { } ,
init : function ( ) { } ,
on : function ( a1 , a2 , a3 ) {
return UI . $ ( this . element || this ) . on ( a1 , a2 , a3 ) ;
} ,
one : function ( a1 , a2 , a3 ) {
return UI . $ ( this . element || this ) . one ( a1 , a2 , a3 ) ;
} ,
off : function ( evt ) {
return UI . $ ( this . element || this ) . off ( evt ) ;
} ,
trigger : function ( evt , params ) {
return UI . $ ( this . element || this ) . trigger ( evt , params ) ;
} ,
find : function ( selector ) {
return UI . $ ( this . element ? this . element : [ ] ) . find ( selector ) ;
} ,
proxy : function ( obj , methods ) {
var $this = this ;
methods . split ( ' ' ) . forEach ( function ( method ) {
if ( ! $this [ method ] ) $this [ method ] = function ( ) { return obj [ method ] . apply ( obj , arguments ) ; } ;
} ) ;
} ,
mixin : function ( obj , methods ) {
var $this = this ;
methods . split ( ' ' ) . forEach ( function ( method ) {
if ( ! $this [ method ] ) $this [ method ] = obj [ method ] . bind ( $this ) ;
} ) ;
} ,
option : function ( ) {
if ( arguments . length == 1 ) {
return this . options [ arguments [ 0 ] ] || undefined ;
} else if ( arguments . length == 2 ) {
this . options [ arguments [ 0 ] ] = arguments [ 1 ] ;
}
}
} , def ) ;
this . components [ name ] = fn ;
this [ name ] = function ( ) {
var element , options ;
if ( arguments . length ) {
switch ( arguments . length ) {
case 1 :
if ( typeof arguments [ 0 ] === "string" || arguments [ 0 ] . nodeType || arguments [ 0 ] instanceof jQuery ) {
element = $ ( arguments [ 0 ] ) ;
} else {
options = arguments [ 0 ] ;
}
break ;
case 2 :
element = $ ( arguments [ 0 ] ) ;
options = arguments [ 1 ] ;
break ;
}
}
if ( element && element . data ( name ) ) {
return element . data ( name ) ;
}
return ( new UI . components [ name ] ( element , options ) ) ;
} ;
if ( UI . domready ) {
UI . component . boot ( name ) ;
}
return fn ;
} ;
UI . plugin = function ( component , name , def ) {
this . components [ component ] . plugins [ name ] = def ;
} ;
UI . component . boot = function ( name ) {
if ( UI . components [ name ] . prototype && UI . components [ name ] . prototype . boot && ! UI . components [ name ] . booted ) {
UI . components [ name ] . prototype . boot . apply ( UI , [ ] ) ;
UI . components [ name ] . booted = true ;
}
} ;
UI . component . bootComponents = function ( ) {
for ( var component in UI . components ) {
UI . component . boot ( component ) ;
}
} ;
// DOM mutation save ready helper function
UI . domObservers = [ ] ;
UI . domready = false ;
UI . ready = function ( fn ) {
UI . domObservers . push ( fn ) ;
if ( UI . domready ) {
fn ( document ) ;
}
} ;
UI . on = function ( a1 , a2 , a3 ) {
if ( a1 && a1 . indexOf ( 'ready.uk.dom' ) > - 1 && UI . domready ) {
a2 . apply ( UI . $doc ) ;
}
return UI . $doc . on ( a1 , a2 , a3 ) ;
} ;
UI . one = function ( a1 , a2 , a3 ) {
if ( a1 && a1 . indexOf ( 'ready.uk.dom' ) > - 1 && UI . domready ) {
a2 . apply ( UI . $doc ) ;
return UI . $doc ;
}
return UI . $doc . one ( a1 , a2 , a3 ) ;
} ;
UI . trigger = function ( evt , params ) {
return UI . $doc . trigger ( evt , params ) ;
} ;
UI . domObserve = function ( selector , fn ) {
if ( ! UI . support . mutationobserver ) return ;
fn = fn || function ( ) { } ;
UI . $ ( selector ) . each ( function ( ) {
var element = this ,
$element = UI . $ ( element ) ;
if ( $element . data ( 'observer' ) ) {
return ;
}
try {
var observer = new UI . support . mutationobserver ( UI . Utils . debounce ( function ( mutations ) {
fn . apply ( element , [ ] ) ;
$element . trigger ( 'changed.uk.dom' ) ;
} , 50 ) ) ;
// pass in the target node, as well as the observer options
observer . observe ( element , { childList : true , subtree : true } ) ;
$element . data ( 'observer' , observer ) ;
} catch ( e ) { }
} ) ;
} ;
UI . init = function ( root ) {
root = root || document ;
UI . domObservers . forEach ( function ( fn ) {
fn ( root ) ;
} ) ;
} ;
UI . on ( 'domready.uk.dom' , function ( ) {
UI . init ( ) ;
if ( UI . domready ) UI . Utils . checkDisplay ( ) ;
} ) ;
2016-03-19 01:51:35 +00:00
document . addEventListener ( 'DOMContentLoaded' , function ( ) {
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
var domReady = function ( ) {
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
UI . $body = UI . $ ( 'body' ) ;
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
UI . ready ( function ( context ) {
UI . domObserve ( '[data-uk-observe]' ) ;
} ) ;
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
UI . on ( 'changed.uk.dom' , function ( e ) {
UI . init ( e . target ) ;
UI . Utils . checkDisplay ( e . target ) ;
} ) ;
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
UI . trigger ( 'beforeready.uk.dom' ) ;
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
UI . component . bootComponents ( ) ;
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
// custom scroll observer
requestAnimationFrame ( ( function ( ) {
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
var memory = { dir : { x : 0 , y : 0 } , x : window . pageXOffset , y : window . pageYOffset } ;
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
var fn = function ( ) {
// reading this (window.page[X|Y]Offset) causes a full page recalc of the layout in Chrome,
// so we only want to do this once
var wpxo = window . pageXOffset ;
var wpyo = window . pageYOffset ;
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
// Did the scroll position change since the last time we were here?
if ( memory . x != wpxo || memory . y != wpyo ) {
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
// Set the direction of the scroll and store the new position
if ( wpxo != memory . x ) { memory . dir . x = wpxo > memory . x ? 1 : - 1 ; } else { memory . dir . x = 0 ; }
if ( wpyo != memory . y ) { memory . dir . y = wpyo > memory . y ? 1 : - 1 ; } else { memory . dir . y = 0 ; }
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
memory . x = wpxo ;
memory . y = wpyo ;
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
// Trigger the scroll event, this could probably be sent using memory.clone() but this is
// more explicit and easier to see exactly what is being sent in the event.
UI . $doc . trigger ( 'scrolling.uk.document' , [ {
"dir" : { "x" : memory . dir . x , "y" : memory . dir . y } , "x" : wpxo , "y" : wpyo
} ] ) ;
}
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
requestAnimationFrame ( fn ) ;
} ;
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
if ( UI . support . touch ) {
UI . $html . on ( 'touchmove touchend MSPointerMove MSPointerUp pointermove pointerup' , fn ) ;
}
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
if ( memory . x || memory . y ) fn ( ) ;
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
return fn ;
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
} ) ( ) ) ;
// run component init functions on dom
UI . trigger ( 'domready.uk.dom' ) ;
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
if ( UI . support . touch ) {
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
// remove css hover rules for touch devices
// UI.Utils.removeCssRules(/\.uk-(?!navbar).*:hover/);
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
// viewport unit fix for uk-height-viewport - should be fixed in iOS 8
if ( navigator . userAgent . match ( /(iPad|iPhone|iPod)/g ) ) {
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
UI . $win . on ( 'load orientationchange resize' , UI . Utils . debounce ( ( function ( ) {
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
var fn = function ( ) {
$ ( '.uk-height-viewport' ) . css ( 'height' , window . innerHeight ) ;
return fn ;
} ;
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
return fn ( ) ;
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
} ) ( ) , 100 ) ) ;
}
2016-01-30 20:28:43 +00:00
}
2016-03-19 01:51:35 +00:00
UI . trigger ( 'afterready.uk.dom' ) ;
// mark that domready is left behind
UI . domready = true ;
} ;
if ( document . readyState == 'complete' || document . readyState == 'interactive' ) {
setTimeout ( domReady ) ;
2016-01-30 20:28:43 +00:00
}
2016-03-19 01:51:35 +00:00
return domReady ;
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
} ( ) ) ;
2016-01-30 20:28:43 +00:00
// add touch identifier class
UI . $html . addClass ( UI . support . touch ? "uk-touch" : "uk-notouch" ) ;
// add uk-hover class on tap to support overlays on touch devices
if ( UI . support . touch ) {
2016-03-19 01:51:35 +00:00
var hoverset = false ,
exclude ,
hovercls = 'uk-hover' ,
selector = '.uk-overlay, .uk-overlay-hover, .uk-overlay-toggle, .uk-animation-hover, .uk-has-hover' ;
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
UI . $html . on ( 'mouseenter touchstart MSPointerDown pointerdown' , selector , function ( ) {
2016-01-30 20:28:43 +00:00
if ( hoverset ) $ ( '.' + hovercls ) . removeClass ( hovercls ) ;
hoverset = $ ( this ) . addClass ( hovercls ) ;
2016-03-19 01:51:35 +00:00
} ) . on ( 'mouseleave touchend MSPointerUp pointerup' , function ( e ) {
2016-01-30 20:28:43 +00:00
exclude = $ ( e . target ) . parents ( selector ) ;
if ( hoverset ) {
hoverset . not ( exclude ) . removeClass ( hovercls ) ;
}
} ) ;
}
return UI ;
} ) ;
// Based on Zeptos touch.js
// https://raw.github.com/madrobby/zepto/master/src/touch.js
// Zepto.js may be freely distributed under the MIT license.
; ( function ( $ ) {
if ( $ . fn . swipeLeft ) {
return ;
}
var touch = { } , touchTimeout , tapTimeout , swipeTimeout , longTapTimeout , longTapDelay = 750 , gesture ;
function swipeDirection ( x1 , x2 , y1 , y2 ) {
return Math . abs ( x1 - x2 ) >= Math . abs ( y1 - y2 ) ? ( x1 - x2 > 0 ? 'Left' : 'Right' ) : ( y1 - y2 > 0 ? 'Up' : 'Down' ) ;
}
function longTap ( ) {
longTapTimeout = null ;
if ( touch . last ) {
2016-03-19 01:51:35 +00:00
if ( touch . el !== undefined ) touch . el . trigger ( 'longTap' ) ;
2016-01-30 20:28:43 +00:00
touch = { } ;
}
}
function cancelLongTap ( ) {
if ( longTapTimeout ) clearTimeout ( longTapTimeout ) ;
longTapTimeout = null ;
}
function cancelAll ( ) {
if ( touchTimeout ) clearTimeout ( touchTimeout ) ;
if ( tapTimeout ) clearTimeout ( tapTimeout ) ;
if ( swipeTimeout ) clearTimeout ( swipeTimeout ) ;
if ( longTapTimeout ) clearTimeout ( longTapTimeout ) ;
touchTimeout = tapTimeout = swipeTimeout = longTapTimeout = null ;
touch = { } ;
}
function isPrimaryTouch ( event ) {
return event . pointerType == event . MSPOINTER _TYPE _TOUCH && event . isPrimary ;
}
$ ( function ( ) {
var now , delta , deltaX = 0 , deltaY = 0 , firstTouch ;
if ( 'MSGesture' in window ) {
gesture = new MSGesture ( ) ;
gesture . target = document . body ;
}
$ ( document )
. on ( 'MSGestureEnd gestureend' , function ( e ) {
var swipeDirectionFromVelocity = e . originalEvent . velocityX > 1 ? 'Right' : e . originalEvent . velocityX < - 1 ? 'Left' : e . originalEvent . velocityY > 1 ? 'Down' : e . originalEvent . velocityY < - 1 ? 'Up' : null ;
2016-03-19 01:51:35 +00:00
if ( swipeDirectionFromVelocity && touch . el !== undefined ) {
2016-01-30 20:28:43 +00:00
touch . el . trigger ( 'swipe' ) ;
touch . el . trigger ( 'swipe' + swipeDirectionFromVelocity ) ;
}
} )
// MSPointerDown: for IE10
// pointerdown: for IE11
. on ( 'touchstart MSPointerDown pointerdown' , function ( e ) {
if ( e . type == 'MSPointerDown' && ! isPrimaryTouch ( e . originalEvent ) ) return ;
firstTouch = ( e . type == 'MSPointerDown' || e . type == 'pointerdown' ) ? e : e . originalEvent . touches [ 0 ] ;
now = Date . now ( ) ;
delta = now - ( touch . last || now ) ;
touch . el = $ ( 'tagName' in firstTouch . target ? firstTouch . target : firstTouch . target . parentNode ) ;
if ( touchTimeout ) clearTimeout ( touchTimeout ) ;
touch . x1 = firstTouch . pageX ;
touch . y1 = firstTouch . pageY ;
if ( delta > 0 && delta <= 250 ) touch . isDoubleTap = true ;
touch . last = now ;
longTapTimeout = setTimeout ( longTap , longTapDelay ) ;
// adds the current touch contact for IE gesture recognition
if ( gesture && ( e . type == 'MSPointerDown' || e . type == 'pointerdown' || e . type == 'touchstart' ) ) {
gesture . addPointer ( e . originalEvent . pointerId ) ;
}
} )
// MSPointerMove: for IE10
// pointermove: for IE11
. on ( 'touchmove MSPointerMove pointermove' , function ( e ) {
if ( e . type == 'MSPointerMove' && ! isPrimaryTouch ( e . originalEvent ) ) return ;
firstTouch = ( e . type == 'MSPointerMove' || e . type == 'pointermove' ) ? e : e . originalEvent . touches [ 0 ] ;
cancelLongTap ( ) ;
touch . x2 = firstTouch . pageX ;
touch . y2 = firstTouch . pageY ;
deltaX += Math . abs ( touch . x1 - touch . x2 ) ;
deltaY += Math . abs ( touch . y1 - touch . y2 ) ;
} )
// MSPointerUp: for IE10
// pointerup: for IE11
. on ( 'touchend MSPointerUp pointerup' , function ( e ) {
if ( e . type == 'MSPointerUp' && ! isPrimaryTouch ( e . originalEvent ) ) return ;
cancelLongTap ( ) ;
// swipe
if ( ( touch . x2 && Math . abs ( touch . x1 - touch . x2 ) > 30 ) || ( touch . y2 && Math . abs ( touch . y1 - touch . y2 ) > 30 ) ) {
swipeTimeout = setTimeout ( function ( ) {
2016-03-19 01:51:35 +00:00
if ( touch . el !== undefined ) {
touch . el . trigger ( 'swipe' ) ;
touch . el . trigger ( 'swipe' + ( swipeDirection ( touch . x1 , touch . x2 , touch . y1 , touch . y2 ) ) ) ;
}
2016-01-30 20:28:43 +00:00
touch = { } ;
} , 0 ) ;
// normal tap
} else if ( 'last' in touch ) {
// don't fire tap when delta position changed by more than 30 pixels,
// for instance when moving to a point and back to origin
if ( isNaN ( deltaX ) || ( deltaX < 30 && deltaY < 30 ) ) {
// delay by one tick so we can cancel the 'tap' event if 'scroll' fires
// ('tap' fires before 'scroll')
tapTimeout = setTimeout ( function ( ) {
// trigger universal 'tap' with the option to cancelTouch()
// (cancelTouch cancels processing of single vs double taps for faster 'tap' response)
var event = $ . Event ( 'tap' ) ;
event . cancelTouch = cancelAll ;
2016-03-19 01:51:35 +00:00
if ( touch . el !== undefined ) touch . el . trigger ( event ) ;
2016-01-30 20:28:43 +00:00
// trigger double tap immediately
if ( touch . isDoubleTap ) {
2016-03-19 01:51:35 +00:00
if ( touch . el !== undefined ) touch . el . trigger ( 'doubleTap' ) ;
2016-01-30 20:28:43 +00:00
touch = { } ;
}
// trigger single tap after 250ms of inactivity
else {
touchTimeout = setTimeout ( function ( ) {
touchTimeout = null ;
2016-03-19 01:51:35 +00:00
if ( touch . el !== undefined ) touch . el . trigger ( 'singleTap' ) ;
2016-01-30 20:28:43 +00:00
touch = { } ;
} , 250 ) ;
}
} , 0 ) ;
} else {
touch = { } ;
}
deltaX = deltaY = 0 ;
}
} )
// when the browser window loses focus,
// for example when a modal dialog is shown,
// cancel all ongoing events
. on ( 'touchcancel MSPointerCancel' , cancelAll ) ;
// scrolling the window indicates intention of the user
// to scroll, not tap or swipe, so cancel all ongoing events
$ ( window ) . on ( 'scroll' , cancelAll ) ;
} ) ;
[ 'swipe' , 'swipeLeft' , 'swipeRight' , 'swipeUp' , 'swipeDown' , 'doubleTap' , 'tap' , 'singleTap' , 'longTap' ] . forEach ( function ( eventName ) {
$ . fn [ eventName ] = function ( callback ) { return $ ( this ) . on ( eventName , callback ) ; } ;
} ) ;
} ) ( jQuery ) ;
( 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 ) ;
( function ( UI ) {
"use strict" ;
UI . component ( 'smoothScroll' , {
boot : function ( ) {
// init code
UI . $html . on ( "click.smooth-scroll.uikit" , "[data-uk-smooth-scroll]" , function ( e ) {
var ele = UI . $ ( this ) ;
if ( ! ele . data ( "smoothScroll" ) ) {
var obj = UI . smoothScroll ( ele , UI . Utils . options ( ele . attr ( "data-uk-smooth-scroll" ) ) ) ;
ele . trigger ( "click" ) ;
}
return false ;
} ) ;
} ,
init : function ( ) {
var $this = this ;
this . on ( "click" , function ( e ) {
e . preventDefault ( ) ;
scrollToElement ( UI . $ ( this . hash ) . length ? UI . $ ( this . hash ) : UI . $ ( "body" ) , $this . options ) ;
} ) ;
}
} ) ;
function scrollToElement ( ele , options ) {
options = UI . $ . extend ( {
duration : 1000 ,
transition : 'easeOutExpo' ,
offset : 0 ,
complete : function ( ) { }
} , options ) ;
// get / set parameters
var target = ele . offset ( ) . top - options . offset ,
docheight = UI . $doc . height ( ) ,
winheight = window . innerHeight ;
if ( ( target + winheight ) > docheight ) {
target = docheight - winheight ;
}
// animate to target, fire callback when done
UI . $ ( "html,body" ) . stop ( ) . animate ( { scrollTop : target } , options . duration , options . transition ) . promise ( ) . done ( options . complete ) ;
}
UI . Utils . scrollToElement = scrollToElement ;
if ( ! UI . $ . easing . easeOutExpo ) {
UI . $ . easing . easeOutExpo = function ( x , t , b , c , d ) { return ( t == d ) ? b + c : c * ( - Math . pow ( 2 , - 10 * t / d ) + 1 ) + b ; } ;
}
} ) ( UIkit ) ;
( function ( UI ) {
"use strict" ;
var $win = UI . $win ,
$doc = UI . $doc ,
scrollspies = [ ] ,
checkScrollSpy = function ( ) {
for ( var i = 0 ; i < scrollspies . length ; i ++ ) {
window . requestAnimationFrame . apply ( window , [ scrollspies [ i ] . check ] ) ;
}
} ;
UI . component ( 'scrollspy' , {
defaults : {
"target" : false ,
"cls" : "uk-scrollspy-inview" ,
"initcls" : "uk-scrollspy-init-inview" ,
"topoffset" : 0 ,
"leftoffset" : 0 ,
"repeat" : false ,
"delay" : 0
} ,
boot : function ( ) {
// listen to scroll and resize
$doc . on ( "scrolling.uk.document" , checkScrollSpy ) ;
$win . on ( "load resize orientationchange" , UI . Utils . debounce ( checkScrollSpy , 50 ) ) ;
// init code
UI . ready ( function ( context ) {
UI . $ ( "[data-uk-scrollspy]" , context ) . each ( function ( ) {
var element = UI . $ ( this ) ;
if ( ! element . data ( "scrollspy" ) ) {
var obj = UI . scrollspy ( element , UI . Utils . options ( element . attr ( "data-uk-scrollspy" ) ) ) ;
}
} ) ;
} ) ;
} ,
init : function ( ) {
var $this = this , inviewstate , initinview , togglecls = this . options . cls . split ( /,/ ) , fn = function ( ) {
var elements = $this . options . target ? $this . element . find ( $this . options . target ) : $this . element ,
delayIdx = elements . length === 1 ? 1 : 0 ,
toggleclsIdx = 0 ;
elements . each ( function ( idx ) {
var element = UI . $ ( this ) ,
inviewstate = element . data ( 'inviewstate' ) ,
inview = UI . Utils . isInView ( element , $this . options ) ,
toggle = element . data ( 'ukScrollspyCls' ) || togglecls [ toggleclsIdx ] . trim ( ) ;
if ( inview && ! inviewstate && ! element . data ( 'scrollspy-idle' ) ) {
if ( ! initinview ) {
element . addClass ( $this . options . initcls ) ;
$this . offset = element . offset ( ) ;
initinview = true ;
element . trigger ( "init.uk.scrollspy" ) ;
}
element . data ( 'scrollspy-idle' , setTimeout ( function ( ) {
element . addClass ( "uk-scrollspy-inview" ) . toggleClass ( toggle ) . width ( ) ;
element . trigger ( "inview.uk.scrollspy" ) ;
element . data ( 'scrollspy-idle' , false ) ;
element . data ( 'inviewstate' , true ) ;
} , $this . options . delay * delayIdx ) ) ;
delayIdx ++ ;
}
if ( ! inview && inviewstate && $this . options . repeat ) {
if ( element . data ( 'scrollspy-idle' ) ) {
clearTimeout ( element . data ( 'scrollspy-idle' ) ) ;
2016-03-19 01:51:35 +00:00
element . data ( 'scrollspy-idle' , false ) ;
2016-01-30 20:28:43 +00:00
}
element . removeClass ( "uk-scrollspy-inview" ) . toggleClass ( toggle ) ;
element . data ( 'inviewstate' , false ) ;
element . trigger ( "outview.uk.scrollspy" ) ;
}
toggleclsIdx = togglecls [ toggleclsIdx + 1 ] ? ( toggleclsIdx + 1 ) : 0 ;
} ) ;
} ;
fn ( ) ;
this . check = fn ;
scrollspies . push ( this ) ;
}
} ) ;
var scrollspynavs = [ ] ,
checkScrollSpyNavs = function ( ) {
for ( var i = 0 ; i < scrollspynavs . length ; i ++ ) {
window . requestAnimationFrame . apply ( window , [ scrollspynavs [ i ] . check ] ) ;
}
} ;
UI . component ( 'scrollspynav' , {
defaults : {
"cls" : 'uk-active' ,
"closest" : false ,
"topoffset" : 0 ,
"leftoffset" : 0 ,
"smoothscroll" : false
} ,
boot : function ( ) {
// listen to scroll and resize
$doc . on ( "scrolling.uk.document" , checkScrollSpyNavs ) ;
$win . on ( "resize orientationchange" , UI . Utils . debounce ( checkScrollSpyNavs , 50 ) ) ;
// init code
UI . ready ( function ( context ) {
UI . $ ( "[data-uk-scrollspy-nav]" , context ) . each ( function ( ) {
var element = UI . $ ( this ) ;
if ( ! element . data ( "scrollspynav" ) ) {
var obj = UI . scrollspynav ( element , UI . Utils . options ( element . attr ( "data-uk-scrollspy-nav" ) ) ) ;
}
} ) ;
} ) ;
} ,
init : function ( ) {
var ids = [ ] ,
2016-03-19 01:51:35 +00:00
links = this . find ( "a[href^='#']" ) . each ( function ( ) { if ( this . getAttribute ( "href" ) . trim ( ) !== '#' ) ids . push ( this . getAttribute ( "href" ) ) ; } ) ,
2016-01-30 20:28:43 +00:00
targets = UI . $ ( ids . join ( "," ) ) ,
clsActive = this . options . cls ,
clsClosest = this . options . closest || this . options . closest ;
var $this = this , inviews , fn = function ( ) {
inviews = [ ] ;
for ( var i = 0 ; i < targets . length ; i ++ ) {
if ( UI . Utils . isInView ( targets . eq ( i ) , $this . options ) ) {
inviews . push ( targets . eq ( i ) ) ;
}
}
if ( inviews . length ) {
var navitems ,
scrollTop = $win . scrollTop ( ) ,
target = ( function ( ) {
for ( var i = 0 ; i < inviews . length ; i ++ ) {
if ( inviews [ i ] . offset ( ) . top >= scrollTop ) {
return inviews [ i ] ;
}
}
} ) ( ) ;
if ( ! target ) return ;
if ( $this . options . closest ) {
2016-03-19 01:51:35 +00:00
links . blur ( ) . closest ( clsClosest ) . removeClass ( clsActive ) ;
2016-01-30 20:28:43 +00:00
navitems = links . filter ( "a[href='#" + target . attr ( "id" ) + "']" ) . closest ( clsClosest ) . addClass ( clsActive ) ;
} else {
navitems = links . removeClass ( clsActive ) . filter ( "a[href='#" + target . attr ( "id" ) + "']" ) . addClass ( clsActive ) ;
}
$this . element . trigger ( "inview.uk.scrollspynav" , [ target , navitems ] ) ;
}
} ;
if ( this . options . smoothscroll && UI . smoothScroll ) {
links . each ( function ( ) {
UI . smoothScroll ( this , $this . options . smoothscroll ) ;
} ) ;
}
fn ( ) ;
this . element . data ( "scrollspynav" , this ) ;
this . check = fn ;
scrollspynavs . push ( this ) ;
}
} ) ;
} ) ( UIkit ) ;
( function ( UI ) {
"use strict" ;
var toggles = [ ] ;
UI . component ( 'toggle' , {
defaults : {
target : false ,
cls : 'uk-hidden' ,
animation : false ,
duration : 200
} ,
boot : function ( ) {
// init code
UI . ready ( function ( context ) {
UI . $ ( "[data-uk-toggle]" , context ) . each ( function ( ) {
var ele = UI . $ ( this ) ;
if ( ! ele . data ( "toggle" ) ) {
var obj = UI . toggle ( ele , UI . Utils . options ( ele . attr ( "data-uk-toggle" ) ) ) ;
}
} ) ;
setTimeout ( function ( ) {
toggles . forEach ( function ( toggle ) {
toggle . getToggles ( ) ;
} ) ;
} , 0 ) ;
} ) ;
} ,
init : function ( ) {
var $this = this ;
this . aria = ( this . options . cls . indexOf ( 'uk-hidden' ) !== - 1 ) ;
this . getToggles ( ) ;
this . on ( "click" , function ( e ) {
if ( $this . element . is ( 'a[href="#"]' ) ) e . preventDefault ( ) ;
$this . toggle ( ) ;
} ) ;
toggles . push ( this ) ;
} ,
toggle : function ( ) {
if ( ! this . totoggle . length ) return ;
if ( this . options . animation && UI . support . animation ) {
var $this = this , animations = this . options . animation . split ( ',' ) ;
if ( animations . length == 1 ) {
animations [ 1 ] = animations [ 0 ] ;
}
animations [ 0 ] = animations [ 0 ] . trim ( ) ;
animations [ 1 ] = animations [ 1 ] . trim ( ) ;
this . totoggle . css ( 'animation-duration' , this . options . duration + 'ms' ) ;
2016-03-19 01:51:35 +00:00
this . totoggle . each ( function ( ) {
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
var ele = UI . $ ( this ) ;
if ( ele . hasClass ( $this . options . cls ) ) {
ele . toggleClass ( $this . options . cls ) ;
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
UI . Utils . animate ( ele , animations [ 0 ] ) . then ( function ( ) {
ele . css ( 'animation-duration' , '' ) ;
UI . Utils . checkDisplay ( ele ) ;
2016-01-30 20:28:43 +00:00
} ) ;
2016-03-19 01:51:35 +00:00
} else {
2016-01-30 20:28:43 +00:00
UI . Utils . animate ( this , animations [ 1 ] + ' uk-animation-reverse' ) . then ( function ( ) {
2016-03-19 01:51:35 +00:00
ele . toggleClass ( $this . options . cls ) . css ( 'animation-duration' , '' ) ;
UI . Utils . checkDisplay ( ele ) ;
} ) ;
}
} ) ;
2016-01-30 20:28:43 +00:00
} else {
this . totoggle . toggleClass ( this . options . cls ) ;
UI . Utils . checkDisplay ( this . totoggle ) ;
}
this . updateAria ( ) ;
} ,
getToggles : function ( ) {
this . totoggle = this . options . target ? UI . $ ( this . options . target ) : [ ] ;
this . updateAria ( ) ;
} ,
updateAria : function ( ) {
if ( this . aria && this . totoggle . length ) {
this . totoggle . each ( function ( ) {
UI . $ ( this ) . attr ( 'aria-hidden' , UI . $ ( this ) . hasClass ( 'uk-hidden' ) ) ;
} ) ;
}
}
} ) ;
} ) ( UIkit ) ;
( function ( UI ) {
"use strict" ;
UI . component ( 'alert' , {
defaults : {
"fade" : true ,
"duration" : 200 ,
"trigger" : ".uk-alert-close"
} ,
boot : function ( ) {
// init code
UI . $html . on ( "click.alert.uikit" , "[data-uk-alert]" , function ( e ) {
var ele = UI . $ ( this ) ;
if ( ! ele . data ( "alert" ) ) {
var alert = UI . alert ( ele , UI . Utils . options ( ele . attr ( "data-uk-alert" ) ) ) ;
if ( UI . $ ( e . target ) . is ( alert . options . trigger ) ) {
e . preventDefault ( ) ;
alert . close ( ) ;
}
}
} ) ;
} ,
init : function ( ) {
var $this = this ;
this . on ( "click" , this . options . trigger , function ( e ) {
e . preventDefault ( ) ;
$this . close ( ) ;
} ) ;
} ,
close : function ( ) {
var element = this . trigger ( "close.uk.alert" ) ,
removeElement = function ( ) {
this . trigger ( "closed.uk.alert" ) . remove ( ) ;
} . bind ( this ) ;
if ( this . options . fade ) {
element . css ( "overflow" , "hidden" ) . css ( "max-height" , element . height ( ) ) . animate ( {
"height" : 0 ,
"opacity" : 0 ,
"padding-top" : 0 ,
"padding-bottom" : 0 ,
"margin-top" : 0 ,
"margin-bottom" : 0
} , this . options . duration , removeElement ) ;
} else {
removeElement ( ) ;
}
}
} ) ;
} ) ( UIkit ) ;
( function ( UI ) {
"use strict" ;
UI . component ( 'buttonRadio' , {
defaults : {
2016-03-19 01:51:35 +00:00
"activeClass" : 'uk-active' ,
2016-01-30 20:28:43 +00:00
"target" : ".uk-button"
} ,
boot : function ( ) {
// init code
UI . $html . on ( "click.buttonradio.uikit" , "[data-uk-button-radio]" , function ( e ) {
var ele = UI . $ ( this ) ;
if ( ! ele . data ( "buttonRadio" ) ) {
var obj = UI . buttonRadio ( ele , UI . Utils . options ( ele . attr ( "data-uk-button-radio" ) ) ) ,
target = UI . $ ( e . target ) ;
if ( target . is ( obj . options . target ) ) {
target . trigger ( "click" ) ;
}
}
} ) ;
} ,
init : function ( ) {
var $this = this ;
// Init ARIA
2016-03-19 01:51:35 +00:00
this . find ( $this . options . target ) . attr ( 'aria-checked' , 'false' ) . filter ( '.' + $this . options . activeClass ) . attr ( 'aria-checked' , 'true' ) ;
2016-01-30 20:28:43 +00:00
this . on ( "click" , this . options . target , function ( e ) {
var ele = UI . $ ( this ) ;
if ( ele . is ( 'a[href="#"]' ) ) e . preventDefault ( ) ;
2016-03-19 01:51:35 +00:00
$this . find ( $this . options . target ) . not ( ele ) . removeClass ( $this . options . activeClass ) . blur ( ) ;
ele . addClass ( $this . options . activeClass ) ;
2016-01-30 20:28:43 +00:00
// Update ARIA
$this . find ( $this . options . target ) . not ( ele ) . attr ( 'aria-checked' , 'false' ) ;
ele . attr ( 'aria-checked' , 'true' ) ;
$this . trigger ( "change.uk.button" , [ ele ] ) ;
} ) ;
} ,
getSelected : function ( ) {
2016-03-19 01:51:35 +00:00
return this . find ( '.' + this . options . activeClass ) ;
2016-01-30 20:28:43 +00:00
}
} ) ;
UI . component ( 'buttonCheckbox' , {
defaults : {
2016-03-19 01:51:35 +00:00
"activeClass" : 'uk-active' ,
2016-01-30 20:28:43 +00:00
"target" : ".uk-button"
} ,
boot : function ( ) {
UI . $html . on ( "click.buttoncheckbox.uikit" , "[data-uk-button-checkbox]" , function ( e ) {
var ele = UI . $ ( this ) ;
if ( ! ele . data ( "buttonCheckbox" ) ) {
var obj = UI . buttonCheckbox ( ele , UI . Utils . options ( ele . attr ( "data-uk-button-checkbox" ) ) ) ,
target = UI . $ ( e . target ) ;
if ( target . is ( obj . options . target ) ) {
target . trigger ( "click" ) ;
}
}
} ) ;
} ,
init : function ( ) {
var $this = this ;
// Init ARIA
2016-03-19 01:51:35 +00:00
this . find ( $this . options . target ) . attr ( 'aria-checked' , 'false' ) . filter ( '.' + $this . options . activeClass ) . attr ( 'aria-checked' , 'true' ) ;
2016-01-30 20:28:43 +00:00
this . on ( "click" , this . options . target , function ( e ) {
var ele = UI . $ ( this ) ;
if ( ele . is ( 'a[href="#"]' ) ) e . preventDefault ( ) ;
2016-03-19 01:51:35 +00:00
ele . toggleClass ( $this . options . activeClass ) . blur ( ) ;
2016-01-30 20:28:43 +00:00
// Update ARIA
2016-03-19 01:51:35 +00:00
ele . attr ( 'aria-checked' , ele . hasClass ( $this . options . activeClass ) ) ;
2016-01-30 20:28:43 +00:00
$this . trigger ( "change.uk.button" , [ ele ] ) ;
} ) ;
} ,
getSelected : function ( ) {
2016-03-19 01:51:35 +00:00
return this . find ( '.' + this . options . activeClass ) ;
2016-01-30 20:28:43 +00:00
}
} ) ;
UI . component ( 'button' , {
defaults : { } ,
boot : function ( ) {
UI . $html . on ( "click.button.uikit" , "[data-uk-button]" , function ( e ) {
var ele = UI . $ ( this ) ;
if ( ! ele . data ( "button" ) ) {
var obj = UI . button ( ele , UI . Utils . options ( ele . attr ( "data-uk-button" ) ) ) ;
ele . trigger ( "click" ) ;
}
} ) ;
} ,
init : function ( ) {
var $this = this ;
// Init ARIA
this . element . attr ( 'aria-pressed' , this . element . hasClass ( "uk-active" ) ) ;
this . on ( "click" , function ( e ) {
if ( $this . element . is ( 'a[href="#"]' ) ) e . preventDefault ( ) ;
$this . toggle ( ) ;
$this . trigger ( "change.uk.button" , [ $this . element . blur ( ) . hasClass ( "uk-active" ) ] ) ;
} ) ;
} ,
toggle : function ( ) {
this . element . toggleClass ( "uk-active" ) ;
// Update ARIA
this . element . attr ( 'aria-pressed' , this . element . hasClass ( "uk-active" ) ) ;
}
} ) ;
} ) ( UIkit ) ;
2016-03-19 01:51:35 +00:00
2016-01-30 20:28:43 +00:00
( function ( UI ) {
"use strict" ;
2016-03-19 01:51:35 +00:00
var active = false , hoverIdle , flips = {
'x' : {
"bottom-left" : 'bottom-right' ,
"bottom-right" : 'bottom-left' ,
"bottom-center" : 'bottom-center' ,
"top-left" : 'top-right' ,
"top-right" : 'top-left' ,
"top-center" : 'top-center' ,
"left-top" : 'right-top' ,
"left-bottom" : 'right-bottom' ,
"left-center" : 'right-center' ,
"right-top" : 'left-top' ,
"right-bottom" : 'left-bottom' ,
"right-center" : 'left-center'
} ,
'y' : {
"bottom-left" : 'top-left' ,
"bottom-right" : 'top-right' ,
"bottom-center" : 'top-center' ,
"top-left" : 'bottom-left' ,
"top-right" : 'bottom-right' ,
"top-center" : 'bottom-center' ,
"left-top" : 'left-bottom' ,
"left-bottom" : 'left-top' ,
"left-center" : 'left-center' ,
"right-top" : 'right-bottom' ,
"right-bottom" : 'right-top' ,
"right-center" : 'right-center'
} ,
'xy' : {
"bottom-left" : 'top-right' ,
"bottom-right" : 'top-left' ,
"bottom-center" : 'top-center' ,
"top-left" : 'bottom-right' ,
"top-right" : 'bottom-left' ,
"top-center" : 'bottom-center' ,
"left-top" : 'right-bottom' ,
"left-bottom" : 'right-top' ,
"left-center" : 'right-center' ,
"right-top" : 'left-bottom' ,
"right-bottom" : 'left-top' ,
"right-center" : 'left-center'
}
} ;
2016-01-30 20:28:43 +00:00
UI . component ( 'dropdown' , {
defaults : {
2016-03-19 01:51:35 +00:00
'mode' : 'hover' ,
'pos' : 'bottom-left' ,
'offset' : 0 ,
'remaintime' : 800 ,
'justify' : false ,
'boundary' : UI . $win ,
'delay' : 0 ,
'dropdownSelector' : '.uk-dropdown,.uk-dropdown-blank' ,
'hoverDelayIdle' : 250 ,
'preventflip' : false
2016-01-30 20:28:43 +00:00
} ,
remainIdle : false ,
boot : function ( ) {
var triggerevent = UI . support . touch ? "click" : "mouseenter" ;
// init code
UI . $html . on ( triggerevent + ".dropdown.uikit" , "[data-uk-dropdown]" , function ( e ) {
var ele = UI . $ ( this ) ;
if ( ! ele . data ( "dropdown" ) ) {
var dropdown = UI . dropdown ( ele , UI . Utils . options ( ele . attr ( "data-uk-dropdown" ) ) ) ;
if ( triggerevent == "click" || ( triggerevent == "mouseenter" && dropdown . options . mode == "hover" ) ) {
dropdown . element . trigger ( triggerevent ) ;
}
2016-03-19 01:51:35 +00:00
if ( dropdown . element . find ( dropdown . options . dropdownSelector ) . length ) {
2016-01-30 20:28:43 +00:00
e . preventDefault ( ) ;
}
}
} ) ;
} ,
init : function ( ) {
var $this = this ;
2016-03-19 01:51:35 +00:00
this . dropdown = this . find ( this . options . dropdownSelector ) ;
this . offsetParent = this . dropdown . parents ( ) . filter ( function ( ) {
return UI . $ . inArray ( UI . $ ( this ) . css ( 'position' ) , [ 'relative' , 'fixed' , 'absolute' ] ) !== - 1 ;
} ) . slice ( 0 , 1 ) ;
2016-01-30 20:28:43 +00:00
this . centered = this . dropdown . hasClass ( 'uk-dropdown-center' ) ;
this . justified = this . options . justify ? UI . $ ( this . options . justify ) : false ;
this . boundary = UI . $ ( this . options . boundary ) ;
if ( ! this . boundary . length ) {
this . boundary = UI . $win ;
}
2016-03-19 01:51:35 +00:00
// legacy DEPRECATED!
if ( this . dropdown . hasClass ( 'uk-dropdown-up' ) ) {
this . options . pos = 'top-left' ;
}
if ( this . dropdown . hasClass ( 'uk-dropdown-flip' ) ) {
this . options . pos = this . options . pos . replace ( 'left' , 'right' ) ;
}
if ( this . dropdown . hasClass ( 'uk-dropdown-center' ) ) {
this . options . pos = this . options . pos . replace ( /(left|right)/ , 'center' ) ;
}
//-- end legacy
2016-01-30 20:28:43 +00:00
// Init ARIA
this . element . attr ( 'aria-haspopup' , 'true' ) ;
this . element . attr ( 'aria-expanded' , this . element . hasClass ( "uk-open" ) ) ;
if ( this . options . mode == "click" || UI . support . touch ) {
2016-03-19 01:51:35 +00:00
this . on ( "click.uk.dropdown" , function ( e ) {
2016-01-30 20:28:43 +00:00
var $target = UI . $ ( e . target ) ;
2016-03-19 01:51:35 +00:00
if ( ! $target . parents ( $this . options . dropdownSelector ) . length ) {
2016-01-30 20:28:43 +00:00
if ( $target . is ( "a[href='#']" ) || $target . parent ( ) . is ( "a[href='#']" ) || ( $this . dropdown . length && ! $this . dropdown . is ( ":visible" ) ) ) {
e . preventDefault ( ) ;
}
$target . blur ( ) ;
}
if ( ! $this . element . hasClass ( 'uk-open' ) ) {
$this . show ( ) ;
} else {
2016-03-19 01:51:35 +00:00
if ( ! $this . dropdown . find ( e . target ) . length || $target . is ( ".uk-dropdown-close" ) || $target . parents ( ".uk-dropdown-close" ) . length ) {
2016-01-30 20:28:43 +00:00
$this . hide ( ) ;
}
}
} ) ;
} else {
this . on ( "mouseenter" , function ( e ) {
2016-03-19 01:51:35 +00:00
$this . trigger ( 'pointerenter.uk.dropdown' , [ $this ] ) ;
2016-01-30 20:28:43 +00:00
if ( $this . remainIdle ) {
clearTimeout ( $this . remainIdle ) ;
}
if ( hoverIdle ) {
clearTimeout ( hoverIdle ) ;
}
if ( active && active == $this ) {
return ;
}
// pseudo manuAim
if ( active && active != $this ) {
hoverIdle = setTimeout ( function ( ) {
hoverIdle = setTimeout ( $this . show . bind ( $this ) , $this . options . delay ) ;
} , $this . options . hoverDelayIdle ) ;
} else {
hoverIdle = setTimeout ( $this . show . bind ( $this ) , $this . options . delay ) ;
}
} ) . on ( "mouseleave" , function ( ) {
if ( hoverIdle ) {
clearTimeout ( hoverIdle ) ;
}
$this . remainIdle = setTimeout ( function ( ) {
if ( active && active == $this ) $this . hide ( ) ;
} , $this . options . remaintime ) ;
2016-03-19 01:51:35 +00:00
$this . trigger ( 'pointerleave.uk.dropdown' , [ $this ] ) ;
2016-01-30 20:28:43 +00:00
} ) . on ( "click" , function ( e ) {
var $target = UI . $ ( e . target ) ;
if ( $this . remainIdle ) {
clearTimeout ( $this . remainIdle ) ;
}
2016-03-19 01:51:35 +00:00
if ( active && active == $this ) {
if ( ! $this . dropdown . find ( e . target ) . length || $target . is ( ".uk-dropdown-close" ) || $target . parents ( ".uk-dropdown-close" ) . length ) {
$this . hide ( ) ;
}
return ;
}
2016-01-30 20:28:43 +00:00
if ( $target . is ( "a[href='#']" ) || $target . parent ( ) . is ( "a[href='#']" ) ) {
e . preventDefault ( ) ;
}
$this . show ( ) ;
} ) ;
}
} ,
show : function ( ) {
UI . $html . off ( "click.outer.dropdown" ) ;
if ( active && active != this ) {
2016-03-19 01:51:35 +00:00
active . hide ( true ) ;
2016-01-30 20:28:43 +00:00
}
if ( hoverIdle ) {
clearTimeout ( hoverIdle ) ;
}
2016-03-19 01:51:35 +00:00
this . trigger ( 'beforeshow.uk.dropdown' , [ this ] ) ;
2016-01-30 20:28:43 +00:00
this . checkDimensions ( ) ;
this . element . addClass ( 'uk-open' ) ;
// Update ARIA
this . element . attr ( 'aria-expanded' , 'true' ) ;
this . trigger ( 'show.uk.dropdown' , [ this ] ) ;
UI . Utils . checkDisplay ( this . dropdown , true ) ;
active = this ;
this . registerOuterClick ( ) ;
} ,
2016-03-19 01:51:35 +00:00
hide : function ( force ) {
this . trigger ( 'beforehide.uk.dropdown' , [ this , force ] ) ;
2016-01-30 20:28:43 +00:00
this . element . removeClass ( 'uk-open' ) ;
if ( this . remainIdle ) {
clearTimeout ( this . remainIdle ) ;
}
this . remainIdle = false ;
// Update ARIA
this . element . attr ( 'aria-expanded' , 'false' ) ;
2016-03-19 01:51:35 +00:00
this . trigger ( 'hide.uk.dropdown' , [ this , force ] ) ;
2016-01-30 20:28:43 +00:00
if ( active == this ) active = false ;
} ,
registerOuterClick : function ( ) {
var $this = this ;
UI . $html . off ( "click.outer.dropdown" ) ;
setTimeout ( function ( ) {
UI . $html . on ( "click.outer.dropdown" , function ( e ) {
if ( hoverIdle ) {
clearTimeout ( hoverIdle ) ;
}
var $target = UI . $ ( e . target ) ;
2016-03-19 01:51:35 +00:00
if ( active == $this && ! $this . element . find ( e . target ) . length ) {
$this . hide ( true ) ;
2016-01-30 20:28:43 +00:00
UI . $html . off ( "click.outer.dropdown" ) ;
}
} ) ;
} , 10 ) ;
} ,
checkDimensions : function ( ) {
if ( ! this . dropdown . length ) return ;
2016-03-19 01:51:35 +00:00
// reset
this . dropdown . removeClass ( 'uk-dropdown-top uk-dropdown-bottom uk-dropdown-left uk-dropdown-right uk-dropdown-stack' ) . css ( {
'top-left' : '' ,
'left' : '' ,
'margin-left' : '' ,
'margin-right' : ''
} ) ;
2016-01-30 20:28:43 +00:00
if ( this . justified && this . justified . length ) {
this . dropdown . css ( "min-width" , "" ) ;
}
2016-03-19 01:51:35 +00:00
var $this = this ,
pos = UI . $ . extend ( { } , this . offsetParent . offset ( ) , { width : this . offsetParent [ 0 ] . offsetWidth , height : this . offsetParent [ 0 ] . offsetHeight } ) ,
posoffset = this . options . offset ,
dropdown = this . dropdown ,
offset = dropdown . show ( ) . offset ( ) || { left : 0 , top : 0 } ,
width = dropdown . outerWidth ( ) ,
height = dropdown . outerHeight ( ) ,
2016-01-30 20:28:43 +00:00
boundarywidth = this . boundary . width ( ) ,
2016-03-19 01:51:35 +00:00
boundaryoffset = this . boundary [ 0 ] !== window && this . boundary . offset ( ) ? this . boundary . offset ( ) : { top : 0 , left : 0 } ,
dpos = this . options . pos ;
var variants = {
"bottom-left" : { top : 0 + pos . height + posoffset , left : 0 } ,
"bottom-right" : { top : 0 + pos . height + posoffset , left : 0 + pos . width - width } ,
"bottom-center" : { top : 0 + pos . height + posoffset , left : 0 + pos . width / 2 - width / 2 } ,
"top-left" : { top : 0 - height - posoffset , left : 0 } ,
"top-right" : { top : 0 - height - posoffset , left : 0 + pos . width - width } ,
"top-center" : { top : 0 - height - posoffset , left : 0 + pos . width / 2 - width / 2 } ,
"left-top" : { top : 0 , left : 0 - width - posoffset } ,
"left-bottom" : { top : 0 + pos . height - height , left : 0 - width - posoffset } ,
"left-center" : { top : 0 + pos . height / 2 - height / 2 , left : 0 - width - posoffset } ,
"right-top" : { top : 0 , left : 0 + pos . width + posoffset } ,
"right-bottom" : { top : 0 + pos . height - height , left : 0 + pos . width + posoffset } ,
"right-center" : { top : 0 + pos . height / 2 - height / 2 , left : 0 + pos . width + posoffset }
} ,
css = { } ,
pp ;
pp = dpos . split ( '-' ) ;
css = variants [ dpos ] ? variants [ dpos ] : variants [ 'bottom-left' ] ;
2016-01-30 20:28:43 +00:00
// justify dropdown
if ( this . justified && this . justified . length ) {
2016-03-19 01:51:35 +00:00
justify ( dropdown . css ( { left : 0 } ) , this . justified , boundarywidth ) ;
} else {
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
if ( this . options . preventflip !== true ) {
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
var fdpos ;
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
switch ( this . checkBoundary ( pos . left + css . left , pos . top + css . top , width , height , boundarywidth ) ) {
case "x" :
if ( this . options . preventflip !== 'x' ) fdpos = flips [ 'x' ] [ dpos ] || 'right-top' ;
break ;
case "y" :
if ( this . options . preventflip !== 'y' ) fdpos = flips [ 'y' ] [ dpos ] || 'top-left' ;
break ;
case "xy" :
if ( ! this . options . preventflip ) fdpos = flips [ 'xy' ] [ dpos ] || 'right-bottom' ;
break ;
}
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
if ( fdpos ) {
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
pp = fdpos . split ( '-' ) ;
css = variants [ fdpos ] ? variants [ fdpos ] : variants [ 'bottom-left' ] ;
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
// check flipped
if ( this . checkBoundary ( pos . left + css . left , pos . top + css . top , width , height , boundarywidth ) ) {
pp = dpos . split ( '-' ) ;
css = variants [ dpos ] ? variants [ dpos ] : variants [ 'bottom-left' ] ;
}
}
2016-01-30 20:28:43 +00:00
}
2016-03-19 01:51:35 +00:00
}
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
if ( width > boundarywidth ) {
dropdown . addClass ( "uk-dropdown-stack" ) ;
this . trigger ( 'stack.uk.dropdown' , [ this ] ) ;
}
dropdown . css ( css ) . css ( "display" , "" ) . addClass ( 'uk-dropdown-' + pp [ 0 ] ) ;
} ,
checkBoundary : function ( left , top , width , height , boundarywidth ) {
var axis = "" ;
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
if ( left < 0 || ( ( left - UI . $win . scrollLeft ( ) ) + width ) > boundarywidth ) {
axis += "x" ;
2016-01-30 20:28:43 +00:00
}
2016-03-19 01:51:35 +00:00
if ( ( top - UI . $win . scrollTop ( ) ) < 0 || ( ( top - UI . $win . scrollTop ( ) ) + height ) > window . innerHeight ) {
axis += "y" ;
2016-01-30 20:28:43 +00:00
}
2016-03-19 01:51:35 +00:00
return axis ;
}
} ) ;
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
UI . component ( 'dropdownOverlay' , {
defaults : {
'justify' : false ,
'cls' : '' ,
'duration' : 200
} ,
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
boot : function ( ) {
// init code
UI . ready ( function ( context ) {
UI . $ ( "[data-uk-dropdown-overlay]" , context ) . each ( function ( ) {
var ele = UI . $ ( this ) ;
if ( ! ele . data ( "dropdownOverlay" ) ) {
UI . dropdownOverlay ( ele , UI . Utils . options ( ele . attr ( "data-uk-dropdown-overlay" ) ) ) ;
2016-01-30 20:28:43 +00:00
}
2016-03-19 01:51:35 +00:00
} ) ;
} ) ;
} ,
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
init : function ( ) {
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
var $this = this ;
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
this . justified = this . options . justify ? UI . $ ( this . options . justify ) : false ;
this . overlay = this . element . find ( 'uk-dropdown-overlay' ) ;
if ( ! this . overlay . length ) {
this . overlay = UI . $ ( '<div class="uk-dropdown-overlay"></div>' ) . appendTo ( this . element ) ;
2016-01-30 20:28:43 +00:00
}
2016-03-19 01:51:35 +00:00
this . overlay . addClass ( this . options . cls ) ;
this . on ( {
'beforeshow.uk.dropdown' : function ( e , dropdown ) {
$this . dropdown = dropdown ;
if ( $this . justified && $this . justified . length ) {
justify ( $this . overlay . css ( { 'display' : 'block' , 'margin-left' : '' , 'margin-right' : '' } ) , $this . justified , $this . justified . outerWidth ( ) ) ;
}
} ,
'show.uk.dropdown' : function ( e , dropdown ) {
var h = $this . dropdown . dropdown . outerHeight ( true ) ;
$this . dropdown . element . removeClass ( 'uk-open' ) ;
$this . overlay . stop ( ) . css ( 'display' , 'block' ) . animate ( { height : h } , $this . options . duration , function ( ) {
$this . dropdown . dropdown . css ( 'visibility' , '' ) ;
$this . dropdown . element . addClass ( 'uk-open' ) ;
UI . Utils . checkDisplay ( $this . dropdown . dropdown , true ) ;
} ) ;
$this . pointerleave = false ;
} ,
'hide.uk.dropdown' : function ( ) {
$this . overlay . stop ( ) . animate ( { height : 0 } , $this . options . duration ) ;
} ,
'pointerenter.uk.dropdown' : function ( e , dropdown ) {
clearTimeout ( $this . remainIdle ) ;
} ,
'pointerleave.uk.dropdown' : function ( e , dropdown ) {
$this . pointerleave = true ;
}
} ) ;
this . overlay . on ( {
'mouseenter' : function ( ) {
if ( $this . remainIdle ) {
clearTimeout ( $this . dropdown . remainIdle ) ;
clearTimeout ( $this . remainIdle ) ;
}
} ,
'mouseleave' : function ( ) {
if ( $this . pointerleave && active ) {
$this . remainIdle = setTimeout ( function ( ) {
if ( active ) active . hide ( ) ;
} , active . options . remaintime ) ;
}
}
} )
2016-01-30 20:28:43 +00:00
}
} ) ;
2016-03-19 01:51:35 +00:00
function justify ( ele , justifyTo , boundarywidth , offset ) {
ele = UI . $ ( ele ) ;
justifyTo = UI . $ ( justifyTo ) ;
boundarywidth = boundarywidth || window . innerWidth ;
offset = offset || ele . offset ( ) ;
if ( justifyTo . length ) {
var jwidth = justifyTo . outerWidth ( ) ;
ele . css ( "min-width" , jwidth ) ;
if ( UI . langdirection == 'right' ) {
var right1 = boundarywidth - ( justifyTo . offset ( ) . left + jwidth ) ,
right2 = boundarywidth - ( ele . offset ( ) . left + ele . outerWidth ( ) ) ;
ele . css ( "margin-right" , right1 - right2 ) ;
} else {
ele . css ( "margin-left" , justifyTo . offset ( ) . left - offset . left ) ;
}
}
}
2016-01-30 20:28:43 +00:00
} ) ( UIkit ) ;
( function ( UI ) {
"use strict" ;
var grids = [ ] ;
UI . component ( 'gridMatchHeight' , {
defaults : {
"target" : false ,
"row" : true ,
"ignorestacked" : false
} ,
boot : function ( ) {
// init code
UI . ready ( function ( context ) {
UI . $ ( "[data-uk-grid-match]" , context ) . each ( function ( ) {
var grid = UI . $ ( this ) , obj ;
if ( ! grid . data ( "gridMatchHeight" ) ) {
obj = UI . gridMatchHeight ( grid , UI . Utils . options ( grid . attr ( "data-uk-grid-match" ) ) ) ;
}
} ) ;
} ) ;
} ,
init : function ( ) {
var $this = this ;
this . columns = this . element . children ( ) ;
this . elements = this . options . target ? this . find ( this . options . target ) : this . columns ;
if ( ! this . columns . length ) return ;
UI . $win . on ( 'load resize orientationchange' , ( function ( ) {
var fn = function ( ) {
$this . match ( ) ;
} ;
UI . $ ( function ( ) { fn ( ) ; } ) ;
return UI . Utils . debounce ( fn , 50 ) ;
} ) ( ) ) ;
UI . $html . on ( "changed.uk.dom" , function ( e ) {
$this . columns = $this . element . children ( ) ;
$this . elements = $this . options . target ? $this . find ( $this . options . target ) : $this . columns ;
$this . match ( ) ;
} ) ;
this . on ( "display.uk.check" , function ( e ) {
if ( this . element . is ( ":visible" ) ) this . match ( ) ;
} . bind ( this ) ) ;
grids . push ( this ) ;
} ,
match : function ( ) {
var firstvisible = this . columns . filter ( ":visible:first" ) ;
if ( ! firstvisible . length ) return ;
var stacked = Math . ceil ( 100 * parseFloat ( firstvisible . css ( 'width' ) ) / parseFloat ( firstvisible . parent ( ) . css ( 'width' ) ) ) >= 100 ;
if ( stacked && ! this . options . ignorestacked ) {
this . revert ( ) ;
} else {
UI . Utils . matchHeights ( this . elements , this . options ) ;
}
return this ;
} ,
revert : function ( ) {
this . elements . css ( 'min-height' , '' ) ;
return this ;
}
} ) ;
UI . component ( 'gridMargin' , {
defaults : {
2016-03-19 01:51:35 +00:00
cls : 'uk-grid-margin' ,
rowfirst : 'uk-row-first'
2016-01-30 20:28:43 +00:00
} ,
boot : function ( ) {
// init code
UI . ready ( function ( context ) {
UI . $ ( "[data-uk-grid-margin]" , context ) . each ( function ( ) {
var grid = UI . $ ( this ) , obj ;
if ( ! grid . data ( "gridMargin" ) ) {
obj = UI . gridMargin ( grid , UI . Utils . options ( grid . attr ( "data-uk-grid-margin" ) ) ) ;
}
} ) ;
} ) ;
} ,
init : function ( ) {
var stackMargin = UI . stackMargin ( this . element , this . options ) ;
}
} ) ;
} ) ( UIkit ) ;
( function ( UI ) {
"use strict" ;
var active = false , activeCount = 0 , $html = UI . $html , body ;
UI . component ( 'modal' , {
defaults : {
keyboard : true ,
bgclose : true ,
minScrollHeight : 150 ,
center : false ,
modal : true
} ,
scrollable : false ,
transition : false ,
2016-03-19 01:51:35 +00:00
hasTransitioned : true ,
2016-01-30 20:28:43 +00:00
init : function ( ) {
if ( ! body ) body = UI . $ ( 'body' ) ;
if ( ! this . element . length ) return ;
var $this = this ;
this . paddingdir = "padding-" + ( UI . langdirection == 'left' ? "right" : "left" ) ;
this . dialog = this . find ( ".uk-modal-dialog" ) ;
this . active = false ;
// Update ARIA
this . element . attr ( 'aria-hidden' , this . element . hasClass ( "uk-open" ) ) ;
this . on ( "click" , ".uk-modal-close" , function ( e ) {
e . preventDefault ( ) ;
$this . hide ( ) ;
} ) . on ( "click" , function ( e ) {
var target = UI . $ ( e . target ) ;
if ( target [ 0 ] == $this . element [ 0 ] && $this . options . bgclose ) {
$this . hide ( ) ;
}
} ) ;
} ,
toggle : function ( ) {
return this [ this . isActive ( ) ? "hide" : "show" ] ( ) ;
} ,
show : function ( ) {
if ( ! this . element . length ) return ;
var $this = this ;
if ( this . isActive ( ) ) return ;
if ( this . options . modal && active ) {
active . hide ( true ) ;
}
this . element . removeClass ( "uk-open" ) . show ( ) ;
this . resize ( ) ;
if ( this . options . modal ) {
active = this ;
}
this . active = true ;
activeCount ++ ;
2016-03-19 01:51:35 +00:00
if ( UI . support . transition ) {
this . hasTransitioned = false ;
this . element . one ( UI . support . transition . end , function ( ) {
$this . hasTransitioned = true ;
} ) . addClass ( "uk-open" ) ;
} else {
this . element . addClass ( "uk-open" ) ;
}
2016-01-30 20:28:43 +00:00
$html . addClass ( "uk-modal-page" ) . height ( ) ; // force browser engine redraw
// Update ARIA
this . element . attr ( 'aria-hidden' , 'false' ) ;
this . element . trigger ( "show.uk.modal" ) ;
UI . Utils . checkDisplay ( this . dialog , true ) ;
return this ;
} ,
hide : function ( force ) {
2016-03-19 01:51:35 +00:00
if ( ! force && UI . support . transition && this . hasTransitioned ) {
2016-01-30 20:28:43 +00:00
var $this = this ;
this . one ( UI . support . transition . end , function ( ) {
$this . _hide ( ) ;
} ) . removeClass ( "uk-open" ) ;
} else {
this . _hide ( ) ;
}
return this ;
} ,
resize : function ( ) {
var bodywidth = body . width ( ) ;
this . scrollbarwidth = window . innerWidth - bodywidth ;
body . css ( this . paddingdir , this . scrollbarwidth ) ;
this . element . css ( 'overflow-y' , this . scrollbarwidth ? 'scroll' : 'auto' ) ;
if ( ! this . updateScrollable ( ) && this . options . center ) {
var dh = this . dialog . outerHeight ( ) ,
pad = parseInt ( this . dialog . css ( 'margin-top' ) , 10 ) + parseInt ( this . dialog . css ( 'margin-bottom' ) , 10 ) ;
if ( ( dh + pad ) < window . innerHeight ) {
this . dialog . css ( { 'top' : ( window . innerHeight / 2 - dh / 2 ) - pad } ) ;
} else {
this . dialog . css ( { 'top' : '' } ) ;
}
}
} ,
updateScrollable : function ( ) {
// has scrollable?
var scrollable = this . dialog . find ( '.uk-overflow-container:visible:first' ) ;
if ( scrollable . length ) {
2016-03-19 01:51:35 +00:00
scrollable . css ( 'height' , 0 ) ;
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
var offset = Math . abs ( parseInt ( this . dialog . css ( 'margin-top' ) , 10 ) ) ,
2016-01-30 20:28:43 +00:00
dh = this . dialog . outerHeight ( ) ,
wh = window . innerHeight ,
h = wh - 2 * ( offset < 20 ? 20 : offset ) - dh ;
2016-03-19 01:51:35 +00:00
scrollable . css ( {
'max-height' : ( h < this . options . minScrollHeight ? '' : h ) ,
'height' : ''
} ) ;
2016-01-30 20:28:43 +00:00
return true ;
}
return false ;
} ,
_hide : function ( ) {
this . active = false ;
2016-03-19 01:51:35 +00:00
if ( activeCount > 0 ) activeCount -- ;
else activeCount = 0 ;
2016-01-30 20:28:43 +00:00
2016-03-19 01:51:35 +00:00
this . element . hide ( ) . removeClass ( 'uk-open' ) ;
2016-01-30 20:28:43 +00:00
// Update ARIA
this . element . attr ( 'aria-hidden' , 'true' ) ;
if ( ! activeCount ) {
2016-03-19 01:51:35 +00:00
$html . removeClass ( 'uk-modal-page' ) ;
2016-01-30 20:28:43 +00:00
body . css ( this . paddingdir , "" ) ;
}
if ( active === this ) active = false ;
2016-03-19 01:51:35 +00:00
this . trigger ( 'hide.uk.modal' ) ;
2016-01-30 20:28:43 +00:00
} ,
isActive : function ( ) {
return this . active ;
}
} ) ;
UI . component ( 'modalTrigger' , {
boot : function ( ) {
// init code
UI . $html . on ( "click.modal.uikit" , "[data-uk-modal]" , function ( e ) {
var ele = UI . $ ( this ) ;
if ( ele . is ( "a" ) ) {
e . preventDefault ( ) ;
}
if ( ! ele . data ( "modalTrigger" ) ) {
var modal = UI . modalTrigger ( ele , UI . Utils . options ( ele . attr ( "data-uk-modal" ) ) ) ;
modal . show ( ) ;
}
} ) ;
// close modal on esc button
UI . $html . on ( 'keydown.modal.uikit' , function ( e ) {
if ( active && e . keyCode === 27 && active . options . keyboard ) { // ESC
e . preventDefault ( ) ;
active . hide ( ) ;
}
} ) ;
UI . $win . on ( "resize orientationchange" , UI . Utils . debounce ( function ( ) {
if ( active ) active . resize ( ) ;
} , 150 ) ) ;
} ,
init : function ( ) {
var $this = this ;
this . options = UI . $ . extend ( {
"target" : $this . element . is ( "a" ) ? $this . element . attr ( "href" ) : false
} , this . options ) ;
this . modal = UI . modal ( this . options . target , this . options ) ;
this . on ( "click" , function ( e ) {
e . preventDefault ( ) ;
$this . show ( ) ;
} ) ;
//methods
this . proxy ( this . modal , "show hide isActive" ) ;
}
} ) ;
UI . modal . dialog = function ( content , options ) {
var modal = UI . modal ( UI . $ ( UI . modal . dialog . template ) . appendTo ( "body" ) , options ) ;
modal . on ( "hide.uk.modal" , function ( ) {
if ( modal . persist ) {
modal . persist . appendTo ( modal . persist . data ( "modalPersistParent" ) ) ;
modal . persist = false ;
}
modal . element . remove ( ) ;
} ) ;
setContent ( content , modal ) ;
return modal ;
} ;
UI . modal . dialog . template = '<div class="uk-modal"><div class="uk-modal-dialog" style="min-height:0;"></div></div>' ;
UI . modal . alert = function ( content , options ) {
options = UI . $ . extend ( true , { bgclose : false , keyboard : false , modal : false , labels : UI . modal . labels } , options ) ;
var modal = UI . modal . dialog ( ( [
'<div class="uk-margin uk-modal-content">' + String ( content ) + '</div>' ,
'<div class="uk-modal-footer uk-text-right"><button class="uk-button uk-button-primary uk-modal-close">' + options . labels . Ok + '</button></div>'
] ) . join ( "" ) , options ) ;
modal . on ( 'show.uk.modal' , function ( ) {
setTimeout ( function ( ) {
modal . element . find ( 'button:first' ) . focus ( ) ;
} , 50 ) ;
} ) ;
2016-03-19 01:51:35 +00:00
return modal . show ( ) ;
2016-01-30 20:28:43 +00:00
} ;
2016-03-19 01:51:35 +00:00
UI . modal . confirm = function ( content , onconfirm , oncancel ) {
var options = arguments . length > 1 && arguments [ arguments . length - 1 ] ? arguments [ arguments . length - 1 ] : { } ;
2016-01-30 20:28:43 +00:00
onconfirm = UI . $ . isFunction ( onconfirm ) ? onconfirm : function ( ) { } ;
2016-03-19 01:51:35 +00:00
oncancel = UI . $ . isFunction ( oncancel ) ? oncancel : function ( ) { } ;
options = UI . $ . extend ( true , { bgclose : false , keyboard : false , modal : false , labels : UI . modal . labels } , UI . $ . isFunction ( options ) ? { } : options ) ;
2016-01-30 20:28:43 +00:00
var modal = UI . modal . dialog ( ( [
'<div class="uk-margin uk-modal-content">' + String ( content ) + '</div>' ,
2016-03-19 01:51:35 +00:00
'<div class="uk-modal-footer uk-text-right"><button class="uk-button js-modal-confirm-cancel">' + options . labels . Cancel + '</button> <button class="uk-button uk-button-primary js-modal-confirm">' + options . labels . Ok + '</button></div>'
2016-01-30 20:28:43 +00:00
] ) . join ( "" ) , options ) ;
2016-03-19 01:51:35 +00:00
modal . element . find ( ".js-modal-confirm, .js-modal-confirm-cancel" ) . on ( "click" , function ( ) {
UI . $ ( this ) . is ( '.js-modal-confirm' ) ? onconfirm ( ) : oncancel ( ) ;
2016-01-30 20:28:43 +00:00
modal . hide ( ) ;
} ) ;
modal . on ( 'show.uk.modal' , function ( ) {
setTimeout ( function ( ) {
2016-03-19 01:51:35 +00:00
modal . element . find ( '.js-modal-confirm' ) . focus ( ) ;
2016-01-30 20:28:43 +00:00
} , 50 ) ;
} ) ;
2016-03-19 01:51:35 +00:00
return modal . show ( ) ;
2016-01-30 20:28:43 +00:00
} ;
UI . modal . prompt = function ( text , value , onsubmit , options ) {
onsubmit = UI . $ . isFunction ( onsubmit ) ? onsubmit : function ( value ) { } ;
options = UI . $ . extend ( true , { bgclose : false , keyboard : false , modal : false , labels : UI . modal . labels } , options ) ;
var modal = UI . modal . dialog ( ( [
text ? '<div class="uk-modal-content uk-form">' + String ( text ) + '</div>' : '' ,
'<div class="uk-margin-small-top uk-modal-content uk-form"><p><input type="text" class="uk-width-1-1"></p></div>' ,
2016-03-19 01:51:35 +00:00
'<div class="uk-modal-footer uk-text-right"><button class="uk-button uk-modal-close">' + options . labels . Cancel + '</button> <button class="uk-button uk-button-primary js-modal-ok">' + options . labels . Ok + '</button></div>'
2016-01-30 20:28:43 +00:00
] ) . join ( "" ) , options ) ,
input = modal . element . find ( "input[type='text']" ) . val ( value || '' ) . on ( 'keyup' , function ( e ) {
if ( e . keyCode == 13 ) {
modal . element . find ( ".js-modal-ok" ) . trigger ( 'click' ) ;
}
} ) ;
modal . element . find ( ".js-modal-ok" ) . on ( "click" , function ( ) {
if ( onsubmit ( input . val ( ) ) !== false ) {
modal . hide ( ) ;
}
} ) ;
modal . on ( 'show.uk.modal' , function ( ) {
setTimeout ( function ( ) {
input . focus ( ) ;
} , 50 ) ;
} ) ;
2016-03-19 01:51:35 +00:00
return modal . show ( ) ;
2016-01-30 20:28:43 +00:00
} ;
UI . modal . blockUI = function ( content , options ) {
var modal = UI . modal . dialog ( ( [
'<div class="uk-margin uk-modal-content">' + String ( content || '<div class="uk-text-center">...</div>' ) + '</div>'
] ) . join ( "" ) , UI . $ . extend ( { bgclose : false , keyboard : false , modal : false } , options ) ) ;
modal . content = modal . element . find ( '.uk-modal-content:first' ) ;
2016-03-19 01:51:35 +00:00
return modal . show ( ) ;
2016-01-30 20:28:43 +00:00
} ;
UI . modal . labels = {
'Ok' : 'Ok' ,
'Cancel' : 'Cancel'
} ;
// helper functions
function setContent ( content , modal ) {
if ( ! modal ) return ;
if ( typeof content === 'object' ) {
// convert DOM object to a jQuery object
content = content instanceof jQuery ? content : UI . $ ( content ) ;
if ( content . parent ( ) . length ) {
modal . persist = content ;
modal . persist . data ( "modalPersistParent" , content . parent ( ) ) ;
}
} else if ( typeof content === 'string' || typeof content === 'number' ) {
// just insert the data as innerHTML
content = UI . $ ( '<div></div>' ) . html ( content ) ;
} else {
// unsupported data type!
content = UI . $ ( '<div></div>' ) . html ( 'UIkit.modal Error: Unsupported data type: ' + typeof content ) ;
}
content . appendTo ( modal . element . find ( '.uk-modal-dialog' ) ) ;
return modal ;
}
} ) ( UIkit ) ;
( function ( UI ) {
"use strict" ;
UI . component ( 'nav' , {
defaults : {
"toggle" : ">li.uk-parent > a[href='#']" ,
"lists" : ">li.uk-parent > ul" ,
"multiple" : false
} ,
boot : function ( ) {
// init code
UI . ready ( function ( context ) {
UI . $ ( "[data-uk-nav]" , context ) . each ( function ( ) {
var nav = UI . $ ( this ) ;
if ( ! nav . data ( "nav" ) ) {
var obj = UI . nav ( nav , UI . Utils . options ( nav . attr ( "data-uk-nav" ) ) ) ;
}
} ) ;
} ) ;
} ,
init : function ( ) {
var $this = this ;
2016-03-19 01:51:35 +00:00
this . on ( "click.uk.nav" , this . options . toggle , function ( e ) {
2016-01-30 20:28:43 +00:00
e . preventDefault ( ) ;
var ele = UI . $ ( this ) ;
$this . open ( ele . parent ( ) [ 0 ] == $this . element [ 0 ] ? ele : ele . parent ( "li" ) ) ;
} ) ;
this . find ( this . options . lists ) . each ( function ( ) {
var $ele = UI . $ ( this ) ,
parent = $ele . parent ( ) ,
active = parent . hasClass ( "uk-active" ) ;
$ele . wrap ( '<div style="overflow:hidden;height:0;position:relative;"></div>' ) ;
parent . data ( "list-container" , $ele . parent ( ) [ active ? 'removeClass' : 'addClass' ] ( 'uk-hidden' ) ) ;
// Init ARIA
parent . attr ( 'aria-expanded' , parent . hasClass ( "uk-open" ) ) ;
if ( active ) $this . open ( parent , true ) ;
} ) ;
} ,
open : function ( li , noanimation ) {
var $this = this , element = this . element , $li = UI . $ ( li ) , $container = $li . data ( 'list-container' ) ;
if ( ! this . options . multiple ) {
element . children ( '.uk-open' ) . not ( li ) . each ( function ( ) {
var ele = UI . $ ( this ) ;
if ( ele . data ( 'list-container' ) ) {
ele . data ( 'list-container' ) . stop ( ) . animate ( { height : 0 } , function ( ) {
UI . $ ( this ) . parent ( ) . removeClass ( 'uk-open' ) . end ( ) . addClass ( 'uk-hidden' ) ;
} ) ;
}
} ) ;
}
$li . toggleClass ( 'uk-open' ) ;
// Update ARIA
$li . attr ( 'aria-expanded' , $li . hasClass ( 'uk-open' ) ) ;
if ( $container ) {
if ( $li . hasClass ( 'uk-open' ) ) {
$container . removeClass ( 'uk-hidden' ) ;
}
if ( noanimation ) {
$container . stop ( ) . height ( $li . hasClass ( 'uk-open' ) ? 'auto' : 0 ) ;
if ( ! $li . hasClass ( 'uk-open' ) ) {
$container . addClass ( 'uk-hidden' ) ;
}
this . trigger ( 'display.uk.check' ) ;
} else {
$container . stop ( ) . animate ( {
height : ( $li . hasClass ( 'uk-open' ) ? getHeight ( $container . find ( 'ul:first' ) ) : 0 )
} , function ( ) {
if ( ! $li . hasClass ( 'uk-open' ) ) {
$container . addClass ( 'uk-hidden' ) ;
} else {
$container . css ( 'height' , '' ) ;
}
$this . trigger ( 'display.uk.check' ) ;
} ) ;
}
}
}
} ) ;
// helper
function getHeight ( ele ) {
var $ele = UI . $ ( ele ) , height = "auto" ;
if ( $ele . is ( ":visible" ) ) {
height = $ele . outerHeight ( ) ;
} else {
var tmp = {
position : $ele . css ( "position" ) ,
visibility : $ele . css ( "visibility" ) ,
display : $ele . css ( "display" )
} ;
height = $ele . css ( { position : 'absolute' , visibility : 'hidden' , display : 'block' } ) . outerHeight ( ) ;
$ele . css ( tmp ) ; // reset element
}
return height ;
}
} ) ( UIkit ) ;
( function ( UI ) {
"use strict" ;
var scrollpos = { x : window . scrollX , y : window . scrollY } ,
$win = UI . $win ,
$doc = UI . $doc ,
$html = UI . $html ,
Offcanvas = {
show : function ( element ) {
element = UI . $ ( element ) ;
if ( ! element . length ) return ;
var $body = UI . $ ( 'body' ) ,
bar = element . find ( ".uk-offcanvas-bar:first" ) ,
rtl = ( UI . langdirection == "right" ) ,
flip = bar . hasClass ( "uk-offcanvas-bar-flip" ) ? - 1 : 1 ,
2016-03-19 01:51:35 +00:00
dir = flip * ( rtl ? - 1 : 1 ) ,
scrollbarwidth = window . innerWidth - $body . width ( ) ;
2016-01-30 20:28:43 +00:00
scrollpos = { x : window . pageXOffset , y : window . pageYOffset } ;
element . addClass ( "uk-active" ) ;
2016-03-19 01:51:35 +00:00
$body . css ( { "width" : window . innerWidth - scrollbarwidth , "height" : window . innerHeight } ) . addClass ( "uk-offcanvas-page" ) ;
2016-01-30 20:28:43 +00:00
$body . css ( ( rtl ? "margin-right" : "margin-left" ) , ( rtl ? - 1 : 1 ) * ( bar . outerWidth ( ) * dir ) ) . width ( ) ; // .width() - force redraw
$html . css ( 'margin-top' , scrollpos . y * - 1 ) ;
bar . addClass ( "uk-offcanvas-bar-show" ) ;
this . _initElement ( element ) ;
bar . trigger ( 'show.uk.offcanvas' , [ element , bar ] ) ;
// Update ARIA
element . attr ( 'aria-hidden' , 'false' ) ;
} ,
hide : function ( force ) {
var $body = UI . $ ( 'body' ) ,
panel = UI . $ ( ".uk-offcanvas.uk-active" ) ,
rtl = ( UI . langdirection == "right" ) ,
bar = panel . find ( ".uk-offcanvas-bar:first" ) ,
finalize = function ( ) {
$body . removeClass ( "uk-offcanvas-page" ) . css ( { "width" : "" , "height" : "" , "margin-left" : "" , "margin-right" : "" } ) ;
panel . removeClass ( "uk-active" ) ;
bar . removeClass ( "uk-offcanvas-bar-show" ) ;
$html . css ( 'margin-top' , '' ) ;
window . scrollTo ( scrollpos . x , scrollpos . y ) ;
bar . trigger ( 'hide.uk.offcanvas' , [ panel , bar ] ) ;
// Update ARIA
panel . attr ( 'aria-hidden' , 'true' ) ;
} ;
if ( ! panel . length ) return ;
if ( UI . support . transition && ! force ) {
$body . one ( UI . support . transition . end , function ( ) {
finalize ( ) ;
} ) . css ( ( rtl ? "margin-right" : "margin-left" ) , "" ) ;
setTimeout ( function ( ) {
bar . removeClass ( "uk-offcanvas-bar-show" ) ;
} , 0 ) ;
} else {
finalize ( ) ;
}
} ,
_initElement : function ( element ) {
if ( element . data ( "OffcanvasInit" ) ) return ;
element . on ( "click.uk.offcanvas swipeRight.uk.offcanvas swipeLeft.uk.offcanvas" , function ( e ) {
var target = UI . $ ( e . target ) ;
if ( ! e . type . match ( /swipe/ ) ) {
if ( ! target . hasClass ( "uk-offcanvas-close" ) ) {
if ( target . hasClass ( "uk-offcanvas-bar" ) ) return ;
if ( target . parents ( ".uk-offcanvas-bar:first" ) . length ) return ;
}
}
e . stopImmediatePropagation ( ) ;
Offcanvas . hide ( ) ;
} ) ;
2016-03-19 01:51:35 +00:00
element . on ( "click" , "a[href*='#']" , function ( e ) {
2016-01-30 20:28:43 +00:00
var link = UI . $ ( this ) ,
href = link . attr ( "href" ) ;
if ( href == "#" ) {
return ;
}
UI . $doc . one ( 'hide.uk.offcanvas' , function ( ) {
var target ;
try {
2016-03-19 01:51:35 +00:00
target = UI . $ ( link [ 0 ] . hash ) ;
2016-01-30 20:28:43 +00:00
} catch ( e ) {
2016-03-19 01:51:35 +00:00
target = '' ;
2016-01-30 20:28:43 +00:00
}
if ( ! target . length ) {
2016-03-19 01:51:35 +00:00
target = UI . $ ( '[name="' + link [ 0 ] . hash . replace ( '#' , '' ) + '"]' ) ;
2016-01-30 20:28:43 +00:00
}
2016-03-19 01:51:35 +00:00
if ( target . length && UI . Utils . scrollToElement ) {
2016-01-30 20:28:43 +00:00
UI . Utils . scrollToElement ( target , UI . Utils . options ( link . attr ( 'data-uk-smooth-scroll' ) || '{}' ) ) ;
} else {
window . location . href = href ;
}
} ) ;
Offcanvas . hide ( ) ;
} ) ;
element . data ( "OffcanvasInit" , true ) ;
}
} ;
UI . component ( 'offcanvasTrigger' , {
boot : function ( ) {
// init code
$html . on ( "click.offcanvas.uikit" , "[data-uk-offcanvas]" , function ( e ) {
e . preventDefault ( ) ;
var ele = UI . $ ( this ) ;
if ( ! ele . data ( "offcanvasTrigger" ) ) {
var obj = UI . offcanvasTrigger ( ele , UI . Utils . options ( ele . attr ( "data-uk-offcanvas" ) ) ) ;
ele . trigger ( "click" ) ;
}
} ) ;
$html . on ( 'keydown.uk.offcanvas' , function ( e ) {
if ( e . keyCode === 27 ) { // ESC
Offcanvas . hide ( ) ;
}
} ) ;
} ,
init : function ( ) {
var $this = this ;
this . options = UI . $ . extend ( {
"target" : $this . element . is ( "a" ) ? $this . element . attr ( "href" ) : false
} , this . options ) ;
this . on ( "click" , function ( e ) {
e . preventDefault ( ) ;
Offcanvas . show ( $this . options . target ) ;
} ) ;
}
} ) ;
UI . offcanvas = Offcanvas ;
} ) ( UIkit ) ;
( function ( UI ) {
"use strict" ;
var Animations ;
UI . component ( 'switcher' , {
defaults : {
connect : false ,
toggle : ">*" ,
active : 0 ,
animation : false ,
2016-03-19 01:51:35 +00:00
duration : 200 ,
swiping : true
2016-01-30 20:28:43 +00:00
} ,
animating : false ,
boot : function ( ) {
// init code
UI . ready ( function ( context ) {
UI . $ ( "[data-uk-switcher]" , context ) . each ( function ( ) {
var switcher = UI . $ ( this ) ;
if ( ! switcher . data ( "switcher" ) ) {
var obj = UI . switcher ( switcher , UI . Utils . options ( switcher . attr ( "data-uk-switcher" ) ) ) ;
}
} ) ;
} ) ;
} ,
init : function ( ) {
var $this = this ;
2016-03-19 01:51:35 +00:00
this . on ( "click.uk.switcher" , this . options . toggle , function ( e ) {
2016-01-30 20:28:43 +00:00
e . preventDefault ( ) ;
$this . show ( this ) ;
} ) ;
if ( this . options . connect ) {
this . connect = UI . $ ( this . options . connect ) ;
this . connect . find ( ".uk-active" ) . removeClass ( ".uk-active" ) ;
// delegate switch commands within container content
if ( this . connect . length ) {
// Init ARIA for connect
this . connect . children ( ) . attr ( 'aria-hidden' , 'true' ) ;
this . connect . on ( "click" , '[data-uk-switcher-item]' , function ( e ) {
e . preventDefault ( ) ;
var item = UI . $ ( this ) . attr ( 'data-uk-switcher-item' ) ;
if ( $this . index == item ) return ;
switch ( item ) {
case 'next' :
case 'previous' :
$this . show ( $this . index + ( item == 'next' ? 1 : - 1 ) ) ;
break ;
default :
$this . show ( parseInt ( item , 10 ) ) ;
}
} ) ;
2016-03-19 01:51:35 +00:00
if ( this . options . swiping ) {
this . connect . on ( 'swipeRight swipeLeft' , function ( e ) {
e . preventDefault ( ) ;
if ( ! window . getSelection ( ) . toString ( ) ) {
$this . show ( $this . index + ( e . type == 'swipeLeft' ? 1 : - 1 ) ) ;
}
} ) ;
}
2016-01-30 20:28:43 +00:00
}
var toggles = this . find ( this . options . toggle ) ,
active = toggles . filter ( ".uk-active" ) ;
if ( active . length ) {
this . show ( active , false ) ;
} else {
if ( this . options . active === false ) return ;
active = toggles . eq ( this . options . active ) ;
this . show ( active . length ? active : toggles . eq ( 0 ) , false ) ;
}
// Init ARIA for toggles
toggles . not ( active ) . attr ( 'aria-expanded' , 'false' ) ;
active . attr ( 'aria-expanded' , 'true' ) ;
this . on ( 'changed.uk.dom' , function ( ) {
$this . connect = UI . $ ( $this . options . connect ) ;
} ) ;
}
} ,
show : function ( tab , animate ) {
if ( this . animating ) {
return ;
}
if ( isNaN ( tab ) ) {
tab = UI . $ ( tab ) ;
} else {
var toggles = this . find ( this . options . toggle ) ;
tab = tab < 0 ? toggles . length - 1 : tab ;
tab = toggles . eq ( toggles [ tab ] ? tab : 0 ) ;
}
var $this = this ,
toggles = this . find ( this . options . toggle ) ,
active = UI . $ ( tab ) ,
animation = Animations [ this . options . animation ] || function ( current , next ) {
if ( ! $this . options . animation ) {
return Animations . none . apply ( $this ) ;
}
var anim = $this . options . animation . split ( ',' ) ;
if ( anim . length == 1 ) {
anim [ 1 ] = anim [ 0 ] ;
}
anim [ 0 ] = anim [ 0 ] . trim ( ) ;
anim [ 1 ] = anim [ 1 ] . trim ( ) ;
return coreAnimation . apply ( $this , [ anim , current , next ] ) ;
} ;
if ( animate === false || ! UI . support . animation ) {
animation = Animations . none ;
}
if ( active . hasClass ( "uk-disabled" ) ) return ;
// Update ARIA for Toggles
toggles . attr ( 'aria-expanded' , 'false' ) ;
active . attr ( 'aria-expanded' , 'true' ) ;
toggles . filter ( ".uk-active" ) . removeClass ( "uk-active" ) ;
active . addClass ( "uk-active" ) ;
if ( this . options . connect && this . connect . length ) {
this . index = this . find ( this . options . toggle ) . index ( active ) ;
if ( this . index == - 1 ) {
this . index = 0 ;
}
this . connect . each ( function ( ) {
var container = UI . $ ( this ) ,
children = UI . $ ( container . children ( ) ) ,
current = UI . $ ( children . filter ( '.uk-active' ) ) ,
next = UI . $ ( children . eq ( $this . index ) ) ;
$this . animating = true ;
animation . apply ( $this , [ current , next ] ) . then ( function ( ) {
current . removeClass ( "uk-active" ) ;
next . addClass ( "uk-active" ) ;
// Update ARIA for connect
current . attr ( 'aria-hidden' , 'true' ) ;
next . attr ( 'aria-hidden' , 'false' ) ;
UI . Utils . checkDisplay ( next , true ) ;
$this . animating = false ;
2016-03-19 01:51:35 +00:00
2016-01-30 20:28:43 +00:00
} ) ;
} ) ;
}
this . trigger ( "show.uk.switcher" , [ active ] ) ;
}
} ) ;
Animations = {
'none' : function ( ) {
var d = UI . $ . Deferred ( ) ;
d . resolve ( ) ;
return d . promise ( ) ;
} ,
'fade' : function ( current , next ) {
return coreAnimation . apply ( this , [ 'uk-animation-fade' , current , next ] ) ;
} ,
'slide-bottom' : function ( current , next ) {
return coreAnimation . apply ( this , [ 'uk-animation-slide-bottom' , current , next ] ) ;
} ,
'slide-top' : function ( current , next ) {
return coreAnimation . apply ( this , [ 'uk-animation-slide-top' , current , next ] ) ;
} ,
'slide-vertical' : function ( current , next , dir ) {
var anim = [ 'uk-animation-slide-top' , 'uk-animation-slide-bottom' ] ;
if ( current && current . index ( ) > next . index ( ) ) {
anim . reverse ( ) ;
}
return coreAnimation . apply ( this , [ anim , current , next ] ) ;
} ,
'slide-left' : function ( current , next ) {
return coreAnimation . apply ( this , [ 'uk-animation-slide-left' , current , next ] ) ;
} ,
'slide-right' : function ( current , next ) {
return coreAnimation . apply ( this , [ 'uk-animation-slide-right' , current , next ] ) ;
} ,
'slide-horizontal' : function ( current , next , dir ) {
var anim = [ 'uk-animation-slide-right' , 'uk-animation-slide-left' ] ;
if ( current && current . index ( ) > next . index ( ) ) {
anim . reverse ( ) ;
}
return coreAnimation . apply ( this , [ anim , current , next ] ) ;
} ,
'scale' : function ( current , next ) {
return coreAnimation . apply ( this , [ 'uk-animation-scale-up' , current , next ] ) ;
}
} ;
UI . switcher . animations = Animations ;
// helpers
function coreAnimation ( cls , current , next ) {
var d = UI . $ . Deferred ( ) , clsIn = cls , clsOut = cls , release ;
if ( next [ 0 ] === current [ 0 ] ) {
d . resolve ( ) ;
return d . promise ( ) ;
}
if ( typeof ( cls ) == 'object' ) {
clsIn = cls [ 0 ] ;
clsOut = cls [ 1 ] || cls [ 0 ] ;
}
2016-03-19 01:51:35 +00:00
UI . $body . css ( 'overflow-x' , 'hidden' ) ; // fix scroll jumping in iOS
2016-01-30 20:28:43 +00:00
release = function ( ) {
if ( current ) current . hide ( ) . removeClass ( 'uk-active ' + clsOut + ' uk-animation-reverse' ) ;
next . addClass ( clsIn ) . one ( UI . support . animation . end , function ( ) {
next . removeClass ( '' + clsIn + '' ) . css ( { opacity : '' , display : '' } ) ;
d . resolve ( ) ;
2016-03-19 01:51:35 +00:00
UI . $body . css ( 'overflow-x' , '' ) ;
2016-01-30 20:28:43 +00:00
if ( current ) current . css ( { opacity : '' , display : '' } ) ;
} . bind ( this ) ) . show ( ) ;
} ;
next . css ( 'animation-duration' , this . options . duration + 'ms' ) ;
if ( current && current . length ) {
current . css ( 'animation-duration' , this . options . duration + 'ms' ) ;
current . css ( 'display' , 'none' ) . addClass ( clsOut + ' uk-animation-reverse' ) . one ( UI . support . animation . end , function ( ) {
release ( ) ;
} . bind ( this ) ) . css ( 'display' , '' ) ;
} else {
next . addClass ( 'uk-active' ) ;
release ( ) ;
}
return d . promise ( ) ;
}
} ) ( UIkit ) ;
( function ( UI ) {
"use strict" ;
UI . component ( 'tab' , {
defaults : {
'target' : '>li:not(.uk-tab-responsive, .uk-disabled)' ,
'connect' : false ,
'active' : 0 ,
'animation' : false ,
2016-03-19 01:51:35 +00:00
'duration' : 200 ,
'swiping' : true
2016-01-30 20:28:43 +00:00
} ,
boot : function ( ) {
// init code
UI . ready ( function ( context ) {
UI . $ ( "[data-uk-tab]" , context ) . each ( function ( ) {
var tab = UI . $ ( this ) ;
if ( ! tab . data ( "tab" ) ) {
var obj = UI . tab ( tab , UI . Utils . options ( tab . attr ( "data-uk-tab" ) ) ) ;
}
} ) ;
} ) ;
} ,
init : function ( ) {
var $this = this ;
this . current = false ;
2016-03-19 01:51:35 +00:00
this . on ( "click.uk.tab" , this . options . target , function ( e ) {
2016-01-30 20:28:43 +00:00
e . preventDefault ( ) ;
if ( $this . switcher && $this . switcher . animating ) {
return ;
}
var current = $this . find ( $this . options . target ) . not ( this ) ;
current . removeClass ( "uk-active" ) . blur ( ) ;
$this . trigger ( "change.uk.tab" , [ UI . $ ( this ) . addClass ( "uk-active" ) , $this . current ] ) ;
$this . current = UI . $ ( this ) ;
// Update ARIA
if ( ! $this . options . connect ) {
current . attr ( 'aria-expanded' , 'false' ) ;
UI . $ ( this ) . attr ( 'aria-expanded' , 'true' ) ;
}
} ) ;
if ( this . options . connect ) {
this . connect = UI . $ ( this . options . connect ) ;
}
// init responsive tab
this . responsivetab = UI . $ ( '<li class="uk-tab-responsive uk-active"><a></a></li>' ) . append ( '<div class="uk-dropdown uk-dropdown-small"><ul class="uk-nav uk-nav-dropdown"></ul><div>' ) ;
this . responsivetab . dropdown = this . responsivetab . find ( '.uk-dropdown' ) ;
this . responsivetab . lst = this . responsivetab . dropdown . find ( 'ul' ) ;
this . responsivetab . caption = this . responsivetab . find ( 'a:first' ) ;
if ( this . element . hasClass ( "uk-tab-bottom" ) ) this . responsivetab . dropdown . addClass ( "uk-dropdown-up" ) ;
// handle click
2016-03-19 01:51:35 +00:00
this . responsivetab . lst . on ( 'click.uk.tab' , 'a' , function ( e ) {
2016-01-30 20:28:43 +00:00
e . preventDefault ( ) ;
e . stopPropagation ( ) ;
var link = UI . $ ( this ) ;
$this . element . children ( 'li:not(.uk-tab-responsive)' ) . eq ( link . data ( 'index' ) ) . trigger ( 'click' ) ;
} ) ;
this . on ( 'show.uk.switcher change.uk.tab' , function ( e , tab ) {
$this . responsivetab . caption . html ( tab . text ( ) ) ;
} ) ;
this . element . append ( this . responsivetab ) ;
// init UIkit components
if ( this . options . connect ) {
this . switcher = UI . switcher ( this . element , {
2016-03-19 01:51:35 +00:00
'toggle' : '>li:not(.uk-tab-responsive)' ,
'connect' : this . options . connect ,
'active' : this . options . active ,
'animation' : this . options . animation ,
'duration' : this . options . duration ,
'swiping' : this . options . swiping
2016-01-30 20:28:43 +00:00
} ) ;
}
2016-03-19 01:51:35 +00:00
UI . dropdown ( this . responsivetab , { "mode" : "click" , "preventflip" : "y" } ) ;
2016-01-30 20:28:43 +00:00
// init
$this . trigger ( "change.uk.tab" , [ this . element . find ( this . options . target ) . not ( '.uk-tab-responsive' ) . filter ( '.uk-active' ) ] ) ;
this . check ( ) ;
UI . $win . on ( 'resize orientationchange' , UI . Utils . debounce ( function ( ) {
if ( $this . element . is ( ":visible" ) ) $this . check ( ) ;
} , 100 ) ) ;
this . on ( 'display.uk.check' , function ( ) {
if ( $this . element . is ( ":visible" ) ) $this . check ( ) ;
} ) ;
} ,
check : function ( ) {
var children = this . element . children ( 'li:not(.uk-tab-responsive)' ) . removeClass ( 'uk-hidden' ) ;
if ( ! children . length ) {
this . responsivetab . addClass ( 'uk-hidden' ) ;
return ;
}
var top = ( children . eq ( 0 ) . offset ( ) . top + Math . ceil ( children . eq ( 0 ) . height ( ) / 2 ) ) ,
doresponsive = false ,
item , link , clone ;
this . responsivetab . lst . empty ( ) ;
children . each ( function ( ) {
if ( UI . $ ( this ) . offset ( ) . top > top ) {
doresponsive = true ;
}
} ) ;
if ( doresponsive ) {
for ( var i = 0 ; i < children . length ; i ++ ) {
item = UI . $ ( children . eq ( i ) ) ;
link = item . find ( 'a' ) ;
if ( item . css ( 'float' ) != 'none' && ! item . attr ( 'uk-dropdown' ) ) {
if ( ! item . hasClass ( 'uk-disabled' ) ) {
clone = item [ 0 ] . outerHTML . replace ( '<a ' , '<a data-index="' + i + '" ' ) ;
this . responsivetab . lst . append ( clone ) ;
}
item . addClass ( 'uk-hidden' ) ;
}
}
}
this . responsivetab [ this . responsivetab . lst . children ( 'li' ) . length ? 'removeClass' : 'addClass' ] ( 'uk-hidden' ) ;
}
} ) ;
} ) ( UIkit ) ;
( function ( UI ) {
"use strict" ;
UI . component ( 'cover' , {
defaults : {
automute : true
} ,
boot : function ( ) {
// auto init
UI . ready ( function ( context ) {
UI . $ ( "[data-uk-cover]" , context ) . each ( function ( ) {
var ele = UI . $ ( this ) ;
if ( ! ele . data ( "cover" ) ) {
var plugin = UI . cover ( ele , UI . Utils . options ( ele . attr ( "data-uk-cover" ) ) ) ;
}
} ) ;
} ) ;
} ,
init : function ( ) {
this . parent = this . element . parent ( ) ;
UI . $win . on ( 'load resize orientationchange' , UI . Utils . debounce ( function ( ) {
this . check ( ) ;
} . bind ( this ) , 100 ) ) ;
this . on ( "display.uk.check" , function ( e ) {
if ( this . element . is ( ":visible" ) ) this . check ( ) ;
} . bind ( this ) ) ;
this . check ( ) ;
if ( this . element . is ( 'iframe' ) && this . options . automute ) {
var src = this . element . attr ( 'src' ) ;
this . element . attr ( 'src' , '' ) . on ( 'load' , function ( ) {
this . contentWindow . postMessage ( '{ "event": "command", "func": "mute", "method":"setVolume", "value":0}' , '*' ) ;
} ) . attr ( 'src' , [ src , ( src . indexOf ( '?' ) > - 1 ? '&' : '?' ) , 'enablejsapi=1&api=1' ] . join ( '' ) ) ;
}
} ,
check : function ( ) {
this . element . css ( {
'width' : '' ,
'height' : ''
} ) ;
this . dimension = { w : this . element . width ( ) , h : this . element . height ( ) } ;
if ( this . element . attr ( 'width' ) && ! isNaN ( this . element . attr ( 'width' ) ) ) {
this . dimension . w = this . element . attr ( 'width' ) ;
}
if ( this . element . attr ( 'height' ) && ! isNaN ( this . element . attr ( 'height' ) ) ) {
this . dimension . h = this . element . attr ( 'height' ) ;
}
this . ratio = this . dimension . w / this . dimension . h ;
var w = this . parent . width ( ) , h = this . parent . height ( ) , width , height ;
// if element height < parent height (gap underneath)
if ( ( w / this . ratio ) < h ) {
width = Math . ceil ( h * this . ratio ) ;
height = h ;
// element width < parent width (gap to right)
} else {
width = w ;
height = Math . ceil ( w / this . ratio ) ;
}
this . element . css ( {
'width' : width ,
'height' : height
} ) ;
}
} ) ;
} ) ( UIkit ) ;