UNPKG

@atlaskit/editor-wikimarkup-transformer

Version:

Wiki markup transformer for JIRA and Confluence

94 lines (93 loc) 4.76 kB
import { LINK_TEXT_REGEXP } from '../tokenize/link-text'; const defaultWidth = 200; const defaultHeight = 183; const clamp = (input, lower, upper) => { if (upper !== undefined) { input = input <= upper ? input : upper; } if (lower !== undefined) { input = input >= lower ? input : lower; } return input; }; export default function getMediaSingleNodeView(schema, filename, attrs, context = {}) { var _context$defaults, _context$defaults$med, _context$defaults3, _context$defaults3$me; const { media, mediaSingle } = schema.nodes; const { link } = schema.marks; const mediaMarks = []; let mediaNodeAttrs = {}; if ((context === null || context === void 0 ? void 0 : (_context$defaults = context.defaults) === null || _context$defaults === void 0 ? void 0 : (_context$defaults$med = _context$defaults.media) === null || _context$defaults$med === void 0 ? void 0 : _context$defaults$med.width) !== null) { var _context$defaults$med2, _context$defaults2, _context$defaults2$me; mediaNodeAttrs.width = (_context$defaults$med2 = context === null || context === void 0 ? void 0 : (_context$defaults2 = context.defaults) === null || _context$defaults2 === void 0 ? void 0 : (_context$defaults2$me = _context$defaults2.media) === null || _context$defaults2$me === void 0 ? void 0 : _context$defaults2$me.width) !== null && _context$defaults$med2 !== void 0 ? _context$defaults$med2 : defaultWidth; } if ((context === null || context === void 0 ? void 0 : (_context$defaults3 = context.defaults) === null || _context$defaults3 === void 0 ? void 0 : (_context$defaults3$me = _context$defaults3.media) === null || _context$defaults3$me === void 0 ? void 0 : _context$defaults3$me.height) !== null) { var _context$defaults$med3, _context$defaults4, _context$defaults4$me; mediaNodeAttrs.height = (_context$defaults$med3 = context === null || context === void 0 ? void 0 : (_context$defaults4 = context.defaults) === null || _context$defaults4 === void 0 ? void 0 : (_context$defaults4$me = _context$defaults4.media) === null || _context$defaults4$me === void 0 ? void 0 : _context$defaults4$me.height) !== null && _context$defaults$med3 !== void 0 ? _context$defaults$med3 : defaultHeight; } // Ignored via go/ees005 // eslint-disable-next-line @typescript-eslint/no-explicit-any const mediaSingleAttrs = { layout: 'center' }; if (attrs.width && attrs.width.endsWith('%')) { const parsed = parseInt(attrs.width, 10); if (!isNaN(parsed)) { mediaSingleAttrs.width = clamp(parsed, 0, 100); } mediaNodeAttrs = {}; } else { if (attrs.width) { const parsed = parseInt(attrs.width, 10); if (!isNaN(parsed)) { mediaNodeAttrs.width = parsed; } } if (attrs.height) { const parsed = parseInt(attrs.height, 10); if (!isNaN(parsed)) { mediaNodeAttrs.height = parsed; } } } if (attrs.href) { // Ignored via go/ees005 // eslint-disable-next-line require-unicode-regexp const href = attrs.href.replace(/^"(.+)"$/, '$1'); mediaMarks.push(link.create({ href })); } if (attrs.alt) { // strip wrapping quotes if they exist // Ignored via go/ees005 // eslint-disable-next-line require-unicode-regexp const altText = attrs.alt.replace(/^"(.+)"$/, '$1'); mediaNodeAttrs.alt = altText; } if (filename.match(LINK_TEXT_REGEXP)) { const externalMediaNode = media.createChecked({ type: 'external', url: filename, ...mediaNodeAttrs }, undefined, mediaMarks); return mediaSingle.createChecked(mediaSingleAttrs, externalMediaNode); } else { var _context$conversion$m, _context$conversion, _context$conversion$m2, _context$conversion$m3; // try to look up media ID from conversion context const id = (_context$conversion$m = context === null || context === void 0 ? void 0 : (_context$conversion = context.conversion) === null || _context$conversion === void 0 ? void 0 : (_context$conversion$m2 = _context$conversion.mediaConversion) === null || _context$conversion$m2 === void 0 ? void 0 : (_context$conversion$m3 = _context$conversion$m2[filename]) === null || _context$conversion$m3 === void 0 ? void 0 : _context$conversion$m3.transform) !== null && _context$conversion$m !== void 0 ? _context$conversion$m : filename; // try to look up collection from media context const collection = context.hydration && context.hydration.media && context.hydration.media.targetCollectionId; const mediaNode = media.createChecked({ id, type: 'file', collection: collection || '', ...mediaNodeAttrs }, undefined, mediaMarks); return mediaSingle.createChecked(mediaSingleAttrs, mediaNode); } }