gridster-rails 0.1.0.1 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.md
CHANGED
@@ -6,19 +6,19 @@ This is [gridster.js](http://gridster.net) GEMified for the Rails >= 3.1 asset p
|
|
6
6
|
cd gridster-rails
|
7
7
|
mkdir -p vendor/assets/javascripts
|
8
8
|
mkdir -p vendor/assets/stylesheets
|
9
|
-
curl https://raw.github.com/
|
10
|
-
curl https://raw.github.com/
|
9
|
+
curl https://raw.github.com/dustmoo/gridster.js/master/dist/jquery.gridster.js -o vendor/assets/javascripts/jquery.gridster.js
|
10
|
+
curl https://raw.github.com/dustmoo/gridster.js/master/dist/jquery.gridster.css -o vendor/assets/stylesheets/jquery.gridster.css
|
11
11
|
echo "" >> README.md; echo "# gridster.js appended README #" >> README.md; echo "" >> README.md
|
12
|
-
curl https://raw.github.com/
|
12
|
+
curl https://raw.github.com/dustmoo/gridster.js/master/README.md >> README.md
|
13
13
|
echo "" >> LICENSE; echo "# gridster.js appended LICENSE #" >> LICENSE; echo "" >> LICENSE
|
14
|
-
curl https://raw.github.com/
|
14
|
+
curl https://raw.github.com/dustmoo/gridster.js/master/LICENSE >> LICENSE
|
15
15
|
git add .
|
16
16
|
git commit -am "initial gridster-rails"
|
17
17
|
git remote add origin git@github.com:vanetten/gridster-rails.git
|
18
18
|
|
19
19
|
* modify **lib/gridster-rails/version.rb** to match gridster.js version
|
20
20
|
|
21
|
-
VERSION = "0.1.
|
21
|
+
VERSION = "0.1.5"
|
22
22
|
|
23
23
|
* modify **lib/gridster-rails.rb** to subclass Rails::Engine
|
24
24
|
|
@@ -59,11 +59,11 @@ Or install it yourself as:
|
|
59
59
|
|
60
60
|
Add to **application.js**
|
61
61
|
|
62
|
-
//= require jquery.gridster.js
|
62
|
+
//= require jquery.gridster.js
|
63
63
|
|
64
64
|
Add to **application.css**
|
65
65
|
|
66
|
-
*= require
|
66
|
+
*= require jquery.gridster.css
|
67
67
|
|
68
68
|
## Contributing
|
69
69
|
|
@@ -84,6 +84,27 @@ dynamically add and remove elements from the grid.
|
|
84
84
|
|
85
85
|
More at [http://gridster.net/](http://gridster.net/).
|
86
86
|
|
87
|
+
Public Service Announcement from Dustin Moore (dustmoo)
|
88
|
+
=======================================================
|
89
|
+
|
90
|
+
Gridster is not currently being actively maintained by
|
91
|
+
[Ducksboard](http://ducksboard.com/).
|
92
|
+
|
93
|
+
I and others have been given access to the repo to help
|
94
|
+
maintain and address issues.
|
95
|
+
|
96
|
+
I have created a fork of gridster that supports more advanced
|
97
|
+
features, like widget-swapping and static widgets.
|
98
|
+
|
99
|
+
It can be found here: https://github.com/dustmoo/gridster.js
|
100
|
+
|
101
|
+
Currently the code-base is different and I don't have time to
|
102
|
+
reconcile the fork with this repo.
|
103
|
+
|
104
|
+
If anyone would like to help me improve my fork and reconcile
|
105
|
+
it with the main library I would be happy for the help.
|
106
|
+
|
107
|
+
|
87
108
|
License
|
88
109
|
=======
|
89
110
|
|
@@ -93,3 +114,65 @@ Whodunit
|
|
93
114
|
========
|
94
115
|
|
95
116
|
Gridster is built by [Ducksboard](http://ducksboard.com/).
|
117
|
+
|
118
|
+
dustmoo Modifications
|
119
|
+
===========
|
120
|
+
|
121
|
+
Changelog 2013-04-3
|
122
|
+
|
123
|
+
Fork now handles standard behavior properly with swap allowing larger widgets to shift down.
|
124
|
+
|
125
|
+
Changelog 2013-04-2
|
126
|
+
|
127
|
+
Added Demo to Repository.
|
128
|
+
|
129
|
+
Changelog 2013-02-27
|
130
|
+
|
131
|
+
Added "Static widget support" Static Items default to the "static" class.
|
132
|
+
|
133
|
+
You can customize this class by using the code below:
|
134
|
+
|
135
|
+
$.gridster({
|
136
|
+
static_class: 'custom_class',
|
137
|
+
draggable: {
|
138
|
+
items: ".gs_w:not(.custom_class)"
|
139
|
+
}
|
140
|
+
});
|
141
|
+
|
142
|
+
I have also added functions creating a much more thourough check of whether the player can occupy the space you are moving it too.
|
143
|
+
This version is much more reliable in swapping space with widgets.
|
144
|
+
|
145
|
+
There are also new options for Maximum Rows and Maximum Columns:
|
146
|
+
|
147
|
+
$.gridster({
|
148
|
+
max_rows: map_rows,
|
149
|
+
max_cols: map_cols,
|
150
|
+
shift_larger_widgets_down: false
|
151
|
+
});
|
152
|
+
|
153
|
+
Setting the maximum amount of rows only completely works if you disable shifting larger widgets down at the moment.
|
154
|
+
|
155
|
+
|
156
|
+
Changelog 2012-11-26
|
157
|
+
|
158
|
+
Reworked swapping functionality to better handle large to small widget handling.
|
159
|
+
|
160
|
+
---
|
161
|
+
|
162
|
+
Widgets of smaller or equal size to the dragged widget (player)
|
163
|
+
will swap places with the original widget.
|
164
|
+
|
165
|
+
This causes tiles to swap left and right as well as up and down.
|
166
|
+
|
167
|
+
By default smaller players will shift larger widgets down.
|
168
|
+
|
169
|
+
I have added an option to prevent this behavior:
|
170
|
+
|
171
|
+
$.gridster({
|
172
|
+
shift_larger_widgets_down: false
|
173
|
+
});
|
174
|
+
|
175
|
+
By setting shift_larger_widgets_down to false, smaller widgets will not displace larger ones.
|
176
|
+
|
177
|
+
|
178
|
+
|
@@ -1,6 +1,10 @@
|
|
1
|
-
|
2
|
-
*
|
3
|
-
*
|
1
|
+
/*
|
2
|
+
* jquery.coords
|
3
|
+
* https://github.com/ducksboard/gridster.js
|
4
|
+
*
|
5
|
+
* Copyright (c) 2012 ducksboard
|
6
|
+
* Licensed under the MIT licenses.
|
7
|
+
*/
|
4
8
|
|
5
9
|
;(function($, window, document, undefined){
|
6
10
|
/**
|
@@ -103,6 +107,14 @@
|
|
103
107
|
|
104
108
|
}(jQuery, window, document));
|
105
109
|
|
110
|
+
/*
|
111
|
+
* jquery.collision
|
112
|
+
* https://github.com/ducksboard/gridster.js
|
113
|
+
*
|
114
|
+
* Copyright (c) 2012 ducksboard
|
115
|
+
* Licensed under the MIT licenses.
|
116
|
+
*/
|
117
|
+
|
106
118
|
;(function($, window, document, undefined){
|
107
119
|
|
108
120
|
var defaults = {
|
@@ -274,7 +286,7 @@
|
|
274
286
|
|
275
287
|
if (self.options.on_overlap_stop || self.options.on_overlap_start) {
|
276
288
|
this.manage_colliders_start_stop(colliders_coords,
|
277
|
-
self.options.
|
289
|
+
self.options.on_overlap_start, self.options.on_overlap_stop);
|
278
290
|
}
|
279
291
|
|
280
292
|
this.last_colliders_coords = colliders_coords;
|
@@ -358,6 +370,14 @@
|
|
358
370
|
|
359
371
|
})(window);
|
360
372
|
|
373
|
+
/*
|
374
|
+
* jquery.draggable
|
375
|
+
* https://github.com/ducksboard/gridster.js
|
376
|
+
*
|
377
|
+
* Copyright (c) 2012 ducksboard
|
378
|
+
* Licensed under the MIT licenses.
|
379
|
+
*/
|
380
|
+
|
361
381
|
;(function($, window, document, undefined){
|
362
382
|
|
363
383
|
var defaults = {
|
@@ -368,7 +388,7 @@
|
|
368
388
|
autoscroll: true,
|
369
389
|
ignore_dragging: ['INPUT', 'TEXTAREA', 'SELECT', 'BUTTON'],
|
370
390
|
handle: null
|
371
|
-
//
|
391
|
+
// drag: function(e){},
|
372
392
|
// start : function(e, ui){},
|
373
393
|
// stop : function(e){}
|
374
394
|
};
|
@@ -425,24 +445,26 @@
|
|
425
445
|
this.disabled = false;
|
426
446
|
this.events();
|
427
447
|
|
428
|
-
|
429
|
-
|
448
|
+
this.on_window_resize = throttle($.proxy(this.calculate_positions, this), 200);
|
449
|
+
$(window).bind('resize', this.on_window_resize);
|
430
450
|
};
|
431
451
|
|
432
452
|
fn.events = function() {
|
433
|
-
this
|
453
|
+
this.proxied_on_select_start = $.proxy(this.on_select_start, this);
|
454
|
+
this.$container.on('selectstart', this.proxied_on_select_start);
|
434
455
|
|
435
|
-
this
|
436
|
-
|
456
|
+
this.proxied_drag_handler = $.proxy(this.drag_handler, this);
|
457
|
+
this.$container.on(pointer_events.start, this.options.items, this.proxied_drag_handler);
|
437
458
|
|
438
|
-
this
|
459
|
+
this.proxied_pointer_events_end = $.proxy(function(e) {
|
439
460
|
this.is_dragging = false;
|
440
461
|
if (this.disabled) { return; }
|
441
462
|
this.$body.off(pointer_events.move);
|
442
463
|
if (this.drag_start) {
|
443
464
|
this.on_dragstop(e);
|
444
465
|
}
|
445
|
-
}, this)
|
466
|
+
}, this);
|
467
|
+
this.$body.on(pointer_events.end, this.proxied_pointer_events_end);
|
446
468
|
};
|
447
469
|
|
448
470
|
fn.get_actual_pos = function($el) {
|
@@ -549,7 +571,7 @@
|
|
549
571
|
this.mouse_init_pos = this.get_mouse_pos(e);
|
550
572
|
this.offsetY = this.mouse_init_pos.top - this.el_init_pos.top;
|
551
573
|
|
552
|
-
this
|
574
|
+
this.on_pointer_events_move = function(mme){
|
553
575
|
var mouse_actual_pos = self.get_mouse_pos(mme);
|
554
576
|
var diff_x = Math.abs(
|
555
577
|
mouse_actual_pos.left - self.mouse_init_pos.left);
|
@@ -557,7 +579,7 @@
|
|
557
579
|
mouse_actual_pos.top - self.mouse_init_pos.top);
|
558
580
|
if (!(diff_x > self.options.distance ||
|
559
581
|
diff_y > self.options.distance)
|
560
|
-
|
582
|
+
) {
|
561
583
|
return false;
|
562
584
|
}
|
563
585
|
|
@@ -572,7 +594,9 @@
|
|
572
594
|
}
|
573
595
|
|
574
596
|
return false;
|
575
|
-
}
|
597
|
+
};
|
598
|
+
|
599
|
+
this.$body.on(pointer_events.move, this.on_pointer_events_move);
|
576
600
|
|
577
601
|
return false;
|
578
602
|
};
|
@@ -678,6 +702,13 @@
|
|
678
702
|
|
679
703
|
fn.destroy = function(){
|
680
704
|
this.disable();
|
705
|
+
|
706
|
+
this.$container.off('selectstart', this.proxied_on_select_start);
|
707
|
+
this.$container.off(pointer_events.start, this.proxied_drag_handler);
|
708
|
+
this.$body.off(pointer_events.end, this.proxied_pointer_events_end);
|
709
|
+
this.$body.off(pointer_events.move, this.on_pointer_events_move);
|
710
|
+
$(window).unbind('resize', this.on_window_resize);
|
711
|
+
|
681
712
|
$.removeData(this.$container, 'drag');
|
682
713
|
};
|
683
714
|
|
@@ -690,7 +721,7 @@
|
|
690
721
|
};
|
691
722
|
|
692
723
|
//jQuery adapter
|
693
|
-
$.fn.
|
724
|
+
$.fn.dragg = function ( options ) {
|
694
725
|
return this.each(function () {
|
695
726
|
if (!$.data(this, 'drag')) {
|
696
727
|
$.data(this, 'drag', new Draggable( this, options ));
|
@@ -701,20 +732,32 @@
|
|
701
732
|
|
702
733
|
}(jQuery, window, document));
|
703
734
|
|
735
|
+
/*
|
736
|
+
* jquery.gridster
|
737
|
+
* https://github.com/ducksboard/gridster.js
|
738
|
+
*
|
739
|
+
* Copyright (c) 2012 ducksboard
|
740
|
+
* Licensed under the MIT licenses.
|
741
|
+
*/
|
704
742
|
;(function($, window, document, undefined) {
|
705
743
|
|
744
|
+
//ToDo Max_cols and Max_size_x conflict.. need to unify
|
706
745
|
var defaults = {
|
707
746
|
namespace: '',
|
708
747
|
widget_selector: 'li',
|
748
|
+
static_class: 'static',
|
709
749
|
widget_margins: [10, 10],
|
710
750
|
widget_base_dimensions: [400, 225],
|
711
751
|
extra_rows: 0,
|
712
752
|
extra_cols: 0,
|
713
753
|
min_cols: 1,
|
754
|
+
max_cols: 60,
|
714
755
|
min_rows: 15,
|
756
|
+
max_rows: 15,
|
715
757
|
max_size_x: 6,
|
716
758
|
autogenerate_stylesheet: true,
|
717
759
|
avoid_overlapped_widgets: true,
|
760
|
+
shift_larger_widgets_down: true,
|
718
761
|
serialize_params: function($w, wgd) {
|
719
762
|
return {
|
720
763
|
col: wgd.col,
|
@@ -725,7 +768,8 @@
|
|
725
768
|
},
|
726
769
|
collision: {},
|
727
770
|
draggable: {
|
728
|
-
distance: 4
|
771
|
+
distance: 4,
|
772
|
+
items: ".gs_w:not(.static)"
|
729
773
|
}
|
730
774
|
};
|
731
775
|
|
@@ -783,6 +827,7 @@
|
|
783
827
|
this.$widgets = this.$el.children(this.options.widget_selector).addClass('gs_w');
|
784
828
|
this.widgets = [];
|
785
829
|
this.$changed = $([]);
|
830
|
+
this.w_queue = {};
|
786
831
|
this.wrapper_width = this.$wrapper.width();
|
787
832
|
this.min_widget_width = (this.options.widget_margins[0] * 2) +
|
788
833
|
this.options.widget_base_dimensions[0];
|
@@ -869,6 +914,7 @@
|
|
869
914
|
}).addClass('gs_w').appendTo(this.$el).hide();
|
870
915
|
|
871
916
|
this.$widgets = this.$widgets.add($w);
|
917
|
+
this.$changed = this.$changed.add($w);
|
872
918
|
|
873
919
|
this.register_widget($w);
|
874
920
|
|
@@ -1071,9 +1117,12 @@
|
|
1071
1117
|
size_y: size_y
|
1072
1118
|
});
|
1073
1119
|
|
1120
|
+
/*
|
1074
1121
|
$nexts.not(exclude).each($.proxy(function(i, widget) {
|
1122
|
+
console.log("from_remove")
|
1075
1123
|
this.move_widget_up( $(widget), size_y );
|
1076
1124
|
}, this));
|
1125
|
+
*/
|
1077
1126
|
|
1078
1127
|
this.set_dom_grid_height();
|
1079
1128
|
|
@@ -1123,6 +1172,13 @@
|
|
1123
1172
|
return false;
|
1124
1173
|
};
|
1125
1174
|
|
1175
|
+
fn.remove_by_grid = function(col, row){
|
1176
|
+
var $w = this.is_widget(col, row);
|
1177
|
+
if($w){
|
1178
|
+
this.remove_widget($w);
|
1179
|
+
}
|
1180
|
+
}
|
1181
|
+
|
1126
1182
|
|
1127
1183
|
/**
|
1128
1184
|
* Remove a widget from the grid.
|
@@ -1199,14 +1255,15 @@
|
|
1199
1255
|
$widgets || ($widgets = this.$widgets);
|
1200
1256
|
var result = [];
|
1201
1257
|
$widgets.each($.proxy(function(i, widget) {
|
1202
|
-
|
1258
|
+
if(typeof($(widget).coords().grid) != "undefined"){
|
1259
|
+
result.push(this.options.serialize_params(
|
1203
1260
|
$(widget), $(widget).coords().grid ) );
|
1261
|
+
}
|
1204
1262
|
}, this));
|
1205
1263
|
|
1206
1264
|
return result;
|
1207
1265
|
};
|
1208
1266
|
|
1209
|
-
|
1210
1267
|
/**
|
1211
1268
|
* Returns a serialized array of the widgets that have changed their
|
1212
1269
|
* position.
|
@@ -1241,6 +1298,10 @@
|
|
1241
1298
|
!this.can_move_to(
|
1242
1299
|
{size_x: wgd.size_x, size_y: wgd.size_y}, wgd.col, wgd.row)
|
1243
1300
|
) {
|
1301
|
+
/*if(!$el.hasClass('.disp_ad')){
|
1302
|
+
$el.remove();
|
1303
|
+
return false;
|
1304
|
+
}*/
|
1244
1305
|
wgd = this.next_position(wgd.size_x, wgd.size_y);
|
1245
1306
|
wgd.el = $el;
|
1246
1307
|
$el.attr({
|
@@ -1309,13 +1370,13 @@
|
|
1309
1370
|
*/
|
1310
1371
|
fn.add_to_gridmap = function(grid_data, value) {
|
1311
1372
|
this.update_widget_position(grid_data, value || grid_data.el);
|
1312
|
-
|
1313
|
-
if (grid_data.el) {
|
1373
|
+
/*if (grid_data.el) {
|
1314
1374
|
var $widgets = this.widgets_below(grid_data.el);
|
1315
1375
|
$widgets.each($.proxy(function(i, widget) {
|
1376
|
+
console.log("from_add_to_gridmap");
|
1316
1377
|
this.move_widget_up( $(widget));
|
1317
1378
|
}, this));
|
1318
|
-
}
|
1379
|
+
} */
|
1319
1380
|
};
|
1320
1381
|
|
1321
1382
|
|
@@ -1352,7 +1413,7 @@
|
|
1352
1413
|
}, 60)
|
1353
1414
|
});
|
1354
1415
|
|
1355
|
-
this.drag_api = this.$el.
|
1416
|
+
this.drag_api = this.$el.dragg(draggable_options).data('drag');
|
1356
1417
|
return this;
|
1357
1418
|
};
|
1358
1419
|
|
@@ -1507,6 +1568,7 @@
|
|
1507
1568
|
this.player_grid_data = {};
|
1508
1569
|
this.cells_occupied_by_placeholder = {};
|
1509
1570
|
this.cells_occupied_by_player = {};
|
1571
|
+
this.w_queue = {};
|
1510
1572
|
|
1511
1573
|
this.set_dom_grid_height();
|
1512
1574
|
};
|
@@ -1600,12 +1662,13 @@
|
|
1600
1662
|
*/
|
1601
1663
|
fn.set_player = function(col, row, no_player) {
|
1602
1664
|
var self = this;
|
1665
|
+
var swap = false;
|
1603
1666
|
if (!no_player) {
|
1604
1667
|
this.empty_cells_player_occupies();
|
1605
1668
|
}
|
1606
1669
|
var cell = !no_player ? self.colliders_data[0].el.data : {col: col};
|
1607
1670
|
var to_col = cell.col;
|
1608
|
-
var to_row = row ||
|
1671
|
+
var to_row = cell.row || row;
|
1609
1672
|
|
1610
1673
|
this.player_grid_data = {
|
1611
1674
|
col: to_col,
|
@@ -1617,13 +1680,102 @@
|
|
1617
1680
|
this.cells_occupied_by_player = this.get_cells_occupied(
|
1618
1681
|
this.player_grid_data);
|
1619
1682
|
|
1683
|
+
//Added placeholder for more advanced movement.
|
1684
|
+
this.cells_occupied_by_placeholder = this.get_cells_occupied(
|
1685
|
+
this.placeholder_grid_data);
|
1686
|
+
|
1620
1687
|
var $overlapped_widgets = this.get_widgets_overlapped(
|
1621
1688
|
this.player_grid_data);
|
1622
1689
|
|
1623
|
-
var
|
1690
|
+
var player_size_y = this.player_grid_data.size_y;
|
1691
|
+
var player_size_x = this.player_grid_data.size_x;
|
1692
|
+
var placeholder_cells = this.cells_occupied_by_placeholder;
|
1693
|
+
var $gr = this;
|
1694
|
+
|
1695
|
+
|
1696
|
+
//Queue Swaps
|
1697
|
+
$overlapped_widgets.each($.proxy(function(i, w){
|
1698
|
+
var $w = $(w);
|
1699
|
+
var wgd = $w.coords().grid;
|
1700
|
+
|
1701
|
+
// Ensure all values are in integer format
|
1702
|
+
wgd.col = parseInt(wgd.col);
|
1703
|
+
wgd.row = parseInt(wgd.row);
|
1704
|
+
wgd.size_x = parseInt(wgd.size_x);
|
1705
|
+
wgd.size_y = parseInt(wgd.size_y);
|
1706
|
+
player_size_x = parseInt(player_size_x);
|
1707
|
+
player_size_y = parseInt(player_size_y);
|
1708
|
+
|
1709
|
+
var outside_col = placeholder_cells.cols[0]+player_size_x-1;
|
1710
|
+
var outside_row = placeholder_cells.rows[0]+player_size_y-1;
|
1711
|
+
if ($w.hasClass($gr.options.static_class)){
|
1712
|
+
//next iteration
|
1713
|
+
return true;
|
1714
|
+
}
|
1715
|
+
if(wgd.size_x <= player_size_x && wgd.size_y <= player_size_y){
|
1716
|
+
if(!$gr.is_swap_occupied(placeholder_cells.cols[0], wgd.row, wgd.size_x, wgd.size_y) && !$gr.is_player_in(placeholder_cells.cols[0], wgd.row) && !$gr.is_in_queue(placeholder_cells.cols[0], wgd.row, $w)){
|
1717
|
+
swap = $gr.queue_widget(placeholder_cells.cols[0], wgd.row, $w);
|
1718
|
+
}
|
1719
|
+
else if(!$gr.is_swap_occupied(outside_col, wgd.row, wgd.size_x, wgd.size_y) && !$gr.is_player_in(outside_col, wgd.row) && !$gr.is_in_queue(outside_col, wgd.row, $w)){
|
1720
|
+
swap = $gr.queue_widget(outside_col, wgd.row, $w);
|
1721
|
+
}
|
1722
|
+
else if(!$gr.is_swap_occupied(wgd.col, placeholder_cells.rows[0], wgd.size_x, wgd.size_y) && !$gr.is_player_in(wgd.col, placeholder_cells.rows[0]) && !$gr.is_in_queue(wgd.col, placeholder_cells.rows[0], $w)){
|
1723
|
+
swap = $gr.queue_widget(wgd.col, placeholder_cells.rows[0], $w);
|
1724
|
+
}
|
1725
|
+
else if(!$gr.is_swap_occupied(wgd.col, outside_row, wgd.size_x, wgd.size_y) && !$gr.is_player_in(wgd.col, outside_row) && !$gr.is_in_queue(wgd.col, outside_row, $w)){
|
1726
|
+
swap = $gr.queue_widget(wgd.col, outside_row, $w);
|
1727
|
+
}
|
1728
|
+
else if(!$gr.is_swap_occupied(placeholder_cells.cols[0],placeholder_cells.rows[0], wgd.size_x, wgd.size_y) && !$gr.is_player_in(placeholder_cells.cols[0],placeholder_cells.rows[0]) && !$gr.is_in_queue(placeholder_cells.cols[0],placeholder_cells.rows[0], $w)){
|
1729
|
+
swap = $gr.queue_widget(placeholder_cells.cols[0], placeholder_cells.rows[0], $w);
|
1730
|
+
} else {
|
1731
|
+
//in one last attempt we check for any other empty spaces
|
1732
|
+
for (var c = 0; c < player_size_x; c++){
|
1733
|
+
for (var r = 0; r < player_size_y; r++){
|
1734
|
+
var colc = placeholder_cells.cols[0]+c;
|
1735
|
+
var rowc = placeholder_cells.rows[0]+r;
|
1736
|
+
if (!$gr.is_swap_occupied(colc,rowc, wgd.size_x, wgd.size_y) && !$gr.is_player_in(colc,rowc) && !$gr.is_in_queue(colc, rowc, $w)){
|
1737
|
+
swap = $gr.queue_widget(colc, rowc, $w);
|
1738
|
+
c = player_size_x;
|
1739
|
+
break;
|
1740
|
+
}
|
1741
|
+
}
|
1742
|
+
}
|
1743
|
+
|
1744
|
+
}
|
1745
|
+
} else if ($gr.options.shift_larger_widgets_down && !swap) {
|
1746
|
+
$overlapped_widgets.each($.proxy(function(i, w){
|
1747
|
+
var $w = $(w);
|
1748
|
+
var wgd = $w.coords().grid;
|
1749
|
+
|
1750
|
+
if($gr.can_go_down($w)){
|
1751
|
+
$gr.move_widget_down($w, $gr.player_grid_data.size_y);
|
1752
|
+
$gr.set_placeholder(to_col, to_row);
|
1753
|
+
}
|
1754
|
+
}));
|
1755
|
+
}
|
1756
|
+
|
1757
|
+
$gr.clean_up_changed();
|
1758
|
+
}));
|
1759
|
+
|
1760
|
+
|
1761
|
+
/* To show queued items in console
|
1762
|
+
for(var key in this.w_queue){
|
1763
|
+
console.log("key " +key);
|
1764
|
+
console.log(this.w_queue[key]);
|
1765
|
+
}
|
1766
|
+
*/
|
1624
1767
|
|
1625
|
-
|
1626
|
-
this.
|
1768
|
+
//Move queued widgets
|
1769
|
+
if(swap && this.can_placeholder_be_set(to_col, to_row, player_size_x, player_size_y)){
|
1770
|
+
for(var key in this.w_queue){
|
1771
|
+
var col = parseInt(key.split("_")[0]);
|
1772
|
+
var row = parseInt(key.split("_")[1]);
|
1773
|
+
if (this.w_queue[key] != "full"){
|
1774
|
+
this.new_move_widget_to(this.w_queue[key], col, row);
|
1775
|
+
}
|
1776
|
+
}
|
1777
|
+
this.set_placeholder(to_col, to_row);
|
1778
|
+
}
|
1627
1779
|
|
1628
1780
|
/* if there is not widgets overlapping in the new player position,
|
1629
1781
|
* update the new placeholder position. */
|
@@ -1632,9 +1784,13 @@
|
|
1632
1784
|
if (pp !== false) {
|
1633
1785
|
to_row = pp;
|
1634
1786
|
}
|
1635
|
-
this.
|
1787
|
+
if(this.can_placeholder_be_set(to_col, to_row, player_size_x, player_size_y)){
|
1788
|
+
this.set_placeholder(to_col, to_row);
|
1789
|
+
}
|
1636
1790
|
}
|
1637
1791
|
|
1792
|
+
this.w_queue = {};
|
1793
|
+
|
1638
1794
|
return {
|
1639
1795
|
col: to_col,
|
1640
1796
|
row: to_row
|
@@ -1642,6 +1798,151 @@
|
|
1642
1798
|
};
|
1643
1799
|
|
1644
1800
|
|
1801
|
+
fn.is_swap_occupied = function(col, row, w_size_x, w_size_y) {
|
1802
|
+
var occupied = false;
|
1803
|
+
for (var c = 0; c < w_size_x; c++){
|
1804
|
+
for (var r = 0; r < w_size_y; r++){
|
1805
|
+
var colc = col + c;
|
1806
|
+
var rowc = row + r;
|
1807
|
+
var key = colc+"_"+rowc;
|
1808
|
+
if(this.is_occupied(colc,rowc)){
|
1809
|
+
occupied = true;
|
1810
|
+
} else if(key in this.w_queue){
|
1811
|
+
if(this.w_queue[key] == "full"){
|
1812
|
+
occupied = true;
|
1813
|
+
continue;
|
1814
|
+
}
|
1815
|
+
$tw = this.w_queue[key];
|
1816
|
+
tgd = $tw.coords().grid;
|
1817
|
+
//remove queued items if no longer under player.
|
1818
|
+
if(!this.is_widget_under_player(tgd.col,tgd.row)){
|
1819
|
+
delete this.w_queue[key];
|
1820
|
+
}
|
1821
|
+
}
|
1822
|
+
if(rowc > parseInt(this.options.max_rows)){
|
1823
|
+
occupied = true;
|
1824
|
+
}
|
1825
|
+
if(colc > parseInt(this.options.max_cols)){
|
1826
|
+
occupied = true;
|
1827
|
+
}
|
1828
|
+
if (this.is_player_in(colc,rowc)){
|
1829
|
+
occupied = true;
|
1830
|
+
}
|
1831
|
+
}
|
1832
|
+
}
|
1833
|
+
|
1834
|
+
return occupied;
|
1835
|
+
}
|
1836
|
+
|
1837
|
+
fn.can_placeholder_be_set = function(col, row, player_size_x, player_size_y){
|
1838
|
+
var can_set = true;
|
1839
|
+
for (var c = 0; c < player_size_x; c++){
|
1840
|
+
for (var r = 0; r < player_size_y; r++){
|
1841
|
+
var colc = col + c;
|
1842
|
+
var rowc = row + r;
|
1843
|
+
var key = colc+"_"+rowc;
|
1844
|
+
var $tw = this.is_widget(colc, rowc);
|
1845
|
+
//if this space is occupied and not queued for move.
|
1846
|
+
if(rowc > parseInt(this.options.max_rows)){
|
1847
|
+
can_set = false;
|
1848
|
+
}
|
1849
|
+
if(colc > parseInt(this.options.max_cols)){
|
1850
|
+
can_set = false;
|
1851
|
+
}
|
1852
|
+
if(this.is_occupied(colc,rowc) && !this.is_widget_queued_and_can_move($tw)){
|
1853
|
+
can_set = false;
|
1854
|
+
}
|
1855
|
+
}
|
1856
|
+
}
|
1857
|
+
return can_set;
|
1858
|
+
}
|
1859
|
+
|
1860
|
+
fn.queue_widget = function(col, row, $widget){
|
1861
|
+
var $w = $widget
|
1862
|
+
var wgd = $w.coords().grid;
|
1863
|
+
var primary_key = col+"_"+row;
|
1864
|
+
if (primary_key in this.w_queue){
|
1865
|
+
return false;
|
1866
|
+
}
|
1867
|
+
|
1868
|
+
this.w_queue[primary_key] = $w;
|
1869
|
+
|
1870
|
+
for (var c = 0; c < wgd.size_x; c++){
|
1871
|
+
for (var r = 0; r < wgd.size_y; r++){
|
1872
|
+
var colc = col + c;
|
1873
|
+
var rowc = row + r;
|
1874
|
+
var key = colc+"_"+rowc;
|
1875
|
+
if (key == primary_key){
|
1876
|
+
continue;
|
1877
|
+
}
|
1878
|
+
this.w_queue[key] = "full";
|
1879
|
+
}
|
1880
|
+
}
|
1881
|
+
|
1882
|
+
return true;
|
1883
|
+
}
|
1884
|
+
|
1885
|
+
fn.is_widget_queued_and_can_move = function($widget){
|
1886
|
+
var queued = false;
|
1887
|
+
if ($widget === false){
|
1888
|
+
return false;
|
1889
|
+
}
|
1890
|
+
|
1891
|
+
for(var key in this.w_queue){
|
1892
|
+
if(this.w_queue[key] == "full"){
|
1893
|
+
continue;
|
1894
|
+
}
|
1895
|
+
if(this.w_queue[key].attr("data-col") == $widget.attr("data-col") && this.w_queue[key].attr("data-row") == $widget.attr("data-row")){
|
1896
|
+
queued = true;
|
1897
|
+
//test whole space
|
1898
|
+
var $w = this.w_queue[key];
|
1899
|
+
var dcol = parseInt(key.split("_")[0]);
|
1900
|
+
var drow = parseInt(key.split("_")[1]);
|
1901
|
+
var wgd = $w.coords().grid;
|
1902
|
+
|
1903
|
+
for (var c = 0; c < wgd.size_x; c++){
|
1904
|
+
for (var r = 0; r < wgd.size_y; r++){
|
1905
|
+
var colc = dcol + c;
|
1906
|
+
var rowc = drow + r;
|
1907
|
+
if (this.is_player_in(colc,rowc)){
|
1908
|
+
queued = false;
|
1909
|
+
}
|
1910
|
+
|
1911
|
+
}
|
1912
|
+
}
|
1913
|
+
|
1914
|
+
}
|
1915
|
+
}
|
1916
|
+
|
1917
|
+
return queued
|
1918
|
+
}
|
1919
|
+
|
1920
|
+
fn.is_in_queue = function(col,row, $widget){
|
1921
|
+
var queued = false;
|
1922
|
+
var key = col+"_"+row;
|
1923
|
+
|
1924
|
+
if ((key in this.w_queue)){
|
1925
|
+
if (this.w_queue[key] == "full"){
|
1926
|
+
queued = true;
|
1927
|
+
} else {
|
1928
|
+
$tw = this.w_queue[key];
|
1929
|
+
tgd = $tw.coords().grid;
|
1930
|
+
if(!this.is_widget_under_player(tgd.col,tgd.row)){
|
1931
|
+
delete this.w_queue[key]
|
1932
|
+
queued = false;
|
1933
|
+
} else if(this.w_queue[key].attr("data-col") == $widget.attr("data-col") && this.w_queue[key].attr("data-row") == $widget.attr("data-row")) {
|
1934
|
+
delete this.w_queue[key]
|
1935
|
+
queued = false;
|
1936
|
+
} else {
|
1937
|
+
queued = true;
|
1938
|
+
}
|
1939
|
+
}
|
1940
|
+
}
|
1941
|
+
|
1942
|
+
return queued;
|
1943
|
+
}
|
1944
|
+
|
1945
|
+
|
1645
1946
|
/**
|
1646
1947
|
* See which of the widgets in the $widgets param collection can go to
|
1647
1948
|
* a upper row and which not.
|
@@ -1765,6 +2066,8 @@
|
|
1765
2066
|
/**
|
1766
2067
|
* Sorts an Array of grid coords objects (representing the grid coords of
|
1767
2068
|
* each widget) in descending way.
|
2069
|
+
|
2070
|
+
* Depreciated.
|
1768
2071
|
*
|
1769
2072
|
* @method manage_movements
|
1770
2073
|
* @param {HTMLElements} $widgets A jQuery collection of HTMLElements
|
@@ -1797,9 +2100,11 @@
|
|
1797
2100
|
// so we need to move widget down to a position that dont
|
1798
2101
|
// overlaps player
|
1799
2102
|
var y = (to_row + this.player_grid_data.size_y) - wgd.row;
|
1800
|
-
|
1801
|
-
|
1802
|
-
|
2103
|
+
if (this.can_go_down($w)){
|
2104
|
+
console.log("In Move Down!")
|
2105
|
+
this.move_widget_down($w, y);
|
2106
|
+
this.set_placeholder(to_col, to_row);
|
2107
|
+
}
|
1803
2108
|
}
|
1804
2109
|
}
|
1805
2110
|
}, this));
|
@@ -1929,6 +2234,32 @@
|
|
1929
2234
|
return false;
|
1930
2235
|
};
|
1931
2236
|
|
2237
|
+
/**
|
2238
|
+
* Determines if widget is supposed to be static.
|
2239
|
+
* @method is_static
|
2240
|
+
* @param {Number} col The column to check.
|
2241
|
+
* @param {Number} row The row to check.
|
2242
|
+
* @return {Boolean} Returns true if widget exists and has static class,
|
2243
|
+
* else returns false
|
2244
|
+
*/
|
2245
|
+
|
2246
|
+
fn.is_static = function(col, row) {
|
2247
|
+
var cell = this.gridmap[col];
|
2248
|
+
if (!cell) {
|
2249
|
+
return false;
|
2250
|
+
}
|
2251
|
+
|
2252
|
+
cell = cell[row];
|
2253
|
+
|
2254
|
+
if (cell) {
|
2255
|
+
if(cell.hasClass(this.options.static_class)){
|
2256
|
+
return true;
|
2257
|
+
}
|
2258
|
+
}
|
2259
|
+
|
2260
|
+
return false;
|
2261
|
+
};
|
2262
|
+
|
1932
2263
|
|
1933
2264
|
/**
|
1934
2265
|
* Determines if there is a widget in the cell represented by col/row
|
@@ -1990,7 +2321,7 @@
|
|
1990
2321
|
});
|
1991
2322
|
|
1992
2323
|
// Prevents widgets go out of the grid
|
1993
|
-
var right_col = (col + phgd.size_x - 1);
|
2324
|
+
var right_col = (col + parseInt(phgd.size_x) - 1);
|
1994
2325
|
if (right_col > this.cols) {
|
1995
2326
|
col = col - (right_col - col);
|
1996
2327
|
}
|
@@ -2011,8 +2342,16 @@
|
|
2011
2342
|
|
2012
2343
|
if (moved_down || changed_column) {
|
2013
2344
|
$nexts.each($.proxy(function(i, widget) {
|
2014
|
-
|
2015
|
-
|
2345
|
+
//Make sure widget is at it's topmost position
|
2346
|
+
$w = $(widget);
|
2347
|
+
wgd = $w.coords().grid;
|
2348
|
+
|
2349
|
+
var can_go_widget_up = this.can_go_widget_up(wgd);
|
2350
|
+
|
2351
|
+
if (can_go_widget_up) {
|
2352
|
+
this.move_widget_to($w, can_go_widget_up);
|
2353
|
+
}
|
2354
|
+
|
2016
2355
|
}, this));
|
2017
2356
|
}
|
2018
2357
|
|
@@ -2274,13 +2613,14 @@
|
|
2274
2613
|
* @return {HTMLElements} Returns a jQuery collection of HTMLElements.
|
2275
2614
|
*/
|
2276
2615
|
fn.on_stop_overlapping_column = function(col) {
|
2277
|
-
this.set_player(col, false);
|
2278
|
-
|
2616
|
+
//this.set_player(col, false);
|
2279
2617
|
var self = this;
|
2280
|
-
|
2281
|
-
|
2282
|
-
|
2283
|
-
|
2618
|
+
if(this.options.shift_larger_widgets_down){
|
2619
|
+
this.for_each_widget_below(col, this.cells_occupied_by_player.rows[0],
|
2620
|
+
function(tcol, trow) {
|
2621
|
+
self.move_widget_up(this, self.player_grid_data.size_y);
|
2622
|
+
});
|
2623
|
+
}
|
2284
2624
|
};
|
2285
2625
|
|
2286
2626
|
|
@@ -2292,17 +2632,37 @@
|
|
2292
2632
|
* @return {HTMLElements} Returns a jQuery collection of HTMLElements.
|
2293
2633
|
*/
|
2294
2634
|
fn.on_stop_overlapping_row = function(row) {
|
2295
|
-
this.set_player(false, row);
|
2296
|
-
|
2635
|
+
//this.set_player(false, row);
|
2297
2636
|
var self = this;
|
2298
2637
|
var cols = this.cells_occupied_by_player.cols;
|
2299
|
-
|
2300
|
-
|
2301
|
-
|
2302
|
-
|
2638
|
+
if(this.options.shift_larger_widgets_down){
|
2639
|
+
for (var c = 0, cl = cols.length; c < cl; c++) {
|
2640
|
+
this.for_each_widget_below(cols[c], row, function(tcol, trow) {
|
2641
|
+
console.log("from_on_stop_overlapping_row");
|
2642
|
+
self.move_widget_up(this, self.player_grid_data.size_y);
|
2643
|
+
});
|
2644
|
+
}
|
2303
2645
|
}
|
2304
2646
|
};
|
2305
2647
|
|
2648
|
+
//Not yet part of api - DM.
|
2649
|
+
fn.new_move_widget_to = function($widget, col, row){
|
2650
|
+
var self = this;
|
2651
|
+
var widget_grid_data = $widget.coords().grid;
|
2652
|
+
|
2653
|
+
this.remove_from_gridmap(widget_grid_data);
|
2654
|
+
widget_grid_data.row = row;
|
2655
|
+
widget_grid_data.col = col;
|
2656
|
+
|
2657
|
+
this.add_to_gridmap(widget_grid_data);
|
2658
|
+
$widget.attr('data-row', row);
|
2659
|
+
$widget.attr('data-col', col);
|
2660
|
+
this.update_widget_position(widget_grid_data, $widget);
|
2661
|
+
this.$changed = this.$changed.add($widget);
|
2662
|
+
|
2663
|
+
return this;
|
2664
|
+
}
|
2665
|
+
|
2306
2666
|
|
2307
2667
|
/**
|
2308
2668
|
* Move a widget to a specific row. The cell or cells must be empty.
|
@@ -2386,9 +2746,10 @@
|
|
2386
2746
|
|
2387
2747
|
moved.push($widget);
|
2388
2748
|
|
2389
|
-
$next_widgets.each($.proxy(function(i, widget) {
|
2749
|
+
/* $next_widgets.each($.proxy(function(i, widget) {
|
2750
|
+
console.log("from_within_move_widget_up");
|
2390
2751
|
this.move_widget_up($(widget), y_units);
|
2391
|
-
}, this));
|
2752
|
+
}, this)); */
|
2392
2753
|
}
|
2393
2754
|
});
|
2394
2755
|
|
@@ -2587,6 +2948,23 @@
|
|
2587
2948
|
return this;
|
2588
2949
|
};
|
2589
2950
|
|
2951
|
+
fn.can_go_down = function($el) {
|
2952
|
+
var can_go_down = true;
|
2953
|
+
var $gr = this;
|
2954
|
+
|
2955
|
+
if ($el.hasClass(this.options.static_class)){
|
2956
|
+
can_go_down = false;
|
2957
|
+
}
|
2958
|
+
|
2959
|
+
this.widgets_below($el).each(function(){
|
2960
|
+
if ($(this).hasClass($gr.options.static_class)){
|
2961
|
+
can_go_down = false;
|
2962
|
+
}
|
2963
|
+
})
|
2964
|
+
|
2965
|
+
return can_go_down;
|
2966
|
+
}
|
2967
|
+
|
2590
2968
|
|
2591
2969
|
fn.can_go_up = function($el) {
|
2592
2970
|
var el_grid_data = $el.coords().grid;
|
@@ -2783,6 +3161,15 @@
|
|
2783
3161
|
}
|
2784
3162
|
};
|
2785
3163
|
|
3164
|
+
fn.clean_up_changed = function(){
|
3165
|
+
$gr = this;
|
3166
|
+
$gr.$changed.each(function(){
|
3167
|
+
if($gr.options.shift_larger_widgets_down){
|
3168
|
+
$gr.move_widget_up($(this));
|
3169
|
+
}
|
3170
|
+
});
|
3171
|
+
}
|
3172
|
+
|
2786
3173
|
|
2787
3174
|
|
2788
3175
|
fn._traversing_widgets = function(type, direction, col, row, callback) {
|
@@ -2820,7 +3207,8 @@
|
|
2820
3207
|
) {
|
2821
3208
|
cr = callback.call(ga[col][trow], col, trow);
|
2822
3209
|
matched.push(ga[col][trow]);
|
2823
|
-
|
3210
|
+
//break was causing problems, leaving for testing.
|
3211
|
+
//if (cr) { break; }
|
2824
3212
|
}
|
2825
3213
|
}
|
2826
3214
|
}
|
@@ -3205,7 +3593,8 @@
|
|
3205
3593
|
});
|
3206
3594
|
|
3207
3595
|
this.cols = Math.max(min_cols, cols, this.options.min_cols);
|
3208
|
-
this.rows = Math.max(max_rows, this.options.min_rows);
|
3596
|
+
//this.rows = Math.max(max_rows, this.options.min_rows);
|
3597
|
+
this.rows = this.options.max_rows;
|
3209
3598
|
|
3210
3599
|
this.baseX = ($(window).width() - aw) / 2;
|
3211
3600
|
this.baseY = this.$wrapper.offset().top;
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gridster-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-11-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: railties
|