In Javascript, I have a widget-to-region map which tracks in which region a widget is located. Every time a widget is moved, added or deleted, the map is updated to be consistent with server-side data.
Gerald On Mon, Jun 6, 2011 at 2:11 PM, Marlon Pierce <[email protected]> wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > Deletion doesn't work if you move a gadget from one column to another: the > regionId on client and server are not in synch until you refresh the page or > logout/login. We'll have to revisit to remove the dependency of regionId on > the client side. > > > Marlon > > > On 6/6/11 5:08 PM, Zhenhua (Gerald) Guo wrote: >> I committed some code to fix the gadget deletion bug several days ago. >> I tested it and it worked. >> It still does not work for you guys? >> >> Gerald >> >> On Mon, Jun 6, 2011 at 11:34 AM, Marlon Pierce <[email protected]> >> wrote: >> Sorry, computer crash. Sure--go ahead or describe the solution and I'll do >> it. Deleting the RegionWidget from Region's list was the only way I saw to >> do the delete. >> >> >> Marlon >> >> >> On 6/6/11 1:55 PM, Franklin, Matthew B. wrote: >>>>> Ahh. That makes sense. I think there might be a way to simplify the >>>>> server side delete operation so that this wouldn't happen. Specifically, >>>>> removing the need to pass the regionId and just use the regionWidgetId to >>>>> delete the widget. >>>>> >>>>> -Matt >>>>> >>>>> On 6/6/11 1:52 PM, "Marlon Pierce" <[email protected]> wrote: >>>>> >>>>> Trying to delete a gadget that you have moved on the page throws this >>>>> error:Rave attempted to update the server with your recent changes, but >>>>> the changes were rejected by the server as invalid. >>>>> >>>>> On 6/6/11 1:46 PM, Franklin, Matthew B. wrote: >>>>>>>> >>>>>>>> On 6/6/11 1:43 PM, "Marlon Pierce" <[email protected]> wrote: >>>>>>>> >>>>>>>> I cleaned it up a bit already, but let me look at the init. There is >>>>>>>> still a bug associated with deleting gadgets that have been moved. >>>>>>>> >>>>>>>>> Moved or deleted? Can you elaborate on the bug a bit? >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> Marlon >>>>>>>> >>>>>>>> >>>>>>>> On 6/6/11 1:36 PM, Franklin, Matthew B. wrote: >>>>>>>>>>> On 6/6/11 1:10 PM, "[email protected]" <[email protected]> wrote: >>>>>>>>>>> >>>>>>>>>>>> Author: mpierce >>>>>>>>>>>> Date: Mon Jun 6 17:10:32 2011 >>>>>>>>>>>> New Revision: 1132706 >>>>>>>>>>>> >>>>>>>>>>>> URL: http://svn.apache.org/viewvc?rev=1132706&view=rev >>>>>>>>>>>> Log: >>>>>>>>>>>> Reorganizing the widget deletion code (RAVE-41) so that most of the >>>>>>>>>>>> action takes place in rave.js rather than home.jsp. Probably this >>>>>>>>>>>> needs >>>>>>>>>>>> a better design pattern applied to it. >>>>>>>>>>> >>>>>>>>>>> Thanks for taking that on. I haven't had a ton of time to look over >>>>>>>>>>> the >>>>>>>>>>> delete code yet, but from what I have seen, it looks like there >>>>>>>>>>> should >>>>>>>>>>> be >>>>>>>>>>> no reason that we can't do what is left in the home.jsp in the >>>>>>>>>>> ui.init >>>>>>>>>>> function of rave.js (init the buttons for all widgets with one >>>>>>>>>>> expression). This would allow us to move the script includes for >>>>>>>>>>> jquery, >>>>>>>>>>> etc back to the bottom of the page, which is where we really want >>>>>>>>>>> them. >>>>>>>>>>> >>>>>>>>>>> I can go ahead and make this change unless Marlon or others who have >>>>>>>>>>> been >>>>>>>>>>> working on it want to give it a go. >>>>>>>>>>> >>>>>>>>>>> -Matt >>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> Modified: >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> incubator/rave/trunk/rave-portal/src/main/webapp/WEB-INF/views/home.j >>>>>>>>>>>> sp >>>>>>>>>>>> incubator/rave/trunk/rave-portal/src/main/webapp/script/rave.js >>>>>>>>>>>> >>>>>>>>>>>> Modified: >>>>>>>>>>>> >>>>>>>>>>>> incubator/rave/trunk/rave-portal/src/main/webapp/WEB-INF/views/home.j >>>>>>>>>>>> sp >>>>>>>>>>>> URL: >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> http://svn.apache.org/viewvc/incubator/rave/trunk/rave-portal/src/mai >>>>>>>>>>>> n/w >>>>>>>>>>>> eb >>>>>>>>>>>> >>>>>>>>>>>> app/WEB-INF/views/home.jsp?rev=1132706&r1=1132705&r2=1132706&view=dif >>>>>>>>>>>> f >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> ===================================================================== >>>>>>>>>>>> === >>>>>>>>>>>> == >>>>>>>>>>>> ==== >>>>>>>>>>>> --- >>>>>>>>>>>> >>>>>>>>>>>> incubator/rave/trunk/rave-portal/src/main/webapp/WEB-INF/views/home.j >>>>>>>>>>>> sp >>>>>>>>>>>> (original) >>>>>>>>>>>> +++ >>>>>>>>>>>> >>>>>>>>>>>> incubator/rave/trunk/rave-portal/src/main/webapp/WEB-INF/views/home.j >>>>>>>>>>>> sp >>>>>>>>>>>> Mon Jun 6 17:10:32 2011 >>>>>>>>>>>> @@ -64,41 +64,35 @@ >>>>>>>>>>>> <div class="widget-title-bar" > >>>>>>>>>>>> <span >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> id="widget-${regionWidget.id}-title">${regionWidget.widget.title}</sp >>>>>>>>>>>> an> >>>>>>>>>>>> >>>>>>>>>>>> - <span id="widget-${regionWidget.id}-toolbar" >>>>>>>>>>>> style="float:right;"> >>>>>>>>>>>> - <button id="widget-${regionWidget.id}-max" >>>>>>>>>>>> class="widget-toolbar-btn"></button> >>>>>>>>>>>> - <button >>>>>>>>>>>> id="widget-${regionWidget.id}-remove" >>>>>>>>>>>> class="widget-toolbar-btn"></button> >>>>>>>>>>>> - <script> >>>>>>>>>>>> - $("#widget-${regionWidget.id}-max").button({ >>>>>>>>>>>> - text: false, >>>>>>>>>>>> - icons: { >>>>>>>>>>>> - primary: "ui-icon-arrow-4-diag" >>>>>>>>>>>> - } >>>>>>>>>>>> - }).click(function() { >>>>>>>>>>>> - alert("not implemented yet."); >>>>>>>>>>>> - }); >>>>>>>>>>>> - >>>>>>>>>>>> $("#widget-${regionWidget.id}-remove").button({ >>>>>>>>>>>> - text: false, >>>>>>>>>>>> - icons: { >>>>>>>>>>>> - primary: >>>>>>>>>>>> "ui-icon-close" >>>>>>>>>>>> - } >>>>>>>>>>>> - >>>>>>>>>>>> }).unbind("click").click(function() { >>>>>>>>>>>> - alert("remove >>>>>>>>>>>> gadget"); >>>>>>>>>>>> - >>>>>>>>>>>> rave.api.rpc.removeWidget({ >>>>>>>>>>>> - regionWidgetId: >>>>>>>>>>>> "${regionWidget.id}", >>>>>>>>>>>> - pageId: >>>>>>>>>>>> "${defaultPage.id}", >>>>>>>>>>>> - region: { >>>>>>>>>>>> - id : >>>>>>>>>>>> rave.getGadgetRegion("${regionWidget.id}") >>>>>>>>>>>> - }, >>>>>>>>>>>> - succCB: >>>>>>>>>>>> function() { >>>>>>>>>>>> - >>>>>>>>>>>> $("#widget-wrapper-${regionWidget.id}").remove(); >>>>>>>>>>>> - } >>>>>>>>>>>> - }); >>>>>>>>>>>> - }); >>>>>>>>>>>> - >>>>>>>>>>>> rave.mapGadgetToRegion("${regionWidget.id}", >>>>>>>>>>>> "${region.id}"); >>>>>>>>>>>> - </script> >>>>>>>>>>>> - </span> >>>>>>>>>>>> - >>>>>>>>>>>> - </div> >>>>>>>>>>>> + <!-- These are toolbar buttons --> >>>>>>>>>>>> + <span >>>>>>>>>>>> id="widget-${regionWidget.id}-toolbar" >>>>>>>>>>>> style="float:right;"> >>>>>>>>>>>> + <button >>>>>>>>>>>> id="widget-${regionWidget.id}-max" >>>>>>>>>>>> + >>>>>>>>>>>> class="widget-toolbar-btn" >>>>>>>>>>>> + >>>>>>>>>>>> onclick="rave.toolbarMaximize(this)"></button> >>>>>>>>>>>> + <button >>>>>>>>>>>> id="widget-${regionWidget.id}-remove" >>>>>>>>>>>> + >>>>>>>>>>>> class="widget-toolbar-btn" >>>>>>>>>>>> + >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> onclick="rave.toolbarDelete(this,${regionWidget.id},${region.id},${de >>>>>>>>>>>> fau >>>>>>>>>>>> lt >>>>>>>>>>>> Page.id})"> >>>>>>>>>>>> + </button> >>>>>>>>>>>> + <script> >>>>>>>>>>>> + //This decorates the >>>>>>>>>>>> toolbar buttons. As currently written, >>>>>>>>>>>> + //it needs to be in the >>>>>>>>>>>> forEach loop. >>>>>>>>>>>> + >>>>>>>>>>>> $("#widget-${regionWidget.id}-max").button({ >>>>>>>>>>>> + text: false, >>>>>>>>>>>> + icons: { >>>>>>>>>>>> + primary: >>>>>>>>>>>> "ui-icon-arrow-4-diag" >>>>>>>>>>>> + } >>>>>>>>>>>> + }); >>>>>>>>>>>> + >>>>>>>>>>>> + >>>>>>>>>>>> $("#widget-${regionWidget.id}-remove").button({ >>>>>>>>>>>> + text: false, >>>>>>>>>>>> + icons: { >>>>>>>>>>>> + primary: "ui-icon-close" >>>>>>>>>>>> + } >>>>>>>>>>>> + }); >>>>>>>>>>>> + </script> >>>>>>>>>>>> + >>>>>>>>>>>> + </span> >>>>>>>>>>>> + </div> >>>>>>>>>>>> <div class="widget" id="widget-${regionWidget.id}-body"> >>>>>>>>>>>> <!-- >>>>>>>>>>>> Among other things, the >>>>>>>>>>>> render-widget tag will populate the >>>>>>>>>>>> widgets[] array. >>>>>>>>>>>> >>>>>>>>>>>> Modified: >>>>>>>>>>>> incubator/rave/trunk/rave-portal/src/main/webapp/script/rave.js >>>>>>>>>>>> URL: >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> http://svn.apache.org/viewvc/incubator/rave/trunk/rave-portal/src/mai >>>>>>>>>>>> n/w >>>>>>>>>>>> eb >>>>>>>>>>>> app/script/rave.js?rev=1132706&r1=1132705&r2=1132706&view=diff >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> ===================================================================== >>>>>>>>>>>> === >>>>>>>>>>>> == >>>>>>>>>>>> ==== >>>>>>>>>>>> --- incubator/rave/trunk/rave-portal/src/main/webapp/script/rave.js >>>>>>>>>>>> (original) >>>>>>>>>>>> +++ incubator/rave/trunk/rave-portal/src/main/webapp/script/rave.js >>>>>>>>>>>> Mon >>>>>>>>>>>> Jun 6 17:10:32 2011 >>>>>>>>>>>> @@ -105,6 +105,36 @@ var rave = rave || (function() { >>>>>>>>>>>> >>>>>>>>>>>> })(); >>>>>>>>>>>> >>>>>>>>>>>> + /** >>>>>>>>>>>> + * Group widget toolbar functions >>>>>>>>>>>> + */ >>>>>>>>>>>> + var toolbar = (function() { >>>>>>>>>>>> + function init(){ >>>>>>>>>>>> + } >>>>>>>>>>>> + function maximizeAction(button){ >>>>>>>>>>>> + alert("Maximize: "+button.id+" not >>>>>>>>>>>> yet implemented."); >>>>>>>>>>>> + >>>>>>>>>>>> + }; >>>>>>>>>>>> + function >>>>>>>>>>>> deleteAction(button,myRegionWidgetId,myRegionId,myPageId){ >>>>>>>>>>>> +// alert("Delete:"+button.id+" >>>>>>>>>>>> "+myRegionWidgetId+" >>>>>>>>>>>> "+myRegionId+" >>>>>>>>>>>> "+myPageId); >>>>>>>>>>>> + rave.api.rpc.removeWidget({ >>>>>>>>>>>> + regionWidgetId: >>>>>>>>>>>> myRegionWidgetId, >>>>>>>>>>>> + pageId : myPageId, >>>>>>>>>>>> + region: { >>>>>>>>>>>> + id : myRegionId >>>>>>>>>>>> + }, >>>>>>>>>>>> + succCB: function() { >>>>>>>>>>>> + >>>>>>>>>>>> $("#widget-wrapper-"+myRegionWidgetId).remove(); >>>>>>>>>>>> + } >>>>>>>>>>>> + }); >>>>>>>>>>>> + >>>>>>>>>>>> rave.mapGadgetToRegion(myRegionWidgetId, myRegionId); >>>>>>>>>>>> + }; >>>>>>>>>>>> + return { >>>>>>>>>>>> + maximizeAction : maximizeAction, >>>>>>>>>>>> + deleteAction : deleteAction >>>>>>>>>>>> + } >>>>>>>>>>>> + })(); >>>>>>>>>>>> + >>>>>>>>>>>> function initializeProviders() { >>>>>>>>>>>> //Current providers are rave.wookie and >>>>>>>>>>>> rave.opensocial. >>>>>>>>>>>> //Providers register themselves when loaded, so >>>>>>>>>>>> @@ -161,14 +191,6 @@ var rave = rave || (function() { >>>>>>>>>>>> } >>>>>>>>>>>> >>>>>>>>>>>> /** >>>>>>>>>>>> - * Deletes the gadget/widget from the display. >>>>>>>>>>>> - * TODO: must be implemented. >>>>>>>>>>>> - */ >>>>>>>>>>>> - function deleteWidgetFromPage() { >>>>>>>>>>>> - return null; >>>>>>>>>>>> - } >>>>>>>>>>>> - >>>>>>>>>>>> - /** >>>>>>>>>>>> * Map a widget to the region where it is located. >>>>>>>>>>>> * >>>>>>>>>>>> * @param widgetId: id of the widget (not DOM id) >>>>>>>>>>>> @@ -248,10 +270,6 @@ var rave = rave || (function() { >>>>>>>>>>>> */ >>>>>>>>>>>> getContext: getContext, >>>>>>>>>>>> >>>>>>>>>>>> - /** >>>>>>>>>>>> - * Remove a selected gadget from the page >>>>>>>>>>>> - */ >>>>>>>>>>>> - deleteGadget : deleteWidgetFromPage, >>>>>>>>>>>> >>>>>>>>>>>> /** >>>>>>>>>>>> * Change or delete gadget to region map entry. >>>>>>>>>>>> @@ -261,6 +279,12 @@ var rave = rave || (function() { >>>>>>>>>>>> /** >>>>>>>>>>>> * Get the region where a widget/gadget belongs to. >>>>>>>>>>>> */ >>>>>>>>>>>> - getGadgetRegion : getGadgetRegion >>>>>>>>>>>> + getGadgetRegion : getGadgetRegion, >>>>>>>>>>>> + >>>>>>>>>>>> + /** >>>>>>>>>>>> + * These are exposed toolbar actions, >>>>>>>>>>>> associated with widget >>>>>>>>>>>> toolbar >>>>>>>>>>>> buttons >>>>>>>>>>>> + */ >>>>>>>>>>>> + toolbarMaximize : toolbar.maximizeAction, >>>>>>>>>>>> + toolbarDelete : toolbar.deleteAction >>>>>>>>>>>> } >>>>>>>>>>>> })(); >>>>>>>>>>>> \ No newline at end of file >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>> > -----BEGIN PGP SIGNATURE----- > Version: GnuPG/MacGPG2 v2.0.16 (Darwin) > Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ > > iQEcBAEBAgAGBQJN7UJ0AAoJEEfVXEODPFIDO68H/jSDm0w9fY0xHNPml1T7OZ3U > SZawMn17+WkgzvV8+Nhf01xWBh9j+dwmZN4jqk88qTk7WDwMUJr7cMkRO1YLxI+i > wZ/qRej9cwXlNn9n70OSGYTQ9Ru4OHbWwoJ9HOggxdlgZilLGc/6JqULPHq/zPS4 > YqqKzVZSRspjPxFg5QtXERKCBc7jdL0WcbuS4wcJc2YCwmj9OfJ06tC6WGQMEH8r > ub6XTTFJ1aqGXKOXxET+vt9Q5rz42989SPOUQ8FVhH+hOaoBlnRj3PvLUI/DCOxP > TROsxcaVB3+WkZQz+52sv3i/Iu3y3BcDMhbWfqnFUsspL7hCUT5YA5E2plLNk4Q= > =vyFJ > -----END PGP SIGNATURE----- >
