@curvenote/schema
Version:
Schema and markdown parser for @curvenote/editor
75 lines • 2.07 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.toTex = exports.toMarkdown = exports.formatDatetime = exports.getDatetime = void 0;
const date_fns_1 = require("date-fns");
const types_1 = require("./types");
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();
}
exports.getDatetime = getDatetime;
function formatDatetime(datetime) {
try {
const d = getDatetime(datetime);
const f = (0, date_fns_1.format)(d, 'LLL d, yyyy');
return { d, f };
}
catch (e) {
return formatDatetime(new Date());
}
}
exports.formatDatetime = formatDatetime;
const time = {
group: types_1.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,
};
},
};
const toMarkdown = (state, node) => {
const { f } = formatDatetime(node.attrs.datetime);
state.write(f);
};
exports.toMarkdown = toMarkdown;
const toTex = (state, node) => {
const { f } = formatDatetime(node.attrs.datetime);
state.write(f);
};
exports.toTex = toTex;
exports.default = time;
//# sourceMappingURL=time.js.map
;