{"version":3,"names":["loadDict","name","aff","dic","dictionaries","Promise","resolve","affData","fetch","then","r","text","wordsData","dictionary","Typo","current","loadDictLang","lang","lively4url","loadIgnoreDict","focalStorage","getItem","spellCheckKey","saveIgnoreDict","dict","setItem","startSpellCheck","cm","typo","ignoreDict","rx_word","spellcheckOverlay","removeOverlay","token","stream","state","ch","peek","word","includes","next","test","check","addOverlay","box","document","getElementById","remove","sbox","getSuggestionBox","lively","removeEventListener","getWrapperElement","addEventListener","e","target","classList","contains","preventDefault","stopPropagation","suggest","sboxShow","items","x","y","hourglass","selwidget","children","isSafari","navigator","vendor","indexOf","userAgent","match","separator","length","options","forEach","s","indexInParent","slice","call","parentElement","innerHTML","fontSize","window","getComputedStyle","getPropertyValue","style","size","value","cmrect","getBoundingClientRect","left","top","offsetHeight","body","scrollTop","widgetRect","right","width","bottom","height","sboxHide","createElement","zIndex","id","position","multiple","appendChild","innerText","codeMirror","screenPos","pageX","pageY","tokenRect","start","coordsChar","end","cmpos","line","results","all","push","onmouseout","related","relatedTarget","tagName","onchange","correction","setOption","maxHighlightLength","replaceRange","focus","setCursor"],"sources":["codemirror-spellcheck.js"],"sourcesContent":["import Typo from \"src/external/typo.js\"\nimport focalStorage from \"src/external/focalStorage.js\"\n\nexport var dictionaries = {}\n\nexport async function loadDict(name, aff, dic) {\n  if (!dictionaries[name]) {\n    dictionaries[name] = new Promise(async resolve => {\n      var affData = await fetch(aff).then(r => r.text())\n      var wordsData = await fetch(dic).then(r => r.text())\n      var dictionary = new Typo( name, affData, wordsData);\t\n      resolve(dictionary)\n    })\n  }   \n  return dictionaries[name]\n}\n\nexport function current() {\n  return loadDictLang(\"en_US\")\n}\n\nexport function loadDictLang(lang=\"en_US\") {\n  return loadDict(\n    lang,\n    lively4url + `/src/external/dicts/${lang}.aff`,\n    lively4url + `/src/external/dicts/${lang}.dic`)  \n}\n\n\ncurrent()\n\n// copied from kofifus/ Codemirror spellchecker with typo corrections\n// https://gist.github.com/kofifus/4b2f79cadc871a29439d919692099406\n\n\nvar spellCheckKey = \"SpellcheckIngoreWords\"\nasync function loadIgnoreDict() {\n  return (await focalStorage.getItem(spellCheckKey)) || {};\n}\n\nasync function saveIgnoreDict(dict) { \n  return (await focalStorage.setItem(spellCheckKey, dict));\n}\n\nexport var ignoreDict\n\nexport async  function startSpellCheck(cm, typo) {\n  // console.log(\"start spellcheck \" + typo.dictionary)\n  \n\tif (!cm || !typo) return; // sanity\n\n\t// ignoreDict = {}; // dictionary of ignored words\n  if (!ignoreDict ) {\n    ignoreDict = await loadIgnoreDict()\n  }\n  \n\t// Define what separates a word\n\tvar rx_word = '!\\'\\\"#$%&()*+,-./:;<=>?@[\\\\]^_`{|}~ ';\n\n  if (cm.spellcheckOverlay) {\n    // console.log(\"remove spellcheck overlay\")\n    cm.removeOverlay(\"spellcheck\");\n  }\n  \n\tcm.spellcheckOverlay = {\n    name: \"spellcheck\",\n\t\ttoken: function(stream, state) {\n      \n\t\t\tvar ch = stream.peek();\n\t\t\tvar word = \"\";\n\t\t\tif (rx_word.includes(ch) || ch === '\\uE000' || ch === '\\uE001') {\n\t\t\t\tstream.next();\n\t\t\t\treturn null;\n\t\t\t}\n      \n      while ((ch = stream.peek()) && !rx_word.includes(ch)) {\n\t\t\t\tword += ch;\n\t\t\t\tstream.next();\n\t\t\t}\n      // cm.doc.findMarksAt(\n      // var cm = that.editor\n      \n      \n\t\t\tif (!/[a-zöäüß]/i.test(word)) return null; // no letters\n\t\t\t\n      // console.log(\"w\", word, \"stream \", stream)\n      // var token = cm.getTokenAt(cm.doc.posFromIndex(stream.pos))\n      // console.log(\"w\", word, \"type \", token.type)\n      // if (token.type && token.type.match(\"url\")) return null; \n\n      if (ignoreDict && ignoreDict[word]) return null;\n      // console.log(\"check \" + word + \" in \" + typo.dictionary + \" \" + typo.check(word))\n\t\t\tif (!typo.check(word)) return \"spell-error\"; // CSS class: cm-spell-error\n\t\t}\n\t}\n\tcm.addOverlay(cm.spellcheckOverlay);\n\n  \n  var box = document.getElementById('suggestBox');\n  if (box) box.remove()\n  \n\t// initialize the suggestion box\n\tvar sbox = getSuggestionBox(typo);\n  // console.log(\"register context menu spell checker\")\n  lively.removeEventListener(\"spellcheck\", cm.getWrapperElement(), \"contextmenu\")\n\tlively.addEventListener(\"spellcheck\", cm.getWrapperElement(), \"contextmenu\", e => {\n    if (!e.target.classList.contains('cm-spell-error')) return      \n    e.preventDefault();\n\t  e.stopPropagation();  \n\t\tsbox.suggest(cm, e);\n\t\treturn false;\n\t});\n}\n\nexport function getSuggestionBox(typo) {\n\tfunction sboxShow(cm, sbox, items, x, y, hourglass) {\n    // console.log(\"get suggestion box \" + typo.dictionary)\n\t\tlet selwidget = sbox.children[0];\n\n\t\tvar isSafari = navigator.vendor && navigator.vendor.indexOf('Apple') > -1 &&  navigator.userAgent && !navigator.userAgent.match('CriOS');\n\t\tlet separator=(!isSafari && (hourglass || items.length>0)); // separator line does not work well on safari\n\n\t\tlet options = '';\n\t\titems.forEach(s => options += '<option value=\"' + s + '\">' + s + '</option>');\n\t\tif (hourglass) options += '<option disabled=\"disabled\">&nbsp;&nbsp;&nbsp;&#8987;</option>';\n\t\tif (separator) options += '<option style=\"min-height:1px; max-height:1px; padding:0; background-color: #000000;\" disabled>&nbsp;</option>';\n\t\toptions += `<option value=\"##ignoreall##\">Ignore&nbsp;all&nbsp;${typo.dictionary}</option>`;\n\n\t\tlet indexInParent=[].slice.call(selwidget.parentElement.children).indexOf(selwidget);\n\t\tselwidget.innerHTML=options;\n\t\tselwidget=selwidget.parentElement.children[indexInParent];\n\t\t\n\t\tlet fontSize=window.getComputedStyle(cm.getWrapperElement(), null).getPropertyValue('font-size');\n\t\tselwidget.style.fontSize=fontSize;\n\t\tselwidget.size = selwidget.length;\n\t\tif (separator) selwidget.size--;\n\t\tselwidget.value = -1;\n\n\t\t// position widget inside cm\n\t\tlet cmrect = cm.getWrapperElement().getBoundingClientRect();\n    sbox.style.left = x + 'px';\n\t\tsbox.style.top = ((y - sbox.offsetHeight / 2) - document.body.parentElement.scrollTop) + 'px';\n\t\tlet widgetRect = sbox.getBoundingClientRect();\n\t\tif (widgetRect.top < cmrect.top) sbox.style.top = (cmrect.top + 2) + 'px';\n\t\tif (widgetRect.right > cmrect.right) sbox.style.left = (cmrect.right - widgetRect.width - 2) + 'px';\n\t\tif (widgetRect.bottom > cmrect.bottom) sbox.style.top = (cmrect.bottom - widgetRect.height - 2) + 'px';\n  \n\t}\n\n\tfunction sboxHide(sbox) {\n\t\tsbox.style.top = sbox.style.left = '-1000px';\n\t\t// typo.suggest(); // disable any running suggeations search\n\t}\n\n\t// create suggestions widget\n\tlet sbox = document.getElementById('suggestBox');\n\tif (!sbox) {\n\t\tsbox = document.createElement('div');\n\t\tsbox.style.zIndex = 100000;\n\t\tsbox.id = 'suggestBox';\n\t\tsbox.style.position = 'fixed';\n\t\tsboxHide(sbox);\n\n\t\tlet selwidget = document.createElement('select');\n\t\tselwidget.multiple = 'yes';\n\t\tsbox.appendChild(selwidget);\n\n\t\tsbox.suggest = (async (cm, e) => { // e is the event from cm contextmenu event\n\t\t\tif (!e.target.classList.contains('cm-spell-error')) return false; // not on typo\n\n\t\t\tlet token = e.target.innerText;\n\t\t\tif (!token) return false; // sanity\n\n\t\t\t// save cm instance, token, token coordinates in sbox\n\t\t\tsbox.codeMirror = cm;\n\t\t\tsbox.token = token;\n\t\t\tsbox.screenPos={ x: e.pageX, y: e.pageY }\n\t\t\tlet tokenRect = e.target.getBoundingClientRect();\n\t\t\tlet start=cm.coordsChar({left: tokenRect.left+1, top: tokenRect.top+1});\n\t\t\tlet end=cm.coordsChar({left: tokenRect.right-1, top: tokenRect.top+1});\n\t\t\tsbox.cmpos={ line: start.line, start: start.ch, end: end.ch};\n\n\t\t\t// show hourglass\n\t\t\t// sboxShow(cm, sbox, [], e.pageX, e.pageY, true);\n      \n\t\t\tvar results = [];\n\t\n      // async \n\t\t\ttypo.suggest(token, null, all => {\n\t\t\t\t//console.log('done');\n\t\t\t\tsboxShow(cm, sbox, results, e.pageX, e.pageY);\n\t\t\t}, next => {\n\t\t\t\t//console.log('found '+next);\n\t\t\t\tresults.push(next);\n\t\t\t\tsboxShow(cm, sbox, results, e.pageX, e.pageY, true);\n\t\t\t});\n\n\t\t\t// non async \n\t\t\t// sboxShow(cm, sbox, typo.suggest(token), e.pageX, e.pageY);\n\n\t\t\te.preventDefault();\n\n\t\t\treturn false;\n\t\t});\n\n\t\tsbox.onmouseout = (e => {\n\t\t\tlet related=(e.relatedTarget ? e.relatedTarget.tagName : null);\n\t\t\tif (related!=='SELECT' && related!=='OPTION') sboxHide(sbox)\n\t\t});\n\n\t\tselwidget.onchange = (e => {\n\t\t\tsboxHide(sbox)\n\t\t\tlet cm = sbox.codeMirror, correction = e.target.value;\n\t\t\tif (correction == '##ignoreall##') {\n        \n\t\t\t\tignoreDict[sbox.token] = true;\n        saveIgnoreDict(ignoreDict);\n\t\t\t\tcm.setOption('maxHighlightLength', (--cm.options.maxHighlightLength) + 1); // ugly hack to rerun overlays\n\t\t\t} else {\n\t\t\t\tcm.replaceRange(correction, { line: sbox.cmpos.line, ch: sbox.cmpos.start}, { line: sbox.cmpos.line, ch: sbox.cmpos.end});\n\t\t\t\tcm.focus();\n\t\t\t\tcm.setCursor({line: sbox.cmpos.line, ch: sbox.cmpos.start+correction.length});\n\t\t\t}\n\t\t});\n\n\t\tdocument.body.appendChild(sbox);\n\t}\n\n\treturn sbox;\n}"],"mappings":"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"}