2020-03-25 17:40:59 +01:00
|
|
|
/**
|
|
|
|
* @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>
|
|
|
|
*
|
|
|
|
* @author John Molakvoæ <skjnldsv@protonmail.com>
|
|
|
|
*
|
|
|
|
* @license GNU AGPL version 3 or any later version
|
|
|
|
*
|
|
|
|
* This program is free software: you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU Affero General Public License as
|
|
|
|
* published by the Free Software Foundation, either version 3 of the
|
|
|
|
* License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU Affero General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Affero General Public License
|
|
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
2020-04-10 17:35:40 +02:00
|
|
|
import QuestionMultiple from '../components/Questions/QuestionMultiple'
|
2020-06-16 04:14:28 +02:00
|
|
|
import QuestionDropdown from '../components/Questions/QuestionDropdown'
|
|
|
|
import QuestionShort from '../components/Questions/QuestionShort'
|
|
|
|
import QuestionLong from '../components/Questions/QuestionLong'
|
2020-04-10 17:35:40 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @typedef {Object} AnswerTypes
|
|
|
|
* @property {string} multiple
|
2020-06-16 04:14:28 +02:00
|
|
|
* @property {string} multiple_unique
|
|
|
|
* @property {string} dropdown
|
2020-04-10 17:35:40 +02:00
|
|
|
* @property {string} short
|
|
|
|
* @property {string} long
|
|
|
|
*/
|
|
|
|
export default {
|
2020-06-02 15:06:52 +02:00
|
|
|
/**
|
|
|
|
* Specifying Question-Models in a common place
|
|
|
|
* Further type-specific parameters are possible.
|
|
|
|
* @prop component The vue-component this answer-type relies on
|
|
|
|
* @prop icon The icon corresponding to this answer-type
|
|
|
|
* @prop label The answer-type label, that users will see as answer-type.
|
|
|
|
* @prop validate *optional* Define conditions where this question is not ok
|
|
|
|
*
|
|
|
|
* @prop titlePlaceholder The placeholder users see as empty question-title in edit-mode
|
|
|
|
* @prop createPlaceholder *optional* The placeholder that is visible in edit-mode, to indicate a submission form-input field
|
|
|
|
* @prop submitPlaceholder *optional* The placeholder that is visible in submit-mode, to indicate a form input-field
|
2020-05-26 18:01:48 +02:00
|
|
|
* @prop warningInvalid The warning users see in edit mode, if the question is invalid.
|
2020-06-02 15:06:52 +02:00
|
|
|
*/
|
2020-04-10 17:35:40 +02:00
|
|
|
|
2020-06-16 04:14:28 +02:00
|
|
|
multiple: {
|
|
|
|
component: QuestionMultiple,
|
|
|
|
icon: 'icon-answer-checkbox',
|
|
|
|
label: t('forms', 'Checkboxes'),
|
|
|
|
validate: question => question.options.length > 0,
|
|
|
|
|
|
|
|
titlePlaceholder: t('forms', 'Checkbox question title'),
|
|
|
|
warningInvalid: t('forms', 'This question needs a title and at least one answer!'),
|
|
|
|
},
|
|
|
|
|
2020-04-10 17:35:40 +02:00
|
|
|
multiple_unique: {
|
|
|
|
component: QuestionMultiple,
|
2020-03-31 18:20:55 +02:00
|
|
|
icon: 'icon-answer-multiple',
|
2020-04-10 17:35:40 +02:00
|
|
|
label: t('forms', 'Multiple choice'),
|
2020-06-02 15:06:52 +02:00
|
|
|
validate: question => question.options.length > 0,
|
|
|
|
|
2020-05-18 13:59:32 +02:00
|
|
|
titlePlaceholder: t('forms', 'Multiple choice question title'),
|
2020-05-26 18:01:48 +02:00
|
|
|
warningInvalid: t('forms', 'This question needs a title and at least one answer!'),
|
2020-06-02 15:06:52 +02:00
|
|
|
|
|
|
|
// Using the same vue-component as multiple, this specifies that the component renders as multiple_unique.
|
2020-04-10 17:35:40 +02:00
|
|
|
unique: true,
|
2020-03-27 18:30:38 +01:00
|
|
|
},
|
2020-04-10 17:35:40 +02:00
|
|
|
|
2020-06-16 04:14:28 +02:00
|
|
|
dropdown: {
|
|
|
|
component: QuestionDropdown,
|
|
|
|
icon: 'icon-triangle-s',
|
|
|
|
label: t('forms', 'Dropdown'),
|
2020-04-28 10:50:44 +02:00
|
|
|
validate: question => question.options.length > 0,
|
2020-06-02 15:06:52 +02:00
|
|
|
|
2020-06-16 04:14:28 +02:00
|
|
|
titlePlaceholder: t('forms', 'Dropdown question title'),
|
|
|
|
createPlaceholder: t('forms', 'People can pick one option'),
|
|
|
|
submitPlaceholder: t('forms', 'Pick an option'),
|
2020-05-26 18:01:48 +02:00
|
|
|
warningInvalid: t('forms', 'This question needs a title and at least one answer!'),
|
2020-03-27 18:30:38 +01:00
|
|
|
},
|
2020-04-10 17:35:40 +02:00
|
|
|
|
|
|
|
short: {
|
|
|
|
component: QuestionShort,
|
2020-03-27 18:30:38 +01:00
|
|
|
icon: 'icon-answer-short',
|
2020-04-10 17:35:40 +02:00
|
|
|
label: t('forms', 'Short answer'),
|
2020-05-15 14:09:23 +02:00
|
|
|
|
2020-05-18 13:59:32 +02:00
|
|
|
titlePlaceholder: t('forms', 'Short answer question title'),
|
2020-05-15 14:09:23 +02:00
|
|
|
createPlaceholder: t('forms', 'People can enter a short answer'),
|
2020-06-02 15:06:52 +02:00
|
|
|
submitPlaceholder: t('forms', 'Enter a short answer'),
|
2020-05-26 18:01:48 +02:00
|
|
|
warningInvalid: t('forms', 'This question needs a title!'),
|
2020-03-27 18:30:38 +01:00
|
|
|
},
|
2020-04-10 17:35:40 +02:00
|
|
|
|
|
|
|
long: {
|
|
|
|
component: QuestionLong,
|
2020-03-27 18:30:38 +01:00
|
|
|
icon: 'icon-answer-long',
|
2020-04-10 17:35:40 +02:00
|
|
|
label: t('forms', 'Long text'),
|
2020-05-15 14:09:23 +02:00
|
|
|
|
2020-05-18 13:59:32 +02:00
|
|
|
titlePlaceholder: t('forms', 'Long text question title'),
|
2020-05-15 14:09:23 +02:00
|
|
|
createPlaceholder: t('forms', 'People can enter a long text'),
|
2020-06-02 15:06:52 +02:00
|
|
|
submitPlaceholder: t('forms', 'Enter a long text'),
|
2020-05-26 18:01:48 +02:00
|
|
|
warningInvalid: t('forms', 'This question needs a title!'),
|
2020-03-27 18:30:38 +01:00
|
|
|
},
|
2020-04-10 17:35:40 +02:00
|
|
|
|
|
|
|
}
|