Skip to content

Commit 34508c4

Browse files
committed
Merge branch 'hotfix/v2.10.2'
2 parents b5e99ae + e0741ea commit 34508c4

13 files changed

+341
-210
lines changed

README.md

+4
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,10 @@ This project is licensed under the MIT License
129129

130130
## Change log
131131

132+
### 2.10.2 (2021-12-24)
133+
* Fixed [popover mode when using custom input](https://github.com/talkhabi/vue-persian-datetime-picker/issues/200)
134+
* Fixed [change jump-minute by muse wheel](https://github.com/talkhabi/vue-persian-datetime-picker/issues/198)
135+
132136
### 2.10.1 (2021-11-12)
133137
* Fixed build problem #191 #190 #188
134138

dist/vue-persian-datetime-picker.common.js

+102-53
Large diffs are not rendered by default.

dist/vue-persian-datetime-picker.umd.js

+102-53
Large diffs are not rendered by default.

dist/vue-persian-datetime-picker.umd.min.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/guide/auto-submit.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,18 @@
1515
</ClientOnly>
1616

1717
```vue
18-
<date-picker popover auto-submit />
18+
<date-picker popover="right" auto-submit />
1919
```
2020
<ClientOnly>
21-
<date-picker popover auto-submit />
21+
<date-picker popover="right" auto-submit />
2222
</ClientOnly>
2323

2424

2525
```vue
26-
<date-picker simple popover auto-submit />
26+
<date-picker simple popover="right" auto-submit />
2727
```
2828
<ClientOnly>
29-
<date-picker simple popover auto-submit />
29+
<date-picker simple popover="right" auto-submit />
3030
</ClientOnly>
3131

3232
- Wrapper submit

docs/guide/examples.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
<date-picker popover auto-submit />
2929
```
3030
<ClientOnly>
31-
<date-picker popover auto-submit />
31+
<date-picker popover="right" auto-submit />
3232
</ClientOnly>
3333

3434

docs/guide/popover.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
# Popover mode
22

33
```vue
4-
<date-picker auto-submit popover />
4+
<date-picker auto-submit popover="right" />
55
```
66
<ClientOnly>
7-
<date-picker auto-submit popover />
7+
<date-picker auto-submit popover="right" />
88
</ClientOnly>
99

1010

@@ -24,7 +24,7 @@ accepted:
2424

2525
`bottom-right` | `bottom-left`
2626

27-
`left-top` | `left-bottom`
27+
`top` | `bottom`
2828

29-
`right-top` | `right-bottom`
29+
`right` | `left`
3030

package-lock.json

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "vue-persian-datetime-picker",
33
"description": "A vue plugin to select jalali date and time",
4-
"version": "2.10.1",
4+
"version": "2.10.2",
55
"private": false,
66
"author": "Mohammad Talkhabi",
77
"license": "MIT",

src/VuePersianDatetimePicker.vue

+33-42
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
<span
33
class="vpd-main"
44
:data-type="type"
5-
:data-placement="popoverPlace"
65
:data-locale="localeData.name"
76
:data-locale-dir="localeData.config.dir"
87
:class="{ 'vpd-is-popover': isPopover }"
@@ -70,6 +69,7 @@
7069
{
7170
'vpd-is-range': range,
7271
'vpd-is-inline': inline,
72+
'vpd-is-popover': isPopover,
7373
'vpd-is-multiple': multiple,
7474
'vpd-compact-time': isCompactTime,
7575
'vpd-no-footer': autoSubmit && !hasStep('t')
@@ -458,6 +458,7 @@ import CoreModule from './modules/core'
458458
import { popupRouteChanger } from './modules/mixins'
459459
import { cloneDates, isSameDay } from './modules/utils'
460460
import { addLiveEvent } from './modules/utils'
461+
import popover from './modules/popover-util'
461462
462463
export default {
463464
components: {
@@ -838,10 +839,11 @@ export default {
838839
* @type Boolean | String
839840
* @accepted:
840841
* true | false
842+
* top | bottom | right | left
841843
* top-left | top-right | bottom-right | bottom-left
842-
* left-top | left-bottom | right-top | right-bottom
843844
* @default false
844845
* @example <date-picker popover />
846+
* @example <date-picker popover="right" />
845847
* @example <date-picker popover="top-left" />
846848
* @version 2.6.0
847849
*/
@@ -904,7 +906,6 @@ export default {
904906
locales: ['fa'],
905907
localeData: coreModule.locale,
906908
windowWidth: window.innerWidth,
907-
popoverPlace: 'bottom-right'
908909
}
909910
},
910911
computed: {
@@ -1229,18 +1230,12 @@ export default {
12291230
if (this.type === 'datetime' && this.view === 'day') this.goStep('d')
12301231
if (this.view !== 'day') this.goStep(this.shortCodes[this.view] || 'd')
12311232
this.$nextTick(() => {
1232-
if (this.appendTo) {
1233-
try {
1234-
let container = document.querySelector(this.appendTo)
1235-
container.appendChild(this.$refs.picker)
1236-
} catch (er) {
1237-
// eslint-disable-next-line
1238-
console.warn(`Cannot append picker to "${this.appendTo}"!`)
1239-
}
1233+
if (popover.shouldAppendPicker(this.appendTo, this.isPopover)) {
1234+
popover.appendChild(this.appendTo, this.$refs.picker)
12401235
}
12411236
})
12421237
this.checkScroll()
1243-
this.setPlacement()
1238+
this.$nextTick(this.setPlacement)
12441239
this.$emit('open', this)
12451240
} else {
12461241
if (this.inline && !this.disabled) return (this.visible = true)
@@ -1297,16 +1292,17 @@ export default {
12971292
let code = e.keyCode
12981293
if ((code === 9 || code === 27) && this.visible) this.visible = false
12991294
})
1295+
window.addEventListener('scroll', this.onWindowScroll, true)
13001296
window.addEventListener('resize', this.onWindowResize, true)
13011297
window.addEventListener('mousedown', this.onWindowClick, true)
13021298
},
13031299
beforeDestroy() {
13041300
window.clearInterval(this.updateNowInterval)
1301+
window.removeEventListener('scroll', this.onWindowScroll, true)
13051302
window.removeEventListener('resize', this.onWindowResize, true)
13061303
window.removeEventListener('mousedown', this.onWindowClick, true)
1307-
let picker = this.$refs.picker
1308-
if (this.appendTo && picker && picker.$el && picker.$el.parentNode) {
1309-
picker.$el.parentNode.removeChild(picker.$el)
1304+
if (popover.shouldAppendPicker(this.appendTo, this.isPopover)) {
1305+
popover.removeChild(this.$refs.picker)
13101306
}
13111307
},
13121308
methods: {
@@ -1764,13 +1760,23 @@ export default {
17641760
}
17651761
return value
17661762
},
1763+
getInputGroupElement() {
1764+
return this.customInput
1765+
? document.querySelector(this.customInput)
1766+
: this.$refs.inputGroup
1767+
},
17671768
onWindowResize() {
17681769
this.windowWidth = window.innerWidth
1770+
this.setPlacement()
1771+
},
1772+
onWindowScroll() {
1773+
this.setPlacement()
17691774
},
17701775
onWindowClick(event) {
1771-
if (this.isPopover && this.$refs.picker && this.$refs.inputGroup) {
1776+
const inputGroup = this.getInputGroupElement()
1777+
if (this.isPopover && this.$refs.picker && inputGroup) {
17721778
let isOnPicker = this.$refs.picker.contains(event.target)
1773-
let isOnInput = this.$refs.inputGroup.contains(event.target)
1779+
let isOnInput = inputGroup.contains(event.target)
17741780
if (isOnPicker) event.preventDefault()
17751781
if (!isOnPicker && !isOnInput) {
17761782
// setTimeout because:
@@ -1782,31 +1788,16 @@ export default {
17821788
}
17831789
},
17841790
setPlacement() {
1785-
if (!this.isPopover) return
1786-
let allowed = [
1787-
'top-left',
1788-
'top-right',
1789-
'bottom-right',
1790-
'bottom-left',
1791-
'left-top',
1792-
'left-bottom',
1793-
'right-top',
1794-
'right-bottom'
1795-
]
1796-
if (allowed.indexOf(this.popover) !== -1)
1797-
return (this.popoverPlace = this.popover)
1798-
1799-
this.popoverPlace = 'bottom-right'
1800-
this.$nextTick(() => {
1801-
let placement = ['bottom', 'right']
1802-
let container = this.$refs.container
1803-
let rect = container.getBoundingClientRect()
1804-
let left = rect.left
1805-
let bottom = window.innerHeight - rect.bottom
1806-
if (bottom <= 0) placement[0] = 'top'
1807-
if (left <= 0) placement[1] = 'left'
1808-
this.popoverPlace = placement.join('-')
1809-
})
1791+
if (!this.isPopover || !this.visible) return
1792+
const positionOptions = {
1793+
placement: this.popover
1794+
}
1795+
popover.setPickerPosition(
1796+
this.$refs.picker,
1797+
this.$refs.container,
1798+
this.getInputGroupElement(),
1799+
positionOptions
1800+
)
18101801
}
18111802
},
18121803
install(Vue, options) {

src/assets/scss/style.scss

+22-48
Original file line numberDiff line numberDiff line change
@@ -577,76 +577,50 @@
577577
}
578578
}
579579

580-
.#{$prefix}is-popover {
581-
display: inline-block;
582-
position: relative;
583-
.#{$prefix}wrapper {
584-
position: static;
585-
width: auto;
586-
height: 0;
587-
.#{$prefix}container {
588-
transform: none;
589-
top: auto;
590-
left: auto;
591-
z-index: 500;
592-
}
593-
.#{$prefix}content {
594-
transition: none;
595-
box-shadow: 0 3px 8px rgba(black, 0.4);
596-
}
580+
.#{$prefix}wrapper.#{$prefix}is-popover {
581+
position: fixed;
582+
width: 100px;
583+
height: 0;
584+
z-index: 500;
585+
.#{$prefix}container {
586+
position: absolute;
587+
transform: none;
588+
top: unset;
589+
left: unset;
590+
z-index: 1;
591+
}
592+
.#{$prefix}content {
593+
transition: none;
594+
box-shadow: 0 3px 8px rgba(black, 0.4);
597595
}
598596
&[data-placement="top-left"] {
599597
.#{$prefix}container {
600-
bottom: 100%;
601-
left: 0;
598+
bottom: 0;
599+
right: 0;
602600
}
603601
.#{$prefix}content {
604602
box-shadow: 0 -3px 8px rgba(black, 0.4);
605603
}
606604
}
607605
&[data-placement="top-right"] {
608606
.#{$prefix}container {
609-
bottom: 100%;
610-
right: 0;
607+
bottom: 0;
608+
left: 0;
611609
}
612610
.#{$prefix}content {
613611
box-shadow: 0 -3px 8px rgba(black, 0.4);
614612
}
615613
}
616614
&[data-placement="bottom-left"] {
617-
.#{$prefix}container {
618-
top: 100%;
619-
left: 0;
620-
}
621-
}
622-
&[data-placement="bottom-right"] {
623-
.#{$prefix}container {
624-
top: 100%;
625-
right: 0;
626-
}
627-
}
628-
&[data-placement="left-top"] {
629-
.#{$prefix}container {
630-
bottom: 0;
631-
right: 100%;
632-
}
633-
}
634-
&[data-placement="left-bottom"] {
635615
.#{$prefix}container {
636616
top: 0;
637-
right: 100%;
638-
}
639-
}
640-
&[data-placement="right-top"] {
641-
.#{$prefix}container {
642-
bottom: 0;
643-
left: 100%;
617+
right: 0;
644618
}
645619
}
646-
&[data-placement="right-bottom"] {
620+
&[data-placement="bottom-right"] {
647621
.#{$prefix}container {
648622
top: 0;
649-
left: 100%;
623+
left: 0;
650624
}
651625
}
652626
}

src/components/time/TimeColumn.vue

+1-2
Original file line numberDiff line numberDiff line change
@@ -116,9 +116,8 @@ export default {
116116
}, 300)
117117
},
118118
wheelUpdate(e) {
119-
const delta = this.jump
120119
const goUp = (e.wheelDeltaY || -e.detail) > 0
121-
this.update(goUp ? delta : -delta)
120+
this.update(goUp ? 1 : -1)
122121
},
123122
fastUpdateCounter(e) {
124123
if (!e) this.transitionSpeed = 300

0 commit comments

Comments
 (0)