UNPKG

coupdoeil

Version:

Javascript for Ruby on Rails Coupdoeil gem

47 lines (41 loc) 1.44 kB
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 }