mirror of
https://github.com/stylersnico/librenms.git
synced 2026-07-17 00:14:54 +02:00
git-subtree-dir: lib/gridster git-subtree-mainline:26f137d822git-subtree-split:314037471f
176 lines
4.3 KiB
JavaScript
176 lines
4.3 KiB
JavaScript
;(function(root, factory) {
|
|
|
|
if (typeof define === 'function' && define.amd) {
|
|
define(['jquery', 'gridster'], factory);
|
|
} else {
|
|
root.Gridster = factory(root.$ || root.jQuery, root.Gridster);
|
|
}
|
|
|
|
}(this, function($, Gridster) {
|
|
|
|
var fn = Gridster.prototype;
|
|
|
|
fn.widgets_in_col = function(col) {
|
|
if (!this.gridmap[col]) {
|
|
return false;
|
|
}
|
|
|
|
for (var i = this.gridmap[col].length - 1; i >= 0; i--) {
|
|
if (this.is_widget(col, i) !== false) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
};
|
|
|
|
fn.widgets_in_row = function(row) {
|
|
for (var i = this.gridmap.length; i >= 1; i--) {
|
|
if (this.is_widget(i, row) !== false) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
};
|
|
|
|
|
|
fn.widgets_in_range = function(col1, row1, col2, row2) {
|
|
var valid_cols = [];
|
|
var valid_rows = [];
|
|
var $widgets = $([]);
|
|
var c, r, $w, wgd;
|
|
|
|
for (c = col2; c >= col1; c--) {
|
|
for (r = row2; r >= row1; r--) {
|
|
$w = this.is_widget(c, r);
|
|
|
|
if ($w !== false) {
|
|
wgd = $w.data('coords').grid;
|
|
if (wgd.col >= col1 && wgd.col <= col2 &&
|
|
wgd.row >= row1 && wgd.row <= row2
|
|
) {
|
|
$widgets = $widgets.add($w);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return $widgets;
|
|
};
|
|
|
|
|
|
fn.get_bottom_most_occupied_cell = function() {
|
|
var row = 0;
|
|
var col = 0;
|
|
this.for_each_cell(function($el, c, r) {
|
|
if ($el && r > row) {
|
|
row = r;
|
|
col = c;
|
|
}
|
|
});
|
|
|
|
return {col: col, row: row};
|
|
};
|
|
|
|
|
|
fn.get_right_most_occupied_cell = function() {
|
|
var row = 0;
|
|
var col = 0;
|
|
this.for_each_cell(function($el, c, r) {
|
|
if ($el) {
|
|
row = r;
|
|
col = c;
|
|
return false;
|
|
}
|
|
});
|
|
|
|
return {col: col, row: row};
|
|
};
|
|
|
|
|
|
fn.for_each_cell = function(callback, gridmap) {
|
|
gridmap || (gridmap = this.gridmap);
|
|
var cols = gridmap.length;
|
|
var rows = gridmap[1].length;
|
|
|
|
cols_iter:
|
|
for (var c = cols - 1; c >= 1; c--) {
|
|
for (var r = rows - 1; r >= 1; r--) {
|
|
var $el = gridmap[c] && gridmap[c][r];
|
|
if (callback) {
|
|
if (callback.call(this, $el, c, r) === false) {
|
|
break cols_iter;
|
|
} else { continue; }
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
|
|
fn.next_position_in_range = function(size_x, size_y, max_rows) {
|
|
size_x || (size_x = 1);
|
|
size_y || (size_y = 1);
|
|
var ga = this.gridmap;
|
|
var cols_l = ga.length;
|
|
var valid_pos = [];
|
|
var rows_l;
|
|
|
|
for (var c = 1; c < cols_l; c++) {
|
|
rows_l = max_rows || ga[c].length;
|
|
for (var r = 1; r <= rows_l; r++) {
|
|
var can_move_to = this.can_move_to({
|
|
size_x: size_x,
|
|
size_y: size_y
|
|
}, c, r, max_rows);
|
|
|
|
if (can_move_to) {
|
|
valid_pos.push({
|
|
col: c,
|
|
row: r,
|
|
size_y: size_y,
|
|
size_x: size_x
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
if (valid_pos.length >= 1) {
|
|
return Gridster.sort_by_col_asc(valid_pos)[0];
|
|
}
|
|
|
|
return false;
|
|
};
|
|
|
|
|
|
fn.closest_to_right = function(col, row) {
|
|
if (!this.gridmap[col]) { return false; }
|
|
var cols_l = this.gridmap.length - 1;
|
|
|
|
for (var c = col; c <= cols_l; c++) {
|
|
if (this.gridmap[c][row]) {
|
|
return { col: c, row: row };
|
|
}
|
|
}
|
|
|
|
return false;
|
|
};
|
|
|
|
|
|
fn.closest_to_left = function(col, row) {
|
|
var cols_l = this.gridmap.length - 1;
|
|
if (!this.gridmap[col]) { return false; }
|
|
|
|
for (var c = col; c >= 1; c--) {
|
|
if (this.gridmap[c][row]) {
|
|
return { col: c, row: row };
|
|
}
|
|
}
|
|
|
|
return false;
|
|
};
|
|
|
|
return Gridster;
|
|
|
|
}));
|