diff options
author | 2020-11-30 14:23:53 +0000 | |
---|---|---|
committer | 2020-11-30 14:23:53 +0000 | |
commit | 0cdbea6d6a448852f7daab7045b4414c2f9d64f2 (patch) | |
tree | d2bbefb56d877d47c0ee6355f7d939f46afa0fb9 | |
parent | Merge pull request #2 from python-discord/ks123/readme (diff) |
Add form schema
-rw-r--r-- | SCHEMA.md | 123 |
1 files changed, 117 insertions, 6 deletions
@@ -1,11 +1,122 @@ -## Form features +# Forms Schema -`DISCOVERABLE`: The form should be displayed on the homepage of the forms application. +Since MongoDB has no set schema, we document it here to document what our objects should look like. If you add new properties or remove them from objects **make sure to update them here**. -`REQUIRES_LOGIN`: Requires the user to authenticate with Discord before completing the form. +In this document: +- [Form structure](#Form_structure) + - [Form features](#Form_features) + - [Form question](#Form_question) -`OPEN`: The form is currently accepting responses. +## Form structure -`COLLECT_EMAIL`: The form should collect the email from submissions. Requires `REQUIRES_LOGIN` +| Field | Type | Description | Example | +| ----------- | ---------------------------------------- | ----------------------------------------------------------------------------------------- | --------------------------- | +| `id` | Unique identifier | A user selected, unique, descriptive identifier (used in URL routes, so no spaces) | `"ban-appeals"` | +| `features` | List of [form features](#Form_features) | A list of features to change the behaviour of the form, described in the features section | `["OPEN", "COLLECT_EMAIL"]` | +| `questions` | List of [form questions](#Form_question) | The list of questions to render on a specific form | Too long! See below | +| | | | | -`DISABLE_ANTISPAM`: Disable the anti-spam checks from running on a form submission. +### Form features + +| Flag | Description | +| ------------------ | ----------------------------------------------------------------------------- | +| `DISCOVERABLE` | The form should be displayed on the homepage of the forms application. | +| `REQUIRES_LOGIN` | Requires the user to authenticate with Discord before completing the form. | +| `OPEN` | The form is currently accepting responses. | +| `COLLECT_EMAIL` | The form should collect the email from submissions. Requires `REQUIRES_LOGIN` | +| `DISABLE_ANTISPAM` | Disable the anti-spam checks from running on a form submission. | + +### Form question + +| Field | Type | Description | Example | +| ------ | ---------------------------------------- | ------------------------------------------------ | -------------------- | +| `id` | string | Unique identifier of the question | `"aabbcc"` | +| `name` | string | Name of the question | `"What's the time?"` | +| `type` | one of [Question types](#Question_types) | The type of input for this question | `"radio"` | +| `data` | [Question specific data](#Question_data) | Any specific data for the question type selected | Documented below | + +#### Question types + +| Name | Description | +| ------------ | --------------------------------------------------------- | +| `radio` | Radio buttons | +| `checkbox` | Checkbox toggle | +| `select` | Dropdown list | +| `short_text` | One line input field | +| `textarea` | Long text input | +| `code` | Syntax highlighted code input | +| `range` | Horizontal drag slider | +| `section` | Not an input, just a section of text to explain something | + +#### Question data + +Different questions require different input data to render. All data is in an object with keys and values as defined in the below tables. **All fields are required unless stated otherwise**. + +##### `radio` + +```json +{ + // Option list for radio buttons + "options": [ + "Spam", + "Eggs", + "Ham" + ] +} +``` + +##### `checkbox` + +Checkboxes require no additional configuration + +##### `select` + +```json +{ + // Option list for select dropdown + "options": [ + "United Kingdom", + "United States" + ] +} +``` + +##### `short_text` + +Short text fields require no additional configuration. + +##### `textarea` + +Textareas require no additional configuration. + +##### `code` + +```json +{ + // A supported language from https://prismjs.com/#supported-languages + "language": "python" +} +``` + +##### `range` + +```json +{ + // A list of options to put on the range, from left to right + "options": [ + "Not at all", + "Not much", + "A little", + "A lot" + ] +} +``` + +##### `section` + +```json +{ + // OPTIONAL: Additional text to place below the section header + "text": "This section will quiz you on A, B and C" +} +``` |