From 5a09fabe5c220f3772df20d5b9d3ba6249e5e976 Mon Sep 17 00:00:00 2001 From: Tom Chen Date: Wed, 11 Nov 2015 16:34:39 +0800 Subject: [PATCH] chore(lib): compile from src using babel and webpack --- lib/index.js | 10 +++++++--- lib/index.min.js | 2 +- lib/index.min.js.map | 2 +- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/lib/index.js b/lib/index.js index c421583..b8b41a8 100644 --- a/lib/index.js +++ b/lib/index.js @@ -243,15 +243,19 @@ var TCMention = _mediumEditor2["default"].Extension.extend({ var bottom = _activeMentionAt$getBoundingClientRect.bottom; var left = _activeMentionAt$getBoundingClientRect.left; - var pageYOffset = this.window.pageYOffset; + var width = _activeMentionAt$getBoundingClientRect.width; + var _window = this.window; + var pageXOffset = _window.pageXOffset; + var pageYOffset = _window.pageYOffset; - this.mentionPanel.style.top = bottom + pageYOffset + "px"; - this.mentionPanel.style.left = left + "px"; + this.mentionPanel.style.top = pageYOffset + bottom + "px"; + this.mentionPanel.style.left = pageXOffset + left + width + "px"; }, updatePanelContent: function updatePanelContent() { var textContent = this.activeMentionAt.textContent; + this.positionPanel(); this.renderPanelContent(this.mentionPanel, textContent, this.handleSelectMention.bind(this)); }, diff --git a/lib/index.min.js b/lib/index.min.js index 5053321..3113349 100644 --- a/lib/index.min.js +++ b/lib/index.min.js @@ -1,2 +1,2 @@ -!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t(require("MediumEditor"));else if("function"==typeof define&&define.amd)define(["MediumEditor"],t);else{var i=t("object"==typeof exports?require("MediumEditor"):e.MediumEditor);for(var n in i)("object"==typeof exports?exports:e)[n]=i[n]}}(this,function(e){return function(e){function t(n){if(i[n])return i[n].exports;var a=i[n]={exports:{},id:n,loaded:!1};return e[n].call(a.exports,a,a.exports,t),a.loaded=!0,a.exports}var i={};return t.m=e,t.c=i,t.p="",t(0)}([function(e,t,i){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function a(e,t){var i,n,a=e.parentNode;for(o["default"].util.unwrap(e,t),n=a.lastChild;i=n.previousSibling;)3===n.nodeType&&3===i.nodeType&&(i.textContent+=n.textContent,a.removeChild(n)),n=i}Object.defineProperty(t,"__esModule",{value:!0}),t.unwrapForTextNode=a;var s=i(1),o=n(s),l=50;t.atKeyCode=l;var r=51;t.hashKeyCode=r;var d=o["default"].Extension.extend({name:"mention",extraClassName:"",extraActiveClassName:"",tagName:"strong",renderPanelContent:function(){},destroyPanelContent:function(){},activeTriggerList:["@"],triggerClassNameMap:{"#":"medium-editor-mention-hash","@":"medium-editor-mention-at"},init:function(){this.mentionPanel=this.createPanel(),this.getEditorOption("elementsContainer").appendChild(this.mentionPanel),this.subscribe("editableKeydown",this.handleKeydown.bind(this)),this.subscribe("editableBlur",this.handleBlur.bind(this)),this.trigger=null,this.triggerClassName=null,this.activeMentionAt=null},createPanel:function(){var e=this.document.createElement("div");return e.classList.add("medium-editor-mention-panel"),this.extraClassName&&e.classList.add(this.extraClassName),e.innerHTML=this.getTemplate(),e},getTemplate:function(){return"

\nYour mention implementation\n

"},destroy:function(){this.mentionPanel&&(this.mentionPanel.parentNode&&(this.destroyPanelContent(this.mentionPanel),this.mentionPanel.parentNode.removeChild(this.mentionPanel)),delete this.mentionPanel)},handleKeydown:function(e){switch(o["default"].util.getKeyCode(e)){case o["default"].util.keyCode.ESCAPE:this.hidePanel();break;case o["default"].util.keyCode.SPACE:this.hidePanel();break;case o["default"].util.keyCode.ENTER:this.hidePanel();break;case o["default"].util.keyCode.BACKSPACE:var t=o["default"].selection.getSelectionRange(this.document),i=t.startOffset,n=t.endOffset;1===i&&1===n?this.hidePanel():this.updatePanelContentWithDelay();break;case l:e.shiftKey&&-1!==this.activeTriggerList.indexOf("@")?this.handleTriggerKeydown("@",e):this.updatePanelContentWithDelay();break;case r:e.shiftKey&&-1!==this.activeTriggerList.indexOf("#")?this.handleTriggerKeydown("#",e):this.updatePanelContentWithDelay();break;default:this.updatePanelContentWithDelay()}},handleBlur:function(e){this.hidePanel()},handleTriggerKeydown:function(e,t){this.trigger=e,this.triggerClassName=this.triggerClassNameMap[this.trigger],t.preventDefault();var i=o["default"].selection.getSelectionStart(this.document);i.classList.contains(this.triggerClassName)||(this.hidePanel(),this.showPanel(),this.positionPanel(),this.updatePanelContentWithDelay())},handleSelectMention:function(e){if(e){var t=this.activeMentionAt.childNodes[0];t.textContent=e,o["default"].selection.select(this.document,t,e.length),this.hidePanel()}else this.hidePanel()},hidePanel:function(){this.mentionPanel.classList.remove("medium-editor-mention-panel-active"),this.extraActiveClassName&&this.mentionPanel.classList.remove(this.extraActiveClassName),this.activeMentionAt&&(this.base.saveSelection(),a(this.activeMentionAt,this.document),this.base.restoreSelection(),this.activeMentionAt=null)},showPanel:function(){var e="<"+this.tagName+' class="'+this.triggerClassName+'">'+this.trigger+"";o["default"].util.insertHTMLCommand(this.document,e),this.mentionPanel.classList.contains("medium-editor-mention-panel-active")||(this.activeMentionAt=this.document.querySelector("."+this.triggerClassName),this.mentionPanel.classList.add("medium-editor-mention-panel-active"),this.extraActiveClassName&&this.mentionPanel.classList.add(this.extraActiveClassName))},positionPanel:function(){var e=this.activeMentionAt.getBoundingClientRect(),t=e.bottom,i=e.left,n=this.window.pageYOffset;this.mentionPanel.style.top=t+n+"px",this.mentionPanel.style.left=i+"px"},updatePanelContent:function(){var e=this.activeMentionAt.textContent;this.renderPanelContent(this.mentionPanel,e,this.handleSelectMention.bind(this))},updatePanelContentWithDelay:function(){this.activeMentionAt&&this.activeMentionAt===o["default"].selection.getSelectionStart(this.document)&&this.base.delay(this.updatePanelContent.bind(this))}});t.TCMention=d,t["default"]=d},function(t,i){t.exports=e}])}); +!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t(require("MediumEditor"));else if("function"==typeof define&&define.amd)define(["MediumEditor"],t);else{var i=t("object"==typeof exports?require("MediumEditor"):e.MediumEditor);for(var n in i)("object"==typeof exports?exports:e)[n]=i[n]}}(this,function(e){return function(e){function t(n){if(i[n])return i[n].exports;var a=i[n]={exports:{},id:n,loaded:!1};return e[n].call(a.exports,a,a.exports,t),a.loaded=!0,a.exports}var i={};return t.m=e,t.c=i,t.p="",t(0)}([function(e,t,i){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function a(e,t){var i,n,a=e.parentNode;for(o["default"].util.unwrap(e,t),n=a.lastChild;i=n.previousSibling;)3===n.nodeType&&3===i.nodeType&&(i.textContent+=n.textContent,a.removeChild(n)),n=i}Object.defineProperty(t,"__esModule",{value:!0}),t.unwrapForTextNode=a;var s=i(1),o=n(s),l=50;t.atKeyCode=l;var r=51;t.hashKeyCode=r;var d=o["default"].Extension.extend({name:"mention",extraClassName:"",extraActiveClassName:"",tagName:"strong",renderPanelContent:function(){},destroyPanelContent:function(){},activeTriggerList:["@"],triggerClassNameMap:{"#":"medium-editor-mention-hash","@":"medium-editor-mention-at"},init:function(){this.mentionPanel=this.createPanel(),this.getEditorOption("elementsContainer").appendChild(this.mentionPanel),this.subscribe("editableKeydown",this.handleKeydown.bind(this)),this.subscribe("editableBlur",this.handleBlur.bind(this)),this.trigger=null,this.triggerClassName=null,this.activeMentionAt=null},createPanel:function(){var e=this.document.createElement("div");return e.classList.add("medium-editor-mention-panel"),this.extraClassName&&e.classList.add(this.extraClassName),e.innerHTML=this.getTemplate(),e},getTemplate:function(){return"

\nYour mention implementation\n

"},destroy:function(){this.mentionPanel&&(this.mentionPanel.parentNode&&(this.destroyPanelContent(this.mentionPanel),this.mentionPanel.parentNode.removeChild(this.mentionPanel)),delete this.mentionPanel)},handleKeydown:function(e){switch(o["default"].util.getKeyCode(e)){case o["default"].util.keyCode.ESCAPE:this.hidePanel();break;case o["default"].util.keyCode.SPACE:this.hidePanel();break;case o["default"].util.keyCode.ENTER:this.hidePanel();break;case o["default"].util.keyCode.BACKSPACE:var t=o["default"].selection.getSelectionRange(this.document),i=t.startOffset,n=t.endOffset;1===i&&1===n?this.hidePanel():this.updatePanelContentWithDelay();break;case l:e.shiftKey&&-1!==this.activeTriggerList.indexOf("@")?this.handleTriggerKeydown("@",e):this.updatePanelContentWithDelay();break;case r:e.shiftKey&&-1!==this.activeTriggerList.indexOf("#")?this.handleTriggerKeydown("#",e):this.updatePanelContentWithDelay();break;default:this.updatePanelContentWithDelay()}},handleBlur:function(e){this.hidePanel()},handleTriggerKeydown:function(e,t){this.trigger=e,this.triggerClassName=this.triggerClassNameMap[this.trigger],t.preventDefault();var i=o["default"].selection.getSelectionStart(this.document);i.classList.contains(this.triggerClassName)||(this.hidePanel(),this.showPanel(),this.positionPanel(),this.updatePanelContentWithDelay())},handleSelectMention:function(e){if(e){var t=this.activeMentionAt.childNodes[0];t.textContent=e,o["default"].selection.select(this.document,t,e.length),this.hidePanel()}else this.hidePanel()},hidePanel:function(){this.mentionPanel.classList.remove("medium-editor-mention-panel-active"),this.extraActiveClassName&&this.mentionPanel.classList.remove(this.extraActiveClassName),this.activeMentionAt&&(this.base.saveSelection(),a(this.activeMentionAt,this.document),this.base.restoreSelection(),this.activeMentionAt=null)},showPanel:function(){var e="<"+this.tagName+' class="'+this.triggerClassName+'">'+this.trigger+"";o["default"].util.insertHTMLCommand(this.document,e),this.mentionPanel.classList.contains("medium-editor-mention-panel-active")||(this.activeMentionAt=this.document.querySelector("."+this.triggerClassName),this.mentionPanel.classList.add("medium-editor-mention-panel-active"),this.extraActiveClassName&&this.mentionPanel.classList.add(this.extraActiveClassName))},positionPanel:function(){var e=this.activeMentionAt.getBoundingClientRect(),t=e.bottom,i=e.left,n=e.width,a=this.window,s=a.pageXOffset,o=a.pageYOffset;this.mentionPanel.style.top=o+t+"px",this.mentionPanel.style.left=s+i+n+"px"},updatePanelContent:function(){var e=this.activeMentionAt.textContent;this.positionPanel(),this.renderPanelContent(this.mentionPanel,e,this.handleSelectMention.bind(this))},updatePanelContentWithDelay:function(){this.activeMentionAt&&this.activeMentionAt===o["default"].selection.getSelectionStart(this.document)&&this.base.delay(this.updatePanelContent.bind(this))}});t.TCMention=d,t["default"]=d},function(t,i){t.exports=e}])}); //# sourceMappingURL=index.min.js.map \ No newline at end of file diff --git a/lib/index.min.js.map b/lib/index.min.js.map index 9220f36..7d67720 100644 --- a/lib/index.min.js.map +++ b/lib/index.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///index.min.js","webpack:///webpack/bootstrap 62996039f16f7343584e","webpack:///./src/index.js","webpack:///external \"MediumEditor\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_1__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","_interopRequireDefault","obj","__esModule","default","unwrapForTextNode","el","doc","prevNode","currentNode","parentNode","_mediumEditor2","util","unwrap","lastChild","previousSibling","nodeType","textContent","removeChild","Object","defineProperty","value","_mediumEditor","atKeyCode","hashKeyCode","TCMention","Extension","extend","name","extraClassName","extraActiveClassName","tagName","renderPanelContent","destroyPanelContent","activeTriggerList","triggerClassNameMap","#","@","init","mentionPanel","createPanel","getEditorOption","appendChild","subscribe","handleKeydown","bind","handleBlur","trigger","triggerClassName","activeMentionAt","document","createElement","classList","add","innerHTML","getTemplate","destroy","event","getKeyCode","keyCode","ESCAPE","hidePanel","SPACE","ENTER","BACKSPACE","_MediumEditor$selection$getSelectionRange","selection","getSelectionRange","startOffset","endOffset","updatePanelContentWithDelay","shiftKey","indexOf","handleTriggerKeydown","preventDefault","selectionStart","getSelectionStart","contains","showPanel","positionPanel","handleSelectMention","seletedText","textNode","childNodes","select","length","remove","base","saveSelection","restoreSelection","html","insertHTMLCommand","querySelector","_activeMentionAt$getBoundingClientRect","getBoundingClientRect","bottom","left","pageYOffset","window","style","top","updatePanelContent","delay"],"mappings":"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","file":"index.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"MediumEditor\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"MediumEditor\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"MediumEditor\")) : factory(root[\"MediumEditor\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"MediumEditor\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"MediumEditor\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"MediumEditor\")) : factory(root[\"MediumEditor\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\texports.unwrapForTextNode = unwrapForTextNode;\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\t\n\tvar _mediumEditor = __webpack_require__(1);\n\t\n\tvar _mediumEditor2 = _interopRequireDefault(_mediumEditor);\n\t\n\tvar atKeyCode = 50;\n\texports.atKeyCode = atKeyCode;\n\tvar hashKeyCode = 51;\n\t\n\texports.hashKeyCode = hashKeyCode;\n\t\n\tfunction unwrapForTextNode(el, doc) {\n\t var parentNode = el.parentNode,\n\t prevNode,\n\t currentNode;\n\t _mediumEditor2[\"default\"].util.unwrap(el, doc);\n\t // Merge textNode\n\t currentNode = parentNode.lastChild;\n\t while (prevNode = currentNode.previousSibling) {\n\t if (3 === currentNode.nodeType && 3 === prevNode.nodeType) {\n\t prevNode.textContent += currentNode.textContent;\n\t parentNode.removeChild(currentNode);\n\t }\n\t currentNode = prevNode;\n\t }\n\t}\n\t\n\tvar TCMention = _mediumEditor2[\"default\"].Extension.extend({\n\t name: \"mention\",\n\t\n\t /* extraClassName: [string]\n\t *\n\t * Extra className to be added with the `medium-editor-mention-panel` element.\n\t */\n\t extraClassName: \"\",\n\t\n\t /* extraActiveClassName: [string]\n\t *\n\t * Extra active className to be added with the `medium-editor-mention-panel-active` element.\n\t */\n\t extraActiveClassName: \"\",\n\t\n\t /* tagName: [string]\n\t *\n\t * Element tag name that would indicate that this mention. It will have\n\t * `medium-editor-mention-at` className applied on it.\n\t */\n\t tagName: \"strong\",\n\t\n\t /* renderPanelContent: [function (panelEl: dom, currentMentionText: string, selectMentionCallback: function)]\n\t *\n\t * Render function that used to create the content of the panel when panel is show.\n\t *\n\t * @params panelEl: DOM element of the panel.\n\t *\n\t * @params currentMentionText: Often used as query criteria. e.g. @medium\n\t *\n\t * @params selectMentionCallback:\n\t * callback used in customized panel content.\n\t *\n\t * When called with null, it tells the Mention plugin to close the panel.\n\t * e.g. selectMentionCallback(null);\n\t *\n\t * When called with text, it tells the Mention plugin that the text is selected by the user.\n\t * e.g. selectMentionCallback(\"@mediumrocks\")\n\t */\n\t renderPanelContent: function renderPanelContent() {},\n\t\n\t /* destroyPanelContent: [function (panelEl: dom)]\n\t *\n\t * Destroy function to remove any contents rendered by renderPanelContent before panelEl being removed from the document.\n\t *\n\t * @params panelEl: DOM element of the panel.\n\t */\n\t destroyPanelContent: function destroyPanelContent() {},\n\t\n\t activeTriggerList: [\"@\"],\n\t\n\t triggerClassNameMap: {\n\t \"#\": \"medium-editor-mention-hash\",\n\t \"@\": \"medium-editor-mention-at\"\n\t },\n\t\n\t init: function init() {\n\t this.mentionPanel = this.createPanel();\n\t\n\t this.getEditorOption(\"elementsContainer\").appendChild(this.mentionPanel);\n\t\n\t this.subscribe(\"editableKeydown\", this.handleKeydown.bind(this));\n\t this.subscribe(\"editableBlur\", this.handleBlur.bind(this));\n\t //\n\t // instance variables\n\t this.trigger = null;\n\t this.triggerClassName = null;\n\t this.activeMentionAt = null;\n\t },\n\t\n\t createPanel: function createPanel() {\n\t var el = this.document.createElement(\"div\");\n\t\n\t el.classList.add(\"medium-editor-mention-panel\");\n\t if (this.extraClassName) {\n\t el.classList.add(this.extraClassName);\n\t }\n\t el.innerHTML = this.getTemplate();\n\t\n\t return el;\n\t },\n\t\n\t getTemplate: function getTemplate() {\n\t return \"

\\nYour mention implementation\\n

\";\n\t },\n\t\n\t destroy: function destroy() {\n\t if (this.mentionPanel) {\n\t if (this.mentionPanel.parentNode) {\n\t this.destroyPanelContent(this.mentionPanel);\n\t this.mentionPanel.parentNode.removeChild(this.mentionPanel);\n\t }\n\t delete this.mentionPanel;\n\t }\n\t },\n\t\n\t handleKeydown: function handleKeydown(event) {\n\t switch (_mediumEditor2[\"default\"].util.getKeyCode(event)) {\n\t case _mediumEditor2[\"default\"].util.keyCode.ESCAPE:\n\t this.hidePanel();\n\t break;\n\t case _mediumEditor2[\"default\"].util.keyCode.SPACE:\n\t this.hidePanel();\n\t break;\n\t case _mediumEditor2[\"default\"].util.keyCode.ENTER:\n\t this.hidePanel();\n\t break;\n\t case _mediumEditor2[\"default\"].util.keyCode.BACKSPACE:\n\t var _MediumEditor$selection$getSelectionRange = _mediumEditor2[\"default\"].selection.getSelectionRange(this.document),\n\t startOffset = _MediumEditor$selection$getSelectionRange.startOffset,\n\t endOffset = _MediumEditor$selection$getSelectionRange.endOffset;\n\t\n\t if (1 === startOffset && 1 === endOffset) {\n\t // last word. So `@` will be deleted.\n\t this.hidePanel();\n\t } else {\n\t this.updatePanelContentWithDelay();\n\t }\n\t break;\n\t case atKeyCode:\n\t if (!!event.shiftKey && -1 !== this.activeTriggerList.indexOf(\"@\")) {\n\t this.handleTriggerKeydown(\"@\", event);\n\t } else {\n\t this.updatePanelContentWithDelay();\n\t }\n\t break;\n\t case hashKeyCode:\n\t if (!!event.shiftKey && -1 !== this.activeTriggerList.indexOf(\"#\")) {\n\t this.handleTriggerKeydown(\"#\", event);\n\t } else {\n\t this.updatePanelContentWithDelay();\n\t }\n\t break;\n\t default:\n\t this.updatePanelContentWithDelay();\n\t break;\n\t }\n\t },\n\t\n\t handleBlur: function handleBlur(event) {\n\t this.hidePanel();\n\t },\n\t\n\t handleTriggerKeydown: function handleTriggerKeydown(trigger, event) {\n\t this.trigger = trigger;\n\t this.triggerClassName = this.triggerClassNameMap[this.trigger];\n\t\n\t event.preventDefault(); // Remove typed in `${ this.trigger }`\n\t var selectionStart = _mediumEditor2[\"default\"].selection.getSelectionStart(this.document);\n\t if (selectionStart.classList.contains(this.triggerClassName)) {\n\t // The case: `##` or `#medium#`\n\t // Just ignore it for now.\n\t return;\n\t }\n\t this.hidePanel();\n\t this.showPanel();\n\t this.positionPanel();\n\t this.updatePanelContentWithDelay();\n\t },\n\t\n\t handleSelectMention: function handleSelectMention(seletedText) {\n\t if (seletedText) {\n\t var textNode = this.activeMentionAt.childNodes[0];\n\t textNode.textContent = seletedText;\n\t _mediumEditor2[\"default\"].selection.select(this.document, textNode, seletedText.length);\n\t //\n\t this.hidePanel();\n\t } else {\n\t this.hidePanel();\n\t }\n\t },\n\t\n\t hidePanel: function hidePanel() {\n\t this.mentionPanel.classList.remove(\"medium-editor-mention-panel-active\");\n\t if (this.extraActiveClassName) {\n\t this.mentionPanel.classList.remove(this.extraActiveClassName);\n\t }\n\t\n\t if (this.activeMentionAt) {\n\t // LIKE core#execAction\n\t this.base.saveSelection();\n\t unwrapForTextNode(this.activeMentionAt, this.document);\n\t this.base.restoreSelection();\n\t // LIKE core#execAction\n\t this.activeMentionAt = null;\n\t }\n\t },\n\t\n\t showPanel: function showPanel() {\n\t // Instead, insert our own version of it.\n\t // TODO: Not sure why, but using tag doens't work here\n\t var html = \"<\" + this.tagName + \" class=\\\"\" + this.triggerClassName + \"\\\">\" + this.trigger + \"\";\n\t _mediumEditor2[\"default\"].util.insertHTMLCommand(this.document, html);\n\t\n\t if (this.mentionPanel.classList.contains(\"medium-editor-mention-panel-active\")) {\n\t return;\n\t }\n\t\n\t this.activeMentionAt = this.document.querySelector(\".\" + this.triggerClassName);\n\t this.mentionPanel.classList.add(\"medium-editor-mention-panel-active\");\n\t if (this.extraActiveClassName) {\n\t this.mentionPanel.classList.add(this.extraActiveClassName);\n\t }\n\t },\n\t\n\t positionPanel: function positionPanel() {\n\t var _activeMentionAt$getBoundingClientRect = this.activeMentionAt.getBoundingClientRect();\n\t\n\t var bottom = _activeMentionAt$getBoundingClientRect.bottom;\n\t var left = _activeMentionAt$getBoundingClientRect.left;\n\t var pageYOffset = this.window.pageYOffset;\n\t\n\t this.mentionPanel.style.top = bottom + pageYOffset + \"px\";\n\t this.mentionPanel.style.left = left + \"px\";\n\t },\n\t\n\t updatePanelContent: function updatePanelContent() {\n\t var textContent = this.activeMentionAt.textContent;\n\t\n\t this.renderPanelContent(this.mentionPanel, textContent, this.handleSelectMention.bind(this));\n\t },\n\t\n\t updatePanelContentWithDelay: function updatePanelContentWithDelay() {\n\t if (this.activeMentionAt && this.activeMentionAt === _mediumEditor2[\"default\"].selection.getSelectionStart(this.document)) {\n\t this.base.delay(this.updatePanelContent.bind(this));\n\t }\n\t }\n\t\n\t});\n\t\n\texports.TCMention = TCMention;\n\texports[\"default\"] = TCMention;\n\n/***/ },\n/* 1 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** index.min.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 62996039f16f7343584e\n **/","import MediumEditor from \"medium-editor\";\n\nexport const atKeyCode = 50;\nexport const hashKeyCode = 51;\n\nexport function unwrapForTextNode (el, doc) {\n var parentNode = el.parentNode,\n prevNode,\n currentNode;\n MediumEditor.util.unwrap(el, doc);\n // Merge textNode\n currentNode = parentNode.lastChild;\n while (prevNode = currentNode.previousSibling) {\n if (3 === currentNode.nodeType && 3 === prevNode.nodeType) {\n prevNode.textContent += currentNode.textContent;\n parentNode.removeChild(currentNode);\n }\n currentNode = prevNode;\n }\n}\n\nexport const TCMention = MediumEditor.Extension.extend({\n name: `mention`,\n\n /* extraClassName: [string]\n *\n * Extra className to be added with the `medium-editor-mention-panel` element.\n */\n extraClassName: ``,\n\n /* extraActiveClassName: [string]\n *\n * Extra active className to be added with the `medium-editor-mention-panel-active` element.\n */\n extraActiveClassName: ``,\n\n /* tagName: [string]\n *\n * Element tag name that would indicate that this mention. It will have\n * `medium-editor-mention-at` className applied on it.\n */\n tagName: `strong`,\n\n /* renderPanelContent: [function (panelEl: dom, currentMentionText: string, selectMentionCallback: function)]\n *\n * Render function that used to create the content of the panel when panel is show.\n *\n * @params panelEl: DOM element of the panel.\n *\n * @params currentMentionText: Often used as query criteria. e.g. @medium\n *\n * @params selectMentionCallback:\n * callback used in customized panel content.\n *\n * When called with null, it tells the Mention plugin to close the panel.\n * e.g. selectMentionCallback(null);\n *\n * When called with text, it tells the Mention plugin that the text is selected by the user.\n * e.g. selectMentionCallback(\"@mediumrocks\")\n */\n renderPanelContent: () => {},\n\n /* destroyPanelContent: [function (panelEl: dom)]\n *\n * Destroy function to remove any contents rendered by renderPanelContent before panelEl being removed from the document.\n *\n * @params panelEl: DOM element of the panel.\n */\n destroyPanelContent: () => {},\n\n activeTriggerList: [`@`],\n\n triggerClassNameMap: {\n \"#\": `medium-editor-mention-hash`,\n \"@\": `medium-editor-mention-at`,\n },\n\n init () {\n this.mentionPanel = this.createPanel();\n\n this.getEditorOption(`elementsContainer`).appendChild(this.mentionPanel);\n\n this.subscribe(`editableKeydown`, ::this.handleKeydown);\n this.subscribe(`editableBlur`, ::this.handleBlur);\n //\n // instance variables\n this.trigger = null;\n this.triggerClassName = null;\n this.activeMentionAt = null;\n },\n\n createPanel () {\n const el = this.document.createElement(`div`);\n\n el.classList.add(`medium-editor-mention-panel`);\n if (this.extraClassName) {\n el.classList.add(this.extraClassName);\n }\n el.innerHTML = this.getTemplate();\n\n return el;\n },\n\n getTemplate: function () {\n return (\n`

\nYour mention implementation\n

`);\n },\n\n destroy: function () {\n if (this.mentionPanel) {\n if (this.mentionPanel.parentNode) {\n this.destroyPanelContent(this.mentionPanel);\n this.mentionPanel.parentNode.removeChild(this.mentionPanel);\n }\n delete this.mentionPanel;\n }\n },\n\n handleKeydown (event) {\n switch(MediumEditor.util.getKeyCode(event)) {\n case MediumEditor.util.keyCode.ESCAPE:\n this.hidePanel();\n break;\n case MediumEditor.util.keyCode.SPACE:\n this.hidePanel();\n break;\n case MediumEditor.util.keyCode.ENTER:\n this.hidePanel();\n break;\n case MediumEditor.util.keyCode.BACKSPACE:\n const {startOffset, endOffset} = MediumEditor.selection.getSelectionRange(this.document);\n if (1 === startOffset && 1 === endOffset) {\n // last word. So `@` will be deleted.\n this.hidePanel();\n } else {\n this.updatePanelContentWithDelay();\n }\n break;\n case atKeyCode:\n if (!!event.shiftKey && -1 !== this.activeTriggerList.indexOf(`@`)) {\n this.handleTriggerKeydown(`@`, event);\n } else {\n this.updatePanelContentWithDelay();\n }\n break;\n case hashKeyCode:\n if (!!event.shiftKey && -1 !== this.activeTriggerList.indexOf(`#`)) {\n this.handleTriggerKeydown(`#`, event);\n } else {\n this.updatePanelContentWithDelay();\n }\n break;\n default:\n this.updatePanelContentWithDelay();\n break;\n }\n },\n\n handleBlur (event) {\n this.hidePanel();\n },\n\n handleTriggerKeydown (trigger, event) {\n this.trigger = trigger;\n this.triggerClassName = this.triggerClassNameMap[this.trigger];\n\n event.preventDefault(); // Remove typed in `${ this.trigger }`\n const selectionStart = MediumEditor.selection.getSelectionStart(this.document);\n if (selectionStart.classList.contains(this.triggerClassName)) {\n // The case: `##` or `#medium#`\n // Just ignore it for now.\n return;\n }\n this.hidePanel();\n this.showPanel();\n this.positionPanel();\n this.updatePanelContentWithDelay();\n },\n\n handleSelectMention (seletedText) {\n if (seletedText) {\n const textNode = this.activeMentionAt.childNodes[0];\n textNode.textContent = seletedText;\n MediumEditor.selection.select(this.document, textNode, seletedText.length);\n //\n this.hidePanel();\n } else {\n this.hidePanel();\n }\n },\n\n hidePanel () {\n this.mentionPanel.classList.remove(`medium-editor-mention-panel-active`);\n if (this.extraActiveClassName) {\n this.mentionPanel.classList.remove(this.extraActiveClassName);\n }\n\n if (this.activeMentionAt) {\n // LIKE core#execAction\n this.base.saveSelection();\n unwrapForTextNode(this.activeMentionAt, this.document);\n this.base.restoreSelection();\n // LIKE core#execAction\n this.activeMentionAt = null;\n }\n },\n\n showPanel () {\n // Instead, insert our own version of it.\n // TODO: Not sure why, but using tag doens't work here\n const html = `<${ this.tagName } class=\"${ this.triggerClassName }\">${ this.trigger }`;\n MediumEditor.util.insertHTMLCommand(this.document, html);\n\n if (this.mentionPanel.classList.contains(`medium-editor-mention-panel-active`)) {\n return;\n }\n\n this.activeMentionAt = this.document.querySelector(`.${ this.triggerClassName }`)\n this.mentionPanel.classList.add(`medium-editor-mention-panel-active`);\n if (this.extraActiveClassName) {\n this.mentionPanel.classList.add(this.extraActiveClassName);\n }\n },\n\n positionPanel () {\n const {bottom, left} = this.activeMentionAt.getBoundingClientRect();\n const {pageYOffset} = this.window;\n\n this.mentionPanel.style.top = `${ bottom + pageYOffset }px`;\n this.mentionPanel.style.left = `${ left }px`;\n },\n\n updatePanelContent () {\n const {textContent} = this.activeMentionAt;\n this.renderPanelContent(this.mentionPanel, textContent, ::this.handleSelectMention);\n },\n\n updatePanelContentWithDelay () {\n if (this.activeMentionAt && this.activeMentionAt === MediumEditor.selection.getSelectionStart(this.document)) {\n this.base.delay(::this.updatePanelContent);\n }\n },\n\n});\n\nexport default TCMention;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/index.js\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"MediumEditor\"\n ** module id = 1\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///index.min.js","webpack:///webpack/bootstrap e2f17ead67b6923cdf9b","webpack:///./src/index.js","webpack:///external \"MediumEditor\""],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE_1__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","_interopRequireDefault","obj","__esModule","default","unwrapForTextNode","el","doc","prevNode","currentNode","parentNode","_mediumEditor2","util","unwrap","lastChild","previousSibling","nodeType","textContent","removeChild","Object","defineProperty","value","_mediumEditor","atKeyCode","hashKeyCode","TCMention","Extension","extend","name","extraClassName","extraActiveClassName","tagName","renderPanelContent","destroyPanelContent","activeTriggerList","triggerClassNameMap","#","@","init","mentionPanel","createPanel","getEditorOption","appendChild","subscribe","handleKeydown","bind","handleBlur","trigger","triggerClassName","activeMentionAt","document","createElement","classList","add","innerHTML","getTemplate","destroy","event","getKeyCode","keyCode","ESCAPE","hidePanel","SPACE","ENTER","BACKSPACE","_MediumEditor$selection$getSelectionRange","selection","getSelectionRange","startOffset","endOffset","updatePanelContentWithDelay","shiftKey","indexOf","handleTriggerKeydown","preventDefault","selectionStart","getSelectionStart","contains","showPanel","positionPanel","handleSelectMention","seletedText","textNode","childNodes","select","length","remove","base","saveSelection","restoreSelection","html","insertHTMLCommand","querySelector","_activeMentionAt$getBoundingClientRect","getBoundingClientRect","bottom","left","width","_window","window","pageXOffset","pageYOffset","style","top","updatePanelContent","delay"],"mappings":"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","file":"index.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"MediumEditor\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"MediumEditor\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"MediumEditor\")) : factory(root[\"MediumEditor\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"MediumEditor\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"MediumEditor\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"MediumEditor\")) : factory(root[\"MediumEditor\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\texports.unwrapForTextNode = unwrapForTextNode;\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\t\n\tvar _mediumEditor = __webpack_require__(1);\n\t\n\tvar _mediumEditor2 = _interopRequireDefault(_mediumEditor);\n\t\n\tvar atKeyCode = 50;\n\texports.atKeyCode = atKeyCode;\n\tvar hashKeyCode = 51;\n\t\n\texports.hashKeyCode = hashKeyCode;\n\t\n\tfunction unwrapForTextNode(el, doc) {\n\t var parentNode = el.parentNode,\n\t prevNode,\n\t currentNode;\n\t _mediumEditor2[\"default\"].util.unwrap(el, doc);\n\t // Merge textNode\n\t currentNode = parentNode.lastChild;\n\t while (prevNode = currentNode.previousSibling) {\n\t if (3 === currentNode.nodeType && 3 === prevNode.nodeType) {\n\t prevNode.textContent += currentNode.textContent;\n\t parentNode.removeChild(currentNode);\n\t }\n\t currentNode = prevNode;\n\t }\n\t}\n\t\n\tvar TCMention = _mediumEditor2[\"default\"].Extension.extend({\n\t name: \"mention\",\n\t\n\t /* extraClassName: [string]\n\t *\n\t * Extra className to be added with the `medium-editor-mention-panel` element.\n\t */\n\t extraClassName: \"\",\n\t\n\t /* extraActiveClassName: [string]\n\t *\n\t * Extra active className to be added with the `medium-editor-mention-panel-active` element.\n\t */\n\t extraActiveClassName: \"\",\n\t\n\t /* tagName: [string]\n\t *\n\t * Element tag name that would indicate that this mention. It will have\n\t * `medium-editor-mention-at` className applied on it.\n\t */\n\t tagName: \"strong\",\n\t\n\t /* renderPanelContent: [function (panelEl: dom, currentMentionText: string, selectMentionCallback: function)]\n\t *\n\t * Render function that used to create the content of the panel when panel is show.\n\t *\n\t * @params panelEl: DOM element of the panel.\n\t *\n\t * @params currentMentionText: Often used as query criteria. e.g. @medium\n\t *\n\t * @params selectMentionCallback:\n\t * callback used in customized panel content.\n\t *\n\t * When called with null, it tells the Mention plugin to close the panel.\n\t * e.g. selectMentionCallback(null);\n\t *\n\t * When called with text, it tells the Mention plugin that the text is selected by the user.\n\t * e.g. selectMentionCallback(\"@mediumrocks\")\n\t */\n\t renderPanelContent: function renderPanelContent() {},\n\t\n\t /* destroyPanelContent: [function (panelEl: dom)]\n\t *\n\t * Destroy function to remove any contents rendered by renderPanelContent before panelEl being removed from the document.\n\t *\n\t * @params panelEl: DOM element of the panel.\n\t */\n\t destroyPanelContent: function destroyPanelContent() {},\n\t\n\t activeTriggerList: [\"@\"],\n\t\n\t triggerClassNameMap: {\n\t \"#\": \"medium-editor-mention-hash\",\n\t \"@\": \"medium-editor-mention-at\"\n\t },\n\t\n\t init: function init() {\n\t this.mentionPanel = this.createPanel();\n\t\n\t this.getEditorOption(\"elementsContainer\").appendChild(this.mentionPanel);\n\t\n\t this.subscribe(\"editableKeydown\", this.handleKeydown.bind(this));\n\t this.subscribe(\"editableBlur\", this.handleBlur.bind(this));\n\t //\n\t // instance variables\n\t this.trigger = null;\n\t this.triggerClassName = null;\n\t this.activeMentionAt = null;\n\t },\n\t\n\t createPanel: function createPanel() {\n\t var el = this.document.createElement(\"div\");\n\t\n\t el.classList.add(\"medium-editor-mention-panel\");\n\t if (this.extraClassName) {\n\t el.classList.add(this.extraClassName);\n\t }\n\t el.innerHTML = this.getTemplate();\n\t\n\t return el;\n\t },\n\t\n\t getTemplate: function getTemplate() {\n\t return \"

\\nYour mention implementation\\n

\";\n\t },\n\t\n\t destroy: function destroy() {\n\t if (this.mentionPanel) {\n\t if (this.mentionPanel.parentNode) {\n\t this.destroyPanelContent(this.mentionPanel);\n\t this.mentionPanel.parentNode.removeChild(this.mentionPanel);\n\t }\n\t delete this.mentionPanel;\n\t }\n\t },\n\t\n\t handleKeydown: function handleKeydown(event) {\n\t switch (_mediumEditor2[\"default\"].util.getKeyCode(event)) {\n\t case _mediumEditor2[\"default\"].util.keyCode.ESCAPE:\n\t this.hidePanel();\n\t break;\n\t case _mediumEditor2[\"default\"].util.keyCode.SPACE:\n\t this.hidePanel();\n\t break;\n\t case _mediumEditor2[\"default\"].util.keyCode.ENTER:\n\t this.hidePanel();\n\t break;\n\t case _mediumEditor2[\"default\"].util.keyCode.BACKSPACE:\n\t var _MediumEditor$selection$getSelectionRange = _mediumEditor2[\"default\"].selection.getSelectionRange(this.document),\n\t startOffset = _MediumEditor$selection$getSelectionRange.startOffset,\n\t endOffset = _MediumEditor$selection$getSelectionRange.endOffset;\n\t\n\t if (1 === startOffset && 1 === endOffset) {\n\t // last word. So `@` will be deleted.\n\t this.hidePanel();\n\t } else {\n\t this.updatePanelContentWithDelay();\n\t }\n\t break;\n\t case atKeyCode:\n\t if (!!event.shiftKey && -1 !== this.activeTriggerList.indexOf(\"@\")) {\n\t this.handleTriggerKeydown(\"@\", event);\n\t } else {\n\t this.updatePanelContentWithDelay();\n\t }\n\t break;\n\t case hashKeyCode:\n\t if (!!event.shiftKey && -1 !== this.activeTriggerList.indexOf(\"#\")) {\n\t this.handleTriggerKeydown(\"#\", event);\n\t } else {\n\t this.updatePanelContentWithDelay();\n\t }\n\t break;\n\t default:\n\t this.updatePanelContentWithDelay();\n\t break;\n\t }\n\t },\n\t\n\t handleBlur: function handleBlur(event) {\n\t this.hidePanel();\n\t },\n\t\n\t handleTriggerKeydown: function handleTriggerKeydown(trigger, event) {\n\t this.trigger = trigger;\n\t this.triggerClassName = this.triggerClassNameMap[this.trigger];\n\t\n\t event.preventDefault(); // Remove typed in `${ this.trigger }`\n\t var selectionStart = _mediumEditor2[\"default\"].selection.getSelectionStart(this.document);\n\t if (selectionStart.classList.contains(this.triggerClassName)) {\n\t // The case: `##` or `#medium#`\n\t // Just ignore it for now.\n\t return;\n\t }\n\t this.hidePanel();\n\t this.showPanel();\n\t this.positionPanel();\n\t this.updatePanelContentWithDelay();\n\t },\n\t\n\t handleSelectMention: function handleSelectMention(seletedText) {\n\t if (seletedText) {\n\t var textNode = this.activeMentionAt.childNodes[0];\n\t textNode.textContent = seletedText;\n\t _mediumEditor2[\"default\"].selection.select(this.document, textNode, seletedText.length);\n\t //\n\t this.hidePanel();\n\t } else {\n\t this.hidePanel();\n\t }\n\t },\n\t\n\t hidePanel: function hidePanel() {\n\t this.mentionPanel.classList.remove(\"medium-editor-mention-panel-active\");\n\t if (this.extraActiveClassName) {\n\t this.mentionPanel.classList.remove(this.extraActiveClassName);\n\t }\n\t\n\t if (this.activeMentionAt) {\n\t // LIKE core#execAction\n\t this.base.saveSelection();\n\t unwrapForTextNode(this.activeMentionAt, this.document);\n\t this.base.restoreSelection();\n\t // LIKE core#execAction\n\t this.activeMentionAt = null;\n\t }\n\t },\n\t\n\t showPanel: function showPanel() {\n\t // Instead, insert our own version of it.\n\t // TODO: Not sure why, but using tag doens't work here\n\t var html = \"<\" + this.tagName + \" class=\\\"\" + this.triggerClassName + \"\\\">\" + this.trigger + \"\";\n\t _mediumEditor2[\"default\"].util.insertHTMLCommand(this.document, html);\n\t\n\t if (this.mentionPanel.classList.contains(\"medium-editor-mention-panel-active\")) {\n\t return;\n\t }\n\t\n\t this.activeMentionAt = this.document.querySelector(\".\" + this.triggerClassName);\n\t this.mentionPanel.classList.add(\"medium-editor-mention-panel-active\");\n\t if (this.extraActiveClassName) {\n\t this.mentionPanel.classList.add(this.extraActiveClassName);\n\t }\n\t },\n\t\n\t positionPanel: function positionPanel() {\n\t var _activeMentionAt$getBoundingClientRect = this.activeMentionAt.getBoundingClientRect();\n\t\n\t var bottom = _activeMentionAt$getBoundingClientRect.bottom;\n\t var left = _activeMentionAt$getBoundingClientRect.left;\n\t var width = _activeMentionAt$getBoundingClientRect.width;\n\t var _window = this.window;\n\t var pageXOffset = _window.pageXOffset;\n\t var pageYOffset = _window.pageYOffset;\n\t\n\t this.mentionPanel.style.top = pageYOffset + bottom + \"px\";\n\t this.mentionPanel.style.left = pageXOffset + left + width + \"px\";\n\t },\n\t\n\t updatePanelContent: function updatePanelContent() {\n\t var textContent = this.activeMentionAt.textContent;\n\t\n\t this.positionPanel();\n\t this.renderPanelContent(this.mentionPanel, textContent, this.handleSelectMention.bind(this));\n\t },\n\t\n\t updatePanelContentWithDelay: function updatePanelContentWithDelay() {\n\t if (this.activeMentionAt && this.activeMentionAt === _mediumEditor2[\"default\"].selection.getSelectionStart(this.document)) {\n\t this.base.delay(this.updatePanelContent.bind(this));\n\t }\n\t }\n\t\n\t});\n\t\n\texports.TCMention = TCMention;\n\texports[\"default\"] = TCMention;\n\n/***/ },\n/* 1 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** index.min.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap e2f17ead67b6923cdf9b\n **/","import MediumEditor from \"medium-editor\";\n\nexport const atKeyCode = 50;\nexport const hashKeyCode = 51;\n\nexport function unwrapForTextNode (el, doc) {\n var parentNode = el.parentNode,\n prevNode,\n currentNode;\n MediumEditor.util.unwrap(el, doc);\n // Merge textNode\n currentNode = parentNode.lastChild;\n while (prevNode = currentNode.previousSibling) {\n if (3 === currentNode.nodeType && 3 === prevNode.nodeType) {\n prevNode.textContent += currentNode.textContent;\n parentNode.removeChild(currentNode);\n }\n currentNode = prevNode;\n }\n}\n\nexport const TCMention = MediumEditor.Extension.extend({\n name: `mention`,\n\n /* extraClassName: [string]\n *\n * Extra className to be added with the `medium-editor-mention-panel` element.\n */\n extraClassName: ``,\n\n /* extraActiveClassName: [string]\n *\n * Extra active className to be added with the `medium-editor-mention-panel-active` element.\n */\n extraActiveClassName: ``,\n\n /* tagName: [string]\n *\n * Element tag name that would indicate that this mention. It will have\n * `medium-editor-mention-at` className applied on it.\n */\n tagName: `strong`,\n\n /* renderPanelContent: [function (panelEl: dom, currentMentionText: string, selectMentionCallback: function)]\n *\n * Render function that used to create the content of the panel when panel is show.\n *\n * @params panelEl: DOM element of the panel.\n *\n * @params currentMentionText: Often used as query criteria. e.g. @medium\n *\n * @params selectMentionCallback:\n * callback used in customized panel content.\n *\n * When called with null, it tells the Mention plugin to close the panel.\n * e.g. selectMentionCallback(null);\n *\n * When called with text, it tells the Mention plugin that the text is selected by the user.\n * e.g. selectMentionCallback(\"@mediumrocks\")\n */\n renderPanelContent: () => {},\n\n /* destroyPanelContent: [function (panelEl: dom)]\n *\n * Destroy function to remove any contents rendered by renderPanelContent before panelEl being removed from the document.\n *\n * @params panelEl: DOM element of the panel.\n */\n destroyPanelContent: () => {},\n\n activeTriggerList: [`@`],\n\n triggerClassNameMap: {\n \"#\": `medium-editor-mention-hash`,\n \"@\": `medium-editor-mention-at`,\n },\n\n init () {\n this.mentionPanel = this.createPanel();\n\n this.getEditorOption(`elementsContainer`).appendChild(this.mentionPanel);\n\n this.subscribe(`editableKeydown`, ::this.handleKeydown);\n this.subscribe(`editableBlur`, ::this.handleBlur);\n //\n // instance variables\n this.trigger = null;\n this.triggerClassName = null;\n this.activeMentionAt = null;\n },\n\n createPanel () {\n const el = this.document.createElement(`div`);\n\n el.classList.add(`medium-editor-mention-panel`);\n if (this.extraClassName) {\n el.classList.add(this.extraClassName);\n }\n el.innerHTML = this.getTemplate();\n\n return el;\n },\n\n getTemplate: function () {\n return (\n`

\nYour mention implementation\n

`);\n },\n\n destroy: function () {\n if (this.mentionPanel) {\n if (this.mentionPanel.parentNode) {\n this.destroyPanelContent(this.mentionPanel);\n this.mentionPanel.parentNode.removeChild(this.mentionPanel);\n }\n delete this.mentionPanel;\n }\n },\n\n handleKeydown (event) {\n switch(MediumEditor.util.getKeyCode(event)) {\n case MediumEditor.util.keyCode.ESCAPE:\n this.hidePanel();\n break;\n case MediumEditor.util.keyCode.SPACE:\n this.hidePanel();\n break;\n case MediumEditor.util.keyCode.ENTER:\n this.hidePanel();\n break;\n case MediumEditor.util.keyCode.BACKSPACE:\n const {startOffset, endOffset} = MediumEditor.selection.getSelectionRange(this.document);\n if (1 === startOffset && 1 === endOffset) {\n // last word. So `@` will be deleted.\n this.hidePanel();\n } else {\n this.updatePanelContentWithDelay();\n }\n break;\n case atKeyCode:\n if (!!event.shiftKey && -1 !== this.activeTriggerList.indexOf(`@`)) {\n this.handleTriggerKeydown(`@`, event);\n } else {\n this.updatePanelContentWithDelay();\n }\n break;\n case hashKeyCode:\n if (!!event.shiftKey && -1 !== this.activeTriggerList.indexOf(`#`)) {\n this.handleTriggerKeydown(`#`, event);\n } else {\n this.updatePanelContentWithDelay();\n }\n break;\n default:\n this.updatePanelContentWithDelay();\n break;\n }\n },\n\n handleBlur (event) {\n this.hidePanel();\n },\n\n handleTriggerKeydown (trigger, event) {\n this.trigger = trigger;\n this.triggerClassName = this.triggerClassNameMap[this.trigger];\n\n event.preventDefault(); // Remove typed in `${ this.trigger }`\n const selectionStart = MediumEditor.selection.getSelectionStart(this.document);\n if (selectionStart.classList.contains(this.triggerClassName)) {\n // The case: `##` or `#medium#`\n // Just ignore it for now.\n return;\n }\n this.hidePanel();\n this.showPanel();\n this.positionPanel();\n this.updatePanelContentWithDelay();\n },\n\n handleSelectMention (seletedText) {\n if (seletedText) {\n const textNode = this.activeMentionAt.childNodes[0];\n textNode.textContent = seletedText;\n MediumEditor.selection.select(this.document, textNode, seletedText.length);\n //\n this.hidePanel();\n } else {\n this.hidePanel();\n }\n },\n\n hidePanel () {\n this.mentionPanel.classList.remove(`medium-editor-mention-panel-active`);\n if (this.extraActiveClassName) {\n this.mentionPanel.classList.remove(this.extraActiveClassName);\n }\n\n if (this.activeMentionAt) {\n // LIKE core#execAction\n this.base.saveSelection();\n unwrapForTextNode(this.activeMentionAt, this.document);\n this.base.restoreSelection();\n // LIKE core#execAction\n this.activeMentionAt = null;\n }\n },\n\n showPanel () {\n // Instead, insert our own version of it.\n // TODO: Not sure why, but using tag doens't work here\n const html = `<${ this.tagName } class=\"${ this.triggerClassName }\">${ this.trigger }`;\n MediumEditor.util.insertHTMLCommand(this.document, html);\n\n if (this.mentionPanel.classList.contains(`medium-editor-mention-panel-active`)) {\n return;\n }\n\n this.activeMentionAt = this.document.querySelector(`.${ this.triggerClassName }`)\n this.mentionPanel.classList.add(`medium-editor-mention-panel-active`);\n if (this.extraActiveClassName) {\n this.mentionPanel.classList.add(this.extraActiveClassName);\n }\n },\n\n positionPanel () {\n const {bottom, left, width} = this.activeMentionAt.getBoundingClientRect();\n const {pageXOffset, pageYOffset} = this.window;\n\n this.mentionPanel.style.top = `${ pageYOffset + bottom }px`;\n this.mentionPanel.style.left = `${ pageXOffset + left + width }px`;\n },\n\n updatePanelContent () {\n const {textContent} = this.activeMentionAt;\n this.positionPanel();\n this.renderPanelContent(this.mentionPanel, textContent, ::this.handleSelectMention);\n },\n\n updatePanelContentWithDelay () {\n if (this.activeMentionAt && this.activeMentionAt === MediumEditor.selection.getSelectionStart(this.document)) {\n this.base.delay(::this.updatePanelContent);\n }\n },\n\n});\n\nexport default TCMention;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/index.js\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"MediumEditor\"\n ** module id = 1\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file