[dojo-contributors] VML implementation notes

Tom Trenka ttrenka at gmail.com
Sat Jun 24 19:30:43 EDT 2006


I just spoke with Jesse Kuhnert (Tapestry/Tacos), and apparently they
fixed the base tag problem on thier end, so I just checked in a
reversion back to using those two methods.  Please update :)

trt

On 6/24/06, Tom Trenka <ttrenka at gmail.com> wrote:
> I had it that way for a while, and with the release of 0.3 (I think it
> was 0.3), at least two bugs were filed saying that adding those lines
> broke IE if someone also includes a BASE tag.  I have to go look at
> which bug it was, let me go see...here it is:
>
> http://trac.dojotoolkit.org/ticket/557
>
> I guess I'll have to reopen the bug and then figure out a way around it.
>
> Tom
>
> On 6/24/06, Gavin Doughtie <gavin at dfmm.org> wrote:
> > That totally works. Why wasn't it done this way to begin with?
> >
> > Tom Trenka wrote:
> >
> > > Hmmm....maybe we have to go back to the other, cleaner method and then
> > > try to figure out why IE barfs with a base tag then.
> > >
> > > If you want to try it out, in hostenv_browser.js, replace the two
> > > document.write lines with:
> > >
> > > document.namespaces.add("v","urn:schemas-microsoft-com:vml");
> > > document.createStyleSheet().addRule("v\\:*",
> > > "behavior:url(#default#VML)");
> > >
> > > (you can see it here:
> > > http://trac.dojotoolkit.org/browser/trunk/src/hostenv_browser.js?rev=3874)
> > >
> > >
> > > ...and see if you still need to add the behaviors.
> > >
> > > Tom
> > >
> > > On 6/24/06, Gavin Doughtie <gavin at dfmm.org> wrote:
> > >
> > >> I checked this on IE6, too -- hostenv_browser.js is definitely creating
> > >> the style node via document.write when dojo gets loaded, and before I
> > >> attempt to create any nodes. They just don't appear unless I also
> > >> addBehavior to the nodes as they're created.
> > >>
> > >>
> > >>
> > >> Tom Trenka wrote:
> > >>
> > >> > Gavin,
> > >> >
> > >> > It's possible that adding the behavior "the other way" (using IE's
> > >> > stylesheet code as opposed to document.write) would take care of this
> > >> > but unfortunately that seems to screw with documents that have the
> > >> > base tag defined...I don't have IE 7 installed (in general I don't
> > >> > like to work with beta software unless I have to, and what I've seen
> > >> > of IE7 so far makes me think it has a ways to go) but you *should* be
> > >> > able to see if that works by taking a look at the Chart code at WebFX;
> > >> > if you can run that demo, then we could probably figure out a way of
> > >> > getting the style code working correctly (it's gone back and forth).
> > >> >
> > >> > trt
> > >> >
> > >> > On 6/24/06, Gavin Doughtie <gavin at dfmm.org> wrote:
> > >> >
> > >> >> Was fooling around with VML just now in an attempt to get Kun's
> > >> latest
> > >> >> test_gfx to work. Here's some notes:
> > >> >>
> > >> >> I made gfx/__package__.js, which looks like this:
> > >> >>
> > >> >> dojo.provide("dojo.gfx.*");
> > >> >>
> > >> >> dojo.gfx.defaultRenderer = null;
> > >> >>
> > >> >> if (dojo.render.svg.capable) {
> > >> >>    dojo.require("dojo.gfx.svg");
> > >> >>    dojo.gfx.defaultRenderer = dojo.gfx.svg;
> > >> >> } else if (dojo.render.vml.capable) {
> > >> >>    dojo.require("dojo.gfx.vml");
> > >> >>    dojo.gfx.defaultRenderer = dojo.gfx.vml;
> > >> >> }
> > >> >>
> > >> >> The change to make test_gfx.html totally generic looks like this:
> > >> >>
> > >> >> change
> > >> >>     dojo.require("dojo.gfx.svg");
> > >> >> to:
> > >> >>      dojo.require("dojo.gfx.*");
> > >> >>
> > >> >> and the first line of the onload function becomes:
> > >> >>
> > >> >>     var g = dojo.gfx.defaultRenderer;    // should select SVG/VML
> > >> >> automatically
> > >> >>
> > >> >> I added the following the the Shape object:
> > >> >>
> > >> >> dojo.lang.extend(dojo.gfx.vml.Shape, {
> > >> >>                     nodeType: null,
> > >> >>                     initNode: function(tagName) {
> > >> >>                        tagName = tagName ? tagName : this.nodeType;
> > >> >>                        this.rawNode = document.createElement("v:" +
> > >> >> tagName);
> > >> >>                        this.rawNode.addBehavior('#default#VML');
> > >> // <<<<
> > >> >> really important!
> > >> >>                        return this;
> > >> >>                     },
> > >> >>
> > >> >> and this small change to the other shapes:
> > >> >>
> > >> >> dojo.declare("dojo.gfx.vml.Rect", dojo.gfx.vml.Shape, {
> > >> >>                 nodeType: 'rect',
> > >> >>
> > >> >> So shapes can self-init their nodes, like this:
> > >> >>
> > >> >> dojo.lang.extend(dojo.gfx.vml.Surface, {
> > >> >>     // creators
> > >> >>     createRect: function(rect){
> > >> >>         if(!this.rawNode) return null;
> > >> >>              var shape = new dojo.gfx.vml.Rect();
> > >> >>            shape.initNode().setRect(rect);
> > >> >>         this.rawNode.appendChild(shape.rawNode);
> > >> >>         return shape;
> > >> >>     },
> > >> >>
> > >> >> The thing that was driving me nuts was figuring out the line:
> > >> >>
> > >> >> this.rawNode.addBehavior('#default#VML');
> > >> >>
> > >> >> Even though dojo creates this behavior as a style node, it doesn't
> > >> work
> > >> >> because something in the mysterious innards of IE7 requires that the
> > >> >> behavior be defined before javascripts start executing -- or at
> > >> least so
> > >> >> it appears (explicitly adding the style header:
> > >> >>
> > >> >>         <style>
> > >> >>             v\:* { behavior: url(#default#VML); }
> > >> >>         </style>
> > >> >>
> > >> >> rather than trying to get the javascript to do it also works.
> > >> However, I
> > >> >> think it would be much better if the gfx API Just Worked without
> > >> placing
> > >> >> additional requirements on the markup.
> > >> >>
> > >> >> More arcana about behaviors here:
> > >> >>
> > >> >> http://msdn.microsoft.com/workshop/author/behaviors/howto/using.asp
> > >> >>
> > >> http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/addbehavior.asp
> > >>
> > >> >>
> > >> >>
> > >> >>
> > >> >> As a special added bonus, I find that the latest installs of IE7 no
> > >> >> longer support the DirectAnimation control, so I'm not going to be
> > >> doing
> > >> >> any more work in this area.
> > >> >>
> > >> >> Gavin
> > >> >> _______________________________________________
> > >> >> dojo-contributors mailing list
> > >> >> dojo-contributors at dojotoolkit.org
> > >> >> http://dojotoolkit.org/mailman/listinfo/dojo-contributors
> > >> >>
> > >> > _______________________________________________
> > >> > dojo-contributors mailing list
> > >> > dojo-contributors at dojotoolkit.org
> > >> > http://dojotoolkit.org/mailman/listinfo/dojo-contributors
> > >>
> > >>
> > >> _______________________________________________
> > >> dojo-contributors mailing list
> > >> dojo-contributors at dojotoolkit.org
> > >> http://dojotoolkit.org/mailman/listinfo/dojo-contributors
> > >>
> > > _______________________________________________
> > > dojo-contributors mailing list
> > > dojo-contributors at dojotoolkit.org
> > > http://dojotoolkit.org/mailman/listinfo/dojo-contributors
> >
> >
> > _______________________________________________
> > dojo-contributors mailing list
> > dojo-contributors at dojotoolkit.org
> > http://dojotoolkit.org/mailman/listinfo/dojo-contributors
> >
>



More information about the dojo-contributors mailing list