mirror of
https://github.com/netsurf-browser/netsurf
synced 2024-11-26 00:09:41 +03:00
Merge Vincent's Javascript work onto master
This commit is contained in:
commit
180f7ff42c
@ -29,13 +29,8 @@ S_DESKTOP := cookies.c history_global_core.c hotlist.c knockout.c \
|
||||
scrollbar.c sslcert.c textarea.c thumbnail.c tree.c \
|
||||
tree_url_node.c version.c
|
||||
|
||||
# Javascript sources
|
||||
ifeq ($(NETSURF_USE_JS),YES)
|
||||
S_JSAPI = window.c navigator.c console.c htmldocument.c htmlelement.c
|
||||
S_JAVASCRIPT += content.c jsapi.c $(addprefix jsapi/,$(S_JSAPI))
|
||||
else
|
||||
S_JAVASCRIPT += none.c
|
||||
endif
|
||||
# Javascript source
|
||||
include Makefile.sources.javascript
|
||||
|
||||
# S_COMMON are sources common to all builds
|
||||
S_COMMON := $(addprefix content/,$(S_CONTENT)) \
|
||||
@ -45,7 +40,8 @@ S_COMMON := $(addprefix content/,$(S_CONTENT)) \
|
||||
$(addprefix utils/,$(S_UTILS)) \
|
||||
$(addprefix utils/http/,$(S_HTTP)) \
|
||||
$(addprefix desktop/,$(S_DESKTOP)) \
|
||||
$(addprefix javascript/,$(S_JAVASCRIPT))
|
||||
$(addprefix javascript/,$(S_JAVASCRIPT)) \
|
||||
$(S_JSAPI_BINDING)
|
||||
|
||||
# S_IMAGE are sources related to image management
|
||||
S_IMAGE_YES := image.c image_cache.c
|
||||
|
53
Makefile.sources.javascript
Normal file
53
Makefile.sources.javascript
Normal file
@ -0,0 +1,53 @@
|
||||
#
|
||||
# NetSurf javascript source file inclusion
|
||||
#
|
||||
# Included by Makefile.sources
|
||||
#
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# JSAPI binding
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
S_JSAPI_BINDING:=
|
||||
|
||||
JSAPI_BINDING_htmldocument := javascript/jsapi/htmldocument.bnd
|
||||
JSAPI_BINDING_htmlelement := javascript/jsapi/htmlelement.bnd
|
||||
JSAPI_BINDING_window := javascript/jsapi/window.bnd
|
||||
JSAPI_BINDING_navigator := javascript/jsapi/navigator.bnd
|
||||
JSAPI_BINDING_console := javascript/jsapi/console.bnd
|
||||
JSAPI_BINDING_location := javascript/jsapi/location.bnd
|
||||
|
||||
# 1: input file
|
||||
# 2: output file
|
||||
# 3: binding name
|
||||
define convert_jsapi_binding
|
||||
|
||||
S_JSAPI_BINDING += $(2)
|
||||
|
||||
$(2): $(1)
|
||||
$$(VQ)echo " GENBIND: $(1)"
|
||||
$(Q)nsgenbind -I javascript/WebIDL/ -o $(2) $(1)
|
||||
|
||||
endef
|
||||
|
||||
# Javascript sources
|
||||
ifeq ($(NETSURF_USE_JS),YES)
|
||||
WANT_JS_SOURCE := YES
|
||||
endif
|
||||
|
||||
ifeq ($(NETSURF_USE_MOZJS),YES)
|
||||
WANT_JS_SOURCE := YES
|
||||
endif
|
||||
|
||||
ifeq ($(WANT_JS_SOURCE),YES)
|
||||
|
||||
S_JSAPI =
|
||||
|
||||
S_JAVASCRIPT += content.c jsapi.c $(addprefix jsapi/,$(S_JSAPI))
|
||||
|
||||
$(eval $(foreach V,$(filter JSAPI_BINDING_%,$(.VARIABLES)),$(call convert_jsapi_binding,$($(V)),$(OBJROOT)/$(patsubst JSAPI_BINDING_%,%,$(V)).c,$(patsubst JSAPI_BINDING_%,%,$(V))_jsapi)))
|
||||
|
||||
|
||||
else
|
||||
S_JAVASCRIPT += none.c
|
||||
endif
|
@ -65,10 +65,6 @@ else
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(NETSURF_USE_MOZJS),YES)
|
||||
NETSURF_USE_JS:=YES
|
||||
endif
|
||||
|
||||
EXETARGET := NetSurf
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
|
@ -35,10 +35,6 @@ $(eval $(call pkg_config_find_and_add,MOZJS,mozjs185,JavaScript))
|
||||
$(eval $(call pkg_config_find_and_add,JS,mozilla-js,JavaScript))
|
||||
$(eval $(call pkg_config_find_and_add,VIDEO,gstreamer-0.10,Video))
|
||||
|
||||
ifeq ($(NETSURF_USE_MOZJS),YES)
|
||||
NETSURF_USE_JS:=YES
|
||||
endif
|
||||
|
||||
# GTK and GLIB flags to disable depricated usage
|
||||
GTKDEPFLAGS := -DG_DISABLE_SINGLE_INCLUDES \
|
||||
-DG_DISABLE_DEPRECATED \
|
||||
|
38
javascript/WebIDL/Makefile
Normal file
38
javascript/WebIDL/Makefile
Normal file
@ -0,0 +1,38 @@
|
||||
#!/bin/make
|
||||
#
|
||||
# Create the WebIDL for core DOM and HTML spec directly from
|
||||
# downloaded specifications. The resulting IDL is pretty close but
|
||||
# carries the example text etc. and should be manually cleaned up and
|
||||
# tagged with the retrival date and source URL
|
||||
#
|
||||
# needs debin packages: curl w3m tidy html-xml-utils
|
||||
#
|
||||
# Copyright 2012 Vincent Sanders
|
||||
# MIT licenced
|
||||
|
||||
.PHONY:all clean
|
||||
|
||||
all: dom.idl html.idl
|
||||
|
||||
.INTERMEDIATE:dom-spec.html dom-spec.xml dom-idl.html html-spec.html html-spec.xml html-idl.html
|
||||
|
||||
|
||||
dom-spec.html:
|
||||
curl -s http://dom.spec.whatwg.org/ -o $@
|
||||
|
||||
html-spec.html:
|
||||
curl -s http://www.whatwg.org/specs/web-apps/current-work/ -o $@
|
||||
|
||||
%-spec.xml: %-spec.html
|
||||
-tidy -q -f $@.errors --new-blocklevel-tags header,hgroup,figure -o $@ -asxml $<
|
||||
|
||||
%-idl.html: %-spec.xml
|
||||
hxselect pre.idl < $< > $@
|
||||
|
||||
%.idl: %-idl.html
|
||||
cat $< | w3m -dump -T text/html >$@
|
||||
|
||||
|
||||
|
||||
clean:
|
||||
${RM} dom.idl html.idl dom-spec.html dom-spec.xml dom-idl.html html-spec.html html-spec.xml html-idl.html
|
20
javascript/WebIDL/console.idl
Normal file
20
javascript/WebIDL/console.idl
Normal file
@ -0,0 +1,20 @@
|
||||
// de facto set of features for console object
|
||||
// https://developer.mozilla.org/en-US/docs/DOM/console
|
||||
// http://msdn.microsoft.com/en-us/library/dd565625%28v=vs.85%29.aspx#consolelogging
|
||||
// 31st October
|
||||
// Yay for non-standard standards
|
||||
|
||||
interface Console {
|
||||
void debug(DOMString msg, Substitition... subst);
|
||||
void dir(JSObject object);
|
||||
void error(DOMString msg, Substitition... subst);
|
||||
void group();
|
||||
void groupCollapsed();
|
||||
void groupEnd();
|
||||
void info(DOMString msg, Substitition... subst);
|
||||
void log(DOMString msg, Substitition... subst);
|
||||
void time(DOMString timerName);
|
||||
void timeEnd(DOMString timerName);
|
||||
void trace();
|
||||
void warn(DOMString msg, Substitition... subst);
|
||||
};
|
446
javascript/WebIDL/dom.idl
Normal file
446
javascript/WebIDL/dom.idl
Normal file
@ -0,0 +1,446 @@
|
||||
// DOM core WebIDL
|
||||
// retrived from http://dom.spec.whatwg.org/
|
||||
// 23rd October 2012
|
||||
|
||||
|
||||
|
||||
exception DOMException {
|
||||
const unsigned short INDEX_SIZE_ERR = 1;
|
||||
const unsigned short DOMSTRING_SIZE_ERR = 2; // historical
|
||||
const unsigned short HIERARCHY_REQUEST_ERR = 3;
|
||||
const unsigned short WRONG_DOCUMENT_ERR = 4;
|
||||
const unsigned short INVALID_CHARACTER_ERR = 5;
|
||||
const unsigned short NO_DATA_ALLOWED_ERR = 6; // historical
|
||||
const unsigned short NO_MODIFICATION_ALLOWED_ERR = 7;
|
||||
const unsigned short NOT_FOUND_ERR = 8;
|
||||
const unsigned short NOT_SUPPORTED_ERR = 9;
|
||||
const unsigned short INUSE_ATTRIBUTE_ERR = 10; // historical
|
||||
const unsigned short INVALID_STATE_ERR = 11;
|
||||
const unsigned short SYNTAX_ERR = 12;
|
||||
const unsigned short INVALID_MODIFICATION_ERR = 13;
|
||||
const unsigned short NAMESPACE_ERR = 14;
|
||||
const unsigned short INVALID_ACCESS_ERR = 15;
|
||||
const unsigned short VALIDATION_ERR = 16; // historical
|
||||
const unsigned short TYPE_MISMATCH_ERR = 17;
|
||||
const unsigned short SECURITY_ERR = 18;
|
||||
const unsigned short NETWORK_ERR = 19;
|
||||
const unsigned short ABORT_ERR = 20;
|
||||
const unsigned short URL_MISMATCH_ERR = 21;
|
||||
const unsigned short QUOTA_EXCEEDED_ERR = 22;
|
||||
const unsigned short TIMEOUT_ERR = 23;
|
||||
const unsigned short INVALID_NODE_TYPE_ERR = 24;
|
||||
const unsigned short DATA_CLONE_ERR = 25;
|
||||
unsigned short code;
|
||||
};
|
||||
|
||||
interface DOMError {
|
||||
readonly attribute DOMString name;
|
||||
};
|
||||
|
||||
[Constructor(DOMString type, optional EventInit eventInitDict)]
|
||||
interface Event {
|
||||
readonly attribute DOMString type;
|
||||
readonly attribute EventTarget? target;
|
||||
readonly attribute EventTarget? currentTarget;
|
||||
|
||||
const unsigned short NONE = 0;
|
||||
const unsigned short CAPTURING_PHASE = 1;
|
||||
const unsigned short AT_TARGET = 2;
|
||||
const unsigned short BUBBLING_PHASE = 3;
|
||||
readonly attribute unsigned short eventPhase;
|
||||
|
||||
void stopPropagation();
|
||||
void stopImmediatePropagation();
|
||||
|
||||
readonly attribute boolean bubbles;
|
||||
readonly attribute boolean cancelable;
|
||||
void preventDefault();
|
||||
readonly attribute boolean defaultPrevented;
|
||||
|
||||
readonly attribute boolean isTrusted;
|
||||
readonly attribute DOMTimeStamp timeStamp;
|
||||
|
||||
void initEvent(DOMString type, boolean bubbles, boolean cancelable);
|
||||
};
|
||||
|
||||
dictionary EventInit {
|
||||
boolean bubbles;
|
||||
boolean cancelable;
|
||||
};
|
||||
|
||||
[Constructor(DOMString type, optional CustomEventInit eventInitDict)]
|
||||
interface CustomEvent : Event {
|
||||
readonly attribute any detail;
|
||||
};
|
||||
|
||||
dictionary CustomEventInit : EventInit {
|
||||
any detail;
|
||||
};
|
||||
|
||||
interface EventTarget {
|
||||
void addEventListener(DOMString type, EventListener? callback, optional boolean capture = false);
|
||||
void removeEventListener(DOMString type, EventListener? callback, optional boolean capture = false);
|
||||
boolean dispatchEvent(Event event);
|
||||
};
|
||||
|
||||
callback interface EventListener {
|
||||
void handleEvent(Event event);
|
||||
};
|
||||
|
||||
[Constructor(MutationCallback callback)]
|
||||
interface MutationObserver {
|
||||
void observe(Node target, MutationObserverInit options);
|
||||
void disconnect();
|
||||
sequence<MutationRecord> takeRecords();
|
||||
};
|
||||
|
||||
callback MutationCallback = void (sequence<MutationRecord> mutations, MutationObserver observer);
|
||||
|
||||
dictionary MutationObserverInit {
|
||||
boolean childList;
|
||||
boolean attributes;
|
||||
boolean characterData;
|
||||
boolean subtree;
|
||||
boolean attributeOldValue;
|
||||
boolean characterDataOldValue;
|
||||
sequence<DOMString> attributeFilter;
|
||||
};
|
||||
|
||||
interface MutationRecord {
|
||||
readonly attribute DOMString type;
|
||||
readonly attribute Node target;
|
||||
readonly attribute NodeList addedNodes;
|
||||
readonly attribute NodeList removedNodes;
|
||||
readonly attribute Node? previousSibling;
|
||||
readonly attribute Node? nextSibling;
|
||||
readonly attribute DOMString? attributeName;
|
||||
readonly attribute DOMString? attributeNamespace;
|
||||
readonly attribute DOMString? oldValue;
|
||||
};
|
||||
|
||||
interface Node : EventTarget {
|
||||
const unsigned short ELEMENT_NODE = 1;
|
||||
const unsigned short ATTRIBUTE_NODE = 2; // historical
|
||||
const unsigned short TEXT_NODE = 3;
|
||||
const unsigned short CDATA_SECTION_NODE = 4; // historical
|
||||
const unsigned short ENTITY_REFERENCE_NODE = 5; // historical
|
||||
const unsigned short ENTITY_NODE = 6; // historical
|
||||
const unsigned short PROCESSING_INSTRUCTION_NODE = 7;
|
||||
const unsigned short COMMENT_NODE = 8;
|
||||
const unsigned short DOCUMENT_NODE = 9;
|
||||
const unsigned short DOCUMENT_TYPE_NODE = 10;
|
||||
const unsigned short DOCUMENT_FRAGMENT_NODE = 11;
|
||||
const unsigned short NOTATION_NODE = 12; // historical
|
||||
readonly attribute unsigned short nodeType;
|
||||
readonly attribute DOMString nodeName;
|
||||
|
||||
readonly attribute DOMString? baseURI;
|
||||
|
||||
readonly attribute Document? ownerDocument;
|
||||
readonly attribute Node? parentNode;
|
||||
readonly attribute Element? parentElement;
|
||||
boolean hasChildNodes();
|
||||
readonly attribute NodeList childNodes;
|
||||
readonly attribute Node? firstChild;
|
||||
readonly attribute Node? lastChild;
|
||||
readonly attribute Node? previousSibling;
|
||||
readonly attribute Node? nextSibling;
|
||||
|
||||
attribute DOMString? nodeValue;
|
||||
attribute DOMString? textContent;
|
||||
Node insertBefore(Node node, Node? child);
|
||||
Node appendChild(Node node);
|
||||
Node replaceChild(Node node, Node child);
|
||||
Node removeChild(Node child);
|
||||
void normalize();
|
||||
|
||||
|
||||
Node cloneNode(optional boolean deep = true);
|
||||
boolean isEqualNode(Node? node);
|
||||
|
||||
const unsigned short DOCUMENT_POSITION_DISCONNECTED = 0x01;
|
||||
const unsigned short DOCUMENT_POSITION_PRECEDING = 0x02;
|
||||
const unsigned short DOCUMENT_POSITION_FOLLOWING = 0x04;
|
||||
const unsigned short DOCUMENT_POSITION_CONTAINS = 0x08;
|
||||
const unsigned short DOCUMENT_POSITION_CONTAINED_BY = 0x10;
|
||||
const unsigned short DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 0x20; // historical
|
||||
unsigned short compareDocumentPosition(Node other);
|
||||
boolean contains(Node? other);
|
||||
|
||||
DOMString? lookupPrefix(DOMString? namespace);
|
||||
DOMString? lookupNamespaceURI(DOMString? prefix);
|
||||
boolean isDefaultNamespace(DOMString? namespace);
|
||||
};
|
||||
|
||||
[Constructor]
|
||||
interface Document : Node {
|
||||
readonly attribute DOMImplementation implementation;
|
||||
readonly attribute DOMString URL;
|
||||
readonly attribute DOMString documentURI;
|
||||
readonly attribute DOMString compatMode;
|
||||
readonly attribute DOMString characterSet;
|
||||
readonly attribute DOMString contentType;
|
||||
|
||||
readonly attribute DocumentType? doctype;
|
||||
readonly attribute Element? documentElement;
|
||||
HTMLCollection getElementsByTagName(DOMString localName);
|
||||
HTMLCollection getElementsByTagNameNS(DOMString? namespace, DOMString localName);
|
||||
HTMLCollection getElementsByClassName(DOMString classNames);
|
||||
Element? getElementById(DOMString elementId);
|
||||
|
||||
Element createElement(DOMString localName);
|
||||
Element createElementNS(DOMString? namespace, DOMString qualifiedName);
|
||||
DocumentFragment createDocumentFragment();
|
||||
Text createTextNode(DOMString data);
|
||||
Comment createComment(DOMString data);
|
||||
ProcessingInstruction createProcessingInstruction(DOMString target, DOMString data);
|
||||
|
||||
Node importNode(Node node, optional boolean deep = true);
|
||||
Node adoptNode(Node node);
|
||||
|
||||
Event createEvent(DOMString interface);
|
||||
|
||||
Range createRange();
|
||||
|
||||
// NodeFilter.SHOW_ALL = 0xFFFFFFFF
|
||||
NodeIterator createNodeIterator(Node root, optional unsigned long whatToShow = 0xFFFFFFFF, optional NodeFilter? filter = null);
|
||||
TreeWalker createTreeWalker(Node root, optional unsigned long whatToShow = 0xFFFFFFFF, optional NodeFilter? filter = null);
|
||||
|
||||
// NEW
|
||||
void prepend((Node or DOMString)... nodes);
|
||||
void append((Node or DOMString)... nodes);
|
||||
};
|
||||
|
||||
interface XMLDocument : Document {};
|
||||
|
||||
interface DOMImplementation {
|
||||
DocumentType createDocumentType(DOMString qualifiedName, DOMString publicId, DOMString systemId);
|
||||
XMLDocument createDocument(DOMString? namespace, [TreatNullAs=EmptyString] DOMString qualifiedName, DocumentType? doctype);
|
||||
Document createHTMLDocument(optional DOMString title);
|
||||
|
||||
boolean hasFeature(DOMString feature, [TreatNullAs=EmptyString] DOMString version);
|
||||
};
|
||||
|
||||
interface DocumentFragment : Node {
|
||||
// NEW
|
||||
void prepend((Node or DOMString)... nodes);
|
||||
void append((Node or DOMString)... nodes);
|
||||
};
|
||||
|
||||
interface DocumentType : Node {
|
||||
readonly attribute DOMString name;
|
||||
readonly attribute DOMString publicId;
|
||||
readonly attribute DOMString systemId;
|
||||
|
||||
// NEW
|
||||
void before((Node or DOMString)... nodes);
|
||||
void after((Node or DOMString)... nodes);
|
||||
void replace((Node or DOMString)... nodes);
|
||||
void remove();
|
||||
};
|
||||
|
||||
interface Element : Node {
|
||||
readonly attribute DOMString? namespaceURI;
|
||||
readonly attribute DOMString? prefix;
|
||||
readonly attribute DOMString localName;
|
||||
readonly attribute DOMString tagName;
|
||||
|
||||
attribute DOMString id;
|
||||
attribute DOMString className;
|
||||
readonly attribute DOMTokenList classList;
|
||||
|
||||
readonly attribute Attr[] attributes;
|
||||
DOMString? getAttribute(DOMString name);
|
||||
DOMString? getAttributeNS(DOMString? namespace, DOMString localName);
|
||||
void setAttribute(DOMString name, DOMString value);
|
||||
void setAttributeNS(DOMString? namespace, DOMString name, DOMString value);
|
||||
void removeAttribute(DOMString name);
|
||||
void removeAttributeNS(DOMString? namespace, DOMString localName);
|
||||
boolean hasAttribute(DOMString name);
|
||||
boolean hasAttributeNS(DOMString? namespace, DOMString localName);
|
||||
|
||||
HTMLCollection getElementsByTagName(DOMString localName);
|
||||
HTMLCollection getElementsByTagNameNS(DOMString? namespace, DOMString localName);
|
||||
HTMLCollection getElementsByClassName(DOMString classNames);
|
||||
|
||||
readonly attribute HTMLCollection children;
|
||||
readonly attribute Element? firstElementChild;
|
||||
readonly attribute Element? lastElementChild;
|
||||
readonly attribute Element? previousElementSibling;
|
||||
readonly attribute Element? nextElementSibling;
|
||||
readonly attribute unsigned long childElementCount;
|
||||
|
||||
|
||||
// NEW
|
||||
void prepend((Node or DOMString)... nodes);
|
||||
void append((Node or DOMString)... nodes);
|
||||
void before((Node or DOMString)... nodes);
|
||||
void after((Node or DOMString)... nodes);
|
||||
void replace((Node or DOMString)... nodes);
|
||||
void remove();
|
||||
};
|
||||
|
||||
interface Attr {
|
||||
readonly attribute DOMString name;
|
||||
attribute DOMString value;
|
||||
|
||||
readonly attribute DOMString? namespaceURI;
|
||||
readonly attribute DOMString? prefix;
|
||||
readonly attribute DOMString localName;
|
||||
};
|
||||
|
||||
interface CharacterData : Node {
|
||||
[TreatNullAs=EmptyString] attribute DOMString data;
|
||||
readonly attribute unsigned long length;
|
||||
DOMString substringData(unsigned long offset, unsigned long count);
|
||||
void appendData(DOMString data);
|
||||
void insertData(unsigned long offset, DOMString data);
|
||||
void deleteData(unsigned long offset, unsigned long count);
|
||||
void replaceData(unsigned long offset, unsigned long count, DOMString data);
|
||||
|
||||
// NEW
|
||||
void before((Node or DOMString)... nodes);
|
||||
void after((Node or DOMString)... nodes);
|
||||
void replace((Node or DOMString)... nodes);
|
||||
void remove();
|
||||
};
|
||||
|
||||
interface Text : CharacterData {
|
||||
Text splitText(unsigned long offset);
|
||||
readonly attribute DOMString wholeText;
|
||||
};
|
||||
|
||||
interface ProcessingInstruction : CharacterData {
|
||||
readonly attribute DOMString target;
|
||||
};
|
||||
|
||||
interface Comment : CharacterData {
|
||||
};
|
||||
|
||||
interface Range {
|
||||
readonly attribute Node startContainer;
|
||||
readonly attribute unsigned long startOffset;
|
||||
readonly attribute Node endContainer;
|
||||
readonly attribute unsigned long endOffset;
|
||||
readonly attribute boolean collapsed;
|
||||
readonly attribute Node commonAncestorContainer;
|
||||
|
||||
void setStart(Node refNode, unsigned long offset);
|
||||
void setEnd(Node refNode, unsigned long offset);
|
||||
void setStartBefore(Node refNode);
|
||||
void setStartAfter(Node refNode);
|
||||
void setEndBefore(Node refNode);
|
||||
void setEndAfter(Node refNode);
|
||||
void collapse(boolean toStart);
|
||||
void selectNode(Node refNode);
|
||||
void selectNodeContents(Node refNode);
|
||||
|
||||
const unsigned short START_TO_START = 0;
|
||||
const unsigned short START_TO_END = 1;
|
||||
const unsigned short END_TO_END = 2;
|
||||
const unsigned short END_TO_START = 3;
|
||||
short compareBoundaryPoints(unsigned short how, Range sourceRange);
|
||||
|
||||
void deleteContents();
|
||||
DocumentFragment extractContents();
|
||||
DocumentFragment cloneContents();
|
||||
void insertNode(Node node);
|
||||
void surroundContents(Node newParent);
|
||||
|
||||
Range cloneRange();
|
||||
void detach();
|
||||
|
||||
boolean isPointInRange(Node node, unsigned long offset);
|
||||
short comparePoint(Node node, unsigned long offset);
|
||||
|
||||
boolean intersectsNode(Node node);
|
||||
|
||||
stringifier;
|
||||
};
|
||||
|
||||
interface NodeIterator {
|
||||
readonly attribute Node root;
|
||||
readonly attribute Node? referenceNode;
|
||||
readonly attribute boolean pointerBeforeReferenceNode;
|
||||
readonly attribute unsigned long whatToShow;
|
||||
readonly attribute NodeFilter? filter;
|
||||
|
||||
Node? nextNode();
|
||||
Node? previousNode();
|
||||
|
||||
void detach();
|
||||
};
|
||||
|
||||
interface TreeWalker {
|
||||
readonly attribute Node root;
|
||||
readonly attribute unsigned long whatToShow;
|
||||
readonly attribute NodeFilter? filter;
|
||||
|
||||
attribute Node currentNode;
|
||||
|
||||
Node? parentNode();
|
||||
Node? firstChild();
|
||||
Node? lastChild();
|
||||
Node? previousSibling();
|
||||
Node? nextSibling();
|
||||
Node? previousNode();
|
||||
Node? nextNode();
|
||||
};
|
||||
|
||||
callback interface NodeFilter {
|
||||
// Constants for acceptNode()
|
||||
const unsigned short FILTER_ACCEPT = 1;
|
||||
const unsigned short FILTER_REJECT = 2;
|
||||
const unsigned short FILTER_SKIP = 3;
|
||||
|
||||
// Constants for whatToShow
|
||||
const unsigned long SHOW_ALL = 0xFFFFFFFF;
|
||||
const unsigned long SHOW_ELEMENT = 0x1;
|
||||
const unsigned long SHOW_ATTRIBUTE = 0x2; // historical
|
||||
const unsigned long SHOW_TEXT = 0x4;
|
||||
const unsigned long SHOW_CDATA_SECTION = 0x8; // historical
|
||||
const unsigned long SHOW_ENTITY_REFERENCE = 0x10; // historical
|
||||
const unsigned long SHOW_ENTITY = 0x20; // historical
|
||||
const unsigned long SHOW_PROCESSING_INSTRUCTION = 0x40;
|
||||
const unsigned long SHOW_COMMENT = 0x80;
|
||||
const unsigned long SHOW_DOCUMENT = 0x100;
|
||||
const unsigned long SHOW_DOCUMENT_TYPE = 0x200;
|
||||
const unsigned long SHOW_DOCUMENT_FRAGMENT = 0x400;
|
||||
const unsigned long SHOW_NOTATION = 0x800; // historical
|
||||
|
||||
unsigned short acceptNode(Node node);
|
||||
};
|
||||
|
||||
[ArrayClass]
|
||||
interface NodeList {
|
||||
getter Node? item(unsigned long index);
|
||||
readonly attribute unsigned long length;
|
||||
};
|
||||
|
||||
interface HTMLCollection {
|
||||
readonly attribute unsigned long length;
|
||||
getter Element? item(unsigned long index);
|
||||
getter object? namedItem(DOMString name); // only returns Element
|
||||
};
|
||||
|
||||
[NoInterfaceObject]
|
||||
interface DOMStringList {
|
||||
readonly attribute unsigned long length;
|
||||
getter DOMString? item(unsigned long index);
|
||||
boolean contains(DOMString string);
|
||||
};
|
||||
|
||||
interface DOMTokenList {
|
||||
readonly attribute unsigned long length;
|
||||
getter DOMString? item(unsigned long index);
|
||||
boolean contains(DOMString token);
|
||||
void add(DOMString... tokens);
|
||||
void remove(DOMString... tokens);
|
||||
boolean toggle(DOMString token, optional boolean force);
|
||||
stringifier;
|
||||
};
|
||||
|
||||
interface DOMSettableTokenList : DOMTokenList {
|
||||
attribute DOMString value;
|
||||
};
|
||||
|
2194
javascript/WebIDL/html.idl
Normal file
2194
javascript/WebIDL/html.idl
Normal file
File diff suppressed because it is too large
Load Diff
@ -17,6 +17,7 @@
|
||||
*/
|
||||
|
||||
#include "javascript/jsapi.h"
|
||||
#include "javascript/jsapi/binding.h"
|
||||
|
||||
#include "content/content.h"
|
||||
#include "javascript/content.h"
|
||||
@ -90,45 +91,33 @@ void js_destroycontext(jscontext *ctx)
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** Create new compartment to run scripts within
|
||||
*
|
||||
* This performs the following actions
|
||||
* 1. constructs a new global object by initialising a window class
|
||||
* 2. Instantiate the global a window object
|
||||
*/
|
||||
jsobject *js_newcompartment(jscontext *ctx, void *win_priv, void *doc_priv)
|
||||
{
|
||||
JSContext *cx = (JSContext *)ctx;
|
||||
JSObject *window_obj = NULL;
|
||||
JSObject *document_obj;
|
||||
JSObject *navigator_obj;
|
||||
JSObject *console_obj;
|
||||
|
||||
if (cx == NULL)
|
||||
goto js_newcompartment_fail;
|
||||
|
||||
/* create the window object as the global */
|
||||
window_obj = jsapi_new_window(cx, NULL, win_priv);
|
||||
if (window_obj == NULL)
|
||||
goto js_newcompartment_fail;
|
||||
|
||||
/* attach the subclasses off the window global */
|
||||
document_obj = jsapi_new_document(cx, window_obj, doc_priv);
|
||||
if (document_obj == NULL)
|
||||
goto js_newcompartment_fail;
|
||||
|
||||
navigator_obj = jsapi_new_navigator(cx, window_obj);
|
||||
if (navigator_obj == NULL)
|
||||
goto js_newcompartment_fail;
|
||||
|
||||
/* @todo forms, history, location */
|
||||
|
||||
console_obj = jsapi_new_console(cx, window_obj);
|
||||
if (console_obj == NULL)
|
||||
goto js_newcompartment_fail;
|
||||
|
||||
return (jsobject *)window_obj;
|
||||
|
||||
js_newcompartment_fail:
|
||||
JSObject *window_proto;
|
||||
JSObject *window;
|
||||
|
||||
if (cx == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
window_proto = jsapi_InitClass_Window(cx, NULL);
|
||||
if (window_proto == NULL) {
|
||||
LOG(("Unable to initialise window class"));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
window = jsapi_new_Window(cx, window_proto, NULL, win_priv, doc_priv);
|
||||
|
||||
return (jsobject *)window;
|
||||
}
|
||||
|
||||
bool js_exec(jscontext *ctx, const char *txt, size_t txtlen)
|
||||
{
|
||||
JSContext *cx = (JSContext *)ctx;
|
||||
|
@ -17,7 +17,7 @@
|
||||
*/
|
||||
|
||||
/** \file
|
||||
* spidermonkey jsapi bindings and compatability glue.
|
||||
* spidermonkey jsapi compatability glue.
|
||||
*/
|
||||
|
||||
#ifndef _NETSURF_JAVASCRIPT_JSAPI_H_
|
||||
@ -29,19 +29,17 @@
|
||||
#include "mozjs/jsapi.h"
|
||||
#endif
|
||||
|
||||
#include "render/html_internal.h"
|
||||
|
||||
#if JS_VERSION <= 180
|
||||
|
||||
#include <string.h>
|
||||
|
||||
/* *CAUTION* these macros introduce and use jsthis and jsrval
|
||||
/* *CAUTION* these macros introduce and use jsapi_this and jsapi_rval
|
||||
* parameters, native function code should not conflict with these
|
||||
*/
|
||||
|
||||
/* five parameter jsapi native call */
|
||||
#define JSAPI_NATIVE(name, cx, argc, vp) \
|
||||
jsapi_native_##name(cx, JSObject *jsthis, argc, vp, jsval *jsrval)
|
||||
jsapi_native_##name(cx, JSObject *jsapi_this, argc, vp, jsval *jsapi_rval)
|
||||
|
||||
/* five parameter function descriptor */
|
||||
#define JSAPI_FS(name, nargs, flags) \
|
||||
@ -51,14 +49,17 @@
|
||||
#define JSAPI_FS_END JS_FS_END
|
||||
|
||||
/* return value */
|
||||
#define JSAPI_RVAL(cx, vp) JS_RVAL(cx, jsrval)
|
||||
#define JSAPI_RVAL(cx, vp) JS_RVAL(cx, jsapi_rval)
|
||||
|
||||
/* return value setter */
|
||||
#define JSAPI_SET_RVAL(cx, vp, v) JS_SET_RVAL(cx, jsrval, v)
|
||||
#define JSAPI_SET_RVAL(cx, vp, v) JS_SET_RVAL(cx, jsapi_rval, v)
|
||||
|
||||
/* arguments */
|
||||
#define JSAPI_ARGV(cx, vp) (vp)
|
||||
|
||||
/* The object instance in a native call */
|
||||
#define JSAPI_THIS_OBJECT(cx,vp) jsapi_this
|
||||
|
||||
/* proprty native calls */
|
||||
#define JSAPI_PROPERTYGET(name, cx, obj, vp) \
|
||||
jsapi_property_##name##_get(cx, obj, jsval id, vp)
|
||||
@ -93,8 +94,10 @@ JS_NewCompartmentAndGlobalObject(JSContext *cx,
|
||||
outchar = JS_GetStringBytes(injsstring); \
|
||||
outlen = strlen(outchar)
|
||||
|
||||
|
||||
#else /* #if JS_VERSION <= 180 */
|
||||
|
||||
|
||||
/* three parameter jsapi native call */
|
||||
#define JSAPI_NATIVE(name, cx, argc, vp) jsapi_native_##name(cx, argc, vp)
|
||||
|
||||
@ -114,6 +117,9 @@ JS_NewCompartmentAndGlobalObject(JSContext *cx,
|
||||
/* arguments */
|
||||
#define JSAPI_ARGV(cx, vp) JS_ARGV(cx,vp)
|
||||
|
||||
/* The object instance in a native call */
|
||||
#define JSAPI_THIS_OBJECT(cx,vp) JS_THIS_OBJECT(cx,vp)
|
||||
|
||||
/* proprty native calls */
|
||||
#define JSAPI_PROPERTYGET(name, cx, obj, vp) \
|
||||
jsapi_property_##name##_get(cx, obj, jsid id, vp)
|
||||
@ -149,47 +155,5 @@ JS_NewCompartmentAndGlobalObject(JSContext *cx,
|
||||
|
||||
#endif
|
||||
|
||||
/** Create a new javascript window object
|
||||
*
|
||||
* @param cx The javascript context.
|
||||
* @param parent The parent object or NULL for new global
|
||||
* @param win_priv The private context to set on the object
|
||||
* @return new javascript object or NULL on error
|
||||
*/
|
||||
JSObject *jsapi_new_window(JSContext *cx, JSObject *parent, void *win_priv);
|
||||
|
||||
/** Create a new javascript document object
|
||||
*
|
||||
* @param cx The javascript context.
|
||||
* @param parent The parent object, usually a global window object
|
||||
* @param doc_priv The private context to set on the object
|
||||
* @return new javascript object or NULL on error
|
||||
*/
|
||||
JSObject *jsapi_new_document(JSContext *cx, JSObject *parent, struct html_content *htmlc);
|
||||
|
||||
/** Create a new javascript console object
|
||||
*
|
||||
* @param cx The javascript context.
|
||||
* @param parent The parent object, usually a global window object
|
||||
* @return new javascript object or NULL on error
|
||||
*/
|
||||
JSObject *jsapi_new_console(JSContext *cx, JSObject *parent);
|
||||
|
||||
/** Create a new javascript navigator object
|
||||
*
|
||||
* @param cx The javascript context.
|
||||
* @param parent The parent object, usually a global window object
|
||||
* @return new javascript object or NULL on error
|
||||
*/
|
||||
JSObject *jsapi_new_navigator(JSContext *cx, JSObject *parent);
|
||||
|
||||
/** Create a new javascript element object
|
||||
*
|
||||
* @param cx The javascript context.
|
||||
* @param parent The parent object, usually a global window object
|
||||
* @param doc_priv The private context to set on the object
|
||||
* @return new javascript object or NULL on error
|
||||
*/
|
||||
JSObject *jsapi_new_element(JSContext *cx, JSObject *parent, struct html_content *htmlc, struct dom_element *domelement);
|
||||
|
||||
#endif
|
||||
|
99
javascript/jsapi/binding.h
Normal file
99
javascript/jsapi/binding.h
Normal file
@ -0,0 +1,99 @@
|
||||
/*
|
||||
* Copyright 2012 Vincent Sanders <vince@netsurf-browser.org>
|
||||
*
|
||||
* This file is part of NetSurf, http://www.netsurf-browser.org/
|
||||
*
|
||||
* NetSurf is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* NetSurf is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/** \file
|
||||
* spidermonkey jsapi class bindings
|
||||
*/
|
||||
|
||||
#ifndef _NETSURF_JAVASCRIPT_JSAPI_BINDING_H_
|
||||
#define _NETSURF_JAVASCRIPT_JSAPI_BINDING_H_
|
||||
|
||||
|
||||
#include "render/html_internal.h"
|
||||
|
||||
JSObject *jsapi_InitClass_Window(JSContext *cx, JSObject *parent);
|
||||
|
||||
/** Create a new javascript window object
|
||||
*
|
||||
* @param cx The javascript context.
|
||||
* @param parent The parent object or NULL for new global
|
||||
* @param win_priv The private context to set on the object
|
||||
* @return new javascript object or NULL on error
|
||||
*/
|
||||
JSObject *jsapi_new_Window(JSContext *cx,
|
||||
JSObject *window,
|
||||
JSObject *parent,
|
||||
struct browser_window *bw,
|
||||
html_content *htmlc);
|
||||
|
||||
JSObject *jsapi_InitClass_Location(JSContext *cx, JSObject *parent);
|
||||
JSObject *jsapi_new_Location(JSContext *cx,
|
||||
JSObject *window,
|
||||
JSObject *parent,
|
||||
struct browser_window *bw);
|
||||
|
||||
|
||||
JSObject *jsapi_InitClass_Document(JSContext *cx, JSObject *parent);
|
||||
|
||||
/** Create a new javascript document object
|
||||
*
|
||||
* @param cx The javascript context.
|
||||
* @param parent The parent object, usually a global window object
|
||||
* @param doc_priv The private context to set on the object
|
||||
* @return new javascript object or NULL on error
|
||||
*/
|
||||
JSObject *jsapi_new_Document(JSContext *cx,
|
||||
JSObject *proto,
|
||||
JSObject *parent,
|
||||
dom_document *node,
|
||||
struct html_content *htmlc);
|
||||
|
||||
JSObject *jsapi_InitClass_Console(JSContext *cx, JSObject *parent);
|
||||
/** Create a new javascript console object
|
||||
*
|
||||
* @param cx The javascript context.
|
||||
* @param parent The parent object, usually a global window object
|
||||
* @return new javascript object or NULL on error
|
||||
*/
|
||||
JSObject *jsapi_new_Console(JSContext *cx, JSObject *prototype, JSObject *parent);
|
||||
|
||||
|
||||
JSObject *jsapi_InitClass_Navigator(JSContext *cx, JSObject *parent);
|
||||
/** Create a new javascript navigator object
|
||||
*
|
||||
* @param cx The javascript context.
|
||||
* @param parent The parent object, usually a global window object
|
||||
* @return new javascript object or NULL on error
|
||||
*/
|
||||
JSObject *jsapi_new_Navigator(JSContext *cx, JSObject *proto, JSObject *parent);
|
||||
|
||||
JSObject *jsapi_InitClass_HTMLElement(JSContext *cx, JSObject *parent);
|
||||
/** Create a new javascript element object
|
||||
*
|
||||
* @param cx The javascript context.
|
||||
* @param parent The parent object, usually a global window object
|
||||
* @param doc_priv The private context to set on the object
|
||||
* @return new javascript object or NULL on error
|
||||
*/
|
||||
JSObject *jsapi_new_HTMLElement(JSContext *cx,
|
||||
JSObject *prototype,
|
||||
JSObject *parent,
|
||||
dom_element *node,
|
||||
struct html_content *htmlc);
|
||||
|
||||
#endif
|
59
javascript/jsapi/console.bnd
Normal file
59
javascript/jsapi/console.bnd
Normal file
@ -0,0 +1,59 @@
|
||||
/* Binding to generate Console interface
|
||||
*
|
||||
* Copyright 2012 Vincent Sanders <vince@netsurf-browser.org>
|
||||
*
|
||||
* This file is part of NetSurf, http://www.netsurf-browser.org/
|
||||
*
|
||||
* Released under the terms of the MIT License,
|
||||
* http://www.opensource.org/licenses/mit-license
|
||||
*/
|
||||
|
||||
webidlfile "console.idl";
|
||||
|
||||
hdrcomment "Copyright 2012 Vincent Sanders <vince@netsurf-browser.org>";
|
||||
hdrcomment "This file is part of NetSurf, http://www.netsurf-browser.org/";
|
||||
hdrcomment "Released under the terms of the MIT License,";
|
||||
hdrcomment " http://www.opensource.org/licenses/mit-license";
|
||||
|
||||
preamble %{
|
||||
|
||||
#include "utils/config.h"
|
||||
#include "utils/log.h"
|
||||
|
||||
#include "javascript/jsapi.h"
|
||||
#include "javascript/jsapi/binding.h"
|
||||
|
||||
%}
|
||||
|
||||
binding navigator {
|
||||
type js_libdom; /* the binding type */
|
||||
|
||||
interface Console; /* Web IDL interface to generate */
|
||||
|
||||
/* private members:
|
||||
* - stored in private context structure.
|
||||
* - passed as parameters to constructor and stored automatically.
|
||||
* - are *not* considered for property getters/setters.
|
||||
*
|
||||
* internal members:
|
||||
* - value stored in private context structure
|
||||
* - not passed to constructor
|
||||
* - must be instantiated by constructor
|
||||
* - are considered for property getters/setters.
|
||||
*/
|
||||
internal "void *" gui_console;
|
||||
}
|
||||
|
||||
operation log %{
|
||||
unsigned int argloop;
|
||||
JSString *jsstr;
|
||||
unsigned long jsstrlen;
|
||||
char *txt;
|
||||
|
||||
for (argloop = 0; argloop < argc; argloop++) {
|
||||
jsstr = JS_ValueToString(cx, argv[argloop]);
|
||||
|
||||
JSString_to_char(jsstr, txt, jsstrlen);
|
||||
LOG(("%s", txt));
|
||||
}
|
||||
%}
|
@ -1,152 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012 Vincent Sanders <vince@netsurf-browser.org>
|
||||
*
|
||||
* This file is part of NetSurf, http://www.netsurf-browser.org/
|
||||
*
|
||||
* NetSurf is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* NetSurf is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
|
||||
#include "utils/log.h"
|
||||
|
||||
#include "javascript/jsapi.h"
|
||||
|
||||
static JSBool JSAPI_NATIVE(debug, JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
JSAPI_SET_RVAL(cx, vp, JSVAL_VOID);
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_NATIVE(dir, JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
JSAPI_SET_RVAL(cx, vp, JSVAL_VOID);
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_NATIVE(error, JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
JSAPI_SET_RVAL(cx, vp, JSVAL_VOID);
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_NATIVE(group, JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
JSAPI_SET_RVAL(cx, vp, JSVAL_VOID);
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_NATIVE(groupCollapsed, JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
JSAPI_SET_RVAL(cx, vp, JSVAL_VOID);
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_NATIVE(groupEnd, JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
JSAPI_SET_RVAL(cx, vp, JSVAL_VOID);
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_NATIVE(info, JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
JSAPI_SET_RVAL(cx, vp, JSVAL_VOID);
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_NATIVE(log, JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
unsigned int argloop;
|
||||
JSString *jsstr;
|
||||
unsigned long jsstrlen;
|
||||
char *txt;
|
||||
|
||||
for (argloop = 0; argloop < argc; argloop++) {
|
||||
jsstr = JS_ValueToString(cx, *JSAPI_ARGV(cx, vp + argloop));
|
||||
|
||||
JSString_to_char(jsstr, txt, jsstrlen);
|
||||
LOG(("%s", txt));
|
||||
}
|
||||
|
||||
JSAPI_SET_RVAL(cx, vp, JSVAL_VOID);
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_NATIVE(time, JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
JSAPI_SET_RVAL(cx, vp, JSVAL_VOID);
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_NATIVE(timeEnd, JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
JSAPI_SET_RVAL(cx, vp, JSVAL_VOID);
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_NATIVE(trace, JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
JSAPI_SET_RVAL(cx, vp, JSVAL_VOID);
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_NATIVE(warn, JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
JSAPI_SET_RVAL(cx, vp, JSVAL_VOID);
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSFunctionSpec jsfunctions_console[] = {
|
||||
JSAPI_FS(debug, 1, 0),
|
||||
JSAPI_FS(dir, 1, 0),
|
||||
JSAPI_FS(error, 1, 0),
|
||||
JSAPI_FS(group, 1, 0),
|
||||
JSAPI_FS(groupCollapsed, 1, 0),
|
||||
JSAPI_FS(groupEnd, 1, 0),
|
||||
JSAPI_FS(info, 1, 0),
|
||||
JSAPI_FS(log, 1, 0),
|
||||
JSAPI_FS(time, 1, 0),
|
||||
JSAPI_FS(timeEnd, 1, 0),
|
||||
JSAPI_FS(trace, 1, 0),
|
||||
JSAPI_FS(warn, 1, 0),
|
||||
JSAPI_FS_END
|
||||
};
|
||||
|
||||
static JSClass jsclass_console =
|
||||
{
|
||||
"console",
|
||||
JSCLASS_HAS_PRIVATE,
|
||||
JS_PropertyStub,
|
||||
JS_PropertyStub,
|
||||
JS_PropertyStub,
|
||||
JS_StrictPropertyStub,
|
||||
JS_EnumerateStub,
|
||||
JS_ResolveStub,
|
||||
JS_ConvertStub,
|
||||
JS_FinalizeStub,
|
||||
JSCLASS_NO_OPTIONAL_MEMBERS
|
||||
};
|
||||
|
||||
|
||||
JSObject *jsapi_new_console(JSContext *cx, JSObject *parent)
|
||||
{
|
||||
return JS_InitClass(cx,
|
||||
parent,
|
||||
NULL,
|
||||
&jsclass_console,
|
||||
NULL,
|
||||
0,
|
||||
NULL,
|
||||
jsfunctions_console,
|
||||
NULL,
|
||||
NULL);
|
||||
}
|
@ -1,110 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012 Vincent Sanders <vince@netsurf-browser.org>
|
||||
*
|
||||
* This file is part of NetSurf, http://www.netsurf-browser.org/
|
||||
*
|
||||
* NetSurf is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* NetSurf is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
|
||||
/* IDL http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#interface-document
|
||||
|
||||
interface Document : Node {
|
||||
readonly attribute DOMImplementation implementation;
|
||||
readonly attribute DOMString URL;
|
||||
readonly attribute DOMString documentURI;
|
||||
readonly attribute DOMString compatMode;
|
||||
readonly attribute DOMString characterSet;
|
||||
readonly attribute DOMString contentType;
|
||||
|
||||
readonly attribute DocumentType? doctype;
|
||||
readonly attribute Element? documentElement;
|
||||
HTMLCollection getElementsByTagName(DOMString localName);
|
||||
HTMLCollection getElementsByTagNameNS(DOMString? namespace, DOMString localName);
|
||||
HTMLCollection getElementsByClassName(DOMString classNames);
|
||||
Element? getElementById(DOMString elementId);
|
||||
|
||||
Element createElement(DOMString localName);
|
||||
Element createElementNS(DOMString? namespace, DOMString qualifiedName);
|
||||
DocumentFragment createDocumentFragment();
|
||||
Text createTextNode(DOMString data);
|
||||
Comment createComment(DOMString data);
|
||||
ProcessingInstruction createProcessingInstruction(DOMString target, DOMString data);
|
||||
|
||||
Node importNode(Node node, optional boolean deep = true);
|
||||
Node adoptNode(Node node);
|
||||
|
||||
Event createEvent(DOMString interface);
|
||||
|
||||
Range createRange();
|
||||
|
||||
// NodeFilter.SHOW_ALL = 0xFFFFFFFF
|
||||
NodeIterator createNodeIterator(Node root, optional unsigned long whatToShow = 0xFFFFFFFF, optional NodeFilter? filter = null);
|
||||
TreeWalker createTreeWalker(Node root, optional unsigned long whatToShow = 0xFFFFFFFF, optional NodeFilter? filter = null);
|
||||
|
||||
// NEW
|
||||
void prepend((Node or DOMString)... nodes);
|
||||
void append((Node or DOMString)... nodes);
|
||||
};
|
||||
|
||||
|
||||
*/
|
||||
|
||||
#include "jsclass.h"
|
||||
|
||||
#include "node.c"
|
||||
|
||||
static JSBool JSAPI_NATIVE(getElementById, JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
JSString* u16_txt;
|
||||
char *txt;
|
||||
unsigned long txtlen;
|
||||
dom_string *idstr;
|
||||
dom_element *idelement;
|
||||
struct jsclass_document_priv *document;
|
||||
|
||||
document = JS_GetInstancePrivate(cx, JS_THIS_OBJECT(cx,vp), &JSCLASS_OBJECT, NULL);
|
||||
if (document == NULL) {
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
if (document->node == NULL) {
|
||||
/* no document available, this is obviously a problem
|
||||
* for finding elements
|
||||
*/
|
||||
JSAPI_SET_RVAL(cx, vp, JSVAL_NULL);
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
if (!JS_ConvertArguments(cx, argc, JSAPI_ARGV(cx, vp), "S", &u16_txt))
|
||||
return JS_FALSE;
|
||||
|
||||
JSString_to_char(u16_txt, txt, txtlen);
|
||||
|
||||
dom_string_create((unsigned char*)txt, txtlen, &idstr);
|
||||
|
||||
dom_document_get_element_by_id(document->node, idstr, &idelement);
|
||||
|
||||
JSAPI_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(jsapi_new_element(cx, JS_GetGlobalObject(cx), document->htmlc, idelement)));
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
#define JSAPI_FS_DOCUMENT \
|
||||
JSAPI_FS_NODE, \
|
||||
JSAPI_FS(getElementById, 1, 0) \
|
||||
|
||||
|
||||
#define JSAPI_PS_DOCUMENT \
|
||||
JSAPI_PS_NODE
|
26
javascript/jsapi/dom.bnd
Normal file
26
javascript/jsapi/dom.bnd
Normal file
@ -0,0 +1,26 @@
|
||||
/* DOM bindings entries */
|
||||
|
||||
webidlfile "dom.idl";
|
||||
|
||||
operation getElementById %{
|
||||
dom_string *elementId_dom;
|
||||
dom_element *element;
|
||||
dom_exception exc;
|
||||
|
||||
dom_string_create((unsigned char*)elementId, elementId_len, &elementId_dom);
|
||||
|
||||
exc = dom_document_get_element_by_id(private->node, elementId_dom, &element);
|
||||
if ((exc == DOM_NO_ERR) && (element != NULL)) {
|
||||
jsret = jsapi_new_HTMLElement(cx, NULL, NULL, element, private->htmlc);
|
||||
}
|
||||
%}
|
||||
|
||||
getter textContent %{
|
||||
dom_exception exc;
|
||||
dom_string *content;
|
||||
|
||||
exc = dom_node_get_text_content(private->node, &content);
|
||||
if ((exc == DOM_NO_ERR) && (content != NULL)) {
|
||||
jsret = JS_NewStringCopyN(cx, dom_string_data(content), dom_string_length(content));
|
||||
}
|
||||
%}
|
@ -1,106 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012 Vincent Sanders <vince@netsurf-browser.org>
|
||||
*
|
||||
* This file is part of NetSurf, http://www.netsurf-browser.org/
|
||||
*
|
||||
* NetSurf is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* NetSurf is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <dom/dom.h>
|
||||
|
||||
|
||||
#include "javascript/jsapi.h"
|
||||
#include "utils/config.h"
|
||||
#include "render/html_internal.h"
|
||||
#include "utils/log.h"
|
||||
|
||||
/* IDL http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#exception-domexception
|
||||
exception DOMException {
|
||||
const unsigned short INDEX_SIZE_ERR = 1;
|
||||
const unsigned short DOMSTRING_SIZE_ERR = 2; // historical
|
||||
const unsigned short HIERARCHY_REQUEST_ERR = 3;
|
||||
const unsigned short WRONG_DOCUMENT_ERR = 4;
|
||||
const unsigned short INVALID_CHARACTER_ERR = 5;
|
||||
const unsigned short NO_DATA_ALLOWED_ERR = 6; // historical
|
||||
const unsigned short NO_MODIFICATION_ALLOWED_ERR = 7;
|
||||
const unsigned short NOT_FOUND_ERR = 8;
|
||||
const unsigned short NOT_SUPPORTED_ERR = 9;
|
||||
const unsigned short INUSE_ATTRIBUTE_ERR = 10; // historical
|
||||
const unsigned short INVALID_STATE_ERR = 11;
|
||||
const unsigned short SYNTAX_ERR = 12;
|
||||
const unsigned short INVALID_MODIFICATION_ERR = 13;
|
||||
const unsigned short NAMESPACE_ERR = 14;
|
||||
const unsigned short INVALID_ACCESS_ERR = 15;
|
||||
const unsigned short VALIDATION_ERR = 16; // historical
|
||||
const unsigned short TYPE_MISMATCH_ERR = 17;
|
||||
const unsigned short SECURITY_ERR = 18;
|
||||
const unsigned short NETWORK_ERR = 19;
|
||||
const unsigned short ABORT_ERR = 20;
|
||||
const unsigned short URL_MISMATCH_ERR = 21;
|
||||
const unsigned short QUOTA_EXCEEDED_ERR = 22;
|
||||
const unsigned short TIMEOUT_ERR = 23;
|
||||
const unsigned short INVALID_NODE_TYPE_ERR = 24;
|
||||
const unsigned short DATA_CLONE_ERR = 25;
|
||||
unsigned short code;
|
||||
};
|
||||
|
||||
*/
|
||||
|
||||
static JSClass jsclass_domexception =
|
||||
{
|
||||
"DOMException",
|
||||
JSCLASS_HAS_PRIVATE,
|
||||
JS_PropertyStub,
|
||||
JS_PropertyStub,
|
||||
JS_PropertyStub,
|
||||
JS_StrictPropertyStub,
|
||||
JS_EnumerateStub,
|
||||
JS_ResolveStub,
|
||||
JS_ConvertStub,
|
||||
JS_FinalizeStub,
|
||||
JSCLASS_NO_OPTIONAL_MEMBERS
|
||||
};
|
||||
|
||||
|
||||
|
||||
JSObject *
|
||||
jsapi_new_domexception(JSContext *cx,
|
||||
JSObject *parent,
|
||||
int code)
|
||||
{
|
||||
/* create element object and return it*/
|
||||
JSObject *jsdomexception;
|
||||
|
||||
jssomexception = JS_InitClass(cx,
|
||||
parent,
|
||||
NULL,
|
||||
&jsclass_domexception,
|
||||
NULL,
|
||||
0,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL);
|
||||
if (jsdomexecption == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
LOG(("setting element private to %d", code));
|
||||
/* private pointer to browsing context */
|
||||
if (JS_SetPrivate(cx, jsdomexception, code) != JS_TRUE) {
|
||||
LOG(("failed to set content"));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return jsdomexception;
|
||||
}
|
@ -1,99 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012 Vincent Sanders <vince@netsurf-browser.org>
|
||||
*
|
||||
* This file is part of NetSurf, http://www.netsurf-browser.org/
|
||||
*
|
||||
* NetSurf is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* NetSurf is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
|
||||
/* IDL http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#interface-element
|
||||
|
||||
|
||||
interface Element : Node {
|
||||
readonly attribute DOMString? namespaceURI;
|
||||
readonly attribute DOMString? prefix;
|
||||
readonly attribute DOMString localName;
|
||||
readonly attribute DOMString tagName;
|
||||
|
||||
attribute DOMString id;
|
||||
attribute DOMString className;
|
||||
readonly attribute DOMTokenList classList;
|
||||
|
||||
readonly attribute Attr[] attributes;
|
||||
DOMString? getAttribute(DOMString name);
|
||||
DOMString? getAttributeNS(DOMString? namespace, DOMString localName);
|
||||
void setAttribute(DOMString name, DOMString value);
|
||||
void setAttributeNS(DOMString? namespace, DOMString name, DOMString value);
|
||||
void removeAttribute(DOMString name);
|
||||
void removeAttributeNS(DOMString? namespace, DOMString localName);
|
||||
boolean hasAttribute(DOMString name);
|
||||
boolean hasAttributeNS(DOMString? namespace, DOMString localName);
|
||||
|
||||
HTMLCollection getElementsByTagName(DOMString localName);
|
||||
HTMLCollection getElementsByTagNameNS(DOMString? namespace, DOMString localName);
|
||||
HTMLCollection getElementsByClassName(DOMString classNames);
|
||||
|
||||
readonly attribute HTMLCollection children;
|
||||
readonly attribute Element? firstElementChild;
|
||||
readonly attribute Element? lastElementChild;
|
||||
readonly attribute Element? previousElementSibling;
|
||||
readonly attribute Element? nextElementSibling;
|
||||
readonly attribute unsigned long childElementCount;
|
||||
|
||||
// NEW
|
||||
void prepend((Node or DOMString)... nodes);
|
||||
void append((Node or DOMString)... nodes);
|
||||
void before((Node or DOMString)... nodes);
|
||||
void after((Node or DOMString)... nodes);
|
||||
void replace((Node or DOMString)... nodes);
|
||||
void remove();
|
||||
};
|
||||
*/
|
||||
|
||||
#include "jsclass.h"
|
||||
|
||||
#include "node.c"
|
||||
|
||||
static JSBool JSAPI_NATIVE(getAttribute, JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
struct JSCLASS_TYPE *priv;
|
||||
|
||||
priv = JS_GetInstancePrivate(cx, JS_THIS_OBJECT(cx,vp), &JSCLASS_OBJECT, NULL);
|
||||
if (priv == NULL)
|
||||
return JS_FALSE;
|
||||
|
||||
|
||||
JSAPI_SET_RVAL(cx, vp, JSVAL_NULL);
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
#define JSAPI_FS_ELEMENT \
|
||||
JSAPI_FS_NODE, \
|
||||
JSAPI_FS(getAttribute, 0, 0)
|
||||
|
||||
static JSBool JSAPI_PROPERTYGET(id, JSContext *cx, JSObject *obj, jsval *vp)
|
||||
{
|
||||
JS_SET_RVAL(cx, vp, JSVAL_NULL);
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_PROPERTYSET(id, JSContext *cx, JSObject *obj, jsval *vp)
|
||||
{
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
#define JSAPI_PS_ELEMENT \
|
||||
JSAPI_PS_NODE, \
|
||||
JSAPI_PS(id, 0, JSPROP_ENUMERATE | JSPROP_SHARED)
|
@ -1,76 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012 Vincent Sanders <vince@netsurf-browser.org>
|
||||
*
|
||||
* This file is part of NetSurf, http://www.netsurf-browser.org/
|
||||
*
|
||||
* NetSurf is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* NetSurf is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
|
||||
/* IDL http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#eventtarget
|
||||
|
||||
interface EventTarget {
|
||||
void addEventListener(DOMString type, EventListener? callback, optional boolean capture = false);
|
||||
void removeEventListener(DOMString type, EventListener? callback, optional boolean capture = false);
|
||||
boolean dispatchEvent(Event event);
|
||||
};
|
||||
*/
|
||||
|
||||
#include "jsclass.h"
|
||||
|
||||
static JSBool JSAPI_NATIVE(addEventListener, JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
struct JSCLASS_TYPE *priv;
|
||||
|
||||
priv = JS_GetInstancePrivate(cx, JS_THIS_OBJECT(cx,vp), &JSCLASS_OBJECT, NULL);
|
||||
if (priv == NULL)
|
||||
return JS_FALSE;
|
||||
|
||||
|
||||
JSAPI_SET_RVAL(cx, vp, JSVAL_VOID);
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_NATIVE(removeEventListener, JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
struct JSCLASS_TYPE *priv;
|
||||
|
||||
priv = JS_GetInstancePrivate(cx, JS_THIS_OBJECT(cx,vp), &JSCLASS_OBJECT, NULL);
|
||||
if (priv == NULL)
|
||||
return JS_FALSE;
|
||||
|
||||
|
||||
JSAPI_SET_RVAL(cx, vp, JSVAL_VOID);
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_NATIVE(dispatchEvent, JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
struct JSCLASS_TYPE *priv;
|
||||
|
||||
priv = JS_GetInstancePrivate(cx, JS_THIS_OBJECT(cx,vp), &JSCLASS_OBJECT, NULL);
|
||||
if (priv == NULL)
|
||||
return JS_FALSE;
|
||||
|
||||
|
||||
JSAPI_SET_RVAL(cx, vp, JSVAL_VOID);
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
#define JSAPI_FS_EVENTTARGET \
|
||||
JSAPI_FS(addEventListener, 0, 0), \
|
||||
JSAPI_FS(removeEventListener, 0, 0), \
|
||||
JSAPI_FS(dispatchEvent, 0, 0)
|
229
javascript/jsapi/example.bnd
Normal file
229
javascript/jsapi/example.bnd
Normal file
@ -0,0 +1,229 @@
|
||||
/* Example binding to generate Example interface
|
||||
*
|
||||
* The js_libdom (javascript to libdom) binding type is currently the
|
||||
* only one implemented and this principly describes that binding.
|
||||
*
|
||||
* Copyright 2012 Vincent Sanders <vince@netsurf-browser.org>
|
||||
*
|
||||
* This file is part of NetSurf, http://www.netsurf-browser.org/
|
||||
*
|
||||
* Released under the terms of the MIT License,
|
||||
* http://www.opensource.org/licenses/mit-license
|
||||
*/
|
||||
|
||||
/* additional binding fragments may be included
|
||||
* Note: this is not preprocessed despite the #include name, the
|
||||
* parser will simply switch input to the included file and carry on
|
||||
* cosntructing the bindings Abstract Syntax Tree (AST)
|
||||
*/
|
||||
#include "dom.bnd"
|
||||
|
||||
/* directive to read WebIDL file and add its contents to the webidl AST */
|
||||
webidlfile "html.idl";
|
||||
|
||||
/* The hdrcomment are added into the geenrated output comment header */
|
||||
hdrcomment "Copyright 2012 Vincent Sanders <vince@netsurf-browser.org>";
|
||||
hdrcomment "This file is part of NetSurf, http://www.netsurf-browser.org/";
|
||||
hdrcomment "Released under the terms of the MIT License,";
|
||||
hdrcomment " http://www.opensource.org/licenses/mit-license";
|
||||
|
||||
/* the preamble block is copied verbatum into the generated output
|
||||
*
|
||||
* This can be used for includes, comments or whatever else is desired
|
||||
*/
|
||||
preamble %{
|
||||
|
||||
#include <dom/dom.h>
|
||||
|
||||
#include "utils/config.h"
|
||||
#include "utils/log.h"
|
||||
|
||||
#include "javascript/jsapi.h"
|
||||
#include "javascript/jsapi/binding.h"
|
||||
|
||||
%}
|
||||
|
||||
/* this block describes the binding to be generated
|
||||
*
|
||||
* Depending on the type of binding being generated multiple blocks
|
||||
* may be allowed.
|
||||
*
|
||||
* Note: the js_libdom (javascript to libdom) binding as currently
|
||||
* implemented only allows for a single binding per file, this may
|
||||
* be improved in future.
|
||||
*/
|
||||
binding example {
|
||||
type js_libdom; /* the binding type */
|
||||
|
||||
interface Navigator; /* The WebIDL interface to generate a binding for */
|
||||
|
||||
/* private members:
|
||||
* - stored in private context structure.
|
||||
* - passed as parameters to constructor and stored automatically.
|
||||
* - are *not* considered for property getters/setters.
|
||||
*/
|
||||
private "dom_document *" node;
|
||||
|
||||
/* internal members:
|
||||
* - value stored in private context structure
|
||||
* - not passed to constructor
|
||||
* - must be instantiated by constructor
|
||||
* - are considered for property getters/setters.
|
||||
*/
|
||||
internal "void *" fluff;
|
||||
|
||||
}
|
||||
|
||||
/* operation implementation code.
|
||||
*
|
||||
* The body is copied verbatum into operation binding
|
||||
*
|
||||
* several values are generated automatically:
|
||||
*
|
||||
* - The generated operations use a macro to create a JSNative JSAPI
|
||||
* callback. The interface allows a uniform interface despite the
|
||||
* evolution of the interface over differing spidermonkey versions.
|
||||
*
|
||||
* - The above implies the javascript context is in a variable called cx
|
||||
*
|
||||
* - If private or internal binding members are present they may be
|
||||
* accessed through a structure named "private"
|
||||
*
|
||||
* - if there are arguemnts they may be accesed via an argc/argv jsval
|
||||
* vector.
|
||||
*
|
||||
* - Arguments are automatically converted into c variables (named as
|
||||
* per the WebIDL names.
|
||||
*
|
||||
* - Return values (excepting void return types where its omitted) are
|
||||
* always named "retval" and are of the appropriate c type. The
|
||||
* initial value is set appropriately.
|
||||
*/
|
||||
operation foo %{
|
||||
retval = JS_NewStringCopyN(cx, "foo", SLEN("foo"));
|
||||
%}
|
||||
|
||||
/* property getter implementation code.
|
||||
*
|
||||
* The body is copied verbatum into property getter binding
|
||||
*
|
||||
* several values are generated automatically:
|
||||
*
|
||||
* - The generated operations use a macro to create a JSPropertyOp
|
||||
* JSAPI callback. The interface allows a uniform interface despite
|
||||
* the evolution of the interface over differing spidermonkey
|
||||
* versions.
|
||||
*
|
||||
* - The above implies the javascript context is available in a
|
||||
* variable called "cx".
|
||||
*
|
||||
* - If private or internal binding members are present they may be
|
||||
* accessed through a structure named "private"
|
||||
*
|
||||
* - Return values (void on a getter is not possible) are always named
|
||||
* "retval" and are of the appropriate c type. The initial value is
|
||||
* set appropriately.
|
||||
*
|
||||
* - If the getter is omitted altogether but an internal or private
|
||||
* value of the same name appears in the private structure a getter
|
||||
* is automatically constructed to return that value.
|
||||
*/
|
||||
getter bar %{
|
||||
retval = JS_NewStringCopyN(cx, "bar", SLEN("bar"));
|
||||
%}
|
||||
|
||||
/* property setter implementation code.
|
||||
*
|
||||
* The body is copied verbatum into property getter binding
|
||||
*
|
||||
* several values are generated automatically:
|
||||
*
|
||||
* - The generated operations use a macro to create a JSPropertyOp
|
||||
* JSAPI callback. The interface allows a uniform interface despite
|
||||
* the evolution of the interface over differing spidermonkey
|
||||
* versions.
|
||||
*
|
||||
* - The above implies the javascript context is available in a
|
||||
* variable called "cx".
|
||||
*
|
||||
* - If private or internal binding members are present they may be
|
||||
* accessed through a structure named "private"
|
||||
*
|
||||
* - Value to set is placed in a c variable named "setval" of the
|
||||
* appropriate type.
|
||||
*
|
||||
* - Return value, named retval" is a boolean (default true) which
|
||||
* indicates if the set was performed.
|
||||
*
|
||||
* - If the setter is omitted altogether but an internal or private
|
||||
* value of the same name appears in the private structure a setter
|
||||
* is automatically constructed to assign that value.
|
||||
*/
|
||||
setter baz %{
|
||||
printf("%s\n", setval);
|
||||
%}
|
||||
|
||||
/* implementation of the class initilisation
|
||||
*
|
||||
* This allows the default JS_InitClass to be overriden - currently
|
||||
* only used for the window (global) object to cause all the other class
|
||||
* initialisors to be called.
|
||||
*
|
||||
* function prototype is:
|
||||
* JSObject *jsapi_InitClass_HTMLElement(JSContext *cx, JSObject *parent)
|
||||
*/
|
||||
api init %{
|
||||
%}
|
||||
|
||||
/* implementation of the c instance creation
|
||||
*
|
||||
* This allows the overriding of the construction of an interface instance.
|
||||
*
|
||||
* The body is copied verbatum and must return the new object in the
|
||||
* "newobject" variable.
|
||||
*
|
||||
* The base prototype is
|
||||
* JSObject *jsapi_new_HTMLElement(JSContext *cx, JSObject *prototype, JSObject *parent, ...)
|
||||
* The varadic elements are private variables as specified in the binding
|
||||
*
|
||||
* If there are private or internal values the private struct is
|
||||
* constructed and instantiated. The struct is available during the
|
||||
* new function and is automatically attached as the private value to
|
||||
* the object.
|
||||
*
|
||||
* The default implemenattion simply calls JS_NewObject()
|
||||
*
|
||||
* Note this does *not* rely upon (or even call) the instances
|
||||
* javascript constructor allowing the c code to create objects that
|
||||
* cannot be instantiated from javascript.
|
||||
*
|
||||
*/
|
||||
api new %{
|
||||
%}
|
||||
|
||||
/* additional code in the instance finalise operation.
|
||||
*
|
||||
* The body is copied verbatum into the output
|
||||
*
|
||||
* Prototype is
|
||||
* void jsclass_finalize(JSContext *cx, JSObject *obj)
|
||||
*
|
||||
* private is available (if appropriate) and freed after the body
|
||||
*/
|
||||
api finalise %{
|
||||
%}
|
||||
|
||||
/* resolver code
|
||||
*
|
||||
* A resolver is only generated if this api is provided. This is a
|
||||
* JSResolveOp with JSCLASS_NEW_RESOLVE specified and must provide a
|
||||
* complete implementation.
|
||||
*
|
||||
* The body is copied verbatum into the output
|
||||
*
|
||||
* Prototype is:
|
||||
* JSBool jsclass_resolve(JSContext *cx, JSObject *obj, jsval id, uintN flags, JSObject **objp)
|
||||
*
|
||||
*/
|
||||
api resolve %{
|
||||
%}
|
40
javascript/jsapi/htmldocument.bnd
Normal file
40
javascript/jsapi/htmldocument.bnd
Normal file
@ -0,0 +1,40 @@
|
||||
/* Binding to generate htmldocument */
|
||||
|
||||
#include "dom.bnd"
|
||||
|
||||
webidlfile "html.idl";
|
||||
|
||||
hdrcomment "Part of NetSurf Project";
|
||||
|
||||
preamble %{
|
||||
|
||||
#include <dom/dom.h>
|
||||
|
||||
#include "utils/config.h"
|
||||
#include "utils/log.h"
|
||||
|
||||
#include "javascript/jsapi.h"
|
||||
#include "javascript/jsapi/binding.h"
|
||||
|
||||
%}
|
||||
|
||||
operation write %{
|
||||
LOG(("content %p parser %p writing %s",
|
||||
private->htmlc, private->htmlc->parser, text));
|
||||
|
||||
if (private->htmlc->parser != NULL) {
|
||||
dom_hubbub_parser_insert_chunk(private->htmlc->parser, (uint8_t *)text, text_len);
|
||||
}
|
||||
%}
|
||||
|
||||
binding document {
|
||||
type js_libdom; /* the binding type */
|
||||
|
||||
/* parameters to constructor value stored in private
|
||||
* context structure.
|
||||
*/
|
||||
private "dom_document *" node;
|
||||
private "struct html_content *" htmlc;
|
||||
|
||||
interface Document; /* Web IDL interface to generate */
|
||||
}
|
@ -1,262 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012 Vincent Sanders <vince@netsurf-browser.org>
|
||||
*
|
||||
* This file is part of NetSurf, http://www.netsurf-browser.org/
|
||||
*
|
||||
* NetSurf is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* NetSurf is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <dom/dom.h>
|
||||
|
||||
#include "utils/config.h"
|
||||
#include "utils/log.h"
|
||||
|
||||
#include "javascript/jsapi.h"
|
||||
|
||||
/* IDL http://www.whatwg.org/specs/web-apps/current-work/#the-document-object
|
||||
|
||||
[OverrideBuiltins]
|
||||
partial interface Document {
|
||||
// resource metadata management
|
||||
[PutForwards=href] readonly attribute Location? location;
|
||||
attribute DOMString domain;
|
||||
readonly attribute DOMString referrer;
|
||||
attribute DOMString cookie;
|
||||
readonly attribute DOMString lastModified;
|
||||
readonly attribute DOMString readyState;
|
||||
|
||||
// DOM tree accessors
|
||||
getter object (DOMString name);
|
||||
attribute DOMString title;
|
||||
attribute DOMString dir;
|
||||
attribute HTMLElement? body;
|
||||
readonly attribute HTMLHeadElement? head;
|
||||
readonly attribute HTMLCollection images;
|
||||
readonly attribute HTMLCollection embeds;
|
||||
readonly attribute HTMLCollection plugins;
|
||||
readonly attribute HTMLCollection links;
|
||||
readonly attribute HTMLCollection forms;
|
||||
readonly attribute HTMLCollection scripts;
|
||||
NodeList getElementsByName(DOMString elementName);
|
||||
NodeList getItems(optional DOMString typeNames); // microdata
|
||||
readonly attribute DOMElementMap cssElementMap;
|
||||
|
||||
// dynamic markup insertion
|
||||
Document open(optional DOMString type, optional DOMString replace);
|
||||
WindowProxy open(DOMString url, DOMString name, DOMString features, optional boolean replace);
|
||||
void close();
|
||||
void write(DOMString... text);
|
||||
void writeln(DOMString... text);
|
||||
|
||||
// user interaction
|
||||
readonly attribute WindowProxy? defaultView;
|
||||
readonly attribute Element? activeElement;
|
||||
boolean hasFocus();
|
||||
attribute DOMString designMode;
|
||||
boolean execCommand(DOMString commandId);
|
||||
boolean execCommand(DOMString commandId, boolean showUI);
|
||||
boolean execCommand(DOMString commandId, boolean showUI, DOMString value);
|
||||
boolean queryCommandEnabled(DOMString commandId);
|
||||
boolean queryCommandIndeterm(DOMString commandId);
|
||||
boolean queryCommandState(DOMString commandId);
|
||||
boolean queryCommandSupported(DOMString commandId);
|
||||
DOMString queryCommandValue(DOMString commandId);
|
||||
readonly attribute HTMLCollection commands;
|
||||
|
||||
// event handler IDL attributes
|
||||
attribute EventHandler onabort;
|
||||
attribute EventHandler onblur;
|
||||
attribute EventHandler oncancel;
|
||||
attribute EventHandler oncanplay;
|
||||
attribute EventHandler oncanplaythrough;
|
||||
attribute EventHandler onchange;
|
||||
attribute EventHandler onclick;
|
||||
attribute EventHandler onclose;
|
||||
attribute EventHandler oncontextmenu;
|
||||
attribute EventHandler oncuechange;
|
||||
attribute EventHandler ondblclick;
|
||||
attribute EventHandler ondrag;
|
||||
attribute EventHandler ondragend;
|
||||
attribute EventHandler ondragenter;
|
||||
attribute EventHandler ondragleave;
|
||||
attribute EventHandler ondragover;
|
||||
attribute EventHandler ondragstart;
|
||||
attribute EventHandler ondrop;
|
||||
attribute EventHandler ondurationchange;
|
||||
attribute EventHandler onemptied;
|
||||
attribute EventHandler onended;
|
||||
attribute OnErrorEventHandler onerror;
|
||||
attribute EventHandler onfocus;
|
||||
attribute EventHandler oninput;
|
||||
attribute EventHandler oninvalid;
|
||||
attribute EventHandler onkeydown;
|
||||
attribute EventHandler onkeypress;
|
||||
attribute EventHandler onkeyup;
|
||||
attribute EventHandler onload;
|
||||
attribute EventHandler onloadeddata;
|
||||
attribute EventHandler onloadedmetadata;
|
||||
attribute EventHandler onloadstart;
|
||||
attribute EventHandler onmousedown;
|
||||
attribute EventHandler onmousemove;
|
||||
attribute EventHandler onmouseout;
|
||||
attribute EventHandler onmouseover;
|
||||
attribute EventHandler onmouseup;
|
||||
attribute EventHandler onmousewheel;
|
||||
attribute EventHandler onpause;
|
||||
attribute EventHandler onplay;
|
||||
attribute EventHandler onplaying;
|
||||
attribute EventHandler onprogress;
|
||||
attribute EventHandler onratechange;
|
||||
attribute EventHandler onreset;
|
||||
attribute EventHandler onscroll;
|
||||
attribute EventHandler onseeked;
|
||||
attribute EventHandler onseeking;
|
||||
attribute EventHandler onselect;
|
||||
attribute EventHandler onshow;
|
||||
attribute EventHandler onstalled;
|
||||
attribute EventHandler onsubmit;
|
||||
attribute EventHandler onsuspend;
|
||||
attribute EventHandler ontimeupdate;
|
||||
attribute EventHandler onvolumechange;
|
||||
attribute EventHandler onwaiting;
|
||||
|
||||
// special event handler IDL attributes that only apply to Document objects
|
||||
[LenientThis] attribute EventHandler onreadystatechange;
|
||||
};
|
||||
|
||||
*/
|
||||
|
||||
static void jsfinalize_document(JSContext *cx, JSObject *obj);
|
||||
static JSBool jsresove_node(JSContext *cx, JSObject *obj, jsval id, uintN flags, JSObject **objp);
|
||||
|
||||
struct jsclass_document_priv {
|
||||
struct html_content *htmlc;
|
||||
dom_document *node;
|
||||
};
|
||||
|
||||
|
||||
#define JSCLASS_NAME document
|
||||
|
||||
#include "jsclass.h"
|
||||
|
||||
static JSClass JSCLASS_OBJECT =
|
||||
{
|
||||
"document",
|
||||
JSCLASS_NEW_RESOLVE | JSCLASS_HAS_PRIVATE,
|
||||
JS_PropertyStub,
|
||||
JS_PropertyStub,
|
||||
JS_PropertyStub,
|
||||
JS_StrictPropertyStub,
|
||||
JS_EnumerateStub,
|
||||
(JSResolveOp)jsresove_node,
|
||||
JS_ConvertStub,
|
||||
jsfinalize_document,
|
||||
JSCLASS_NO_OPTIONAL_MEMBERS
|
||||
};
|
||||
|
||||
#include "document.c"
|
||||
|
||||
static JSBool jsresove_node(JSContext *cx, JSObject *obj, jsval id, uintN flags, JSObject **objp)
|
||||
{
|
||||
*objp = NULL;
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_NATIVE(write, JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
JSString* u16_txt;
|
||||
char *txt;
|
||||
unsigned long length;
|
||||
struct jsclass_document_priv *document;
|
||||
|
||||
document = JS_GetInstancePrivate(cx, JS_THIS_OBJECT(cx,vp), &JSCLASS_OBJECT, NULL);
|
||||
if (document == NULL) {
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
if (!JS_ConvertArguments(cx, argc, JSAPI_ARGV(cx, vp), "S", &u16_txt)) {
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
JSString_to_char(u16_txt, txt, length);
|
||||
|
||||
LOG(("content %p parser %p writing %s",
|
||||
document->htmlc, document->htmlc->parser, txt));
|
||||
if (document->htmlc->parser != NULL) {
|
||||
dom_hubbub_parser_insert_chunk(document->htmlc->parser, (uint8_t *)txt, length);
|
||||
}
|
||||
JSAPI_SET_RVAL(cx, vp, JSVAL_VOID);
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSFunctionSpec jsfunctions_document[] = {
|
||||
JSAPI_FS_DOCUMENT,
|
||||
JSAPI_FS(write, 1, 0),
|
||||
JSAPI_FS_END
|
||||
};
|
||||
|
||||
static JSPropertySpec jsproperties_document[] =
|
||||
{
|
||||
JSAPI_PS_DOCUMENT,
|
||||
JSAPI_PS_END
|
||||
};
|
||||
|
||||
static void jsfinalize_document(JSContext *cx, JSObject *obj)
|
||||
{
|
||||
struct jsclass_document_priv *document;
|
||||
|
||||
document = JS_GetInstancePrivate(cx, obj, &JSCLASS_OBJECT, NULL);
|
||||
if (document != NULL) {
|
||||
free(document);
|
||||
}
|
||||
}
|
||||
|
||||
JSObject *jsapi_new_document(JSContext *cx, JSObject *parent, struct html_content *htmlc)
|
||||
{
|
||||
/* create document object and return it */
|
||||
JSObject *jsdocument;
|
||||
struct jsclass_document_priv *document;
|
||||
|
||||
document = malloc(sizeof(*document));
|
||||
if (document == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
document->htmlc = htmlc;
|
||||
document->node = htmlc->document;
|
||||
|
||||
jsdocument = JS_InitClass(cx,
|
||||
parent,
|
||||
NULL,
|
||||
&JSCLASS_OBJECT,
|
||||
NULL,
|
||||
0,
|
||||
jsproperties_document,
|
||||
jsfunctions_document,
|
||||
NULL,
|
||||
NULL);
|
||||
if (jsdocument == NULL) {
|
||||
free(document);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
LOG(("setting document private to %p", document));
|
||||
/* private pointer to browsing context */
|
||||
if (JS_SetPrivate(cx, jsdocument, document) != JS_TRUE) {
|
||||
LOG(("failed to set document private"));
|
||||
free(document);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return jsdocument;
|
||||
}
|
51
javascript/jsapi/htmlelement.bnd
Normal file
51
javascript/jsapi/htmlelement.bnd
Normal file
@ -0,0 +1,51 @@
|
||||
/* Binding to generate HTMLElement interface
|
||||
*
|
||||
* Copyright 2012 Vincent Sanders <vince@netsurf-browser.org>
|
||||
*
|
||||
* This file is part of NetSurf, http://www.netsurf-browser.org/
|
||||
*
|
||||
* Released under the terms of the MIT License,
|
||||
* http://www.opensource.org/licenses/mit-license
|
||||
*/
|
||||
|
||||
#include "dom.bnd"
|
||||
|
||||
webidlfile "html.idl";
|
||||
|
||||
hdrcomment "Copyright 2012 Vincent Sanders <vince@netsurf-browser.org>";
|
||||
hdrcomment "This file is part of NetSurf, http://www.netsurf-browser.org/";
|
||||
hdrcomment "Released under the terms of the MIT License,";
|
||||
hdrcomment " http://www.opensource.org/licenses/mit-license";
|
||||
|
||||
preamble %{
|
||||
|
||||
#include <dom/dom.h>
|
||||
|
||||
#include "utils/config.h"
|
||||
#include "utils/log.h"
|
||||
|
||||
#include "javascript/jsapi.h"
|
||||
#include "javascript/jsapi/binding.h"
|
||||
|
||||
%}
|
||||
|
||||
binding htmlelement {
|
||||
type js_libdom; /* the binding type */
|
||||
|
||||
interface HTMLElement; /* Web IDL interface to generate */
|
||||
|
||||
/* private members:
|
||||
* - stored in private context structure.
|
||||
* - passed as parameters to constructor and stored automatically.
|
||||
* - are *not* considered for property getters/setters.
|
||||
*
|
||||
* internal members:
|
||||
* - value stored in private context structure
|
||||
* - not passed to constructor
|
||||
* - must be instantiated by constructor
|
||||
* - are considered for property getters/setters.
|
||||
*/
|
||||
private "dom_element *" node;
|
||||
private "struct html_content *" htmlc;
|
||||
}
|
||||
|
@ -1,230 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012 Vincent Sanders <vince@netsurf-browser.org>
|
||||
*
|
||||
* This file is part of NetSurf, http://www.netsurf-browser.org/
|
||||
*
|
||||
* NetSurf is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* NetSurf is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <dom/dom.h>
|
||||
|
||||
#include "utils/config.h"
|
||||
#include "utils/log.h"
|
||||
#include "render/html_internal.h"
|
||||
|
||||
#include "javascript/jsapi.h"
|
||||
|
||||
/* IDL http://www.whatwg.org/specs/web-apps/current-work/#elements-in-the-dom
|
||||
|
||||
CAUTION - innerHTML and outerHTML etc. are part of the DOM parsing
|
||||
specification but more can be found in:
|
||||
http://html5.org/specs/dom-parsing.html#extensions-to-the-element-interface
|
||||
|
||||
interface HTMLElement : Element {
|
||||
// metadata attributes
|
||||
attribute DOMString title;
|
||||
attribute DOMString lang;
|
||||
attribute boolean translate;
|
||||
attribute DOMString dir;
|
||||
readonly attribute DOMStringMap dataset;
|
||||
|
||||
// microdata
|
||||
attribute boolean itemScope;
|
||||
[PutForwards=value] readonly attribute DOMSettableTokenList itemType;
|
||||
attribute DOMString itemId;
|
||||
[PutForwards=value] readonly attribute DOMSettableTokenList itemRef;
|
||||
[PutForwards=value] readonly attribute DOMSettableTokenList itemProp;
|
||||
readonly attribute HTMLPropertiesCollection properties;
|
||||
attribute any itemValue;
|
||||
|
||||
// user interaction
|
||||
attribute boolean hidden;
|
||||
void click();
|
||||
attribute long tabIndex;
|
||||
void focus();
|
||||
void blur();
|
||||
attribute DOMString accessKey;
|
||||
readonly attribute DOMString accessKeyLabel;
|
||||
attribute boolean draggable;
|
||||
[PutForwards=value] readonly attribute DOMSettableTokenList dropzone;
|
||||
attribute DOMString contentEditable;
|
||||
readonly attribute boolean isContentEditable;
|
||||
attribute HTMLMenuElement? contextMenu;
|
||||
attribute boolean spellcheck;
|
||||
|
||||
// command API
|
||||
readonly attribute DOMString? commandType;
|
||||
readonly attribute DOMString? commandLabel;
|
||||
readonly attribute DOMString? commandIcon;
|
||||
readonly attribute boolean? commandHidden;
|
||||
readonly attribute boolean? commandDisabled;
|
||||
readonly attribute boolean? commandChecked;
|
||||
|
||||
// styling
|
||||
readonly attribute CSSStyleDeclaration style;
|
||||
|
||||
// event handler IDL attributes
|
||||
attribute EventHandler onabort;
|
||||
attribute EventHandler onblur;
|
||||
attribute EventHandler oncancel;
|
||||
attribute EventHandler oncanplay;
|
||||
attribute EventHandler oncanplaythrough;
|
||||
attribute EventHandler onchange;
|
||||
attribute EventHandler onclick;
|
||||
attribute EventHandler onclose;
|
||||
attribute EventHandler oncontextmenu;
|
||||
attribute EventHandler oncuechange;
|
||||
attribute EventHandler ondblclick;
|
||||
attribute EventHandler ondrag;
|
||||
attribute EventHandler ondragend;
|
||||
attribute EventHandler ondragenter;
|
||||
attribute EventHandler ondragleave;
|
||||
attribute EventHandler ondragover;
|
||||
attribute EventHandler ondragstart;
|
||||
attribute EventHandler ondrop;
|
||||
attribute EventHandler ondurationchange;
|
||||
attribute EventHandler onemptied;
|
||||
attribute EventHandler onended;
|
||||
attribute OnErrorEventHandler onerror;
|
||||
attribute EventHandler onfocus;
|
||||
attribute EventHandler oninput;
|
||||
attribute EventHandler oninvalid;
|
||||
attribute EventHandler onkeydown;
|
||||
attribute EventHandler onkeypress;
|
||||
attribute EventHandler onkeyup;
|
||||
attribute EventHandler onload;
|
||||
attribute EventHandler onloadeddata;
|
||||
attribute EventHandler onloadedmetadata;
|
||||
attribute EventHandler onloadstart;
|
||||
attribute EventHandler onmousedown;
|
||||
attribute EventHandler onmousemove;
|
||||
attribute EventHandler onmouseout;
|
||||
attribute EventHandler onmouseover;
|
||||
attribute EventHandler onmouseup;
|
||||
attribute EventHandler onmousewheel;
|
||||
attribute EventHandler onpause;
|
||||
attribute EventHandler onplay;
|
||||
attribute EventHandler onplaying;
|
||||
attribute EventHandler onprogress;
|
||||
attribute EventHandler onratechange;
|
||||
attribute EventHandler onreset;
|
||||
attribute EventHandler onscroll;
|
||||
attribute EventHandler onseeked;
|
||||
attribute EventHandler onseeking;
|
||||
attribute EventHandler onselect;
|
||||
attribute EventHandler onshow;
|
||||
attribute EventHandler onstalled;
|
||||
attribute EventHandler onsubmit;
|
||||
attribute EventHandler onsuspend;
|
||||
attribute EventHandler ontimeupdate;
|
||||
attribute EventHandler onvolumechange;
|
||||
attribute EventHandler onwaiting;
|
||||
};
|
||||
|
||||
*/
|
||||
|
||||
static void jsfinalize_element(JSContext *cx, JSObject *obj);
|
||||
|
||||
struct jsclass_document_priv {
|
||||
struct html_content *htmlc;
|
||||
dom_element *node;
|
||||
};
|
||||
|
||||
#define JSCLASS_NAME htmlelement
|
||||
|
||||
#include "jsclass.h"
|
||||
|
||||
static JSClass JSCLASS_OBJECT =
|
||||
{
|
||||
"HTMLElement",
|
||||
JSCLASS_HAS_PRIVATE,
|
||||
JS_PropertyStub,
|
||||
JS_PropertyStub,
|
||||
JS_PropertyStub,
|
||||
JS_StrictPropertyStub,
|
||||
JS_EnumerateStub,
|
||||
JS_ResolveStub,
|
||||
JS_ConvertStub,
|
||||
jsfinalize_element,
|
||||
JSCLASS_NO_OPTIONAL_MEMBERS
|
||||
};
|
||||
|
||||
#include "element.c"
|
||||
|
||||
static void jsfinalize_element(JSContext *cx, JSObject *obj)
|
||||
{
|
||||
struct jsclass_document_priv *element;
|
||||
element = JS_GetInstancePrivate(cx, obj, &JSCLASS_OBJECT, NULL);
|
||||
if (element != NULL) {
|
||||
free(element);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
static JSFunctionSpec jsfunctions_element[] = {
|
||||
JSAPI_FS_ELEMENT,
|
||||
JSAPI_FS_END
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
static JSPropertySpec jsproperties_element[] =
|
||||
{
|
||||
JSAPI_PS_ELEMENT,
|
||||
JSAPI_PS_END
|
||||
};
|
||||
|
||||
JSObject *
|
||||
jsapi_new_element(JSContext *cx,
|
||||
JSObject *parent,
|
||||
struct html_content *htmlc,
|
||||
dom_element *domelement)
|
||||
{
|
||||
/* create element object and return it */
|
||||
JSObject *jselement;
|
||||
struct jsclass_document_priv *element;
|
||||
|
||||
element = malloc(sizeof(element));
|
||||
if (element == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
element->htmlc = htmlc;
|
||||
element->node = domelement;
|
||||
|
||||
jselement = JS_InitClass(cx,
|
||||
parent,
|
||||
NULL,
|
||||
&JSCLASS_OBJECT,
|
||||
NULL,
|
||||
0,
|
||||
jsproperties_element,
|
||||
jsfunctions_element,
|
||||
NULL,
|
||||
NULL);
|
||||
if (jselement == NULL) {
|
||||
free(element);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
LOG(("setting private to %p", element));
|
||||
/* private pointer to browsing context */
|
||||
if (JS_SetPrivate(cx, jselement, element) != JS_TRUE) {
|
||||
LOG(("failed to set private"));
|
||||
free(element);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return jselement;
|
||||
}
|
@ -1,39 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012 Vincent Sanders <vince@netsurf-browser.org>
|
||||
*
|
||||
* This file is part of NetSurf, http://www.netsurf-browser.org/
|
||||
*
|
||||
* NetSurf is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* NetSurf is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/** \file
|
||||
* jsapi pseudo class glue.
|
||||
*/
|
||||
|
||||
#ifndef _NETSURF_JAVASCRIPT_JSAPI_JSCLASS_H_
|
||||
#define _NETSURF_JAVASCRIPT_JSAPI_JSCLASS_H_
|
||||
|
||||
#ifndef JSCLASS_NAME
|
||||
#error "The class name must be defined"
|
||||
#endif
|
||||
|
||||
#ifndef JSCLASS_TYPE
|
||||
#define CLASS jsclass
|
||||
#define PRIVATE priv
|
||||
#define EXPAND(a,b) PASTE(a,b)
|
||||
#define PASTE(x,y) x##_##y
|
||||
#define JSCLASS_OBJECT EXPAND(CLASS,JSCLASS_NAME)
|
||||
#define JSCLASS_TYPE EXPAND(JSCLASS_OBJECT,PRIVATE)
|
||||
#endif
|
||||
|
||||
#endif
|
53
javascript/jsapi/location.bnd
Normal file
53
javascript/jsapi/location.bnd
Normal file
@ -0,0 +1,53 @@
|
||||
/* Binding to generate Location interface
|
||||
*
|
||||
* Copyright 2012 Vincent Sanders <vince@netsurf-browser.org>
|
||||
*
|
||||
* This file is part of NetSurf, http://www.netsurf-browser.org/
|
||||
*
|
||||
* Released under the terms of the MIT License,
|
||||
* http://www.opensource.org/licenses/mit-license
|
||||
*/
|
||||
|
||||
#include "dom.bnd"
|
||||
|
||||
webidlfile "html.idl";
|
||||
|
||||
hdrcomment "Copyright 2012 Vincent Sanders <vince@netsurf-browser.org>";
|
||||
hdrcomment "This file is part of NetSurf, http://www.netsurf-browser.org/";
|
||||
hdrcomment "Released under the terms of the MIT License,";
|
||||
hdrcomment " http://www.opensource.org/licenses/mit-license";
|
||||
|
||||
preamble %{
|
||||
|
||||
#include "desktop/browser.h"
|
||||
|
||||
#include "utils/config.h"
|
||||
#include "utils/log.h"
|
||||
|
||||
#include "javascript/jsapi.h"
|
||||
#include "javascript/jsapi/binding.h"
|
||||
|
||||
%}
|
||||
|
||||
binding location {
|
||||
type js_libdom; /* the binding type */
|
||||
|
||||
interface Location; /* Web IDL interface to generate */
|
||||
|
||||
/* private members:
|
||||
* - stored in private context structure.
|
||||
* - passed as parameters to constructor and stored automatically.
|
||||
* - are *not* considered for property getters/setters.
|
||||
*
|
||||
* internal members:
|
||||
* - value stored in private context structure
|
||||
* - not passed to constructor
|
||||
* - must be instantiated by constructor
|
||||
* - are considered for property getters/setters.
|
||||
*/
|
||||
private "struct browser_window *" bw;
|
||||
}
|
||||
|
||||
operation reload %{
|
||||
browser_window_reload(private->bw, false);
|
||||
%}
|
120
javascript/jsapi/navigator.bnd
Normal file
120
javascript/jsapi/navigator.bnd
Normal file
@ -0,0 +1,120 @@
|
||||
/* Binding to generate Navigator interface
|
||||
*
|
||||
* Copyright 2012 Vincent Sanders <vince@netsurf-browser.org>
|
||||
*
|
||||
* This file is part of NetSurf, http://www.netsurf-browser.org/
|
||||
*
|
||||
* Released under the terms of the MIT License,
|
||||
* http://www.opensource.org/licenses/mit-license
|
||||
*/
|
||||
|
||||
#include "dom.bnd"
|
||||
|
||||
webidlfile "html.idl";
|
||||
|
||||
hdrcomment "Copyright 2012 Vincent Sanders <vince@netsurf-browser.org>";
|
||||
hdrcomment "This file is part of NetSurf, http://www.netsurf-browser.org/";
|
||||
hdrcomment "Released under the terms of the MIT License,";
|
||||
hdrcomment " http://www.opensource.org/licenses/mit-license";
|
||||
|
||||
preamble %{
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "desktop/netsurf.h"
|
||||
#include "desktop/options.h"
|
||||
|
||||
#include "utils/config.h"
|
||||
#include "utils/useragent.h"
|
||||
#include "utils/log.h"
|
||||
#include "utils/utsname.h"
|
||||
|
||||
#include "javascript/jsapi.h"
|
||||
#include "javascript/jsapi/binding.h"
|
||||
|
||||
/*
|
||||
* navigator properties for netsurf
|
||||
*
|
||||
* Property | Everyone else | NetSurf | Notes
|
||||
* ------------+-----------------+--------------+------------------------------
|
||||
* appCodeName | "Mozilla" | "NetSurf" | This is kinda a pointless
|
||||
* | | | constant as everyone returns
|
||||
* | | | "Mozilla" which is dumb
|
||||
* ------------+-----------------+--------------+------------------------------
|
||||
* appName | "<Browsername>" | "NetSurf" | Browsers named other than
|
||||
* | | | "Netscape", "Mozilla",
|
||||
* | | | "Netscape Navigator",
|
||||
* | | | "Microsoft Internet Explorer"
|
||||
* | | | often other browser have
|
||||
* | | | "(compatible with Netscape)"
|
||||
* | | | append.
|
||||
* ------------+-----------------+--------------+------------------------------
|
||||
* appVersion | "<ver> (<type>)"| "<ver>" | Actually just the version
|
||||
* | | | number e.g "3.0".
|
||||
* ------------+-----------------+--------------+------------------------------
|
||||
* language | "<lang>" | "<lang>" | The language the frontend is
|
||||
* | | | configured for
|
||||
* ------------+-----------------+--------------+------------------------------
|
||||
* platform | "<krn> <hw>" | "<krn> <hw>" | Efectively uname -s -i,
|
||||
* | | | eg "Linux x86_64"
|
||||
* ------------+-----------------+--------------+------------------------------
|
||||
* userAgent | "Mozilla/5.0 (" | "NetSurf" | The usual useragent string
|
||||
* | | | with excessive lies
|
||||
* ------------+-----------------+--------------+------------------------------
|
||||
*/
|
||||
|
||||
#define NAVIGATOR_APPNAME "NetSurf"
|
||||
#define NAVIGATOR_APPCODENAME "NetSurf"
|
||||
%}
|
||||
|
||||
binding navigator {
|
||||
type js_libdom; /* the binding type */
|
||||
|
||||
interface Navigator; /* Web IDL interface to generate */
|
||||
|
||||
}
|
||||
|
||||
getter appName %{
|
||||
jsret = JS_NewStringCopyZ(cx, NAVIGATOR_APPNAME);
|
||||
%}
|
||||
|
||||
getter appCodeName %{
|
||||
jsret = JS_NewStringCopyZ(cx, NAVIGATOR_APPCODENAME);
|
||||
%}
|
||||
|
||||
getter appVersion %{
|
||||
jsret = JS_NewStringCopyZ(cx, netsurf_version);
|
||||
%}
|
||||
|
||||
getter language %{
|
||||
const char *alang = nsoption_charp(accept_language);
|
||||
|
||||
if (alang != NULL) {
|
||||
jsret = JS_NewStringCopyZ(cx, alang);
|
||||
}
|
||||
|
||||
%}
|
||||
|
||||
getter platform %{
|
||||
struct utsname *cutsname;
|
||||
|
||||
cutsname = malloc(sizeof(struct utsname));
|
||||
|
||||
if ((cutsname != NULL) && (uname(cutsname) >= 0)) {
|
||||
char *platstr;
|
||||
int platstrlen;
|
||||
|
||||
platstrlen = strlen(cutsname->sysname) + strlen(cutsname->machine) + 2;
|
||||
platstr = malloc(platstrlen);
|
||||
if (platstr != NULL) {
|
||||
snprintf(platstr, platstrlen, "%s %s", cutsname->sysname, cutsname->machine);
|
||||
jsret = JS_NewStringCopyN(cx, platstr, platstrlen - 1);
|
||||
free(platstr);
|
||||
}
|
||||
}
|
||||
%}
|
||||
|
||||
getter userAgent %{
|
||||
jsret = JS_NewStringCopyZ(cx, user_agent_string());
|
||||
%}
|
@ -1,206 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012 Vincent Sanders <vince@netsurf-browser.org>
|
||||
*
|
||||
* This file is part of NetSurf, http://www.netsurf-browser.org/
|
||||
*
|
||||
* NetSurf is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* NetSurf is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "desktop/netsurf.h"
|
||||
#include "desktop/options.h"
|
||||
|
||||
#include "utils/config.h"
|
||||
#include "utils/useragent.h"
|
||||
#include "utils/log.h"
|
||||
#include "utils/utsname.h"
|
||||
|
||||
#include "javascript/jsapi.h"
|
||||
|
||||
/*
|
||||
* navigator properties for netsurf
|
||||
*
|
||||
* Property | Everyone else | NetSurf | Notes
|
||||
* ------------+-----------------+--------------+------------------------------
|
||||
* appCodeName | "Mozilla" | "NetSurf" | This is kinda a pointless
|
||||
* | | | constant as everyone returns
|
||||
* | | | "Mozilla" which is dumb
|
||||
* ------------+-----------------+--------------+------------------------------
|
||||
* appName | "<Browsername>" | "NetSurf" | Browsers named other than
|
||||
* | | | "Netscape", "Mozilla",
|
||||
* | | | "Netscape Navigator",
|
||||
* | | | "Microsoft Internet Explorer"
|
||||
* | | | often other browser have
|
||||
* | | | "(compatible with Netscape)"
|
||||
* | | | append.
|
||||
* ------------+-----------------+--------------+------------------------------
|
||||
* appVersion | "<ver> (<type>)"| "<ver>" | Actually just the version
|
||||
* | | | number e.g "3.0".
|
||||
* ------------+-----------------+--------------+------------------------------
|
||||
* language | "<lang>" | "<lang>" | The language the frontend is
|
||||
* | | | configured for
|
||||
* ------------+-----------------+--------------+------------------------------
|
||||
* platform | "<krn> <hw>" | "<krn> <hw>" | Efectively uname -s -i,
|
||||
* | | | eg "Linux x86_64"
|
||||
* ------------+-----------------+--------------+------------------------------
|
||||
* userAgent | "Mozilla/5.0 (" | "NetSurf" | The usual useragent string
|
||||
* | | | with excessive lies
|
||||
* ------------+-----------------+--------------+------------------------------
|
||||
*/
|
||||
|
||||
static JSFunctionSpec jsfunctions_navigator[] = {
|
||||
JS_FS_END
|
||||
};
|
||||
|
||||
#define NAVIGATOR_APPNAME "NetSurf"
|
||||
#define NAVIGATOR_APPCODENAME "NetSurf"
|
||||
|
||||
static JSBool JSAPI_PROPERTYGET(appName, JSContext *cx, JSObject *obj, jsval *vp)
|
||||
{
|
||||
JS_SET_RVAL(cx, vp, STRING_TO_JSVAL(JS_NewStringCopyZ(cx, NAVIGATOR_APPNAME)));
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_PROPERTYSET(appName, JSContext *cx, JSObject *obj, jsval *vp)
|
||||
{
|
||||
assert(false);
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_PROPERTYGET(appCodeName, JSContext *cx, JSObject *obj, jsval *vp)
|
||||
{
|
||||
JS_SET_RVAL(cx, vp, STRING_TO_JSVAL(JS_NewStringCopyZ(cx, NAVIGATOR_APPCODENAME)));
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_PROPERTYSET(appCodeName, JSContext *cx, JSObject *obj, jsval *vp)
|
||||
{
|
||||
assert(false);
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_PROPERTYGET(appVersion, JSContext *cx, JSObject *obj, jsval *vp)
|
||||
{
|
||||
JS_SET_RVAL(cx, vp, STRING_TO_JSVAL(JS_NewStringCopyZ(cx, netsurf_version)));
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_PROPERTYSET(appVersion, JSContext *cx, JSObject *obj, jsval *vp)
|
||||
{
|
||||
assert(false);
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_PROPERTYGET(language, JSContext *cx, JSObject *obj, jsval *vp)
|
||||
{
|
||||
const char *alang = nsoption_charp(accept_language);
|
||||
|
||||
if (alang != NULL) {
|
||||
JS_SET_RVAL(cx, vp, STRING_TO_JSVAL(JS_NewStringCopyZ(cx, alang)));
|
||||
} else {
|
||||
JS_SET_RVAL(cx, vp, JSVAL_VOID);
|
||||
}
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_PROPERTYSET(language, JSContext *cx, JSObject *obj, jsval *vp)
|
||||
{
|
||||
assert(false);
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_PROPERTYGET(platform, JSContext *cx, JSObject *obj, jsval *vp)
|
||||
{
|
||||
struct utsname *cutsname;
|
||||
|
||||
cutsname = malloc(sizeof(struct utsname));
|
||||
|
||||
if ((cutsname == NULL) || uname(cutsname) < 0) {
|
||||
JS_SET_RVAL(cx, vp, JSVAL_VOID);
|
||||
} else {
|
||||
char *platstr;
|
||||
int platstrlen;
|
||||
platstrlen = strlen(cutsname->sysname) + strlen(cutsname->machine) + 2;
|
||||
platstr = malloc(platstrlen);
|
||||
if (platstr != NULL) {
|
||||
snprintf(platstr, platstrlen, "%s %s", cutsname->sysname, cutsname->machine);
|
||||
JS_SET_RVAL(cx, vp, STRING_TO_JSVAL(JS_NewStringCopyN(cx, platstr, platstrlen - 1)));
|
||||
free(platstr);
|
||||
} else {
|
||||
JS_SET_RVAL(cx, vp, JSVAL_VOID);
|
||||
}
|
||||
}
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_PROPERTYSET(platform, JSContext *cx, JSObject *obj, jsval *vp)
|
||||
{
|
||||
assert(false);
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_PROPERTYGET(userAgent, JSContext *cx, JSObject *obj, jsval *vp)
|
||||
{
|
||||
JS_SET_RVAL(cx, vp, STRING_TO_JSVAL(JS_NewStringCopyZ(cx, user_agent_string())));
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_PROPERTYSET(userAgent, JSContext *cx, JSObject *obj, jsval *vp)
|
||||
{
|
||||
assert(false);
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
|
||||
static JSPropertySpec jsproperties_navigator[] =
|
||||
{
|
||||
JSAPI_PS(appName, 0, JSPROP_ENUMERATE | JSPROP_READONLY | JSPROP_SHARED),
|
||||
JSAPI_PS(appCodeName, 0, JSPROP_ENUMERATE | JSPROP_READONLY | JSPROP_SHARED),
|
||||
JSAPI_PS(appVersion, 0, JSPROP_ENUMERATE | JSPROP_READONLY | JSPROP_SHARED),
|
||||
JSAPI_PS(language, 0, JSPROP_ENUMERATE | JSPROP_READONLY | JSPROP_SHARED),
|
||||
JSAPI_PS(platform, 0, JSPROP_ENUMERATE | JSPROP_READONLY | JSPROP_SHARED),
|
||||
JSAPI_PS(userAgent, 0, JSPROP_ENUMERATE | JSPROP_READONLY | JSPROP_SHARED),
|
||||
JSAPI_PS_END
|
||||
};
|
||||
|
||||
static JSClass jsclass_navigator =
|
||||
{
|
||||
"navigator",
|
||||
JSCLASS_HAS_PRIVATE,
|
||||
JS_PropertyStub,
|
||||
JS_PropertyStub,
|
||||
JS_PropertyStub,
|
||||
JS_StrictPropertyStub,
|
||||
JS_EnumerateStub,
|
||||
JS_ResolveStub,
|
||||
JS_ConvertStub,
|
||||
JS_FinalizeStub,
|
||||
JSCLASS_NO_OPTIONAL_MEMBERS
|
||||
};
|
||||
|
||||
|
||||
JSObject *jsapi_new_navigator(JSContext *cx, JSObject *parent)
|
||||
{
|
||||
return JS_InitClass(cx,
|
||||
parent,
|
||||
NULL,
|
||||
&jsclass_navigator,
|
||||
NULL,
|
||||
0,
|
||||
jsproperties_navigator,
|
||||
jsfunctions_navigator,
|
||||
NULL,
|
||||
NULL);
|
||||
}
|
@ -1,299 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012 Vincent Sanders <vince@netsurf-browser.org>
|
||||
*
|
||||
* This file is part of NetSurf, http://www.netsurf-browser.org/
|
||||
*
|
||||
* NetSurf is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* NetSurf is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
|
||||
/* IDL http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#interface-node
|
||||
|
||||
interface Node : EventTarget {
|
||||
const unsigned short ELEMENT_NODE = 1;
|
||||
const unsigned short ATTRIBUTE_NODE = 2; // historical
|
||||
const unsigned short TEXT_NODE = 3;
|
||||
const unsigned short CDATA_SECTION_NODE = 4; // historical
|
||||
const unsigned short ENTITY_REFERENCE_NODE = 5; // historical
|
||||
const unsigned short ENTITY_NODE = 6; // historical
|
||||
const unsigned short PROCESSING_INSTRUCTION_NODE = 7;
|
||||
const unsigned short COMMENT_NODE = 8;
|
||||
const unsigned short DOCUMENT_NODE = 9;
|
||||
const unsigned short DOCUMENT_TYPE_NODE = 10;
|
||||
const unsigned short DOCUMENT_FRAGMENT_NODE = 11;
|
||||
const unsigned short NOTATION_NODE = 12; // historical
|
||||
readonly attribute unsigned short nodeType;
|
||||
readonly attribute DOMString nodeName;
|
||||
|
||||
readonly attribute DOMString? baseURI;
|
||||
|
||||
readonly attribute Document? ownerDocument;
|
||||
readonly attribute Node? parentNode;
|
||||
readonly attribute Element? parentElement;
|
||||
boolean hasChildNodes();
|
||||
readonly attribute NodeList childNodes;
|
||||
readonly attribute Node? firstChild;
|
||||
readonly attribute Node? lastChild;
|
||||
readonly attribute Node? previousSibling;
|
||||
readonly attribute Node? nextSibling;
|
||||
|
||||
const unsigned short DOCUMENT_POSITION_DISCONNECTED = 0x01;
|
||||
const unsigned short DOCUMENT_POSITION_PRECEDING = 0x02;
|
||||
const unsigned short DOCUMENT_POSITION_FOLLOWING = 0x04;
|
||||
const unsigned short DOCUMENT_POSITION_CONTAINS = 0x08;
|
||||
const unsigned short DOCUMENT_POSITION_CONTAINED_BY = 0x10;
|
||||
const unsigned short DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 0x20; // historical
|
||||
unsigned short compareDocumentPosition(Node other);
|
||||
boolean contains(Node? other);
|
||||
|
||||
attribute DOMString? nodeValue;
|
||||
attribute DOMString? textContent;
|
||||
Node insertBefore(Node node, Node? child);
|
||||
Node appendChild(Node node);
|
||||
Node replaceChild(Node node, Node child);
|
||||
Node removeChild(Node child);
|
||||
void normalize();
|
||||
|
||||
|
||||
Node cloneNode(optional boolean deep = true);
|
||||
boolean isEqualNode(Node? node);
|
||||
|
||||
DOMString lookupPrefix(DOMString? namespace);
|
||||
DOMString lookupNamespaceURI(DOMString? prefix);
|
||||
boolean isDefaultNamespace(DOMString? namespace);
|
||||
};
|
||||
*/
|
||||
|
||||
#include "jsclass.h"
|
||||
|
||||
#include "eventtarget.c"
|
||||
|
||||
static JSBool JSAPI_NATIVE(hasChildNodes, JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
struct JSCLASS_TYPE *priv;
|
||||
|
||||
priv = JS_GetInstancePrivate(cx, JS_THIS_OBJECT(cx,vp), &JSCLASS_OBJECT, NULL);
|
||||
if (priv == NULL)
|
||||
return JS_FALSE;
|
||||
|
||||
|
||||
JSAPI_SET_RVAL(cx, vp, JSVAL_VOID);
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_NATIVE(compareDocumentPosition, JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
struct JSCLASS_TYPE *priv;
|
||||
|
||||
priv = JS_GetInstancePrivate(cx, JS_THIS_OBJECT(cx,vp), &JSCLASS_OBJECT, NULL);
|
||||
if (priv == NULL)
|
||||
return JS_FALSE;
|
||||
|
||||
|
||||
JSAPI_SET_RVAL(cx, vp, JSVAL_VOID);
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_NATIVE(contains, JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
struct JSCLASS_TYPE *priv;
|
||||
|
||||
priv = JS_GetInstancePrivate(cx, JS_THIS_OBJECT(cx,vp), &JSCLASS_OBJECT, NULL);
|
||||
if (priv == NULL)
|
||||
return JS_FALSE;
|
||||
|
||||
|
||||
JSAPI_SET_RVAL(cx, vp, JSVAL_VOID);
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_NATIVE(insertBefore, JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
struct JSCLASS_TYPE *priv;
|
||||
|
||||
priv = JS_GetInstancePrivate(cx, JS_THIS_OBJECT(cx,vp), &JSCLASS_OBJECT, NULL);
|
||||
if (priv == NULL)
|
||||
return JS_FALSE;
|
||||
|
||||
|
||||
JSAPI_SET_RVAL(cx, vp, JSVAL_VOID);
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_NATIVE(appendChild, JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
struct JSCLASS_TYPE *priv;
|
||||
|
||||
priv = JS_GetInstancePrivate(cx, JS_THIS_OBJECT(cx,vp), &JSCLASS_OBJECT, NULL);
|
||||
if (priv == NULL)
|
||||
return JS_FALSE;
|
||||
|
||||
|
||||
JSAPI_SET_RVAL(cx, vp, JSVAL_VOID);
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_NATIVE(replaceChild, JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
struct JSCLASS_TYPE *priv;
|
||||
|
||||
priv = JS_GetInstancePrivate(cx, JS_THIS_OBJECT(cx,vp), &JSCLASS_OBJECT, NULL);
|
||||
if (priv == NULL)
|
||||
return JS_FALSE;
|
||||
|
||||
|
||||
JSAPI_SET_RVAL(cx, vp, JSVAL_VOID);
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_NATIVE(removeChild, JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
struct JSCLASS_TYPE *priv;
|
||||
|
||||
priv = JS_GetInstancePrivate(cx, JS_THIS_OBJECT(cx,vp), &JSCLASS_OBJECT, NULL);
|
||||
if (priv == NULL)
|
||||
return JS_FALSE;
|
||||
|
||||
|
||||
JSAPI_SET_RVAL(cx, vp, JSVAL_VOID);
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_NATIVE(normalize, JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
struct JSCLASS_TYPE *priv;
|
||||
|
||||
priv = JS_GetInstancePrivate(cx, JS_THIS_OBJECT(cx,vp), &JSCLASS_OBJECT, NULL);
|
||||
if (priv == NULL)
|
||||
return JS_FALSE;
|
||||
|
||||
|
||||
JSAPI_SET_RVAL(cx, vp, JSVAL_VOID);
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_NATIVE(cloneNode, JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
struct JSCLASS_TYPE *priv;
|
||||
|
||||
priv = JS_GetInstancePrivate(cx, JS_THIS_OBJECT(cx,vp), &JSCLASS_OBJECT, NULL);
|
||||
if (priv == NULL)
|
||||
return JS_FALSE;
|
||||
|
||||
|
||||
JSAPI_SET_RVAL(cx, vp, JSVAL_VOID);
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_NATIVE(isEqualNode, JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
struct JSCLASS_TYPE *priv;
|
||||
|
||||
priv = JS_GetInstancePrivate(cx, JS_THIS_OBJECT(cx,vp), &JSCLASS_OBJECT, NULL);
|
||||
if (priv == NULL)
|
||||
return JS_FALSE;
|
||||
|
||||
|
||||
JSAPI_SET_RVAL(cx, vp, JSVAL_VOID);
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_NATIVE(lookupPrefix, JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
struct JSCLASS_TYPE *priv;
|
||||
|
||||
priv = JS_GetInstancePrivate(cx, JS_THIS_OBJECT(cx,vp), &JSCLASS_OBJECT, NULL);
|
||||
if (priv == NULL)
|
||||
return JS_FALSE;
|
||||
|
||||
|
||||
JSAPI_SET_RVAL(cx, vp, JSVAL_VOID);
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_NATIVE(lookupNamespaceURI, JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
struct JSCLASS_TYPE *priv;
|
||||
|
||||
priv = JS_GetInstancePrivate(cx, JS_THIS_OBJECT(cx,vp), &JSCLASS_OBJECT, NULL);
|
||||
if (priv == NULL)
|
||||
return JS_FALSE;
|
||||
|
||||
|
||||
JSAPI_SET_RVAL(cx, vp, JSVAL_VOID);
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_NATIVE(isDefaultNamespace, JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
struct JSCLASS_TYPE *priv;
|
||||
|
||||
priv = JS_GetInstancePrivate(cx, JS_THIS_OBJECT(cx,vp), &JSCLASS_OBJECT, NULL);
|
||||
if (priv == NULL)
|
||||
return JS_FALSE;
|
||||
|
||||
|
||||
JSAPI_SET_RVAL(cx, vp, JSVAL_VOID);
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
#define JSAPI_FS_NODE \
|
||||
JSAPI_FS_EVENTTARGET, \
|
||||
JSAPI_FS(hasChildNodes, 0, 0), \
|
||||
JSAPI_FS(compareDocumentPosition, 0, 0), \
|
||||
JSAPI_FS(contains, 0, 0), \
|
||||
JSAPI_FS(insertBefore, 0, 0), \
|
||||
JSAPI_FS(appendChild, 0, 0), \
|
||||
JSAPI_FS(replaceChild, 0, 0), \
|
||||
JSAPI_FS(removeChild, 0, 0), \
|
||||
JSAPI_FS(normalize, 0, 0), \
|
||||
JSAPI_FS(cloneNode, 0, 0), \
|
||||
JSAPI_FS(isEqualNode, 0, 0), \
|
||||
JSAPI_FS(lookupPrefix, 0, 0), \
|
||||
JSAPI_FS(lookupNamespaceURI, 0, 0), \
|
||||
JSAPI_FS(isDefaultNamespace, 0, 0)
|
||||
|
||||
|
||||
static JSBool JSAPI_PROPERTYGET(nodeType, JSContext *cx, JSObject *obj, jsval *vp)
|
||||
{
|
||||
JS_SET_RVAL(cx, vp, JSVAL_NULL);
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_PROPERTYGET(textContent, JSContext *cx, JSObject *obj, jsval *vp)
|
||||
{
|
||||
JS_SET_RVAL(cx, vp, JSVAL_NULL);
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_PROPERTYSET(textContent, JSContext *cx, JSObject *obj, jsval *vp)
|
||||
{
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
#define JSAPI_PS_NODE \
|
||||
JSAPI_PS_RO(nodeType, 0, JSPROP_ENUMERATE | JSPROP_SHARED), \
|
||||
JSAPI_PS(textContent, 0, JSPROP_ENUMERATE | JSPROP_SHARED)
|
167
javascript/jsapi/window.bnd
Normal file
167
javascript/jsapi/window.bnd
Normal file
@ -0,0 +1,167 @@
|
||||
/* binding to generate window */
|
||||
|
||||
#include "dom.bnd"
|
||||
|
||||
webidlfile "html.idl";
|
||||
|
||||
hdrcomment "Part of NetSurf Project";
|
||||
|
||||
preamble %{
|
||||
|
||||
#include <dom/dom.h>
|
||||
|
||||
#include "utils/config.h"
|
||||
#include "utils/log.h"
|
||||
|
||||
#include "javascript/jsapi.h"
|
||||
#include "javascript/jsapi/binding.h"
|
||||
|
||||
%}
|
||||
|
||||
binding window {
|
||||
type js_libdom; /* the binding type */
|
||||
|
||||
interface Window; /* Web IDL interface to generate */
|
||||
|
||||
/* private are parameters to constructor stored in private
|
||||
* context structure.
|
||||
*
|
||||
* internal are value stored in private context structure but not
|
||||
* passed to constructor but are considered for property
|
||||
* getters/setters.
|
||||
*/
|
||||
private "struct browser_window *" bw;
|
||||
private "struct html_content *" htmlc;
|
||||
internal "JSObject *" document;
|
||||
internal "JSObject *" navigator;
|
||||
internal "JSObject *" console;
|
||||
internal "JSObject *" location;
|
||||
}
|
||||
|
||||
api global %{
|
||||
%}
|
||||
|
||||
api init %{
|
||||
JSObject *user_proto;
|
||||
|
||||
prototype = JS_NewCompartmentAndGlobalObject(cx, &JSClass_Window, NULL);
|
||||
if (prototype == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/** @todo reconsider global object handling. future
|
||||
* editions of spidermonkey appear to be removing the
|
||||
* idea of a global so we probably need to handle
|
||||
* global object references internally
|
||||
*/
|
||||
|
||||
/* set the contexts global */
|
||||
JS_SetGlobalObject(cx, prototype);
|
||||
|
||||
/* Populate the global object with the standard globals, like
|
||||
* Object and Array.
|
||||
*/
|
||||
if (!JS_InitStandardClasses(cx, prototype)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* add functions to prototype */
|
||||
if (!JS_DefineFunctions(cx, prototype, jsclass_functions)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* add properties to prototype */
|
||||
if (!JS_DefineProperties(cx, prototype, jsclass_properties))
|
||||
return NULL;
|
||||
|
||||
/* Initialises all the user javascript classes to make their
|
||||
* prototypes available.
|
||||
*/
|
||||
/** @todo should we be managing these prototype objects ourselves */
|
||||
user_proto = jsapi_InitClass_Document(cx, prototype);
|
||||
if (user_proto == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
user_proto = jsapi_InitClass_Navigator(cx, prototype);
|
||||
if (user_proto == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
user_proto = jsapi_InitClass_Location(cx, prototype);
|
||||
if (user_proto == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
user_proto = jsapi_InitClass_Console(cx, prototype);
|
||||
if (user_proto == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
user_proto = jsapi_InitClass_HTMLElement(cx, prototype);
|
||||
if (user_proto == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
%}
|
||||
|
||||
api new %{
|
||||
/* @todo sort out windows that are not globals */
|
||||
assert(parent == NULL);
|
||||
|
||||
/* the window object is the global so its prototype *is* the instance */
|
||||
newobject = prototype;
|
||||
|
||||
/* instantiate the subclasses off the window global */
|
||||
private->document = jsapi_new_Document(cx,
|
||||
NULL,
|
||||
newobject,
|
||||
htmlc->document,
|
||||
htmlc);
|
||||
if (private->document == NULL) {
|
||||
free(private);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
private->navigator = jsapi_new_Navigator(cx, NULL, newobject);
|
||||
if (private->navigator == NULL) {
|
||||
free(private);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
private->location = jsapi_new_Location(cx, NULL, newobject, bw);
|
||||
if (private->location == NULL) {
|
||||
free(private);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
private->console = jsapi_new_Console(cx, NULL, newobject);
|
||||
if (private->console == NULL) {
|
||||
free(private);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/** @todo forms, history */
|
||||
|
||||
LOG(("Created new window object %p", newobject));
|
||||
%}
|
||||
|
||||
operation confirm %{
|
||||
warn_user(message, NULL);
|
||||
%}
|
||||
|
||||
operation alert %{
|
||||
warn_user(message, NULL);
|
||||
%}
|
||||
|
||||
operation prompt %{
|
||||
warn_user(message, NULL);
|
||||
%}
|
||||
|
||||
getter window %{
|
||||
jsret = obj;
|
||||
%}
|
||||
|
||||
getter self %{
|
||||
jsret = obj;
|
||||
%}
|
@ -1,327 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012 Vincent Sanders <vince@netsurf-browser.org>
|
||||
*
|
||||
* This file is part of NetSurf, http://www.netsurf-browser.org/
|
||||
*
|
||||
* NetSurf is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* NetSurf is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "utils/log.h"
|
||||
|
||||
#include "javascript/jsapi.h"
|
||||
|
||||
/* IDL
|
||||
|
||||
[NamedPropertiesObject]
|
||||
interface Window : EventTarget {
|
||||
// the current browsing context
|
||||
[Unforgeable] readonly attribute WindowProxy window;
|
||||
[Replaceable] readonly attribute WindowProxy self;
|
||||
[Unforgeable] readonly attribute Document document;
|
||||
attribute DOMString name;
|
||||
[PutForwards=href, Unforgeable] readonly attribute Location location;
|
||||
readonly attribute History history;
|
||||
|
||||
boolean find(optional DOMString aString, optional boolean aCaseSensitive, optional boolean aBackwards, optional boolean aWrapAround, optional boolean aWholeWord, optional boolean aSearchInFrames, optional boolean aShowDialog);
|
||||
|
||||
[Replaceable] readonly attribute BarProp locationbar;
|
||||
[Replaceable] readonly attribute BarProp menubar;
|
||||
[Replaceable] readonly attribute BarProp personalbar;
|
||||
[Replaceable] readonly attribute BarProp scrollbars;
|
||||
[Replaceable] readonly attribute BarProp statusbar;
|
||||
[Replaceable] readonly attribute BarProp toolbar;
|
||||
attribute DOMString status;
|
||||
void close();
|
||||
void stop();
|
||||
void focus();
|
||||
void blur();
|
||||
|
||||
// other browsing contexts
|
||||
[Replaceable] readonly attribute WindowProxy frames;
|
||||
[Replaceable] readonly attribute unsigned long length;
|
||||
[Unforgeable] readonly attribute WindowProxy top;
|
||||
attribute WindowProxy? opener;
|
||||
readonly attribute WindowProxy parent;
|
||||
readonly attribute Element? frameElement;
|
||||
WindowProxy open(optional DOMString url, optional DOMString target, optional DOMString features, optional boolean replace);
|
||||
getter WindowProxy (unsigned long index);
|
||||
getter object (DOMString name);
|
||||
|
||||
// the user agent
|
||||
readonly attribute Navigator navigator;
|
||||
readonly attribute External external;
|
||||
readonly attribute ApplicationCache applicationCache;
|
||||
|
||||
// user prompts
|
||||
void alert(DOMString message);
|
||||
boolean confirm(DOMString message);
|
||||
DOMString? prompt(DOMString message, optional DOMString default);
|
||||
void print();
|
||||
any showModalDialog(DOMString url, optional any argument);
|
||||
|
||||
// cross-document messaging
|
||||
void postMessage(any message, DOMString targetOrigin, optional sequence<Transferable> transfer);
|
||||
|
||||
// event handler IDL attributes
|
||||
[TreatNonCallableAsNull] attribute Function? onabort;
|
||||
[TreatNonCallableAsNull] attribute Function? onafterprint;
|
||||
[TreatNonCallableAsNull] attribute Function? onbeforeprint;
|
||||
[TreatNonCallableAsNull] attribute Function? onbeforeunload;
|
||||
[TreatNonCallableAsNull] attribute Function? onblur;
|
||||
[TreatNonCallableAsNull] attribute Function? oncancel;
|
||||
[TreatNonCallableAsNull] attribute Function? oncanplay;
|
||||
[TreatNonCallableAsNull] attribute Function? oncanplaythrough;
|
||||
[TreatNonCallableAsNull] attribute Function? onchange;
|
||||
[TreatNonCallableAsNull] attribute Function? onclick;
|
||||
[TreatNonCallableAsNull] attribute Function? onclose;
|
||||
[TreatNonCallableAsNull] attribute Function? oncontextmenu;
|
||||
[TreatNonCallableAsNull] attribute Function? oncuechange;
|
||||
[TreatNonCallableAsNull] attribute Function? ondblclick;
|
||||
[TreatNonCallableAsNull] attribute Function? ondrag;
|
||||
[TreatNonCallableAsNull] attribute Function? ondragend;
|
||||
[TreatNonCallableAsNull] attribute Function? ondragenter;
|
||||
[TreatNonCallableAsNull] attribute Function? ondragleave;
|
||||
[TreatNonCallableAsNull] attribute Function? ondragover;
|
||||
[TreatNonCallableAsNull] attribute Function? ondragstart;
|
||||
[TreatNonCallableAsNull] attribute Function? ondrop;
|
||||
[TreatNonCallableAsNull] attribute Function? ondurationchange;
|
||||
[TreatNonCallableAsNull] attribute Function? onemptied;
|
||||
[TreatNonCallableAsNull] attribute Function? onended;
|
||||
[TreatNonCallableAsNull] attribute Function? onerror;
|
||||
[TreatNonCallableAsNull] attribute Function? onfocus;
|
||||
[TreatNonCallableAsNull] attribute Function? onhashchange;
|
||||
[TreatNonCallableAsNull] attribute Function? oninput;
|
||||
[TreatNonCallableAsNull] attribute Function? oninvalid;
|
||||
[TreatNonCallableAsNull] attribute Function? onkeydown;
|
||||
[TreatNonCallableAsNull] attribute Function? onkeypress;
|
||||
[TreatNonCallableAsNull] attribute Function? onkeyup;
|
||||
[TreatNonCallableAsNull] attribute Function? onload;
|
||||
[TreatNonCallableAsNull] attribute Function? onloadeddata;
|
||||
[TreatNonCallableAsNull] attribute Function? onloadedmetadata;
|
||||
[TreatNonCallableAsNull] attribute Function? onloadstart;
|
||||
[TreatNonCallableAsNull] attribute Function? onmessage;
|
||||
[TreatNonCallableAsNull] attribute Function? onmousedown;
|
||||
[TreatNonCallableAsNull] attribute Function? onmousemove;
|
||||
[TreatNonCallableAsNull] attribute Function? onmouseout;
|
||||
[TreatNonCallableAsNull] attribute Function? onmouseover;
|
||||
[TreatNonCallableAsNull] attribute Function? onmouseup;
|
||||
[TreatNonCallableAsNull] attribute Function? onmousewheel;
|
||||
[TreatNonCallableAsNull] attribute Function? onoffline;
|
||||
[TreatNonCallableAsNull] attribute Function? ononline;
|
||||
[TreatNonCallableAsNull] attribute Function? onpause;
|
||||
[TreatNonCallableAsNull] attribute Function? onplay;
|
||||
[TreatNonCallableAsNull] attribute Function? onplaying;
|
||||
[TreatNonCallableAsNull] attribute Function? onpagehide;
|
||||
[TreatNonCallableAsNull] attribute Function? onpageshow;
|
||||
[TreatNonCallableAsNull] attribute Function? onpopstate;
|
||||
[TreatNonCallableAsNull] attribute Function? onprogress;
|
||||
[TreatNonCallableAsNull] attribute Function? onratechange;
|
||||
[TreatNonCallableAsNull] attribute Function? onreset;
|
||||
[TreatNonCallableAsNull] attribute Function? onresize;
|
||||
[TreatNonCallableAsNull] attribute Function? onscroll;
|
||||
[TreatNonCallableAsNull] attribute Function? onseeked;
|
||||
[TreatNonCallableAsNull] attribute Function? onseeking;
|
||||
[TreatNonCallableAsNull] attribute Function? onselect;
|
||||
[TreatNonCallableAsNull] attribute Function? onshow;
|
||||
[TreatNonCallableAsNull] attribute Function? onstalled;
|
||||
[TreatNonCallableAsNull] attribute Function? onstorage;
|
||||
[TreatNonCallableAsNull] attribute Function? onsubmit;
|
||||
[TreatNonCallableAsNull] attribute Function? onsuspend;
|
||||
[TreatNonCallableAsNull] attribute Function? ontimeupdate;
|
||||
[TreatNonCallableAsNull] attribute Function? onunload;
|
||||
[TreatNonCallableAsNull] attribute Function? onvolumechange;
|
||||
[TreatNonCallableAsNull] attribute Function? onwaiting;
|
||||
};
|
||||
|
||||
*/
|
||||
|
||||
|
||||
static JSBool JSAPI_NATIVE(alert, JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
JSString* u16_txt;
|
||||
char *txt;
|
||||
unsigned long length;
|
||||
|
||||
if (!JS_ConvertArguments(cx, argc, JSAPI_ARGV(cx, vp), "S", &u16_txt))
|
||||
return JS_FALSE;
|
||||
|
||||
JSString_to_char(u16_txt, txt, length);
|
||||
|
||||
warn_user(txt, NULL);
|
||||
|
||||
JSAPI_SET_RVAL(cx, vp, JSVAL_VOID);
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_NATIVE(confirm, JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
JSString* u16_txt;
|
||||
char *txt;
|
||||
unsigned long length;
|
||||
JSBool result = JS_FALSE;
|
||||
|
||||
if (!JS_ConvertArguments(cx, argc, JSAPI_ARGV(cx, vp), "S", &u16_txt))
|
||||
return JS_FALSE;
|
||||
|
||||
JSString_to_char(u16_txt, txt, length);
|
||||
|
||||
warn_user(txt, NULL);
|
||||
|
||||
JSAPI_SET_RVAL(cx, vp, BOOLEAN_TO_JSVAL(result));
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_NATIVE(prompt, JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
JSString* u16_txt;
|
||||
char *txt;
|
||||
unsigned long length;
|
||||
|
||||
if (!JS_ConvertArguments(cx, argc, JSAPI_ARGV(cx, vp), "S", &u16_txt))
|
||||
return JS_FALSE;
|
||||
|
||||
JSString_to_char(u16_txt, txt, length);
|
||||
|
||||
warn_user(txt, NULL);
|
||||
|
||||
JSAPI_SET_RVAL(cx, vp, JSVAL_VOID);
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_NATIVE(close, JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
JSAPI_SET_RVAL(cx, vp, JSVAL_VOID);
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_NATIVE(stop, JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
JSAPI_SET_RVAL(cx, vp, JSVAL_VOID);
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_NATIVE(focus, JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
JSAPI_SET_RVAL(cx, vp, JSVAL_VOID);
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_NATIVE(blur, JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
JSAPI_SET_RVAL(cx, vp, JSVAL_VOID);
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSFunctionSpec jsfunctions_window[] =
|
||||
{
|
||||
JSAPI_FS(close, 0, 0),
|
||||
JSAPI_FS(stop, 0, 0),
|
||||
JSAPI_FS(focus, 0, 0),
|
||||
JSAPI_FS(blur, 0, 0),
|
||||
JSAPI_FS(alert, 1, 0),
|
||||
JSAPI_FS(confirm, 1, 0),
|
||||
JSAPI_FS(prompt, 1, 0),
|
||||
JSAPI_FS_END
|
||||
};
|
||||
|
||||
|
||||
static JSBool JSAPI_PROPERTYGET(window, JSContext *cx, JSObject *obj, jsval *vp)
|
||||
{
|
||||
JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(obj));
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool JSAPI_PROPERTYGET(self, JSContext *cx, JSObject *obj, jsval *vp)
|
||||
{
|
||||
JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(obj));
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSPropertySpec jsproperties_window[] =
|
||||
{
|
||||
JSAPI_PS_RO(window, 0, JSPROP_ENUMERATE | JSPROP_SHARED),
|
||||
JSAPI_PS_RO(self, 0, JSPROP_ENUMERATE | JSPROP_SHARED),
|
||||
JSAPI_PS_END
|
||||
};
|
||||
|
||||
/* The class of the global object. */
|
||||
static JSClass jsclass_window = {
|
||||
"window",
|
||||
JSCLASS_HAS_PRIVATE | JSCLASS_GLOBAL_FLAGS,
|
||||
JS_PropertyStub,
|
||||
JS_PropertyStub,
|
||||
JS_PropertyStub,
|
||||
JS_StrictPropertyStub,
|
||||
JS_EnumerateStub,
|
||||
JS_ResolveStub,
|
||||
JS_ConvertStub,
|
||||
JS_FinalizeStub,
|
||||
JSCLASS_NO_OPTIONAL_MEMBERS
|
||||
};
|
||||
|
||||
|
||||
JSObject * jsapi_new_window(JSContext *cx, JSObject *parent, void *win_priv)
|
||||
{
|
||||
JSObject *window = NULL;
|
||||
|
||||
if (parent == NULL) {
|
||||
window = JS_NewCompartmentAndGlobalObject(cx, &jsclass_window, NULL);
|
||||
if (window == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/** @todo reconsider global object handling. future
|
||||
* editions of spidermonkey appear to be removing the
|
||||
* idea of a global so we probably need to handle
|
||||
* global object references internally
|
||||
*/
|
||||
|
||||
/* set the contexts global */
|
||||
JS_SetGlobalObject(cx, window);
|
||||
|
||||
/* Populate the global object with the standard globals, like
|
||||
* Object and Array.
|
||||
*/
|
||||
if (!JS_InitStandardClasses(cx, window)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
} else {
|
||||
/* @todo sort out windows that are not globals */
|
||||
assert(false);
|
||||
}
|
||||
|
||||
/* private pointer to browsing context */
|
||||
if (!JS_SetPrivate(cx, window, win_priv))
|
||||
return NULL;
|
||||
|
||||
/* functions */
|
||||
if (!JS_DefineFunctions(cx, window, jsfunctions_window)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* properties */
|
||||
if (!JS_DefineProperties(cx, window, jsproperties_window))
|
||||
return NULL;
|
||||
|
||||
LOG(("Created new window object %p", window));
|
||||
|
||||
return window;
|
||||
}
|
@ -47,7 +47,7 @@ $(eval $(call feature_enabled,WEBP,-DWITH_WEBP,-lwebp -lvpx,WebP (libwebp)))
|
||||
|
||||
MONKEYLDFLAGS := -lm $(shell $(PKG_CONFIG) --cflags --libs glib-2.0 lcms)
|
||||
|
||||
CFLAGS += $(MONKEYCFLAGS) -Werror
|
||||
CFLAGS += $(MONKEYCFLAGS) -Werror -Wno-unused-but-set-variable
|
||||
LDFLAGS += $(MONKEYLDFLAGS)
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
|
@ -4,9 +4,13 @@
|
||||
<link rel="stylesheet" type="text/css" href="tst.css">
|
||||
</head>
|
||||
<body>
|
||||
<h1 id="heading">Direct DOM element reference</h1>
|
||||
<p>Before</p>
|
||||
<script>document.write(document.getElementById("heading").textContent);</script>
|
||||
<p>Afterwards</p>
|
||||
<h1>DOM getElementById element reference</h1>
|
||||
<p>This shows the text content of an element obtained using <a href="http://dom.spec.whatwg.org/#dom-document-getelementbyid">document.getElementById</a></p>
|
||||
<p>Referenced text</p>
|
||||
<p id="reftext">DOM getElementById element referenced test text</p>
|
||||
<p>Inserted text</p>
|
||||
<p><script>document.write(document.getElementById("reftext").textContent);</script></p>
|
||||
<p>After inserted text</p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
@ -10,7 +10,7 @@
|
||||
</ul>
|
||||
<h2>Document write tests</h2>
|
||||
<ul>
|
||||
<li><a href="inline-doc-write-simple.html">Simple docuemnt write</a></li>
|
||||
<li><a href="inline-doc-write-simple.html">Simple document write</a></li>
|
||||
<li><a href="noscript-inline-doc-write.html">Script within inline script document write with noscript alternative</a></li>
|
||||
<li><a href="inline-doc-write.html">Script within inline script</a></li>
|
||||
<li><a href="sync-script.html">External syncronous script</a></li>
|
||||
|
Loading…
Reference in New Issue
Block a user