Issue #3049943 by bnjmnm, phenaproxima, Wim Leers, lauriii, alexpott: Media library should not use js- prefixed CSS classes for styling
parent
20faabff8c
commit
0ec69d3f68
|
@ -121,7 +121,7 @@ display:
|
||||||
preserve_tags: ''
|
preserve_tags: ''
|
||||||
html: false
|
html: false
|
||||||
element_type: ''
|
element_type: ''
|
||||||
element_class: js-click-to-select-checkbox
|
element_class: js-click-to-select-checkbox media-library-item__click-to-select-checkbox
|
||||||
element_label_type: ''
|
element_label_type: ''
|
||||||
element_label_class: ''
|
element_label_class: ''
|
||||||
element_label_colon: false
|
element_label_colon: false
|
||||||
|
@ -492,7 +492,7 @@ display:
|
||||||
preserve_tags: ''
|
preserve_tags: ''
|
||||||
html: false
|
html: false
|
||||||
element_type: ''
|
element_type: ''
|
||||||
element_class: js-click-to-select-checkbox
|
element_class: js-click-to-select-checkbox media-library-item__click-to-select-checkbox
|
||||||
element_label_type: ''
|
element_label_type: ''
|
||||||
element_label_class: ''
|
element_label_class: ''
|
||||||
element_label_colon: false
|
element_label_colon: false
|
||||||
|
@ -846,7 +846,7 @@ display:
|
||||||
element_label_class: ''
|
element_label_class: ''
|
||||||
element_label_colon: false
|
element_label_colon: false
|
||||||
element_wrapper_type: ''
|
element_wrapper_type: ''
|
||||||
element_wrapper_class: js-click-to-select-checkbox
|
element_wrapper_class: js-click-to-select-checkbox media-library-item__click-to-select-checkbox
|
||||||
element_default_classes: true
|
element_default_classes: true
|
||||||
empty: ''
|
empty: ''
|
||||||
hide_empty: false
|
hide_empty: false
|
||||||
|
@ -1057,7 +1057,7 @@ display:
|
||||||
relationship: none
|
relationship: none
|
||||||
entity_type: media
|
entity_type: media
|
||||||
plugin_id: media_library_select_form
|
plugin_id: media_library_select_form
|
||||||
element_wrapper_class: js-click-to-select-checkbox
|
element_wrapper_class: js-click-to-select-checkbox media-library-item__click-to-select-checkbox
|
||||||
element_class: ''
|
element_class: ''
|
||||||
thumbnail__target_id:
|
thumbnail__target_id:
|
||||||
id: thumbnail__target_id
|
id: thumbnail__target_id
|
||||||
|
|
|
@ -47,7 +47,7 @@
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
.media-library-item .click-to-select-trigger {
|
.media-library-item__click-to-select-trigger {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
@ -57,14 +57,14 @@
|
||||||
align-self: flex-end;
|
align-self: flex-end;
|
||||||
}
|
}
|
||||||
|
|
||||||
.media-library-item .js-click-to-select-checkbox {
|
.media-library-item__click-to-select-checkbox {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
top: 16px;
|
top: 16px;
|
||||||
left: 16px; /* LTR */
|
left: 16px; /* LTR */
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
[dir="rtl"] .media-library-item .js-click-to-select-checkbox {
|
[dir="rtl"] .media-library-item__click-to-select-checkbox {
|
||||||
right: 16px;
|
right: 16px;
|
||||||
left: auto;
|
left: auto;
|
||||||
}
|
}
|
||||||
|
|
|
@ -322,6 +322,11 @@
|
||||||
border: 1px solid #dbdbdb;
|
border: 1px solid #dbdbdb;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Media library widget weight field styles. */
|
||||||
|
.media-library-item--grid .form-item {
|
||||||
|
margin: 0.75em;
|
||||||
|
}
|
||||||
|
|
||||||
/* The selected items in the add form should be shown a bit smaller. */
|
/* The selected items in the add form should be shown a bit smaller. */
|
||||||
.media-library-add-form__selected-media .media-library-item--small {
|
.media-library-add-form__selected-media .media-library-item--small {
|
||||||
width: 33.3%;
|
width: 33.3%;
|
||||||
|
@ -404,12 +409,12 @@
|
||||||
border-color: #0076c0;
|
border-color: #0076c0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.media-library-item--grid .js-click-to-select-checkbox input {
|
.media-library-item__click-to-select-checkbox input {
|
||||||
width: 20px;
|
width: 20px;
|
||||||
height: 20px;
|
height: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.media-library-item--grid .js-click-to-select-checkbox .form-item {
|
.media-library-item__click-to-select-checkbox .form-item {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -503,11 +508,6 @@
|
||||||
margin: 1em -8px;
|
margin: 1em -8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Media library widget weight field styles. */
|
|
||||||
.media-library-item--grid .form-item {
|
|
||||||
margin: 0.75em;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Media library widget edit and delete button styles.
|
* Media library widget edit and delete button styles.
|
||||||
*
|
*
|
||||||
|
|
|
@ -130,7 +130,7 @@ function media_library_preprocess_views_view_fields(&$variables) {
|
||||||
// styling and JavaScript mouseover and click events.
|
// styling and JavaScript mouseover and click events.
|
||||||
if ($variables['view']->id() === 'media_library' && isset($variables['fields']['rendered_entity'])) {
|
if ($variables['view']->id() === 'media_library' && isset($variables['fields']['rendered_entity'])) {
|
||||||
if (isset($variables['fields']['rendered_entity']->wrapper_attributes)) {
|
if (isset($variables['fields']['rendered_entity']->wrapper_attributes)) {
|
||||||
$variables['fields']['rendered_entity']->wrapper_attributes->addClass('js-click-to-select-trigger click-to-select-trigger');
|
$variables['fields']['rendered_entity']->wrapper_attributes->addClass('js-click-to-select-trigger media-library-item__click-to-select-trigger');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -529,3 +529,57 @@ function media_library_post_update_add_buttons_to_page_view() {
|
||||||
$view->storage->save(TRUE);
|
$view->storage->save(TRUE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add non js prefixed classes to checkboxes if not present.
|
||||||
|
*
|
||||||
|
* Note the inclusion of "update_8001" in the function name. This ensures the
|
||||||
|
* function is executed after media_library_post_update_table_display(), as
|
||||||
|
* hook_post_update_NAME() implementations within the same file are executed in
|
||||||
|
* alphanumeric order.
|
||||||
|
*/
|
||||||
|
function media_library_post_update_update_8001_checkbox_classes() {
|
||||||
|
$view = Views::getView('media_library');
|
||||||
|
if (!$view) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$display_items = [
|
||||||
|
[
|
||||||
|
'display_id' => 'default',
|
||||||
|
'option' => 'element_class',
|
||||||
|
'field' => 'media_bulk_form',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'display_id' => 'page',
|
||||||
|
'option' => 'element_class',
|
||||||
|
'field' => 'media_bulk_form',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'display_id' => 'widget',
|
||||||
|
'option' => 'element_wrapper_class',
|
||||||
|
'field' => 'media_library_select_form',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'display_id' => 'widget_table',
|
||||||
|
'option' => 'element_wrapper_class',
|
||||||
|
'field' => 'media_library_select_form',
|
||||||
|
],
|
||||||
|
];
|
||||||
|
foreach ($display_items as $item) {
|
||||||
|
$display_id = $item['display_id'];
|
||||||
|
$option = $item['option'];
|
||||||
|
$field = $item['field'];
|
||||||
|
$display = &$view->storage->getDisplay($display_id);
|
||||||
|
|
||||||
|
// Only proceed if the display, field and option exist.
|
||||||
|
if (!$display || !isset($display['display_options']['fields'][$field][$option])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$classes = $display['display_options']['fields'][$field][$option];
|
||||||
|
$classes_array = preg_split('/\s+/', $classes);
|
||||||
|
if (!in_array('media-library-item__click-to-select-checkbox', $classes_array, TRUE)) {
|
||||||
|
$display['display_options']['fields'][$field][$option] = "$classes media-library-item__click-to-select-checkbox";
|
||||||
|
$view->save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -429,7 +429,7 @@ abstract class AddFormBase extends FormBase {
|
||||||
'#type' => 'container',
|
'#type' => 'container',
|
||||||
'#attributes' => [
|
'#attributes' => [
|
||||||
'class' => [
|
'class' => [
|
||||||
'js-click-to-select-checkbox',
|
'js-click-to-select-checkbox media-library-item__click-to-select-checkbox',
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
'select_checkbox' => [
|
'select_checkbox' => [
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,83 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Drupal\Tests\media_library\Functional\Update;
|
||||||
|
|
||||||
|
use Drupal\FunctionalTests\Update\UpdatePathTestBase;
|
||||||
|
use Drupal\views\Views;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests the media library module updates views checkbox classes.
|
||||||
|
*
|
||||||
|
* @group media_library
|
||||||
|
* @group legacy
|
||||||
|
*/
|
||||||
|
class MediaLibraryUpdateCheckboxClassesTest extends UpdatePathTestBase {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function setDatabaseDumpFiles() {
|
||||||
|
$this->databaseDumpFiles = [
|
||||||
|
__DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.4.0.bare.standard.php.gz',
|
||||||
|
__DIR__ . '/../../../../../media/tests/fixtures/update/drupal-8.4.0-media_installed.php',
|
||||||
|
__DIR__ . '/../../../fixtures/update/drupal-8.8.x-media_library-update-views-classnames-3049943.php',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests that non js prefixes are added to checkboxes in the media view.
|
||||||
|
*
|
||||||
|
* @see media_library_post_update_update_8001_checkbox_classes()
|
||||||
|
*/
|
||||||
|
public function testAddNonPrefixedClasses() {
|
||||||
|
$view = Views::getView('media_library');
|
||||||
|
|
||||||
|
$display_items = [
|
||||||
|
[
|
||||||
|
'display_id' => 'default',
|
||||||
|
'option' => 'element_class',
|
||||||
|
'field' => 'media_bulk_form',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'display_id' => 'page',
|
||||||
|
'option' => 'element_class',
|
||||||
|
'field' => 'media_bulk_form',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'display_id' => 'widget',
|
||||||
|
'option' => 'element_wrapper_class',
|
||||||
|
'field' => 'media_library_select_form',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'display_id' => 'widget_table',
|
||||||
|
'option' => 'element_wrapper_class',
|
||||||
|
'field' => 'media_library_select_form',
|
||||||
|
],
|
||||||
|
];
|
||||||
|
foreach ($display_items as $item) {
|
||||||
|
$display_id = $item['display_id'];
|
||||||
|
$option = $item['option'];
|
||||||
|
$field = $item['field'];
|
||||||
|
$display = $view->storage->getDisplay($display_id);
|
||||||
|
$classes_string = $display['display_options']['fields'][$field][$option];
|
||||||
|
$classes = preg_split('/\s+/', $classes_string);
|
||||||
|
$this->assertContains('js-click-to-select-checkbox', $classes);
|
||||||
|
$this->assertNotContains('media-library-item__click-to-select-checkbox', $classes);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->runUpdates();
|
||||||
|
$view = Views::getView('media_library');
|
||||||
|
|
||||||
|
foreach ($display_items as $item) {
|
||||||
|
$display_id = $item['display_id'];
|
||||||
|
$option = $item['option'];
|
||||||
|
$field = $item['field'];
|
||||||
|
$display = $view->storage->getDisplay($display_id);
|
||||||
|
$classes_string = $display['display_options']['fields'][$field][$option];
|
||||||
|
$classes = preg_split('/\s+/', $classes_string);
|
||||||
|
$this->assertContains('js-click-to-select-checkbox', $classes);
|
||||||
|
$this->assertContains('media-library-item__click-to-select-checkbox', $classes, "Class 'media-library-item__click-to-select-checkbox' not found in display: $display_id");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue