Ghost/core/client/app/utils/ed-image-manager.js
Hannah Wolfe 5db6fc4f18 No more CodeMirror
closes #4368, fixes #1240 (spellcheck), fixes #4974 & fixes #4983 (caret positioning bugs)

- Drop CodeMirror in favour of a plain text area
- Use rangyinputs to handle selections cross-browser
- Create an API for interacting with the textarea
- Replace marker manager with a much simpler image manager
- Reimplement shortcuts, including some bug fixes
2015-03-17 14:32:55 +00:00

54 lines
1.7 KiB
JavaScript

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
};