function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
aggamanaggaman 

how to save drag and drop state

I have created a vf page which is using jquery to drag and drop the panels.
I have divided the page in two columns and each column having some panels which are being dragged and dropped to the other.

I am able to fetch the panel order for each column and save it in one field in user object.

Now i am confused where to use those values, so that when user refreshes the page or logout and login again he get the same order as he changed.

Here is the vf and controller code:
<apex:page sidebar="false"  controller="dragcontroller">





<apex:stylesheet value="{!URLFOR($Resource.dragcss)}"/>
<apex:includeScript value="{!$Resource.dragjs}/js/jquery-1.3.2.js"/>
<apex:includeScript value="{!$Resource.dragjs}/js/jquery-ui-1.7.2.custom.min.js"/>
<!-- ==============================Start============================================ -->
    <script type="text/javascript">
        var __sfdcSessionId = '{!GETSESSIONID()}';
    </script>
    <script src="../../soap/ajax/23.0/connection.js" type="text/javascript"></script>

<script type="text/javascript">


function initialize(userupdate){
   
   
   
    alert('Hello----------------: '+userupdate);
     dragcontroller.getUser( userupdate, function(result, event)
     {
        if (event.status)
        {
            alert('Updated succes');
        }else if (event.type === 'exception') {   
             alert(event.message);
        } else {
           alert(event.message);
        }
    }, {escape:true});
  
    }
</script>
<!-- =================================End========================================= -->
<script type="text/javascript" >
$(function(){
    $('.dragbox')
    .each(function(){
        $(this).hover(function(){
            $(this).find('h2').addClass('collapse');
        }, function(){
            $(this).find('h2').removeClass('collapse');
        })
        .find('h2').hover(function(){
            $(this).find('.configure').css('visibility', 'visible');
        }, function(){
            $(this).find('.configure').css('visibility', 'hidden');
        })
        .click(function(){
            $(this).siblings('.dragbox-content').toggle();
        })
        .end()
        .find('.configure').css('visibility', 'hidden');
    });
    $('.column').sortable({
        connectWith: '.column',
        handle: 'h2',
        cursor: 'move',
        placeholder: 'placeholder',
        forcePlaceholderSize: true,
        opacity: 0.4,
        stop: function(event, ui){
            $(ui.item).find('h2').click();
            var sortorder='';
            $('.column').each(function(){
                var itemorder=$(this).sortable('toArray');
                var columnId=$(this).attr('id');
                sortorder+=columnId+'='+itemorder.toString()+'&';
               
            });
          initialize(sortorder);
            alert(h2);
           // alert('Before SortOrder: '+sortorder);
          
            /*Pass sortorder variable to server using ajax to save state*/
           
        }
    })
    .disableSelection();
});
$(document).ready(function (){

    //initialize();

})
</script>


<body onload="initialize();">
       
   <div class="column" id="column1">
        <div class="dragbox" id="item1" >
            <h2>Handle 1</h2>
            <div class="dragbox-content" >
                Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vestibulum velit ultricies orci pharetra elementum. In massa mauris, varius sed tempus a, iaculis sed erat. Ut sollicitudin tellus mollis arcu laoreet semper. Suspendisse ut felis odio. Aliquam auctor, tortor sit amet suscipit elementum, nunc ante dictum lectus, ac accumsan justo nunc sed velit. Sed sollicitudin varius tortor vitae varius. Aliquam interdum, nisl consectetur laoreet commodo, metus massa sagittis nisl, non venenatis lacus mi nec tortor. Ut malesuada auctor dolor, id pulvinar est malesuada sed. Aliquam sed posuere orci.
            </div>
        </div>
        <div class="dragbox" id="item2" >
            <h2><span class="configure" ><a href="#" >Configure</a></span>Handle 2</h2>
            <div class="dragbox-content" >
                Phasellus porttitor adipiscing lacus ac tempus. Vivamus gravida augue metus, eu cursus nisl. Etiam arcu eros, placerat sed rhoncus at, porta et elit. Aenean pharetra ante neque. Aenean id egestas orci. Suspendisse potenti. Nunc at magna leo, sed porta erat. Proin eget neque turpis, vel blandit massa. Donec vel tortor magna. Curabitur id nibh magna, nec hendrerit nibh.
            </div>
        </div>
        <div class="dragbox" id="item3" >
            <h2>Handle 3</h2>
            <div class="dragbox-content" >
                Proin porttitor euismod condimentum. Integer suscipit nibh nec augue facilisis ut commodo nisi ornare. Nam sed mauris vitae justo convallis placerat. Curabitur viverra, ipsum id volutpat sollicitudin, mi nisi condimentum nulla, nec dapibus velit libero eget orci. Nam purus lectus, imperdiet pharetra pulvinar ac, sodales sit amet sem. Ut vel mollis ante. Vivamus consectetur varius risus eu hendrerit. Sed scelerisque euismod leo, quis accumsan justo venenatis eu. Ut risus lorem, aliquet id fermentum nec, auctor ut enim. Ut pretium elementum turpis vel dignissim.
            </div>
        </div>
    </div>
    

    <div class="column" id="column2" >
        <div class="dragbox" id="item4" >
            <h2>Handle 4</h2>
            <div class="dragbox-content" >
                Nullam metus magna, tristique vel ultrices a, molestie quis dolor. Curabitur porta porta ullamcorper. Duis varius velit et dui auctor pretium bibendum urna gravida. Sed euismod dui in tellus euismod euismod. Nam convallis ornare fermentum. Aliquam libero augue, ullamcorper vitae lacinia at, vestibulum et risus. Praesent accumsan ultrices purus eu consequat. Phasellus posuere lobortis malesuada. Curabitur ac orci eu dui vulputate porttitor. Sed a urna et odio vulputate euismod. **bleep** sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In volutpat, tortor eu dapibus vestibulum, risus metus eleifend ipsum, quis lobortis elit dolor vel ligula. Aliquam ultrices nunc in elit bibendum pharetra. Ut non ante sagittis arcu imperdiet posuere. Duis consectetur massa sit amet enim scelerisque consequat et eget magna. Curabitur tristique molestie sem quis vulputate. Sed eleifend urna neque. Nam placerat eros non augue consequat vestibulum.
            </div>
        </div>
        <div class="dragbox" id="item5" >
            <h2>Handle 5</h2>
            <div class="dragbox-content" >
                Nam rhoncus sodales libero, et facilisis nisi volutpat et. Nullam tellus eros, consequat eget tristique ultricies, rhoncus vitae magna. Duis nec scelerisque orci. Nullam a enim est, et eleifend nunc. Proin dui eros, vulputate eget consectetur quis, ultrices ac sem. Nulla aliquam metus eu magna placerat placerat. Suspendisse eget tellus turpis, et ultricies nisi. Etiam in diam mi, sed tincidunt eros. Phasellus convallis aliquam arcu, vitae fringilla quam pharetra sed. In at augue at nibh placerat feugiat at id elit. Curabitur sit amet quam ut turpis molestie blandit in vel nulla.
            </div>
        </div>
        <div class="dragbox" id="item6" >
            <h2>Handle 6</h2>
            <div class="dragbox-content" >
                Aman Nam rhoncus sodales libero, et facilisis nisi volutpat et. Nullam tellus eros, consequat eget tristique ultricies, rhoncus vitae magna. Duis nec scelerisque orci. Nullam a enim est, et eleifend nunc. Proin dui eros, vulputate eget consectetur quis, ultrices ac sem. Nulla aliquam metus eu magna placerat placerat. Suspendisse eget tellus turpis, et ultricies nisi. Etiam in diam mi, sed tincidunt eros. Phasellus convallis aliquam arcu, vitae fringilla quam pharetra sed. In at augue at nibh placerat feugiat at id elit. Curabitur sit amet quam ut turpis molestie blandit in vel nulla.
            </div>
        </div>
    </div>
      
    <hr style="clear:both;" />

</body>


</apex:page>
global class dragcontroller
{
    public dragcontroller()
    {
     User UsrDetails=[SELECT Name, Panel_Order__c FROM User WHERE id=:UserInfo.getUserId()];
     String Panel=UsrDetails.Panel_Order__c;
     String[] PanelColumn=Panel.split('&',0);
     System.debug('String Size :'+PanelColumn.size()+ ' And Value :'+PanelColumn);
     String Column1=Panelcolumn[0];
     String Column2=PanelColumn[1];
     System.debug('column1 =: '+Column1+ ' and column2 =: '+column2);
    }
    public PageReference PageRefresh()
    {
       
        return null;
    }
   
    @RemoteAction
    global static PageReference  getUser(String panel)
    {
        System.debug('*************************The Panel order is ' + panel);
         User u = new User(Id = Userinfo.getUserID());
        u.Panel_order__c = panel;
        System.debug('*************************The User is ' + u);
        update u;
        return null;
    } 

public string PanelOrder{get; set;}

}

 

 

joshbirkjoshbirk
Ispita_NavatarIspita_Navatar

Hi,

You can try the following:-

If you want to save the drag and drop state you have to store this information in  custom object that keep the track of the div position in question according the div number or div name.

 

Did this answer your question? If not, let me know what didn't work, or if so, please mark it solved.

venkateshyadav1243venkateshyadav1243
hi did u find out solution for this scenario if u find out can u share the code how to do it.