Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 28 additions & 32 deletions js/src/alert.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
import Data from './dom/data'
import EventHandler from './dom/eventHandler'
import SelectorEngine from './dom/selectorEngine'
import Util from './util'


Expand All @@ -8,7 +11,7 @@ import Util from './util'
* --------------------------------------------------------------------------
*/

const Alert = (($) => {
const Alert = (() => {


/**
Expand Down Expand Up @@ -70,15 +73,15 @@ const Alert = (($) => {
const rootElement = this._getRootElement(element)
const customEvent = this._triggerCloseEvent(rootElement)

if (customEvent.isDefaultPrevented()) {
if (customEvent.defaultPrevented) {
return
}

this._removeElement(rootElement)
}

dispose() {
$.removeData(this._element, DATA_KEY)
Data.removeData(this._element, DATA_KEY)
this._element = null
}

Expand All @@ -90,55 +93,49 @@ const Alert = (($) => {
let parent = false

if (selector) {
parent = $(selector)[0]
parent = SelectorEngine.find(selector)[0]
}

if (!parent) {
parent = $(element).closest(`.${ClassName.ALERT}`)[0]
parent = SelectorEngine.closest(element, `.${ClassName.ALERT}`)
}

return parent
}

_triggerCloseEvent(element) {
const closeEvent = $.Event(Event.CLOSE)

$(element).trigger(closeEvent)
return closeEvent
return EventHandler.trigger(element, Event.CLOSE)
}

_removeElement(element) {
$(element).removeClass(ClassName.SHOW)
element.classList.remove(ClassName.SHOW)

if (!Util.supportsTransitionEnd() ||
!$(element).hasClass(ClassName.FADE)) {
!element.classList.contains(ClassName.FADE)) {
this._destroyElement(element)
return
}

$(element)
.one(Util.TRANSITION_END, (event) => this._destroyElement(element, event))
EventHandler
.one(element, Util.TRANSITION_END, (event) => this._destroyElement(element, event))
Util.emulateTransitionEnd(element, TRANSITION_DURATION)
}

_destroyElement(element) {
$(element)
.detach()
.trigger(Event.CLOSED)
.remove()
EventHandler.trigger(element, Event.CLOSED)
element.parentNode.removeChild(element)
}


// static

static _jQueryInterface(config) {
return this.each(function () {
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder how this still works. each is jQuery specific, isn't it?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes but this method is called only when jQuery is present

const $element = $(this)
let data = $element.data(DATA_KEY)
let data = Data.getData(this, DATA_KEY)

if (!data) {
data = new Alert(this)
$element.data(DATA_KEY, data)
Data.setData(this, DATA_KEY, data)
}

if (config === 'close') {
Expand All @@ -165,29 +162,28 @@ const Alert = (($) => {
* Data Api implementation
* ------------------------------------------------------------------------
*/

$(document).on(
Event.CLICK_DATA_API,
Selector.DISMISS,
Alert._handleDismiss(new Alert())
)
EventHandler.on(document, Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert()))


/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
* add .alert to jQuery only if jQuery is present
*/

$.fn[NAME] = Alert._jQueryInterface
$.fn[NAME].Constructor = Alert
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return Alert._jQueryInterface
if (typeof window.$ !== 'undefined' || typeof window.jQuery !== 'undefined') {
const $ = window.$ || window.jQuery
$.fn[NAME] = Alert._jQueryInterface
$.fn[NAME].Constructor = Alert
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return Alert._jQueryInterface
}
}

return Alert

})(jQuery)
})()

export default Alert
51 changes: 51 additions & 0 deletions js/src/dom/data.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta): dom/data.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/

const mapData = (() => {
const storeData = {}
return {
set(element, key, data) {
let id
if (element.key === undefined) {
element.key = {
key,
id
}
}

storeData[id] = data
},
get(element, key) {
if (element.key === undefined || element.key !== key) {
return null
}
const keyProperties = element.key
return storeData[keyProperties.id]
},
delete(element, key) {
if (element.key === undefined || element.key !== key) {
return
}
const keyProperties = element.key
delete storeData[keyProperties.id]
}
}
})()

const Data = {
setData(instance, key, data) {
mapData.set(instance, key, data)
},
getData(instance, key) {
mapData.get(instance, key)
},
removeData(instance, key) {
mapData.delete(instance, key)
}
}

export default Data
61 changes: 0 additions & 61 deletions js/src/dom/event.js

This file was deleted.

Loading