Apache-UploadMeter

 view release on metacpan or  search on metacpan

lib/Apache/UploadMeter/Resources/JavaScript.pm  view on Meta::CPAN

    if (typeof options.style == 'string') {
      if(options.style.indexOf(':') == -1) {
        var cssText = '', selector = '.' + options.style;
        $A(document.styleSheets).reverse().each(function(styleSheet) {
          if (styleSheet.cssRules) cssRules = styleSheet.cssRules;
          else if (styleSheet.rules) cssRules = styleSheet.rules;
          $A(cssRules).reverse().each(function(rule) {
            if (selector == rule.selectorText) {
              cssText = rule.style.cssText;
              throw $break;
            }
          });
          if (cssText) throw $break;
        });
        this.style = cssText.parseStyle();
        options.afterFinishInternal = function(effect){
          effect.element.addClassName(effect.options.style);
          effect.transforms.each(function(transform) {
            if(transform.style != 'opacity')
              effect.element.style[transform.style.camelize()] = '';
          });
        }
      } else this.style = options.style.parseStyle();
    } else this.style = $H(options.style)
    this.start(options);
  },
  setup: function(){
    function parseColor(color){
      if(!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) color = '#ffffff';
      color = color.parseColor();
      return $R(0,2).map(function(i){
        return parseInt( color.slice(i*2+1,i*2+3), 16 ) 
      });
    }
    this.transforms = this.style.map(function(pair){
      var property = pair[0].underscore().dasherize(), value = pair[1], unit = null;

      if(value.parseColor('#zzzzzz') != '#zzzzzz') {
        value = value.parseColor();
        unit  = 'color';
      } else if(property == 'opacity') {
        value = parseFloat(value);
        if(/MSIE/.test(navigator.userAgent) && !window.opera && (!this.element.currentStyle.hasLayout))
          this.element.setStyle({zoom: 1});
      } else if(Element.CSS_LENGTH.test(value)) 
        var components = value.match(/^([\+\-]?[0-9\.]+)(.*)$/),
          value = parseFloat(components[1]), unit = (components.length == 3) ? components[2] : null;

      var originalValue = this.element.getStyle(property);
      return $H({ 
        style: property, 
        originalValue: unit=='color' ? parseColor(originalValue) : parseFloat(originalValue || 0), 
        targetValue: unit=='color' ? parseColor(value) : value,
        unit: unit
      });
    }.bind(this)).reject(function(transform){
      return (
        (transform.originalValue == transform.targetValue) ||
        (
          transform.unit != 'color' &&
          (isNaN(transform.originalValue) || isNaN(transform.targetValue))
        )
      )
    });
  },
  update: function(position) {
    var style = $H(), value = null;
    this.transforms.each(function(transform){
      value = transform.unit=='color' ?
        $R(0,2).inject('#',function(m,v,i){
          return m+(Math.round(transform.originalValue[i]+
            (transform.targetValue[i] - transform.originalValue[i])*position)).toColorPart() }) : 
        transform.originalValue + Math.round(
          ((transform.targetValue - transform.originalValue) * position) * 1000)/1000 + transform.unit;
      style[transform.style] = value;
    });
    this.element.setStyle(style);
  }
});

Effect.Transform = Class.create();
Object.extend(Effect.Transform.prototype, {
  initialize: function(tracks){
    this.tracks  = [];
    this.options = arguments[1] || {};
    this.addTracks(tracks);
  },
  addTracks: function(tracks){
    tracks.each(function(track){
      var data = $H(track).values().first();
      this.tracks.push($H({
        ids:     $H(track).keys().first(),
        effect:  Effect.Morph,
        options: { style: data }
      }));
    }.bind(this));
    return this;
  },
  play: function(){
    return new Effect.Parallel(
      this.tracks.map(function(track){
        var elements = [$(track.ids) || $$(track.ids)].flatten();
        return elements.map(function(e){ return new track.effect(e, Object.extend({ sync:true }, track.options)) });
      }).flatten(),
      this.options
    );
  }
});

Element.CSS_PROPERTIES = $w(
  'backgroundColor backgroundPosition borderBottomColor borderBottomStyle ' + 
  'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' +
  'borderRightColor borderRightStyle borderRightWidth borderSpacing ' +
  'borderTopColor borderTopStyle borderTopWidth bottom clip color ' +
  'fontSize fontWeight height left letterSpacing lineHeight ' +
  'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+
  'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' +
  'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' +
  'right textIndent top width wordSpacing zIndex');
  
Element.CSS_LENGTH = /^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;

lib/Apache/UploadMeter/Resources/JavaScript.pm  view on Meta::CPAN

        } catch (e) {
            this.dispatchException(e);
        }

        if (json.finished) {
            this.stop();
            try {
                (this.options.onFinished || Prototype.emptyFunction)(json, last);
                UploadMeter.Responders.dispatch('onFinished', this, json, last);
            } catch (e) {
                this.dispatchException(e);
            }
        }
        this.__updategui(progress);
    },
     
    // Internal update function
    __updategui: function(len) {
        
        if (len > 100) {
            len = 100;
        }
        
        len = Util.formatDec(len);
        var temp = Builder.node( "div", {className:'meterunderlay slider'});
        this.main.appendChild(Element.hide(temp));
        temp = $(temp);
        Position.absolutize(temp);
        Position.clone(this.main, temp);

        temp.setStyle({
                       width: ((parseInt(this.main.getStyle('width')) * len / 100) - parseInt(this.ul.getStyle('width'))) + "px",
                        left:  (parseInt(this.ul.getStyle('left')) + parseInt(this.ul.getStyle('width'))) + "px"});
        Element.update(this.desc, len + "%");
        this.__slide(temp);
    },
    
    dispatchException: function(exception) {
        (this.options.onException || Prototype.emptyFunction)(this, exception);
        UploadMeter.Responders.dispatch('onException', this, exception);
    }   
    
};

// Global responder "hook" objects stolen from Ajax
UploadMeter.Responders = Object.extend({}, Ajax.Responders);
UploadMeter.Responders.responders = []; // Clear our responders
UploadMeter.Responders.dispatch = function(callback, meter, status, laststatus) {
    this.each(function(responder) {
      if (typeof responder[callback] == 'function') {
        try {
          responder[callback].apply(responder, [meter, status, laststatus]);
        } catch (e) {}
      }
    });
};
Object.extend(UploadMeter.Responders, Enumerable);

var Util = {
    formatTime: function(timestamp) {
        if (isNaN(timestamp)) {
            return timestamp;
        }
        
        if (!(isFinite(timestamp))) {
            return "Unknown";
        }
        
        var oH, oM, oS, str;
        
        str = "";
        oS = Math.floor(timestamp % 60);
        oM = Math.floor((timestamp / 60) % 60);
        oH = Math.floor(timestamp / 60 / 60);       
        
        if (oH > 0) {
            str = oH + ":";
        } 
        
        str = str + ((oM == 0) ? "00:" : ((oM < 10) ? "0" + oM + ":" : oM + ":"));
        str = str + ((oS == 0) ? "00" : ((oS < 10) ? "0" + oS : oS));
        
        return str;
    },
    formatDec: function (val) {
        sign = val < 0 ? "-":"";
        rval = Math.abs(Math.round(val*100));
        str = rval.toString();
        if(rval < 10) str = "0.0"+str;
        else if(rval < 100) str = "0."+str;
        else str = str.substring(0, str.length-2)
           + "." + str.substring(str.length-2, str.length);
        return sign+str;
    }
};

// Default behavior code
var aum_el;

function addMeterURL(url) {
    try {
      if (url.indexOf('?') >= 0) {
          return url + "&meter_id=" + meter_id;
      } else {
          return url + "?meter_id=" + meter_id;
      }
    } catch (e) {}
}

function aum_popup() {
    var aum = window.open(meter_url + "/styles/aum_popup.html" ,"_new","toolbar=no,location=no,directories=no,status=yes,menubar=no,scrollbars=no,resizeable=no,width=450,height=240");
    // Pass our info to the child window's global obj
    Object.extend(aum, {'meter_id': meter_id, 'meter_url': meter_url});
}

var rules={
    '.uploadform':function(el) {
      el.action = addMeterURL(el.action);
      aum_el = $(el); // Put this in a global so we can unregister later, if needed
      Event.observe(aum_el, 'submit', aum_popup);
    }



( run in 1.744 second using v1.01-cache-2.11-cpan-5a3173703d6 )