coupdoeil
Version:
Javascript for Ruby on Rails Coupdoeil gem
47 lines (41 loc) • 1.44 kB
JavaScript
import {getParams, getType} from "./attributes";
import {clear as clearPopover} from "./closing";
import {currentPopoversById} from "./current";
import {POPOVER_CLOSE_BTN_SELECTOR} from "./config";
export function fetchPopoverContent(controller, lazy = false) {
const type = getType(controller)
const params = getParams(controller)
const authenticityToken = document.querySelector('meta[name=csrf-token]')?.content
let url = `/coupdoeil/popover`
const opts = {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({params, action_name: type, authenticity_token: authenticityToken, lazy})
}
return fetch(url, opts)
.then((response) => {
if (response.status >= 400) {
throw 'error while fetching popover content'
}
return response.text()
})
}
export function executeOnNextFrameIfStillOpening(controller, callback) {
requestAnimationFrame(() => {
const openOrOpening = controller.isOpen || controller.coupdoeilElement.openingPopover;
if (controller.card && openOrOpening && !controller.closingRequest) {
callback.call()
} else {
clearPopover(controller)
}
})
}
export function isElementClosePopoverButton(element) {
return element.closest(POPOVER_CLOSE_BTN_SELECTOR) ||
element.dataset.hasOwnProperty("popoverClose")
}
export function isAnyPopoverOpened() {
return currentPopoversById().size > 0
}