72 lines
1.6 KiB
JavaScript
72 lines
1.6 KiB
JavaScript
|
/** Basic class for poppable elements that need to be closed as soon as one poppable is
|
||
|
* shown.
|
||
|
*/
|
||
|
export default class Poppable {
|
||
|
/** Register the poppable element in a context. Closes previously registered ones.
|
||
|
* @param {*} context
|
||
|
*/
|
||
|
register(context) {
|
||
|
let registered = Poppable.get(context)
|
||
|
if (registered != null) {
|
||
|
registered.close()
|
||
|
}
|
||
|
Poppable.set(context, this)
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Unregister object from context
|
||
|
* @param {*} context
|
||
|
*/
|
||
|
unregister(context) {
|
||
|
Poppable.delete(context)
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the given poppable in a context
|
||
|
* @static
|
||
|
* @param {*} context
|
||
|
* @returns
|
||
|
* @memberof Poppable
|
||
|
*/
|
||
|
static get(context) {
|
||
|
return Poppable.registrations.get(context)
|
||
|
}
|
||
|
|
||
|
/** Sets the poppable in the given context
|
||
|
* @static
|
||
|
* @param {*} context
|
||
|
* @param {*} poppable
|
||
|
* @returns
|
||
|
* @memberof Poppable
|
||
|
*/
|
||
|
static set(context, poppable) {
|
||
|
return Poppable.registrations.set(context, poppable)
|
||
|
}
|
||
|
|
||
|
/** Test whether a poppable exists in the given context
|
||
|
*
|
||
|
* @param {*} context
|
||
|
*/
|
||
|
static has(context) {
|
||
|
return Poppable.registrations.has(context)
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Removes the poppable from the given context.
|
||
|
*
|
||
|
* @static
|
||
|
* @param {*} context
|
||
|
* @memberof Poppable
|
||
|
*/
|
||
|
static delete(context) {
|
||
|
Poppable.registrations.delete(context)
|
||
|
}
|
||
|
|
||
|
/** All poppable must implement a close method. */
|
||
|
close() {
|
||
|
console.error('Must be implemented')
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Poppable.registrations = new Map()
|