(function (mod) {
mod(
(this.CompleteEmoji = {}),
CodeMirror,
HyperMD.FoldEmoji
);
})(function (exports, CodeMirror, FoldEmoji) {
exports.createHintFunc = function () {
var editor = null
var defaultDict = {}
var previewShown = false
var previewContainer = document.createElement('div')
previewContainer.setAttribute('class', 'CodeMirror-hints HyperMD-complete-preview')
return function (cm, options) {
let cursor = cm.getCursor(), line = cm.getLine(cursor.line);
if (/^\s*-\s\[\s/.test(line)) {
hidePreview()
return null
}
let start = cursor.ch, end = cursor.ch;
const unicodeWordRegex = /[\p{L}\p{N}_\s:-]/u;
while (start && unicodeWordRegex.test(line.charAt(start - 1))) --start;
while (end < line.length && unicodeWordRegex.test(line.charAt(end))) ++end;
let word = line.slice(start, cursor.ch).toLowerCase()
let wordEmpty = word.length === 0
var dicts = []
var myEmojiDict = (cm.getOption('hmdFoldEmoji') || {}).myEmoji
if (myEmojiDict) dicts.push(myEmojiDict())
var result = {
list: [],
from: CodeMirror.Pos(cursor.line, start),
to: CodeMirror.Pos(cursor.line, end)
}
var list = result.list
for (var i = 0; i < dicts.length; i++) {
var dict = dicts[i]
if (!dict) continue
for (var key in dict) {
if (wordEmpty || key.slice(0, word.length) === word || key.toLowerCase().includes(word.toLowerCase())) {
list.push({text: dict[key], displayText: key})
}
}
}
CodeMirror.on(result, "select", showPreview)
CodeMirror.on(result, "close", hidePreview)
return result
}
function hidePreview() {
if (previewShown) {
document.body.removeChild(previewContainer)
previewShown = false
}
}
function showPreview(completion, element) {
return;
var foldEmoji = FoldEmoji.getAddon(editor)
var newNode =
((completion in foldEmoji.myEmoji) && foldEmoji.myEmoji[completion](completion))
|| foldEmoji.emojiRenderer(completion)
|| document.createTextNode(defaultDict[completion])
|| null
if (newNode) { if (!previewShown) {
previewShown = true
document.body.appendChild(previewContainer)
}
var oldNode = previewContainer.firstChild
if (oldNode) previewContainer.removeChild(oldNode)
previewContainer.appendChild(newNode)
var loc = element.parentElement.style
var pcStyle = previewContainer.style
pcStyle.left = Number.parseFloat(loc.left) + element.parentElement.offsetWidth + 'px'
pcStyle.top = loc.top
} else {
hidePreview()
}
}
}
})