| Server IP : 34.87.99.72 / Your IP : 216.73.217.31 Web Server : Apache/2.4.46 (Unix) OpenSSL/1.1.1n System : Linux zlock-bitnami-lamp-prod-v2-vm 4.19.0-16-cloud-amd64 #1 SMP Debian 4.19.181-1 (2021-03-19) x86_64 User : bitnami ( 1000) PHP Version : 7.4.18 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : OFF Directory : /opt/bitnami/apache/htdocs/app/node_modules/prosemirror-inputrules/dist/ |
Upload File : |
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
var prosemirrorState = require('prosemirror-state');
var prosemirrorTransform = require('prosemirror-transform');
// ::- Input rules are regular expressions describing a piece of text
// that, when typed, causes something to happen. This might be
// changing two dashes into an emdash, wrapping a paragraph starting
// with `"> "` into a blockquote, or something entirely different.
var InputRule = function InputRule(match, handler) {
this.match = match;
this.handler = typeof handler == "string" ? stringHandler(handler) : handler;
};
function stringHandler(string) {
return function(state, match, start, end) {
var insert = string;
if (match[1]) {
var offset = match[0].lastIndexOf(match[1]);
insert += match[0].slice(offset + match[1].length);
start += offset;
var cutOff = start - end;
if (cutOff > 0) {
insert = match[0].slice(offset - cutOff, offset) + insert;
start = end;
}
}
return state.tr.insertText(insert, start, end)
}
}
var MAX_MATCH = 500;
// :: (config: {rules: [InputRule]}) → Plugin
// Create an input rules plugin. When enabled, it will cause text
// input that matches any of the given rules to trigger the rule's
// action.
function inputRules(ref) {
var rules = ref.rules;
var plugin = new prosemirrorState.Plugin({
state: {
init: function init() { return null },
apply: function apply(tr, prev) {
var stored = tr.getMeta(this);
if (stored) { return stored }
return tr.selectionSet || tr.docChanged ? null : prev
}
},
props: {
handleTextInput: function handleTextInput(view, from, to, text) {
return run(view, from, to, text, rules, plugin)
},
handleDOMEvents: {
compositionend: function (view) {
setTimeout(function () {
var ref = view.state.selection;
var $cursor = ref.$cursor;
if ($cursor) { run(view, $cursor.pos, $cursor.pos, "", rules, plugin); }
});
}
}
},
isInputRules: true
});
return plugin
}
function run(view, from, to, text, rules, plugin) {
if (view.composing) { return false }
var state = view.state, $from = state.doc.resolve(from);
if ($from.parent.type.spec.code) { return false }
var textBefore = $from.parent.textBetween(Math.max(0, $from.parentOffset - MAX_MATCH), $from.parentOffset,
null, "\ufffc") + text;
for (var i = 0; i < rules.length; i++) {
var match = rules[i].match.exec(textBefore);
var tr = match && rules[i].handler(state, match, from - (match[0].length - text.length), to);
if (!tr) { continue }
view.dispatch(tr.setMeta(plugin, {transform: tr, from: from, to: to, text: text}));
return true
}
return false
}
// :: (EditorState, ?(Transaction)) → bool
// This is a command that will undo an input rule, if applying such a
// rule was the last thing that the user did.
function undoInputRule(state, dispatch) {
var plugins = state.plugins;
for (var i = 0; i < plugins.length; i++) {
var plugin = plugins[i], undoable = (void 0);
if (plugin.spec.isInputRules && (undoable = plugin.getState(state))) {
if (dispatch) {
var tr = state.tr, toUndo = undoable.transform;
for (var j = toUndo.steps.length - 1; j >= 0; j--)
{ tr.step(toUndo.steps[j].invert(toUndo.docs[j])); }
if (undoable.text) {
var marks = tr.doc.resolve(undoable.from).marks();
tr.replaceWith(undoable.from, undoable.to, state.schema.text(undoable.text, marks));
} else {
tr.delete(undoable.from, undoable.to);
}
dispatch(tr);
}
return true
}
}
return false
}
// :: InputRule Converts double dashes to an emdash.
var emDash = new InputRule(/--$/, "—");
// :: InputRule Converts three dots to an ellipsis character.
var ellipsis = new InputRule(/\.\.\.$/, "…");
// :: InputRule “Smart” opening double quotes.
var openDoubleQuote = new InputRule(/(?:^|[\s\{\[\(\<'"\u2018\u201C])(")$/, "“");
// :: InputRule “Smart” closing double quotes.
var closeDoubleQuote = new InputRule(/"$/, "”");
// :: InputRule “Smart” opening single quotes.
var openSingleQuote = new InputRule(/(?:^|[\s\{\[\(\<'"\u2018\u201C])(')$/, "‘");
// :: InputRule “Smart” closing single quotes.
var closeSingleQuote = new InputRule(/'$/, "’");
// :: [InputRule] Smart-quote related input rules.
var smartQuotes = [openDoubleQuote, closeDoubleQuote, openSingleQuote, closeSingleQuote];
// :: (RegExp, NodeType, ?union<Object, ([string]) → ?Object>, ?([string], Node) → bool) → InputRule
// Build an input rule for automatically wrapping a textblock when a
// given string is typed. The `regexp` argument is
// directly passed through to the `InputRule` constructor. You'll
// probably want the regexp to start with `^`, so that the pattern can
// only occur at the start of a textblock.
//
// `nodeType` is the type of node to wrap in. If it needs attributes,
// you can either pass them directly, or pass a function that will
// compute them from the regular expression match.
//
// By default, if there's a node with the same type above the newly
// wrapped node, the rule will try to [join](#transform.Transform.join) those
// two nodes. You can pass a join predicate, which takes a regular
// expression match and the node before the wrapped node, and can
// return a boolean to indicate whether a join should happen.
function wrappingInputRule(regexp, nodeType, getAttrs, joinPredicate) {
return new InputRule(regexp, function (state, match, start, end) {
var attrs = getAttrs instanceof Function ? getAttrs(match) : getAttrs;
var tr = state.tr.delete(start, end);
var $start = tr.doc.resolve(start), range = $start.blockRange(), wrapping = range && prosemirrorTransform.findWrapping(range, nodeType, attrs);
if (!wrapping) { return null }
tr.wrap(range, wrapping);
var before = tr.doc.resolve(start - 1).nodeBefore;
if (before && before.type == nodeType && prosemirrorTransform.canJoin(tr.doc, start - 1) &&
(!joinPredicate || joinPredicate(match, before)))
{ tr.join(start - 1); }
return tr
})
}
// :: (RegExp, NodeType, ?union<Object, ([string]) → ?Object>) → InputRule
// Build an input rule that changes the type of a textblock when the
// matched text is typed into it. You'll usually want to start your
// regexp with `^` to that it is only matched at the start of a
// textblock. The optional `getAttrs` parameter can be used to compute
// the new node's attributes, and works the same as in the
// `wrappingInputRule` function.
function textblockTypeInputRule(regexp, nodeType, getAttrs) {
return new InputRule(regexp, function (state, match, start, end) {
var $start = state.doc.resolve(start);
var attrs = getAttrs instanceof Function ? getAttrs(match) : getAttrs;
if (!$start.node(-1).canReplaceWith($start.index(-1), $start.indexAfter(-1), nodeType)) { return null }
return state.tr
.delete(start, end)
.setBlockType(start, start, nodeType, attrs)
})
}
exports.InputRule = InputRule;
exports.closeDoubleQuote = closeDoubleQuote;
exports.closeSingleQuote = closeSingleQuote;
exports.ellipsis = ellipsis;
exports.emDash = emDash;
exports.inputRules = inputRules;
exports.openDoubleQuote = openDoubleQuote;
exports.openSingleQuote = openSingleQuote;
exports.smartQuotes = smartQuotes;
exports.textblockTypeInputRule = textblockTypeInputRule;
exports.undoInputRule = undoInputRule;
exports.wrappingInputRule = wrappingInputRule;
//# sourceMappingURL=index.js.map