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.
http://arsdnet.net/web.d/web.html
http://arsdnet.net/web.d/dom.html
Not terribly useful, I'll admit. The Javascript
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
if you're already experienced with javascript anyway though.
BTW here's something I wrote up on aother site as an
example of how awesome D is:
examples:
[code="D ROX"]
// 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
encoded mindlessly
// getting and setting attributes works w/ property syntax
// of course they are always properly encoded for charset and
html stuffs
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" ==
div.dataset.myData);
// as well as with the style..
div.style = "top: 10px;" // works with strings just like any
other attribute
div.style.top = "15px"; // or with property syntax like in
javascript
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
string
// 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") &&
!a.hasClass("coolbeans"));
assert(a.className == "cool beans");
// subclasses rock too, especially with automatic checked casts
Link link = div.requireSelector!Link("a"); // css selector syntax
supported
// alternatively:
link = cast(Link) a; // but if a isn't actually a Link, this can
be null
// easy working with the link url
a.setValue("cool", "param");
assert(a.href == "link.html?cool=param");
// arsd.html also includes functions to convert links into POST
forms btw
// 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
name=\"cool\"><option>Whoa</option><option>WTF</option></select>";
// similarly to the Link class, you can set values with ease
form.setValue("cool", "WTF"); // even works on non-text form
elements
form.setValue("sweet", "whoa"); // also can implicitly create a
hidden element to carry a value (can lead to mistakes but so
useful)
// and the Table class is pretty sweet
auto table = cast(Table) Element.make("table");
table.caption = "Cool"; // sets the caption element, not an
attribute
// variadic templates rok
table.appendRow("sweet", "whoa", 10, Element.make("a")); // adds
to the <tbody> a <tr> with appropriate children
[/code]
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.
foreach rox
d rox
More information about the Digitalmars-d
mailing list