UNPKG

es6tween-parser-html

Version:

Executing Tweening via HTML Attribute and JSON Plugin

149 lines (129 loc) 5.5 kB
/*! * @name Executing Tweening via HTML Attribute and JSON Plugin * @license MIT-License * @requires: es6-tween core files for running this plugin */ ( function( TWEEN, factory ) { "use strict"; if ( typeof define === "function" && define.amd ) { define( [ 'es6-tween' ], function( es6Tween ) { return factory( es6Tween ); } ); } else if ( typeof module !== "undefined" && module.exports && require( 'es6-tween' ) ) { module.exports = factory( require( 'es6-tween' ) ); } else if ( typeof exports !== "undefined" && exports[ TWEEN ] ) { factory( exports[ TWEEN ] ); } else if ( typeof window !== "undefined" && window[ TWEEN ] ) { factory( window[ TWEEN ] ); } } ( 'TWEEN', function( TWEEN ) { "use strict"; var Plugins = TWEEN.Plugins; var Tween = TWEEN.Tween; var Selector = TWEEN.Selector; var Easing = TWEEN.Easing; if ( !TWEEN.isRunning() ) { TWEEN.autoPlay( true ); } var AttrInfo = { from: "anim-from", to: "anim-to", opts: "anim-opts", onEv: "anim-on", targ: "anim-target" }; var _parseDot = function( dot, targ ) { if ( dot.indexOf( '.' ) !== -1 ) { dot = dot.split( '.' ); var t = dot.shift(); if ( targ[ t ] !== undefined ) { return dot.reduce( function( prev, curr ) { return prev[ curr ] !== undefined ? prev[ curr ] : prev; }, targ[ t ] ); } return targ; } return targ; }; var JSONTypes = { "Infinity": Infinity, "true": true, "false": false, "NaN": NaN } var alphaTypes = /([A-Za-z]+)/g; var getTypeFromString = function( v ) { return typeof v === 'string' && JSONTypes[ v ] !== undefined ? JSONTypes[ v ] : !alphaTypes.test( v ) ? parseFloat( v ) : v.indexOf( '.' ) !== -1 && v.indexOf( ',' ) === -1 ? ( v.indexOf( 'In' ) !== -1 || v.indexOf( 'Out' ) !== -1 ) ? _parseDot( v, Easing ) : v : v.indexOf( "," ) !== -1 ? v.split( "," ) .map( getTypeFromString ) : v; } var runTween = function( elem, _from, _to, _opts, originalTarget, attrOn ) { if ( elem && elem.length !== undefined ) { for ( var i = 0, len = elem.length; i < len; i++ ) { runTween( elem[ i ], _from, _to, _opts, originalTarget.length !== undefined ? originalTarget[ i ] : originalTarget, attrOn ) } } else { var tween = Tween.fromTo( elem, _from, _to, _opts ) if ( attrOn ) { originalTarget.addEventListener( attrOn, function() { tween.start(); } ) } else { tween.start(); } } } var allElem = document.all !== undefined ? document.all : !!document.querySelectorAll ? document.querySelectorAll( '*' ) : []; for ( var i = 0, len = allElem.length; i < len; i++ ) { var elem = allElem[ i ]; var originalTarget = elem; var attrFrom = elem.getAttribute( AttrInfo.from ); var attrTo = elem.getAttribute( AttrInfo.to ); var attrOpt = elem.getAttribute( AttrInfo.opts ); var attrOn = elem.getAttribute( AttrInfo.onEv ); var attrTarget = elem.getAttribute( AttrInfo.targ ); var _from = attrFrom ? JSON.parse( attrFrom ) : null; var _to = attrTo ? JSON.parse( attrTo ) : null; var _opts = attrOpt ? JSON.parse( attrOpt ) : {}; if ( !_from && !_to ) { continue; } for ( var p in _opts ) { _opts[ p ] = getTypeFromString( _opts[ p ] ); } if ( attrTarget ) { elem = Selector( attrTarget, true ); } runTween( elem, _from, _to, _opts, originalTarget, attrOn ) } TWEEN.parseJSON = function( _encodedJSON ) { if ( typeof _encodedJSON === 'string' ) { _encodedJSON = JSON.parse( _encodedJSON ); } for ( var el in _encodedJSON ) { var item = _encodedJSON[ el ]; var _from = item.from; var _to = item.to; var _opts = item.opts; var elem = Selector( el, true ); var originalTarget = elem; var attrOn = item.on; var attrTarget = item.target; if ( !_from && !_to ) { continue; } for ( var p in _opts ) { _opts[ p ] = getTypeFromString( _opts[ p ] ); } if ( attrTarget ) { elem = Selector( attrTarget, true ); } runTween( elem, _from, _to, _opts, originalTarget, attrOn ) } }; } ) );