ref: 314a17cf6d0deaf40f45786fe5d6db27a892c0a3
parent: 0f5bb23f370d44870c782b82d29bf87801acf33d
author: Philip Silva <philip.silva@protonmail.com>
date: Sat Feb 27 04:20:16 EST 2021
put js glue code into separate file
--- a/browser/browser.go
+++ b/browser/browser.go
@@ -969,23 +969,18 @@
case "button":
if t := attr(*n.DomSubtree, "type"); t == "" || t == "submit" {
return NewSubmitButton(b, n)
- } else {
- btn := &duit.Button{
- Text: nodes.ContentFrom(*n),
- Font: n.Font(),
- }
- return NewElement(
- btn,
- n,
- )
}
+
+ btn := &duit.Button{
+ Text: nodes.ContentFrom(*n),
+ Font: n.Font(),
+ }
+
+ return NewElement(btn, n)
case "table":
return NewTable(n).Element(r+1, b, n)
case "img", "svg":
- return NewElement(
- NewImage(n),
- n,
- )
+ return NewElement(NewImage(n), n)
case "pre":
return NewElement(
NewCodeView(nodes.ContentFrom(*n), n.Map),
--- a/domino/domino.go
+++ b/domino/domino.go
@@ -31,6 +31,19 @@
//go:embed domino-lib/*js
var lib embed.FS
+//go:embed domintf.js
+var domIntfJs embed.FS
+
+var domIntf string
+
+func init() {
+ data, err := domIntfJs.ReadFile("domintf.js")
+ if err != nil {
+ panic(err.Error())
+ }
+ domIntf = string(data)
+}
+
func SetLogger(l *logger.Logger) {
log = l
}
@@ -139,104 +152,7 @@
script = strings.Replace(script, "const ", "var ", -1)
script = strings.Replace(script, "let ", "var ", -1)
script = strings.Replace(script, "<!--", "", -1)
- SCRIPT := `
- global = {};
- //global.__domino_frozen__ = true; // Must precede any require('domino')
- var domino = require('domino-lib/index');
- var Element = domino.impl.Element; // etc
-
- Object.assign(this, domino.createWindow(opossum.html, 'http://example.com'));
- window = this;
- window.parent = window;
- window.top = window;
- window.self = window;
- addEventListener = function() {};
- removeEventListener = function() {};
- window.location.href = 'http://example.com';
- var ___fq;
- ___fq = function(pre, el) {
- var i, p;
-
- if (!el) {
- return undefined;
- }
- p = el.parentElement;
-
- if (p) {
- for (i = 0; i < p.children.length; i++) {
- if (p.children[i] === el) {
- return ___fq('', p) + ' > :nth-child(' + (i+1) + ')';
- }
- }
- } else {
- return el.tagName;
- }
- };
- document._setMutationHandler(function(a) {
- // a provides attributes type, target and node or attr
- // (cf Object.keys(a))
- opossum.mutated(a.type, ___fq('yolo', a.target));
- });
- window.getComputedStyle = function(el, pseudo) {
- this.el = el;
- this.getPropertyValue = function(prop) {
- return opossum.style(___fq('', el), pseudo, prop, arguments[2]);
- };
- return this;
- };
- Element.prototype.getClientRects = function() { /* I'm a stub */ return []; }
- window.screen = {
- width: 1280,
- height: 1024
- };
- window.screenX = 0;
- window.screenY = 25;
- location = window.location;
- navigator = {
- platform: 'plan9(port)',
- userAgent: 'opossum'
- };
- HTMLElement = domino.impl.HTMLElement;
-
- function XMLHttpRequest() {
- var _method, _uri;
- var h = {};
- var ls = {};
-
- this.readyState = 0;
-
- var cb = function(data, err) {
- if (data !== '') {
- this.responseText = data;
- this.readyState = 4;
- this.state = 200;
- this.status = 200;
- if (ls['load']) ls['load'].bind(this)();
- if (this.onload) this.onload.bind(this)();
-
- if (this.onreadystatechange) this.onreadystatechange.bind(this)();
- }
- }.bind(this);
-
- this.addEventListener = function(k, fn) {
- ls[k] = fn;
- };
- this.open = function(method, uri) {
- _method = method;
- _uri = uri;
- };
- this.setRequestHeader = function(k, v) {
- h[k] = v;
- };
- this.send = function(data) {
- opossum.xhr(_method, _uri, h, data, cb);
- this.readyState = 2;
- };
- this.getAllResponseHeaders = function() {
- return '';
- };
- }
- ` + script
+ SCRIPT := domIntf + script
if !initial {
SCRIPT = script
}
--- /dev/null
+++ b/domino/domintf.js
@@ -1,0 +1,98 @@
+global = {};
+//global.__domino_frozen__ = true; // Must precede any require('domino')
+var domino = require('domino-lib/index');
+var Element = domino.impl.Element; // etc
+
+Object.assign(this, domino.createWindow(opossum.html, 'http://example.com'));
+window = this;
+window.parent = window;
+window.top = window;
+window.self = window;
+addEventListener = function() {};
+removeEventListener = function() {};
+window.location.href = 'http://example.com';
+
+var ___fq;
+___fq = function(pre, el) {
+ var i, p;
+
+ if (!el) {
+ return undefined;
+ }
+ p = el.parentElement;
+
+ if (p) {
+ for (i = 0; i < p.children.length; i++) {
+ if (p.children[i] === el) {
+ return ___fq('', p) + ' > :nth-child(' + (i+1) + ')';
+ }
+ }
+ } else {
+ return el.tagName;
+ }
+};
+
+document._setMutationHandler(function(a) {
+ // a provides attributes type, target and node or attr
+ // (cf Object.keys(a))
+ opossum.mutated(a.type, ___fq('yolo', a.target));
+});
+window.getComputedStyle = function(el, pseudo) {
+ this.el = el;
+ this.getPropertyValue = function(prop) {
+ return opossum.style(___fq('', el), pseudo, prop, arguments[2]);
+ };
+ return this;
+};
+Element.prototype.getClientRects = function() { /* I'm a stub */ return []; }
+window.screen = {
+ width: 1280,
+ height: 1024
+};
+window.screenX = 0;
+window.screenY = 25;
+location = window.location;
+navigator = {
+ platform: 'plan9(port)',
+ userAgent: 'opossum'
+};
+HTMLElement = domino.impl.HTMLElement;
+
+function XMLHttpRequest() {
+ var _method, _uri;
+ var h = {};
+ var ls = {};
+
+ this.readyState = 0;
+
+ var cb = function(data, err) {
+ if (data !== '') {
+ this.responseText = data;
+ this.readyState = 4;
+ this.state = 200;
+ this.status = 200;
+ if (ls['load']) ls['load'].bind(this)();
+ if (this.onload) this.onload.bind(this)();
+
+ if (this.onreadystatechange) this.onreadystatechange.bind(this)();
+ }
+ }.bind(this);
+
+ this.addEventListener = function(k, fn) {
+ ls[k] = fn;
+ };
+ this.open = function(method, uri) {
+ _method = method;
+ _uri = uri;
+ };
+ this.setRequestHeader = function(k, v) {
+ h[k] = v;
+ };
+ this.send = function(data) {
+ opossum.xhr(_method, _uri, h, data, cb);
+ this.readyState = 2;
+ };
+ this.getAllResponseHeaders = function() {
+ return '';
+ };
+}