Skip to content

Latest commit

 

History

History
109 lines (99 loc) · 2.25 KB

forms.md

File metadata and controls

109 lines (99 loc) · 2.25 KB

Forms in CPHL

Disclaimer: this is a brain-storming document, and is not in any way final nor concrete.

CPHL lets you provide form field information (along with logic, in a separate property) within the hypermedia's "code" property.

Forms should be an array of fields with their HTML attributes provided in the content-type of the call they made (for example, if using JSON, the form should be represented as JSON).

All fields MUST have a name, a type, and whether or not the field is required.

For example, with JSON, form fields would be represented as:

"form" : {
  "fields" : [
    {
      "name" : "firstName",
      "type" : "text",
      "required" : true,
      "minLength" : 3,
      "maxLength": 20
    },
    {
      "name" : "lastName",
      "type" : "text",
      "required" : true,
      "minLength" : 3,
      "maxLength": 20
    },
    {
      "name" : "age",
      "type" : "text",
      "required" : true,
      "pattern" : "[0-9]{1,3}"
    },
    {
      "name" : "favoriteColor",
      "type" : "text",
      "required" : true,
      "value" : "red"
    },
  ]
}

With XML, form fields would be represented as:

<form>
  <fields>
    <field>
      <name>firstName</name>
      <type>text</type>
      <required>true</required>
      <minLength>3</minLength>
      <maxLength>20</maxLength>
    </field>
    <field>
      <name>lastName</name>
      <type>text</type>
      <required>true</required>
      <minLength>3</minLength>
      <maxLength>20</maxLength>
    </field>
    <field>
      <name>age</name>
      <type>text</type>
      <required>true</required>
      <pattern>[0-9]{1,3}</pattern>
    </field>
    <field>
      <name>favoriteColor</name>
      <type>text</type>
      <required>true</required>
      <value>red</value>
    </field>
  </fields>
</form>

Last but not least, with YAML:

form:
  fields:
    -
      name: "firstName",
      type: "text",
      required: true,
      minLength: 3,
      maxLength: 20
    -
      name: "lastName",
      type: "text",
      required: true,
      minLength: 3,
      maxLength: 20
    -
      name: "age",
      type: "text",
      required: true,
      pattern: "[0-9]{1,3}"
    -
      name: "favoriteColor",
      type: "text",
      required: true,
      value: "red"