mh-two-thousand-and-two
2024-04-12 3d2ec2fd0578d3ba0a414b0cc4e4a2ae60878596
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
const OPEN_TYPES = {
  'navigate': 'navigateTo',
  'redirect': 'redirectTo',
  'switchTab': 'switchTab',
  'reLaunch': 'reLaunch',
  'navigateBack': 'navigateBack'
}
 
function getNavigator (weex, uni) {
  return {
    name: 'Navigator',
    props: {
      url: {
        type: String,
        default: ''
      },
      openType: {
        type: String,
        default: 'navigate',
        validator (value) {
          return !!OPEN_TYPES[value]
        }
      },
      delta: {
        type: Number,
        default: 1
      },
      animationType: {
        type: String,
        default: 'pop-in/out'
      },
      animationTime: {
        type: Number,
        default: 300
      },
      hoverClass: {
        type: String,
        default: 'navigator-hover'
      },
      hoverStopPropagation: {
        type: Boolean,
        default: false
      },
      hoverStartTime: {
        type: [Number, String],
        default: 50
      },
      hoverStayTime: {
        type: [Number, String],
        default: 600
      }
    },
    methods: {
      _click: function _click () {
        if (this.openType === 'navigateBack') {
          return uni.navigateBack({
            delta: this.delta
          })
        }
        if (!this.url) {
          console.error(
            '<navigator/> should have url attribute when using navigateTo, redirectTo, reLaunch or switchTab'
          )
          return
        }
        uni[OPEN_TYPES[this.openType]]({
          url: this.url
        })
      }
    },
    render (createElement) {
      const _vm = this
      return createElement('view', _vm._g({
        attrs: {
          'hoverClass': _vm.hoverClass,
          'hoverStopPropagation': _vm.hoverStopPropagation,
          'hoverStartTime': _vm.hoverStartTime,
          'hoverStayTime': _vm.hoverStayTime
        },
        on: {
          'click': _vm._click
        }
      }, _vm.$listeners), [_vm._t('default')], 2)
    },
    style: {
      'navigator-hover': {
        'backgroundColor': 'rgba(0,0,0,0.1)',
        'opacity': 0.7
      }
    }
  }
}
 
export default function init (Vue, weex, instanceContext) {
  Vue.component('navigator', getNavigator(weex, instanceContext.uni))
}