beyond-rails 0.0.172 → 0.0.177
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/src/js/components/Autocomplete.js +7 -3
- data/src/js/components/AutocompleteMenu.js +1 -1
- data/src/js/components/Btn.js +1 -1
- data/src/js/components/DateMenu.js +5 -5
- data/src/js/components/Datepicker.js +10 -0
- data/src/js/components/Dropdown.js +1 -2
- data/src/js/components/SearchDropdown.js +1 -2
- data/src/js/components/TimeMenu.js +1 -2
- data/src/js/components/Tooltip.js +8 -1
- data/src/js/tests/utils/dateEq.test.js +12 -0
- data/src/js/tests/utils/dateGt.test.js +12 -0
- data/src/js/tests/utils/dateLt.test.js +12 -0
- data/src/js/tests/utils/getKey.test.js +25 -0
- data/src/js/tests/utils/msToS.test.js +8 -0
- data/src/js/utils/index.js +2 -0
- metadata +7 -4
- data/src/js/utils/range.js +0 -7
- data/src/js/utils/toPixel.js +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: edb93ef99c3dedb899622911c44e1394c11892ec357817bd89f69437da2e2c28
|
4
|
+
data.tar.gz: 9ffa3851690aae9723208be83abba39743742e9413492563e739d360c26889fa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a720ab5f813ac0738f91f2a3f89d8a0c5e55d9869bbb129271cfa27438a9455cf9087cdd6f4eba207398076f3dfedd8abf9f13245fe5de701965b4c19059997c
|
7
|
+
data.tar.gz: e376485f65d1d0adde8bc7a40f1d9501b87111f53d7e294ee36dbbcb91246409c12880fe2d62857f235d34d4fe367df2647381ab2eb26baa37ba47b5457ec3b4
|
@@ -66,7 +66,6 @@ export default class Autocomplete {
|
|
66
66
|
menu.on('click', index => {
|
67
67
|
const { itemClick } = this.options
|
68
68
|
if (typeof itemClick === 'function') {
|
69
|
-
clearTimeout(this._blurTimer)
|
70
69
|
const value = itemClick(this.rows[index])
|
71
70
|
this.dom.value = value
|
72
71
|
this.menu.hide()
|
@@ -82,8 +81,13 @@ export default class Autocomplete {
|
|
82
81
|
}
|
83
82
|
})
|
84
83
|
|
85
|
-
this.addEvent(
|
86
|
-
|
84
|
+
this.addEvent(document, 'click', event => {
|
85
|
+
const { target } = event
|
86
|
+
const inInput = this.dom.contains(target)
|
87
|
+
const inMenu = this.menu.dom.contains(target)
|
88
|
+
if ((! inInput) && (! inMenu)) {
|
89
|
+
this.menu.hide()
|
90
|
+
}
|
87
91
|
})
|
88
92
|
|
89
93
|
this.addEvent(dom, 'keyup', debounce(() => {
|
data/src/js/components/Btn.js
CHANGED
@@ -1,6 +1,4 @@
|
|
1
1
|
import getFloatedTargetPos from '../utils/getFloatedTargetPos'
|
2
|
-
import range from '../utils/range'
|
3
|
-
import toPixel from '../utils/toPixel'
|
4
2
|
import isTouchDevice from '../utils/isTouchDevice'
|
5
3
|
import dateLt from '../utils/dateLt'
|
6
4
|
import dateEq from '../utils/dateEq'
|
@@ -15,10 +13,12 @@ import {
|
|
15
13
|
getMonth,
|
16
14
|
getYear,
|
17
15
|
throttle,
|
16
|
+
range,
|
18
17
|
set,
|
19
18
|
startOfDay,
|
20
19
|
startOfMonth,
|
21
20
|
subMonths,
|
21
|
+
toPixel,
|
22
22
|
format
|
23
23
|
} from '../utils'
|
24
24
|
import { DEFAULT_TIMEZONE, DEFAULT_LOCALE } from '../consts'
|
@@ -81,7 +81,7 @@ export default class DateMenu {
|
|
81
81
|
|
82
82
|
const firstWeekday = getDay(startOfMonth(date))
|
83
83
|
const beforeWeekday = ((firstWeekday - 1) === -1) ? 6 : (firstWeekday - 1)
|
84
|
-
const emptyHeadRows = range(1, beforeWeekday).map(toEmptyCell)
|
84
|
+
const emptyHeadRows = range(1, beforeWeekday + 1).map(toEmptyCell)
|
85
85
|
|
86
86
|
const initialStartDate = startOfDay(startDate)
|
87
87
|
const initialEndDate = startOfDay(endDate)
|
@@ -106,7 +106,7 @@ export default class DateMenu {
|
|
106
106
|
}
|
107
107
|
const today = formatDate(new Date())
|
108
108
|
|
109
|
-
const rows = range(1, daysInMonth).map(day => {
|
109
|
+
const rows = range(1, daysInMonth + 1).map(day => {
|
110
110
|
|
111
111
|
const d = addDays(firstDateOfMonth, day - 1)
|
112
112
|
const resCompareStart = compareAsc(startOfStartDate, d)
|
@@ -124,7 +124,7 @@ export default class DateMenu {
|
|
124
124
|
|
125
125
|
const lastWeekday = getDay(endOfMonth(date))
|
126
126
|
const emptyDays = ((7 - lastWeekday) % 7)
|
127
|
-
const emptyTailRows = range(1, emptyDays).map(toEmptyCell)
|
127
|
+
const emptyTailRows = range(1, emptyDays + 1).map(toEmptyCell)
|
128
128
|
|
129
129
|
return emptyHeadRows.concat(rows).concat(emptyTailRows)
|
130
130
|
}
|
@@ -97,12 +97,20 @@ export default class Datepicker {
|
|
97
97
|
this.nextDate = res
|
98
98
|
}
|
99
99
|
|
100
|
+
clearBlurTimer() {
|
101
|
+
if (this._blurTimer) {
|
102
|
+
clearTimeout(this._blurTimer)
|
103
|
+
this._blurTimer = null
|
104
|
+
}
|
105
|
+
}
|
106
|
+
|
100
107
|
handleDateInputBlur() {
|
101
108
|
const { nextDate, date, dateInput } = this
|
102
109
|
|
103
110
|
if (date === null) {
|
104
111
|
dateInput.setDate(null)
|
105
112
|
this.timeInput && this.timeInput.setDate(null)
|
113
|
+
this._blurTimer = setTimeout(() => this.emitChange(), 50)
|
106
114
|
}
|
107
115
|
else if (nextDate) {
|
108
116
|
this.date = nextDate
|
@@ -191,6 +199,8 @@ export default class Datepicker {
|
|
191
199
|
event.stopPropagation()
|
192
200
|
event.preventDefault()
|
193
201
|
|
202
|
+
this.clearBlurTimer()
|
203
|
+
|
194
204
|
const { year, month, date } = res
|
195
205
|
this.date = set(this.date || new Date(), { year, month, date })
|
196
206
|
this.dateInput.setDate(this.date)
|
@@ -1,7 +1,6 @@
|
|
1
1
|
import getFloatedTargetPos from '../utils/getFloatedTargetPos'
|
2
|
-
import toPixel from '../utils/toPixel'
|
3
2
|
import supportDom from '../utils/supportDom'
|
4
|
-
import { isFunction, throttle } from '../utils'
|
3
|
+
import { isFunction, toPixel, throttle } from '../utils'
|
5
4
|
|
6
5
|
@supportDom
|
7
6
|
export default class Dropdown {
|
@@ -1,8 +1,7 @@
|
|
1
1
|
import getFloatedTargetPos from '../utils/getFloatedTargetPos'
|
2
|
-
import toPixel from '../utils/toPixel'
|
3
2
|
import supportDom from '../utils/supportDom'
|
4
3
|
import getKey from '../utils/getKey'
|
5
|
-
import { debounce, noop, throttle } from '../utils'
|
4
|
+
import { debounce, noop, toPixel, throttle } from '../utils'
|
6
5
|
|
7
6
|
const renderMenu = row => {
|
8
7
|
return `<div class="search-dropdown-menu-item" data-item>${JSON.stringify(row)}</div>`
|
@@ -1,7 +1,6 @@
|
|
1
1
|
import getFloatedTargetPos from '../utils/getFloatedTargetPos'
|
2
|
-
import toPixel from '../utils/toPixel'
|
3
2
|
import supportDom from '../utils/supportDom'
|
4
|
-
import { getHours, getMinutes, range } from '../utils'
|
3
|
+
import { getHours, getMinutes, range, toPixel } from '../utils'
|
5
4
|
|
6
5
|
@supportDom
|
7
6
|
export default class TimeMenu {
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import getFloatedTargetPos from '../utils/getFloatedTargetPos'
|
2
|
-
import toPixel from '../utils/toPixel'
|
3
2
|
import supportDom from '../utils/supportDom'
|
3
|
+
import { toPixel } from '../utils'
|
4
4
|
|
5
5
|
const TOOLTIP_PLACEMENTS = ['top', 'bottom', 'left', 'right']
|
6
6
|
|
@@ -65,6 +65,13 @@ export default class Tooltip {
|
|
65
65
|
const { dom, tooltip } = this
|
66
66
|
if ('onmouseover' in dom) {
|
67
67
|
this.addEvent(dom, 'mouseover', () => {
|
68
|
+
|
69
|
+
const msg = this.dom.dataset.msg || ''
|
70
|
+
|
71
|
+
if (msg.length === 0) {
|
72
|
+
return
|
73
|
+
}
|
74
|
+
|
68
75
|
this.setTooltipMsg()
|
69
76
|
|
70
77
|
tooltip.style.opacity = 0
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import { test } from '~/test/utils'
|
2
|
+
import dateEq from '~/src/js/utils/dateEq'
|
3
|
+
|
4
|
+
test('dateEq', t => {
|
5
|
+
|
6
|
+
// Sun Jul 12 2020 18:31:43 GMT+0800 (Taipei Standard Time)
|
7
|
+
const date1 = new Date(1594549903944)
|
8
|
+
|
9
|
+
// Sun Jul 12 2020 18:31:43 GMT+0800 (Taipei Standard Time)
|
10
|
+
const date2 = new Date(1594549903944)
|
11
|
+
t.true(dateEq(date1, date2))
|
12
|
+
})
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import { test } from '~/test/utils'
|
2
|
+
import dateGt from '~/src/js/utils/dateGt'
|
3
|
+
|
4
|
+
test('dateGt', t => {
|
5
|
+
|
6
|
+
// Sun Jul 12 2020 18:31:43 GMT+0800 (Taipei Standard Time)
|
7
|
+
const date1 = new Date(1594549903944)
|
8
|
+
|
9
|
+
// Mon Jul 13 2020 18:31:43 GMT+0800 (Taipei Standard Time)
|
10
|
+
const date2 = new Date(1594636303944)
|
11
|
+
t.true(dateGt(date2, date1))
|
12
|
+
})
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import { test } from '~/test/utils'
|
2
|
+
import dateLt from '~/src/js/utils/dateLt'
|
3
|
+
|
4
|
+
test('dateLt', t => {
|
5
|
+
|
6
|
+
// Sun Jul 12 2020 18:31:43 GMT+0800 (Taipei Standard Time)
|
7
|
+
const date1 = new Date(1594549903944)
|
8
|
+
|
9
|
+
// Mon Jul 13 2020 18:31:43 GMT+0800 (Taipei Standard Time)
|
10
|
+
const date2 = new Date(1594636303944)
|
11
|
+
t.true(dateLt(date1, date2))
|
12
|
+
})
|
@@ -0,0 +1,25 @@
|
|
1
|
+
import { test } from '~/test/utils'
|
2
|
+
import getKey from '~/src/js/utils/getKey'
|
3
|
+
|
4
|
+
test('getKey', t => {
|
5
|
+
|
6
|
+
const keyMap = {
|
7
|
+
13: 'enter',
|
8
|
+
17: 'ctrl',
|
9
|
+
27: 'esc',
|
10
|
+
38: 'up',
|
11
|
+
40: 'down',
|
12
|
+
70: 'f',
|
13
|
+
91: 'left-meta',
|
14
|
+
93: 'right-meta'
|
15
|
+
}
|
16
|
+
|
17
|
+
for (const [k, v] of Object.entries(keyMap)) {
|
18
|
+
const keyCode = parseInt(k, 10)
|
19
|
+
const event = { keyCode }
|
20
|
+
t.is(getKey(event), v)
|
21
|
+
}
|
22
|
+
|
23
|
+
// Return empty string when keyCode is not found.
|
24
|
+
t.is(getKey({ keyCode: 9999 }), '')
|
25
|
+
})
|
data/src/js/utils/index.js
CHANGED
@@ -4,6 +4,7 @@ import getDomPos from '@superlanding/getdompos'
|
|
4
4
|
import getScrollLeft from '@superlanding/getscrollleft'
|
5
5
|
import getScrollTop from '@superlanding/getscrolltop'
|
6
6
|
import timestampToDate from '@superlanding/timestamptodate'
|
7
|
+
import toPixel from '@superlanding/topixel'
|
7
8
|
|
8
9
|
// date-fns
|
9
10
|
import addDays from 'date-fns/addDays'
|
@@ -40,6 +41,7 @@ export {
|
|
40
41
|
getScrollLeft,
|
41
42
|
getScrollTop,
|
42
43
|
timestampToDate,
|
44
|
+
toPixel,
|
43
45
|
|
44
46
|
// date-fns
|
45
47
|
addDays,
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: beyond-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.177
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kmsheng
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2020-
|
12
|
+
date: 2020-08-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sassc
|
@@ -141,6 +141,11 @@ files:
|
|
141
141
|
- src/js/polyfills/nodeContains.js
|
142
142
|
- src/js/polyfills/nodeHasAttribute.js
|
143
143
|
- src/js/polyfills/nodeRemove.js
|
144
|
+
- src/js/tests/utils/dateEq.test.js
|
145
|
+
- src/js/tests/utils/dateGt.test.js
|
146
|
+
- src/js/tests/utils/dateLt.test.js
|
147
|
+
- src/js/tests/utils/getKey.test.js
|
148
|
+
- src/js/tests/utils/msToS.test.js
|
144
149
|
- src/js/utils/bind.js
|
145
150
|
- src/js/utils/dateEq.js
|
146
151
|
- src/js/utils/dateGt.js
|
@@ -152,9 +157,7 @@ files:
|
|
152
157
|
- src/js/utils/isTouchDevice.js
|
153
158
|
- src/js/utils/msToS.js
|
154
159
|
- src/js/utils/promisify.js
|
155
|
-
- src/js/utils/range.js
|
156
160
|
- src/js/utils/supportDom.js
|
157
|
-
- src/js/utils/toPixel.js
|
158
161
|
- src/js/utils/unbindAll.js
|
159
162
|
- src/sass/_beyond-sprockets.scss
|
160
163
|
- src/sass/_beyond.scss
|
data/src/js/utils/range.js
DELETED
data/src/js/utils/toPixel.js
DELETED