Merge remote-tracking branch 'origin/forms2' into forms2

pull/1/head
David Benqué 3 years ago
commit f019cf51de

@ -189,7 +189,7 @@ define([
saveAndCancel saveAndCancel
]; ];
}; };
var editOptions = function (v, setCursorGetter, cb, tmp) { var editOptions = function (v, isDefaultOpts, setCursorGetter, cb, tmp) {
var add = h('button.btn.btn-secondary', [ var add = h('button.btn.btn-secondary', [
h('i.fa.fa-plus'), h('i.fa.fa-plus'),
h('span', Messages.form_add_option) h('span', Messages.form_add_option)
@ -254,8 +254,16 @@ define([
// Show existing options // Show existing options
var $add, $addItem; var $add, $addItem;
var addMultiple; var addMultiple;
var getOption = function (val, isItem, uid) { var getOption = function (val, placeholder, isItem, uid) {
var input = h('input', {value:val}); var input = h('input', {value:val});
if (placeholder) {
input.placeholder = val;
input.value = '';
$(input).change(function () {
input.placeholder = '';
$(input).off(change);
});
}
if (uid) { $(input).data('uid', uid); } if (uid) { $(input).data('uid', uid); }
// If the input is a date, initialize flatpickr // If the input is a date, initialize flatpickr
@ -316,7 +324,7 @@ define([
}); });
return el; return el;
}; };
var inputs = v.values.map(function (val) { return getOption(val, false); }); var inputs = v.values.map(function (val) { return getOption(val, isDefaultOpts, false); });
inputs.push(add); inputs.push(add);
var container = h('div.cp-form-edit-block', inputs); var container = h('div.cp-form-edit-block', inputs);
@ -332,7 +340,7 @@ define([
var containerItems; var containerItems;
if (v.items) { if (v.items) {
var inputsItems = v.items.map(function (itemData) { var inputsItems = v.items.map(function (itemData) {
return getOption(itemData.v, true, itemData.uid); return getOption(itemData.v, isDefaultOpts, true, itemData.uid);
}); });
inputsItems.push(addItem); inputsItems.push(addItem);
containerItems = h('div.cp-form-edit-block', inputsItems); containerItems = h('div.cp-form-edit-block', inputsItems);
@ -385,7 +393,7 @@ define([
}); });
$(addMultipleButton).click(function () { $(addMultipleButton).click(function () {
multiplePickr.selectedDates.some(function (date) { multiplePickr.selectedDates.some(function (date) {
$add.before(getOption(date, false)); $add.before(getOption(date, false, false));
var l = $container.find('input').length; var l = $container.find('input').length;
$(maxInput).attr('max', l); $(maxInput).attr('max', l);
if (l >= MAX_OPTIONS) { if (l >= MAX_OPTIONS) {
@ -440,7 +448,7 @@ define([
// "Add option" button handler // "Add option" button handler
$add = $(add).click(function () { $add = $(add).click(function () {
var txt = v.type ? '' : Messages.form_newOption; var txt = v.type ? '' : Messages.form_newOption;
$add.before(getOption(txt, false)); $add.before(getOption(txt, true, false));
var l = $container.find('input').length; var l = $container.find('input').length;
$(maxInput).attr('max', l); $(maxInput).attr('max', l);
if (l >= MAX_OPTIONS) { $add.hide(); } if (l >= MAX_OPTIONS) { $add.hide(); }
@ -448,7 +456,7 @@ define([
// If multiline block, handle "Add item" button // If multiline block, handle "Add item" button
$addItem = $(addItem).click(function () { $addItem = $(addItem).click(function () {
$addItem.before(getOption(Messages.form_newItem, true, Util.uid())); $addItem.before(getOption(Messages.form_newItem, true, true, Util.uid()));
if ($(containerItems).find('input').length >= MAX_ITEMS) { $addItem.hide(); } if ($(containerItems).find('input').length >= MAX_ITEMS) { $addItem.hide(); }
}); });
if ($container.find('input').length >= MAX_OPTIONS) { $add.hide(); } if ($container.find('input').length >= MAX_OPTIONS) { $add.hide(); }
@ -460,12 +468,13 @@ define([
var active = document.activeElement; var active = document.activeElement;
var cursor = {}; var cursor = {};
$container.find('input').each(function (i, el) { $container.find('input').each(function (i, el) {
var val = $(el).val() || el.placeholder || '';
if (el === active && !el._flatpickr) { if (el === active && !el._flatpickr) {
cursor.el= $(el).val(); cursor.el = val;
cursor.start = el.selectionStart; cursor.start = el.selectionStart;
cursor.end = el.selectionEnd; cursor.end = el.selectionEnd;
} }
values.push($(el).val()); values.push(val);
}); });
if (v.type === "day") { if (v.type === "day") {
var dayPickr = $(calendarView).find('input')[0]._flatpickr; var dayPickr = $(calendarView).find('input')[0]._flatpickr;
@ -492,9 +501,10 @@ define([
cursor.start = el.selectionStart; cursor.start = el.selectionStart;
cursor.end = el.selectionEnd; cursor.end = el.selectionEnd;
} }
var val = $(el).val() || el.placeholder || '';
items.push({ items.push({
uid: $(el).data('uid'), uid: $(el).data('uid'),
v: $(el).val() v: val
}); });
}); });
_content.items = items; _content.items = items;
@ -517,7 +527,7 @@ define([
}); });
} else { } else {
$container.find('input').each(function (i, el) { $container.find('input').each(function (i, el) {
var val = $(el).val().trim(); var val = ($(el).val() || el.placeholder || '').trim();
if (v.type === "day" || v.type === "time") { if (v.type === "day" || v.type === "time") {
var f = el._flatpickr; var f = el._flatpickr;
if (f && f.selectedDates && f.selectedDates.length) { if (f && f.selectedDates && f.selectedDates.length) {
@ -538,7 +548,7 @@ define([
if (v.items) { if (v.items) {
var items = []; var items = [];
$(containerItems).find('input').each(function (i, el) { $(containerItems).find('input').each(function (i, el) {
var val = $(el).val().trim(); var val = ($(el).val() || el.placeholder || '').trim();
var uid = $(el).data('uid'); var uid = $(el).data('uid');
if (!items.some(function (i) { return i.uid === uid; })) { if (!items.some(function (i) { return i.uid === uid; })) {
items.push({ items.push({
@ -1133,12 +1143,13 @@ define([
}) })
}, },
get: function (opts, a, n, evOnChange) { get: function (opts, a, n, evOnChange) {
var isDefaultOpts = !opts;
if (!opts) { opts = TYPES.radio.defaultOpts; } if (!opts) { opts = TYPES.radio.defaultOpts; }
if (!Array.isArray(opts.values)) { return; } if (!Array.isArray(opts.values)) { return; }
var name = Util.uid(); var name = Util.uid();
var els = opts.values.map(function (data, i) { var els = opts.values.map(function (data, i) {
var radio = UI.createRadio(name, 'cp-form-'+name+'-'+i, var radio = UI.createRadio(name, 'cp-form-'+name+'-'+i,
data, false, { mark: { tabindex:1 } }); data, false, {});
$(radio).find('input').data('val', data); $(radio).find('input').data('val', data);
return radio; return radio;
}); });
@ -1169,7 +1180,7 @@ define([
}, },
edit: function (cb, tmp) { edit: function (cb, tmp) {
var v = Util.clone(opts); var v = Util.clone(opts);
return editOptions(v, setCursorGetter, cb, tmp); return editOptions(v, isDefaultOpts, setCursorGetter, cb, tmp);
}, },
getCursor: function () { return cursorGetter(); }, getCursor: function () { return cursorGetter(); },
setValue: function (val) { setValue: function (val) {
@ -1216,6 +1227,7 @@ define([
}) })
}, },
get: function (opts, a, n, evOnChange) { get: function (opts, a, n, evOnChange) {
var isDefaultOpts = !opts;
if (!opts) { opts = TYPES.multiradio.defaultOpts; } if (!opts) { opts = TYPES.multiradio.defaultOpts; }
if (!Array.isArray(opts.items) || !Array.isArray(opts.values)) { return; } if (!Array.isArray(opts.items) || !Array.isArray(opts.values)) { return; }
var lines = opts.items.map(function (itemData) { var lines = opts.items.map(function (itemData) {
@ -1223,7 +1235,7 @@ define([
var item = itemData.v; var item = itemData.v;
var els = opts.values.map(function (data, i) { var els = opts.values.map(function (data, i) {
var radio = UI.createRadio(name, 'cp-form-'+name+'-'+i, var radio = UI.createRadio(name, 'cp-form-'+name+'-'+i,
'', false, { mark: { tabindex:1 } }); '', false, {});
$(radio).find('input').data('uid', name); $(radio).find('input').data('uid', name);
$(radio).find('input').data('val', data); $(radio).find('input').data('val', data);
return radio; return radio;
@ -1271,7 +1283,7 @@ define([
}, },
edit: function (cb, tmp) { edit: function (cb, tmp) {
var v = Util.clone(opts); var v = Util.clone(opts);
return editOptions(v, setCursorGetter, cb, tmp); return editOptions(v, isDefaultOpts, setCursorGetter, cb, tmp);
}, },
getCursor: function () { return cursorGetter(); }, getCursor: function () { return cursorGetter(); },
setValue: function (val) { setValue: function (val) {
@ -1362,12 +1374,13 @@ define([
}) })
}, },
get: function (opts, a, n, evOnChange) { get: function (opts, a, n, evOnChange) {
var isDefaultOpts = !opts;
if (!opts) { opts = TYPES.checkbox.defaultOpts; } if (!opts) { opts = TYPES.checkbox.defaultOpts; }
if (!Array.isArray(opts.values)) { return; } if (!Array.isArray(opts.values)) { return; }
var name = Util.uid(); var name = Util.uid();
var els = opts.values.map(function (data, i) { var els = opts.values.map(function (data, i) {
var cbox = UI.createCheckbox('cp-form-'+name+'-'+i, var cbox = UI.createCheckbox('cp-form-'+name+'-'+i,
data, false, { mark: { tabindex:1 } }); data, false, {});
$(cbox).find('input').data('val', data); $(cbox).find('input').data('val', data);
return cbox; return cbox;
}); });
@ -1414,7 +1427,7 @@ define([
}, },
edit: function (cb, tmp) { edit: function (cb, tmp) {
var v = Util.clone(opts); var v = Util.clone(opts);
return editOptions(v, setCursorGetter, cb, tmp); return editOptions(v, isDefaultOpts, setCursorGetter, cb, tmp);
}, },
getCursor: function () { return cursorGetter(); }, getCursor: function () { return cursorGetter(); },
setValue: function (val) { setValue: function (val) {
@ -1465,6 +1478,7 @@ define([
}) })
}, },
get: function (opts, a, n, evOnChange) { get: function (opts, a, n, evOnChange) {
var isDefaultOpts = !opts;
if (!opts) { opts = TYPES.multicheck.defaultOpts; } if (!opts) { opts = TYPES.multicheck.defaultOpts; }
if (!Array.isArray(opts.items) || !Array.isArray(opts.values)) { return; } if (!Array.isArray(opts.items) || !Array.isArray(opts.values)) { return; }
var lines = opts.items.map(function (itemData) { var lines = opts.items.map(function (itemData) {
@ -1472,7 +1486,7 @@ define([
var item = itemData.v; var item = itemData.v;
var els = opts.values.map(function (data, i) { var els = opts.values.map(function (data, i) {
var cbox = UI.createCheckbox('cp-form-'+name+'-'+i, var cbox = UI.createCheckbox('cp-form-'+name+'-'+i,
'', false, { mark: { tabindex:1 } }); '', false, {});
$(cbox).find('input').data('uid', name); $(cbox).find('input').data('uid', name);
$(cbox).find('input').data('val', data); $(cbox).find('input').data('val', data);
return cbox; return cbox;
@ -1535,7 +1549,7 @@ define([
}, },
edit: function (cb, tmp) { edit: function (cb, tmp) {
var v = Util.clone(opts); var v = Util.clone(opts);
return editOptions(v, setCursorGetter, cb, tmp); return editOptions(v, isDefaultOpts, setCursorGetter, cb, tmp);
}, },
getCursor: function () { return cursorGetter(); }, getCursor: function () { return cursorGetter(); },
setValue: function (val) { setValue: function (val) {
@ -1628,6 +1642,7 @@ define([
}) })
}, },
get: function (opts, a, n, evOnChange) { get: function (opts, a, n, evOnChange) {
var isDefaultOpts = !opts;
if (!opts) { opts = TYPES.sort.defaultOpts; } if (!opts) { opts = TYPES.sort.defaultOpts; }
if (!Array.isArray(opts.values)) { return; } if (!Array.isArray(opts.values)) { return; }
var map = {}; var map = {};
@ -1706,7 +1721,7 @@ define([
}, },
edit: function (cb, tmp) { edit: function (cb, tmp) {
var v = Util.clone(opts); var v = Util.clone(opts);
return editOptions(v, setCursorGetter, cb, tmp); return editOptions(v, isDefaultOpts, setCursorGetter, cb, tmp);
}, },
getCursor: function () { return cursorGetter(); }, getCursor: function () { return cursorGetter(); },
setValue: function (val) { setValue: function (val) {
@ -1750,6 +1765,7 @@ define([
}) })
}, },
get: function (opts, answers, username, evOnChange) { get: function (opts, answers, username, evOnChange) {
var isDefaultOpts = !opts;
if (!opts) { opts = TYPES.poll.defaultOpts; } if (!opts) { opts = TYPES.poll.defaultOpts; }
if (!Array.isArray(opts.values)) { return; } if (!Array.isArray(opts.values)) { return; }
@ -1827,7 +1843,7 @@ define([
}, },
edit: function (cb, tmp) { edit: function (cb, tmp) {
var v = Util.clone(opts); var v = Util.clone(opts);
return editOptions(v, setCursorGetter, cb, tmp); return editOptions(v, isDefaultOpts, setCursorGetter, cb, tmp);
}, },
getCursor: function () { return cursorGetter(); }, getCursor: function () { return cursorGetter(); },
setValue: function (res) { setValue: function (res) {
@ -2206,7 +2222,7 @@ define([
var cbox; var cbox;
var anonName, $anonName; var anonName, $anonName;
cbox = UI.createCheckbox('cp-form-anonymous', cbox = UI.createCheckbox('cp-form-anonymous',
Messages.form_anonymousBox, true, { mark: { tabindex:1 } }); Messages.form_anonymousBox, true, {});
var $anonBox = $(cbox).find('input'); var $anonBox = $(cbox).find('input');
if (loggedIn) { if (loggedIn) {
if (!content.answers.anonymous || APP.cantAnon) { if (!content.answers.anonymous || APP.cantAnon) {
@ -2557,17 +2573,15 @@ define([
// Required radio displayed only for types that have an "isEmpty" function // Required radio displayed only for types that have an "isEmpty" function
var requiredDiv; var requiredDiv;
if (APP.isEditor && !isStatic && data.isEmpty) { if (APP.isEditor && !isStatic && data.isEmpty) {
if (!block.opts) { block.opts = {}; } if (!block.opts) { block.opts = TYPES[type].defaultOpts; }
var isRequired = Boolean(block.opts.required); var isRequired = Boolean(block.opts.required);
var radioOn = UI.createRadio('cp-form-required-'+uid, 'cp-form-required-on', var radioOn = UI.createRadio('cp-form-required-'+uid, 'cp-form-required-on',
Messages.form_required_on, isRequired, { Messages.form_required_on, isRequired, {
input: { value: 1 }, input: { value: 1 },
mark: { tabindex:1 }
}); });
var radioOff = UI.createRadio('cp-form-required-'+uid, 'cp-form-required-off', var radioOff = UI.createRadio('cp-form-required-'+uid, 'cp-form-required-off',
Messages.form_required_off, !isRequired, { Messages.form_required_off, !isRequired, {
input: { value: 0 }, input: { value: 0 },
mark: { tabindex:1 }
}); });
var radioContainer = h('div.cp-form-required-radio', [radioOn, radioOff]); var radioContainer = h('div.cp-form-required-radio', [radioOn, radioOff]);
requiredDiv = h('div.cp-form-required', [ requiredDiv = h('div.cp-form-required', [
@ -2722,7 +2736,7 @@ define([
var text = Messages['form_type_'+data]; var text = Messages['form_type_'+data];
if (!text) { return; } if (!text) { return; }
var radio = UI.createRadio(name, 'cp-form-changetype-'+i, var radio = UI.createRadio(name, 'cp-form-changetype-'+i,
text, data===type, { mark: { tabindex:1 } }); text, data===type, {});
$(radio).find('input').data('val', data); $(radio).find('input').data('val', data);
return radio; return radio;
}); });
@ -3084,12 +3098,10 @@ define([
var radioOn = UI.createRadio('cp-form-privacy', 'cp-form-privacy-on', var radioOn = UI.createRadio('cp-form-privacy', 'cp-form-privacy-on',
Messages.form_anonymous_on, Boolean(anonymous), { Messages.form_anonymous_on, Boolean(anonymous), {
input: { value: 1 }, input: { value: 1 },
mark: { tabindex:1 }
}); });
var radioOff = UI.createRadio('cp-form-privacy', 'cp-form-privacy-off', var radioOff = UI.createRadio('cp-form-privacy', 'cp-form-privacy-off',
Messages.form_anonymous_off, !anonymous, { Messages.form_anonymous_off, !anonymous, {
input: { value: 0 }, input: { value: 0 },
mark: { tabindex:1 }
}); });
var radioContainer = h('div.cp-form-privacy-radio', [radioOn, radioOff]); var radioContainer = h('div.cp-form-privacy-radio', [radioOn, radioOff]);
$(radioContainer).find('input[type="radio"]').on('change', function() { $(radioContainer).find('input[type="radio"]').on('change', function() {
@ -3116,12 +3128,10 @@ define([
var radioOn = UI.createRadio('cp-form-editable', 'cp-form-editable-on', var radioOn = UI.createRadio('cp-form-editable', 'cp-form-editable-on',
Messages.form_anonymous_on, Boolean(editable), { Messages.form_anonymous_on, Boolean(editable), {
input: { value: 1 }, input: { value: 1 },
mark: { tabindex:1 }
}); });
var radioOff = UI.createRadio('cp-form-editable', 'cp-form-editable-off', var radioOff = UI.createRadio('cp-form-editable', 'cp-form-editable-off',
Messages.form_anonymous_off, !editable, { Messages.form_anonymous_off, !editable, {
input: { value: 0 }, input: { value: 0 },
mark: { tabindex:1 }
}); });
var radioContainer = h('div.cp-form-editable-radio', [radioOn, radioOff]); var radioContainer = h('div.cp-form-editable-radio', [radioOn, radioOff]);
$(radioContainer).find('input[type="radio"]').on('change', function() { $(radioContainer).find('input[type="radio"]').on('change', function() {

Loading…
Cancel
Save