Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit cd5c936

Browse files
committed
gridster extra methods
Some new methods we need at Ducksboard to implement TV mode. Two new distributions of Gridster are generated with grunt: - jquery.gridster.with-extras.js - jquery.gridster.with-extras.min.js
1 parent 7dbbc10 commit cd5c936

File tree

1 file changed

+165
-0
lines changed

1 file changed

+165
-0
lines changed

src/jquery.gridster.extras.js

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
;(function($, window, document, undefined) {
2+
3+
var fn = $.Gridster;
4+
5+
fn.widgets_in_col = function(col) {
6+
if (!this.gridmap[col]) {
7+
return false;
8+
}
9+
10+
for (var i = this.gridmap[col].length - 1; i >= 0; i--) {
11+
if (this.is_widget(col, i) !== false) {
12+
return true;
13+
}
14+
}
15+
16+
return false;
17+
};
18+
19+
fn.widgets_in_row = function(row) {
20+
for (var i = this.gridmap.length; i >= 1; i--) {
21+
if (this.is_widget(i, row) !== false) {
22+
return true;
23+
}
24+
}
25+
26+
return false;
27+
};
28+
29+
30+
fn.widgets_in_range = function(col1, row1, col2, row2) {
31+
var valid_cols = [];
32+
var valid_rows = [];
33+
var $widgets = $([]);
34+
var c, r, $w, wgd;
35+
36+
for (c = col2; c >= col1; c--) {
37+
for (r = row2; r >= row1; r--) {
38+
$w = this.is_widget(c, r);
39+
40+
if ($w !== false) {
41+
wgd = $w.data('coords').grid;
42+
if (wgd.col >= col1 && wgd.col <= col2 &&
43+
wgd.row >= row1 && wgd.row <= row2
44+
) {
45+
$widgets = $widgets.add($w);
46+
}
47+
}
48+
}
49+
}
50+
51+
return $widgets;
52+
};
53+
54+
55+
fn.get_bottom_most_occupied_cell = function() {
56+
var row = 0;
57+
var col = 0;
58+
this.for_each_cell(function($el, c, r) {
59+
if ($el && r > row) {
60+
row = r;
61+
col = c;
62+
}
63+
});
64+
65+
return {col: col, row: row};
66+
};
67+
68+
69+
fn.get_right_most_occupied_cell = function() {
70+
var row = 0;
71+
var col = 0;
72+
this.for_each_cell(function($el, c, r) {
73+
if ($el) {
74+
row = r;
75+
col = c;
76+
return false;
77+
}
78+
});
79+
80+
return {col: col, row: row};
81+
};
82+
83+
84+
fn.for_each_cell = function(callback, gridmap) {
85+
gridmap || (gridmap = this.gridmap);
86+
var cols = gridmap.length;
87+
var rows = gridmap[1].length;
88+
89+
cols_iter:
90+
for (var c = cols - 1; c >= 1; c--) {
91+
for (var r = rows - 1; r >= 1; r--) {
92+
var $el = gridmap[c] && gridmap[c][r];
93+
if (callback) {
94+
if (callback.call(this, $el, c, r) === false) {
95+
break cols_iter;
96+
} else { continue; }
97+
}
98+
}
99+
}
100+
};
101+
102+
103+
fn.next_position_in_range = function(size_x, size_y, max_rows) {
104+
size_x || (size_x = 1);
105+
size_y || (size_y = 1);
106+
var ga = this.gridmap;
107+
var cols_l = ga.length;
108+
var valid_pos = [];
109+
var rows_l;
110+
111+
for (var c = 1; c < cols_l; c++) {
112+
rows_l = max_rows || ga[c].length;
113+
for (var r = 1; r <= rows_l; r++) {
114+
var can_move_to = this.can_move_to({
115+
size_x: size_x,
116+
size_y: size_y
117+
}, c, r, max_rows);
118+
119+
if (can_move_to) {
120+
valid_pos.push({
121+
col: c,
122+
row: r,
123+
size_y: size_y,
124+
size_x: size_x
125+
});
126+
}
127+
}
128+
}
129+
130+
if (valid_pos.length >= 1) {
131+
return this.sort_by_col_asc(valid_pos)[0];
132+
}
133+
134+
return false;
135+
};
136+
137+
138+
fn.closest_to_right = function(col, row) {
139+
if (!this.gridmap[col]) { return false; }
140+
var cols_l = this.gridmap.length - 1;
141+
142+
for (var c = col; c <= cols_l; c++) {
143+
if (this.gridmap[c][row]) {
144+
return { col: c, row: row };
145+
}
146+
}
147+
148+
return false;
149+
};
150+
151+
152+
fn.closest_to_left = function(col, row) {
153+
var cols_l = this.gridmap.length - 1;
154+
if (!this.gridmap[col]) { return false; }
155+
156+
for (var c = col; c >= 1; c--) {
157+
if (this.gridmap[c][row]) {
158+
return { col: c, row: row };
159+
}
160+
}
161+
162+
return false;
163+
};
164+
165+
}(jQuery, window, document));

0 commit comments

Comments
 (0)