dnet45/modules/uoa-repository-dashboard-gui/trunk/src/public/js/core/toggle.js @ 46812
1 |
import { $, hasTouch, isTouch, pointerEnter, pointerLeave, query } from '../util/index'; |
---|---|
2 |
|
3 |
export default function (UIkit) { |
4 |
|
5 |
UIkit.component('toggle', { |
6 |
|
7 |
mixins: [UIkit.mixin.toggable], |
8 |
|
9 |
args: 'target', |
10 |
|
11 |
props: { |
12 |
href: String, |
13 |
target: null, |
14 |
mode: 'list', |
15 |
media: 'media' |
16 |
},
|
17 |
|
18 |
defaults: { |
19 |
href: false, |
20 |
target: false, |
21 |
mode: 'click', |
22 |
queued: true, |
23 |
media: false |
24 |
},
|
25 |
|
26 |
computed: { |
27 |
|
28 |
target() { |
29 |
return query(this.$props.target || this.href, this.$el) || this.$el; |
30 |
}
|
31 |
|
32 |
},
|
33 |
|
34 |
events: [ |
35 |
|
36 |
{
|
37 |
|
38 |
name: `${pointerEnter} ${pointerLeave}`, |
39 |
|
40 |
filter() { |
41 |
return ~this.mode.indexOf('hover'); |
42 |
},
|
43 |
|
44 |
handler(e) { |
45 |
if (!isTouch(e)) { |
46 |
this.toggle(`toggle${e.type === pointerEnter ? 'show' : 'hide'}`); |
47 |
}
|
48 |
}
|
49 |
|
50 |
},
|
51 |
|
52 |
{
|
53 |
|
54 |
name: 'click', |
55 |
|
56 |
filter() { |
57 |
return ~this.mode.indexOf('click') || hasTouch; |
58 |
},
|
59 |
|
60 |
handler(e) { |
61 |
|
62 |
if (!isTouch(e) && !~this.mode.indexOf('click')) { |
63 |
return; |
64 |
}
|
65 |
|
66 |
// TODO better isToggled handling
|
67 |
var link = $(e.target).closest('a[href]'); |
68 |
if ($(e.target).closest('a[href="#"], button').length |
69 |
|| link.length && ( |
70 |
this.cls |
71 |
|| !this.target.is(':visible') |
72 |
|| link.attr('href')[0] === '#' && this.target.is(link.attr('href')) |
73 |
)
|
74 |
) { |
75 |
e.preventDefault(); |
76 |
}
|
77 |
|
78 |
this.toggle(); |
79 |
}
|
80 |
|
81 |
}
|
82 |
],
|
83 |
|
84 |
update: { |
85 |
|
86 |
write() { |
87 |
|
88 |
if (!~this.mode.indexOf('media') || !this.media) { |
89 |
return; |
90 |
}
|
91 |
|
92 |
var toggled = this.isToggled(this.target); |
93 |
if (window.matchMedia(this.media).matches ? !toggled : toggled) { |
94 |
this.toggle(); |
95 |
}
|
96 |
|
97 |
},
|
98 |
|
99 |
events: ['load', 'resize'] |
100 |
|
101 |
},
|
102 |
|
103 |
methods: { |
104 |
|
105 |
toggle(type) { |
106 |
|
107 |
var event = $.Event(type || 'toggle'); |
108 |
this.target.triggerHandler(event, [this]); |
109 |
|
110 |
if (!event.isDefaultPrevented()) { |
111 |
this.toggleElement(this.target); |
112 |
}
|
113 |
}
|
114 |
|
115 |
}
|
116 |
|
117 |
});
|
118 |
|
119 |
}
|
- « Previous
- 1
- …
- 26
- 27
- 28
- Next »