Friday, October 2, 2009

[jQuery] Re: jQuery UI Portlets & Cookies

I have managed to find a script that will save the position of
portlets, but to one column only - plus it wont allow me to connect to
another column. I need to be able to drag over to other columns and
save their order. Can anyone help? Here is my code...

<script type="text/javascript">
/////////////////////////////////////////////////////////////////
///// Set cookie for sidebar portlets //////////////////////
/////////////////////////////////////////////////////////////////

// set the list selector
var setSelector = ".column";
// set the cookie name
var setCookieName = "portletOrder";
// set the cookie expiry time (days):
var setCookieExpiry = 30;

////////////////////////////////////////////////////////////////

// function that writes the list order to a cookie
function getOrder() {
// save custom order to cookie
$.cookie(setCookieName, $(setSelector).sortable("toArray"),
{ expires: setCookieExpiry, path: "/" });
}

// function that restores the list order from a cookie
function restoreOrder() {

var div = $(setSelector);
if (div == null) return

// fetch the cookie value (saved order)
var cookie = $.cookie(setCookieName);
if (!cookie) return;

// make array from saved order
var IDs = cookie.split(",");

// fetch current order
var items = div.sortable("toArray");
// make array from current order
var rebuild = new Array();
for ( var v=0, len=items.length; v<len; v++ ){
rebuild[items[v]] = items[v];
}

for (var i = 0, n = IDs.length; i < n; i++) {

// item id from saved order
var itemID = IDs[i];

if (itemID in rebuild) {

// select item id from current order
var item = rebuild[itemID];

// select the item according to current order
var child = $("div.ui-sortable").children("#"
+ item);

// select the item according to the saved
order
var savedOrd = $("div.ui-sortable").children
("#" + itemID);

// remove all the items
child.remove();

// add the items in turn according to saved
order we need to filter here since the "ui-sortable"
// class is applied to all ul elements and we
only want the very first!
$("div.ui-sortable").filter(":first").append
(savedOrd);
}
}
}

// code executed when the document loads
$(function () {
$(setSelector).sortable({
update: function() {getOrder(); }
});
restoreOrder();
// here, we reload the saved order

$(".portlet").addClass("ui-widget ui-widget-content ui-
helper-clearfix ui-corner-all")
.find(".portlet-header")
.addClass("ui-widget-header ui-corner-
all")
.prepend('')
.end()
.find(".portlet-content");

$(".portlet-header .ui-icon").click(function()
{
$(this).toggleClass("ui-icon-minus");
$(this).toggleClass("ui-icon-plus");
$(this).parents(".portlet:first").find
(".portlet-content").toggle();

});
$(".portlet-header .ui-icon").hover(
function() {$(this).addClass("ui-icon-
hover"); },
function() {$(this).removeClass('ui-icon-
hover'); }
);
});
</script>
</head>
<div id="wideSidebar" class="column">

<div class="sidebarBox portlet" id="item-1">
<h2 class="portlet-header">Header 1</h2>
fdssdsd
</div>

<div class="sidebarBox portlet" id="item-2">
<h2 class="portlet-header">Header 2</h2>
fsdsdfsfsd
</div>

<div class="sidebarBox portlet" id="item-3">
<h2 class="portlet-header">Header 3</h2>
<div class="portlet-content">
fdsfsdfsdfsd </div>
</div>
</div> <div id="wideSidebar2" class="column">

<div class="sidebarBox portlet" id="item-4">
<h2 class="portlet-header">Header 4</h2>
<ul class="guideListing portlet-content">
<li>Content 1 list</li>
</ul>
</div>

<div class="sidebarBox portlet" id="item-5">
<h2 class="portlet-header">Header 5</h2>
<ul class="portlet-content">
<li>Content 2 list</li>
</ul>
</div>

<div class="sidebarBox portlet" id="item-6">
<h2 class="portlet-header">Header 6</h2>
<div class="portlet-content">
Content 3
</div>
</div>
</div>

On Oct 2, 12:08 am, craigeves <craige...@googlemail.com> wrote:
> Please can someone help?
>
> I am using the jQuery UI (sortable) Portlets code - but I want to use
> the jQuery cookies plugin to remember the order of the portlets. I
> don't know where to start - and searching the net for an answer only
> brings up sortable ul and li.
>
> Please help.
>
> Code:
> <script type="text/javascript">
>         $(function() {
>                 $(".column").sortable({
>                         connectWith: '.column'
>                 });
>
>                 $(".column").disableSelection();
>         });
>     </script>
>
> HTML:
> <div class="column">
>     <div class="portlet">
>       <div class="portlet-header ui-state-disabled">Feeds</div>
>       <div class="portlet-content">Lorem ipsum dolor sit amet,
> consectetuer adipiscing elit. Lorem ipsum dolor sit amet, consectetuer
> adipiscing elit. Lorem ipsum dolor sit amet, consectetuer adipiscing
> elit.</div>
>     </div>
>     <div class="portlet">
>       <div class="portlet-header">News</div>
>       <div class="portlet-content">Lorem ipsum dolor sit amet,
> consectetuer adipiscing elit. Lorem ipsum dolor sit amet, consectetuer
> adipiscing elit. Lorem ipsum dolor sit amet, consectetuer adipiscing
> elit.</div>
>     </div>
>   </div>
>   <div class="column">
>     <div class="portlet">
>       <div class="portlet-header">Shopping</div>
>       <div class="portlet-content">Lorem ipsum dolor sit amet,
> consectetuer adipiscing elit. Lorem ipsum dolor sit amet, consectetuer
> adipiscing elit. Lorem ipsum dolor sit amet, consectetuer adipiscing
> elit.</div>
>     </div>
>   </div>
>   <div class="column">
>     <div class="portlet">
>       <div class="portlet-header">Links</div>
>       <div class="portlet-content">Lorem ipsum dolor sit amet,
> consectetuer adipiscing elit. Lorem ipsum dolor sit amet, consectetuer
> adipiscing elit. Lorem ipsum dolor sit amet, consectetuer adipiscing
> elit.</div>
>     </div>
>     <div class="portlet">
>       <div class="portlet-header">Images</div>
>       <div class="portlet-content">Lorem ipsum dolor sit amet,
> consectetuer adipiscing elit. Lorem ipsum dolor sit amet, consectetuer
> adipiscing elit. Lorem ipsum dolor sit amet, consectetuer adipiscing
> elit.</div>
>     </div>
>   </div>

No comments: