A better solution would be td edit the listeners on the widgets so that instead of
listening on DynAPI.document they listeing for the dyndoc that the widget was added to.
So instead of having stuff like this in the constructor:
DynAPI.document.addEventListener(doc)
We should move that into the precreate event:
var l = new EventListener();
l.onprecreate = function(e);
e.getSource().dyndoc.addEventListener(docevents);
}
No need to pass the frame as a parameter because it's already known with the dyndoc
property.
Dan
On Fri, Dec 22, 2000 at 11:01:38AM -0500, Peter Dvorsky wrote:
>
>
> FWIW, I've found a work-around that enables me to use dynapi.gui.scrollpane
> in a frame.
> Apart from passing the frame document as an argument to the constructor as
> I outlined previously, I also turn off event bubbling in dynapi.gui.button
> for the buttons at each end of the scroll bars:
>
> listener.onmousedown = function(e) {
> var o = e.getTarget();
> e.setBubble( false ); <----- here
> if (o.enabled!=false) o.setDown();
> };
> listener.onmouseup = function(e) {
> var o = e.getTarget();
> e.setBubble( false ); <------ and here
> if (o.enabled!=false) o.setUp();
> };
>
> With this change the DragEvent.lyrListener.onmousedown crash doesn't happen
> and dynapi.gui.scrollpane works in NS 4.73 and IE 5.0.
>
> Peter Dvorsky
>
> At 11:29 AM 12/20/2000 -0500, you wrote:
>
> >Folks,
> >Thanks very much for the prompt reply to my question. Passing the frame
> >DynDocument to enableDragEvents() as well as the layer enables layer
> >dragging in frames as advertised.
> >
> >Now, the reason I was pursuing this was because I need
> >dynapi.gui.scrollpane to work in a frame. In the current version under CVS
> >Scrollpane does not work in a frame in either NS 4.73 or IE 5.0 because
> >the dynapi.gui.scrollbar doesn't work because frame dragging doesn't work.
> >
> >By passing the frame DynDocument to the dynapi.gui.scrollbar constructor I
> >was able to add the DynDocument to enableDragEvents() in the constructor
> >and to get ScrollBar to work. I suspect the extra constructor parameter is
> >a hack (I'm a pretty much a JavaScript newbie) and there is probably a
> >more elegant way to extend the current widgets so that they work in frames.
> >
> >With my hack, the ScrollPane widget works in a frame in NS 4.73 with the
> >new ScrollBar constructor and in IE as well as long as you don't touch the
> >buttons on either end of the ScrollBar. However, generating an onmousedown
> >event on one of those buttons in IE 5.0 in a framed widget with the new
> >frame-enabled ScrollBar kills IE.
> >
> >What appears to be happening is the event bubbles through successive
> >invocations of MouseEvent.bubbleEvent() which does DynLayer.invokeEvent()
> >until it calls DragEvent.lyrListener.onmousedown() and dies as described
> >below...
> >
> >DragEvent.lyrListener.onmousedown=function(e) {
> > e.cancelBrowserEvent();
> > if (DynAPI.document.dragevent) return;
> > var lyr=e.getSource();
> > lyr.dragevent=new DragEvent("dragstart",lyr);
> > DynAPI.document.dragevent=lyr.dragevent;
> > DynAPI.document.dragobject=lyr;
> > var de=lyr.dragevent;
> > de.isDragging=false;
> > de.x=e.getPageX()-e.getSource().getPageX();
> > de.y=e.getPageY()-e.getSource().getPageY();
> > de.pageX=e.getPageX();
> > de.pageY=e.getPageY();
> > de.parentPageX=lyr.parent.getPageX(); <---- here there is no
> > lyr.parent
> > de.parentPageY=lyr.parent.getPageY();
> > e.setBubble(true);
> >};
> >
> >So my framed ScrollPane buttons and sliders now work fine in NS 4.73 with
> >the change to enableDragEvents() and on IE5.0 the sliders work fine but it
> >dies a horrible death when I click on a button.
> >
> >I think DynAPI is a terrific toolkit and is going to be widely used once
> >it settles down a bit and people learn about it. I'm glad to be part of
> >the bleeding edge.
> >Thanks for any assistance you might be able to offer on this issue.
> >
> >Peter Dvorsky
> >
> >
> >At 04:25 PM 12/19/2000 +0100, you wrote:
> >>I added support for dragging in other frames. Simply pass the dyndocument
> >>where
> >>the layer is dragged as first parameter of the enableDragEvents method.
> >>
> >>d = new dyndocument(parent.blah)
> >>a = new DynLayer()
> >>d.addChild(a)
> >>DragEvent.enableDragEvents(d,a)
> >>
> >>
> >>Cya
> >>
> >>...
> >>
> >>Which brings up again the need for proper API documentation.
> >>
> >>
> >>
> >>Richard Bennett wrote:
> >>
> >> > hi,
> >> > I haven't used frames with DynAPI myself yet, so my solution might not be
> >> > 100% orthodox.
> >> > It seems you have to assign a drag event to the frame in question
> >> before you
> >> > can target the layer,
> >> > but then you get errors when you click on the target frame, if you disable
> >> > drag events for the
> >> > target frame again, the reference seems to remain, without errors:
> >> >
> >> > myLayer=new DynLayer(null,100,100,100,100,'#c0c0c0')
> >> > tdoc = new DynDocument(parent.treeFrame);
> >> > tdoc.addChild(myLayer);
> >> > DragEvent.setDragBoundary(myLayer, 0, 300, 300, 0)
> >> > DragEvent.enableDragEvents(myLayer)
> >> > DragEvent.enableDragEvents(tdoc)
> >> > DragEvent.disableDragEvents(tdoc)
> >> >
> >> > I put up the working example here:
> >> > http://www.resass.f2s.com/dynapi/php/index.php
> >> > look under Peter_Dvorsky_Examples in the tree.
> >> >
> >> > If someone would care to post the proper solution I'll update the files.
> >> >
> >> > I included DynAPIDiagnose in your file, it's my new diagnostic tool,
> >> to find
> >> > which functions/properties etc
> >> > are available for an object on the page. it's still very much alpha
> >> version
> >> > with lot's of known bugs, and a temporary
> >> > interface.
> >> > You simply type the name of some object on the page, for instance tdoc, or
> >> > myLayer, into the text box, and click "Get all".
> >> > This will initially give you all(?) the DynAPI properties/functions etc
> >> > available for this object, if you then click on, for instance,
> >> > "+ css has 126 properties" (for myLayer) it will show you browser native
> >> > properties available to myLayer.css.
> >> >
> >> > Cheers,
> >> > Richard :o
> >> > [EMAIL PROTECTED]
> >> > >
> >> > > I can drag a layer but not when it's in a frame. I don't know if I've
> >> > > uncovered a DynAPI bug or if I'm doing something wrong.
> >> > > I tried simple dragging of layers as in part 3 of the online
> >> tutorial. The
> >> > > tutorial works as described.
> >> > > However, dragging appears not to work if the draggable layer is in a
> >> > frame.
> >> > >
> >> > > Here's my code. The layer shows up perfectly well but it cannot be
> >> > dragged.
> >> > > Nothing happens.
> >> > >
> >> > > My frameset doc:
> >> > >
> >> > > <HTML>
> >> > > <HEAD>
> >> > > <TITLE>My frameset</TITLE>
> >> > >
> >> > > <SCRIPT LANGUAGE="JavaScript">
> >> > >
> >> > > function blank()
> >> > > {
> >> > > return( "<HTML></HTML>" );
> >> > > }
> >> > >
> >> > > </SCRIPT>
> >> > > </HEAD>
> >> > >
> >> > > <FRAMESET ROWS="*,5" FRAMEBORDER=1>
> >> > > <FRAME SRC=javascript:parent.blank() NAME="treeFrame">
> >> > > <FRAME SRC="dragdoc.htm" NAME="bufferFrame">
> >> > > </FRAMESET>
> >> > >
> >> > > </HTML>
> >> > >
> >> > > And here's dragdoc.htm, which only has a small change from the
> >> tutorial to
> >> > > load the draggable layer into treeFrame:
> >> > >
> >> > > <html>
> >> > > <head><title>DynAPI2 tutor - dragging</title>
> >> > > <script language="JavaScript" src="../src/dynapi.js"></script>
> >> > > <Script language="Javascript">
> >> > >
> >> > > DynAPI.setLibraryPath('../src/lib/');
> >> > > DynAPI.include('dynapi.api.*')
> >> > >
> >> > > DynAPI.onLoad=function() {
> >> > > myLayer=new DynLayer(null,100,100,100,100,'#c0c0c0')
> >> > >
> >> > > DragEvent.setDragBoundary(myLayer, 0, 300, 300, 0)
> >> > > DragEvent.enableDragEvents(myLayer)
> >> > >
> >> > > tdoc = new DynDocument(parent.treeFrame);
> >> > > tdoc.addChild(myLayer);
> >> > > }
> >> > >
> >> > > </script>
> >> > > </head>
> >> > > <body>
> >> > > </body>
> >> > > </html>
> >> > >
> >> > >
> >> > > Is this a low-level bug or am I missing something?
> >> > >
> >> > > Thanks very much for any assistance,
> >> > >
> >> > > Peter Dvorsky
>
>
> _______________________________________________
> Dynapi-Help mailing list
> [EMAIL PROTECTED]
> http://lists.sourceforge.net/mailman/listinfo/dynapi-help
_______________________________________________
Dynapi-Help mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/mailman/listinfo/dynapi-help