ziko
Version:
A versatile JavaScript library offering a rich set of Hyperscript Based UI components, advanced mathematical utilities, interactivity ,animations, client side routing and more ...
38 lines (37 loc) • 1.2 kB
JavaScript
import { useEventEmitter } from "../../../hooks/use-event-emitter.js";
class ZikoUseFavIcon{
constructor(FavIcon,withEmitter=true){
this.#init();
this.cache={
Emitter:null
}
if(withEmitter)this.useEventEmitter();
this.set(FavIcon);
}
#init(){
this.__FavIcon__ = document.querySelector("link[rel*='icon']") || document?.createElement('link');
this.__FavIcon__.type = 'image/x-icon';
this.__FavIcon__.rel = 'shortcut icon';
return this;
}
set(href){
if(href!==this.__FavIcon__.href){
this.__FavIcon__.href=href;
if(this.cache.Emitter)this.cache.Emitter.emit("ziko:favicon-changed");
}
return this;
}
get current(){
return document.__FavIcon__.href;
}
onChange(callback){
if(this.cache.Emitter)this.cache.Emitter.on("ziko:favicon-changed",callback);
return this;
}
useEventEmitter(){
this.cache.Emitter=useEventEmitter();
return this;
}
}
const useFavIcon=(FavIcon,withEmitter)=>new ZikoUseFavIcon(FavIcon,withEmitter);
export{ useFavIcon }