Erin,

On Wed, May 9, 2012 at 10:36 AM, Noe-Payne, Erin A. <[email protected]>wrote:

> >
> >Erin,
> >
> >Thank you for the clarification, I was misunderstanding some of the logic
> >so you are correct, there isn't a change needed to rave.js to support
> using
> >other popup implementations. Did I mention I'm not a javascript expert? :)
>
> Not a problem, glad to help.
>
> >
> >As to the last point, my question was really in regards to registering for
> >events from the popup itself from within the gadget. I think your point is
> >that isn't possible, which makes sense.
>
> It isn't impossible, but it isn't going to happen through gadgets.views.
> For whatever events you care about in your popup, you'll need to capture
> them in your popup through whatever script is running in that distinct
> gadget. Then you can use the gadgets pubsub (
> http://opensocial-resources.googlecode.com/svn/spec/trunk/Core-Gadget.xml#interGadgetEventing)
> to publish those events, and have your initiating gadget listen and react
> as needed.
>

This has been more challenging than I thought it would. What I really want
to interact with is the popup, not the initiating gadget, to get button
events from the popup wrapper. I have finally got it working but I had to
essentially use pubsub from the container using
rave.getManagedHub().publish/subscribe. This works except it caused a
problem in the onPublish/onSubscribe event handlers that log events. If
that is the right way then I've got a fix that works, if there is a better
way for the container to participate in pubsub I'd love to know about it.
I've included my popup definition below so you can see what I've trying to
do.


>
> >
> >Another question I have is how does one close a popup? My thought was I
> >could call gadgets.views.close(); which does successfully destroy the data
> >inside the popup but the cleanup method on the popup isn't called. What
> >triggers the cleanup method that is defined as part of the popup? I've
> >never seen that called.
>
> Calling gadgets.views.close() should cause a popup's cleanup function, if
> it exists, to be closed.
> The callstack will look like gadgets.views.close() ->
> container.views.destroyElement() -> rave.destroyPopup() -> target.cleanup()
> You can set breakpoints at rave_opensocial.js line 109 and rave.js line
> 425 if you want to track it down. If you are seeing a condition where
> cleanup exists and is not getting called, that is probably an issue that
> should be opened.
> Note that if this is only happening with respect to your custom defined
> popups, you should redo the markup as I explained and take out your
> modifications. The cleanup relies on having the proper dom element - it's
> possible your changes through a wrench in that.
>

You were right, it was an issue with my custom popup. Got it working now.



var jquery_modal = {
       name:"jquery_modal",
       containerSelector:'.ui-dialog-content',
       contentSelector:'.x-dialog-content',
       markup:'<div class="ui-dialog-content"><div
class="x-dialog-content"></div></div>',
       initialize:function (container) {
           container.find(this.contentSelector).data('popupType', this.name
);
           var cfg = {
               modal:true,
               width:1024,
               closeOnEscape:false,
               stacks:true,
               buttons: [{
                   id: "btnSave",
                   text: "Save"
               }, {
                   id: "btnCancel",
                   text: "Cancel",
                   click: function() {

 rave.getManagedHub().publish($(this).find("iframe").get(0).name, "Test");
                   }
               }]
           };
           container.dialog(cfg);

           var subID = rave.getManagedHub().subscribe(this.name, function
() {
                                   alert('dialog message');
                              });

           container.on('dialogclose', function () {
                           rave.getManagedHub().unsubscribe(subID);
                           container.dialog('destroy');
                           container.detach();
                       });
       },
       cleanup:function (content) {
           var container = content.parents(this.containerSelector);

           container.dialog('close');
       },
       singleton:false
   }

>
> >
> >Thanks,
> >Chris
> >
> >On Wed, May 9, 2012 at 8:38 AM, Noe-Payne, Erin A. <[email protected]>
> >wrote:
> >
> >>
> >> >-----Original Message-----
> >> >From: Chris Geer [mailto:[email protected]]
> >> >Sent: Wednesday, May 09, 2012 10:53 AM
> >> >To: [email protected]
> >> >Subject: Re: [DISCUSS] OpenViews Modal
> >> >
> >> >Thanks for the pointer to the backdrop: static option. That is a step
> in
> >> >the right direction.
> >>
> >> Just want to make sure I was clear. You should not have to deal with
> that
> >> variable, it has already been done in the current rave implementation.
> If
> >> you make the following call you should get a modal dialog popup with the
> >> static background set that will not close on an outside click / esc key
> >> press:
> >> gadgets.views.openGadget(returnCallback, onOpenCallback,{ viewTarget:
> >> 'modal_dialog' , view: 'my_view_name' });
> >>
> >> >I'm still with Matt though that implementors should
> >> >have the ability to use something other than bootstrap if they want,
> >> unless
> >> >bootstrap is in the process of adding a lot more features very soon.
> >> >
> >> >Unfortunately, I couldn't find a way to spawn different dialog types
> >> >without having Rave know about bootstrap and jquery.
> >>
> >> I don't follow here. As long as the library you want to use is included
> on
> >> the page, you should be able to write the appropriate script into your
> >> custom popup's initialize and cleanup functions. If that has not been
> your
> >> experience we should open a ticket.
> >>
> >> >I am not a javascript
> >> >expert so maybe someone else can look at it and make a suggestion.
> Right
> >> >now this is what I've done. I've changed the last line in the
> createPopup
> >> >method to be this:
> >> >
> >> >            if (target.popupType == 'jquery') {
> >> >                return container.get(0);
> >> >            } else {
> >> >                return container.find(target.contentSelector).get(0);
> >> >            }
> >> >
> >> >If you define a variable called popupType on your popup definition you
> can
> >> >select to use a jquery dialog instead of the bootstrap modal. Maybe if
> we
> >> >add another method to the popup definition that could return the
> correct
> >> >root node we could get rid of this?
> >>
> >> This shouldn't be necessary. Instead when you define your custom popup,
> >> write the markup so that it has two nested components. A div that acts
> as
> >> the container, and then a div inside that will hold the content. Write
> your
> >> selectors accordingly. You can follow the example of the hardcoded
> popups
> >> for this.
> >>
> >> >
> >> >The last thing I can't figure out is how to attach functions to the
> dialog
> >> >events from the gadget loaded in the popup, not the popup definition.
> For
> >> >example, we want to use this for users to edit information. We need to
> be
> >> >able to popup a "Are you sure you want to cancel as you'll lose your
> >> >changes" but we only want to do it if they've made changes. That
> requires
> >> >the function to have access to data in the popup that is loaded. I
> haven't
> >> >tried this yet but maybe we could add a view_param option when we open
> >> >the
> >> >dialog that would tell the gadget it's running inside a popup and give
> it
> >> >the name of the element to lookup to attach functions? Not sure if that
> >> >would work, maybe I'll try.
> >>
> >> Again, not sure if I'm following but I'll try to answer.  Your popup is
> a
> >> separate gadget from the initiating gadget. By default they are only
> able
> >> to communicate between each other at the time the popup is opened (any
> >> values passed through the opt_params.viewParams object are available in
> >the
> >> popup as view params as described in the opensocial spec) and when the
> >> popup is closed (from within your popup if you want to set the return
> value
> >> you will use gadgets.views.setReturnValue(retVal) and this data will be
> >> handed back to the initiating gadget as the argument of your
> >> onCloseCallback(retVal) at the time the popup as closed). If you want
> them
> >> to talk to each other more, you will need to use pupsub communication.
> >>
> >> This behavior is documented in a semi-understandable way at
> >> http://opensocial-resources.googlecode.com/svn/spec/trunk/Core-
> >Gadget.xml#gadgets.views.openGadget.
> >> Hopefully this actually addresses your questions?
> >>
> >> >
> >> >Chris
> >> >
> >> >On Wed, May 9, 2012 at 6:59 AM, Franklin, Matthew B.
> >> ><[email protected]>wrote:
> >> >
> >> >> >-----Original Message-----
> >> >> >From: Noe-Payne, Erin A. [mailto:[email protected]]
> >> >> >Sent: Wednesday, May 09, 2012 9:06 AM
> >> >> >To: [email protected]
> >> >> >Subject: RE: [DISCUSS] OpenViews Modal
> >> >> >
> >> >> >>-----Original Message-----
> >> >> >>From: Franklin, Matthew B. [mailto:[email protected]]
> >> >> >>Sent: Wednesday, May 09, 2012 8:22 AM
> >> >> >>To: [email protected]
> >> >> >>Subject: RE: [DISCUSS] OpenViews Modal
> >> >> >>
> >> >> >>>-----Original Message-----
> >> >> >>>From: Chris Geer [mailto:[email protected]]
> >> >> >>>Sent: Tuesday, May 08, 2012 11:25 PM
> >> >> >>>To: [email protected]
> >> >> >>>Subject: [DISCUSS] OpenViews Modal
> >> >> >>>
> >> >> >>>I've been spending a lot of time with the open_views feature. I
> >> really
> >> >> like
> >> >> >>>how things look right now using the bootstrap modal however the
> >> >> >>>functionality is just not there. The biggest problem I have is
> that
> >> if
> >> >> you
> >> >> >>>click anywhere off the dialog it automatically closes which
> doesn't
> >> work
> >> >> >>
> >> >> >>There is a flag that we can pass to the Bootstrap modal to NOT
> close
> >> on
> >> >> click.
> >> >> >>
> >> >> >
> >> >> >Correct, and that flag is being passed. Rave implements dialog and
> >> >> >modal_dialog (aka rave.opensocial.VIEW_TARGETS.DIALOG /
> >> >> >MODALDIALOG), are you using the modal version? It is receiving the
> >> >> >backdrop: 'static' flag,  and should not ever close except clicking
> on
> >> a
> >> >> button
> >> >> >bound to gadgets.views.close.  The standard dialog does not have the
> >> >> static
> >> >> >backdrop.
> >> >> >
> >> >> >>>very well for users who miss click. I've been working on a mod
> that
> >> >> would
> >> >> >>>allow you to define popups that can use either bootstrap modal or
> >> >jquery
> >> >> >>>popups.
> >> >> >>
> >> >> >>IMHO implementers should be able to use whatever type of UI that
> >they
> >> >> >>want, but it would be nice if we could support that without
> actually
> >> >> including
> >> >> >a
> >> >> >>reference to jQuery UI in the demo.  The reason behind this is to
> keep
> >> >> the
> >> >> >>demo as simple as possible.
> >> >> >>
> >> >> >>Now, if implementers are unable to use jQuery UI due to some
> >decision
> >> >we
> >> >> >>made in the code, we should fix that.
> >> >> >
> >> >> >I believe the pattern that Chris put in place to extend / override
> the
> >> >> popups
> >> >> >should allow someone to use jqui or any other library.
> >> >>
> >> >> +1
> >> >>
> >> >> >
> >> >> >>
> >> >> >>>
> >> >> >>>Are there other things we could do to make this more usable?
> >> >> >>>
> >> >> >>>Chris
> >> >> >
> >> >>
> >> >>
> >>
>

Reply via email to