From 9406e12494872dcf2dc504896bfdc6b2416180ae Mon Sep 17 00:00:00 2001 From: Alexander O'Neill Date: Thu, 1 Nov 2018 07:33:14 -0300 Subject: [PATCH] WIP Start work on combined notes and references. --- bibcite_footnotes.module | 23 ++++++++++++------- .../reference_footnotes/dialogs/footnotes.js | 13 +++++------ js/plugins/reference_footnotes/plugin.js | 9 +++++--- .../Filter/ReferenceFootnotesFilter.php | 8 ++++--- 4 files changed, 32 insertions(+), 21 deletions(-) diff --git a/bibcite_footnotes.module b/bibcite_footnotes.module index 08d9987..8bb7e77 100644 --- a/bibcite_footnotes.module +++ b/bibcite_footnotes.module @@ -69,7 +69,7 @@ function bibcite_footnotes_preprocess_footnote_list(&$variables) { ], ]; $build = []; - $reference_entity_id = _bibcite_footnotes_get_reference_entity_id_from_bibcite_footnote($fn['text']); + $reference_entity_id = _bibcite_footnotes_get_reference_entity_id_from_bibcite_footnote($fn['reference']); $footnote_link_text = $dont_show_backlink_text && $reference_entity_id ? '^' : $fn['value']; if (!is_array($fn['ref_id'])) { @@ -99,8 +99,21 @@ function bibcite_footnotes_preprocess_footnote_list(&$variables) { } + if (!empty($fn['text'])) { + $note_build[] = $build + ['#type' => 'markup', '#markup' => ' ' . $fn['text']]; + 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); + + $notes['#items'][] = $note_item; + } + if (!empty($reference_entity_id)) { $citation_build = $citation_tools->getRenderableReference($reference_entity_id); + $build[] = $citation_build; $render = render($build); $item['#markup'] = $render; @@ -108,13 +121,7 @@ function bibcite_footnotes_preprocess_footnote_list(&$variables) { $references['#items'][] = $item; } - else { - $build[] = ['#type' => 'markup', '#markup' => ' ' . $fn['text']]; - $render = render($build); - $item['#markup'] = $render; - $notes['#items'][] = $item; - } } $variables['notes'] = $notes; @@ -149,7 +156,7 @@ function bibcite_footnotes_preprocess_footnote_link(&$variables) { $class = 'see-footnote'; // Generate the hover text $citation_tools = new CitationTools(); - $citation_entity_id = _bibcite_footnotes_get_reference_entity_id_from_bibcite_footnote($fn['text']); + $citation_entity_id = _bibcite_footnotes_get_reference_entity_id_from_bibcite_footnote($fn['reference']); $citation_data = $citation_tools->getRenderableReference($citation_entity_id); // Citation contains a page reference, so construct parenthetical footnote. diff --git a/js/plugins/reference_footnotes/dialogs/footnotes.js b/js/plugins/reference_footnotes/dialogs/footnotes.js index e616600..0f4a002 100644 --- a/js/plugins/reference_footnotes/dialogs/footnotes.js +++ b/js/plugins/reference_footnotes/dialogs/footnotes.js @@ -18,7 +18,7 @@ label: Drupal.t('Reference Footnote item:'), setup: function (element) { if (isEdit) - this.setValue(element.getText()); + this.setValue(element.getAttribute('reference')); } }, { @@ -27,10 +27,10 @@ label: Drupal.t('Or add free-form footnote text :'), setup: function (element) { if (isEdit) { - var text = element.getText(); - if (!text.match(/\[bibcite_reference:(\d*)\]/)) { - this.setValue(text); - } + var text = element.getText(); + + this.setValue(text); + } } }, @@ -70,9 +70,8 @@ onOk : function() { var referenceNote = this.getValueOf('info', 'reference_footnote'); var textNote = this.getValueOf('info', 'footnote'); - var value = textNote ? textNote : referenceNote; var page = this.getValueOf('info', 'page'); - CKEDITOR.plugins.reference_footnotes.createFootnote( editor, this.realObj, value, this.getValueOf('info', 'value'), page); + CKEDITOR.plugins.reference_footnotes.createFootnote( editor, this.realObj, textNote, this.getValueOf('info', 'value'), referenceNote, page); delete this.fakeObj; delete this.realObj; } diff --git a/js/plugins/reference_footnotes/plugin.js b/js/plugins/reference_footnotes/plugin.js index c2392d7..41f2e90 100644 --- a/js/plugins/reference_footnotes/plugin.js +++ b/js/plugins/reference_footnotes/plugin.js @@ -29,10 +29,10 @@ init: function( editor ) { editor.addCommand('createreferencefootnotes', new CKEDITOR.dialogCommand('createreferencefootnotes', { - allowedContent: 'fn[value][page]' + allowedContent: 'fn[value]' })); editor.addCommand('editreferencefootnotes', new CKEDITOR.dialogCommand('editreferencefootnotes', { - allowedContent: 'fn[value][page]' + allowedContent: 'fn[value]' })); // Drupal Wysiwyg requirement: The first argument to editor.ui.addButton() @@ -94,7 +94,7 @@ })(); CKEDITOR.plugins.reference_footnotes = { - createFootnote: function( editor, origElement, text, value, page) { + createFootnote: function( editor, origElement, text, value, reference, page) { if (!origElement) { var realElement = CKEDITOR.dom.element.createFromHtml(''); } @@ -109,6 +109,9 @@ CKEDITOR.plugins.reference_footnotes = { if (page && page.length > 0) { realElement.setAttribute('page', page); } + if (reference && reference.length > 0) { + realElement.setAttribute('reference', reference); + } var fakeElement = editor.createFakeElement( realElement , 'cke_reference_footnote', 'hiddenfield', false ); editor.insertElement(fakeElement); diff --git a/src/Plugin/Filter/ReferenceFootnotesFilter.php b/src/Plugin/Filter/ReferenceFootnotesFilter.php index 1af1fae..3b24eed 100644 --- a/src/Plugin/Filter/ReferenceFootnotesFilter.php +++ b/src/Plugin/Filter/ReferenceFootnotesFilter.php @@ -163,7 +163,7 @@ class ReferenceFootnotesFilter extends FootnotesFilter { // (fixes http://drupal.org/node/194558). $randstr = $this->randstr(); - $value = $this->extractAtribute($matches, 'value'); + $value = $this->extractAttribute($matches, 'value'); if ($value) { // A value label was found. If it is numeric, record it in $n so further @@ -191,7 +191,8 @@ class ReferenceFootnotesFilter extends FootnotesFilter { // attribute. $value_id = preg_replace('|[^\w\-]|', '', $value); - $page = $this->extractAtribute($matches, 'page'); + $page = $this->extractAttribute($matches, 'page'); + $reference = $this->extractAttribute($matches, 'reference'); // Create a sanitized version of $text that is suitable for using as HTML // attribute value. (In particular, as the title attribute to the footnote @@ -211,6 +212,7 @@ class ReferenceFootnotesFilter extends FootnotesFilter { 'text' => $matches[2], 'text_clean' => $text_clean, 'page' => $page, + 'reference' => $reference, 'fn_id' => 'footnote' . $value_id . '_' . $randstr, 'ref_id' => 'footnoteref' . $value_id . '_' . $randstr, ]; @@ -286,7 +288,7 @@ class ReferenceFootnotesFilter extends FootnotesFilter { * * @return string */ - protected function extractAtribute($matches, $attribute): string { + protected function extractAttribute($matches, $attribute): string { $value = ''; // Did the pattern match anything in the tag? if ($matches[1]) {