UNPKG

@atlaskit/editor-wikimarkup-transformer

Version:

Wiki markup transformer for JIRA and Confluence

100 lines (98 loc) 5.61 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = getMediaSingleNodeView; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _linkText = require("../tokenize/link-text"); function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } var defaultWidth = 200; var defaultHeight = 183; var clamp = function clamp(input, lower, upper) { if (upper !== undefined) { input = input <= upper ? input : upper; } if (lower !== undefined) { input = input >= lower ? input : lower; } return input; }; function getMediaSingleNodeView(schema, filename, attrs) { var _context$defaults, _context$defaults3; var context = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; var _schema$nodes = schema.nodes, media = _schema$nodes.media, mediaSingle = _schema$nodes.mediaSingle; var link = schema.marks.link; var mediaMarks = []; var mediaNodeAttrs = {}; if ((context === null || context === void 0 || (_context$defaults = context.defaults) === null || _context$defaults === void 0 || (_context$defaults = _context$defaults.media) === null || _context$defaults === void 0 ? void 0 : _context$defaults.width) !== null) { var _context$defaults$med, _context$defaults2; mediaNodeAttrs.width = (_context$defaults$med = context === null || context === void 0 || (_context$defaults2 = context.defaults) === null || _context$defaults2 === void 0 || (_context$defaults2 = _context$defaults2.media) === null || _context$defaults2 === void 0 ? void 0 : _context$defaults2.width) !== null && _context$defaults$med !== void 0 ? _context$defaults$med : defaultWidth; } if ((context === null || context === void 0 || (_context$defaults3 = context.defaults) === null || _context$defaults3 === void 0 || (_context$defaults3 = _context$defaults3.media) === null || _context$defaults3 === void 0 ? void 0 : _context$defaults3.height) !== null) { var _context$defaults$med2, _context$defaults4; mediaNodeAttrs.height = (_context$defaults$med2 = context === null || context === void 0 || (_context$defaults4 = context.defaults) === null || _context$defaults4 === void 0 || (_context$defaults4 = _context$defaults4.media) === null || _context$defaults4 === void 0 ? void 0 : _context$defaults4.height) !== null && _context$defaults$med2 !== void 0 ? _context$defaults$med2 : defaultHeight; } // Ignored via go/ees005 // eslint-disable-next-line @typescript-eslint/no-explicit-any var mediaSingleAttrs = { layout: 'center' }; if (attrs.width && attrs.width.endsWith('%')) { var parsed = parseInt(attrs.width, 10); if (!isNaN(parsed)) { mediaSingleAttrs.width = clamp(parsed, 0, 100); } mediaNodeAttrs = {}; } else { if (attrs.width) { var _parsed = parseInt(attrs.width, 10); if (!isNaN(_parsed)) { mediaNodeAttrs.width = _parsed; } } if (attrs.height) { var _parsed2 = parseInt(attrs.height, 10); if (!isNaN(_parsed2)) { mediaNodeAttrs.height = _parsed2; } } } if (attrs.href) { // Ignored via go/ees005 // eslint-disable-next-line require-unicode-regexp var href = attrs.href.replace(/^"(.+)"$/, '$1'); mediaMarks.push(link.create({ href: href })); } if (attrs.alt) { // strip wrapping quotes if they exist // Ignored via go/ees005 // eslint-disable-next-line require-unicode-regexp var altText = attrs.alt.replace(/^"(.+)"$/, '$1'); mediaNodeAttrs.alt = altText; } if (filename.match(_linkText.LINK_TEXT_REGEXP)) { var externalMediaNode = media.createChecked(_objectSpread({ type: 'external', url: filename }, mediaNodeAttrs), undefined, mediaMarks); return mediaSingle.createChecked(mediaSingleAttrs, externalMediaNode); } else { var _context$conversion$m, _context$conversion; // try to look up media ID from conversion context var id = (_context$conversion$m = context === null || context === void 0 || (_context$conversion = context.conversion) === null || _context$conversion === void 0 || (_context$conversion = _context$conversion.mediaConversion) === null || _context$conversion === void 0 || (_context$conversion = _context$conversion[filename]) === null || _context$conversion === void 0 ? void 0 : _context$conversion.transform) !== null && _context$conversion$m !== void 0 ? _context$conversion$m : filename; // try to look up collection from media context var collection = context.hydration && context.hydration.media && context.hydration.media.targetCollectionId; var mediaNode = media.createChecked(_objectSpread({ id: id, type: 'file', collection: collection || '' }, mediaNodeAttrs), undefined, mediaMarks); return mediaSingle.createChecked(mediaSingleAttrs, mediaNode); } }