bootstrap-italia 2.1.1 → 2.2.0
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/bootstrap-italia.esm.js +3 -6
- package/dist/bootstrap-italia.esm.js.map +1 -1
- package/dist/css/bootstrap-italia-comuni.min.css +1 -1
- package/dist/css/bootstrap-italia.min.css +1 -1
- package/dist/css/bootstrap-italia.min.css.map +1 -1
- package/dist/js/bootstrap-italia.bundle.min.js +369 -67
- package/dist/plugins/accordion.js +13 -5
- package/dist/plugins/accordion.js.map +1 -1
- package/dist/plugins/backToTop.js +3 -5
- package/dist/plugins/backToTop.js.map +1 -1
- package/dist/plugins/carousel-bi.js +0 -1
- package/dist/plugins/carousel-bi.js.map +1 -1
- package/dist/plugins/cookiebar.js.map +1 -1
- package/dist/plugins/dimmer.js +22 -19
- package/dist/plugins/dimmer.js.map +1 -1
- package/dist/plugins/fonts-loader.js +253 -249
- package/dist/plugins/fonts-loader.js.map +1 -1
- package/dist/plugins/forward.js +11 -6
- package/dist/plugins/forward.js.map +1 -1
- package/dist/plugins/header-sticky.js +74 -31
- package/dist/plugins/header-sticky.js.map +1 -1
- package/dist/plugins/history-back.js +13 -6
- package/dist/plugins/history-back.js.map +1 -1
- package/dist/plugins/init.js +14 -0
- package/dist/plugins/init.js.map +1 -0
- package/dist/plugins/input-label.js +4 -0
- package/dist/plugins/input-label.js.map +1 -1
- package/dist/plugins/input-number.js +48 -23
- package/dist/plugins/input-number.js.map +1 -1
- package/dist/plugins/input-password.js +84 -33
- package/dist/plugins/input-password.js.map +1 -1
- package/dist/plugins/input-search-autocomplete.js +24 -5
- package/dist/plugins/input-search-autocomplete.js.map +1 -1
- package/dist/plugins/input.js +32 -9
- package/dist/plugins/input.js.map +1 -1
- package/dist/plugins/navscroll.js +2 -3
- package/dist/plugins/navscroll.js.map +1 -1
- package/dist/plugins/select-autocomplete.js +0 -1
- package/dist/plugins/select-autocomplete.js.map +1 -1
- package/dist/plugins/sticky.js +2 -3
- package/dist/plugins/sticky.js.map +1 -1
- package/dist/plugins/transfer.js +12 -3
- package/dist/plugins/transfer.js.map +1 -1
- package/dist/plugins/upload-dragdrop.js +22 -5
- package/dist/plugins/upload-dragdrop.js.map +1 -1
- package/dist/plugins/util/observer.js +23 -9
- package/dist/plugins/util/observer.js.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +3 -3
- package/src/js/bootstrap-italia.entry.js +8 -12
- package/src/js/bootstrap-italia.esm.js +3 -6
- package/src/js/plugins/accordion.js +9 -1
- package/src/js/plugins/backToTop.js +3 -5
- package/src/js/plugins/carousel-bi.js +0 -1
- package/src/js/plugins/cookiebar.js +0 -11
- package/src/js/plugins/dimmer.js +16 -14
- package/src/js/plugins/fonts-loader.js +250 -248
- package/src/js/plugins/forward.js +8 -2
- package/src/js/plugins/header-sticky.js +75 -30
- package/src/js/plugins/history-back.js +8 -2
- package/src/js/plugins/init.js +14 -0
- package/src/js/plugins/input-label.js +4 -0
- package/src/js/plugins/input-number.js +35 -10
- package/src/js/plugins/input-password.js +64 -13
- package/src/js/plugins/input-search-autocomplete.js +22 -2
- package/src/js/plugins/input.js +27 -4
- package/src/js/plugins/navscroll.js +2 -3
- package/src/js/plugins/select-autocomplete.js +0 -1
- package/src/js/plugins/sticky.js +2 -3
- package/src/js/plugins/transfer.js +11 -2
- package/src/js/plugins/upload-dragdrop.js +21 -4
- package/src/js/plugins/util/observer.js +23 -9
- package/src/js/version.js +1 -1
- package/src/scss/custom/_accessible-autocomplete.scss +4 -0
- package/src/scss/custom/_carousel.scss +4 -0
- package/src/scss/custom/_dimmer.scss +5 -1
- package/src/scss/custom/_form-password.scss +7 -0
- package/src/scss/custom/_version.scss +1 -1
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
import SelectorEngine from 'bootstrap/js/src/dom/selector-engine'
|
|
2
2
|
import { isVisible } from 'bootstrap/js/src/util'
|
|
3
3
|
|
|
4
|
+
import Sticky from './sticky'
|
|
5
|
+
|
|
6
|
+
import onDocumentScroll from './util/on-document-scroll'
|
|
7
|
+
|
|
4
8
|
const CLASS_NAME_CLONED_HEADER = 'cloned-element'
|
|
5
9
|
const CLASS_NAME_SHOW = 'show'
|
|
10
|
+
const CLASS_NAME_ISTICKY = 'is-sticky'
|
|
6
11
|
|
|
7
12
|
const SELECTOR_HEADER = '.it-header-sticky'
|
|
8
13
|
const SELECTOR_TOGGLER = '.custom-navbar-toggler'
|
|
@@ -12,35 +17,69 @@ const SELECTOR_SEARCH_WRAPPER = '.it-search-wrapper'
|
|
|
12
17
|
const SELECTOR_USER_WRAPPER = '.it-user-wrapper'
|
|
13
18
|
const SELECTOR_CLONED = `.${CLASS_NAME_CLONED_HEADER}`
|
|
14
19
|
|
|
15
|
-
|
|
16
|
-
|
|
20
|
+
// eslint-disable-next-line no-undef
|
|
21
|
+
const dataSet = new Map()
|
|
17
22
|
|
|
18
|
-
|
|
19
|
-
|
|
23
|
+
class HeaderSticky {
|
|
24
|
+
//HeaderSticky uses Sticky so it can't be a Bootstrap BaseComponent
|
|
25
|
+
constructor(element) {
|
|
26
|
+
if (dataSet.get(element)) {
|
|
27
|
+
return null
|
|
28
|
+
}
|
|
20
29
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
const elSearch = SelectorEngine.findOne(SELECTOR_SEARCH_WRAPPER, targetHeader)
|
|
24
|
-
const elUser = SelectorEngine.findOne(SELECTOR_USER_WRAPPER, targetHeader)
|
|
30
|
+
this._element = element
|
|
31
|
+
this._elementObj = Sticky.getOrCreateInstance(element)
|
|
25
32
|
|
|
26
|
-
|
|
27
|
-
const clonedSearch = elSearch ? elSearch.cloneNode(true) : null
|
|
28
|
-
const clonedUser = elUser ? elUser.cloneNode(true) : null
|
|
33
|
+
dataSet.set(element, this._elementObj)
|
|
29
34
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
35
|
+
this._bindEvents()
|
|
36
|
+
|
|
37
|
+
this._toggleClonedElement(this._element.classList.contains(CLASS_NAME_ISTICKY))
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
//Static
|
|
41
|
+
|
|
42
|
+
static getOrCreateInstance(element) {
|
|
43
|
+
return dataSet.get(element) || new this(element)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
//Private
|
|
47
|
+
|
|
48
|
+
_bindEvents() {
|
|
49
|
+
this._element.addEventListener('on.bs.sticky', () => this._toggleClonedElement(true))
|
|
50
|
+
this._element.addEventListener('off.bs.sticky', () => this._toggleClonedElement(false))
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
_toggleClonedElement(toAdd = true) {
|
|
54
|
+
const isDesktop = !isVisible(SelectorEngine.findOne(SELECTOR_TOGGLER, this._element))
|
|
55
|
+
|
|
56
|
+
if (isDesktop) {
|
|
57
|
+
const target = SelectorEngine.findOne(SELECTOR_MENU_WRAPPER, this._element)
|
|
58
|
+
|
|
59
|
+
if (toAdd) {
|
|
60
|
+
const elBrand = SelectorEngine.findOne(SELECTOR_BRAND_WRAPPER, this._element)
|
|
61
|
+
const elSearch = SelectorEngine.findOne(SELECTOR_SEARCH_WRAPPER, this._element)
|
|
62
|
+
const elUser = SelectorEngine.findOne(SELECTOR_USER_WRAPPER, this._element)
|
|
63
|
+
|
|
64
|
+
const clonedBrand = elBrand ? elBrand.cloneNode(true) : null
|
|
65
|
+
const clonedSearch = elSearch ? elSearch.cloneNode(true) : null
|
|
66
|
+
const clonedUser = elUser ? elUser.cloneNode(true) : null
|
|
67
|
+
|
|
68
|
+
if (clonedBrand) {
|
|
69
|
+
target.insertBefore(clonedBrand, target.childNodes[0]).classList.add(CLASS_NAME_CLONED_HEADER)
|
|
70
|
+
}
|
|
71
|
+
if (clonedSearch) {
|
|
72
|
+
target.appendChild(clonedSearch).classList.add(CLASS_NAME_CLONED_HEADER)
|
|
73
|
+
}
|
|
74
|
+
if (clonedUser) {
|
|
75
|
+
target.appendChild(clonedUser).classList.add(CLASS_NAME_CLONED_HEADER)
|
|
76
|
+
target.appendChild(clonedUser).classList.remove(CLASS_NAME_SHOW)
|
|
77
|
+
}
|
|
78
|
+
} else {
|
|
79
|
+
SelectorEngine.find(SELECTOR_CLONED, this._element).forEach((item) => {
|
|
80
|
+
item.parentElement.removeChild(item)
|
|
81
|
+
})
|
|
39
82
|
}
|
|
40
|
-
} else {
|
|
41
|
-
SelectorEngine.find(SELECTOR_CLONED, targetHeader).forEach((item) => {
|
|
42
|
-
item.parentElement.removeChild(item)
|
|
43
|
-
})
|
|
44
83
|
}
|
|
45
84
|
}
|
|
46
85
|
|
|
@@ -51,11 +90,17 @@ const toggleClonedElement = (targetHeader, toAdd = true) => {
|
|
|
51
90
|
}*/
|
|
52
91
|
}
|
|
53
92
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
93
|
+
/**
|
|
94
|
+
* ------------------------------------------------------------------------
|
|
95
|
+
* Data Api implementation
|
|
96
|
+
* ------------------------------------------------------------------------
|
|
97
|
+
*/
|
|
58
98
|
|
|
59
|
-
|
|
60
|
-
|
|
99
|
+
onDocumentScroll(() => {
|
|
100
|
+
const stickies = SelectorEngine.find(SELECTOR_HEADER)
|
|
101
|
+
stickies.map((sticky) => {
|
|
102
|
+
HeaderSticky.getOrCreateInstance(sticky)
|
|
103
|
+
})
|
|
61
104
|
})
|
|
105
|
+
|
|
106
|
+
export default HeaderSticky
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import BaseComponent from 'bootstrap/js/src/base-component.js'
|
|
2
2
|
|
|
3
3
|
import EventHandler from 'bootstrap/js/src/dom/event-handler'
|
|
4
|
-
import SelectorEngine from 'bootstrap/js/src/dom/selector-engine'
|
|
4
|
+
//import SelectorEngine from 'bootstrap/js/src/dom/selector-engine'
|
|
5
5
|
|
|
6
6
|
const NAME = 'historyback'
|
|
7
7
|
const DATA_KEY = 'bs.historyback'
|
|
@@ -46,13 +46,19 @@ class HistoryBack extends BaseComponent {
|
|
|
46
46
|
* ------------------------------------------------------------------------
|
|
47
47
|
*/
|
|
48
48
|
|
|
49
|
-
const toggles = SelectorEngine.find(SELECTOR_TOGGLE)
|
|
49
|
+
/*const toggles = SelectorEngine.find(SELECTOR_TOGGLE)
|
|
50
50
|
toggles.forEach((toggle) => {
|
|
51
51
|
EventHandler.one(toggle, EVENT_CLICK_DATA_API, (evt) => {
|
|
52
52
|
evt.preventDefault()
|
|
53
53
|
const historyBack = HistoryBack.getOrCreateInstance(toggle)
|
|
54
54
|
historyBack.back()
|
|
55
55
|
})
|
|
56
|
+
})*/
|
|
57
|
+
|
|
58
|
+
EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_TOGGLE, function (evt) {
|
|
59
|
+
evt.preventDefault()
|
|
60
|
+
const historyBack = HistoryBack.getOrCreateInstance(this)
|
|
61
|
+
historyBack.back()
|
|
56
62
|
})
|
|
57
63
|
|
|
58
64
|
export default HistoryBack
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import TrackFocus from './track-focus'
|
|
2
|
+
|
|
3
|
+
import BOOTSTRAP_ITALIA_VERSION from '../version'
|
|
4
|
+
|
|
5
|
+
const init = () => {
|
|
6
|
+
if (!window.BOOTSTRAP_ITALIA_VERSION) {
|
|
7
|
+
new TrackFocus()
|
|
8
|
+
window.BOOTSTRAP_ITALIA_VERSION = BOOTSTRAP_ITALIA_VERSION
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export default init
|
|
13
|
+
|
|
14
|
+
init()
|
|
@@ -12,18 +12,21 @@ const DATA_API_KEY = '.data-api'
|
|
|
12
12
|
|
|
13
13
|
const EVENT_CLICK = `click${EVENT_KEY}`
|
|
14
14
|
const EVENT_CHANGE = `change${EVENT_KEY}`
|
|
15
|
-
|
|
15
|
+
|
|
16
|
+
//const EVENT_FOCUS_DATA_API = `focus${EVENT_KEY}${DATA_API_KEY}`
|
|
16
17
|
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`
|
|
18
|
+
const EVENT_MOUSEDOWN_DATA_API = `mousedown${EVENT_KEY}${DATA_API_KEY}`
|
|
19
|
+
const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`
|
|
17
20
|
|
|
18
21
|
const CLASS_NAME_ADAPTIVE = 'input-number-adaptive'
|
|
19
22
|
const CLASS_NAME_PERCENTAGE = 'input-number-percentage'
|
|
20
23
|
const CLASS_NAME_CURRENCY = 'input-number-currency'
|
|
21
|
-
const CLASS_NAME_INCREMENT = 'input-number-add'
|
|
24
|
+
//const CLASS_NAME_INCREMENT = 'input-number-add'
|
|
22
25
|
const CLASS_NAME_DECREMENT = 'input-number-sub'
|
|
23
26
|
|
|
24
27
|
const SELECTOR_WRAPPER = '.input-number'
|
|
25
28
|
const SELECTOR_INPUT = 'input[data-bs-input][type="number"]'
|
|
26
|
-
const SELECTOR_BTN = 'button'
|
|
29
|
+
const SELECTOR_BTN = 'button[class^="input-number-"]'
|
|
27
30
|
|
|
28
31
|
class InputNumber extends BaseComponent {
|
|
29
32
|
constructor(element) {
|
|
@@ -129,14 +132,8 @@ class InputNumber extends BaseComponent {
|
|
|
129
132
|
* ------------------------------------------------------------------------
|
|
130
133
|
*/
|
|
131
134
|
|
|
132
|
-
const inputs = SelectorEngine.find(SELECTOR_INPUT)
|
|
135
|
+
/*const inputs = SelectorEngine.find(SELECTOR_INPUT)
|
|
133
136
|
inputs.forEach((input) => {
|
|
134
|
-
/*const prevInst = BaseComponent.getInstance(input)
|
|
135
|
-
if (prevInst.NAME === 'input') {
|
|
136
|
-
prevInst.dispose()
|
|
137
|
-
}
|
|
138
|
-
InputNumber.getOrCreateInstance(input)*/
|
|
139
|
-
|
|
140
137
|
EventHandler.one(input, EVENT_FOCUS_DATA_API, (evt) => {
|
|
141
138
|
evt.preventDefault()
|
|
142
139
|
InputNumber.getOrCreateInstance(input)
|
|
@@ -162,6 +159,34 @@ inputsButtons.forEach((button) => {
|
|
|
162
159
|
}
|
|
163
160
|
}
|
|
164
161
|
})
|
|
162
|
+
})*/
|
|
163
|
+
|
|
164
|
+
const createInput = (element) => {
|
|
165
|
+
if (element && element.matches(SELECTOR_INPUT) && element.parentNode.querySelector(SELECTOR_BTN)) {
|
|
166
|
+
return InputNumber.getOrCreateInstance(element)
|
|
167
|
+
}
|
|
168
|
+
return null
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
EventHandler.on(document, EVENT_MOUSEDOWN_DATA_API, SELECTOR_INPUT + ', label', function () {
|
|
172
|
+
const target = InputLabel.getInputFromLabel(this) || this
|
|
173
|
+
createInput(target)
|
|
174
|
+
})
|
|
175
|
+
EventHandler.on(document, EVENT_KEYUP_DATA_API, SELECTOR_INPUT + ', label', function () {
|
|
176
|
+
const target = InputLabel.getInputFromLabel(this) || this
|
|
177
|
+
const element = createInput(target)
|
|
178
|
+
if (element && element._label) {
|
|
179
|
+
element._label._labelOut()
|
|
180
|
+
}
|
|
181
|
+
})
|
|
182
|
+
EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_BTN, function () {
|
|
183
|
+
const wrapper = this.closest(SELECTOR_WRAPPER)
|
|
184
|
+
if (wrapper) {
|
|
185
|
+
const input = SelectorEngine.findOne(SELECTOR_INPUT, wrapper)
|
|
186
|
+
if (input) {
|
|
187
|
+
InputNumber.getOrCreateInstance(input)
|
|
188
|
+
}
|
|
189
|
+
}
|
|
165
190
|
})
|
|
166
191
|
|
|
167
192
|
export default InputNumber
|
|
@@ -9,7 +9,7 @@ import InputLabel from './input-label'
|
|
|
9
9
|
const NAME = 'inputpassword'
|
|
10
10
|
const DATA_KEY = 'bs.inputpassword'
|
|
11
11
|
const EVENT_KEY = `.${DATA_KEY}`
|
|
12
|
-
|
|
12
|
+
const DATA_API_KEY = '.data-api'
|
|
13
13
|
|
|
14
14
|
const Default = {
|
|
15
15
|
shortPass: 'Password molto debole',
|
|
@@ -29,11 +29,21 @@ const EVENT_KEYPRESS = `keypress${EVENT_KEY}`
|
|
|
29
29
|
const EVENT_SCORE = `score${EVENT_KEY}`
|
|
30
30
|
const EVENT_TEXT = `text${EVENT_KEY}`
|
|
31
31
|
|
|
32
|
+
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`
|
|
33
|
+
const EVENT_MOUSEDOWN_DATA_API = `mousedown${EVENT_KEY}${DATA_API_KEY}`
|
|
34
|
+
const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`
|
|
35
|
+
|
|
32
36
|
const CLASS_NAME_PASSWORD = 'input-password'
|
|
33
|
-
const CLASS_NAME_METER = 'input-password-strength-meter'
|
|
37
|
+
//const CLASS_NAME_METER = 'input-password-strength-meter'
|
|
38
|
+
const CLASS_NAME_SHOW = 'show'
|
|
34
39
|
|
|
35
40
|
const SELECTOR_PASSWORD = 'input[data-bs-input][type="password"]'
|
|
36
41
|
const SELECTOR_BTN_SHOW_PWD = '.password-icon'
|
|
42
|
+
const SELECTOR_METER = '.password-strength-meter'
|
|
43
|
+
const SELECTOR_METER_GRAYBAR = '.password-meter'
|
|
44
|
+
const SELECTOR_METER_COLBAR = '.progress-bar'
|
|
45
|
+
const SELECTOR_CAPS = '.password-caps'
|
|
46
|
+
const SELECTOR_TEXT = '.form-text'
|
|
37
47
|
|
|
38
48
|
class InputPassword extends BaseComponent {
|
|
39
49
|
constructor(element, config) {
|
|
@@ -41,7 +51,7 @@ class InputPassword extends BaseComponent {
|
|
|
41
51
|
|
|
42
52
|
this._config = this._getConfig(config)
|
|
43
53
|
this._isCustom = this._element.classList.contains(CLASS_NAME_PASSWORD)
|
|
44
|
-
this.
|
|
54
|
+
this._meter = this._element.parentNode.querySelector(SELECTOR_METER)
|
|
45
55
|
this._isShiftPressed = false
|
|
46
56
|
this._isCapsOn = false
|
|
47
57
|
|
|
@@ -51,6 +61,8 @@ class InputPassword extends BaseComponent {
|
|
|
51
61
|
this._capsElement = null
|
|
52
62
|
this._showPwdElement = null
|
|
53
63
|
|
|
64
|
+
this._text = {}
|
|
65
|
+
|
|
54
66
|
this._label = new InputLabel(element)
|
|
55
67
|
|
|
56
68
|
this._init()
|
|
@@ -76,8 +88,8 @@ class InputPassword extends BaseComponent {
|
|
|
76
88
|
}
|
|
77
89
|
|
|
78
90
|
_init() {
|
|
79
|
-
if (this.
|
|
80
|
-
this._grayBarElement = document.createElement('div')
|
|
91
|
+
if (this._meter) {
|
|
92
|
+
/*this._grayBarElement = document.createElement('div')
|
|
81
93
|
this._grayBarElement.classList.add('password-meter', 'progress', 'rounded-0', 'position-absolute')
|
|
82
94
|
this._grayBarElement.innerHTML = `<div class="row position-absolute w-100 m-0">
|
|
83
95
|
<div class="col-3 border-start border-end border-white"></div>
|
|
@@ -107,22 +119,32 @@ class InputPassword extends BaseComponent {
|
|
|
107
119
|
|
|
108
120
|
wrapper.appendChild(this._grayBarElement)
|
|
109
121
|
|
|
110
|
-
this._element.parentNode.insertBefore(wrapper, this._element.nextSibling)
|
|
122
|
+
this._element.parentNode.insertBefore(wrapper, this._element.nextSibling)*/
|
|
123
|
+
|
|
124
|
+
this._grayBarElement = this._meter.querySelector(SELECTOR_METER_GRAYBAR)
|
|
125
|
+
this._colorBarElement = this._meter.querySelector(SELECTOR_METER_COLBAR)
|
|
126
|
+
this._textElement = this._meter.querySelector(SELECTOR_TEXT)
|
|
127
|
+
|
|
128
|
+
if (this._textElement) {
|
|
129
|
+
this._config = Object.assign({}, this._config, { ...Manipulator.getDataAttributes(this._textElement) }, { enterPass: this._textElement.innerText })
|
|
130
|
+
}
|
|
111
131
|
}
|
|
112
132
|
if (this._isCustom) {
|
|
113
|
-
this._capsElement = document.createElement('small')
|
|
133
|
+
/*this._capsElement = document.createElement('small')
|
|
114
134
|
this._capsElement.style.display = 'none'
|
|
115
135
|
this._capsElement.classList.add('password-caps', 'form-text', 'text-warning', 'position-absolute', 'bg-white', 'w-100')
|
|
116
136
|
this._capsElement.innerHTML = this._config.alertCaps
|
|
117
137
|
|
|
118
|
-
this._element.parentNode.appendChild(this._capsElement)
|
|
138
|
+
this._element.parentNode.appendChild(this._capsElement)*/
|
|
139
|
+
|
|
140
|
+
this._capsElement = this._element.parentNode.querySelector(SELECTOR_CAPS)
|
|
119
141
|
}
|
|
120
142
|
|
|
121
143
|
this._showPwdElement = SelectorEngine.findOne(SELECTOR_BTN_SHOW_PWD, this._element.parentNode)
|
|
122
144
|
}
|
|
123
145
|
|
|
124
146
|
_bindEvents() {
|
|
125
|
-
if (this.
|
|
147
|
+
if (this._meter) {
|
|
126
148
|
EventHandler.on(this._element, EVENT_KEYUP, () => this._checkPassword())
|
|
127
149
|
}
|
|
128
150
|
|
|
@@ -163,10 +185,14 @@ class InputPassword extends BaseComponent {
|
|
|
163
185
|
}
|
|
164
186
|
|
|
165
187
|
_showCapsMsg() {
|
|
166
|
-
this._capsElement
|
|
188
|
+
if (this._capsElement) {
|
|
189
|
+
this._capsElement.classList.add(CLASS_NAME_SHOW)
|
|
190
|
+
}
|
|
167
191
|
}
|
|
168
192
|
_hideCapsMsg() {
|
|
169
|
-
this._capsElement
|
|
193
|
+
if (this._capsElement) {
|
|
194
|
+
this._capsElement.classList.remove(CLASS_NAME_SHOW)
|
|
195
|
+
}
|
|
170
196
|
}
|
|
171
197
|
|
|
172
198
|
_toggleShowPassword() {
|
|
@@ -194,7 +220,7 @@ class InputPassword extends BaseComponent {
|
|
|
194
220
|
|
|
195
221
|
EventHandler.trigger(this._element, EVENT_SCORE)
|
|
196
222
|
|
|
197
|
-
if (this.
|
|
223
|
+
if (this._textElement) {
|
|
198
224
|
let text = this._scoreText(score)
|
|
199
225
|
if (this._element.value.length === 0 && score <= 0) {
|
|
200
226
|
text = this._config.enterPass
|
|
@@ -373,9 +399,34 @@ class InputPassword extends BaseComponent {
|
|
|
373
399
|
* ------------------------------------------------------------------------
|
|
374
400
|
*/
|
|
375
401
|
|
|
376
|
-
const inputs = SelectorEngine.find(SELECTOR_PASSWORD)
|
|
402
|
+
/*const inputs = SelectorEngine.find(SELECTOR_PASSWORD)
|
|
377
403
|
inputs.forEach((input) => {
|
|
378
404
|
InputPassword.getOrCreateInstance(input)
|
|
405
|
+
})*/
|
|
406
|
+
|
|
407
|
+
const createInput = (element) => {
|
|
408
|
+
if (element && element.matches(SELECTOR_PASSWORD)) {
|
|
409
|
+
return InputPassword.getOrCreateInstance(element)
|
|
410
|
+
}
|
|
411
|
+
return null
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
EventHandler.on(document, EVENT_MOUSEDOWN_DATA_API, SELECTOR_PASSWORD + ', label', function () {
|
|
415
|
+
const target = InputLabel.getInputFromLabel(this) || this
|
|
416
|
+
createInput(target)
|
|
417
|
+
})
|
|
418
|
+
EventHandler.on(document, EVENT_KEYUP_DATA_API, SELECTOR_PASSWORD + ', label', function () {
|
|
419
|
+
const target = InputLabel.getInputFromLabel(this) || this
|
|
420
|
+
const element = createInput(target)
|
|
421
|
+
if (element && element._label) {
|
|
422
|
+
element._label._labelOut()
|
|
423
|
+
}
|
|
424
|
+
})
|
|
425
|
+
EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_BTN_SHOW_PWD, function () {
|
|
426
|
+
const target = this.parentNode && this.parentNode.querySelector(SELECTOR_PASSWORD)
|
|
427
|
+
if (target) {
|
|
428
|
+
InputPassword.getOrCreateInstance(target)
|
|
429
|
+
}
|
|
379
430
|
})
|
|
380
431
|
|
|
381
432
|
export default InputPassword
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import BaseComponent from 'bootstrap/js/src/base-component'
|
|
4
4
|
import EventHandler from 'bootstrap/js/src/dom/event-handler'
|
|
5
|
-
import SelectorEngine from 'bootstrap/js/src/dom/selector-engine'
|
|
5
|
+
//import SelectorEngine from 'bootstrap/js/src/dom/selector-engine'
|
|
6
6
|
|
|
7
7
|
import InputLabel from './input-label'
|
|
8
8
|
|
|
@@ -17,6 +17,7 @@ const Default = {
|
|
|
17
17
|
|
|
18
18
|
const EVENT_KEYUP = `keyup${EVENT_KEY}`
|
|
19
19
|
const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`
|
|
20
|
+
const EVENT_MOUSEDOWN_DATA_API = `mousedown${EVENT_KEY}${DATA_API_KEY}`
|
|
20
21
|
|
|
21
22
|
const CLASS_NAME_SHOW = 'autocomplete-list-show'
|
|
22
23
|
const CLASS_NAME_AUTOCOMPLETE = 'autocomplete'
|
|
@@ -121,12 +122,31 @@ class InputSearch extends BaseComponent {
|
|
|
121
122
|
* ------------------------------------------------------------------------
|
|
122
123
|
*/
|
|
123
124
|
|
|
124
|
-
const inputs = SelectorEngine.find(SELECTOR_SEARCH)
|
|
125
|
+
/*const inputs = SelectorEngine.find(SELECTOR_SEARCH)
|
|
125
126
|
inputs.forEach((input) => {
|
|
126
127
|
EventHandler.one(input, EVENT_KEYUP_DATA_API, () => {
|
|
127
128
|
const searchInput = InputSearch.getOrCreateInstance(input)
|
|
128
129
|
searchInput.search()
|
|
129
130
|
})
|
|
131
|
+
})*/
|
|
132
|
+
|
|
133
|
+
const createInput = (element) => {
|
|
134
|
+
if (element && element.matches(SELECTOR_SEARCH)) {
|
|
135
|
+
return InputSearch.getOrCreateInstance(element)
|
|
136
|
+
}
|
|
137
|
+
return null
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
EventHandler.on(document, EVENT_MOUSEDOWN_DATA_API, SELECTOR_SEARCH + ', label', function () {
|
|
141
|
+
const target = InputLabel.getInputFromLabel(this) || this
|
|
142
|
+
createInput(target)
|
|
143
|
+
})
|
|
144
|
+
EventHandler.on(document, EVENT_KEYUP_DATA_API, SELECTOR_SEARCH + ', label', function () {
|
|
145
|
+
const target = InputLabel.getInputFromLabel(this) || this
|
|
146
|
+
const element = createInput(target)
|
|
147
|
+
if (element && element._label) {
|
|
148
|
+
element._label._labelOut()
|
|
149
|
+
}
|
|
130
150
|
})
|
|
131
151
|
|
|
132
152
|
export default InputSearch
|
package/src/js/plugins/input.js
CHANGED
|
@@ -8,9 +8,10 @@ import InputLabel from './input-label'
|
|
|
8
8
|
const NAME = 'input'
|
|
9
9
|
const DATA_KEY = 'bs.input'
|
|
10
10
|
const EVENT_KEY = `.${DATA_KEY}`
|
|
11
|
-
|
|
11
|
+
const DATA_API_KEY = '.data-api'
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
const EVENT_MOUSEDOWN_DATA_API = `mousedown${EVENT_KEY}${DATA_API_KEY}`
|
|
14
|
+
const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`
|
|
14
15
|
|
|
15
16
|
const EVENT_CHANGE = `change${EVENT_KEY}`
|
|
16
17
|
|
|
@@ -66,13 +67,14 @@ class Input extends BaseComponent {
|
|
|
66
67
|
*/
|
|
67
68
|
const excludes = [
|
|
68
69
|
'select',
|
|
69
|
-
'input[data-bs-input][type="number"]',
|
|
70
|
+
//'input[data-bs-input][type="number"]',
|
|
70
71
|
'input[data-bs-input][type="password"]',
|
|
72
|
+
'input.input-password[data-bs-input]',
|
|
71
73
|
'input[data-bs-autocomplete][type="search"]',
|
|
72
74
|
'input[type="time"]',
|
|
73
75
|
]
|
|
74
76
|
|
|
75
|
-
const inputs = SelectorEngine.find('input, textarea').filter((input) => {
|
|
77
|
+
/*const inputs = SelectorEngine.find('input, textarea').filter((input) => {
|
|
76
78
|
let result = true
|
|
77
79
|
excludes.forEach((selector) => {
|
|
78
80
|
if (input.matches(selector)) {
|
|
@@ -83,6 +85,27 @@ const inputs = SelectorEngine.find('input, textarea').filter((input) => {
|
|
|
83
85
|
})
|
|
84
86
|
inputs.forEach((input) => {
|
|
85
87
|
Input.getOrCreateInstance(input)
|
|
88
|
+
})*/
|
|
89
|
+
|
|
90
|
+
const createInput = (element) => {
|
|
91
|
+
const toExclude = !!excludes.find((selector) => element.matches(selector))
|
|
92
|
+
const isInputNumber = !!(element.getAttribute('type') === 'number' && element.parentNode.querySelector('button[class^="input-number-"]')) //check if it's a InputNumber component
|
|
93
|
+
if (!toExclude && !isInputNumber) {
|
|
94
|
+
return Input.getOrCreateInstance(element)
|
|
95
|
+
}
|
|
96
|
+
return null
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
EventHandler.on(document, EVENT_MOUSEDOWN_DATA_API, 'input, textarea, label', function () {
|
|
100
|
+
const target = InputLabel.getInputFromLabel(this) || this
|
|
101
|
+
createInput(target)
|
|
102
|
+
})
|
|
103
|
+
EventHandler.on(document, EVENT_KEYUP_DATA_API, 'input, textarea, label', function () {
|
|
104
|
+
const target = InputLabel.getInputFromLabel(this) || this
|
|
105
|
+
const element = createInput(target)
|
|
106
|
+
if (element && element._label) {
|
|
107
|
+
element._label._labelOut()
|
|
108
|
+
}
|
|
86
109
|
})
|
|
87
110
|
|
|
88
111
|
export default Input
|
|
@@ -242,12 +242,11 @@ class NavScroll extends BaseComponent {
|
|
|
242
242
|
* ------------------------------------------------------------------------
|
|
243
243
|
*/
|
|
244
244
|
|
|
245
|
-
|
|
245
|
+
onDocumentScroll(() => {
|
|
246
246
|
const navs = SelectorEngine.find(SELECTOR_NAVSCROLL)
|
|
247
|
-
navs.
|
|
247
|
+
navs.map((nav) => {
|
|
248
248
|
NavScroll.getOrCreateInstance(nav)
|
|
249
249
|
})
|
|
250
|
-
dataApiCb.dispose()
|
|
251
250
|
})
|
|
252
251
|
|
|
253
252
|
export default NavScroll
|
package/src/js/plugins/sticky.js
CHANGED
|
@@ -243,12 +243,11 @@ class Sticky extends BaseComponent {
|
|
|
243
243
|
* ------------------------------------------------------------------------
|
|
244
244
|
*/
|
|
245
245
|
|
|
246
|
-
|
|
246
|
+
onDocumentScroll(() => {
|
|
247
247
|
const stickies = SelectorEngine.find(SELECTOR_DATA_TOGGLE)
|
|
248
|
-
stickies.
|
|
248
|
+
stickies.map((sticky) => {
|
|
249
249
|
Sticky.getOrCreateInstance(sticky)
|
|
250
250
|
})
|
|
251
|
-
dataApiCb.dispose()
|
|
252
251
|
})
|
|
253
252
|
|
|
254
253
|
export default Sticky
|
|
@@ -15,8 +15,10 @@ import SelectorEngine from 'bootstrap/js/src/dom/selector-engine'
|
|
|
15
15
|
const NAME = 'transfer'
|
|
16
16
|
const DATA_KEY = 'bs.transfer'
|
|
17
17
|
const EVENT_KEY = `.${DATA_KEY}`
|
|
18
|
-
|
|
18
|
+
const DATA_API_KEY = '.data-api'
|
|
19
19
|
|
|
20
|
+
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`
|
|
21
|
+
const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`
|
|
20
22
|
//const EVENT_SCROLL = `scroll${EVENT_KEY}`
|
|
21
23
|
const EVENT_CLICK = `click${EVENT_KEY}`
|
|
22
24
|
|
|
@@ -258,8 +260,15 @@ class Transfer extends BaseComponent {
|
|
|
258
260
|
* ------------------------------------------------------------------------
|
|
259
261
|
*/
|
|
260
262
|
|
|
261
|
-
SelectorEngine.find(SELECTOR_BLOCK).forEach((block) => {
|
|
263
|
+
/*SelectorEngine.find(SELECTOR_BLOCK).forEach((block) => {
|
|
262
264
|
Transfer.getOrCreateInstance(block)
|
|
265
|
+
})*/
|
|
266
|
+
|
|
267
|
+
EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_BLOCK + ' .form-check label', function () {
|
|
268
|
+
Transfer.getOrCreateInstance(this.closest(SELECTOR_BLOCK))
|
|
269
|
+
})
|
|
270
|
+
EventHandler.on(document, EVENT_KEYUP_DATA_API, SELECTOR_BLOCK + ' .form-check label', function () {
|
|
271
|
+
Transfer.getOrCreateInstance(this.closest(SELECTOR_BLOCK))
|
|
263
272
|
})
|
|
264
273
|
|
|
265
274
|
export default Transfer
|
|
@@ -6,9 +6,11 @@ import SelectorEngine from 'bootstrap/js/src/dom/selector-engine'
|
|
|
6
6
|
import ProgressDonut from './progress-donut'
|
|
7
7
|
|
|
8
8
|
const NAME = 'upload'
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
const DATA_KEY = 'bs.upload'
|
|
10
|
+
const EVENT_KEY = `.${DATA_KEY}`
|
|
11
|
+
const DATA_API_KEY = '.data-api'
|
|
12
|
+
|
|
13
|
+
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`
|
|
12
14
|
|
|
13
15
|
const EVENT_DRAG = `drag`
|
|
14
16
|
const EVENT_DRAG_START = `dragstart`
|
|
@@ -120,8 +122,23 @@ class UploadDragDrop extends BaseComponent {
|
|
|
120
122
|
* ------------------------------------------------------------------------
|
|
121
123
|
*/
|
|
122
124
|
|
|
123
|
-
SelectorEngine.find(SELECTOR_FORM).forEach((form) => {
|
|
125
|
+
/*SelectorEngine.find(SELECTOR_FORM).forEach((form) => {
|
|
124
126
|
UploadDragDrop.getOrCreateInstance(form)
|
|
127
|
+
})*/
|
|
128
|
+
|
|
129
|
+
const createInput = (element) => {
|
|
130
|
+
let found = element.matches && element.matches(SELECTOR_FORM) ? element : element.closest ? element.closest(SELECTOR_FORM) : null
|
|
131
|
+
if (found) {
|
|
132
|
+
UploadDragDrop.getOrCreateInstance(found)
|
|
133
|
+
}
|
|
134
|
+
return null
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
document.addEventListener('dragenter', function (evt) {
|
|
138
|
+
createInput(evt.target)
|
|
139
|
+
})
|
|
140
|
+
EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_FORM + ' label', function () {
|
|
141
|
+
createInput(this)
|
|
125
142
|
})
|
|
126
143
|
|
|
127
144
|
export default UploadDragDrop
|