@node lib @subsection lib.js General procedures which in theory could be used anywhere. @node Default prototype extensions @subsubsection Default prototype extensions HTMLElement extensions @defmethod HTMLElement addEventListener name proc Replace the default @code{addEventListener} with a version that stores all listeners in the dictionary @var{listeners}. @end defmethod @defivar HTMLElement listeners Dictionary of all registered listeners to this element. Keys are taken from @code{addEventListener}. @end defivar @defmethod DOMTokenList find regexp Finds the first element of the DOMTokenList whichs value matches the supplied regexp. Returns a pair of the index and the value. @end defmethod @defmethod Object format args ... Returns a string representation of the given object. Allows extending for custom types, @ref{date-format} @end defmethod @node General @subsubsection General @defun zip args ... Takes a list of lists, and returns a single list of tuples. @example » zip([1,2,3,4,5], "Hello") ← [[1,'H'],[2,'e'],[3,'l'],[4,'l'],[5,'o']] @end example @end defun @defun makeElement name [attr=@{@}] Creates a new DOM element of type @var{name}, with all keys in @var{attr} transfered to it. For example, the equivalent of @example @end example would be @verbatim values.push(makeElement('input', { type: 'number', })); @end verbatim . @end defun @defun round_time time fraction TODO @end defun @defun date_to_percent date Retuns how far along the date specified by @var{date} is, between 0 and 100, where 00:00 maps to 0, and 23:59 to ~100. @end defun @defun gensym [pxrefix='gensym'] Generates a new string which is (hopefully) globally unique. Compare with @code{gensym} from Lisp. @end defun @defun asList thing Ensures that @var{thing} is a list. Returning it outright if it already is one, otherwise wrapping it in a list. @end defun @node Date @subsubsection Date Some extensions to the builtin class ``Date'' is made. @defivar Date utc Boolean indicating if the given timestamp is in UTC or local time. true means UTC. @end defivar @defivar Date dateonly Boolean indicating if the time component of the Date object should be disregarded. @end defivar @defun parseDate str Takes a string @var{str}, which should be in ISO-8601 date-format, and returns a javascript Date object. Handles date-times, with and without seconds, trailing `Z' for time-zones, and dates without times. If no time is given the @code{dateonly} attribute is set to yes. @end defun @defun copyDate date Creates a new instance of the given Date @var{date}, also transfers my custom fields. @end defun @defun to_local date @anchor{to_local} Returns a Date object (which may be new) which is guaranteed in local time. This means that the @var{utc} field is @code{false}, and that @code{to_local(current_time())} should show what your wall-clock shows. @end defun @defmethod Date format str args ... @anchor{date-format} Formats a Date object according to the format specification @var{str}. Keeping with Guile each format specifier starts with a ~. @c table formatting borrowed from Gulie Reference (SRFI-19 Date to string) @multitable {MMMM} {MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM} @item @nicode{~~} @tab literal ~ @c Almost all fields are left padded. How do I signify this @c with a single footnote? @item @nicode{~Y} @tab year, left-padding with zeroes. @item @nicode{~m} @tab month number, left padded with zeroes. @item @nicode{~d} @tab day of month. @item @nicode{~H} @tab hour @item @nicode{~M} @tab minute @item @nicode{~S} @tab second @item @nicode{~Z} @tab 'Z' if Date is UTC, otherwise nothing @item @nicode{~L} @tab Converts the date to local time (@pxref{to_local}) (doesn't modify source object). Outputs nothing @end multitable @end defmethod @defun format_date date str Equivalent to @code{(@var{date}).format(@var{str})}. @c TODO link @end defun