summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/Doxyfile398
-rw-r--r--docs/PACKAGING-GTK25
-rw-r--r--docs/UnimplementedJavascript.md1549
-rw-r--r--docs/UnimplementedJavascript.txt1798
-rw-r--r--docs/building-GTK.md313
-rw-r--r--docs/core-window-interface.md2
-rw-r--r--docs/development.md123
-rw-r--r--docs/env.sh180
-rwxr-xr-xdocs/gource.sh4
-rw-r--r--docs/implementing-new-frontend.md413
-rw-r--r--docs/integration-testing.md542
-rw-r--r--docs/jsbinding.md313
-rw-r--r--docs/logging.md10
-rw-r--r--docs/mainpage.md95
-rw-r--r--docs/netsurf-fb.115
-rw-r--r--docs/netsurf-gtk.110
-rw-r--r--docs/netsurf-options.md2
-rw-r--r--docs/project.md17
-rw-r--r--docs/quick-start.md62
-rw-r--r--docs/source-object-backing-store.md120
-rw-r--r--docs/unit-testing.md (renamed from docs/unit-testing)199
-rw-r--r--docs/user-interface.md61
-rw-r--r--docs/using-framebuffer.md58
-rw-r--r--docs/using-monkey.md128
24 files changed, 3959 insertions, 2478 deletions
diff --git a/docs/Doxyfile b/docs/Doxyfile
index f10669316..974c5a728 100644
--- a/docs/Doxyfile
+++ b/docs/Doxyfile
@@ -1,4 +1,4 @@
-# Doxyfile 1.8.8
+# Doxyfile 1.8.13
# This file describes the settings to be used by the documentation system
# doxygen (www.doxygen.org) for a project.
@@ -32,7 +32,7 @@ DOXYFILE_ENCODING = UTF-8
# title of most generated pages and in a few other places.
# The default value is: My Project.
-PROJECT_NAME = NetSurf
+PROJECT_NAME = "NetSurf"
# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
# could be handy for archiving the generated documentation or if some version
@@ -46,10 +46,10 @@ PROJECT_NUMBER =
PROJECT_BRIEF =
-# With the PROJECT_LOGO tag one can specify an logo or icon that is included in
-# the documentation. The maximum height of the logo should not exceed 55 pixels
-# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo
-# to the output directory.
+# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
+# in the documentation. The maximum height of the logo should not exceed 55
+# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
+# the logo to the output directory.
PROJECT_LOGO =
@@ -60,7 +60,7 @@ PROJECT_LOGO =
OUTPUT_DIRECTORY =
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub-
+# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
# directories (in 2 levels) under the output directory of each output format and
# will distribute the generated files over these directories. Enabling this
# option can be useful when feeding doxygen a huge amount of source files, where
@@ -93,14 +93,14 @@ ALLOW_UNICODE_NAMES = NO
OUTPUT_LANGUAGE = English
-# If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member
+# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
# descriptions after the members that are listed in the file and class
# documentation (similar to Javadoc). Set to NO to disable this.
# The default value is: YES.
BRIEF_MEMBER_DESC = YES
-# If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief
+# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
# description of a member or function before the detailed description
#
# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
@@ -118,7 +118,17 @@ REPEAT_BRIEF = YES
# the entity):The $name class, The $name widget, The $name file, is, provides,
# specifies, contains, represents, a, an and the.
-ABBREVIATE_BRIEF =
+ABBREVIATE_BRIEF = "The $name class" \
+ "The $name widget" \
+ "The $name file" \
+ is \
+ provides \
+ specifies \
+ contains \
+ represents \
+ a \
+ an \
+ the
# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
# doxygen will generate a detailed section even if there is only a brief
@@ -135,7 +145,7 @@ ALWAYS_DETAILED_SEC = NO
INLINE_INHERITED_MEMB = NO
-# If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path
+# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
# before files name in the file list and in the header files. If set to NO the
# shortest path that makes the file name unique will be used
# The default value is: YES.
@@ -205,9 +215,9 @@ MULTILINE_CPP_IS_BRIEF = NO
INHERIT_DOCS = YES
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a
-# new page for each member. If set to NO, the documentation of a member will be
-# part of the file/class/namespace that contains it.
+# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
+# page for each member. If set to NO, the documentation of a member will be part
+# of the file/class/namespace that contains it.
# The default value is: NO.
SEPARATE_MEMBER_PAGES = NO
@@ -276,7 +286,7 @@ OPTIMIZE_OUTPUT_VHDL = NO
# instance to make doxygen treat .inc files as Fortran files (default is PHP),
# and .f files as C (default is Fortran), use: inc=Fortran f=C.
#
-# Note For files without extension you can use no_extension as a placeholder.
+# Note: For files without extension you can use no_extension as a placeholder.
#
# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
# the files are not read by doxygen.
@@ -293,10 +303,19 @@ EXTENSION_MAPPING =
MARKDOWN_SUPPORT = YES
+# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up
+# to that level are automatically included in the table of contents, even if
+# they do not have an id attribute.
+# Note: This feature currently applies only to Markdown headings.
+# Minimum value: 0, maximum value: 99, default value: 0.
+# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.
+
+TOC_INCLUDE_HEADINGS = 3
+
# When enabled doxygen tries to link words that correspond to documented
# classes, or namespaces to their corresponding documentation. Such a link can
-# be prevented in individual cases by by putting a % sign in front of the word
-# or globally by setting AUTOLINK_SUPPORT to NO.
+# be prevented in individual cases by putting a % sign in front of the word or
+# globally by setting AUTOLINK_SUPPORT to NO.
# The default value is: YES.
AUTOLINK_SUPPORT = YES
@@ -336,13 +355,20 @@ SIP_SUPPORT = NO
IDL_PROPERTY_SUPPORT = YES
# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
-# tag is set to YES, then doxygen will reuse the documentation of the first
+# tag is set to YES then doxygen will reuse the documentation of the first
# member in the group (if any) for the other members of the group. By default
# all members of a group must be documented explicitly.
# The default value is: NO.
DISTRIBUTE_GROUP_DOC = NO
+# If one adds a struct or class to a group and this option is enabled, then also
+# any nested class or struct is added to the same group. By default this option
+# is disabled and one has to add nested compounds explicitly via \ingroup.
+# The default value is: NO.
+
+GROUP_NESTED_COMPOUNDS = NO
+
# Set the SUBGROUPING tag to YES to allow class member groups of the same type
# (for instance a group of public functions) to be put as a subgroup of that
# type (e.g. under the Public Functions section). Set it to NO to prevent
@@ -401,7 +427,7 @@ LOOKUP_CACHE_SIZE = 0
# Build related configuration options
#---------------------------------------------------------------------------
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
# documentation are documented, even if no documentation was available. Private
# class members and static file members will be hidden unless the
# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
@@ -411,35 +437,35 @@ LOOKUP_CACHE_SIZE = 0
EXTRACT_ALL = YES
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class will
+# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
# be included in the documentation.
# The default value is: NO.
EXTRACT_PRIVATE = YES
-# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
+# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
# scope will be included in the documentation.
# The default value is: NO.
EXTRACT_PACKAGE = NO
-# If the EXTRACT_STATIC tag is set to YES all static members of a file will be
+# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
# included in the documentation.
# The default value is: NO.
EXTRACT_STATIC = YES
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined
-# locally in source files will be included in the documentation. If set to NO
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
+# locally in source files will be included in the documentation. If set to NO,
# only classes defined in header files are included. Does not have any effect
# for Java sources.
# The default value is: YES.
EXTRACT_LOCAL_CLASSES = YES
-# This flag is only useful for Objective-C code. When set to YES local methods,
+# This flag is only useful for Objective-C code. If set to YES, local methods,
# which are defined in the implementation section but not in the interface are
-# included in the documentation. If set to NO only methods in the interface are
+# included in the documentation. If set to NO, only methods in the interface are
# included.
# The default value is: NO.
@@ -464,21 +490,21 @@ HIDE_UNDOC_MEMBERS = NO
# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
# undocumented classes that are normally visible in the class hierarchy. If set
-# to NO these classes will be included in the various overviews. This option has
-# no effect if EXTRACT_ALL is enabled.
+# to NO, these classes will be included in the various overviews. This option
+# has no effect if EXTRACT_ALL is enabled.
# The default value is: NO.
HIDE_UNDOC_CLASSES = NO
# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
-# (class|struct|union) declarations. If set to NO these declarations will be
+# (class|struct|union) declarations. If set to NO, these declarations will be
# included in the documentation.
# The default value is: NO.
HIDE_FRIEND_COMPOUNDS = NO
# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
-# documentation blocks found inside the body of a function. If set to NO these
+# documentation blocks found inside the body of a function. If set to NO, these
# blocks will be appended to the function's detailed documentation block.
# The default value is: NO.
@@ -492,7 +518,7 @@ HIDE_IN_BODY_DOCS = NO
INTERNAL_DOCS = NO
# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
-# names in lower-case letters. If set to YES upper-case letters are also
+# names in lower-case letters. If set to YES, upper-case letters are also
# allowed. This is useful if you have classes or files whose names only differ
# in case and if your file system supports case sensitive file names. Windows
# and Mac users are advised to set this option to NO.
@@ -501,12 +527,19 @@ INTERNAL_DOCS = NO
CASE_SENSE_NAMES = YES
# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
-# their full class and namespace scopes in the documentation. If set to YES the
+# their full class and namespace scopes in the documentation. If set to YES, the
# scope will be hidden.
# The default value is: NO.
HIDE_SCOPE_NAMES = NO
+# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
+# append additional text to a page's title, such as Class Reference. If set to
+# YES the compound reference will be hidden.
+# The default value is: NO.
+
+HIDE_COMPOUND_REFERENCE= NO
+
# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
# the files that are included by a file in the documentation of that file.
# The default value is: YES.
@@ -534,14 +567,14 @@ INLINE_INFO = YES
# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
# (detailed) documentation of file and class members alphabetically by member
-# name. If set to NO the members will appear in declaration order.
+# name. If set to NO, the members will appear in declaration order.
# The default value is: YES.
SORT_MEMBER_DOCS = YES
# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
# descriptions of file, namespace and class members alphabetically by member
-# name. If set to NO the members will appear in declaration order. Note that
+# name. If set to NO, the members will appear in declaration order. Note that
# this will also influence the order of the classes in the class list.
# The default value is: NO.
@@ -586,27 +619,25 @@ SORT_BY_SCOPE_NAME = NO
STRICT_PROTO_MATCHING = NO
-# The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the
-# todo list. This list is created by putting \todo commands in the
-# documentation.
+# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
+# list. This list is created by putting \todo commands in the documentation.
# The default value is: YES.
GENERATE_TODOLIST = YES
-# The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the
-# test list. This list is created by putting \test commands in the
-# documentation.
+# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
+# list. This list is created by putting \test commands in the documentation.
# The default value is: YES.
GENERATE_TESTLIST = YES
-# The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug
+# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
# list. This list is created by putting \bug commands in the documentation.
# The default value is: YES.
GENERATE_BUGLIST = YES
-# The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO)
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
# the deprecated list. This list is created by putting \deprecated commands in
# the documentation.
# The default value is: YES.
@@ -631,8 +662,8 @@ ENABLED_SECTIONS =
MAX_INITIALIZER_LINES = 30
# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
-# the bottom of the documentation of classes and structs. If set to YES the list
-# will mention the files that were used to generate the documentation.
+# the bottom of the documentation of classes and structs. If set to YES, the
+# list will mention the files that were used to generate the documentation.
# The default value is: YES.
SHOW_USED_FILES = YES
@@ -696,7 +727,7 @@ CITE_BIB_FILES =
QUIET = NO
# The WARNINGS tag can be used to turn on/off the warning messages that are
-# generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES
+# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
# this implies that the warnings are on.
#
# Tip: Turn warnings on while writing the documentation.
@@ -704,7 +735,7 @@ QUIET = NO
WARNINGS = YES
-# If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate
+# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
# will automatically be disabled.
# The default value is: YES.
@@ -721,12 +752,18 @@ WARN_IF_DOC_ERROR = YES
# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
# are documented, but have no documentation for their parameters or return
-# value. If set to NO doxygen will only warn about wrong or incomplete parameter
-# documentation, but not about the absence of documentation.
+# value. If set to NO, doxygen will only warn about wrong or incomplete
+# parameter documentation, but not about the absence of documentation.
# The default value is: NO.
WARN_NO_PARAMDOC = YES
+# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when
+# a warning is encountered.
+# The default value is: NO.
+
+WARN_AS_ERROR = NO
+
# The WARN_FORMAT tag determines the format of the warning messages that doxygen
# can produce. The string should contain the $file, $line, and $text tags, which
# will be replaced by the file and line number from which the warning originated
@@ -750,12 +787,12 @@ WARN_LOGFILE =
# The INPUT tag is used to specify the files and/or directories that contain
# documented source files. You may enter file names like myfile.cpp or
# directories like /usr/src/myproject. Separate the files or directories with
-# spaces.
+# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
# Note: If this tag is empty the current directory is searched.
INPUT = docs \
docs/env.sh \
- docs/UnimplementedJavascript.txt \
+ docs/UnimplementedJavascript.md \
frontends/amiga \
frontends/amiga/stringview \
frontends/atari \
@@ -773,14 +810,16 @@ INPUT = docs \
frontends/riscos/scripts \
frontends/windows \
include/netsurf \
- render \
desktop \
content \
content/fetchers \
+ content/fetchers/file \
content/handlers/image \
content/handlers/css \
content/handlers/javascript \
content/handlers/javascript/duktape \
+ content/handlers/html \
+ content/handlers/text \
utils \
utils/http
@@ -795,20 +834,62 @@ INPUT_ENCODING = UTF-8
# If the value of the INPUT tag contains directories, you can use the
# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
-# *.h) to filter out the source-files in the directories. If left blank the
-# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii,
-# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp,
-# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown,
-# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf,
-# *.qsf, *.as and *.js.
+# *.h) to filter out the source-files in the directories.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# read by doxygen.
+#
+# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
+# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
+# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,
+# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08,
+# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf and *.qsf.
FILE_PATTERNS = *.c \
- *.h \
- *.y \
- *.l \
+ *.cc \
+ *.cxx \
*.cpp \
+ *.c++ \
+ *.java \
+ *.ii \
+ *.ixx \
+ *.ipp \
+ *.i++ \
+ *.inl \
+ *.idl \
+ *.ddl \
+ *.odl \
+ *.h \
+ *.hh \
+ *.hxx \
+ *.hpp \
+ *.h++ \
+ *.cs \
+ *.d \
+ *.php \
+ *.php4 \
+ *.php5 \
+ *.phtml \
+ *.inc \
*.m \
- *.md
+ *.markdown \
+ *.md \
+ *.mm \
+ *.dox \
+ *.py \
+ *.pyw \
+ *.f90 \
+ *.f95 \
+ *.f03 \
+ *.f08 \
+ *.f \
+ *.for \
+ *.tcl \
+ *.vhd \
+ *.vhdl \
+ *.ucf \
+ *.qsf
# The RECURSIVE tag can be used to specify whether or not subdirectories should
# be searched for input files as well.
@@ -863,7 +944,7 @@ EXAMPLE_PATH =
# *.h) to filter out the source-files in the directories. If left blank all
# files are included.
-EXAMPLE_PATTERNS =
+EXAMPLE_PATTERNS = *
# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
# searched for input files to be used with the \include or \dontinclude commands
@@ -892,6 +973,10 @@ IMAGE_PATH =
# Note that the filter must not add or remove lines; it is applied before the
# code is scanned, but not when the output code is generated. If lines are added
# or removed, the anchors will not be placed correctly.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# properly processed by doxygen.
INPUT_FILTER =
@@ -901,11 +986,15 @@ INPUT_FILTER =
# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
# patterns match the file name, INPUT_FILTER is applied.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# properly processed by doxygen.
FILTER_PATTERNS =
# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
-# INPUT_FILTER ) will also be used to filter the input files that are used for
+# INPUT_FILTER) will also be used to filter the input files that are used for
# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
# The default value is: NO.
@@ -965,7 +1054,7 @@ REFERENCED_BY_RELATION = YES
REFERENCES_RELATION = YES
# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
-# to YES, then the hyperlinks from functions in REFERENCES_RELATION and
+# to YES then the hyperlinks from functions in REFERENCES_RELATION and
# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
# link to the documentation.
# The default value is: YES.
@@ -1012,13 +1101,13 @@ USE_HTAGS = NO
VERBATIM_HEADERS = YES
-# If the CLANG_ASSISTED_PARSING tag is set to YES, then doxygen will use the
+# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the
# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the
# cost of reduced performance. This can be particularly helpful with template
# rich C++ code for which doxygen's built-in parser lacks the necessary type
# information.
# Note: The availability of this option depends on whether or not doxygen was
-# compiled with the --with-libclang option.
+# generated with the -Duse-libclang=ON option for CMake.
# The default value is: NO.
CLANG_ASSISTED_PARSING = NO
@@ -1061,7 +1150,7 @@ IGNORE_PREFIX =
# Configuration options related to the HTML output
#---------------------------------------------------------------------------
-# If the GENERATE_HTML tag is set to YES doxygen will generate HTML output
+# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
# The default value is: YES.
GENERATE_HTML = YES
@@ -1127,10 +1216,10 @@ HTML_STYLESHEET =
# cascading style sheets that are included after the standard style sheets
# created by doxygen. Using this option one can overrule certain style aspects.
# This is preferred over using HTML_STYLESHEET since it does not replace the
-# standard style sheet and is therefor more robust against future updates.
+# standard style sheet and is therefore more robust against future updates.
# Doxygen will copy the style sheet files to the output directory.
-# Note: The order of the extra stylesheet files is of importance (e.g. the last
-# stylesheet in the list overrules the setting of the previous ones in the
+# Note: The order of the extra style sheet files is of importance (e.g. the last
+# style sheet in the list overrules the setting of the previous ones in the
# list). For an example see the documentation.
# This tag requires that the tag GENERATE_HTML is set to YES.
@@ -1147,7 +1236,7 @@ HTML_EXTRA_STYLESHEET =
HTML_EXTRA_FILES =
# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
-# will adjust the colors in the stylesheet and background images according to
+# will adjust the colors in the style sheet and background images according to
# this color. Hue is specified as an angle on a colorwheel, see
# http://en.wikipedia.org/wiki/Hue for more information. For instance the value
# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
@@ -1178,8 +1267,9 @@ HTML_COLORSTYLE_GAMMA = 80
# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
# page will contain the date and time when the page was generated. Setting this
-# to NO can help when comparing the output of multiple runs.
-# The default value is: YES.
+# to YES can help to show when doxygen was last run and thus if the
+# documentation is up to date.
+# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_TIMESTAMP = YES
@@ -1275,28 +1365,28 @@ GENERATE_HTMLHELP = NO
CHM_FILE =
# The HHC_LOCATION tag can be used to specify the location (absolute path
-# including file name) of the HTML help compiler ( hhc.exe). If non-empty
+# including file name) of the HTML help compiler (hhc.exe). If non-empty,
# doxygen will try to run the HTML help compiler on the generated index.hhp.
# The file has to be specified with full path.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
HHC_LOCATION =
-# The GENERATE_CHI flag controls if a separate .chi index file is generated (
-# YES) or that it should be included in the master .chm file ( NO).
+# The GENERATE_CHI flag controls if a separate .chi index file is generated
+# (YES) or that it should be included in the master .chm file (NO).
# The default value is: NO.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
GENERATE_CHI = NO
-# The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc)
+# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)
# and project file content.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
CHM_INDEX_ENCODING =
-# The BINARY_TOC flag controls whether a binary table of contents is generated (
-# YES) or a normal table of contents ( NO) in the .chm file. Furthermore it
+# The BINARY_TOC flag controls whether a binary table of contents is generated
+# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it
# enables the Previous and Next buttons.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
@@ -1410,7 +1500,7 @@ DISABLE_INDEX = NO
# index structure (just like the one that is generated for HTML Help). For this
# to work a browser that supports JavaScript, DHTML, CSS and frames is required
# (i.e. any modern browser). Windows users are probably better off using the
-# HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can
+# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
# further fine-tune the look of the index. As an example, the default style
# sheet generated by doxygen has an example that shows how to put an image at
# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
@@ -1438,7 +1528,7 @@ ENUM_VALUES_PER_LINE = 4
TREEVIEW_WIDTH = 250
-# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to
+# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to
# external symbols imported via tag files in a separate window.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
@@ -1467,7 +1557,7 @@ FORMULA_TRANSPARENT = YES
# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
# http://www.mathjax.org) which uses client side Javascript for the rendering
-# instead of using prerendered bitmaps. Use this if you do not have LaTeX
+# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
# installed or if you want to formulas look prettier in the HTML output. When
# enabled you may also need to install MathJax separately and configure the path
# to it using the MATHJAX_RELPATH option.
@@ -1553,7 +1643,7 @@ SERVER_BASED_SEARCH = NO
# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
# search results.
#
-# Doxygen ships with an example indexer ( doxyindexer) and search engine
+# Doxygen ships with an example indexer (doxyindexer) and search engine
# (doxysearch.cgi) which are based on the open source search engine library
# Xapian (see: http://xapian.org/).
#
@@ -1566,7 +1656,7 @@ EXTERNAL_SEARCH = NO
# The SEARCHENGINE_URL should point to a search engine hosted by a web server
# which will return the search results when EXTERNAL_SEARCH is enabled.
#
-# Doxygen ships with an example indexer ( doxyindexer) and search engine
+# Doxygen ships with an example indexer (doxyindexer) and search engine
# (doxysearch.cgi) which are based on the open source search engine library
# Xapian (see: http://xapian.org/). See the section "External Indexing and
# Searching" for details.
@@ -1604,7 +1694,7 @@ EXTRA_SEARCH_MAPPINGS =
# Configuration options related to the LaTeX output
#---------------------------------------------------------------------------
-# If the GENERATE_LATEX tag is set to YES doxygen will generate LaTeX output.
+# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
# The default value is: YES.
GENERATE_LATEX = NO
@@ -1635,7 +1725,7 @@ LATEX_CMD_NAME = latex
MAKEINDEX_CMD_NAME = makeindex
-# If the COMPACT_LATEX tag is set to YES doxygen generates more compact LaTeX
+# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
# documents. This may be useful for small projects and may help to save some
# trees in general.
# The default value is: NO.
@@ -1650,12 +1740,15 @@ COMPACT_LATEX = NO
# The default value is: a4.
# This tag requires that the tag GENERATE_LATEX is set to YES.
-PAPER_TYPE = a4wide
+PAPER_TYPE = a4
# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
-# that should be included in the LaTeX output. To get the times font for
-# instance you can specify
-# EXTRA_PACKAGES=times
+# that should be included in the LaTeX output. The package can be specified just
+# by its name or with the correct syntax as to be used with the LaTeX
+# \usepackage command. To get the times font for instance you can specify :
+# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}
+# To use the option intlimits with the amsmath package you can specify:
+# EXTRA_PACKAGES=[intlimits]{amsmath}
# If left blank no extra packages will be included.
# This tag requires that the tag GENERATE_LATEX is set to YES.
@@ -1670,9 +1763,9 @@ EXTRA_PACKAGES =
# Note: Only use a user-defined header if you know what you are doing! The
# following commands have a special meaning inside the header: $title,
# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
-# $projectbrief, $projectlogo. Doxygen will replace $title with the empy string,
-# for the replacement values of the other commands the user is refered to
-# HTML_HEADER.
+# $projectbrief, $projectlogo. Doxygen will replace $title with the empty
+# string, for the replacement values of the other commands the user is referred
+# to HTML_HEADER.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_HEADER =
@@ -1688,6 +1781,17 @@ LATEX_HEADER =
LATEX_FOOTER =
+# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+# LaTeX style sheets that are included after the standard style sheets created
+# by doxygen. Using this option one can overrule certain style aspects. Doxygen
+# will copy the style sheet files to the output directory.
+# Note: The order of the extra style sheet files is of importance (e.g. the last
+# style sheet in the list overrules the setting of the previous ones in the
+# list).
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_EXTRA_STYLESHEET =
+
# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
# other source files which should be copied to the LATEX_OUTPUT output
# directory. Note that the files will be copied as-is; there are no commands or
@@ -1703,15 +1807,15 @@ LATEX_EXTRA_FILES =
# The default value is: YES.
# This tag requires that the tag GENERATE_LATEX is set to YES.
-PDF_HYPERLINKS = NO
+PDF_HYPERLINKS = YES
# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
-# the PDF file directly from the LaTeX files. Set this option to YES to get a
+# the PDF file directly from the LaTeX files. Set this option to YES, to get a
# higher quality PDF documentation.
# The default value is: YES.
# This tag requires that the tag GENERATE_LATEX is set to YES.
-USE_PDFLATEX = NO
+USE_PDFLATEX = YES
# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
# command to the generated LaTeX files. This will instruct LaTeX to keep running
@@ -1747,11 +1851,19 @@ LATEX_SOURCE_CODE = NO
LATEX_BIB_STYLE = plain
+# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated
+# page will contain the date and time when the page was generated. Setting this
+# to NO can help when comparing the output of multiple runs.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_TIMESTAMP = NO
+
#---------------------------------------------------------------------------
# Configuration options related to the RTF output
#---------------------------------------------------------------------------
-# If the GENERATE_RTF tag is set to YES doxygen will generate RTF output. The
+# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The
# RTF output is optimized for Word 97 and may not look too pretty with other RTF
# readers/editors.
# The default value is: NO.
@@ -1766,7 +1878,7 @@ GENERATE_RTF = NO
RTF_OUTPUT = rtf
-# If the COMPACT_RTF tag is set to YES doxygen generates more compact RTF
+# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF
# documents. This may be useful for small projects and may help to save some
# trees in general.
# The default value is: NO.
@@ -1803,11 +1915,21 @@ RTF_STYLESHEET_FILE =
RTF_EXTENSIONS_FILE =
+# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code
+# with syntax highlighting in the RTF output.
+#
+# Note that which sources are shown also depends on other settings such as
+# SOURCE_BROWSER.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_SOURCE_CODE = NO
+
#---------------------------------------------------------------------------
# Configuration options related to the man page output
#---------------------------------------------------------------------------
-# If the GENERATE_MAN tag is set to YES doxygen will generate man pages for
+# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
# classes and files.
# The default value is: NO.
@@ -1851,7 +1973,7 @@ MAN_LINKS = NO
# Configuration options related to the XML output
#---------------------------------------------------------------------------
-# If the GENERATE_XML tag is set to YES doxygen will generate an XML file that
+# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that
# captures the structure of the code including all documentation.
# The default value is: NO.
@@ -1865,7 +1987,7 @@ GENERATE_XML = NO
XML_OUTPUT = xml
-# If the XML_PROGRAMLISTING tag is set to YES doxygen will dump the program
+# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
# listings (including syntax highlighting and cross-referencing information) to
# the XML output. Note that enabling this will significantly increase the size
# of the XML output.
@@ -1878,7 +2000,7 @@ XML_PROGRAMLISTING = YES
# Configuration options related to the DOCBOOK output
#---------------------------------------------------------------------------
-# If the GENERATE_DOCBOOK tag is set to YES doxygen will generate Docbook files
+# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files
# that can be used to generate PDF.
# The default value is: NO.
@@ -1892,7 +2014,7 @@ GENERATE_DOCBOOK = NO
DOCBOOK_OUTPUT = docbook
-# If the DOCBOOK_PROGRAMLISTING tag is set to YES doxygen will include the
+# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the
# program listings (including syntax highlighting and cross-referencing
# information) to the DOCBOOK output. Note that enabling this will significantly
# increase the size of the DOCBOOK output.
@@ -1905,10 +2027,10 @@ DOCBOOK_PROGRAMLISTING = NO
# Configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
-# If the GENERATE_AUTOGEN_DEF tag is set to YES doxygen will generate an AutoGen
-# Definitions (see http://autogen.sf.net) file that captures the structure of
-# the code including all documentation. Note that this feature is still
-# experimental and incomplete at the moment.
+# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
+# AutoGen Definitions (see http://autogen.sf.net) file that captures the
+# structure of the code including all documentation. Note that this feature is
+# still experimental and incomplete at the moment.
# The default value is: NO.
GENERATE_AUTOGEN_DEF = NO
@@ -1917,7 +2039,7 @@ GENERATE_AUTOGEN_DEF = NO
# Configuration options related to the Perl module output
#---------------------------------------------------------------------------
-# If the GENERATE_PERLMOD tag is set to YES doxygen will generate a Perl module
+# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module
# file that captures the structure of the code including all documentation.
#
# Note that this feature is still experimental and incomplete at the moment.
@@ -1925,7 +2047,7 @@ GENERATE_AUTOGEN_DEF = NO
GENERATE_PERLMOD = NO
-# If the PERLMOD_LATEX tag is set to YES doxygen will generate the necessary
+# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
# output from the Perl module output.
# The default value is: NO.
@@ -1933,9 +2055,9 @@ GENERATE_PERLMOD = NO
PERLMOD_LATEX = NO
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be nicely
+# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
# formatted so it can be parsed by a human reader. This is useful if you want to
-# understand what is going on. On the other hand, if this tag is set to NO the
+# understand what is going on. On the other hand, if this tag is set to NO, the
# size of the Perl module output will be much smaller and Perl will parse it
# just the same.
# The default value is: YES.
@@ -1955,14 +2077,14 @@ PERLMOD_MAKEVAR_PREFIX =
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
-# If the ENABLE_PREPROCESSING tag is set to YES doxygen will evaluate all
+# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
# C-preprocessor directives found in the sources and include files.
# The default value is: YES.
ENABLE_PREPROCESSING = YES
-# If the MACRO_EXPANSION tag is set to YES doxygen will expand all macro names
-# in the source code. If set to NO only conditional compilation will be
+# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
+# in the source code. If set to NO, only conditional compilation will be
# performed. Macro expansion can be done in a controlled way by setting
# EXPAND_ONLY_PREDEF to YES.
# The default value is: NO.
@@ -1978,7 +2100,7 @@ MACRO_EXPANSION = NO
EXPAND_ONLY_PREDEF = NO
-# If the SEARCH_INCLUDES tag is set to YES the includes files in the
+# If the SEARCH_INCLUDES tag is set to YES, the include files in the
# INCLUDE_PATH will be searched if a #include is found.
# The default value is: YES.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
@@ -2055,20 +2177,21 @@ TAGFILES =
GENERATE_TAGFILE =
-# If the ALLEXTERNALS tag is set to YES all external class will be listed in the
-# class index. If set to NO only the inherited external classes will be listed.
+# If the ALLEXTERNALS tag is set to YES, all external class will be listed in
+# the class index. If set to NO, only the inherited external classes will be
+# listed.
# The default value is: NO.
ALLEXTERNALS = NO
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed in
-# the modules index. If set to NO, only the current project's groups will be
+# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will be
# listed.
# The default value is: YES.
EXTERNAL_GROUPS = YES
-# If the EXTERNAL_PAGES tag is set to YES all external pages will be listed in
+# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
# the related pages index. If set to NO, only the current project's pages will
# be listed.
# The default value is: YES.
@@ -2085,7 +2208,7 @@ PERL_PATH = /usr/bin/perl
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
-# If the CLASS_DIAGRAMS tag is set to YES doxygen will generate a class diagram
+# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram
# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
# NO turns the diagrams off. Note that this option also works with HAVE_DOT
# disabled, but it is recommended to install and use dot, since it yields more
@@ -2110,7 +2233,7 @@ MSCGEN_PATH =
DIA_PATH =
-# If set to YES, the inheritance and collaboration graphs will hide inheritance
+# If set to YES the inheritance and collaboration graphs will hide inheritance
# and usage relations if the target is undocumented or is not a class.
# The default value is: YES.
@@ -2183,7 +2306,7 @@ COLLABORATION_GRAPH = YES
GROUP_GRAPHS = YES
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and
# collaboration diagrams in a style similar to the OMG's Unified Modeling
# Language.
# The default value is: NO.
@@ -2235,7 +2358,8 @@ INCLUDED_BY_GRAPH = YES
#
# Note that enabling this option will significantly increase the time of a run.
# So in most cases it will be better to enable call graphs for selected
-# functions only using the \callgraph command.
+# functions only using the \callgraph command. Disabling a call graph can be
+# accomplished by means of the command \hidecallgraph.
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.
@@ -2246,7 +2370,8 @@ CALL_GRAPH = YES
#
# Note that enabling this option will significantly increase the time of a run.
# So in most cases it will be better to enable caller graphs for selected
-# functions only using the \callergraph command.
+# functions only using the \callergraph command. Disabling a caller graph can be
+# accomplished by means of the command \hidecallergraph.
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.
@@ -2269,13 +2394,17 @@ GRAPHICAL_HIERARCHY = YES
DIRECTORY_GRAPH = YES
# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
-# generated by dot.
+# generated by dot. For an explanation of the image formats see the section
+# output formats in the documentation of the dot tool (Graphviz (see:
+# http://www.graphviz.org/)).
# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
# to make the SVG files visible in IE 9+ (other browsers do not have this
# requirement).
# Possible values are: png, png:cairo, png:cairo:cairo, png:cairo:gd, png:gd,
# png:gd:gd, jpg, jpg:cairo, jpg:cairo:gd, jpg:gd, jpg:gd:gd, gif, gif:cairo,
-# gif:cairo:gd, gif:gd, gif:gd:gd and svg.
+# gif:cairo:gd, gif:gd, gif:gd:gd, svg, png:gd, png:gd:gd, png:cairo,
+# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and
+# png:gdiplus:gdiplus.
# The default value is: png.
# This tag requires that the tag HAVE_DOT is set to YES.
@@ -2323,10 +2452,19 @@ DIAFILE_DIRS =
# PlantUML is not used or called during a preprocessing step. Doxygen will
# generate a warning when it encounters a \startuml command in this case and
# will not generate output for the diagram.
-# This tag requires that the tag HAVE_DOT is set to YES.
PLANTUML_JAR_PATH =
+# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a
+# configuration file for plantuml.
+
+PLANTUML_CFG_FILE =
+
+# When using plantuml, the specified paths are searched for files specified by
+# the !include statement in a plantuml block.
+
+PLANTUML_INCLUDE_PATH =
+
# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
# that will be shown in the graph. If the number of nodes in a graph becomes
# larger than this value, doxygen will truncate the graph, which is visualized
@@ -2363,7 +2501,7 @@ MAX_DOT_GRAPH_DEPTH = 0
DOT_TRANSPARENT = NO
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
# files in one run (i.e. multiple -o and -T options on the command line). This
# makes dot run faster, but since only newer versions of dot (>1.8.10) support
# this, this feature is disabled by default.
@@ -2380,7 +2518,7 @@ DOT_MULTI_TARGETS = YES
GENERATE_LEGEND = YES
-# If the DOT_CLEANUP tag is set to YES doxygen will remove the intermediate dot
+# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot
# files that are used to generate the various graphs.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
diff --git a/docs/PACKAGING-GTK b/docs/PACKAGING-GTK
index 8f675229f..b81bc6162 100644
--- a/docs/PACKAGING-GTK
+++ b/docs/PACKAGING-GTK
@@ -24,17 +24,13 @@
The GTK port of NetSurf requires access to some resources at run time.
These are stored in gtk/res/ in the source tree. Some of these files are
- symlinks into the !NetSurf directory, which is the application container
- for the native RISC OS build. None of the other files from the !NetSurf
+ symlinks into the top level resources directory. Not all of the files in the
directory are required - the symlinks are used only as a way of making
checkouts smaller and making sure changes to one set of resources updates
the other.
- The binary that the build system produces is called "nsgtk". There is also
- a shell script called "netsurf" that will set up the environment and launch
- the nsgtk binary. Do not ship this shell script with your package. It is
- included only as a convience for launching NetSurf from the build tree.
- Instead, you should move nsgtk to /usr/bin/netsurf (or wherever your
+ The binary that the build system produces is called "nsgtk3".
+ You should install nsgtk3 to `/usr/bin/netsurf` (or wherever your
distribution's packaging policy suggests) and copy the contents of
gtk/res/ (dereferencing the symlinks, obviously) to /usr/share/netsurf (or
wherever your packaging policy suggests).
@@ -68,18 +64,19 @@
===================
You may also want to change NetSurf's user agent string to include the
- name of your distribution. The user agent string is build by a function
+ name of your distribution. The user agent string is built by a function
kept in utils/useragent.c - you'll want to change the macro called
NETSURF_UA_FORMAT_STRING. It's processed via sprintf, so keep that in
- mind when changing it. The first two printf parameters are major and minor
- version numbers, the second two are OS name (uname -s) and architecture
- (uname -m). You might want change this to something like:
+ mind when changing it. The first format parameter is the OS name (uname -s)
+ and the remainder are major and minor version numbers. You might want
+ to change this to something like:
- "NetSurf/%d.%d (%s; %s; Debian GNU/Linux)"
+ "Mozilla/5.0 (%s; Debian GNU/Linux) NetSurf/%d.%d"
- or similar. Please don't be tempted to mention Mozilla or similar - let's
- let that lie die.
+ or similar.
+ Note that the "Mozilla/5.0" prefix is a requirement to enable modern
+ web standards on many websites. It should not be removed or modified.
Home page URL
===============
diff --git a/docs/UnimplementedJavascript.md b/docs/UnimplementedJavascript.md
new file mode 100644
index 000000000..0d21dc852
--- /dev/null
+++ b/docs/UnimplementedJavascript.md
@@ -0,0 +1,1549 @@
+Unimplemented javascript bindings {#unimplemented}
+=================================
+
+This is a list of all the binding methods, getters and setters without an implementation in a binding.
+
+Type | Unimplemented binding
+---- | ---------------------
+method | URLSearchParams::append();
+method | URLSearchParams::delete();
+method | URLSearchParams::get();
+method | URLSearchParams::getAll();
+method | URLSearchParams::has();
+method | URLSearchParams::set();
+method | URL::domainToASCII();
+method | URL::domainToUnicode();
+getter | URL::href(user);
+setter | URL::href(user);
+getter | URL::origin(user);
+getter | URL::protocol(user);
+setter | URL::protocol(user);
+getter | URL::username(user);
+setter | URL::username(user);
+getter | URL::password(user);
+setter | URL::password(user);
+getter | URL::host(user);
+setter | URL::host(user);
+getter | URL::hostname(user);
+setter | URL::hostname(user);
+getter | URL::port(user);
+setter | URL::port(user);
+getter | URL::pathname(user);
+setter | URL::pathname(user);
+getter | URL::search(user);
+setter | URL::search(user);
+getter | URL::hash(user);
+setter | URL::hash(user);
+getter | URL::searchParams(user);
+setter | URL::searchParams(user);
+getter | Event::timeStamp(user);
+method | MutationEvent::initMutationEvent();
+getter | MutationEvent::relatedNode(user);
+getter | MutationEvent::prevValue(string);
+getter | MutationEvent::newValue(string);
+getter | MutationEvent::attrName(string);
+getter | MutationEvent::attrChange(unsigned short);
+method | UIEvent::initUIEvent();
+getter | UIEvent::view(user);
+getter | UIEvent::detail(long);
+method | CompositionEvent::initCompositionEvent();
+getter | CompositionEvent::data(string);
+method | KeyboardEvent::initKeyboardEvent();
+getter | KeyboardEvent::repeat(boolean);
+getter | KeyboardEvent::isComposing(boolean);
+getter | KeyboardEvent::charCode(unsigned long);
+getter | KeyboardEvent::keyCode(unsigned long);
+getter | KeyboardEvent::which(unsigned long);
+method | MouseEvent::getModifierState();
+method | MouseEvent::initMouseEvent();
+getter | MouseEvent::region(string);
+getter | MouseEvent::screenX(long);
+getter | MouseEvent::screenY(long);
+getter | MouseEvent::clientX(long);
+getter | MouseEvent::clientY(long);
+getter | MouseEvent::ctrlKey(boolean);
+getter | MouseEvent::shiftKey(boolean);
+getter | MouseEvent::altKey(boolean);
+getter | MouseEvent::metaKey(boolean);
+getter | MouseEvent::button(short);
+getter | MouseEvent::relatedTarget(user);
+getter | MouseEvent::buttons(unsigned short);
+method | WheelEvent::initWheelEvent();
+getter | WheelEvent::deltaX(double);
+getter | WheelEvent::deltaY(double);
+getter | WheelEvent::deltaZ(double);
+getter | WheelEvent::deltaMode(unsigned long);
+method | FocusEvent::initFocusEvent();
+getter | FocusEvent::relatedTarget(user);
+method | CSS::escape();
+getter | PseudoElement::cascadedStyle(user);
+getter | PseudoElement::defaultStyle(user);
+getter | PseudoElement::rawComputedStyle(user);
+getter | PseudoElement::usedStyle(user);
+getter | SVGElement::style(user);
+method | CSSStyleDeclaration::item();
+method | CSSStyleDeclaration::getPropertyValue();
+method | CSSStyleDeclaration::getPropertyPriority();
+method | CSSStyleDeclaration::setProperty();
+method | CSSStyleDeclaration::setPropertyValue();
+method | CSSStyleDeclaration::setPropertyPriority();
+method | CSSStyleDeclaration::removeProperty();
+getter | CSSStyleDeclaration::cssText(string);
+setter | CSSStyleDeclaration::cssText(string);
+getter | CSSStyleDeclaration::length(unsigned long);
+getter | CSSStyleDeclaration::parentRule(user);
+getter | CSSStyleDeclaration::cssFloat(string);
+setter | CSSStyleDeclaration::cssFloat(string);
+getter | CSSStyleDeclaration::dashed_attribute(string);
+setter | CSSStyleDeclaration::dashed_attribute(string);
+getter | CSSRule::type(unsigned short);
+getter | CSSRule::cssText(string);
+setter | CSSRule::cssText(string);
+getter | CSSRule::parentRule(user);
+getter | CSSRule::parentStyleSheet(user);
+getter | CSSNamespaceRule::namespaceURI(string);
+getter | CSSNamespaceRule::prefix(string);
+getter | CSSMarginRule::name(string);
+getter | CSSMarginRule::style(user);
+method | CSSGroupingRule::insertRule();
+method | CSSGroupingRule::deleteRule();
+getter | CSSGroupingRule::cssRules(user);
+getter | CSSPageRule::selectorText(string);
+setter | CSSPageRule::selectorText(string);
+getter | CSSPageRule::style(user);
+getter | CSSMediaRule::media(user);
+getter | CSSImportRule::href(string);
+getter | CSSImportRule::media(user);
+getter | CSSImportRule::styleSheet(user);
+getter | CSSStyleRule::selectorText(string);
+setter | CSSStyleRule::selectorText(string);
+getter | CSSStyleRule::style(user);
+method | CSSRuleList::item();
+getter | CSSRuleList::length(unsigned long);
+method | StyleSheetList::item();
+getter | StyleSheetList::length(unsigned long);
+getter | StyleSheet::type(string);
+getter | StyleSheet::href(string);
+getter | StyleSheet::ownerNode(multiple);
+getter | StyleSheet::parentStyleSheet(user);
+getter | StyleSheet::title(string);
+getter | StyleSheet::media(user);
+getter | StyleSheet::disabled(boolean);
+setter | StyleSheet::disabled(boolean);
+method | CSSStyleSheet::insertRule();
+method | CSSStyleSheet::deleteRule();
+getter | CSSStyleSheet::ownerRule(user);
+getter | CSSStyleSheet::cssRules(user);
+method | MediaList::item();
+method | MediaList::appendMedium();
+method | MediaList::deleteMedium();
+getter | MediaList::mediaText(string);
+setter | MediaList::mediaText(string);
+getter | MediaList::length(unsigned long);
+method | Element::hasAttributes();
+method | Element::getAttributeNS();
+method | Element::setAttributeNS();
+method | Element::removeAttributeNS();
+method | Element::hasAttributeNS();
+method | Element::getAttributeNode();
+method | Element::getAttributeNodeNS();
+method | Element::setAttributeNode();
+method | Element::setAttributeNodeNS();
+method | Element::removeAttributeNode();
+method | Element::closest();
+method | Element::matches();
+method | Element::getElementsByTagNameNS();
+method | Element::getElementsByClassName();
+method | Element::insertAdjacentHTML();
+method | Element::pseudo();
+method | Element::prepend();
+method | Element::append();
+method | Element::query();
+method | Element::queryAll();
+method | Element::querySelector();
+method | Element::querySelectorAll();
+method | Element::before();
+method | Element::after();
+method | Element::replaceWith();
+method | Element::remove();
+getter | Element::namespaceURI(string);
+getter | Element::prefix(string);
+getter | Element::localName(string);
+getter | Element::tagName(string);
+getter | Element::outerHTML(string);
+setter | Element::outerHTML(string);
+getter | Element::children(user);
+getter | Element::cascadedStyle(user);
+getter | Element::defaultStyle(user);
+getter | Element::rawComputedStyle(user);
+getter | Element::usedStyle(user);
+method | HTMLElement::click();
+method | HTMLElement::focus();
+method | HTMLElement::blur();
+method | HTMLElement::forceSpellCheck();
+getter | HTMLElement::translate(boolean);
+setter | HTMLElement::translate(boolean);
+getter | HTMLElement::dataset(user);
+getter | HTMLElement::hidden(boolean);
+setter | HTMLElement::hidden(boolean);
+getter | HTMLElement::tabIndex(long);
+setter | HTMLElement::tabIndex(long);
+getter | HTMLElement::accessKey(string);
+setter | HTMLElement::accessKey(string);
+getter | HTMLElement::accessKeyLabel(string);
+getter | HTMLElement::draggable(boolean);
+setter | HTMLElement::draggable(boolean);
+getter | HTMLElement::dropzone(user);
+getter | HTMLElement::contextMenu(user);
+setter | HTMLElement::contextMenu(user);
+getter | HTMLElement::spellcheck(boolean);
+setter | HTMLElement::spellcheck(boolean);
+getter | HTMLElement::commandType(string);
+getter | HTMLElement::commandLabel(string);
+getter | HTMLElement::commandIcon(string);
+getter | HTMLElement::commandHidden(boolean);
+getter | HTMLElement::commandDisabled(boolean);
+getter | HTMLElement::commandChecked(boolean);
+getter | HTMLElement::onerror(user);
+setter | HTMLElement::onerror(user);
+getter | HTMLElement::contentEditable(string);
+setter | HTMLElement::contentEditable(string);
+getter | HTMLElement::isContentEditable(boolean);
+getter | HTMLDirectoryElement::compact(boolean);
+setter | HTMLDirectoryElement::compact(boolean);
+getter | HTMLFrameElement::contentDocument(user);
+getter | HTMLFrameElement::contentWindow(user);
+method | HTMLMarqueeElement::start();
+method | HTMLMarqueeElement::stop();
+getter | HTMLMarqueeElement::behavior(string);
+setter | HTMLMarqueeElement::behavior(string);
+getter | HTMLMarqueeElement::bgColor(string);
+setter | HTMLMarqueeElement::bgColor(string);
+getter | HTMLMarqueeElement::direction(string);
+setter | HTMLMarqueeElement::direction(string);
+getter | HTMLMarqueeElement::height(string);
+setter | HTMLMarqueeElement::height(string);
+getter | HTMLMarqueeElement::hspace(unsigned long);
+setter | HTMLMarqueeElement::hspace(unsigned long);
+getter | HTMLMarqueeElement::loop(long);
+setter | HTMLMarqueeElement::loop(long);
+getter | HTMLMarqueeElement::scrollAmount(unsigned long);
+setter | HTMLMarqueeElement::scrollAmount(unsigned long);
+getter | HTMLMarqueeElement::scrollDelay(unsigned long);
+setter | HTMLMarqueeElement::scrollDelay(unsigned long);
+getter | HTMLMarqueeElement::trueSpeed(boolean);
+setter | HTMLMarqueeElement::trueSpeed(boolean);
+getter | HTMLMarqueeElement::vspace(unsigned long);
+setter | HTMLMarqueeElement::vspace(unsigned long);
+getter | HTMLMarqueeElement::width(string);
+setter | HTMLMarqueeElement::width(string);
+getter | HTMLMarqueeElement::onbounce(user);
+setter | HTMLMarqueeElement::onbounce(user);
+getter | HTMLMarqueeElement::onfinish(user);
+setter | HTMLMarqueeElement::onfinish(user);
+getter | HTMLMarqueeElement::onstart(user);
+setter | HTMLMarqueeElement::onstart(user);
+getter | HTMLAppletElement::hspace(unsigned long);
+setter | HTMLAppletElement::hspace(unsigned long);
+getter | HTMLAppletElement::vspace(unsigned long);
+setter | HTMLAppletElement::vspace(unsigned long);
+getter | StorageEvent::key(string);
+getter | StorageEvent::oldValue(string);
+getter | StorageEvent::newValue(string);
+getter | StorageEvent::url(string);
+getter | StorageEvent::storageArea(user);
+method | Storage::key();
+method | Storage::getItem();
+method | Storage::setItem();
+method | Storage::removeItem();
+method | Storage::clear();
+getter | Storage::length(unsigned long);
+getter | WorkerLocation::href(user);
+getter | WorkerLocation::origin(user);
+getter | WorkerLocation::protocol(user);
+getter | WorkerLocation::host(user);
+getter | WorkerLocation::hostname(user);
+getter | WorkerLocation::port(user);
+getter | WorkerLocation::pathname(user);
+getter | WorkerLocation::search(user);
+getter | WorkerLocation::hash(user);
+method | WorkerNavigator::taintEnabled();
+getter | WorkerNavigator::appCodeName(string);
+getter | WorkerNavigator::appName(string);
+getter | WorkerNavigator::appVersion(string);
+getter | WorkerNavigator::platform(string);
+getter | WorkerNavigator::product(string);
+getter | WorkerNavigator::productSub(string);
+getter | WorkerNavigator::userAgent(string);
+getter | WorkerNavigator::vendor(string);
+getter | WorkerNavigator::vendorSub(string);
+getter | WorkerNavigator::language(string);
+getter | WorkerNavigator::languages(string);
+getter | WorkerNavigator::onLine(boolean);
+getter | SharedWorker::port(user);
+getter | SharedWorker::onerror(user);
+setter | SharedWorker::onerror(user);
+method | Worker::terminate();
+method | Worker::postMessage();
+getter | Worker::onmessage(user);
+setter | Worker::onmessage(user);
+getter | Worker::onerror(user);
+setter | Worker::onerror(user);
+method | WorkerGlobalScope::importScripts();
+method | WorkerGlobalScope::close();
+method | WorkerGlobalScope::btoa();
+method | WorkerGlobalScope::atob();
+method | WorkerGlobalScope::setTimeout();
+method | WorkerGlobalScope::clearTimeout();
+method | WorkerGlobalScope::setInterval();
+method | WorkerGlobalScope::clearInterval();
+method | WorkerGlobalScope::createImageBitmap();
+getter | WorkerGlobalScope::self(user);
+getter | WorkerGlobalScope::location(user);
+getter | WorkerGlobalScope::navigator(user);
+getter | WorkerGlobalScope::onerror(user);
+setter | WorkerGlobalScope::onerror(user);
+getter | WorkerGlobalScope::onlanguagechange(user);
+setter | WorkerGlobalScope::onlanguagechange(user);
+getter | WorkerGlobalScope::onoffline(user);
+setter | WorkerGlobalScope::onoffline(user);
+getter | WorkerGlobalScope::ononline(user);
+setter | WorkerGlobalScope::ononline(user);
+getter | SharedWorkerGlobalScope::name(string);
+getter | SharedWorkerGlobalScope::applicationCache(user);
+getter | SharedWorkerGlobalScope::onconnect(user);
+setter | SharedWorkerGlobalScope::onconnect(user);
+method | DedicatedWorkerGlobalScope::postMessage();
+getter | DedicatedWorkerGlobalScope::onmessage(user);
+setter | DedicatedWorkerGlobalScope::onmessage(user);
+method | BroadcastChannel::postMessage();
+method | BroadcastChannel::close();
+getter | BroadcastChannel::name(string);
+getter | BroadcastChannel::onmessage(user);
+setter | BroadcastChannel::onmessage(user);
+method | MessagePort::postMessage();
+method | MessagePort::start();
+method | MessagePort::close();
+getter | MessagePort::onmessage(user);
+setter | MessagePort::onmessage(user);
+getter | MessageChannel::port1(user);
+getter | MessageChannel::port2(user);
+getter | CloseEvent::wasClean(boolean);
+getter | CloseEvent::code(unsigned short);
+getter | CloseEvent::reason(string);
+method | WebSocket::close();
+method | WebSocket::send();
+getter | WebSocket::url(string);
+getter | WebSocket::readyState(unsigned short);
+getter | WebSocket::bufferedAmount(unsigned long);
+getter | WebSocket::onopen(user);
+setter | WebSocket::onopen(user);
+getter | WebSocket::onerror(user);
+setter | WebSocket::onerror(user);
+getter | WebSocket::onclose(user);
+setter | WebSocket::onclose(user);
+getter | WebSocket::extensions(string);
+getter | WebSocket::protocol(string);
+getter | WebSocket::onmessage(user);
+setter | WebSocket::onmessage(user);
+getter | WebSocket::binaryType(user);
+setter | WebSocket::binaryType(user);
+method | EventSource::close();
+getter | EventSource::url(string);
+getter | EventSource::withCredentials(boolean);
+getter | EventSource::readyState(unsigned short);
+getter | EventSource::onopen(user);
+setter | EventSource::onopen(user);
+getter | EventSource::onmessage(user);
+setter | EventSource::onmessage(user);
+getter | EventSource::onerror(user);
+setter | EventSource::onerror(user);
+method | MessageEvent::initMessageEvent();
+getter | MessageEvent::data(any);
+getter | MessageEvent::origin(string);
+getter | MessageEvent::lastEventId(string);
+getter | MessageEvent::source(multiple);
+getter | MessageEvent::ports(user);
+getter | ImageBitmap::width(unsigned long);
+getter | ImageBitmap::height(unsigned long);
+method | External::AddSearchProvider();
+method | External::IsSearchProviderInstalled();
+getter | MimeType::type(string);
+getter | MimeType::description(string);
+getter | MimeType::suffixes(string);
+getter | MimeType::enabledPlugin(user);
+method | Plugin::item();
+method | Plugin::namedItem();
+getter | Plugin::name(string);
+getter | Plugin::description(string);
+getter | Plugin::filename(string);
+getter | Plugin::length(unsigned long);
+method | MimeTypeArray::item();
+method | MimeTypeArray::namedItem();
+getter | MimeTypeArray::length(unsigned long);
+method | PluginArray::refresh();
+method | PluginArray::item();
+method | PluginArray::namedItem();
+getter | PluginArray::length(unsigned long);
+method | Navigator::registerProtocolHandler();
+method | Navigator::registerContentHandler();
+method | Navigator::isProtocolHandlerRegistered();
+method | Navigator::isContentHandlerRegistered();
+method | Navigator::unregisterProtocolHandler();
+method | Navigator::unregisterContentHandler();
+method | Navigator::yieldForStorageUpdates();
+getter | Navigator::language(string);
+getter | Navigator::languages(string);
+getter | Navigator::onLine(boolean);
+getter | Navigator::plugins(user);
+getter | Navigator::mimeTypes(user);
+getter | ErrorEvent::message(string);
+getter | ErrorEvent::filename(string);
+getter | ErrorEvent::lineno(unsigned long);
+getter | ErrorEvent::colno(unsigned long);
+getter | ErrorEvent::error(any);
+method | ApplicationCache::update();
+method | ApplicationCache::abort();
+method | ApplicationCache::swapCache();
+getter | ApplicationCache::status(unsigned short);
+getter | ApplicationCache::onchecking(user);
+setter | ApplicationCache::onchecking(user);
+getter | ApplicationCache::onerror(user);
+setter | ApplicationCache::onerror(user);
+getter | ApplicationCache::onnoupdate(user);
+setter | ApplicationCache::onnoupdate(user);
+getter | ApplicationCache::ondownloading(user);
+setter | ApplicationCache::ondownloading(user);
+getter | ApplicationCache::onprogress(user);
+setter | ApplicationCache::onprogress(user);
+getter | ApplicationCache::onupdateready(user);
+setter | ApplicationCache::onupdateready(user);
+getter | ApplicationCache::oncached(user);
+setter | ApplicationCache::oncached(user);
+getter | ApplicationCache::onobsolete(user);
+setter | ApplicationCache::onobsolete(user);
+getter | BeforeUnloadEvent::returnValue(string);
+setter | BeforeUnloadEvent::returnValue(string);
+getter | PageTransitionEvent::persisted(boolean);
+getter | HashChangeEvent::oldURL(string);
+getter | HashChangeEvent::newURL(string);
+getter | PopStateEvent::state(any);
+getter | Location::ancestorOrigins(string);
+setter | Location::protocol(user);
+setter | Location::username(user);
+setter | Location::password(user);
+setter | Location::host(user);
+setter | Location::hostname(user);
+setter | Location::port(user);
+setter | Location::pathname(user);
+setter | Location::search(user);
+setter | Location::hash(user);
+method | History::go();
+method | History::back();
+method | History::forward();
+method | History::pushState();
+method | History::replaceState();
+getter | History::length(unsigned long);
+getter | History::state(any);
+getter | BarProp::visible(boolean);
+method | Window::close();
+method | Window::stop();
+method | Window::focus();
+method | Window::blur();
+method | Window::open();
+method | Window::confirm();
+method | Window::prompt();
+method | Window::print();
+method | Window::showModalDialog();
+method | Window::requestAnimationFrame();
+method | Window::cancelAnimationFrame();
+method | Window::postMessage();
+method | Window::captureEvents();
+method | Window::releaseEvents();
+method | Window::getComputedStyle();
+method | Window::btoa();
+method | Window::atob();
+method | Window::createImageBitmap();
+getter | Window::self(user);
+getter | Window::history(user);
+getter | Window::locationbar(user);
+getter | Window::menubar(user);
+getter | Window::personalbar(user);
+getter | Window::scrollbars(user);
+getter | Window::statusbar(user);
+getter | Window::toolbar(user);
+getter | Window::status(string);
+setter | Window::status(string);
+getter | Window::closed(boolean);
+getter | Window::frames(user);
+getter | Window::length(unsigned long);
+getter | Window::top(user);
+getter | Window::opener(any);
+setter | Window::opener(any);
+getter | Window::parent(user);
+getter | Window::frameElement(user);
+getter | Window::external(user);
+getter | Window::applicationCache(user);
+getter | Window::sessionStorage(user);
+getter | Window::localStorage(user);
+getter | DragEvent::dataTransfer(user);
+method | DataTransferItem::getAsString();
+method | DataTransferItem::getAsFile();
+getter | DataTransferItem::kind(string);
+getter | DataTransferItem::type(string);
+method | DataTransferItemList::add();
+method | DataTransferItemList::remove();
+method | DataTransferItemList::clear();
+getter | DataTransferItemList::length(unsigned long);
+method | DataTransfer::setDragImage();
+method | DataTransfer::getData();
+method | DataTransfer::setData();
+method | DataTransfer::clearData();
+getter | DataTransfer::dropEffect(string);
+setter | DataTransfer::dropEffect(string);
+getter | DataTransfer::effectAllowed(string);
+setter | DataTransfer::effectAllowed(string);
+getter | DataTransfer::items(user);
+getter | DataTransfer::types(string);
+getter | DataTransfer::files(user);
+getter | Touch::region(string);
+method | Path2D::addPath();
+method | Path2D::addPathByStrokingPath();
+method | Path2D::addText();
+method | Path2D::addPathByStrokingText();
+method | Path2D::closePath();
+method | Path2D::moveTo();
+method | Path2D::lineTo();
+method | Path2D::quadraticCurveTo();
+method | Path2D::bezierCurveTo();
+method | Path2D::arcTo();
+method | Path2D::rect();
+method | Path2D::arc();
+method | Path2D::ellipse();
+method | DrawingStyle::setLineDash();
+method | DrawingStyle::getLineDash();
+getter | DrawingStyle::lineWidth(double);
+setter | DrawingStyle::lineWidth(double);
+getter | DrawingStyle::lineCap(string);
+setter | DrawingStyle::lineCap(string);
+getter | DrawingStyle::lineJoin(string);
+setter | DrawingStyle::lineJoin(string);
+getter | DrawingStyle::miterLimit(double);
+setter | DrawingStyle::miterLimit(double);
+getter | DrawingStyle::lineDashOffset(double);
+setter | DrawingStyle::lineDashOffset(double);
+getter | DrawingStyle::font(string);
+setter | DrawingStyle::font(string);
+getter | DrawingStyle::textAlign(string);
+setter | DrawingStyle::textAlign(string);
+getter | DrawingStyle::textBaseline(string);
+setter | DrawingStyle::textBaseline(string);
+getter | DrawingStyle::direction(string);
+setter | DrawingStyle::direction(string);
+getter | TextMetrics::width(double);
+getter | TextMetrics::actualBoundingBoxLeft(double);
+getter | TextMetrics::actualBoundingBoxRight(double);
+getter | TextMetrics::fontBoundingBoxAscent(double);
+getter | TextMetrics::fontBoundingBoxDescent(double);
+getter | TextMetrics::actualBoundingBoxAscent(double);
+getter | TextMetrics::actualBoundingBoxDescent(double);
+getter | TextMetrics::emHeightAscent(double);
+getter | TextMetrics::emHeightDescent(double);
+getter | TextMetrics::hangingBaseline(double);
+getter | TextMetrics::alphabeticBaseline(double);
+getter | TextMetrics::ideographicBaseline(double);
+method | CanvasPattern::setTransform();
+method | CanvasGradient::addColorStop();
+method | CanvasRenderingContext2D::commit();
+method | CanvasRenderingContext2D::save();
+method | CanvasRenderingContext2D::restore();
+method | CanvasRenderingContext2D::scale();
+method | CanvasRenderingContext2D::rotate();
+method | CanvasRenderingContext2D::translate();
+method | CanvasRenderingContext2D::transform();
+method | CanvasRenderingContext2D::setTransform();
+method | CanvasRenderingContext2D::resetTransform();
+method | CanvasRenderingContext2D::createLinearGradient();
+method | CanvasRenderingContext2D::createRadialGradient();
+method | CanvasRenderingContext2D::createPattern();
+method | CanvasRenderingContext2D::clearRect();
+method | CanvasRenderingContext2D::fillRect();
+method | CanvasRenderingContext2D::strokeRect();
+method | CanvasRenderingContext2D::beginPath();
+method | CanvasRenderingContext2D::fill();
+method | CanvasRenderingContext2D::stroke();
+method | CanvasRenderingContext2D::drawFocusIfNeeded();
+method | CanvasRenderingContext2D::scrollPathIntoView();
+method | CanvasRenderingContext2D::clip();
+method | CanvasRenderingContext2D::resetClip();
+method | CanvasRenderingContext2D::isPointInPath();
+method | CanvasRenderingContext2D::isPointInStroke();
+method | CanvasRenderingContext2D::fillText();
+method | CanvasRenderingContext2D::strokeText();
+method | CanvasRenderingContext2D::measureText();
+method | CanvasRenderingContext2D::drawImage();
+method | CanvasRenderingContext2D::addHitRegion();
+method | CanvasRenderingContext2D::removeHitRegion();
+method | CanvasRenderingContext2D::clearHitRegions();
+method | CanvasRenderingContext2D::setLineDash();
+method | CanvasRenderingContext2D::getLineDash();
+method | CanvasRenderingContext2D::closePath();
+method | CanvasRenderingContext2D::moveTo();
+method | CanvasRenderingContext2D::lineTo();
+method | CanvasRenderingContext2D::quadraticCurveTo();
+method | CanvasRenderingContext2D::bezierCurveTo();
+method | CanvasRenderingContext2D::arcTo();
+method | CanvasRenderingContext2D::rect();
+method | CanvasRenderingContext2D::arc();
+method | CanvasRenderingContext2D::ellipse();
+getter | CanvasRenderingContext2D::currentTransform(user);
+setter | CanvasRenderingContext2D::currentTransform(user);
+getter | CanvasRenderingContext2D::globalAlpha(double);
+setter | CanvasRenderingContext2D::globalAlpha(double);
+getter | CanvasRenderingContext2D::globalCompositeOperation(string);
+setter | CanvasRenderingContext2D::globalCompositeOperation(string);
+getter | CanvasRenderingContext2D::imageSmoothingEnabled(boolean);
+setter | CanvasRenderingContext2D::imageSmoothingEnabled(boolean);
+getter | CanvasRenderingContext2D::imageSmoothingQuality(user);
+setter | CanvasRenderingContext2D::imageSmoothingQuality(user);
+getter | CanvasRenderingContext2D::strokeStyle(multiple);
+setter | CanvasRenderingContext2D::strokeStyle(multiple);
+getter | CanvasRenderingContext2D::fillStyle(multiple);
+setter | CanvasRenderingContext2D::fillStyle(multiple);
+getter | CanvasRenderingContext2D::shadowOffsetX(double);
+setter | CanvasRenderingContext2D::shadowOffsetX(double);
+getter | CanvasRenderingContext2D::shadowOffsetY(double);
+setter | CanvasRenderingContext2D::shadowOffsetY(double);
+getter | CanvasRenderingContext2D::shadowBlur(double);
+setter | CanvasRenderingContext2D::shadowBlur(double);
+getter | CanvasRenderingContext2D::shadowColor(string);
+setter | CanvasRenderingContext2D::shadowColor(string);
+getter | CanvasRenderingContext2D::lineWidth(double);
+setter | CanvasRenderingContext2D::lineWidth(double);
+getter | CanvasRenderingContext2D::lineCap(string);
+setter | CanvasRenderingContext2D::lineCap(string);
+getter | CanvasRenderingContext2D::lineJoin(string);
+setter | CanvasRenderingContext2D::lineJoin(string);
+getter | CanvasRenderingContext2D::miterLimit(double);
+setter | CanvasRenderingContext2D::miterLimit(double);
+getter | CanvasRenderingContext2D::lineDashOffset(double);
+setter | CanvasRenderingContext2D::lineDashOffset(double);
+getter | CanvasRenderingContext2D::font(string);
+setter | CanvasRenderingContext2D::font(string);
+getter | CanvasRenderingContext2D::textAlign(string);
+setter | CanvasRenderingContext2D::textAlign(string);
+getter | CanvasRenderingContext2D::textBaseline(string);
+setter | CanvasRenderingContext2D::textBaseline(string);
+getter | CanvasRenderingContext2D::direction(string);
+setter | CanvasRenderingContext2D::direction(string);
+method | CanvasProxy::setContext();
+method | HTMLCanvasElement::probablySupportsContext();
+method | HTMLCanvasElement::setContext();
+method | HTMLCanvasElement::transferControlToProxy();
+method | HTMLCanvasElement::toDataURL();
+method | HTMLCanvasElement::toBlob();
+getter | HTMLTemplateElement::content(user);
+getter | HTMLScriptElement::async(boolean);
+setter | HTMLScriptElement::async(boolean);
+getter | HTMLScriptElement::crossOrigin(string);
+setter | HTMLScriptElement::crossOrigin(string);
+getter | HTMLScriptElement::nonce(string);
+setter | HTMLScriptElement::nonce(string);
+method | HTMLDialogElement::show();
+method | HTMLDialogElement::showModal();
+method | HTMLDialogElement::close();
+getter | HTMLDialogElement::open(boolean);
+setter | HTMLDialogElement::open(boolean);
+getter | HTMLDialogElement::returnValue(string);
+setter | HTMLDialogElement::returnValue(string);
+getter | RelatedEvent::relatedTarget(user);
+getter | HTMLMenuItemElement::type(string);
+setter | HTMLMenuItemElement::type(string);
+getter | HTMLMenuItemElement::label(string);
+setter | HTMLMenuItemElement::label(string);
+getter | HTMLMenuItemElement::icon(string);
+setter | HTMLMenuItemElement::icon(string);
+getter | HTMLMenuItemElement::disabled(boolean);
+setter | HTMLMenuItemElement::disabled(boolean);
+getter | HTMLMenuItemElement::checked(boolean);
+setter | HTMLMenuItemElement::checked(boolean);
+getter | HTMLMenuItemElement::radiogroup(string);
+setter | HTMLMenuItemElement::radiogroup(string);
+getter | HTMLMenuItemElement::default(boolean);
+setter | HTMLMenuItemElement::default(boolean);
+getter | HTMLMenuItemElement::command(user);
+getter | HTMLMenuElement::type(string);
+setter | HTMLMenuElement::type(string);
+getter | HTMLMenuElement::label(string);
+setter | HTMLMenuElement::label(string);
+getter | HTMLDetailsElement::open(boolean);
+setter | HTMLDetailsElement::open(boolean);
+getter | ValidityState::valueMissing(boolean);
+getter | ValidityState::typeMismatch(boolean);
+getter | ValidityState::patternMismatch(boolean);
+getter | ValidityState::tooLong(boolean);
+getter | ValidityState::tooShort(boolean);
+getter | ValidityState::rangeUnderflow(boolean);
+getter | ValidityState::rangeOverflow(boolean);
+getter | ValidityState::stepMismatch(boolean);
+getter | ValidityState::badInput(boolean);
+getter | ValidityState::customError(boolean);
+getter | ValidityState::valid(boolean);
+getter | AutocompleteErrorEvent::reason(user);
+getter | HTMLLegendElement::form(user);
+method | HTMLFieldSetElement::checkValidity();
+method | HTMLFieldSetElement::reportValidity();
+method | HTMLFieldSetElement::setCustomValidity();
+getter | HTMLFieldSetElement::disabled(boolean);
+setter | HTMLFieldSetElement::disabled(boolean);
+getter | HTMLFieldSetElement::form(user);
+getter | HTMLFieldSetElement::name(string);
+setter | HTMLFieldSetElement::name(string);
+getter | HTMLFieldSetElement::type(string);
+getter | HTMLFieldSetElement::elements(user);
+getter | HTMLFieldSetElement::willValidate(boolean);
+getter | HTMLFieldSetElement::validity(user);
+getter | HTMLFieldSetElement::validationMessage(string);
+getter | HTMLMeterElement::value(double);
+setter | HTMLMeterElement::value(double);
+getter | HTMLMeterElement::min(double);
+setter | HTMLMeterElement::min(double);
+getter | HTMLMeterElement::max(double);
+setter | HTMLMeterElement::max(double);
+getter | HTMLMeterElement::low(double);
+setter | HTMLMeterElement::low(double);
+getter | HTMLMeterElement::high(double);
+setter | HTMLMeterElement::high(double);
+getter | HTMLMeterElement::optimum(double);
+setter | HTMLMeterElement::optimum(double);
+getter | HTMLMeterElement::labels(user);
+getter | HTMLProgressElement::value(double);
+setter | HTMLProgressElement::value(double);
+getter | HTMLProgressElement::max(double);
+setter | HTMLProgressElement::max(double);
+getter | HTMLProgressElement::position(double);
+getter | HTMLProgressElement::labels(user);
+method | HTMLOutputElement::checkValidity();
+method | HTMLOutputElement::reportValidity();
+method | HTMLOutputElement::setCustomValidity();
+getter | HTMLOutputElement::htmlFor(user);
+getter | HTMLOutputElement::form(user);
+getter | HTMLOutputElement::name(string);
+setter | HTMLOutputElement::name(string);
+getter | HTMLOutputElement::type(string);
+getter | HTMLOutputElement::defaultValue(string);
+setter | HTMLOutputElement::defaultValue(string);
+getter | HTMLOutputElement::value(string);
+setter | HTMLOutputElement::value(string);
+getter | HTMLOutputElement::willValidate(boolean);
+getter | HTMLOutputElement::validity(user);
+getter | HTMLOutputElement::validationMessage(string);
+getter | HTMLOutputElement::labels(user);
+method | HTMLKeygenElement::checkValidity();
+method | HTMLKeygenElement::reportValidity();
+method | HTMLKeygenElement::setCustomValidity();
+getter | HTMLKeygenElement::autofocus(boolean);
+setter | HTMLKeygenElement::autofocus(boolean);
+getter | HTMLKeygenElement::challenge(string);
+setter | HTMLKeygenElement::challenge(string);
+getter | HTMLKeygenElement::disabled(boolean);
+setter | HTMLKeygenElement::disabled(boolean);
+getter | HTMLKeygenElement::form(user);
+getter | HTMLKeygenElement::keytype(string);
+setter | HTMLKeygenElement::keytype(string);
+getter | HTMLKeygenElement::name(string);
+setter | HTMLKeygenElement::name(string);
+getter | HTMLKeygenElement::type(string);
+getter | HTMLKeygenElement::willValidate(boolean);
+getter | HTMLKeygenElement::validity(user);
+getter | HTMLKeygenElement::validationMessage(string);
+getter | HTMLKeygenElement::labels(user);
+method | HTMLTextAreaElement::checkValidity();
+method | HTMLTextAreaElement::reportValidity();
+method | HTMLTextAreaElement::setCustomValidity();
+method | HTMLTextAreaElement::select();
+method | HTMLTextAreaElement::setRangeText();
+method | HTMLTextAreaElement::setSelectionRange();
+getter | HTMLTextAreaElement::autocomplete(string);
+setter | HTMLTextAreaElement::autocomplete(string);
+getter | HTMLTextAreaElement::autofocus(boolean);
+setter | HTMLTextAreaElement::autofocus(boolean);
+getter | HTMLTextAreaElement::cols(unsigned long);
+setter | HTMLTextAreaElement::cols(unsigned long);
+getter | HTMLTextAreaElement::dirName(string);
+setter | HTMLTextAreaElement::dirName(string);
+getter | HTMLTextAreaElement::form(user);
+getter | HTMLTextAreaElement::inputMode(string);
+setter | HTMLTextAreaElement::inputMode(string);
+getter | HTMLTextAreaElement::maxLength(long);
+setter | HTMLTextAreaElement::maxLength(long);
+getter | HTMLTextAreaElement::minLength(long);
+setter | HTMLTextAreaElement::minLength(long);
+getter | HTMLTextAreaElement::placeholder(string);
+setter | HTMLTextAreaElement::placeholder(string);
+getter | HTMLTextAreaElement::required(boolean);
+setter | HTMLTextAreaElement::required(boolean);
+getter | HTMLTextAreaElement::rows(unsigned long);
+setter | HTMLTextAreaElement::rows(unsigned long);
+getter | HTMLTextAreaElement::wrap(string);
+setter | HTMLTextAreaElement::wrap(string);
+getter | HTMLTextAreaElement::textLength(unsigned long);
+getter | HTMLTextAreaElement::willValidate(boolean);
+getter | HTMLTextAreaElement::validity(user);
+getter | HTMLTextAreaElement::validationMessage(string);
+getter | HTMLTextAreaElement::labels(user);
+getter | HTMLTextAreaElement::selectionStart(unsigned long);
+setter | HTMLTextAreaElement::selectionStart(unsigned long);
+getter | HTMLTextAreaElement::selectionEnd(unsigned long);
+setter | HTMLTextAreaElement::selectionEnd(unsigned long);
+getter | HTMLTextAreaElement::selectionDirection(string);
+setter | HTMLTextAreaElement::selectionDirection(string);
+getter | HTMLOptionElement::form(user);
+setter | HTMLOptionElement::text(string);
+getter | HTMLOptionElement::index(long);
+getter | HTMLOptGroupElement::disabled(boolean);
+setter | HTMLOptGroupElement::disabled(boolean);
+getter | HTMLOptGroupElement::label(string);
+setter | HTMLOptGroupElement::label(string);
+getter | HTMLDataListElement::options(user);
+method | HTMLSelectElement::item();
+method | HTMLSelectElement::namedItem();
+method | HTMLSelectElement::add();
+method | HTMLSelectElement::remove();
+method | HTMLSelectElement::checkValidity();
+method | HTMLSelectElement::reportValidity();
+method | HTMLSelectElement::setCustomValidity();
+getter | HTMLSelectElement::autocomplete(string);
+setter | HTMLSelectElement::autocomplete(string);
+getter | HTMLSelectElement::autofocus(boolean);
+setter | HTMLSelectElement::autofocus(boolean);
+getter | HTMLSelectElement::form(user);
+getter | HTMLSelectElement::required(boolean);
+setter | HTMLSelectElement::required(boolean);
+getter | HTMLSelectElement::size(unsigned long);
+setter | HTMLSelectElement::size(unsigned long);
+getter | HTMLSelectElement::options(user);
+getter | HTMLSelectElement::length(unsigned long);
+setter | HTMLSelectElement::length(unsigned long);
+getter | HTMLSelectElement::selectedOptions(user);
+getter | HTMLSelectElement::selectedIndex(long);
+setter | HTMLSelectElement::selectedIndex(long);
+getter | HTMLSelectElement::willValidate(boolean);
+getter | HTMLSelectElement::validity(user);
+getter | HTMLSelectElement::validationMessage(string);
+getter | HTMLSelectElement::labels(user);
+method | HTMLButtonElement::checkValidity();
+method | HTMLButtonElement::reportValidity();
+method | HTMLButtonElement::setCustomValidity();
+getter | HTMLButtonElement::autofocus(boolean);
+setter | HTMLButtonElement::autofocus(boolean);
+getter | HTMLButtonElement::form(user);
+getter | HTMLButtonElement::formAction(string);
+setter | HTMLButtonElement::formAction(string);
+getter | HTMLButtonElement::formEnctype(string);
+setter | HTMLButtonElement::formEnctype(string);
+getter | HTMLButtonElement::formMethod(string);
+setter | HTMLButtonElement::formMethod(string);
+getter | HTMLButtonElement::formNoValidate(boolean);
+setter | HTMLButtonElement::formNoValidate(boolean);
+getter | HTMLButtonElement::formTarget(string);
+setter | HTMLButtonElement::formTarget(string);
+getter | HTMLButtonElement::type(string);
+setter | HTMLButtonElement::type(string);
+getter | HTMLButtonElement::menu(user);
+setter | HTMLButtonElement::menu(user);
+getter | HTMLButtonElement::willValidate(boolean);
+getter | HTMLButtonElement::validity(user);
+getter | HTMLButtonElement::validationMessage(string);
+getter | HTMLButtonElement::labels(user);
+method | HTMLInputElement::stepUp();
+method | HTMLInputElement::stepDown();
+method | HTMLInputElement::checkValidity();
+method | HTMLInputElement::reportValidity();
+method | HTMLInputElement::setCustomValidity();
+method | HTMLInputElement::select();
+method | HTMLInputElement::setRangeText();
+method | HTMLInputElement::setSelectionRange();
+getter | HTMLInputElement::autocomplete(string);
+setter | HTMLInputElement::autocomplete(string);
+getter | HTMLInputElement::autofocus(boolean);
+setter | HTMLInputElement::autofocus(boolean);
+getter | HTMLInputElement::dirName(string);
+setter | HTMLInputElement::dirName(string);
+getter | HTMLInputElement::form(user);
+getter | HTMLInputElement::files(user);
+getter | HTMLInputElement::formAction(string);
+setter | HTMLInputElement::formAction(string);
+getter | HTMLInputElement::formEnctype(string);
+setter | HTMLInputElement::formEnctype(string);
+getter | HTMLInputElement::formMethod(string);
+setter | HTMLInputElement::formMethod(string);
+getter | HTMLInputElement::formNoValidate(boolean);
+setter | HTMLInputElement::formNoValidate(boolean);
+getter | HTMLInputElement::formTarget(string);
+setter | HTMLInputElement::formTarget(string);
+getter | HTMLInputElement::height(unsigned long);
+setter | HTMLInputElement::height(unsigned long);
+getter | HTMLInputElement::indeterminate(boolean);
+setter | HTMLInputElement::indeterminate(boolean);
+getter | HTMLInputElement::inputMode(string);
+setter | HTMLInputElement::inputMode(string);
+getter | HTMLInputElement::list(user);
+getter | HTMLInputElement::max(string);
+setter | HTMLInputElement::max(string);
+getter | HTMLInputElement::min(string);
+setter | HTMLInputElement::min(string);
+getter | HTMLInputElement::minLength(long);
+setter | HTMLInputElement::minLength(long);
+getter | HTMLInputElement::multiple(boolean);
+setter | HTMLInputElement::multiple(boolean);
+getter | HTMLInputElement::pattern(string);
+setter | HTMLInputElement::pattern(string);
+getter | HTMLInputElement::placeholder(string);
+setter | HTMLInputElement::placeholder(string);
+getter | HTMLInputElement::required(boolean);
+setter | HTMLInputElement::required(boolean);
+getter | HTMLInputElement::step(string);
+setter | HTMLInputElement::step(string);
+setter | HTMLInputElement::type(string);
+getter | HTMLInputElement::valueAsDate(date);
+setter | HTMLInputElement::valueAsDate(date);
+getter | HTMLInputElement::valueAsNumber(double);
+setter | HTMLInputElement::valueAsNumber(double);
+getter | HTMLInputElement::valueLow(double);
+setter | HTMLInputElement::valueLow(double);
+getter | HTMLInputElement::valueHigh(double);
+setter | HTMLInputElement::valueHigh(double);
+getter | HTMLInputElement::width(unsigned long);
+setter | HTMLInputElement::width(unsigned long);
+getter | HTMLInputElement::willValidate(boolean);
+getter | HTMLInputElement::validity(user);
+getter | HTMLInputElement::validationMessage(string);
+getter | HTMLInputElement::labels(user);
+getter | HTMLInputElement::selectionStart(unsigned long);
+setter | HTMLInputElement::selectionStart(unsigned long);
+getter | HTMLInputElement::selectionEnd(unsigned long);
+setter | HTMLInputElement::selectionEnd(unsigned long);
+getter | HTMLInputElement::selectionDirection(string);
+setter | HTMLInputElement::selectionDirection(string);
+getter | HTMLLabelElement::form(user);
+getter | HTMLLabelElement::control(user);
+method | HTMLFormElement::submit();
+method | HTMLFormElement::reset();
+method | HTMLFormElement::checkValidity();
+method | HTMLFormElement::reportValidity();
+method | HTMLFormElement::requestAutocomplete();
+getter | HTMLFormElement::autocomplete(string);
+setter | HTMLFormElement::autocomplete(string);
+getter | HTMLFormElement::encoding(string);
+setter | HTMLFormElement::encoding(string);
+getter | HTMLFormElement::name(string);
+setter | HTMLFormElement::name(string);
+getter | HTMLFormElement::noValidate(boolean);
+setter | HTMLFormElement::noValidate(boolean);
+getter | HTMLFormElement::elements(user);
+getter | HTMLFormElement::length(long);
+getter | HTMLTableCellElement::headers(user);
+method | HTMLTableHeaderCellElement::sort();
+getter | HTMLTableHeaderCellElement::scope(string);
+setter | HTMLTableHeaderCellElement::scope(string);
+getter | HTMLTableHeaderCellElement::abbr(string);
+setter | HTMLTableHeaderCellElement::abbr(string);
+getter | HTMLTableHeaderCellElement::sorted(string);
+setter | HTMLTableHeaderCellElement::sorted(string);
+getter | HTMLTableDataCellElement::abbr(string);
+setter | HTMLTableDataCellElement::abbr(string);
+method | HTMLTableRowElement::insertCell();
+method | HTMLTableRowElement::deleteCell();
+getter | HTMLTableRowElement::cells(user);
+method | HTMLTableSectionElement::insertRow();
+method | HTMLTableSectionElement::deleteRow();
+getter | HTMLTableSectionElement::rows(user);
+getter | HTMLTableColElement::span(unsigned long);
+setter | HTMLTableColElement::span(unsigned long);
+method | HTMLTableElement::createCaption();
+method | HTMLTableElement::deleteCaption();
+method | HTMLTableElement::createTHead();
+method | HTMLTableElement::deleteTHead();
+method | HTMLTableElement::createTFoot();
+method | HTMLTableElement::deleteTFoot();
+method | HTMLTableElement::createTBody();
+method | HTMLTableElement::insertRow();
+method | HTMLTableElement::deleteRow();
+method | HTMLTableElement::stopSorting();
+getter | HTMLTableElement::caption(user);
+setter | HTMLTableElement::caption(user);
+getter | HTMLTableElement::tHead(user);
+setter | HTMLTableElement::tHead(user);
+getter | HTMLTableElement::tFoot(user);
+setter | HTMLTableElement::tFoot(user);
+getter | HTMLTableElement::tBodies(user);
+getter | HTMLTableElement::rows(user);
+getter | HTMLTableElement::sortable(boolean);
+setter | HTMLTableElement::sortable(boolean);
+getter | HTMLAreaElement::download(string);
+setter | HTMLAreaElement::download(string);
+getter | HTMLAreaElement::ping(user);
+getter | HTMLAreaElement::rel(string);
+setter | HTMLAreaElement::rel(string);
+getter | HTMLAreaElement::relList(user);
+getter | HTMLAreaElement::hreflang(string);
+setter | HTMLAreaElement::hreflang(string);
+getter | HTMLAreaElement::type(string);
+setter | HTMLAreaElement::type(string);
+getter | HTMLAreaElement::href(user);
+setter | HTMLAreaElement::href(user);
+getter | HTMLAreaElement::origin(user);
+getter | HTMLAreaElement::protocol(user);
+setter | HTMLAreaElement::protocol(user);
+getter | HTMLAreaElement::username(user);
+setter | HTMLAreaElement::username(user);
+getter | HTMLAreaElement::password(user);
+setter | HTMLAreaElement::password(user);
+getter | HTMLAreaElement::host(user);
+setter | HTMLAreaElement::host(user);
+getter | HTMLAreaElement::hostname(user);
+setter | HTMLAreaElement::hostname(user);
+getter | HTMLAreaElement::port(user);
+setter | HTMLAreaElement::port(user);
+getter | HTMLAreaElement::pathname(user);
+setter | HTMLAreaElement::pathname(user);
+getter | HTMLAreaElement::search(user);
+setter | HTMLAreaElement::search(user);
+getter | HTMLAreaElement::hash(user);
+setter | HTMLAreaElement::hash(user);
+getter | HTMLMapElement::areas(user);
+getter | TrackEvent::track(multiple);
+method | TimeRanges::start();
+method | TimeRanges::end();
+getter | TimeRanges::length(unsigned long);
+getter | TextTrackCue::track(user);
+getter | TextTrackCue::id(string);
+setter | TextTrackCue::id(string);
+getter | TextTrackCue::startTime(double);
+setter | TextTrackCue::startTime(double);
+getter | TextTrackCue::endTime(double);
+setter | TextTrackCue::endTime(double);
+getter | TextTrackCue::pauseOnExit(boolean);
+setter | TextTrackCue::pauseOnExit(boolean);
+getter | TextTrackCue::onenter(user);
+setter | TextTrackCue::onenter(user);
+getter | TextTrackCue::onexit(user);
+setter | TextTrackCue::onexit(user);
+method | TextTrackCueList::getCueById();
+getter | TextTrackCueList::length(unsigned long);
+method | TextTrack::addCue();
+method | TextTrack::removeCue();
+getter | TextTrack::kind(user);
+getter | TextTrack::label(string);
+getter | TextTrack::language(string);
+getter | TextTrack::id(string);
+getter | TextTrack::inBandMetadataTrackDispatchType(string);
+getter | TextTrack::mode(user);
+setter | TextTrack::mode(user);
+getter | TextTrack::cues(user);
+getter | TextTrack::activeCues(user);
+getter | TextTrack::oncuechange(user);
+setter | TextTrack::oncuechange(user);
+method | TextTrackList::getTrackById();
+getter | TextTrackList::length(unsigned long);
+getter | TextTrackList::onchange(user);
+setter | TextTrackList::onchange(user);
+getter | TextTrackList::onaddtrack(user);
+setter | TextTrackList::onaddtrack(user);
+getter | TextTrackList::onremovetrack(user);
+setter | TextTrackList::onremovetrack(user);
+method | MediaController::pause();
+method | MediaController::unpause();
+method | MediaController::play();
+getter | MediaController::readyState(unsigned short);
+getter | MediaController::buffered(user);
+getter | MediaController::seekable(user);
+getter | MediaController::duration(double);
+getter | MediaController::currentTime(double);
+setter | MediaController::currentTime(double);
+getter | MediaController::paused(boolean);
+getter | MediaController::playbackState(user);
+getter | MediaController::played(user);
+getter | MediaController::defaultPlaybackRate(double);
+setter | MediaController::defaultPlaybackRate(double);
+getter | MediaController::playbackRate(double);
+setter | MediaController::playbackRate(double);
+getter | MediaController::volume(double);
+setter | MediaController::volume(double);
+getter | MediaController::muted(boolean);
+setter | MediaController::muted(boolean);
+getter | MediaController::onemptied(user);
+setter | MediaController::onemptied(user);
+getter | MediaController::onloadedmetadata(user);
+setter | MediaController::onloadedmetadata(user);
+getter | MediaController::onloadeddata(user);
+setter | MediaController::onloadeddata(user);
+getter | MediaController::oncanplay(user);
+setter | MediaController::oncanplay(user);
+getter | MediaController::oncanplaythrough(user);
+setter | MediaController::oncanplaythrough(user);
+getter | MediaController::onplaying(user);
+setter | MediaController::onplaying(user);
+getter | MediaController::onended(user);
+setter | MediaController::onended(user);
+getter | MediaController::onwaiting(user);
+setter | MediaController::onwaiting(user);
+getter | MediaController::ondurationchange(user);
+setter | MediaController::ondurationchange(user);
+getter | MediaController::ontimeupdate(user);
+setter | MediaController::ontimeupdate(user);
+getter | MediaController::onplay(user);
+setter | MediaController::onplay(user);
+getter | MediaController::onpause(user);
+setter | MediaController::onpause(user);
+getter | MediaController::onratechange(user);
+setter | MediaController::onratechange(user);
+getter | MediaController::onvolumechange(user);
+setter | MediaController::onvolumechange(user);
+getter | VideoTrack::id(string);
+getter | VideoTrack::kind(string);
+getter | VideoTrack::label(string);
+getter | VideoTrack::language(string);
+getter | VideoTrack::selected(boolean);
+setter | VideoTrack::selected(boolean);
+method | VideoTrackList::getTrackById();
+getter | VideoTrackList::length(unsigned long);
+getter | VideoTrackList::selectedIndex(long);
+getter | VideoTrackList::onchange(user);
+setter | VideoTrackList::onchange(user);
+getter | VideoTrackList::onaddtrack(user);
+setter | VideoTrackList::onaddtrack(user);
+getter | VideoTrackList::onremovetrack(user);
+setter | VideoTrackList::onremovetrack(user);
+getter | AudioTrack::id(string);
+getter | AudioTrack::kind(string);
+getter | AudioTrack::label(string);
+getter | AudioTrack::language(string);
+getter | AudioTrack::enabled(boolean);
+setter | AudioTrack::enabled(boolean);
+method | AudioTrackList::getTrackById();
+getter | AudioTrackList::length(unsigned long);
+getter | AudioTrackList::onchange(user);
+setter | AudioTrackList::onchange(user);
+getter | AudioTrackList::onaddtrack(user);
+setter | AudioTrackList::onaddtrack(user);
+getter | AudioTrackList::onremovetrack(user);
+setter | AudioTrackList::onremovetrack(user);
+getter | MediaError::code(unsigned short);
+method | HTMLMediaElement::load();
+method | HTMLMediaElement::canPlayType();
+method | HTMLMediaElement::fastSeek();
+method | HTMLMediaElement::getStartDate();
+method | HTMLMediaElement::play();
+method | HTMLMediaElement::pause();
+method | HTMLMediaElement::addTextTrack();
+getter | HTMLMediaElement::error(user);
+getter | HTMLMediaElement::src(string);
+setter | HTMLMediaElement::src(string);
+getter | HTMLMediaElement::srcObject(user);
+setter | HTMLMediaElement::srcObject(user);
+getter | HTMLMediaElement::currentSrc(string);
+getter | HTMLMediaElement::crossOrigin(string);
+setter | HTMLMediaElement::crossOrigin(string);
+getter | HTMLMediaElement::networkState(unsigned short);
+getter | HTMLMediaElement::preload(string);
+setter | HTMLMediaElement::preload(string);
+getter | HTMLMediaElement::buffered(user);
+getter | HTMLMediaElement::readyState(unsigned short);
+getter | HTMLMediaElement::seeking(boolean);
+getter | HTMLMediaElement::currentTime(double);
+setter | HTMLMediaElement::currentTime(double);
+getter | HTMLMediaElement::duration(double);
+getter | HTMLMediaElement::paused(boolean);
+getter | HTMLMediaElement::defaultPlaybackRate(double);
+setter | HTMLMediaElement::defaultPlaybackRate(double);
+getter | HTMLMediaElement::playbackRate(double);
+setter | HTMLMediaElement::playbackRate(double);
+getter | HTMLMediaElement::played(user);
+getter | HTMLMediaElement::seekable(user);
+getter | HTMLMediaElement::ended(boolean);
+getter | HTMLMediaElement::autoplay(boolean);
+setter | HTMLMediaElement::autoplay(boolean);
+getter | HTMLMediaElement::loop(boolean);
+setter | HTMLMediaElement::loop(boolean);
+getter | HTMLMediaElement::mediaGroup(string);
+setter | HTMLMediaElement::mediaGroup(string);
+getter | HTMLMediaElement::controller(user);
+setter | HTMLMediaElement::controller(user);
+getter | HTMLMediaElement::controls(boolean);
+setter | HTMLMediaElement::controls(boolean);
+getter | HTMLMediaElement::volume(double);
+setter | HTMLMediaElement::volume(double);
+getter | HTMLMediaElement::muted(boolean);
+setter | HTMLMediaElement::muted(boolean);
+getter | HTMLMediaElement::defaultMuted(boolean);
+setter | HTMLMediaElement::defaultMuted(boolean);
+getter | HTMLMediaElement::audioTracks(user);
+getter | HTMLMediaElement::videoTracks(user);
+getter | HTMLMediaElement::textTracks(user);
+getter | HTMLTrackElement::kind(string);
+setter | HTMLTrackElement::kind(string);
+getter | HTMLTrackElement::src(string);
+setter | HTMLTrackElement::src(string);
+getter | HTMLTrackElement::srclang(string);
+setter | HTMLTrackElement::srclang(string);
+getter | HTMLTrackElement::label(string);
+setter | HTMLTrackElement::label(string);
+getter | HTMLTrackElement::default(boolean);
+setter | HTMLTrackElement::default(boolean);
+getter | HTMLTrackElement::readyState(unsigned short);
+getter | HTMLTrackElement::track(user);
+getter | HTMLVideoElement::width(unsigned long);
+setter | HTMLVideoElement::width(unsigned long);
+getter | HTMLVideoElement::height(unsigned long);
+setter | HTMLVideoElement::height(unsigned long);
+getter | HTMLVideoElement::videoWidth(unsigned long);
+getter | HTMLVideoElement::videoHeight(unsigned long);
+getter | HTMLVideoElement::poster(string);
+setter | HTMLVideoElement::poster(string);
+method | HTMLObjectElement::getSVGDocument();
+method | HTMLObjectElement::checkValidity();
+method | HTMLObjectElement::reportValidity();
+method | HTMLObjectElement::setCustomValidity();
+getter | HTMLObjectElement::typeMustMatch(boolean);
+setter | HTMLObjectElement::typeMustMatch(boolean);
+getter | HTMLObjectElement::form(user);
+getter | HTMLObjectElement::contentDocument(user);
+getter | HTMLObjectElement::contentWindow(user);
+getter | HTMLObjectElement::willValidate(boolean);
+getter | HTMLObjectElement::validity(user);
+getter | HTMLObjectElement::validationMessage(string);
+getter | HTMLObjectElement::hspace(unsigned long);
+setter | HTMLObjectElement::hspace(unsigned long);
+getter | HTMLObjectElement::vspace(unsigned long);
+setter | HTMLObjectElement::vspace(unsigned long);
+method | HTMLEmbedElement::getSVGDocument();
+getter | HTMLEmbedElement::src(string);
+setter | HTMLEmbedElement::src(string);
+getter | HTMLEmbedElement::type(string);
+setter | HTMLEmbedElement::type(string);
+getter | HTMLEmbedElement::width(string);
+setter | HTMLEmbedElement::width(string);
+getter | HTMLEmbedElement::height(string);
+setter | HTMLEmbedElement::height(string);
+getter | HTMLEmbedElement::align(string);
+setter | HTMLEmbedElement::align(string);
+getter | HTMLEmbedElement::name(string);
+setter | HTMLEmbedElement::name(string);
+method | HTMLIFrameElement::getSVGDocument();
+getter | HTMLIFrameElement::srcdoc(string);
+setter | HTMLIFrameElement::srcdoc(string);
+getter | HTMLIFrameElement::sandbox(user);
+getter | HTMLIFrameElement::seamless(boolean);
+setter | HTMLIFrameElement::seamless(boolean);
+getter | HTMLIFrameElement::allowFullscreen(boolean);
+setter | HTMLIFrameElement::allowFullscreen(boolean);
+getter | HTMLIFrameElement::contentDocument(user);
+getter | HTMLIFrameElement::contentWindow(user);
+getter | HTMLImageElement::srcset(string);
+setter | HTMLImageElement::srcset(string);
+getter | HTMLImageElement::sizes(string);
+setter | HTMLImageElement::sizes(string);
+getter | HTMLImageElement::crossOrigin(string);
+setter | HTMLImageElement::crossOrigin(string);
+getter | HTMLImageElement::naturalWidth(unsigned long);
+getter | HTMLImageElement::naturalHeight(unsigned long);
+getter | HTMLImageElement::complete(boolean);
+getter | HTMLImageElement::currentSrc(string);
+getter | HTMLImageElement::lowsrc(string);
+setter | HTMLImageElement::lowsrc(string);
+getter | HTMLSourceElement::srcset(string);
+setter | HTMLSourceElement::srcset(string);
+getter | HTMLSourceElement::sizes(string);
+setter | HTMLSourceElement::sizes(string);
+getter | HTMLSourceElement::media(string);
+setter | HTMLSourceElement::media(string);
+getter | HTMLSourceElement::src(string);
+setter | HTMLSourceElement::src(string);
+getter | HTMLSourceElement::type(string);
+setter | HTMLSourceElement::type(string);
+getter | HTMLModElement::cite(string);
+setter | HTMLModElement::cite(string);
+getter | HTMLModElement::dateTime(string);
+setter | HTMLModElement::dateTime(string);
+getter | HTMLTimeElement::dateTime(string);
+setter | HTMLTimeElement::dateTime(string);
+getter | HTMLDataElement::value(string);
+setter | HTMLDataElement::value(string);
+getter | HTMLAnchorElement::download(string);
+setter | HTMLAnchorElement::download(string);
+getter | HTMLAnchorElement::ping(user);
+getter | HTMLAnchorElement::relList(user);
+getter | HTMLAnchorElement::type(string);
+setter | HTMLAnchorElement::type(string);
+getter | HTMLAnchorElement::text(string);
+setter | HTMLAnchorElement::text(string);
+getter | HTMLAnchorElement::href(user);
+setter | HTMLAnchorElement::href(user);
+getter | HTMLAnchorElement::origin(user);
+getter | HTMLAnchorElement::protocol(user);
+setter | HTMLAnchorElement::protocol(user);
+getter | HTMLAnchorElement::username(user);
+setter | HTMLAnchorElement::username(user);
+getter | HTMLAnchorElement::password(user);
+setter | HTMLAnchorElement::password(user);
+getter | HTMLAnchorElement::host(user);
+setter | HTMLAnchorElement::host(user);
+getter | HTMLAnchorElement::hostname(user);
+setter | HTMLAnchorElement::hostname(user);
+getter | HTMLAnchorElement::port(user);
+setter | HTMLAnchorElement::port(user);
+getter | HTMLAnchorElement::pathname(user);
+setter | HTMLAnchorElement::pathname(user);
+getter | HTMLAnchorElement::search(user);
+setter | HTMLAnchorElement::search(user);
+getter | HTMLAnchorElement::hash(user);
+setter | HTMLAnchorElement::hash(user);
+getter | HTMLDListElement::compact(boolean);
+setter | HTMLDListElement::compact(boolean);
+getter | HTMLUListElement::compact(boolean);
+setter | HTMLUListElement::compact(boolean);
+getter | HTMLUListElement::type(string);
+setter | HTMLUListElement::type(string);
+getter | HTMLOListElement::reversed(boolean);
+setter | HTMLOListElement::reversed(boolean);
+getter | HTMLHRElement::color(string);
+setter | HTMLHRElement::color(string);
+getter | HTMLStyleElement::nonce(string);
+setter | HTMLStyleElement::nonce(string);
+getter | HTMLStyleElement::scoped(boolean);
+setter | HTMLStyleElement::scoped(boolean);
+getter | HTMLStyleElement::sheet(user);
+getter | HTMLLinkElement::crossOrigin(string);
+setter | HTMLLinkElement::crossOrigin(string);
+getter | HTMLLinkElement::relList(user);
+getter | HTMLLinkElement::sizes(user);
+getter | HTMLLinkElement::sheet(user);
+method | HTMLCollection::item();
+method | HTMLCollection::namedItem();
+getter | HTMLCollection::length(unsigned long);
+method | HTMLOptionsCollection::add();
+method | HTMLOptionsCollection::remove();
+getter | HTMLOptionsCollection::length(unsigned long);
+setter | HTMLOptionsCollection::length(unsigned long);
+getter | HTMLOptionsCollection::selectedIndex(long);
+setter | HTMLOptionsCollection::selectedIndex(long);
+getter | RadioNodeList::value(string);
+setter | RadioNodeList::value(string);
+method | HTMLFormControlsCollection::namedItem();
+method | HTMLAllCollection::item();
+method | HTMLAllCollection::namedItem();
+getter | HTMLAllCollection::length(unsigned long);
+method | XMLSerializer::serializeToString();
+method | DOMParser::parseFromString();
+method | NodeFilter::acceptNode();
+method | TreeWalker::parentNode();
+method | TreeWalker::firstChild();
+method | TreeWalker::lastChild();
+method | TreeWalker::previousSibling();
+method | TreeWalker::nextSibling();
+method | TreeWalker::previousNode();
+method | TreeWalker::nextNode();
+getter | TreeWalker::root(user);
+getter | TreeWalker::whatToShow(unsigned long);
+getter | TreeWalker::filter(user);
+getter | TreeWalker::currentNode(user);
+setter | TreeWalker::currentNode(user);
+method | NodeIterator::nextNode();
+method | NodeIterator::previousNode();
+method | NodeIterator::detach();
+getter | NodeIterator::root(user);
+getter | NodeIterator::referenceNode(user);
+getter | NodeIterator::pointerBeforeReferenceNode(boolean);
+getter | NodeIterator::whatToShow(unsigned long);
+getter | NodeIterator::filter(user);
+method | Range::setStart();
+method | Range::setEnd();
+method | Range::setStartBefore();
+method | Range::setStartAfter();
+method | Range::setEndBefore();
+method | Range::setEndAfter();
+method | Range::collapse();
+method | Range::selectNode();
+method | Range::selectNodeContents();
+method | Range::compareBoundaryPoints();
+method | Range::deleteContents();
+method | Range::extractContents();
+method | Range::cloneContents();
+method | Range::insertNode();
+method | Range::surroundContents();
+method | Range::cloneRange();
+method | Range::detach();
+method | Range::isPointInRange();
+method | Range::comparePoint();
+method | Range::intersectsNode();
+method | Range::createContextualFragment();
+getter | Range::startContainer(user);
+getter | Range::startOffset(unsigned long);
+getter | Range::endContainer(user);
+getter | Range::endOffset(unsigned long);
+getter | Range::collapsed(boolean);
+getter | Range::commonAncestorContainer(user);
+method | CharacterData::substringData();
+method | CharacterData::appendData();
+method | CharacterData::insertData();
+method | CharacterData::deleteData();
+method | CharacterData::replaceData();
+method | CharacterData::before();
+method | CharacterData::after();
+method | CharacterData::replaceWith();
+method | CharacterData::remove();
+getter | CharacterData::data(string);
+setter | CharacterData::data(string);
+getter | CharacterData::length(unsigned long);
+getter | CharacterData::previousElementSibling(user);
+getter | CharacterData::nextElementSibling(user);
+getter | ProcessingInstruction::target(string);
+getter | ProcessingInstruction::sheet(user);
+method | Text::splitText();
+getter | Text::wholeText(string);
+getter | Attr::namespaceURI(string);
+getter | Attr::prefix(string);
+getter | Attr::localName(string);
+getter | Attr::name(string);
+getter | Attr::value(string);
+setter | Attr::value(string);
+getter | Attr::nodeValue(string);
+setter | Attr::nodeValue(string);
+getter | Attr::textContent(string);
+setter | Attr::textContent(string);
+getter | Attr::ownerElement(user);
+getter | Attr::specified(boolean);
+method | NamedNodeMap::getNamedItemNS();
+method | NamedNodeMap::setNamedItem();
+method | NamedNodeMap::setNamedItemNS();
+method | NamedNodeMap::removeNamedItem();
+method | NamedNodeMap::removeNamedItemNS();
+method | DOMImplementation::createDocumentType();
+method | DOMImplementation::createDocument();
+method | DOMImplementation::hasFeature();
+method | Document::getElementsByTagNameNS();
+method | Document::getElementsByClassName();
+method | Document::createComment();
+method | Document::createProcessingInstruction();
+method | Document::importNode();
+method | Document::adoptNode();
+method | Document::createAttribute();
+method | Document::createAttributeNS();
+method | Document::createRange();
+method | Document::createNodeIterator();
+method | Document::createTreeWalker();
+method | Document::getElementsByName();
+method | Document::open();
+method | Document::close();
+method | Document::hasFocus();
+method | Document::execCommand();
+method | Document::queryCommandEnabled();
+method | Document::queryCommandIndeterm();
+method | Document::queryCommandState();
+method | Document::queryCommandSupported();
+method | Document::queryCommandValue();
+method | Document::clear();
+method | Document::captureEvents();
+method | Document::releaseEvents();
+method | Document::enableStyleSheetsForSet();
+method | Document::prepend();
+method | Document::append();
+method | Document::query();
+method | Document::queryAll();
+method | Document::querySelector();
+method | Document::querySelectorAll();
+getter | Document::URL(string);
+getter | Document::documentURI(string);
+getter | Document::origin(string);
+getter | Document::compatMode(string);
+getter | Document::characterSet(string);
+getter | Document::inputEncoding(string);
+getter | Document::contentType(string);
+getter | Document::doctype(user);
+getter | Document::domain(string);
+setter | Document::domain(string);
+getter | Document::referrer(string);
+getter | Document::lastModified(string);
+getter | Document::readyState(user);
+getter | Document::title(string);
+setter | Document::title(string);
+getter | Document::dir(string);
+setter | Document::dir(string);
+setter | Document::body(user);
+getter | Document::images(user);
+getter | Document::embeds(user);
+getter | Document::plugins(user);
+getter | Document::links(user);
+getter | Document::forms(user);
+getter | Document::scripts(user);
+getter | Document::cssElementMap(user);
+getter | Document::currentScript(user);
+getter | Document::defaultView(user);
+getter | Document::activeElement(user);
+getter | Document::designMode(string);
+setter | Document::designMode(string);
+getter | Document::commands(user);
+getter | Document::fgColor(string);
+setter | Document::fgColor(string);
+getter | Document::linkColor(string);
+setter | Document::linkColor(string);
+getter | Document::vlinkColor(string);
+setter | Document::vlinkColor(string);
+getter | Document::alinkColor(string);
+setter | Document::alinkColor(string);
+getter | Document::bgColor(string);
+setter | Document::bgColor(string);
+getter | Document::anchors(user);
+getter | Document::applets(user);
+getter | Document::all(user);
+getter | Document::styleSheets(user);
+getter | Document::selectedStyleSheetSet(string);
+setter | Document::selectedStyleSheetSet(string);
+getter | Document::lastStyleSheetSet(string);
+getter | Document::preferredStyleSheetSet(string);
+getter | Document::styleSheetSets(string);
+getter | Document::children(user);
+getter | Document::firstElementChild(user);
+getter | Document::lastElementChild(user);
+getter | Document::childElementCount(unsigned long);
+getter | Document::onerror(user);
+setter | Document::onerror(user);
+method | XMLDocument::load();
+getter | MutationRecord::type(string);
+getter | MutationRecord::target(user);
+getter | MutationRecord::addedNodes(user);
+getter | MutationRecord::removedNodes(user);
+getter | MutationRecord::previousSibling(user);
+getter | MutationRecord::nextSibling(user);
+getter | MutationRecord::attributeName(string);
+getter | MutationRecord::attributeNamespace(string);
+getter | MutationRecord::oldValue(string);
+method | MutationObserver::observe();
+method | MutationObserver::disconnect();
+method | MutationObserver::takeRecords();
+method | DocumentType::before();
+method | DocumentType::after();
+method | DocumentType::replaceWith();
+method | DocumentType::remove();
+getter | DocumentType::name(string);
+getter | DocumentType::publicId(string);
+getter | DocumentType::systemId(string);
+method | DocumentFragment::getElementById();
+method | DocumentFragment::prepend();
+method | DocumentFragment::append();
+method | DocumentFragment::query();
+method | DocumentFragment::queryAll();
+method | DocumentFragment::querySelector();
+method | DocumentFragment::querySelectorAll();
+getter | DocumentFragment::children(user);
+getter | DocumentFragment::firstElementChild(user);
+getter | DocumentFragment::lastElementChild(user);
+getter | DocumentFragment::childElementCount(unsigned long);
+method | EventListener::handleEvent();
+method | CustomEvent::initCustomEvent();
+getter | CustomEvent::detail(any);
+
+ 1539 unimplemented bindings
+
diff --git a/docs/UnimplementedJavascript.txt b/docs/UnimplementedJavascript.txt
deleted file mode 100644
index 1b851b8bb..000000000
--- a/docs/UnimplementedJavascript.txt
+++ /dev/null
@@ -1,1798 +0,0 @@
-/** \page unimplemented Unimplemented javascript bindings
-This is a list of all the binding methods, getters and setters without an implementation in a binding.
-
-method ApplicationCache::abort();\n
-getter ApplicationCache::oncached(user);\n
-setter ApplicationCache::oncached(user);\n
-getter ApplicationCache::onchecking(user);\n
-setter ApplicationCache::onchecking(user);\n
-getter ApplicationCache::ondownloading(user);\n
-setter ApplicationCache::ondownloading(user);\n
-getter ApplicationCache::onerror(user);\n
-setter ApplicationCache::onerror(user);\n
-getter ApplicationCache::onnoupdate(user);\n
-setter ApplicationCache::onnoupdate(user);\n
-getter ApplicationCache::onobsolete(user);\n
-setter ApplicationCache::onobsolete(user);\n
-getter ApplicationCache::onprogress(user);\n
-setter ApplicationCache::onprogress(user);\n
-getter ApplicationCache::onupdateready(user);\n
-setter ApplicationCache::onupdateready(user);\n
-getter ApplicationCache::status(unsigned short);\n
-method ApplicationCache::swapCache();\n
-method ApplicationCache::update();\n
-getter Attr::localName(string);\n
-getter Attr::namespaceURI(string);\n
-getter Attr::name(string);\n
-getter Attr::nodeValue(string);\n
-setter Attr::nodeValue(string);\n
-getter Attr::ownerElement(user);\n
-getter Attr::prefix(string);\n
-getter Attr::specified(boolean);\n
-getter Attr::textContent(string);\n
-setter Attr::textContent(string);\n
-getter Attr::value(string);\n
-setter Attr::value(string);\n
-getter AudioTrack::enabled(boolean);\n
-setter AudioTrack::enabled(boolean);\n
-getter AudioTrack::id(string);\n
-getter AudioTrack::kind(string);\n
-getter AudioTrack::label(string);\n
-getter AudioTrack::language(string);\n
-method AudioTrackList::getTrackById();\n
-getter AudioTrackList::length(unsigned long);\n
-getter AudioTrackList::onaddtrack(user);\n
-setter AudioTrackList::onaddtrack(user);\n
-getter AudioTrackList::onchange(user);\n
-setter AudioTrackList::onchange(user);\n
-getter AudioTrackList::onremovetrack(user);\n
-setter AudioTrackList::onremovetrack(user);\n
-getter AutocompleteErrorEvent::reason(user);\n
-getter BarProp::visible(boolean);\n
-getter BeforeUnloadEvent::returnValue(string);\n
-setter BeforeUnloadEvent::returnValue(string);\n
-method BroadcastChannel::close();\n
-getter BroadcastChannel::name(string);\n
-getter BroadcastChannel::onmessage(user);\n
-setter BroadcastChannel::onmessage(user);\n
-method BroadcastChannel::postMessage();\n
-method CanvasGradient::addColorStop();\n
-method CanvasPattern::setTransform();\n
-method CanvasProxy::setContext();\n
-method CanvasRenderingContext2D::addHitRegion();\n
-method CanvasRenderingContext2D::arc();\n
-method CanvasRenderingContext2D::arcTo();\n
-method CanvasRenderingContext2D::beginPath();\n
-method CanvasRenderingContext2D::bezierCurveTo();\n
-getter CanvasRenderingContext2D::canvas(user);\n
-method CanvasRenderingContext2D::clearHitRegions();\n
-method CanvasRenderingContext2D::clearRect();\n
-method CanvasRenderingContext2D::clip();\n
-method CanvasRenderingContext2D::closePath();\n
-method CanvasRenderingContext2D::commit();\n
-method CanvasRenderingContext2D::createImageData();\n
-method CanvasRenderingContext2D::createLinearGradient();\n
-method CanvasRenderingContext2D::createPattern();\n
-method CanvasRenderingContext2D::createRadialGradient();\n
-getter CanvasRenderingContext2D::currentTransform(user);\n
-setter CanvasRenderingContext2D::currentTransform(user);\n
-getter CanvasRenderingContext2D::direction(string);\n
-setter CanvasRenderingContext2D::direction(string);\n
-method CanvasRenderingContext2D::drawFocusIfNeeded();\n
-method CanvasRenderingContext2D::drawImage();\n
-method CanvasRenderingContext2D::ellipse();\n
-method CanvasRenderingContext2D::fill();\n
-method CanvasRenderingContext2D::fillRect();\n
-getter CanvasRenderingContext2D::fillStyle(multiple);\n
-setter CanvasRenderingContext2D::fillStyle(multiple);\n
-method CanvasRenderingContext2D::fillText();\n
-getter CanvasRenderingContext2D::font(string);\n
-setter CanvasRenderingContext2D::font(string);\n
-method CanvasRenderingContext2D::getImageData();\n
-method CanvasRenderingContext2D::getLineDash();\n
-getter CanvasRenderingContext2D::globalAlpha(double);\n
-setter CanvasRenderingContext2D::globalAlpha(double);\n
-getter CanvasRenderingContext2D::globalCompositeOperation(string);\n
-setter CanvasRenderingContext2D::globalCompositeOperation(string);\n
-getter CanvasRenderingContext2D::height(unsigned long);\n
-setter CanvasRenderingContext2D::height(unsigned long);\n
-getter CanvasRenderingContext2D::imageSmoothingEnabled(boolean);\n
-setter CanvasRenderingContext2D::imageSmoothingEnabled(boolean);\n
-getter CanvasRenderingContext2D::imageSmoothingQuality(user);\n
-setter CanvasRenderingContext2D::imageSmoothingQuality(user);\n
-method CanvasRenderingContext2D::isPointInPath();\n
-method CanvasRenderingContext2D::isPointInStroke();\n
-getter CanvasRenderingContext2D::lineCap(string);\n
-setter CanvasRenderingContext2D::lineCap(string);\n
-getter CanvasRenderingContext2D::lineDashOffset(double);\n
-setter CanvasRenderingContext2D::lineDashOffset(double);\n
-getter CanvasRenderingContext2D::lineJoin(string);\n
-setter CanvasRenderingContext2D::lineJoin(string);\n
-method CanvasRenderingContext2D::lineTo();\n
-getter CanvasRenderingContext2D::lineWidth(double);\n
-setter CanvasRenderingContext2D::lineWidth(double);\n
-method CanvasRenderingContext2D::measureText();\n
-getter CanvasRenderingContext2D::miterLimit(double);\n
-setter CanvasRenderingContext2D::miterLimit(double);\n
-method CanvasRenderingContext2D::moveTo();\n
-method CanvasRenderingContext2D::putImageData();\n
-method CanvasRenderingContext2D::quadraticCurveTo();\n
-method CanvasRenderingContext2D::rect();\n
-method CanvasRenderingContext2D::removeHitRegion();\n
-method CanvasRenderingContext2D::resetClip();\n
-method CanvasRenderingContext2D::resetTransform();\n
-method CanvasRenderingContext2D::restore();\n
-method CanvasRenderingContext2D::rotate();\n
-method CanvasRenderingContext2D::save();\n
-method CanvasRenderingContext2D::scale();\n
-method CanvasRenderingContext2D::scrollPathIntoView();\n
-method CanvasRenderingContext2D::setLineDash();\n
-method CanvasRenderingContext2D::setTransform();\n
-getter CanvasRenderingContext2D::shadowBlur(double);\n
-setter CanvasRenderingContext2D::shadowBlur(double);\n
-getter CanvasRenderingContext2D::shadowColor(string);\n
-setter CanvasRenderingContext2D::shadowColor(string);\n
-getter CanvasRenderingContext2D::shadowOffsetX(double);\n
-setter CanvasRenderingContext2D::shadowOffsetX(double);\n
-getter CanvasRenderingContext2D::shadowOffsetY(double);\n
-setter CanvasRenderingContext2D::shadowOffsetY(double);\n
-method CanvasRenderingContext2D::stroke();\n
-method CanvasRenderingContext2D::strokeRect();\n
-getter CanvasRenderingContext2D::strokeStyle(multiple);\n
-setter CanvasRenderingContext2D::strokeStyle(multiple);\n
-method CanvasRenderingContext2D::strokeText();\n
-getter CanvasRenderingContext2D::textAlign(string);\n
-setter CanvasRenderingContext2D::textAlign(string);\n
-getter CanvasRenderingContext2D::textBaseline(string);\n
-setter CanvasRenderingContext2D::textBaseline(string);\n
-method CanvasRenderingContext2D::transform();\n
-method CanvasRenderingContext2D::translate();\n
-getter CanvasRenderingContext2D::width(unsigned long);\n
-setter CanvasRenderingContext2D::width(unsigned long);\n
-method CharacterData::after();\n
-method CharacterData::appendData();\n
-method CharacterData::before();\n
-getter CharacterData::data(string);\n
-setter CharacterData::data(string);\n
-method CharacterData::deleteData();\n
-method CharacterData::insertData();\n
-getter CharacterData::length(unsigned long);\n
-getter CharacterData::nextElementSibling(user);\n
-getter CharacterData::previousElementSibling(user);\n
-method CharacterData::remove();\n
-method CharacterData::replaceData();\n
-method CharacterData::replaceWith();\n
-method CharacterData::substringData();\n
-getter CloseEvent::code(unsigned short);\n
-getter CloseEvent::reason(string);\n
-getter CloseEvent::wasClean(boolean);\n
-getter CompositionEvent::data(string);\n
-method CompositionEvent::initCompositionEvent();\n
-method CSS::escape();\n
-getter CSSGroupingRule::cssRules(user);\n
-method CSSGroupingRule::deleteRule();\n
-method CSSGroupingRule::insertRule();\n
-getter CSSImportRule::href(string);\n
-getter CSSImportRule::media(user);\n
-getter CSSImportRule::styleSheet(user);\n
-getter CSSMarginRule::name(string);\n
-getter CSSMarginRule::style(user);\n
-getter CSSMediaRule::media(user);\n
-getter CSSNamespaceRule::namespaceURI(string);\n
-getter CSSNamespaceRule::prefix(string);\n
-getter CSSPageRule::selectorText(string);\n
-setter CSSPageRule::selectorText(string);\n
-getter CSSPageRule::style(user);\n
-getter CSSRule::cssText(string);\n
-setter CSSRule::cssText(string);\n
-method CSSRuleList::item();\n
-getter CSSRuleList::length(unsigned long);\n
-getter CSSRule::parentRule(user);\n
-getter CSSRule::parentStyleSheet(user);\n
-getter CSSRule::type(unsigned short);\n
-getter CSSStyleDeclaration::cssFloat(string);\n
-setter CSSStyleDeclaration::cssFloat(string);\n
-getter CSSStyleDeclaration::cssText(string);\n
-setter CSSStyleDeclaration::cssText(string);\n
-getter CSSStyleDeclaration::dashed_attribute(string);\n
-setter CSSStyleDeclaration::dashed_attribute(string);\n
-method CSSStyleDeclaration::getPropertyPriority();\n
-method CSSStyleDeclaration::getPropertyValue();\n
-method CSSStyleDeclaration::item();\n
-getter CSSStyleDeclaration::length(unsigned long);\n
-getter CSSStyleDeclaration::parentRule(user);\n
-method CSSStyleDeclaration::removeProperty();\n
-method CSSStyleDeclaration::setProperty();\n
-method CSSStyleDeclaration::setPropertyPriority();\n
-method CSSStyleDeclaration::setPropertyValue();\n
-getter CSSStyleRule::selectorText(string);\n
-setter CSSStyleRule::selectorText(string);\n
-getter CSSStyleRule::style(user);\n
-getter CSSStyleSheet::cssRules(user);\n
-method CSSStyleSheet::deleteRule();\n
-method CSSStyleSheet::insertRule();\n
-getter CSSStyleSheet::ownerRule(user);\n
-getter CustomEvent::detail(any);\n
-method CustomEvent::initCustomEvent();\n
-method DataTransfer::clearData();\n
-getter DataTransfer::dropEffect(string);\n
-setter DataTransfer::dropEffect(string);\n
-getter DataTransfer::effectAllowed(string);\n
-setter DataTransfer::effectAllowed(string);\n
-getter DataTransfer::files(user);\n
-method DataTransfer::getData();\n
-method DataTransferItem::getAsFile();\n
-method DataTransferItem::getAsString();\n
-getter DataTransferItem::kind(string);\n
-method DataTransferItemList::add();\n
-method DataTransferItemList::clear();\n
-getter DataTransferItemList::length(unsigned long);\n
-method DataTransferItemList::remove();\n
-getter DataTransfer::items(user);\n
-getter DataTransferItem::type(string);\n
-method DataTransfer::setData();\n
-method DataTransfer::setDragImage();\n
-getter DataTransfer::types(string);\n
-getter DedicatedWorkerGlobalScope::onmessage(user);\n
-setter DedicatedWorkerGlobalScope::onmessage(user);\n
-method DedicatedWorkerGlobalScope::postMessage();\n
-getter Document::activeElement(user);\n
-method Document::adoptNode();\n
-getter Document::alinkColor(string);\n
-setter Document::alinkColor(string);\n
-getter Document::all(user);\n
-getter Document::anchors(user);\n
-method Document::append();\n
-getter Document::applets(user);\n
-getter Document::bgColor(string);\n
-setter Document::bgColor(string);\n
-setter Document::body(user);\n
-method Document::captureEvents();\n
-getter Document::characterSet(string);\n
-getter Document::childElementCount(unsigned long);\n
-getter Document::children(user);\n
-method Document::clear();\n
-method Document::close();\n
-getter Document::commands(user);\n
-getter Document::compatMode(string);\n
-getter Document::contentType(string);\n
-setter Document::cookie(string);\n
-method Document::createAttribute();\n
-method Document::createAttributeNS();\n
-method Document::createComment();\n
-method Document::createDocumentFragment();\n
-method Document::createElementNS();\n
-method Document::createEvent();\n
-method Document::createNodeIterator();\n
-method Document::createProcessingInstruction();\n
-method Document::createRange();\n
-method Document::createTreeWalker();\n
-getter Document::cssElementMap(user);\n
-getter Document::currentScript(user);\n
-getter Document::defaultView(user);\n
-getter Document::designMode(string);\n
-setter Document::designMode(string);\n
-getter Document::dir(string);\n
-setter Document::dir(string);\n
-getter Document::doctype(user);\n
-getter Document::documentURI(string);\n
-getter Document::domain(string);\n
-setter Document::domain(string);\n
-getter Document::embeds(user);\n
-method Document::enableStyleSheetsForSet();\n
-method Document::execCommand();\n
-getter Document::fgColor(string);\n
-setter Document::fgColor(string);\n
-getter Document::firstElementChild(user);\n
-getter Document::forms(user);\n
-method DocumentFragment::append();\n
-getter DocumentFragment::childElementCount(unsigned long);\n
-getter DocumentFragment::children(user);\n
-getter DocumentFragment::firstElementChild(user);\n
-method DocumentFragment::getElementById();\n
-getter DocumentFragment::lastElementChild(user);\n
-method DocumentFragment::prepend();\n
-method DocumentFragment::query();\n
-method DocumentFragment::queryAll();\n
-method DocumentFragment::querySelector();\n
-method DocumentFragment::querySelectorAll();\n
-method Document::getElementsByClassName();\n
-method Document::getElementsByName();\n
-method Document::getElementsByTagNameNS();\n
-method Document::hasFocus();\n
-getter Document::images(user);\n
-getter Document::implementation(user);\n
-method Document::importNode();\n
-getter Document::inputEncoding(string);\n
-getter Document::lastElementChild(user);\n
-getter Document::lastModified(string);\n
-getter Document::lastStyleSheetSet(string);\n
-getter Document::linkColor(string);\n
-setter Document::linkColor(string);\n
-getter Document::links(user);\n
-getter Document::onerror(user);\n
-setter Document::onerror(user);\n
-method Document::open();\n
-getter Document::origin(string);\n
-getter Document::plugins(user);\n
-getter Document::preferredStyleSheetSet(string);\n
-method Document::prepend();\n
-method Document::query();\n
-method Document::queryAll();\n
-method Document::queryCommandEnabled();\n
-method Document::queryCommandIndeterm();\n
-method Document::queryCommandState();\n
-method Document::queryCommandSupported();\n
-method Document::queryCommandValue();\n
-method Document::querySelector();\n
-method Document::querySelectorAll();\n
-getter Document::readyState(user);\n
-getter Document::referrer(string);\n
-method Document::releaseEvents();\n
-getter Document::scripts(user);\n
-getter Document::selectedStyleSheetSet(string);\n
-setter Document::selectedStyleSheetSet(string);\n
-getter Document::styleSheetSets(string);\n
-getter Document::styleSheets(user);\n
-getter Document::title(string);\n
-setter Document::title(string);\n
-method DocumentType::after();\n
-method DocumentType::before();\n
-getter DocumentType::name(string);\n
-getter DocumentType::publicId(string);\n
-method DocumentType::remove();\n
-method DocumentType::replaceWith();\n
-getter DocumentType::systemId(string);\n
-getter Document::URL(string);\n
-getter Document::vlinkColor(string);\n
-setter Document::vlinkColor(string);\n
-method DOMImplementation::createDocument();\n
-method DOMImplementation::createDocumentType();\n
-method DOMImplementation::createHTMLDocument();\n
-method DOMImplementation::hasFeature();\n
-method DOMParser::parseFromString();\n
-getter DOMSettableTokenList::value(string);\n
-setter DOMSettableTokenList::value(string);\n
-method DOMTokenList::add();\n
-method DOMTokenList::contains();\n
-method DOMTokenList::item();\n
-getter DOMTokenList::length(unsigned long);\n
-method DOMTokenList::remove();\n
-method DOMTokenList::toggle();\n
-getter DragEvent::dataTransfer(user);\n
-getter DrawingStyle::direction(string);\n
-setter DrawingStyle::direction(string);\n
-getter DrawingStyle::font(string);\n
-setter DrawingStyle::font(string);\n
-method DrawingStyle::getLineDash();\n
-getter DrawingStyle::lineCap(string);\n
-setter DrawingStyle::lineCap(string);\n
-getter DrawingStyle::lineDashOffset(double);\n
-setter DrawingStyle::lineDashOffset(double);\n
-getter DrawingStyle::lineJoin(string);\n
-setter DrawingStyle::lineJoin(string);\n
-getter DrawingStyle::lineWidth(double);\n
-setter DrawingStyle::lineWidth(double);\n
-getter DrawingStyle::miterLimit(double);\n
-setter DrawingStyle::miterLimit(double);\n
-method DrawingStyle::setLineDash();\n
-getter DrawingStyle::textAlign(string);\n
-setter DrawingStyle::textAlign(string);\n
-getter DrawingStyle::textBaseline(string);\n
-setter DrawingStyle::textBaseline(string);\n
-method Element::after();\n
-method Element::append();\n
-getter Element::attributes(user);\n
-method Element::before();\n
-getter Element::cascadedStyle(user);\n
-getter Element::children(user);\n
-getter Element::classList(user);\n
-method Element::closest();\n
-getter Element::defaultStyle(user);\n
-method Element::getAttributeNode();\n
-method Element::getAttributeNodeNS();\n
-method Element::getAttributeNS();\n
-method Element::getElementsByClassName();\n
-method Element::getElementsByTagNameNS();\n
-method Element::hasAttributeNS();\n
-method Element::hasAttributes();\n
-getter Element::innerHTML(string);\n
-setter Element::innerHTML(string);\n
-method Element::insertAdjacentHTML();\n
-getter Element::localName(string);\n
-method Element::matches();\n
-getter Element::namespaceURI(string);\n
-getter Element::outerHTML(string);\n
-setter Element::outerHTML(string);\n
-getter Element::prefix(string);\n
-method Element::prepend();\n
-method Element::pseudo();\n
-method Element::query();\n
-method Element::queryAll();\n
-method Element::querySelector();\n
-method Element::querySelectorAll();\n
-getter Element::rawComputedStyle(user);\n
-method Element::remove();\n
-method Element::removeAttributeNode();\n
-method Element::removeAttributeNS();\n
-method Element::replaceWith();\n
-method Element::setAttributeNode();\n
-method Element::setAttributeNodeNS();\n
-method Element::setAttributeNS();\n
-getter Element::tagName(string);\n
-getter Element::usedStyle(user);\n
-getter ErrorEvent::colno(unsigned long);\n
-getter ErrorEvent::error(any);\n
-getter ErrorEvent::filename(string);\n
-getter ErrorEvent::lineno(unsigned long);\n
-getter ErrorEvent::message(string);\n
-method Event::initEvent();\n
-getter Event::isTrusted(boolean);\n
-method EventListener::handleEvent();\n
-method EventSource::close();\n
-getter EventSource::onerror(user);\n
-setter EventSource::onerror(user);\n
-getter EventSource::onmessage(user);\n
-setter EventSource::onmessage(user);\n
-getter EventSource::onopen(user);\n
-setter EventSource::onopen(user);\n
-getter EventSource::readyState(unsigned short);\n
-getter EventSource::url(string);\n
-getter EventSource::withCredentials(boolean);\n
-getter Event::timeStamp(user);\n
-method External::AddSearchProvider();\n
-method External::IsSearchProviderInstalled();\n
-method FocusEvent::initFocusEvent();\n
-getter FocusEvent::relatedTarget(user);\n
-getter HashChangeEvent::newURL(string);\n
-getter HashChangeEvent::oldURL(string);\n
-method History::back();\n
-method History::forward();\n
-method History::go();\n
-getter History::length(unsigned long);\n
-method History::pushState();\n
-method History::replaceState();\n
-getter History::state(any);\n
-method HTMLAllCollection::item();\n
-getter HTMLAllCollection::length(unsigned long);\n
-method HTMLAllCollection::namedItem();\n
-getter HTMLAnchorElement::download(string);\n
-setter HTMLAnchorElement::download(string);\n
-getter HTMLAnchorElement::hash(user);\n
-setter HTMLAnchorElement::hash(user);\n
-getter HTMLAnchorElement::hostname(user);\n
-setter HTMLAnchorElement::hostname(user);\n
-getter HTMLAnchorElement::host(user);\n
-setter HTMLAnchorElement::host(user);\n
-getter HTMLAnchorElement::href(user);\n
-setter HTMLAnchorElement::href(user);\n
-getter HTMLAnchorElement::origin(user);\n
-getter HTMLAnchorElement::password(user);\n
-setter HTMLAnchorElement::password(user);\n
-getter HTMLAnchorElement::pathname(user);\n
-setter HTMLAnchorElement::pathname(user);\n
-getter HTMLAnchorElement::ping(user);\n
-getter HTMLAnchorElement::port(user);\n
-setter HTMLAnchorElement::port(user);\n
-getter HTMLAnchorElement::protocol(user);\n
-setter HTMLAnchorElement::protocol(user);\n
-getter HTMLAnchorElement::relList(user);\n
-getter HTMLAnchorElement::search(user);\n
-setter HTMLAnchorElement::search(user);\n
-getter HTMLAnchorElement::text(string);\n
-setter HTMLAnchorElement::text(string);\n
-getter HTMLAnchorElement::type(string);\n
-setter HTMLAnchorElement::type(string);\n
-getter HTMLAnchorElement::username(user);\n
-setter HTMLAnchorElement::username(user);\n
-getter HTMLAppletElement::hspace(unsigned long);\n
-setter HTMLAppletElement::hspace(unsigned long);\n
-getter HTMLAppletElement::vspace(unsigned long);\n
-setter HTMLAppletElement::vspace(unsigned long);\n
-getter HTMLAreaElement::download(string);\n
-setter HTMLAreaElement::download(string);\n
-getter HTMLAreaElement::hash(user);\n
-setter HTMLAreaElement::hash(user);\n
-getter HTMLAreaElement::hostname(user);\n
-setter HTMLAreaElement::hostname(user);\n
-getter HTMLAreaElement::host(user);\n
-setter HTMLAreaElement::host(user);\n
-getter HTMLAreaElement::hreflang(string);\n
-setter HTMLAreaElement::hreflang(string);\n
-getter HTMLAreaElement::href(user);\n
-setter HTMLAreaElement::href(user);\n
-getter HTMLAreaElement::origin(user);\n
-getter HTMLAreaElement::password(user);\n
-setter HTMLAreaElement::password(user);\n
-getter HTMLAreaElement::pathname(user);\n
-setter HTMLAreaElement::pathname(user);\n
-getter HTMLAreaElement::ping(user);\n
-getter HTMLAreaElement::port(user);\n
-setter HTMLAreaElement::port(user);\n
-getter HTMLAreaElement::protocol(user);\n
-setter HTMLAreaElement::protocol(user);\n
-getter HTMLAreaElement::relList(user);\n
-getter HTMLAreaElement::rel(string);\n
-setter HTMLAreaElement::rel(string);\n
-getter HTMLAreaElement::search(user);\n
-setter HTMLAreaElement::search(user);\n
-getter HTMLAreaElement::type(string);\n
-setter HTMLAreaElement::type(string);\n
-getter HTMLAreaElement::username(user);\n
-setter HTMLAreaElement::username(user);\n
-getter HTMLBodyElement::onafterprint(user);\n
-setter HTMLBodyElement::onafterprint(user);\n
-getter HTMLBodyElement::onbeforeprint(user);\n
-setter HTMLBodyElement::onbeforeprint(user);\n
-getter HTMLBodyElement::onbeforeunload(user);\n
-setter HTMLBodyElement::onbeforeunload(user);\n
-getter HTMLBodyElement::onhashchange(user);\n
-setter HTMLBodyElement::onhashchange(user);\n
-getter HTMLBodyElement::onlanguagechange(user);\n
-setter HTMLBodyElement::onlanguagechange(user);\n
-getter HTMLBodyElement::onmessage(user);\n
-setter HTMLBodyElement::onmessage(user);\n
-getter HTMLBodyElement::onoffline(user);\n
-setter HTMLBodyElement::onoffline(user);\n
-getter HTMLBodyElement::ononline(user);\n
-setter HTMLBodyElement::ononline(user);\n
-getter HTMLBodyElement::onpagehide(user);\n
-setter HTMLBodyElement::onpagehide(user);\n
-getter HTMLBodyElement::onpageshow(user);\n
-setter HTMLBodyElement::onpageshow(user);\n
-getter HTMLBodyElement::onpopstate(user);\n
-setter HTMLBodyElement::onpopstate(user);\n
-getter HTMLBodyElement::onstorage(user);\n
-setter HTMLBodyElement::onstorage(user);\n
-getter HTMLBodyElement::onunload(user);\n
-setter HTMLBodyElement::onunload(user);\n
-getter HTMLButtonElement::autofocus(boolean);\n
-setter HTMLButtonElement::autofocus(boolean);\n
-method HTMLButtonElement::checkValidity();\n
-getter HTMLButtonElement::formAction(string);\n
-setter HTMLButtonElement::formAction(string);\n
-getter HTMLButtonElement::formEnctype(string);\n
-setter HTMLButtonElement::formEnctype(string);\n
-getter HTMLButtonElement::formMethod(string);\n
-setter HTMLButtonElement::formMethod(string);\n
-getter HTMLButtonElement::formNoValidate(boolean);\n
-setter HTMLButtonElement::formNoValidate(boolean);\n
-getter HTMLButtonElement::formTarget(string);\n
-setter HTMLButtonElement::formTarget(string);\n
-getter HTMLButtonElement::form(user);\n
-getter HTMLButtonElement::labels(user);\n
-getter HTMLButtonElement::menu(user);\n
-setter HTMLButtonElement::menu(user);\n
-method HTMLButtonElement::reportValidity();\n
-method HTMLButtonElement::setCustomValidity();\n
-getter HTMLButtonElement::type(string);\n
-setter HTMLButtonElement::type(string);\n
-getter HTMLButtonElement::validationMessage(string);\n
-getter HTMLButtonElement::validity(user);\n
-getter HTMLButtonElement::willValidate(boolean);\n
-method HTMLCanvasElement::getContext();\n
-getter HTMLCanvasElement::height(unsigned long);\n
-setter HTMLCanvasElement::height(unsigned long);\n
-method HTMLCanvasElement::probablySupportsContext();\n
-method HTMLCanvasElement::setContext();\n
-method HTMLCanvasElement::toBlob();\n
-method HTMLCanvasElement::toDataURL();\n
-method HTMLCanvasElement::transferControlToProxy();\n
-getter HTMLCanvasElement::width(unsigned long);\n
-setter HTMLCanvasElement::width(unsigned long);\n
-method HTMLCollection::item();\n
-getter HTMLCollection::length(unsigned long);\n
-method HTMLCollection::namedItem();\n
-getter HTMLDataElement::value(string);\n
-setter HTMLDataElement::value(string);\n
-getter HTMLDataListElement::options(user);\n
-getter HTMLDetailsElement::open(boolean);\n
-setter HTMLDetailsElement::open(boolean);\n
-method HTMLDialogElement::close();\n
-getter HTMLDialogElement::open(boolean);\n
-setter HTMLDialogElement::open(boolean);\n
-getter HTMLDialogElement::returnValue(string);\n
-setter HTMLDialogElement::returnValue(string);\n
-method HTMLDialogElement::show();\n
-method HTMLDialogElement::showModal();\n
-getter HTMLDirectoryElement::compact(boolean);\n
-setter HTMLDirectoryElement::compact(boolean);\n
-getter HTMLDListElement::compact(boolean);\n
-setter HTMLDListElement::compact(boolean);\n
-getter HTMLElement::accessKeyLabel(string);\n
-getter HTMLElement::accessKey(string);\n
-setter HTMLElement::accessKey(string);\n
-method HTMLElement::blur();\n
-method HTMLElement::click();\n
-getter HTMLElement::commandChecked(boolean);\n
-getter HTMLElement::commandDisabled(boolean);\n
-getter HTMLElement::commandHidden(boolean);\n
-getter HTMLElement::commandIcon(string);\n
-getter HTMLElement::commandLabel(string);\n
-getter HTMLElement::commandType(string);\n
-getter HTMLElement::contentEditable(string);\n
-setter HTMLElement::contentEditable(string);\n
-getter HTMLElement::contextMenu(user);\n
-setter HTMLElement::contextMenu(user);\n
-getter HTMLElement::dataset(user);\n
-getter HTMLElement::draggable(boolean);\n
-setter HTMLElement::draggable(boolean);\n
-getter HTMLElement::dropzone(user);\n
-method HTMLElement::focus();\n
-method HTMLElement::forceSpellCheck();\n
-getter HTMLElement::hidden(boolean);\n
-setter HTMLElement::hidden(boolean);\n
-getter HTMLElement::isContentEditable(boolean);\n
-getter HTMLElement::onerror(user);\n
-setter HTMLElement::onerror(user);\n
-getter HTMLElement::spellcheck(boolean);\n
-setter HTMLElement::spellcheck(boolean);\n
-getter HTMLElement::tabIndex(long);\n
-setter HTMLElement::tabIndex(long);\n
-getter HTMLElement::translate(boolean);\n
-setter HTMLElement::translate(boolean);\n
-getter HTMLEmbedElement::align(string);\n
-setter HTMLEmbedElement::align(string);\n
-method HTMLEmbedElement::getSVGDocument();\n
-getter HTMLEmbedElement::height(string);\n
-setter HTMLEmbedElement::height(string);\n
-getter HTMLEmbedElement::name(string);\n
-setter HTMLEmbedElement::name(string);\n
-getter HTMLEmbedElement::src(string);\n
-setter HTMLEmbedElement::src(string);\n
-getter HTMLEmbedElement::type(string);\n
-setter HTMLEmbedElement::type(string);\n
-getter HTMLEmbedElement::width(string);\n
-setter HTMLEmbedElement::width(string);\n
-method HTMLFieldSetElement::checkValidity();\n
-getter HTMLFieldSetElement::disabled(boolean);\n
-setter HTMLFieldSetElement::disabled(boolean);\n
-getter HTMLFieldSetElement::elements(user);\n
-getter HTMLFieldSetElement::form(user);\n
-getter HTMLFieldSetElement::name(string);\n
-setter HTMLFieldSetElement::name(string);\n
-method HTMLFieldSetElement::reportValidity();\n
-method HTMLFieldSetElement::setCustomValidity();\n
-getter HTMLFieldSetElement::type(string);\n
-getter HTMLFieldSetElement::validationMessage(string);\n
-getter HTMLFieldSetElement::validity(user);\n
-getter HTMLFieldSetElement::willValidate(boolean);\n
-method HTMLFormControlsCollection::namedItem();\n
-getter HTMLFormElement::autocomplete(string);\n
-setter HTMLFormElement::autocomplete(string);\n
-method HTMLFormElement::checkValidity();\n
-getter HTMLFormElement::elements(user);\n
-getter HTMLFormElement::encoding(string);\n
-setter HTMLFormElement::encoding(string);\n
-getter HTMLFormElement::length(long);\n
-getter HTMLFormElement::name(string);\n
-setter HTMLFormElement::name(string);\n
-getter HTMLFormElement::noValidate(boolean);\n
-setter HTMLFormElement::noValidate(boolean);\n
-method HTMLFormElement::reportValidity();\n
-method HTMLFormElement::requestAutocomplete();\n
-method HTMLFormElement::reset();\n
-method HTMLFormElement::submit();\n
-getter HTMLFrameElement::contentDocument(user);\n
-getter HTMLFrameElement::contentWindow(user);\n
-getter HTMLFrameSetElement::onafterprint(user);\n
-setter HTMLFrameSetElement::onafterprint(user);\n
-getter HTMLFrameSetElement::onbeforeprint(user);\n
-setter HTMLFrameSetElement::onbeforeprint(user);\n
-getter HTMLFrameSetElement::onbeforeunload(user);\n
-setter HTMLFrameSetElement::onbeforeunload(user);\n
-getter HTMLFrameSetElement::onhashchange(user);\n
-setter HTMLFrameSetElement::onhashchange(user);\n
-getter HTMLFrameSetElement::onlanguagechange(user);\n
-setter HTMLFrameSetElement::onlanguagechange(user);\n
-getter HTMLFrameSetElement::onmessage(user);\n
-setter HTMLFrameSetElement::onmessage(user);\n
-getter HTMLFrameSetElement::onoffline(user);\n
-setter HTMLFrameSetElement::onoffline(user);\n
-getter HTMLFrameSetElement::ononline(user);\n
-setter HTMLFrameSetElement::ononline(user);\n
-getter HTMLFrameSetElement::onpagehide(user);\n
-setter HTMLFrameSetElement::onpagehide(user);\n
-getter HTMLFrameSetElement::onpageshow(user);\n
-setter HTMLFrameSetElement::onpageshow(user);\n
-getter HTMLFrameSetElement::onpopstate(user);\n
-setter HTMLFrameSetElement::onpopstate(user);\n
-getter HTMLFrameSetElement::onstorage(user);\n
-setter HTMLFrameSetElement::onstorage(user);\n
-getter HTMLFrameSetElement::onunload(user);\n
-setter HTMLFrameSetElement::onunload(user);\n
-getter HTMLHRElement::color(string);\n
-setter HTMLHRElement::color(string);\n
-getter HTMLIFrameElement::allowFullscreen(boolean);\n
-setter HTMLIFrameElement::allowFullscreen(boolean);\n
-getter HTMLIFrameElement::contentDocument(user);\n
-getter HTMLIFrameElement::contentWindow(user);\n
-method HTMLIFrameElement::getSVGDocument();\n
-getter HTMLIFrameElement::sandbox(user);\n
-getter HTMLIFrameElement::seamless(boolean);\n
-setter HTMLIFrameElement::seamless(boolean);\n
-getter HTMLIFrameElement::srcdoc(string);\n
-setter HTMLIFrameElement::srcdoc(string);\n
-getter HTMLImageElement::complete(boolean);\n
-getter HTMLImageElement::crossOrigin(string);\n
-setter HTMLImageElement::crossOrigin(string);\n
-getter HTMLImageElement::currentSrc(string);\n
-getter HTMLImageElement::lowsrc(string);\n
-setter HTMLImageElement::lowsrc(string);\n
-getter HTMLImageElement::naturalHeight(unsigned long);\n
-getter HTMLImageElement::naturalWidth(unsigned long);\n
-getter HTMLImageElement::sizes(string);\n
-setter HTMLImageElement::sizes(string);\n
-getter HTMLImageElement::srcset(string);\n
-setter HTMLImageElement::srcset(string);\n
-getter HTMLInputElement::autocomplete(string);\n
-setter HTMLInputElement::autocomplete(string);\n
-getter HTMLInputElement::autofocus(boolean);\n
-setter HTMLInputElement::autofocus(boolean);\n
-method HTMLInputElement::checkValidity();\n
-getter HTMLInputElement::dirName(string);\n
-setter HTMLInputElement::dirName(string);\n
-getter HTMLInputElement::files(user);\n
-getter HTMLInputElement::formAction(string);\n
-setter HTMLInputElement::formAction(string);\n
-getter HTMLInputElement::formEnctype(string);\n
-setter HTMLInputElement::formEnctype(string);\n
-getter HTMLInputElement::formMethod(string);\n
-setter HTMLInputElement::formMethod(string);\n
-getter HTMLInputElement::formNoValidate(boolean);\n
-setter HTMLInputElement::formNoValidate(boolean);\n
-getter HTMLInputElement::formTarget(string);\n
-setter HTMLInputElement::formTarget(string);\n
-getter HTMLInputElement::form(user);\n
-getter HTMLInputElement::height(unsigned long);\n
-setter HTMLInputElement::height(unsigned long);\n
-getter HTMLInputElement::indeterminate(boolean);\n
-setter HTMLInputElement::indeterminate(boolean);\n
-getter HTMLInputElement::inputMode(string);\n
-setter HTMLInputElement::inputMode(string);\n
-getter HTMLInputElement::labels(user);\n
-getter HTMLInputElement::list(user);\n
-getter HTMLInputElement::max(string);\n
-setter HTMLInputElement::max(string);\n
-getter HTMLInputElement::minLength(long);\n
-setter HTMLInputElement::minLength(long);\n
-getter HTMLInputElement::min(string);\n
-setter HTMLInputElement::min(string);\n
-getter HTMLInputElement::multiple(boolean);\n
-setter HTMLInputElement::multiple(boolean);\n
-getter HTMLInputElement::pattern(string);\n
-setter HTMLInputElement::pattern(string);\n
-getter HTMLInputElement::placeholder(string);\n
-setter HTMLInputElement::placeholder(string);\n
-method HTMLInputElement::reportValidity();\n
-getter HTMLInputElement::required(boolean);\n
-setter HTMLInputElement::required(boolean);\n
-method HTMLInputElement::select();\n
-getter HTMLInputElement::selectionDirection(string);\n
-setter HTMLInputElement::selectionDirection(string);\n
-getter HTMLInputElement::selectionEnd(unsigned long);\n
-setter HTMLInputElement::selectionEnd(unsigned long);\n
-getter HTMLInputElement::selectionStart(unsigned long);\n
-setter HTMLInputElement::selectionStart(unsigned long);\n
-method HTMLInputElement::setCustomValidity();\n
-method HTMLInputElement::setRangeText();\n
-method HTMLInputElement::setSelectionRange();\n
-method HTMLInputElement::stepDown();\n
-getter HTMLInputElement::step(string);\n
-setter HTMLInputElement::step(string);\n
-method HTMLInputElement::stepUp();\n
-setter HTMLInputElement::type(string);\n
-getter HTMLInputElement::validationMessage(string);\n
-getter HTMLInputElement::validity(user);\n
-getter HTMLInputElement::valueAsDate(date);\n
-setter HTMLInputElement::valueAsDate(date);\n
-getter HTMLInputElement::valueAsNumber(double);\n
-setter HTMLInputElement::valueAsNumber(double);\n
-getter HTMLInputElement::valueHigh(double);\n
-setter HTMLInputElement::valueHigh(double);\n
-getter HTMLInputElement::valueLow(double);\n
-setter HTMLInputElement::valueLow(double);\n
-getter HTMLInputElement::width(unsigned long);\n
-setter HTMLInputElement::width(unsigned long);\n
-getter HTMLInputElement::willValidate(boolean);\n
-getter HTMLKeygenElement::autofocus(boolean);\n
-setter HTMLKeygenElement::autofocus(boolean);\n
-getter HTMLKeygenElement::challenge(string);\n
-setter HTMLKeygenElement::challenge(string);\n
-method HTMLKeygenElement::checkValidity();\n
-getter HTMLKeygenElement::disabled(boolean);\n
-setter HTMLKeygenElement::disabled(boolean);\n
-getter HTMLKeygenElement::form(user);\n
-getter HTMLKeygenElement::keytype(string);\n
-setter HTMLKeygenElement::keytype(string);\n
-getter HTMLKeygenElement::labels(user);\n
-getter HTMLKeygenElement::name(string);\n
-setter HTMLKeygenElement::name(string);\n
-method HTMLKeygenElement::reportValidity();\n
-method HTMLKeygenElement::setCustomValidity();\n
-getter HTMLKeygenElement::type(string);\n
-getter HTMLKeygenElement::validationMessage(string);\n
-getter HTMLKeygenElement::validity(user);\n
-getter HTMLKeygenElement::willValidate(boolean);\n
-getter HTMLLabelElement::control(user);\n
-getter HTMLLabelElement::form(user);\n
-getter HTMLLegendElement::form(user);\n
-getter HTMLLinkElement::crossOrigin(string);\n
-setter HTMLLinkElement::crossOrigin(string);\n
-getter HTMLLinkElement::relList(user);\n
-getter HTMLLinkElement::sheet(user);\n
-getter HTMLLinkElement::sizes(user);\n
-getter HTMLMapElement::areas(user);\n
-getter HTMLMarqueeElement::behavior(string);\n
-setter HTMLMarqueeElement::behavior(string);\n
-getter HTMLMarqueeElement::bgColor(string);\n
-setter HTMLMarqueeElement::bgColor(string);\n
-getter HTMLMarqueeElement::direction(string);\n
-setter HTMLMarqueeElement::direction(string);\n
-getter HTMLMarqueeElement::height(string);\n
-setter HTMLMarqueeElement::height(string);\n
-getter HTMLMarqueeElement::hspace(unsigned long);\n
-setter HTMLMarqueeElement::hspace(unsigned long);\n
-getter HTMLMarqueeElement::loop(long);\n
-setter HTMLMarqueeElement::loop(long);\n
-getter HTMLMarqueeElement::onbounce(user);\n
-setter HTMLMarqueeElement::onbounce(user);\n
-getter HTMLMarqueeElement::onfinish(user);\n
-setter HTMLMarqueeElement::onfinish(user);\n
-getter HTMLMarqueeElement::onstart(user);\n
-setter HTMLMarqueeElement::onstart(user);\n
-getter HTMLMarqueeElement::scrollAmount(unsigned long);\n
-setter HTMLMarqueeElement::scrollAmount(unsigned long);\n
-getter HTMLMarqueeElement::scrollDelay(unsigned long);\n
-setter HTMLMarqueeElement::scrollDelay(unsigned long);\n
-method HTMLMarqueeElement::start();\n
-method HTMLMarqueeElement::stop();\n
-getter HTMLMarqueeElement::trueSpeed(boolean);\n
-setter HTMLMarqueeElement::trueSpeed(boolean);\n
-getter HTMLMarqueeElement::vspace(unsigned long);\n
-setter HTMLMarqueeElement::vspace(unsigned long);\n
-getter HTMLMarqueeElement::width(string);\n
-setter HTMLMarqueeElement::width(string);\n
-method HTMLMediaElement::addTextTrack();\n
-getter HTMLMediaElement::audioTracks(user);\n
-getter HTMLMediaElement::autoplay(boolean);\n
-setter HTMLMediaElement::autoplay(boolean);\n
-getter HTMLMediaElement::buffered(user);\n
-method HTMLMediaElement::canPlayType();\n
-getter HTMLMediaElement::controller(user);\n
-setter HTMLMediaElement::controller(user);\n
-getter HTMLMediaElement::controls(boolean);\n
-setter HTMLMediaElement::controls(boolean);\n
-getter HTMLMediaElement::crossOrigin(string);\n
-setter HTMLMediaElement::crossOrigin(string);\n
-getter HTMLMediaElement::currentSrc(string);\n
-getter HTMLMediaElement::currentTime(double);\n
-setter HTMLMediaElement::currentTime(double);\n
-getter HTMLMediaElement::defaultMuted(boolean);\n
-setter HTMLMediaElement::defaultMuted(boolean);\n
-getter HTMLMediaElement::defaultPlaybackRate(double);\n
-setter HTMLMediaElement::defaultPlaybackRate(double);\n
-getter HTMLMediaElement::duration(double);\n
-getter HTMLMediaElement::ended(boolean);\n
-getter HTMLMediaElement::error(user);\n
-method HTMLMediaElement::fastSeek();\n
-method HTMLMediaElement::getStartDate();\n
-method HTMLMediaElement::load();\n
-getter HTMLMediaElement::loop(boolean);\n
-setter HTMLMediaElement::loop(boolean);\n
-getter HTMLMediaElement::mediaGroup(string);\n
-setter HTMLMediaElement::mediaGroup(string);\n
-getter HTMLMediaElement::muted(boolean);\n
-setter HTMLMediaElement::muted(boolean);\n
-getter HTMLMediaElement::networkState(unsigned short);\n
-method HTMLMediaElement::pause();\n
-getter HTMLMediaElement::paused(boolean);\n
-method HTMLMediaElement::play();\n
-getter HTMLMediaElement::playbackRate(double);\n
-setter HTMLMediaElement::playbackRate(double);\n
-getter HTMLMediaElement::played(user);\n
-getter HTMLMediaElement::preload(string);\n
-setter HTMLMediaElement::preload(string);\n
-getter HTMLMediaElement::readyState(unsigned short);\n
-getter HTMLMediaElement::seekable(user);\n
-getter HTMLMediaElement::seeking(boolean);\n
-getter HTMLMediaElement::srcObject(user);\n
-setter HTMLMediaElement::srcObject(user);\n
-getter HTMLMediaElement::src(string);\n
-setter HTMLMediaElement::src(string);\n
-getter HTMLMediaElement::textTracks(user);\n
-getter HTMLMediaElement::videoTracks(user);\n
-getter HTMLMediaElement::volume(double);\n
-setter HTMLMediaElement::volume(double);\n
-getter HTMLMenuElement::label(string);\n
-setter HTMLMenuElement::label(string);\n
-getter HTMLMenuElement::type(string);\n
-setter HTMLMenuElement::type(string);\n
-getter HTMLMenuItemElement::checked(boolean);\n
-setter HTMLMenuItemElement::checked(boolean);\n
-getter HTMLMenuItemElement::command(user);\n
-getter HTMLMenuItemElement::default(boolean);\n
-setter HTMLMenuItemElement::default(boolean);\n
-getter HTMLMenuItemElement::disabled(boolean);\n
-setter HTMLMenuItemElement::disabled(boolean);\n
-getter HTMLMenuItemElement::icon(string);\n
-setter HTMLMenuItemElement::icon(string);\n
-getter HTMLMenuItemElement::label(string);\n
-setter HTMLMenuItemElement::label(string);\n
-getter HTMLMenuItemElement::radiogroup(string);\n
-setter HTMLMenuItemElement::radiogroup(string);\n
-getter HTMLMenuItemElement::type(string);\n
-setter HTMLMenuItemElement::type(string);\n
-getter HTMLMeterElement::high(double);\n
-setter HTMLMeterElement::high(double);\n
-getter HTMLMeterElement::labels(user);\n
-getter HTMLMeterElement::low(double);\n
-setter HTMLMeterElement::low(double);\n
-getter HTMLMeterElement::max(double);\n
-setter HTMLMeterElement::max(double);\n
-getter HTMLMeterElement::min(double);\n
-setter HTMLMeterElement::min(double);\n
-getter HTMLMeterElement::optimum(double);\n
-setter HTMLMeterElement::optimum(double);\n
-getter HTMLMeterElement::value(double);\n
-setter HTMLMeterElement::value(double);\n
-getter HTMLModElement::cite(string);\n
-setter HTMLModElement::cite(string);\n
-getter HTMLModElement::dateTime(string);\n
-setter HTMLModElement::dateTime(string);\n
-method HTMLObjectElement::checkValidity();\n
-getter HTMLObjectElement::contentDocument(user);\n
-getter HTMLObjectElement::contentWindow(user);\n
-getter HTMLObjectElement::form(user);\n
-method HTMLObjectElement::getSVGDocument();\n
-getter HTMLObjectElement::hspace(unsigned long);\n
-setter HTMLObjectElement::hspace(unsigned long);\n
-method HTMLObjectElement::reportValidity();\n
-method HTMLObjectElement::setCustomValidity();\n
-getter HTMLObjectElement::typeMustMatch(boolean);\n
-setter HTMLObjectElement::typeMustMatch(boolean);\n
-getter HTMLObjectElement::validationMessage(string);\n
-getter HTMLObjectElement::validity(user);\n
-getter HTMLObjectElement::vspace(unsigned long);\n
-setter HTMLObjectElement::vspace(unsigned long);\n
-getter HTMLObjectElement::willValidate(boolean);\n
-getter HTMLOListElement::reversed(boolean);\n
-setter HTMLOListElement::reversed(boolean);\n
-getter HTMLOptGroupElement::disabled(boolean);\n
-setter HTMLOptGroupElement::disabled(boolean);\n
-getter HTMLOptGroupElement::label(string);\n
-setter HTMLOptGroupElement::label(string);\n
-getter HTMLOptionElement::form(user);\n
-getter HTMLOptionElement::index(long);\n
-setter HTMLOptionElement::text(string);\n
-method HTMLOptionsCollection::add();\n
-getter HTMLOptionsCollection::length(unsigned long);\n
-setter HTMLOptionsCollection::length(unsigned long);\n
-method HTMLOptionsCollection::remove();\n
-getter HTMLOptionsCollection::selectedIndex(long);\n
-setter HTMLOptionsCollection::selectedIndex(long);\n
-method HTMLOutputElement::checkValidity();\n
-getter HTMLOutputElement::defaultValue(string);\n
-setter HTMLOutputElement::defaultValue(string);\n
-getter HTMLOutputElement::form(user);\n
-getter HTMLOutputElement::htmlFor(user);\n
-getter HTMLOutputElement::labels(user);\n
-getter HTMLOutputElement::name(string);\n
-setter HTMLOutputElement::name(string);\n
-method HTMLOutputElement::reportValidity();\n
-method HTMLOutputElement::setCustomValidity();\n
-getter HTMLOutputElement::type(string);\n
-getter HTMLOutputElement::validationMessage(string);\n
-getter HTMLOutputElement::validity(user);\n
-getter HTMLOutputElement::value(string);\n
-setter HTMLOutputElement::value(string);\n
-getter HTMLOutputElement::willValidate(boolean);\n
-getter HTMLProgressElement::labels(user);\n
-getter HTMLProgressElement::max(double);\n
-setter HTMLProgressElement::max(double);\n
-getter HTMLProgressElement::position(double);\n
-getter HTMLProgressElement::value(double);\n
-setter HTMLProgressElement::value(double);\n
-getter HTMLScriptElement::async(boolean);\n
-setter HTMLScriptElement::async(boolean);\n
-getter HTMLScriptElement::crossOrigin(string);\n
-setter HTMLScriptElement::crossOrigin(string);\n
-getter HTMLScriptElement::nonce(string);\n
-setter HTMLScriptElement::nonce(string);\n
-method HTMLSelectElement::add();\n
-getter HTMLSelectElement::autocomplete(string);\n
-setter HTMLSelectElement::autocomplete(string);\n
-getter HTMLSelectElement::autofocus(boolean);\n
-setter HTMLSelectElement::autofocus(boolean);\n
-method HTMLSelectElement::checkValidity();\n
-getter HTMLSelectElement::form(user);\n
-method HTMLSelectElement::item();\n
-getter HTMLSelectElement::labels(user);\n
-getter HTMLSelectElement::length(unsigned long);\n
-setter HTMLSelectElement::length(unsigned long);\n
-method HTMLSelectElement::namedItem();\n
-getter HTMLSelectElement::options(user);\n
-method HTMLSelectElement::remove();\n
-method HTMLSelectElement::reportValidity();\n
-getter HTMLSelectElement::required(boolean);\n
-setter HTMLSelectElement::required(boolean);\n
-getter HTMLSelectElement::selectedIndex(long);\n
-setter HTMLSelectElement::selectedIndex(long);\n
-getter HTMLSelectElement::selectedOptions(user);\n
-method HTMLSelectElement::setCustomValidity();\n
-getter HTMLSelectElement::size(unsigned long);\n
-setter HTMLSelectElement::size(unsigned long);\n
-getter HTMLSelectElement::validationMessage(string);\n
-getter HTMLSelectElement::validity(user);\n
-getter HTMLSelectElement::willValidate(boolean);\n
-getter HTMLSourceElement::media(string);\n
-setter HTMLSourceElement::media(string);\n
-getter HTMLSourceElement::sizes(string);\n
-setter HTMLSourceElement::sizes(string);\n
-getter HTMLSourceElement::srcset(string);\n
-setter HTMLSourceElement::srcset(string);\n
-getter HTMLSourceElement::src(string);\n
-setter HTMLSourceElement::src(string);\n
-getter HTMLSourceElement::type(string);\n
-setter HTMLSourceElement::type(string);\n
-getter HTMLStyleElement::nonce(string);\n
-setter HTMLStyleElement::nonce(string);\n
-getter HTMLStyleElement::scoped(boolean);\n
-setter HTMLStyleElement::scoped(boolean);\n
-getter HTMLStyleElement::sheet(user);\n
-getter HTMLTableCellElement::headers(user);\n
-getter HTMLTableColElement::span(unsigned long);\n
-setter HTMLTableColElement::span(unsigned long);\n
-getter HTMLTableDataCellElement::abbr(string);\n
-setter HTMLTableDataCellElement::abbr(string);\n
-getter HTMLTableElement::caption(user);\n
-setter HTMLTableElement::caption(user);\n
-method HTMLTableElement::createCaption();\n
-method HTMLTableElement::createTBody();\n
-method HTMLTableElement::createTFoot();\n
-method HTMLTableElement::createTHead();\n
-method HTMLTableElement::deleteCaption();\n
-method HTMLTableElement::deleteRow();\n
-method HTMLTableElement::deleteTFoot();\n
-method HTMLTableElement::deleteTHead();\n
-method HTMLTableElement::insertRow();\n
-getter HTMLTableElement::rows(user);\n
-getter HTMLTableElement::sortable(boolean);\n
-setter HTMLTableElement::sortable(boolean);\n
-method HTMLTableElement::stopSorting();\n
-getter HTMLTableElement::tBodies(user);\n
-getter HTMLTableElement::tFoot(user);\n
-setter HTMLTableElement::tFoot(user);\n
-getter HTMLTableElement::tHead(user);\n
-setter HTMLTableElement::tHead(user);\n
-getter HTMLTableHeaderCellElement::abbr(string);\n
-setter HTMLTableHeaderCellElement::abbr(string);\n
-getter HTMLTableHeaderCellElement::scope(string);\n
-setter HTMLTableHeaderCellElement::scope(string);\n
-method HTMLTableHeaderCellElement::sort();\n
-getter HTMLTableHeaderCellElement::sorted(string);\n
-setter HTMLTableHeaderCellElement::sorted(string);\n
-getter HTMLTableRowElement::cells(user);\n
-method HTMLTableRowElement::deleteCell();\n
-method HTMLTableRowElement::insertCell();\n
-method HTMLTableSectionElement::deleteRow();\n
-method HTMLTableSectionElement::insertRow();\n
-getter HTMLTableSectionElement::rows(user);\n
-getter HTMLTemplateElement::content(user);\n
-getter HTMLTextAreaElement::autocomplete(string);\n
-setter HTMLTextAreaElement::autocomplete(string);\n
-getter HTMLTextAreaElement::autofocus(boolean);\n
-setter HTMLTextAreaElement::autofocus(boolean);\n
-method HTMLTextAreaElement::checkValidity();\n
-getter HTMLTextAreaElement::cols(unsigned long);\n
-setter HTMLTextAreaElement::cols(unsigned long);\n
-getter HTMLTextAreaElement::dirName(string);\n
-setter HTMLTextAreaElement::dirName(string);\n
-getter HTMLTextAreaElement::form(user);\n
-getter HTMLTextAreaElement::inputMode(string);\n
-setter HTMLTextAreaElement::inputMode(string);\n
-getter HTMLTextAreaElement::labels(user);\n
-getter HTMLTextAreaElement::maxLength(long);\n
-setter HTMLTextAreaElement::maxLength(long);\n
-getter HTMLTextAreaElement::minLength(long);\n
-setter HTMLTextAreaElement::minLength(long);\n
-getter HTMLTextAreaElement::placeholder(string);\n
-setter HTMLTextAreaElement::placeholder(string);\n
-method HTMLTextAreaElement::reportValidity();\n
-getter HTMLTextAreaElement::required(boolean);\n
-setter HTMLTextAreaElement::required(boolean);\n
-getter HTMLTextAreaElement::rows(unsigned long);\n
-setter HTMLTextAreaElement::rows(unsigned long);\n
-method HTMLTextAreaElement::select();\n
-getter HTMLTextAreaElement::selectionDirection(string);\n
-setter HTMLTextAreaElement::selectionDirection(string);\n
-getter HTMLTextAreaElement::selectionEnd(unsigned long);\n
-setter HTMLTextAreaElement::selectionEnd(unsigned long);\n
-getter HTMLTextAreaElement::selectionStart(unsigned long);\n
-setter HTMLTextAreaElement::selectionStart(unsigned long);\n
-method HTMLTextAreaElement::setCustomValidity();\n
-method HTMLTextAreaElement::setRangeText();\n
-method HTMLTextAreaElement::setSelectionRange();\n
-getter HTMLTextAreaElement::textLength(unsigned long);\n
-getter HTMLTextAreaElement::validationMessage(string);\n
-getter HTMLTextAreaElement::validity(user);\n
-getter HTMLTextAreaElement::willValidate(boolean);\n
-getter HTMLTextAreaElement::wrap(string);\n
-setter HTMLTextAreaElement::wrap(string);\n
-getter HTMLTimeElement::dateTime(string);\n
-setter HTMLTimeElement::dateTime(string);\n
-getter HTMLTrackElement::default(boolean);\n
-setter HTMLTrackElement::default(boolean);\n
-getter HTMLTrackElement::kind(string);\n
-setter HTMLTrackElement::kind(string);\n
-getter HTMLTrackElement::label(string);\n
-setter HTMLTrackElement::label(string);\n
-getter HTMLTrackElement::readyState(unsigned short);\n
-getter HTMLTrackElement::srclang(string);\n
-setter HTMLTrackElement::srclang(string);\n
-getter HTMLTrackElement::src(string);\n
-setter HTMLTrackElement::src(string);\n
-getter HTMLTrackElement::track(user);\n
-getter HTMLUListElement::compact(boolean);\n
-setter HTMLUListElement::compact(boolean);\n
-getter HTMLUListElement::type(string);\n
-setter HTMLUListElement::type(string);\n
-getter HTMLVideoElement::height(unsigned long);\n
-setter HTMLVideoElement::height(unsigned long);\n
-getter HTMLVideoElement::poster(string);\n
-setter HTMLVideoElement::poster(string);\n
-getter HTMLVideoElement::videoHeight(unsigned long);\n
-getter HTMLVideoElement::videoWidth(unsigned long);\n
-getter HTMLVideoElement::width(unsigned long);\n
-setter HTMLVideoElement::width(unsigned long);\n
-getter ImageBitmap::height(unsigned long);\n
-getter ImageBitmap::width(unsigned long);\n
-getter ImageData::data(user);\n
-getter ImageData::height(unsigned long);\n
-getter ImageData::width(unsigned long);\n
-getter KeyboardEvent::altKey(boolean);\n
-getter KeyboardEvent::charCode(unsigned long);\n
-getter KeyboardEvent::code(string);\n
-getter KeyboardEvent::ctrlKey(boolean);\n
-method KeyboardEvent::getModifierState();\n
-method KeyboardEvent::initKeyboardEvent();\n
-getter KeyboardEvent::isComposing(boolean);\n
-getter KeyboardEvent::keyCode(unsigned long);\n
-getter KeyboardEvent::key(string);\n
-getter KeyboardEvent::location(unsigned long);\n
-getter KeyboardEvent::metaKey(boolean);\n
-getter KeyboardEvent::repeat(boolean);\n
-getter KeyboardEvent::shiftKey(boolean);\n
-getter KeyboardEvent::which(unsigned long);\n
-getter Location::ancestorOrigins(string);\n
-setter Location::hash(user);\n
-setter Location::hostname(user);\n
-setter Location::host(user);\n
-setter Location::password(user);\n
-setter Location::pathname(user);\n
-setter Location::port(user);\n
-setter Location::protocol(user);\n
-setter Location::search(user);\n
-setter Location::username(user);\n
-getter MediaController::buffered(user);\n
-getter MediaController::currentTime(double);\n
-setter MediaController::currentTime(double);\n
-getter MediaController::defaultPlaybackRate(double);\n
-setter MediaController::defaultPlaybackRate(double);\n
-getter MediaController::duration(double);\n
-getter MediaController::muted(boolean);\n
-setter MediaController::muted(boolean);\n
-getter MediaController::oncanplaythrough(user);\n
-setter MediaController::oncanplaythrough(user);\n
-getter MediaController::oncanplay(user);\n
-setter MediaController::oncanplay(user);\n
-getter MediaController::ondurationchange(user);\n
-setter MediaController::ondurationchange(user);\n
-getter MediaController::onemptied(user);\n
-setter MediaController::onemptied(user);\n
-getter MediaController::onended(user);\n
-setter MediaController::onended(user);\n
-getter MediaController::onloadeddata(user);\n
-setter MediaController::onloadeddata(user);\n
-getter MediaController::onloadedmetadata(user);\n
-setter MediaController::onloadedmetadata(user);\n
-getter MediaController::onpause(user);\n
-setter MediaController::onpause(user);\n
-getter MediaController::onplaying(user);\n
-setter MediaController::onplaying(user);\n
-getter MediaController::onplay(user);\n
-setter MediaController::onplay(user);\n
-getter MediaController::onratechange(user);\n
-setter MediaController::onratechange(user);\n
-getter MediaController::ontimeupdate(user);\n
-setter MediaController::ontimeupdate(user);\n
-getter MediaController::onvolumechange(user);\n
-setter MediaController::onvolumechange(user);\n
-getter MediaController::onwaiting(user);\n
-setter MediaController::onwaiting(user);\n
-method MediaController::pause();\n
-getter MediaController::paused(boolean);\n
-method MediaController::play();\n
-getter MediaController::playbackRate(double);\n
-setter MediaController::playbackRate(double);\n
-getter MediaController::playbackState(user);\n
-getter MediaController::played(user);\n
-getter MediaController::readyState(unsigned short);\n
-getter MediaController::seekable(user);\n
-method MediaController::unpause();\n
-getter MediaController::volume(double);\n
-setter MediaController::volume(double);\n
-getter MediaError::code(unsigned short);\n
-method MediaList::appendMedium();\n
-method MediaList::deleteMedium();\n
-method MediaList::item();\n
-getter MediaList::length(unsigned long);\n
-getter MediaList::mediaText(string);\n
-setter MediaList::mediaText(string);\n
-getter MessageChannel::port1(user);\n
-getter MessageChannel::port2(user);\n
-getter MessageEvent::data(any);\n
-method MessageEvent::initMessageEvent();\n
-getter MessageEvent::lastEventId(string);\n
-getter MessageEvent::origin(string);\n
-getter MessageEvent::ports(user);\n
-getter MessageEvent::source(multiple);\n
-method MessagePort::close();\n
-getter MessagePort::onmessage(user);\n
-setter MessagePort::onmessage(user);\n
-method MessagePort::postMessage();\n
-method MessagePort::start();\n
-method MimeTypeArray::item();\n
-getter MimeTypeArray::length(unsigned long);\n
-method MimeTypeArray::namedItem();\n
-getter MimeType::description(string);\n
-getter MimeType::enabledPlugin(user);\n
-getter MimeType::suffixes(string);\n
-getter MimeType::type(string);\n
-getter MouseEvent::altKey(boolean);\n
-getter MouseEvent::button(short);\n
-getter MouseEvent::buttons(unsigned short);\n
-getter MouseEvent::clientX(long);\n
-getter MouseEvent::clientY(long);\n
-getter MouseEvent::ctrlKey(boolean);\n
-method MouseEvent::getModifierState();\n
-method MouseEvent::initMouseEvent();\n
-getter MouseEvent::metaKey(boolean);\n
-getter MouseEvent::region(string);\n
-getter MouseEvent::relatedTarget(user);\n
-getter MouseEvent::screenX(long);\n
-getter MouseEvent::screenY(long);\n
-getter MouseEvent::shiftKey(boolean);\n
-getter MutationEvent::attrChange(unsigned short);\n
-getter MutationEvent::attrName(string);\n
-method MutationEvent::initMutationEvent();\n
-getter MutationEvent::newValue(string);\n
-getter MutationEvent::prevValue(string);\n
-getter MutationEvent::relatedNode(user);\n
-method MutationObserver::disconnect();\n
-method MutationObserver::observe();\n
-method MutationObserver::takeRecords();\n
-getter MutationRecord::addedNodes(user);\n
-getter MutationRecord::attributeNamespace(string);\n
-getter MutationRecord::attributeName(string);\n
-getter MutationRecord::nextSibling(user);\n
-getter MutationRecord::oldValue(string);\n
-getter MutationRecord::previousSibling(user);\n
-getter MutationRecord::removedNodes(user);\n
-getter MutationRecord::target(user);\n
-getter MutationRecord::type(string);\n
-method NamedNodeMap::getNamedItem();\n
-method NamedNodeMap::getNamedItemNS();\n
-method NamedNodeMap::item();\n
-getter NamedNodeMap::length(unsigned long);\n
-method NamedNodeMap::removeNamedItem();\n
-method NamedNodeMap::removeNamedItemNS();\n
-method NamedNodeMap::setNamedItem();\n
-method NamedNodeMap::setNamedItemNS();\n
-method Navigator::isContentHandlerRegistered();\n
-method Navigator::isProtocolHandlerRegistered();\n
-getter Navigator::languages(string);\n
-getter Navigator::language(string);\n
-getter Navigator::mimeTypes(user);\n
-getter Navigator::onLine(boolean);\n
-getter Navigator::plugins(user);\n
-method Navigator::registerContentHandler();\n
-method Navigator::registerProtocolHandler();\n
-method Navigator::unregisterContentHandler();\n
-method Navigator::unregisterProtocolHandler();\n
-method Navigator::yieldForStorageUpdates();\n
-method NodeFilter::acceptNode();\n
-method NodeIterator::detach();\n
-getter NodeIterator::filter(user);\n
-method NodeIterator::nextNode();\n
-getter NodeIterator::pointerBeforeReferenceNode(boolean);\n
-method NodeIterator::previousNode();\n
-getter NodeIterator::referenceNode(user);\n
-getter NodeIterator::root(user);\n
-getter NodeIterator::whatToShow(unsigned long);\n
-getter PageTransitionEvent::persisted(boolean);\n
-method Path2D::addPath();\n
-method Path2D::addPathByStrokingPath();\n
-method Path2D::addPathByStrokingText();\n
-method Path2D::addText();\n
-method Path2D::arc();\n
-method Path2D::arcTo();\n
-method Path2D::bezierCurveTo();\n
-method Path2D::closePath();\n
-method Path2D::ellipse();\n
-method Path2D::lineTo();\n
-method Path2D::moveTo();\n
-method Path2D::quadraticCurveTo();\n
-method Path2D::rect();\n
-method PluginArray::item();\n
-getter PluginArray::length(unsigned long);\n
-method PluginArray::namedItem();\n
-method PluginArray::refresh();\n
-getter Plugin::description(string);\n
-getter Plugin::filename(string);\n
-method Plugin::item();\n
-getter Plugin::length(unsigned long);\n
-method Plugin::namedItem();\n
-getter Plugin::name(string);\n
-getter PopStateEvent::state(any);\n
-getter ProcessingInstruction::sheet(user);\n
-getter ProcessingInstruction::target(string);\n
-getter PseudoElement::cascadedStyle(user);\n
-getter PseudoElement::defaultStyle(user);\n
-getter PseudoElement::rawComputedStyle(user);\n
-getter PseudoElement::usedStyle(user);\n
-getter RadioNodeList::value(string);\n
-setter RadioNodeList::value(string);\n
-method Range::cloneContents();\n
-method Range::cloneRange();\n
-method Range::collapse();\n
-getter Range::collapsed(boolean);\n
-getter Range::commonAncestorContainer(user);\n
-method Range::compareBoundaryPoints();\n
-method Range::comparePoint();\n
-method Range::createContextualFragment();\n
-method Range::deleteContents();\n
-method Range::detach();\n
-getter Range::endContainer(user);\n
-getter Range::endOffset(unsigned long);\n
-method Range::extractContents();\n
-method Range::insertNode();\n
-method Range::intersectsNode();\n
-method Range::isPointInRange();\n
-method Range::selectNode();\n
-method Range::selectNodeContents();\n
-method Range::setEnd();\n
-method Range::setEndAfter();\n
-method Range::setEndBefore();\n
-method Range::setStart();\n
-method Range::setStartAfter();\n
-method Range::setStartBefore();\n
-getter Range::startContainer(user);\n
-getter Range::startOffset(unsigned long);\n
-method Range::surroundContents();\n
-getter RelatedEvent::relatedTarget(user);\n
-getter SharedWorkerGlobalScope::applicationCache(user);\n
-getter SharedWorkerGlobalScope::name(string);\n
-getter SharedWorkerGlobalScope::onconnect(user);\n
-setter SharedWorkerGlobalScope::onconnect(user);\n
-getter SharedWorker::onerror(user);\n
-setter SharedWorker::onerror(user);\n
-getter SharedWorker::port(user);\n
-method Storage::clear();\n
-getter StorageEvent::key(string);\n
-getter StorageEvent::newValue(string);\n
-getter StorageEvent::oldValue(string);\n
-getter StorageEvent::storageArea(user);\n
-getter StorageEvent::url(string);\n
-method Storage::getItem();\n
-method Storage::key();\n
-getter Storage::length(unsigned long);\n
-method Storage::removeItem();\n
-method Storage::setItem();\n
-getter StyleSheet::disabled(boolean);\n
-setter StyleSheet::disabled(boolean);\n
-getter StyleSheet::href(string);\n
-method StyleSheetList::item();\n
-getter StyleSheetList::length(unsigned long);\n
-getter StyleSheet::media(user);\n
-getter StyleSheet::ownerNode(multiple);\n
-getter StyleSheet::parentStyleSheet(user);\n
-getter StyleSheet::title(string);\n
-getter StyleSheet::type(string);\n
-getter SVGElement::style(user);\n
-getter TextMetrics::actualBoundingBoxAscent(double);\n
-getter TextMetrics::actualBoundingBoxDescent(double);\n
-getter TextMetrics::actualBoundingBoxLeft(double);\n
-getter TextMetrics::actualBoundingBoxRight(double);\n
-getter TextMetrics::alphabeticBaseline(double);\n
-getter TextMetrics::emHeightAscent(double);\n
-getter TextMetrics::emHeightDescent(double);\n
-getter TextMetrics::fontBoundingBoxAscent(double);\n
-getter TextMetrics::fontBoundingBoxDescent(double);\n
-getter TextMetrics::hangingBaseline(double);\n
-getter TextMetrics::ideographicBaseline(double);\n
-getter TextMetrics::width(double);\n
-method Text::splitText();\n
-getter TextTrack::activeCues(user);\n
-method TextTrack::addCue();\n
-getter TextTrackCue::endTime(double);\n
-setter TextTrackCue::endTime(double);\n
-getter TextTrackCue::id(string);\n
-setter TextTrackCue::id(string);\n
-method TextTrackCueList::getCueById();\n
-getter TextTrackCueList::length(unsigned long);\n
-getter TextTrackCue::onenter(user);\n
-setter TextTrackCue::onenter(user);\n
-getter TextTrackCue::onexit(user);\n
-setter TextTrackCue::onexit(user);\n
-getter TextTrackCue::pauseOnExit(boolean);\n
-setter TextTrackCue::pauseOnExit(boolean);\n
-getter TextTrackCue::startTime(double);\n
-setter TextTrackCue::startTime(double);\n
-getter TextTrack::cues(user);\n
-getter TextTrackCue::track(user);\n
-getter TextTrack::id(string);\n
-getter TextTrack::inBandMetadataTrackDispatchType(string);\n
-getter TextTrack::kind(user);\n
-getter TextTrack::label(string);\n
-getter TextTrack::language(string);\n
-method TextTrackList::getTrackById();\n
-getter TextTrackList::length(unsigned long);\n
-getter TextTrackList::onaddtrack(user);\n
-setter TextTrackList::onaddtrack(user);\n
-getter TextTrackList::onchange(user);\n
-setter TextTrackList::onchange(user);\n
-getter TextTrackList::onremovetrack(user);\n
-setter TextTrackList::onremovetrack(user);\n
-getter TextTrack::mode(user);\n
-setter TextTrack::mode(user);\n
-getter TextTrack::oncuechange(user);\n
-setter TextTrack::oncuechange(user);\n
-method TextTrack::removeCue();\n
-getter Text::wholeText(string);\n
-method TimeRanges::end();\n
-getter TimeRanges::length(unsigned long);\n
-method TimeRanges::start();\n
-getter Touch::region(string);\n
-getter TrackEvent::track(multiple);\n
-getter TreeWalker::currentNode(user);\n
-setter TreeWalker::currentNode(user);\n
-getter TreeWalker::filter(user);\n
-method TreeWalker::firstChild();\n
-method TreeWalker::lastChild();\n
-method TreeWalker::nextNode();\n
-method TreeWalker::nextSibling();\n
-method TreeWalker::parentNode();\n
-method TreeWalker::previousNode();\n
-method TreeWalker::previousSibling();\n
-getter TreeWalker::root(user);\n
-getter TreeWalker::whatToShow(unsigned long);\n
-getter UIEvent::detail(long);\n
-method UIEvent::initUIEvent();\n
-getter UIEvent::view(user);\n
-method URL::domainToASCII();\n
-method URL::domainToUnicode();\n
-getter URL::hash(user);\n
-setter URL::hash(user);\n
-getter URL::hostname(user);\n
-setter URL::hostname(user);\n
-getter URL::host(user);\n
-setter URL::host(user);\n
-getter URL::href(user);\n
-setter URL::href(user);\n
-getter URL::origin(user);\n
-getter URL::password(user);\n
-setter URL::password(user);\n
-getter URL::pathname(user);\n
-setter URL::pathname(user);\n
-getter URL::port(user);\n
-setter URL::port(user);\n
-getter URL::protocol(user);\n
-setter URL::protocol(user);\n
-method URLSearchParams::append();\n
-method URLSearchParams::delete();\n
-method URLSearchParams::get();\n
-method URLSearchParams::getAll();\n
-method URLSearchParams::has();\n
-method URLSearchParams::set();\n
-getter URL::searchParams(user);\n
-setter URL::searchParams(user);\n
-getter URL::search(user);\n
-setter URL::search(user);\n
-getter URL::username(user);\n
-setter URL::username(user);\n
-getter ValidityState::badInput(boolean);\n
-getter ValidityState::customError(boolean);\n
-getter ValidityState::patternMismatch(boolean);\n
-getter ValidityState::rangeOverflow(boolean);\n
-getter ValidityState::rangeUnderflow(boolean);\n
-getter ValidityState::stepMismatch(boolean);\n
-getter ValidityState::tooLong(boolean);\n
-getter ValidityState::tooShort(boolean);\n
-getter ValidityState::typeMismatch(boolean);\n
-getter ValidityState::valid(boolean);\n
-getter ValidityState::valueMissing(boolean);\n
-getter VideoTrack::id(string);\n
-getter VideoTrack::kind(string);\n
-getter VideoTrack::label(string);\n
-getter VideoTrack::language(string);\n
-method VideoTrackList::getTrackById();\n
-getter VideoTrackList::length(unsigned long);\n
-getter VideoTrackList::onaddtrack(user);\n
-setter VideoTrackList::onaddtrack(user);\n
-getter VideoTrackList::onchange(user);\n
-setter VideoTrackList::onchange(user);\n
-getter VideoTrackList::onremovetrack(user);\n
-setter VideoTrackList::onremovetrack(user);\n
-getter VideoTrackList::selectedIndex(long);\n
-getter VideoTrack::selected(boolean);\n
-setter VideoTrack::selected(boolean);\n
-getter WebSocket::binaryType(user);\n
-setter WebSocket::binaryType(user);\n
-getter WebSocket::bufferedAmount(unsigned long);\n
-method WebSocket::close();\n
-getter WebSocket::extensions(string);\n
-getter WebSocket::onclose(user);\n
-setter WebSocket::onclose(user);\n
-getter WebSocket::onerror(user);\n
-setter WebSocket::onerror(user);\n
-getter WebSocket::onmessage(user);\n
-setter WebSocket::onmessage(user);\n
-getter WebSocket::onopen(user);\n
-setter WebSocket::onopen(user);\n
-getter WebSocket::protocol(string);\n
-getter WebSocket::readyState(unsigned short);\n
-method WebSocket::send();\n
-getter WebSocket::url(string);\n
-getter WheelEvent::deltaMode(unsigned long);\n
-getter WheelEvent::deltaX(double);\n
-getter WheelEvent::deltaY(double);\n
-getter WheelEvent::deltaZ(double);\n
-method WheelEvent::initWheelEvent();\n
-getter Window::applicationCache(user);\n
-method Window::atob();\n
-method Window::blur();\n
-method Window::btoa();\n
-method Window::cancelAnimationFrame();\n
-method Window::captureEvents();\n
-method Window::clearInterval();\n
-method Window::clearTimeout();\n
-method Window::close();\n
-getter Window::closed(boolean);\n
-method Window::confirm();\n
-method Window::createImageBitmap();\n
-getter Window::external(user);\n
-method Window::focus();\n
-getter Window::frameElement(user);\n
-getter Window::frames(user);\n
-method Window::getComputedStyle();\n
-getter Window::history(user);\n
-getter Window::length(unsigned long);\n
-getter Window::localStorage(user);\n
-getter Window::locationbar(user);\n
-getter Window::menubar(user);\n
-getter Window::onabort(user);\n
-setter Window::onabort(user);\n
-getter Window::onafterprint(user);\n
-setter Window::onafterprint(user);\n
-getter Window::onautocompleteerror(user);\n
-setter Window::onautocompleteerror(user);\n
-getter Window::onautocomplete(user);\n
-setter Window::onautocomplete(user);\n
-getter Window::onbeforeprint(user);\n
-setter Window::onbeforeprint(user);\n
-getter Window::onbeforeunload(user);\n
-setter Window::onbeforeunload(user);\n
-getter Window::onblur(user);\n
-setter Window::onblur(user);\n
-getter Window::oncancel(user);\n
-setter Window::oncancel(user);\n
-getter Window::oncanplaythrough(user);\n
-setter Window::oncanplaythrough(user);\n
-getter Window::oncanplay(user);\n
-setter Window::oncanplay(user);\n
-getter Window::onchange(user);\n
-setter Window::onchange(user);\n
-getter Window::onclick(user);\n
-setter Window::onclick(user);\n
-getter Window::onclose(user);\n
-setter Window::onclose(user);\n
-getter Window::oncontextmenu(user);\n
-setter Window::oncontextmenu(user);\n
-getter Window::oncuechange(user);\n
-setter Window::oncuechange(user);\n
-getter Window::ondblclick(user);\n
-setter Window::ondblclick(user);\n
-getter Window::ondragend(user);\n
-setter Window::ondragend(user);\n
-getter Window::ondragenter(user);\n
-setter Window::ondragenter(user);\n
-getter Window::ondragexit(user);\n
-setter Window::ondragexit(user);\n
-getter Window::ondragleave(user);\n
-setter Window::ondragleave(user);\n
-getter Window::ondragover(user);\n
-setter Window::ondragover(user);\n
-getter Window::ondragstart(user);\n
-setter Window::ondragstart(user);\n
-getter Window::ondrag(user);\n
-setter Window::ondrag(user);\n
-getter Window::ondrop(user);\n
-setter Window::ondrop(user);\n
-getter Window::ondurationchange(user);\n
-setter Window::ondurationchange(user);\n
-getter Window::onemptied(user);\n
-setter Window::onemptied(user);\n
-getter Window::onended(user);\n
-setter Window::onended(user);\n
-getter Window::onerror(user);\n
-setter Window::onerror(user);\n
-getter Window::onfocus(user);\n
-setter Window::onfocus(user);\n
-getter Window::onhashchange(user);\n
-setter Window::onhashchange(user);\n
-getter Window::oninput(user);\n
-setter Window::oninput(user);\n
-getter Window::oninvalid(user);\n
-setter Window::oninvalid(user);\n
-getter Window::onkeydown(user);\n
-setter Window::onkeydown(user);\n
-getter Window::onkeypress(user);\n
-setter Window::onkeypress(user);\n
-getter Window::onkeyup(user);\n
-setter Window::onkeyup(user);\n
-getter Window::onlanguagechange(user);\n
-setter Window::onlanguagechange(user);\n
-getter Window::onloadeddata(user);\n
-setter Window::onloadeddata(user);\n
-getter Window::onloadedmetadata(user);\n
-setter Window::onloadedmetadata(user);\n
-getter Window::onloadstart(user);\n
-setter Window::onloadstart(user);\n
-getter Window::onload(user);\n
-setter Window::onload(user);\n
-getter Window::onmessage(user);\n
-setter Window::onmessage(user);\n
-getter Window::onmousedown(user);\n
-setter Window::onmousedown(user);\n
-getter Window::onmouseenter(user);\n
-setter Window::onmouseenter(user);\n
-getter Window::onmouseleave(user);\n
-setter Window::onmouseleave(user);\n
-getter Window::onmousemove(user);\n
-setter Window::onmousemove(user);\n
-getter Window::onmouseout(user);\n
-setter Window::onmouseout(user);\n
-getter Window::onmouseover(user);\n
-setter Window::onmouseover(user);\n
-getter Window::onmouseup(user);\n
-setter Window::onmouseup(user);\n
-getter Window::onoffline(user);\n
-setter Window::onoffline(user);\n
-getter Window::ononline(user);\n
-setter Window::ononline(user);\n
-getter Window::onpagehide(user);\n
-setter Window::onpagehide(user);\n
-getter Window::onpageshow(user);\n
-setter Window::onpageshow(user);\n
-getter Window::onpause(user);\n
-setter Window::onpause(user);\n
-getter Window::onplaying(user);\n
-setter Window::onplaying(user);\n
-getter Window::onplay(user);\n
-setter Window::onplay(user);\n
-getter Window::onpopstate(user);\n
-setter Window::onpopstate(user);\n
-getter Window::onprogress(user);\n
-setter Window::onprogress(user);\n
-getter Window::onratechange(user);\n
-setter Window::onratechange(user);\n
-getter Window::onreset(user);\n
-setter Window::onreset(user);\n
-getter Window::onresize(user);\n
-setter Window::onresize(user);\n
-getter Window::onscroll(user);\n
-setter Window::onscroll(user);\n
-getter Window::onseeked(user);\n
-setter Window::onseeked(user);\n
-getter Window::onseeking(user);\n
-setter Window::onseeking(user);\n
-getter Window::onselect(user);\n
-setter Window::onselect(user);\n
-getter Window::onshow(user);\n
-setter Window::onshow(user);\n
-getter Window::onsort(user);\n
-setter Window::onsort(user);\n
-getter Window::onstalled(user);\n
-setter Window::onstalled(user);\n
-getter Window::onstorage(user);\n
-setter Window::onstorage(user);\n
-getter Window::onsubmit(user);\n
-setter Window::onsubmit(user);\n
-getter Window::onsuspend(user);\n
-setter Window::onsuspend(user);\n
-getter Window::ontimeupdate(user);\n
-setter Window::ontimeupdate(user);\n
-getter Window::ontoggle(user);\n
-setter Window::ontoggle(user);\n
-getter Window::onunload(user);\n
-setter Window::onunload(user);\n
-getter Window::onvolumechange(user);\n
-setter Window::onvolumechange(user);\n
-getter Window::onwaiting(user);\n
-setter Window::onwaiting(user);\n
-getter Window::onwheel(user);\n
-setter Window::onwheel(user);\n
-method Window::open();\n
-getter Window::opener(any);\n
-setter Window::opener(any);\n
-getter Window::parent(user);\n
-getter Window::personalbar(user);\n
-method Window::postMessage();\n
-method Window::print();\n
-method Window::prompt();\n
-method Window::releaseEvents();\n
-method Window::requestAnimationFrame();\n
-getter Window::scrollbars(user);\n
-getter Window::self(user);\n
-getter Window::sessionStorage(user);\n
-method Window::setInterval();\n
-method Window::setTimeout();\n
-method Window::showModalDialog();\n
-getter Window::statusbar(user);\n
-getter Window::status(string);\n
-setter Window::status(string);\n
-method Window::stop();\n
-getter Window::toolbar(user);\n
-getter Window::top(user);\n
-method WorkerGlobalScope::atob();\n
-method WorkerGlobalScope::btoa();\n
-method WorkerGlobalScope::clearInterval();\n
-method WorkerGlobalScope::clearTimeout();\n
-method WorkerGlobalScope::close();\n
-method WorkerGlobalScope::createImageBitmap();\n
-method WorkerGlobalScope::importScripts();\n
-getter WorkerGlobalScope::location(user);\n
-getter WorkerGlobalScope::navigator(user);\n
-getter WorkerGlobalScope::onerror(user);\n
-setter WorkerGlobalScope::onerror(user);\n
-getter WorkerGlobalScope::onlanguagechange(user);\n
-setter WorkerGlobalScope::onlanguagechange(user);\n
-getter WorkerGlobalScope::onoffline(user);\n
-setter WorkerGlobalScope::onoffline(user);\n
-getter WorkerGlobalScope::ononline(user);\n
-setter WorkerGlobalScope::ononline(user);\n
-getter WorkerGlobalScope::self(user);\n
-method WorkerGlobalScope::setInterval();\n
-method WorkerGlobalScope::setTimeout();\n
-getter WorkerLocation::hash(user);\n
-getter WorkerLocation::hostname(user);\n
-getter WorkerLocation::host(user);\n
-getter WorkerLocation::href(user);\n
-getter WorkerLocation::origin(user);\n
-getter WorkerLocation::pathname(user);\n
-getter WorkerLocation::port(user);\n
-getter WorkerLocation::protocol(user);\n
-getter WorkerLocation::search(user);\n
-getter WorkerNavigator::appCodeName(string);\n
-getter WorkerNavigator::appName(string);\n
-getter WorkerNavigator::appVersion(string);\n
-getter WorkerNavigator::languages(string);\n
-getter WorkerNavigator::language(string);\n
-getter WorkerNavigator::onLine(boolean);\n
-getter WorkerNavigator::platform(string);\n
-getter WorkerNavigator::product(string);\n
-getter WorkerNavigator::productSub(string);\n
-method WorkerNavigator::taintEnabled();\n
-getter WorkerNavigator::userAgent(string);\n
-getter WorkerNavigator::vendor(string);\n
-getter WorkerNavigator::vendorSub(string);\n
-getter Worker::onerror(user);\n
-setter Worker::onerror(user);\n
-getter Worker::onmessage(user);\n
-setter Worker::onmessage(user);\n
-method Worker::postMessage();\n
-method Worker::terminate();\n
-method XMLDocument::load();\n
-method XMLSerializer::serializeToString();\n
-*/
diff --git a/docs/building-GTK.md b/docs/building-GTK.md
index 4ac0fc89e..aa898a04d 100644
--- a/docs/building-GTK.md
+++ b/docs/building-GTK.md
@@ -1,239 +1,214 @@
---------------------------------------------------------------------------------
- Build Instructions for GTK NetSurf 16 March 2014
---------------------------------------------------------------------------------
+Build Instructions for GTK NetSurf
+==================================
- This document provides instructions for building the GTK version of NetSurf
- and provides guidance on obtaining NetSurf's build dependencies.
+This document provides instructions for building the GTK version of NetSurf
+and provides guidance on obtaining NetSurf's build dependencies.
- GTK NetSurf has been tested on Debian, Ubuntu, Fedora 8, FreeBSD, NetBSD and
- Solaris 10. NetSurf requires at minimum GTK 2.12.
+GTK NetSurf has been tested on Debian, Ubuntu, Fedora 8, FreeBSD, NetBSD and
+Solaris 10. NetSurf requires at minimum GTK 2.12.
- Quick Start
-=============
+Quick Start
+-----------
- See the QUICK-START document, which provides a simple environment with
- which you can fetch, build and install NetSurf and its dependencies.
+See the QUICK-START document, which provides a simple environment with
+which you can fetch, build and install NetSurf and its dependencies.
- The QUICK-START is the recommended way to build NetSurf.
+The QUICK-START is the recommended way to build NetSurf.
- Manual building
-=================
+Manual building
+---------------
- If you can't follow the quick start instructions, you will have to build
- NetSurf manually. The instructions for doing this are given below.
+If you can't follow the quick start instructions, you will have to build
+NetSurf manually. The instructions for doing this are given below.
- Obtaining the build dependencies
-----------------------------------
-
- Many of NetSurf's dependencies are packaged on various operating systems.
- The remainder must be installed manually. Currently, some of the libraries
- developed as part of the NetSurf project have not had official releases.
- Hopefully they will soon be released with downloadable tarballs and packaged
- in common distros. For now, you'll have to make do with Git checkouts.
-
- Package installation
- --------------------
-
- Debian-like OS:
-
- $ apt-get install libgtk2.0-dev libcurl3-dev libpng-dev
- $ apt-get install librsvg2-dev libjpeg-dev
+Obtaining the build dependencies
+--------------------------------
- If you want to build with gtk 3 replace libgtk2.0-dev with libgtk-3-dev
+Many of NetSurf's dependencies are packaged on various operating systems.
+The remainder must be installed manually. Currently, some of the libraries
+developed as part of the NetSurf project have not had official releases.
+Hopefully they will soon be released with downloadable tarballs and packaged
+in common distros. For now, you'll have to make do with Git checkouts.
- Recent OS versions might need libcurl4-dev instead of libcurl3-dev but
- note that when it has not been built with OpenSSL, the SSL_CTX is not
- available and results that certification details won't be presented in case
- they are invalid. But as this is currently unimplemented in the GTK
- flavour of NetSurf, this won't make a difference at all.
+### Package installation
- For experimental javascript support the mozilla spiermonkey library
- is required:
+Debian-like OS:
- $ apt-get install libmozjs-dev
+ $ apt-get install libgtk2.0-dev libcurl3-dev libpng-dev
+ $ apt-get install librsvg2-dev libjpeg-dev
- Fedora:
+If you want to build with gtk 3 replace libgtk2.0-dev with libgtk-3-dev
- $ yum install curl-devel libpng-devel
- $ yum install librsvg2-devel expat-devel
+Recent OS versions might need libcurl4-dev instead of libcurl3-dev but
+note that when it has not been built with OpenSSL, the SSL_CTX is not
+available and results that certification details won't be presented in case
+they are invalid. But as this is currently unimplemented in the GTK
+flavour of NetSurf, this won't make a difference at all.
- Other:
+Fedora:
- You'll need to install the development resources for libglade2, libcurl3,
- libpng and librsvg.
+ $ yum install curl-devel libpng-devel
+ $ yum install librsvg2-devel expat-devel
- Libharu
- -------
+Other:
- NetSurf can use Haru PDF to enable PDF export. Haru PDF can be obtained
- from http://libharu.org/. We require libharu 2.2 or later.
+You'll need to install the development resources for libglade2, libcurl3,
+libpng and librsvg.
- | Note: libharu cannot be auto-detected by the Makefile. If you wish to
- | enable it, do so by creating a Makefile.config file.
+### Preparing your workspace
- Preparing your workspace
---------------------------
+NetSurf has a number of libraries which must be built in-order and
+installed into your workspace. Each library depends on a core build
+system which NetSurf projects use. This build system relies on the
+presence of things like pkg-config to find libraries and also certain
+environment variables in order to work correctly.
- NetSurf has a number of libraries which must be built in-order and
- installed into your workspace. Each library depends on a core build
- system which NetSurf projects use. This build system relies on the
- presence of things like pkg-config to find libraries and also certain
- environment variables in order to work correctly.
+Assuming you are preparing a workspace in /home/netsurf/workspace then
+the following steps will set you up:
- Assuming you are preparing a workspace in /home/netsurf/workspace then
- the following steps will set you up:
+### Make the workspace directory and change to it
- Make the workspace directory and change to it
- ---------------------------------------------
+ $ mkdir -p ${HOME}/netsurf/workspace
+ $ cd ${HOME}/netsurf/workspace
- $ mkdir -p ${HOME}/netsurf/workspace
- $ cd ${HOME}/netsurf/workspace
+### Make the temporary install space
- Make the temporary install space
- --------------------------------
+ $ mkdir inst
- $ mkdir inst
+### Make an environment script
- Make an environment script
- --------------------------
- $ cat > env.sh <<'EOF'
- export PKG_CONFIG_PATH=${HOME}/netsurf/workspace/inst/lib/pkgconfig::
- export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${HOME}/netsurf/workspace/inst/lib
- export PREFIX=${HOME}/netsurf/workspace/inst
- EOF
+ $ cat > env.sh <<'EOF'
+ export PKG_CONFIG_PATH=${HOME}/netsurf/workspace/inst/lib/pkgconfig::
+ export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${HOME}/netsurf/workspace/inst/lib
+ export PREFIX=${HOME}/netsurf/workspace/inst
+ EOF
- Change to workspace and source the environment
- ----------------------------------------------
+### Change to workspace and source the environment
- Whenever you wish to start development in a new shell, run the following:
+Whenever you wish to start development in a new shell, run the following:
- $ cd ${HOME}/netsurf/workspace
- $ source env.sh
+ $ cd ${HOME}/netsurf/workspace
+ $ source env.sh
- From here on, any commands in this document assume you have sourced your
- shell environment.
+From here on, any commands in this document assume you have sourced your
+shell environment.
- The NetSurf project's libraries
----------------------------------
+### The NetSurf project's libraries
- The NetSurf project has developed several libraries which are required by
- the browser. These are:
+The NetSurf project has developed several libraries which are required by
+the browser. These are:
- BuildSystem -- Shared build system, needed to build the other libraries
- LibParserUtils -- Parser building utility functions
- LibWapcaplet -- String internment
- Hubbub -- HTML5 compliant HTML parser
- LibCSS -- CSS parser and selection engine
- LibNSGIF -- GIF format image decoder
- LibNSBMP -- BMP and ICO format image decoder
- LibROSprite -- RISC OS Sprite format image decoder
+| BuildSystem | Shared build system, needed to build the other libraries |
+| LibParserUtils | Parser building utility functions |
+| LibWapcaplet | String internment |
+| Hubbub | HTML5 compliant HTML parser |
+| LibCSS | CSS parser and selection engine |
+| LibNSGIF | GIF format image decoder |
+| LibNSBMP | BMP and ICO format image decoder |
+| LibROSprite | RISC OS Sprite format image decoder |
- To fetch each of these libraries, run the appropriate commands from the
- Docs/LIBRARIES file, from within your workspace directory.
+To fetch each of these libraries, run the appropriate commands from the
+Docs/LIBRARIES file, from within your workspace directory.
- To build and install these libraries, simply enter each of their directories
- and run:
-
- $ make install
+To build and install these libraries, simply enter each of their directories
+and run:
- | Note: We advise enabling iconv() support in libparserutils, which vastly
- | increases the number of supported character sets. To do this,
- | create a file called Makefile.config.override in the libparserutils
- | directory, containing the following line:
- |
- | CFLAGS += -DWITH_ICONV_FILTER
- |
- | For more information, consult the libparserutils README file.
+ $ make install
- Now you should have all the NetSurf project libraries built and installed.
+> Note:
+>
+> We advise enabling iconv() support in libparserutils, which vastly
+> increases the number of supported character sets. To do this,
+> create a file called Makefile.config.override in the libparserutils
+> directory, containing the following line:
+>
+> CFLAGS += -DWITH_ICONV_FILTER
+>
+> For more information, consult the libparserutils README file.
+Now you should have all the NetSurf project libraries built and installed.
- Getting the NetSurf source
-----------------------------
- From your workspace directory, run the following command to get the NetSurf
- source:
+### Getting the NetSurf source
- $ git clone git://git.netsurf-browser.org/netsurf.git
+From your workspace directory, run the following command to get the NetSurf
+source:
- And change to the 'netsurf' directory:
+ $ git clone git://git.netsurf-browser.org/netsurf.git
- $ cd netsurf
+And change to the 'netsurf' directory:
- Building and executing NetSurf
---------------------------------
+ $ cd netsurf
- First of all, you should examine the options in Makefile.defaults
- and gtk/Makefile.defaults and enable and disable relevant features
- as you see fit by editing a Makefile.config file.
+Building and executing NetSurf
+------------------------------
- Some of these options can be automatically detected and used, and
- where this is the case they are set to such. Others cannot be
- automatically detected from the Makefile, so you will either need to
- install the dependencies, or set them to NO.
+First of all, you should examine the options in Makefile.defaults
+and gtk/Makefile.defaults and enable and disable relevant features
+as you see fit by editing a Makefile.config file.
- You should then obtain NetSurf's dependencies, keeping in mind which options
- you have enabled in the configuration file. See the next section for
- specifics.
+Some of these options can be automatically detected and used, and
+where this is the case they are set to such. Others cannot be
+automatically detected from the Makefile, so you will either need to
+install the dependencies, or set them to NO.
- Once done, to build GTK NetSurf on a UNIX-like platform, simply run:
+You should then obtain NetSurf's dependencies, keeping in mind which options
+you have enabled in the configuration file. See the next section for
+specifics.
- $ make
+Once done, to build GTK NetSurf on a UNIX-like platform, simply run:
- If that produces errors, you probably don't have some of NetSurf's
- build dependencies installed. See "Obtaining NetSurf's dependencies"
- below. Or turn off the complaining features in a Makefile.config
- file. You may need to "make clean" before attempting to build after
- installing the dependencies.
+ $ make
- Run NetSurf by executing the "test-nsgtk" shell script:
+If that produces errors, you probably don't have some of NetSurf's
+build dependencies installed. See "Obtaining NetSurf's dependencies"
+below. Or turn off the complaining features in a Makefile.config
+file. You may need to "make clean" before attempting to build after
+installing the dependencies.
- $ ./test-nsgtk
+Run NetSurf by executing "nsgtk3":
- This script makes it easy to run the nsgtk binary from the build tree. It
- sets up some environment variables which enable NetSurf to find its
- resources.
+ $ ./nsgtk3
- Builtin resources
--------------------
- There are numerous resources that accompany NetSurf, such as the
- image files for icons, cursors and the ui builder files that
- construct the browsers interface.
+### Builtin resources
- Some of these resources can be compiled into the browser executable
- removing the need to install these resources separately. The GLib
- library on which GTK is based provides this functionality to
- NetSurf.
+There are numerous resources that accompany NetSurf, such as the
+image files for icons, cursors and the ui builder files that
+construct the browsers interface.
- Up until GLib version 2.32 only the GDK pixbuf could be integrated
- in this way and is controlled with the NETSURF_USE_INLINE_PIXBUF
- variable (set in makefile.config).
+Some of these resources can be compiled into the browser executable
+removing the need to install these resources separately. The GLib
+library on which GTK is based provides this functionality to
+NetSurf.
- Glib version 2.32 and later integrated support for any file to be a
- resource while depreciating the old inline pixbuf interface. NetSurf
- gtk executables can integrate many resources using this interface,
- configuration is controlled with the NETSURF_USE_GRESOURCE variable.
+Up until GLib version 2.32 only the GDK pixbuf could be integrated
+in this way and is controlled with the NETSURF_USE_INLINE_PIXBUF
+variable (set in makefile.config).
- Loading from file is the fallback if a resource has not been
- compiled in, because of this if both of these features are
- unavailable (or disabled) NetSurf will automatically fall back to
- loading all its resources from files.
+Glib version 2.32 and later integrated support for any file to be a
+resource while depreciating the old inline pixbuf interface. NetSurf
+gtk executables can integrate many resources using this interface,
+configuration is controlled with the NETSURF_USE_GRESOURCE variable.
- The resource initialisation within the browser ensures it can access
- all the resources at start time, however it does not verify the
- resources are valid so failures could still occur subsequently. This
- is especially true for file based resources as they can become
- inaccessible after initialisation.
+Loading from file is the fallback if a resource has not been
+compiled in, because of this if both of these features are
+unavailable (or disabled) NetSurf will automatically fall back to
+loading all its resources from files.
+The resource initialisation within the browser ensures it can access
+all the resources at start time, however it does not verify the
+resources are valid so failures could still occur subsequently. This
+is especially true for file based resources as they can become
+inaccessible after initialisation.
- Note for packagers
-====================
- If you are packaging NetSurf, see the PACKAGING-GTK document.
+Note for packagers
+------------------
+If you are packaging NetSurf, see the PACKAGING-GTK document.
diff --git a/docs/core-window-interface.md b/docs/core-window-interface.md
index 8f6951f9f..1b389d916 100644
--- a/docs/core-window-interface.md
+++ b/docs/core-window-interface.md
@@ -10,7 +10,7 @@ The currently available user interfaces are:
- Cookies
- Global history
- Hotlist
- - SSL certificate view
+ - SSL certificate view (obsolete, but used as an example here)
- local history
Although not currently included in future additional user interfaces
diff --git a/docs/development.md b/docs/development.md
new file mode 100644
index 000000000..3f08b5496
--- /dev/null
+++ b/docs/development.md
@@ -0,0 +1,123 @@
+Development
+===========
+
+[TOC]
+
+# Working with the team
+
+Generally it is sensible to check with the other developers if you are
+planning to make a change to NetSurf intended to be merged.
+
+We are often about on the IRC channel but failing that the developer
+mailing list is a good place to try.
+
+All the project sources are held in [public git repositories](http://source.netsurf-browser.org/)
+
+# Compilation environment
+
+Compiling a development edition of NetSurf requires a POSIX style
+environment. Typically this means a Linux based system although Free
+BSD, Open BSD, Mac OS X and Haiku all known to work.
+
+## Toolchains
+
+Compilation for non POSIX toolkits/frontends (e.g. RISC OS) generally
+relies upon a cross compilation environment which is generated using
+the makefiles found in our
+[toolchains](http://source.netsurf-browser.org/toolchains.git/)
+repository. These toolchains are built by the Continuous Integration
+(CI) system and the
+[results of the system](http://ci.netsurf-browser.org/builds/toolchains/)
+are published as a convenience.
+
+## Quick setup
+
+The [quick start guide](docs/quick-start.md) can be used to get a
+development environment setup quickly and uses the
+[env.sh](env_8sh_source.html) script the core team utilises.
+
+## Manual setup
+
+The Manual environment setup and compilation method is covered by the
+details in the [netsurf libraries](docs/netsurf-libraries.md) document
+for the core libraries and then one of the building documents for the
+specific frontend.
+
+- [Amiga Os cross](docs/building-AmigaCross.md) and [Amiga OS](docs/building-AmigaOS.md)
+- [Framebuffer](docs/building-Framebuffer.md)
+- [GTK](docs/building-GTK.md)
+- [Haiku (BeOS)](docs/building-Haiku.md)
+- [Windows Win32](docs/building-Windows.md)
+
+These documents are sometimes not completely up to
+date and the env.sh script should be considered canonical.
+
+# Logging
+
+The [logging](docs/logging.md) interface controls debug and error
+messages not output through the GUI.
+
+# Unit testing
+
+NetSurf [unit tests](docs/unit-testing.md) provide basic test coverage
+of many core parts of the browser code such as url parsing and utility
+functions.
+
+# Integration testing
+
+NetSurf [integration tests](docs/integration-testing.md) use the
+monkey frontend to operate the browser as a whole. These tests open
+windows, navigate to websites and render contents as a user might.
+
+# New frontend development
+
+[Implementing a new frotend](docs/implementing-new-frontend.md) for a
+toolkit can be challenging and this guide provides an overview and
+worked example.
+
+# Documented API
+
+The NetSurf code makes use of Doxygen for code documentation.
+
+There are several documents which detail specific aspects of the
+codebase and APIs.
+
+## Core window
+
+The [core window API](docs/core-window-interface.md) allows frontends
+to use generic core code for user interface elements beyond the
+browser render.
+
+## Source object caching
+
+The [source object caching](docs/source-object-backing-store.md)
+provides a way for downloaded content to be kept on a persistent
+storage medium such as hard disc to make future retrieval of that
+content quickly.
+
+# Javascript
+
+Javascript provision is split into four parts:
+- An engine that takes source code and executes it.
+- Interfaces between the program and the web page.
+- Browser support to retrieve and manage the source code to be executed.
+- Browser support for the dispatch of events from user interface.
+
+## Library
+
+JavaScript is provided by integrating the duktape library. There are
+[instructions](docs/updating-duktape.md) on how to update the library.
+
+## Interface binding
+
+In order for javascript programs to to interact with the page contents
+it must use the Document Object Model (DOM) and Cascading Style Sheet
+Object Model (CSSOM) API.
+
+These interfaces are described using web Interface Description
+Language (IDL) within the relevant specifications
+(e.g. https://dom.spec.whatwg.org/).
+
+Each interface described by the webIDL must be bound (connected) to
+the browsers internal representation for the DOM or CSS, etc. The
+process of [writing bindings](docs/jsbinding.md) is ongoing.
diff --git a/docs/env.sh b/docs/env.sh
index bb2cbabea..4cb056ec1 100644
--- a/docs/env.sh
+++ b/docs/env.sh
@@ -1,4 +1,6 @@
-#!/bin/sh
+# This shell fragment is intended for use in `bash` or `zsh`. While it
+# may work in other shells it is not meant to, and any misbehaviour is not
+# considered a bug in that case.
#
# NetSurf Library, tool and browser development support script
#
@@ -25,7 +27,7 @@
###############################################################################
# deb packages for dpkg based systems
-NS_DEV_DEB="build-essential pkg-config git gperf libcurl3-dev libssl-dev libpng-dev libjpeg-dev"
+NS_DEV_DEB="build-essential pkg-config git gperf libcurl3-dev libpng-dev libjpeg-dev"
NS_TOOL_DEB="flex bison libhtml-parser-perl"
if [ "x${NETSURF_GTK_MAJOR}" = "x3" ]; then
NS_GTK_DEB="libgtk-3-dev librsvg2-dev"
@@ -36,12 +38,20 @@ fi
# apt get commandline to install necessary dev packages
ns-apt-get-install()
{
+ LIBCURL_OPENSSL_CONFLICTS="$(/usr/bin/apt-cache show libcurl4-openssl-dev | grep Conflicts | grep -o libssl1.0-dev)"
+ if [ "x${LIBCURL_OPENSSL_CONFLICTS}" != "x" ]; then
+ NS_DEV_DEB="${NS_DEV_DEB} libssl-dev"
+ elif /usr/bin/apt-cache show libssl1.0-dev >/dev/null 2>&1; then
+ NS_DEV_DEB="${NS_DEV_DEB} libssl1.0-dev"
+ else
+ NS_DEV_DEB="${NS_DEV_DEB} libssl-dev"
+ fi
sudo apt-get install $(echo ${NS_DEV_DEB} ${NS_TOOL_DEB} ${NS_GTK_DEB})
}
# packages for yum installer RPM based systems (tested on fedora 20)
-NS_DEV_YUM_RPM="git gcc pkgconfig libexpat-devel openssl-devel libcurl-devel perl-Digest-MD5-File libjpeg-devel libpng-devel"
+NS_DEV_YUM_RPM="git gcc pkgconfig expat-devel openssl-devel gperf libcurl-devel perl-Digest-MD5-File libjpeg-devel libpng-devel"
NS_TOOL_YUM_RPM="flex bison"
if [ "x${NETSURF_GTK_MAJOR}" = "x3" ]; then
NS_GTK_YUM_RPM="gtk3-devel librsvg2-devel"
@@ -188,7 +198,7 @@ if [ "x${HOST}" = "x" ]; then
HOST=${TARGET_ABI}
fi
else
- HOST_CC_LIST="${HOST}-cc ${HOST}-gcc /opt/netsurf/${HOST}/cross/bin/${HOST}-cc /opt/netsurf/${HOST}/cross/bin/${HOST}-gcc"
+ HOST_CC_LIST="/opt/netsurf/${HOST}/cross/bin/${HOST}-cc /opt/netsurf/${HOST}/cross/bin/${HOST}-gcc ${HOST}-cc ${HOST}-gcc"
for HOST_CC_V in $(echo ${HOST_CC_LIST});do
HOST_CC=$(${WHICH_CMD} ${HOST_CC_V})
if [ "x${HOST_CC}" != "x" ];then
@@ -203,9 +213,13 @@ else
HOST_CC_MACHINE=$(${HOST_CC} -dumpmachine 2>/dev/null)
if [ "${HOST_CC_MACHINE}" != "${HOST}" ];then
- echo "Compiler dumpmachine differes from HOST setting"
+ echo "Compiler dumpmachine differs from HOST setting"
return 2
fi
+
+ NS_ENV_CC="${HOST_CC}"
+ export NS_ENV_CC
+
unset HOST_CC_LIST HOST_CC_V HOST_CC HOST_CC_MACHINE
fi
@@ -249,64 +263,81 @@ NS_GIT="git://git.netsurf-browser.org"
# Buildsystem: everything depends on this
NS_BUILDSYSTEM="buildsystem"
-# internal libraries all frontends require (order is important)
-NS_INTERNAL_LIBS="libwapcaplet libparserutils libhubbub libdom libcss libnsgif libnsbmp libutf8proc libnsutils libnspsl libnslog"
+NS_TOOLS=""
+NS_FRONTEND_LIBS=""
-# The browser itself
-NS_BROWSER="netsurf"
+BUILD_TARGET="${TARGET:-netsurf}"
-
-# add target specific libraries
-case "${HOST}" in
- i586-pc-haiku)
- # tools required to build the browser for haiku (beos)
- NS_TOOLS="nsgenbind"
- # libraries required for the haiku target abi
- NS_FRONTEND_LIBS="libsvgtiny"
- ;;
- *arwin*)
- # tools required to build the browser for OS X
- NS_TOOLS=""
- # libraries required for the Darwin target abi
- NS_FRONTEND_LIBS="libsvgtiny libnsfb"
- ;;
- arm-unknown-riscos)
- # tools required to build the browser for RISC OS
- NS_TOOLS="nsgenbind"
- # libraries required for the risc os target abi
- NS_FRONTEND_LIBS="libsvgtiny librufl libpencil librosprite"
- ;;
- *-atari-mint)
- # tools required to build the browser for atari
- NS_TOOLS=""
- # libraries required for the atari frontend
- NS_FRONTEND_LIBS=""
+case "$BUILD_TARGET" in
+ libhubbub)
+ NS_INTERNAL_LIBS="libparserutils"
;;
- ppc-amigaos)
- # default tools required to build the browser
- NS_TOOLS="nsgenbind"
- # default additional internal libraries
- NS_FRONTEND_LIBS="libsvgtiny"
- ;;
- m68k-unknown-amigaos)
- # default tools required to build the browser
- NS_TOOLS="nsgenbind"
- # default additional internal libraries
- NS_FRONTEND_LIBS="libsvgtiny"
+
+ libdom)
+ NS_INTERNAL_LIBS="libwapcaplet libparserutils libhubbub"
;;
- *-unknown-freebsd*)
- # tools required to build the browser for freebsd
- NS_TOOLS=""
- # libraries required for the freebsd frontend
- NS_FRONTEND_LIBS=""
- # select gnu make
- MAKE=gmake
+
+ libcss)
+ NS_INTERNAL_LIBS="libwapcaplet libparserutils"
;;
- *)
- # default tools required to build the browser
- NS_TOOLS="nsgenbind"
- # default additional internal libraries
- NS_FRONTEND_LIBS="libsvgtiny libnsfb"
+
+ netsurf)
+ # internal libraries all frontends require (order is important)
+ NS_INTERNAL_LIBS="libwapcaplet libparserutils libhubbub libdom libcss libnsgif libnsbmp libutf8proc libnsutils libnspsl libnslog"
+
+ # add target specific libraries
+ case "${HOST}" in
+ i586-pc-haiku)
+ # tools required to build the browser for haiku (beos)
+ NS_TOOLS="nsgenbind"
+ # libraries required for the haiku target abi
+ NS_FRONTEND_LIBS="libsvgtiny"
+ ;;
+ *arwin*)
+ # tools required to build the browser for OS X
+ NS_TOOLS=""
+ # libraries required for the Darwin target abi
+ NS_FRONTEND_LIBS="libsvgtiny libnsfb"
+ ;;
+ arm-unknown-riscos|arm-riscos-gnueabi*)
+ # tools required to build the browser for RISC OS
+ NS_TOOLS="nsgenbind"
+ # libraries required for the risc os target abi
+ NS_FRONTEND_LIBS="libsvgtiny librufl libpencil librosprite"
+ ;;
+ *-atari-mint)
+ # tools required to build the browser for atari
+ NS_TOOLS=""
+ # libraries required for the atari frontend
+ NS_FRONTEND_LIBS=""
+ ;;
+ ppc-amigaos)
+ # default tools required to build the browser
+ NS_TOOLS="nsgenbind"
+ # default additional internal libraries
+ NS_FRONTEND_LIBS="libsvgtiny"
+ ;;
+ m68k-unknown-amigaos)
+ # default tools required to build the browser
+ NS_TOOLS="nsgenbind"
+ # default additional internal libraries
+ NS_FRONTEND_LIBS="libsvgtiny"
+ ;;
+ *-unknown-freebsd*)
+ # tools required to build the browser for freebsd
+ NS_TOOLS=""
+ # libraries required for the freebsd frontend
+ NS_FRONTEND_LIBS=""
+ # select gnu make
+ MAKE=gmake
+ ;;
+ *)
+ # default tools required to build the browser
+ NS_TOOLS="nsgenbind"
+ # default additional internal libraries
+ NS_FRONTEND_LIBS="libsvgtiny libnsfb"
+ ;;
+ esac
;;
esac
@@ -317,7 +348,7 @@ export MAKE
# git pull in all repos parameters are passed to git pull
ns-pull()
{
- for REPO in $(echo ${NS_BUILDSYSTEM} ${NS_INTERNAL_LIBS} ${NS_FRONTEND_LIBS} ${NS_TOOLS} ${NS_BROWSER}) ; do
+ for REPO in $(echo ${NS_BUILDSYSTEM} ${NS_INTERNAL_LIBS} ${NS_FRONTEND_LIBS} ${NS_TOOLS} ${BUILD_TARGET}) ; do
echo -n " GIT: Pulling ${REPO}: "
if [ -f "${TARGET_WORKSPACE}/${REPO}/.git/config" ]; then
(cd ${TARGET_WORKSPACE}/${REPO} && git pull $*; )
@@ -330,19 +361,42 @@ ns-pull()
# clone all repositories
ns-clone()
{
+ SHALLOW=""
+ SKIP=""
+ while [ $# -gt 0 ]
+ do
+ case "$1" in
+ -d | --deps-only) SKIP="${BUILD_TARGET}"
+ shift
+ ;;
+ -s | --shallow) SHALLOW="--depth 1"
+ shift
+ ;;
+ -*) echo "Error: Unknown option: $1" >&2
+ exit 1
+ ;;
+ *) # No more options
+ break
+ ;;
+ esac
+ done
+
mkdir -p ${TARGET_WORKSPACE}
- for REPO in $(echo ${NS_BUILDSYSTEM} ${NS_INTERNAL_LIBS} ${NS_FRONTEND_LIBS} ${NS_RISCOS_LIBS} ${NS_TOOLS} ${NS_BROWSER}) ; do
+ for REPO in $(echo ${NS_BUILDSYSTEM} ${NS_INTERNAL_LIBS} ${NS_FRONTEND_LIBS} ${NS_RISCOS_LIBS} ${NS_TOOLS} ${BUILD_TARGET}) ; do
+ [ "x${REPO}" != "x${SKIP}" ] || continue
echo -n " GIT: Cloning ${REPO}: "
if [ -f ${TARGET_WORKSPACE}/${REPO}/.git/config ]; then
echo "Repository already present"
else
- (cd ${TARGET_WORKSPACE} && git clone ${NS_GIT}/${REPO}.git; )
+ (cd ${TARGET_WORKSPACE} && git clone ${SHALLOW} ${NS_GIT}/${REPO}.git; )
fi
done
# put current env.sh in place in workspace
- if [ ! -f "${TARGET_WORKSPACE}/env.sh" -a -f ${TARGET_WORKSPACE}/${NS_BROWSER}/docs/env.sh ]; then
- cp ${TARGET_WORKSPACE}/${NS_BROWSER}/docs/env.sh ${TARGET_WORKSPACE}/env.sh
+ if [ "x$NS_BROWSER" = "x" ]; then
+ if [ ! -f "${TARGET_WORKSPACE}/env.sh" -a -f ${TARGET_WORKSPACE}/${NS_BROWSER}/docs/env.sh ]; then
+ cp ${TARGET_WORKSPACE}/${NS_BROWSER}/docs/env.sh ${TARGET_WORKSPACE}/env.sh
+ fi
fi
}
diff --git a/docs/gource.sh b/docs/gource.sh
index a1fbcbe13..6f12b3ddb 100755
--- a/docs/gource.sh
+++ b/docs/gource.sh
@@ -23,7 +23,7 @@ OUTPUT_SIZE="1280x720"
# HD widescreen 1080p
#OUTPUT_SIZE="1280x1080"
-TMP_DIR=/net/holly/srv/video/Unsorted/
+TMP_DIR=/home/video/gource/
######################################################################
@@ -60,7 +60,7 @@ TMP_PPM=${TMP_DIR}/${TITLE}-gource-${TYPE}-${OUTPUT_SIZE}-${CMODE}.ppm
FILENAME=${TITLE}-gource-${TYPE}-${OUTPUT_SIZE}-${CMODE}.mp4
# filter some directories which are not interesting
-FILEFILTER="\!NetSurf/|riscos/distribution/|gtk/res/|framebuffer/res/|amiga/resources/|beos/res/|cocoa/res/|windows/res/|atari/res"
+FILEFILTER="\!NetSurf/|riscos/distribution/|gtk/res/|framebuffer/res/|amiga/resources/|beos/res/|cocoa/res/|windows/res/|atari/res|riscos/appdir/"
# generate
gource --title "NetSurf Development" -${OUTPUT_SIZE} ${QPARAM} --max-files 10000 --bloom-multiplier 0.10 --bloom-intensity 0.5 --title ${TITLE} --highlight-all-users --output-framerate 25 --hide filenames --stop-at-end --date-format "%d %B %Y" --bloom-intensity 0.2 --file-filter "${FILEFILTER}" --key --camera-mode ${CMODE} --output-ppm-stream - > ${TMP_PPM}
diff --git a/docs/implementing-new-frontend.md b/docs/implementing-new-frontend.md
new file mode 100644
index 000000000..4bda47af0
--- /dev/null
+++ b/docs/implementing-new-frontend.md
@@ -0,0 +1,413 @@
+Implementing a new frontend
+===========================
+
+[TOC]
+
+# Introduction
+
+NetSurf is divided into a series of frontends which provide a user
+interface around common core functionality.
+
+Each frontend is a distinct implementation for a specific GUI toolkit.
+
+The existing frontends are covered in the [user
+interface](docs/user-interface.md) documentation.
+
+Note implementing a new frontend implies using a toolkit distinct from
+one of those already implemented and is distinct from porting NetSurf
+to a new operating system platform.
+
+It is recommend, in the strongest terms, that if the prospective
+developer is porting to both a new platform and toolkit that they
+*start* by getting the [monkey](docs/using-monkey.md) frontend
+building and passing at least the basic integration tests on their
+platform.
+
+Experience has shown that attempting to port to a platform and
+implement a toolkit at the same time generally results in failure to
+achieve either goal.
+
+NetSurf is built using GNU make and frontends are expected to
+integrate with this buildsystem.
+
+Implementation languages have historically been limited to C, C++ and
+objective C. However any language that can call C functions and
+*importantly* be called back from C code ought to be usable. For
+example there have been experiments with JAVA using JNI but no current
+frontend is implemented using it.
+
+# Implementation complexity
+
+An absolutely minimal "proof of concept" frontend implementation (like
+the FLTK frontend that will be used as an example) is around 1,000
+lines of C code. Basic functionality like the windows frontend is
+around 7,000 lines. A complete fully functional frontend such as the
+one for GTK is closer to 15,000 lines.
+
+It should be noted the majority of the minimal implementation can
+simply be copied and the names changed as appropriate from an existing
+example. The actual amount of new code that needs to be provided is
+very small.
+
+NetSurf provides a great deal of generic functionality for things like
+cookie, bookmark, history windows which require only minimal frontend
+support with the [core window API](docs/core-window-interface.md).
+
+A frontend developer is free to implement any and all of this generic
+functionality thelselves in a manner more integrated into a toolkit.
+
+# Implementation
+
+A frontend is generally named for the toolkit it is implementing (i.e
+gtk for the GTK+ toolkit). It is advisable to be as specific as
+possible e.g. the frontend for the windows operating system should
+have been named win32 allowing for an impementation using a differnt
+toolkit (e.g mfc)
+
+All the files needed for the frontend are contained in a single
+sub-directory in the NetSurf source tree e.g. `frontends/fltk`
+
+The only file outside this directory that much be changed is the
+`frontends/Makefile.hts` where a new entry must be added to the valid
+targets list.
+
+## Build system
+
+A frontend must provide three GNU Makefile fragments (these will be
+included from the core Makefile):
+
+ - `Makefile` - This is used to extend CFLAGS, CXXFLAGS and LDFLAGS variables as required. The executable target is set with EXETARGET and the browser source files are listed in the SOURCES variable
+ - `Makefile.defaults` - allows setting frontend specific makefile variables and overriding of the default core build variables.
+ - `Makefile.tools` - allows setting up frontend specific build tooling (as a minimum a tool for the package configuration in PKG_CONFIG)
+
+Source code modules can be named as the devloper desires within the
+frontend directory and should be added to the SOURCES variable as
+desired.
+
+## Program entry
+
+Generally the entry point from the OS is the `main()` function and
+several frontends have a `main.cpp` where some have used `gui.c`.
+
+The usual shape for the `main()` function is a six step process:
+ 1. The frontends operation tables are registered with NetSurf
+ 2. The toolkit specific initialisation is performed (which may involve calling NetSurf provided utility functions for support operations like logging, message translations etc.)
+ 3. Initialise the NetSurf core. After this point all browser functionality is available and registered operations can be called.
+ 4. Perform toolkiit setup, usually opening the initial browsing window (perhaps according to user preferences)
+ 5. Run the toolkits main loop while ensuring the Netsurf scheduled operations are also run at teh apropriate time.
+ 6. Finalisation on completion.
+
+## NetSurf operations tables
+
+The frontend will generally call netsurf interfaces to get a desired
+behaviour e.g. `browser_window_create()` to create a new browsing
+context (the `browser_window_` prefix is historical and does not
+necessarily create a window e.g. on gtk it is more likely to open a
+tab in an existing window). To achive the desired operation some
+operations need to be performed by the frontend under control of
+NetSurf, these operations are listed in tables.
+
+The operation tables should be registered with the NetSurf core as one
+of the first operations of the frontend code. The functions in these
+tables (and the tables themselves) must remain valid until
+`netsurf_exit()` is called.
+
+There are (currently) twelve sets of operation tables held in separate
+structures. Only five of these are mandantory (misc, window, fetch,
+bitmap and layout).
+
+In this context mandantory means the tables must be non NULL and do
+not have a suitable default. Each of the mandantory sets contain
+function pointers to implement operations.
+
+### misc operation table
+
+The only mandantory operation in this table is schedule.
+
+When schedule is called the frontend must arrange for the passed
+callback to be called with the context parameter after a number of
+miliseconds.
+
+This callback is typicaly driven through the toolkits event loop and
+it is important such callbacks are not attempted from an operation.
+
+### window operation table
+
+The window operations (poorly named as already mentioned) are where
+the frontend is called to actually manipulate widgets in the
+toolkit. This is mediated through a `gui_window` context pointer which
+is typed as a structure.
+
+This context pointer is passed to all window operations and is
+generally assumed to contain at least a reference to the underlying
+`browser_window` which is provided in the initial create operation to
+allow subsequent use of various core functionality.
+
+The mandantory window operations are:
+ - create - create a new browsing context widget in the frontend toolkit
+ - destroy - destoy a previously created `gui_window`
+ - invalidate - mark an area of the browsing context viewport as requiring redraw (note no redraw should be attempted from here)
+ - get_scroll - get the scroll offsets from the toolkit drawing widget
+ - set_scroll - set the scroll offsets on the toolkit drawing widget
+ - get_dimensions - get the dimensions of the toolkit drawing widget
+ - event - deal with various window events from netsurf which have no additional parameters
+
+
+### fetch operation table
+
+The fetch operations allow the built in scheme fetchers (file, about, resource) to obtain additional information necessary to complete their operation.
+
+The two mandantory operations are:
+ - `filetype` - allows the file scheme to obtain a mime type from a file path e.g. `a.file.name.png` would result in `image/png`
+ - `get_resource_url` - maps resource scheme paths to URL e.g. `resource:default.css` to `file:///usr/share/netsurf/default.css`
+
+### bitmap operation table
+
+The bitmap table and all of its operations are mandantory only because
+the empty defaults have not been included as it is assumed a browser
+will want to display images.
+
+All operations may be provided by stubs that return the failure codes
+until full implementations are made.
+
+### layout operation table
+
+The layout table is used to layout text. All operations are given
+strings to manipulate encoded in UTF-8. There are three mandantory
+operations:
+ - `width` - Calculate the width of a string.
+ - `position` - Find the position in a string where an x coordinate falls.
+ - `split` - Find where to split a string to make it fit a width.
+
+# Worked Example
+
+Rather than attempt to describe every aspect of an implementation we
+will rather work from an actual minimal example for the FLTK toolkit.
+
+This is availble as a single commit (`git show 28ecbf82ed3024f51be4c87928fd91bacfc15cbc`) in the NetSurf source repository. Alternatively it can be [viewed in a web browser](https://git.netsurf-browser.org/netsurf.git/commit/?h=vince/fltk&id=28ecbf82ed3024f51be4c87928fd91bacfc15cbc).
+
+This represents the absolute minimum implementation to get a browser
+window on screen (and be able to click visible links). It is
+implemented in C++ as that is the FLTK implementation language but an
+equivalent implementation in other languages should be obvious.
+
+## Building
+
+The [frontends/Makefile.hts](https://git.netsurf-browser.org/netsurf.git/diff/frontends/Makefile.hts?h=vince/fltk&id=28ecbf82ed3024f51be4c87928fd91bacfc15cbc)
+had the fltk target added to the VLDTARGET variable. This allows
+NetSurf to be built for this frontend with `make TARGET=fltk`
+
+As previously described the three GNU Make files are added:
+
+[Makefile](https://git.netsurf-browser.org/netsurf.git/diff/frontends/fltk/Makefile?h=vince/fltk&id=28ecbf82ed3024f51be4c87928fd91bacfc15cbc)
+this shows how the flags are extended to add the fltk headers and
+library. Additionaly the list of sources are built here, as teh
+comment suggests it is important the SOURCES variable is not expanded
+here so the S_FRONTEND variable is used to allow expansion at teh
+correct time in the build process.
+
+[Makefile.defaults](https://git.netsurf-browser.org/netsurf.git/diff/frontends/fltk/Makefile.defaults?h=vince/fltk&id=28ecbf82ed3024f51be4c87928fd91bacfc15cbc)
+has the default setting to control the build parameters and file locations. These can be overriden by the `Makefile.config` at compile time.
+
+[Makefile.tools](https://git.netsurf-browser.org/netsurf.git/diff/frontends/fltk/Makefile.tools?h=vince/fltk&id=28ecbf82ed3024f51be4c87928fd91bacfc15cbc)
+allows the configuration of additional tools necessary to build for the target as a minimum pkg-config is usually required to find libraries.
+
+## Program entry
+
+In our example program entry is the classical `main()` in the [main.cpp](https://git.netsurf-browser.org/netsurf.git/diff/frontends/fltk/main.cpp?h=vince/fltk&id=28ecbf82ed3024f51be4c87928fd91bacfc15cbc) module.
+
+This implements the six stage process outlined previously.
+
+### Operations table registration
+
+The `netsurf_table` structure is initialised and passed to
+`netsurf_register()`. It should be noted that the approach taken here
+and in most frontends is to have a source module for each operation
+table. The header for each module exposes just the pointer to the
+indivial operation set, this allows for all the operation functions to
+be static to their module and hence helps reduce global symbol usage.
+
+### Frontend specific initialisation
+
+Her it is implemented in `nsfltk_init()` this function performs all
+the operations specific to the frontend which must be initialised
+before netsurf itself. In some toolkits this would require calling the
+toolkit initialisation (e.g. `gtk_init()`).
+
+It is nessesary to initialise netsurf logging and user options at this
+point. A more fully featured implementation would also initialise the
+message translation system here.
+
+### Netsurf initialisation
+
+This is simply the call to `netsurf_init()` from this point the
+browser is fully operational and operations can and will be called.
+
+### Frontend specific startup
+
+Although the browser is running it has not yet been told to open a
+window or navigate to a page. Here `nsfltk_start()` examines the
+command line and environment to determine the initial page to navigate
+to and calls `browser_window_create()` with the url, this will cause
+the browser to open a new browsing context and start the navigation.
+
+A frontend may choose to implement more complex logic here but the
+example here is a good start.
+
+### Toolkit run loop
+
+The function `nsfltk_run()` runs the toolkit event loop. In this case it is using the generic scheduleing in the [misc.cpp](https://git.netsurf-browser.org/netsurf.git/diff/frontends/fltk/misc.cpp?h=vince/fltk&id=28ecbf82ed3024f51be4c87928fd91bacfc15cbc) module to ensure callbacks get made at the apropriate time.
+
+There is a `nsfltk_done` boolean global checked here so when all the
+browser windows are closed the program will exit.
+
+A more fully featured port might use the toolkits scheduling rather
+than open coding a solution with a linked list as is done
+here.
+
+A futher optimisation would be to obtain the set of file descriptors
+being used (with `fetch_fdset()`) for active fetches allowing for
+activity based fetch progress instead of the fallback polling method.
+
+### finalisation
+
+This simply finalises the browser stopping all activity and cleaning
+up any resource usage. After the call to `netsurf_exit()` no more
+operation calls will be made and all caches used by the core will be
+flushed.
+
+If user option chnages are to be made persistant `nsoption_finalise()`
+should be called.
+
+The finalisation of logging will ensure that any output buffers are
+flushed.
+
+## The window operation table
+
+Amongst all the boilerplate of the default implementation the only novel code is in the window operation table in the [window.cpp](https://git.netsurf-browser.org/netsurf.git/diff/frontends/fltk/window.cpp?h=vince/fltk&id=28ecbf82ed3024f51be4c87928fd91bacfc15cbc) module.
+
+### `nsfltk_window_create`
+
+The create operation instansiates a new `NS_Window` object and
+references it in the gui_window structure which it returns to the
+caller. Technically we could simply return the `NS_Window` object as
+the gui_window pointer but this implementation is avoiding the cast.
+
+Secondly `Fl_Double_Window` is subclassed as `NS_Widget`. The sublass
+allows the close callback to be accessed so the global `nsfltk_done`
+boolean can be set during the destructor method.
+
+The NS_Window creates an instance of `NS_Widget` in its constructor, a
+more extensive implementation would add other window furniture here
+(scroll bars, url bar, navigation elements, etc.)
+
+The implementation subclasses `Fl_Widget` implementing the draw
+method to render the browsing context and the handle method to handle
+mouse events to allow teh user to click.
+
+The `NS_Widget::handle()` method simply translates the mouse press
+event from widget coordinates to netsurf canvas cooridinates and maps
+teh mouse button state. The core is informed of these events using
+`browser_window_mouse_click()`
+
+The `NS_Widget::draw` method similarly translates the fltk toolkits
+clip rectangle, builds a plotting context and calls
+`browser_window_redraw()` which will use the plotting operations in
+the plotting context to render the browsing context within the area
+specified. One thing to note here is the translation between the
+coordinates of the render area and the internal page canvas given as
+the second and third parameters to the draw call. When scrolling is
+required this is achived by altering these offsets.
+
+
+### `nsfltk_window_invalidate()`
+
+This simply calls the damage method on the `Fl_Widget` class with the
+appropriate coordinate translation.
+
+### `nsfltk_window_get_dimensions()`
+
+This obtains the fltk widget width and height and returns them.
+
+## The plotting interface
+
+When the `NS_Widget::draw` method was discussed it was noted that a
+plotting context is built containing an operation table. That table is
+implemented in [plotters.cpp](https://git.netsurf-browser.org/netsurf.git/diff/frontends/fltk/plotters.cpp?h=vince/fltk&id=28ecbf82ed3024f51be4c87928fd91bacfc15cbc)
+
+The implementation here is as minimal as can be, only line, rectangle
+and text have any implementation at all and even that simply sets a
+colour and performs the appropriate fltk draw function (`fl_line`,
+`fl_rect` and `fl_draw` respectively)
+
+# Worked Example next steps
+
+The previous section outlined the absolute minimum
+implementation. Here we can exmaine some next steps taken to extend
+the frontend.
+
+## Improving the user interface
+
+The example discussion is based on a commit (`git show bc546388ce428be5cfa37cecb174d549c7b30320`) in the NetSurf source repository. Alternatively it can be [viewed in a web browser](https://git.netsurf-browser.org/netsurf.git/commit/?h=vince/fltk&id=bc546388ce428be5cfa37cecb174d549c7b30320).
+
+This changes a single module `window.cpp` where the `NS_Window`,
+`NS_Widget` and `NS_URLBar` classes are used to create a basic
+browsing interface.
+
+The static window operation functions are moved inside the `NS_Window`
+class and the `gui_window` structure is used to obtain an instance
+allowing normal methods to be called to implement functionality. This
+is purely to make the C++ code more idiomatic and obviously would be
+handled differently in other languages.
+
+The `NS_Window` constructor builds additional widgets to just the
+browser drawing widget. It creates:
+ - a URL bar widget containing some navigation buttons and a widget to show the current url
+ - a vertical scrollbar
+ - a horizontal scrollbar
+ - a status text widget
+
+The scrollbar widgets fltk callbacks (called when user interacts with
+the scrollbar) call a method on the `NS_Widget` allowing it to track
+the current scroll offsets which are subsequently used in the drawing
+and user input handling methods.
+
+## Improving rendering
+
+Up to this point the rendering has been minimal and the text in a
+single face and size with incorrect width measurement. There was no
+proper handling of plotting styles and colours.
+
+## Implementing bitmap rendering
+
+There was no bitmap rendering so no pretty pictures.
+
+## Implementing the user messages API
+
+This immediately allows the browser to use the existing language
+translations for many internal strings.
+
+## Implementing a user settings dialog
+
+Implementing a way for the user to change configuration options
+without having to edit a configuration file greatly improves the
+perceived functionality.
+
+## Implementing corewindow
+
+The [core window interface](docs/core-window-interface.md) allows a
+frontend to use inbuilt rendering for several interfaces gaining a
+great deal of functionality for very litte code. This one interface
+set gives a cookie viewer,a local and global history viewer and a
+hotlist(bookmarks) viewer.
+
+# Conclusion
+
+Hopefully this breif overview and worked example should give the
+prospectinve frontend developer enough information to understand how
+to get started implementing a new frontend toolkit for NetSurf.
+
+As can be seen there is actualy very little novel code necessary to
+get started though I should mention that the move from "minimal" to
+"full" implementation is a large undertaking and it would be wise to
+talk with the NetSurf developers if undertaking such work.
diff --git a/docs/integration-testing.md b/docs/integration-testing.md
new file mode 100644
index 000000000..03b41308a
--- /dev/null
+++ b/docs/integration-testing.md
@@ -0,0 +1,542 @@
+NetSurf Integration Testing
+===========================
+
+[TOC]
+
+# Overview
+
+The monkey frontend is used to perform complex tests involving
+operating the browser as a user might (opening windows, navigating to
+websites and rendering the contents etc.)
+
+A test is written as a set of operations in a yaml file. These files
+are parsed and executed by the monkey driver script.
+
+There are very few tests within the NetSurf repository. The large
+majority of integration tests are instead held within the
+[netsurf-test](http://source.netsurf-browser.org/netsurf-test.git/)
+repository.
+
+To allow more effective use of these tests additional infrastructure
+has been constructed to allow groupings of tests to be run. This is
+used extensively by the CI system to perform integration testing on
+every commit.
+
+The infrastructure also provides for special CGI scripts which have
+known behaviours such as delays or returning specific content to
+extend test capabilities.
+
+
+# Running a test
+
+An individual test can be run using the monkey_driver.py python script
+from within the NetSurf repository
+
+ $ make TARGET=monkey
+ $ ./test/monkey_driver.py -m ./nsmonkey -t test/monkey-tests/start-stop.yaml
+
+The command actually executed can be augmented using the wrapper
+switch, this allows the test to be run under a debugger or profiler.
+
+For example to wrap execution under valgrind memory checker
+
+ $ ./test/monkey_driver.py -m ./nsmonkey -w 'valgrind -v --track-origins=yes' -t test/monkey-tests/start-stop.yaml
+
+
+# Running more than one test
+
+Each test is a member of a group and the tests within each group are
+run together. Groups are listed within division index files. A group
+of tests may occur within more than one division.
+
+To run the integration tests the monkey-see-monkey-do python script is
+used. It downloads the test plan for a division from the NetSurf test
+infrastructure and executes it.
+
+ $ ./test/monkey-see-monkey-do
+ Fetching tests...
+ Parsing tests...
+ Running tests...
+ Start group: initial
+ [ Basic checks that the browser can start and stop ]
+ => Run test: start-stop-no-js.yaml
+ => Run test: basic-navigation.yaml
+ => Run test: start-stop.yaml
+ Start group: no-networking
+ [ Tests that require no networking ]
+ => Run test: resource-scheme.yaml
+ Start group: ecmascript
+ [ ECMAScript tests ]
+ PASS
+
+If no division is specified on the command line the "default" division
+is used. Other divisions are specified with the d switch for example
+to specify the "short-internet" division:
+
+ $ ./test/monkey-see-monkey-do -d short-internet
+
+Additionally the g switch allows the limiting of tests within a single
+group to be executed.
+
+ $ ./test/monkey-see-monkey-do -g no-networking
+ Fetching tests...
+ Parsing tests...
+ Running tests...
+ Start group: no-networking
+ [ Tests that require no networking ]
+ => Run test: resource-scheme.yaml
+ PASS
+
+# Test files
+
+Each test is a individual [YAML](https://en.wikipedia.org/wiki/YAML)
+file and consists of associative arrays (key/value pairs), lists and
+comments.
+
+As a minimum a test must contain an associative array with keys for
+`title`, `group` and `steps`. The `steps` key must contain a list of
+test operations as a value.
+
+Each operation is an associative list and must, as a minimum, contain
+an action key with a suitable value.
+
+A minimal test that simply starts the browser without JavaScript and
+then quits it without ever opening a window to browse to a page
+
+ title: start and stop browser without JS
+ group: initial
+ steps:
+ - action: launch
+ options:
+ - enable_javascript=0
+ - action: quit
+
+
+# Actions
+
+## launch
+
+Start a browser instance. A test will generally have a single launch
+action paired with a quit action.
+
+Additional command line parameters may be set using the `launch-options`
+key the value of which must be a list of command line arguments to be
+passed to the browser (without their leading hyphens)
+
+The environment of the browser can be altered with the `environment` key
+the value is an associative array of environment variables which will
+be added to the browsers environment variables.
+
+User options may be set using the `options` key with a value containing
+a list of options to set. These options allow operation with differing
+user choices to be tested without a separate Choices file.
+
+The `language` key sets the LANGUAGE environment variable which controls
+the browsers user interface language. Note this is distinct from the
+language the browser requests from HTTP servers which is controlled
+with the `accept_language` user option.
+
+The following launch action would start a browser:
+ * Passing `--verbose` on the commandline
+ * The `NETSURFRES` environment variable set to `/home/netsurf/resources`
+ * The user options `enable_javascript` and `send_referer` set to false.
+ * The `LANGUAGE` environment variable set to `en`
+
+```
+- action: launch
+ launch-options:
+ - verbose
+ environment:
+ NETSURFRES: /home/netsurf/resources
+ options:
+ - enable_javascript=0
+ - send_referer=0
+ language: en
+```
+
+## window-new
+
+Open a new browser window. The test may open as many browser windows
+as necessary and they are usually paired with a `window-close` action
+
+The browser must have been previously launched or this action will
+assert the test with a failure.
+
+The `tag` key *must* also be present with a value (unique for all
+window-new actions). The value is used to identify subsequent
+operations in this window.
+
+As an example this will open a new window which can subsequently be
+referred to with the win1 identifier:
+
+ - action: window-new
+ tag: win1
+
+
+## window-close
+
+Closes a previously opened window. The window is identified with the
+`window` key, the value of this must be a previously created window
+identifier or an assert will occur.
+
+ - action: window-close
+ window: win1
+
+
+## navigate
+
+Cause a window to start navigating to a new URL.
+
+The window to be navigated is identified with the `window` key, the
+value of this must be a previously created window identifier or an
+assert will occur.
+
+The URL to navigate to navigate to is controlled either by the `url`
+or `repeaturl` key. The `url` value is directly used as the address to
+navigate to.
+
+ - action: navigate
+ window: win1
+ url: about:about
+
+The `repeaturl` value is used as a repeat action identifier allowing
+navigation in a loop with different values.
+
+ - action: repeat
+ values:
+ - https://www.google.com/
+ - https://apple.com/
+ - https://microsoft.com/
+ tag: urls
+ - action: navigate
+ window: win1
+ repeaturl: urls
+
+
+## reload
+
+Cause a window to (re)navigate to the current URL
+
+The window to be navigated is identified with the `window` key, the
+value of this must be a previously created window identifier or an
+assert will occur.
+
+ - action: reload
+ window: win1
+
+## stop
+
+Cause a window to immediately stop any navigation.
+
+The window to be navigated is identified with the `window` key, the
+value of this must be a previously created window identifier or an
+assert will occur.
+
+ - action: stop
+ window: win1
+
+## sleep-ms
+
+Wait for time to pass before continuing to next action.
+
+The value of the `time` key is either the duration to wait for in
+milliseconds or a `repeat` action identifier.
+
+The optional `conditions` key may contain a list of conditionals used
+to terminate the delay early. If a `repeat` action identifier is in
+use the loop is terminated if a condition is met.
+
+For example to wait 10 seconds:
+
+ - action: sleep-ms
+ time: 10000
+
+if a repeat action identifier is used the delay duration is the
+current iteration value and the delay is timed from when the current
+iteration started.
+
+The `sleep-ms` action here delays by 50 milliseconds more each
+iteration until the window navigation is complete when the `sleep-ms`
+action is delaying.
+
+ - action: repeat
+ min: 0
+ step: 50
+ tag: sleepytimer
+ steps:
+ - action: launch
+ - action: window-new
+ tag: win1
+ - action: navigate
+ window: win1
+ url: about:about
+ - action: sleep-ms
+ time: sleepytimer
+ conditions:
+ - window: win1
+ status: complete
+ - action: quit
+
+
+## block
+
+Wait for conditions to be met before continuing. This is similar to
+the `sleep-ms` action except that it will wait forever for the
+conditions to be met.
+
+The `conditions` key must contain a list of conditionals used to
+terminate the block.
+
+ - action: block
+ conditions:
+ - window: win1
+ status: complete
+
+valid `status` values are `complete` or `loading`.
+
+## repeat
+
+Repeat a set of actions.
+
+The identifier of the repeat action is set with the `tag` key and must
+be present and unique among `repeat` action identifiers.
+
+The actions to be repeated are placed in the `steps` list which may
+include any action and behaves just like the top level list.
+
+An iterator context is created for the repeat loop. The iterator can
+either be configured as a numeric value or as a list of values.
+
+The numeric iterator is controlled with the `min` ,`step` and `max`
+keys. All these keys are integer values and their presence is
+optional.
+
+The `min` value is the initial value of the iterator which defaults
+to 0.
+
+The `step` value controls how much the iterator is incremented
+on every loop with default value of 1.
+
+The loop terminates if the `max` value is exceeded. If no `max` value
+is specified the loop is infinite (i.e. no default) but may still be
+terminated by the `sleep-ms` action
+
+ - action: repeat
+ min: 0
+ step: 50
+ max: 100
+ tag: loopvar
+ steps:
+ - action: launch
+ - action: quit
+
+A value iterator has a `values` key containing a list. On each
+iteration of the loop a new value is available and can be used by the
+`navigate` action.
+
+Note that `min` ,`step` and `max` are ignored if there is a `values` key
+
+ - action: repeat
+ values:
+ - https://www.google.com/
+ - https://www.blogger.com/
+ - https://apple.com/
+ - https://microsoft.com/
+ tag: urls
+ steps:
+ - action: navigate
+ window: win1
+ repeaturl: urls
+ - action: block
+ conditions:
+ - window: win1
+ status: complete
+
+
+## timer-start
+
+Start a timer.
+
+The identifier for the timer is set with the `timer` key.
+
+ - action: timer-start
+ timer: timer1
+
+
+## timer-restart
+
+Re-start a timer
+
+The identifier for the timer is set with the `timer` key.
+
+ - action: timer-restart
+ timer: timer1
+
+
+## timer-stop
+
+Stop a timer
+
+The identifier for the timer is set with the `timer` key.
+
+ - action: timer-stop
+ timer: timer1
+
+
+## timer-check
+
+Check a timer meets a condition.
+
+The identifier for the timer is set with the `timer` key.
+
+The conditional is set with the `condition` key which must be present.
+
+
+## plot-check
+
+Perform a plot of a previously navigated window.
+
+The window to be rendered is identified with the `window` key, the
+value of this must be a previously created window identifier or an
+assert will occur.
+
+The `area` key allows control of the area to be redraw. The parameters are on two forms:
+
+ * A sequence of four numbers in the form `x0 y0 x1 y1`
+ * The keyword extent which attempt to plot the entire extent of the canvas
+
+An optional list of checks may be specified with the `checks` key. If
+any check is not satisfied an assert will occur and the test will
+fail. Multiple checks can be specified and all most pass successfully.
+
+The checks available are:
+
+ * The key `text-contains` where the text must occur somewhere in the
+ plotted output.
+ * The key `text-not-contains` where the text must not occur in the
+ plotted output.
+ * The key `bitmap-count` which specifies the number of images that
+ must be present.
+
+
+ - action: plot-check
+ window: win1
+ area: extent
+ checks:
+ - text-contains: NetSurf
+ - text-contains: Browser
+ - text-not-contains: Chrome
+ - bitmap-count: 1
+
+
+## click
+
+Perform a user mouse click on a specified window.
+
+The window to be clicked is identified with the `window` key, the
+value of this must be a previously created window identifier or an
+assert will occur.
+
+The `target` key contains an associative array which is used to select
+the location of the mouse operation in the window. The key `text` can
+be used to select text to be operated upon which matches the first
+occurrence of the text. The key `bitmap` has an integer value to
+select the index of the image to click.
+
+The optional `button` key selects which button is pressed it can take
+the value `left` or `right`. The default if not specified is `left`
+
+The optional `kind` key selects which button operation to be performed
+it can take the value `single`, `double` or `triple`. The default if
+not specified is `single`
+
+ - action: click
+ window: win1
+ target:
+ text: "about:Choices"
+
+
+## wait-loading
+
+Wait for the navigated page to start loading before moving to the next
+action.
+
+The window to be waited upon is identified with the `window` key, the
+value of this must be a previously created window identifier or an
+assert will occur.
+
+ - action: wait-loading
+ window: win1
+
+
+## add-auth
+
+Add basic authentication details for a navigation.
+
+The keys `url`, `realm`, `username` and `password` must be given. When
+a basic authentication challenge occurs that matches the url and
+realm parameters the associated username and password are returned to
+answer the challenge.
+
+ - action: add-auth
+ url: http://test.netsurf-browser.org/cgi-bin/auth.cgi?user=foo&pass=bar
+ realm: Fake Realm
+ username: foo
+ password: bar
+
+
+## remove-auth
+
+Remove a previously added authentication details.
+
+ - action: remove-auth
+ url: http://test.netsurf-browser.org/cgi-bin/auth.cgi?user=foo&pass=bar
+ realm: Fake Realm
+ username: foo
+ password: bar
+
+
+## clear-log
+
+Clear log for a window.
+
+The window to be cleared is identified with the `window` key, the
+value of this must be a previously created window identifier or an
+assert will occur.
+
+
+## wait-log
+
+Wait for string to appear in log output.
+
+The window to be waited upon is identified with the `window` key, the
+value of this must be a previously created window identifier or an
+assert will occur.
+
+The keys `source` `foldable` `level` and `substring` must be specified
+
+## js-exec
+
+Execute javascript in a window.
+
+The window to be execute within is identified with the `window` key, the
+value of this must be a previously created window identifier or an
+assert will occur.
+
+The `cmd` key contains the javascript to execute.
+
+
+## page-info-state
+
+Check the page information status matches an expected value.
+
+The window to be checked is identified with the `window` key, the
+value of this must be a previously created window identifier or an
+assert will occur.
+
+The value of the `match` key is compared to the windows page
+information status and an assert occurs if there is a mismatch.
+
+## quit
+
+This causes a previously launched browser instance to exit cleanly.
diff --git a/docs/jsbinding.md b/docs/jsbinding.md
new file mode 100644
index 000000000..8b24a80a5
--- /dev/null
+++ b/docs/jsbinding.md
@@ -0,0 +1,313 @@
+JavaScript bindings
+===================
+
+In order for JavaScript programs to to interact with the page contents
+it must use the Document Object Model (DOM) and Cascading Style Sheet
+Object Model (CSSOM) API.
+
+These interfaces are described using Web Interface Description
+Language (WebIDL) within the relevant specifications
+(e.g. https://dom.spec.whatwg.org/).
+
+Each interface described by the WebIDL must be bound (connected) to
+the browsers internal representation for the DOM or CSS, etc. These
+bindings descriptions are processed together with the WebIDL by the
+nsgenbind tool to generate source code.
+
+A list of [DOM and CSSOM methods](unimplemented.html) is available
+outlining the remaining unimplemented API bindings.
+
+WebIDL
+------
+
+The [WebIDL specification](http://www.w3.org/TR/WebIDL/) defines the
+interface description language used. The WebIDL is being updated and
+an [editors draft](https://heycam.github.io/webidl/) is available but
+use is inconsistent.
+
+These descriptions should be periodically updated to keep the browser
+interfaces current.
+
+There is a content/handlers/javascript/WebIDL/Makefile which attempts
+to automatically update the IDL files by scraping the web specs.
+
+This tool needs a great deal of hand holding, not least because many of the
+source documents list the IDL fragments multiple times, some even have
+appendices with the entire IDL repeated.
+
+The IDL uses some slightly different terms than other object orientated
+ systems.
+
+ WebIDL | JavaScript | Common OOP | Note
+ ------- | ---------- | ---------- | ----
+ interface | prototype | class | The data definition of the object
+ constants | read-only value property on the prototype | class variable | Belong to class, one copy
+ operation | method | method | functions that can be called
+ attribute | property | property | Variables set per instance
+
+JavaScript implementation
+-------------------------
+
+NetSurf consumes the Duktape JS engine in order to run the JS code which
+is used within the browser. Duktape is exceedingly well documented and
+its API docs at https://duktape.org/api.html are incredibly useful.
+
+It'll be worthwhile learning about how duktape stacks work in order to
+work on bindings in NetSurf
+
+Dukky
+-----
+
+Wrappering around and layering between duktape and the browser is a
+set of functionality we call `dukky`. This defines a variety of
+conventions and capabilities which are common to almost all bindings.
+The header `dukky.h` provides the interface to these functions.
+
+Normally these functions are used by automatically generated content,
+but if a binding needs to add DOM nodes back into the JavaScript
+environment (for example when returning them from a method
+implementation) `dukky_push_node()` should be used or when calling a
+function in a JS context `dukky_pcall()`
+
+Dukky automatically terminates any JS call which lasts for more than
+10 seconds. If you are calling a JS function from outside any of the
+"normal" means by which dukky might call code on your behalf
+(`js_exec()`, events, etc) then you should be sure to use
+`dukky_pcall()` and pass in `true` in `reset_timeout` otherwise your
+code may unexpectedly terminate early.
+
+Interface binding introduction
+------------------------------
+
+The binding files are processed by the nsgenbind tool to generate c
+source code which implements the interfaces within the JavaScript
+engine.
+
+The bindings are specific to a JavaScript engine, the DOM library, the
+CSS library and the browser. In this case that is the tuple of
+duktape, libdom, libcss and NetSurf.
+
+In principle other engines or libraries could be substituted
+(historically NetSurf unsuccessfully tried to use spidermonkey) but the
+engineering to do so is formidable.
+
+The bindings are kept the main [NetSurf source code
+repository](http://git.netsurf-browser.org/netsurf.git/) within the
+duktape JavaScript handler directory `content/handlers/javascript/duktape/`
+
+The root binding which contains all the interfaces introduced into
+the JavaScript programs initial execution context is nesurf.bnd this
+references all the WebIDL to be bound and includes all additional
+binding definitions to implement the interfaces.
+
+The bindings are a Domain Specific Language (DSL) which allows
+implementations to be added to each WebIDL method. nsgenbind
+documentation contains a [full description of the
+language](https://ci.netsurf-browser.org/jenkins/view/Categorized/job/docs-nsgenbind/doxygen/index.html).
+
+The main focus on creating binding is to implement the content within
+getter, setter and method stanzas. These correspond to implementations
+of the WebIDL operations on an interface.
+
+The binding implementations are in the form of C code fragments
+directly pasted into the generated code with generated setup code
+surrounding it.
+
+### Simple attribute example
+
+The Window interface (class) in the HTML specification has an
+attribute (property) called `name`.
+
+The full WebIDL for the Window interface is defined in the
+`content/handlers/javascript/WebIDL/html.idl` file but the
+fragment for our example is just:
+
+ interface Window : EventTarget {
+ attribute DOMString name;
+ };
+
+This indicates there is an attribute called `name` which is a string
+(technicaly a DOMString but the implementation does not differentiate
+between string types) which means it has both a setter and a getter.
+
+attributes can be marked readonly which would mean there is only a
+getter required for them. For example the Plugin interface has a
+'name' attribute defined as:
+
+ interface Plugin {
+ readonly attribute DOMString name;
+ };
+
+The getter and setter for the Window class attribute will be added to
+`Window.bnd`. The entries added will be of the form:
+
+ getter Window::name()
+ %{
+ %}
+
+ setter Window::name()
+ %{
+ %}
+
+The top level `netsurf.bnd` binding includes `Window.bnd` (using a
+`#include` directive) which contains the implementation of the Window
+class. This is purely to split the bindings up into logical units.
+
+The nsgenbind tool generates code that automatically allows acess to
+the classes private data structure elements through a variable called
+`priv` and the duktape stack in the variable `ctx`.
+
+The getter binding code must place the retrived value on the duktape
+stack and return 1 to indicate this or 0 if it failed.
+
+So for the name attribute case the complete getter binding is:
+
+ getter Window::name()
+ %{
+ const char *name;
+ browser_window_get_name(priv->win, &name);
+ duk_push_string(ctx, name);
+ return 1;
+ %}
+
+This uses the browser_window_get_name() interface to retrieve the name
+string for the window (identified using the private context) and then
+adds it to the duktape stack. The return value indicates the sucess of
+the operation.
+
+The setter must retrive the value to set from the duktap stack and
+update the internal private data structure with that value and return
+0 to indicate success.
+
+So for the name attribute case the complete setter binding is:
+
+ setter Window::name()
+ %{
+ const char *name;
+ name = duk_to_string(ctx, -1);
+ browser_window_set_name(priv->win, name);
+ return 0;
+ %}
+
+This uses browser_window_set_name() interface to set the name of the
+window. The return indicates the success of the operation.
+
+### Simple method example
+
+The Location interface (class) in the HTML specification has an
+operation (method) called `asign`. This method causes the browser to
+navigate to a new url.
+
+The full WebIDL for the Window interface is defined in the
+`content/handlers/javascript/WebIDL/html.idl` file but the
+fragment for our example is:
+
+ interface Location {
+ void assign(DOMString url);
+ }
+
+This shows there is an operation called assign in the Location
+interface which takes a single string parameter and returns nothing.
+
+The method binding will be added to `Location.bnd` similarly to how
+the attribute example used `Window.bnd`
+
+ method Location::assign()
+ %{
+ window_private_t *priv_win;
+ nsurl *joined;
+ duk_size_t slen;
+ const char *url;
+
+ /* retrieve the private data from the root object (window) */
+ duk_push_global_object(ctx);
+ duk_get_prop_string(ctx, -1, PRIVATE_MAGIC);
+ priv_win = duk_get_pointer(ctx, -1);
+ duk_pop(ctx);
+
+ if (priv_win == NULL || priv_win->win == NULL) {
+ NSLOG(netsurf, INFO, "failed to get browser context");
+ return 0;
+ }
+
+ url = duk_safe_to_lstring(ctx, 0, &slen);
+
+ nsurl_join(priv->url, url, &joined);
+ browser_window_navigate(priv_win->win,
+ joined,
+ NULL,
+ BW_NAVIGATE_HISTORY,
+ NULL,
+ NULL,
+ NULL);
+ nsurl_unref(joined);
+ return 0;
+ %}
+
+The nsgenbind tool generates code that automatically allows acess to
+the classes private data structure elements through a variable called
+`priv` and the duktape stack in the variable `ctx`.
+
+In this case nsgenbind will generate code that will ensure there is at
+least one parameter and coerce it to a string on the duktape `ctx`
+stack returning a type error if it is unable to do so.
+
+The binding implementation shown here uses browser_window_navigate()
+to navigate to the new url. To do this it needs the browser window
+handle (pointer) which is obtained from the global object (the window)
+private structure.
+
+Note that the duk_safe_to_lstring() call used to obtain the url
+parameter needs no additional checking as nsgenbind emits this code
+automaticaly.
+
+### Overloaded method example
+
+The Window interface (class) in the HTML specification has an
+operation (method) called `alert`. This method is supposed to cause
+the user to be alerted about something on the page.
+
+The full WebIDL for the Window interface is defined in the
+`content/handlers/javascript/WebIDL/html.idl` file but the
+fragment for our example is:
+
+ interface Window : EventTarget {
+ void alert();
+ void alert(DOMString message);
+ };
+
+This indicates there is an operation called `alert`. It has two
+overloaded prototypes, one takes no parameters and one takes a string
+parameter (technicaly a DOMString but the implementation does not
+differentiate between string types)
+
+The method binding will be added to `Window.bnd` as the attribute example
+
+ method Window::alert()
+ %{
+ duk_idx_t dukky_argc = duk_get_top(ctx);
+ if (dukky_argc == 0) {
+ NSLOG(netsurf, INFO, "JS ALERT");
+ } else {
+ duk_size_t msg_len;
+ const char *msg;
+
+ if (!duk_is_string(ctx, 0)) {
+ duk_to_string(ctx, 0);
+ }
+ msg = duk_safe_to_lstring(ctx, 0, &msg_len);
+ NSLOG(netsurf, INFO, "JS ALERT: %*s", (int)msg_len, msg);
+ }
+ return 0;
+ %}
+
+The nsgenbind tool generates code that automatically allows acess to
+the classes private data structure elements through a variable called
+`priv` and the duktape stack in the variable `ctx`.
+
+For overloaded method calls nsgenbind does not emit code to do
+parameter verification and the binding code has to deal with all
+possible parameters itself.
+
+This binding checks the number of parameters and if one is present it
+coerces it to be a string and logs the result. \ No newline at end of file
diff --git a/docs/logging.md b/docs/logging.md
index 41c7ea1bd..abc852bca 100644
--- a/docs/logging.md
+++ b/docs/logging.md
@@ -62,12 +62,18 @@ The main command line switches that control logging are:
- -V <file>
Send the logging to a file instead of standard output
- - -log_filter=<filter>
+ - --log_filter=<filter>
Set the non verbose filter
- - -log_verbose_filter=<filter>
+ - --verbose_filter=<filter>
Set the verbose filter
+Examples:
+
+ ./nsgtk --log_filter="level:INFO"
+ ./nsgtk -v --verbose_filter="(cat:layout && level:DEBUG)"
+ ./nsgtk -v --verbose_filter="((cat:layout && level:DEBUG) || level:INFO)"
+
Options
-------
diff --git a/docs/mainpage.md b/docs/mainpage.md
index fa72d1464..afff4b65d 100644
--- a/docs/mainpage.md
+++ b/docs/mainpage.md
@@ -1,98 +1,13 @@
NetSurf web browser
===================
-![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/1037/badge)[*](https://bestpractices.coreinfrastructure.org/projects/1037)
+![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/1037/badge)
-The NetSurf code makes use of Doxygen for code documentation.
+[CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/1037)
-User Interface
---------------
-There are some basic user guides for the
-[framebuffer](docs/using-framebuffer.md) and
-[monkey](docs/using-monkey.md) frontends.
+[Project](docs/project.md)
-The [core user options](docs/netsurf-options.md) of the browser are
-documented which are augmented by each frontend in a specific manner.
-
-### Logging
-
-The [logging](docs/logging.md) interface controls debug and error
-messages not output through the GUI.
-
-Documented API
---------------
-
-There are several documents which detail specific aspects of the
-codebase and APIs.
-
-### Core window
-
-The [core window API](docs/core-window-interface.md) allows frontends
-to use generic core code for user interface elements beyond the
-browser render.
-
-### Source object caching
-
-The [source object caching](docs/source-object-backing-store.md)
-provides a way for downloaded content to be kept on a persistent
-storage medium such as hard disc to make future retrieval of that
-content quickly.
-
-### Javascript
-
-JavaScript is provided by integrating the duktape library. There are [instructions](docs/updating-duktape.md) on how to update the library.
-
-A list of [unimplemented DOM and CSSOM methods](unimplemented.html)
-is available outlining the remaining API that have to be implemented.
-
-Development
------------
-
-Compiling a development edition of NetSurf requires a POSIX style
-environment. Typically this means a Linux based system although Free
-BSD, Open BSD, Mac OS X and Haiku all known to work.
-
-### Working with the team
-
-Generally it is sensible to check with the other developers if you are
-planning to make a change to NetSurf intended to be merged.
-
-We are often about on the IRC channel but failing that the developer
-mailing list is a good place to try.
-
-All the project sources are held in [public git repositories](http://source.netsurf-browser.org/)
-
-### Toolchains
-
-Compilation for non POSIX toolkits/frontends (e.g. RISC OS) generally
-relies upon a cross compilation environment which is generated using
-the makefiles found in our
-[toolchains](http://source.netsurf-browser.org/toolchains.git/)
-repository. These toolchains are built by the Continuous Integration
-(CI) system and the
-[results of the system](http://ci.netsurf-browser.org/builds/toolchains/)
-are published as a convenience.
-
-### Quick setup
-
-The [quick start guide](docs/quick-start.md) can be used to get a
-development environment setup quickly and uses the
-[env.sh](env_8sh_source.html) script the core team utilises.
-
-### Manual setup
-
-The Manual environment setup and compilation method is covered by the
-details in the [netsurf libraries](docs/netsurf-libraries.md) document
-for the core libraries and then one of the building documents for the
-specific frontend.
-
-- [Amiga Os cross](docs/building-AmigaCross.md) and [Amiga OS](docs/building-AmigaOS.md)
-- [Framebuffer](docs/building-Framebuffer.md)
-- [GTK](docs/building-GTK.md)
-- [Haiku (BeOS)](docs/building-Haiku.md)
-- [Windows Win32](docs/building-Windows.md)
-
-These documents are sometimes not completely up to
-date and the env.sh script should be considered canonical.
+[User Interface](docs/user-interface.md)
+[Development](docs/development.md) \ No newline at end of file
diff --git a/docs/netsurf-fb.1 b/docs/netsurf-fb.1
index e4c310075..045c1fe1a 100644
--- a/docs/netsurf-fb.1
+++ b/docs/netsurf-fb.1
@@ -95,9 +95,6 @@ Maximum disc cache size.
.B \-\-block_advertisements
Boolean to enable ad blocking.
.TP
-.B \-\-minimum_gif_delay
-Minimum time between gif frames
-.TP
.B \-\-send_referer
Boolean controlling whether referer data should be sent
.TP
@@ -146,12 +143,6 @@ The width of the initial window.
.B \-\-window_height
The height of the initial window.
.TP
-.B \-\-window_screen_width
-window screen width
-.TP
-.B \-\-window_screen_height
-window screen height
-.TP
.B \-\-toolbar_status_size
toolbar status size
.TP
@@ -308,9 +299,6 @@ Override CSS sys_colour_WindowFrame colour.
.B \-\-sys_colour_WindowText
Override CSS sys_colour_WindowText colour.
.TP
-.B \-\-render_resample
-render resample
-.TP
.B \-\-downloads_clear
downloads clear
.TP
@@ -332,9 +320,6 @@ button type
.B \-\-disable_popups
disable popups
.TP
-.B \-\-disable_plugins
-disable plugins
-.TP
.B \-\-history_age
history age
.TP
diff --git a/docs/netsurf-gtk.1 b/docs/netsurf-gtk.1
index 7b2f4f4f3..2ae61be84 100644
--- a/docs/netsurf-gtk.1
+++ b/docs/netsurf-gtk.1
@@ -67,8 +67,6 @@ Maximum memory cache size.
Maximum disc cache size.
.It Fl -block_advertisements
Boolean to enable ad blocking.
-.It Fl -minimum_gif_delay
-Minimum time between gif frames
.It Fl -send_referer
Boolean controlling whether referrer data should be sent
.It Fl -animate_images
@@ -101,10 +99,6 @@ The Y co-ordinate of the initial window.
The width of the initial window.
.It Fl -window_height
The height of the initial window.
-.It Fl -window_screen_width
-window screen width
-.It Fl -window_screen_height
-window screen height
.It Fl -toolbar_status_size
toolbar status size
.It Fl -scale
@@ -209,8 +203,6 @@ Override CSS sys_colour_Window colour.
Override CSS sys_colour_WindowFrame colour.
.It Fl -sys_colour_WindowText
Override CSS sys_colour_WindowText colour.
-.It Fl -render_resample
-render resample
.It Fl -downloads_clear
downloads clear
.It Fl -request_overwrite
@@ -225,8 +217,6 @@ Force tabs to always be show.
button type
.It Fl -disable_popups
disable popups
-.It Fl -disable_plugins
-disable plugins
.It Fl -history_age
history age
.It Fl -hover_urls
diff --git a/docs/netsurf-options.md b/docs/netsurf-options.md
index 553813842..5a723c76b 100644
--- a/docs/netsurf-options.md
+++ b/docs/netsurf-options.md
@@ -42,9 +42,9 @@ General Options
memory_cache_size | int | 12MiB | Preferred maximum size of memory cache in bytes.
disc_cache_size | uint | 1GiB | Preferred expiry size of disc cache in bytes.
disc_cache_age | int | 28 | Preferred expiry age of disc cache in days.
+ disc_cache_path | string | NULL | Path to disc cache, NULL means to use system path |
block_advertisements | bool | false | Whether to block advertisements
do_not_track | bool | false | Disable website tracking [1]
- minimum_gif_delay | int | 10 | Minimum GIF animation delay
send_referer | bool | true | Whether to send the referer HTTP header.
foreground_images | bool | true | Whether to fetch foreground images
background_images | bool | true | Whether to fetch background images
diff --git a/docs/project.md b/docs/project.md
new file mode 100644
index 000000000..7fa76d9ae
--- /dev/null
+++ b/docs/project.md
@@ -0,0 +1,17 @@
+NetSurf Project
+===============
+
+The NetSurf project is developing a document browser for the World
+Wide Web. It was started in 2002 on the RISC OS platform and has
+support for numerous operating systems and graphical toolkits.
+
+NetSurf is very modular and built from many component libraries which
+provide functionality from GIF image format decoding (libnsgif) to
+HTML document object model handling (libdom).
+
+NetSurf browser is open source and is licensed under the GPLv2 (with
+OpenSSL exception). Many of the supporting libraries are under a MIT
+licence.
+
+The [main website](http://www.netsurf-browser.org/) contains links to
+other resources and additional information.
diff --git a/docs/quick-start.md b/docs/quick-start.md
index 8bc90de81..449b956a3 100644
--- a/docs/quick-start.md
+++ b/docs/quick-start.md
@@ -1,15 +1,29 @@
Quick Build Steps for NetSurf
=============================
-Last Updated: 24 February 2015
+Last Updated: 21st January 2020
This document provides steps for building NetSurf.
+These instructions use a shell script to perform several operations.
+ This script has only been tested with the bash and zsh bourne style
+ shell interpreters. The latest version of this script should be
+ retrieved from the official NetSurf source repository.
+
+This shell script is used by the NetSurf Developers but you should
+ satisfy yourself that the script is not malicious. It should be noted
+ that building the browser will also be executing shell code and
+ requires a similar level of trust.
+
+
+Native build
+============
Grab a temporary env.sh
-----------------------
- $ wget http://git.netsurf-browser.org/netsurf.git/plain/docs/env.sh
+ $ wget https://git.netsurf-browser.org/netsurf.git/plain/docs/env.sh
+ $ unset HOST
$ source env.sh
@@ -28,6 +42,11 @@ If your package manager is not supported, you will have to install third
Get the NetSurf project source code from Git
--------------------------------------------
+All the sources for the browser and support libraries is available
+ from the public git server.
+
+Local copies may be easily obtained with the ns-clone command.
+
$ ns-clone
@@ -42,7 +61,7 @@ Updates NetSurf project library sources to latest, builds and installs them.
Switch to new NetSurf workspace
-------------------------------
-Remove the bootstrack script and use the newly installed one
+Remove the bootstrap script and use the newly installed one
$ rm env.sh
$ cd ~/dev-netsurf/workspace
@@ -54,39 +73,41 @@ Build and run NetSurf
$ cd netsurf
-To build the native front end (the GTK front end on Linux, BSDs, etc) you
-could do:
+To build the native front end (the GTK front end on Linux, BSDs, etc)
+ you could do:
$ make
- $ ./nsgtk
+ $ ./nsgtk3
To build the framebuffer front end, you could do:
$ make TARGET=framebuffer
$ ./nsfb
+More detailed documentation on using the [framebuffer](docs/using-framebuffer.md)
+ frontend are available.
Cross Compiling
===============
If you are cross compiling, you can follow the above steps, but when
-sourcing env.sh, you should set HOST environment variable to the
-appropriate triplet for your cross compiler. For example, to cross
-compile for RISC OS:
+ sourcing env.sh, you should set HOST environment variable to the
+ appropriate triplet for your cross compiler. For example, to cross
+ compile for RISC OS:
$ HOST=arm-unknown-riscos source env.sh
After that, the commands such as `ns-package-install` and
-`ns-pull-install` will do what is appropriate for the platform you
-are building for.
+ `ns-pull-install` will do what is appropriate for the platform you are
+ building for.
-To do the final build of NetSurf, pass the appropriate TARGET to make.
-For example, to cross compile for RISC OS:
+To do the final build of NetSurf, pass the appropriate TARGET to
+ make. For example, to cross compile for RISC OS:
$ make TARGET=riscos
Finally, you can package up your build to transfer to the system you
-are developing for. For example, to produce a package for RISC OS:
+ are developing for. For example, to produce a package for RISC OS:
$ make TARGET=riscos package
@@ -94,18 +115,19 @@ Getting a cross compiler set up
-------------------------------
We maintain cross compilation environments and an SDK for a number of
-platforms. These may be found in our toolchains repository.
+ platforms. These may be found in our toolchains repository.
$ git clone git://git.netsurf-browser.org/toolchains
-Pre-built versions of the toolchains for Debian systems are often available
-via our [automated build and test infrastructure](http://ci.netsurf-browser.org/builds/toolchains/)
+Pre-built versions of the toolchains for 64bit x86 Debian systems are
+ available via our [automated build and test
+ infrastructure](https://ci.netsurf-browser.org/builds/toolchains/)
Not working?
============
-If the above steps are inapplicable, or don't work, you can build manually.
-Follow the instructions in the BUILDING-* documents in the docs/ directory
-the NetSurf browser source tree.
+If the above steps are inapplicable, or don't work, you can build
+ manually. Follow the instructions in the BUILDING-* documents in the
+ docs/ directory the NetSurf browser source tree.
diff --git a/docs/source-object-backing-store.md b/docs/source-object-backing-store.md
index 0fb3614d4..4fb662087 100644
--- a/docs/source-object-backing-store.md
+++ b/docs/source-object-backing-store.md
@@ -1,26 +1,36 @@
Source Object (low level) cache backing store
=============================================
-Introduction
-------------
+[TOC]
-The source object cache provides a system to extend the life of source
-objects (HTML files, images etc.) after they are no longer immediately
-being used.
+# Introduction
-Only fetch types where we have well defined rules on caching are
-considered, in practice this limits us to HTTP(S). The section in
-RFC2616 [1] on caching specifies these rules.
+The source object (referred to as low level in the code) content cache
+provides a unified API for the rest of the browser to retrieve objects
+(HTML files, images etc.) from a URL.
+
+The cache initialy always fufuls these requsts by using the fetcher
+system to retrive data according to the URL scheme (network for HTTP,
+disc for file etc.) and storing the result in memory.
+
+The cache also provides a system to extend the life of source objects
+in memory when they are no longer immediately being used. Only fetch
+types where there are well defined rules on caching are considered, in
+practice this limits the cache to URLS with HTTP(S) schemes. The
+section in RFC2616 [1] on caching specifies these rules.
To further extend the objects lifetime they can be pushed into a
backing store where the objects are available for reuse less quickly
-than from RAM but faster than retrieving from the network again.
+than from memory but faster than retrieving from the network again.
The backing store implementation provides a key:value infrastructure
with a simple store, retrieve and invalidate interface.
-Generic filesystem backing store
---------------------------------
+The key is the object URL which by definition is unique for a source
+object. The value is the source object data *and* the associated
+metadata
+
+# Generic filesystem backing store
Although the backing store interface is fully pluggable a generic
implementation based on storing objects on the filesystem in a
@@ -34,13 +44,45 @@ As the backing store only holds cache data one should not expect a
great deal of effort to be expended converting formats (i.e. the cache
may simply be discarded).
-Layout version 1.1
-------------------
+## Layout version 2.02
+
+The version 2 layout stores cache entries in a hash map thus only uses
+memory proportional to the number of entries present removing the need
+for large fixed size indexes.
+
+The object identifier is generated from nsurl_hash() and data entries
+are stored in either a fixed size disc blocks or in separate files on disc.
+
+The file path if stored on disc must conform to the limitations of all
+the filesystems the cache can be placed upon.
+
+From http://en.wikipedia.org/wiki/Comparison_of_file_systems#Limits the relevant subset is:
+ - path elements no longer than 8 characters
+ - acceptable characters are A-Z, 0-9
+ - short total path lengths (255 or less)
+ - no more than 77 entries per directory (6bits worth)
+
+The short total path lengths mean the encoding must represent as much
+data as possible in the least number of characters.
+
+To achieve all these goals we use RFC4648 base32 encoding which packs
+five bits into each character of the filename. By splitting the 32bit
+identifier using six bits per directory level only five levels of
+directory are required with a maximum of 64 entries per
+directory. This requires a total path length of 22 bytes (including
+directory separators) BA/BB/BC/BD/BE/ABCDEFG
+
+Files that are under 8KiB in size are stored in "small block files"
+these are pre allocated 8 Megabyte files on disc in which remove the
+need to have many, many small files stored on disc at the expensie of
+a some amount of wasted space for files that are smaller than the 8K
+block size.
-An object has an identifier value generated from the URL (NetSurf
-backing stores uses the URL as the unique key). The value used is
-obtained using nsurl_hash() which is currently a 32 bit FNV so is
-directly usable.
+## Layout version 1.1
+
+An object has an identifier value generated from the URL (the unique
+key). The value used is obtained using nsurl_hash() which is currently
+a 32 bit FNV so is directly usable.
This identifier is adequate to ensure the collision rate for the
hashed URL values (a collision for every 2^16 URLs added) is
@@ -83,26 +125,23 @@ resulting in the data being stored in a file path of
An address of 0x00040001 encodes to BAAB and a file path of
"/store/prefix/m/B/A/A/BAABAAA"
-Version 1.0
------------
+## Layout Version 1.0
-The version 1 layout was identical to the 1.1 except base64url
+The version 1.0 layout was identical to the 1.1 except base64url
encoding was used, this proved problematic as some systems filesystems
were case insensitive so upper and lower case letters collided.
There is no upgrade provision from the previous version simply delete
the cache directory.
-Control files
-~~~~~~~~~~~~~
+## Control files
+
+### control
-control
-+++++++
A control file is used to hold a list of values describing how the
other files in the backing store should be used.
-entries
-+++++++
+### entries
this file contains a table of entries describing the files held on the
filesystem.
@@ -110,26 +149,18 @@ filesystem.
Each control file table entry is 28 bytes and consists of
- signed 64 bit value for last use time
-
- 32bit full url hash allowing for index reconstruction and
additional collision detection. Also the possibility of increasing
the ADDRESS_LENGTH although this would require renaming all the
existing files in the cache and is not currently implemented.
-
- unsigned 32bit length for data
-
- unsigned 32bit length for metadata
-
- unsigned 16bit value for number of times used.
-
- unsigned 16bit value for flags
-
- unsigned 16bit value for data block index (unused)
-
- unsigned 16bit value for metatdata block index (unused)
-Address to entry index
-~~~~~~~~~~~~~~~~~~~~~~
+### Address to entry index
An entry index is held in RAM that allows looking up the address to
map to an entry in the control file.
@@ -137,14 +168,13 @@ map to an entry in the control file.
The index is the only data structure whose size is directly dependant
on the length of the hash specifically:
-(2 ^ (ADDRESS_BITS - 3)) * ENTRY_BITS) in bytes
+ (2 ^ (ADDRESS_BITS - 3)) * ENTRY_BITS) in bytes
where ADDRESS_BITS is how long the address is in bits and ENTRY_BITS
is how many entries the control file (and hence the while
cache) may hold.
-RISCOS values
-+++++++++++++
+## RISCOS values
By limiting the ENTRY_BITS size to 14 (16,384 entries) the entries
list is limited to 448kilobytes.
@@ -159,8 +189,7 @@ address) to happen roughly for every 2 ^ (ADDRESS_BITS / 2) = 2 ^ 9 =
512 objects stored. This roughly translates to a cache miss due to
collision every ten pages navigated to.
-Larger systems
-++++++++++++++
+## Larger systems
In general ENTRY_BITS set to 16 as this limits the store to 65536
objects which given the average size of an object at 8 kilobytes
@@ -170,11 +199,9 @@ For larger systems e.g. those using GTK frontend we would most likely
select ADDRESS_BITS as 22 resulting in a collision every 2048 objects
but the index using some 8 Megabytes
-Typical values
---------------
+## Typical values
-Example 1
-~~~~~~~~~
+### Example 1
For a store with 1034 objects generated from a random navigation of
pages linked from the about:welcome page.
@@ -185,8 +212,7 @@ majority of the storage is used to hold the URLs and headers.
Data total size is 9180475 bytes a mean of 8879 bytes 1648726 in the
largest 10 entries which if excluded gives 7355 bytes average size
-Example 2
-~~~~~~~~~
+### Example 2
355 pages navigated in 80 minutes from about:welcome page and a
handful of additional sites (google image search and reddit)
@@ -201,4 +227,4 @@ with one single 5,000,811 byte gif
data totals without gif is 28,127,020 mean 13,945
-[1] http://tools.ietf.org/html/rfc2616#section-13 \ No newline at end of file
+[1] http://tools.ietf.org/html/rfc2616#section-13
diff --git a/docs/unit-testing b/docs/unit-testing.md
index 49d82ed81..f7adc82c7 100644
--- a/docs/unit-testing
+++ b/docs/unit-testing.md
@@ -1,8 +1,9 @@
NetSurf Unit Testing
====================
-Overview
---------
+[TOC]
+
+# Overview
NetSurf has unit tests integrated in the test directory. These tests
use the check unit test framework for C [1].
@@ -13,8 +14,7 @@ programs although the framework does not madate this and some test
programs contain more than one suite.
-Execution
----------
+# Execution
The test programs are executed by using the standard "test" target
from the top level make invocation. The "coverage" target additionally
@@ -25,8 +25,7 @@ The check library must be installed to run the tests and the CI system
automatically executes all enabled tests and generates coverage
reports for each commit.
-Adding tests
-------------
+# Adding tests
The test/Makefile defines each indiviadual test program that should be
built and executed in the TESTS variable.
@@ -39,128 +38,128 @@ Each individual test program requires a main function which creates
one (or more) suites. The suites are added to a test runner and then
executed and the results reported.
-int main(int argc, char **argv)
-{
- int number_failed;
- SRunner *sr;
-
- sr = srunner_create(foo_suite_create());
- //srunner_add_suite(sr, bar_suite_create());
-
- srunner_run_all(sr, CK_ENV);
-
- number_failed = srunner_ntests_failed(sr);
- srunner_free(sr);
-
- return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
+ int main(int argc, char **argv)
+ {
+ int number_failed;
+ SRunner *sr;
+
+ sr = srunner_create(foo_suite_create());
+ //srunner_add_suite(sr, bar_suite_create());
+
+ srunner_run_all(sr, CK_ENV);
+
+ number_failed = srunner_ntests_failed(sr);
+ srunner_free(sr);
+
+ return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
+ }
Suite creation is done with a sub function to logically split suite
code into sub modules. Each suite has test cases added to it.
-Suite *foo_suite_create(void)
-{
- Suite *s;
- s = suite_create("foo");
-
- suite_add_tcase(s, baz_case_create());
- suite_add_tcase(s, qux_case_create());
-
- return s;
-}
+ Suite *foo_suite_create(void)
+ {
+ Suite *s;
+ s = suite_create("foo");
+
+ suite_add_tcase(s, baz_case_create());
+ suite_add_tcase(s, qux_case_create());
+
+ return s;
+ }
Test cases include the actual tests to be performed within each case.
-TCase *baz_case_create(void)
-{
- TCase *tc;
- tc = tcase_create("Baz");
-
- tcase_add_test(tc, xxyz_test);
- tcase_add_test(tc, zzyx_test);
-
- return tc;
-}
+ TCase *baz_case_create(void)
+ {
+ TCase *tc;
+ tc = tcase_create("Baz");
+
+ tcase_add_test(tc, xxyz_test);
+ tcase_add_test(tc, zzyx_test);
+
+ return tc;
+ }
A test case may optionally have a fixture which is code that is
executed before and after each test case. Unchecked fixtures are
executed once before the test process forks for each test whereas
checked fixtures are executed for each and every test.
-static void fixture_setup(void)
-{
-}
-
-static void fixture_teardown(void)
-{
-}
-
-TCase *qux_case_create(void)
-{
- TCase *tc;
-
- /* Matching entry tests */
- tc = tcase_create("Match");
-
- tcase_add_checked_fixture(tc,
- fixture_setup,
- fixture_teardown);
-
- tcase_add_test(tc, zzz_test);
-
- return tc;
-}
+ static void fixture_setup(void)
+ {
+ }
+
+ static void fixture_teardown(void)
+ {
+ }
+
+ TCase *qux_case_create(void)
+ {
+ TCase *tc;
+
+ /* Matching entry tests */
+ tc = tcase_create("Match");
+
+ tcase_add_checked_fixture(tc,
+ fixture_setup,
+ fixture_teardown);
+
+ tcase_add_test(tc, zzz_test);
+
+ return tc;
+ }
Additionally test cases can contain tests executed in a loop. The test
recives a single integer as a parameter named _i which iterates
between values specified in the case setup.
-TCase *baz_case_create(void)
-{
- TCase *tc;
- tc = tcase_create("Baz");
-
- tcase_add_loop_test(tc, looping_test, 0, 5);
-
- return tc;
-}
+ TCase *baz_case_create(void)
+ {
+ TCase *tc;
+ tc = tcase_create("Baz");
+
+ tcase_add_loop_test(tc, looping_test, 0, 5);
+
+ return tc;
+ }
It is also possible to create tests which will generate a signal. The
most commonly used of these is to check asserts in API calls.
-TCase *baz_case_create(void)
-{
- TCase *tc;
- tc = tcase_create("Baz");
-
- tcase_add_test_raise_signal(tc, assert_test, 6);
-
- return tc;
-}
+ TCase *baz_case_create(void)
+ {
+ TCase *tc;
+ tc = tcase_create("Baz");
+
+ tcase_add_test_raise_signal(tc, assert_test, 6);
+
+ return tc;
+ }
Actual test code is self contained in a function which uses the
ck_assert macros to test results. The check framework requires each
test to use the START_TEST and END_TEST macros when definig them.
-/**
- * url access leaf test
- */
-START_TEST(nsurl_access_leaf_test)
-{
- nserror err;
- nsurl *res_url;
- const struct test_triplets *tst = &access_tests[_i];
-
- /* not testing create, this should always succeed */
- err = nsurl_create(tst->test1, &res_url);
- ck_assert(err == NSERROR_OK);
-
- ck_assert_str_eq(nsurl_access_leaf(res_url), tst->res);
-
- nsurl_unref(res_url);
-}
-END_TEST
+ /**
+ * url access leaf test
+ */
+ START_TEST(nsurl_access_leaf_test)
+ {
+ nserror err;
+ nsurl *res_url;
+ const struct test_triplets *tst = &access_tests[_i];
+
+ /* not testing create, this should always succeed */
+ err = nsurl_create(tst->test1, &res_url);
+ ck_assert(err == NSERROR_OK);
+
+ ck_assert_str_eq(nsurl_access_leaf(res_url), tst->res);
+
+ nsurl_unref(res_url);
+ }
+ END_TEST
[1] https://libcheck.github.io/check/
diff --git a/docs/user-interface.md b/docs/user-interface.md
new file mode 100644
index 000000000..49ca7a1ed
--- /dev/null
+++ b/docs/user-interface.md
@@ -0,0 +1,61 @@
+User Interface
+==============
+
+[TOC]
+
+Netsurf is divided into a series of frontends which provide a user
+interface around common core functionality. Each frontend is a
+distinct implementation for a specific GUI toolkit.
+
+Because of this the user interface has different features in
+each frontend allowing the browser to be a native application.
+
+# Frontends
+
+As GUI toolkits are often applicable to a single Operating
+System (OS) some frontends are named for their OS instead of the
+toolkit e.g. RISC OS WIMP frontend is named riscos and the Windows
+win32 frontend is named windows.
+
+## amiga
+
+Frontend specific to the amiga
+
+## atari
+
+Frontend specific to the atari
+
+## beos
+
+Frontend specific to the Haiku OS
+
+## framebuffer
+
+There is a basic user guide for the [framebuffer](docs/using-framebuffer.md)
+
+## gtk
+
+Frontend that uses the GTK+2 or GTK+3 toolkit
+
+## monkey
+
+This is the internal unit test frontend.
+
+There is a basic user guide [monkey](docs/using-monkey.md)
+
+## riscos
+
+Frontend for the RISC OS WIMP toolkit.
+
+## windows
+
+Frontend which uses the Microsodt win32 GDI toolkit.
+
+# User configuration
+
+The behaviour of the browser can be changed from the defaults with a
+configuration file. The [core user options](docs/netsurf-options.md)
+of the browser are common to all versions and are augmented by each
+frontend in a specific manner.
+
+
diff --git a/docs/using-framebuffer.md b/docs/using-framebuffer.md
index 3af8f983f..98a100a1f 100644
--- a/docs/using-framebuffer.md
+++ b/docs/using-framebuffer.md
@@ -62,6 +62,56 @@ Overview
the GTK frontend is a vastly superior choice. The framebuffer
frontend will appear exceptionally limited on such capable systems.
+Running
+=======
+
+ The framebuffer frontend is executed with the nsfb command. This
+ command takes parameters to control the operation of the
+ browser. The 'Configuring' section describes the available options
+ in detail.
+
+ The selection of the display surface is controlled with the -f
+ switch, the available display surfaces can be shown by passing '?'
+ as the parameter.
+
+ $ ./nsfb -f ?
+ ./nsfb: Valid surface names are:
+ ./nsfb: ram
+ ./nsfb: sdl
+ ./nsfb: x
+ ./nsfb: vnc
+ ./nsfb: wld
+
+ The avilable surfaces are dependant on what was compiled into the
+ nsfb library.
+
+ Common issues
+ -------------
+
+ - The browser appears to "hang" with no output
+
+ This is often cause by the unintentianal selection of the debug
+ "ram" surface. In this case the browser is in fact operating but
+ the output is being rendered to a memory buffer. the solution is
+ to explictly select the intended surface using the -f switch
+
+ - The displayed browser interface has no visible icons
+
+ This is generally because the necessary resources are not availale
+ on the resource search path.
+
+ - There is no displayed text.
+
+ The font configuration is incorrect either it has been compiled
+ wrongly or the configured freetype font is not available
+
+ - The browser messages are "bad"
+
+ If the browser messages are being emited as unrecognisable short
+ text symbols or in the wrong language it is likely the Messages
+ file could not be located. This can be confirmed by looking for
+ the text "Message translations failed to load" in the verbose log
+ output (run the browser with the -v switch)
Configuring
===========
@@ -72,11 +122,11 @@ Configuring
for details.
As with any NetSurf frontend run-time configuration is read from a
- "Choices" file. This file is a simple key:value list and is located
- in "${HOME}/.netsurf/Choices".
+ "Choices" file. This file is a simple key:value list and by default
+ is located in "${HOME}/.netsurf/Choices".
- The standard values supported by the NetSurf core are documented in
- the Options document. In addition to these there are a number of
+ The standard [core user options](docs/netsurf-options.md) are
+ available. In addition to the core options there are a number of
values to control specific aspects of the framebuffer version.
Toolkit Options
diff --git a/docs/using-monkey.md b/docs/using-monkey.md
index d6082bda9..d031a77bb 100644
--- a/docs/using-monkey.md
+++ b/docs/using-monkey.md
@@ -5,6 +5,13 @@ This document provides usage instructions for the Monkey version of NetSurf.
Monkey NetSurf has been tested on Ubuntu and Debian.
+Automated testing
+-----------------
+
+If you want to run the monkey_driver.py or monkey-see-monkey-do tools then
+you will need python3 and pyyaml installed. The latter also needs internet
+access to test.netsurf-browser.org to acquire test data.
+
Overview
--------
@@ -49,7 +56,7 @@ browser windows are prefixed by `WINDOW`.
* `WINDOW`: Anything about browser windows in general
-* `DOWNLOAD_WINDOW`: Anything about the download window.
+* `DOWNLOAD`: Anything about the download window.
* `SSLCERT`: Anything about SSL certificates
@@ -105,6 +112,11 @@ Commands
Cause the given browser window to visit the given URL.
Optionally you can give a referrer URL to also use (simulating
a click in the browser on a link).
+ Minimally you can expect throbber stop response.
+
+* `WINDOW STOP` _%id%_
+
+ Cause a browser window to stop any in progress navigatoipn.
Minimally you can expect throbber, url etc responses.
* `WINDOW REDRAW` _%id%_ [_%num% %num% %num% %num%_]
@@ -118,11 +130,65 @@ Commands
Minimally you can expect redraw start/stop messages and you
can likely expect some number of `PLOT` results.
-* `WINDOW RELOAD` _%id%_
+* `WINDOW RELOAD` _%id%_ [all]
Cause a browser window to reload its current content.
Expect responses similar to a GO command.
+* `WINDOW EXEC WIN` _%id%_ _%str%_
+
+ Cause a browser window to execute some javascript. It won't
+ work if the window doesn't have a *finished* HTML content.
+
+ This will send a `JS` message back.
+
+* `WINDOW CLICK WIN` _%id%_ `X` _%num%_ `Y` _%num%_ `BUTTON` _%str%_ `KIND` _%str%_
+
+ Cause a browser window to experience a mouse click. The coordinates should
+ be in plot coordinates, so you can use redraw plot commands to find things
+ and then click on them. The `BUTTON` value should be one of `LEFT`
+ or `RIGHT`, and the `KIND` is `SINGLE`, `DOUBLE`, or `TRIPLE`.
+
+ This command will not output anything itself, it's expected only to do things
+ as a result of the click (e.g. navigating when clicking a link).
+
+### Login commands
+
+* `LOGIN USERNAME` _%id%_ _%str%_
+
+ Set the username for the login
+
+* `LOGIN PASSWORD` _%id%_ _%str%_
+
+ Set the password for the login
+
+* `LOGIN GO` _%id%_
+
+ Cause a login to proceed using the set credentials
+
+ This will send a `DESTROY` message back.
+
+* `LOGIN DESTROY` _%id%_
+
+ Cause a login to fail
+
+ This will send a `DESTROY` message back.
+
+
+### SSL certificate commands
+
+* `SSLCERT GO` _%id%_
+
+ Cause a ssl certificate to be accepted and fetch to proceed.
+
+ This will send a `DESTROY` message back.
+
+* `SSLCERT DESTROY` _%id%_
+
+ Cause a ssl certificate to be rejected and fetch to fail
+
+ This will send a `DESTROY` message back.
+
Responses
---------
@@ -302,44 +368,82 @@ Responses
The core wraps redraws in these messages. Thus `PLOT` responses can
be allocated to the appropriate window.
+* `WINDOW JS WIN` _%id%_ `RET` `TRUE`/`FALSE`
+
+ Here `FALSE` indicates that some issue prevented the injection of
+ the script.
+
+* `WINDOW CONSOLE_LOG WIN` _%id%_ `SOURCE` _%source%_ _%foldable%_ _%level%_ _%str%_
+
+ Here, _%source%_ will be one of: `client-input`, `scripting-error`, or
+ `scripting-console`. _%foldable%_ will be one of `FOLDABLE` or
+ `NOT-FOLDABLE`. _%level%_ will be one of `LOG`, `INFO`, `WARN`, or
+ `ERROR`. The terminal string will be the log message.
+
### Download window messages
-* `DOWNLOAD_WINDOW CREATE DWIN` _%id%_ `WIN` _%id%_
+* `DOWNLOAD CREATE DWIN` _%id%_ `WIN` _%id%_
The core asked Monkey to create a download window owned by the
given browser window.
-* `DOWNLOAD_WINDOW DATA DWIN` _%id%_ `SIZE` _%n%_ `DATA` _%str%_
+* `DOWNLOAD DATA DWIN` _%id%_ `SIZE` _%n%_ `DATA` _%str%_
The core asked Monkey to update the named download window with
the given byte size and data string.
-* `DOWNLOAD_WINDOW ERROR DWIN` _%id%_ `ERROR` _%str%_
+* `DOWNLOAD ERROR DWIN` _%id%_ `ERROR` _%str%_
The core asked Monkey to update the named download window with
the given error message.
-* `DOWNLOAD_WINDOW DONE DWIN` _%id%_
+* `DOWNLOAD DONE DWIN` _%id%_
The core asked Monkey to destroy the named download window.
### SSL Certificate messages
-* `SSLCERT VERIFY CERT` _%id%_ `URL` _%url%_
+* `SSLCERT VERIFY CWIN` _%id%_ `URL` _%url%_
The core asked Monkey to say whether or not a given SSL
certificate is OK.
-> TODO: Implement the rest of the SSL certificat verification behaviour
+* `LOGIN DESTROY CWIN` _%id%_
+
+ The given certificate window has been destroyed and should no longer be sent
+ commands otherwise undefined behaviour may ensue.
### 401 Login messages
-* `401LOGIN OPEN M4` _%id%_ `URL` _%url%_ `REALM` _%str%_
+* `LOGIN OPEN LWIN` _%id%_ `URL` _%url%_
+
+ The core asked Monkey to ask for identification for the given URL.
+
+ This will be *immediately* followed by:
+
+* `LOGIN USER LWIN` _%id%_ `STR` _%str%_
+
+ The given login window has a default username of the given string
+
+ This will be *immediately* followed by:
+
+* `LOGIN PASS LWIN` _%id%_ `STR` _%str%_
+
+ The given login window has a default password of the given string
+
+ This will be *immediately* followed by:
+
+* `LOGIN REALM LWIN` _%id%_ `STR` _%str%_
+
+ The given login window has a realm of the given string
+
+ Subsequent to this message, the user of monkey is at liberty to issue
+ `LOGIN` commands to control the response of the `401LOGIN` process.
- The core asked Monkey to ask for identification for the named
- realm at the given URL.
+* `LOGIN DESTROY LWIN` _%id%_
-> TODO: Implement support to control the 401LOGIN process
+ The given login window has been destroyed and should no longer be sent
+ commands otherwise undefined behaviour may ensue.
### Plotter messages