Cascade field change events on bug form, simplify reflow code on query form

hinted-selects
Vitaliy Filippov 2014-09-23 17:07:01 +04:00
parent b918f359d9
commit e6eb69d28b
3 changed files with 25 additions and 39 deletions

View File

@ -45,7 +45,7 @@ function initControlledField(i)
}
}
function handleControllerField_this(e)
function handleControllerField_this(e, nonfirst)
{
var m = field_metadata[this.id];
if (!m)
@ -64,6 +64,11 @@ function handleControllerField_this(e)
{
handleControlledField(i);
}
// Cascade events
for (var i in f)
{
handleControllerField_this.apply(document.getElementById(i), [ null, true ]);
}
}
function setFieldValue(f, v)

View File

@ -268,51 +268,30 @@ function handleQueryformField_this(e, nonfirst)
function reflowFieldRows()
{
var cells_per_row = 4;
var per_row = 4;
var rows = [];
var fields = [];
var visible = 0;
for (var i = 0, e; e = document.getElementById('cf_row_'+i); i++)
{
rows.push(e.rows[0]);
}
var prev = [];
for (var i = 0; i < rows.length; i++)
{
var vis = 0;
for (var j = 0; j < rows[i].cells.length; j++)
for (var j = 0; j < e.rows[0].cells.length; j++)
{
var v = rows[i].cells[j].style.display != 'none';
if (prev.length && prev[0][0] < cells_per_row)
{
// Move this cell up
rows[prev[0][1]].appendChild(rows[i].cells[j]);
j--;
if (v)
{
prev[0][0]++;
if (prev[0][0] >= 4)
{
prev.shift();
}
}
}
else if (v)
{
vis++;
if (vis >= cells_per_row && i < rows.length-1)
{
// Move remaining cells down
for (var k = rows[i].cells.length-1; k > j; k--)
{
rows[i+1].cells.length
? rows[i+1].insertBefore(rows[i].cells[k], rows[i+1].cells[0])
: rows[i+1].appendChild(rows[i].cells[k]);
}
}
}
var v = e.rows[0].cells[j].style.display != 'none' ? 1 : 0;
fields.push([ e.rows[0].cells[j], v ]);
visible += v;
}
if (vis < cells_per_row)
}
for (var cur_row = 0, j = 0; cur_row < rows.length && j < fields.length; cur_row++)
{
var v = 0;
for (; j < fields.length; v += fields[j][1], j++)
{
prev.push([ vis, i ]);
if (v >= per_row && fields[j][1])
{
break;
}
rows[cur_row].appendChild(fields[j][0]);
}
}
}

View File

@ -311,6 +311,8 @@ window.hasClass = function(obj, c)
{
if (typeof(obj) == 'string')
obj = document.getElementById(obj);
if (obj.className === undefined)
return false;
var l = obj.className.split(/\s+/);
for (var i = l.length-1; i >= 0; i--)
if (l[i] == c)