Updated javascript for onload, this one is set up to identify the new sort
order and save it to the database, as well as a second ajax call to send the
actual move operation.
Forget the serverside and database code, that's for your own implementation
guys :)

The line commented previously,
//i think this is probably my most awesome line of prototype code ever...
Broke when I actually started testing different scenarios so I had to break
it into multiple lines ;(
It was meant to take 2 arrays, and return the only item not in the smaller
of the two, look that up in the dom, pluck an attribute off it...

var ZoneColumns = $('Zones').getElementsBySelector('div.ZoneColumn').pluck(
'id');
$('Zones').getElementsBySelector('div.ZoneColumn').each(function (column) {
if ($F('UserId') != 0)
{
Sortable.create(column,{
tag:'div',
onChange:function(a,b,c) { },
onUpdate:function(a,b,c) {
//new Insertion.Top('debug','new childNodeLength: ' + String(
a.childNodes.length) + '<br/>');
//new Insertion.Top('debug',a.id + ' event<br/>');
//new Insertion.Top('debug','sequenced length of droppable: ' + String(
Sortable.sequence(a).length) + '<br/>');
//new Insertion.Top('debug','stored length of droppable: ' + String(
a.readAttribute('currentOrder')).split(',').without('').length + '<br/>');
var currentSequence = Sortable.sequence(a).invoke('toString');
var c = $A(String(a.readAttribute('currentOrder')).split(',').without(''
).invoke('toString'));
if (currentSequence.length > c.size())
{
//new Insertion.Top('debug',String(a.id) + ' is the destination div<br/>');
var n = $A(currentSequence).invoke('toString');
var e = n.clone();
c.each(function (value,index) { e = e.without(value); });
var element = $('Zone_'+e.reduce()).readAttribute('zonedataid');
//new Insertion.Top('debug',element + ' is the draggable div<br/>');
//alert($A(currentSequence));
new Ajax.Request('Ajax.aspx', {method:'post', parameters:'ZoneDataId='
+element+'&action=UpdateUserZoneItemColumn&Column='+String(a.id).replace(
'ZoneColumn_',''), onFailure:errFunc });
a.setAttribute('currentOrder',Sortable.sequence(a));
}
var newOrder = $($A(currentSequence).inject([],function(array,value) {
array.push($('Zone_'+value).readAttribute('zonedataid')); return array; }));
new Ajax.Request("Ajax.aspx", {method:'post', postBody:
'Action=OrderZoneItems&newArray=' + newOrder, onFailure:
function(transport) { alert('There
was an error setting the new order.'); } });
//new Insertion.Top('debug',String(a.id) + 's new order is: ' + newOrder +
'<br/>');
},
dropOnEmpty:'true',
containment:ZoneColumns,
constraint:false,
ghosting: false
});
column.setAttribute('currentOrder',Sortable.sequence(column));
}
column.getElementsBySelector('div.zone').each(function(node){
if (node.id != null){
if (node.getAttribute('ZoneDataId') != null)
{
var url = 'RenderZone.aspx';
var pars = 'ZoneDataId=' + node.getAttribute('ZoneDataId');
var myAjax = new Ajax.Updater(node.id, url, {method: 'post', parameters:
pars, onComplete:processCollapse });
}
}
});
});


Enjoy, hopefully this is of some use to someone else as well, coming up to 6
hours of dev :P

Gareth


On 6/10/07, Gareth Evans <[EMAIL PROTECTED]> wrote:
>
> As for the changes made,
> I can see the changes in visual compare but it doesn't have the option to
> generate a patch file.
> I installed tortisesvn (i use win xp) and grabbed the latest trunk, copied
> the changed file in and then used "create patch" but the resulting patch has
> - for every line of dragdrop.js and then a + for every line of the new
> dragdrop.js so I don't know what's going on...
> How should I go about creating a patch under XP?
> It doesn't seem like this patch exists in the trac, though it looks fairly
> comprehensive.
>
> Gareth
>
>
>  On 6/10/07, Gareth Evans <[EMAIL PROTECTED]> wrote:
> >
> > *Christophe: re; Pixel, percent heights.*
> >
> > Element.style.height returns in percentages.
> > If you use the prototype element method to getHeight, it returns in
> > pixels, without the px.
> >
> > Test case is below.
> >
> > <html>
> > <head>
> >   <script src="javascript/prototype.js" type="text/javascript"></script>
> >   <script type="text/javascript">
> >  function Begin()
> >  {
> >   var h = $('percenttest').style.height
> >   new Insertion.Top('debug','div Percentage height: ' + h + '<br/>');
> >   var ch = $('percenttest').getHeight();
> >   new Insertion.Top ('debug','div Calculated height: ' + ch + '<br/>');
> >
> >  }
> >   </script>
> > </head>
> > <body style="height:1000px;" onload="Begin();">
> >  <div id='percenttest' style="height:70%;background-color:#efefef;">
> >  </div>
> >  <div id='debug'>
> >  </div>
> > </body>
> > </html>
> >
> >
> >
> >  On 6/10/07, Gareth Evans <[EMAIL PROTECTED]> wrote:
> > >
> > > Okay, continuing on from my previous post which details my solution...
> > >
> > > here is the new onload
> > >
> > >
> > > var ZoneColumns = $('Zones').getElementsBySelector( 'div.ZoneColumn'
> > > ).pluck('id');
> > > $('Zones').getElementsBySelector( 'div.ZoneColumn').each(function(column) 
> > > {
> > > if ($F('UserId') != 0)
> > > {
> > > Sortable.create(column,{
> > > tag:'div',
> > > onChange:function(a,b,c) { },
> > > onUpdate:function(a,b,c) {
> > > //new Insertion.Top('debug','new childNodeLength: ' + String(
> > > a.childNodes.length) + '<br/>');
> > > //new Insertion.Top('debug', a.id + ' event<br/>');
> > > //new Insertion.Top('debug','sequenced length of droppable: ' +
> > > String(Sortable.sequence(a).length) + '<br/>');
> > > //new Insertion.Top('debug','stored length of droppable: ' + String(
> > > a.readAttribute('currentOrder')).split(',').without('').length +
> > > '<br/>');
> > > if (Sortable.sequence(a).length > String(a.readAttribute(
> > > 'currentOrder')).split( ',').without('').length)
> > > {
> > > //new Insertion.Top('debug',String( a.id) + ' is the destination
> > > div<br/>');
> > > //i think this is probably my most awesome line of prototype code
> > > ever...
> > > var element = $('Zone_'+Sortable.sequence(a).without(String(
> > > a.readAttribute('currentOrder' )).split(',').without( 
> > > '')).flatten().toString()).readAttribute(
> > > 'zonedataid');
> > > //new Insertion.Top('debug',element + ' is the draggable div<br/>');
> > > new Ajax.Request('Ajax.aspx', {method:'post' , parameters:
> > > 'ZoneDataId='+element+'&action=UpdateUserZoneItemColumn&Column='
> > > +String(a.id).replace('ZoneColumn_' ,''), onFailure:errFunc });
> > > a.setAttribute('currentOrder',Sortable.sequence(a));
> > > }
> > > },
> > > dropOnEmpty:'true' ,
> > > containment:ZoneColumns,
> > > constraint:false,
> > > ghosting: false
> > > });
> > > //alert(String(Sortable.sequence
> > > (column)).split(',').flatten().length);
> > > column.setAttribute ('currentOrder',Sortable.sequence (column));
> > > }
> > > column.getElementsBySelector('div.zone' ).each(function(node){
> > > if ( node.id != null){
> > > if (node.getAttribute( 'ZoneDataId' ) != null)
> > > {
> > > var url = 'RenderZone.aspx ';
> > > var pars = 'ZoneDataId=' + node.getAttribute( 'ZoneDataId');
> > > var myAjax = new Ajax.Updater( node.id, url, {method: 'post',
> > > parameters: pars, onComplete:processCollapse });
> > > }
> > > }
> > > });
> > > });
> > >
> > >
> > >
> > > *Christophe, *I will check that pixel/percent thing in a sec and get
> > > back to you.
> > >
> > > I will also check this diff between scripty and the version I had to
> > > use.
> > >
> > >
> > > Gareth
> > >
> > >
> > > On 6/10/07, Christophe Porteneuve < [EMAIL PROTECTED] > wrote:
> > > >
> > > >
> > > > Hey,
> > > >
> > > > Gareth Evans a écrit :
> > > > > I think the computed values remain as pixels if you use
> > > > percentages in css?
> > > >
> > > > You can check that by using getStyle on the properties you specified
> > > > as
> > > > percents, and see what you get.  I do believe all length-related
> > > > props
> > > > get computed to pixels, which seems to fit the CSS spec.
> > > >
> > > > --
> > > > Christophe Porteneuve aka TDD
> > > > [EMAIL PROTECTED]
> > > >
> > > > > > > >
> > > >
> > >
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Spinoffs" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-spinoffs?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to