NOTICE: All information contained herein is, and remains
the property of TechnoCore.
The intellectual and technical concepts contained
herein are proprietary to TechnoCore and dissemination of this information or reproduction of this material
is strictly forbidden unless prior written permission is obtained
from TechnoCore.
classDiagram
direction LR
class ObjField{
}
class PackageUk{
<<Interface>> PackageUk
+factory()
}
ObjField <|-- PackageUk : Inheritance
class PackageCore{
<<Interface>> PackageCore
+factory()
}
ObjField <|-- PackageCore : Inheritance
class ObjFieldFileUploadObjFieldElement{
}
PackageCore <.. ObjFieldFileUploadObjFieldElement :Composition
class ObjFieldDisplayStaticObjFieldElement{
}
PackageCore <.. ObjFieldDisplayStaticObjFieldElement :Composition
class ObjFieldRadioObjFieldElement{
}
PackageCore <.. ObjFieldRadioObjFieldElement :Composition
class ObjFieldColourPickerObjFieldElement{
}
PackageCore <.. ObjFieldColourPickerObjFieldElement :Composition
class ObjFieldCheckgroupObjFieldElement{
}
PackageCore <.. ObjFieldCheckgroupObjFieldElement :Composition
class ObjFieldTurnstileObjFieldElement{
}
PackageCore <.. ObjFieldTurnstileObjFieldElement :Composition
class ObjFieldSumoselectsingleObjFieldElement{
}
PackageCore <.. ObjFieldSumoselectsingleObjFieldElement :Composition
class ObjFieldBlobObjFieldElement{
}
PackageCore <.. ObjFieldBlobObjFieldElement :Composition
class ObjFieldDateTimeRangeObjFieldElement{
}
PackageCore <.. ObjFieldDateTimeRangeObjFieldElement :Composition
class ObjFieldDisplayObjFieldElement{
}
PackageCore <.. ObjFieldDisplayObjFieldElement :Composition
class ObjFieldQuaddObjFieldElement{
}
PackageCore <.. ObjFieldQuaddObjFieldElement :Composition
class ObjFieldCheckObjFieldElement{
}
PackageCore <.. ObjFieldCheckObjFieldElement :Composition
class ObjFieldTimestampObjFieldElement{
}
PackageCore <.. ObjFieldTimestampObjFieldElement :Composition
class ObjFieldQueryObjFieldElement{
}
PackageCore <.. ObjFieldQueryObjFieldElement :Composition
class ObjFieldRadioHObjFieldElement{
}
PackageCore <.. ObjFieldRadioHObjFieldElement :Composition
class ObjFieldDatehtmlObjFieldElement{
}
PackageCore <.. ObjFieldDatehtmlObjFieldElement :Composition
class ObjFieldDisplayHtmlObjFieldElement{
}
PackageCore <.. ObjFieldDisplayHtmlObjFieldElement :Composition
class ObjFieldTemplateObjFieldElement{
}
ObjField <.. ObjFieldTemplateObjFieldElement :Composition
class ObjFieldDatecustomObjFieldElement{
}
ObjField <.. ObjFieldDatecustomObjFieldElement :Composition
class PackageResearch{
<<Interface>> PackageResearch
+factory()
}
ObjField <|-- PackageResearch : Inheritance
class ObjFieldRadioVObjFieldElement{
}
PackageResearch <.. ObjFieldRadioVObjFieldElement :Composition
class ObjFieldCheckgroupObjFieldElement{
}
PackageResearch <.. ObjFieldCheckgroupObjFieldElement :Composition
class ObjFieldRadioHObjFieldElement{
}
PackageResearch <.. ObjFieldRadioHObjFieldElement :Composition
class ObjFieldEditObjFieldElement{
}
ObjField <.. ObjFieldEditObjFieldElement :Composition
class ObjFieldIdnumObjFieldElement{
}
ObjField <.. ObjFieldIdnumObjFieldElement :Composition
class ObjFieldHeadingObjFieldElement{
}
ObjField <.. ObjFieldHeadingObjFieldElement :Composition
class ObjFieldNumberObjFieldElement{
}
ObjField <.. ObjFieldNumberObjFieldElement :Composition
class ObjFieldPostcodeObjFieldElement{
}
ObjField <.. ObjFieldPostcodeObjFieldElement :Composition
class ObjFieldTinyObjFieldElement{
}
ObjField <.. ObjFieldTinyObjFieldElement :Composition
class ObjFieldMultiCheckObjFieldElement{
}
ObjField <.. ObjFieldMultiCheckObjFieldElement :Composition
class ObjFieldDualpassObjFieldElement{
}
ObjField <.. ObjFieldDualpassObjFieldElement :Composition
class ObjFieldLongObjFieldElement{
}
ObjField <.. ObjFieldLongObjFieldElement :Composition
class ObjFieldVoucherObjFieldElement{
}
ObjField <.. ObjFieldVoucherObjFieldElement :Composition
class PackageEditors{
<<Interface>> PackageEditors
+factory()
}
ObjField <|-- PackageEditors : Inheritance
class PackageReference{
<<Interface>> PackageReference
+factory()
}
ObjField <|-- PackageReference : Inheritance
class ObjFieldMultiqueryObjFieldElement{
}
ObjField <.. ObjFieldMultiqueryObjFieldElement :Composition
class ObjFieldIdentityObjFieldElement{
}
ObjField <.. ObjFieldIdentityObjFieldElement :Composition
class ObjFieldDateDOBObjFieldElement{
}
ObjField <.. ObjFieldDateDOBObjFieldElement :Composition
class ObjFieldValueObjFieldElement{
}
ObjField <.. ObjFieldValueObjFieldElement :Composition
class ObjFieldColourObjFieldElement{
}
ObjField <.. ObjFieldColourObjFieldElement :Composition
class ObjFieldUploadXtObjFieldElement{
}
ObjField <.. ObjFieldUploadXtObjFieldElement :Composition
class ObjFieldQuerydisplayeditObjFieldElement{
}
ObjField <.. ObjFieldQuerydisplayeditObjFieldElement :Composition
class ObjFieldTimeObjFieldElement{
}
ObjField <.. ObjFieldTimeObjFieldElement :Composition
class ObjFieldIntObjFieldElement{
}
ObjField <.. ObjFieldIntObjFieldElement :Composition
class ObjFieldMultilistObjFieldElement{
}
ObjField <.. ObjFieldMultilistObjFieldElement :Composition
class ObjFieldMaskObjFieldElement{
}
ObjField <.. ObjFieldMaskObjFieldElement :Composition
class ObjFieldToggleVObjFieldElement{
}
ObjField <.. ObjFieldToggleVObjFieldElement :Composition
class ObjFieldBitObjFieldElement{
}
ObjField <.. ObjFieldBitObjFieldElement :Composition
class ObjFieldEmptyObjFieldElement{
}
ObjField <.. ObjFieldEmptyObjFieldElement :Composition
class ObjFieldNowObjFieldElement{
}
ObjField <.. ObjFieldNowObjFieldElement :Composition
class PackageTechnocore{
<<Interface>> PackageTechnocore
+factory()
}
ObjField <|-- PackageTechnocore : Inheritance
class ObjFieldUrlObjFieldElement{
}
ObjField <.. ObjFieldUrlObjFieldElement :Composition
class ObjFieldTitleObjFieldElement{
}
ObjField <.. ObjFieldTitleObjFieldElement :Composition
class ObjFieldCheckStaticObjFieldElement{
}
ObjField <.. ObjFieldCheckStaticObjFieldElement :Composition
class ObjFieldBarcodeObjFieldElement{
}
ObjField <.. ObjFieldBarcodeObjFieldElement :Composition
class ObjFieldDateddmmyyyyObjFieldElement{
}
ObjField <.. ObjFieldDateddmmyyyyObjFieldElement :Composition
class ObjFieldTitatoggleObjFieldElement{
}
ObjField <.. ObjFieldTitatoggleObjFieldElement :Composition
class ObjFieldBooleanObjFieldElement{
}
ObjField <.. ObjFieldBooleanObjFieldElement :Composition
class ObjFieldSelectObjFieldElement{
}
ObjField <.. ObjFieldSelectObjFieldElement :Composition
```
*Updated : 2025-02-27*
[//]: <> (HIRAR END)
## Translatable copy
`TRANSLATABLE_COLUMNS` names the designer-authored text a field
carries: `_Description` (the label), `_Placeholder`, `_Tooltip`,
`_Note`, `_Example`, `_Validationmessage`. `_translate_static_columns`
expands `{t:key|English}` markers in each of them, right after
`inject_dictionary` in `read_fields`.
Values, identifiers and anything SQL — `_Default`, `_Fieldtype`,
`_Parent`, `_Query`, `_Validation`, `_Fieldoptions` — are deliberately
excluded. A marker there would be a bug rather than a translation, and
expanding one would rewrite an identifier the form logic matches on.
Two properties worth keeping:
- **It runs on the instance, never on `FORM_FIELD_BUFFER`.** That
buffer caches the `def_formfields` row for the whole process and
therefore for every request; translating into it would hand the
first visitor's language to everyone after them.
- **A column with no marker is never processed at all.** The guard is
a substring test, so a field that exists today does not start going
through `patch_param`, embeds, or any other pass it was not going
through yesterday.
One place instead of ~90 `ObjField*` modules: they read
`self._Placeholder` in ninety slightly different ways — an f-string
here, a `render_template` kwarg there — and a rule applied ninety
times is a rule that holds in eighty-nine.
The language arrives as `_Language`/`Language`, set by
`WebForm.field_factory` before `read_fields`. `_Language` is also what
`_language_candidates` -> `_localise` and `_is_rtl` have always keyed
on, so setting it switches on locale-keyed YAML templates, localised
validation messages and `dir="rtl"` at the same time.
[//]: <> (CYTHON START)
## Cython compile
> cythonize -3 -a -i WebFormElement.py
Compiling /home/axion/projects/axion/factory.web/WebFormElement.py because it changed..[1/1] Cythonizing /home/axion/projects/axion/factory.web/WebFormElement.py
*Updated : 2025-10-02*
[//]: <> (CYTHON END)