Streamlining media, part I.
The main goal here is to rearrange the media components in a modularized structure to support more linear workflows. This is that structure using the pre-existing workflows, which will be improved over the course of the next few commits.
This leaves a few pieces a bit rough around the edges: namely gallery editing and selecting a featured image.
The fine print follows.
Styles
- Tightened padding around the modal to optimize for a smaller default screen size.
- Added a light dashed line surrounding the modal to provide a subtle cue for the persistent dropzone (which is evolving into a power user feature since we now have a dedicated
upload
state).
- Add a size for
hero
buttons.
- Remove transitions from frame subviews (e.g. menu, content, sidebar, toolbar).
Code
wp.media.controller.StateManager
- Don't fire
activate
and deactivate
if attempting to switch to the current state.
wp.media.controller.State
- Add a base state class to bind default methods (as not all states will inherit from the
Library
state).
- On
activate
, fire activate()
, menu()
, content()
, sidebar()
, and toolbar()
.
- The menu view is often a shared object (as its most common use case is switching between states). Assign the view to the state's
menu
attribute.
menu()
automatically fetches the state's menu
attribute, attaches the menu view to the frame, and attempts to select a menu item that matches the state's id
.
wp.media.controller.Library
- Now inherits from
wp.media.controller.State
.
wp.media.controller.Upload
- A new state to improve the upload experience.
- Displays a large dropzone when empty (a
UploaderInline
view).
- When attachments are uploaded, displays management interface (a
library
state restricted to attachments uploaded during the current session).
wp.media.view.Frame
- In
menu()
, content()
, sidebar()
, and toolbar()
, only change the view if it differs from the current view. Also, ensure hide-*
classes are properly removed.
*
wp.media.view.PriorityList
- A new container view used to sort and render child views by the
priority
property.
- Used by
wp.media.view.Sidebar
and wp.media.view.Menu
.
- Next step: Use two instances to power
wp.media.view.Toolbar
.
wp.media.view.Menu
and wp.media.view.MenuItem
- A new
PriorityList
view that renders a list of views used to switch between states.
MenuItem
instances have id
attributes that are tied directly to states.
- Separators can be added as plain
Backbone.View
instances with the separator
class.
- Supports any type of
Backbone.View
.
media.view.Menu.Landing
- The landing menu for the 'insert media' workflow.
- Includes an inactive link to an "Embed from URL" state.
- Next steps: only use in select cases to allot for other workflows (such as featured images).
wp.media.view.AttachmentsBrowser
- A container to render an
Attachments
view with accompanying UI controls (similar to what the Attachments
view was when it contained the $list
property).
- Currently only renders a
Search
view as a control.
- Next steps: Add optional view counts (e.g. "21 images"), upload buttons, and collection filter UI.
wp.media.view.Attachments
- If the
Attachments
scroll buffer is not filled with Attachment
views, continue loading more attachments.
- Use
this.model
instead of this.controller.state()
to allow Attachments
views to have differing edge
and gutter
properties.
- Add
edge()
, a method used to calculate the optimal dimensions for an attachment based on the current width of the Attachments
container element.
edge()
is currently only enabled on resize, as the relative positioning and CSS transforms used to center thumbnails are suboptimal when coupled with frequent resizing.
- Next steps: For infinite scroll performance improvements, look into absolutely positioning attachment views and paging groups of attachment views.
wp.media.view.UploaderWindow
- Now generates a
$browser
element as the browse button (instead of a full UploaderInline
view). Using a portable browse button prevents us from having to create a new wp.Uploader
instance every time we want access to a browse button.
wp.media.view.UploaderInline
- No longer directly linked to the
UploaderWindow
view or its wp.Uploader
instance.
- Used as the default
upload
state view.
wp.media.view.Selection
- An interactive representation of the selected
Attachments
.
- Based on the improved workflows, this is likely overkill. For simplicity's sake, will probably remove this in favor of
SelectionPreview
.
see #21390.