quasar 2.14.1 → 2.14.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/Notify.json +2 -2
- package/dist/icon-set/bootstrap-icons.umd.prod.js +1 -1
- package/dist/icon-set/eva-icons.umd.prod.js +1 -1
- package/dist/icon-set/fontawesome-v5-pro.umd.prod.js +1 -1
- package/dist/icon-set/fontawesome-v5.umd.prod.js +1 -1
- package/dist/icon-set/fontawesome-v6-pro.umd.prod.js +1 -1
- package/dist/icon-set/fontawesome-v6.umd.prod.js +1 -1
- package/dist/icon-set/ionicons-v4.umd.prod.js +1 -1
- package/dist/icon-set/line-awesome.umd.prod.js +1 -1
- package/dist/icon-set/material-icons-outlined.umd.prod.js +1 -1
- package/dist/icon-set/material-icons-round.umd.prod.js +1 -1
- package/dist/icon-set/material-icons-sharp.umd.prod.js +1 -1
- package/dist/icon-set/material-icons.umd.prod.js +1 -1
- package/dist/icon-set/material-symbols-outlined.umd.prod.js +1 -1
- package/dist/icon-set/material-symbols-rounded.umd.prod.js +1 -1
- package/dist/icon-set/material-symbols-sharp.umd.prod.js +1 -1
- package/dist/icon-set/mdi-v3.umd.prod.js +1 -1
- package/dist/icon-set/mdi-v4.umd.prod.js +1 -1
- package/dist/icon-set/mdi-v5.umd.prod.js +1 -1
- package/dist/icon-set/mdi-v6.umd.prod.js +1 -1
- package/dist/icon-set/mdi-v7.umd.prod.js +1 -1
- package/dist/icon-set/svg-bootstrap-icons.umd.prod.js +2 -2
- package/dist/icon-set/svg-eva-icons.umd.prod.js +1 -1
- package/dist/icon-set/svg-fontawesome-v5.umd.prod.js +1 -1
- package/dist/icon-set/svg-fontawesome-v6.umd.prod.js +1 -1
- package/dist/icon-set/svg-ionicons-v4.umd.prod.js +1 -1
- package/dist/icon-set/svg-ionicons-v5.umd.prod.js +1 -1
- package/dist/icon-set/svg-ionicons-v6.umd.prod.js +1 -1
- package/dist/icon-set/svg-line-awesome.umd.prod.js +1 -1
- package/dist/icon-set/svg-material-icons-outlined.umd.prod.js +1 -1
- package/dist/icon-set/svg-material-icons-round.umd.prod.js +1 -1
- package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +1 -1
- package/dist/icon-set/svg-material-icons.umd.prod.js +1 -1
- package/dist/icon-set/svg-material-symbols-outlined.umd.prod.js +1 -1
- package/dist/icon-set/svg-material-symbols-rounded.umd.prod.js +1 -1
- package/dist/icon-set/svg-material-symbols-sharp.umd.prod.js +1 -1
- package/dist/icon-set/svg-mdi-v6.umd.prod.js +1 -1
- package/dist/icon-set/svg-mdi-v7.umd.prod.js +1 -1
- package/dist/icon-set/svg-themify.umd.prod.js +1 -1
- package/dist/icon-set/themify.umd.prod.js +1 -1
- package/dist/lang/ar-TN.umd.prod.js +1 -1
- package/dist/lang/ar.umd.prod.js +1 -1
- package/dist/lang/az-Latn.umd.prod.js +1 -1
- package/dist/lang/bg.umd.prod.js +1 -1
- package/dist/lang/bn.umd.prod.js +1 -1
- package/dist/lang/ca.umd.prod.js +1 -1
- package/dist/lang/cs.umd.prod.js +1 -1
- package/dist/lang/da.umd.prod.js +1 -1
- package/dist/lang/de-CH.umd.prod.js +1 -1
- package/dist/lang/de-DE.umd.prod.js +1 -1
- package/dist/lang/de.umd.prod.js +1 -1
- package/dist/lang/el.umd.prod.js +1 -1
- package/dist/lang/en-GB.umd.prod.js +1 -1
- package/dist/lang/en-US.umd.prod.js +1 -1
- package/dist/lang/eo.umd.prod.js +1 -1
- package/dist/lang/es.umd.prod.js +1 -1
- package/dist/lang/et.umd.prod.js +1 -1
- package/dist/lang/eu.umd.prod.js +1 -1
- package/dist/lang/fa-IR.umd.prod.js +1 -1
- package/dist/lang/fa.umd.prod.js +1 -1
- package/dist/lang/fi.umd.prod.js +1 -1
- package/dist/lang/fr.umd.prod.js +1 -1
- package/dist/lang/gn.umd.prod.js +1 -1
- package/dist/lang/he.umd.prod.js +1 -1
- package/dist/lang/hi.umd.prod.js +1 -1
- package/dist/lang/hr.umd.prod.js +1 -1
- package/dist/lang/hu.umd.prod.js +1 -1
- package/dist/lang/id.umd.prod.js +1 -1
- package/dist/lang/is.umd.prod.js +1 -1
- package/dist/lang/it.umd.prod.js +1 -1
- package/dist/lang/ja.umd.prod.js +1 -1
- package/dist/lang/kk.umd.prod.js +1 -1
- package/dist/lang/km.umd.prod.js +1 -1
- package/dist/lang/ko-KR.umd.prod.js +1 -1
- package/dist/lang/kur-CKB.umd.prod.js +1 -1
- package/dist/lang/lt.umd.prod.js +1 -1
- package/dist/lang/lu.umd.prod.js +1 -1
- package/dist/lang/lv.umd.prod.js +1 -1
- package/dist/lang/mk.umd.prod.js +1 -1
- package/dist/lang/ml.umd.prod.js +1 -1
- package/dist/lang/mm.umd.prod.js +1 -1
- package/dist/lang/ms.umd.prod.js +1 -1
- package/dist/lang/my.umd.prod.js +1 -1
- package/dist/lang/nb-NO.umd.prod.js +1 -1
- package/dist/lang/nl.umd.prod.js +1 -1
- package/dist/lang/pl.umd.prod.js +1 -1
- package/dist/lang/pt-BR.umd.prod.js +1 -1
- package/dist/lang/pt.umd.prod.js +1 -1
- package/dist/lang/ro.umd.prod.js +1 -1
- package/dist/lang/ru.umd.prod.js +1 -1
- package/dist/lang/sk.umd.prod.js +1 -1
- package/dist/lang/sl.umd.prod.js +1 -1
- package/dist/lang/sm.umd.prod.js +1 -1
- package/dist/lang/sr-CYR.umd.prod.js +1 -1
- package/dist/lang/sr.umd.prod.js +1 -1
- package/dist/lang/sv.umd.prod.js +1 -1
- package/dist/lang/ta.umd.prod.js +1 -1
- package/dist/lang/th.umd.prod.js +1 -1
- package/dist/lang/tr.umd.prod.js +1 -1
- package/dist/lang/ug.umd.prod.js +1 -1
- package/dist/lang/uk.umd.prod.js +1 -1
- package/dist/lang/uz-Cyrl.umd.prod.js +1 -1
- package/dist/lang/uz-Latn.umd.prod.js +1 -1
- package/dist/lang/vi.umd.prod.js +1 -1
- package/dist/lang/zh-CN.umd.prod.js +1 -1
- package/dist/lang/zh-TW.umd.prod.js +1 -1
- package/dist/quasar.cjs.prod.js +2 -2
- package/dist/quasar.esm.js +90 -71
- package/dist/quasar.esm.prod.js +2 -2
- package/dist/quasar.sass +1 -1
- package/dist/quasar.umd.js +90 -71
- package/dist/quasar.umd.prod.js +2 -2
- package/dist/types/index.d.ts +2 -2
- package/dist/web-types/web-types.json +1 -1
- package/package.json +1 -1
- package/src/components/color/QColor.js +5 -9
- package/src/components/date/QDate.js +1 -1
- package/src/components/editor/QEditor.js +1 -1
- package/src/components/range/QRange.js +8 -8
- package/src/components/resize-observer/QResizeObserver.js +3 -3
- package/src/components/slider/QSlider.js +2 -2
- package/src/components/slider/use-slider.js +14 -8
- package/src/composables/private/use-field.js +0 -3
- package/src/composables/private/use-validate.js +49 -30
- package/src/plugins/Notify.js +4 -3
- package/src/plugins/Notify.json +2 -2
package/dist/types/index.d.ts
CHANGED
|
@@ -14516,7 +14516,7 @@ export interface QNotifyCreateOptions {
|
|
|
14516
14516
|
*/
|
|
14517
14517
|
attrs?: any;
|
|
14518
14518
|
/**
|
|
14519
|
-
* Amount of time to display (in milliseconds)
|
|
14519
|
+
* Amount of time to display (in milliseconds). Set to 0 to never dismiss automatically.
|
|
14520
14520
|
* Default value: 5000
|
|
14521
14521
|
*/
|
|
14522
14522
|
timeout?: number;
|
|
@@ -15530,7 +15530,7 @@ declare module "./config.d.ts" {
|
|
|
15530
15530
|
*/
|
|
15531
15531
|
attrs?: any;
|
|
15532
15532
|
/**
|
|
15533
|
-
* Amount of time to display (in milliseconds)
|
|
15533
|
+
* Amount of time to display (in milliseconds). Set to 0 to never dismiss automatically.
|
|
15534
15534
|
* Default value: 5000
|
|
15535
15535
|
*/
|
|
15536
15536
|
timeout?: number;
|
package/package.json
CHANGED
|
@@ -176,15 +176,11 @@ export default createComponent({
|
|
|
176
176
|
+ (isDark.value === true ? ' q-color-picker--dark q-dark' : '')
|
|
177
177
|
)
|
|
178
178
|
|
|
179
|
-
const attributes = computed(() =>
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
return { 'aria-readonly': 'true' }
|
|
185
|
-
}
|
|
186
|
-
return {}
|
|
187
|
-
})
|
|
179
|
+
const attributes = computed(() => (
|
|
180
|
+
props.disable === true
|
|
181
|
+
? { 'aria-disabled': 'true' }
|
|
182
|
+
: {}
|
|
183
|
+
))
|
|
188
184
|
|
|
189
185
|
const spectrumDirective = computed(() => {
|
|
190
186
|
// if editable.value === true
|
|
@@ -694,7 +694,7 @@ export default createComponent({
|
|
|
694
694
|
const attributes = computed(() => (
|
|
695
695
|
props.disable === true
|
|
696
696
|
? { 'aria-disabled': 'true' }
|
|
697
|
-
:
|
|
697
|
+
: {}
|
|
698
698
|
))
|
|
699
699
|
|
|
700
700
|
watch(() => props.modelValue, v => {
|
|
@@ -288,15 +288,15 @@ export default createComponent({
|
|
|
288
288
|
case dragType.RANGE:
|
|
289
289
|
const
|
|
290
290
|
ratioDelta = ratio - dragging.offsetRatio,
|
|
291
|
-
minR = between(dragging.ratioMin + ratioDelta,
|
|
291
|
+
minR = between(dragging.ratioMin + ratioDelta, state.innerMinRatio.value, state.innerMaxRatio.value - dragging.rangeRatio),
|
|
292
292
|
modelDelta = localModel - dragging.offsetModel,
|
|
293
|
-
min = between(dragging.valueMin + modelDelta,
|
|
293
|
+
min = between(dragging.valueMin + modelDelta, state.innerMin.value, state.innerMax.value - dragging.rangeValue)
|
|
294
294
|
|
|
295
295
|
pos = {
|
|
296
296
|
minR,
|
|
297
297
|
maxR: minR + dragging.rangeRatio,
|
|
298
|
-
min:
|
|
299
|
-
max:
|
|
298
|
+
min: state.roundValueFn.value(min),
|
|
299
|
+
max: state.roundValueFn.value(min + dragging.rangeValue)
|
|
300
300
|
}
|
|
301
301
|
|
|
302
302
|
state.focus.value = 'both'
|
|
@@ -326,7 +326,7 @@ export default createComponent({
|
|
|
326
326
|
stopAndPrevent(evt)
|
|
327
327
|
|
|
328
328
|
const
|
|
329
|
-
stepVal = ([ 34, 33 ].includes(evt.keyCode) ? 10 : 1) * state.
|
|
329
|
+
stepVal = ([ 34, 33 ].includes(evt.keyCode) ? 10 : 1) * state.keyStep.value,
|
|
330
330
|
offset = (
|
|
331
331
|
([ 34, 37, 40 ].includes(evt.keyCode) ? -1 : 1)
|
|
332
332
|
* (state.isReversed.value === true ? -1 : 1)
|
|
@@ -336,14 +336,14 @@ export default createComponent({
|
|
|
336
336
|
if (state.focus.value === 'both') {
|
|
337
337
|
const interval = model.value.max - model.value.min
|
|
338
338
|
const min = between(
|
|
339
|
-
|
|
339
|
+
state.roundValueFn.value(model.value.min + offset),
|
|
340
340
|
state.innerMin.value,
|
|
341
341
|
state.innerMax.value - interval
|
|
342
342
|
)
|
|
343
343
|
|
|
344
344
|
model.value = {
|
|
345
345
|
min,
|
|
346
|
-
max:
|
|
346
|
+
max: state.roundValueFn.value(min + interval)
|
|
347
347
|
}
|
|
348
348
|
}
|
|
349
349
|
else if (state.focus.value === false) {
|
|
@@ -355,7 +355,7 @@ export default createComponent({
|
|
|
355
355
|
model.value = {
|
|
356
356
|
...model.value,
|
|
357
357
|
[ which ]: between(
|
|
358
|
-
|
|
358
|
+
state.roundValueFn.value(model.value[ which ] + offset),
|
|
359
359
|
which === 'min' ? state.innerMin.value : model.value.min,
|
|
360
360
|
which === 'max' ? state.innerMax.value : model.value.max
|
|
361
361
|
)
|
|
@@ -57,6 +57,9 @@ export default createComponent({
|
|
|
57
57
|
|
|
58
58
|
const { proxy } = getCurrentInstance()
|
|
59
59
|
|
|
60
|
+
// expose public method
|
|
61
|
+
proxy.trigger = trigger
|
|
62
|
+
|
|
60
63
|
if (hasObserver === true) {
|
|
61
64
|
let observer
|
|
62
65
|
|
|
@@ -130,9 +133,6 @@ export default createComponent({
|
|
|
130
133
|
|
|
131
134
|
onBeforeUnmount(cleanup)
|
|
132
135
|
|
|
133
|
-
// expose public method
|
|
134
|
-
proxy.trigger = trigger
|
|
135
|
-
|
|
136
136
|
return () => {
|
|
137
137
|
if (canRender.value === true) {
|
|
138
138
|
return h('object', {
|
|
@@ -133,7 +133,7 @@ export default createComponent({
|
|
|
133
133
|
stopAndPrevent(evt)
|
|
134
134
|
|
|
135
135
|
const
|
|
136
|
-
stepVal = ([ 34, 33 ].includes(evt.keyCode) ? 10 : 1) * state.
|
|
136
|
+
stepVal = ([ 34, 33 ].includes(evt.keyCode) ? 10 : 1) * state.keyStep.value,
|
|
137
137
|
offset = (
|
|
138
138
|
([ 34, 37, 40 ].includes(evt.keyCode) ? -1 : 1)
|
|
139
139
|
* (state.isReversed.value === true ? -1 : 1)
|
|
@@ -141,7 +141,7 @@ export default createComponent({
|
|
|
141
141
|
)
|
|
142
142
|
|
|
143
143
|
model.value = between(
|
|
144
|
-
|
|
144
|
+
state.roundValueFn.value(model.value + offset),
|
|
145
145
|
state.innerMin.value,
|
|
146
146
|
state.innerMax.value
|
|
147
147
|
)
|
|
@@ -129,8 +129,16 @@ export default function ({ updateValue, updatePosition, getDragging, formAttrs }
|
|
|
129
129
|
&& innerMin.value < innerMax.value
|
|
130
130
|
))
|
|
131
131
|
|
|
132
|
-
const
|
|
133
|
-
|
|
132
|
+
const roundValueFn = computed(() => {
|
|
133
|
+
if (props.step === 0) {
|
|
134
|
+
return v => v
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
const decimals = (String(props.step).trim().split('.')[ 1 ] || '').length
|
|
138
|
+
return v => parseFloat(v.toFixed(decimals))
|
|
139
|
+
})
|
|
140
|
+
|
|
141
|
+
const keyStep = computed(() => (props.step === 0 ? 1 : props.step))
|
|
134
142
|
const tabindex = computed(() => (editable.value === true ? props.tabindex || 0 : -1))
|
|
135
143
|
|
|
136
144
|
const trackLen = computed(() => props.max - props.min)
|
|
@@ -242,9 +250,7 @@ export default function ({ updateValue, updatePosition, getDragging, formAttrs }
|
|
|
242
250
|
model += (Math.abs(modulo) >= step / 2 ? (modulo < 0 ? -1 : 1) * step : 0) - modulo
|
|
243
251
|
}
|
|
244
252
|
|
|
245
|
-
|
|
246
|
-
model = parseFloat(model.toFixed(decimals.value))
|
|
247
|
-
}
|
|
253
|
+
model = roundValueFn.value(model)
|
|
248
254
|
|
|
249
255
|
return between(model, innerMin.value, innerMax.value)
|
|
250
256
|
}
|
|
@@ -270,7 +276,7 @@ export default function ({ updateValue, updatePosition, getDragging, formAttrs }
|
|
|
270
276
|
}
|
|
271
277
|
|
|
272
278
|
const markerStep = computed(() => (
|
|
273
|
-
isNumber(props.markers) === true ? props.markers :
|
|
279
|
+
isNumber(props.markers) === true ? props.markers : keyStep.value)
|
|
274
280
|
)
|
|
275
281
|
|
|
276
282
|
const markerTicks = computed(() => {
|
|
@@ -630,8 +636,8 @@ export default function ({ updateValue, updatePosition, getDragging, formAttrs }
|
|
|
630
636
|
tabindex,
|
|
631
637
|
attributes,
|
|
632
638
|
|
|
633
|
-
|
|
634
|
-
|
|
639
|
+
roundValueFn,
|
|
640
|
+
keyStep,
|
|
635
641
|
trackLen,
|
|
636
642
|
innerMin,
|
|
637
643
|
innerMinRatio,
|
|
@@ -21,6 +21,7 @@ export const useValidateProps = {
|
|
|
21
21
|
reactiveRules: Boolean,
|
|
22
22
|
lazyRules: {
|
|
23
23
|
type: [ Boolean, String ],
|
|
24
|
+
default: false, // statement unneeded but avoids future vue implementation changes
|
|
24
25
|
validator: v => lazyRulesValues.includes(v)
|
|
25
26
|
}
|
|
26
27
|
}
|
|
@@ -42,10 +43,14 @@ export default function (focused, innerLoading) {
|
|
|
42
43
|
&& props.rules.length !== 0
|
|
43
44
|
)
|
|
44
45
|
|
|
45
|
-
const
|
|
46
|
+
const canDebounceValidate = computed(() => (
|
|
46
47
|
props.disable !== true
|
|
47
48
|
&& hasRules.value === true
|
|
48
|
-
|
|
49
|
+
// Should not have a validation in progress already;
|
|
50
|
+
// It might mean that focus switched to submit btn and
|
|
51
|
+
// QForm's submit() has been called already (ENTER key)
|
|
52
|
+
&& innerLoading.value === false
|
|
53
|
+
))
|
|
49
54
|
|
|
50
55
|
const hasError = computed(() =>
|
|
51
56
|
props.error === true || innerError.value === true
|
|
@@ -58,15 +63,29 @@ export default function (focused, innerLoading) {
|
|
|
58
63
|
))
|
|
59
64
|
|
|
60
65
|
watch(() => props.modelValue, () => {
|
|
61
|
-
|
|
66
|
+
isDirtyModel.value = true
|
|
67
|
+
|
|
68
|
+
if (
|
|
69
|
+
canDebounceValidate.value === true
|
|
70
|
+
// trigger validation if not using any kind of lazy-rules
|
|
71
|
+
&& props.lazyRules === false
|
|
72
|
+
) {
|
|
73
|
+
debouncedValidate()
|
|
74
|
+
}
|
|
62
75
|
})
|
|
63
76
|
|
|
64
77
|
watch(() => props.reactiveRules, val => {
|
|
65
78
|
if (val === true) {
|
|
66
79
|
if (unwatchRules === void 0) {
|
|
67
80
|
unwatchRules = watch(() => props.rules, () => {
|
|
68
|
-
|
|
69
|
-
|
|
81
|
+
if (
|
|
82
|
+
canDebounceValidate.value === true
|
|
83
|
+
&& isDirtyModel.value === true
|
|
84
|
+
&& props.lazyRules !== 'ondemand'
|
|
85
|
+
) {
|
|
86
|
+
debouncedValidate()
|
|
87
|
+
}
|
|
88
|
+
}, { immediate: true })
|
|
70
89
|
}
|
|
71
90
|
}
|
|
72
91
|
else if (unwatchRules !== void 0) {
|
|
@@ -75,25 +94,32 @@ export default function (focused, innerLoading) {
|
|
|
75
94
|
}
|
|
76
95
|
}, { immediate: true })
|
|
77
96
|
|
|
97
|
+
watch(() => props.lazyRules, val => {
|
|
98
|
+
if (
|
|
99
|
+
val === false
|
|
100
|
+
&& canDebounceValidate.value === true
|
|
101
|
+
&& isDirtyModel.value === true
|
|
102
|
+
) {
|
|
103
|
+
debouncedValidate()
|
|
104
|
+
}
|
|
105
|
+
})
|
|
106
|
+
|
|
78
107
|
watch(focused, val => {
|
|
79
108
|
if (val === true) {
|
|
80
109
|
if (isDirtyModel.value === null) {
|
|
81
|
-
isDirtyModel.value =
|
|
110
|
+
isDirtyModel.value = props.lazyRules === true
|
|
82
111
|
}
|
|
83
112
|
}
|
|
84
|
-
else if (
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
) {
|
|
95
|
-
debouncedValidate()
|
|
96
|
-
}
|
|
113
|
+
else if (
|
|
114
|
+
canDebounceValidate.value === true
|
|
115
|
+
&& (
|
|
116
|
+
// props.lazyRules can also be 'ondemand',
|
|
117
|
+
// hence the following form:
|
|
118
|
+
props.lazyRules === false
|
|
119
|
+
|| (props.lazyRules === true && isDirtyModel.value === true)
|
|
120
|
+
)
|
|
121
|
+
) {
|
|
122
|
+
debouncedValidate()
|
|
97
123
|
}
|
|
98
124
|
})
|
|
99
125
|
|
|
@@ -113,7 +139,10 @@ export default function (focused, innerLoading) {
|
|
|
113
139
|
* - Promise (pending async validation)
|
|
114
140
|
*/
|
|
115
141
|
function validate (val = props.modelValue) {
|
|
116
|
-
if (
|
|
142
|
+
if (
|
|
143
|
+
props.disable === true
|
|
144
|
+
|| hasRules.value === false
|
|
145
|
+
) {
|
|
117
146
|
return true
|
|
118
147
|
}
|
|
119
148
|
|
|
@@ -182,16 +211,6 @@ export default function (focused, innerLoading) {
|
|
|
182
211
|
)
|
|
183
212
|
}
|
|
184
213
|
|
|
185
|
-
function validateIfNeeded (changedRules) {
|
|
186
|
-
if (
|
|
187
|
-
hasActiveRules.value === true
|
|
188
|
-
&& props.lazyRules !== 'ondemand'
|
|
189
|
-
&& (isDirtyModel.value === true || (props.lazyRules !== true && changedRules !== true))
|
|
190
|
-
) {
|
|
191
|
-
debouncedValidate()
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
|
|
195
214
|
const debouncedValidate = debounce(validate, 0)
|
|
196
215
|
|
|
197
216
|
onBeforeUnmount(() => {
|
package/src/plugins/Notify.js
CHANGED
|
@@ -19,6 +19,7 @@ const notificationsList = {}
|
|
|
19
19
|
const positionClass = {}
|
|
20
20
|
const emptyRE = /^\s*$/
|
|
21
21
|
const notifRefs = []
|
|
22
|
+
const invalidTimeoutValues = [ void 0, null, true, false, '' ]
|
|
22
23
|
|
|
23
24
|
const positionList = [
|
|
24
25
|
'top-left', 'top-right',
|
|
@@ -112,15 +113,15 @@ function addNotification (config, $q, originalApi) {
|
|
|
112
113
|
notif.position = 'bottom'
|
|
113
114
|
}
|
|
114
115
|
|
|
115
|
-
if (notif.timeout ===
|
|
116
|
+
if (invalidTimeoutValues.includes(notif.timeout) === true) {
|
|
116
117
|
notif.timeout = 5000
|
|
117
118
|
}
|
|
118
119
|
else {
|
|
119
|
-
const t =
|
|
120
|
+
const t = Number(notif.timeout) // we catch exponential notation too with Number() casting
|
|
120
121
|
if (isNaN(t) || t < 0) {
|
|
121
122
|
return logError('wrong timeout', config)
|
|
122
123
|
}
|
|
123
|
-
notif.timeout = t
|
|
124
|
+
notif.timeout = Number.isFinite(t) ? t : 0
|
|
124
125
|
}
|
|
125
126
|
|
|
126
127
|
if (notif.timeout === 0) {
|
package/src/plugins/Notify.json
CHANGED
|
@@ -166,7 +166,7 @@
|
|
|
166
166
|
|
|
167
167
|
"timeout": {
|
|
168
168
|
"type": "Number",
|
|
169
|
-
"desc": "Amount of time to display (in milliseconds)",
|
|
169
|
+
"desc": "Amount of time to display (in milliseconds). Set to 0 to never dismiss automatically.",
|
|
170
170
|
"default": 5000
|
|
171
171
|
},
|
|
172
172
|
|
|
@@ -392,7 +392,7 @@
|
|
|
392
392
|
|
|
393
393
|
"timeout": {
|
|
394
394
|
"type": "Number",
|
|
395
|
-
"desc": "Amount of time to display (in milliseconds)",
|
|
395
|
+
"desc": "Amount of time to display (in milliseconds). Set to 0 to never dismiss automatically.",
|
|
396
396
|
"default": 5000,
|
|
397
397
|
"examples": [ 2500 ]
|
|
398
398
|
},
|