{"version":3,"sources":["node_modules/nodebb-plugin-composer-default/static/lib/composer/controls.js"],"names":["define","preview","controls","insertIntoTextarea","textarea","value","payload","context","this","preventDefault","$","window","trigger","$textarea","currentVal","val","postContainer","parents","slice","selectionStart","render","wrapSelectionInTextareaWith","leading","trailing","undefined","matches","exec","selectionEnd","length","updateTextareaSelection","start","end","setSelectionRange","focus","getBlockData","textareaEl","query","replace","regex","RegExp","match","matchIndices","split","reduce","memo","line","push","index","in","cur","atEnd"],"mappings":"AAAA,aAIAA,OAAO,qBAAsB,oBAAqB,SAASC,GAC1D,IAAIC,KAKJA,EAASC,mBAAqB,SAASC,EAAUC,GAChD,IAAIC,GACHC,QAASC,KACTJ,SAAUA,EACVC,MAAOA,EACPI,eAAgB,OAEjBC,EAAEC,QAAQC,QAAQ,qCAAsCN,GAExD,GAAIA,EAAQG,eAAgB,CAC3B,OAGD,IAAII,EAAYH,EAAEJ,EAAQF,UAC1B,IAAIU,EAAaD,EAAUE,MAC3B,IAAIC,EAAgBH,EAAUI,QAAQ,0BAEtCJ,EAAUE,IACTD,EAAWI,MAAM,EAAGZ,EAAQF,SAASe,gBACrCb,EAAQD,MACRS,EAAWI,MAAMZ,EAAQF,SAASe,iBAGnClB,EAAQmB,OAAOJ,IAGhBd,EAASmB,4BAA8B,SAASjB,EAAUkB,EAASC,GAClE,IAAIjB,GACHC,QAASC,KACTJ,SAAUA,EACVkB,QAASA,EACTC,SAAUA,EACVd,eAAgB,OAEjBC,EAAEC,QAAQC,QAAQ,8CAA+CN,GAEjE,GAAIA,EAAQG,eAAgB,CAC3B,OAGD,GAAIc,IAAaC,UAAW,CAC3BD,EAAWD,EAGZ,IAAIT,EAAYH,EAAEN,GAClB,IAAIU,EAAaD,EAAUE,MAE3B,IAAIU,EAAU,yBAAyBC,KAAKZ,EAAWI,MAAMd,EAASe,eAAgBf,EAASuB,eAE/F,IAAKF,EAAQ,GAAI,CAEhBA,GAAW,KAAM,GAAIX,EAAWI,MAAMd,EAASe,eAAgBf,EAASuB,cAAe,IAGxFd,EAAUE,IACTD,EAAWI,MAAM,EAAGd,EAASe,gBAC7BM,EAAQ,GACRH,EACAG,EAAQ,GACRF,EACAE,EAAQ,GACRX,EAAWI,MAAMd,EAASuB,eAG3B,OAAQF,EAAQ,GAAGG,OAAQH,EAAQ,GAAGG,SAGvC1B,EAAS2B,wBAA0B,SAASzB,EAAU0B,EAAOC,GAC5D,IAAIzB,GACHC,QAASC,KACTJ,SAAUA,EACV0B,MAAOA,EACPC,IAAKA,EACLtB,eAAgB,OAEjBC,EAAEC,QAAQC,QAAQ,0CAA2CN,GAE7D,GAAIA,EAAQG,eAAgB,CAC3B,OAGDL,EAAS4B,kBAAkB1B,EAAQwB,MAAOxB,EAAQyB,KAClDrB,EAAEJ,EAAQF,UAAU6B,SAGrB/B,EAASgC,aAAe,SAAUC,EAAYC,EAAOjB,GAEpD,IAAId,EAAQ8B,EAAW9B,MACvB+B,EAAQA,EAAMC,QAAQ,sCAAuC,QAC7D,IAAIC,EAAQ,IAAIC,OAAOH,EAAO,KAC9B,IAAII,EACJ,IAAIC,KACJ,IAAInC,EAGJD,EAAQA,EAAMqC,MAAM,MAAMC,OAAO,SAAUC,EAAMC,GAChD,GAAID,IAAS,KAAM,CAClB,OAAOA,EAGRA,EAAOzB,GAAkB0B,EAAKjB,OAASiB,EAAO,KAE9C,GAAID,IAAS,KAAM,CAClBzB,EAAiBA,GAAkB0B,EAAKjB,OAAS,GAGlD,OAAOgB,GACL,MAGH,OAAOJ,EAAQF,EAAMZ,KAAKrB,MAAY,KAAM,CAC3CoC,EAAaK,KAAKN,EAAMO,OAGzBzC,GACC0C,MAAOP,EAAaE,OAAO,SAAUC,EAAMK,GAC1C,GAAI9B,GAAkB8B,EAAM,EAAG,CAC9BL,GAAQ,EAGT,OAAOA,GACL,GAAK,GACRM,MAAOT,EAAaE,OAAO,SAAUC,EAAMK,GAC1C,GAAIL,EAAM,CACT,OAAOA,EAGR,OAAOzB,IAAmB8B,GACxB,QAGJ3C,EAAQ4C,MAAQ5C,EAAQ0C,GAAK1C,EAAQ4C,MAAQ,MAC7C,OAAO5C,GAGR,OAAOJ","file":"node_modules/nodebb-plugin-composer-default/static/lib/composer/controls.js","sourcesContent":["\"use strict\";\r\n\r\n/*global define*/\r\n\r\ndefine('composer/controls', ['composer/preview'], function(preview) {\r\n\tvar controls = {};\r\n\r\n\t/*************************************************/\r\n\t/* Rich Textarea Controls */\r\n\t/*************************************************/\r\n\tcontrols.insertIntoTextarea = function(textarea, value) {\r\n\t\tvar payload = {\r\n\t\t\tcontext: this,\r\n\t\t\ttextarea: textarea,\r\n\t\t\tvalue: value,\r\n\t\t\tpreventDefault: false,\r\n\t\t};\r\n\t\t$(window).trigger('action:composer.insertIntoTextarea', payload);\r\n\r\n\t\tif (payload.preventDefault) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar $textarea = $(payload.textarea);\r\n\t\tvar currentVal = $textarea.val();\r\n\t\tvar postContainer = $textarea.parents('[component=\"composer\"]');\r\n\r\n\t\t$textarea.val(\r\n\t\t\tcurrentVal.slice(0, payload.textarea.selectionStart) +\r\n\t\t\tpayload.value +\r\n\t\t\tcurrentVal.slice(payload.textarea.selectionStart)\r\n\t\t);\r\n\r\n\t\tpreview.render(postContainer);\r\n\t};\r\n\r\n\tcontrols.wrapSelectionInTextareaWith = function(textarea, leading, trailing) {\r\n\t\tvar payload = {\r\n\t\t\tcontext: this,\r\n\t\t\ttextarea: textarea,\r\n\t\t\tleading: leading,\r\n\t\t\ttrailing: trailing,\r\n\t\t\tpreventDefault: false,\r\n\t\t};\r\n\t\t$(window).trigger('action:composer.wrapSelectionInTextareaWith', payload);\r\n\r\n\t\tif (payload.preventDefault) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (trailing === undefined) {\r\n\t\t\ttrailing = leading;\r\n\t\t}\r\n\r\n\t\tvar $textarea = $(textarea);\r\n\t\tvar currentVal = $textarea.val();\r\n\r\n\t\tvar matches = /^(\\s*)([\\s\\S]*?)(\\s*)$/.exec(currentVal.slice(textarea.selectionStart, textarea.selectionEnd));\r\n\r\n\t\tif (!matches[2]) {\r\n\t\t\t// selection is entirely whitespace\r\n\t\t\tmatches = [null, '', currentVal.slice(textarea.selectionStart, textarea.selectionEnd), ''];\r\n\t\t}\r\n\r\n\t\t$textarea.val(\r\n\t\t\tcurrentVal.slice(0, textarea.selectionStart) +\r\n\t\t\tmatches[1] +\r\n\t\t\tleading +\r\n\t\t\tmatches[2] +\r\n\t\t\ttrailing +\r\n\t\t\tmatches[3] +\r\n\t\t\tcurrentVal.slice(textarea.selectionEnd)\r\n\t\t);\r\n\r\n\t\treturn [matches[1].length, matches[3].length];\r\n\t};\r\n\r\n\tcontrols.updateTextareaSelection = function(textarea, start, end) {\r\n\t\tvar payload = {\r\n\t\t\tcontext: this,\r\n\t\t\ttextarea: textarea,\r\n\t\t\tstart: start,\r\n\t\t\tend: end,\r\n\t\t\tpreventDefault: false,\r\n\t\t};\r\n\t\t$(window).trigger('action:composer.updateTextareaSelection', payload);\r\n\r\n\t\tif (payload.preventDefault) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\ttextarea.setSelectionRange(payload.start, payload.end);\r\n\t\t$(payload.textarea).focus();\r\n\t};\r\n\r\n\tcontrols.getBlockData = function (textareaEl, query, selectionStart) {\r\n\t\t// Determines whether the cursor is sitting inside a block-type element (bold, italic, etc.)\r\n\t\tvar value = textareaEl.value;\r\n\t\tquery = query.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\");\r\n\t\tvar regex = new RegExp(query, 'g');\r\n\t\tvar match;\r\n\t\tvar matchIndices = [];\r\n\t\tvar payload;\r\n\r\n\t\t// Isolate the line the cursor is on\r\n\t\tvalue = value.split('\\n').reduce(function (memo, line) {\r\n\t\t\tif (memo !== null) {\r\n\t\t\t\treturn memo;\r\n\t\t\t}\r\n\r\n\t\t\tmemo = selectionStart <= line.length ? line : null;\r\n\r\n\t\t\tif (memo === null) {\r\n\t\t\t\tselectionStart = selectionStart - (line.length + 1);\r\n\t\t\t}\r\n\r\n\t\t\treturn memo;\r\n\t\t}, null);\r\n\r\n\t\t// Find query characters and determine return payload\r\n\t\twhile((match = regex.exec(value)) !== null) {\r\n\t\t\tmatchIndices.push(match.index);\r\n\t\t}\r\n\r\n\t\tpayload = {\r\n\t\t\tin: !!(matchIndices.reduce(function (memo, cur) {\r\n\t\t\t\tif (selectionStart >= cur + 2) {\r\n\t\t\t\t\tmemo += 1;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn memo;\r\n\t\t\t}, 0) % 2),\r\n\t\t\tatEnd: matchIndices.reduce(function (memo, cur) {\r\n\t\t\t\tif (memo) {\r\n\t\t\t\t\treturn memo;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn selectionStart === cur;\r\n\t\t\t}, false),\r\n\t\t}\r\n\r\n\t\tpayload.atEnd = payload.in ? payload.atEnd : false;\r\n\t\treturn payload;\r\n\t}\r\n\r\n\treturn controls;\r\n});\r\n"]}