@true-directive/base
Version:
The set of base classes for the TrueDirective Grid
76 lines (75 loc) • 2.86 kB
JavaScript
/**
* Информация о разметке строки
*/
var RowLayout = /** @class */ (function () {
function RowLayout() {
}
/**
* Поиск строки по координатам
* @param rows Список разметок строк
* @param x Координата X
* @param y Координата Y
* @return Найденная разметка (null если не найдено)
*/
RowLayout.rowByXY = function (rows, x, y) {
for (var i = 0; i < rows.length; i++) {
var rl = rows[i];
var yy = rl.clientRect.top;
var hh = rl.clientRect.height;
if (y >= yy && y < (yy + hh)) {
return rl;
}
}
return null;
};
/**
* Поиск позиции строки для вставки
* @param rows Список разметок строк
* @param x Координата X
* @param y Координата Y
* @return Найденная разметка и позиция для вставки (до или после найденной строки)
*/
RowLayout.rowPosByXY = function (rows, x, y, tree) {
if (tree === void 0) { tree = false; }
var prev = null;
for (var i = 0; i < rows.length; i++) {
var rl = rows[i];
var yy = rl.clientRect.top;
var xx = rl.clientRect.left;
var hh = rl.clientRect.height;
var ww = rl.clientRect.width;
var h2 = hh / 2;
var h13 = hh / 3;
var h23 = (2 * hh) / 3;
if (x < xx || x > (xx + ww)) {
continue;
}
if (tree) {
if (y >= yy && y < (yy + h13)) {
return { rl: rl, rl_hover: rl, pos: 'before' };
}
if (y > (yy + h23) && y <= (yy + hh)) {
return { rl: rl, rl_hover: rl, pos: 'after' };
}
if (y >= (yy + h13) && y <= (yy + h23)) {
return { rl: rl, rl_hover: rl, pos: 'in' };
}
if (i === (rows.length - 1) && y >= (yy + hh)) {
return { rl: rl, rl_hover: null, pos: 'last' };
}
}
else {
if (y >= yy && y <= (yy + h2)) {
return { rl: rl, rl_hover: rl, pos: 'before' };
}
if (y > (yy + h2) && y <= (yy + hh)) {
return { rl: rl, rl_hover: rl, pos: 'after' };
}
}
prev = rl;
}
return { rl: null, rl_hover: null, pos: '' };
};
return RowLayout;
}());
export { RowLayout };