2012-10-15 16:55:29 +02:00
|
|
|
/* ----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
WordPress-style Buttons
|
2012-10-15 23:25:25 +02:00
|
|
|
=======================
|
|
|
|
Create a button by adding the `.button` class to an element. For backwards
|
|
|
|
compatibility, we support several other classes (such as `.button-secondary`),
|
|
|
|
but these will *not* work with the stackable classes described below.
|
|
|
|
|
|
|
|
Button Styles
|
|
|
|
-------------
|
|
|
|
To display a primary button style, add the `.button-primary` class to a button.
|
|
|
|
|
|
|
|
Button Sizes
|
|
|
|
------------
|
|
|
|
Adjust a button's size by adding the `.button-large` or `.button-small` class.
|
|
|
|
|
|
|
|
Button States
|
|
|
|
-------------
|
|
|
|
Lock the state of a button by adding the name of the pseudoclass as
|
|
|
|
an actual class (e.g. `.hover` for `:hover`).
|
2012-10-15 16:55:29 +02:00
|
|
|
|
|
|
|
|
|
|
|
TABLE OF CONTENTS:
|
|
|
|
------------------
|
|
|
|
1.0 - Button Layouts
|
|
|
|
2.0 - Default Button Style
|
|
|
|
3.0 - Primary Button Style
|
2012-10-16 15:34:01 +02:00
|
|
|
4.0 - Button Groups
|
2012-10-16 17:42:34 +02:00
|
|
|
5.0 - Icon Buttons
|
2012-10-15 16:55:29 +02:00
|
|
|
|
|
|
|
---------------------------------------------------------------------------- */
|
|
|
|
|
|
|
|
/* ----------------------------------------------------------------------------
|
|
|
|
1.0 - Button Layouts
|
|
|
|
---------------------------------------------------------------------------- */
|
|
|
|
|
|
|
|
.button,
|
|
|
|
.button-primary,
|
2012-10-15 23:25:25 +02:00
|
|
|
.button-secondary {
|
2012-10-15 16:55:29 +02:00
|
|
|
display: inline-block;
|
|
|
|
text-decoration: none;
|
|
|
|
font-size: 12px;
|
2012-10-26 21:40:39 +02:00
|
|
|
line-height: 23px;
|
|
|
|
height: 24px;
|
2012-10-15 16:55:29 +02:00
|
|
|
margin: 0;
|
2012-10-26 21:40:39 +02:00
|
|
|
padding: 0 10px 1px;
|
2012-10-15 16:55:29 +02:00
|
|
|
cursor: pointer;
|
|
|
|
border-width: 1px;
|
|
|
|
border-style: solid;
|
|
|
|
-webkit-border-radius: 3px;
|
|
|
|
border-radius: 3px;
|
|
|
|
white-space: nowrap;
|
2012-10-24 03:33:59 +02:00
|
|
|
-webkit-box-sizing: border-box;
|
|
|
|
-moz-box-sizing: border-box;
|
|
|
|
box-sizing: border-box;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Remove the dotted border on :focus and the extra padding in Firefox */
|
|
|
|
button::-moz-focus-inner,
|
|
|
|
input[type="reset"]::-moz-focus-inner,
|
|
|
|
input[type="button"]::-moz-focus-inner,
|
|
|
|
input[type="submit"]::-moz-focus-inner {
|
2012-10-26 21:40:39 +02:00
|
|
|
border-width: 1px 0;
|
|
|
|
border-style: solid none;
|
|
|
|
border-color: transparent;
|
2012-10-24 03:33:59 +02:00
|
|
|
padding: 0;
|
2012-10-15 16:55:29 +02:00
|
|
|
}
|
|
|
|
|
2012-10-16 15:34:01 +02:00
|
|
|
.button.button-large,
|
|
|
|
.button-group.button-large .button {
|
2012-10-26 21:40:39 +02:00
|
|
|
height: 30px;
|
|
|
|
line-height: 28px;
|
|
|
|
padding: 0 12px 2px;
|
2012-10-15 16:55:29 +02:00
|
|
|
}
|
|
|
|
|
2012-10-16 15:34:01 +02:00
|
|
|
.button.button-small,
|
|
|
|
.button-group.button-small .button {
|
2012-10-26 21:40:39 +02:00
|
|
|
height: 21px;
|
|
|
|
line-height: 20px;
|
|
|
|
padding: 0 8px 1px;
|
2012-10-15 16:55:29 +02: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: http://core.svn.wordpress.org/trunk@22362 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-11-04 23:59:12 +01:00
|
|
|
.button.button-hero,
|
|
|
|
.button-group.button-hero .button {
|
|
|
|
font-size: 14px;
|
|
|
|
height: 46px;
|
|
|
|
line-height: 44px;
|
|
|
|
padding: 0 36px;
|
|
|
|
}
|
|
|
|
|
2012-10-15 23:25:25 +02:00
|
|
|
.button:active {
|
2012-10-15 16:55:29 +02:00
|
|
|
outline: none;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* ----------------------------------------------------------------------------
|
|
|
|
2.0 - Default Button Style
|
|
|
|
---------------------------------------------------------------------------- */
|
|
|
|
|
|
|
|
.button,
|
2012-10-15 23:25:25 +02:00
|
|
|
.button-secondary {
|
2012-10-15 16:55:29 +02:00
|
|
|
background: #f3f3f3;
|
|
|
|
background-image: -webkit-gradient(linear, left top, left bottom, from(#fefefe), to(#f4f4f4));
|
|
|
|
background-image: -webkit-linear-gradient(top, #fefefe, #f4f4f4);
|
|
|
|
background-image: -moz-linear-gradient(top, #fefefe, #f4f4f4);
|
|
|
|
background-image: -o-linear-gradient(top, #fefefe, #f4f4f4);
|
|
|
|
background-image: linear-gradient(to bottom, #fefefe, #f4f4f4);
|
|
|
|
border-color: #bbb;
|
|
|
|
color: #333;
|
|
|
|
text-shadow: 0 1px 0 #fff;
|
|
|
|
}
|
|
|
|
|
|
|
|
.button.hover,
|
|
|
|
.button:hover,
|
|
|
|
.button-secondary:hover,
|
|
|
|
.button.focus,
|
|
|
|
.button:focus,
|
2012-10-15 23:25:25 +02:00
|
|
|
.button-secondary:focus {
|
2012-10-15 16:55:29 +02:00
|
|
|
background: #f3f3f3;
|
|
|
|
background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f3f3f3));
|
|
|
|
background-image: -webkit-linear-gradient(top, #fff, #f3f3f3);
|
|
|
|
background-image: -moz-linear-gradient(top, #fff, #f3f3f3);
|
2012-10-15 23:25:25 +02:00
|
|
|
background-image: -ms-linear-gradient(top, #fff, #f3f3f3);
|
2012-10-15 16:55:29 +02:00
|
|
|
background-image: -o-linear-gradient(top, #fff, #f3f3f3);
|
|
|
|
background-image: linear-gradient(to bottom, #fff, #f3f3f3);
|
|
|
|
border-color: #999;
|
|
|
|
color: #222;
|
|
|
|
}
|
|
|
|
|
|
|
|
.button.focus,
|
|
|
|
.button:focus,
|
2012-10-15 23:25:25 +02:00
|
|
|
.button-secondary:focus {
|
2012-10-24 03:27:56 +02:00
|
|
|
-webkit-box-shadow: 1px 1px 1px rgba(0,0,0,.2);
|
|
|
|
box-shadow: 1px 1px 1px rgba(0,0,0,.2);
|
2012-10-15 16:55:29 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
.button.active,
|
2012-10-15 23:25:25 +02:00
|
|
|
.button.active:hover,
|
|
|
|
.button.active:focus,
|
2012-10-15 16:55:29 +02:00
|
|
|
.button:active,
|
2012-10-15 23:25:25 +02:00
|
|
|
.button-secondary:active {
|
2012-10-15 16:55:29 +02:00
|
|
|
background: #eee;
|
|
|
|
background-image: -webkit-gradient(linear, left top, left bottom, from(#f4f4f4), to(#fefefe));
|
|
|
|
background-image: -webkit-linear-gradient(top, #f4f4f4, #fefefe);
|
|
|
|
background-image: -moz-linear-gradient(top, #f4f4f4, #fefefe);
|
2012-10-15 23:25:25 +02:00
|
|
|
background-image: -ms-linear-gradient(top, #f4f4f4, #fefefe);
|
2012-10-15 16:55:29 +02:00
|
|
|
background-image: -o-linear-gradient(top, #f4f4f4, #fefefe);
|
|
|
|
background-image: linear-gradient(to bottom, #f4f4f4, #fefefe);
|
|
|
|
border-color: #999;
|
|
|
|
color: #333;
|
|
|
|
text-shadow: 0 -1px 0 #fff;
|
|
|
|
-webkit-box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 );
|
|
|
|
box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 );
|
|
|
|
}
|
|
|
|
|
|
|
|
.button[disabled],
|
|
|
|
.button:disabled,
|
|
|
|
.button-secondary[disabled],
|
|
|
|
.button-secondary:disabled,
|
2012-10-15 23:25:25 +02:00
|
|
|
.button-disabled {
|
2012-10-15 16:55:29 +02:00
|
|
|
color: #aaa !important;
|
|
|
|
border-color: #ddd !important;
|
|
|
|
background-image: -webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#f4f4f4)) !important;
|
|
|
|
background-image: -webkit-linear-gradient(top, #f9f9f9, #f4f4f4) !important;
|
|
|
|
background-image: -moz-linear-gradient(top, #f9f9f9, #f4f4f4) !important;
|
2012-10-15 23:25:25 +02:00
|
|
|
background-image: -ms-linear-gradient(top, #f9f9f9, #f4f4f4) !important;
|
2012-10-15 16:55:29 +02:00
|
|
|
background-image: -o-linear-gradient(top, #f9f9f9, #f4f4f4) !important;
|
|
|
|
background-image: linear-gradient(to bottom, #f9f9f9, #f4f4f4) !important;
|
|
|
|
-webkit-box-shadow: none !important;
|
|
|
|
box-shadow: none !important;
|
|
|
|
text-shadow: 0 1px 0 #fff !important;
|
2012-11-06 23:30:41 +01:00
|
|
|
cursor: default;
|
2012-10-15 16:55:29 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/* ----------------------------------------------------------------------------
|
|
|
|
3.0 - Primary Button Style
|
|
|
|
---------------------------------------------------------------------------- */
|
|
|
|
|
2012-10-15 23:25:25 +02:00
|
|
|
.button-primary {
|
2012-10-15 16:55:29 +02:00
|
|
|
background-color: #21759b;
|
|
|
|
background-image: -webkit-gradient(linear, left top, left bottom, from(#2a95c5), to(#21759b));
|
|
|
|
background-image: -webkit-linear-gradient(top, #2a95c5, #21759b);
|
|
|
|
background-image: -moz-linear-gradient(top, #2a95c5, #21759b);
|
2012-10-15 23:25:25 +02:00
|
|
|
background-image: -ms-linear-gradient(top, #2a95c5, #21759b);
|
2012-10-15 16:55:29 +02:00
|
|
|
background-image: -o-linear-gradient(top, #2a95c5, #21759b);
|
|
|
|
background-image: linear-gradient(to bottom, #2a95c5, #21759b);
|
|
|
|
border-color: #21759b;
|
|
|
|
border-bottom-color: #1e6a8d;
|
|
|
|
-webkit-box-shadow: inset 0 1px 0 rgba(120,200,230,0.5);
|
|
|
|
box-shadow: inset 0 1px 0 rgba(120,200,230,0.5);
|
|
|
|
color: #fff;
|
|
|
|
text-decoration: none;
|
|
|
|
text-shadow: 0 1px 0 rgba(0,0,0,0.1);
|
|
|
|
}
|
|
|
|
|
2012-10-15 23:25:25 +02:00
|
|
|
.button-primary.hover,
|
|
|
|
.button-primary:hover,
|
|
|
|
.button-primary.focus,
|
|
|
|
.button-primary:focus {
|
2012-10-15 16:55:29 +02:00
|
|
|
background-color: #278ab7;
|
|
|
|
background-image: -webkit-gradient(linear, left top, left bottom, from(#2e9fd2), to(#21759b));
|
|
|
|
background-image: -webkit-linear-gradient(top, #2e9fd2, #21759b);
|
|
|
|
background-image: -moz-linear-gradient(top, #2e9fd2, #21759b);
|
|
|
|
background-image: -ms-linear-gradient(top, #2e9fd2, #21759b);
|
|
|
|
background-image: -o-linear-gradient(top, #2e9fd2, #21759b);
|
|
|
|
background-image: linear-gradient(to bottom, #2e9fd2, #21759b);
|
|
|
|
border-color: #1b607f;
|
|
|
|
-webkit-box-shadow: inset 0 1px 0 rgba(120,200,230,0.6);
|
|
|
|
box-shadow: inset 0 1px 0 rgba(120,200,230,0.6);
|
|
|
|
color: #fff;
|
|
|
|
text-shadow: 0 -1px 0 rgba(0,0,0,0.3);
|
|
|
|
}
|
|
|
|
|
2012-10-15 23:25:25 +02:00
|
|
|
.button-primary.focus,
|
|
|
|
.button-primary:focus {
|
2012-10-15 16:55:29 +02:00
|
|
|
border-color: #0e3950;
|
2012-10-24 03:27:56 +02:00
|
|
|
-webkit-box-shadow: inset 0 1px 0 rgba(120,200,230,0.6), 1px 1px 2px rgba(0,0,0,0.4);
|
|
|
|
box-shadow: inset 0 1px 0 rgba(120,200,230,0.6), 1px 1px 2px rgba(0,0,0,0.4);
|
2012-10-15 16:55:29 +02:00
|
|
|
}
|
|
|
|
|
2012-10-15 23:25:25 +02:00
|
|
|
.button-primary.active,
|
|
|
|
.button-primary.active:hover,
|
|
|
|
.button-primary.active:focus,
|
|
|
|
.button-primary:active {
|
2012-10-15 16:55:29 +02:00
|
|
|
background: #1b607f;
|
|
|
|
background-image: -webkit-gradient(linear, left top, left bottom, from(#21759b), to(#278ab7));
|
|
|
|
background-image: -webkit-linear-gradient(top, #21759b, #278ab7);
|
|
|
|
background-image: -moz-linear-gradient(top, #21759b, #278ab7);
|
|
|
|
background-image: -ms-linear-gradient(top, #21759b, #278ab7);
|
|
|
|
background-image: -o-linear-gradient(top, #21759b, #278ab7);
|
|
|
|
background-image: linear-gradient(to bottom, #21759b, #278ab7);
|
|
|
|
border-color: #124560 #2382ae #2382ae #2382ae;
|
|
|
|
color: rgba(255,255,255,0.95);
|
|
|
|
-webkit-box-shadow: inset 0 1px 0 rgba(0,0,0,0.1);
|
|
|
|
box-shadow: inset 0 1px 0 rgba(0,0,0,0.1);
|
|
|
|
text-shadow: 0 1px 0 rgba(0,0,0,0.1);
|
|
|
|
}
|
|
|
|
|
|
|
|
.button-primary[disabled],
|
2012-10-15 23:25:25 +02:00
|
|
|
.button-primary:disabled,
|
|
|
|
.button-primary-disabled {
|
2012-10-15 16:55:29 +02:00
|
|
|
color: #94cde7 !important;
|
|
|
|
background: #298cba !important;
|
|
|
|
border-color: #1b607f !important;
|
|
|
|
-webkit-box-shadow: none !important;
|
|
|
|
box-shadow: none !important;
|
|
|
|
text-shadow: 0 -1px 0 rgba(0,0,0,0.1) !important;
|
2012-11-06 23:30:41 +01:00
|
|
|
cursor: default;
|
2012-10-15 16:55:29 +02:00
|
|
|
}
|
2012-10-16 15:34:01 +02:00
|
|
|
|
|
|
|
/* ----------------------------------------------------------------------------
|
|
|
|
4.0 - Button Groups
|
|
|
|
---------------------------------------------------------------------------- */
|
|
|
|
|
|
|
|
.button-group {
|
2012-10-16 21:25:17 +02:00
|
|
|
position: relative;
|
2012-10-16 15:34:01 +02:00
|
|
|
display: inline-block;
|
|
|
|
white-space: nowrap;
|
|
|
|
font-size: 0;
|
|
|
|
vertical-align: middle;
|
|
|
|
}
|
|
|
|
|
|
|
|
.button-group > .button {
|
|
|
|
display: inline-block;
|
|
|
|
border-radius: 0;
|
|
|
|
margin-right: -1px;
|
|
|
|
z-index: 10;
|
|
|
|
}
|
|
|
|
|
|
|
|
.button-group > .button-primary {
|
|
|
|
z-index: 100;
|
|
|
|
}
|
|
|
|
|
|
|
|
.button-group > .button:hover {
|
|
|
|
z-index: 20;
|
|
|
|
}
|
|
|
|
|
|
|
|
.button-group > .button:first-child {
|
|
|
|
border-radius: 3px 0 0 3px;
|
|
|
|
}
|
|
|
|
|
|
|
|
.button-group > .button:last-child {
|
|
|
|
border-radius: 0 3px 3px 0;
|
2012-10-16 17:42:34 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/* ----------------------------------------------------------------------------
|
|
|
|
5.0 - Icon Buttons
|
|
|
|
|
|
|
|
A button with a class of .down-arrow cannot have any input, and cannot have
|
|
|
|
any other content.
|
|
|
|
---------------------------------------------------------------------------- */
|
|
|
|
.button.down-arrow:after {
|
|
|
|
content: '\25BE';
|
|
|
|
display: inline-block;
|
|
|
|
font-size: 16px;
|
2012-10-16 21:25:17 +02:00
|
|
|
opacity: 0.9;
|
2012-10-16 17:42:34 +02:00
|
|
|
margin: 0 -0.25em;
|
|
|
|
text-align: center;
|
|
|
|
vertical-align: middle;
|
|
|
|
}
|
2012-10-16 21:25:17 +02:00
|
|
|
|
|
|
|
.button .dropdown {
|
|
|
|
display: none;
|
|
|
|
position: absolute;
|
|
|
|
top: 100%;
|
|
|
|
left: 0;
|
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: http://core.svn.wordpress.org/trunk@22362 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-11-04 23:59:12 +01:00
|
|
|
margin: 5px 0;
|
2012-10-16 21:25:17 +02:00
|
|
|
padding: 0.8em 1em;
|
|
|
|
border-radius: 3px;
|
|
|
|
|
|
|
|
background: #f5f5f5;
|
|
|
|
color: #333;
|
|
|
|
text-shadow: none;
|
|
|
|
box-shadow:
|
|
|
|
0 0 0 1px rgba( 0, 0, 0, 0.3 ),
|
|
|
|
1px 1px 2px rgba( 0, 0, 0, 0.1 );
|
|
|
|
}
|
|
|
|
|
|
|
|
.button.active .dropdown {
|
|
|
|
display: block;
|
|
|
|
}
|
|
|
|
|
|
|
|
.dropdown-flip-x .dropdown {
|
|
|
|
left: auto;
|
|
|
|
right: 0;
|
2012-10-24 03:33:59 +02: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: http://core.svn.wordpress.org/trunk@22362 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-11-04 23:59:12 +01:00
|
|
|
|
|
|
|
.dropdown-flip-y .dropdown {
|
|
|
|
top: auto;
|
|
|
|
bottom: 100%;
|
|
|
|
}
|