From c5ba5b0456a711d157e317f220e9c739226e7f50 Mon Sep 17 00:00:00 2001 From: Joar Wandborg Date: Tue, 10 Jan 2012 01:54:37 +0100 Subject: Installed leaflet in extlib --- .../leaflet/src/dom/transition/Transition.Timer.js | 124 +++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 extlib/leaflet/src/dom/transition/Transition.Timer.js (limited to 'extlib/leaflet/src/dom/transition/Transition.Timer.js') diff --git a/extlib/leaflet/src/dom/transition/Transition.Timer.js b/extlib/leaflet/src/dom/transition/Transition.Timer.js new file mode 100644 index 00000000..af4e4ef2 --- /dev/null +++ b/extlib/leaflet/src/dom/transition/Transition.Timer.js @@ -0,0 +1,124 @@ +/* + * L.Transition fallback implementation that powers Leaflet animation + * in browsers that don't support CSS3 Transitions + */ + +L.Transition = L.Transition.NATIVE ? L.Transition : L.Transition.extend({ + statics: { + getTime: Date.now || function() { return +new Date(); }, + + TIMER: true, + + EASINGS: { + 'ease': [0.25, 0.1, 0.25, 1.0], + 'linear': [0.0, 0.0, 1.0, 1.0], + 'ease-in': [0.42, 0, 1.0, 1.0], + 'ease-out': [0, 0, 0.58, 1.0], + 'ease-in-out': [0.42, 0, 0.58, 1.0] + }, + + CUSTOM_PROPS_GETTERS: { + position: L.DomUtil.getPosition + }, + + //used to get units from strings like "10.5px" (->px) + UNIT_RE: /^[\d\.]+(\D*)$/ + }, + + options: { + fps: 50 + }, + + initialize: function(el, options) { + this._el = el; + L.Util.extend(this.options, options); + + var easings = L.Transition.EASINGS[this.options.easing] || L.Transition.EASINGS['ease']; + + this._p1 = new L.Point(0, 0); + this._p2 = new L.Point(easings[0], easings[1]); + this._p3 = new L.Point(easings[2], easings[3]); + this._p4 = new L.Point(1, 1); + + this._step = L.Util.bind(this._step, this); + this._interval = Math.round(1000 / this.options.fps); + }, + + run: function(props) { + this._props = {}; + + var getters = L.Transition.CUSTOM_PROPS_GETTERS, + re = L.Transition.UNIT_RE; + + this.fire('start'); + + for (var prop in props) { + if (props.hasOwnProperty(prop)) { + var p = {}; + if (prop in getters) { + p.from = getters[prop](this._el); + } else { + var matches = this._el.style[prop].match(re); + p.from = parseFloat(matches[0]); + p.unit = matches[1]; + } + p.to = props[prop]; + this._props[prop] = p; + } + } + + clearInterval(this._timer); + this._timer = setInterval(this._step, this._interval); + this._startTime = L.Transition.getTime(); + }, + + _step: function() { + var time = L.Transition.getTime(), + elapsed = time - this._startTime, + duration = this.options.duration * 1000; + + if (elapsed < duration) { + this._runFrame(this._cubicBezier(elapsed / duration)); + } else { + this._runFrame(1); + this._complete(); + } + }, + + _runFrame: function(percentComplete) { + var setters = L.Transition.CUSTOM_PROPS_SETTERS, + prop, p, value; + + for (prop in this._props) { + if (this._props.hasOwnProperty(prop)) { + p = this._props[prop]; + if (prop in setters) { + value = p.to.subtract(p.from).multiplyBy(percentComplete).add(p.from); + setters[prop](this._el, value); + } else { + this._el.style[prop] = + ((p.to - p.from) * percentComplete + p.from) + p.unit; + } + } + } + this.fire('step'); + }, + + _complete: function() { + clearInterval(this._timer); + this.fire('end'); + }, + + _cubicBezier: function(t) { + var a = Math.pow(1 - t, 3), + b = 3 * Math.pow(1 - t, 2) * t, + c = 3 * (1 - t) * Math.pow(t, 2), + d = Math.pow(t, 3), + p1 = this._p1.multiplyBy(a), + p2 = this._p2.multiplyBy(b), + p3 = this._p3.multiplyBy(c), + p4 = this._p4.multiplyBy(d); + + return p1.add(p2).add(p3).add(p4).y; + } +}); \ No newline at end of file -- cgit v1.2.3