Skip to content

Commit 8b31d81

Browse files
committed
Merge pull request tariqbuilds#150 from arnaudbey/keep-widget-ordered
Keep widget ordered
2 parents b5d5e23 + 70a22d6 commit 8b31d81

File tree

2 files changed

+62
-21
lines changed

2 files changed

+62
-21
lines changed

index.html

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@
7171
A simple web dashboard to monitor your server.
7272
</div>
7373
</div>
74-
<div class="row">
74+
<div id="widgets" class="row">
7575
<div class="span3">
7676
<div id="general-info-widget" class="widget widget-table action-table">
7777
<div class="widget-header">
@@ -133,7 +133,7 @@ <h3>
133133
<div id="refresh-ram" class="btn icon-refresh js-refresh-info"></div>
134134
</div><!-- /widget-header -->
135135
<div class="widget-content">
136-
<div class="widget big-stats-container">
136+
<div class="big-stats-container">
137137
<div class="widget-content">
138138
<div class="cf big_stats">
139139
<div class="stat">
@@ -153,8 +153,8 @@ <h3>
153153
</div>
154154
</div>
155155
</div>
156-
</div>
157-
<div class="row">
156+
157+
158158
<div class="span6">
159159
<div id="disk-usage-widget" class="widget widget-table">
160160
<div class="widget-header">
@@ -183,8 +183,7 @@ <h3>
183183
</div><!-- /widget-content -->
184184
</div><!-- /widget -->
185185
</div><!-- /span -->
186-
</div><!-- /row -->
187-
<div class="row">
186+
188187
<div class="span6">
189188
<div id="dns-lease-widget" class="widget widget-table">
190189
<div class="widget-header">
@@ -229,8 +228,7 @@ <h3>
229228
</div><!-- /widget-content -->
230229
</div><!-- /widget -->
231230
</div><!-- /span -->
232-
</div><!-- /row -->
233-
<div class="row">
231+
234232
<div class="span4">
235233
<div id="netstat-widget" class="widget widget-table">
236234
<div class="widget-header">
@@ -275,8 +273,7 @@ <h3>
275273
</div><!-- /widget-content -->
276274
</div><!-- /widget -->
277275
</div><!-- /span -->
278-
</div>
279-
<div class="row">
276+
280277
<div class="span6">
281278
<div id="users-widget" class="widget widget-table action-table">
282279
<div class="widget-header">
@@ -305,8 +302,7 @@ <h3>
305302
</div><!-- /widget-content -->
306303
</div><!-- /widget -->
307304
</div><!-- /span6 -->
308-
</div><!-- /row -->
309-
<div class="row">
305+
310306
<div class="span12">
311307
<div id="process-widget" class="widget widget-table">
312308
<div class="widget-header">

js/base.js

Lines changed: 54 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
$(document).ready(function() {
2+
// keep widgets ordered
3+
keepWidgetOrdered();
4+
25
// hide localstored hidden widgets
36
keepWidgetHidden();
47

@@ -70,14 +73,21 @@ function pulseElement(element, times, interval) {
7073
*
7174
*/
7275

73-
$( ".row" ).sortable({
74-
connectWith: ".row",
76+
$( "#widgets" ).sortable({
7577
handle: ".widget-header",
7678
cancel: "#filter-ps",
7779
cursor: "move",
7880
opacity: 0.7,
7981
scrollSensitivity:10,
80-
tolerance: 'pointer'
82+
tolerance: 'pointer',
83+
stop: function(event, ui) {
84+
// save widget order in localstorage
85+
var newOrder = new Array();
86+
$('.widget').each(function() {
87+
newOrder.push($(this).attr("id"));
88+
});
89+
localStorage.setItem('positions', JSON.stringify(newOrder));
90+
}
8191
});
8292

8393
/**
@@ -114,8 +124,14 @@ $('.open-widget').live('click',function(){
114124
// decrement closed-widget-count
115125
closedWidgetCount.text( Number(closedWidgetCount.text()) - 1);
116126

117-
// remove widget from localstorage
118-
window.localStorage.removeItem( widgetIdentifier );
127+
// remove widget from localstorage
128+
var localData = JSON.parse(window.localStorage.getItem('hidden'));
129+
for(var i = localData.length; i--;){
130+
if (localData[i] == widgetIdentifier) {
131+
localData.splice(i, 1);
132+
}
133+
}
134+
localStorage.setItem('hidden', JSON.stringify(localData));
119135
});
120136

121137

@@ -133,12 +149,41 @@ function hideWidget(widget, speed){
133149
// add to hidden list
134150
closedWidgets.append('<li><a class="open-widget" data-id="'+widgetIdentifier+'"><i class="icon-plus-sign"></i> '+widgetName+'</a></li>');
135151

136-
// add widget to localstorage
137-
window.localStorage.setItem(widgetIdentifier, null);
152+
// add widget to localstorage (and create item if needed)
153+
var localData = JSON.parse(window.localStorage.getItem('hidden'));
154+
if(localData == null) {
155+
hidden = new Array();
156+
hidden.push(widgetIdentifier);
157+
localStorage.setItem('hidden', JSON.stringify(hidden));
158+
}
159+
else{
160+
if (!isInArray(localData, widgetIdentifier)) {
161+
localData.push(widgetIdentifier);
162+
localStorage.setItem('hidden', JSON.stringify(localData));
163+
}
164+
}
138165
}
139166

140167
function keepWidgetHidden(){
141-
for(var i in window.localStorage){
142-
hideWidget( $("#" + i), 0 );
168+
var localData = JSON.parse(window.localStorage.getItem('hidden'));
169+
if(localData!=null) {
170+
$.each(localData, function(i,value){
171+
hideWidget( $("#" + value), 0 );
172+
});
143173
}
174+
}
175+
176+
function keepWidgetOrdered(){
177+
var localData = JSON.parse(window.localStorage.getItem('positions'));
178+
if(localData!=null) {
179+
$.each(localData, function(i,value){
180+
var widgetId ="#" + value;
181+
$("#widgets").append($(widgetId).parent());
182+
});
183+
}
184+
}
185+
186+
function isInArray(array, search)
187+
{
188+
return (array.indexOf(search) >= 0) ? true : false;
144189
}

0 commit comments

Comments
 (0)