push my latest changes because I'm agile

pull/1/head
ansuz 8 years ago
parent cde239c97a
commit e3f4df7e0a

@ -24,6 +24,7 @@
#adduser, #addoption {
font-weight: bold;
}
</style>
</head>
<body>
@ -67,5 +68,36 @@
<tbody>
</tbody>
</table>
</form>
<div class="modal" id="wizard-modal">
<button id="close-wizard" class="button action" title="close wizard">Close wizard</button>
<div class="center">
<div id="modal-toolbar">
<button id="get-options" class="action button">Compute Options</button>
</div>
<h2>Automatically create a number of options by entering any number of dates and times segments </h2>
<table id="wizard-table">
<thead>
<tr>
<td>
<div id="adddate" class="clickable">+ Dates</div>
</td>
</tr>
</thead>
<tfoot>
<tr>
<td>
<div id="addtime" class="clickable">+ Times</div>
</td>
</tr>
</tfoot>
<tbody>
</tbody>
</table>
</div>
</div>

@ -2,6 +2,7 @@ define([
'/api/config?cb=' + Math.random().toString(16).substring(2),
'/customize/messages.js',
'/poll/table.js',
'/poll/wizard.js',
'/bower_components/textpatcher/TextPatcher.js',
'/bower_components/chainpad-listmap/chainpad-listmap.js',
'/bower_components/chainpad-crypto/crypto.js',
@ -10,7 +11,7 @@ define([
'/common/notify.js',
'/bower_components/jquery/dist/jquery.min.js',
'/customize/pad.js'
], function (Config, Messages, Table, TextPatcher, Listmap, Crypto, Cryptpad, Visible, Notify) {
], function (Config, Messages, Table, Wizard, TextPatcher, Listmap, Crypto, Cryptpad, Visible, Notify) {
var $ = window.jQuery;
Cryptpad.styleAlerts();
@ -39,6 +40,8 @@ define([
var module = window.APP = {};
module.Wizard = Wizard;
// special UI elements
var $title = $('#title').attr('placeholder', Messages.dateTitleHint || 'title');
var $location = $('#location').attr('placeholder', Messages.dateLocationHint || 'location');
@ -87,7 +90,8 @@ define([
};
var Text = function () { return Input({type:'text'}); };
var table = module.table = Table($('table'), xy);
var table = module.table = Table($('#table'), xy);
var setEditable = function (bool) {
module.isEditable = bool;
items.forEach(function ($item) {
@ -103,6 +107,49 @@ define([
A.push(e);
};
var removeRow = function (proxy, uid) {
// remove proxy.table.rows[uid]
proxy.table.rows[uid] = undefined;
delete proxy.table.rows[uid];
// remove proxy.table.rowsOrder
var order = proxy.table.rowsOrder;
order.splice(order.indexOf(uid), 1);
// remove all cells including uid
// proxy.table.cells
Object.keys(proxy.table.cells).forEach(function (cellUid) {
if (cellUid.indexOf(uid) === -1) { return; }
proxy.table.cells[cellUid] = undefined;
delete proxy.table.cells[cellUid];
});
// remove elements from DOM
table.removeRow(uid);
};
var removeColumn = function (proxy, uid) {
// remove proxy.table.cols[uid]
proxy.table.cols[uid] = undefined;
delete proxy.table.rows[uid];
// remove proxy.table.colsOrder
var order = proxy.table.colsOrder;
order.splice(order.indexOf(uid), 1);
// remove all cells including uid
Object.keys(proxy.table.cells).forEach(function (cellUid) {
if (cellUid.indexOf(uid) === -1) { return; }
proxy.table.cells[cellUid] = undefined;
delete proxy.table.cells[cellUid];
});
// remove elements from DOM
table.removeColumn(uid);
};
var makeUser = function (proxy, id, value) {
var $user = Input({
id: id,
@ -118,12 +165,6 @@ define([
return $user;
};
$('#adduser').click(function () {
if (!module.isEditable) { return; }
var id = coluid();
makeUser(module.rt.proxy, id).focus();
});
var makeOption = function (proxy, id, value) {
var $option = Input({
type: 'text',
@ -137,15 +178,42 @@ define([
addIfAbsent(proxy.table.rowsOrder, id);
table.addRow($option, Checkbox, id);
console.log(table.$[0]);
return $option;
};
$('#adduser').click(function () {
if (!module.isEditable) { return; }
var id = coluid();
makeUser(module.rt.proxy, id).focus();
});
$('#addoption').click(function () {
if (!module.isEditable) { return; }
var id = rowuid();
makeOption(module.rt.proxy, id).focus();
});
Wizard.$getOptions.click(function () {
Cryptpad.confirm("Are you really ready to add these options to your poll?", function (yes) {
if (!yes) { return; }
var options = Wizard.computeSlots(function (a, b) {
return a + ' ('+ b + ')'
});
var proxy = module.rt.proxy;
options.forEach(function (text) {
var id = rowuid();
makeOption(proxy, id).val(text);
});
console.log(options);
});
});
// notifications
var unnotify = function () {
if (!(module.tabNotification &&
@ -357,6 +425,17 @@ define([
});
}));
$toolbar.append(Button({
id: 'wizard',
'class': 'wizard button action',
title: 'wizard!',
}).text('WIZARD').click(function () {
Wizard.show();
if (Wizard.hasBeenDisplayed) { return; }
Cryptpad.log("click the button in the top left to return to your poll");
Wizard.hasBeenDisplayed = true;
}));
setEditable(true);
};

@ -45,7 +45,7 @@ define([
var removeColumn = function (uid) {
//var I/
var $col = $('th[data-rt-uid="' + uid + '"]');
var $col = $head.find('th[data-rt-uid="' + uid + '"]');
if (!$col.length) { return; }
/* removing a column is difficult because the elements

@ -0,0 +1,144 @@
define([
'/poll/table.js',
'/bower_components/jquery/dist/jquery.min.js',
], function (Table) {
var $ = window.jQuery;
var W = {};
var xy = function (x, y) {
return x + '_' + y;
};
var Checkbox = W.Checkbox = function (id) {
return $('<input>', {
id: id,
type: 'checkbox',
checked: true,
});
};
console.log("Creating wizard");
var $modal = W.$modal = $('#wizard-modal');
var $table = $modal.find('table');
console.log("wizard table ->", $table[0]);
var table = W.table = Table($table, xy);
W.cleanup = function () {
// TODO reset table to fresh state
};
W.show = function () {
$modal.addClass('shown');
W.isShown = true;
};
W.hide = function () {
$modal.removeClass('shown');
W.isShown = false;
};
$(window).on('keyup', function (e) {
if (!W.isShown) { return; }
if (e.which !== 27) { return; }
W.hide();
});
var $closeme = W.$closeme = ($('#close-wizard').click(function () {
W.hide();
}));
var Input = function (opt) { return $('<input>', opt); };
W.width = 0;
W.height = 0;
W.times = [];
W.dates = [];
var coluid = function () {
return 'x-' + W.width++;
};
var rowuid = function () {
return 'y-' + W.height++;
};
var makeTime = function (id) {
var $time = Input({
id: id,
type: 'text',
placeholder: 'your time',
}).on('keyup', function () {
// do something
});
// add row
table.addRow($time, Checkbox, id);
return $time;
};
var makeDate = function (id) {
var $date = Input({
id: id,
type: 'text',
placeholder: 'your date',
}).on('keyup', function () {
// do something
});
// add column
table.addColumn($date, Checkbox, id);
return $date;
};
var $addtime = $('#addtime').click(function () {
if (!W.isShown) { return; }
var id = rowuid();
var $time = makeTime(id).focus();
W.times.push(id);
});
var $addDate = $('#adddate').click(function () {
if (!W.isShown) { return; }
var id = coluid();
var $date = makeDate(id).focus();
W.dates.push(id);
});
var fix1 = function (f,a) { return function (b) { return f(a,b); }; };
var carte = function (f,A,B){ return A.map(function(a){ return B.map(fix1(f,a)); }); };
var flatten = function (A) {
return A.reduce(function (a, b) {
return a.concat(b);
}, []);
};
var computeSlots = W.computeSlots = function (f) {
f = f || function (a, b) { return a + ', ' + b; };
return flatten(carte(function (date, time) {
var $check = $table.find('#' + date + '_' + time);
var checked = $check[0].checked;
if (!$check[0].checked) { return; }
var dateValue = $table.find('#' + date).val();
var timeValue = $table.find('#' + time).val();
return f(dateValue, timeValue);
}, W.dates, W.times)).filter(function (x) { return x; });
};
var $toolbar = $('#modal-toolbar');
var $getOptions = W.$getOptions = $('#get-options');
return W;
});
Loading…
Cancel
Save