UNPKG

@curvenote/schema

Version:

Schema and markdown parser for @curvenote/editor

68 lines 1.77 kB
import { format } from 'date-fns'; import { NodeGroups } from './types'; export function getDatetime(object) { if (object == null) { return new Date(); } if (object instanceof Date) { return object; } if (typeof object === 'string') { return new Date(object); } // eslint-disable-next-line no-console console.error(`Could not parse date: ${object}`); return new Date(); } export function formatDatetime(datetime) { try { const d = getDatetime(datetime); const f = format(d, 'LLL d, yyyy'); return { d, f }; } catch (e) { return formatDatetime(new Date()); } } const time = { group: NodeGroups.inline, inline: true, marks: '', draggable: true, attrs: { datetime: { default: null }, }, toDOM(node) { const { d, f } = formatDatetime(node.attrs.datetime); return ['time', { datetime: d.toISOString() }, f]; }, parseDOM: [ { tag: 'time', getAttrs(dom) { return { datetime: getDatetime(dom.getAttribute('datetime')), }; }, }, ], attrsFromMyst: (token) => ({ datetime: getDatetime(token.time) }), toMyst: (props) => { const { d, f } = formatDatetime(props.datetime); return { type: 'time', time: d.toISOString(), value: f, }; }, }; export const toMarkdown = (state, node) => { const { f } = formatDatetime(node.attrs.datetime); state.write(f); }; export const toTex = (state, node) => { const { f } = formatDatetime(node.attrs.datetime); state.write(f); }; export default time; //# sourceMappingURL=time.js.map