From 69700fa2f749db1f294364902a7adc18ed96c30b Mon Sep 17 00:00:00 2001 From: Alexander O'Neill Date: Mon, 5 Nov 2018 14:47:24 -0400 Subject: [PATCH] Put more logic into Filter from theme preprocess function. --- bibcite_footnotes.module | 41 ++++++++----------- .../Filter/ReferenceFootnotesFilter.php | 16 +++++--- 2 files changed, 28 insertions(+), 29 deletions(-) diff --git a/bibcite_footnotes.module b/bibcite_footnotes.module index e505106..ea7a563 100644 --- a/bibcite_footnotes.module +++ b/bibcite_footnotes.module @@ -10,6 +10,7 @@ use Drupal\Core\Routing\RouteMatchInterface; use Drupal\Core\Url; use Drupal\Core\Link; use Drupal\bibcite_footnotes\CitationTools; +use Drupal\bibcite_footnotes\Plugin\Filter\ReferenceFootnotesFilter; /** * Implements hook_theme(). @@ -60,20 +61,20 @@ function bibcite_footnotes_help($route_name, RouteMatchInterface $route_match) { * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException */ function bibcite_footnotes_preprocess_bibcite_footnote_list(&$variables) { - $config = \Drupal::config('filter.format.rich_text_references');//filters.filter_reference_footnotes.settings'); - $footnotes = $variables['footnotes']; + $config = $variables['config']; + $footnotes = $variables['notes']; $notes = [ '#theme' => 'item_list', '#list_type' => 'ul', - '#title' => $config->get('filters.filter_reference_footnotes.settings.notes_section_label'), + '#title' => $variables['note_type'] == ReferenceFootnotesFilter::ENDNOTE ? $config['notes_section_label'] : $config['references_section_label'], '#attributes' => ['class' => 'footnotes'], '#wrapper_attributes' => ['class' => 'container'], ]; $notes['#attached']['library'][] = 'bibcite_footnotes/reference_footnote'; - $dont_show_backlink_text = $config->get('filters.filter_reference_footnotes.settings.reference_dont_show_backlink_text'); - $sort_references_by = $config->get('filters.filter_reference_footnotes.settings.reference_sort_by'); + $dont_show_backlink_text = $config['dont_show_backlink_text']; + $sort_references_by = $config['reference_sort_by']; $citation_tools = new CitationTools(); foreach ($footnotes as $fn) { $item = [ @@ -111,21 +112,16 @@ function bibcite_footnotes_preprocess_bibcite_footnote_list(&$variables) { $override_page_in_citation = FALSE; } - if (!empty($fn['text'])) { + if (!empty($fn['text']) && $variables['note_type'] == ReferenceFootnotesFilter::ENDNOTE) { // Handle the case where an endnote contains text and a reference. // It will appear in both lists. But the link text for the endnote should // always be the title of the note. So make a copy of the biuld arrray // and change the link text. - $note_build = $build + ['#type' => 'markup', '#markup' => ' ' . $fn['text'] . '']; - $note_build['footnote-link'] = Link::fromTextAndUrl($fn['value'], $url)->toRenderable(); - if (!empty($reference_entity_id)) { - $citation_build = $citation_tools->getRenderableReference($reference_entity_id); - $note_build[] = $citation_build; - } - $note_item = [] + $item; - $note_item['#markup'] = render($note_build); + $build['#type'] = 'markup'; + $build['#markup'] = ' ' . $fn['text'] . ''; + $build['footnote-link'] = Link::fromTextAndUrl($fn['value'], $url)->toRenderable(); + - $notes['#items'][] = $note_item; } if (!empty($reference_entity_id)) { @@ -135,20 +131,17 @@ function bibcite_footnotes_preprocess_bibcite_footnote_list(&$variables) { } $build[] = $citation_build; $render = render($build); - $item['#markup'] = $render; - $item['sort'] = trim(strip_tags(render($citation_build))); - $references['#items'][] = $item; + $item['sort'] = trim(strip_tags(render($citation_build))); } - + $item['#markup'] = $render; + $notes['#items'][] = $item; } - $variables['notes'] = $notes; - - if ($sort_references_by == 'alphabetical') { - usort($references['#items'], '_bibcite_footnotes_reference_array_cmp'); + if ($sort_references_by == 'alphabetical' && $variables['note_type'] == ReferenceFootnotesFilter::REFERENCE) { + usort($notes['#items'], '_bibcite_footnotes_reference_array_cmp'); } - $variables['references'] = $references; + $variables['notes'] = $notes; } function _bibcite_footnotes_reference_array_cmp($a, $b) { diff --git a/src/Plugin/Filter/ReferenceFootnotesFilter.php b/src/Plugin/Filter/ReferenceFootnotesFilter.php index 25d4090..ac1cea6 100644 --- a/src/Plugin/Filter/ReferenceFootnotesFilter.php +++ b/src/Plugin/Filter/ReferenceFootnotesFilter.php @@ -10,7 +10,7 @@ use Drupal\footnotes\Plugin\Filter\FootnotesFilter; * Provides a base filter for Reference Footnotes filter. * * @Filter( - * id = "filter_reference_footnotes", + * id = "filter_reference_footnotes",footnote_list * module = "bibcite_footnotes", * title = @Translation("Reference Footnotes filter"), * description = @Translation("You can insert footnotes directly into texts."), @@ -155,11 +155,19 @@ class ReferenceFootnotesFilter extends FootnotesFilter { // themed as a list $markup = [ '#theme' => 'bibcite_footnote_list', - '#footnotes' => $notes, + '#notes' => $notes, '#note_type' => self::ENDNOTE, '#config' => $this->settings, ]; $str = \Drupal::service('renderer')->render($markup, FALSE); + + $markup = [ + '#theme' => 'bibcite_footnote_list', + '#notes' => $references, + '#note_type' => self::REFERENCE, + '#config' => $this->settings, + ]; + $str .= \Drupal::service('renderer')->render($markup, FALSE); } // Reset the static variables so they can be used again next time. $n = 0; @@ -336,7 +344,6 @@ class ReferenceFootnotesFilter extends FootnotesFilter { $prev_reference_id = $fn['reference']; // Could be empty, that's OK. } - ksm($footnotes); } protected function extractNotesByType($type, $footnotes) { @@ -344,7 +351,7 @@ class ReferenceFootnotesFilter extends FootnotesFilter { foreach ($footnotes as $fn) { switch ($type) { case self::ENDNOTE: - if (!empty(fn['text'])) { + if (!empty($fn['text'])) { $notes[] = $fn; } break; @@ -354,7 +361,6 @@ class ReferenceFootnotesFilter extends FootnotesFilter { } break; } - ksm($fn); } return $notes; }