Installed leaflet in extlib
[mediagoblin.git] / extlib / leaflet / src / dom / transition / Transition.Native.js
diff --git a/extlib/leaflet/src/dom/transition/Transition.Native.js b/extlib/leaflet/src/dom/transition/Transition.Native.js
new file mode 100644 (file)
index 0000000..6ce16a6
--- /dev/null
@@ -0,0 +1,89 @@
+/*\r
+ * L.Transition native implementation that powers Leaflet animation \r
+ * in browsers that support CSS3 Transitions\r
+ */\r
+\r
+L.Transition = L.Transition.extend({\r
+       statics: (function() {\r
+               var transition = L.DomUtil.TRANSITION,\r
+                       transitionEnd = (transition == 'webkitTransition' || transition == 'OTransition' ? \r
+                               transition + 'End' : 'transitionend');\r
+               \r
+               return {\r
+                       NATIVE: !!transition,\r
+                       \r
+                       TRANSITION: transition,\r
+                       PROPERTY: transition + 'Property',\r
+                       DURATION: transition + 'Duration',\r
+                       EASING: transition + 'TimingFunction',\r
+                       END: transitionEnd,\r
+                       \r
+                       // transition-property value to use with each particular custom property\r
+                       CUSTOM_PROPS_PROPERTIES: {\r
+                               position: L.Browser.webkit ? L.DomUtil.TRANSFORM : 'top, left'\r
+                       }\r
+               };\r
+       })(),\r
+       \r
+       options: {\r
+               fakeStepInterval: 100\r
+       },\r
+       \r
+       initialize: function(/*HTMLElement*/ el, /*Object*/ options) {\r
+               this._el = el;\r
+               L.Util.setOptions(this, options);\r
+\r
+               L.DomEvent.addListener(el, L.Transition.END, this._onTransitionEnd, this);\r
+               this._onFakeStep = L.Util.bind(this._onFakeStep, this);\r
+       },\r
+       \r
+       run: function(/*Object*/ props) {\r
+               var prop,\r
+                       propsList = [],\r
+                       customProp = L.Transition.CUSTOM_PROPS_PROPERTIES;\r
+               \r
+               for (prop in props) {\r
+                       if (props.hasOwnProperty(prop)) {\r
+                               prop = customProp[prop] ? customProp[prop] : prop;\r
+                               prop = prop.replace(/([A-Z])/g, function(w) { return '-' + w.toLowerCase(); });\r
+                               propsList.push(prop);\r
+                       }\r
+               }\r
+               \r
+               this._el.style[L.Transition.DURATION] = this.options.duration + 's';\r
+               this._el.style[L.Transition.EASING] = this.options.easing;\r
+               this._el.style[L.Transition.PROPERTY] = propsList.join(', ');\r
+               \r
+               for (prop in props) {\r
+                       if (props.hasOwnProperty(prop)) {\r
+                               this._setProperty(prop, props[prop]);\r
+                       }\r
+               }\r
+               \r
+               this._inProgress = true;\r
+               \r
+               this.fire('start');\r
+               \r
+               if (L.Transition.NATIVE) {\r
+                       this._timer = setInterval(this._onFakeStep, this.options.fakeStepInterval);\r
+               } else {\r
+                       this._onTransitionEnd();\r
+               }\r
+       },\r
+       \r
+       _onFakeStep: function() {\r
+               this.fire('step');\r
+       },\r
+       \r
+       _onTransitionEnd: function() {\r
+               if (this._inProgress) {\r
+                       this._inProgress = false;\r
+                       clearInterval(this._timer);\r
+                       \r
+                       this._el.style[L.Transition.PROPERTY] = 'none';\r
+               \r
+                       this.fire('step');\r
+                       this.fire('end');\r
+               }\r
+       }\r
+});
\ No newline at end of file