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

Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision
Restricted Differential Revision

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
epriestley added a revision: Restricted Differential Revision.Nov 10 2015, 2:17 PM
epriestley added a commit: Restricted Diffusion Commit.Nov 10 2015, 6:24 PM
epriestley added a revision: Restricted Differential Revision.Nov 17 2015, 8:37 PM
epriestley added a revision: Restricted Differential Revision.Nov 18 2015, 6:40 PM
epriestley added a revision: Restricted Differential Revision.Nov 18 2015, 7:24 PM
epriestley added a revision: Restricted Differential Revision.Nov 18 2015, 11:04 PM
epriestley added a commit: Restricted Diffusion Commit.Nov 22 2015, 11:13 PM
epriestley added a commit: Restricted Diffusion Commit.Nov 23 2015, 12:25 AM
epriestley added a commit: Restricted Diffusion Commit.
epriestley added a commit: Restricted Diffusion Commit.Nov 23 2015, 12:27 AM
epriestley added a revision: Restricted Differential Revision.Nov 28 2015, 1:02 PM
epriestley added a commit: Restricted Diffusion Commit.Nov 29 2015, 4:27 PM
epriestley added a revision: Restricted Differential Revision.Nov 29 2015, 5:36 PM
epriestley added a revision: Restricted Differential Revision.Nov 29 2015, 6:14 PM
epriestley added a revision: Restricted Differential Revision.Nov 29 2015, 7:30 PM
epriestley added a revision: Restricted Differential Revision.Nov 29 2015, 9:45 PM
epriestley added a revision: Restricted Differential Revision.Nov 30 2015, 4:39 PM
epriestley added a commit: Restricted Diffusion Commit.Nov 30 2015, 4:59 PM
epriestley added a commit: Restricted Diffusion Commit.
epriestley added a commit: Restricted Diffusion Commit.
epriestley added a commit: Restricted Diffusion Commit.
epriestley added a revision: Restricted Differential Revision.Nov 30 2015, 10:25 PM
epriestley added a commit: Restricted Diffusion Commit.Dec 2 2015, 1:21 PM
epriestley added a commit: Restricted Diffusion Commit.
epriestley added a revision: Restricted Differential Revision.Dec 2 2015, 2:06 PM
epriestley added a revision: Restricted Differential Revision.Dec 2 2015, 2:18 PM
epriestley added a commit: Restricted Diffusion Commit.Dec 2 2015, 5:32 PM
epriestley added a commit: Restricted Diffusion Commit.
epriestley added a revision: Restricted Differential Revision.Dec 2 2015, 7:17 PM
epriestley added a revision: Restricted Differential Revision.Dec 2 2015, 7:38 PM
epriestley added a revision: Restricted Differential Revision.Dec 2 2015, 8:58 PM
epriestley added a commit: Restricted Diffusion Commit.Dec 3 2015, 3:06 PM
epriestley added a commit: Restricted Diffusion Commit.
epriestley added a commit: Restricted Diffusion Commit.
epriestley added a revision: Restricted Differential Revision.Dec 3 2015, 7:38 PM
epriestley added a commit: Restricted Diffusion Commit.Dec 3 2015, 8:32 PM
epriestley added a revision: Restricted Differential Revision.Dec 3 2015, 11:19 PM
epriestley added a revision: Restricted Differential Revision.Dec 4 2015, 2:43 PM
epriestley added a revision: Restricted Differential Revision.Dec 4 2015, 3:00 PM
epriestley added a revision: Restricted Differential Revision.Dec 4 2015, 3:13 PM
epriestley added a revision: Restricted Differential Revision.Dec 4 2015, 3:34 PM
epriestley added a revision: Restricted Differential Revision.Dec 4 2015, 3:59 PM
epriestley added a revision: Restricted Differential Revision.Dec 4 2015, 6:17 PM
epriestley added a revision: Restricted Differential Revision.Dec 4 2015, 6:59 PM
epriestley added a revision: Restricted Differential Revision.Dec 4 2015, 10:13 PM
epriestley added a revision: Restricted Differential Revision.Dec 4 2015, 10:19 PM
epriestley added a revision: Restricted Differential Revision.Dec 4 2015, 11:01 PM
epriestley added a commit: Restricted Diffusion Commit.Dec 5 2015, 12:30 AM
epriestley added a commit: Restricted Diffusion Commit.
epriestley added a commit: Restricted Diffusion Commit.
epriestley added a commit: Restricted Diffusion Commit.
epriestley added a commit: Restricted Diffusion Commit.
epriestley added a commit: Restricted Diffusion Commit.
epriestley added a commit: Restricted Diffusion Commit.
epriestley added a commit: Restricted Diffusion Commit.
epriestley added a commit: Restricted Diffusion Commit.
epriestley added a commit: Restricted Diffusion Commit.
epriestley added a commit: Restricted Diffusion Commit.
epriestley added a revision: Restricted Differential Revision.Dec 5 2015, 5:14 PM
epriestley added a commit: Restricted Diffusion Commit.Dec 5 2015, 5:57 PM
epriestley added a revision: Restricted Differential Revision.Dec 7 2015, 9:40 PM
epriestley added a commit: Restricted Diffusion Commit.Dec 7 2015, 9:44 PM
epriestley added a revision: Restricted Differential Revision.Dec 8 2015, 1:21 AM
epriestley added a revision: Restricted Differential Revision.Dec 8 2015, 2:19 PM
epriestley added a commit: Restricted Diffusion Commit.Dec 8 2015, 9:00 PM
epriestley added a commit: Restricted Diffusion Commit.
epriestley added a revision: Restricted Differential Revision.Dec 9 2015, 1:01 PM
epriestley added a commit: Restricted Diffusion Commit.Dec 9 2015, 3:30 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