@zodiac-ui/editor
Version:
A rich text editor for Angular based on `@atlaskit/editor-core`.
57 lines • 9.05 kB
JavaScript
import { keymap } from "prosemirror-keymap";
import { queueCards } from "../../card/pm-plugins/actions";
import { addLink, bindKeymapWithCommand, enter, escape, insertNewLine } from "../../../lib/keymaps/keymap";
import { pluginKey } from "./hyperlink";
import { getLinkMatch } from "../utils";
import { hideLinkToolbar, showLinkToolbar } from "../link.commands";
export function createKeymapPlugin(schema) {
const list = {};
bindKeymapWithCommand(addLink.common, showLinkToolbar("shortcut" /* SHORTCUT */), list);
bindKeymapWithCommand(enter.common, mayConvertLastWordToHyperlink, list);
bindKeymapWithCommand(insertNewLine.common, mayConvertLastWordToHyperlink, list);
bindKeymapWithCommand(escape.common, (state, dispatch, view) => {
const hyperlinkPlugin = pluginKey.getState(state);
if (hyperlinkPlugin.activeLinkMark) {
hideLinkToolbar()(state, dispatch);
if (view) {
view.focus();
}
return false;
}
return false;
}, list);
return keymap(list);
}
const mayConvertLastWordToHyperlink = (state, dispatch) => {
const nodeBefore = state.selection.$from.nodeBefore;
if (!nodeBefore || !nodeBefore.isText) {
return false;
}
const words = nodeBefore.text.split(' ');
const lastWord = words[words.length - 1];
const match = getLinkMatch(lastWord);
if (match) {
const hyperlinkedText = match.raw;
const start = state.selection.$from.pos - hyperlinkedText.length;
const end = state.selection.$from.pos;
if (state.doc.rangeHasMark(start, end, state.schema.marks.link)) {
return false;
}
const url = match.url;
const markType = state.schema.mark('link', { href: url });
const tr = queueCards([
{
url,
pos: start,
appearance: 'inline',
},
])(state.tr.addMark(start, end, markType));
if (dispatch) {
dispatch(tr);
}
}
return false;
};
const ɵ0 = mayConvertLastWordToHyperlink;
export { ɵ0 };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5bWFwLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHpvZGlhYy11aS9lZGl0b3IvIiwic291cmNlcyI6WyJwbHVnaW5zL2xpbmsvcG0va2V5bWFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUczQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUE7QUFFMUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFBO0FBRTFHLE9BQU8sRUFBa0IsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQVMsTUFBTSxVQUFVLENBQUE7QUFDOUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUVuRSxNQUFNLFVBQVUsa0JBQWtCLENBQzlCLE1BQWM7SUFFZCxNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7SUFFaEIscUJBQXFCLENBQ2pCLE9BQU8sQ0FBQyxNQUFNLEVBQ2QsZUFBZSwyQkFBdUIsRUFDdEMsSUFBSSxDQUNQLENBQUM7SUFFRixxQkFBcUIsQ0FDakIsS0FBSyxDQUFDLE1BQU0sRUFDWiw2QkFBNkIsRUFDN0IsSUFBSSxDQUNQLENBQUM7SUFFRixxQkFBcUIsQ0FDakIsYUFBYSxDQUFDLE1BQU0sRUFDcEIsNkJBQTZCLEVBQzdCLElBQUksQ0FDUCxDQUFDO0lBRUYscUJBQXFCLENBQ2pCLE1BQU0sQ0FBQyxNQUFNLEVBQ2IsQ0FBQyxLQUFrQixFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUNuQyxNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBbUIsQ0FBQztRQUNwRSxJQUFJLGVBQWUsQ0FBQyxjQUFjLEVBQUU7WUFDaEMsZUFBZSxFQUFFLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ25DLElBQUksSUFBSSxFQUFFO2dCQUNOLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUNoQjtZQUNELE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQyxFQUNELElBQUksQ0FDUCxDQUFDO0lBRUYsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDeEIsQ0FBQztBQUVELE1BQU0sNkJBQTZCLEdBQVksQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUU7SUFDL0QsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO0lBRXBELElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFO1FBQ25DLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0lBRUQsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDekMsTUFBTSxLQUFLLEdBQWlCLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUVuRCxJQUFJLEtBQUssRUFBRTtRQUNQLE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7UUFDbEMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUM7UUFDakUsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO1FBRXRDLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM3RCxPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUVELE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7UUFDdEIsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFFMUQsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDO1lBQ2xCO2dCQUNJLEdBQUc7Z0JBQ0gsR0FBRyxFQUFFLEtBQUs7Z0JBQ1YsVUFBVSxFQUFFLFFBQVE7YUFDdkI7U0FDSixDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBRTNDLElBQUksUUFBUSxFQUFFO1lBQ1YsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ2hCO0tBQ0o7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBrZXltYXAgfSBmcm9tIFwicHJvc2VtaXJyb3Ita2V5bWFwXCJcclxuaW1wb3J0IHsgU2NoZW1hIH0gZnJvbSBcInByb3NlbWlycm9yLW1vZGVsXCJcclxuaW1wb3J0IHsgRWRpdG9yU3RhdGUsIFBsdWdpbiB9IGZyb20gXCJwcm9zZW1pcnJvci1zdGF0ZVwiXHJcbmltcG9ydCB7IHF1ZXVlQ2FyZHMgfSBmcm9tIFwiLi4vLi4vY2FyZC9wbS1wbHVnaW5zL2FjdGlvbnNcIlxyXG5pbXBvcnQgeyBJTlBVVF9NRVRIT0QgfSBmcm9tIFwiLi4vLi4vYmxvY2stdHlwZS9rZXltYXBcIlxyXG5pbXBvcnQgeyBhZGRMaW5rLCBiaW5kS2V5bWFwV2l0aENvbW1hbmQsIGVudGVyLCBlc2NhcGUsIGluc2VydE5ld0xpbmUgfSBmcm9tIFwiLi4vLi4vLi4vbGliL2tleW1hcHMva2V5bWFwXCJcclxuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gXCIuLi8uLi8uLi9saWIvaW50ZXJmYWNlcy9jb21tYW5kXCJcclxuaW1wb3J0IHsgSHlwZXJsaW5rU3RhdGUsIHBsdWdpbktleSB9IGZyb20gXCIuL2h5cGVybGlua1wiXHJcbmltcG9ydCB7IGdldExpbmtNYXRjaCwgTWF0Y2ggfSBmcm9tIFwiLi4vdXRpbHNcIlxyXG5pbXBvcnQgeyBoaWRlTGlua1Rvb2xiYXIsIHNob3dMaW5rVG9vbGJhciB9IGZyb20gXCIuLi9saW5rLmNvbW1hbmRzXCJcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVLZXltYXBQbHVnaW4oXHJcbiAgICBzY2hlbWE6IFNjaGVtYVxyXG4pOiBQbHVnaW4gfCB1bmRlZmluZWQge1xyXG4gICAgY29uc3QgbGlzdCA9IHt9O1xyXG5cclxuICAgIGJpbmRLZXltYXBXaXRoQ29tbWFuZChcclxuICAgICAgICBhZGRMaW5rLmNvbW1vbixcclxuICAgICAgICBzaG93TGlua1Rvb2xiYXIoSU5QVVRfTUVUSE9ELlNIT1JUQ1VUKSxcclxuICAgICAgICBsaXN0LFxyXG4gICAgKTtcclxuXHJcbiAgICBiaW5kS2V5bWFwV2l0aENvbW1hbmQoXHJcbiAgICAgICAgZW50ZXIuY29tbW9uLFxyXG4gICAgICAgIG1heUNvbnZlcnRMYXN0V29yZFRvSHlwZXJsaW5rLFxyXG4gICAgICAgIGxpc3QsXHJcbiAgICApO1xyXG5cclxuICAgIGJpbmRLZXltYXBXaXRoQ29tbWFuZChcclxuICAgICAgICBpbnNlcnROZXdMaW5lLmNvbW1vbixcclxuICAgICAgICBtYXlDb252ZXJ0TGFzdFdvcmRUb0h5cGVybGluayxcclxuICAgICAgICBsaXN0LFxyXG4gICAgKTtcclxuXHJcbiAgICBiaW5kS2V5bWFwV2l0aENvbW1hbmQoXHJcbiAgICAgICAgZXNjYXBlLmNvbW1vbixcclxuICAgICAgICAoc3RhdGU6IEVkaXRvclN0YXRlLCBkaXNwYXRjaCwgdmlldykgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBoeXBlcmxpbmtQbHVnaW4gPSBwbHVnaW5LZXkuZ2V0U3RhdGUoc3RhdGUpIGFzIEh5cGVybGlua1N0YXRlO1xyXG4gICAgICAgICAgICBpZiAoaHlwZXJsaW5rUGx1Z2luLmFjdGl2ZUxpbmtNYXJrKSB7XHJcbiAgICAgICAgICAgICAgICBoaWRlTGlua1Rvb2xiYXIoKShzdGF0ZSwgZGlzcGF0Y2gpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZpZXcpIHtcclxuICAgICAgICAgICAgICAgICAgICB2aWV3LmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbGlzdCxcclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIGtleW1hcChsaXN0KTtcclxufVxyXG5cclxuY29uc3QgbWF5Q29udmVydExhc3RXb3JkVG9IeXBlcmxpbms6IENvbW1hbmQgPSAoc3RhdGUsIGRpc3BhdGNoKSA9PiB7XHJcbiAgICBjb25zdCBub2RlQmVmb3JlID0gc3RhdGUuc2VsZWN0aW9uLiRmcm9tLm5vZGVCZWZvcmU7XHJcblxyXG4gICAgaWYgKCFub2RlQmVmb3JlIHx8ICFub2RlQmVmb3JlLmlzVGV4dCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB3b3JkcyA9IG5vZGVCZWZvcmUudGV4dC5zcGxpdCgnICcpO1xyXG4gICAgY29uc3QgbGFzdFdvcmQgPSB3b3Jkc1t3b3Jkcy5sZW5ndGggLSAxXTtcclxuICAgIGNvbnN0IG1hdGNoOiBNYXRjaCB8IG51bGwgPSBnZXRMaW5rTWF0Y2gobGFzdFdvcmQpO1xyXG5cclxuICAgIGlmIChtYXRjaCkge1xyXG4gICAgICAgIGNvbnN0IGh5cGVybGlua2VkVGV4dCA9IG1hdGNoLnJhdztcclxuICAgICAgICBjb25zdCBzdGFydCA9IHN0YXRlLnNlbGVjdGlvbi4kZnJvbS5wb3MgLSBoeXBlcmxpbmtlZFRleHQubGVuZ3RoO1xyXG4gICAgICAgIGNvbnN0IGVuZCA9IHN0YXRlLnNlbGVjdGlvbi4kZnJvbS5wb3M7XHJcblxyXG4gICAgICAgIGlmIChzdGF0ZS5kb2MucmFuZ2VIYXNNYXJrKHN0YXJ0LCBlbmQsIHN0YXRlLnNjaGVtYS5tYXJrcy5saW5rKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB1cmwgPSBtYXRjaC51cmw7XHJcbiAgICAgICAgY29uc3QgbWFya1R5cGUgPSBzdGF0ZS5zY2hlbWEubWFyaygnbGluaycsIHsgaHJlZjogdXJsIH0pO1xyXG5cclxuICAgICAgICBjb25zdCB0ciA9IHF1ZXVlQ2FyZHMoW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB1cmwsXHJcbiAgICAgICAgICAgICAgICBwb3M6IHN0YXJ0LFxyXG4gICAgICAgICAgICAgICAgYXBwZWFyYW5jZTogJ2lubGluZScsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgXSkoc3RhdGUudHIuYWRkTWFyayhzdGFydCwgZW5kLCBtYXJrVHlwZSkpO1xyXG5cclxuICAgICAgICBpZiAoZGlzcGF0Y2gpIHtcclxuICAgICAgICAgICAgZGlzcGF0Y2godHIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufTtcclxuIl19