* [html5] fix styles in firefox & impl get/set selection range methods.


Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/2f3af6f6
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/2f3af6f6
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/2f3af6f6

Branch: refs/heads/master
Commit: 2f3af6f6fc97fdc32cfa15c06b8da6d098753553
Parents: 86cd036
Author: MrRaindrop <tekk...@gmail.com>
Authored: Tue Sep 12 15:20:17 2017 +0800
Committer: MrRaindrop <tekk...@gmail.com>
Committed: Tue Sep 12 15:20:17 2017 +0800

----------------------------------------------------------------------
 .../components/scrollable/loading-indicator.js  | 13 +++---
 .../render/vue/components/scrollable/style.css  | 22 ++++++----
 html5/render/vue/components/slider/indicator.js |  2 +
 .../render/vue/components/slider/slideMixin.js  | 13 +++++-
 html5/render/vue/components/slider/slider.css   |  6 +++
 html5/render/vue/components/switch.js           | 12 +++---
 html5/render/vue/components/text.js             |  3 ++
 html5/render/vue/env/event-manager.js           |  4 +-
 html5/render/vue/mixins/input-common.js         | 32 ++++++++++++++
 html5/render/vue/modules/animation.js           | 44 +++++++++++++++-----
 html5/render/vue/modules/modal/style.js         | 20 ++++++---
 html5/render/vue/styles/base.css                | 15 +++++++
 html5/render/vue/styles/reset.css               |  5 ++-
 html5/render/vue/utils/func.js                  |  5 ++-
 html5/render/vue/utils/style.js                 | 13 +++++-
 15 files changed, 166 insertions(+), 43 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f3af6f6/html5/render/vue/components/scrollable/loading-indicator.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/scrollable/loading-indicator.js 
b/html5/render/vue/components/scrollable/loading-indicator.js
index aa289bd..4fa2c7b 100644
--- a/html5/render/vue/components/scrollable/loading-indicator.js
+++ b/html5/render/vue/components/scrollable/loading-indicator.js
@@ -24,13 +24,15 @@ const _css = `
   width: 1rem !important;
   height: 1rem !important;
   -webkit-box-align: center;
+  -moz-box-align: center;
   -webkit-align-items: center;
-      -ms-flex-align: center;
-          align-items: center;
+  -ms-flex-align: center;
+  align-items: center;
   -webkit-box-pack: center;
+  -moz-box-pack: center;
   -webkit-justify-content: center;
-      -ms-flex-pack: center;
-          justify-content: center;
+  -ms-flex-pack: center;
+  justify-content: center;
   overflow: visible;
   background: none;
 }
@@ -47,7 +49,8 @@ const _css = `
   position: relative;
   text-indent: -9999em;
   -webkit-animation: weex-spinner 1.1s infinite ease;
-          animation: weex-spinner 1.1s infinite ease;
+  -moz-animation: weex-spinner 1.1s infinite ease;
+  animation: weex-spinner 1.1s infinite ease;
 }
 
 @-webkit-keyframes weex-spinner {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f3af6f6/html5/render/vue/components/scrollable/style.css
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/scrollable/style.css 
b/html5/render/vue/components/scrollable/style.css
index c90d2ea..f79ff7d 100644
--- a/html5/render/vue/components/scrollable/style.css
+++ b/html5/render/vue/components/scrollable/style.css
@@ -43,8 +43,10 @@ body > .weex-waterfall {
 
 .weex-waterfall-inner-columns {
   -webkit-flex-direction: row;
-      -ms-flex-direction: row;
-          flex-direction: row;
+  -moz-box-orient: horizontal;
+  -moz-box-direction: normal;
+  -ms-flex-direction: row;
+  flex-direction: row;
   -webkit-box-orient: horizontal;
 }
 
@@ -65,8 +67,10 @@ body > .weex-waterfall {
 
 .weex-scroller-horizontal .weex-scroller-inner {
   -webkit-flex-direction: row;
-      -ms-flex-direction: row;
-          flex-direction: row;
+  -ms-flex-direction: row;
+  -moz-box-orient: horizontal;
+  -moz-box-direction: normal;
+  flex-direction: row;
   -webkit-box-orient: horizontal;
   height: 100%;
 }
@@ -79,12 +83,14 @@ body > .weex-waterfall {
 .weex-loading {
   -webkit-box-align: center;
   -webkit-align-items: center;
-      -ms-flex-align: center;
-          align-items: center;
+  -moz-box-align: center;
+  -ms-flex-align: center;
+  align-items: center;
   -webkit-box-pack: center;
   -webkit-justify-content: center;
-      -ms-flex-pack: center;
-          justify-content: center;
+  -moz-box-pack: center;
+  -ms-flex-pack: center;
+  justify-content: center;
   width: 100%;
   overflow: hidden;
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f3af6f6/html5/render/vue/components/slider/indicator.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/slider/indicator.js 
b/html5/render/vue/components/slider/indicator.js
index 62b95a3..070f3f7 100644
--- a/html5/render/vue/components/slider/indicator.js
+++ b/html5/render/vue/components/slider/indicator.js
@@ -23,6 +23,8 @@ const _css = `
   z-index: 10;
   -webkit-flex-direction: row;
   -ms-flex-direction: row;
+  -moz-box-orient: horizontal;
+  -moz-box-direction: normal;
   flex-direction: row;
   -webkit-box-orient: horizontal;
   margin: 0;

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f3af6f6/html5/render/vue/components/slider/slideMixin.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/slider/slideMixin.js 
b/html5/render/vue/components/slider/slideMixin.js
index f160d58..710fbcb 100644
--- a/html5/render/vue/components/slider/slideMixin.js
+++ b/html5/render/vue/components/slider/slideMixin.js
@@ -190,8 +190,10 @@ export default {
         this.innerOffset += step * this._wrapperWidth
         // transform the whole slides group.
         inner.style.webkitTransition = `-webkit-transform ${TRANSITION_TIME / 
1000}s ease-in-out`
+        inner.style.mozTransition = `transform ${TRANSITION_TIME / 1000}s 
ease-in-out`
         inner.style.transition = `transform ${TRANSITION_TIME / 1000}s 
ease-in-out`
         inner.style.webkitTransform = `translate3d(${this.innerOffset}px, 0, 
0)`
+        inner.style.mozTransform = `translate3d(${this.innerOffset}px, 0, 0)`
         inner.style.transform = `translate3d(${this.innerOffset}px, 0, 0)`
 
         // emit scroll events.
@@ -213,12 +215,14 @@ export default {
 
           setTimeout(() => {
             inner.style.webkitTransition = ''
+            inner.style.mozTransition = ''
             inner.style.transition = ''
             for (let i = this._showStartIdx; i <= this._showEndIdx; i++) {
               const node = this._showNodes[i]
               if (!node) { continue }
               const elm = node.firstElementChild
               elm.style.webkitTransition = ''
+              elm.style.mozTransition = ''
               elm.style.transition = ''
             }
             // clean cloned nodes and rearrange slide cells.
@@ -488,6 +492,7 @@ export default {
       for (let i = this._showStartIdx; i <= this._showEndIdx; i++) {
         const elm = this._showNodes[i].firstElementChild
         elm.style.webkitTransition = `all ${NEIGHBOR_SCALE_TIME / 1000}s ease`
+        elm.style.mozTransition = `all ${NEIGHBOR_SCALE_TIME / 1000}s ease`
         elm.style.transition = `all ${NEIGHBOR_SCALE_TIME / 1000}s ease`
         const transObj = {
           scale: `scale(${i === 0 ? this.currentItemScale : 
this.neighborScale})`
@@ -531,8 +536,11 @@ export default {
     _handleTouchStart (event) {
       const touch = event.changedTouches[0]
       this._stopAutoPlay()
+      const inner = this.$refs.inner
       this._touchParams = {
-        originalTransform: this.$refs.inner.style.webkitTransform || 
this.$refs.inner.style.transform,
+        originalTransform: inner.style.webkitTransform
+          || inner.style.mozTransform
+          || inner.style.transform,
         startTouchEvent: touch,
         startX: touch.pageX,
         startY: touch.pageY,
@@ -577,8 +585,9 @@ export default {
         this._emitScrollEvent('scroll', {
           offsetXRatio: offsetX / this._wrapperWidth
         })
-        inner.style.transform = `translate3d(${this.innerOffset + offsetX}px, 
0, 0)`
         inner.style.webkitTransform = `translate3d(${this.innerOffset + 
offsetX}px, 0, 0)`
+        inner.style.mozTransform = `translate3d(${this.innerOffset + 
offsetX}px, 0, 0)`
+        inner.style.transform = `translate3d(${this.innerOffset + offsetX}px, 
0, 0)`
       }
     },
 

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f3af6f6/html5/render/vue/components/slider/slider.css
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/slider/slider.css 
b/html5/render/vue/components/slider/slider.css
index 8fe384b..c712278 100644
--- a/html5/render/vue/components/slider/slider.css
+++ b/html5/render/vue/components/slider/slider.css
@@ -27,6 +27,8 @@
   height: 100%;
   overflow: visible;
   -webkit-flex-direction: row;
+  -moz-box-orient: horizontal;
+  -moz-box-direction: normal;
   -ms-flex-direction: row;
   flex-direction: row;
   -webkit-box-orient: horizontal;
@@ -42,9 +44,13 @@
   overflow: hidden;
   -webkit-box-align: center;
   -webkit-align-items: center;
+  -moz-box-align: center;
+  -ms-flex-align: center;
   align-items: center;
   -webkit-box-pack: center;
   -webkit-justify-content: center;
+  -moz-box-pack: center;
+  -ms-flex-pack: center;
   justify-content: center;
 }
 

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f3af6f6/html5/render/vue/components/switch.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/switch.js 
b/html5/render/vue/components/switch.js
index 508957b..7f9562a 100644
--- a/html5/render/vue/components/switch.js
+++ b/html5/render/vue/components/switch.js
@@ -25,9 +25,9 @@ const _css = `
   position: relative;
   vertical-align: middle;
   -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
   box-sizing: content-box;
   background-clip: content-box;
   color: #64bd63;
@@ -38,7 +38,8 @@ const _css = `
   box-shadow: #dfdfdf 0 0 0 0 inset;
   border-radius: 0.8rem;
   -webkit-transition: border 0.4s, box-shadow 0.4s, background-color 1.2s;
-          transition: border 0.4s, box-shadow 0.4s, background-color 1.2s;
+  -moz-transition: border 0.4s, box-shadow 0.4s, background-color 1.2s;
+  transition: border 0.4s, box-shadow 0.4s, background-color 1.2s;
 }
 
 .weex-switch-checked {
@@ -66,7 +67,8 @@ const _css = `
   top: 0;
   left: 0;
   -webkit-transition: background-color 0.4s, left 0.2s;
-          transition: background-color 0.4s, left 0.2s;
+  -moz-transition: background-color 0.4s, left 0.2s;
+  transition: background-color 0.4s, left 0.2s;
 }
 
 .weex-switch-checked > .weex-switch-inner {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f3af6f6/html5/render/vue/components/text.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/components/text.js 
b/html5/render/vue/components/text.js
index 0ff66f4..7379bc6 100644
--- a/html5/render/vue/components/text.js
+++ b/html5/render/vue/components/text.js
@@ -28,7 +28,10 @@
 const _css = `
 .weex-text {
   display: -webkit-box;
+  display: -moz-box;
   -webkit-box-orient: vertical;
+  -moz-box-orient: vertical;
+  -moz-box-direction: normal;
   position: relative;
   white-space: pre-wrap;  /* not using 'pre': support auto line feed. */
   font-size: 0.426667rem;

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f3af6f6/html5/render/vue/env/event-manager.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/env/event-manager.js 
b/html5/render/vue/env/event-manager.js
index c2d714d..16057ca 100644
--- a/html5/render/vue/env/event-manager.js
+++ b/html5/render/vue/env/event-manager.js
@@ -79,9 +79,9 @@ function _init (doc) {
     doc.addEventListener(evt, function (e) {
       let el = e.target
       let vm = el.__vue__
-      while (!vm && el !== document.body) {
+      while (!vm && el && el !== document.body) {
         el = el.parentElement
-        vm = el.__vue__
+        vm = el && el.__vue__
       }
       if (!vm) {  // not a vue component.
         return

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f3af6f6/html5/render/vue/mixins/input-common.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/mixins/input-common.js 
b/html5/render/vue/mixins/input-common.js
index db86079..7568ff4 100644
--- a/html5/render/vue/mixins/input-common.js
+++ b/html5/render/vue/mixins/input-common.js
@@ -38,6 +38,38 @@ export default {
     blur () {
       this.$el && this.$el.blur()
     },
+
+    setSelectionRange (start: number, end: number) {
+      try {
+        this.$el.setSelectionRange(start, end)
+      }
+      catch (e) {
+        if (process.env.NODE_ENV === 'development') {
+          console.warn(`[vue-render] setSelectionRange is not supported.`)
+        }
+      }
+    },
+
+    getSelectionRange (callback: Function) {
+      try {
+        const selection = window.getSelection()
+        const str = selection.toString()
+        const selectionStart = this.$el.value.indexOf(str)
+        const selectionEnd = selectionStart === -1 ? selectionStart : 
selectionStart + str.length
+        callback && callback({
+          selectionStart,
+          selectionEnd
+        })
+      }
+      catch (e) {
+        callback && callback(new Error('[vue-render] getSelection is not 
supported.'))
+      }
+    },
+
+    getEditSelectionRange (callback: Function) {
+      return this.getSelectionRange(callback)
+    },
+
     // support enter key event
     createKeyboardEvent (events: {}) {
       const customKeyType = this.returnKeyType

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f3af6f6/html5/render/vue/modules/animation.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/modules/animation.js 
b/html5/render/vue/modules/animation.js
index bf94447..ce747c2 100644
--- a/html5/render/vue/modules/animation.js
+++ b/html5/render/vue/modules/animation.js
@@ -17,6 +17,30 @@
  * under the License.
  */
 const utils = {}
+let endEvent
+let styleName
+
+const EVENT_NAME_MAP = {
+  transition: 'transitionend',
+  WebkitTransition: 'webkitTransitionEnd',
+  MozTransition: 'mozTransitionEnd',
+  OTransition: 'oTransitionEnd',
+  msTransition: 'MSTransitionEnd'
+}
+
+function detectEvents () {
+  const testEl = document.createElement('div')
+  const style = testEl.style
+  for (const name in EVENT_NAME_MAP) {
+    if (name in style) {
+      endEvent = EVENT_NAME_MAP[name]
+      styleName = name
+      break
+    }
+  }
+}
+
+detectEvents()
 
 function transitionOnce (vnode, config, callback) {
   const {
@@ -47,19 +71,17 @@ function transitionOnce (vnode, config, callback) {
   dom && weex.utils.fireLazyload(dom, true)
 
   const transitionEndHandler = function (event) {
-    event.stopPropagation()
-    dom.removeEventListener('webkitTransitionEnd', transitionEndHandler)
-    dom.removeEventListener('transitionend', transitionEndHandler)
-    dom.style.transition = ''
-    dom.style.webkitTransition = ''
+    event && event.stopPropagation()
+    if (endEvent) {
+      dom.removeEventListener(endEvent, transitionEndHandler)
+      dom.style[styleName] = ''
+    }
     callback()
   }
-
-  dom.style.transition = transitionValue
-  dom.style.webkitTransition = transitionValue
-  dom.addEventListener('webkitTransitionEnd', transitionEndHandler)
-  dom.addEventListener('transitionend', transitionEndHandler)
-
+  if (endEvent) {
+    dom.style[styleName] = transitionValue
+    dom.addEventListener(endEvent, transitionEndHandler)
+  }
   nextFrame(() => {
     dom.style.cssText
       += toCSSText(autoPrefix(normalizeStyle(camelizeKeys(config.styles))) || 
{})

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f3af6f6/html5/render/vue/modules/modal/style.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/modules/modal/style.js 
b/html5/render/vue/modules/modal/style.js
index 510bb6c..2b005e1 100644
--- a/html5/render/vue/modules/modal/style.js
+++ b/html5/render/vue/modules/modal/style.js
@@ -32,11 +32,14 @@ export default `
   text-align: center;
   opacity: 0.7;
   -webkit-transition: all 0.4s ease-in-out;
-          transition: all 0.4s ease-in-out;
+  -moz-transition: all 0.4s ease-in-out;
+  -ms-transition: all 0.4s ease-in-out;
+  transition: all 0.4s ease-in-out;
   border-radius: 0.066667rem;
   -webkit-transform: translateX(-50%);
+  -moz-transform: translateX(-50%);
   -ms-transform: translateX(-50%);
-      transform: translateX(-50%);
+  transform: translateX(-50%);
 }
 
 .weex-toast.hide {
@@ -77,8 +80,9 @@ export default `
   min-height: 2.666667rem;
   border-radius: 0.066667rem;
   -webkit-transform: translate(-50%, -50%);
+  -moz-transform: translate(-50%, -50%);
   -ms-transform: translate(-50%, -50%);
-      transform: translate(-50%, -50%);
+  transform: translate(-50%, -50%);
   background-color: #fff;
 }
 
@@ -89,20 +93,26 @@ export default `
 .weex-modal-node .content {
   display: -webkit-box;
   display: -webkit-flex;
+  display: -moz-box;
   display: -ms-flexbox;
   display: flex;
   -webkit-box-orient: vertical;
   -webkit-flex-direction: column;
+  -moz-box-orient: vertical;
+  -moz-box-direction: normal;
   -ms-flex-direction: column;
       flex-direction: column;
   -webkit-box-align: center;
   -webkit-align-items: center;
   -ms-flex-align: center;
-      align-items: center;
+  -moz-box-align: center;
+  -ms-flex-align: center;
+  align-items: center;
   -webkit-box-pack: center;
   -webkit-justify-content: center;
+  -moz-box-pack: center;
   -ms-flex-pack: center;
-      justify-content: center;
+  justify-content: center;
   width: 100%;
   min-height: 1.866667rem;
   box-sizing: border-box;

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f3af6f6/html5/render/vue/styles/base.css
----------------------------------------------------------------------
diff --git a/html5/render/vue/styles/base.css b/html5/render/vue/styles/base.css
index 96beb83..f4263ea 100644
--- a/html5/render/vue/styles/base.css
+++ b/html5/render/vue/styles/base.css
@@ -26,6 +26,8 @@
 .weex-flex-ct {
   display: -webkit-box;
   display: -webkit-flex;
+  display: -moz-box;
+  display: -ms-flexbox;
   display: flex;
 }
 
@@ -33,21 +35,29 @@
   box-sizing: border-box;
   display: -webkit-box;
   display: -webkit-flex;
+  display: -moz-box;
+  display: -ms-flexbox;
   display: flex;
   position: relative;
   -webkit-box-orient: vertical;
   -webkit-flex-direction: column;
+  -moz-box-orient: vertical;
+  -moz-box-direction: normal;
+  -ms-flex-direction: column;
   flex-direction: column;
   -webkit-flex-shrink: 0;
   -ms-flex-negative: 0;
   flex-shrink: 0;
   -webkit-flex-grow: 0;
+  -moz-box-flex: 0;
   -ms-flex-grow: 0;
   flex-grow: 0;
   -webkit-flex-basis: auto;
+  -ms-flex-preferred-size: auto;
   flex-basis: auto;
   -webkit-box-align: stretch;
   -webkit-align-items: stretch;
+  -moz-box-align: stretch;
   -ms-flex-align: stretch;
   align-items: stretch;
   -webkit-align-content: flex-start;
@@ -62,6 +72,9 @@
 .weex-ct.horizontal {
   -webkit-box-orient: horizontal;
   -webkit-flex-direction: row;
+  -moz-box-orient: horizontal;
+  -moz-box-direction: normal;
+  -ms-flex-direction: row;
   flex-direction: row;
 }
 
@@ -73,9 +86,11 @@
   -ms-flex-negative: 0;
   flex-shrink: 0;
   -webkit-flex-grow: 0;
+  -moz-box-flex: 0;
   -ms-flex-grow: 0;
   flex-grow: 0;
   -webkit-flex-basis: auto;
+  -ms-flex-preferred-size: auto;
   flex-basis: auto;
   border: 0 solid black;
   margin: 0;

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f3af6f6/html5/render/vue/styles/reset.css
----------------------------------------------------------------------
diff --git a/html5/render/vue/styles/reset.css 
b/html5/render/vue/styles/reset.css
index cb334a0..b61de0f 100644
--- a/html5/render/vue/styles/reset.css
+++ b/html5/render/vue/styles/reset.css
@@ -43,8 +43,9 @@
 .weex-root *::after {
   box-sizing: border-box;
   -webkit-text-size-adjust: none;
-      -ms-text-size-adjust: none;
-          text-size-adjust: none;
+  -moz-text-size-adjust: none;
+  -ms-text-size-adjust: none;
+  text-size-adjust: none;
 }
 
 .weex-root a,

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f3af6f6/html5/render/vue/utils/func.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/utils/func.js b/html5/render/vue/utils/func.js
index d4112c47..4e77430 100644
--- a/html5/render/vue/utils/func.js
+++ b/html5/render/vue/utils/func.js
@@ -254,7 +254,10 @@ export function appendCss (css: string, cssId: string, 
replace: boolean) {
   style.appendChild(document.createTextNode(css))
 }
 export function nextFrame (callback: any) {
-  const runner = window.requestAnimationFrame || 
window.webkitRequestAnimationFrame || (cb => setTimeout(cb, 16))
+  const runner = window.requestAnimationFrame
+    || window.webkitRequestAnimationFrame
+    || window.mozRequestAnimationFrame
+    || (cb => setTimeout(cb, 16))
   runner(callback)
 }
 export function toCSSText (object: any) {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f3af6f6/html5/render/vue/utils/style.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/utils/style.js b/html5/render/vue/utils/style.js
index 482e01a..a992617 100644
--- a/html5/render/vue/utils/style.js
+++ b/html5/render/vue/utils/style.js
@@ -153,6 +153,8 @@ export function autoPrefix (style: {}): {} {
   const flex = prefixed.flex
   if (flex) {
     prefixed.WebkitBoxFlex = flex
+    prefixed.MozBoxFlex = flex
+    prefixed.MsFlex = flex
   }
   return prefixed
 }
@@ -195,7 +197,9 @@ export function normalizeStyle (style: {}) {
 export function getTransformObj (elm: HTMLElement): any {
   let styleObj = {}
   if (!elm) { return styleObj }
-  const transformStr = elm.style.webkitTransform || elm.style.transform
+  const transformStr = elm.style.webkitTransform
+    || elm.style.mozTransform
+    || elm.style.transform
   if (transformStr && transformStr.match(/(?: 
*(?:translate|rotate|scale)[^(]*\([^(]+\))+/i)) {
     styleObj = transformStr.trim().replace(/, +/g, ',').split(' 
').reduce(function (pre, str) {
       ['translate', 'scale', 'rotate'].forEach(function (name) {
@@ -243,6 +247,7 @@ export function addTransform (elm: HTMLElement, style: {}, 
replace: boolean): vo
   }
   const resStr = getTransformStr(styleObj)
   elm.style.webkitTransform = resStr
+  elm.style.mozTransform = resStr
   elm.style.transform = resStr
 }
 
@@ -260,6 +265,7 @@ export function addTranslateX (elm: HTMLElement, toAdd: 
number): void {
   })
   const resStr = getTransformStr(styleObj)
   elm.style.webkitTransform = resStr
+  elm.style.mozTransform = resStr
   elm.style.transform = resStr
 }
 
@@ -270,7 +276,9 @@ export function addTranslateX (elm: HTMLElement, toAdd: 
number): void {
 export function copyTransform (from: HTMLElement, to: HTMLElement, key: string 
| void): void {
   let str
   if (!key) {
-    str = from.style.webkitTransform || from.style.transform
+    str = from.style.webkitTransform
+      || from.style.mozTransform
+      || from.style.transform
   }
   else {
     const fromObj = getTransformObj(from)
@@ -280,6 +288,7 @@ export function copyTransform (from: HTMLElement, to: 
HTMLElement, key: string |
     str = getTransformStr(toObj)
   }
   to.style.webkitTransform = str
+  to.style.mozTransform = str
   to.style.transform = str
 }
 

Reply via email to