import Overlay from 'ol/Overlay'
const libNamespace = 'tooltips'
/**
* Service de gestion des tooltips
*/
class Tooltips {
constructor (viewer, options) {
const divPopUp = document.createElement('div')
viewer.TOOLTIPS_LOADED = true
this.ctx = viewer
this.tooltipsList = []
Object.assign(this, options)
divPopUp.id = 'MapViewerTooltip'
this.currentTooltip_ = new Overlay({
element: divPopUp,
positioning: 'bottom-center',
offset: [0, -10],
...options,
})
this.tooltipActive_ = true
}
/**
* Permet de créer un tooltip à partir de HTML
*
* @param {string} content Contenu HTML du tooltip
* @param {Array<number>} coordinate Cooronées sur la carte
* @return {boolean} False si erreur
*/
createTooltip (content, coordinate) {
if (!this.tooltipActive_) {
return false
}
this.currentTooltip_.getElement().innerHTML = content
if (coordinate) {
this.showTooltip(coordinate)
}
}
/**
* Permet de créer un tooltip à partir d'un élément du DOM
* @param {Object} arguments Arguments
* @param {HTMLElement} arguments.node Element HTML à utiliser
* @param {Array<Number>} arguments.coordinate Coordonnées du tooltip
*/
createTooltipWithNode ({ node, coordinate }) {
if (!this.tooltipActive_ || !node) {
return false
}
this.currentTooltip_.getElement().innerHTML = ''
const popupCluser = document.createElement('a')
popupCluser.id = 'popupCloser'
this.currentTooltip_.getElement().appendChild(popupCluser)
this.currentTooltip_.getElement().appendChild(node)
const _this = this
popupCluser.onclick = function () {
_this.hideTooltip()
}
if (coordinate) {
this.showTooltip(coordinate)
}
}
/**
* Permet d'afficher/déplacer un tooltip sans changer son contenu
*
* @param {Array<Number>} coordinate Coordonnées du tooltip
*/
showTooltip (coordinate) {
this.hideTooltip()
this.ctx.Map.addOverlay(this.currentTooltip_)
if (coordinate) {
this.currentTooltip_.setPosition(coordinate)
}
}
/**
* Permet de masquer un tooltip sans vider son contenu
*/
hideTooltip () {
this.ctx.Map.removeOverlay(this.currentTooltip_)
}
/**
* Permet de masquer un tooltip et de supprimer son contenu
*/
deleteTooltip () {
this.hideTooltip()
this.currentTooltip_.getElement().innerHTML = ''
}
/**
* Permet de désactiver les tooltips
*/
disabledTooltip () {
this.deleteTooltip()
this.tooltipActive_ = false
}
/**
* Permet d'activer les tooltips
*/
enabledTooltip () {
this.tooltipActive_ = true
}
}
// Permet d'etendre le module
export default function extendCoreLib (options) {
return function patch (viewer) {
let functions = { }
const obj = new Tooltips(viewer, options)
if (libNamespace === '') {
functions = obj
} else {
functions[libNamespace] = obj
}
return Object.assign(viewer, functions)
}
}