Time Control

AGitUser0001
2024-03-30T13:52:55Z

Script allowing you to control time.

This script creates a global time object that allows you to control time in a webpage. This object is only available to access in Developer Tools contexts while time.hidden is true (default true). Developer Tools contexts are contexts where the call stack ends with an anonymous scope in Chrome or Firefox, or global code@ in Safari, as well as where a set of Developer Tools utilities exist as properties on the window object or its prototype chain. Currently, we check for $, $$, $x, clear, copy, inspect, keys, values. In top-level eval scopes while hidden and outside of Developer Tools contexts, we throw a ReferenceError when attempting to access time. We determine eval scopes using stack introspection. This behaviour is necessary to allow code that utilizes eval(str) to check for a global variable (str = 'time') to detect the variable normally. 'time' in window will still output true.

We wrap Date.now, Performance.prototype.now, AnimationTimeline.prototype.currentTime, and Event.prototype.timeStamp with a Proxy that adjusts what is returned when the state has been modified. We wrap setTimeout and setInterval with a Proxy that adjusts the timeout/interval parameter while the state is modified. requestAnimationFrame is wrapped with another Proxy that adjusts the DOMHighResTimeStamp by wrapping the input function if the state has been modified.

The time object contains:

toString(): string Returns the time as a string, should be equivalent to window.Date().

valueOf(): number Returns the time as a number, equivalent to time.now.

jump(newTime: number): void: Jumps time to newTime, a number.

shift(shiftTime: number): void: Shifts time by shiftTime, a number.

reset(resetTime: boolean = true, resetScale: boolean = true, resetDebug: boolean = true): void: Optionally syncs the scale and/or time with real time in the page.

get debug(): boolean:

set debug(value: boolean): void: A boolean that controls logging of calls.

get hidden(): boolean

set hidden(value: boolean): A boolean that controls whether the time object is available only in Developer Tools contexts or All contexts. Defaults to true.

get now(): number: The current time on the page. Should be equal to window.Date.now().

set now(value: number): void: Time jumps to value.

get pristine(): boolean: Whether time has been modified.

set pristine(value): void: If value is true, syncs

get real(): number: The actual time from DateConstructor.now().

get scale(): number: The current scale that time moves at.

set scale(value: number): void: When set, changes the scale of time.

storage

toString(): string Returns the time in storage as a string, should be equivalent to (new window.Date(time.storage.now)).toString().

valueOf(): number Returns the time in storage as a number, equivalent to time.storage.now.

get profile(): string | null: The current profile id, or null if unset.

set profile(value: string | null): void: Set the current profile to value, or unset profile if value is an empty string or null.

get profiles(): string[]: A list of profiles.

erase(profile?: string | null): Erase the profile profile, or the default profile if none is provided.

save(saveTime: boolean = true, saveScale: boolean = true, saveDebug: boolean = true): void:

load(loadTime: boolean = true, loadScale: boolean = true, loadDebug: boolean = true): void: Saves or loads the current time and/or scale in script storage.

reset(resetTime: boolean = true, resetScale: boolean = true, resetDebug: boolean = true): void: Resets the time and/or scale in script storage.

get now(): number: The current time in the script storage.

set now(value: number): void: Time is set to value in the storage.

get pristine(): boolean: Whether time has been modified in the storage.

set pristine(value): void: If value is true, syncs time to real time in storage.

get real(): number: The actual time grabbed from DateConstructor.now().

get scale(): number: The current scale that time moves at in the storage.

set scale(value: number): void: When set, changes the scale of time in storage.