1f24d7126c
This changeset applies new styles to the poll. it also uses the new asynchronous wrappers around the localStorage api. this is necessary because we're migrating to a storage system that will use an async api. The changes to the poll just happened to coincide with the async stuff. My apologies to anyone who wants to read this whole thing
120 lines
3.3 KiB
JavaScript
120 lines
3.3 KiB
JavaScript
define([
|
|
'/bower_components/jquery/dist/jquery.min.js',
|
|
],function () {
|
|
var $ = window.jQuery;
|
|
|
|
var Table = function ($t, xy) {
|
|
var $head = $t.find('thead');
|
|
var $body = $t.find('tbody');
|
|
var $foot = $t.find('tfoot');
|
|
|
|
var rows = [];
|
|
var cols = [];
|
|
|
|
var addRow = function (first, Rest, uid) {
|
|
var $row = $('<tr>', {
|
|
'data-rt-uid': uid,
|
|
}).append($('<td>').append(first));
|
|
|
|
$head.find('th').each(function (i) {
|
|
var colId = $(this).data('rt-uid');
|
|
$row.append($('<td>', {
|
|
'class': 'checkbox-cell',
|
|
}).append(Rest(xy(colId, uid))));
|
|
});
|
|
|
|
rows.push(uid);
|
|
|
|
$body.append($row);
|
|
return $row;
|
|
};
|
|
|
|
var addColumn = function (first, Rest, uid) {
|
|
$head.find('tr').append($('<th>', {
|
|
'data-rt-uid': uid,
|
|
}).append(first));
|
|
|
|
var $width = $body.find('tr').each(function (i) {
|
|
// each checkbox needs a uid corresponding to its role
|
|
var rowId = $(this).data('rt-uid');
|
|
$(this).append($('<td>', {
|
|
'class': 'checkbox-cell',
|
|
}).append(Rest(xy(uid, rowId))));
|
|
});
|
|
|
|
cols.push(uid);
|
|
|
|
$foot.find('tr').append($('<td>', { }));
|
|
return $width.length;
|
|
};
|
|
|
|
var remove = function ($sel) {
|
|
$sel.fadeOut(750, function () {
|
|
$sel.remove();
|
|
});
|
|
};
|
|
|
|
var removeFromArray = function (A, e) {
|
|
var i = A.indexOf(e);
|
|
if (i === -1) { return; }
|
|
A.splice(i, 1);
|
|
};
|
|
|
|
var removeColumn = function (uid) {
|
|
//var I/
|
|
var $col = $head.find('th[data-rt-uid="' + uid + '"]');
|
|
if (!$col.length) { return; }
|
|
|
|
/* removing a column is difficult because the elements
|
|
all have different parents. */
|
|
|
|
// use the th
|
|
var th = $col[0];
|
|
|
|
// find its index in the tr
|
|
var index = Array.prototype.slice
|
|
.call(th.parentElement.children).indexOf(th);
|
|
|
|
// remove it
|
|
remove($col);
|
|
|
|
removeFromArray(cols, uid);
|
|
|
|
// remove all elements in the body which have the same index
|
|
$body.find('tr').each(function () {
|
|
var $this = $(this);
|
|
$this.find('td').eq(index).each(function () {
|
|
remove($(this));
|
|
});
|
|
});
|
|
};
|
|
|
|
var removeRow = function (uid) {
|
|
var $row = $body.find('tr[data-rt-uid="' + uid + '"]');
|
|
if (!$row.length) { return; }
|
|
remove($row);
|
|
removeFromArray(rows, uid);
|
|
};
|
|
|
|
var colExists = function (uid) {
|
|
return cols.indexOf(uid) !== -1;
|
|
};
|
|
|
|
var rowExists = function (uid) {
|
|
return rows.indexOf(uid) !== -1;
|
|
};
|
|
|
|
return {
|
|
$: $t,
|
|
addRow: addRow,
|
|
addColumn: addColumn,
|
|
removeRow: removeRow,
|
|
removeColumn: removeColumn,
|
|
rows: rows,
|
|
rowExists: rowExists,
|
|
cols: cols,
|
|
colExists: colExists,
|
|
};
|
|
};
|
|
return Table;
|
|
});
|