64 lines
1.6 KiB
TypeScript
64 lines
1.6 KiB
TypeScript
import { ClassFlag } from "../../ClassFlag";
|
|
import { ElementAttribute } from "../../ElementAttribute";
|
|
import { OnClick } from "../../EventListeners";
|
|
|
|
export class ToggleClass
|
|
{
|
|
static readonly attribute = new ElementAttribute( "-toggle--class" );
|
|
static readonly assignedAttribute = new ElementAttribute( "-toggle--class--assigned" );
|
|
static readonly blockDurationMS = 500;
|
|
|
|
static applyOnDocument()
|
|
{
|
|
console.log( "APPLY" );
|
|
ToggleClass.attribute.forEachInDoc( ( e ) => ToggleClass.applyOnElement( e ) );
|
|
}
|
|
|
|
static applyOnElement( element:Element )
|
|
{
|
|
console.log( "APPLY", element );
|
|
|
|
if ( ToggleClass.assignedAttribute.in( element ) )
|
|
{
|
|
return;
|
|
}
|
|
|
|
ToggleClass.assignedAttribute.to( element, "0" );
|
|
|
|
let action = ()=>
|
|
{
|
|
let now = new Date().getTime();
|
|
let time = parseFloat( ToggleClass.assignedAttribute.from( element ) );
|
|
let elapsed = now - time;
|
|
|
|
if ( elapsed < ToggleClass.blockDurationMS )
|
|
{
|
|
return;
|
|
}
|
|
|
|
ToggleClass.assignedAttribute.to( element, now + "");
|
|
|
|
let parameters = ToggleClass.attribute.from( element ).split( ";" );
|
|
let selector = parameters[ 0 ];
|
|
let className = parameters[ 1 ];
|
|
|
|
|
|
let selectedElements = document.querySelectorAll( selector );
|
|
|
|
selectedElements.forEach(
|
|
( selectedElement )=>
|
|
{
|
|
console.log( selector, selectedElement );
|
|
ClassFlag.toggleClass( selectedElement, className );
|
|
}
|
|
)
|
|
|
|
|
|
}
|
|
|
|
OnClick.add( element as HTMLElement, action );
|
|
|
|
|
|
}
|
|
|
|
} |