Boost `execute` function, being able to handle arguments (#36652)
This commit is contained in:
parent
708a3a0e39
commit
4cb046a6b8
|
@ -8,6 +8,7 @@
|
||||||
import * as Popper from '@popperjs/core'
|
import * as Popper from '@popperjs/core'
|
||||||
import {
|
import {
|
||||||
defineJQueryPlugin,
|
defineJQueryPlugin,
|
||||||
|
execute,
|
||||||
getElement,
|
getElement,
|
||||||
getNextActiveElement,
|
getNextActiveElement,
|
||||||
isDisabled,
|
isDisabled,
|
||||||
|
@ -319,7 +320,7 @@ class Dropdown extends BaseComponent {
|
||||||
|
|
||||||
return {
|
return {
|
||||||
...defaultBsPopperConfig,
|
...defaultBsPopperConfig,
|
||||||
...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)
|
...execute(this._config.popperConfig, [defaultBsPopperConfig])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import * as Popper from '@popperjs/core'
|
import * as Popper from '@popperjs/core'
|
||||||
import { defineJQueryPlugin, findShadowRoot, getElement, getUID, isRTL, noop } from './util/index'
|
import { defineJQueryPlugin, execute, findShadowRoot, getElement, getUID, isRTL, noop } from './util/index'
|
||||||
import { DefaultAllowlist } from './util/sanitizer'
|
import { DefaultAllowlist } from './util/sanitizer'
|
||||||
import EventHandler from './dom/event-handler'
|
import EventHandler from './dom/event-handler'
|
||||||
import Manipulator from './dom/manipulator'
|
import Manipulator from './dom/manipulator'
|
||||||
|
@ -370,9 +370,7 @@ class Tooltip extends BaseComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
_createPopper(tip) {
|
_createPopper(tip) {
|
||||||
const placement = typeof this._config.placement === 'function' ?
|
const placement = execute(this._config.placement, [this, tip, this._element])
|
||||||
this._config.placement.call(this, tip, this._element) :
|
|
||||||
this._config.placement
|
|
||||||
const attachment = AttachmentMap[placement.toUpperCase()]
|
const attachment = AttachmentMap[placement.toUpperCase()]
|
||||||
return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment))
|
return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment))
|
||||||
}
|
}
|
||||||
|
@ -392,7 +390,7 @@ class Tooltip extends BaseComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
_resolvePossibleFunction(arg) {
|
_resolvePossibleFunction(arg) {
|
||||||
return typeof arg === 'function' ? arg.call(this._element) : arg
|
return execute(arg, [this._element])
|
||||||
}
|
}
|
||||||
|
|
||||||
_getPopperConfig(attachment) {
|
_getPopperConfig(attachment) {
|
||||||
|
@ -438,7 +436,7 @@ class Tooltip extends BaseComponent {
|
||||||
|
|
||||||
return {
|
return {
|
||||||
...defaultBsPopperConfig,
|
...defaultBsPopperConfig,
|
||||||
...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)
|
...execute(this._config.popperConfig, [defaultBsPopperConfig])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -249,10 +249,8 @@ const defineJQueryPlugin = plugin => {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
const execute = callback => {
|
const execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {
|
||||||
if (typeof callback === 'function') {
|
return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue
|
||||||
callback()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {
|
const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { DefaultAllowlist, sanitizeHtml } from './sanitizer'
|
import { DefaultAllowlist, sanitizeHtml } from './sanitizer'
|
||||||
import { getElement, isElement } from '../util/index'
|
import { execute, getElement, isElement } from '../util/index'
|
||||||
import SelectorEngine from '../dom/selector-engine'
|
import SelectorEngine from '../dom/selector-engine'
|
||||||
import Config from './config'
|
import Config from './config'
|
||||||
|
|
||||||
|
@ -143,7 +143,7 @@ class TemplateFactory extends Config {
|
||||||
}
|
}
|
||||||
|
|
||||||
_resolvePossibleFunction(arg) {
|
_resolvePossibleFunction(arg) {
|
||||||
return typeof arg === 'function' ? arg(this) : arg
|
return execute(arg, [this])
|
||||||
}
|
}
|
||||||
|
|
||||||
_putElementInTemplate(element, templateElement) {
|
_putElementInTemplate(element, templateElement) {
|
||||||
|
|
|
@ -631,6 +631,25 @@ describe('Util', () => {
|
||||||
Util.execute(spy)
|
Util.execute(spy)
|
||||||
expect(spy).toHaveBeenCalled()
|
expect(spy).toHaveBeenCalled()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('should execute if arg is function & return the result', () => {
|
||||||
|
const functionFoo = (num1, num2 = 10) => num1 + num2
|
||||||
|
const resultFoo = Util.execute(functionFoo, [4, 5])
|
||||||
|
expect(resultFoo).toBe(9)
|
||||||
|
|
||||||
|
const resultFoo1 = Util.execute(functionFoo, [4])
|
||||||
|
expect(resultFoo1).toBe(14)
|
||||||
|
|
||||||
|
const functionBar = () => 'foo'
|
||||||
|
const resultBar = Util.execute(functionBar)
|
||||||
|
expect(resultBar).toBe('foo')
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should not execute if arg is not function & return default argument', () => {
|
||||||
|
const foo = 'bar'
|
||||||
|
expect(Util.execute(foo)).toBe('bar')
|
||||||
|
expect(Util.execute(foo, [], 4)).toBe(4)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('executeAfterTransition', () => {
|
describe('executeAfterTransition', () => {
|
||||||
|
|
Loading…
Reference in New Issue