OT Adam D Ruppe's web stuff
Adam D. Ruppe
destructionator at gmail.com
Tue Feb 7 18:29:01 PST 2012
Here's more ddocs.
discussion at the bottom of the first link might be
good to read though.
The dom.html there is mostly just (incomplete) method
listing. I didn't write most of it up at all.
When I started doing dom.d, I was going to be strictly
a clone of the browser implementation, so some of the
comments still say things like "extension", but I went
my own direction a long time ago.
I don't know... I think most of the dom is self-explanatory
BTW here's something I wrote up on aother site as an
example of how awesome D is:
// don't need a document to create elements
auto div = Element.make("div", "Hello <there>"); // convenience
params do innerText
assert(div.innerText == "Hello <there>"); // text set
assert(div.innerHTML == "Hello <there>"); // html properly
// getting and setting attributes works w/ property syntax
// of course they are always properly encoded for charset and
div.id = "whoa";
assert(div.id == "whoa");
div.customAtrribute = div.id ~ "works";
assert(div.customAttribute == "whoaworks");
// i also support the dataset sugar over attributes
div.dataset.myData = "cool";
assert(div.getAttribute("data-my-data") == "cool" ==
// as well as with the style..
div.style = "top: 10px;" // works with strings just like any
div.style.top = "15px"; // or with property syntax like in
assert(div.style.top == "15px"); // reading works no matter how
you set it
assert(div.style == "top: 15px;"); // or you can read it as a
// i have convenience methods too
div.innerText = "sweet"; // worx, w/ proper encoding
// calls Element.make and appendChild in one go.
// can easily set text and/or a tag specific attribute
auto a = div.addChild("a", "Click me!", "link.html"); // tagName,
value, value2, dependent on tag
a.addClass("cool").addClass("beans"); // convenience methods
(chainable btw) for the class attribute
assert(a.hasClass("cool") && a.hasClass("beans") &&
assert(a.className == "cool beans");
// subclasses rock too, especially with automatic checked casts
Link link = div.requireSelector!Link("a"); // css selector syntax
link = cast(Link) a; // but if a isn't actually a Link, this can
// easy working with the link url
assert(a.href == "link.html?cool=param");
// arsd.html also includes functions to convert links into POST
// the Form subclass rox too
auto form = cast(Form) Element.make("form");
form.method = "POST";
// convenience functions from the browsers are here but who needs
them when the dom rox?
form.innerHTML = "<select
// similarly to the Link class, you can set values with ease
form.setValue("cool", "WTF"); // even works on non-text form
form.setValue("sweet", "whoa"); // also can implicitly create a
hidden element to carry a value (can lead to mistakes but so
// and the Table class is pretty sweet
auto table = cast(Table) Element.make("table");
table.caption = "Cool"; // sets the caption element, not an
// variadic templates rok
table.appendRow("sweet", "whoa", 10, Element.make("a")); // adds
to the <tbody> a <tr> with appropriate children
some people luv jquery and think it is the best thing ever
those people have never used my dom library
Speaking of jquery, what about collections of elements?
Well D has this thing called foreach which does that. But, just
to prove I could, I wrote a couple dozen lines of D to do this:
document["p a"].addClass("mutated").appendText("all links in
paragraphs get this text and that class!");
Operator overloading template craziness!
But i'm pretty meh on that since foreach is better anyway.
More information about the Digitalmars-d