@atlaskit/editor-wikimarkup-transformer
Version:
Wiki markup transformer for JIRA and Confluence
100 lines (98 loc) • 5.61 kB
JavaScript
"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);
}
}