I can't use edbrowse sm at the moment so in case alpine adds bad linefeeds, please refer to the attached

From c5653a8493bf6bf898355431b6fbc1ebcc09e566 Mon Sep 17 00:00:00 2001
From: Kevin Carhart <[email protected]>
Date: Sun, 16 Jun 2019 19:55:10 -0700
Subject: [PATCH] Makes html data-* attributes available in element.dataset
 object.  Also adds screen dimension properties to element.prototype.

---
 src/decorate.c     | 12 ++++++++++++
 src/jsrt           |  4 +++-
 src/startwindow.js |  8 ++++++++
 3 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/src/decorate.c b/src/decorate.c
index 52e2459..c9ad47a 100644
--- a/src/decorate.c
+++ b/src/decorate.c
@@ -937,6 +937,7 @@ static void domLink(struct htmlTag *t, const char 
*classname,       /* instantiate thi
        const char *stylestring = attribVal(t, "style");
        jsobjtype so = 0;       /* obj.style */
        jsobjtype ato = 0;      /* obj.attributes */
+       jsobjtype dso = 0;      /* obj.dataset */
        char upname[MAXTAGNAME];

        debugPrint(5, "domLink %s.%d name %s",
@@ -1043,6 +1044,8 @@ Don't do any of this if the tag is itself <style>. */
                ato = instantiate(io, "attributes", "NamedNodeMap");
                set_property_object(ato, "owner", io);
                set_property_object(io, "ownerDocument", cf->docobj);
+                dso = instantiate(io, "dataset","Object");
+                set_property_object(io,"dataset",dso);

 // only anchors with href go into links[]
                if (list && stringEqual(list, "links") &&
@@ -1549,6 +1552,15 @@ static void pushAttributes(const struct htmlTag *t)
        if (!a)
                return;
        for (i = 0; a[i]; ++i) {
+
+// attributes on HTML tags that begin with "data-" should be available under a +// "dataset" object in JS
+       if (strncmp(a[i],"data-",5)==0) {
+       jsobjtype dso = get_property_object(t->jv,"dataset");
+       if(dso)
+               set_property_string(dso, a[i]+5, v[i]);
+       }
+
 // There are some exceptions, some attributes that we handle individually.
                static const char *const exclist[] = {
                        "name", "id", "class",
diff --git a/src/jsrt b/src/jsrt
index 22507f4..4ce72fd 100644
--- a/src/jsrt
+++ b/src/jsrt
@@ -499,7 +499,7 @@ We'll get back to you if we like what you have to say.
 <input type='submit' value='Send Message' name='b1'
 onclick="alert('rock and roll')">
 </form>
-
+<DIV id=tag_with_data_attribute data-blech=abc>ok</DIV>
 <script type=text/javascript language=JavaScript>
 // I'll push the button for you
 document.forms[0].b.onclick();
@@ -892,6 +892,8 @@ if(fn.contentDocument.style.bgcolor !== "white") fail(168);
 if(querySelector(".inject").firstChild.style.display != "round") fail(175);
 if(document.body.style.fly) fail(176);

+var dataset_test = document.getElementById("tag_with_data_attribute");
+if(dataset_test.dataset.blech !== "abc") fail(177);
 </script>

 </body>
diff --git a/src/startwindow.js b/src/startwindow.js
index 5b1d4fc..589622b 100644
--- a/src/startwindow.js
+++ b/src/startwindow.js
@@ -2498,6 +2498,14 @@ set: function(s) { return mw0.newTextUnder(this, s, 1); 
}});
 Object.defineProperty(c.prototype, "nodeValue", {
 get: function() { return this.nodeType == 3 ? this.data : null;},
 set: function(h) { if(this.nodeType == 3) this.data = h; }});
+c.prototype.clientHeight = 16;
+c.prototype.clientWidth = 120;
+c.prototype.offsetHeight = 16;
+c.prototype.offsetWidth = 120;
+c.prototype.scrollHeight = 16;
+c.prototype.scrollWidth = 120;
+c.prototype.scrollTop = 0;
+c.prototype.scrollLeft = 0;
 }
 })();

--
1.8.3.2

<<attachment: kc_20190616.zip>>

Reply via email to