| var pullDown = { | 
|     threshold: 95, | 
|     maxHeight: 200, | 
|     callRefresh: 'onrefresh', | 
|     callPullingDown: 'onpullingdown', | 
|     refreshSelector: '.uni-refresh' | 
| }; | 
|   | 
| function ready(newValue, oldValue, ownerInstance, instance) { | 
|     var state = instance.getState() | 
|     state.canPullDown = newValue; | 
|     // console.log(newValue); | 
| } | 
|   | 
| function touchStart(e, instance) { | 
|     var state = instance.getState(); | 
|     state.refreshInstance = instance.selectComponent(pullDown.refreshSelector); | 
|     state.canPullDown = (state.refreshInstance != null && state.refreshInstance != undefined); | 
|     if (!state.canPullDown) { | 
|         return | 
|     } | 
|   | 
|     // console.log("touchStart"); | 
|   | 
|     state.height = 0; | 
|     state.touchStartY = e.touches[0].pageY || e.changedTouches[0].pageY; | 
|     state.refreshInstance.setStyle({ | 
|         'height': 0 | 
|     }); | 
|     state.refreshInstance.callMethod("onchange", true); | 
| } | 
|   | 
| function touchMove(e, ownerInstance) { | 
|     var instance = e.instance; | 
|     var state = instance.getState(); | 
|     if (!state.canPullDown) { | 
|         return | 
|     } | 
|   | 
|     var oldHeight = state.height; | 
|     var endY = e.touches[0].pageY || e.changedTouches[0].pageY; | 
|     var height = endY - state.touchStartY; | 
|     if (height > pullDown.maxHeight) { | 
|         return; | 
|     } | 
|   | 
|     var refreshInstance = state.refreshInstance; | 
|     refreshInstance.setStyle({ | 
|         'height': height + 'px' | 
|     }); | 
|   | 
|     height = height < pullDown.maxHeight ? height : pullDown.maxHeight; | 
|     state.height = height; | 
|     refreshInstance.callMethod(pullDown.callPullingDown, { | 
|         height: height | 
|     }); | 
| } | 
|   | 
| function touchEnd(e, ownerInstance) { | 
|     var state = e.instance.getState(); | 
|     if (!state.canPullDown) { | 
|         return | 
|     } | 
|   | 
|     state.refreshInstance.callMethod("onchange", false); | 
|   | 
|     var refreshInstance = state.refreshInstance; | 
|     if (state.height > pullDown.threshold) { | 
|         refreshInstance.callMethod(pullDown.callRefresh); | 
|         return; | 
|     } | 
|   | 
|     refreshInstance.setStyle({ | 
|         'height': 0 | 
|     }); | 
| } | 
|   | 
| function propObserver(newValue, oldValue, instance) { | 
|     pullDown = newValue; | 
| } | 
|   | 
| module.exports = { | 
|     touchmove: touchMove, | 
|     touchstart: touchStart, | 
|     touchend: touchEnd, | 
|     propObserver: propObserver | 
| } |