diff --git a/src/js/gutenberg/blocks/bibliography/index.ts b/src/js/gutenberg/blocks/bibliography/index.ts index 8d088713..b24252ed 100644 --- a/src/js/gutenberg/blocks/bibliography/index.ts +++ b/src/js/gutenberg/blocks/bibliography/index.ts @@ -1,13 +1,13 @@ import { BlockConfig, createBlock } from '@wordpress/blocks'; import { __ } from '@wordpress/i18n'; -import { Bibliography } from 'utils/processor'; +import Processor from 'utils/processor'; import BibliographyEdit from './edit'; import BibliographySave from './save'; export interface Attributes { - items: Bibliography['items']; + items: Processor.BibItem[]; heading: string; headingLevel: number; isToggleable: boolean; diff --git a/src/js/gutenberg/blocks/static-bibliography/index.tsx b/src/js/gutenberg/blocks/static-bibliography/index.tsx index 4a348a3c..e9454ccc 100644 --- a/src/js/gutenberg/blocks/static-bibliography/index.tsx +++ b/src/js/gutenberg/blocks/static-bibliography/index.tsx @@ -2,14 +2,14 @@ import { BlockConfig, createBlock } from '@wordpress/blocks'; import { __ } from '@wordpress/i18n'; import uuid from 'uuid/v4'; -import { Bibliography } from 'utils/processor'; +import Processor from 'utils/processor'; import { stripListItem } from '../'; import edit from './edit'; import save from './save'; export interface Attributes { - items: Bibliography['items']; + items: Processor.BibItem[]; orderedList: boolean; } diff --git a/src/js/stores/data/actions.ts b/src/js/stores/data/actions.ts index f4617ba4..9b577f01 100644 --- a/src/js/stores/data/actions.ts +++ b/src/js/stores/data/actions.ts @@ -1,9 +1,8 @@ import { Block, createBlock, parse } from '@wordpress/blocks'; import { dispatch, select, subscribe } from '@wordpress/data'; -import { RebuildProcessorStateData } from 'citeproc'; import { getEditorDOM, removeItems } from 'utils/editor'; -import Processor, { Bibliography } from 'utils/processor'; +import Processor from 'utils/processor'; import { Style } from './'; import { Actions } from './constants'; @@ -99,7 +98,7 @@ function* save() { yield dispatch('core/editor').savePost(); } -function* setBibliography({ items, meta }: Bibliography) { +function* setBibliography({ items, meta }: Processor.Bibliography) { const blocksList = select('core/editor').getBlocks(); const bibliographyBlock = blocksList.find( block => block.name === 'abt/bibliography', @@ -124,14 +123,15 @@ function* setBibliography({ items, meta }: Bibliography) { } } -function* updateEditorCitations(citations: RebuildProcessorStateData[]) { +function* updateEditorCitations(citations: Processor.CitationMeta[]) { const doc = getEditorDOM(); - for (const [id, , html] of citations) { + for (const { html, id, sortedItems } of citations) { const node = doc.querySelector( `.abt-citation[id="${id}"]`, ); if (node) { node.innerHTML = html; + node.dataset.items = sortedItems; if (node.childElementCount > 0) { node.dataset.hasChildren = 'true'; } diff --git a/src/js/utils/editor.ts b/src/js/utils/editor.ts index c42f4779..869266e6 100644 --- a/src/js/utils/editor.ts +++ b/src/js/utils/editor.ts @@ -2,7 +2,7 @@ import { select } from '@wordpress/data'; import _ from 'lodash'; import uuid from 'uuid/v4'; -import { Bibliography } from 'utils/processor'; +import Processor from 'utils/processor'; const OBJECT_REPLACEMENT_CHARACTER = '\ufffc'; @@ -28,7 +28,7 @@ export function parseDataAttrs({ maxoffset, linespacing, secondFieldAlign, -}: { [k in keyof Bibliography['meta']]?: string }) { +}: { [k in keyof Processor.BibMeta]?: string }) { return { ...(entryspacing ? { 'data-entryspacing': `${entryspacing}` } diff --git a/types/citeproc.d.ts b/types/citeproc.d.ts index f897bdab..48a9e7a3 100644 --- a/types/citeproc.d.ts +++ b/types/citeproc.d.ts @@ -108,6 +108,17 @@ declare module 'citeproc' { 'second-field-align': 'flush' | 'margin' | false; } + // I have literally no idea what any of this is for... + interface SortedItemMeta { + 'first-reference-note-number': number; + id: string; + item: CSL.Data; + 'near-note': boolean; + position: number; + section_form_override: string; + sortkeys: string[]; + } + export interface Citation { /** ID of the HTMLSpanElement of the single citation element */ citationID: string; @@ -132,19 +143,23 @@ declare module 'citeproc' { }; } + interface StatefulCitation extends Citation { + sortedItems: Array<[CSL.Data, SortedItemMeta]>; + } + interface CitationRegistry { /** * Retrieve citation(s) by a HTMLSpanElement ID */ - citationById: Record; + citationById: Record; /** * Array of `Citation` ordered ascending by use in the document */ - citationByIndex: Citation[]; + citationByIndex: StatefulCitation[]; /** * Retrieve citation by the unique citation ID */ - citationsByItemId: Record; + citationsByItemId: Record; } interface Registry {