mirror of
https://github.com/gosticks/wordpress-develop.git
synced 2026-08-11 12:20:22 +00:00
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. git-svn-id: https://develop.svn.wordpress.org/trunk@22362 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
@@ -81,6 +81,14 @@ input[type="submit"]::-moz-focus-inner {
|
||||
padding: 0 8px 1px;
|
||||
}
|
||||
|
||||
.button.button-hero,
|
||||
.button-group.button-hero .button {
|
||||
font-size: 14px;
|
||||
height: 46px;
|
||||
line-height: 44px;
|
||||
padding: 0 36px;
|
||||
}
|
||||
|
||||
.button:active {
|
||||
outline: none;
|
||||
}
|
||||
@@ -294,7 +302,7 @@ input[type="submit"]::-moz-focus-inner {
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
left: 0;
|
||||
margin-top: 5px;
|
||||
margin: 5px 0;
|
||||
padding: 0.8em 1em;
|
||||
border-radius: 3px;
|
||||
|
||||
@@ -314,3 +322,8 @@ input[type="submit"]::-moz-focus-inner {
|
||||
left: auto;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
.dropdown-flip-y .dropdown {
|
||||
top: auto;
|
||||
bottom: 100%;
|
||||
}
|
||||
+230
-63
@@ -3,10 +3,10 @@
|
||||
*/
|
||||
.media-modal {
|
||||
position: fixed;
|
||||
top: 80px;
|
||||
left: 60px;
|
||||
right: 60px;
|
||||
bottom: 60px;
|
||||
top: 60px;
|
||||
left: 40px;
|
||||
right: 40px;
|
||||
bottom: 40px;
|
||||
z-index: 125000;
|
||||
}
|
||||
|
||||
@@ -21,6 +21,15 @@
|
||||
z-index: 120000;
|
||||
}
|
||||
|
||||
.media-modal-backdrop div {
|
||||
position: absolute;
|
||||
top: 10px;
|
||||
left: 10px;
|
||||
right: 10px;
|
||||
bottom: 10px;
|
||||
border: 1px dashed rgba( 255, 255, 255, 0.5 );
|
||||
}
|
||||
|
||||
.media-modal-title,
|
||||
.media-modal-close {
|
||||
position: absolute;
|
||||
@@ -38,7 +47,7 @@
|
||||
float: left;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
font-size: 1.4em;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.media-modal-close {
|
||||
@@ -74,12 +83,23 @@
|
||||
.media-toolbar {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 220px;
|
||||
left: 0;
|
||||
right: 0;
|
||||
z-index: 100;
|
||||
height: 50px;
|
||||
padding: 0 10px;
|
||||
border-bottom: 1px solid #dfdfdf;
|
||||
height: 60px;
|
||||
padding: 0 16px;
|
||||
border: 0 solid #dfdfdf;
|
||||
}
|
||||
|
||||
.media-frame > .media-toolbar {
|
||||
top: auto;
|
||||
left: 200px;
|
||||
bottom: 0;
|
||||
border-width: 1px 0 0 0;
|
||||
}
|
||||
|
||||
.media-frame.hide-toolbar > .media-toolbar {
|
||||
bottom: -61px;
|
||||
}
|
||||
|
||||
.media-toolbar-primary {
|
||||
@@ -94,14 +114,14 @@
|
||||
.media-toolbar-primary > .media-button-group {
|
||||
margin-left: 10px;
|
||||
float: left;
|
||||
margin-top: 10px;
|
||||
margin-top: 15px;
|
||||
}
|
||||
|
||||
.media-toolbar-secondary > .media-button,
|
||||
.media-toolbar-secondary > .media-button-group {
|
||||
margin-right: 10px;
|
||||
float: left;
|
||||
margin-top: 10px;
|
||||
margin-top: 15px;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -110,16 +130,21 @@
|
||||
.media-sidebar {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
width: 219px;
|
||||
z-index: 50;
|
||||
right: 0;
|
||||
bottom: 61px;
|
||||
width: 247px;
|
||||
padding: 0 16px;
|
||||
z-index: 75;
|
||||
background: #f5f5f5;
|
||||
border-right: 1px solid #dfdfdf;
|
||||
border-left: 1px solid #dfdfdf;
|
||||
}
|
||||
|
||||
.hide-sidebar .media-sidebar {
|
||||
display: none;
|
||||
right: -280px;
|
||||
}
|
||||
|
||||
.hide-toolbar .media-sidebar {
|
||||
bottom: 0;
|
||||
}
|
||||
|
||||
.media-sidebar .sidebar-title {
|
||||
@@ -146,32 +171,66 @@
|
||||
padding-top: 5px;
|
||||
}
|
||||
|
||||
/**
|
||||
* Menu
|
||||
*/
|
||||
.media-menu {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
width: 199px;
|
||||
margin: 0;
|
||||
padding: 16px 0;
|
||||
z-index: 200;
|
||||
box-shadow: inset -6px 0 6px -6px rgba( 0, 0, 0, 0.4 );
|
||||
}
|
||||
|
||||
.media-menu li {
|
||||
position: relative;
|
||||
padding: 4px 20px;
|
||||
margin: 0;
|
||||
line-height: 18px;
|
||||
font-size: 14px;
|
||||
color: #21759B;
|
||||
text-shadow: 0 1px 0 #fff;
|
||||
}
|
||||
|
||||
.media-menu-item {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.media-menu li:hover {
|
||||
background: rgba( 0, 0, 0, 0.04 );
|
||||
}
|
||||
|
||||
.media-menu .active,
|
||||
.media-menu .active:hover {
|
||||
color: #333;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.media-menu .separator {
|
||||
height: 0;
|
||||
margin: 12px 20px;
|
||||
padding: 0;
|
||||
border-top: 1px solid #dfdfdf;
|
||||
border-bottom: 1px solid #fff;
|
||||
}
|
||||
|
||||
/**
|
||||
* Frame
|
||||
*/
|
||||
|
||||
.media-frame .media-content,
|
||||
.media-frame .media-toolbar,
|
||||
.media-frame .media-sidebar {
|
||||
-webkit-transition-property: left, right, top, bottom, margin;
|
||||
-moz-transition-property: left, right, top, bottom, margin;
|
||||
-ms-transition-property: left, right, top, bottom, margin;
|
||||
-o-transition-property: left, right, top, bottom, margin;
|
||||
transition-property: left, right, top, bottom, margin;
|
||||
|
||||
-webkit-transition-duration: 0.2s;
|
||||
-moz-transition-duration: 0.2s;
|
||||
-ms-transition-duration: 0.2s;
|
||||
-o-transition-duration: 0.2s;
|
||||
transition-duration: 0.2s;
|
||||
.media-frame {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.media-frame .media-content {
|
||||
position: absolute;
|
||||
top: 51px;
|
||||
left: 220px;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
top: 0;
|
||||
left: 200px;
|
||||
right: 280px;
|
||||
bottom: 61px;
|
||||
height: auto;
|
||||
width: auto;
|
||||
margin: 0;
|
||||
@@ -179,7 +238,11 @@
|
||||
}
|
||||
|
||||
.media-frame.hide-sidebar .media-content {
|
||||
left: 0;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
.media-frame.hide-toolbar .media-content {
|
||||
bottom: 0;
|
||||
}
|
||||
|
||||
.media-frame .media-toolbar .add-to-gallery {
|
||||
@@ -198,6 +261,14 @@
|
||||
font-family: sans-serif;
|
||||
}
|
||||
|
||||
/**
|
||||
* Attachments
|
||||
*/
|
||||
.attachments {
|
||||
margin: 0;
|
||||
padding-right: 16px;
|
||||
}
|
||||
|
||||
/**
|
||||
* Attachment
|
||||
*/
|
||||
@@ -388,6 +459,28 @@
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Attachments Browser
|
||||
*/
|
||||
.media-frame .attachments-browser {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.attachments-browser .media-toolbar {
|
||||
height: 50px;
|
||||
}
|
||||
|
||||
.attachments-browser .attachments {
|
||||
position: absolute;
|
||||
top: 50px;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Progress Bar
|
||||
*/
|
||||
@@ -445,10 +538,10 @@
|
||||
|
||||
.uploader-window-content {
|
||||
position: absolute;
|
||||
top: 30px;
|
||||
left: 30px;
|
||||
right: 30px;
|
||||
bottom: 30px;
|
||||
top: 10px;
|
||||
left: 10px;
|
||||
right: 10px;
|
||||
bottom: 10px;
|
||||
border: 1px dashed #fff;
|
||||
}
|
||||
|
||||
@@ -463,7 +556,7 @@
|
||||
-o-transform: translateY( -50% );
|
||||
transform: translateY( -50% );
|
||||
|
||||
font-size: 18px;
|
||||
font-size: 20px;
|
||||
font-weight: 200;
|
||||
color: #fff;
|
||||
padding: 0;
|
||||
@@ -485,8 +578,24 @@
|
||||
display: block;
|
||||
}
|
||||
|
||||
.uploader-inline {
|
||||
display: none;
|
||||
.media-content.uploader-inline {
|
||||
margin: 20px;
|
||||
padding: 20px;
|
||||
border: 1px dashed #aaa;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.uploader-inline-content {
|
||||
position: absolute;
|
||||
top: 30%;
|
||||
left: 0;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
.uploader-inline h3 {
|
||||
font-size: 20px;
|
||||
font-weight: 200;
|
||||
margin-bottom: 1.6em;
|
||||
}
|
||||
|
||||
.uploader-inline .media-progress-bar {
|
||||
@@ -497,23 +606,85 @@
|
||||
display: block;
|
||||
}
|
||||
|
||||
.media-sidebar .uploader-inline {
|
||||
display: block;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
height: 100px;
|
||||
margin: 10px;
|
||||
padding-top: 10px;
|
||||
text-align: center;
|
||||
border: 1px dashed #aaa;
|
||||
.uploader-inline .browser {
|
||||
display: inline-block !important;
|
||||
}
|
||||
|
||||
.media-sidebar .uploader-inline h3 {
|
||||
font-weight: 200;
|
||||
font-size: 16px;
|
||||
margin: 10px 0;
|
||||
/**
|
||||
* Selection
|
||||
*/
|
||||
|
||||
.media-selection {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 350px;
|
||||
height: 60px;
|
||||
padding: 0 0 0 16px;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.media-selection .selection-info {
|
||||
display: inline-block;
|
||||
height: 60px;
|
||||
margin-right: 10px;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.media-selection.empty {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.media-selection .count {
|
||||
display: block;
|
||||
padding-top: 12px;
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.media-selection .clear-selection {
|
||||
display: block;
|
||||
text-decoration: none;
|
||||
line-height: 16px;
|
||||
}
|
||||
|
||||
.media-selection .attachments {
|
||||
display: inline-block;
|
||||
height: 60px;
|
||||
margin-top: 5px;
|
||||
overflow: hidden;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.media-selection .selected.attachment {
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.media-selection .details.attachment {
|
||||
box-shadow:
|
||||
0 0 0 1px #fff,
|
||||
0 0 0 3px #1e8cbe;
|
||||
}
|
||||
|
||||
.media-selection:after {
|
||||
content: '';
|
||||
display: block;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
width: 25px;
|
||||
background-image: -webkit-gradient(linear, right top, right top, from( rgba( 255, 255, 255, 1 ) ), to( rgba( 255, 255, 255, 0 ) ));
|
||||
background-image: -webkit-linear-gradient(right, rgba( 255, 255, 255, 1 ) , rgba( 255, 255, 255, 0 ) );
|
||||
background-image: -moz-linear-gradient(right, rgba( 255, 255, 255, 1 ) , rgba( 255, 255, 255, 0 ) );
|
||||
background-image: -o-linear-gradient(right, rgba( 255, 255, 255, 1 ) , rgba( 255, 255, 255, 0 ) );
|
||||
background-image: linear-gradient(to left, rgba( 255, 255, 255, 1 ) , rgba( 255, 255, 255, 0 ) );
|
||||
}
|
||||
|
||||
.media-selection .attachment .filename {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -584,10 +755,6 @@
|
||||
* Attachment Details
|
||||
*/
|
||||
|
||||
.attachment-details {
|
||||
padding-top: 20px;
|
||||
}
|
||||
|
||||
.attachment-details-preview {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user