var imageMarkdownRegex = /^!(?:\[([^\n\]]*)\])(?:\(([^\n\]]*)\))?$/gim; // Process the markdown content and find all of the locations where there is an image markdown block function parse(stringToParse) { var m, images = []; while ((m = imageMarkdownRegex.exec(stringToParse)) !== null) { images.push(m); } return images; } // Loop through all dropzones in the preview and find which one was the target of the upload function getZoneIndex(element) { var zones = document.querySelectorAll('.js-entry-preview .js-drop-zone'), i; for (i = 0; i < zones.length; i += 1) { if (zones.item(i) === element) { return i; } } return -1; } // Figure out the start and end of the selection range for the src in the markdown, so we know what to replace function getSrcRange(content, element) { var images = parse(content), index = getZoneIndex(element), replacement = {}; if (index > -1) { // [1] matches the alt test, and 2 matches the url between the () // if the () are missing entirely, which is valid, [2] will be undefined and we'll need to treat this case // a little differently if (images[index][2] === undefined) { replacement.needsParens = true; replacement.start = content.indexOf(']', images[index].index) + 1; replacement.end = replacement.start; } else { replacement.start = content.indexOf('(', images[index].index) + 1; replacement.end = replacement.start + images[index][2].length; } return replacement; } return false; } export default { getSrcRange: getSrcRange };