diff --git a/core/modules/contextual/js/contextual.js b/core/modules/contextual/js/contextual.js index c225b15..a8c8c22 100644 --- a/core/modules/contextual/js/contextual.js +++ b/core/modules/contextual/js/contextual.js @@ -101,7 +101,6 @@ ids.push($(this).attr('data-contextual-id')); }); - // Remove duplicates from the IDs array. ids = _.uniq(ids); var uncachedIDs = _.filter(ids, function initIfCached(contextualID) { diff --git a/core/modules/views/src/Plugin/Block/ViewsBlockBase.php b/core/modules/views/src/Plugin/Block/ViewsBlockBase.php index a6ae1ff..2a02e3e 100644 --- a/core/modules/views/src/Plugin/Block/ViewsBlockBase.php +++ b/core/modules/views/src/Plugin/Block/ViewsBlockBase.php @@ -190,6 +190,22 @@ public function blockSubmit($form, FormStateInterface $form_state) { * @deprecated Contextual links applied via DisplayPluginBase. */ protected function addContextualLinks(&$output, $block_type = 'block') { + // Do not add contextual links to an empty block. + if (!empty($output)) { + // Contextual links only work on blocks whose content is a renderable + // array, so if the block contains a string of already-rendered markup, + // convert it to an array. + if (is_string($output)) { + $output = ['#markup' => $output]; + } + + // views_add_contextual_links() needs the following information in + // order to be attached to the view. + $output['#view_id'] = $this->view->storage->id(); + $output['#view_display_show_admin_links'] = $this->view->getShowAdminLinks(); + $output['#view_display_plugin_id'] = $this->view->display_handler->getPluginId(); + views_add_contextual_links($output, $block_type, $this->displayID); + } } }