2019-04-22 13:31:39 +00:00
/*! UIkit 3.1.2 | http://www.getuikit.com | (c) 2014 - 2018 YOOtheme | MIT License */
2017-11-11 04:33:51 +00:00
( function ( global , factory ) {
2018-09-20 12:35:14 +00:00
typeof exports === 'object' && typeof module !== 'undefined' ? module . exports = factory ( ) :
typeof define === 'function' && define . amd ? define ( 'uikit' , factory ) :
2019-04-22 13:31:39 +00:00
( global = global || self , global . UIkit = factory ( ) ) ;
} ( this , function ( ) { 'use strict' ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function bind ( fn , context ) {
return function ( a ) {
var l = arguments . length ;
return l ? l > 1 ? fn . apply ( context , arguments ) : fn . call ( context , a ) : fn . call ( context ) ;
} ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var objPrototype = Object . prototype ;
var hasOwnProperty = objPrototype . hasOwnProperty ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function hasOwn ( obj , key ) {
return hasOwnProperty . call ( obj , key ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var hyphenateCache = { } ;
var hyphenateRe = /([a-z\d])([A-Z])/g ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function hyphenate ( str ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! ( str in hyphenateCache ) ) {
hyphenateCache [ str ] = str
. replace ( hyphenateRe , '$1-$2' )
. toLowerCase ( ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return hyphenateCache [ str ] ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
var camelizeRe = /-(\w)/g ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function camelize ( str ) {
return str . replace ( camelizeRe , toUpper ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function toUpper ( _ , c ) {
return c ? c . toUpperCase ( ) : '' ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function ucfirst ( str ) {
return str . length ? toUpper ( null , str . charAt ( 0 ) ) + str . slice ( 1 ) : '' ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var strPrototype = String . prototype ;
var startsWithFn = strPrototype . startsWith || function ( search ) { return this . lastIndexOf ( search , 0 ) === 0 ; } ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function startsWith ( str , search ) {
return startsWithFn . call ( str , search ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var endsWithFn = strPrototype . endsWith || function ( search ) { return this . substr ( - search . length ) === search ; } ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function endsWith ( str , search ) {
return endsWithFn . call ( str , search ) ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var arrPrototype = Array . prototype ;
var includesFn = function ( search , i ) { return ~ this . indexOf ( search , i ) ; } ;
2018-09-20 12:35:14 +00:00
var includesStr = strPrototype . includes || includesFn ;
2019-04-22 13:31:39 +00:00
var includesArray = arrPrototype . includes || includesFn ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function includes ( obj , search ) {
return obj && ( isString ( obj ) ? includesStr : includesArray ) . call ( obj , search ) ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var findIndexFn = arrPrototype . findIndex || function ( predicate ) {
var arguments$1 = arguments ;
for ( var i = 0 ; i < this . length ; i ++ ) {
if ( predicate . call ( arguments$1 [ 1 ] , this [ i ] , i , this ) ) {
return i ;
}
}
return - 1 ;
} ;
function findIndex ( array , predicate ) {
return findIndexFn . call ( array , predicate ) ;
}
2018-09-20 12:35:14 +00:00
var isArray = Array . isArray ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function isFunction ( obj ) {
return typeof obj === 'function' ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function isObject ( obj ) {
return obj !== null && typeof obj === 'object' ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function isPlainObject ( obj ) {
return isObject ( obj ) && Object . getPrototypeOf ( obj ) === objPrototype ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function isWindow ( obj ) {
return isObject ( obj ) && obj === obj . window ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
function isDocument ( obj ) {
return isObject ( obj ) && obj . nodeType === 9 ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function isJQuery ( obj ) {
return isObject ( obj ) && ! ! obj . jquery ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function isNode ( obj ) {
return obj instanceof Node || isObject ( obj ) && obj . nodeType >= 1 ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
var toString = objPrototype . toString ;
function isNodeCollection ( obj ) {
return toString . call ( obj ) . match ( /^\[object (NodeList|HTMLCollection)\]$/ ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function isBoolean ( value ) {
return typeof value === 'boolean' ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function isString ( value ) {
return typeof value === 'string' ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function isNumber ( value ) {
return typeof value === 'number' ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function isNumeric ( value ) {
return isNumber ( value ) || isString ( value ) && ! isNaN ( value - parseFloat ( value ) ) ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function isEmpty ( obj ) {
return ! ( isArray ( obj )
? obj . length
: isObject ( obj )
? Object . keys ( obj ) . length
: false
) ;
}
2018-09-20 12:35:14 +00:00
function isUndefined ( value ) {
return value === void 0 ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function toBoolean ( value ) {
return isBoolean ( value )
? value
: value === 'true' || value === '1' || value === ''
? true
: value === 'false' || value === '0'
? false
: value ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function toNumber ( value ) {
var number = Number ( value ) ;
return ! isNaN ( number ) ? number : false ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function toFloat ( value ) {
return parseFloat ( value ) || 0 ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function toNode ( element ) {
return isNode ( element ) || isWindow ( element ) || isDocument ( element )
? element
: isNodeCollection ( element ) || isJQuery ( element )
? element [ 0 ]
: isArray ( element )
? toNode ( element [ 0 ] )
: null ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function toNodes ( element ) {
return isNode ( element )
? [ element ]
: isNodeCollection ( element )
2019-04-22 13:31:39 +00:00
? arrPrototype . slice . call ( element )
2018-09-20 12:35:14 +00:00
: isArray ( element )
? element . map ( toNode ) . filter ( Boolean )
: isJQuery ( element )
? element . toArray ( )
: [ ] ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function toList ( value ) {
return isArray ( value )
? value
: isString ( value )
? value . split ( /,(?![^(]*\))/ ) . map ( function ( value ) { return isNumeric ( value )
? toNumber ( value )
: toBoolean ( value . trim ( ) ) ; } )
: [ value ] ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function toMs ( time ) {
return ! time
? 0
: endsWith ( time , 'ms' )
? toFloat ( time )
: toFloat ( time ) * 1000 ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function isEqual ( value , other ) {
return value === other
|| isObject ( value )
&& isObject ( other )
&& Object . keys ( value ) . length === Object . keys ( other ) . length
&& each ( value , function ( val , key ) { return val === other [ key ] ; } ) ;
}
2018-09-20 12:35:14 +00:00
function swap ( value , a , b ) {
return value . replace ( new RegExp ( ( a + "|" + b ) , 'mg' ) , function ( match ) {
return match === a ? b : a ;
} ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var assign = Object . assign || function ( target ) {
var args = [ ] , len = arguments . length - 1 ;
while ( len -- > 0 ) args [ len ] = arguments [ len + 1 ] ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
target = Object ( target ) ;
for ( var i = 0 ; i < args . length ; i ++ ) {
var source = args [ i ] ;
if ( source !== null ) {
for ( var key in source ) {
if ( hasOwn ( source , key ) ) {
target [ key ] = source [ key ] ;
}
}
}
}
return target ;
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function each ( obj , cb ) {
for ( var key in obj ) {
2019-04-22 13:31:39 +00:00
if ( false === cb ( obj [ key ] , key ) ) {
return false ;
}
2018-09-20 12:35:14 +00:00
}
2019-04-22 13:31:39 +00:00
return true ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function sortBy ( array , prop ) {
return array . sort ( function ( ref , ref$1 ) {
var propA = ref [ prop ] ; if ( propA === void 0 ) propA = 0 ;
var propB = ref$1 [ prop ] ; if ( propB === void 0 ) propB = 0 ;
return propA > propB
2018-09-20 12:35:14 +00:00
? 1
2019-04-22 13:31:39 +00:00
: propB > propA
2018-09-20 12:35:14 +00:00
? - 1
2019-04-22 13:31:39 +00:00
: 0 ;
}
) ;
}
function uniqueBy ( array , prop ) {
var seen = new Set ( ) ;
return array . filter ( function ( ref ) {
var check = ref [ prop ] ;
return seen . has ( check )
? false
: seen . add ( check ) || true ;
} // IE 11 does not return the Set object
2018-09-20 12:35:14 +00:00
) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function clamp ( number , min , max ) {
if ( min === void 0 ) min = 0 ;
if ( max === void 0 ) max = 1 ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return Math . min ( Math . max ( toNumber ( number ) || 0 , min ) , max ) ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function noop ( ) { }
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function intersectRect ( r1 , r2 ) {
return r1 . left < r2 . right &&
r1 . right > r2 . left &&
r1 . top < r2 . bottom &&
r1 . bottom > r2 . top ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function pointInRect ( point , rect ) {
return point . x <= rect . right &&
point . x >= rect . left &&
point . y <= rect . bottom &&
point . y >= rect . top ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var Dimensions = {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
ratio : function ( dimensions , prop , value ) {
var obj ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var aProp = prop === 'width' ? 'height' : 'width' ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return ( obj = { } , obj [ aProp ] = dimensions [ prop ] ? Math . round ( value * dimensions [ aProp ] / dimensions [ prop ] ) : dimensions [ aProp ] , obj [ prop ] = value , obj ) ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
contain : function ( dimensions , maxDimensions ) {
var this $1 = this ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
dimensions = assign ( { } , dimensions ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
each ( dimensions , function ( _ , prop ) { return dimensions = dimensions [ prop ] > maxDimensions [ prop ]
? this $1 . ratio ( dimensions , prop , maxDimensions [ prop ] )
: dimensions ; }
) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return dimensions ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
cover : function ( dimensions , maxDimensions ) {
var this $1 = this ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
dimensions = this . contain ( dimensions , maxDimensions ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
each ( dimensions , function ( _ , prop ) { return dimensions = dimensions [ prop ] < maxDimensions [ prop ]
? this $1 . ratio ( dimensions , prop , maxDimensions [ prop ] )
: dimensions ; }
) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return dimensions ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function attr ( element , name , value ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( isObject ( name ) ) {
for ( var key in name ) {
attr ( element , key , name [ key ] ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
return ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
if ( isUndefined ( value ) ) {
element = toNode ( element ) ;
return element && element . getAttribute ( name ) ;
} else {
toNodes ( element ) . forEach ( function ( element ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( isFunction ( value ) ) {
value = value . call ( element , attr ( element , name ) ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( value === null ) {
removeAttr ( element , name ) ;
} else {
element . setAttribute ( name , value ) ;
}
} ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function hasAttr ( element , name ) {
return toNodes ( element ) . some ( function ( element ) { return element . hasAttribute ( name ) ; } ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function removeAttr ( element , name ) {
element = toNodes ( element ) ;
2019-04-22 13:31:39 +00:00
name . split ( ' ' ) . forEach ( function ( name ) { return element . forEach ( function ( element ) { return element . hasAttribute ( name ) && element . removeAttribute ( name ) ; }
2018-09-20 12:35:14 +00:00
) ; }
) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function data ( element , attribute ) {
for ( var i = 0 , attrs = [ attribute , ( "data-" + attribute ) ] ; i < attrs . length ; i ++ ) {
if ( hasAttr ( element , attrs [ i ] ) ) {
return attr ( element , attrs [ i ] ) ;
2017-11-11 04:33:51 +00:00
}
}
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function query ( selector , context ) {
return toNode ( selector ) || find ( selector , getContext ( selector , context ) ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function queryAll ( selector , context ) {
var nodes = toNodes ( selector ) ;
return nodes . length && nodes || findAll ( selector , getContext ( selector , context ) ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function getContext ( selector , context ) {
if ( context === void 0 ) context = document ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return isContextSelector ( selector ) || isDocument ( context )
? context
: context . ownerDocument ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function find ( selector , context ) {
return toNode ( _query ( selector , context , 'querySelector' ) ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function findAll ( selector , context ) {
return toNodes ( _query ( selector , context , 'querySelectorAll' ) ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function _query ( selector , context , queryFn ) {
if ( context === void 0 ) context = document ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! selector || ! isString ( selector ) ) {
return null ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
selector = selector . replace ( contextSanitizeRe , '$1 *' ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var removes ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( isContextSelector ( selector ) ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
removes = [ ] ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
selector = splitSelector ( selector ) . map ( function ( selector , i ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var ctx = context ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( selector [ 0 ] === '!' ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var selectors = selector . substr ( 1 ) . trim ( ) . split ( ' ' ) ;
ctx = closest ( context . parentNode , selectors [ 0 ] ) ;
selector = selectors . slice ( 1 ) . join ( ' ' ) . trim ( ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( selector [ 0 ] === '-' ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var selectors$1 = selector . substr ( 1 ) . trim ( ) . split ( ' ' ) ;
var prev = ( ctx || context ) . previousElementSibling ;
ctx = matches ( prev , selector . substr ( 1 ) ) ? prev : null ;
selector = selectors$1 . slice ( 1 ) . join ( ' ' ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! ctx ) {
return null ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! ctx . id ) {
ctx . id = "uk-" + ( Date . now ( ) ) + i ;
removes . push ( function ( ) { return removeAttr ( ctx , 'id' ) ; } ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return ( "#" + ( escape ( ctx . id ) ) + " " + selector ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ) . filter ( Boolean ) . join ( ',' ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
context = document ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
try {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return context [ queryFn ] ( selector ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} catch ( e ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return null ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} finally {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
removes && removes . forEach ( function ( remove ) { return remove ( ) ; } ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var contextSelectorRe = /(^|[^\\],)\s*[!>+~-]/ ;
2018-09-20 12:35:14 +00:00
var contextSanitizeRe = /([!>+~-])(?=\s+[!>+~-]|\s*$)/g ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function isContextSelector ( selector ) {
return isString ( selector ) && selector . match ( contextSelectorRe ) ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var selectorRe = /.*?[^\\](?:,|$)/ ;
function splitSelector ( selector ) {
return selector . match ( selectorRe ) . map ( function ( selector ) { return selector . replace ( /,$/ , '' ) . trim ( ) ; } ) ;
}
2018-09-20 12:35:14 +00:00
var elProto = Element . prototype ;
var matchesFn = elProto . matches || elProto . webkitMatchesSelector || elProto . msMatchesSelector ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function matches ( element , selector ) {
return toNodes ( element ) . some ( function ( element ) { return matchesFn . call ( element , selector ) ; } ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
var closestFn = elProto . closest || function ( selector ) {
var ancestor = this ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
do {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( matches ( ancestor , selector ) ) {
return ancestor ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
ancestor = ancestor . parentNode ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} while ( ancestor && ancestor . nodeType === 1 ) ;
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function closest ( element , selector ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( startsWith ( selector , '>' ) ) {
selector = selector . slice ( 1 ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return isNode ( element )
? element . parentNode && closestFn . call ( element , selector )
2019-04-22 13:31:39 +00:00
: toNodes ( element ) . map ( function ( element ) { return closest ( element , selector ) ; } ) . filter ( Boolean ) ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function parents ( element , selector ) {
var elements = [ ] ;
var parent = toNode ( element ) . parentNode ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
while ( parent && parent . nodeType === 1 ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( matches ( parent , selector ) ) {
elements . push ( parent ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
parent = parent . parentNode ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return elements ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
var escapeFn = window . CSS && CSS . escape || function ( css ) { return css . replace ( /([^\x7f-\uFFFF\w-])/g , function ( match ) { return ( "\\" + match ) ; } ) ; } ;
function escape ( css ) {
return isString ( css ) ? escapeFn . call ( null , css ) : '' ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var voidElements = {
area : true ,
base : true ,
br : true ,
col : true ,
embed : true ,
hr : true ,
img : true ,
input : true ,
keygen : true ,
link : true ,
menuitem : true ,
meta : true ,
param : true ,
source : true ,
track : true ,
wbr : true
} ;
function isVoidElement ( element ) {
return toNodes ( element ) . some ( function ( element ) { return voidElements [ element . tagName . toLowerCase ( ) ] ; } ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function isVisible ( element ) {
return toNodes ( element ) . some ( function ( element ) { return element . offsetWidth || element . offsetHeight || element . getClientRects ( ) . length ; } ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var selInput = 'input,select,textarea,button' ;
function isInput ( element ) {
return toNodes ( element ) . some ( function ( element ) { return matches ( element , selInput ) ; } ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
function filter ( element , selector ) {
return toNodes ( element ) . filter ( function ( element ) { return matches ( element , selector ) ; } ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function within ( element , selector ) {
return ! isString ( selector )
? element === selector || ( isDocument ( selector )
? selector . documentElement
: toNode ( selector ) ) . contains ( toNode ( element ) ) // IE 11 document does not implement contains
: matches ( element , selector ) || closest ( element , selector ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function on ( ) {
var args = [ ] , len = arguments . length ;
while ( len -- ) args [ len ] = arguments [ len ] ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var ref = getArgs ( args ) ;
var targets = ref [ 0 ] ;
var type = ref [ 1 ] ;
var selector = ref [ 2 ] ;
var listener = ref [ 3 ] ;
var useCapture = ref [ 4 ] ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
targets = toEventTargets ( targets ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( selector ) {
listener = delegate ( targets , selector , listener ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( listener . length > 1 ) {
listener = detail ( listener ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
type . split ( ' ' ) . forEach ( function ( type ) { return targets . forEach ( function ( target ) { return target . addEventListener ( type , listener , useCapture ) ; }
) ; }
) ;
return function ( ) { return off ( targets , type , listener , useCapture ) ; } ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function off ( targets , type , listener , useCapture ) {
if ( useCapture === void 0 ) useCapture = false ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
targets = toEventTargets ( targets ) ;
type . split ( ' ' ) . forEach ( function ( type ) { return targets . forEach ( function ( target ) { return target . removeEventListener ( type , listener , useCapture ) ; }
) ; }
) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
function once ( ) {
var args = [ ] , len = arguments . length ;
while ( len -- ) args [ len ] = arguments [ len ] ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var ref = getArgs ( args ) ;
var element = ref [ 0 ] ;
var type = ref [ 1 ] ;
var selector = ref [ 2 ] ;
var listener = ref [ 3 ] ;
var useCapture = ref [ 4 ] ;
var condition = ref [ 5 ] ;
var off = on ( element , type , selector , function ( e ) {
var result = ! condition || condition ( e ) ;
if ( result ) {
off ( ) ;
listener ( e , result ) ;
}
} , useCapture ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return off ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
function trigger ( targets , event , detail ) {
return toEventTargets ( targets ) . reduce ( function ( notCanceled , target ) { return notCanceled && target . dispatchEvent ( createEvent ( event , true , true , detail ) ) ; }
, true ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function createEvent ( e , bubbles , cancelable , detail ) {
if ( bubbles === void 0 ) bubbles = true ;
if ( cancelable === void 0 ) cancelable = false ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( isString ( e ) ) {
var event = document . createEvent ( 'CustomEvent' ) ; // IE 11
event . initCustomEvent ( e , bubbles , cancelable , detail ) ;
e = event ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return e ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function getArgs ( args ) {
if ( isFunction ( args [ 2 ] ) ) {
args . splice ( 2 , 0 , false ) ;
}
return args ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
function delegate ( delegates , selector , listener ) {
var this $1 = this ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return function ( e ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
delegates . forEach ( function ( delegate ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var current = selector [ 0 ] === '>'
? findAll ( selector , delegate ) . reverse ( ) . filter ( function ( element ) { return within ( e . target , element ) ; } ) [ 0 ]
: closest ( e . target , selector ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( current ) {
e . delegate = delegate ;
e . current = current ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
listener . call ( this $1 , e ) ;
2017-11-11 04:33:51 +00:00
}
} ) ;
2018-09-20 12:35:14 +00:00
} ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function detail ( listener ) {
return function ( e ) { return isArray ( e . detail ) ? listener . apply ( void 0 , [ e ] . concat ( e . detail ) ) : listener ( e ) ; } ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function isEventTarget ( target ) {
return target && 'addEventListener' in target ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function toEventTarget ( target ) {
return isEventTarget ( target ) ? target : toNode ( target ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function toEventTargets ( target ) {
return isArray ( target )
? target . map ( toEventTarget ) . filter ( Boolean )
: isString ( target )
? findAll ( target )
: isEventTarget ( target )
? [ target ]
: toNodes ( target ) ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function isTouch ( e ) {
return e . pointerType === 'touch' || e . touches ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function getEventPos ( e , prop ) {
if ( prop === void 0 ) prop = 'client' ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var touches = e . touches ;
var changedTouches = e . changedTouches ;
var ref = touches && touches [ 0 ] || changedTouches && changedTouches [ 0 ] || e ;
var x = ref [ ( prop + "X" ) ] ;
var y = ref [ ( prop + "Y" ) ] ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return { x : x , y : y } ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
/* global setImmediate */
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var Promise = 'Promise' in window ? window . Promise : PromiseFn ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var Deferred = function ( ) {
var this $1 = this ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . promise = new Promise ( function ( resolve , reject ) {
this $1 . reject = reject ;
this $1 . resolve = resolve ;
} ) ;
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
/ * *
* Promises / A + polyfill v1 . 1.4 ( https : //github.com/bramstein/promis)
* /
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var RESOLVED = 0 ;
var REJECTED = 1 ;
var PENDING = 2 ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var async = 'setImmediate' in window ? setImmediate : setTimeout ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function PromiseFn ( executor ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . state = PENDING ;
this . value = undefined ;
this . deferred = [ ] ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var promise = this ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
try {
executor (
function ( x ) {
promise . resolve ( x ) ;
} ,
function ( r ) {
promise . reject ( r ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
) ;
} catch ( e ) {
promise . reject ( e ) ;
}
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
PromiseFn . reject = function ( r ) {
return new PromiseFn ( function ( resolve , reject ) {
reject ( r ) ;
} ) ;
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
PromiseFn . resolve = function ( x ) {
return new PromiseFn ( function ( resolve , reject ) {
resolve ( x ) ;
} ) ;
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
PromiseFn . all = function all ( iterable ) {
return new PromiseFn ( function ( resolve , reject ) {
var result = [ ] ;
var count = 0 ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( iterable . length === 0 ) {
resolve ( result ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function resolver ( i ) {
return function ( x ) {
result [ i ] = x ;
count += 1 ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( count === iterable . length ) {
resolve ( result ) ;
}
} ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
for ( var i = 0 ; i < iterable . length ; i += 1 ) {
PromiseFn . resolve ( iterable [ i ] ) . then ( resolver ( i ) , reject ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
} ) ;
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
PromiseFn . race = function race ( iterable ) {
return new PromiseFn ( function ( resolve , reject ) {
for ( var i = 0 ; i < iterable . length ; i += 1 ) {
PromiseFn . resolve ( iterable [ i ] ) . then ( resolve , reject ) ;
}
} ) ;
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var p = PromiseFn . prototype ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
p . resolve = function resolve ( x ) {
var promise = this ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( promise . state === PENDING ) {
if ( x === promise ) {
throw new TypeError ( 'Promise settled with itself.' ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var called = false ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
try {
var then = x && x . then ;
if ( x !== null && isObject ( x ) && isFunction ( then ) ) {
then . call (
x ,
function ( x ) {
if ( ! called ) {
promise . resolve ( x ) ;
}
called = true ;
} ,
function ( r ) {
if ( ! called ) {
promise . reject ( r ) ;
}
called = true ;
}
) ;
return ;
}
} catch ( e ) {
if ( ! called ) {
promise . reject ( e ) ;
}
return ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
promise . state = RESOLVED ;
promise . value = x ;
promise . notify ( ) ;
}
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
p . reject = function reject ( reason ) {
var promise = this ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( promise . state === PENDING ) {
if ( reason === promise ) {
throw new TypeError ( 'Promise settled with itself.' ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
promise . state = REJECTED ;
promise . value = reason ;
promise . notify ( ) ;
}
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
p . notify = function notify ( ) {
var this $1 = this ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
async ( function ( ) {
if ( this $1 . state !== PENDING ) {
while ( this $1 . deferred . length ) {
var ref = this $1 . deferred . shift ( ) ;
var onResolved = ref [ 0 ] ;
var onRejected = ref [ 1 ] ;
var resolve = ref [ 2 ] ;
var reject = ref [ 3 ] ;
try {
if ( this $1 . state === RESOLVED ) {
if ( isFunction ( onResolved ) ) {
resolve ( onResolved . call ( undefined , this $1 . value ) ) ;
} else {
resolve ( this $1 . value ) ;
}
} else if ( this $1 . state === REJECTED ) {
if ( isFunction ( onRejected ) ) {
resolve ( onRejected . call ( undefined , this $1 . value ) ) ;
} else {
reject ( this $1 . value ) ;
}
}
} catch ( e ) {
reject ( e ) ;
}
}
}
} ) ;
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
p . then = function then ( onResolved , onRejected ) {
var this $1 = this ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return new PromiseFn ( function ( resolve , reject ) {
this $1 . deferred . push ( [ onResolved , onRejected , resolve , reject ] ) ;
this $1 . notify ( ) ;
} ) ;
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
p . catch = function ( onRejected ) {
return this . then ( undefined , onRejected ) ;
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function ajax ( url , options ) {
return new Promise ( function ( resolve , reject ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var env = assign ( {
data : null ,
method : 'GET' ,
headers : { } ,
xhr : new XMLHttpRequest ( ) ,
beforeSend : noop ,
responseType : ''
} , options ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
env . beforeSend ( env ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var xhr = env . xhr ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
for ( var prop in env ) {
if ( prop in xhr ) {
try {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
xhr [ prop ] = env [ prop ] ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} catch ( e ) { }
}
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
xhr . open ( env . method . toUpperCase ( ) , url ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
for ( var header in env . headers ) {
xhr . setRequestHeader ( header , env . headers [ header ] ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
on ( xhr , 'load' , function ( ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( xhr . status === 0 || xhr . status >= 200 && xhr . status < 300 || xhr . status === 304 ) {
resolve ( xhr ) ;
} else {
reject ( assign ( Error ( xhr . statusText ) , {
xhr : xhr ,
status : xhr . status
} ) ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
on ( xhr , 'error' , function ( ) { return reject ( assign ( Error ( 'Network Error' ) , { xhr : xhr } ) ) ; } ) ;
on ( xhr , 'timeout' , function ( ) { return reject ( assign ( Error ( 'Network Timeout' ) , { xhr : xhr } ) ) ; } ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
xhr . send ( env . data ) ;
} ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
function getImage ( src , srcset , sizes ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return new Promise ( function ( resolve , reject ) {
var img = new Image ( ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
img . onerror = reject ;
img . onload = function ( ) { return resolve ( img ) ; } ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
sizes && ( img . sizes = sizes ) ;
srcset && ( img . srcset = srcset ) ;
img . src = src ;
} ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
/* global DocumentTouch */
var isIE = /msie|trident/i . test ( window . navigator . userAgent ) ;
var isRtl = attr ( document . documentElement , 'dir' ) === 'rtl' ;
var hasTouchEvents = 'ontouchstart' in window ;
var hasPointerEvents = window . PointerEvent ;
var hasTouch = hasTouchEvents
|| window . DocumentTouch && document instanceof DocumentTouch
|| navigator . maxTouchPoints ; // IE >=11
var pointerDown = hasPointerEvents ? 'pointerdown' : hasTouchEvents ? 'touchstart' : 'mousedown' ;
var pointerMove = hasPointerEvents ? 'pointermove' : hasTouchEvents ? 'touchmove' : 'mousemove' ;
var pointerUp = hasPointerEvents ? 'pointerup' : hasTouchEvents ? 'touchend' : 'mouseup' ;
var pointerEnter = hasPointerEvents ? 'pointerenter' : hasTouchEvents ? '' : 'mouseenter' ;
var pointerLeave = hasPointerEvents ? 'pointerleave' : hasTouchEvents ? '' : 'mouseleave' ;
var pointerCancel = hasPointerEvents ? 'pointercancel' : 'touchcancel' ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function ready ( fn ) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( document . readyState !== 'loading' ) {
2018-09-20 12:35:14 +00:00
fn ( ) ;
return ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var unbind = on ( document , 'DOMContentLoaded' , function ( ) {
unbind ( ) ;
2018-09-20 12:35:14 +00:00
fn ( ) ;
2019-04-22 13:31:39 +00:00
} ) ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function index ( element , ref ) {
return ref
? toNodes ( element ) . indexOf ( toNode ( ref ) )
: toNodes ( ( element = toNode ( element ) ) && element . parentNode . children ) . indexOf ( element ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
function getIndex ( i , elements , current , finite ) {
if ( current === void 0 ) current = 0 ;
if ( finite === void 0 ) finite = false ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
elements = toNodes ( elements ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var length = elements . length ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
i = isNumeric ( i )
? toNumber ( i )
: i === 'next'
? current + 1
: i === 'previous'
? current - 1
: index ( elements , i ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( finite ) {
return clamp ( i , 0 , length - 1 ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
i %= length ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return i < 0 ? i + length : i ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
function empty ( element ) {
2019-04-22 13:31:39 +00:00
element = $ ( element ) ;
2018-09-20 12:35:14 +00:00
element . innerHTML = '' ;
return element ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function html ( parent , html ) {
2019-04-22 13:31:39 +00:00
parent = $ ( parent ) ;
2018-09-20 12:35:14 +00:00
return isUndefined ( html )
? parent . innerHTML
: append ( parent . hasChildNodes ( ) ? empty ( parent ) : parent , html ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function prepend ( parent , element ) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
parent = $ ( parent ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! parent . hasChildNodes ( ) ) {
return append ( parent , element ) ;
} else {
return insertNodes ( element , function ( element ) { return parent . insertBefore ( element , parent . firstChild ) ; } ) ;
}
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function append ( parent , element ) {
2019-04-22 13:31:39 +00:00
parent = $ ( parent ) ;
2018-09-20 12:35:14 +00:00
return insertNodes ( element , function ( element ) { return parent . appendChild ( element ) ; } ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function before ( ref , element ) {
2019-04-22 13:31:39 +00:00
ref = $ ( ref ) ;
2018-09-20 12:35:14 +00:00
return insertNodes ( element , function ( element ) { return ref . parentNode . insertBefore ( element , ref ) ; } ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
function after ( ref , element ) {
2019-04-22 13:31:39 +00:00
ref = $ ( ref ) ;
2018-09-20 12:35:14 +00:00
return insertNodes ( element , function ( element ) { return ref . nextSibling
? before ( ref . nextSibling , element )
: append ( ref . parentNode , element ) ; }
) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
function insertNodes ( element , fn ) {
element = isString ( element ) ? fragment ( element ) : element ;
return element
? 'length' in element
? toNodes ( element ) . map ( fn )
: fn ( element )
: null ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function remove ( element ) {
toNodes ( element ) . map ( function ( element ) { return element . parentNode && element . parentNode . removeChild ( element ) ; } ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function wrapAll ( element , structure ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
structure = toNode ( before ( element , structure ) ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
while ( structure . firstChild ) {
structure = structure . firstChild ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
append ( structure , element ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return structure ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function wrapInner ( element , structure ) {
return toNodes ( toNodes ( element ) . map ( function ( element ) { return element . hasChildNodes ? wrapAll ( toNodes ( element . childNodes ) , structure ) : append ( element , structure ) ; }
) ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function unwrap ( element ) {
toNodes ( element )
. map ( function ( element ) { return element . parentNode ; } )
. filter ( function ( value , index , self ) { return self . indexOf ( value ) === index ; } )
. forEach ( function ( parent ) {
before ( parent , parent . childNodes ) ;
remove ( parent ) ;
} ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var fragmentRe = /^\s*<(\w+|!)[^>]*>/ ;
var singleTagRe = /^<(\w+)\s*\/?>(?:<\/\1>)?$/ ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function fragment ( html ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var matches = singleTagRe . exec ( html ) ;
if ( matches ) {
return document . createElement ( matches [ 1 ] ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var container = document . createElement ( 'div' ) ;
if ( fragmentRe . test ( html ) ) {
container . insertAdjacentHTML ( 'beforeend' , html . trim ( ) ) ;
} else {
container . textContent = html ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
return container . childNodes . length > 1 ? toNodes ( container . childNodes ) : container . firstChild ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function apply ( node , fn ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! node || node . nodeType !== 1 ) {
return ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
fn ( node ) ;
node = node . firstElementChild ;
while ( node ) {
apply ( node , fn ) ;
node = node . nextElementSibling ;
}
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function $ ( selector , context ) {
return ! isString ( selector )
? toNode ( selector )
: isHtml ( selector )
? toNode ( fragment ( selector ) )
: find ( selector , context ) ;
}
function $$ ( selector , context ) {
return ! isString ( selector )
? toNodes ( selector )
: isHtml ( selector )
? toNodes ( fragment ( selector ) )
: findAll ( selector , context ) ;
}
function isHtml ( str ) {
return str [ 0 ] === '<' || str . match ( /^\s*</ ) ;
}
2018-09-20 12:35:14 +00:00
function addClass ( element ) {
var args = [ ] , len = arguments . length - 1 ;
while ( len -- > 0 ) args [ len ] = arguments [ len + 1 ] ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
apply$1 ( element , args , 'add' ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function removeClass ( element ) {
var args = [ ] , len = arguments . length - 1 ;
while ( len -- > 0 ) args [ len ] = arguments [ len + 1 ] ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
apply$1 ( element , args , 'remove' ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function removeClasses ( element , cls ) {
attr ( element , 'class' , function ( value ) { return ( value || '' ) . replace ( new RegExp ( ( "\\b" + cls + "\\b" ) , 'g' ) , '' ) ; } ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function replaceClass ( element ) {
var args = [ ] , len = arguments . length - 1 ;
while ( len -- > 0 ) args [ len ] = arguments [ len + 1 ] ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
args [ 0 ] && removeClass ( element , args [ 0 ] ) ;
args [ 1 ] && addClass ( element , args [ 1 ] ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function hasClass ( element , cls ) {
2019-04-22 13:31:39 +00:00
return cls && toNodes ( element ) . some ( function ( element ) { return element . classList . contains ( cls . split ( ' ' ) [ 0 ] ) ; } ) ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function toggleClass ( element ) {
var args = [ ] , len = arguments . length - 1 ;
while ( len -- > 0 ) args [ len ] = arguments [ len + 1 ] ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! args . length ) {
return ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
args = getArgs$1 ( args ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var force = ! isString ( args [ args . length - 1 ] ) ? args . pop ( ) : [ ] ; // in iOS 9.3 force === undefined evaluates to false
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
args = args . filter ( Boolean ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
toNodes ( element ) . forEach ( function ( ref ) {
var classList = ref . classList ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
for ( var i = 0 ; i < args . length ; i ++ ) {
supports . Force
? classList . toggle . apply ( classList , [ args [ i ] ] . concat ( force ) )
: ( classList [ ( ! isUndefined ( force ) ? force : ! classList . contains ( args [ i ] ) ) ? 'add' : 'remove' ] ( args [ i ] ) ) ;
}
} ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
function apply$1 ( element , args , fn ) {
args = getArgs$1 ( args ) . filter ( Boolean ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
args . length && toNodes ( element ) . forEach ( function ( ref ) {
var classList = ref . classList ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
supports . Multiple
? classList [ fn ] . apply ( classList , args )
: args . forEach ( function ( cls ) { return classList [ fn ] ( cls ) ; } ) ;
} ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
function getArgs$1 ( args ) {
return args . reduce ( function ( args , arg ) { return args . concat . call ( args , isString ( arg ) && includes ( arg , ' ' ) ? arg . trim ( ) . split ( ' ' ) : arg ) ; }
, [ ] ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
// IE 11
2019-04-22 13:31:39 +00:00
var supports = {
get Multiple ( ) {
return this . get ( '_multiple' ) ;
} ,
get Force ( ) {
return this . get ( '_force' ) ;
} ,
get : function ( key ) {
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
if ( ! hasOwn ( this , key ) ) {
var ref = document . createElement ( '_' ) ;
var classList = ref . classList ;
classList . add ( 'a' , 'b' ) ;
classList . toggle ( 'c' , false ) ;
this . _multiple = classList . contains ( 'b' ) ;
this . _force = ! classList . contains ( 'c' ) ;
}
return this [ key ] ;
2018-09-20 12:35:14 +00:00
}
2019-04-22 13:31:39 +00:00
} ;
2018-09-20 12:35:14 +00:00
var cssNumber = {
'animation-iteration-count' : true ,
'column-count' : true ,
'fill-opacity' : true ,
'flex-grow' : true ,
'flex-shrink' : true ,
'font-weight' : true ,
'line-height' : true ,
'opacity' : true ,
'order' : true ,
'orphans' : true ,
2019-04-22 13:31:39 +00:00
'stroke-dasharray' : true ,
'stroke-dashoffset' : true ,
2018-09-20 12:35:14 +00:00
'widows' : true ,
'z-index' : true ,
'zoom' : true
} ;
function css ( element , property , value ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return toNodes ( element ) . map ( function ( element ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( isString ( property ) ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
property = propName ( property ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( isUndefined ( value ) ) {
return getStyle ( element , property ) ;
2019-04-22 13:31:39 +00:00
} else if ( ! value && ! isNumber ( value ) ) {
2018-09-20 12:35:14 +00:00
element . style . removeProperty ( property ) ;
} else {
element . style [ property ] = isNumeric ( value ) && ! cssNumber [ property ] ? ( value + "px" ) : value ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} else if ( isArray ( property ) ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var styles = getStyles ( element ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return property . reduce ( function ( props , property ) {
props [ property ] = styles [ propName ( property ) ] ;
return props ;
} , { } ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} else if ( isObject ( property ) ) {
each ( property , function ( value , property ) { return css ( element , property , value ) ; } ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return element ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ) [ 0 ] ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
function getStyles ( element , pseudoElt ) {
element = toNode ( element ) ;
return element . ownerDocument . defaultView . getComputedStyle ( element , pseudoElt ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function getStyle ( element , property , pseudoElt ) {
return getStyles ( element , pseudoElt ) [ property ] ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var vars = { } ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function getCssVar ( name ) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var docEl = document . documentElement ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( ! isIE ) {
return getStyles ( docEl ) . getPropertyValue ( ( "--uk-" + name ) ) ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( ! ( name in vars ) ) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
/* usage in css: .uk-name:before { content:"xyz" } */
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var element = append ( docEl , document . createElement ( 'div' ) ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
addClass ( element , ( "uk-" + name ) ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
vars [ name ] = getStyle ( element , 'content' , ':before' ) . replace ( /^["'](.*)["']$/ , '$1' ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
remove ( element ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return vars [ name ] ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var cssProps = { } ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function propName ( name ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var ret = cssProps [ name ] ;
if ( ! ret ) {
ret = cssProps [ name ] = vendorPropName ( name ) || name ;
}
return ret ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var cssPrefixes = [ 'webkit' , 'moz' , 'ms' ] ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function vendorPropName ( name ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
name = hyphenate ( name ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var ref = document . documentElement ;
var style = ref . style ;
2018-09-20 12:35:14 +00:00
if ( name in style ) {
return name ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var i = cssPrefixes . length , prefixedName ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
while ( i -- ) {
prefixedName = "-" + ( cssPrefixes [ i ] ) + "-" + name ;
if ( prefixedName in style ) {
return prefixedName ;
}
2017-11-11 04:33:51 +00:00
}
}
2018-09-20 12:35:14 +00:00
function transition ( element , props , duration , timing ) {
if ( duration === void 0 ) duration = 400 ;
if ( timing === void 0 ) timing = 'linear' ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return Promise . all ( toNodes ( element ) . map ( function ( element ) { return new Promise ( function ( resolve , reject ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
for ( var name in props ) {
var value = css ( element , name ) ;
if ( value === '' ) {
css ( element , name , value ) ;
}
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var timer = setTimeout ( function ( ) { return trigger ( element , 'transitionend' ) ; } , duration ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
once ( element , 'transitionend transitioncanceled' , function ( ref ) {
var type = ref . type ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
clearTimeout ( timer ) ;
removeClass ( element , 'uk-transition' ) ;
css ( element , {
'transition-property' : '' ,
'transition-duration' : '' ,
'transition-timing-function' : ''
} ) ;
type === 'transitioncanceled' ? reject ( ) : resolve ( ) ;
} , false , function ( ref ) {
var target = ref . target ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return element === target ;
} ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
addClass ( element , 'uk-transition' ) ;
css ( element , assign ( {
'transition-property' : Object . keys ( props ) . map ( propName ) . join ( ',' ) ,
'transition-duration' : ( duration + "ms" ) ,
'transition-timing-function' : timing
} , props ) ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ) ; }
) ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var Transition = {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
start : transition ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
stop : function ( element ) {
trigger ( element , 'transitionend' ) ;
return Promise . resolve ( ) ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
cancel : function ( element ) {
trigger ( element , 'transitioncanceled' ) ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
inProgress : function ( element ) {
return hasClass ( element , 'uk-transition' ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var animationPrefix = 'uk-animation-' ;
var clsCancelAnimation = 'uk-cancel-animation' ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function animate ( element , animation , duration , origin , out ) {
var arguments$1 = arguments ;
if ( duration === void 0 ) duration = 200 ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return Promise . all ( toNodes ( element ) . map ( function ( element ) { return new Promise ( function ( resolve , reject ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( hasClass ( element , clsCancelAnimation ) ) {
requestAnimationFrame ( function ( ) { return Promise . resolve ( ) . then ( function ( ) { return animate . apply ( void 0 , arguments$1 ) . then ( resolve , reject ) ; }
) ; }
) ;
return ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var cls = animation + " " + animationPrefix + ( out ? 'leave' : 'enter' ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( startsWith ( animation , animationPrefix ) ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( origin ) {
cls += " uk-transform-origin-" + origin ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( out ) {
cls += " " + animationPrefix + "reverse" ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
reset ( ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
once ( element , 'animationend animationcancel' , function ( ref ) {
var type = ref . type ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var hasReset = false ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( type === 'animationcancel' ) {
reject ( ) ;
reset ( ) ;
} else {
resolve ( ) ;
Promise . resolve ( ) . then ( function ( ) {
hasReset = true ;
reset ( ) ;
} ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
requestAnimationFrame ( function ( ) {
if ( ! hasReset ) {
addClass ( element , clsCancelAnimation ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
requestAnimationFrame ( function ( ) { return removeClass ( element , clsCancelAnimation ) ; } ) ;
}
} ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} , false , function ( ref ) {
var target = ref . target ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return element === target ;
} ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
css ( element , 'animationDuration' , ( duration + "ms" ) ) ;
addClass ( element , cls ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function reset ( ) {
css ( element , 'animationDuration' , '' ) ;
removeClasses ( element , ( animationPrefix + "\\S*" ) ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ) ; }
) ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
var inProgress = new RegExp ( ( animationPrefix + "(enter|leave)" ) ) ;
var Animation = {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
in : function ( element , animation , duration , origin ) {
return animate ( element , animation , duration , origin , false ) ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
out : function ( element , animation , duration , origin ) {
return animate ( element , animation , duration , origin , true ) ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
inProgress : function ( element ) {
return inProgress . test ( attr ( element , 'class' ) ) ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
cancel : function ( element ) {
trigger ( element , 'animationcancel' ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var dirs = {
width : [ 'x' , 'left' , 'right' ] ,
height : [ 'y' , 'top' , 'bottom' ]
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function positionAt ( element , target , elAttach , targetAttach , elOffset , targetOffset , flip , boundary ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
elAttach = getPos ( elAttach ) ;
targetAttach = getPos ( targetAttach ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var flipped = { element : elAttach , target : targetAttach } ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! element || ! target ) {
return flipped ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var dim = getDimensions ( element ) ;
var targetDim = getDimensions ( target ) ;
var position = targetDim ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
moveTo ( position , elAttach , dim , - 1 ) ;
moveTo ( position , targetAttach , targetDim , 1 ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
elOffset = getOffsets ( elOffset , dim . width , dim . height ) ;
targetOffset = getOffsets ( targetOffset , targetDim . width , targetDim . height ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
elOffset [ 'x' ] += targetOffset [ 'x' ] ;
elOffset [ 'y' ] += targetOffset [ 'y' ] ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
position . left += elOffset [ 'x' ] ;
position . top += elOffset [ 'y' ] ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( flip ) {
2019-04-22 13:31:39 +00:00
var boundaries = [ getDimensions ( getWindow ( element ) ) ] ;
if ( boundary ) {
boundaries . unshift ( getDimensions ( boundary ) ) ;
}
2018-09-20 12:35:14 +00:00
each ( dirs , function ( ref , prop ) {
var dir = ref [ 0 ] ;
var align = ref [ 1 ] ;
var alignFlip = ref [ 2 ] ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! ( flip === true || includes ( flip , dir ) ) ) {
return ;
}
2019-04-22 13:31:39 +00:00
boundaries . some ( function ( boundary ) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var elemOffset = elAttach [ dir ] === align
? - dim [ prop ]
: elAttach [ dir ] === alignFlip
? dim [ prop ]
: 0 ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var targetOffset = targetAttach [ dir ] === align
? targetDim [ prop ]
: targetAttach [ dir ] === alignFlip
? - targetDim [ prop ]
: 0 ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( position [ align ] < boundary [ align ] || position [ align ] + dim [ prop ] > boundary [ alignFlip ] ) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var centerOffset = dim [ prop ] / 2 ;
var centerTargetOffset = targetAttach [ dir ] === 'center' ? - targetDim [ prop ] / 2 : 0 ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return elAttach [ dir ] === 'center' && (
apply ( centerOffset , centerTargetOffset )
|| apply ( - centerOffset , - centerTargetOffset )
) || apply ( elemOffset , targetOffset ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function apply ( elemOffset , targetOffset ) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var newVal = position [ align ] + elemOffset + targetOffset - elOffset [ dir ] * 2 ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( newVal >= boundary [ align ] && newVal + dim [ prop ] <= boundary [ alignFlip ] ) {
position [ align ] = newVal ;
[ 'element' , 'target' ] . forEach ( function ( el ) {
flipped [ el ] [ dir ] = ! elemOffset
? flipped [ el ] [ dir ]
: flipped [ el ] [ dir ] === dirs [ prop ] [ 1 ]
? dirs [ prop ] [ 2 ]
: dirs [ prop ] [ 1 ] ;
} ) ;
return true ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
} ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
offset ( element , position ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return flipped ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
function offset ( element , coordinates ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
element = toNode ( element ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( coordinates ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var currentOffset = offset ( element ) ;
var pos = css ( element , 'position' ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
[ 'left' , 'top' ] . forEach ( function ( prop ) {
if ( prop in coordinates ) {
var value = css ( element , prop ) ;
css ( element , prop , coordinates [ prop ] - currentOffset [ prop ]
+ toFloat ( pos === 'absolute' && value === 'auto'
? position ( element ) [ prop ]
: value )
) ;
}
} ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
return getDimensions ( element ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
function getDimensions ( element ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
element = toNode ( element ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var ref = getWindow ( element ) ;
2018-09-20 12:35:14 +00:00
var top = ref . pageYOffset ;
var left = ref . pageXOffset ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( isWindow ( element ) ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var height = element . innerHeight ;
var width = element . innerWidth ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return {
top : top ,
left : left ,
height : height ,
width : width ,
bottom : top + height ,
2019-04-22 13:31:39 +00:00
right : left + width
2018-09-20 12:35:14 +00:00
} ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var style , hidden ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( ! isVisible ( element ) && css ( element , 'display' ) === 'none' ) {
2018-09-20 12:35:14 +00:00
style = attr ( element , 'style' ) ;
hidden = attr ( element , 'hidden' ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
attr ( element , {
style : ( ( style || '' ) + ";display:block !important;" ) ,
hidden : null
} ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var rect = element . getBoundingClientRect ( ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! isUndefined ( style ) ) {
attr ( element , { style : style , hidden : hidden } ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return {
height : rect . height ,
width : rect . width ,
top : rect . top + top ,
left : rect . left + left ,
bottom : rect . bottom + top ,
2019-04-22 13:31:39 +00:00
right : rect . right + left
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
function position ( element ) {
element = toNode ( element ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var parent = element . offsetParent || getDocEl ( element ) ;
2018-09-20 12:35:14 +00:00
var parentOffset = offset ( parent ) ;
var ref = [ 'top' , 'left' ] . reduce ( function ( props , prop ) {
2019-04-22 13:31:39 +00:00
var propName = ucfirst ( prop ) ;
2018-09-20 12:35:14 +00:00
props [ prop ] -= parentOffset [ prop ]
2019-04-22 13:31:39 +00:00
+ toFloat ( css ( element , ( "margin" + propName ) ) )
+ toFloat ( css ( parent , ( "border" + propName + "Width" ) ) ) ;
2018-09-20 12:35:14 +00:00
return props ;
} , offset ( element ) ) ;
var top = ref . top ;
var left = ref . left ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return { top : top , left : left } ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var height = dimension ( 'height' ) ;
var width = dimension ( 'width' ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function dimension ( prop ) {
2019-04-22 13:31:39 +00:00
var propName = ucfirst ( prop ) ;
2018-09-20 12:35:14 +00:00
return function ( element , value ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
element = toNode ( element ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( isUndefined ( value ) ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( isWindow ( element ) ) {
2019-04-22 13:31:39 +00:00
return element [ ( "inner" + propName ) ] ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( isDocument ( element ) ) {
var doc = element . documentElement ;
2019-04-22 13:31:39 +00:00
return Math . max ( doc [ ( "offset" + propName ) ] , doc [ ( "scroll" + propName ) ] ) ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
value = css ( element , prop ) ;
2019-04-22 13:31:39 +00:00
value = value === 'auto' ? element [ ( "offset" + propName ) ] : toFloat ( value ) || 0 ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return value - boxModelAdjust ( prop , element ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} else {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
css ( element , prop , ! value && value !== 0
? ''
: + value + boxModelAdjust ( prop , element ) + 'px'
) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
function boxModelAdjust ( prop , element , sizing ) {
if ( sizing === void 0 ) sizing = 'border-box' ;
return css ( element , 'boxSizing' ) === sizing
2018-09-20 12:35:14 +00:00
? dirs [ prop ] . slice ( 1 ) . map ( ucfirst ) . reduce ( function ( value , prop ) { return value
+ toFloat ( css ( element , ( "padding" + prop ) ) )
+ toFloat ( css ( element , ( "border" + prop + "Width" ) ) ) ; }
, 0 )
: 0 ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
function moveTo ( position , attach , dim , factor ) {
each ( dirs , function ( ref , prop ) {
var dir = ref [ 0 ] ;
var align = ref [ 1 ] ;
var alignFlip = ref [ 2 ] ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( attach [ dir ] === alignFlip ) {
position [ align ] += dim [ prop ] * factor ;
} else if ( attach [ dir ] === 'center' ) {
position [ align ] += dim [ prop ] * factor / 2 ;
}
} ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
function getPos ( pos ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var x = /left|center|right/ ;
var y = /top|center|bottom/ ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
pos = ( pos || '' ) . split ( ' ' ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( pos . length === 1 ) {
pos = x . test ( pos [ 0 ] )
? pos . concat ( [ 'center' ] )
: y . test ( pos [ 0 ] )
? [ 'center' ] . concat ( pos )
: [ 'center' , 'center' ] ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return {
x : x . test ( pos [ 0 ] ) ? pos [ 0 ] : 'center' ,
y : y . test ( pos [ 1 ] ) ? pos [ 1 ] : 'center'
} ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function getOffsets ( offsets , width , height ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var ref = ( offsets || '' ) . split ( ' ' ) ;
var x = ref [ 0 ] ;
var y = ref [ 1 ] ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return {
x : x ? toFloat ( x ) * ( endsWith ( x , '%' ) ? width / 100 : 1 ) : 0 ,
y : y ? toFloat ( y ) * ( endsWith ( y , '%' ) ? height / 100 : 1 ) : 0
} ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function flipPosition ( pos ) {
switch ( pos ) {
case 'left' :
return 'right' ;
case 'right' :
return 'left' ;
case 'top' :
return 'bottom' ;
case 'bottom' :
return 'top' ;
default :
return pos ;
}
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function isInView ( element , topOffset , leftOffset ) {
2018-09-20 12:35:14 +00:00
if ( topOffset === void 0 ) topOffset = 0 ;
if ( leftOffset === void 0 ) leftOffset = 0 ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! isVisible ( element ) ) {
return false ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
element = toNode ( element ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var win = getWindow ( element ) ;
var client = element . getBoundingClientRect ( ) ;
var bounding = {
top : - topOffset ,
left : - leftOffset ,
bottom : topOffset + height ( win ) ,
right : leftOffset + width ( win )
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return intersectRect ( client , bounding ) || pointInRect ( { x : client . left , y : client . top } , bounding ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function scrolledOver ( element , heightOffset ) {
if ( heightOffset === void 0 ) heightOffset = 0 ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! isVisible ( element ) ) {
return 0 ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
element = toNode ( element ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var win = getWindow ( element ) ;
var doc = getDocument ( element ) ;
2018-09-20 12:35:14 +00:00
var elHeight = element . offsetHeight + heightOffset ;
var ref = offsetPosition ( element ) ;
var top = ref [ 0 ] ;
var vp = height ( win ) ;
var vh = vp + Math . min ( 0 , top - vp ) ;
var diff = Math . max ( 0 , vp - ( height ( doc ) + heightOffset - ( top + elHeight ) ) ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return clamp ( ( ( vh + win . pageYOffset - top ) / ( ( vh + ( elHeight - ( diff < vp ? diff : 0 ) ) ) / 100 ) ) / 100 ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function scrollTop ( element , top ) {
element = toNode ( element ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( isWindow ( element ) || isDocument ( element ) ) {
2019-04-22 13:31:39 +00:00
var ref = getWindow ( element ) ;
2018-09-20 12:35:14 +00:00
var scrollTo = ref . scrollTo ;
var pageXOffset = ref . pageXOffset ;
scrollTo ( pageXOffset , top ) ;
} else {
element . scrollTop = top ;
}
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function offsetPosition ( element ) {
var offset = [ 0 , 0 ] ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
do {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
offset [ 0 ] += element . offsetTop ;
offset [ 1 ] += element . offsetLeft ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( css ( element , 'position' ) === 'fixed' ) {
2019-04-22 13:31:39 +00:00
var win = getWindow ( element ) ;
2018-09-20 12:35:14 +00:00
offset [ 0 ] += win . pageYOffset ;
offset [ 1 ] += win . pageXOffset ;
return offset ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
} while ( ( element = element . offsetParent ) ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return offset ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function toPx ( value , property , element ) {
if ( property === void 0 ) property = 'width' ;
if ( element === void 0 ) element = window ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return isNumeric ( value )
? + value
: endsWith ( value , 'vh' )
? percent ( height ( getWindow ( element ) ) , value )
: endsWith ( value , 'vw' )
? percent ( width ( getWindow ( element ) ) , value )
: endsWith ( value , '%' )
? percent ( getDimensions ( element ) [ property ] , value )
: toFloat ( value ) ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function percent ( base , value ) {
return base * toFloat ( value ) / 100 ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function getWindow ( element ) {
return isWindow ( element ) ? element : getDocument ( element ) . defaultView ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function getDocument ( element ) {
return toNode ( element ) . ownerDocument ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function getDocEl ( element ) {
return getDocument ( element ) . documentElement ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
/ *
Based on :
Copyright ( c ) 2016 Wilson Page wilsonpage @ me . com
https : //github.com/wilsonpage/fastdom
* /
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var fastdom = {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
reads : [ ] ,
writes : [ ] ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
read : function ( task ) {
this . reads . push ( task ) ;
scheduleFlush ( ) ;
return task ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
write : function ( task ) {
this . writes . push ( task ) ;
scheduleFlush ( ) ;
return task ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
clear : function ( task ) {
return remove$1 ( this . reads , task ) || remove$1 ( this . writes , task ) ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
flush : function ( ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
runTasks ( this . reads ) ;
runTasks ( this . writes . splice ( 0 , this . writes . length ) ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . scheduled = false ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( this . reads . length || this . writes . length ) {
scheduleFlush ( ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function scheduleFlush ( ) {
if ( ! fastdom . scheduled ) {
fastdom . scheduled = true ;
requestAnimationFrame ( fastdom . flush . bind ( fastdom ) ) ;
2017-11-11 04:33:51 +00:00
}
}
2018-09-20 12:35:14 +00:00
function runTasks ( tasks ) {
var task ;
while ( ( task = tasks . shift ( ) ) ) {
task ( ) ;
}
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
function remove$1 ( array , item ) {
var index = array . indexOf ( item ) ;
return ! ! ~ index && ! ! array . splice ( index , 1 ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
function MouseTracker ( ) { }
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
MouseTracker . prototype = {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
positions : [ ] ,
position : null ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
init : function ( ) {
var this $1 = this ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . positions = [ ] ;
this . position = null ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var ticking = false ;
this . unbind = on ( document , 'mousemove' , function ( e ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ticking ) {
return ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
setTimeout ( function ( ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var time = Date . now ( ) ;
var ref = this $1 . positions ;
var length = ref . length ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( length && ( time - this $1 . positions [ length - 1 ] . time > 100 ) ) {
this $1 . positions . splice ( 0 , length ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this $1 . positions . push ( { time : time , x : e . pageX , y : e . pageY } ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( this $1 . positions . length > 5 ) {
this $1 . positions . shift ( ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
ticking = false ;
} , 5 ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
ticking = true ;
} ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
cancel : function ( ) {
if ( this . unbind ) {
this . unbind ( ) ;
}
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
movesTo : function ( target ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( this . positions . length < 2 ) {
return false ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var p = offset ( target ) ;
2019-04-22 13:31:39 +00:00
var position = this . positions [ this . positions . length - 1 ] ;
2018-09-20 12:35:14 +00:00
var ref = this . positions ;
var prevPos = ref [ 0 ] ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( p . left <= position . x && position . x <= p . right && p . top <= position . y && position . y <= p . bottom ) {
2018-09-20 12:35:14 +00:00
return false ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var points = [
[ { x : p . left , y : p . top } , { x : p . right , y : p . bottom } ] ,
[ { x : p . right , y : p . top } , { x : p . left , y : p . bottom } ]
] ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( p . right <= position . x ) ; else if ( p . left >= position . x ) {
2018-09-20 12:35:14 +00:00
points [ 0 ] . reverse ( ) ;
points [ 1 ] . reverse ( ) ;
2019-04-22 13:31:39 +00:00
} else if ( p . bottom <= position . y ) {
2018-09-20 12:35:14 +00:00
points [ 0 ] . reverse ( ) ;
2019-04-22 13:31:39 +00:00
} else if ( p . top >= position . y ) {
2018-09-20 12:35:14 +00:00
points [ 1 ] . reverse ( ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return ! ! points . reduce ( function ( result , point ) {
2019-04-22 13:31:39 +00:00
return result + ( slope ( prevPos , point [ 0 ] ) < slope ( position , point [ 0 ] ) && slope ( prevPos , point [ 1 ] ) > slope ( position , point [ 1 ] ) ) ;
2018-09-20 12:35:14 +00:00
} , 0 ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function slope ( a , b ) {
return ( b . y - a . y ) / ( b . x - a . x ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
var strats = { } ;
strats . events =
strats . created =
strats . beforeConnect =
strats . connected =
strats . beforeDisconnect =
strats . disconnected =
2019-04-22 13:31:39 +00:00
strats . destroy = concatStrat ;
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
// args strategy
strats . args = function ( parentVal , childVal ) {
return concatStrat ( childVal || parentVal ) ;
2017-11-11 04:33:51 +00:00
} ;
2018-09-20 12:35:14 +00:00
// update strategy
strats . update = function ( parentVal , childVal ) {
2019-04-22 13:31:39 +00:00
return sortBy ( concatStrat ( parentVal , isFunction ( childVal ) ? { read : childVal } : childVal ) , 'order' ) ;
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
// property strategy
strats . props = function ( parentVal , childVal ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( isArray ( childVal ) ) {
childVal = childVal . reduce ( function ( value , key ) {
value [ key ] = String ;
return value ;
} , { } ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return strats . methods ( parentVal , childVal ) ;
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
// extend strategy
strats . computed =
strats . methods = function ( parentVal , childVal ) {
return childVal
? parentVal
? assign ( { } , parentVal , childVal )
: childVal
: parentVal ;
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
// data strategy
strats . data = function ( parentVal , childVal , vm ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! vm ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! childVal ) {
return parentVal ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! parentVal ) {
return childVal ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return function ( vm ) {
return mergeFnData ( parentVal , childVal , vm ) ;
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return mergeFnData ( parentVal , childVal , vm ) ;
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function mergeFnData ( parentVal , childVal , vm ) {
return strats . computed (
isFunction ( parentVal )
? parentVal . call ( vm , vm )
: parentVal ,
isFunction ( childVal )
? childVal . call ( vm , vm )
: childVal
) ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
// concat strategy
function concatStrat ( parentVal , childVal ) {
parentVal = parentVal && ! isArray ( parentVal ) ? [ parentVal ] : parentVal ;
return childVal
? parentVal
? parentVal . concat ( childVal )
: isArray ( childVal )
? childVal
: [ childVal ]
: parentVal ;
}
2018-09-20 12:35:14 +00:00
// default strategy
2019-04-22 13:31:39 +00:00
function defaultStrat ( parentVal , childVal ) {
2018-09-20 12:35:14 +00:00
return isUndefined ( childVal ) ? parentVal : childVal ;
2019-04-22 13:31:39 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function mergeOptions ( parent , child , vm ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var options = { } ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( isFunction ( child ) ) {
child = child . options ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( child . extends ) {
parent = mergeOptions ( parent , child . extends , vm ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( child . mixins ) {
for ( var i = 0 , l = child . mixins . length ; i < l ; i ++ ) {
parent = mergeOptions ( parent , child . mixins [ i ] , vm ) ;
2017-11-11 04:33:51 +00:00
}
}
2018-09-20 12:35:14 +00:00
for ( var key in parent ) {
mergeKey ( key ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
for ( var key$1 in child ) {
if ( ! hasOwn ( parent , key$1 ) ) {
mergeKey ( key$1 ) ;
}
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function mergeKey ( key ) {
options [ key ] = ( strats [ key ] || defaultStrat ) ( parent [ key ] , child [ key ] , vm ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return options ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function parseOptions ( options , args ) {
var obj ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( args === void 0 ) args = [ ] ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
try {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return ! options
? { }
: startsWith ( options , '{' )
? JSON . parse ( options )
: args . length && ! includes ( options , ':' )
? ( ( obj = { } , obj [ args [ 0 ] ] = options , obj ) )
: options . split ( ';' ) . reduce ( function ( options , option ) {
var ref = option . split ( /:(.*)/ ) ;
var key = ref [ 0 ] ;
var value = ref [ 1 ] ;
if ( key && ! isUndefined ( value ) ) {
options [ key . trim ( ) ] = value . trim ( ) ;
}
return options ;
} , { } ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} catch ( e ) {
return { } ;
}
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
var id = 0 ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var Player = function ( el ) {
this . id = ++ id ;
this . el = toNode ( el ) ;
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
Player . prototype . isVideo = function ( ) {
return this . isYoutube ( ) || this . isVimeo ( ) || this . isHTML5 ( ) ;
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
Player . prototype . isHTML5 = function ( ) {
return this . el . tagName === 'VIDEO' ;
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
Player . prototype . isIFrame = function ( ) {
return this . el . tagName === 'IFRAME' ;
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
Player . prototype . isYoutube = function ( ) {
return this . isIFrame ( ) && ! ! this . el . src . match ( /\/\/.*?youtube(-nocookie)?\.[a-z]+\/(watch\?v=[^&\s]+|embed)|youtu\.be\/.*/ ) ;
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
Player . prototype . isVimeo = function ( ) {
return this . isIFrame ( ) && ! ! this . el . src . match ( /vimeo\.com\/video\/.*/ ) ;
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
Player . prototype . enableApi = function ( ) {
var this $1 = this ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( this . ready ) {
return this . ready ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var youtube = this . isYoutube ( ) ;
var vimeo = this . isVimeo ( ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var poller ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( youtube || vimeo ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return this . ready = new Promise ( function ( resolve ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
once ( this $1 . el , 'load' , function ( ) {
if ( youtube ) {
var listener = function ( ) { return post ( this $1 . el , { event : 'listening' , id : this $1 . id } ) ; } ;
poller = setInterval ( listener , 100 ) ;
listener ( ) ;
}
} ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
listen ( function ( data ) { return youtube && data . id === this $1 . id && data . event === 'onReady' || vimeo && Number ( data . player _id ) === this $1 . id ; } )
2018-09-20 12:35:14 +00:00
. then ( function ( ) {
resolve ( ) ;
poller && clearInterval ( poller ) ;
} ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
attr ( this $1 . el , 'src' , ( "" + ( this $1 . el . src ) + ( includes ( this $1 . el . src , '?' ) ? '&' : '?' ) + ( youtube ? 'enablejsapi=1' : ( "api=1&player_id=" + ( this $1 . id ) ) ) ) ) ;
} ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
return Promise . resolve ( ) ;
2017-11-11 04:33:51 +00:00
} ;
2018-09-20 12:35:14 +00:00
Player . prototype . play = function ( ) {
var this $1 = this ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! this . isVideo ( ) ) {
return ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( this . isIFrame ( ) ) {
this . enableApi ( ) . then ( function ( ) { return post ( this $1 . el , { func : 'playVideo' , method : 'play' } ) ; } ) ;
} else if ( this . isHTML5 ( ) ) {
try {
var promise = this . el . play ( ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( promise ) {
promise . catch ( noop ) ;
}
} catch ( e ) { }
}
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
Player . prototype . pause = function ( ) {
var this $1 = this ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! this . isVideo ( ) ) {
return ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( this . isIFrame ( ) ) {
this . enableApi ( ) . then ( function ( ) { return post ( this $1 . el , { func : 'pauseVideo' , method : 'pause' } ) ; } ) ;
} else if ( this . isHTML5 ( ) ) {
this . el . pause ( ) ;
}
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
Player . prototype . mute = function ( ) {
var this $1 = this ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! this . isVideo ( ) ) {
2017-11-11 04:33:51 +00:00
return ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( this . isIFrame ( ) ) {
this . enableApi ( ) . then ( function ( ) { return post ( this $1 . el , { func : 'mute' , method : 'setVolume' , value : 0 } ) ; } ) ;
} else if ( this . isHTML5 ( ) ) {
this . el . muted = true ;
attr ( this . el , 'muted' , '' ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function post ( el , cmd ) {
try {
el . contentWindow . postMessage ( JSON . stringify ( assign ( { event : 'command' } , cmd ) ) , '*' ) ;
} catch ( e ) { }
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function listen ( cb ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return new Promise ( function ( resolve ) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
once ( window , 'message' , function ( _ , data ) { return resolve ( data ) ; } , false , function ( ref ) {
var data = ref . data ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( ! data || ! isString ( data ) ) {
2018-09-20 12:35:14 +00:00
return ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
try {
2019-04-22 13:31:39 +00:00
data = JSON . parse ( data ) ;
2018-09-20 12:35:14 +00:00
} catch ( e ) {
return ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return data && cb ( data ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ) ;
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
var IntersectionObserver = 'IntersectionObserver' in window
? window . IntersectionObserver
: /*@__PURE__*/ ( function ( ) {
function IntersectionObserverClass ( callback , ref ) {
var this $1 = this ;
if ( ref === void 0 ) ref = { } ;
var rootMargin = ref . rootMargin ; if ( rootMargin === void 0 ) rootMargin = '0 0' ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
this . targets = [ ] ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var ref$1 = ( rootMargin || '0 0' ) . split ( ' ' ) . map ( toFloat ) ;
var offsetTop = ref$1 [ 0 ] ;
var offsetLeft = ref$1 [ 1 ] ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
this . offsetTop = offsetTop ;
this . offsetLeft = offsetLeft ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var pending ;
this . apply = function ( ) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( pending ) {
return ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
pending = requestAnimationFrame ( function ( ) { return setTimeout ( function ( ) {
var records = this $1 . takeRecords ( ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( records . length ) {
callback ( records , this $1 ) ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
pending = false ;
} ) ; } ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
} ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
this . off = on ( window , 'scroll resize load' , this . apply , { passive : true , capture : true } ) ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
IntersectionObserverClass . prototype . takeRecords = function ( ) {
var this $1 = this ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return this . targets . filter ( function ( entry ) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var inView = isInView ( entry . target , this $1 . offsetTop , this $1 . offsetLeft ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( entry . isIntersecting === null || inView ^ entry . isIntersecting ) {
entry . isIntersecting = inView ;
return true ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
} ) ;
} ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
IntersectionObserverClass . prototype . observe = function ( target ) {
this . targets . push ( {
target : target ,
isIntersecting : null
} ) ;
this . apply ( ) ;
} ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
IntersectionObserverClass . prototype . disconnect = function ( ) {
this . targets = [ ] ;
this . off ( ) ;
} ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return IntersectionObserverClass ;
} ( ) ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var util = /*#__PURE__*/ Object . freeze ( {
ajax : ajax ,
getImage : getImage ,
transition : transition ,
Transition : Transition ,
animate : animate ,
Animation : Animation ,
attr : attr ,
hasAttr : hasAttr ,
removeAttr : removeAttr ,
data : data ,
addClass : addClass ,
removeClass : removeClass ,
removeClasses : removeClasses ,
replaceClass : replaceClass ,
hasClass : hasClass ,
toggleClass : toggleClass ,
positionAt : positionAt ,
offset : offset ,
position : position ,
height : height ,
width : width ,
2019-04-22 13:31:39 +00:00
boxModelAdjust : boxModelAdjust ,
2018-09-20 12:35:14 +00:00
flipPosition : flipPosition ,
isInView : isInView ,
scrolledOver : scrolledOver ,
scrollTop : scrollTop ,
2019-04-22 13:31:39 +00:00
offsetPosition : offsetPosition ,
toPx : toPx ,
2018-09-20 12:35:14 +00:00
ready : ready ,
index : index ,
getIndex : getIndex ,
empty : empty ,
html : html ,
prepend : prepend ,
append : append ,
before : before ,
after : after ,
remove : remove ,
wrapAll : wrapAll ,
wrapInner : wrapInner ,
unwrap : unwrap ,
fragment : fragment ,
apply : apply ,
2019-04-22 13:31:39 +00:00
$ : $ ,
$$ : $$ ,
2018-09-20 12:35:14 +00:00
isIE : isIE ,
isRtl : isRtl ,
hasTouch : hasTouch ,
pointerDown : pointerDown ,
pointerMove : pointerMove ,
pointerUp : pointerUp ,
pointerEnter : pointerEnter ,
pointerLeave : pointerLeave ,
2019-04-22 13:31:39 +00:00
pointerCancel : pointerCancel ,
2018-09-20 12:35:14 +00:00
on : on ,
off : off ,
once : once ,
trigger : trigger ,
createEvent : createEvent ,
toEventTargets : toEventTargets ,
2019-04-22 13:31:39 +00:00
isTouch : isTouch ,
getEventPos : getEventPos ,
2018-09-20 12:35:14 +00:00
fastdom : fastdom ,
isVoidElement : isVoidElement ,
isVisible : isVisible ,
selInput : selInput ,
isInput : isInput ,
filter : filter ,
within : within ,
bind : bind ,
hasOwn : hasOwn ,
hyphenate : hyphenate ,
camelize : camelize ,
ucfirst : ucfirst ,
startsWith : startsWith ,
endsWith : endsWith ,
includes : includes ,
2019-04-22 13:31:39 +00:00
findIndex : findIndex ,
2018-09-20 12:35:14 +00:00
isArray : isArray ,
isFunction : isFunction ,
isObject : isObject ,
isPlainObject : isPlainObject ,
isWindow : isWindow ,
isDocument : isDocument ,
isJQuery : isJQuery ,
isNode : isNode ,
isNodeCollection : isNodeCollection ,
isBoolean : isBoolean ,
isString : isString ,
isNumber : isNumber ,
isNumeric : isNumeric ,
2019-04-22 13:31:39 +00:00
isEmpty : isEmpty ,
2018-09-20 12:35:14 +00:00
isUndefined : isUndefined ,
toBoolean : toBoolean ,
toNumber : toNumber ,
toFloat : toFloat ,
toNode : toNode ,
toNodes : toNodes ,
toList : toList ,
toMs : toMs ,
2019-04-22 13:31:39 +00:00
isEqual : isEqual ,
2018-09-20 12:35:14 +00:00
swap : swap ,
assign : assign ,
each : each ,
sortBy : sortBy ,
2019-04-22 13:31:39 +00:00
uniqueBy : uniqueBy ,
2018-09-20 12:35:14 +00:00
clamp : clamp ,
noop : noop ,
intersectRect : intersectRect ,
pointInRect : pointInRect ,
Dimensions : Dimensions ,
MouseTracker : MouseTracker ,
mergeOptions : mergeOptions ,
parseOptions : parseOptions ,
Player : Player ,
Promise : Promise ,
Deferred : Deferred ,
2019-04-22 13:31:39 +00:00
IntersectionObserver : IntersectionObserver ,
2018-09-20 12:35:14 +00:00
query : query ,
queryAll : queryAll ,
find : find ,
findAll : findAll ,
matches : matches ,
closest : closest ,
parents : parents ,
escape : escape ,
css : css ,
getStyles : getStyles ,
getStyle : getStyle ,
getCssVar : getCssVar ,
2019-04-22 13:31:39 +00:00
propName : propName
2018-09-20 12:35:14 +00:00
} ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function componentAPI ( UIkit ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var DATA = UIkit . data ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var components = { } ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
UIkit . component = function ( name , options ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! options ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( isPlainObject ( components [ name ] ) ) {
components [ name ] = UIkit . extend ( components [ name ] ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return components [ name ] ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
UIkit [ name ] = function ( element , data ) {
2018-09-20 12:35:14 +00:00
var i = arguments . length , argsArray = Array ( i ) ;
while ( i -- ) argsArray [ i ] = arguments [ i ] ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var component = UIkit . component ( name ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( isPlainObject ( element ) ) {
return new component ( { data : element } ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( component . options . functional ) {
return new component ( { data : [ ] . concat ( argsArray ) } ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return element && element . nodeType ? init ( element ) : $$ ( element ) . map ( init ) [ 0 ] ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function init ( element ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var instance = UIkit . getComponent ( element , name ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( instance ) {
2019-04-22 13:31:39 +00:00
if ( ! data ) {
2018-09-20 12:35:14 +00:00
return instance ;
} else {
instance . $destroy ( ) ;
}
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return new component ( { el : element , data : data } ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var opt = isPlainObject ( options ) ? assign ( { } , options ) : options . options ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
opt . name = name ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( opt . install ) {
opt . install ( UIkit , opt , name ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
if ( UIkit . _initialized && ! opt . functional ) {
var id = hyphenate ( name ) ;
fastdom . read ( function ( ) { return UIkit [ name ] ( ( "[uk-" + id + "],[data-uk-" + id + "]" ) ) ; } ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
return components [ name ] = isPlainObject ( options ) ? opt : options ;
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
UIkit . getComponents = function ( element ) { return element && element [ DATA ] || { } ; } ;
UIkit . getComponent = function ( element , name ) { return UIkit . getComponents ( element ) [ name ] ; } ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
UIkit . connect = function ( node ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( node [ DATA ] ) {
for ( var name in node [ DATA ] ) {
node [ DATA ] [ name ] . _callConnected ( ) ;
}
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
for ( var i = 0 ; i < node . attributes . length ; i ++ ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var name$1 = getComponentName ( node . attributes [ i ] . name ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( name$1 && name$1 in components ) {
UIkit [ name$1 ] ( node ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
UIkit . disconnect = function ( node ) {
for ( var name in node [ DATA ] ) {
node [ DATA ] [ name ] . _callDisconnected ( ) ;
}
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function getComponentName ( attribute ) {
return startsWith ( attribute , 'uk-' ) || startsWith ( attribute , 'data-uk-' )
? camelize ( attribute . replace ( 'data-uk-' , '' ) . replace ( 'uk-' , '' ) )
: false ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function boot ( UIkit ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var connect = UIkit . connect ;
var disconnect = UIkit . disconnect ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! ( 'MutationObserver' in window ) ) {
2017-11-11 04:33:51 +00:00
return ;
}
2018-09-20 12:35:14 +00:00
if ( document . body ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
init ( ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} else {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
( new MutationObserver ( function ( ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( document . body ) {
this . disconnect ( ) ;
init ( ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ) ) . observe ( document , { childList : true , subtree : true } ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
function init ( ) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
apply ( document . body , connect ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
fastdom . flush ( ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
( new MutationObserver ( function ( mutations ) { return mutations . forEach ( applyMutation ) ; } ) ) . observe ( document , {
childList : true ,
subtree : true ,
characterData : true ,
attributes : true
} ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
UIkit . _initialized = true ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
function applyMutation ( mutation ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var target = mutation . target ;
var type = mutation . type ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var update = type !== 'attributes'
? applyChildList ( mutation )
: applyAttribute ( mutation ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
update && UIkit . update ( target ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
function applyAttribute ( ref ) {
var target = ref . target ;
var attributeName = ref . attributeName ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( attributeName === 'href' ) {
return true ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var name = getComponentName ( attributeName ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! name || ! ( name in UIkit ) ) {
return ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( hasAttr ( target , attributeName ) ) {
UIkit [ name ] ( target ) ;
return true ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
var component = UIkit . getComponent ( target , name ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( component ) {
component . $destroy ( ) ;
return true ;
}
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
function applyChildList ( ref ) {
var addedNodes = ref . addedNodes ;
var removedNodes = ref . removedNodes ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
for ( var i = 0 ; i < addedNodes . length ; i ++ ) {
2019-04-22 13:31:39 +00:00
apply ( addedNodes [ i ] , connect ) ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
for ( var i$1 = 0 ; i$1 < removedNodes . length ; i$1 ++ ) {
2019-04-22 13:31:39 +00:00
apply ( removedNodes [ i$1 ] , disconnect ) ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return true ;
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
function apply ( node , fn ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( node . nodeType !== 1 || hasAttr ( node , 'uk-no-boot' ) ) {
return ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
fn ( node ) ;
node = node . firstElementChild ;
while ( node ) {
var next = node . nextElementSibling ;
2019-04-22 13:31:39 +00:00
apply ( node , fn ) ;
2018-09-20 12:35:14 +00:00
node = next ;
2017-11-11 04:33:51 +00:00
}
}
}
2018-09-20 12:35:14 +00:00
function globalAPI ( UIkit ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var DATA = UIkit . data ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
UIkit . use = function ( plugin ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( plugin . installed ) {
return ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
plugin . call ( null , this ) ;
plugin . installed = true ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return this ;
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
UIkit . mixin = function ( mixin , component ) {
component = ( isString ( component ) ? UIkit . component ( component ) : component ) || this ;
component . options = mergeOptions ( component . options , mixin ) ;
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
UIkit . extend = function ( options ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
options = options || { } ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var Super = this ;
2019-04-22 13:31:39 +00:00
var Sub = function UIkitComponent ( options ) {
2018-09-20 12:35:14 +00:00
this . _init ( options ) ;
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
Sub . prototype = Object . create ( Super . prototype ) ;
Sub . prototype . constructor = Sub ;
Sub . options = mergeOptions ( Super . options , options ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
Sub . super = Super ;
Sub . extend = Super . extend ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return Sub ;
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
UIkit . update = function ( element , e ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
element = element ? toNode ( element ) : document . body ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
path ( element , function ( element ) { return update ( element [ DATA ] , e ) ; } ) ;
2018-09-20 12:35:14 +00:00
apply ( element , function ( element ) { return update ( element [ DATA ] , e ) ; } ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var container ;
Object . defineProperty ( UIkit , 'container' , {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
get : function ( ) {
return container || document . body ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
set : function ( element ) {
container = $ ( element ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function update ( data , e ) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( ! data ) {
2018-09-20 12:35:14 +00:00
return ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
for ( var name in data ) {
if ( data [ name ] . _connected ) {
data [ name ] . _callUpdate ( e ) ;
2018-09-20 12:35:14 +00:00
}
}
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
function path ( node , fn ) {
if ( node && node !== document . body && node . parentNode ) {
path ( node . parentNode , fn ) ;
fn ( node . parentNode ) ;
2018-09-20 12:35:14 +00:00
}
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function hooksAPI ( UIkit ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
UIkit . prototype . _callHook = function ( hook ) {
var this $1 = this ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var handlers = this . $options [ hook ] ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( handlers ) {
handlers . forEach ( function ( handler ) { return handler . call ( this $1 ) ; } ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
UIkit . prototype . _callConnected = function ( ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( this . _connected ) {
return ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
this . _data = { } ;
2019-04-22 13:31:39 +00:00
this . _computeds = { } ;
2018-09-20 12:35:14 +00:00
this . _initProps ( ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . _callHook ( 'beforeConnect' ) ;
this . _connected = true ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . _initEvents ( ) ;
this . _initObserver ( ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . _callHook ( 'connected' ) ;
this . _callUpdate ( ) ;
} ;
UIkit . prototype . _callDisconnected = function ( ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! this . _connected ) {
return ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
this . _callHook ( 'beforeDisconnect' ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( this . _observer ) {
this . _observer . disconnect ( ) ;
this . _observer = null ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . _unbindEvents ( ) ;
this . _callHook ( 'disconnected' ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . _connected = false ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
UIkit . prototype . _callUpdate = function ( e ) {
var this $1 = this ;
2019-04-22 13:31:39 +00:00
if ( e === void 0 ) e = 'update' ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var type = e . type || e ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( includes ( [ 'update' , 'resize' ] , type ) ) {
this . _callWatches ( ) ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var updates = this . $options . update ;
var ref = this . _frames ;
var reads = ref . reads ;
var writes = ref . writes ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! updates ) {
return ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
updates . forEach ( function ( ref , i ) {
var read = ref . read ;
var write = ref . write ;
var events = ref . events ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( type !== 'update' && ! includes ( events , type ) ) {
return ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( read && ! includes ( fastdom . reads , reads [ i ] ) ) {
reads [ i ] = fastdom . read ( function ( ) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var result = this $1 . _connected && read . call ( this $1 , this $1 . _data , type ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( result === false && write ) {
fastdom . clear ( writes [ i ] ) ;
} else if ( isPlainObject ( result ) ) {
assign ( this $1 . _data , result ) ;
}
} ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( write && ! includes ( fastdom . writes , writes [ i ] ) ) {
2019-04-22 13:31:39 +00:00
writes [ i ] = fastdom . write ( function ( ) { return this $1 . _connected && write . call ( this $1 , this $1 . _data , type ) ; } ) ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function stateAPI ( UIkit ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var uid = 0 ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
UIkit . prototype . _init = function ( options ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
options = options || { } ;
options . data = normalizeData ( options , this . constructor . options ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . $options = mergeOptions ( this . constructor . options , options , this ) ;
this . $el = null ;
this . $props = { } ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . _frames = { reads : { } , writes : { } } ;
this . _events = [ ] ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . _uid = uid ++ ;
this . _initData ( ) ;
this . _initMethods ( ) ;
this . _initComputeds ( ) ;
this . _callHook ( 'created' ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( options . el ) {
this . $mount ( options . el ) ;
}
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
UIkit . prototype . _initData = function ( ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var ref = this . $options ;
2019-04-22 13:31:39 +00:00
var data = ref . data ; if ( data === void 0 ) data = { } ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
for ( var key in data ) {
this . $props [ key ] = this [ key ] = data [ key ] ;
2018-09-20 12:35:14 +00:00
}
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
UIkit . prototype . _initMethods = function ( ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var ref = this . $options ;
var methods = ref . methods ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( methods ) {
for ( var key in methods ) {
2019-04-22 13:31:39 +00:00
this [ key ] = bind ( methods [ key ] , this ) ;
2018-09-20 12:35:14 +00:00
}
}
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
UIkit . prototype . _initComputeds = function ( ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var ref = this . $options ;
var computed = ref . computed ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
this . _computeds = { } ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( computed ) {
for ( var key in computed ) {
2019-04-22 13:31:39 +00:00
registerComputed ( this , key , computed [ key ] ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
}
} ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
UIkit . prototype . _callWatches = function ( ) {
var ref = this ;
var computed = ref . $options . computed ;
var _computeds = ref . _computeds ;
for ( var key in _computeds ) {
var value = _computeds [ key ] ;
delete _computeds [ key ] ;
if ( computed [ key ] . watch && ! isEqual ( value , this [ key ] ) ) {
computed [ key ] . watch . call ( this , this [ key ] , value ) ;
}
}
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
UIkit . prototype . _initProps = function ( props ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var key ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
props = props || getProps ( this . $options , this . $name ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
for ( key in props ) {
if ( ! isUndefined ( props [ key ] ) ) {
2019-04-22 13:31:39 +00:00
this . $props [ key ] = props [ key ] ;
2018-09-20 12:35:14 +00:00
}
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var exclude = [ this . $options . computed , this . $options . methods ] ;
2019-04-22 13:31:39 +00:00
for ( key in this . $props ) {
2018-09-20 12:35:14 +00:00
if ( key in props && notIn ( exclude , key ) ) {
2019-04-22 13:31:39 +00:00
this [ key ] = this . $props [ key ] ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
UIkit . prototype . _initEvents = function ( ) {
var this $1 = this ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var ref = this . $options ;
var events = ref . events ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( events ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
events . forEach ( function ( event ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! hasOwn ( event , 'handler' ) ) {
for ( var key in event ) {
registerEvent ( this $1 , event [ key ] , key ) ;
}
} else {
registerEvent ( this $1 , event ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ) ;
}
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
UIkit . prototype . _unbindEvents = function ( ) {
this . _events . forEach ( function ( unbind ) { return unbind ( ) ; } ) ;
this . _events = [ ] ;
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
UIkit . prototype . _initObserver = function ( ) {
2017-11-11 04:33:51 +00:00
var this $1 = this ;
2018-09-20 12:35:14 +00:00
var ref = this . $options ;
var attrs = ref . attrs ;
var props = ref . props ;
var el = ref . el ;
if ( this . _observer || ! props || attrs === false ) {
return ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
attrs = isArray ( attrs ) ? attrs : Object . keys ( props ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . _observer = new MutationObserver ( function ( ) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var data = getProps ( this $1 . $options , this $1 . $name ) ;
if ( attrs . some ( function ( key ) { return ! isUndefined ( data [ key ] ) && data [ key ] !== this $1 . $props [ key ] ; } ) ) {
2018-09-20 12:35:14 +00:00
this $1 . $reset ( ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var filter = attrs . map ( function ( key ) { return hyphenate ( key ) ; } ) . concat ( this . $name ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . _observer . observe ( el , {
attributes : true ,
2019-04-22 13:31:39 +00:00
attributeFilter : filter . concat ( filter . map ( function ( key ) { return ( "data-" + key ) ; } ) )
2018-09-20 12:35:14 +00:00
} ) ;
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function getProps ( opts , name ) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var data$1 = { } ;
2018-09-20 12:35:14 +00:00
var args = opts . args ; if ( args === void 0 ) args = [ ] ;
var props = opts . props ; if ( props === void 0 ) props = { } ;
var el = opts . el ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! props ) {
2019-04-22 13:31:39 +00:00
return data$1 ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
for ( var key in props ) {
var prop = hyphenate ( key ) ;
var value = data ( el , prop ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! isUndefined ( value ) ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
value = props [ key ] === Boolean && value === ''
? true
: coerce ( props [ key ] , value ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( prop === 'target' && ( ! value || startsWith ( value , '_' ) ) ) {
continue ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
data$1 [ key ] = value ;
2018-09-20 12:35:14 +00:00
}
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var options = parseOptions ( data ( el , name ) , args ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
for ( var key$1 in options ) {
var prop$1 = camelize ( key$1 ) ;
if ( props [ prop$1 ] !== undefined ) {
2019-04-22 13:31:39 +00:00
data$1 [ prop$1 ] = coerce ( props [ prop$1 ] , options [ key$1 ] ) ;
2018-09-20 12:35:14 +00:00
}
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return data$1 ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function registerComputed ( component , key , cb ) {
Object . defineProperty ( component , key , {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
enumerable : true ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
get : function ( ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var _computeds = component . _computeds ;
var $props = component . $props ;
var $el = component . $el ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! hasOwn ( _computeds , key ) ) {
2019-04-22 13:31:39 +00:00
_computeds [ key ] = ( cb . get || cb ) . call ( component , $props , $el ) ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return _computeds [ key ] ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
set : function ( value ) {
2019-04-22 13:31:39 +00:00
var _computeds = component . _computeds ;
_computeds [ key ] = cb . set ? cb . set . call ( component , value ) : value ;
if ( isUndefined ( _computeds [ key ] ) ) {
delete _computeds [ key ] ;
}
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function registerEvent ( component , event , key ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! isPlainObject ( event ) ) {
event = ( { name : key , handler : event } ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var name = event . name ;
var el = event . el ;
var handler = event . handler ;
var capture = event . capture ;
var passive = event . passive ;
var delegate = event . delegate ;
2019-04-22 13:31:39 +00:00
var filter = event . filter ;
2018-09-20 12:35:14 +00:00
var self = event . self ;
el = isFunction ( el )
? el . call ( component )
: el || component . $el ;
if ( isArray ( el ) ) {
el . forEach ( function ( el ) { return registerEvent ( component , assign ( { } , event , { el : el } ) , key ) ; } ) ;
return ;
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
if ( ! el || filter && ! filter . call ( component ) ) {
2018-09-20 12:35:14 +00:00
return ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
handler = detail ( isString ( handler ) ? component [ handler ] : bind ( handler , component ) ) ;
if ( self ) {
handler = selfFilter ( handler ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
component . _events . push (
on (
el ,
name ,
! delegate
? null
: isString ( delegate )
? delegate
: delegate . call ( component ) ,
handler ,
isBoolean ( passive )
? { passive : passive , capture : capture }
: capture
)
) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function selfFilter ( handler ) {
return function selfHandler ( e ) {
if ( e . target === e . currentTarget || e . target === e . current ) {
return handler . call ( null , e ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
} ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function notIn ( options , key ) {
return options . every ( function ( arr ) { return ! arr || ! hasOwn ( arr , key ) ; } ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function detail ( listener ) {
return function ( e ) { return isArray ( e . detail ) ? listener . apply ( void 0 , [ e ] . concat ( e . detail ) ) : listener ( e ) ; } ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function coerce ( type , value ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( type === Boolean ) {
return toBoolean ( value ) ;
} else if ( type === Number ) {
return toNumber ( value ) ;
} else if ( type === 'list' ) {
return toList ( value ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return type ? type ( value ) : value ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function normalizeData ( ref , ref$1 ) {
2019-04-22 13:31:39 +00:00
var data = ref . data ;
2018-09-20 12:35:14 +00:00
var el = ref . el ;
var args = ref$1 . args ;
var props = ref$1 . props ; if ( props === void 0 ) props = { } ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
data = isArray ( data )
? ! isEmpty ( args )
? data . slice ( 0 , args . length ) . reduce ( function ( data , value , index ) {
2018-09-20 12:35:14 +00:00
if ( isPlainObject ( value ) ) {
2019-04-22 13:31:39 +00:00
assign ( data , value ) ;
2018-09-20 12:35:14 +00:00
} else {
2019-04-22 13:31:39 +00:00
data [ args [ index ] ] = value ;
2018-09-20 12:35:14 +00:00
}
2019-04-22 13:31:39 +00:00
return data ;
2018-09-20 12:35:14 +00:00
} , { } )
: undefined
2019-04-22 13:31:39 +00:00
: data ;
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
if ( data ) {
for ( var key in data ) {
if ( isUndefined ( data [ key ] ) ) {
delete data [ key ] ;
2018-09-20 12:35:14 +00:00
} else {
2019-04-22 13:31:39 +00:00
data [ key ] = props [ key ] ? coerce ( props [ key ] , data [ key ] , el ) : data [ key ] ;
2018-09-20 12:35:14 +00:00
}
}
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return data ;
2018-09-20 12:35:14 +00:00
}
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function instanceAPI ( UIkit ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var DATA = UIkit . data ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
UIkit . prototype . $mount = function ( el ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var ref = this . $options ;
var name = ref . name ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! el [ DATA ] ) {
el [ DATA ] = { } ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( el [ DATA ] [ name ] ) {
return ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
el [ DATA ] [ name ] = this ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . $el = this . $options . el = this . $options . el || el ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( within ( el , document ) ) {
this . _callConnected ( ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
UIkit . prototype . $emit = function ( e ) {
this . _callUpdate ( e ) ;
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
UIkit . prototype . $reset = function ( ) {
this . _callDisconnected ( ) ;
this . _callConnected ( ) ;
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
UIkit . prototype . $destroy = function ( removeEl ) {
if ( removeEl === void 0 ) removeEl = false ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var ref = this . $options ;
var el = ref . el ;
var name = ref . name ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( el ) {
this . _callDisconnected ( ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
this . _callHook ( 'destroy' ) ;
if ( ! el || ! el [ DATA ] ) {
return ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
delete el [ DATA ] [ name ] ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( ! isEmpty ( el [ DATA ] ) ) {
2018-09-20 12:35:14 +00:00
delete el [ DATA ] ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( removeEl ) {
remove ( this . $el ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
} ;
2019-04-22 13:31:39 +00:00
UIkit . prototype . $create = function ( component , element , data ) {
return UIkit [ component ] ( element , data ) ;
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
UIkit . prototype . $update = UIkit . update ;
UIkit . prototype . $getComponent = UIkit . getComponent ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var names = { } ;
Object . defineProperties ( UIkit . prototype , {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
$container : Object . getOwnPropertyDescriptor ( UIkit , 'container' ) ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
$name : {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
get : function ( ) {
var ref = this . $options ;
var name = ref . name ;
if ( ! names [ name ] ) {
names [ name ] = UIkit . prefix + hyphenate ( name ) ;
}
return names [ name ] ;
}
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
} ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var UIkit = function ( options ) {
this . _init ( options ) ;
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
UIkit . util = util ;
UIkit . data = '__uikit__' ;
UIkit . prefix = 'uk-' ;
UIkit . options = { } ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
globalAPI ( UIkit ) ;
hooksAPI ( UIkit ) ;
stateAPI ( UIkit ) ;
componentAPI ( UIkit ) ;
instanceAPI ( UIkit ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var Class = {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
connected : function ( ) {
2019-04-22 13:31:39 +00:00
! hasClass ( this . $el , this . $name ) && addClass ( this . $el , this . $name ) ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var Togglable = {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
props : {
cls : Boolean ,
animation : 'list' ,
duration : Number ,
origin : String ,
transition : String ,
queued : Boolean
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
data : {
cls : false ,
animation : [ false ] ,
duration : 200 ,
origin : false ,
transition : 'linear' ,
queued : false ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
initProps : {
overflow : '' ,
height : '' ,
paddingTop : '' ,
paddingBottom : '' ,
marginTop : '' ,
marginBottom : ''
} ,
hideProps : {
overflow : 'hidden' ,
height : 0 ,
paddingTop : 0 ,
paddingBottom : 0 ,
marginTop : 0 ,
marginBottom : 0
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
computed : {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
hasAnimation : function ( ref ) {
var animation = ref . animation ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return ! ! animation [ 0 ] ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
hasTransition : function ( ref ) {
var animation = ref . animation ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return this . hasAnimation && animation [ 0 ] === true ;
}
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
methods : {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
toggleElement : function ( targets , show , animate ) {
2018-09-20 12:35:14 +00:00
var this $1 = this ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return new Promise ( function ( resolve ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
targets = toNodes ( targets ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var all = function ( targets ) { return Promise . all ( targets . map ( function ( el ) { return this $1 . _toggleElement ( el , show , animate ) ; } ) ) ; } ;
2018-09-20 12:35:14 +00:00
var toggled = targets . filter ( function ( el ) { return this $1 . isToggled ( el ) ; } ) ;
var untoggled = targets . filter ( function ( el ) { return ! includes ( toggled , el ) ; } ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var p ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( ! this $1 . queued || ! isUndefined ( animate ) || ! isUndefined ( show ) || ! this $1 . hasAnimation || targets . length < 2 ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
p = all ( untoggled . concat ( toggled ) ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} else {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var body = document . body ;
var scroll = body . scrollTop ;
var el = toggled [ 0 ] ;
var inProgress = Animation . inProgress ( el ) && hasClass ( el , 'uk-animation-leave' )
|| Transition . inProgress ( el ) && el . style . height === '0px' ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
p = all ( toggled ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! inProgress ) {
p = p . then ( function ( ) {
var p = all ( untoggled ) ;
body . scrollTop = scroll ;
return p ;
} ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
p . then ( resolve , noop ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ) ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
toggleNow : function ( targets , show ) {
var this $1 = this ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return new Promise ( function ( resolve ) { return Promise . all ( toNodes ( targets ) . map ( function ( el ) { return this $1 . _toggleElement ( el , show , false ) ; } ) ) . then ( resolve , noop ) ; } ) ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
isToggled : function ( el ) {
var nodes = toNodes ( el || this . $el ) ;
return this . cls
? hasClass ( nodes , this . cls . split ( ' ' ) [ 0 ] )
: ! hasAttr ( nodes , 'hidden' ) ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
updateAria : function ( el ) {
if ( this . cls === false ) {
attr ( el , 'aria-hidden' , ! this . isToggled ( el ) ) ;
}
} ,
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
_toggleElement : function ( el , show , animate ) {
2018-09-20 12:35:14 +00:00
var this $1 = this ;
show = isBoolean ( show )
? show
: Animation . inProgress ( el )
? hasClass ( el , 'uk-animation-leave' )
: Transition . inProgress ( el )
? el . style . height === '0px'
: ! this . isToggled ( el ) ;
if ( ! trigger ( el , ( "before" + ( show ? 'show' : 'hide' ) ) , [ this ] ) ) {
return Promise . reject ( ) ;
}
2019-04-22 13:31:39 +00:00
var promise = (
isFunction ( animate )
? animate
: animate === false || ! this . hasAnimation
? this . _toggle
: this . hasTransition
? toggleHeight ( this )
: toggleAnimation ( this )
2018-09-20 12:35:14 +00:00
) ( el , show ) ;
trigger ( el , show ? 'show' : 'hide' , [ this ] ) ;
2019-04-22 13:31:39 +00:00
var final = function ( ) {
2018-09-20 12:35:14 +00:00
trigger ( el , show ? 'shown' : 'hidden' , [ this $1 ] ) ;
this $1 . $update ( el ) ;
2019-04-22 13:31:39 +00:00
} ;
return promise ? promise . then ( final ) : Promise . resolve ( final ( ) ) ;
2018-09-20 12:35:14 +00:00
} ,
_toggle : function ( el , toggled ) {
if ( ! el ) {
return ;
}
2019-04-22 13:31:39 +00:00
toggled = Boolean ( toggled ) ;
2018-09-20 12:35:14 +00:00
var changed ;
if ( this . cls ) {
2019-04-22 13:31:39 +00:00
changed = includes ( this . cls , ' ' ) || toggled !== hasClass ( el , this . cls ) ;
2018-09-20 12:35:14 +00:00
changed && toggleClass ( el , this . cls , includes ( this . cls , ' ' ) ? undefined : toggled ) ;
} else {
2019-04-22 13:31:39 +00:00
changed = toggled === hasAttr ( el , 'hidden' ) ;
2018-09-20 12:35:14 +00:00
changed && attr ( el , 'hidden' , ! toggled ? '' : null ) ;
}
2019-04-22 13:31:39 +00:00
$$ ( '[autofocus]' , el ) . some ( function ( el ) { return isVisible ( el ) ? el . focus ( ) || true : el . blur ( ) ; } ) ;
2018-09-20 12:35:14 +00:00
this . updateAria ( el ) ;
changed && this . $update ( el ) ;
2019-04-22 13:31:39 +00:00
}
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
}
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
} ;
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
function toggleHeight ( ref ) {
var isToggled = ref . isToggled ;
var duration = ref . duration ;
var initProps = ref . initProps ;
var hideProps = ref . hideProps ;
var transition = ref . transition ;
var _toggle = ref . _toggle ;
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
return function ( el , show ) {
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
var inProgress = Transition . inProgress ( el ) ;
var inner = el . hasChildNodes ? toFloat ( css ( el . firstElementChild , 'marginTop' ) ) + toFloat ( css ( el . lastElementChild , 'marginBottom' ) ) : 0 ;
var currentHeight = isVisible ( el ) ? height ( el ) + ( inProgress ? 0 : inner ) : 0 ;
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
Transition . cancel ( el ) ;
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
if ( ! isToggled ( el ) ) {
_toggle ( el , true ) ;
}
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
height ( el , '' ) ;
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
// Update child components first
fastdom . flush ( ) ;
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
var endHeight = height ( el ) + ( inProgress ? 0 : inner ) ;
height ( el , currentHeight ) ;
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
return ( show
? Transition . start ( el , assign ( { } , initProps , { overflow : 'hidden' , height : endHeight } ) , Math . round ( duration * ( 1 - currentHeight / endHeight ) ) , transition )
: Transition . start ( el , hideProps , Math . round ( duration * ( currentHeight / endHeight ) ) , transition ) . then ( function ( ) { return _toggle ( el , false ) ; } )
) . then ( function ( ) { return css ( el , initProps ) ; } ) ;
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
} ;
}
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
function toggleAnimation ( ref ) {
var animation = ref . animation ;
var duration = ref . duration ;
var origin = ref . origin ;
var _toggle = ref . _toggle ;
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
return function ( el , show ) {
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
Animation . cancel ( el ) ;
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
if ( show ) {
_toggle ( el , true ) ;
return Animation . in ( el , animation [ 0 ] , duration , origin ) ;
2018-09-20 12:35:14 +00:00
}
2019-04-22 13:31:39 +00:00
return Animation . out ( el , animation [ 1 ] || animation [ 0 ] , duration , origin ) . then ( function ( ) { return _toggle ( el , false ) ; } ) ;
} ;
}
2018-09-20 12:35:14 +00:00
var Accordion = {
mixins : [ Class , Togglable ] ,
props : {
targets : String ,
active : null ,
collapsible : Boolean ,
multiple : Boolean ,
toggle : String ,
content : String ,
2017-11-11 04:33:51 +00:00
transition : String
} ,
2018-09-20 12:35:14 +00:00
data : {
2017-11-11 04:33:51 +00:00
targets : '> *' ,
active : false ,
animation : [ true ] ,
collapsible : true ,
multiple : false ,
clsOpen : 'uk-open' ,
toggle : '> .uk-accordion-title' ,
content : '> .uk-accordion-content' ,
transition : 'ease'
} ,
computed : {
2018-09-20 12:35:14 +00:00
items : function ( ref , $el ) {
2017-11-11 04:33:51 +00:00
var targets = ref . targets ;
return $$ ( targets , $el ) ;
}
} ,
events : [
{
name : 'click' ,
2018-09-20 12:35:14 +00:00
delegate : function ( ) {
2017-11-11 04:33:51 +00:00
return ( ( this . targets ) + " " + ( this . $props . toggle ) ) ;
} ,
2018-09-20 12:35:14 +00:00
handler : function ( e ) {
2017-11-11 04:33:51 +00:00
e . preventDefault ( ) ;
this . toggle ( index ( $$ ( ( ( this . targets ) + " " + ( this . $props . toggle ) ) , this . $el ) , e . current ) ) ;
}
}
] ,
2018-09-20 12:35:14 +00:00
connected : function ( ) {
if ( this . active === false ) {
return ;
}
var active = this . items [ Number ( this . active ) ] ;
if ( active && ! hasClass ( active , this . clsOpen ) ) {
2017-11-11 04:33:51 +00:00
this . toggle ( active , false ) ;
}
} ,
2018-09-20 12:35:14 +00:00
update : function ( ) {
2017-11-11 04:33:51 +00:00
var this $1 = this ;
2019-04-22 13:31:39 +00:00
this . items . forEach ( function ( el ) { return this $1 . _toggle ( $ ( this $1 . content , el ) , hasClass ( el , this $1 . clsOpen ) ) ; } ) ;
2017-11-11 04:33:51 +00:00
var active = ! this . collapsible && ! hasClass ( this . items , this . clsOpen ) && this . items [ 0 ] ;
if ( active ) {
this . toggle ( active , false ) ;
}
} ,
methods : {
2019-04-22 13:31:39 +00:00
toggle : function ( item , animate ) {
2017-11-11 04:33:51 +00:00
var this $1 = this ;
2019-04-22 13:31:39 +00:00
var index = getIndex ( item , this . items ) ;
2018-09-20 12:35:14 +00:00
var active = filter ( this . items , ( "." + ( this . clsOpen ) ) ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
item = this . items [ index ] ;
2017-11-11 04:33:51 +00:00
item && [ item ]
. concat ( ! this . multiple && ! includes ( active , item ) && active || [ ] )
. forEach ( function ( el ) {
2018-09-20 12:35:14 +00:00
var isItem = el === item ;
var state = isItem && ! hasClass ( el , this $1 . clsOpen ) ;
2017-11-11 04:33:51 +00:00
if ( ! state && isItem && ! this $1 . collapsible && active . length < 2 ) {
return ;
}
toggleClass ( el , this $1 . clsOpen , state ) ;
2018-09-20 12:35:14 +00:00
var content = el . _wrapper ? el . _wrapper . firstElementChild : $ ( this $1 . content , el ) ;
2017-11-11 04:33:51 +00:00
if ( ! el . _wrapper ) {
el . _wrapper = wrapAll ( content , '<div>' ) ;
attr ( el . _wrapper , 'hidden' , state ? '' : null ) ;
}
2019-04-22 13:31:39 +00:00
this $1 . _toggle ( content , true ) ;
this $1 . toggleElement ( el . _wrapper , state , animate ) . then ( function ( ) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( hasClass ( el , this $1 . clsOpen ) !== state ) {
return ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( ! state ) {
this $1 . _toggle ( content , false ) ;
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
el . _wrapper = null ;
unwrap ( content ) ;
2017-11-11 04:33:51 +00:00
} ) ;
} ) ;
}
}
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var Alert = {
2017-11-11 04:33:51 +00:00
mixins : [ Class , Togglable ] ,
args : 'animation' ,
props : {
close : String
} ,
2018-09-20 12:35:14 +00:00
data : {
2017-11-11 04:33:51 +00:00
animation : [ true ] ,
selClose : '.uk-alert-close' ,
duration : 150 ,
2018-09-20 12:35:14 +00:00
hideProps : assign ( { opacity : 0 } , Togglable . data . hideProps )
2017-11-11 04:33:51 +00:00
} ,
events : [
{
name : 'click' ,
2018-09-20 12:35:14 +00:00
delegate : function ( ) {
2017-11-11 04:33:51 +00:00
return this . selClose ;
} ,
2018-09-20 12:35:14 +00:00
handler : function ( e ) {
2017-11-11 04:33:51 +00:00
e . preventDefault ( ) ;
this . close ( ) ;
}
}
] ,
methods : {
2018-09-20 12:35:14 +00:00
close : function ( ) {
2017-11-11 04:33:51 +00:00
var this $1 = this ;
this . toggleElement ( this . $el ) . then ( function ( ) { return this $1 . $destroy ( true ) ; } ) ;
}
}
2018-09-20 12:35:14 +00:00
} ;
function Core ( UIkit ) {
ready ( function ( ) {
2019-04-22 13:31:39 +00:00
UIkit . update ( ) ;
on ( window , 'load resize' , function ( ) { return UIkit . update ( null , 'resize' ) ; } ) ;
2018-09-20 12:35:14 +00:00
on ( document , 'loadedmetadata load' , function ( ref ) {
var target = ref . target ;
2019-04-22 13:31:39 +00:00
return UIkit . update ( target , 'resize' ) ;
2018-09-20 12:35:14 +00:00
} , true ) ;
2019-04-22 13:31:39 +00:00
// throttle `scroll` event (Safari triggers multiple `scroll` events per frame)
var pending ;
on ( window , 'scroll' , function ( e ) {
if ( pending ) {
return ;
}
pending = true ;
fastdom . write ( function ( ) { return pending = false ; } ) ;
var target = e . target ;
UIkit . update ( target . nodeType !== 1 ? document . body : target , e . type ) ;
} , { passive : true , capture : true } ) ;
var started = 0 ;
2018-09-20 12:35:14 +00:00
on ( document , 'animationstart' , function ( ref ) {
var target = ref . target ;
if ( ( css ( target , 'animationName' ) || '' ) . match ( /^uk-.*(left|right)/ ) ) {
started ++ ;
css ( document . body , 'overflowX' , 'hidden' ) ;
setTimeout ( function ( ) {
if ( ! -- started ) {
css ( document . body , 'overflowX' , '' ) ;
}
} , toMs ( css ( target , 'animationDuration' ) ) + 100 ) ;
}
} , true ) ;
2019-04-22 13:31:39 +00:00
} ) ;
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
var off ;
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
on ( document , pointerDown , function ( e ) {
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
off && off ( ) ;
if ( ! isTouch ( e ) ) {
return ;
2018-09-20 12:35:14 +00:00
}
2019-04-22 13:31:39 +00:00
var pos = getEventPos ( e ) ;
var target = 'tagName' in e . target ? e . target : e . target . parentNode ;
off = once ( document , pointerUp , function ( e ) {
var ref = getEventPos ( e ) ;
var x = ref . x ;
var y = ref . y ;
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
// swipe
if ( target && x && Math . abs ( pos . x - x ) > 100 || y && Math . abs ( pos . y - y ) > 100 ) {
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
setTimeout ( function ( ) {
trigger ( target , 'swipe' ) ;
trigger ( target , ( "swipe" + ( swipeDirection ( pos . x , pos . y , x , y ) ) ) ) ;
2018-09-20 12:35:14 +00:00
} ) ;
2019-04-22 13:31:39 +00:00
2018-09-20 12:35:14 +00:00
}
} ) ;
2019-04-22 13:31:39 +00:00
} , { passive : true } ) ;
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
}
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
function swipeDirection ( x1 , y1 , x2 , y2 ) {
return Math . abs ( x1 - x2 ) >= Math . abs ( y1 - y2 )
? x1 - x2 > 0
? 'Left'
: 'Right'
: y1 - y2 > 0
? 'Up'
: 'Down' ;
2018-09-20 12:35:14 +00:00
}
var Video = {
args : 'autoplay' ,
props : {
automute : Boolean ,
2019-04-22 13:31:39 +00:00
autoplay : Boolean
2018-09-20 12:35:14 +00:00
} ,
data : {
automute : false ,
autoplay : true
} ,
computed : {
inView : function ( ref ) {
var autoplay = ref . autoplay ;
return autoplay === 'inview' ;
}
} ,
connected : function ( ) {
if ( this . inView && ! hasAttr ( this . $el , 'preload' ) ) {
this . $el . preload = 'none' ;
}
this . player = new Player ( this . $el ) ;
if ( this . automute ) {
this . player . mute ( ) ;
}
} ,
2019-04-22 13:31:39 +00:00
update : {
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
read : function ( ) {
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
return ! this . player
? false
: {
visible : isVisible ( this . $el ) && css ( this . $el , 'visibility' ) !== 'hidden' ,
inView : this . inView && isInView ( this . $el )
} ;
} ,
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
write : function ( ref ) {
var visible = ref . visible ;
var inView = ref . inView ;
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
if ( ! visible || this . inView && ! inView ) {
this . player . pause ( ) ;
} else if ( this . autoplay === true || this . inView && inView ) {
this . player . play ( ) ;
}
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
} ,
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
events : [ 'resize' , 'scroll' ]
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var Cover = {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
mixins : [ Class , Video ] ,
2017-11-11 04:33:51 +00:00
props : {
width : Number ,
height : Number
} ,
2018-09-20 12:35:14 +00:00
data : {
2017-11-11 04:33:51 +00:00
automute : true
} ,
update : {
2018-09-20 12:35:14 +00:00
read : function ( ) {
2017-11-11 04:33:51 +00:00
var el = this . $el ;
if ( ! isVisible ( el ) ) {
2018-09-20 12:35:14 +00:00
return false ;
2017-11-11 04:33:51 +00:00
}
var ref = el . parentNode ;
2019-04-22 13:31:39 +00:00
var height = ref . offsetHeight ;
var width = ref . offsetWidth ;
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
return { height : height , width : width } ;
2018-09-20 12:35:14 +00:00
} ,
write : function ( ref ) {
2019-04-22 13:31:39 +00:00
var height = ref . height ;
var width = ref . width ;
2018-09-20 12:35:14 +00:00
var el = this . $el ;
var elWidth = this . width || el . naturalWidth || el . videoWidth || el . clientWidth ;
var elHeight = this . height || el . naturalHeight || el . videoHeight || el . clientHeight ;
if ( ! elWidth || ! elHeight ) {
return ;
}
css ( el , Dimensions . cover (
{
width : elWidth ,
height : elHeight
} ,
{
2019-04-22 13:31:39 +00:00
width : width + ( width % 2 ? 1 : 0 ) ,
height : height + ( height % 2 ? 1 : 0 )
2018-09-20 12:35:14 +00:00
}
) ) ;
2017-11-11 04:33:51 +00:00
} ,
2019-04-22 13:31:39 +00:00
events : [ 'resize' ]
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
} ;
var Position = {
props : {
pos : String ,
offset : null ,
flip : Boolean ,
clsPos : String
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
data : {
pos : ( "bottom-" + ( ! isRtl ? 'left' : 'right' ) ) ,
flip : true ,
offset : false ,
clsPos : ''
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
computed : {
pos : function ( ref ) {
var pos = ref . pos ;
return ( pos + ( ! includes ( pos , '-' ) ? '-center' : '' ) ) . split ( '-' ) ;
} ,
dir : function ( ) {
return this . pos [ 0 ] ;
} ,
align : function ( ) {
return this . pos [ 1 ] ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
methods : {
positionAt : function ( element , target , boundary ) {
removeClasses ( element , ( ( this . clsPos ) + "-(top|bottom|left|right)(-[a-z]+)?" ) ) ;
css ( element , { top : '' , left : '' } ) ;
var node ;
var ref = this ;
2019-04-22 13:31:39 +00:00
var offset$1 = ref . offset ;
var axis = this . getAxis ( ) ;
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
if ( ! isNumeric ( offset$1 ) ) {
node = $ ( offset$1 ) ;
offset$1 = node
2018-09-20 12:35:14 +00:00
? offset ( node ) [ axis === 'x' ? 'left' : 'top' ] - offset ( target ) [ axis === 'x' ? 'right' : 'bottom' ]
: 0 ;
2019-04-22 13:31:39 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var ref$1 = positionAt (
element ,
target ,
axis === 'x' ? ( ( flipPosition ( this . dir ) ) + " " + ( this . align ) ) : ( ( this . align ) + " " + ( flipPosition ( this . dir ) ) ) ,
axis === 'x' ? ( ( this . dir ) + " " + ( this . align ) ) : ( ( this . align ) + " " + ( this . dir ) ) ,
2019-04-22 13:31:39 +00:00
axis === 'x' ? ( "" + ( this . dir === 'left' ? - offset$1 : offset$1 ) ) : ( " " + ( this . dir === 'top' ? - offset$1 : offset$1 ) ) ,
2018-09-20 12:35:14 +00:00
null ,
this . flip ,
boundary
) . target ;
var x = ref$1 . x ;
var y = ref$1 . y ;
this . dir = axis === 'x' ? x : y ;
this . align = axis === 'x' ? y : x ;
toggleClass ( element , ( ( this . clsPos ) + "-" + ( this . dir ) + "-" + ( this . align ) ) , this . offset === false ) ;
} ,
getAxis : function ( ) {
return this . dir === 'top' || this . dir === 'bottom' ? 'y' : 'x' ;
}
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
var active ;
2018-09-20 12:35:14 +00:00
var Drop = {
2017-11-11 04:33:51 +00:00
mixins : [ Position , Togglable ] ,
args : 'pos' ,
props : {
mode : 'list' ,
toggle : Boolean ,
2018-09-20 12:35:14 +00:00
boundary : Boolean ,
2017-11-11 04:33:51 +00:00
boundaryAlign : Boolean ,
delayShow : Number ,
delayHide : Number ,
clsDrop : String
} ,
2018-09-20 12:35:14 +00:00
data : {
2017-11-11 04:33:51 +00:00
mode : [ 'click' , 'hover' ] ,
2018-09-20 12:35:14 +00:00
toggle : '- *' ,
boundary : window ,
2017-11-11 04:33:51 +00:00
boundaryAlign : false ,
delayShow : 0 ,
delayHide : 800 ,
clsDrop : false ,
hoverIdle : 200 ,
animation : [ 'uk-animation-fade' ] ,
cls : 'uk-open'
} ,
2018-09-20 12:35:14 +00:00
computed : {
boundary : function ( ref , $el ) {
var boundary = ref . boundary ;
return query ( boundary , $el ) ;
} ,
clsDrop : function ( ref ) {
var clsDrop = ref . clsDrop ;
return clsDrop || ( "uk-" + ( this . $options . name ) ) ;
} ,
clsPos : function ( ) {
return this . clsDrop ;
}
} ,
2019-04-22 13:31:39 +00:00
created : function ( ) {
2017-11-11 04:33:51 +00:00
this . tracker = new MouseTracker ( ) ;
2018-09-20 12:35:14 +00:00
} ,
connected : function ( ) {
2017-11-11 04:33:51 +00:00
addClass ( this . $el , this . clsDrop ) ;
2018-09-20 12:35:14 +00:00
var ref = this . $props ;
var toggle = ref . toggle ;
this . toggle = toggle && this . $create ( 'toggle' , query ( toggle , this . $el ) , {
target : this . $el ,
mode : this . mode
} ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
! this . toggle && trigger ( this . $el , 'updatearia' ) ;
2017-11-11 04:33:51 +00:00
} ,
events : [
2018-09-20 12:35:14 +00:00
2017-11-11 04:33:51 +00:00
{
name : 'click' ,
2018-09-20 12:35:14 +00:00
delegate : function ( ) {
2017-11-11 04:33:51 +00:00
return ( "." + ( this . clsDrop ) + "-close" ) ;
} ,
2018-09-20 12:35:14 +00:00
handler : function ( e ) {
2017-11-11 04:33:51 +00:00
e . preventDefault ( ) ;
this . hide ( false ) ;
}
} ,
{
name : 'click' ,
2018-09-20 12:35:14 +00:00
delegate : function ( ) {
2017-11-11 04:33:51 +00:00
return 'a[href^="#"]' ;
} ,
2018-09-20 12:35:14 +00:00
handler : function ( e ) {
2017-11-11 04:33:51 +00:00
if ( e . defaultPrevented ) {
return ;
}
var id = e . target . hash ;
if ( ! id ) {
e . preventDefault ( ) ;
}
if ( ! id || ! within ( id , this . $el ) ) {
this . hide ( false ) ;
}
}
} ,
{
name : 'beforescroll' ,
2018-09-20 12:35:14 +00:00
handler : function ( ) {
2017-11-11 04:33:51 +00:00
this . hide ( false ) ;
}
} ,
{
name : 'toggle' ,
self : true ,
2018-09-20 12:35:14 +00:00
handler : function ( e , toggle ) {
2017-11-11 04:33:51 +00:00
e . preventDefault ( ) ;
if ( this . isToggled ( ) ) {
this . hide ( false ) ;
} else {
this . show ( toggle , false ) ;
}
}
} ,
{
name : pointerEnter ,
2018-09-20 12:35:14 +00:00
filter : function ( ) {
2017-11-11 04:33:51 +00:00
return includes ( this . mode , 'hover' ) ;
} ,
2018-09-20 12:35:14 +00:00
handler : function ( e ) {
2017-11-11 04:33:51 +00:00
if ( isTouch ( e ) ) {
return ;
}
if ( active
&& active !== this
&& active . toggle
&& includes ( active . toggle . mode , 'hover' )
&& ! within ( e . target , active . toggle . $el )
&& ! pointInRect ( { x : e . pageX , y : e . pageY } , offset ( active . $el ) )
) {
active . hide ( false ) ;
}
e . preventDefault ( ) ;
this . show ( this . toggle ) ;
}
} ,
{
name : 'toggleshow' ,
2018-09-20 12:35:14 +00:00
handler : function ( e , toggle ) {
2017-11-11 04:33:51 +00:00
if ( toggle && ! includes ( toggle . target , this . $el ) ) {
return ;
}
e . preventDefault ( ) ;
this . show ( toggle || this . toggle ) ;
}
} ,
{
name : ( "togglehide " + pointerLeave ) ,
2018-09-20 12:35:14 +00:00
handler : function ( e , toggle ) {
2017-11-11 04:33:51 +00:00
if ( isTouch ( e ) || toggle && ! includes ( toggle . target , this . $el ) ) {
return ;
}
e . preventDefault ( ) ;
if ( this . toggle && includes ( this . toggle . mode , 'hover' ) ) {
this . hide ( ) ;
}
}
} ,
{
name : 'beforeshow' ,
self : true ,
2018-09-20 12:35:14 +00:00
handler : function ( ) {
2017-11-11 04:33:51 +00:00
this . clearTimers ( ) ;
2018-09-20 12:35:14 +00:00
Animation . cancel ( this . $el ) ;
this . position ( ) ;
2017-11-11 04:33:51 +00:00
}
} ,
{
name : 'show' ,
self : true ,
2018-09-20 12:35:14 +00:00
handler : function ( ) {
2017-11-11 04:33:51 +00:00
this . tracker . init ( ) ;
2019-04-22 13:31:39 +00:00
trigger ( this . $el , 'updatearia' ) ;
2017-11-11 04:33:51 +00:00
registerEvent ( ) ;
}
} ,
{
name : 'beforehide' ,
self : true ,
2018-09-20 12:35:14 +00:00
handler : function ( ) {
2017-11-11 04:33:51 +00:00
this . clearTimers ( ) ;
}
} ,
{
name : 'hide' ,
2018-09-20 12:35:14 +00:00
handler : function ( ref ) {
2017-11-11 04:33:51 +00:00
var target = ref . target ;
if ( this . $el !== target ) {
active = active === null && within ( target , this . $el ) && this . isToggled ( ) ? this : active ;
return ;
}
active = this . isActive ( ) ? null : active ;
2019-04-22 13:31:39 +00:00
trigger ( this . $el , 'updatearia' ) ;
2017-11-11 04:33:51 +00:00
this . tracker . cancel ( ) ;
}
2019-04-22 13:31:39 +00:00
} ,
{
name : 'updatearia' ,
self : true ,
handler : function ( e , toggle ) {
e . preventDefault ( ) ;
this . updateAria ( this . $el ) ;
if ( toggle || this . toggle ) {
attr ( ( toggle || this . toggle ) . $el , 'aria-expanded' , this . isToggled ( ) ? 'true' : 'false' ) ;
toggleClass ( this . toggle . $el , this . cls , this . isToggled ( ) ) ;
}
}
2017-11-11 04:33:51 +00:00
}
] ,
update : {
2018-09-20 12:35:14 +00:00
write : function ( ) {
2017-11-11 04:33:51 +00:00
if ( this . isToggled ( ) && ! Animation . inProgress ( this . $el ) ) {
this . position ( ) ;
}
} ,
events : [ 'resize' ]
} ,
methods : {
2018-09-20 12:35:14 +00:00
show : function ( toggle , delay ) {
2017-11-11 04:33:51 +00:00
var this $1 = this ;
if ( delay === void 0 ) delay = true ;
2018-09-20 12:35:14 +00:00
var show = function ( ) { return ! this $1 . isToggled ( ) && this $1 . toggleElement ( this $1 . $el , true ) ; } ;
var tryShow = function ( ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this $1 . toggle = toggle || this $1 . toggle ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this $1 . clearTimers ( ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( this $1 . isActive ( ) ) {
return ;
} else if ( delay && active && active !== this $1 && active . isDelaying ) {
this $1 . showTimer = setTimeout ( this $1 . show , 10 ) ;
return ;
} else if ( this $1 . isParentOf ( active ) ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( active . hideTimer ) {
active . hide ( false ) ;
} else {
return ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
} else if ( active && this $1 . isChildOf ( active ) ) {
active . clearTimers ( ) ;
2018-09-20 12:35:14 +00:00
} else if ( active && ! this $1 . isChildOf ( active ) && ! this $1 . isParentOf ( active ) ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var prev ;
while ( active && active !== prev && ! this $1 . isChildOf ( active ) ) {
prev = active ;
active . hide ( false ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( delay && this $1 . delayShow ) {
this $1 . showTimer = setTimeout ( show , this $1 . delayShow ) ;
} else {
show ( ) ;
}
active = this $1 ;
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( toggle && this . toggle && toggle . $el !== this . toggle . $el ) {
2017-11-11 04:33:51 +00:00
once ( this . $el , 'hide' , tryShow ) ;
this . hide ( false ) ;
} else {
tryShow ( ) ;
}
} ,
2018-09-20 12:35:14 +00:00
hide : function ( delay ) {
2017-11-11 04:33:51 +00:00
var this $1 = this ;
if ( delay === void 0 ) delay = true ;
var hide = function ( ) { return this $1 . toggleNow ( this $1 . $el , false ) ; } ;
this . clearTimers ( ) ;
this . isDelaying = this . tracker . movesTo ( this . $el ) ;
if ( delay && this . isDelaying ) {
this . hideTimer = setTimeout ( this . hide , this . hoverIdle ) ;
} else if ( delay && this . delayHide ) {
this . hideTimer = setTimeout ( hide , this . delayHide ) ;
} else {
hide ( ) ;
}
} ,
2018-09-20 12:35:14 +00:00
clearTimers : function ( ) {
2017-11-11 04:33:51 +00:00
clearTimeout ( this . showTimer ) ;
clearTimeout ( this . hideTimer ) ;
this . showTimer = null ;
this . hideTimer = null ;
this . isDelaying = false ;
} ,
2018-09-20 12:35:14 +00:00
isActive : function ( ) {
2017-11-11 04:33:51 +00:00
return active === this ;
} ,
2018-09-20 12:35:14 +00:00
isChildOf : function ( drop ) {
2017-11-11 04:33:51 +00:00
return drop && drop !== this && within ( this . $el , drop . $el ) ;
} ,
2018-09-20 12:35:14 +00:00
isParentOf : function ( drop ) {
2017-11-11 04:33:51 +00:00
return drop && drop !== this && within ( drop . $el , this . $el ) ;
} ,
2018-09-20 12:35:14 +00:00
position : function ( ) {
2017-11-11 04:33:51 +00:00
removeClasses ( this . $el , ( ( this . clsDrop ) + "-(stack|boundary)" ) ) ;
css ( this . $el , { top : '' , left : '' , display : 'block' } ) ;
toggleClass ( this . $el , ( ( this . clsDrop ) + "-boundary" ) , this . boundaryAlign ) ;
2018-09-20 12:35:14 +00:00
var boundary = offset ( this . boundary ) ;
var alignTo = this . boundaryAlign ? boundary : offset ( this . toggle . $el ) ;
2017-11-11 04:33:51 +00:00
if ( this . align === 'justify' ) {
var prop = this . getAxis ( ) === 'y' ? 'width' : 'height' ;
css ( this . $el , prop , alignTo [ prop ] ) ;
} else if ( this . $el . offsetWidth > Math . max ( boundary . right - alignTo . left , alignTo . right - boundary . left ) ) {
addClass ( this . $el , ( ( this . clsDrop ) + "-stack" ) ) ;
}
this . positionAt ( this . $el , this . boundaryAlign ? this . boundary : this . toggle . $el , this . boundary ) ;
css ( this . $el , 'display' , '' ) ;
}
}
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
var registered ;
function registerEvent ( ) {
if ( registered ) {
return ;
}
registered = true ;
2019-04-22 13:31:39 +00:00
on ( document , pointerUp , function ( ref ) {
2017-11-11 04:33:51 +00:00
var target = ref . target ;
var defaultPrevented = ref . defaultPrevented ;
var prev ;
if ( defaultPrevented ) {
return ;
}
while ( active && active !== prev && ! within ( target , active . $el ) && ! ( active . toggle && within ( target , active . toggle . $el ) ) ) {
prev = active ;
active . hide ( false ) ;
}
} ) ;
}
2018-09-20 12:35:14 +00:00
var Dropdown = {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
extends : Drop
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var FormCustom = {
2017-11-11 04:33:51 +00:00
mixins : [ Class ] ,
args : 'target' ,
props : {
target : Boolean
} ,
2018-09-20 12:35:14 +00:00
data : {
2017-11-11 04:33:51 +00:00
target : false
} ,
computed : {
2018-09-20 12:35:14 +00:00
input : function ( _ , $el ) {
return $ ( selInput , $el ) ;
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
state : function ( ) {
2017-11-11 04:33:51 +00:00
return this . input . nextElementSibling ;
} ,
2018-09-20 12:35:14 +00:00
target : function ( ref , $el ) {
2017-11-11 04:33:51 +00:00
var target = ref . target ;
return target && ( target === true
&& this . input . parentNode === $el
&& this . input . nextElementSibling
|| query ( target , $el ) ) ;
}
} ,
2018-09-20 12:35:14 +00:00
update : function ( ) {
var ref = this ;
var target = ref . target ;
var input = ref . input ;
if ( ! target ) {
return ;
}
var option ;
var prop = isInput ( target ) ? 'value' : 'textContent' ;
var prev = target [ prop ] ;
var value = input . files && input . files [ 0 ]
? input . files [ 0 ] . name
: matches ( input , 'select' ) && ( option = $$ ( 'option' , input ) . filter ( function ( el ) { return el . selected ; } ) [ 0 ] )
? option . textContent
: input . value ;
if ( prev !== value ) {
target [ prop ] = value ;
}
2017-11-11 04:33:51 +00:00
} ,
2019-04-22 13:31:39 +00:00
events : {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
change : function ( ) {
this . $emit ( ) ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
}
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
// Deprecated
var Gif = {
update : {
2019-04-22 13:31:39 +00:00
read : function ( data ) {
2018-09-20 12:35:14 +00:00
var inview = isInView ( this . $el ) ;
2019-04-22 13:31:39 +00:00
if ( ! inview || data . isInView === inview ) {
2018-09-20 12:35:14 +00:00
return false ;
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
data . isInView = inview ;
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
write : function ( ) {
this . $el . src = this . $el . src ;
} ,
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
events : [ 'scroll' , 'resize' ]
2018-09-20 12:35:14 +00:00
}
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var Margin = {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
props : {
margin : String ,
firstColumn : Boolean
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
data : {
margin : 'uk-margin-small-top' ,
firstColumn : 'uk-first-column'
} ,
2017-11-11 04:33:51 +00:00
update : {
2019-04-22 13:31:39 +00:00
read : function ( data ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var items = this . $el . children ;
var rows = [ [ ] ] ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! items . length || ! isVisible ( this . $el ) ) {
2019-04-22 13:31:39 +00:00
return data . rows = rows ;
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
data . rows = getRows ( items ) ;
data . stacks = ! data . rows . some ( function ( row ) { return row . length > 1 ; } ) ;
2018-09-20 12:35:14 +00:00
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
write : function ( ref ) {
var this $1 = this ;
var rows = ref . rows ;
rows . forEach ( function ( row , i ) { return row . forEach ( function ( el , j ) {
toggleClass ( el , this $1 . margin , i !== 0 ) ;
toggleClass ( el , this $1 . firstColumn , j === 0 ) ;
} ) ; }
) ;
} ,
2019-04-22 13:31:39 +00:00
events : [ 'resize' ]
2018-09-20 12:35:14 +00:00
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
} ;
function getRows ( items ) {
var rows = [ [ ] ] ;
for ( var i = 0 ; i < items . length ; i ++ ) {
var el = items [ i ] ;
var dim = getOffset ( el ) ;
if ( ! dim . height ) {
continue ;
}
for ( var j = rows . length - 1 ; j >= 0 ; j -- ) {
var row = rows [ j ] ;
if ( ! row [ 0 ] ) {
row . push ( el ) ;
break ;
}
2019-04-22 13:31:39 +00:00
var leftDim = ( void 0 ) ;
if ( row [ 0 ] . offsetParent === el . offsetParent ) {
leftDim = getOffset ( row [ 0 ] ) ;
} else {
dim = getOffset ( el , true ) ;
leftDim = getOffset ( row [ 0 ] , true ) ;
}
2018-09-20 12:35:14 +00:00
if ( dim . top >= leftDim . bottom - 1 ) {
rows . push ( [ el ] ) ;
break ;
}
if ( dim . bottom > leftDim . top ) {
if ( dim . left < leftDim . left && ! isRtl ) {
row . unshift ( el ) ;
break ;
}
row . push ( el ) ;
break ;
}
if ( j === 0 ) {
rows . unshift ( [ el ] ) ;
break ;
}
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
return rows ;
}
2019-04-22 13:31:39 +00:00
function getOffset ( element , offset ) {
var assign ;
if ( offset === void 0 ) offset = false ;
2018-09-20 12:35:14 +00:00
var offsetTop = element . offsetTop ;
var offsetLeft = element . offsetLeft ;
var offsetHeight = element . offsetHeight ;
2019-04-22 13:31:39 +00:00
if ( offset ) {
( assign = offsetPosition ( element ) , offsetTop = assign [ 0 ] , offsetLeft = assign [ 1 ] ) ;
}
2018-09-20 12:35:14 +00:00
return {
top : offsetTop ,
left : offsetLeft ,
height : offsetHeight ,
bottom : offsetTop + offsetHeight
} ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var Grid = {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
extends : Margin ,
2017-11-11 04:33:51 +00:00
mixins : [ Class ] ,
name : 'grid' ,
2018-09-20 12:35:14 +00:00
props : {
masonry : Boolean ,
parallax : Number
} ,
data : {
2017-11-11 04:33:51 +00:00
margin : 'uk-grid-margin' ,
2018-09-20 12:35:14 +00:00
clsStack : 'uk-grid-stack' ,
masonry : false ,
parallax : 0
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
computed : {
length : function ( _ , $el ) {
return $el . children . length ;
} ,
parallax : function ( ref ) {
var parallax = ref . parallax ;
return parallax && this . length ? Math . abs ( parallax ) : '' ;
}
} ,
connected : function ( ) {
this . masonry && addClass ( this . $el , 'uk-flex-top uk-flex-wrap-top' ) ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
update : [
{
read : function ( ref ) {
var rows = ref . rows ;
if ( this . masonry || this . parallax ) {
rows = rows . map ( function ( elements ) { return sortBy ( elements , 'offsetLeft' ) ; } ) ;
2019-04-22 13:31:39 +00:00
if ( isRtl ) {
rows . map ( function ( row ) { return row . reverse ( ) ; } ) ;
}
2018-09-20 12:35:14 +00:00
}
2019-04-22 13:31:39 +00:00
var transitionInProgress = rows . some ( function ( elements ) { return elements . some ( Transition . inProgress ) ; } ) ;
2018-09-20 12:35:14 +00:00
var translates = false ;
var elHeight = '' ;
if ( this . masonry && this . length ) {
2019-04-22 13:31:39 +00:00
var height = 0 ;
2018-09-20 12:35:14 +00:00
translates = rows . reduce ( function ( translates , row , i ) {
2019-04-22 13:31:39 +00:00
translates [ i ] = row . map ( function ( _ , j ) { return i === 0 ? 0 : toFloat ( translates [ i - 1 ] [ j ] ) + ( height - toFloat ( rows [ i - 1 ] [ j ] && rows [ i - 1 ] [ j ] . offsetHeight ) ) ; } ) ;
height = row . reduce ( function ( height , el ) { return Math . max ( height , el . offsetHeight ) ; } , 0 ) ;
2018-09-20 12:35:14 +00:00
return translates ;
} , [ ] ) ;
elHeight = maxColumnHeight ( rows ) + getMarginTop ( this . $el , this . margin ) * ( rows . length - 1 ) ;
}
2019-04-22 13:31:39 +00:00
return { rows : rows , translates : translates , height : ! transitionInProgress ? elHeight : false } ;
2018-09-20 12:35:14 +00:00
} ,
write : function ( ref ) {
var stacks = ref . stacks ;
2019-04-22 13:31:39 +00:00
var height = ref . height ;
2018-09-20 12:35:14 +00:00
toggleClass ( this . $el , this . clsStack , stacks ) ;
css ( this . $el , 'paddingBottom' , this . parallax ) ;
2019-04-22 13:31:39 +00:00
height !== false && css ( this . $el , 'height' , height ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ,
2019-04-22 13:31:39 +00:00
events : [ 'resize' ]
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
{
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
read : function ( ref ) {
2019-04-22 13:31:39 +00:00
var height$1 = ref . height ;
2018-09-20 12:35:14 +00:00
return {
scrolled : this . parallax
2019-04-22 13:31:39 +00:00
? scrolledOver ( this . $el , height$1 ? height$1 - height ( this . $el ) : 0 ) * this . parallax
2018-09-20 12:35:14 +00:00
: false
} ;
} ,
write : function ( ref ) {
var rows = ref . rows ;
var scrolled = ref . scrolled ;
var translates = ref . translates ;
if ( scrolled === false && ! translates ) {
return ;
}
rows . forEach ( function ( row , i ) { return row . forEach ( function ( el , j ) { return css ( el , 'transform' , ! scrolled && ! translates ? '' : ( "translateY(" + ( ( translates && - translates [ i ] [ j ] ) + ( scrolled ? j % 2 ? scrolled : scrolled / 8 : 0 ) ) + "px)" ) ) ; }
) ; }
) ;
} ,
2019-04-22 13:31:39 +00:00
events : [ 'scroll' , 'resize' ]
2018-09-20 12:35:14 +00:00
}
]
} ;
function getMarginTop ( root , cls ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var nodes = toNodes ( root . children ) ;
var ref = nodes . filter ( function ( el ) { return hasClass ( el , cls ) ; } ) ;
var node = ref [ 0 ] ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return toFloat ( node
? css ( node , 'marginTop' )
: css ( nodes [ 0 ] , 'paddingLeft' ) ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function maxColumnHeight ( rows ) {
return Math . max . apply ( Math , rows . reduce ( function ( sum , row ) {
row . forEach ( function ( el , i ) { return sum [ i ] = ( sum [ i ] || 0 ) + el . offsetHeight ; } ) ;
return sum ;
} , [ ] ) ) ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
// IE 11 fix (min-height on a flex container won't apply to its flex items)
var FlexBug = isIE ? {
data : {
selMinHeight : false ,
forceHeight : false
} ,
computed : {
elements : function ( ref , $el ) {
var selMinHeight = ref . selMinHeight ;
return selMinHeight ? $$ ( selMinHeight , $el ) : [ $el ] ;
}
} ,
update : [
{
read : function ( ) {
css ( this . elements , 'height' , '' ) ;
} ,
order : - 5 ,
events : [ 'resize' ]
} ,
{
write : function ( ) {
var this $1 = this ;
this . elements . forEach ( function ( el ) {
var height = toFloat ( css ( el , 'minHeight' ) ) ;
if ( height && ( this $1 . forceHeight || Math . round ( height + boxModelAdjust ( 'height' , el , 'content-box' ) ) >= el . offsetHeight ) ) {
css ( el , 'height' , height ) ;
}
} ) ;
} ,
order : 5 ,
events : [ 'resize' ]
}
]
} : { } ;
2018-09-20 12:35:14 +00:00
var HeightMatch = {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
mixins : [ FlexBug ] ,
2017-11-11 04:33:51 +00:00
args : 'target' ,
props : {
target : String ,
row : Boolean
} ,
2018-09-20 12:35:14 +00:00
data : {
2017-11-11 04:33:51 +00:00
target : '> *' ,
2019-04-22 13:31:39 +00:00
row : true ,
forceHeight : true
2017-11-11 04:33:51 +00:00
} ,
computed : {
2018-09-20 12:35:14 +00:00
elements : function ( ref , $el ) {
2017-11-11 04:33:51 +00:00
var target = ref . target ;
return $$ ( target , $el ) ;
}
} ,
update : {
2018-09-20 12:35:14 +00:00
read : function ( ) {
return {
2019-04-22 13:31:39 +00:00
rows : ( this . row ? getRows ( this . elements ) : [ this . elements ] ) . map ( match )
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
write : function ( ref ) {
var rows = ref . rows ;
rows . forEach ( function ( ref ) {
2019-04-22 13:31:39 +00:00
var heights = ref . heights ;
var elements = ref . elements ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return elements . forEach ( function ( el , i ) { return css ( el , 'minHeight' , heights [ i ] ) ; }
) ;
}
) ;
2017-11-11 04:33:51 +00:00
} ,
2019-04-22 13:31:39 +00:00
events : [ 'resize' ]
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
} ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function match ( elements ) {
var assign ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( elements . length < 2 ) {
return { heights : [ '' ] , elements : elements } ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var ref = getHeights ( elements ) ;
var heights = ref . heights ;
var max = ref . max ;
var hasMinHeight = elements . some ( function ( el ) { return el . style . minHeight ; } ) ;
var hasShrunk = elements . some ( function ( el , i ) { return ! el . style . minHeight && heights [ i ] < max ; } ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( hasMinHeight && hasShrunk ) {
css ( elements , 'minHeight' , '' ) ;
( ( assign = getHeights ( elements ) , heights = assign . heights , max = assign . max ) ) ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
heights = elements . map ( function ( el , i ) { return heights [ i ] === max && toFloat ( el . style . minHeight ) . toFixed ( 2 ) !== max . toFixed ( 2 ) ? '' : max ; }
) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return { heights : heights , elements : elements } ;
}
function getHeights ( elements ) {
var heights = elements . map ( function ( el ) { return offset ( el ) . height - boxModelAdjust ( 'height' , el , 'content-box' ) ; } ) ;
var max = Math . max . apply ( null , heights ) ;
return { heights : heights , max : max } ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var HeightViewport = {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
mixins : [ FlexBug ] ,
2017-11-11 04:33:51 +00:00
props : {
expand : Boolean ,
offsetTop : Boolean ,
offsetBottom : Boolean ,
minHeight : Number
} ,
2018-09-20 12:35:14 +00:00
data : {
2017-11-11 04:33:51 +00:00
expand : false ,
offsetTop : false ,
offsetBottom : false ,
minHeight : 0
} ,
2018-09-20 12:35:14 +00:00
update : {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
read : function ( ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var minHeight = '' ;
2019-04-22 13:31:39 +00:00
var box = boxModelAdjust ( 'height' , this . $el , 'content-box' ) ;
2017-11-11 04:33:51 +00:00
if ( this . expand ) {
2019-04-22 13:31:39 +00:00
minHeight = height ( window ) - ( offsetHeight ( document . documentElement ) - offsetHeight ( this . $el ) ) - box || '' ;
2017-11-11 04:33:51 +00:00
} else {
2018-09-20 12:35:14 +00:00
// on mobile devices (iOS and Android) window.innerHeight !== 100vh
minHeight = 'calc(100vh' ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( this . offsetTop ) {
var ref = offset ( this . $el ) ;
var top = ref . top ;
minHeight += top < height ( window ) / 2 ? ( " - " + top + "px" ) : '' ;
2017-11-11 04:33:51 +00:00
}
if ( this . offsetBottom === true ) {
2018-09-20 12:35:14 +00:00
minHeight += " - " + ( offsetHeight ( this . $el . nextElementSibling ) ) + "px" ;
2017-11-11 04:33:51 +00:00
} else if ( isNumeric ( this . offsetBottom ) ) {
2018-09-20 12:35:14 +00:00
minHeight += " - " + ( this . offsetBottom ) + "vh" ;
2017-11-11 04:33:51 +00:00
} else if ( this . offsetBottom && endsWith ( this . offsetBottom , 'px' ) ) {
2018-09-20 12:35:14 +00:00
minHeight += " - " + ( toFloat ( this . offsetBottom ) ) + "px" ;
2017-11-11 04:33:51 +00:00
} else if ( isString ( this . offsetBottom ) ) {
2018-09-20 12:35:14 +00:00
minHeight += " - " + ( offsetHeight ( query ( this . offsetBottom , this . $el ) ) ) + "px" ;
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
minHeight += ( box ? ( " - " + box + "px" ) : '' ) + ")" ;
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
return { minHeight : minHeight } ;
2018-09-20 12:35:14 +00:00
} ,
write : function ( ref ) {
var minHeight = ref . minHeight ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
css ( this . $el , { minHeight : minHeight } ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( this . minHeight && toFloat ( css ( this . $el , 'minHeight' ) ) < this . minHeight ) {
2017-11-11 04:33:51 +00:00
css ( this . $el , 'minHeight' , this . minHeight ) ;
}
} ,
2019-04-22 13:31:39 +00:00
events : [ 'resize' ]
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
function offsetHeight ( el ) {
return el && el . offsetHeight || 0 ;
}
2019-04-22 13:31:39 +00:00
var Svg = {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
args : 'src' ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
props : {
2019-04-22 13:31:39 +00:00
id : Boolean ,
2018-09-20 12:35:14 +00:00
icon : String ,
src : String ,
style : String ,
width : Number ,
height : Number ,
ratio : Number ,
2019-04-22 13:31:39 +00:00
'class' : String ,
strokeAnimation : Boolean ,
attributes : 'list'
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
data : {
ratio : 1 ,
2019-04-22 13:31:39 +00:00
include : [ 'style' , 'class' ] ,
'class' : '' ,
strokeAnimation : false
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
connected : function ( ) {
var this $1 = this ;
2019-04-22 13:31:39 +00:00
var assign ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . class += ' uk-svg' ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! this . icon && includes ( this . src , '#' ) ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var parts = this . src . split ( '#' ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( parts . length > 1 ) {
2019-04-22 13:31:39 +00:00
( assign = parts , this . src = assign [ 0 ] , this . icon = assign [ 1 ] ) ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
this . svg = this . getSvg ( ) . then ( function ( el ) {
this $1 . applyAttributes ( el ) ;
return this $1 . svgEl = insertSVG ( el , this $1 . $el ) ;
} , noop ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
} ,
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
disconnected : function ( ) {
var this $1 = this ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( isVoidElement ( this . $el ) ) {
attr ( this . $el , 'hidden' , null ) ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( this . svg ) {
this . svg . then ( function ( svg ) { return ( ! this $1 . _connected || svg !== this $1 . svgEl ) && remove ( svg ) ; } , noop ) ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
this . svg = this . svgEl = null ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
} ,
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
update : {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
read : function ( ) {
return ! ! ( this . strokeAnimation && this . svgEl && isVisible ( this . svgEl ) ) ;
} ,
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
write : function ( ) {
applyAnimation ( this . svgEl ) ;
} ,
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
type : [ 'resize' ]
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
} ,
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
methods : {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
getSvg : function ( ) {
var this $1 = this ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return loadSVG ( this . src ) . then ( function ( svg ) { return parseSVG ( svg , this $1 . icon ) || Promise . reject ( 'SVG not found.' ) ; }
) ;
} ,
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
applyAttributes : function ( el ) {
var this $1 = this ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
for ( var prop in this . $options . props ) {
if ( this [ prop ] && includes ( this . include , prop ) ) {
attr ( el , prop , this [ prop ] ) ;
2018-09-20 12:35:14 +00:00
}
2019-04-22 13:31:39 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
for ( var attribute in this . attributes ) {
var ref = this . attributes [ attribute ] . split ( ':' , 2 ) ;
var prop$1 = ref [ 0 ] ;
var value = ref [ 1 ] ;
attr ( el , prop$1 , value ) ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( ! this . id ) {
removeAttr ( el , 'id' ) ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var props = [ 'width' , 'height' ] ;
var dimensions = [ this . width , this . height ] ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( ! dimensions . some ( function ( val ) { return val ; } ) ) {
dimensions = props . map ( function ( prop ) { return attr ( el , prop ) ; } ) ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var viewBox = attr ( el , 'viewBox' ) ;
if ( viewBox && ! dimensions . some ( function ( val ) { return val ; } ) ) {
dimensions = viewBox . split ( ' ' ) . slice ( 2 ) ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
dimensions . forEach ( function ( val , i ) {
val = ( val | 0 ) * this $1 . ratio ;
val && attr ( el , props [ i ] , val ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( val && ! dimensions [ i ^ 1 ] ) {
removeAttr ( el , props [ i ^ 1 ] ) ;
}
} ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
attr ( el , 'data-svg' , this . icon || this . src ) ;
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
} ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var svgs = { } ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function loadSVG ( src ) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( svgs [ src ] ) {
return svgs [ src ] ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return svgs [ src ] = new Promise ( function ( resolve , reject ) {
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
if ( ! src ) {
reject ( ) ;
return ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( startsWith ( src , 'data:' ) ) {
resolve ( decodeURIComponent ( src . split ( ',' ) [ 1 ] ) ) ;
} else {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
ajax ( src ) . then (
function ( xhr ) { return resolve ( xhr . response ) ; } ,
function ( ) { return reject ( 'SVG not found.' ) ; }
) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
} ) ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function parseSVG ( svg , icon ) {
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
if ( icon && includes ( svg , '<symbol' ) ) {
svg = parseSymbols ( svg , icon ) || svg ;
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
svg = $ ( svg . substr ( svg . indexOf ( '<svg' ) ) ) ;
return svg && svg . hasChildNodes ( ) && svg ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var symbolRe = /<symbol(.*?id=(['"])(.*?)\2[^]*?<\/)symbol>/g ;
var symbols = { } ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function parseSymbols ( svg , icon ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! symbols [ svg ] ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
symbols [ svg ] = { } ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var match ;
while ( ( match = symbolRe . exec ( svg ) ) ) {
symbols [ svg ] [ match [ 3 ] ] = "<svg xmlns=\"http://www.w3.org/2000/svg\"" + ( match [ 1 ] ) + "svg>" ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
symbolRe . lastIndex = 0 ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return symbols [ svg ] [ icon ] ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function applyAnimation ( el ) {
var length = getMaxPathLength ( el ) ;
if ( length ) {
el . style . setProperty ( '--uk-animation-stroke' , length ) ;
}
}
function getMaxPathLength ( el ) {
return Math . ceil ( Math . max . apply ( Math , $$ ( '[stroke]' , el ) . map ( function ( stroke ) { return stroke . getTotalLength && stroke . getTotalLength ( ) || 0 ; }
) . concat ( [ 0 ] ) ) ) ;
}
function insertSVG ( el , root ) {
if ( isVoidElement ( root ) || root . tagName === 'CANVAS' ) {
attr ( root , 'hidden' , true ) ;
var next = root . nextElementSibling ;
return equals ( el , next )
? next
: after ( root , el ) ;
} else {
var last = root . lastElementChild ;
return equals ( el , last )
? last
: append ( root , el ) ;
}
}
function equals ( el , other ) {
return attr ( el , 'data-svg' ) === attr ( other , 'data-svg' ) ;
}
2018-09-20 12:35:14 +00:00
var closeIcon = "<svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" xmlns=\"http://www.w3.org/2000/svg\"><line fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" x1=\"1\" y1=\"1\" x2=\"13\" y2=\"13\"/><line fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" x1=\"13\" y1=\"1\" x2=\"1\" y2=\"13\"/></svg>" ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var closeLarge = "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><line fill=\"none\" stroke=\"#000\" stroke-width=\"1.4\" x1=\"1\" y1=\"1\" x2=\"19\" y2=\"19\"/><line fill=\"none\" stroke=\"#000\" stroke-width=\"1.4\" x1=\"19\" y1=\"1\" x2=\"1\" y2=\"19\"/></svg>" ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var marker = "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"9\" y=\"4\" width=\"1\" height=\"11\"/><rect x=\"4\" y=\"9\" width=\"11\" height=\"1\"/></svg>" ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var navbarToggleIcon = "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><rect y=\"9\" width=\"20\" height=\"2\"/><rect y=\"3\" width=\"20\" height=\"2\"/><rect y=\"15\" width=\"20\" height=\"2\"/></svg>" ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var overlayIcon = "<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"19\" y=\"0\" width=\"1\" height=\"40\"/><rect x=\"0\" y=\"19\" width=\"40\" height=\"1\"/></svg>" ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var paginationNext = "<svg width=\"7\" height=\"12\" viewBox=\"0 0 7 12\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.2\" points=\"1 1 6 6 1 11\"/></svg>" ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var paginationPrevious = "<svg width=\"7\" height=\"12\" viewBox=\"0 0 7 12\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.2\" points=\"6 1 1 6 6 11\"/></svg>" ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var searchIcon = "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><circle fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" cx=\"9\" cy=\"9\" r=\"7\"/><path fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" d=\"M14,14 L18,18 L14,14 Z\"/></svg>" ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var searchLarge = "<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" xmlns=\"http://www.w3.org/2000/svg\"><circle fill=\"none\" stroke=\"#000\" stroke-width=\"1.8\" cx=\"17.5\" cy=\"17.5\" r=\"16.5\"/><line fill=\"none\" stroke=\"#000\" stroke-width=\"1.8\" x1=\"38\" y1=\"39\" x2=\"29\" y2=\"30\"/></svg>" ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var searchNavbar = "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><circle fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" cx=\"10.5\" cy=\"10.5\" r=\"9.5\"/><line fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" x1=\"23\" y1=\"23\" x2=\"17\" y2=\"17\"/></svg>" ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var slidenavNext = "<svg width=\"14px\" height=\"24px\" viewBox=\"0 0 14 24\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.4\" points=\"1.225,23 12.775,12 1.225,1 \"/></svg>" ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var slidenavNextLarge = "<svg width=\"25px\" height=\"40px\" viewBox=\"0 0 25 40\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"2\" points=\"4.002,38.547 22.527,20.024 4,1.5 \"/></svg>" ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var slidenavPrevious = "<svg width=\"14px\" height=\"24px\" viewBox=\"0 0 14 24\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.4\" points=\"12.775,1 1.225,12 12.775,23 \"/></svg>" ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var slidenavPreviousLarge = "<svg width=\"25px\" height=\"40px\" viewBox=\"0 0 25 40\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"2\" points=\"20.527,1.5 2,20.024 20.525,38.547 \"/></svg>" ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var spinner = "<svg width=\"30\" height=\"30\" viewBox=\"0 0 30 30\" xmlns=\"http://www.w3.org/2000/svg\"><circle fill=\"none\" stroke=\"#000\" cx=\"15\" cy=\"15\" r=\"14\"/></svg>" ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var totop = "<svg width=\"18\" height=\"10\" viewBox=\"0 0 18 10\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.2\" points=\"1 9 9 1 17 9 \"/></svg>" ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var parsed = { } ;
var icons = {
spinner : spinner ,
totop : totop ,
marker : marker ,
'close-icon' : closeIcon ,
'close-large' : closeLarge ,
'navbar-toggle-icon' : navbarToggleIcon ,
'overlay-icon' : overlayIcon ,
'pagination-next' : paginationNext ,
'pagination-previous' : paginationPrevious ,
'search-icon' : searchIcon ,
'search-large' : searchLarge ,
'search-navbar' : searchNavbar ,
'slidenav-next' : slidenavNext ,
'slidenav-next-large' : slidenavNextLarge ,
'slidenav-previous' : slidenavPrevious ,
'slidenav-previous-large' : slidenavPreviousLarge
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var Icon = {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
install : install ,
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
mixins : [ Class , Svg ] ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
args : 'icon' ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
props : [ 'icon' ] ,
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
data : { include : [ ] } ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
isIcon : true ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
connected : function ( ) {
addClass ( this . $el , 'uk-icon' ) ;
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
methods : {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
getSvg : function ( ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var icon = getIcon ( applyRtl ( this . icon ) ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! icon ) {
return Promise . reject ( 'Icon not found.' ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return Promise . resolve ( icon ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var IconComponent = {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
extends : Icon ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
data : function ( vm ) { return ( {
icon : hyphenate ( vm . constructor . options . name )
} ) ; }
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var Slidenav = {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
extends : IconComponent ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
connected : function ( ) {
addClass ( this . $el , 'uk-slidenav' ) ;
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
computed : {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
icon : function ( ref , $el ) {
var icon = ref . icon ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return hasClass ( $el , 'uk-slidenav-large' )
? ( icon + "-large" )
: icon ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var Search = {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
extends : IconComponent ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
computed : {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
icon : function ( ref , $el ) {
var icon = ref . icon ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return hasClass ( $el , 'uk-search-icon' ) && parents ( $el , '.uk-search-large' ) . length
? 'search-large'
: parents ( $el , '.uk-search-navbar' ) . length
? 'search-navbar'
: icon ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var Close = {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
extends : IconComponent ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
computed : {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
icon : function ( ) {
return ( "close-" + ( hasClass ( this . $el , 'uk-close-large' ) ? 'large' : 'icon' ) ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var Spinner = {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
extends : IconComponent ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
connected : function ( ) {
var this $1 = this ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . svg . then ( function ( svg ) { return this $1 . ratio !== 1 && css ( $ ( 'circle' , svg ) , 'strokeWidth' , 1 / this $1 . ratio ) ; } , noop ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function install ( UIkit ) {
UIkit . icon . add = function ( name , svg ) {
var obj ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var added = isString ( name ) ? ( ( obj = { } , obj [ name ] = svg , obj ) ) : name ;
each ( added , function ( svg , name ) {
icons [ name ] = svg ;
delete parsed [ name ] ;
} ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( UIkit . _initialized ) {
2019-04-22 13:31:39 +00:00
apply ( document . body , function ( el ) { return each ( UIkit . getComponents ( el ) , function ( cmp ) {
cmp . $options . isIcon && cmp . icon in added && cmp . $reset ( ) ;
} ) ; }
2017-11-11 04:33:51 +00:00
) ;
2018-09-20 12:35:14 +00:00
}
} ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function getIcon ( icon ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! icons [ icon ] ) {
return null ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! parsed [ icon ] ) {
parsed [ icon ] = $ ( icons [ icon ] . trim ( ) ) ;
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
return parsed [ icon ] . cloneNode ( true ) ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function applyRtl ( icon ) {
return isRtl ? swap ( swap ( icon , 'left' , 'right' ) , 'previous' , 'next' ) : icon ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var Img = {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
args : 'dataSrc' ,
2018-09-20 12:35:14 +00:00
props : {
dataSrc : String ,
dataSrcset : Boolean ,
sizes : String ,
width : Number ,
height : Number ,
offsetTop : String ,
offsetLeft : String ,
target : String
} ,
data : {
dataSrc : '' ,
dataSrcset : false ,
sizes : false ,
width : false ,
height : false ,
offsetTop : '50vh' ,
offsetLeft : 0 ,
target : false
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
computed : {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
cacheKey : function ( ref ) {
var dataSrc = ref . dataSrc ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return ( ( this . $name ) + "." + dataSrc ) ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
width : function ( ref ) {
2019-04-22 13:31:39 +00:00
var width = ref . width ;
2018-09-20 12:35:14 +00:00
var dataWidth = ref . dataWidth ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return width || dataWidth ;
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
height : function ( ref ) {
2019-04-22 13:31:39 +00:00
var height = ref . height ;
2018-09-20 12:35:14 +00:00
var dataHeight = ref . dataHeight ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return height || dataHeight ;
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
sizes : function ( ref ) {
var sizes = ref . sizes ;
var dataSizes = ref . dataSizes ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return sizes || dataSizes ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
isImg : function ( _ , $el ) {
return isImg ( $el ) ;
} ,
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
target : {
get : function ( ref ) {
var target = ref . target ;
return [ this . $el ] . concat ( queryAll ( target , this . $el ) ) ;
} ,
watch : function ( ) {
this . observe ( ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
offsetTop : function ( ref ) {
var offsetTop = ref . offsetTop ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return toPx ( offsetTop , 'height' ) ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
offsetLeft : function ( ref ) {
var offsetLeft = ref . offsetLeft ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return toPx ( offsetLeft , 'width' ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
connected : function ( ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( storage [ this . cacheKey ] ) {
setSrcAttrs ( this . $el , storage [ this . cacheKey ] || this . dataSrc , this . dataSrcset , this . sizes ) ;
} else if ( this . isImg && this . width && this . height ) {
setSrcAttrs ( this . $el , getPlaceholderImage ( this . width , this . height , this . sizes ) ) ;
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
this . observer = new IntersectionObserver ( this . load , {
rootMargin : ( ( this . offsetTop ) + "px " + ( this . offsetLeft ) + "px" )
} ) ;
requestAnimationFrame ( this . observe ) ;
2017-11-11 04:33:51 +00:00
} ,
2019-04-22 13:31:39 +00:00
disconnected : function ( ) {
this . observer . disconnect ( ) ;
} ,
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
update : {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
read : function ( ref ) {
var this $1 = this ;
var image = ref . image ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( ! image && document . readyState === 'complete' ) {
this . load ( this . observer . takeRecords ( ) ) ;
}
if ( this . isImg ) {
return false ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
image && image . then ( function ( img ) { return img && img . currentSrc !== '' && setSrcAttrs ( this $1 . $el , currentSrc ( img ) ) ; } ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
} ,
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
write : function ( data ) {
if ( this . dataSrcset && window . devicePixelRatio !== 1 ) {
var bgSize = css ( this . $el , 'backgroundSize' ) ;
if ( bgSize . match ( /^(auto\s?)+$/ ) || toFloat ( bgSize ) === data . bgSize ) {
data . bgSize = getSourceSize ( this . dataSrcset , this . sizes ) ;
css ( this . $el , 'backgroundSize' , ( ( data . bgSize ) + "px" ) ) ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
} ,
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
events : [ 'resize' ]
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
} ,
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
methods : {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
load : function ( entries ) {
var this $1 = this ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( ! entries . some ( function ( entry ) { return entry . isIntersecting ; } ) ) {
return ;
}
this . _data . image = getImage ( this . dataSrc , this . dataSrcset , this . sizes ) . then ( function ( img ) {
setSrcAttrs ( this $1 . $el , currentSrc ( img ) , img . srcset , img . sizes ) ;
storage [ this $1 . cacheKey ] = currentSrc ( img ) ;
return img ;
} , noop ) ;
this . observer . disconnect ( ) ;
} ,
observe : function ( ) {
var this $1 = this ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( ! this . _data . image && this . _connected ) {
this . target . forEach ( function ( el ) { return this $1 . observer . observe ( el ) ; } ) ;
}
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function setSrcAttrs ( el , src , srcset , sizes ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( isImg ( el ) ) {
sizes && ( el . sizes = sizes ) ;
srcset && ( el . srcset = srcset ) ;
src && ( el . src = src ) ;
} else if ( src ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var change = ! includes ( el . style . backgroundImage , src ) ;
if ( change ) {
2019-04-22 13:31:39 +00:00
css ( el , 'backgroundImage' , ( "url(" + ( escape ( src ) ) + ")" ) ) ;
2018-09-20 12:35:14 +00:00
trigger ( el , createEvent ( 'load' , false ) ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function getPlaceholderImage ( width , height , sizes ) {
var assign ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( sizes ) {
2019-04-22 13:31:39 +00:00
( ( assign = Dimensions . ratio ( { width : width , height : height } , 'width' , toPx ( sizesToPixel ( sizes ) ) ) , width = assign . width , height = assign . height ) ) ;
}
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
return ( "data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"" + width + "\" height=\"" + height + "\"></svg>" ) ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var sizesRe = /\s*(.*?)\s*(\w+|calc\(.*?\))\s*(?:,|$)/g ;
function sizesToPixel ( sizes ) {
var matches ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
sizesRe . lastIndex = 0 ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
while ( ( matches = sizesRe . exec ( sizes ) ) ) {
if ( ! matches [ 1 ] || window . matchMedia ( matches [ 1 ] ) . matches ) {
matches = evaluateSize ( matches [ 2 ] ) ;
break ;
}
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return matches || '100vw' ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var sizeRe = /\d+(?:\w+|%)/g ;
var additionRe = /[+-]?(\d+)/g ;
function evaluateSize ( size ) {
return startsWith ( size , 'calc' )
? size
. substring ( 5 , size . length - 1 )
. replace ( sizeRe , function ( size ) { return toPx ( size ) ; } )
. replace ( / /g , '' )
. match ( additionRe )
. reduce ( function ( a , b ) { return a + + b ; } , 0 )
: size ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var srcSetRe = /\s+\d+w\s*(?:,|$)/g ;
function getSourceSize ( srcset , sizes ) {
var srcSize = toPx ( sizesToPixel ( sizes ) ) ;
var descriptors = ( srcset . match ( srcSetRe ) || [ ] ) . map ( toFloat ) . sort ( function ( a , b ) { return a - b ; } ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return descriptors . filter ( function ( size ) { return size >= srcSize ; } ) [ 0 ] || descriptors . pop ( ) || '' ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function isImg ( el ) {
return el . tagName === 'IMG' ;
}
function currentSrc ( el ) {
return el . currentSrc || el . src ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var key = '__test__' ;
var storage ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
// workaround for Safari's private browsing mode and accessing sessionStorage in Blink
try {
storage = window . sessionStorage || { } ;
storage [ key ] = 1 ;
delete storage [ key ] ;
} catch ( e ) {
storage = { } ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var Media = {
props : {
media : Boolean
} ,
data : {
media : false
} ,
computed : {
matchMedia : function ( ) {
var media = toMedia ( this . media ) ;
return ! media || window . matchMedia ( media ) . matches ;
}
}
} ;
function toMedia ( value ) {
if ( isString ( value ) ) {
if ( value [ 0 ] === '@' ) {
var name = "breakpoint-" + ( value . substr ( 1 ) ) ;
value = toFloat ( getCssVar ( name ) ) ;
} else if ( isNaN ( value ) ) {
return value ;
}
}
return value && ! isNaN ( value ) ? ( "(min-width: " + value + "px)" ) : false ;
}
2018-09-20 12:35:14 +00:00
var Leader = {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
mixins : [ Class , Media ] ,
2017-11-11 04:33:51 +00:00
props : {
2019-04-22 13:31:39 +00:00
fill : String
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
data : {
fill : '' ,
clsWrapper : 'uk-leader-fill' ,
clsHide : 'uk-leader-hide' ,
attrFill : 'data-fill'
2017-11-11 04:33:51 +00:00
} ,
computed : {
2018-09-20 12:35:14 +00:00
fill : function ( ref ) {
var fill = ref . fill ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return fill || getCssVar ( 'leader-fill-content' ) ;
2017-11-11 04:33:51 +00:00
}
} ,
2018-09-20 12:35:14 +00:00
connected : function ( ) {
2019-04-22 13:31:39 +00:00
var assign ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
( assign = wrapInner ( this . $el , ( "<span class=\"" + ( this . clsWrapper ) + "\">" ) ) , this . wrapper = assign [ 0 ] ) ;
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
disconnected : function ( ) {
unwrap ( this . wrapper . childNodes ) ;
2017-11-11 04:33:51 +00:00
} ,
2019-04-22 13:31:39 +00:00
update : {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
read : function ( ref ) {
var changed = ref . changed ;
var width = ref . width ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var prev = width ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
width = Math . floor ( this . $el . offsetWidth / 2 ) ;
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
return {
width : width ,
fill : this . fill ,
changed : changed || prev !== width ,
hide : ! this . matchMedia
} ;
} ,
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
write : function ( data ) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
toggleClass ( this . wrapper , this . clsHide , data . hide ) ;
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
if ( data . changed ) {
data . changed = false ;
attr ( this . wrapper , this . attrFill , new Array ( data . width ) . join ( data . fill ) ) ;
}
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
} ,
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
events : [ 'resize' ]
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var Container = {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
props : {
container : Boolean
} ,
data : {
container : true
} ,
computed : {
container : function ( ref ) {
var container = ref . container ;
return container === true && this . $container || container && $ ( container ) ;
2017-11-11 04:33:51 +00:00
}
}
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var active$1 ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var Modal = {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
mixins : [ Class , Container , Togglable ] ,
props : {
selPanel : String ,
selClose : String ,
escClose : Boolean ,
bgClose : Boolean ,
stack : Boolean
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
data : {
cls : 'uk-open' ,
escClose : true ,
bgClose : true ,
overlay : true ,
stack : false
} ,
computed : {
panel : function ( ref , $el ) {
var selPanel = ref . selPanel ;
return $ ( selPanel , $el ) ;
} ,
transitionElement : function ( ) {
return this . panel ;
} ,
bgClose : function ( ref ) {
var bgClose = ref . bgClose ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return bgClose && this . panel ;
2017-11-11 04:33:51 +00:00
}
} ,
2019-04-22 13:31:39 +00:00
beforeDisconnect : function ( ) {
if ( this . isToggled ( ) ) {
this . toggleNow ( this . $el , false ) ;
}
} ,
2017-11-11 04:33:51 +00:00
events : [
{
2018-09-20 12:35:14 +00:00
name : 'click' ,
delegate : function ( ) {
return this . selClose ;
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
handler : function ( e ) {
e . preventDefault ( ) ;
this . hide ( ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
2017-11-11 04:33:51 +00:00
} ,
{
2018-09-20 12:35:14 +00:00
name : 'toggle' ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
self : true ,
handler : function ( e ) {
if ( e . defaultPrevented ) {
return ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
e . preventDefault ( ) ;
this . toggle ( ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
2017-11-11 04:33:51 +00:00
} ,
{
2018-09-20 12:35:14 +00:00
name : 'beforeshow' ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
self : true ,
handler : function ( e ) {
var prev = active$1 && active$1 !== this && active$1 ;
active$1 = this ;
if ( prev ) {
if ( this . stack ) {
this . prev = prev ;
} else {
2019-04-22 13:31:39 +00:00
active$1 = prev ;
if ( prev . isToggled ( ) ) {
prev . hide ( ) . then ( this . show ) ;
} else {
once ( prev . $el , 'beforeshow hidden' , this . show , false , function ( ref ) {
var target = ref . target ;
var type = ref . type ;
return type === 'hidden' && target === prev . $el ;
} ) ;
}
2018-09-20 12:35:14 +00:00
e . preventDefault ( ) ;
2019-04-22 13:31:39 +00:00
2018-09-20 12:35:14 +00:00
}
2019-04-22 13:31:39 +00:00
return ;
2018-09-20 12:35:14 +00:00
}
registerEvents ( ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
2017-11-11 04:33:51 +00:00
} ,
{
2019-04-22 13:31:39 +00:00
name : 'show' ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
self : true ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
handler : function ( ) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( ! hasClass ( document . documentElement , this . clsPage ) ) {
this . scrollbarWidth = width ( window ) - width ( document ) ;
css ( document . body , 'overflowY' , this . scrollbarWidth && this . overlay ? 'scroll' : '' ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
addClass ( document . documentElement , this . clsPage ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
2017-11-11 04:33:51 +00:00
} ,
{
2019-04-22 13:31:39 +00:00
name : 'hide' ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
self : true ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
handler : function ( ) {
2019-04-22 13:31:39 +00:00
if ( ! active$1 || active$1 === this && ! this . prev ) {
deregisterEvents ( ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
{
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
name : 'hidden' ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
self : true ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
handler : function ( ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var found ;
var ref = this ;
var prev = ref . prev ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
active$1 = active$1 && active$1 !== this && active$1 || prev ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( ! active$1 ) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
css ( document . body , 'overflowY' , '' ) ;
} else {
while ( prev ) {
if ( prev . clsPage === this . clsPage ) {
found = true ;
break ;
}
prev = prev . prev ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! found ) {
removeClass ( document . documentElement , this . clsPage ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
] ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
methods : {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
toggle : function ( ) {
return this . isToggled ( ) ? this . hide ( ) : this . show ( ) ;
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
show : function ( ) {
2019-04-22 13:31:39 +00:00
var this $1 = this ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( this . isToggled ( ) ) {
return Promise . resolve ( ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( this . container && this . $el . parentNode !== this . container ) {
append ( this . container , this . $el ) ;
2019-04-22 13:31:39 +00:00
return new Promise ( function ( resolve ) { return requestAnimationFrame ( function ( ) { return this $1 . show ( ) . then ( resolve ) ; }
) ; }
) ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return this . toggleElement ( this . $el , true , animate$1 ( this ) ) ;
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
hide : function ( ) {
return this . isToggled ( )
2019-04-22 13:31:39 +00:00
? this . toggleElement ( this . $el , false , animate$1 ( this ) )
2018-09-20 12:35:14 +00:00
: Promise . resolve ( ) ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
getActive : function ( ) {
return active$1 ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var events ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function registerEvents ( ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( events ) {
return ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
events = [
2019-04-22 13:31:39 +00:00
on ( document , pointerUp , function ( ref ) {
2018-09-20 12:35:14 +00:00
var target = ref . target ;
var defaultPrevented = ref . defaultPrevented ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( active$1 && active$1 . bgClose && ! defaultPrevented && ( ! active$1 . overlay || within ( target , active$1 . $el ) ) && ! within ( target , active$1 . panel ) ) {
active$1 . hide ( ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
} ) ,
on ( document , 'keydown' , function ( e ) {
if ( e . keyCode === 27 && active$1 && active$1 . escClose ) {
e . preventDefault ( ) ;
active$1 . hide ( ) ;
}
} )
] ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function deregisterEvents ( ) {
events && events . forEach ( function ( unbind ) { return unbind ( ) ; } ) ;
events = null ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function animate$1 ( ref ) {
var transitionElement = ref . transitionElement ;
var _toggle = ref . _toggle ;
return function ( el , show ) { return new Promise ( function ( resolve , reject ) { return once ( el , 'show hide' , function ( ) {
el . _reject && el . _reject ( ) ;
el . _reject = reject ;
_toggle ( el , show ) ;
if ( toMs ( css ( transitionElement , 'transitionDuration' ) ) ) {
once ( transitionElement , 'transitionend' , resolve , false , function ( e ) { return e . target === transitionElement ; } ) ;
} else {
resolve ( ) ;
}
} ) ; }
) ; } ;
}
2018-09-20 12:35:14 +00:00
var Modal$1 = {
install : install$1 ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
mixins : [ Modal ] ,
data : {
clsPage : 'uk-modal-page' ,
selPanel : '.uk-modal-dialog' ,
selClose : '.uk-modal-close, .uk-modal-close-default, .uk-modal-close-outside, .uk-modal-close-full'
2017-11-11 04:33:51 +00:00
} ,
events : [
{
2018-09-20 12:35:14 +00:00
name : 'show' ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
self : true ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
handler : function ( ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( hasClass ( this . panel , 'uk-margin-auto-vertical' ) ) {
addClass ( this . $el , 'uk-flex' ) ;
} else {
css ( this . $el , 'display' , 'block' ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
height ( this . $el ) ; // force reflow
}
2017-11-11 04:33:51 +00:00
} ,
{
2018-09-20 12:35:14 +00:00
name : 'hidden' ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
self : true ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
handler : function ( ) {
css ( this . $el , 'display' , '' ) ;
removeClass ( this . $el , 'uk-flex' ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
]
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function install$1 ( UIkit ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
UIkit . modal . dialog = function ( content , options ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var dialog = UIkit . modal ( ( " <div class=\"uk-modal\"> <div class=\"uk-modal-dialog\">" + content + "</div> </div> " ) , options ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
dialog . show ( ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
on ( dialog . $el , 'hidden' , function ( ref ) {
var target = ref . target ;
var currentTarget = ref . currentTarget ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( target === currentTarget ) {
2019-04-22 13:31:39 +00:00
Promise . resolve ( function ( ) { return dialog . $destroy ( true ) ; } ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
} ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return dialog ;
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
UIkit . modal . alert = function ( message , options ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
options = assign ( { bgClose : false , escClose : false , labels : UIkit . modal . labels } , options ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return new Promise (
function ( resolve ) { return on ( UIkit . modal . dialog ( ( " <div class=\"uk-modal-body\">" + ( isString ( message ) ? message : html ( message ) ) + "</div> <div class=\"uk-modal-footer uk-text-right\"> <button class=\"uk-button uk-button-primary uk-modal-close\" autofocus>" + ( options . labels . ok ) + "</button> </div> " ) , options ) . $el , 'hide' , resolve ) ; }
) ;
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
UIkit . modal . confirm = function ( message , options ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
options = assign ( { bgClose : false , escClose : true , labels : UIkit . modal . labels } , options ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return new Promise ( function ( resolve , reject ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var confirm = UIkit . modal . dialog ( ( " <form> <div class=\"uk-modal-body\">" + ( isString ( message ) ? message : html ( message ) ) + "</div> <div class=\"uk-modal-footer uk-text-right\"> <button class=\"uk-button uk-button-default uk-modal-close\" type=\"button\">" + ( options . labels . cancel ) + "</button> <button class=\"uk-button uk-button-primary\" autofocus>" + ( options . labels . ok ) + "</button> </div> </form> " ) , options ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var resolved = false ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
on ( confirm . $el , 'submit' , 'form' , function ( e ) {
e . preventDefault ( ) ;
resolve ( ) ;
resolved = true ;
confirm . hide ( ) ;
} ) ;
on ( confirm . $el , 'hide' , function ( ) {
if ( ! resolved ) {
reject ( ) ;
}
} ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ) ;
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
UIkit . modal . prompt = function ( message , value , options ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
options = assign ( { bgClose : false , escClose : true , labels : UIkit . modal . labels } , options ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return new Promise ( function ( resolve ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var prompt = UIkit . modal . dialog ( ( " <form class=\"uk-form-stacked\"> <div class=\"uk-modal-body\"> <label>" + ( isString ( message ) ? message : html ( message ) ) + "</label> <input class=\"uk-input\" autofocus> </div> <div class=\"uk-modal-footer uk-text-right\"> <button class=\"uk-button uk-button-default uk-modal-close\" type=\"button\">" + ( options . labels . cancel ) + "</button> <button class=\"uk-button uk-button-primary\">" + ( options . labels . ok ) + "</button> </div> </form> " ) , options ) ,
input = $ ( 'input' , prompt . $el ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
input . value = value ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var resolved = false ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
on ( prompt . $el , 'submit' , 'form' , function ( e ) {
e . preventDefault ( ) ;
resolve ( input . value ) ;
resolved = true ;
prompt . hide ( ) ;
} ) ;
on ( prompt . $el , 'hide' , function ( ) {
if ( ! resolved ) {
resolve ( null ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
} ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ) ;
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
UIkit . modal . labels = {
ok : 'Ok' ,
cancel : 'Cancel'
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var Nav = {
extends : Accordion ,
data : {
targets : '> .uk-parent' ,
toggle : '> a' ,
content : '> ul'
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var Navbar = {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
mixins : [ Class , FlexBug ] ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
props : {
dropdown : String ,
mode : 'list' ,
align : String ,
offset : Number ,
boundary : Boolean ,
boundaryAlign : Boolean ,
clsDrop : String ,
delayShow : Number ,
delayHide : Number ,
dropbar : Boolean ,
dropbarMode : String ,
dropbarAnchor : Boolean ,
duration : Number
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
data : {
dropdown : '.uk-navbar-nav > li' ,
align : ! isRtl ? 'left' : 'right' ,
clsDrop : 'uk-navbar-dropdown' ,
mode : undefined ,
offset : undefined ,
delayShow : undefined ,
delayHide : undefined ,
boundaryAlign : undefined ,
flip : 'x' ,
boundary : true ,
dropbar : false ,
dropbarMode : 'slide' ,
dropbarAnchor : false ,
duration : 200 ,
2019-04-22 13:31:39 +00:00
forceHeight : true ,
selMinHeight : '.uk-navbar-nav > li > a, .uk-navbar-item, .uk-navbar-toggle'
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
computed : {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
boundary : function ( ref , $el ) {
var boundary = ref . boundary ;
var boundaryAlign = ref . boundaryAlign ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return ( boundary === true || boundaryAlign ) ? $el : boundary ;
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
dropbarAnchor : function ( ref , $el ) {
var dropbarAnchor = ref . dropbarAnchor ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return query ( dropbarAnchor , $el ) ;
} ,
pos : function ( ref ) {
var align = ref . align ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return ( "bottom-" + align ) ;
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
dropdowns : function ( ref , $el ) {
var dropdown = ref . dropdown ;
var clsDrop = ref . clsDrop ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return $$ ( ( dropdown + " ." + clsDrop ) , $el ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
beforeConnect : function ( ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var ref = this . $props ;
var dropbar = ref . dropbar ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . dropbar = dropbar && ( query ( dropbar , this . $el ) || $ ( '+ .uk-navbar-dropbar' , this . $el ) || $ ( '<div></div>' ) ) ;
if ( this . dropbar ) {
addClass ( this . dropbar , 'uk-navbar-dropbar' ) ;
if ( this . dropbarMode === 'slide' ) {
addClass ( this . dropbar , 'uk-navbar-dropbar-slide' ) ;
}
}
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
disconnected : function ( ) {
this . dropbar && remove ( this . dropbar ) ;
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
update : function ( ) {
var this $1 = this ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . $create (
'drop' ,
this . dropdowns . filter ( function ( el ) { return ! this $1 . getDropdown ( el ) ; } ) ,
assign ( { } , this . $props , { boundary : this . boundary , pos : this . pos , offset : this . dropbar || this . offset } )
) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
events : [
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
{
name : 'mouseover' ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
delegate : function ( ) {
return this . dropdown ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
handler : function ( ref ) {
var current = ref . current ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var active = this . getActive ( ) ;
if ( active && active . toggle && ! within ( active . toggle . $el , current ) && ! active . tracker . movesTo ( active . $el ) ) {
active . hide ( false ) ;
}
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
{
name : 'mouseleave' ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
el : function ( ) {
return this . dropbar ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
handler : function ( ) {
var active = this . getActive ( ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( active && ! matches ( this . dropbar , ':hover' ) ) {
active . hide ( ) ;
}
}
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
{
name : 'beforeshow' ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
capture : true ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
filter : function ( ) {
return this . dropbar ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
handler : function ( ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! this . dropbar . parentNode ) {
after ( this . dropbarAnchor || this . $el , this . dropbar ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
{
name : 'show' ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
capture : true ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
filter : function ( ) {
return this . dropbar ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
handler : function ( _ , drop ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var $el = drop . $el ;
var dir = drop . dir ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . clsDrop && addClass ( $el , ( ( this . clsDrop ) + "-dropbar" ) ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( dir === 'bottom' ) {
this . transitionTo ( $el . offsetHeight + toFloat ( css ( $el , 'marginTop' ) ) + toFloat ( css ( $el , 'marginBottom' ) ) , $el ) ;
}
}
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
{
name : 'beforehide' ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
filter : function ( ) {
return this . dropbar ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
handler : function ( e , ref ) {
var $el = ref . $el ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var active = this . getActive ( ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( matches ( this . dropbar , ':hover' ) && active && active . $el === $el ) {
e . preventDefault ( ) ;
2017-11-11 04:33:51 +00:00
}
}
} ,
{
2018-09-20 12:35:14 +00:00
name : 'hide' ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
filter : function ( ) {
return this . dropbar ;
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
handler : function ( _ , ref ) {
var $el = ref . $el ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var active = this . getActive ( ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! active || active && active . $el === $el ) {
this . transitionTo ( 0 ) ;
}
}
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
] ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
methods : {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
getActive : function ( ) {
2019-04-22 13:31:39 +00:00
var ref = this . dropdowns . map ( this . getDropdown ) . filter ( function ( drop ) { return drop && drop . isActive ( ) ; } ) ;
2018-09-20 12:35:14 +00:00
var active = ref [ 0 ] ;
return active && includes ( active . mode , 'hover' ) && within ( active . toggle . $el , this . $el ) && active ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
transitionTo : function ( newHeight , el ) {
2019-04-22 13:31:39 +00:00
var this $1 = this ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var ref = this ;
var dropbar = ref . dropbar ;
var oldHeight = isVisible ( dropbar ) ? height ( dropbar ) : 0 ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
el = oldHeight < newHeight && el ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
css ( el , 'clip' , ( "rect(0," + ( el . offsetWidth ) + "px," + oldHeight + "px,0)" ) ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
height ( dropbar , oldHeight ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
Transition . cancel ( [ el , dropbar ] ) ;
return Promise . all ( [
Transition . start ( dropbar , { height : newHeight } , this . duration ) ,
Transition . start ( el , { clip : ( "rect(0," + ( el . offsetWidth ) + "px," + newHeight + "px,0)" ) } , this . duration )
] )
. catch ( noop )
2019-04-22 13:31:39 +00:00
. then ( function ( ) {
css ( el , { clip : '' } ) ;
this $1 . $update ( dropbar ) ;
} ) ;
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
getDropdown : function ( el ) {
return this . $getComponent ( el , 'drop' ) || this . $getComponent ( el , 'dropdown' ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var Offcanvas = {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
mixins : [ Modal ] ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
args : 'mode' ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
props : {
mode : String ,
flip : Boolean ,
overlay : Boolean
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
data : {
mode : 'slide' ,
flip : false ,
overlay : false ,
clsPage : 'uk-offcanvas-page' ,
clsContainer : 'uk-offcanvas-container' ,
selPanel : '.uk-offcanvas-bar' ,
clsFlip : 'uk-offcanvas-flip' ,
2019-04-22 13:31:39 +00:00
clsContainerAnimation : 'uk-offcanvas-container-animation' ,
2018-09-20 12:35:14 +00:00
clsSidebarAnimation : 'uk-offcanvas-bar-animation' ,
clsMode : 'uk-offcanvas' ,
clsOverlay : 'uk-offcanvas-overlay' ,
selClose : '.uk-offcanvas-close'
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
computed : {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
clsFlip : function ( ref ) {
var flip = ref . flip ;
var clsFlip = ref . clsFlip ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return flip ? clsFlip : '' ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
clsOverlay : function ( ref ) {
var overlay = ref . overlay ;
var clsOverlay = ref . clsOverlay ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return overlay ? clsOverlay : '' ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
clsMode : function ( ref ) {
var mode = ref . mode ;
var clsMode = ref . clsMode ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return ( clsMode + "-" + mode ) ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
clsSidebarAnimation : function ( ref ) {
var mode = ref . mode ;
var clsSidebarAnimation = ref . clsSidebarAnimation ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return mode === 'none' || mode === 'reveal' ? '' : clsSidebarAnimation ;
} ,
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
clsContainerAnimation : function ( ref ) {
2018-09-20 12:35:14 +00:00
var mode = ref . mode ;
2019-04-22 13:31:39 +00:00
var clsContainerAnimation = ref . clsContainerAnimation ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return mode !== 'push' && mode !== 'reveal' ? '' : clsContainerAnimation ;
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
transitionElement : function ( ref ) {
var mode = ref . mode ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return mode === 'reveal' ? this . panel . parentNode : this . panel ;
2017-11-11 04:33:51 +00:00
}
} ,
2019-04-22 13:31:39 +00:00
events : [
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
{
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
name : 'click' ,
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
delegate : function ( ) {
return 'a[href^="#"]' ;
} ,
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
handler : function ( ref ) {
var current = ref . current ;
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
if ( current . hash && $ ( current . hash , document . body ) ) {
this . hide ( ) ;
}
2017-11-11 04:33:51 +00:00
}
} ,
2018-09-20 12:35:14 +00:00
{
2019-04-22 13:31:39 +00:00
name : 'touchstart' ,
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
passive : true ,
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
el : function ( ) {
return this . panel ;
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
handler : function ( ref ) {
2019-04-22 13:31:39 +00:00
var targetTouches = ref . targetTouches ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( targetTouches . length === 1 ) {
this . clientY = targetTouches [ 0 ] . clientY ;
2018-09-20 12:35:14 +00:00
}
2019-04-22 13:31:39 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
{
2019-04-22 13:31:39 +00:00
name : 'touchmove' ,
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
self : true ,
passive : false ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
filter : function ( ) {
return this . overlay ;
2017-11-11 04:33:51 +00:00
} ,
2019-04-22 13:31:39 +00:00
handler : function ( e ) {
e . preventDefault ( ) ;
}
} ,
{
name : 'touchmove' ,
passive : false ,
el : function ( ) {
return this . panel ;
} ,
handler : function ( e ) {
if ( e . targetTouches . length !== 1 ) {
return ;
}
var clientY = event . targetTouches [ 0 ] . clientY - this . clientY ;
var ref = this . panel ;
var scrollTop = ref . scrollTop ;
var scrollHeight = ref . scrollHeight ;
var clientHeight = ref . clientHeight ;
if ( clientHeight >= scrollHeight
|| scrollTop === 0 && clientY > 0
|| scrollHeight - scrollTop <= clientHeight && clientY < 0
) {
2018-09-20 12:35:14 +00:00
e . preventDefault ( ) ;
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
{
name : 'show' ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
self : true ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
handler : function ( ) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( this . mode === 'reveal' && ! hasClass ( this . panel . parentNode , this . clsMode ) ) {
2018-09-20 12:35:14 +00:00
wrapAll ( this . panel , '<div>' ) ;
addClass ( this . panel . parentNode , this . clsMode ) ;
}
2019-04-22 13:31:39 +00:00
css ( document . documentElement , 'overflowY' , this . overlay ? 'hidden' : '' ) ;
addClass ( document . body , this . clsContainer , this . clsFlip ) ;
2018-09-20 12:35:14 +00:00
css ( this . $el , 'display' , 'block' ) ;
2019-04-22 13:31:39 +00:00
addClass ( this . $el , this . clsOverlay ) ;
addClass ( this . panel , this . clsSidebarAnimation , this . mode !== 'reveal' ? this . clsMode : '' ) ;
height ( document . body ) ; // force reflow
addClass ( document . body , this . clsContainerAnimation ) ;
this . clsContainerAnimation && suppressUserScale ( ) ;
2018-09-20 12:35:14 +00:00
}
} ,
{
name : 'hide' ,
self : true ,
handler : function ( ) {
2019-04-22 13:31:39 +00:00
removeClass ( document . body , this . clsContainerAnimation ) ;
2018-09-20 12:35:14 +00:00
var active = this . getActive ( ) ;
if ( this . mode === 'none' || active && active !== this && active !== this . prev ) {
trigger ( this . panel , 'transitionend' ) ;
}
}
} ,
{
name : 'hidden' ,
self : true ,
handler : function ( ) {
2019-04-22 13:31:39 +00:00
this . clsContainerAnimation && resumeUserScale ( ) ;
2018-09-20 12:35:14 +00:00
if ( this . mode === 'reveal' ) {
unwrap ( this . panel ) ;
}
removeClass ( this . panel , this . clsSidebarAnimation , this . clsMode ) ;
removeClass ( this . $el , this . clsOverlay ) ;
css ( this . $el , 'display' , '' ) ;
2019-04-22 13:31:39 +00:00
removeClass ( document . body , this . clsContainer , this . clsFlip ) ;
2018-09-20 12:35:14 +00:00
css ( document . documentElement , 'overflowY' , '' ) ;
}
} ,
{
name : 'swipeLeft swipeRight' ,
handler : function ( e ) {
2019-04-22 13:31:39 +00:00
if ( this . isToggled ( ) && endsWith ( e . type , 'Left' ) ^ this . flip ) {
2018-09-20 12:35:14 +00:00
this . hide ( ) ;
}
}
}
]
} ;
2019-04-22 13:31:39 +00:00
// Chrome in responsive mode zooms page upon opening offcanvas
function suppressUserScale ( ) {
getViewport ( ) . content += ',user-scalable=0' ;
}
function resumeUserScale ( ) {
var viewport = getViewport ( ) ;
viewport . content = viewport . content . replace ( /,user-scalable=0$/ , '' ) ;
}
function getViewport ( ) {
return $ ( 'meta[name="viewport"]' , document . head ) || append ( document . head , '<meta name="viewport">' ) ;
}
2018-09-20 12:35:14 +00:00
var OverflowAuto = {
mixins : [ Class ] ,
props : {
selContainer : String ,
2019-04-22 13:31:39 +00:00
selContent : String
2018-09-20 12:35:14 +00:00
} ,
data : {
selContainer : '.uk-modal' ,
2019-04-22 13:31:39 +00:00
selContent : '.uk-modal-dialog'
2018-09-20 12:35:14 +00:00
} ,
computed : {
container : function ( ref , $el ) {
var selContainer = ref . selContainer ;
return closest ( $el , selContainer ) ;
} ,
content : function ( ref , $el ) {
var selContent = ref . selContent ;
return closest ( $el , selContent ) ;
}
} ,
connected : function ( ) {
css ( this . $el , 'minHeight' , 150 ) ;
} ,
update : {
read : function ( ) {
if ( ! this . content || ! this . container ) {
return false ;
}
return {
current : toFloat ( css ( this . $el , 'maxHeight' ) ) ,
max : Math . max ( 150 , height ( this . container ) - ( offset ( this . content ) . height - height ( this . $el ) ) )
} ;
} ,
write : function ( ref ) {
var current = ref . current ;
var max = ref . max ;
css ( this . $el , 'maxHeight' , max ) ;
if ( Math . round ( current ) !== Math . round ( max ) ) {
trigger ( this . $el , 'resize' ) ;
}
} ,
2019-04-22 13:31:39 +00:00
events : [ 'resize' ]
2018-09-20 12:35:14 +00:00
}
} ;
var Responsive = {
props : [ 'width' , 'height' ] ,
connected : function ( ) {
addClass ( this . $el , 'uk-responsive-width' ) ;
} ,
update : {
read : function ( ) {
return isVisible ( this . $el ) && this . width && this . height
? { width : width ( this . $el . parentNode ) , height : this . height }
: false ;
} ,
write : function ( dim ) {
2019-04-22 13:31:39 +00:00
height ( this . $el , Dimensions . contain ( {
height : this . height ,
width : this . width
} , dim ) . height ) ;
2018-09-20 12:35:14 +00:00
} ,
2019-04-22 13:31:39 +00:00
events : [ 'resize' ]
2018-09-20 12:35:14 +00:00
}
} ;
var Scroll = {
props : {
duration : Number ,
offset : Number
} ,
data : {
duration : 1000 ,
offset : 0
} ,
methods : {
scrollTo : function ( el ) {
var this $1 = this ;
el = el && $ ( el ) || document . body ;
var docHeight = height ( document ) ;
var winHeight = height ( window ) ;
var target = offset ( el ) . top - this . offset ;
if ( target + winHeight > docHeight ) {
target = docHeight - winHeight ;
}
if ( ! trigger ( this . $el , 'beforescroll' , [ this , el ] ) ) {
return ;
}
var start = Date . now ( ) ;
var startY = window . pageYOffset ;
var step = function ( ) {
var currentY = startY + ( target - startY ) * ease ( clamp ( ( Date . now ( ) - start ) / this $1 . duration ) ) ;
scrollTop ( window , currentY ) ;
// scroll more if we have not reached our destination
if ( currentY !== target ) {
requestAnimationFrame ( step ) ;
} else {
trigger ( this $1 . $el , 'scrolled' , [ this $1 , el ] ) ;
}
} ;
step ( ) ;
}
} ,
events : {
click : function ( e ) {
if ( e . defaultPrevented ) {
return ;
}
e . preventDefault ( ) ;
2019-04-22 13:31:39 +00:00
this . scrollTo ( escape ( decodeURIComponent ( this . $el . hash ) ) . substr ( 1 ) ) ;
2018-09-20 12:35:14 +00:00
}
}
} ;
function ease ( k ) {
return 0.5 * ( 1 - Math . cos ( Math . PI * k ) ) ;
}
var Scrollspy = {
args : 'cls' ,
props : {
2019-04-22 13:31:39 +00:00
cls : String ,
2018-09-20 12:35:14 +00:00
target : String ,
hidden : Boolean ,
offsetTop : Number ,
offsetLeft : Number ,
repeat : Boolean ,
delay : Number
} ,
data : function ( ) { return ( {
2019-04-22 13:31:39 +00:00
cls : false ,
2018-09-20 12:35:14 +00:00
target : false ,
hidden : true ,
offsetTop : 0 ,
offsetLeft : 0 ,
repeat : false ,
delay : 0 ,
inViewClass : 'uk-scrollspy-inview'
} ) ; } ,
computed : {
elements : function ( ref , $el ) {
var target = ref . target ;
return target ? $$ ( target , $el ) : [ $el ] ;
}
} ,
update : [
{
write : function ( ) {
if ( this . hidden ) {
css ( filter ( this . elements , ( ":not(." + ( this . inViewClass ) + ")" ) ) , 'visibility' , 'hidden' ) ;
}
}
} ,
{
2019-04-22 13:31:39 +00:00
read : function ( ref ) {
2018-09-20 12:35:14 +00:00
var this $1 = this ;
2019-04-22 13:31:39 +00:00
var update = ref . update ;
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
if ( ! update ) {
2018-09-20 12:35:14 +00:00
return ;
}
2019-04-22 13:31:39 +00:00
this . elements . forEach ( function ( el ) {
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
var state = el . _ukScrollspyState ;
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
if ( ! state ) {
state = { cls : data ( el , 'uk-scrollspy-class' ) || this $1 . cls } ;
2018-09-20 12:35:14 +00:00
}
2019-04-22 13:31:39 +00:00
state . show = isInView ( el , this $1 . offsetTop , this $1 . offsetLeft ) ;
el . _ukScrollspyState = state ;
2018-09-20 12:35:14 +00:00
} ) ;
} ,
2019-04-22 13:31:39 +00:00
write : function ( data ) {
2018-09-20 12:35:14 +00:00
var this $1 = this ;
// Let child components be applied at least once first
2019-04-22 13:31:39 +00:00
if ( ! data . update ) {
2018-09-20 12:35:14 +00:00
this . $emit ( ) ;
2019-04-22 13:31:39 +00:00
return data . update = true ;
2018-09-20 12:35:14 +00:00
}
2019-04-22 13:31:39 +00:00
this . elements . forEach ( function ( el ) {
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
var state = el . _ukScrollspyState ;
var cls = state . cls ;
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
if ( state . show && ! state . inview && ! state . queued ) {
2018-09-20 12:35:14 +00:00
var show = function ( ) {
css ( el , 'visibility' , '' ) ;
addClass ( el , this $1 . inViewClass ) ;
toggleClass ( el , cls ) ;
trigger ( el , 'inview' ) ;
this $1 . $update ( el ) ;
2019-04-22 13:31:39 +00:00
state . inview = true ;
state . abort && state . abort ( ) ;
2018-09-20 12:35:14 +00:00
} ;
if ( this $1 . delay ) {
2019-04-22 13:31:39 +00:00
state . queued = true ;
data . promise = ( data . promise || Promise . resolve ( ) ) . then ( function ( ) {
return ! state . inview && new Promise ( function ( resolve ) {
2018-09-20 12:35:14 +00:00
var timer = setTimeout ( function ( ) {
show ( ) ;
resolve ( ) ;
2019-04-22 13:31:39 +00:00
} , data . promise || this $1 . elements . length === 1 ? this $1 . delay : 0 ) ;
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
state . abort = function ( ) {
2018-09-20 12:35:14 +00:00
clearTimeout ( timer ) ;
resolve ( ) ;
2019-04-22 13:31:39 +00:00
state . queued = false ;
2018-09-20 12:35:14 +00:00
} ;
} ) ;
} ) ;
} else {
show ( ) ;
}
2019-04-22 13:31:39 +00:00
} else if ( ! state . show && ( state . inview || state . queued ) && this $1 . repeat ) {
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
state . abort && state . abort ( ) ;
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
if ( ! state . inview ) {
2018-09-20 12:35:14 +00:00
return ;
}
css ( el , 'visibility' , this $1 . hidden ? 'hidden' : '' ) ;
removeClass ( el , this $1 . inViewClass ) ;
toggleClass ( el , cls ) ;
trigger ( el , 'outview' ) ;
this $1 . $update ( el ) ;
2019-04-22 13:31:39 +00:00
state . inview = false ;
2018-09-20 12:35:14 +00:00
}
} ) ;
} ,
2019-04-22 13:31:39 +00:00
events : [ 'scroll' , 'resize' ]
2018-09-20 12:35:14 +00:00
}
]
} ;
var ScrollspyNav = {
props : {
cls : String ,
closest : String ,
scroll : Boolean ,
overflow : Boolean ,
offset : Number
} ,
data : {
cls : 'uk-active' ,
closest : false ,
scroll : false ,
overflow : true ,
offset : 0
} ,
computed : {
links : function ( _ , $el ) {
return $$ ( 'a[href^="#"]' , $el ) . filter ( function ( el ) { return el . hash ; } ) ;
} ,
2019-04-22 13:31:39 +00:00
elements : function ( ref ) {
var selector = ref . closest ;
return closest ( this . links , selector || '*' ) ;
2018-09-20 12:35:14 +00:00
} ,
targets : function ( ) {
2019-04-22 13:31:39 +00:00
return $$ ( this . links . map ( function ( el ) { return escape ( el . hash ) ; } ) . join ( ',' ) ) ;
2018-09-20 12:35:14 +00:00
}
} ,
update : [
{
read : function ( ) {
if ( this . scroll ) {
this . $create ( 'scroll' , this . links , { offset : this . offset || 0 } ) ;
}
}
} ,
{
2019-04-22 13:31:39 +00:00
read : function ( data ) {
2018-09-20 12:35:14 +00:00
var this $1 = this ;
var scroll = window . pageYOffset + this . offset + 1 ;
var max = height ( document ) - height ( window ) + this . offset ;
2019-04-22 13:31:39 +00:00
data . active = false ;
2018-09-20 12:35:14 +00:00
this . targets . every ( function ( el , i ) {
var ref = offset ( el ) ;
var top = ref . top ;
var last = i + 1 === this $1 . targets . length ;
if ( ! this $1 . overflow && ( i === 0 && top > scroll || last && top + el . offsetTop < scroll ) ) {
return false ;
}
if ( ! last && offset ( this $1 . targets [ i + 1 ] ) . top <= scroll ) {
return true ;
}
if ( scroll >= max ) {
for ( var j = this $1 . targets . length - 1 ; j > i ; j -- ) {
if ( isInView ( this $1 . targets [ j ] ) ) {
el = this $1 . targets [ j ] ;
break ;
}
}
}
2019-04-22 13:31:39 +00:00
return ! ( data . active = $ ( filter ( this $1 . links , ( "[href=\"#" + ( el . id ) + "\"]" ) ) ) ) ;
2018-09-20 12:35:14 +00:00
} ) ;
} ,
write : function ( ref ) {
var active = ref . active ;
this . links . forEach ( function ( el ) { return el . blur ( ) ; } ) ;
removeClass ( this . elements , this . cls ) ;
if ( active ) {
trigger ( this . $el , 'active' , [ active , addClass ( this . closest ? closest ( active , this . closest ) : active , this . cls ) ] ) ;
}
} ,
2019-04-22 13:31:39 +00:00
events : [ 'scroll' , 'resize' ]
2018-09-20 12:35:14 +00:00
}
]
} ;
var Sticky = {
2019-04-22 13:31:39 +00:00
mixins : [ Class , Media ] ,
2018-09-20 12:35:14 +00:00
props : {
top : null ,
bottom : Boolean ,
offset : Number ,
animation : String ,
clsActive : String ,
clsInactive : String ,
clsFixed : String ,
clsBelow : String ,
selTarget : String ,
widthElement : Boolean ,
showOnUp : Boolean ,
targetOffset : Number
} ,
data : {
top : 0 ,
bottom : false ,
offset : 0 ,
animation : '' ,
clsActive : 'uk-active' ,
clsInactive : '' ,
clsFixed : 'uk-sticky-fixed' ,
clsBelow : 'uk-sticky-below' ,
selTarget : '' ,
widthElement : false ,
showOnUp : false ,
targetOffset : false
} ,
computed : {
selTarget : function ( ref , $el ) {
var selTarget = ref . selTarget ;
return selTarget && $ ( selTarget , $el ) || $el ;
} ,
widthElement : function ( ref , $el ) {
var widthElement = ref . widthElement ;
return query ( widthElement , $el ) || this . placeholder ;
2019-04-22 13:31:39 +00:00
} ,
isActive : {
get : function ( ) {
return hasClass ( this . selTarget , this . clsActive ) ;
} ,
set : function ( value ) {
if ( value && ! this . isActive ) {
replaceClass ( this . selTarget , this . clsInactive , this . clsActive ) ;
trigger ( this . $el , 'active' ) ;
} else if ( ! value && ! hasClass ( this . selTarget , this . clsInactive ) ) {
replaceClass ( this . selTarget , this . clsActive , this . clsInactive ) ;
trigger ( this . $el , 'inactive' ) ;
}
}
2018-09-20 12:35:14 +00:00
}
} ,
connected : function ( ) {
this . placeholder = $ ( '+ .uk-sticky-placeholder' , this . $el ) || $ ( '<div class="uk-sticky-placeholder"></div>' ) ;
2019-04-22 13:31:39 +00:00
this . isFixed = false ;
this . isActive = false ;
2018-09-20 12:35:14 +00:00
} ,
disconnected : function ( ) {
2019-04-22 13:31:39 +00:00
if ( this . isFixed ) {
2018-09-20 12:35:14 +00:00
this . hide ( ) ;
removeClass ( this . selTarget , this . clsInactive ) ;
}
remove ( this . placeholder ) ;
this . placeholder = null ;
this . widthElement = null ;
} ,
events : [
{
name : 'load hashchange popstate' ,
el : window ,
handler : function ( ) {
var this $1 = this ;
if ( ! ( this . targetOffset !== false && location . hash && window . pageYOffset > 0 ) ) {
return ;
}
var target = $ ( location . hash ) ;
if ( target ) {
fastdom . read ( function ( ) {
var ref = offset ( target ) ;
var top = ref . top ;
var elTop = offset ( this $1 . $el ) . top ;
var elHeight = this $1 . $el . offsetHeight ;
2019-04-22 13:31:39 +00:00
if ( this $1 . isFixed && elTop + elHeight >= top && elTop <= top + target . offsetHeight ) {
2018-09-20 12:35:14 +00:00
scrollTop ( window , top - elHeight - ( isNumeric ( this $1 . targetOffset ) ? this $1 . targetOffset : 0 ) - this $1 . offset ) ;
}
} ) ;
}
}
}
] ,
update : [
{
2019-04-22 13:31:39 +00:00
read : function ( ref , type ) {
var height = ref . height ;
if ( this . isActive && type !== 'update' ) {
this . hide ( ) ;
height = this . $el . offsetHeight ;
this . show ( ) ;
}
height = ! this . isActive ? this . $el . offsetHeight : height ;
this . topOffset = offset ( this . isFixed ? this . placeholder : this . $el ) . top ;
this . bottomOffset = this . topOffset + height ;
var bottom = parseProp ( 'bottom' , this ) ;
this . top = Math . max ( toFloat ( parseProp ( 'top' , this ) ) , this . topOffset ) - this . offset ;
this . bottom = bottom && bottom - height ;
this . inactive = ! this . matchMedia ;
2018-09-20 12:35:14 +00:00
return {
2019-04-22 13:31:39 +00:00
lastScroll : false ,
height : height ,
margins : css ( this . $el , [ 'marginTop' , 'marginBottom' , 'marginLeft' , 'marginRight' ] )
2018-09-20 12:35:14 +00:00
} ;
} ,
write : function ( ref ) {
2019-04-22 13:31:39 +00:00
var height = ref . height ;
var margins = ref . margins ;
2018-09-20 12:35:14 +00:00
var ref$1 = this ;
var placeholder = ref$1 . placeholder ;
2019-04-22 13:31:39 +00:00
css ( placeholder , assign ( { height : height } , margins ) ) ;
2018-09-20 12:35:14 +00:00
if ( ! within ( placeholder , document ) ) {
after ( this . $el , placeholder ) ;
attr ( placeholder , 'hidden' , '' ) ;
}
2019-04-22 13:31:39 +00:00
// ensure active/inactive classes are applied
this . isActive = this . isActive ;
2018-09-20 12:35:14 +00:00
} ,
2019-04-22 13:31:39 +00:00
events : [ 'resize' ]
2018-09-20 12:35:14 +00:00
} ,
{
2019-04-22 13:31:39 +00:00
read : function ( ref ) {
var scroll = ref . scroll ; if ( scroll === void 0 ) scroll = 0 ;
2018-09-20 12:35:14 +00:00
this . width = ( isVisible ( this . widthElement ) ? this . widthElement : this . $el ) . offsetWidth ;
2019-04-22 13:31:39 +00:00
this . scroll = window . pageYOffset ;
2018-09-20 12:35:14 +00:00
return {
2019-04-22 13:31:39 +00:00
dir : scroll <= this . scroll ? 'down' : 'up' ,
scroll : this . scroll ,
visible : isVisible ( this . $el ) ,
top : offsetPosition ( this . placeholder ) [ 0 ]
2018-09-20 12:35:14 +00:00
} ;
} ,
2019-04-22 13:31:39 +00:00
write : function ( data , type ) {
2018-09-20 12:35:14 +00:00
var this $1 = this ;
2019-04-22 13:31:39 +00:00
var initTimestamp = data . initTimestamp ; if ( initTimestamp === void 0 ) initTimestamp = 0 ;
var dir = data . dir ;
var lastDir = data . lastDir ;
var lastScroll = data . lastScroll ;
var scroll = data . scroll ;
var top = data . top ;
var visible = data . visible ;
var now = performance . now ( ) ;
data . lastScroll = scroll ;
if ( scroll < 0 || scroll === lastScroll || ! visible || this . disabled || this . showOnUp && type !== 'scroll' ) {
return ;
}
if ( now - initTimestamp > 300 || dir !== lastDir ) {
data . initScroll = scroll ;
data . initTimestamp = now ;
}
data . lastDir = dir ;
if ( this . showOnUp && Math . abs ( data . initScroll - scroll ) <= 30 && Math . abs ( lastScroll - scroll ) <= 10 ) {
2018-09-20 12:35:14 +00:00
return ;
}
if ( this . inactive
|| scroll < this . top
2019-04-22 13:31:39 +00:00
|| this . showOnUp && ( scroll <= this . top || dir === 'down' || dir === 'up' && ! this . isFixed && scroll <= this . bottomOffset )
2018-09-20 12:35:14 +00:00
) {
2019-04-22 13:31:39 +00:00
if ( ! this . isFixed ) {
if ( Animation . inProgress ( this . $el ) && top > scroll ) {
Animation . cancel ( this . $el ) ;
this . hide ( ) ;
}
2018-09-20 12:35:14 +00:00
return ;
}
2019-04-22 13:31:39 +00:00
this . isFixed = false ;
2018-09-20 12:35:14 +00:00
if ( this . animation && scroll > this . topOffset ) {
Animation . cancel ( this . $el ) ;
Animation . out ( this . $el , this . animation ) . then ( function ( ) { return this $1 . hide ( ) ; } , noop ) ;
} else {
this . hide ( ) ;
}
2019-04-22 13:31:39 +00:00
} else if ( this . isFixed ) {
2018-09-20 12:35:14 +00:00
this . update ( ) ;
} else if ( this . animation ) {
Animation . cancel ( this . $el ) ;
this . show ( ) ;
Animation . in ( this . $el , this . animation ) . catch ( noop ) ;
} else {
this . show ( ) ;
}
} ,
2019-04-22 13:31:39 +00:00
events : [ 'resize' , 'scroll' ]
}
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
] ,
2018-09-20 12:35:14 +00:00
methods : {
show : function ( ) {
2019-04-22 13:31:39 +00:00
this . isFixed = true ;
2018-09-20 12:35:14 +00:00
this . update ( ) ;
attr ( this . placeholder , 'hidden' , null ) ;
} ,
hide : function ( ) {
2019-04-22 13:31:39 +00:00
this . isActive = false ;
2018-09-20 12:35:14 +00:00
removeClass ( this . $el , this . clsFixed , this . clsBelow ) ;
css ( this . $el , { position : '' , top : '' , width : '' } ) ;
attr ( this . placeholder , 'hidden' , '' ) ;
} ,
update : function ( ) {
var active = this . top !== 0 || this . scroll > this . top ;
var top = Math . max ( 0 , this . offset ) ;
if ( this . bottom && this . scroll > this . bottom - this . offset ) {
top = this . bottom - this . scroll ;
}
css ( this . $el , {
position : 'fixed' ,
top : ( top + "px" ) ,
width : this . width
} ) ;
2019-04-22 13:31:39 +00:00
this . isActive = active ;
2018-09-20 12:35:14 +00:00
toggleClass ( this . $el , this . clsBelow , this . scroll > this . bottomOffset ) ;
addClass ( this . $el , this . clsFixed ) ;
}
}
} ;
function parseProp ( prop , ref ) {
var $props = ref . $props ;
var $el = ref . $el ;
var propOffset = ref [ ( prop + "Offset" ) ] ;
var value = $props [ prop ] ;
if ( ! value ) {
return ;
}
if ( isNumeric ( value ) ) {
return propOffset + toFloat ( value ) ;
} else if ( isString ( value ) && value . match ( /^-?\d+vh$/ ) ) {
return height ( window ) * toFloat ( value ) / 100 ;
} else {
var el = value === true ? $el . parentNode : query ( value , $el ) ;
if ( el ) {
return offset ( el ) . top + el . offsetHeight ;
}
}
}
var Switcher = {
mixins : [ Togglable ] ,
args : 'connect' ,
props : {
connect : String ,
toggle : String ,
active : Number ,
swiping : Boolean
} ,
data : {
connect : '~.uk-switcher' ,
2019-04-22 13:31:39 +00:00
toggle : '> * > :first-child' ,
2018-09-20 12:35:14 +00:00
active : 0 ,
swiping : true ,
cls : 'uk-active' ,
clsContainer : 'uk-switcher' ,
attrItem : 'uk-switcher-item' ,
queued : true
} ,
computed : {
connects : function ( ref , $el ) {
var connect = ref . connect ;
return queryAll ( connect , $el ) ;
} ,
toggles : function ( ref , $el ) {
var toggle = ref . toggle ;
return $$ ( toggle , $el ) ;
}
} ,
events : [
{
name : 'click' ,
delegate : function ( ) {
return ( ( this . toggle ) + ":not(.uk-disabled)" ) ;
} ,
handler : function ( e ) {
e . preventDefault ( ) ;
2019-04-22 13:31:39 +00:00
this . show ( toNodes ( this . $el . children ) . filter ( function ( el ) { return within ( e . current , el ) ; } ) [ 0 ] ) ;
2018-09-20 12:35:14 +00:00
}
} ,
{
name : 'click' ,
el : function ( ) {
return this . connects ;
} ,
delegate : function ( ) {
return ( "[" + ( this . attrItem ) + "],[data-" + ( this . attrItem ) + "]" ) ;
} ,
handler : function ( e ) {
e . preventDefault ( ) ;
this . show ( data ( e . current , this . attrItem ) ) ;
}
} ,
{
name : 'swipeRight swipeLeft' ,
filter : function ( ) {
return this . swiping ;
} ,
el : function ( ) {
return this . connects ;
} ,
2019-04-22 13:31:39 +00:00
handler : function ( ref ) {
var type = ref . type ;
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
this . show ( endsWith ( type , 'Left' ) ? 'next' : 'previous' ) ;
2018-09-20 12:35:14 +00:00
}
}
] ,
update : function ( ) {
var this $1 = this ;
this . connects . forEach ( function ( list ) { return this $1 . updateAria ( list . children ) ; } ) ;
2019-04-22 13:31:39 +00:00
var ref = this . $el ;
var children = ref . children ;
this . show ( filter ( children , ( "." + ( this . cls ) ) ) [ 0 ] || children [ this . active ] || children [ 0 ] ) ;
2018-09-20 12:35:14 +00:00
} ,
methods : {
index : function ( ) {
2019-04-22 13:31:39 +00:00
return ! isEmpty ( this . connects ) && index ( filter ( this . connects [ 0 ] . children , ( "." + ( this . cls ) ) ) [ 0 ] ) ;
2018-09-20 12:35:14 +00:00
} ,
show : function ( item ) {
var this $1 = this ;
2019-04-22 13:31:39 +00:00
var ref = this . $el ;
var children = ref . children ;
var length = children . length ;
2018-09-20 12:35:14 +00:00
var prev = this . index ( ) ;
var hasPrev = prev >= 0 ;
var dir = item === 'previous' ? - 1 : 1 ;
2019-04-22 13:31:39 +00:00
var toggle , active , next = getIndex ( item , children , prev ) ;
2018-09-20 12:35:14 +00:00
for ( var i = 0 ; i < length ; i ++ , next = ( next + dir + length ) % length ) {
2019-04-22 13:31:39 +00:00
if ( ! matches ( this . toggles [ next ] , '.uk-disabled *, .uk-disabled, [disabled]' ) ) {
toggle = this . toggles [ next ] ;
active = children [ next ] ;
2018-09-20 12:35:14 +00:00
break ;
}
}
2019-04-22 13:31:39 +00:00
if ( ! active || prev >= 0 && hasClass ( active , this . cls ) || prev === next ) {
2018-09-20 12:35:14 +00:00
return ;
}
2019-04-22 13:31:39 +00:00
removeClass ( children , this . cls ) ;
addClass ( active , this . cls ) ;
2018-09-20 12:35:14 +00:00
attr ( this . toggles , 'aria-expanded' , false ) ;
attr ( toggle , 'aria-expanded' , true ) ;
this . connects . forEach ( function ( list ) {
if ( ! hasPrev ) {
this $1 . toggleNow ( list . children [ next ] ) ;
} else {
this $1 . toggleElement ( [ list . children [ prev ] , list . children [ next ] ] ) ;
}
} ) ;
}
}
} ;
var Tab = {
2017-11-11 04:33:51 +00:00
mixins : [ Class ] ,
2018-09-20 12:35:14 +00:00
extends : Switcher ,
props : {
2019-04-22 13:31:39 +00:00
media : Boolean
2018-09-20 12:35:14 +00:00
} ,
data : {
media : 960 ,
attrItem : 'uk-tab-item'
} ,
connected : function ( ) {
var cls = hasClass ( this . $el , 'uk-tab-left' )
? 'uk-tab-left'
: hasClass ( this . $el , 'uk-tab-right' )
? 'uk-tab-right'
: false ;
if ( cls ) {
this . $create ( 'toggle' , this . $el , { cls : cls , mode : 'media' , media : this . media } ) ;
}
}
} ;
var Toggle = {
2019-04-22 13:31:39 +00:00
mixins : [ Media , Togglable ] ,
2018-09-20 12:35:14 +00:00
args : 'target' ,
props : {
href : String ,
target : null ,
2019-04-22 13:31:39 +00:00
mode : 'list'
2018-09-20 12:35:14 +00:00
} ,
data : {
href : false ,
target : false ,
mode : 'click' ,
2019-04-22 13:31:39 +00:00
queued : true
2018-09-20 12:35:14 +00:00
} ,
computed : {
target : function ( ref , $el ) {
var href = ref . href ;
var target = ref . target ;
target = queryAll ( target || href , $el ) ;
return target . length && target || [ $el ] ;
}
} ,
2019-04-22 13:31:39 +00:00
connected : function ( ) {
trigger ( this . target , 'updatearia' , [ this ] ) ;
} ,
2018-09-20 12:35:14 +00:00
events : [
{
name : ( pointerEnter + " " + pointerLeave ) ,
filter : function ( ) {
return includes ( this . mode , 'hover' ) ;
} ,
handler : function ( e ) {
if ( ! isTouch ( e ) ) {
this . toggle ( ( "toggle" + ( e . type === pointerEnter ? 'show' : 'hide' ) ) ) ;
}
}
} ,
{
name : 'click' ,
filter : function ( ) {
return includes ( this . mode , 'click' ) || hasTouch && includes ( this . mode , 'hover' ) ;
} ,
handler : function ( e ) {
// TODO better isToggled handling
var link ;
2019-04-22 13:31:39 +00:00
if ( closest ( e . target , 'a[href="#"], a[href=""], button' )
2018-09-20 12:35:14 +00:00
|| ( link = closest ( e . target , 'a[href]' ) ) && (
this . cls
|| ! isVisible ( this . target )
|| link . hash && matches ( this . target , link . hash )
)
) {
2019-04-22 13:31:39 +00:00
e . preventDefault ( ) ;
2018-09-20 12:35:14 +00:00
}
this . toggle ( ) ;
}
}
2019-04-22 13:31:39 +00:00
2018-09-20 12:35:14 +00:00
] ,
update : {
2019-04-22 13:31:39 +00:00
read : function ( ) {
return includes ( this . mode , 'media' ) && this . media
? { match : this . matchMedia }
: false ;
} ,
write : function ( ref ) {
var match = ref . match ;
2018-09-20 12:35:14 +00:00
var toggled = this . isToggled ( this . target ) ;
2019-04-22 13:31:39 +00:00
if ( match ? ! toggled : toggled ) {
2018-09-20 12:35:14 +00:00
this . toggle ( ) ;
}
} ,
2019-04-22 13:31:39 +00:00
events : [ 'resize' ]
2018-09-20 12:35:14 +00:00
} ,
methods : {
toggle : function ( type ) {
if ( trigger ( this . target , type || 'toggle' , [ this ] ) ) {
this . toggleElement ( this . target ) ;
}
}
}
} ;
function core ( UIkit ) {
// core components
UIkit . component ( 'accordion' , Accordion ) ;
UIkit . component ( 'alert' , Alert ) ;
UIkit . component ( 'cover' , Cover ) ;
UIkit . component ( 'drop' , Drop ) ;
UIkit . component ( 'dropdown' , Dropdown ) ;
UIkit . component ( 'formCustom' , FormCustom ) ;
UIkit . component ( 'gif' , Gif ) ;
UIkit . component ( 'grid' , Grid ) ;
UIkit . component ( 'heightMatch' , HeightMatch ) ;
UIkit . component ( 'heightViewport' , HeightViewport ) ;
UIkit . component ( 'icon' , Icon ) ;
UIkit . component ( 'img' , Img ) ;
UIkit . component ( 'leader' , Leader ) ;
UIkit . component ( 'margin' , Margin ) ;
UIkit . component ( 'modal' , Modal$1 ) ;
UIkit . component ( 'nav' , Nav ) ;
UIkit . component ( 'navbar' , Navbar ) ;
UIkit . component ( 'offcanvas' , Offcanvas ) ;
UIkit . component ( 'overflowAuto' , OverflowAuto ) ;
UIkit . component ( 'responsive' , Responsive ) ;
UIkit . component ( 'scroll' , Scroll ) ;
UIkit . component ( 'scrollspy' , Scrollspy ) ;
UIkit . component ( 'scrollspyNav' , ScrollspyNav ) ;
UIkit . component ( 'sticky' , Sticky ) ;
2019-04-22 13:31:39 +00:00
UIkit . component ( 'svg' , Svg ) ;
2018-09-20 12:35:14 +00:00
UIkit . component ( 'switcher' , Switcher ) ;
UIkit . component ( 'tab' , Tab ) ;
UIkit . component ( 'toggle' , Toggle ) ;
UIkit . component ( 'video' , Video ) ;
// Icon components
UIkit . component ( 'close' , Close ) ;
UIkit . component ( 'marker' , IconComponent ) ;
UIkit . component ( 'navbarToggleIcon' , IconComponent ) ;
UIkit . component ( 'overlayIcon' , IconComponent ) ;
UIkit . component ( 'paginationNext' , IconComponent ) ;
UIkit . component ( 'paginationPrevious' , IconComponent ) ;
UIkit . component ( 'searchIcon' , Search ) ;
UIkit . component ( 'slidenavNext' , Slidenav ) ;
UIkit . component ( 'slidenavPrevious' , Slidenav ) ;
UIkit . component ( 'spinner' , Spinner ) ;
UIkit . component ( 'totop' , IconComponent ) ;
// core functionality
UIkit . use ( Core ) ;
}
2019-04-22 13:31:39 +00:00
UIkit . version = '3.1.2' ;
2018-09-20 12:35:14 +00:00
core ( UIkit ) ;
var Countdown = {
mixins : [ Class ] ,
2017-11-11 04:33:51 +00:00
props : {
2018-09-20 12:35:14 +00:00
date : String ,
clsWrapper : String
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
data : {
date : '' ,
clsWrapper : '.uk-countdown-%unit%'
2017-11-11 04:33:51 +00:00
} ,
computed : {
2018-09-20 12:35:14 +00:00
date : function ( ref ) {
var date = ref . date ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return Date . parse ( date ) ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
days : function ( ref , $el ) {
var clsWrapper = ref . clsWrapper ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return $ ( clsWrapper . replace ( '%unit%' , 'days' ) , $el ) ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
hours : function ( ref , $el ) {
var clsWrapper = ref . clsWrapper ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return $ ( clsWrapper . replace ( '%unit%' , 'hours' ) , $el ) ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
minutes : function ( ref , $el ) {
var clsWrapper = ref . clsWrapper ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return $ ( clsWrapper . replace ( '%unit%' , 'minutes' ) , $el ) ;
} ,
seconds : function ( ref , $el ) {
var clsWrapper = ref . clsWrapper ;
return $ ( clsWrapper . replace ( '%unit%' , 'seconds' ) , $el ) ;
} ,
units : function ( ) {
var this $1 = this ;
return [ 'days' , 'hours' , 'minutes' , 'seconds' ] . filter ( function ( unit ) { return this $1 [ unit ] ; } ) ;
2017-11-11 04:33:51 +00:00
}
} ,
2018-09-20 12:35:14 +00:00
connected : function ( ) {
this . start ( ) ;
} ,
disconnected : function ( ) {
2017-11-11 04:33:51 +00:00
var this $1 = this ;
2018-09-20 12:35:14 +00:00
this . stop ( ) ;
this . units . forEach ( function ( unit ) { return empty ( this $1 [ unit ] ) ; } ) ;
} ,
events : [
{
name : 'visibilitychange' ,
el : document ,
handler : function ( ) {
if ( document . hidden ) {
this . stop ( ) ;
} else {
this . start ( ) ;
}
}
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
] ,
update : {
write : function ( ) {
var this $1 = this ;
var timespan = getTimeSpan ( this . date ) ;
if ( timespan . total <= 0 ) {
this . stop ( ) ;
timespan . days
= timespan . hours
= timespan . minutes
= timespan . seconds
= 0 ;
}
this . units . forEach ( function ( unit ) {
var digits = String ( Math . floor ( timespan [ unit ] ) ) ;
digits = digits . length < 2 ? ( "0" + digits ) : digits ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var el = this $1 [ unit ] ;
if ( el . textContent !== digits ) {
digits = digits . split ( '' ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( digits . length !== el . children . length ) {
html ( el , digits . map ( function ( ) { return '<span></span>' ; } ) . join ( '' ) ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
digits . forEach ( function ( digit , i ) { return el . children [ i ] . textContent = digit ; } ) ;
2017-11-11 04:33:51 +00:00
}
} ) ;
2018-09-20 12:35:14 +00:00
2017-11-11 04:33:51 +00:00
}
} ,
2018-09-20 12:35:14 +00:00
methods : {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
start : function ( ) {
var this $1 = this ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . stop ( ) ;
if ( this . date && this . units . length ) {
this . $emit ( ) ;
this . timer = setInterval ( function ( ) { return this $1 . $emit ( ) ; } , 1000 ) ;
2017-11-11 04:33:51 +00:00
}
} ,
2018-09-20 12:35:14 +00:00
stop : function ( ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( this . timer ) {
clearInterval ( this . timer ) ;
this . timer = null ;
2017-11-11 04:33:51 +00:00
}
}
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function getTimeSpan ( date ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var total = date - Date . now ( ) ;
return {
total : total ,
seconds : total / 1000 % 60 ,
minutes : total / 1000 / 60 % 60 ,
hours : total / 1000 / 60 / 60 % 24 ,
days : total / 1000 / 60 / 60 / 24
} ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var targetClass = 'uk-animation-target' ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var Animate = {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
props : {
animation : Number
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
data : {
animation : 150
} ,
computed : {
target : function ( ) {
return this . $el ;
}
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
methods : {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
animate : function ( action ) {
var this $1 = this ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
addStyle ( ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var children = toNodes ( this . target . children ) ;
var propsFrom = children . map ( function ( el ) { return getProps ( el , true ) ; } ) ;
var oldHeight = height ( this . target ) ;
var oldScrollY = window . pageYOffset ;
action ( ) ;
Transition . cancel ( this . target ) ;
children . forEach ( Transition . cancel ) ;
reset ( this . target ) ;
this . $update ( this . target ) ;
fastdom . flush ( ) ;
var newHeight = height ( this . target ) ;
children = children . concat ( toNodes ( this . target . children ) . filter ( function ( el ) { return ! includes ( children , el ) ; } ) ) ;
var propsTo = children . map ( function ( el , i ) { return el . parentNode && i in propsFrom
? propsFrom [ i ]
? isVisible ( el )
? getPositionWithMargin ( el )
: { opacity : 0 }
: { opacity : isVisible ( el ) ? 1 : 0 }
: false ; }
) ;
propsFrom = propsTo . map ( function ( props , i ) {
var from = children [ i ] . parentNode === this $1 . target
? propsFrom [ i ] || getProps ( children [ i ] )
: false ;
if ( from ) {
if ( ! props ) {
delete from . opacity ;
} else if ( ! ( 'opacity' in props ) ) {
var opacity = from . opacity ;
if ( opacity % 1 ) {
props . opacity = 1 ;
} else {
delete from . opacity ;
}
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
}
return from ;
} ) ;
addClass ( this . target , targetClass ) ;
children . forEach ( function ( el , i ) { return propsFrom [ i ] && css ( el , propsFrom [ i ] ) ; } ) ;
css ( this . target , 'height' , oldHeight ) ;
scrollTop ( window , oldScrollY ) ;
return Promise . all ( children . map ( function ( el , i ) { return propsFrom [ i ] && propsTo [ i ]
? Transition . start ( el , propsTo [ i ] , this $1 . animation , 'ease' )
: Promise . resolve ( ) ; }
) . concat ( Transition . start ( this . target , { height : newHeight } , this . animation , 'ease' ) ) ) . then ( function ( ) {
children . forEach ( function ( el , i ) { return css ( el , { display : propsTo [ i ] . opacity === 0 ? 'none' : '' , zIndex : '' } ) ; } ) ;
reset ( this $1 . target ) ;
this $1 . $update ( this $1 . target ) ;
fastdom . flush ( ) ; // needed for IE11
} , noop ) ;
}
}
} ;
function getProps ( el , opacity ) {
var zIndex = css ( el , 'zIndex' ) ;
return isVisible ( el )
? assign ( {
display : '' ,
opacity : opacity ? css ( el , 'opacity' ) : '0' ,
pointerEvents : 'none' ,
position : 'absolute' ,
zIndex : zIndex === 'auto' ? index ( el ) : zIndex
} , getPositionWithMargin ( el ) )
: false ;
}
function reset ( el ) {
css ( el . children , {
height : '' ,
left : '' ,
opacity : '' ,
pointerEvents : '' ,
position : '' ,
top : '' ,
width : ''
} ) ;
removeClass ( el , targetClass ) ;
css ( el , 'height' , '' ) ;
}
function getPositionWithMargin ( el ) {
var ref = el . getBoundingClientRect ( ) ;
2019-04-22 13:31:39 +00:00
var height = ref . height ;
var width = ref . width ;
2018-09-20 12:35:14 +00:00
var ref$1 = position ( el ) ;
var top = ref$1 . top ;
var left = ref$1 . left ;
top += toFloat ( css ( el , 'marginTop' ) ) ;
2019-04-22 13:31:39 +00:00
return { top : top , left : left , height : height , width : width } ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var style ;
2018-09-20 12:35:14 +00:00
function addStyle ( ) {
2019-04-22 13:31:39 +00:00
if ( style ) {
return ;
2018-09-20 12:35:14 +00:00
}
2019-04-22 13:31:39 +00:00
style = append ( document . head , '<style>' ) . sheet ;
style . insertRule (
( "." + targetClass + " > * {\n margin-top: 0 !important;\n transform: none !important;\n }" ) , 0
) ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var Filter = {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
mixins : [ Animate ] ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
args : 'target' ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
props : {
target : Boolean ,
selActive : Boolean
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
data : {
target : null ,
selActive : false ,
attrItem : 'uk-filter-control' ,
cls : 'uk-active' ,
animation : 250
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
computed : {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
toggles : {
get : function ( ref , $el ) {
var attrItem = ref . attrItem ;
return $$ ( ( "[" + ( this . attrItem ) + "],[data-" + ( this . attrItem ) + "]" ) , $el ) ;
} ,
watch : function ( ) {
this . updateState ( ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
target : function ( ref , $el ) {
var target = ref . target ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return $ ( target , $el ) ;
2019-04-22 13:31:39 +00:00
} ,
children : {
get : function ( ) {
return toNodes ( this . target . children ) ;
} ,
watch : function ( list , old ) {
if ( ! isEqualList ( list , old ) ) {
this . updateState ( ) ;
}
}
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
events : [
2017-11-11 04:33:51 +00:00
{
2018-09-20 12:35:14 +00:00
name : 'click' ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
delegate : function ( ) {
return ( "[" + ( this . attrItem ) + "],[data-" + ( this . attrItem ) + "]" ) ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
handler : function ( e ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
e . preventDefault ( ) ;
this . apply ( e . current ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
] ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
connected : function ( ) {
var this $1 = this ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
this . updateState ( ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( this . selActive !== false ) {
var actives = $$ ( this . selActive , this . $el ) ;
this . toggles . forEach ( function ( el ) { return toggleClass ( el , this $1 . cls , includes ( actives , el ) ) ; } ) ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
methods : {
2018-09-20 12:35:14 +00:00
apply : function ( el ) {
this . setState ( mergeState ( el , this . attrItem , this . getState ( ) ) ) ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
getState : function ( ) {
var this $1 = this ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return this . toggles
. filter ( function ( item ) { return hasClass ( item , this $1 . cls ) ; } )
. reduce ( function ( state , el ) { return mergeState ( el , this $1 . attrItem , state ) ; } , { filter : { '' : '' } , sort : [ ] } ) ;
2017-11-11 04:33:51 +00:00
} ,
2019-04-22 13:31:39 +00:00
setState : function ( state , animate ) {
2018-09-20 12:35:14 +00:00
var this $1 = this ;
2019-04-22 13:31:39 +00:00
if ( animate === void 0 ) animate = true ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
state = assign ( { filter : { '' : '' } , sort : [ ] } , state ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
trigger ( this . $el , 'beforeFilter' , [ this , state ] ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var ref = this ;
var children = ref . children ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
this . toggles . forEach ( function ( el ) { return toggleClass ( el , this $1 . cls , ! ! matchFilter ( el , this $1 . attrItem , state ) ) ; } ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var apply = function ( ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var selector = getSelector ( state ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
children . forEach ( function ( el ) { return css ( el , 'display' , selector && ! matches ( el , selector ) ? 'none' : '' ) ; } ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var ref = state . sort ;
var sort = ref [ 0 ] ;
var order = ref [ 1 ] ;
if ( sort ) {
var sorted = sortItems ( children , sort , order ) ;
2019-04-22 13:31:39 +00:00
if ( ! isEqual ( sorted , children ) ) {
2018-09-20 12:35:14 +00:00
sorted . forEach ( function ( el ) { return append ( this $1 . target , el ) ; } ) ;
}
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( animate ) {
this . animate ( apply ) . then ( function ( ) { return trigger ( this $1 . $el , 'afterFilter' , [ this $1 ] ) ; } ) ;
2018-09-20 12:35:14 +00:00
} else {
2019-04-22 13:31:39 +00:00
apply ( ) ;
2018-09-20 12:35:14 +00:00
trigger ( this . $el , 'afterFilter' , [ this ] ) ;
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
} ,
updateState : function ( ) {
var this $1 = this ;
fastdom . write ( function ( ) { return this $1 . setState ( this $1 . getState ( ) , false ) ; } ) ;
2017-11-11 04:33:51 +00:00
}
}
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function getFilter ( el , attr ) {
return parseOptions ( data ( el , attr ) , [ 'filter' ] ) ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function mergeState ( el , attr , state ) {
var filterBy = getFilter ( el , attr ) ;
var filter = filterBy . filter ;
var group = filterBy . group ;
var sort = filterBy . sort ;
var order = filterBy . order ; if ( order === void 0 ) order = 'asc' ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( filter || isUndefined ( sort ) ) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( group ) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( filter ) {
2018-09-20 12:35:14 +00:00
delete state . filter [ '' ] ;
2019-04-22 13:31:39 +00:00
state . filter [ group ] = filter ;
2018-09-20 12:35:14 +00:00
} else {
2019-04-22 13:31:39 +00:00
delete state . filter [ group ] ;
if ( isEmpty ( state . filter ) || '' in state . filter ) {
state . filter = { '' : filter || '' } ;
}
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
} else {
state . filter = { '' : filter || '' } ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
}
if ( ! isUndefined ( sort ) ) {
state . sort = [ sort , order ] ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return state ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function matchFilter ( el , attr , ref ) {
var stateFilter = ref . filter ; if ( stateFilter === void 0 ) stateFilter = { '' : '' } ;
2018-09-20 12:35:14 +00:00
var ref _sort = ref . sort ;
var stateSort = ref _sort [ 0 ] ;
var stateOrder = ref _sort [ 1 ] ;
2019-04-22 13:31:39 +00:00
var ref$1 = getFilter ( el , attr ) ;
var filter = ref$1 . filter ; if ( filter === void 0 ) filter = '' ;
2018-09-20 12:35:14 +00:00
var group = ref$1 . group ; if ( group === void 0 ) group = '' ;
var sort = ref$1 . sort ;
var order = ref$1 . order ; if ( order === void 0 ) order = 'asc' ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( isUndefined ( sort ) ) {
return group in stateFilter && filter === stateFilter [ group ]
|| ! filter && group && ! ( group in stateFilter ) && ! stateFilter [ '' ] ;
} else {
return stateSort === sort && stateOrder === order ;
}
// filter = isUndefined(sort) ? filter || '' : filter;
// sort = isUndefined(filter) ? sort || '' : sort;
//
// return (isUndefined(filter) || group in stateFilter && filter === stateFilter[group])
// && (isUndefined(sort) || stateSort === sort && stateOrder === order);
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function isEqualList ( listA , listB ) {
2018-09-20 12:35:14 +00:00
return listA . length === listB . length
2019-04-22 13:31:39 +00:00
&& listA . every ( function ( el ) { return ~ listB . indexOf ( el ) ; } ) ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function getSelector ( ref ) {
2019-04-22 13:31:39 +00:00
var filter = ref . filter ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var selector = '' ;
2019-04-22 13:31:39 +00:00
each ( filter , function ( value ) { return selector += value || '' ; } ) ;
2018-09-20 12:35:14 +00:00
return selector ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function sortItems ( nodes , sort , order ) {
2019-04-22 13:31:39 +00:00
return assign ( [ ] , nodes ) . sort ( function ( a , b ) { return data ( a , sort ) . localeCompare ( data ( b , sort ) , undefined , { numeric : true } ) * ( order === 'asc' || - 1 ) ; } ) ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var Animations = {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
slide : {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
show : function ( dir ) {
return [
{ transform : translate ( dir * - 100 ) } ,
{ transform : translate ( ) }
] ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
percent : function ( current ) {
return translated ( current ) ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
translate : function ( percent , dir ) {
return [
{ transform : translate ( dir * - 100 * percent ) } ,
{ transform : translate ( dir * 100 * ( 1 - percent ) ) }
] ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function translated ( el ) {
return Math . abs ( css ( el , 'transform' ) . split ( ',' ) [ 4 ] / el . offsetWidth ) || 0 ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function translate ( value , unit ) {
if ( value === void 0 ) value = 0 ;
if ( unit === void 0 ) unit = '%' ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return ( "translateX(" + value + ( value ? unit : '' ) + ")" ) ; // currently not translate3d to support IE, translate3d within translate3d does not work while transitioning
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function scale3d ( value ) {
return ( "scale3d(" + value + ", " + value + ", 1)" ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var Animations$1 = assign ( { } , Animations , {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
fade : {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
show : function ( ) {
return [
{ opacity : 0 } ,
{ opacity : 1 }
] ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
percent : function ( current ) {
return 1 - css ( current , 'opacity' ) ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
translate : function ( percent ) {
return [
{ opacity : 1 - percent } ,
{ opacity : percent }
] ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
scale : {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
show : function ( ) {
return [
{ opacity : 0 , transform : scale3d ( 1 - . 2 ) } ,
{ opacity : 1 , transform : scale3d ( 1 ) }
] ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
percent : function ( current ) {
return 1 - css ( current , 'opacity' ) ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
translate : function ( percent ) {
return [
{ opacity : 1 - percent , transform : scale3d ( 1 - . 2 * percent ) } ,
{ opacity : percent , transform : scale3d ( 1 - . 2 + . 2 * percent ) }
] ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
} ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function Transitioner ( prev , next , dir , ref ) {
var animation = ref . animation ;
var easing = ref . easing ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var percent = animation . percent ;
var translate = animation . translate ;
var show = animation . show ; if ( show === void 0 ) show = noop ;
var props = show ( dir ) ;
var deferred = new Deferred ( ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
dir : dir ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
show : function ( duration , percent , linear ) {
var this $1 = this ;
if ( percent === void 0 ) percent = 0 ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var timing = linear ? 'linear' : easing ;
duration -= Math . round ( duration * clamp ( percent , - 1 , 1 ) ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . translate ( percent ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
triggerUpdate ( next , 'itemin' , { percent : percent , duration : duration , timing : timing , dir : dir } ) ;
triggerUpdate ( prev , 'itemout' , { percent : 1 - percent , duration : duration , timing : timing , dir : dir } ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
Promise . all ( [
Transition . start ( next , props [ 1 ] , duration , timing ) ,
Transition . start ( prev , props [ 0 ] , duration , timing )
] ) . then ( function ( ) {
this $1 . reset ( ) ;
deferred . resolve ( ) ;
} , noop ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return deferred . promise ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
stop : function ( ) {
return Transition . stop ( [ next , prev ] ) ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
cancel : function ( ) {
Transition . cancel ( [ next , prev ] ) ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
reset : function ( ) {
for ( var prop in props [ 0 ] ) {
css ( [ next , prev ] , prop , '' ) ;
}
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
forward : function ( duration , percent ) {
if ( percent === void 0 ) percent = this . percent ( ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
Transition . cancel ( [ next , prev ] ) ;
return this . show ( duration , percent , true ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
translate : function ( percent ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . reset ( ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var props = translate ( percent , dir ) ;
css ( next , props [ 1 ] ) ;
css ( prev , props [ 0 ] ) ;
triggerUpdate ( next , 'itemtranslatein' , { percent : percent , dir : dir } ) ;
triggerUpdate ( prev , 'itemtranslateout' , { percent : 1 - percent , dir : dir } ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
percent : function ( ) {
return percent ( prev || next , next , dir ) ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
getDistance : function ( ) {
2019-04-22 13:31:39 +00:00
return prev && prev . offsetWidth ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
function triggerUpdate ( el , type , data ) {
trigger ( el , createEvent ( type , false , false , data ) ) ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var SliderAutoplay = {
2017-11-11 04:33:51 +00:00
props : {
2018-09-20 12:35:14 +00:00
autoplay : Boolean ,
autoplayInterval : Number ,
pauseOnHover : Boolean
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
data : {
autoplay : false ,
autoplayInterval : 7000 ,
pauseOnHover : true
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
connected : function ( ) {
2019-04-22 13:31:39 +00:00
this . autoplay && this . startAutoplay ( ) ;
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
disconnected : function ( ) {
this . stopAutoplay ( ) ;
2017-11-11 04:33:51 +00:00
} ,
2019-04-22 13:31:39 +00:00
update : function ( ) {
attr ( this . slides , 'tabindex' , '-1' ) ;
} ,
2017-11-11 04:33:51 +00:00
events : [
{
2018-09-20 12:35:14 +00:00
name : 'visibilitychange' ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
el : document ,
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
filter : function ( ) {
return this . autoplay ;
} ,
2018-09-20 12:35:14 +00:00
handler : function ( ) {
if ( document . hidden ) {
this . stopAutoplay ( ) ;
} else {
this . startAutoplay ( ) ;
}
2017-11-11 04:33:51 +00:00
}
} ,
2018-09-20 12:35:14 +00:00
{
name : 'mouseenter' ,
filter : function ( ) {
2019-04-22 13:31:39 +00:00
return this . autoplay && this . pauseOnHover ;
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
handler : function ( ) {
this . isHovering = true ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
2017-11-11 04:33:51 +00:00
} ,
{
2018-09-20 12:35:14 +00:00
name : 'mouseleave' ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
filter : function ( ) {
2019-04-22 13:31:39 +00:00
return this . autoplay && this . pauseOnHover ;
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
handler : function ( ) {
this . isHovering = false ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
2017-11-11 04:33:51 +00:00
}
] ,
methods : {
2018-09-20 12:35:14 +00:00
startAutoplay : function ( ) {
2017-11-11 04:33:51 +00:00
var this $1 = this ;
2018-09-20 12:35:14 +00:00
this . stopAutoplay ( ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
this . interval = setInterval (
function ( ) { return ! within ( document . activeElement , this $1 . $el )
&& ! this $1 . isHovering
&& ! this $1 . stack . length
&& this $1 . show ( 'next' ) ; } ,
this . autoplayInterval
) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
stopAutoplay : function ( ) {
2019-04-22 13:31:39 +00:00
this . interval && clearInterval ( this . interval ) ;
2017-11-11 04:33:51 +00:00
}
}
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var SliderDrag = {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
props : {
draggable : Boolean
} ,
2018-09-20 12:35:14 +00:00
data : {
2019-04-22 13:31:39 +00:00
draggable : true ,
threshold : 10
2017-11-11 04:33:51 +00:00
} ,
2019-04-22 13:31:39 +00:00
created : function ( ) {
2018-09-20 12:35:14 +00:00
var this $1 = this ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
[ 'start' , 'move' , 'end' ] . forEach ( function ( key ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var fn = this $1 [ key ] ;
this $1 [ key ] = function ( e ) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var pos = getEventPos ( e ) . x * ( isRtl ? - 1 : 1 ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this $1 . prevPos = pos !== this $1 . pos ? this $1 . pos : this $1 . prevPos ;
this $1 . pos = pos ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
fn ( e ) ;
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
events : [
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
{
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
name : pointerDown ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
delegate : function ( ) {
2019-04-22 13:31:39 +00:00
return this . selSlides ;
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
handler : function ( e ) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( ! this . draggable
|| ! isTouch ( e ) && hasTextNodesOnly ( e . target )
2018-09-20 12:35:14 +00:00
|| e . button > 0
|| this . length < 2
) {
return ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . start ( e ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
{
2018-09-20 12:35:14 +00:00
// Workaround for iOS 11 bug: https://bugs.webkit.org/show_bug.cgi?id=184250
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
name : 'touchmove' ,
passive : false ,
handler : 'move' ,
delegate : function ( ) {
2019-04-22 13:31:39 +00:00
return this . selSlides ;
2017-11-11 04:33:51 +00:00
}
} ,
{
2018-09-20 12:35:14 +00:00
name : 'dragstart' ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
handler : function ( e ) {
e . preventDefault ( ) ;
}
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
] ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
methods : {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
start : function ( ) {
var this $1 = this ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . drag = this . pos ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( this . _transitioner ) {
this . percent = this . _transitioner . percent ( ) ;
this . drag += this . _transitioner . getDistance ( ) * this . percent * this . dir ;
this . _transitioner . cancel ( ) ;
this . _transitioner . translate ( this . percent ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . dragging = true ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . stack = [ ] ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} else {
this . prevIndex = this . index ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
// See above workaround notice
2019-04-22 13:31:39 +00:00
var off = pointerMove !== 'touchmove'
? on ( document , pointerMove , this . move , { passive : false } )
: noop ;
2018-09-20 12:35:14 +00:00
this . unbindMove = function ( ) {
2019-04-22 13:31:39 +00:00
off ( ) ;
2018-09-20 12:35:14 +00:00
this $1 . unbindMove = null ;
} ;
on ( window , 'scroll' , this . unbindMove ) ;
on ( document , pointerUp , this . end , true ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
css ( this . list , 'userSelect' , 'none' ) ;
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
move : function ( e ) {
var this $1 = this ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
// See above workaround notice
if ( ! this . unbindMove ) {
return ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var distance = this . pos - this . drag ;
if ( distance === 0 || this . prevPos === this . pos || ! this . dragging && Math . abs ( distance ) < this . threshold ) {
return ;
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
css ( this . list , 'pointerEvents' , 'none' ) ;
2018-09-20 12:35:14 +00:00
e . cancelable && e . preventDefault ( ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . dragging = true ;
this . dir = ( distance < 0 ? 1 : - 1 ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var ref = this ;
var slides = ref . slides ;
var ref$1 = this ;
var prevIndex = ref$1 . prevIndex ;
var dis = Math . abs ( distance ) ;
var nextIndex = this . getIndex ( prevIndex + this . dir , prevIndex ) ;
2019-04-22 13:31:39 +00:00
var width = this . _getDistance ( prevIndex , nextIndex ) || slides [ prevIndex ] . offsetWidth ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
while ( nextIndex !== prevIndex && dis > width ) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
this . drag -= width * this . dir ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
prevIndex = nextIndex ;
2019-04-22 13:31:39 +00:00
dis -= width ;
nextIndex = this . getIndex ( prevIndex + this . dir , prevIndex ) ;
width = this . _getDistance ( prevIndex , nextIndex ) || slides [ prevIndex ] . offsetWidth ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
this . percent = dis / width ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var prev = slides [ prevIndex ] ;
var next = slides [ nextIndex ] ;
var changed = this . index !== nextIndex ;
var edge = prevIndex === nextIndex ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var itemShown ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
[ this . index , this . prevIndex ] . filter ( function ( i ) { return ! includes ( [ nextIndex , prevIndex ] , i ) ; } ) . forEach ( function ( i ) {
trigger ( slides [ i ] , 'itemhidden' , [ this $1 ] ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( edge ) {
itemShown = true ;
this $1 . prevIndex = prevIndex ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( this . index === prevIndex && this . prevIndex !== prevIndex || itemShown ) {
trigger ( slides [ this . index ] , 'itemshown' , [ this ] ) ;
}
if ( changed ) {
this . prevIndex = prevIndex ;
this . index = nextIndex ;
! edge && trigger ( prev , 'beforeitemhide' , [ this ] ) ;
trigger ( next , 'beforeitemshow' , [ this ] ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
this . _transitioner = this . _translate ( Math . abs ( this . percent ) , prev , ! edge && next ) ;
if ( changed ) {
! edge && trigger ( prev , 'itemhide' , [ this ] ) ;
trigger ( next , 'itemshow' , [ this ] ) ;
2017-11-11 04:33:51 +00:00
}
} ,
2018-09-20 12:35:14 +00:00
end : function ( ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
off ( window , 'scroll' , this . unbindMove ) ;
this . unbindMove && this . unbindMove ( ) ;
off ( document , pointerUp , this . end , true ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( this . dragging ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . dragging = null ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( this . index === this . prevIndex ) {
this . percent = 1 - this . percent ;
this . dir *= - 1 ;
this . _show ( false , this . index , true ) ;
this . _transitioner = null ;
} else {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var dirChange = ( isRtl ? this . dir * ( isRtl ? 1 : - 1 ) : this . dir ) < 0 === this . prevPos > this . pos ;
this . index = dirChange ? this . index : this . prevIndex ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( dirChange ) {
this . percent = 1 - this . percent ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . show ( this . dir > 0 && ! dirChange || this . dir < 0 && dirChange ? 'next' : 'previous' , true ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
css ( this . list , { userSelect : '' , pointerEvents : '' } ) ;
2018-09-20 12:35:14 +00:00
this . drag
= this . percent
= null ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function hasTextNodesOnly ( el ) {
return ! el . children . length && el . childNodes . length ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var SliderNav = {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
data : {
selNav : false
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
computed : {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
nav : function ( ref , $el ) {
var selNav = ref . selNav ;
return $ ( selNav , $el ) ;
2017-11-11 04:33:51 +00:00
} ,
2019-04-22 13:31:39 +00:00
selNavItem : function ( ref ) {
2018-09-20 12:35:14 +00:00
var attrItem = ref . attrItem ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return ( "[" + attrItem + "],[data-" + attrItem + "]" ) ;
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
navItems : function ( _ , $el ) {
2019-04-22 13:31:39 +00:00
return $$ ( this . selNavItem , $el ) ;
2017-11-11 04:33:51 +00:00
}
} ,
2019-04-22 13:31:39 +00:00
update : {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
write : function ( ) {
var this $1 = this ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( this . nav && this . length !== this . nav . children . length ) {
html ( this . nav , this . slides . map ( function ( _ , i ) { return ( "<li " + ( this $1 . attrItem ) + "=\"" + i + "\"><a href=\"#\"></a></li>" ) ; } ) . join ( '' ) ) ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
toggleClass ( $$ ( this . selNavItem , this . $el ) . concat ( this . nav ) , 'uk-hidden' , ! this . maxIndex ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
this . updateNav ( ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
} ,
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
events : [ 'resize' ]
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
events : [
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
{
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
name : 'click' ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
delegate : function ( ) {
2019-04-22 13:31:39 +00:00
return this . selNavItem ;
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
handler : function ( e ) {
e . preventDefault ( ) ;
this . show ( data ( e . current , this . attrItem ) ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
{
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
name : 'itemshow' ,
handler : 'updateNav'
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
] ,
2017-11-11 04:33:51 +00:00
methods : {
2018-09-20 12:35:14 +00:00
updateNav : function ( ) {
2017-11-11 04:33:51 +00:00
var this $1 = this ;
2018-09-20 12:35:14 +00:00
var i = this . getValidIndex ( ) ;
this . navItems . forEach ( function ( el ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var cmd = data ( el , this $1 . attrItem ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
toggleClass ( el , this $1 . clsActive , toNumber ( cmd ) === i ) ;
toggleClass ( el , 'uk-invisible' , this $1 . finite && ( cmd === 'previous' && i === 0 || cmd === 'next' && i >= this $1 . maxIndex ) ) ;
} ) ;
2017-11-11 04:33:51 +00:00
}
}
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var Slider = {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
mixins : [ SliderAutoplay , SliderDrag , SliderNav ] ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
props : {
clsActivated : Boolean ,
easing : String ,
index : Number ,
finite : Boolean ,
velocity : Number
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
data : function ( ) { return ( {
easing : 'ease' ,
finite : false ,
velocity : 1 ,
index : 0 ,
stack : [ ] ,
percent : 0 ,
clsActive : 'uk-active' ,
clsActivated : false ,
Transitioner : false ,
transitionOptions : { }
} ) ; } ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
computed : {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
duration : function ( ref , $el ) {
var velocity = ref . velocity ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return speedUp ( $el . offsetWidth / velocity ) ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
length : function ( ) {
return this . slides . length ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
list : function ( ref , $el ) {
var selList = ref . selList ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return $ ( selList , $el ) ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
maxIndex : function ( ) {
return this . length - 1 ;
} ,
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
selSlides : function ( ref ) {
2018-09-20 12:35:14 +00:00
var selList = ref . selList ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return ( selList + " > *" ) ;
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
slides : function ( ) {
return toNodes ( this . list . children ) ;
2017-11-11 04:33:51 +00:00
}
} ,
2018-09-20 12:35:14 +00:00
events : {
itemshown : function ( ) {
this . $update ( this . list ) ;
}
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
methods : {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
show : function ( index , force ) {
2018-09-20 12:35:14 +00:00
var this $1 = this ;
if ( force === void 0 ) force = false ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( this . dragging || ! this . length ) {
return ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var ref = this ;
var stack = ref . stack ;
var queueIndex = force ? 0 : stack . length ;
var reset = function ( ) {
stack . splice ( queueIndex , 1 ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( stack . length ) {
this $1 . show ( stack . shift ( ) , true ) ;
}
} ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
stack [ force ? 'unshift' : 'push' ] ( index ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! force && stack . length > 1 ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( stack . length === 2 ) {
this . _transitioner . forward ( Math . min ( this . duration , 200 ) ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var prevIndex = this . index ;
var prev = hasClass ( this . slides , this . clsActive ) && this . slides [ prevIndex ] ;
2019-04-22 13:31:39 +00:00
var nextIndex = this . getIndex ( index , this . index ) ;
2018-09-20 12:35:14 +00:00
var next = this . slides [ nextIndex ] ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( prev === next ) {
reset ( ) ;
return ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
this . dir = getDirection ( index , prevIndex ) ;
2018-09-20 12:35:14 +00:00
this . prevIndex = prevIndex ;
this . index = nextIndex ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
prev && trigger ( prev , 'beforeitemhide' , [ this ] ) ;
if ( ! trigger ( next , 'beforeitemshow' , [ this , prev ] ) ) {
this . index = this . prevIndex ;
reset ( ) ;
return ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var promise = this . _show ( prev , next , force ) . then ( function ( ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
prev && trigger ( prev , 'itemhidden' , [ this $1 ] ) ;
trigger ( next , 'itemshown' , [ this $1 ] ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return new Promise ( function ( resolve ) {
fastdom . write ( function ( ) {
stack . shift ( ) ;
if ( stack . length ) {
this $1 . show ( stack . shift ( ) , true ) ;
} else {
this $1 . _transitioner = null ;
}
resolve ( ) ;
} ) ;
} ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
prev && trigger ( prev , 'itemhide' , [ this ] ) ;
trigger ( next , 'itemshow' , [ this ] ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return promise ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
getIndex : function ( index , prev ) {
if ( index === void 0 ) index = this . index ;
2018-09-20 12:35:14 +00:00
if ( prev === void 0 ) prev = this . index ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return clamp ( getIndex ( index , this . slides , prev , this . finite ) , 0 , this . maxIndex ) ;
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
getValidIndex : function ( index , prevIndex ) {
if ( index === void 0 ) index = this . index ;
2018-09-20 12:35:14 +00:00
if ( prevIndex === void 0 ) prevIndex = this . prevIndex ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return this . getIndex ( index , prevIndex ) ;
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
_show : function ( prev , next , force ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . _transitioner = this . _getTransitioner (
prev ,
next ,
this . dir ,
assign ( {
easing : force
? next . offsetWidth < 600
? 'cubic-bezier(0.25, 0.46, 0.45, 0.94)' /* easeOutQuad */
: 'cubic-bezier(0.165, 0.84, 0.44, 1)' /* easeOutQuart */
: this . easing
} , this . transitionOptions )
) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! force && ! prev ) {
this . _transitioner . translate ( 1 ) ;
return Promise . resolve ( ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var ref = this . stack ;
var length = ref . length ;
return this . _transitioner [ length > 1 ? 'forward' : 'show' ] ( length > 1 ? Math . min ( this . duration , 75 + 75 / ( length - 1 ) ) : this . duration , this . percent ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
_getDistance : function ( prev , next ) {
return new this . _getTransitioner ( prev , prev !== next && next ) . getDistance ( ) ;
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
_translate : function ( percent , prev , next ) {
if ( prev === void 0 ) prev = this . prevIndex ;
if ( next === void 0 ) next = this . index ;
var transitioner = this . _getTransitioner ( prev !== next ? prev : false , next ) ;
transitioner . translate ( percent ) ;
return transitioner ;
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
_getTransitioner : function ( prev , next , dir , options ) {
if ( prev === void 0 ) prev = this . prevIndex ;
if ( next === void 0 ) next = this . index ;
if ( dir === void 0 ) dir = this . dir || 1 ;
if ( options === void 0 ) options = this . transitionOptions ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return new this . Transitioner (
isNumber ( prev ) ? this . slides [ prev ] : prev ,
isNumber ( next ) ? this . slides [ next ] : next ,
dir * ( isRtl ? - 1 : 1 ) ,
options
) ;
}
2017-11-11 04:33:51 +00:00
}
} ;
2019-04-22 13:31:39 +00:00
function getDirection ( index , prevIndex ) {
return index === 'next'
2018-09-20 12:35:14 +00:00
? 1
2019-04-22 13:31:39 +00:00
: index === 'previous'
2018-09-20 12:35:14 +00:00
? - 1
2019-04-22 13:31:39 +00:00
: index < prevIndex
2018-09-20 12:35:14 +00:00
? - 1
: 1 ;
}
function speedUp ( x ) {
return . 5 * x + 300 ; // parabola through (400,500; 600,600; 1800,1200)
}
var Slideshow = {
mixins : [ Slider ] ,
2017-11-11 04:33:51 +00:00
props : {
2018-09-20 12:35:14 +00:00
animation : String
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
data : {
2017-11-11 04:33:51 +00:00
animation : 'slide' ,
clsActivated : 'uk-transition-active' ,
2018-09-20 12:35:14 +00:00
Animations : Animations ,
Transitioner : Transitioner
2017-11-11 04:33:51 +00:00
} ,
computed : {
2018-09-20 12:35:14 +00:00
animation : function ( ref ) {
var animation = ref . animation ;
2019-04-22 13:31:39 +00:00
var Animations = ref . Animations ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return assign ( animation in Animations ? Animations [ animation ] : Animations . slide , { name : animation } ) ;
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
transitionOptions : function ( ) {
return { animation : this . animation } ;
}
} ,
events : {
'itemshow itemhide itemshown itemhidden' : function ( ref ) {
var target = ref . target ;
this . $update ( target ) ;
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
itemshow : function ( ) {
isNumber ( this . prevIndex ) && fastdom . flush ( ) ; // iOS 10+ will honor the video.play only if called from a gesture handler
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
beforeitemshow : function ( ref ) {
var target = ref . target ;
addClass ( target , this . clsActive ) ;
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
itemshown : function ( ref ) {
var target = ref . target ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
addClass ( target , this . clsActivated ) ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
itemhidden : function ( ref ) {
var target = ref . target ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
removeClass ( target , this . clsActive , this . clsActivated ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var lightboxPanel = {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
mixins : [ Container , Modal , Togglable , Slideshow ] ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
functional : true ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
props : {
delayControls : Number ,
preload : Number ,
videoAutoplay : Boolean ,
template : String
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
data : function ( ) { return ( {
preload : 1 ,
videoAutoplay : false ,
delayControls : 3000 ,
items : [ ] ,
cls : 'uk-open' ,
clsPage : 'uk-lightbox-page' ,
selList : '.uk-lightbox-items' ,
attrItem : 'uk-lightbox-item' ,
selClose : '.uk-close-large' ,
pauseOnHover : false ,
velocity : 2 ,
Animations : Animations$1 ,
template : "<div class=\"uk-lightbox uk-overflow-hidden\"> <ul class=\"uk-lightbox-items\"></ul> <div class=\"uk-lightbox-toolbar uk-position-top uk-text-right uk-transition-slide-top uk-transition-opaque\"> <button class=\"uk-lightbox-toolbar-icon uk-close-large\" type=\"button\" uk-close></button> </div> <a class=\"uk-lightbox-button uk-position-center-left uk-position-medium uk-transition-fade\" href=\"#\" uk-slidenav-previous uk-lightbox-item=\"previous\"></a> <a class=\"uk-lightbox-button uk-position-center-right uk-position-medium uk-transition-fade\" href=\"#\" uk-slidenav-next uk-lightbox-item=\"next\"></a> <div class=\"uk-lightbox-toolbar uk-lightbox-caption uk-position-bottom uk-text-center uk-transition-slide-bottom uk-transition-opaque\"></div> </div>"
} ) ; } ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
created : function ( ) {
var this $1 = this ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . $mount ( append ( this . container , this . template ) ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . caption = $ ( '.uk-lightbox-caption' , this . $el ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . items . forEach ( function ( ) { return append ( this $1 . list , '<li></li>' ) ; } ) ;
} ,
2017-11-11 04:33:51 +00:00
events : [
{
2018-09-20 12:35:14 +00:00
name : ( pointerMove + " " + pointerDown + " keydown" ) ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
handler : 'showControls'
2017-11-11 04:33:51 +00:00
} ,
{
2019-04-22 13:31:39 +00:00
name : pointerUp ,
2018-09-20 12:35:14 +00:00
self : true ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
delegate : function ( ) {
2019-04-22 13:31:39 +00:00
return this . selSlides ;
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
handler : function ( e ) {
2019-04-22 13:31:39 +00:00
if ( e . defaultPrevented ) {
return ;
}
2018-09-20 12:35:14 +00:00
e . preventDefault ( ) ;
this . hide ( ) ;
2017-11-11 04:33:51 +00:00
}
} ,
{
2018-09-20 12:35:14 +00:00
name : 'shown' ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
self : true ,
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
handler : function ( ) {
this . showControls ( ) ;
}
2017-11-11 04:33:51 +00:00
} ,
{
2018-09-20 12:35:14 +00:00
name : 'hide' ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
self : true ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
handler : function ( ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . hideControls ( ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
removeClass ( this . slides , this . clsActive ) ;
Transition . stop ( this . slides ) ;
2017-11-11 04:33:51 +00:00
}
} ,
2019-04-22 13:31:39 +00:00
{
name : 'hidden' ,
self : true ,
handler : function ( ) {
this . $destroy ( true ) ;
}
} ,
2017-11-11 04:33:51 +00:00
{
2018-09-20 12:35:14 +00:00
name : 'keyup' ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
el : document ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
handler : function ( e ) {
if ( ! this . isToggled ( this . $el ) ) {
return ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
switch ( e . keyCode ) {
case 37 :
this . show ( 'previous' ) ;
break ;
case 39 :
this . show ( 'next' ) ;
break ;
}
}
2017-11-11 04:33:51 +00:00
} ,
{
name : 'beforeitemshow' ,
2018-09-20 12:35:14 +00:00
handler : function ( e ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( this . isToggled ( ) ) {
return ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
this . draggable = false ;
2018-09-20 12:35:14 +00:00
e . preventDefault ( ) ;
this . toggleNow ( this . $el , true ) ;
this . animation = Animations$1 [ 'scale' ] ;
removeClass ( e . target , this . clsActive ) ;
this . stack . splice ( 1 , 0 , this . index ) ;
2017-11-11 04:33:51 +00:00
}
} ,
{
2018-09-20 12:35:14 +00:00
name : 'itemshow' ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
handler : function ( ref ) {
var target = ref . target ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var i = index ( target ) ;
var ref$1 = this . getItem ( i ) ;
var caption = ref$1 . caption ;
css ( this . caption , 'display' , caption ? '' : 'none' ) ;
html ( this . caption , caption ) ;
for ( var j = 0 ; j <= this . preload ; j ++ ) {
2019-04-22 13:31:39 +00:00
this . loadItem ( this . getIndex ( i + j ) ) ;
this . loadItem ( this . getIndex ( i - j ) ) ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
}
} ,
{
2018-09-20 12:35:14 +00:00
name : 'itemshown' ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
handler : function ( ) {
2019-04-22 13:31:39 +00:00
this . draggable = this . $props . draggable ;
2017-11-11 04:33:51 +00:00
}
} ,
{
2018-09-20 12:35:14 +00:00
name : 'itemload' ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
handler : function ( _ , item ) {
var this $1 = this ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var source = item . source ;
var type = item . type ;
var alt = item . alt ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . setItem ( item , '<span uk-spinner></span>' ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! source ) {
return ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var matches ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
// Image
2019-04-22 13:31:39 +00:00
if ( type === 'image' || source . match ( /\.(jp(e)?g|png|gif|svg|webp)($|\?)/i ) ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
getImage ( source ) . then (
function ( img ) { return this $1 . setItem ( item , ( "<img width=\"" + ( img . width ) + "\" height=\"" + ( img . height ) + "\" src=\"" + source + "\" alt=\"" + ( alt ? alt : '' ) + "\">" ) ) ; } ,
function ( ) { return this $1 . setError ( item ) ; }
) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
// Video
} else if ( type === 'video' || source . match ( /\.(mp4|webm|ogv)($|\?)/i ) ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var video = $ ( ( "<video controls playsinline" + ( item . poster ? ( " poster=\"" + ( item . poster ) + "\"" ) : '' ) + " uk-video=\"" + ( this . videoAutoplay ) + "\"></video>" ) ) ;
attr ( video , 'src' , source ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
once ( video , 'error loadedmetadata' , function ( type ) {
if ( type === 'error' ) {
this $1 . setError ( item ) ;
} else {
attr ( video , { width : video . videoWidth , height : video . videoHeight } ) ;
this $1 . setItem ( item , video ) ;
}
2018-09-20 12:35:14 +00:00
} ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
// Iframe
} else if ( type === 'iframe' || source . match ( /\.(html|php)($|\?)/i ) ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . setItem ( item , ( "<iframe class=\"uk-lightbox-iframe\" src=\"" + source + "\" frameborder=\"0\" allowfullscreen></iframe>" ) ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
// YouTube
2019-04-22 13:31:39 +00:00
} else if ( ( matches = source . match ( /\/\/.*?youtube(-nocookie)?\.[a-z]+\/watch\?v=([^&\s]+)/ ) || source . match ( /()youtu\.be\/(.*)/ ) ) ) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var id = matches [ 2 ] ;
var setIframe = function ( width , height ) {
if ( width === void 0 ) width = 640 ;
if ( height === void 0 ) height = 450 ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return this $1 . setItem ( item , getIframe ( ( "https://www.youtube" + ( matches [ 1 ] || '' ) + ".com/embed/" + id ) , width , height , this $1 . videoAutoplay ) ) ;
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
getImage ( ( "https://img.youtube.com/vi/" + id + "/maxresdefault.jpg" ) ) . then (
function ( ref ) {
2019-04-22 13:31:39 +00:00
var width = ref . width ;
var height = ref . height ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
// YouTube default 404 thumb, fall back to low resolution
2019-04-22 13:31:39 +00:00
if ( width === 120 && height === 90 ) {
2018-09-20 12:35:14 +00:00
getImage ( ( "https://img.youtube.com/vi/" + id + "/0.jpg" ) ) . then (
function ( ref ) {
2019-04-22 13:31:39 +00:00
var width = ref . width ;
var height = ref . height ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return setIframe ( width , height ) ;
2018-09-20 12:35:14 +00:00
} ,
setIframe
) ;
} else {
2019-04-22 13:31:39 +00:00
setIframe ( width , height ) ;
2018-09-20 12:35:14 +00:00
}
} ,
setIframe
) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
// Vimeo
2019-04-22 13:31:39 +00:00
} else if ( ( matches = source . match ( /(\/\/.*?)vimeo\.[a-z]+\/([0-9]+).*?/ ) ) ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
ajax ( ( "https://vimeo.com/api/oembed.json?maxwidth=1920&url=" + ( encodeURI ( source ) ) ) , { responseType : 'json' , withCredentials : false } )
. then (
function ( ref ) {
var ref _response = ref . response ;
2019-04-22 13:31:39 +00:00
var height = ref _response . height ;
var width = ref _response . width ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return this $1 . setItem ( item , getIframe ( ( "https://player.vimeo.com/video/" + ( matches [ 2 ] ) ) , width , height , this $1 . videoAutoplay ) ) ;
2018-09-20 12:35:14 +00:00
} ,
function ( ) { return this $1 . setError ( item ) ; }
) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
] ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
methods : {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
loadItem : function ( index ) {
if ( index === void 0 ) index = this . index ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var item = this . getItem ( index ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( item . content ) {
2017-11-11 04:33:51 +00:00
return ;
}
2018-09-20 12:35:14 +00:00
trigger ( this . $el , 'itemload' , [ item ] ) ;
} ,
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
getItem : function ( index ) {
if ( index === void 0 ) index = this . index ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return this . items [ index ] || { } ;
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
setItem : function ( item , content ) {
assign ( item , { content : content } ) ;
var el = html ( this . slides [ this . items . indexOf ( item ) ] , content ) ;
trigger ( this . $el , 'itemloaded' , [ this , el ] ) ;
this . $update ( el ) ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
setError : function ( item ) {
this . setItem ( item , '<span uk-icon="icon: bolt; ratio: 2"></span>' ) ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
showControls : function ( ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
clearTimeout ( this . controlsTimer ) ;
this . controlsTimer = setTimeout ( this . hideControls , this . delayControls ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
addClass ( this . $el , 'uk-active' , 'uk-transition-active' ) ;
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
hideControls : function ( ) {
removeClass ( this . $el , 'uk-active' , 'uk-transition-active' ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function getIframe ( src , width , height , autoplay ) {
return ( "<iframe src=\"" + src + "\" width=\"" + width + "\" height=\"" + height + "\" style=\"max-width: 100%; box-sizing: border-box;\" frameborder=\"0\" allowfullscreen uk-video=\"autoplay: " + autoplay + "\" uk-responsive></iframe>" ) ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var Lightbox = {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
install : install$2 ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
props : { toggle : String } ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
data : { toggle : 'a' } ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
computed : {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
toggles : {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
get : function ( ref , $el ) {
var toggle = ref . toggle ;
return $$ ( toggle , $el ) ;
} ,
watch : function ( ) {
this . hide ( ) ;
}
} ,
items : function ( ) {
return uniqueBy ( this . toggles . map ( toItem ) , 'source' ) ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
disconnected : function ( ) {
2019-04-22 13:31:39 +00:00
this . hide ( ) ;
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
events : [
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
{
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
name : 'click' ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
delegate : function ( ) {
return ( ( this . toggle ) + ":not(.uk-disabled)" ) ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
handler : function ( e ) {
e . preventDefault ( ) ;
2019-04-22 13:31:39 +00:00
var src = data ( e . current , 'href' ) ;
this . show ( findIndex ( this . items , function ( ref ) {
var source = ref . source ;
return source === src ;
} ) ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
] ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
methods : {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
show : function ( index ) {
var this $1 = this ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
this . panel = this . panel || this . $create ( 'lightboxPanel' , assign ( { } , this . $props , { items : this . items } ) ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
on ( this . panel . $el , 'hidden' , function ( ) { return this $1 . panel = false ; } ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return this . panel . show ( index ) ;
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
hide : function ( ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return this . panel && this . panel . hide ( ) ;
2017-11-11 04:33:51 +00:00
}
}
} ;
2018-09-20 12:35:14 +00:00
function install$2 ( UIkit , Lightbox ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! UIkit . lightboxPanel ) {
2019-04-22 13:31:39 +00:00
UIkit . component ( 'lightboxPanel' , lightboxPanel ) ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
assign (
Lightbox . props ,
UIkit . component ( 'lightboxPanel' ) . options . props
) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function toItem ( el ) {
return [ 'href' , 'caption' , 'type' , 'poster' , 'alt' ] . reduce ( function ( obj , attr ) {
obj [ attr === 'href' ? 'source' : attr ] = data ( el , attr ) ;
return obj ;
} , { } ) ;
}
2018-09-20 12:35:14 +00:00
var obj ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var containers = { } ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var Notification = {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
functional : true ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
args : [ 'message' , 'status' ] ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
data : {
message : '' ,
status : '' ,
timeout : 5000 ,
group : null ,
pos : 'top-center' ,
clsClose : 'uk-notification-close' ,
clsMsg : 'uk-notification-message'
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
install : install$3 ,
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
computed : {
marginProp : function ( ref ) {
var pos = ref . pos ;
return ( "margin" + ( startsWith ( pos , 'top' ) ? 'Top' : 'Bottom' ) ) ;
} ,
startProps : function ( ) {
var obj ;
return ( obj = { opacity : 0 } , obj [ this . marginProp ] = - this . $el . offsetHeight , obj ) ;
}
} ,
2018-09-20 12:35:14 +00:00
created : function ( ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! containers [ this . pos ] ) {
containers [ this . pos ] = append ( this . $container , ( "<div class=\"uk-notification uk-notification-" + ( this . pos ) + "\"></div>" ) ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
var container = css ( containers [ this . pos ] , 'display' , 'block' ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . $mount ( append ( container ,
( "<div class=\"" + ( this . clsMsg ) + ( this . status ? ( " " + ( this . clsMsg ) + "-" + ( this . status ) ) : '' ) + "\"> <a href=\"#\" class=\"" + ( this . clsClose ) + "\" data-uk-close></a> <div>" + ( this . message ) + "</div> </div>" )
) ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
connected : function ( ) {
2018-09-20 12:35:14 +00:00
var this $1 = this ;
2019-04-22 13:31:39 +00:00
var obj ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var margin = toFloat ( css ( this . $el , this . marginProp ) ) ;
2018-09-20 12:35:14 +00:00
Transition . start (
2019-04-22 13:31:39 +00:00
css ( this . $el , this . startProps ) ,
( obj = { opacity : 1 } , obj [ this . marginProp ] = margin , obj )
2018-09-20 12:35:14 +00:00
) . then ( function ( ) {
if ( this $1 . timeout ) {
this $1 . timer = setTimeout ( this $1 . close , this $1 . timeout ) ;
}
} ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
events : ( obj = {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
click : function ( e ) {
2019-04-22 13:31:39 +00:00
if ( closest ( e . target , 'a[href="#"],a[href=""]' ) ) {
2018-09-20 12:35:14 +00:00
e . preventDefault ( ) ;
}
this . close ( ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} , obj [ pointerEnter ] = function ( ) {
if ( this . timer ) {
clearTimeout ( this . timer ) ;
}
} , obj [ pointerLeave ] = function ( ) {
if ( this . timeout ) {
this . timer = setTimeout ( this . close , this . timeout ) ;
}
} , obj ) ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
methods : {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
close : function ( immediate ) {
var this $1 = this ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var removeFn = function ( ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
trigger ( this $1 . $el , 'close' , [ this $1 ] ) ;
remove ( this $1 . $el ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! containers [ this $1 . pos ] . children . length ) {
css ( containers [ this $1 . pos ] , 'display' , 'none' ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( this . timer ) {
clearTimeout ( this . timer ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( immediate ) {
removeFn ( ) ;
} else {
2019-04-22 13:31:39 +00:00
Transition . start ( this . $el , this . startProps ) . then ( removeFn ) ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
}
}
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function install$3 ( UIkit ) {
UIkit . notification . closeAll = function ( group , immediate ) {
apply ( document . body , function ( el ) {
var notification = UIkit . getComponent ( el , 'notification' ) ;
if ( notification && ( ! group || group === notification . group ) ) {
notification . close ( immediate ) ;
}
} ) ;
} ;
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
var props = [ 'x' , 'y' , 'bgx' , 'bgy' , 'rotate' , 'scale' , 'color' , 'backgroundColor' , 'borderColor' , 'opacity' , 'blur' , 'hue' , 'grayscale' , 'invert' , 'saturate' , 'sepia' , 'fopacity' , 'stroke' ] ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var Parallax = {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
mixins : [ Media ] ,
2018-09-20 12:35:14 +00:00
props : props . reduce ( function ( props , prop ) {
props [ prop ] = 'list' ;
return props ;
2019-04-22 13:31:39 +00:00
} , { } ) ,
data : props . reduce ( function ( data , prop ) {
data [ prop ] = undefined ;
return data ;
} , { } ) ,
2017-11-11 04:33:51 +00:00
computed : {
2018-09-20 12:35:14 +00:00
props : function ( properties , $el ) {
2017-11-11 04:33:51 +00:00
var this $1 = this ;
2018-09-20 12:35:14 +00:00
return props . reduce ( function ( props , prop ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( isUndefined ( properties [ prop ] ) ) {
return props ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var isColor = prop . match ( /color/i ) ;
var isCssProp = isColor || prop === 'opacity' ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var pos , bgPos , diff ;
var steps = properties [ prop ] . slice ( 0 ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( isCssProp ) {
css ( $el , prop , '' ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( steps . length < 2 ) {
steps . unshift ( ( prop === 'scale'
? 1
: isCssProp
? css ( $el , prop )
: 0 ) || 0 ) ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var unit = getUnit ( steps , prop ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( isColor ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var ref = $el . style ;
var color = ref . color ;
steps = steps . map ( function ( step ) { return parseColor ( $el , step ) ; } ) ;
$el . style . color = color ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
} else if ( startsWith ( prop , 'bg' ) ) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var attr = prop === 'bgy' ? 'height' : 'width' ;
steps = steps . map ( function ( step ) { return toPx ( step , attr , this $1 . $el ) ; } ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
css ( $el , ( "background-position-" + ( prop [ 2 ] ) ) , '' ) ;
bgPos = css ( $el , 'backgroundPosition' ) . split ( ' ' ) [ prop [ 2 ] === 'x' ? 0 : 1 ] ; // IE 11 can't read background-position-[x|y]
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( this $1 . covers ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var min = Math . min . apply ( Math , steps ) ;
var max = Math . max . apply ( Math , steps ) ;
var down = steps . indexOf ( min ) < steps . indexOf ( max ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
diff = max - min ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
steps = steps . map ( function ( step ) { return step - ( down ? min : max ) ; } ) ;
pos = ( down ? - diff : 0 ) + "px" ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} else {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
pos = bgPos ;
}
2019-04-22 13:31:39 +00:00
} else {
steps = steps . map ( toFloat ) ;
}
if ( prop === 'stroke' ) {
if ( ! steps . some ( function ( step ) { return step ; } ) ) {
return props ;
}
var length = getMaxPathLength ( this $1 . $el ) ;
css ( $el , 'strokeDasharray' , length ) ;
if ( unit === '%' ) {
steps = steps . map ( function ( step ) { return step * length / 100 ; } ) ;
}
steps = steps . reverse ( ) ;
prop = 'strokeDashoffset' ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
props [ prop ] = { steps : steps , unit : unit , pos : pos , bgPos : bgPos , diff : diff } ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return props ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} , { } ) ;
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
bgProps : function ( ) {
var this $1 = this ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return [ 'bgx' , 'bgy' ] . filter ( function ( bg ) { return bg in this $1 . props ; } ) ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
covers : function ( _ , $el ) {
return covers ( $el ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
disconnected : function ( ) {
delete this . _image ;
} ,
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
update : {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
read : function ( data ) {
var this $1 = this ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
data . active = this . matchMedia ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( ! data . active ) {
return ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( ! data . image && this . covers && this . bgProps . length ) {
2018-09-20 12:35:14 +00:00
var src = css ( this . $el , 'backgroundImage' ) . replace ( /^none|url\(["']?(.+?)["']?\)$/ , '$1' ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( src ) {
var img = new Image ( ) ;
img . src = src ;
data . image = img ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( ! img . naturalWidth ) {
img . onload = function ( ) { return this $1 . $emit ( ) ; } ;
}
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var image = data . image ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( ! image || ! image . naturalWidth ) {
return ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var dimEl = {
width : this . $el . offsetWidth ,
height : this . $el . offsetHeight
} ;
var dimImage = {
width : image . naturalWidth ,
height : image . naturalHeight
} ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var dim = Dimensions . cover ( dimImage , dimEl ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
this . bgProps . forEach ( function ( prop ) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var ref = this $1 . props [ prop ] ;
var diff = ref . diff ;
var bgPos = ref . bgPos ;
var steps = ref . steps ;
var attr = prop === 'bgy' ? 'height' : 'width' ;
var span = dim [ attr ] - dimEl [ attr ] ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( span < diff ) {
dimEl [ attr ] = dim [ attr ] + diff - span ;
} else if ( span > diff ) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var posPercentage = dimEl [ attr ] / toPx ( bgPos , attr , this $1 . $el ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( posPercentage ) {
this $1 . props [ prop ] . steps = steps . map ( function ( step ) { return step - ( span - diff ) / posPercentage ; } ) ;
2018-09-20 12:35:14 +00:00
}
2019-04-22 13:31:39 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
dim = Dimensions . cover ( dimImage , dimEl ) ;
} ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
data . dim = dim ;
} ,
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
write : function ( ref ) {
var dim = ref . dim ;
var active = ref . active ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( ! active ) {
css ( this . $el , { backgroundSize : '' , backgroundRepeat : '' } ) ;
return ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
dim && css ( this . $el , {
backgroundSize : ( ( dim . width ) + "px " + ( dim . height ) + "px" ) ,
backgroundRepeat : 'no-repeat'
} ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
} ,
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
events : [ 'resize' ]
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
methods : {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
reset : function ( ) {
var this $1 = this ;
each ( this . getCss ( 0 ) , function ( _ , prop ) { return css ( this $1 . $el , prop , '' ) ; } ) ;
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
getCss : function ( percent ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var ref = this ;
var props = ref . props ;
2019-04-22 13:31:39 +00:00
return Object . keys ( props ) . reduce ( function ( css , prop ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var ref = props [ prop ] ;
var steps = ref . steps ;
var unit = ref . unit ;
var pos = ref . pos ;
var value = getValue ( steps , percent ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
switch ( prop ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
// transforms
case 'x' :
2019-04-22 13:31:39 +00:00
case 'y' : {
unit = unit || 'px' ;
css . transform += " translate" + ( ucfirst ( prop ) ) + "(" + ( toFloat ( value ) . toFixed ( unit === 'px' ? 0 : 2 ) ) + unit + ")" ;
2018-09-20 12:35:14 +00:00
break ;
2019-04-22 13:31:39 +00:00
}
2018-09-20 12:35:14 +00:00
case 'rotate' :
2019-04-22 13:31:39 +00:00
unit = unit || 'deg' ;
css . transform += " rotate(" + ( value + unit ) + ")" ;
2018-09-20 12:35:14 +00:00
break ;
case 'scale' :
2019-04-22 13:31:39 +00:00
css . transform += " scale(" + value + ")" ;
2018-09-20 12:35:14 +00:00
break ;
// bg image
case 'bgy' :
case 'bgx' :
2019-04-22 13:31:39 +00:00
css [ ( "background-position-" + ( prop [ 2 ] ) ) ] = "calc(" + pos + " + " + value + "px)" ;
2018-09-20 12:35:14 +00:00
break ;
// color
case 'color' :
case 'backgroundColor' :
2019-04-22 13:31:39 +00:00
case 'borderColor' : {
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
var ref$1 = getStep ( steps , percent ) ;
var start = ref$1 [ 0 ] ;
var end = ref$1 [ 1 ] ;
var p = ref$1 [ 2 ] ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
css [ prop ] = "rgba(" + ( start . map ( function ( value , i ) {
2018-09-20 12:35:14 +00:00
value = value + p * ( end [ i ] - value ) ;
return i === 3 ? toFloat ( value ) : parseInt ( value , 10 ) ;
} ) . join ( ',' ) ) + ")" ;
2017-11-11 04:33:51 +00:00
break ;
2019-04-22 13:31:39 +00:00
}
2018-09-20 12:35:14 +00:00
// CSS Filter
case 'blur' :
2019-04-22 13:31:39 +00:00
unit = unit || 'px' ;
css . filter += " blur(" + ( value + unit ) + ")" ;
2017-11-11 04:33:51 +00:00
break ;
2018-09-20 12:35:14 +00:00
case 'hue' :
2019-04-22 13:31:39 +00:00
unit = unit || 'deg' ;
css . filter += " hue-rotate(" + ( value + unit ) + ")" ;
2018-09-20 12:35:14 +00:00
break ;
case 'fopacity' :
2019-04-22 13:31:39 +00:00
unit = unit || '%' ;
css . filter += " opacity(" + ( value + unit ) + ")" ;
2018-09-20 12:35:14 +00:00
break ;
case 'grayscale' :
case 'invert' :
case 'saturate' :
case 'sepia' :
2019-04-22 13:31:39 +00:00
unit = unit || '%' ;
css . filter += " " + prop + "(" + ( value + unit ) + ")" ;
2017-11-11 04:33:51 +00:00
break ;
2018-09-20 12:35:14 +00:00
default :
2019-04-22 13:31:39 +00:00
css [ prop ] = value ;
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
return css ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} , { transform : '' , filter : '' } ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function parseColor ( el , color ) {
2019-04-22 13:31:39 +00:00
return css ( css ( el , 'color' , color ) , 'color' )
. split ( /[(),]/g )
. slice ( 1 , - 1 )
. concat ( 1 )
. slice ( 0 , 4 )
. map ( toFloat ) ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function getStep ( steps , percent ) {
var count = steps . length - 1 ;
2019-04-22 13:31:39 +00:00
var index = Math . min ( Math . floor ( count * percent ) , count - 1 ) ;
var step = steps . slice ( index , index + 2 ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
step . push ( percent === 1 ? 1 : percent % ( 1 / count ) * count ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return step ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function getValue ( steps , percent , digits ) {
if ( digits === void 0 ) digits = 2 ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var ref = getStep ( steps , percent ) ;
var start = ref [ 0 ] ;
var end = ref [ 1 ] ;
var p = ref [ 2 ] ;
return ( isNumber ( start )
2019-04-22 13:31:39 +00:00
? start + Math . abs ( start - end ) * p * ( start < end ? 1 : - 1 )
: + end
2018-09-20 12:35:14 +00:00
) . toFixed ( digits ) ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function getUnit ( steps ) {
return steps . reduce ( function ( unit , step ) { return isString ( step ) && step . replace ( /-|\d/g , '' ) . trim ( ) || unit ; } , '' ) ;
}
2018-09-20 12:35:14 +00:00
function covers ( el ) {
var ref = el . style ;
var backgroundSize = ref . backgroundSize ;
var covers = css ( css ( el , 'backgroundSize' , '' ) , 'backgroundSize' ) === 'cover' ;
el . style . backgroundSize = backgroundSize ;
return covers ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var Parallax$1 = {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
mixins : [ Parallax ] ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
props : {
target : String ,
viewport : Number ,
2019-04-22 13:31:39 +00:00
easing : Number
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
data : {
target : false ,
viewport : 1 ,
2019-04-22 13:31:39 +00:00
easing : 1
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
computed : {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
target : function ( ref , $el ) {
var target = ref . target ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return getOffsetElement ( target && query ( target , $el ) || $el ) ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ,
2019-04-22 13:31:39 +00:00
update : {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
read : function ( ref , type ) {
var percent = ref . percent ;
var active = ref . active ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( type !== 'scroll' ) {
percent = false ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( ! active ) {
return ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var prev = percent ;
percent = ease$1 ( scrolledOver ( this . target ) / ( this . viewport || 1 ) , this . easing ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return {
percent : percent ,
style : prev !== percent ? this . getCss ( percent ) : false
} ;
} ,
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
write : function ( ref ) {
var style = ref . style ;
var active = ref . active ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( ! active ) {
this . reset ( ) ;
return ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
style && css ( this . $el , style ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
} ,
events : [ 'scroll' , 'resize' ]
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function ease$1 ( percent , easing ) {
return clamp ( percent * ( 1 - ( easing - easing * percent ) ) ) ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
// SVG elements do not inherit from HTMLElement
function getOffsetElement ( el ) {
return el
? 'offsetTop' in el
? el
: getOffsetElement ( el . parentNode )
: document . body ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var SliderReactive = {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
update : {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
write : function ( ) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( this . stack . length || this . dragging ) {
return ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var index = this . getValidIndex ( ) ;
delete this . index ;
removeClass ( this . slides , this . clsActive , this . clsActivated ) ;
this . show ( index ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
} ,
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
events : [ 'resize' ]
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function Transitioner$1 ( prev , next , dir , ref ) {
var center = ref . center ;
var easing = ref . easing ;
var list = ref . list ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var deferred = new Deferred ( ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var from = prev
? getLeft ( prev , list , center )
: getLeft ( next , list , center ) + bounds ( next ) . width * dir ;
var to = next
? getLeft ( next , list , center )
: from + bounds ( prev ) . width * dir * ( isRtl ? - 1 : 1 ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
dir : dir ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
show : function ( duration , percent , linear ) {
if ( percent === void 0 ) percent = 0 ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var timing = linear ? 'linear' : easing ;
duration -= Math . round ( duration * clamp ( percent , - 1 , 1 ) ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . translate ( percent ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
prev && this . updateTranslates ( ) ;
percent = prev ? percent : clamp ( percent , 0 , 1 ) ;
triggerUpdate$1 ( this . getItemIn ( ) , 'itemin' , { percent : percent , duration : duration , timing : timing , dir : dir } ) ;
prev && triggerUpdate$1 ( this . getItemIn ( true ) , 'itemout' , { percent : 1 - percent , duration : duration , timing : timing , dir : dir } ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
Transition
. start ( list , { transform : translate ( - to * ( isRtl ? - 1 : 1 ) , 'px' ) } , duration , timing )
. then ( deferred . resolve , noop ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return deferred . promise ;
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
stop : function ( ) {
return Transition . stop ( list ) ;
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
cancel : function ( ) {
Transition . cancel ( list ) ;
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
reset : function ( ) {
css ( list , 'transform' , '' ) ;
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
forward : function ( duration , percent ) {
if ( percent === void 0 ) percent = this . percent ( ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
Transition . cancel ( list ) ;
return this . show ( duration , percent , true ) ;
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
translate : function ( percent ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var distance = this . getDistance ( ) * dir * ( isRtl ? - 1 : 1 ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
css ( list , 'transform' , translate ( clamp (
- to + ( distance - distance * percent ) ,
- getWidth ( list ) ,
bounds ( list ) . width
) * ( isRtl ? - 1 : 1 ) , 'px' ) ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . updateTranslates ( ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( prev ) {
percent = clamp ( percent , - 1 , 1 ) ;
triggerUpdate$1 ( this . getItemIn ( ) , 'itemtranslatein' , { percent : percent , dir : dir } ) ;
triggerUpdate$1 ( this . getItemIn ( true ) , 'itemtranslateout' , { percent : 1 - percent , dir : dir } ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
percent : function ( ) {
return Math . abs ( ( css ( list , 'transform' ) . split ( ',' ) [ 4 ] * ( isRtl ? - 1 : 1 ) + from ) / ( to - from ) ) ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
getDistance : function ( ) {
return Math . abs ( to - from ) ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
getItemIn : function ( out ) {
if ( out === void 0 ) out = false ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var actives = this . getActives ( ) ;
var all = sortBy ( slides ( list ) , 'offsetLeft' ) ;
var i = index ( all , actives [ dir * ( out ? - 1 : 1 ) > 0 ? actives . length - 1 : 0 ] ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return ~ i && all [ i + ( prev && ! out ? dir : 0 ) ] ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
getActives : function ( ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var left = getLeft ( prev || next , list , center ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return sortBy ( slides ( list ) . filter ( function ( slide ) {
var slideLeft = getElLeft ( slide , list ) ;
return slideLeft >= left && slideLeft + bounds ( slide ) . width <= bounds ( list ) . width + left ;
} ) , 'offsetLeft' ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
updateTranslates : function ( ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var actives = this . getActives ( ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
slides ( list ) . forEach ( function ( slide ) {
var isActive = includes ( actives , slide ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
triggerUpdate$1 ( slide , ( "itemtranslate" + ( isActive ? 'in' : 'out' ) ) , {
percent : isActive ? 1 : 0 ,
dir : slide . offsetLeft <= next . offsetLeft ? 1 : - 1
} ) ;
} ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function getLeft ( el , list , center ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var left = getElLeft ( el , list ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return center
? left - centerEl ( el , list )
: Math . min ( left , getMax ( list ) ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function getMax ( list ) {
return Math . max ( 0 , getWidth ( list ) - bounds ( list ) . width ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function getWidth ( list ) {
return slides ( list ) . reduce ( function ( right , el ) { return bounds ( el ) . width + right ; } , 0 ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function getMaxWidth ( list ) {
return slides ( list ) . reduce ( function ( right , el ) { return Math . max ( right , bounds ( el ) . width ) ; } , 0 ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function centerEl ( el , list ) {
return bounds ( list ) . width / 2 - bounds ( el ) . width / 2 ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function getElLeft ( el , list ) {
return ( position ( el ) . left + ( isRtl ? bounds ( el ) . width - bounds ( list ) . width : 0 ) ) * ( isRtl ? - 1 : 1 ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function bounds ( el ) {
return el . getBoundingClientRect ( ) ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function triggerUpdate$1 ( el , type , data ) {
trigger ( el , createEvent ( type , false , false , data ) ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
function slides ( list ) {
return toNodes ( list . children ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var Slider$1 = {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
mixins : [ Class , Slider , SliderReactive ] ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
props : {
center : Boolean ,
2019-04-22 13:31:39 +00:00
sets : Boolean
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
data : {
center : false ,
sets : false ,
attrItem : 'uk-slider-item' ,
selList : '.uk-slider-items' ,
selNav : '.uk-slider-nav' ,
clsContainer : 'uk-slider-container' ,
Transitioner : Transitioner$1
} ,
2017-11-11 04:33:51 +00:00
computed : {
2018-09-20 12:35:14 +00:00
avgWidth : function ( ) {
return getWidth ( this . list ) / this . length ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
finite : function ( ref ) {
var finite = ref . finite ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return finite || getWidth ( this . list ) < bounds ( this . list ) . width + getMaxWidth ( this . list ) + this . center ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
maxIndex : function ( ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! this . finite || this . center && ! this . sets ) {
return this . length - 1 ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( this . center ) {
return this . sets [ this . sets . length - 1 ] ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
css ( this . slides , 'order' , '' ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var max = getMax ( this . list ) ;
var i = this . length ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
while ( i -- ) {
2019-04-22 13:31:39 +00:00
if ( getElLeft ( this . list . children [ i ] , this . list ) < max ) {
return Math . min ( i + 1 , this . length - 1 ) ;
2018-09-20 12:35:14 +00:00
}
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return 0 ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
sets : function ( ref ) {
var this $1 = this ;
var sets = ref . sets ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var width = bounds ( this . list ) . width / ( this . center ? 2 : 1 ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var left = 0 ;
2019-04-22 13:31:39 +00:00
var leftCenter = width ;
2018-09-20 12:35:14 +00:00
var slideLeft = 0 ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
sets = sets && this . slides . reduce ( function ( sets , slide , i ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var ref = bounds ( slide ) ;
var slideWidth = ref . width ;
var slideRight = slideLeft + slideWidth ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( slideRight > left ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! this $1 . center && i > this $1 . maxIndex ) {
i = this $1 . maxIndex ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! includes ( sets , i ) ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var cmp = this $1 . slides [ i + 1 ] ;
if ( this $1 . center && cmp && slideWidth < leftCenter - bounds ( cmp ) . width / 2 ) {
leftCenter -= slideWidth ;
} else {
2019-04-22 13:31:39 +00:00
leftCenter = width ;
2018-09-20 12:35:14 +00:00
sets . push ( i ) ;
2019-04-22 13:31:39 +00:00
left = slideLeft + width + ( this $1 . center ? slideWidth / 2 : 0 ) ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
}
}
2018-09-20 12:35:14 +00:00
slideLeft += slideWidth ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return sets ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} , [ ] ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return ! isEmpty ( sets ) && sets ;
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
transitionOptions : function ( ) {
return {
center : this . center ,
list : this . list
} ;
2017-11-11 04:33:51 +00:00
}
} ,
2018-09-20 12:35:14 +00:00
connected : function ( ) {
toggleClass ( this . $el , this . clsContainer , ! $ ( ( "." + ( this . clsContainer ) ) , this . $el ) ) ;
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
update : {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
write : function ( ) {
var this $1 = this ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
$$ ( ( "[" + ( this . attrItem ) + "],[data-" + ( this . attrItem ) + "]" ) , this . $el ) . forEach ( function ( el ) {
2019-04-22 13:31:39 +00:00
var index = data ( el , this $1 . attrItem ) ;
this $1 . maxIndex && toggleClass ( el , 'uk-hidden' , isNumeric ( index ) && ( this $1 . sets && ! includes ( this $1 . sets , toFloat ( index ) ) || index > this $1 . maxIndex ) ) ;
2018-09-20 12:35:14 +00:00
} ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
events : [ 'resize' ]
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
events : {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
beforeitemshow : function ( e ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! this . dragging && this . sets && this . stack . length < 2 && ! includes ( this . sets , this . index ) ) {
this . index = this . getValidIndex ( ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var diff = Math . abs (
this . index
- this . prevIndex
+ ( this . dir > 0 && this . index < this . prevIndex || this . dir < 0 && this . index > this . prevIndex ? ( this . maxIndex + 1 ) * this . dir : 0 )
) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! this . dragging && diff > 1 ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
for ( var i = 0 ; i < diff ; i ++ ) {
2019-04-22 13:31:39 +00:00
this . stack . splice ( 1 , 0 , this . dir > 0 ? 'next' : 'previous' ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
e . preventDefault ( ) ;
return ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . duration = speedUp ( this . avgWidth / this . velocity )
* ( bounds (
this . dir < 0 || ! this . slides [ this . prevIndex ]
? this . slides [ this . index ]
: this . slides [ this . prevIndex ]
) . width / this . avgWidth ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . reorder ( ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
itemshow : function ( ) {
! isUndefined ( this . prevIndex ) && addClass ( this . _getTransitioner ( ) . getItemIn ( ) , this . clsActive ) ;
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
itemshown : function ( ) {
var this $1 = this ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var actives = this . _getTransitioner ( this . index ) . getActives ( ) ;
this . slides . forEach ( function ( slide ) { return toggleClass ( slide , this $1 . clsActive , includes ( actives , slide ) ) ; } ) ;
( ! this . sets || includes ( this . sets , toFloat ( this . index ) ) ) && this . slides . forEach ( function ( slide ) { return toggleClass ( slide , this $1 . clsActivated , includes ( actives , slide ) ) ; } ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
methods : {
2018-09-20 12:35:14 +00:00
reorder : function ( ) {
2017-11-11 04:33:51 +00:00
var this $1 = this ;
2018-09-20 12:35:14 +00:00
css ( this . slides , 'order' , '' ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( this . finite ) {
return ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var index = this . dir > 0 && this . slides [ this . prevIndex ] ? this . prevIndex : this . index ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
this . slides . forEach ( function ( slide , i ) { return css ( slide , 'order' , this $1 . dir > 0 && i < index
2018-09-20 12:35:14 +00:00
? 1
: this $1 . dir < 0 && i >= this $1 . index
? - 1
: ''
) ; }
) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! this . center ) {
return ;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var next = this . slides [ index ] ;
var width = bounds ( this . list ) . width / 2 - bounds ( next ) . width / 2 ;
2018-09-20 12:35:14 +00:00
var j = 0 ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
while ( width > 0 ) {
var slideIndex = this . getIndex ( -- j + index , index ) ;
var slide = this . slides [ slideIndex ] ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
css ( slide , 'order' , slideIndex > index ? - 2 : - 1 ) ;
width -= bounds ( slide ) . width ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
getValidIndex : function ( index , prevIndex ) {
if ( index === void 0 ) index = this . index ;
2018-09-20 12:35:14 +00:00
if ( prevIndex === void 0 ) prevIndex = this . prevIndex ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
index = this . getIndex ( index , prevIndex ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( ! this . sets ) {
2019-04-22 13:31:39 +00:00
return index ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var prev ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
do {
2019-04-22 13:31:39 +00:00
if ( includes ( this . sets , index ) ) {
return index ;
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
prev = index ;
index = this . getIndex ( index + this . dir , prevIndex ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
} while ( index !== prev ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return index ;
2017-11-11 04:33:51 +00:00
}
}
} ;
2018-09-20 12:35:14 +00:00
var SliderParallax = {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
mixins : [ Parallax ] ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
data : {
selItem : '!li'
2017-11-11 04:33:51 +00:00
} ,
computed : {
2018-09-20 12:35:14 +00:00
item : function ( ref , $el ) {
var selItem = ref . selItem ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return query ( selItem , $el ) ;
2017-11-11 04:33:51 +00:00
}
} ,
2018-09-20 12:35:14 +00:00
events : [
{
name : 'itemshown' ,
self : true ,
el : function ( ) {
return this . item ;
} ,
handler : function ( ) {
css ( this . $el , this . getCss ( . 5 ) ) ;
}
} ,
{
name : 'itemin itemout' ,
self : true ,
el : function ( ) {
return this . item ;
} ,
handler : function ( ref ) {
var type = ref . type ;
var ref _detail = ref . detail ;
var percent = ref _detail . percent ;
var duration = ref _detail . duration ;
var timing = ref _detail . timing ;
var dir = ref _detail . dir ;
Transition . cancel ( this . $el ) ;
css ( this . $el , this . getCss ( getCurrent ( type , dir , percent ) ) ) ;
Transition . start ( this . $el , this . getCss ( isIn ( type )
? . 5
: dir > 0
? 1
: 0
) , duration , timing ) . catch ( noop ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
} ,
2017-11-11 04:33:51 +00:00
{
2018-09-20 12:35:14 +00:00
name : 'transitioncanceled transitionend' ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
self : true ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
el : function ( ) {
return this . item ;
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
handler : function ( ) {
Transition . cancel ( this . $el ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
{
name : 'itemtranslatein itemtranslateout' ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
self : true ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
el : function ( ) {
return this . item ;
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
handler : function ( ref ) {
var type = ref . type ;
var ref _detail = ref . detail ;
var percent = ref _detail . percent ;
var dir = ref _detail . dir ;
Transition . cancel ( this . $el ) ;
css ( this . $el , this . getCss ( getCurrent ( type , dir , percent ) ) ) ;
}
2017-11-11 04:33:51 +00:00
}
]
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
function isIn ( type ) {
return endsWith ( type , 'in' ) ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
function getCurrent ( type , dir , percent ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
percent /= 2 ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return ! isIn ( type )
? dir < 0
? percent
: 1 - percent
: dir < 0
? 1 - percent
: percent ;
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
var Animations$2 = assign ( { } , Animations , {
2017-11-11 04:33:51 +00:00
fade : {
2018-09-20 12:35:14 +00:00
show : function ( ) {
2017-11-11 04:33:51 +00:00
return [
{ opacity : 0 , zIndex : 0 } ,
{ zIndex : - 1 }
] ;
} ,
2018-09-20 12:35:14 +00:00
percent : function ( current ) {
2017-11-11 04:33:51 +00:00
return 1 - css ( current , 'opacity' ) ;
} ,
2018-09-20 12:35:14 +00:00
translate : function ( percent ) {
2017-11-11 04:33:51 +00:00
return [
{ opacity : 1 - percent , zIndex : 0 } ,
{ zIndex : - 1 }
] ;
}
} ,
scale : {
2018-09-20 12:35:14 +00:00
show : function ( ) {
2017-11-11 04:33:51 +00:00
return [
{ opacity : 0 , transform : scale3d ( 1 + . 5 ) , zIndex : 0 } ,
{ zIndex : - 1 }
] ;
} ,
2018-09-20 12:35:14 +00:00
percent : function ( current ) {
2017-11-11 04:33:51 +00:00
return 1 - css ( current , 'opacity' ) ;
} ,
2018-09-20 12:35:14 +00:00
translate : function ( percent ) {
2017-11-11 04:33:51 +00:00
return [
{ opacity : 1 - percent , transform : scale3d ( 1 + . 5 * percent ) , zIndex : 0 } ,
{ zIndex : - 1 }
] ;
}
} ,
pull : {
2018-09-20 12:35:14 +00:00
show : function ( dir ) {
2017-11-11 04:33:51 +00:00
return dir < 0
? [
{ transform : translate ( 30 ) , zIndex : - 1 } ,
2019-04-22 13:31:39 +00:00
{ transform : translate ( ) , zIndex : 0 }
]
2017-11-11 04:33:51 +00:00
: [
{ transform : translate ( - 100 ) , zIndex : 0 } ,
{ transform : translate ( ) , zIndex : - 1 }
] ;
} ,
2018-09-20 12:35:14 +00:00
percent : function ( current , next , dir ) {
2017-11-11 04:33:51 +00:00
return dir < 0
2018-09-20 12:35:14 +00:00
? 1 - translated ( next )
: translated ( current ) ;
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
translate : function ( percent , dir ) {
2017-11-11 04:33:51 +00:00
return dir < 0
? [
{ transform : translate ( 30 * percent ) , zIndex : - 1 } ,
2019-04-22 13:31:39 +00:00
{ transform : translate ( - 100 * ( 1 - percent ) ) , zIndex : 0 }
]
2017-11-11 04:33:51 +00:00
: [
{ transform : translate ( - percent * 100 ) , zIndex : 0 } ,
{ transform : translate ( 30 * ( 1 - percent ) ) , zIndex : - 1 }
] ;
}
} ,
push : {
2018-09-20 12:35:14 +00:00
show : function ( dir ) {
2017-11-11 04:33:51 +00:00
return dir < 0
? [
{ transform : translate ( 100 ) , zIndex : 0 } ,
2019-04-22 13:31:39 +00:00
{ transform : translate ( ) , zIndex : - 1 }
]
2017-11-11 04:33:51 +00:00
: [
{ transform : translate ( - 30 ) , zIndex : - 1 } ,
{ transform : translate ( ) , zIndex : 0 }
] ;
} ,
2018-09-20 12:35:14 +00:00
percent : function ( current , next , dir ) {
2017-11-11 04:33:51 +00:00
return dir > 0
2018-09-20 12:35:14 +00:00
? 1 - translated ( next )
: translated ( current ) ;
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
translate : function ( percent , dir ) {
2017-11-11 04:33:51 +00:00
return dir < 0
? [
{ transform : translate ( percent * 100 ) , zIndex : 0 } ,
2019-04-22 13:31:39 +00:00
{ transform : translate ( - 30 * ( 1 - percent ) ) , zIndex : - 1 }
]
2017-11-11 04:33:51 +00:00
: [
{ transform : translate ( - 30 * percent ) , zIndex : - 1 } ,
{ transform : translate ( 100 * ( 1 - percent ) ) , zIndex : 0 }
] ;
}
}
} ) ;
2018-09-20 12:35:14 +00:00
var Slideshow$1 = {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
mixins : [ Class , Slideshow , SliderReactive ] ,
2017-11-11 04:33:51 +00:00
props : {
ratio : String ,
2019-04-22 13:31:39 +00:00
minHeight : Number ,
maxHeight : Number
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
data : {
2017-11-11 04:33:51 +00:00
ratio : '16:9' ,
minHeight : false ,
maxHeight : false ,
selList : '.uk-slideshow-items' ,
attrItem : 'uk-slideshow-item' ,
2018-09-20 12:35:14 +00:00
selNav : '.uk-slideshow-nav' ,
Animations : Animations$2
2017-11-11 04:33:51 +00:00
} ,
update : {
2018-09-20 12:35:14 +00:00
read : function ( ) {
2017-11-11 04:33:51 +00:00
var ref = this . ratio . split ( ':' ) . map ( Number ) ;
2019-04-22 13:31:39 +00:00
var width = ref [ 0 ] ;
var height = ref [ 1 ] ;
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
height = height * this . list . offsetWidth / width || 0 ;
2017-11-11 04:33:51 +00:00
if ( this . minHeight ) {
2019-04-22 13:31:39 +00:00
height = Math . max ( this . minHeight , height ) ;
2017-11-11 04:33:51 +00:00
}
if ( this . maxHeight ) {
2019-04-22 13:31:39 +00:00
height = Math . min ( this . maxHeight , height ) ;
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
return { height : height - boxModelAdjust ( this . list , 'content-box' ) } ;
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
write : function ( ref ) {
2019-04-22 13:31:39 +00:00
var height = ref . height ;
2018-09-20 12:35:14 +00:00
2019-04-22 13:31:39 +00:00
css ( this . list , 'minHeight' , height ) ;
2017-11-11 04:33:51 +00:00
} ,
2019-04-22 13:31:39 +00:00
events : [ 'resize' ]
2017-11-11 04:33:51 +00:00
}
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var Sortable = {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
mixins : [ Class , Animate ] ,
2017-11-11 04:33:51 +00:00
props : {
group : String ,
threshold : Number ,
clsItem : String ,
clsPlaceholder : String ,
clsDrag : String ,
clsDragState : String ,
clsBase : String ,
clsNoDrag : String ,
clsEmpty : String ,
clsCustom : String ,
handle : String
} ,
2018-09-20 12:35:14 +00:00
data : {
2017-11-11 04:33:51 +00:00
group : false ,
threshold : 5 ,
clsItem : 'uk-sortable-item' ,
clsPlaceholder : 'uk-sortable-placeholder' ,
clsDrag : 'uk-sortable-drag' ,
clsDragState : 'uk-drag' ,
clsBase : 'uk-sortable' ,
clsNoDrag : 'uk-sortable-nodrag' ,
clsEmpty : 'uk-sortable-empty' ,
clsCustom : '' ,
handle : false
} ,
2019-04-22 13:31:39 +00:00
created : function ( ) {
2017-11-11 04:33:51 +00:00
var this $1 = this ;
[ 'init' , 'start' , 'move' , 'end' ] . forEach ( function ( key ) {
var fn = this $1 [ key ] ;
this $1 [ key ] = function ( e ) {
2018-09-20 12:35:14 +00:00
this $1 . scrollY = window . pageYOffset ;
2019-04-22 13:31:39 +00:00
var ref = getEventPos ( e , 'page' ) ;
2017-11-11 04:33:51 +00:00
var x = ref . x ;
var y = ref . y ;
this $1 . pos = { x : x , y : y } ;
fn ( e ) ;
} ;
} ) ;
} ,
2019-04-22 13:31:39 +00:00
events : {
name : pointerDown ,
passive : false ,
handler : 'init'
} ,
2017-11-11 04:33:51 +00:00
update : {
2018-09-20 12:35:14 +00:00
write : function ( ) {
2017-11-11 04:33:51 +00:00
if ( this . clsEmpty ) {
2019-04-22 13:31:39 +00:00
toggleClass ( this . $el , this . clsEmpty , isEmpty ( this . $el . children ) ) ;
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
css ( this . handle ? $$ ( this . handle , this . $el ) : this . $el . children , { touchAction : 'none' , userSelect : 'none' } ) ;
2018-09-20 12:35:14 +00:00
2017-11-11 04:33:51 +00:00
if ( ! this . drag ) {
return ;
}
offset ( this . drag , { top : this . pos . y + this . origin . top , left : this . pos . x + this . origin . left } ) ;
2018-09-20 12:35:14 +00:00
var ref = offset ( this . drag ) ;
var top = ref . top ;
2019-04-22 13:31:39 +00:00
var offsetHeight = ref . height ;
var bottom = top + offsetHeight ;
2018-09-20 12:35:14 +00:00
var scroll ;
2017-11-11 04:33:51 +00:00
if ( top > 0 && top < this . scrollY ) {
scroll = this . scrollY - 5 ;
2018-09-20 12:35:14 +00:00
} else if ( bottom < height ( document ) && bottom > height ( window ) + this . scrollY ) {
2017-11-11 04:33:51 +00:00
scroll = this . scrollY + 5 ;
}
2018-09-20 12:35:14 +00:00
scroll && setTimeout ( function ( ) { return scrollTop ( window , scroll ) ; } , 5 ) ;
2017-11-11 04:33:51 +00:00
}
} ,
methods : {
2018-09-20 12:35:14 +00:00
init : function ( e ) {
2017-11-11 04:33:51 +00:00
var target = e . target ;
var button = e . button ;
var defaultPrevented = e . defaultPrevented ;
2018-09-20 12:35:14 +00:00
var ref = toNodes ( this . $el . children ) . filter ( function ( el ) { return within ( target , el ) ; } ) ;
var placeholder = ref [ 0 ] ;
2017-11-11 04:33:51 +00:00
if ( ! placeholder
2019-04-22 13:31:39 +00:00
|| defaultPrevented
2018-09-20 12:35:14 +00:00
|| button > 0
2019-04-22 13:31:39 +00:00
|| isInput ( target )
2017-11-11 04:33:51 +00:00
|| within ( target , ( "." + ( this . clsNoDrag ) ) )
2019-04-22 13:31:39 +00:00
|| this . handle && ! within ( target , this . handle )
2017-11-11 04:33:51 +00:00
) {
return ;
}
e . preventDefault ( ) ;
this . touched = [ this ] ;
this . placeholder = placeholder ;
this . origin = assign ( { target : target , index : index ( placeholder ) } , this . pos ) ;
2018-09-20 12:35:14 +00:00
on ( document , pointerMove , this . move ) ;
on ( document , pointerUp , this . end ) ;
on ( window , 'scroll' , this . scroll ) ;
2017-11-11 04:33:51 +00:00
if ( ! this . threshold ) {
this . start ( e ) ;
}
} ,
2018-09-20 12:35:14 +00:00
start : function ( e ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this . drag = append ( this . $container , this . placeholder . outerHTML . replace ( /^<li/i , '<div' ) . replace ( /li>$/i , 'div>' ) ) ;
2017-11-11 04:33:51 +00:00
css ( this . drag , assign ( {
boxSizing : 'border-box' ,
width : this . placeholder . offsetWidth ,
height : this . placeholder . offsetHeight
} , css ( this . placeholder , [ 'paddingLeft' , 'paddingRight' , 'paddingTop' , 'paddingBottom' ] ) ) ) ;
attr ( this . drag , 'uk-no-boot' , '' ) ;
2018-09-20 12:35:14 +00:00
addClass ( this . drag , this . clsDrag , this . clsCustom ) ;
2017-11-11 04:33:51 +00:00
height ( this . drag . firstElementChild , height ( this . placeholder . firstElementChild ) ) ;
var ref = offset ( this . placeholder ) ;
var left = ref . left ;
var top = ref . top ;
assign ( this . origin , { left : left - this . pos . x , top : top - this . pos . y } ) ;
2019-04-22 13:31:39 +00:00
css ( this . origin . target , 'pointerEvents' , 'none' ) ;
2017-11-11 04:33:51 +00:00
addClass ( this . placeholder , this . clsPlaceholder ) ;
addClass ( this . $el . children , this . clsItem ) ;
2018-09-20 12:35:14 +00:00
addClass ( document . documentElement , this . clsDragState ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
trigger ( this . $el , 'start' , [ this , this . placeholder ] ) ;
2017-11-11 04:33:51 +00:00
this . move ( e ) ;
} ,
2018-09-20 12:35:14 +00:00
move : function ( e ) {
2017-11-11 04:33:51 +00:00
if ( ! this . drag ) {
if ( Math . abs ( this . pos . x - this . origin . x ) > this . threshold || Math . abs ( this . pos . y - this . origin . y ) > this . threshold ) {
this . start ( e ) ;
}
return ;
}
this . $emit ( ) ;
2019-04-22 13:31:39 +00:00
var target = e . type === 'mousemove' ? e . target : document . elementFromPoint ( this . pos . x - window . pageXOffset , this . pos . y - window . pageYOffset ) ;
2018-09-20 12:35:14 +00:00
var sortable = this . getSortable ( target ) ;
var previous = this . getSortable ( this . placeholder ) ;
var move = sortable !== previous ;
2017-11-11 04:33:51 +00:00
if ( ! sortable || within ( target , this . placeholder ) || move && ( ! sortable . group || sortable . group !== previous . group ) ) {
return ;
}
target = sortable . $el === target . parentNode && target || toNodes ( sortable . $el . children ) . filter ( function ( element ) { return within ( target , element ) ; } ) [ 0 ] ;
if ( move ) {
previous . remove ( this . placeholder ) ;
} else if ( ! target ) {
return ;
}
sortable . insert ( this . placeholder , target ) ;
if ( ! includes ( this . touched , sortable ) ) {
this . touched . push ( sortable ) ;
}
} ,
2018-09-20 12:35:14 +00:00
end : function ( e ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
off ( document , pointerMove , this . move ) ;
off ( document , pointerUp , this . end ) ;
off ( window , 'scroll' , this . scroll ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
css ( this . origin . target , 'pointerEvents' , '' ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( ! this . drag ) {
if ( e . type === 'touchend' ) {
e . target . click ( ) ;
2017-11-11 04:33:51 +00:00
}
return ;
}
2018-09-20 12:35:14 +00:00
var sortable = this . getSortable ( this . placeholder ) ;
2017-11-11 04:33:51 +00:00
if ( this === sortable ) {
if ( this . origin . index !== index ( this . placeholder ) ) {
trigger ( this . $el , 'moved' , [ this , this . placeholder ] ) ;
}
} else {
trigger ( sortable . $el , 'added' , [ sortable , this . placeholder ] ) ;
trigger ( this . $el , 'removed' , [ this , this . placeholder ] ) ;
}
2018-09-20 12:35:14 +00:00
trigger ( this . $el , 'stop' , [ this , this . placeholder ] ) ;
2017-11-11 04:33:51 +00:00
remove ( this . drag ) ;
this . drag = null ;
var classes = this . touched . map ( function ( sortable ) { return ( ( sortable . clsPlaceholder ) + " " + ( sortable . clsItem ) ) ; } ) . join ( ' ' ) ;
this . touched . forEach ( function ( sortable ) { return removeClass ( sortable . $el . children , classes ) ; } ) ;
2018-09-20 12:35:14 +00:00
removeClass ( document . documentElement , this . clsDragState ) ;
2017-11-11 04:33:51 +00:00
} ,
2019-04-22 13:31:39 +00:00
scroll : function ( ) {
var scroll = window . pageYOffset ;
if ( scroll !== this . scrollY ) {
this . pos . y += scroll - this . scrollY ;
this . scrollY = scroll ;
this . $emit ( ) ;
}
} ,
2018-09-20 12:35:14 +00:00
insert : function ( element , target ) {
2017-11-11 04:33:51 +00:00
var this $1 = this ;
addClass ( this . $el . children , this . clsItem ) ;
var insert = function ( ) {
if ( target ) {
if ( ! within ( element , this $1 . $el ) || isPredecessor ( element , target ) ) {
before ( target , element ) ;
} else {
after ( target , element ) ;
}
} else {
append ( this $1 . $el , element ) ;
}
} ;
if ( this . animation ) {
this . animate ( insert ) ;
} else {
insert ( ) ;
}
} ,
2018-09-20 12:35:14 +00:00
remove : function ( element ) {
2017-11-11 04:33:51 +00:00
if ( ! within ( element , this . $el ) ) {
return ;
}
2019-04-22 13:31:39 +00:00
css ( this . handle ? $$ ( this . handle , element ) : element , { touchAction : '' , userSelect : '' } ) ;
2017-11-11 04:33:51 +00:00
if ( this . animation ) {
this . animate ( function ( ) { return remove ( element ) ; } ) ;
} else {
remove ( element ) ;
}
} ,
2018-09-20 12:35:14 +00:00
getSortable : function ( element ) {
return element && ( this . $getComponent ( element , 'sortable' ) || this . getSortable ( element . parentNode ) ) ;
2017-11-11 04:33:51 +00:00
}
}
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
function isPredecessor ( element , target ) {
return element . parentNode === target . parentNode && index ( element ) > index ( target ) ;
}
2019-04-22 13:31:39 +00:00
var obj$1 ;
2017-11-11 04:33:51 +00:00
var actives = [ ] ;
2018-09-20 12:35:14 +00:00
var Tooltip = {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
mixins : [ Container , Togglable , Position ] ,
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
args : 'title' ,
2017-11-11 04:33:51 +00:00
props : {
delay : Number ,
title : String
} ,
2018-09-20 12:35:14 +00:00
data : {
2017-11-11 04:33:51 +00:00
pos : 'top' ,
title : '' ,
delay : 0 ,
animation : [ 'uk-animation-scale-up' ] ,
duration : 100 ,
cls : 'uk-active' ,
clsPos : 'uk-tooltip'
} ,
2018-09-20 12:35:14 +00:00
beforeConnect : function ( ) {
this . _hasTitle = hasAttr ( this . $el , 'title' ) ;
attr ( this . $el , { title : '' , 'aria-expanded' : false } ) ;
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
disconnected : function ( ) {
2017-11-11 04:33:51 +00:00
this . hide ( ) ;
2018-09-20 12:35:14 +00:00
attr ( this . $el , { title : this . _hasTitle ? this . title : null , 'aria-expanded' : null } ) ;
2017-11-11 04:33:51 +00:00
} ,
methods : {
2018-09-20 12:35:14 +00:00
show : function ( ) {
2017-11-11 04:33:51 +00:00
var this $1 = this ;
2019-04-22 13:31:39 +00:00
if ( this . isActive ( ) ) {
2017-11-11 04:33:51 +00:00
return ;
}
actives . forEach ( function ( active ) { return active . hide ( ) ; } ) ;
actives . push ( this ) ;
2019-04-22 13:31:39 +00:00
this . _unbind = on ( document , pointerUp , function ( e ) { return ! within ( e . target , this $1 . $el ) && this $1 . hide ( ) ; } ) ;
2017-11-11 04:33:51 +00:00
clearTimeout ( this . showTimer ) ;
this . showTimer = setTimeout ( function ( ) {
2019-04-22 13:31:39 +00:00
this $1 . _show ( ) ;
2017-11-11 04:33:51 +00:00
this $1 . hideTimer = setInterval ( function ( ) {
if ( ! isVisible ( this $1 . $el ) ) {
this $1 . hide ( ) ;
}
} , 150 ) ;
} , this . delay ) ;
} ,
2018-09-20 12:35:14 +00:00
hide : function ( ) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if ( ! this . isActive ( ) || matches ( this . $el , 'input' ) && this . $el === document . activeElement ) {
2017-11-11 04:33:51 +00:00
return ;
}
2019-04-22 13:31:39 +00:00
actives . splice ( actives . indexOf ( this ) , 1 ) ;
2017-11-11 04:33:51 +00:00
clearTimeout ( this . showTimer ) ;
clearInterval ( this . hideTimer ) ;
attr ( this . $el , 'aria-expanded' , false ) ;
this . toggleElement ( this . tooltip , false ) ;
this . tooltip && remove ( this . tooltip ) ;
this . tooltip = false ;
this . _unbind ( ) ;
2019-04-22 13:31:39 +00:00
} ,
_show : function ( ) {
this . tooltip = append ( this . container ,
( "<div class=\"" + ( this . clsPos ) + "\" aria-expanded=\"true\" aria-hidden> <div class=\"" + ( this . clsPos ) + "-inner\">" + ( this . title ) + "</div> </div>" )
) ;
this . positionAt ( this . tooltip , this . $el ) ;
this . origin = this . getAxis ( ) === 'y'
? ( ( flipPosition ( this . dir ) ) + "-" + ( this . align ) )
: ( ( this . align ) + "-" + ( flipPosition ( this . dir ) ) ) ;
this . toggleElement ( this . tooltip , true ) ;
} ,
isActive : function ( ) {
return includes ( actives , this ) ;
2017-11-11 04:33:51 +00:00
}
} ,
2019-04-22 13:31:39 +00:00
events : ( obj$1 = {
focus : 'show' ,
blur : 'hide'
} , obj$1 [ ( pointerEnter + " " + pointerLeave ) ] = function ( e ) {
if ( isTouch ( e ) ) {
return ;
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
e . type === pointerEnter
? this . show ( )
: this . hide ( ) ;
} , obj$1 [ pointerDown ] = function ( e ) {
2017-11-11 04:33:51 +00:00
if ( ! isTouch ( e ) ) {
2019-04-22 13:31:39 +00:00
return ;
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
this . isActive ( )
? this . hide ( )
: this . show ( ) ;
} , obj$1 )
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var Upload = {
2017-11-11 04:33:51 +00:00
props : {
allow : String ,
clsDragover : String ,
concurrent : Number ,
2018-09-20 12:35:14 +00:00
maxSize : Number ,
method : String ,
2017-11-11 04:33:51 +00:00
mime : String ,
msgInvalidMime : String ,
msgInvalidName : String ,
2018-09-20 12:35:14 +00:00
msgInvalidSize : String ,
2017-11-11 04:33:51 +00:00
multiple : Boolean ,
name : String ,
params : Object ,
type : String ,
2019-04-22 13:31:39 +00:00
url : String
2017-11-11 04:33:51 +00:00
} ,
2018-09-20 12:35:14 +00:00
data : {
2017-11-11 04:33:51 +00:00
allow : false ,
clsDragover : 'uk-dragover' ,
concurrent : 1 ,
2018-09-20 12:35:14 +00:00
maxSize : 0 ,
method : 'POST' ,
2017-11-11 04:33:51 +00:00
mime : false ,
msgInvalidMime : 'Invalid File Type: %s' ,
msgInvalidName : 'Invalid File Name: %s' ,
2018-09-20 12:35:14 +00:00
msgInvalidSize : 'Invalid File Size: %s Kilobytes Max' ,
2017-11-11 04:33:51 +00:00
multiple : false ,
name : 'files[]' ,
params : { } ,
2018-09-20 12:35:14 +00:00
type : '' ,
2017-11-11 04:33:51 +00:00
url : '' ,
abort : noop ,
beforeAll : noop ,
beforeSend : noop ,
complete : noop ,
completeAll : noop ,
error : noop ,
fail : noop ,
load : noop ,
loadEnd : noop ,
loadStart : noop ,
progress : noop
} ,
events : {
2018-09-20 12:35:14 +00:00
change : function ( e ) {
2017-11-11 04:33:51 +00:00
if ( ! matches ( e . target , 'input[type="file"]' ) ) {
return ;
}
e . preventDefault ( ) ;
if ( e . target . files ) {
this . upload ( e . target . files ) ;
}
e . target . value = '' ;
} ,
2018-09-20 12:35:14 +00:00
drop : function ( e ) {
2017-11-11 04:33:51 +00:00
stop ( e ) ;
var transfer = e . dataTransfer ;
if ( ! transfer || ! transfer . files ) {
return ;
}
removeClass ( this . $el , this . clsDragover ) ;
this . upload ( transfer . files ) ;
} ,
2018-09-20 12:35:14 +00:00
dragenter : function ( e ) {
2017-11-11 04:33:51 +00:00
stop ( e ) ;
} ,
2018-09-20 12:35:14 +00:00
dragover : function ( e ) {
2017-11-11 04:33:51 +00:00
stop ( e ) ;
addClass ( this . $el , this . clsDragover ) ;
} ,
2018-09-20 12:35:14 +00:00
dragleave : function ( e ) {
2017-11-11 04:33:51 +00:00
stop ( e ) ;
removeClass ( this . $el , this . clsDragover ) ;
}
} ,
methods : {
2018-09-20 12:35:14 +00:00
upload : function ( files ) {
2017-11-11 04:33:51 +00:00
var this $1 = this ;
if ( ! files . length ) {
return ;
}
trigger ( this . $el , 'upload' , [ files ] ) ;
for ( var i = 0 ; i < files . length ; i ++ ) {
2019-04-22 13:31:39 +00:00
if ( this . maxSize && this . maxSize * 1000 < files [ i ] . size ) {
this . fail ( this . msgInvalidSize . replace ( '%s' , this . maxSize ) ) ;
2018-09-20 12:35:14 +00:00
return ;
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
if ( this . allow && ! match$1 ( this . allow , files [ i ] . name ) ) {
this . fail ( this . msgInvalidName . replace ( '%s' , this . allow ) ) ;
2018-09-20 12:35:14 +00:00
return ;
}
2019-04-22 13:31:39 +00:00
if ( this . mime && ! match$1 ( this . mime , files [ i ] . type ) ) {
this . fail ( this . msgInvalidMime . replace ( '%s' , this . mime ) ) ;
2018-09-20 12:35:14 +00:00
return ;
2017-11-11 04:33:51 +00:00
}
}
if ( ! this . multiple ) {
files = [ files [ 0 ] ] ;
}
this . beforeAll ( this , files ) ;
2018-09-20 12:35:14 +00:00
var chunks = chunk ( files , this . concurrent ) ;
var upload = function ( files ) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var data = new FormData ( ) ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
files . forEach ( function ( file ) { return data . append ( this $1 . name , file ) ; } ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
for ( var key in this $1 . params ) {
2019-04-22 13:31:39 +00:00
data . append ( key , this $1 . params [ key ] ) ;
2018-09-20 12:35:14 +00:00
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
ajax ( this $1 . url , {
2019-04-22 13:31:39 +00:00
data : data ,
2018-09-20 12:35:14 +00:00
method : this $1 . method ,
responseType : this $1 . type ,
beforeSend : function ( env ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
var xhr = env . xhr ;
xhr . upload && on ( xhr . upload , 'progress' , this $1 . progress ) ;
[ 'loadStart' , 'load' , 'loadEnd' , 'abort' ] . forEach ( function ( type ) { return on ( xhr , type . toLowerCase ( ) , this $1 [ type ] ) ; }
) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this $1 . beforeSend ( env ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
}
} ) . then (
function ( xhr ) {
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
this $1 . complete ( xhr ) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
if ( chunks . length ) {
upload ( chunks . shift ( ) ) ;
} else {
this $1 . completeAll ( xhr ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ,
function ( e ) { return this $1 . error ( e ) ; }
) ;
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
upload ( chunks . shift ( ) ) ;
}
}
2018-09-20 12:35:14 +00:00
} ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function match$1 ( pattern , path ) {
2017-11-11 04:33:51 +00:00
return path . match ( new RegExp ( ( "^" + ( pattern . replace ( /\//g , '\\/' ) . replace ( /\*\*/g , '(\\/[^\\/]+)*' ) . replace ( /\*/g , '[^\\/]+' ) . replace ( /((?!\\))\?/g , '$1.' ) ) + "$" ) , 'i' ) ) ;
}
function chunk ( files , size ) {
var chunks = [ ] ;
for ( var i = 0 ; i < files . length ; i += size ) {
var chunk = [ ] ;
for ( var j = 0 ; j < size ; j ++ ) {
chunk . push ( files [ i + j ] ) ;
}
chunks . push ( chunk ) ;
}
return chunks ;
}
function stop ( e ) {
e . preventDefault ( ) ;
e . stopPropagation ( ) ;
}
2018-09-20 12:35:14 +00:00
UIkit . component ( 'countdown' , Countdown ) ;
UIkit . component ( 'filter' , Filter ) ;
UIkit . component ( 'lightbox' , Lightbox ) ;
2019-04-22 13:31:39 +00:00
UIkit . component ( 'lightboxPanel' , lightboxPanel ) ;
2018-09-20 12:35:14 +00:00
UIkit . component ( 'notification' , Notification ) ;
UIkit . component ( 'parallax' , Parallax$1 ) ;
UIkit . component ( 'slider' , Slider$1 ) ;
UIkit . component ( 'sliderParallax' , SliderParallax ) ;
UIkit . component ( 'slideshow' , Slideshow$1 ) ;
UIkit . component ( 'slideshowParallax' , SliderParallax ) ;
UIkit . component ( 'sortable' , Sortable ) ;
UIkit . component ( 'tooltip' , Tooltip ) ;
UIkit . component ( 'upload' , Upload ) ;
{
boot ( UIkit ) ;
}
2017-11-11 04:33:51 +00:00
2018-09-20 12:35:14 +00:00
return UIkit ;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
} ) ) ;