Page MenuHomePhabricator

Build an ApplicationEditor abstraction
Closed, ResolvedPublic

Description

Edit forms are currently among the least abstract -- and, theoretically, most abstractable -- parts of modern Phabricator. We have a handful of highly specialized edit forms:

  • Diffusion has a paginated edit form for repositories.
  • Pholio has a fairly complex drag + drop JS interaction.
  • Calendar has some JS interactions between the controls.

Essentially all other edit forms are mundane collections of well-behaved fields.

The actual edits themselves are abstracted via ApplicationTransactions, but exposing the low-level transactions as usable controls is not. In practice, each EditController is mostly hand-written and defines the individual controls in the UI. Instead, we could define the fields more broadly and let the abstraction render controls, like we've done with ApplicationSearch.

Abstracting edit forms is complex, and is something I intentionally avoided doing for a long time, but previous efforts (e.g., in Diffusion) haven't been a total disaster and I think this problem is now ripe.

Increasing the level of abstraction here gives us plausible attacks on a lot of problems with edit workflows:

  • (T8434 / T3320 / T8891) Templating of edit forms (hiding, reordering, defaulting fields)
  • (T4768) Conflict detection and resolution
  • (T5873) Generalized Conduit edit APIs
  • (M1430) Stackable actions
  • (T5031-ish) Draft interaction with edit actions has a messy outlook without this.
  • (T4316) Per-user edit form customization? Not sure I want to go this far, but I think this is maybe better than just putting comment forms on every edit form.
  • Generic batch editing across applications.

Revisions and Commits

rP Phabricator
Abandoned
D14718
D14704
D14702
D14699
D14678
D14675
D14673
D14672
D14670
D14669
D14667
D14666
D14665
D14663
D14664
D14659
D14653
D14640
D14638
D14637
D14635
D14634
D14617
D14598
D14607
D14601
D14600
D14599
D14584
D14515
D14509
D14508
D14503
D14453
D14404
D14402
D14398
D14393
D14392
D14390

Related Objects

StatusAssignedTask
OpenNone
Resolvedepriestley
OpenNone
OpenNone
Openepriestley
Resolvedepriestley
Wontfixepriestley
Resolvedbtrahan
Resolvedepriestley
Resolvedepriestley
Resolvedepriestley
DuplicateNone
ResolvedNone
Resolvedepriestley
ResolvedNone
Resolvedepriestley
OpenNone
InvalidNone
ResolvedNone
Resolvedepriestley
Resolvedepriestley
Resolvedchad
Resolvedchad
Resolvedchad
Resolvedchad
Resolvedchad
Resolvedchad
OpenNone
ResolvedNone
DuplicateNone

Event Timeline

There are a very large number of changes, so older changes are hidden. Show Older Changes
angie added a project: Restricted Project.Nov 9 2015, 11:53 PM

I'm going to close this out since the infrastructure work it describes is now substantially complete, although a great deal of work remains to be done to bring this infrastructure to all applications and implement the full set of features it enables (mostly described in tasks blocked by this one).

T9905 is the high-level task describing immediate impact in Maniphest.

angie moved this task from Restricted Project Column to Restricted Project Column on the Restricted Project board.Dec 10 2015, 6:51 PM
angie moved this task from Restricted Project Column to Restricted Project Column on the Restricted Project board.Apr 21 2016, 10:22 PM