Anims.js


YAHOO.ext.StyleAnim = function(css){
    var o = css;
    if(typeof css == 'string'){
         o = {};
        var re = YAHOO.ext.StyleAnim.styleRE;
        var m;
        while ((m = re.exec(css)) != null){
            o[m[1]] = m[2];
        }
    }
    this.styles = o;
    if(!YAHOO.ext.StyleAnim.measureEl){
        var el = document.createElement('div');
        el.style.position = 'absolute';
        el.style.top = '-500px';
        el.style.left = '-500px';
        el.style.width = '0px';
        el.style.visibility = 'hidden';
        document.body.appendChild(el);
        YAHOO.ext.StyleAnim.measureEl = getEl(el);
    }
};
YAHOO.ext.StyleAnim.styleRE = /\s?([a-z\-]*)\:([^;]*);?/gi;

YAHOO.ext.StyleAnim.measurables = [
       'border',
       'border-width',
       'border-left',
       'border-right',
       'border-top',
       'border-bottom',
       'border-left-width',
       'border-right-width',
       'border-top-width',
       'border-bottom-width',
       'padding-left',
       'padding-right',
       'padding-top',
       'padding-bottom'
];
YAHOO.ext.StyleAnim.copyStyles = [
       'border-left-width',
       'border-right-width',
       'border-top-width',
       'border-bottom-width',
       'padding-left',
       'padding-right',
       'padding-top',
       'padding-bottom'
];
YAHOO.ext.StyleAnim.prototype = {
    apply : function(el, callback){
        var o = this.styles;
        var el = getEl(el);
        var adjAttr = ['width','height'];
        if(el.autoBoxAdjust && !el.isBorderBox()){
            var up = YAHOO.ext.Element.unitPattern;
            var adj;
            for(var i = 0, len = adjAttr.length; i < len; i++) {
            	var attr = adjAttr[i];
            	if(o[attr] != undefined){
                     var m = String(o[attr]).match(up);
                     if(!m || m[1] == 'px'){
                         if(!adj){
                             adj = this.getAdjustments(el, o);
                         }
                         var v = Math.max(0, (parseInt(o[attr], 10) || 0) - adj[0]);
                         o[attr] = v;
                     }
                }
            }            
        }else{
            for(var i = 0, len = adjAttr.length; i < len; i++) {
            	var attr = adjAttr[i];
            	if(o[attr] != undefined){
                    o[attr] = Math.max(0, parseInt(o[attr], 10) || 0);
                }
            }
        }
        var attr = {};
        for(var k in o){
            if(typeof o[k] != 'function'){
                attr[k] = {to: o[k]};
            }
        }
        alert(YAHOO.ext.util.JSON.encode(attr))
        new YAHOO.util.Anim(el.dom, attr, .5).animate();
        return this;
    },
    
    getAdjustments : function(el, o){
        var mel = YAHOO.ext.StyleAnim.measureEl;
        var ms = YAHOO.ext.StyleAnim.measurables;
        mel.copyStyles(el, YAHOO.ext.StyleAnim.copyStyles);
        // apply measurable styles
        for(var i = 0, len = ms.length; i < len; i++) {
        	var s = ms[i];
        	if(o[s]){
        	    mel.setStyle(s, o[s]);
        	}
        }
        return [mel.getBorderWidth('lr')+mel.getPadding('lr'), 
                mel.getBorderWidth('tb')+mel.getPadding('tb')];        
    }
}

YAHOO.ext.ClassAnim = function(selector){
     var rule = YAHOO.ext.util.CSS.getRule(selector);
     var s = rule.style;
     var attrs = {};
	 for(var key in s){
	    if(s[key] && typeof s[key] != 'function' && String(s[key]).indexOf(':') < 0 && s[key] != 'false'){
			attrs[key] = s[key];
	    }
	 }
	 YAHOO.ext.ClassAnim.superclass.constructor.call(this, attrs);
};

YAHOO.extendX(YAHOO.ext.ClassAnim, YAHOO.ext.StyleAnim);

yui-ext - Copyright © 2006 Jack Slocum. | Yahoo! UI - Copyright © 2006 Yahoo! Inc.
All rights reserved.