Skip to main content

Generate HTML forms and bind hierarchical and tabular data.

Project description

Generate HTML forms and bind hierarchical and tabular data with the help of JSON Schema.

Form-Chen supports master-detail relationships and undo/redo transaction management.

It uses grid-chen to produce Excel-like web-components for tabular (aka table/grid/matrix) data.

Edits on the original object are emitted as standard JSON Patch, which can be directly passed to the back end.

Optionally, object properties can be specified by JSON Pointers to be bound to given HTML-elements.

Form-Chen is written in plain EcmaScript 2017 modules and can be directly imported as such with any modern browser.

Usage

This is a basic form which runs standalone or can be loaded from https://decatur.github.io/form-chen/usage.html. usage

<!DOCTYPE html>
<div class="form-chen">
    <div id="/person"></div>
    <span style="font-size: x-large" id="/person/vip"></span>
</div>
<script type="module">
    import {createFormChen} from "https://decatur.github.io/form-chen/formchen/webcomponent.js"

    const schema = {
        title: 'Person',
        pathPrefix: '/person',
        type: 'object',
        properties: {
            name: {
                title: 'Full Name of Person', type: 'string'
            },
            dateOfBirth: {
                title: 'Date of Birth', type: 'string', format: 'full-date'
            },
            vip: {
                type: 'boolean'
            }
        }
    };

    const data = {
        name: 'Frida Krum',
        dateOfBirth: '2019-01-01T00:00Z',
        vip: true
    };

    createFormChen(schema, data);
</script>

Demos

See https://decatur.github.io/form-chen

Hosting Form-Chen

Deploy both formchen and gridchen directories from the respective git repositories. formchen depends on gridchen to be at the bare URL gridchen, i.e. import "gridchen/webcomponent.js" So be sure you bundle or inplace your imports.

NPM Install

⚠ Currently formchen is not registered with npmjs!

Python PyPI Install

Using Python you can install the formchen package. A Python routing example can be found in the provided dev server.

Note on module resolving

The old way of module resolution is via bare import specifiers such as import "gridchen/webcomponent.js". Note the missing slash at the beginning. This is usually handled by bundlers, which replace the bare import specifier with a relative path to the routed module location. As we do not want to rely on any bundler, and because currently there is no Web browser standard for module resolution of bare import specifiers, we opted for the relative URL approach.

Read Only

At any level, the schema can be marked readOnly:true|false, the default value being false. The readOnly property is inherited by sub-schemas.

DOM Api and CSS Styling

The form is generated as a flat list of paired elements. The input elements are generated with the document ID corresponding to the JSON Pointer to its value.

Pairs Semantic
<label/> <input> For all scalar fields
<label/> <select> For all scalar fields having an enum type
<label/> <checkbox> For all scalar boolean fields
<label> <grid-chen/> </label> For all grid fields
<label class=error/> For errors

In case a field has a unit, then the label will have a nested <span class=unit/> element.

No direct element style is applied.

Based on this flat list of paired elements, the layout can be tweaked using CSS Column Layout, CSS Grid Layout or CSS Flex Layout, or whatever. See the demos for examples.

JavaScript Api

Please see the source code of the demos or form-chen TypeScript Definitions for the public JavaScript Api.

Development

Form-Chen is written in plain EcmaScript 2017 modules with JSDocs type hinting. There is no overhead related to transpiling or packing. As tool I recommend either vscode or one of the JetBrains IDEs (WebStorm, PyCharm).

Dev Server

There is a FastAPI-based dev server in the dev_server directory.

Unit Testing

After starting the dev server, navigate to http://localhost:8000/gridchen/testing/suiterunner.html?testpath=/formchen/tests/

Github Pages

Github Pages are served from /docs of the master branch. The /docs folder is generated from /root by substituting all bare import specifiers of the form 'gridchen/' with 'https://decatur.github.io/grid-chen/gridchen/'.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

formchen-0.1.3.tar.gz (12.4 kB view details)

Uploaded Source

Built Distribution

formchen-0.1.3-py3-none-any.whl (14.4 kB view details)

Uploaded Python 3

File details

Details for the file formchen-0.1.3.tar.gz.

File metadata

  • Download URL: formchen-0.1.3.tar.gz
  • Upload date:
  • Size: 12.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.0.9 CPython/3.6.8 Windows/10

File hashes

Hashes for formchen-0.1.3.tar.gz
Algorithm Hash digest
SHA256 0a775cd6c439b3420ff5b002bf4d4ca564910e788c8230765c8fa4bdf0be711c
MD5 05eddabf2504008c893d1608418b1645
BLAKE2b-256 4db790e889900ea1d0c0d952a88d49c53ad8510b2523e1509b894a9fb53a0f82

See more details on using hashes here.

File details

Details for the file formchen-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: formchen-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 14.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.0.9 CPython/3.6.8 Windows/10

File hashes

Hashes for formchen-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 ef716546ef50f0a6ec2b8f659dd17fc24dd958d94d7dcf44d6f98fcce71459ef
MD5 b0862976dce020218e2420801029f7eb
BLAKE2b-256 254a9aa5dee504c91f448eb13e241e754359fa9c0045ddd9cb1b751ecebbed7e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page