quasar 1.17.1 → 1.17.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/LoadingBar.json +1 -1
- package/dist/api/QAjaxBar.json +23 -4
- package/dist/icon-set/bootstrap-icons.umd.min.js +1 -1
- package/dist/icon-set/eva-icons.umd.min.js +1 -1
- package/dist/icon-set/fontawesome-v5-pro.umd.min.js +1 -1
- package/dist/icon-set/fontawesome-v5.umd.min.js +1 -1
- package/dist/icon-set/ionicons-v4.umd.min.js +1 -1
- package/dist/icon-set/line-awesome.umd.min.js +1 -1
- package/dist/icon-set/material-icons-outlined.umd.min.js +1 -1
- package/dist/icon-set/material-icons-round.umd.min.js +1 -1
- package/dist/icon-set/material-icons-sharp.umd.min.js +1 -1
- package/dist/icon-set/material-icons.umd.min.js +1 -1
- package/dist/icon-set/mdi-v3.umd.min.js +1 -1
- package/dist/icon-set/mdi-v4.umd.min.js +1 -1
- package/dist/icon-set/mdi-v5.umd.min.js +1 -1
- package/dist/icon-set/mdi-v6.umd.min.js +1 -1
- package/dist/icon-set/svg-bootstrap-icons.umd.min.js +1 -1
- package/dist/icon-set/svg-eva-icons.umd.min.js +1 -1
- package/dist/icon-set/svg-fontawesome-v5.umd.min.js +1 -1
- package/dist/icon-set/svg-ionicons-v4.umd.min.js +1 -1
- package/dist/icon-set/svg-ionicons-v5.umd.min.js +1 -1
- package/dist/icon-set/svg-ionicons-v6.umd.min.js +1 -1
- package/dist/icon-set/svg-line-awesome.umd.min.js +1 -1
- package/dist/icon-set/svg-material-icons-outlined.umd.min.js +1 -1
- package/dist/icon-set/svg-material-icons-round.umd.min.js +1 -1
- package/dist/icon-set/svg-material-icons-sharp.umd.min.js +1 -1
- package/dist/icon-set/svg-material-icons.umd.min.js +1 -1
- package/dist/icon-set/svg-mdi-v4.umd.min.js +1 -1
- package/dist/icon-set/svg-mdi-v5.umd.min.js +1 -1
- package/dist/icon-set/svg-mdi-v6.umd.min.js +1 -1
- package/dist/icon-set/svg-themify.umd.min.js +1 -1
- package/dist/icon-set/themify.umd.min.js +1 -1
- package/dist/lang/ar.umd.min.js +1 -1
- package/dist/lang/az-latn.umd.min.js +1 -1
- package/dist/lang/bg.umd.min.js +1 -1
- package/dist/lang/ca.umd.min.js +1 -1
- package/dist/lang/cs.umd.min.js +1 -1
- package/dist/lang/da.umd.min.js +1 -1
- package/dist/lang/de.umd.min.js +1 -1
- package/dist/lang/el.umd.min.js +1 -1
- package/dist/lang/en-gb.umd.min.js +1 -1
- package/dist/lang/en-us.umd.min.js +1 -1
- package/dist/lang/eo.umd.min.js +1 -1
- package/dist/lang/es.umd.min.js +1 -1
- package/dist/lang/et.umd.min.js +1 -1
- package/dist/lang/fa-ir.umd.min.js +1 -1
- package/dist/lang/fa.umd.min.js +1 -1
- package/dist/lang/fi.umd.min.js +1 -1
- package/dist/lang/fr.umd.min.js +1 -1
- package/dist/lang/gn.umd.min.js +1 -1
- package/dist/lang/he.umd.min.js +1 -1
- package/dist/lang/hr.umd.min.js +1 -1
- package/dist/lang/hu.umd.min.js +1 -1
- package/dist/lang/id.umd.min.js +1 -1
- package/dist/lang/is.umd.min.js +1 -1
- package/dist/lang/it.umd.min.js +1 -1
- package/dist/lang/ja.umd.min.js +1 -1
- package/dist/lang/km.umd.min.js +1 -1
- package/dist/lang/ko-kr.umd.min.js +1 -1
- package/dist/lang/kur-ckb.umd.min.js +1 -1
- package/dist/lang/lu.umd.min.js +1 -1
- package/dist/lang/lv.umd.min.js +1 -1
- package/dist/lang/ml.umd.min.js +1 -1
- package/dist/lang/ms.umd.min.js +1 -1
- package/dist/lang/nb-no.umd.min.js +1 -1
- package/dist/lang/nl.umd.min.js +1 -1
- package/dist/lang/pl.umd.min.js +1 -1
- package/dist/lang/pt-br.umd.min.js +1 -1
- package/dist/lang/pt.umd.min.js +1 -1
- package/dist/lang/ro.umd.min.js +1 -1
- package/dist/lang/ru.umd.min.js +1 -1
- package/dist/lang/sk.umd.min.js +1 -1
- package/dist/lang/sl.umd.min.js +1 -1
- package/dist/lang/sr.umd.min.js +1 -1
- package/dist/lang/sv.umd.min.js +1 -1
- package/dist/lang/ta.umd.min.js +1 -1
- package/dist/lang/th.umd.min.js +1 -1
- package/dist/lang/tr.umd.min.js +1 -1
- package/dist/lang/ug.umd.min.js +1 -1
- package/dist/lang/uk.umd.min.js +1 -1
- package/dist/lang/vi.umd.min.js +1 -1
- package/dist/lang/zh-hans.umd.min.js +1 -1
- package/dist/lang/zh-hant.umd.min.js +1 -1
- package/dist/quasar.addon.css +1 -1
- package/dist/quasar.addon.rtl.css +1 -1
- package/dist/quasar.common.js +2 -2
- package/dist/quasar.css +1 -1
- package/dist/quasar.esm.js +2 -2
- package/dist/quasar.ie.polyfills.js +1 -1
- package/dist/quasar.ie.polyfills.umd.min.js +1 -1
- package/dist/quasar.rtl.css +1 -1
- package/dist/quasar.sass +1 -1
- package/dist/quasar.styl +1 -1
- package/dist/quasar.umd.js +143 -58
- package/dist/quasar.umd.min.js +2 -2
- package/dist/quasar.umd.modern.js +141 -58
- package/dist/quasar.umd.modern.min.js +2 -2
- package/dist/types/index.d.ts +6 -2
- package/dist/vetur/quasar-attributes.json +7 -3
- package/dist/vetur/quasar-tags.json +2 -1
- package/dist/web-types/web-types.json +14 -5
- package/package.json +1 -1
- package/src/components/ajax-bar/QAjaxBar.js +48 -26
- package/src/components/ajax-bar/QAjaxBar.json +22 -4
- package/src/components/icon/QIcon.js +42 -30
- package/src/components/icon/QIcon.sass +0 -1
- package/src/components/icon/QIcon.styl +0 -1
- package/src/components/layout/QLayout.js +49 -0
- package/src/plugins/LoadingBar.json +1 -1
package/dist/types/index.d.ts
CHANGED
|
@@ -984,14 +984,18 @@ export interface QAjaxBar extends Vue {
|
|
|
984
984
|
* Color name for component from the Quasar Color Palette
|
|
985
985
|
*/
|
|
986
986
|
color? : string
|
|
987
|
+
/**
|
|
988
|
+
* Reverse direction of progress
|
|
989
|
+
*/
|
|
990
|
+
reverse? : boolean
|
|
987
991
|
/**
|
|
988
992
|
* Skip Ajax hijacking (not a reactive prop)
|
|
989
993
|
*/
|
|
990
994
|
skipHijack? : boolean
|
|
991
995
|
/**
|
|
992
|
-
*
|
|
996
|
+
* Filter which URL should trigger start() + stop()
|
|
993
997
|
*/
|
|
994
|
-
|
|
998
|
+
hijackFilter? : Function
|
|
995
999
|
/**
|
|
996
1000
|
* Notify bar you are waiting for a new process to finish
|
|
997
1001
|
* @param speed Delay (in milliseconds) between progress auto-increments; If delay is 0 then it disables auto-incrementing
|
|
@@ -11,13 +11,17 @@
|
|
|
11
11
|
"type": "string",
|
|
12
12
|
"description": "Color name for component from the Quasar Color Palette"
|
|
13
13
|
},
|
|
14
|
+
"q-ajax-bar/reverse": {
|
|
15
|
+
"type": "boolean",
|
|
16
|
+
"description": "Reverse direction of progress"
|
|
17
|
+
},
|
|
14
18
|
"q-ajax-bar/skip-hijack": {
|
|
15
19
|
"type": "boolean",
|
|
16
20
|
"description": "Skip Ajax hijacking (not a reactive prop)"
|
|
17
21
|
},
|
|
18
|
-
"q-ajax-bar/
|
|
19
|
-
"type": "
|
|
20
|
-
"description": "
|
|
22
|
+
"q-ajax-bar/hijack-filter": {
|
|
23
|
+
"type": "function",
|
|
24
|
+
"description": "Filter which URL should trigger start() + stop()"
|
|
21
25
|
},
|
|
22
26
|
"q-avatar/size": {
|
|
23
27
|
"type": "string",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "",
|
|
3
3
|
"framework": "vue",
|
|
4
4
|
"name": "quasar",
|
|
5
|
-
"version": "1.17.
|
|
5
|
+
"version": "1.17.2",
|
|
6
6
|
"contributions": {
|
|
7
7
|
"html": {
|
|
8
8
|
"types-syntax": "typescript",
|
|
@@ -44,24 +44,33 @@
|
|
|
44
44
|
"doc-url": "https://v1.quasar.dev/vue-components/ajax-bar"
|
|
45
45
|
},
|
|
46
46
|
{
|
|
47
|
-
"name": "
|
|
47
|
+
"name": "reverse",
|
|
48
48
|
"value": {
|
|
49
49
|
"kind": "expression",
|
|
50
50
|
"type": "boolean"
|
|
51
51
|
},
|
|
52
|
-
"description": "
|
|
52
|
+
"description": "Reverse direction of progress",
|
|
53
53
|
"doc-url": "https://v1.quasar.dev/vue-components/ajax-bar",
|
|
54
54
|
"type": "boolean"
|
|
55
55
|
},
|
|
56
56
|
{
|
|
57
|
-
"name": "
|
|
57
|
+
"name": "skip-hijack",
|
|
58
58
|
"value": {
|
|
59
59
|
"kind": "expression",
|
|
60
60
|
"type": "boolean"
|
|
61
61
|
},
|
|
62
|
-
"description": "
|
|
62
|
+
"description": "Skip Ajax hijacking (not a reactive prop)",
|
|
63
63
|
"doc-url": "https://v1.quasar.dev/vue-components/ajax-bar",
|
|
64
64
|
"type": "boolean"
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"name": "hijack-filter",
|
|
68
|
+
"value": {
|
|
69
|
+
"kind": "expression",
|
|
70
|
+
"type": "Function"
|
|
71
|
+
},
|
|
72
|
+
"description": "Filter which URL should trigger start() + stop()",
|
|
73
|
+
"doc-url": "https://v1.quasar.dev/vue-components/ajax-bar"
|
|
65
74
|
}
|
|
66
75
|
],
|
|
67
76
|
"events": [
|
package/package.json
CHANGED
|
@@ -6,22 +6,22 @@ import { ariaHidden } from '../../mixins/attrs'
|
|
|
6
6
|
|
|
7
7
|
const
|
|
8
8
|
xhr = isSSR ? null : XMLHttpRequest,
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
stackStop = []
|
|
9
|
+
open = isSSR ? null : xhr.prototype.open,
|
|
10
|
+
positionValues = [ 'top', 'right', 'bottom', 'left' ]
|
|
12
11
|
|
|
12
|
+
let stack = []
|
|
13
13
|
let highjackCount = 0
|
|
14
14
|
|
|
15
15
|
function translate ({ p, pos, active, horiz, reverse, dir }) {
|
|
16
16
|
let x = 1, y = 1
|
|
17
17
|
|
|
18
|
-
if (horiz) {
|
|
19
|
-
if (reverse) { x = -1 }
|
|
18
|
+
if (horiz === true) {
|
|
19
|
+
if (reverse === true) { x = -1 }
|
|
20
20
|
if (pos === 'bottom') { y = -1 }
|
|
21
21
|
return { transform: `translate3d(${x * (p - 100)}%,${active ? 0 : y * -200}%,0)` }
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
if (reverse) { y = -1 }
|
|
24
|
+
if (reverse === true) { y = -1 }
|
|
25
25
|
if (pos === 'right') { x = -1 }
|
|
26
26
|
return { transform: `translate3d(${active ? 0 : dir * x * -200}%,${y * (p - 100)}%,0)` }
|
|
27
27
|
}
|
|
@@ -47,32 +47,46 @@ function inc (p, amount) {
|
|
|
47
47
|
return between(p + amount, 0, 100)
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
function highjackAjax (
|
|
51
|
-
stackStart.push(start)
|
|
52
|
-
stackStop.push(stop)
|
|
53
|
-
|
|
50
|
+
function highjackAjax (stackEntry) {
|
|
54
51
|
highjackCount++
|
|
55
52
|
|
|
53
|
+
stack.push(stackEntry)
|
|
54
|
+
|
|
56
55
|
if (highjackCount > 1) { return }
|
|
57
56
|
|
|
58
|
-
function
|
|
59
|
-
|
|
60
|
-
|
|
57
|
+
xhr.prototype.open = function (_, url) {
|
|
58
|
+
const stopStack = []
|
|
59
|
+
|
|
60
|
+
const loadStart = () => {
|
|
61
|
+
stack.forEach(entry => {
|
|
62
|
+
const hijackFilter = entry.getHijackFilter()
|
|
63
|
+
if (
|
|
64
|
+
hijackFilter === null ||
|
|
65
|
+
hijackFilter(url) === true
|
|
66
|
+
) {
|
|
67
|
+
entry.start()
|
|
68
|
+
stopStack.push(entry.stop)
|
|
69
|
+
}
|
|
70
|
+
})
|
|
71
|
+
}
|
|
61
72
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
73
|
+
const loadEnd = () => {
|
|
74
|
+
stopStack.forEach(stop => { stop() })
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
this.addEventListener('loadstart', loadStart, { once: true })
|
|
78
|
+
this.addEventListener('loadend', loadEnd, { once: true })
|
|
79
|
+
|
|
80
|
+
open.apply(this, arguments)
|
|
66
81
|
}
|
|
67
82
|
}
|
|
68
83
|
|
|
69
|
-
function restoreAjax (start
|
|
70
|
-
|
|
71
|
-
stackStop.splice(stackStop.indexOf(stop), 1)
|
|
84
|
+
function restoreAjax (start) {
|
|
85
|
+
stack = stack.filter(entry => entry.start !== start)
|
|
72
86
|
|
|
73
87
|
highjackCount = Math.max(0, highjackCount - 1)
|
|
74
88
|
if (!highjackCount) {
|
|
75
|
-
xhr.prototype.
|
|
89
|
+
xhr.prototype.open = open
|
|
76
90
|
}
|
|
77
91
|
}
|
|
78
92
|
|
|
@@ -83,15 +97,19 @@ export default Vue.extend({
|
|
|
83
97
|
position: {
|
|
84
98
|
type: String,
|
|
85
99
|
default: 'top',
|
|
86
|
-
validator: val =>
|
|
100
|
+
validator: val => positionValues.includes(val)
|
|
87
101
|
},
|
|
102
|
+
|
|
88
103
|
size: {
|
|
89
104
|
type: String,
|
|
90
105
|
default: '2px'
|
|
91
106
|
},
|
|
107
|
+
|
|
92
108
|
color: String,
|
|
109
|
+
reverse: Boolean,
|
|
110
|
+
|
|
93
111
|
skipHijack: Boolean,
|
|
94
|
-
|
|
112
|
+
hijackFilter: Function
|
|
95
113
|
},
|
|
96
114
|
|
|
97
115
|
data () {
|
|
@@ -119,7 +137,7 @@ export default Vue.extend({
|
|
|
119
137
|
active,
|
|
120
138
|
horiz: this.horizontal,
|
|
121
139
|
reverse: this.$q.lang.rtl === true && ['top', 'bottom'].includes(this.position)
|
|
122
|
-
?
|
|
140
|
+
? this.reverse === false
|
|
123
141
|
: this.reverse,
|
|
124
142
|
dir: this.$q.lang.rtl === true ? -1 : 1
|
|
125
143
|
})
|
|
@@ -224,13 +242,17 @@ export default Vue.extend({
|
|
|
224
242
|
mounted () {
|
|
225
243
|
if (this.skipHijack !== true) {
|
|
226
244
|
this.hijacked = true
|
|
227
|
-
highjackAjax(
|
|
245
|
+
highjackAjax({
|
|
246
|
+
start: this.start,
|
|
247
|
+
stop: this.stop,
|
|
248
|
+
getHijackFilter: () => this.hijackFilter || null
|
|
249
|
+
})
|
|
228
250
|
}
|
|
229
251
|
},
|
|
230
252
|
|
|
231
253
|
beforeDestroy () {
|
|
232
254
|
clearTimeout(this.timer)
|
|
233
|
-
this.hijacked === true && restoreAjax(this.start
|
|
255
|
+
this.hijacked === true && restoreAjax(this.start)
|
|
234
256
|
},
|
|
235
257
|
|
|
236
258
|
render (h) {
|
|
@@ -22,16 +22,34 @@
|
|
|
22
22
|
"extends": "color"
|
|
23
23
|
},
|
|
24
24
|
|
|
25
|
-
"
|
|
25
|
+
"reverse": {
|
|
26
26
|
"type": "Boolean",
|
|
27
|
-
"desc": "
|
|
27
|
+
"desc": "Reverse direction of progress",
|
|
28
28
|
"category": "behavior"
|
|
29
29
|
},
|
|
30
30
|
|
|
31
|
-
"
|
|
31
|
+
"skip-hijack": {
|
|
32
32
|
"type": "Boolean",
|
|
33
|
-
"desc": "
|
|
33
|
+
"desc": "Skip Ajax hijacking (not a reactive prop)",
|
|
34
34
|
"category": "behavior"
|
|
35
|
+
},
|
|
36
|
+
|
|
37
|
+
"hijack-filter": {
|
|
38
|
+
"type": "Function",
|
|
39
|
+
"desc": "Filter which URL should trigger start() + stop()",
|
|
40
|
+
"params": {
|
|
41
|
+
"url": {
|
|
42
|
+
"type": "String",
|
|
43
|
+
"desc": "The URL being triggered",
|
|
44
|
+
"examples": [ "https://some.url/path" ]
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"returns": {
|
|
48
|
+
"type": "Boolean",
|
|
49
|
+
"desc": "Should the URL received as param trigger start() + stop()?"
|
|
50
|
+
},
|
|
51
|
+
"category": "behavior",
|
|
52
|
+
"addedIn": "v1.17.2"
|
|
35
53
|
}
|
|
36
54
|
},
|
|
37
55
|
|
|
@@ -6,6 +6,8 @@ import ListenersMixin from '../../mixins/listeners.js'
|
|
|
6
6
|
|
|
7
7
|
import { slot, mergeSlot } from '../../utils/slot.js'
|
|
8
8
|
|
|
9
|
+
const defaultViewBox = '0 0 24 24'
|
|
10
|
+
|
|
9
11
|
const sameFn = i => i
|
|
10
12
|
const ionFn = i => `ionicons ${i}`
|
|
11
13
|
|
|
@@ -66,10 +68,7 @@ export default Vue.extend({
|
|
|
66
68
|
let icon = this.name
|
|
67
69
|
|
|
68
70
|
if (!icon) {
|
|
69
|
-
return {
|
|
70
|
-
none: true,
|
|
71
|
-
cls: this.classes
|
|
72
|
-
}
|
|
71
|
+
return { none: true }
|
|
73
72
|
}
|
|
74
73
|
|
|
75
74
|
if (this.$q.iconMapFn !== void 0) {
|
|
@@ -80,7 +79,7 @@ export default Vue.extend({
|
|
|
80
79
|
}
|
|
81
80
|
else {
|
|
82
81
|
return {
|
|
83
|
-
cls: res.cls
|
|
82
|
+
cls: res.cls,
|
|
84
83
|
content: res.content !== void 0
|
|
85
84
|
? res.content
|
|
86
85
|
: ' '
|
|
@@ -90,41 +89,35 @@ export default Vue.extend({
|
|
|
90
89
|
}
|
|
91
90
|
|
|
92
91
|
if (mRE.test(icon) === true) {
|
|
93
|
-
const [ def, viewBox ] = icon.split('|')
|
|
92
|
+
const [ def, viewBox = defaultViewBox ] = icon.split('|')
|
|
94
93
|
|
|
95
94
|
return {
|
|
96
95
|
svg: true,
|
|
97
|
-
|
|
96
|
+
viewBox,
|
|
98
97
|
nodes: def.split('&&').map(path => {
|
|
99
98
|
const [ d, style, transform ] = path.split('@@')
|
|
100
99
|
return this.$createElement('path', {
|
|
101
|
-
attrs: {
|
|
102
|
-
d,
|
|
103
|
-
transform
|
|
104
|
-
},
|
|
100
|
+
attrs: { d, transform },
|
|
105
101
|
style
|
|
106
102
|
})
|
|
107
|
-
})
|
|
108
|
-
viewBox: viewBox !== void 0 ? viewBox : '0 0 24 24'
|
|
103
|
+
})
|
|
109
104
|
}
|
|
110
105
|
}
|
|
111
106
|
|
|
112
107
|
if (imgRE.test(icon) === true) {
|
|
113
108
|
return {
|
|
114
109
|
img: true,
|
|
115
|
-
cls: this.classes,
|
|
116
110
|
src: icon.substring(4)
|
|
117
111
|
}
|
|
118
112
|
}
|
|
119
113
|
|
|
120
114
|
if (svgUseRE.test(icon) === true) {
|
|
121
|
-
const [ def, viewBox ] = icon.split('|')
|
|
115
|
+
const [ def, viewBox = defaultViewBox ] = icon.split('|')
|
|
122
116
|
|
|
123
117
|
return {
|
|
124
118
|
svguse: true,
|
|
125
|
-
cls: this.classes,
|
|
126
119
|
src: def.substring(7),
|
|
127
|
-
viewBox
|
|
120
|
+
viewBox
|
|
128
121
|
}
|
|
129
122
|
}
|
|
130
123
|
|
|
@@ -158,7 +151,7 @@ export default Vue.extend({
|
|
|
158
151
|
}
|
|
159
152
|
|
|
160
153
|
return {
|
|
161
|
-
cls
|
|
154
|
+
cls,
|
|
162
155
|
content
|
|
163
156
|
}
|
|
164
157
|
}
|
|
@@ -166,7 +159,7 @@ export default Vue.extend({
|
|
|
166
159
|
|
|
167
160
|
render (h) {
|
|
168
161
|
const data = {
|
|
169
|
-
class: this.
|
|
162
|
+
class: this.classes,
|
|
170
163
|
style: this.sizeStyle,
|
|
171
164
|
on: { ...this.qListeners },
|
|
172
165
|
attrs: {
|
|
@@ -180,25 +173,44 @@ export default Vue.extend({
|
|
|
180
173
|
}
|
|
181
174
|
|
|
182
175
|
if (this.type.img === true) {
|
|
183
|
-
data
|
|
184
|
-
|
|
176
|
+
return h('div', data, mergeSlot([
|
|
177
|
+
h('img', {
|
|
178
|
+
class: this.type.cls,
|
|
179
|
+
attrs: { src: this.type.src }
|
|
180
|
+
})
|
|
181
|
+
], this, 'default'))
|
|
185
182
|
}
|
|
186
183
|
|
|
187
184
|
if (this.type.svg === true) {
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
185
|
+
return h('div', data, mergeSlot([
|
|
186
|
+
h('svg', {
|
|
187
|
+
class: this.type.cls,
|
|
188
|
+
attrs: {
|
|
189
|
+
viewBox: this.type.viewBox,
|
|
190
|
+
focusable: 'false' /* needed for IE11 */
|
|
191
|
+
}
|
|
192
|
+
}, this.type.nodes)
|
|
193
|
+
], this, 'default'))
|
|
192
194
|
}
|
|
193
|
-
if (this.type.svguse === true) {
|
|
194
|
-
data.attrs.focusable = 'false' /* needed for IE11 */
|
|
195
|
-
data.attrs.viewBox = this.type.viewBox
|
|
196
195
|
|
|
197
|
-
|
|
198
|
-
|
|
196
|
+
if (this.type.svguse === true) {
|
|
197
|
+
return h('div', data, mergeSlot([
|
|
198
|
+
h('svg', {
|
|
199
|
+
class: this.type.cls,
|
|
200
|
+
attrs: {
|
|
201
|
+
viewBox: this.type.viewBox,
|
|
202
|
+
focusable: 'false' /* needed for IE11 */
|
|
203
|
+
}
|
|
204
|
+
}, [
|
|
205
|
+
h('use', { attrs: { 'xlink:href': this.type.src } })
|
|
206
|
+
])
|
|
199
207
|
], this, 'default'))
|
|
200
208
|
}
|
|
201
209
|
|
|
210
|
+
if (this.type.cls !== void 0) {
|
|
211
|
+
data.class += ' ' + this.type.cls
|
|
212
|
+
}
|
|
213
|
+
|
|
202
214
|
return h(this.tag, data, mergeSlot([
|
|
203
215
|
this.type.content
|
|
204
216
|
], this, 'default'))
|
|
@@ -109,13 +109,30 @@ export default Vue.extend({
|
|
|
109
109
|
classes () {
|
|
110
110
|
return 'q-layout q-layout--' +
|
|
111
111
|
(this.container === true ? 'containerized' : 'standard')
|
|
112
|
+
},
|
|
113
|
+
|
|
114
|
+
scrollbarEvtAction () {
|
|
115
|
+
return this.container !== true && this.scrollbarWidth > 0
|
|
116
|
+
? 'add' : 'remove'
|
|
112
117
|
}
|
|
113
118
|
},
|
|
114
119
|
|
|
120
|
+
watch: {
|
|
121
|
+
scrollbarEvtAction: '__updateScrollEvent'
|
|
122
|
+
},
|
|
123
|
+
|
|
115
124
|
created () {
|
|
116
125
|
this.instances = {}
|
|
117
126
|
},
|
|
118
127
|
|
|
128
|
+
mounted () {
|
|
129
|
+
this.scrollbarEvtAction === 'add' && this.__updateScrollEvent('add')
|
|
130
|
+
},
|
|
131
|
+
|
|
132
|
+
beforeDestroy () {
|
|
133
|
+
this.scrollbarEvtAction === 'add' && this.__updateScrollEvent('remove')
|
|
134
|
+
},
|
|
135
|
+
|
|
119
136
|
render (h) {
|
|
120
137
|
const layout = h('div', {
|
|
121
138
|
class: this.classes,
|
|
@@ -210,6 +227,38 @@ export default Vue.extend({
|
|
|
210
227
|
this.scrollbarWidth = width
|
|
211
228
|
}
|
|
212
229
|
}
|
|
230
|
+
},
|
|
231
|
+
|
|
232
|
+
__updateScrollEvent (action) {
|
|
233
|
+
if (this.timerScrollbar !== void 0 && action === 'remove') {
|
|
234
|
+
clearTimeout(this.timerScrollbar)
|
|
235
|
+
this.__restoreScrollbar()
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
window[`${action}EventListener`]('resize', this.__hideScrollbar)
|
|
239
|
+
},
|
|
240
|
+
|
|
241
|
+
__hideScrollbar () {
|
|
242
|
+
if (this.timerScrollbar === void 0) {
|
|
243
|
+
const el = document.body
|
|
244
|
+
|
|
245
|
+
// if it has no scrollbar then there's nothing to do
|
|
246
|
+
if (el.scrollHeight > this.$q.screen.height) {
|
|
247
|
+
return
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
el.classList.add('hide-scrollbar')
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
clearTimeout(this.timerScrollbar)
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
this.timerScrollbar = setTimeout(this.__restoreScrollbar, 200)
|
|
257
|
+
},
|
|
258
|
+
|
|
259
|
+
__restoreScrollbar () {
|
|
260
|
+
this.timerScrollbar = void 0
|
|
261
|
+
document.body.classList.remove('hide-scrollbar')
|
|
213
262
|
}
|
|
214
263
|
}
|
|
215
264
|
})
|