<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mwiki.costasano.club/index.php?action=history&amp;feed=atom&amp;title=ICT%3ADocumentation%3APage_Forms_in_Asset_v2</id>
	<title>ICT:Documentation:Page Forms in Asset v2 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mwiki.costasano.club/index.php?action=history&amp;feed=atom&amp;title=ICT%3ADocumentation%3APage_Forms_in_Asset_v2"/>
	<link rel="alternate" type="text/html" href="https://mwiki.costasano.club/index.php?title=ICT:Documentation:Page_Forms_in_Asset_v2&amp;action=history"/>
	<updated>2026-07-23T00:12:48Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://mwiki.costasano.club/index.php?title=ICT:Documentation:Page_Forms_in_Asset_v2&amp;diff=1216&amp;oldid=prev</id>
		<title>Mngr: Created page with &quot;= Explanation of Page Forms Usage in Asset v2 =  This page documents how and why &#039;&#039;&#039;Page Forms&#039;&#039;&#039; is used in Asset v2.  It is intended as long-term reference documentation and is written to be readable months or years later without needing external context.  ----  == Purpose of This Document ==  Page Forms syntax can be confusing because:  * form definitions are not intuitive * field behavior is influenced by multiple parameters * Page Forms looks like it “does magic...&quot;</title>
		<link rel="alternate" type="text/html" href="https://mwiki.costasano.club/index.php?title=ICT:Documentation:Page_Forms_in_Asset_v2&amp;diff=1216&amp;oldid=prev"/>
		<updated>2026-02-20T13:14:33Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;= Explanation of Page Forms Usage in Asset v2 =  This page documents how and why &amp;#039;&amp;#039;&amp;#039;Page Forms&amp;#039;&amp;#039;&amp;#039; is used in Asset v2.  It is intended as long-term reference documentation and is written to be readable months or years later without needing external context.  ----  == Purpose of This Document ==  Page Forms syntax can be confusing because:  * form definitions are not intuitive * field behavior is influenced by multiple parameters * Page Forms looks like it “does magic...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Explanation of Page Forms Usage in Asset v2 =&lt;br /&gt;
&lt;br /&gt;
This page documents how and why &amp;#039;&amp;#039;&amp;#039;Page Forms&amp;#039;&amp;#039;&amp;#039; is used in Asset v2.&lt;br /&gt;
&lt;br /&gt;
It is intended as long-term reference documentation and is written&lt;br /&gt;
to be readable months or years later without needing external context.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Purpose of This Document ==&lt;br /&gt;
&lt;br /&gt;
Page Forms syntax can be confusing because:&lt;br /&gt;
&lt;br /&gt;
* form definitions are not intuitive&lt;br /&gt;
* field behavior is influenced by multiple parameters&lt;br /&gt;
* Page Forms looks like it “does magic” when it actually does not&lt;br /&gt;
&lt;br /&gt;
This document explains the Asset v2 form configuration&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;line by line and by intention&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Big Picture ==&lt;br /&gt;
&lt;br /&gt;
In Asset v2, Page Forms is used only to:&lt;br /&gt;
&lt;br /&gt;
* guide users during Asset creation&lt;br /&gt;
* collect structured input&lt;br /&gt;
* connect form fields to template parameters&lt;br /&gt;
* allow file upload inside a controlled workflow&lt;br /&gt;
&lt;br /&gt;
Page Forms does NOT:&lt;br /&gt;
&lt;br /&gt;
* generate identifiers&lt;br /&gt;
* rename files&lt;br /&gt;
* enforce immutability&lt;br /&gt;
* validate archival rules&lt;br /&gt;
* store data by itself&lt;br /&gt;
&lt;br /&gt;
Page Forms is a &amp;#039;&amp;#039;&amp;#039;user interface layer&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Location of the Form ==&lt;br /&gt;
&lt;br /&gt;
The form is defined in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Form:Asset&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This page is edited in source mode like any other wiki page.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Form Metadata Section ==&lt;br /&gt;
&lt;br /&gt;
At the top of the form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{{info&lt;br /&gt;
|no summary&lt;br /&gt;
|no preview&lt;br /&gt;
|no minor edit&lt;br /&gt;
|no watch&lt;br /&gt;
|no footer&lt;br /&gt;
}}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What this does:&lt;br /&gt;
&lt;br /&gt;
* Removes edit summary&lt;br /&gt;
* Removes preview&lt;br /&gt;
* Prevents minor edits&lt;br /&gt;
* Avoids watchlist clutter&lt;br /&gt;
* Removes standard footer elements&lt;br /&gt;
&lt;br /&gt;
Why this exists:&lt;br /&gt;
&lt;br /&gt;
* Asset creation is a controlled operation&lt;br /&gt;
* Reduces accidental interaction&lt;br /&gt;
* Keeps the UI simple for non-technical users&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Template Binding ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{{for template|Asset}}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What it does:&lt;br /&gt;
&lt;br /&gt;
* Binds this form to Template:Asset&lt;br /&gt;
* Every field defined below corresponds to a template parameter&lt;br /&gt;
&lt;br /&gt;
Important rule:&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Field names MUST match template parameter names exactly.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Form Layout Table ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{| class=&amp;quot;formtable&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is pure HTML layout.&lt;br /&gt;
&lt;br /&gt;
Why a table is used:&lt;br /&gt;
&lt;br /&gt;
* Aligns labels and fields cleanly&lt;br /&gt;
* Predictable rendering&lt;br /&gt;
* Easier for non-technical users to read&lt;br /&gt;
&lt;br /&gt;
This has no semantic meaning for Page Forms itself.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Chapter Field ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{{field|Chapter&lt;br /&gt;
 |input type=combobox&lt;br /&gt;
 |values from namespace=Chapter&lt;br /&gt;
 |existing values only&lt;br /&gt;
}}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What it does:&lt;br /&gt;
&lt;br /&gt;
* Shows a dropdown with auto-completion&lt;br /&gt;
* Only allows pages from namespace Chapter&lt;br /&gt;
* Prevents free-text input&lt;br /&gt;
&lt;br /&gt;
Why this exists:&lt;br /&gt;
&lt;br /&gt;
* Chapter must reference an existing entity&lt;br /&gt;
* Prevents spelling variants&lt;br /&gt;
* Enables reliable Cargo queries later&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Place and Organisation Fields ==&lt;br /&gt;
&lt;br /&gt;
Both fields are defined similarly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{{field|Place&lt;br /&gt;
 |input type=combobox&lt;br /&gt;
 |values from namespace=Place&lt;br /&gt;
 |existing values only&lt;br /&gt;
 |placeholder=Use Organisation instead&lt;br /&gt;
}}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{{field|Organisation&lt;br /&gt;
 |input type=combobox&lt;br /&gt;
 |values from namespace=Organisation&lt;br /&gt;
 |existing values only&lt;br /&gt;
 |placeholder=Use Place instead&lt;br /&gt;
}}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What this does:&lt;br /&gt;
&lt;br /&gt;
* Allows selection of exactly one context&lt;br /&gt;
* Guides the user visually&lt;br /&gt;
* Does NOT enforce exclusivity by itself&lt;br /&gt;
&lt;br /&gt;
Important:&lt;br /&gt;
The mutual exclusion rule is enforced later by JavaScript and Lua.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Identifier (Label) Field ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{{field|Label|readonly}}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What it does:&lt;br /&gt;
&lt;br /&gt;
* Displays the identifier&lt;br /&gt;
* Prevents manual editing&lt;br /&gt;
&lt;br /&gt;
Why this exists:&lt;br /&gt;
&lt;br /&gt;
* Identifier is system-generated&lt;br /&gt;
* Users must see it&lt;br /&gt;
* Users must not change it&lt;br /&gt;
&lt;br /&gt;
Readonly fields can still be stored in Cargo.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Sequence Field ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{{field|Sequence|readonly}}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What it does:&lt;br /&gt;
&lt;br /&gt;
* Displays the numeric sequence&lt;br /&gt;
* Prevents editing&lt;br /&gt;
&lt;br /&gt;
Why it exists:&lt;br /&gt;
&lt;br /&gt;
* Sequence is derived data&lt;br /&gt;
* Useful for debugging and transparency&lt;br /&gt;
* Not user-editable&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== File Upload Field ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{{field|File&lt;br /&gt;
 |input type=page&lt;br /&gt;
 |namespace=File&lt;br /&gt;
 |uploadable=yes&lt;br /&gt;
}}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What it does:&lt;br /&gt;
&lt;br /&gt;
* Allows file selection or upload&lt;br /&gt;
* Upload happens only when Save is clicked&lt;br /&gt;
* Creates a File page if necessary&lt;br /&gt;
&lt;br /&gt;
Why this configuration is used:&lt;br /&gt;
&lt;br /&gt;
* This is the only configuration proven stable in Asset v1&lt;br /&gt;
* Avoids Special:Upload&lt;br /&gt;
* Keeps upload bound to Asset creation&lt;br /&gt;
&lt;br /&gt;
Important:&lt;br /&gt;
The file is NOT renamed here.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Original Filename Field ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{{field|OriginalFilename|readonly}}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What it does:&lt;br /&gt;
&lt;br /&gt;
* Displays the original local filename&lt;br /&gt;
* Filled automatically by JavaScript later&lt;br /&gt;
* Cannot be edited manually&lt;br /&gt;
&lt;br /&gt;
Why this exists:&lt;br /&gt;
&lt;br /&gt;
* Provenance&lt;br /&gt;
* User reassurance&lt;br /&gt;
* Archival traceability&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== AssetType Field ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{{field|AssetType&lt;br /&gt;
 |input type=combobox&lt;br /&gt;
 |values from namespace=AssetType&lt;br /&gt;
 |existing values only&lt;br /&gt;
}}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Purpose:&lt;br /&gt;
&lt;br /&gt;
* Classifies the Asset&lt;br /&gt;
* Supports filtering and querying&lt;br /&gt;
* Prevents uncontrolled vocabularies&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Parent Asset Field ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{{field|Parent&lt;br /&gt;
 |input type=combobox&lt;br /&gt;
 |values from namespace=Asset&lt;br /&gt;
 |existing values only&lt;br /&gt;
 |placeholder=Top level&lt;br /&gt;
}}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What it does:&lt;br /&gt;
&lt;br /&gt;
* Allows linking to an existing Asset&lt;br /&gt;
* Enables derivation trees&lt;br /&gt;
&lt;br /&gt;
Why it is optional:&lt;br /&gt;
&lt;br /&gt;
* Not all Assets are derived&lt;br /&gt;
* Top-level Assets are common&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Description and Notes Fields ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{{field|Description|input type=textarea}}}&lt;br /&gt;
{{{field|Notes|input type=textarea}}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What they do:&lt;br /&gt;
&lt;br /&gt;
* Provide free-form text areas&lt;br /&gt;
* No validation&lt;br /&gt;
* Stored as Text in Cargo&lt;br /&gt;
&lt;br /&gt;
Separation rationale:&lt;br /&gt;
&lt;br /&gt;
* Description = narrative meaning&lt;br /&gt;
* Notes = technical or archival remarks&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Save Button ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{{standard input|save}}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What it does:&lt;br /&gt;
&lt;br /&gt;
* Commits the page&lt;br /&gt;
* Uploads the file&lt;br /&gt;
* Triggers Cargo storage&lt;br /&gt;
* Triggers later automation&lt;br /&gt;
&lt;br /&gt;
Important:&lt;br /&gt;
There is no “draft save” in Page Forms.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Important Reminder ==&lt;br /&gt;
&lt;br /&gt;
Page Forms:&lt;br /&gt;
&lt;br /&gt;
* does not generate identifiers&lt;br /&gt;
* does not enforce immutability&lt;br /&gt;
* does not rename files&lt;br /&gt;
* does not validate archival rules&lt;br /&gt;
&lt;br /&gt;
It only collects and passes values.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Mental Model to Keep ==&lt;br /&gt;
&lt;br /&gt;
You can safely remember:&lt;br /&gt;
&lt;br /&gt;
* Page Forms = structured input UI&lt;br /&gt;
* Template = data + presentation&lt;br /&gt;
* Cargo = storage&lt;br /&gt;
* Automation happens elsewhere&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
&lt;br /&gt;
This document is stable reference documentation.&lt;br /&gt;
&lt;br /&gt;
It exists to support long-term understanding and memory retention.&lt;/div&gt;</summary>
		<author><name>Mngr</name></author>
	</entry>
</feed>