{"version":3,"sources":["node_modules/nodebb-plugin-composer-default/static/lib/composer/autocomplete.js"],"names":["define","preview","autocomplete","_active","$","window","on","evt","data","hasOwnProperty","post_uuid","destroy","init","postContainer","element","find","dropdownClass","timer","length","strategies","options","style","z-index","className","clearTimeout","setTimeout","dropdown","document","querySelector","pos","getBoundingClientRect","margin","parseFloat","marginTop","offset","innerHeight","bottom","Math","min","trigger","setup","render","get","editor","nodeName","Textarea","Textcomplete","editors","getAttribute","ContentEditable","setAttribute","textcomplete","register","items","activate"],"mappings":"AAAA,aAIAA,OAAO,yBAA0B,oBAAqB,SAASC,GAE9D,IAAIC,GACHC,YAGDC,EAAEC,QAAQC,GAAG,0BAA2B,SAAUC,EAAKC,GACtD,GAAIN,EAAaC,QAAQM,eAAeD,EAAKE,WAAY,CACxDR,EAAaC,QAAQK,EAAKE,WAAWC,iBAC9BT,EAAaC,QAAQK,EAAKE,cAInCR,EAAaU,KAAO,SAASC,EAAeH,GAC3C,IAAII,EAAUD,EAAcE,KAAK,UACjC,IAAIC,EAAgB,kCAAoCN,EACxD,IAAIO,EAEJ,IAAKH,EAAQI,OAAQ,CAOpB,OAGD,IAAIV,GACHM,QAASA,EACTK,cACAC,SACCC,OACCC,UAAW,KAEZC,UAAWP,EAAgB,yCAI7BF,EAAQR,GAAG,QAAS,WACnBkB,aAAaP,GACbA,EAAQQ,WAAW,WAClB,IAAIC,EAAWC,SAASC,cAAc,IAAMZ,GAC5C,IAAIa,EAAMH,EAASI,wBAEnB,IAAIC,EAASC,WAAWN,EAASL,MAAMY,UAAW,KAAO,EAEzD,IAAIC,EAAS7B,OAAO8B,YAAcJ,EAAS,GAAKF,EAAIO,OACpDV,EAASL,MAAMY,UAAYI,KAAKC,IAAIJ,EAAQ,GAAK,MAC/C,KAGJ9B,EAAEC,QAAQkC,QAAQ,6BAA8B/B,GAEhDN,EAAaC,QAAQO,GAAaR,EAAasC,MAAMhC,GAErDA,EAAKM,QAAQR,GAAG,sBAAuB,WACtCL,EAAQwC,OAAO5B,MAKjBX,EAAasC,MAAQ,SAAUhC,GAC9B,IAAIM,EAAUN,EAAKM,QAAQ4B,IAAI,GAC/B,IAAK5B,EAAS,CACb,OAED,IAAI6B,EACJ,GAAI7B,EAAQ8B,WAAa,WAAY,CACpC,IAAIC,EAAWxC,OAAOyC,aAAaC,QAAQF,SAC3CF,EAAS,IAAIE,EAAS/B,QAChB,GAAIA,EAAQ8B,WAAa,OAAS9B,EAAQkC,aAAa,qBAAuB,OAAQ,CAC5F,IAAIC,EAAkB5C,OAAOyC,aAAaC,QAAQE,gBAClDN,EAAS,IAAIM,EAAgBnC,GAI9BA,EAAQoC,aAAa,MAAOvB,SAASC,cAAc,QAAQoB,aAAa,aAExE,IAAIG,EAAe,IAAI9C,OAAOyC,aAAaH,GAC1CjB,SAAUlB,EAAKY,UAEhB+B,EAAaC,SAAS5C,EAAKW,YAC3BgC,EAAa7C,GAAG,WAAY,WAC3B,GAAI6C,EAAazB,SAAS2B,MAAMnC,OAAQ,CAEvCiC,EAAazB,SAAS2B,MAAM,GAAGC,cAIjC,OAAOH,GAGR,OAAOjD","file":"node_modules/nodebb-plugin-composer-default/static/lib/composer/autocomplete.js","sourcesContent":["'use strict';\r\n\r\n/* globals define */\r\n\r\ndefine('composer/autocomplete', ['composer/preview'], function(preview) {\r\n\r\n\tvar autocomplete = {\r\n\t\t_active: {},\r\n\t};\r\n\r\n\t$(window).on('action:composer.discard', function (evt, data) {\r\n\t\tif (autocomplete._active.hasOwnProperty(data.post_uuid)) {\r\n\t\t\tautocomplete._active[data.post_uuid].destroy();\r\n\t\t\tdelete autocomplete._active[data.post_uuid];\r\n\t\t}\r\n\t});\r\n\r\n\tautocomplete.init = function(postContainer, post_uuid) {\r\n\t\tvar element = postContainer.find('.write');\r\n\t\tvar dropdownClass = 'composer-autocomplete-dropdown-' + post_uuid;\r\n\t\tvar timer;\r\n\r\n\t\tif (!element.length) {\r\n\t\t\t/**\r\n\t\t\t * Some composers do their own thing before calling autocomplete.init() again.\r\n\t\t\t * One reason is because they want to override the textarea with their own element.\r\n\t\t\t * In those scenarios, they don't specify the \"write\" class, and this conditional\r\n\t\t\t * looks for that and stops the autocomplete init process.\r\n\t\t\t **/\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar data = {\r\n\t\t\telement: element,\r\n\t\t\tstrategies: [],\r\n\t\t\toptions: {\r\n\t\t\t\tstyle: {\r\n\t\t\t\t\t'z-index': 20000,\r\n\t\t\t\t},\r\n\t\t\t\tclassName: dropdownClass + ' dropdown-menu textcomplete-dropdown',\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\telement.on('keyup', function () {\r\n\t\t\tclearTimeout(timer);\r\n\t\t\ttimer = setTimeout(function () {\r\n\t\t\t\tvar dropdown = document.querySelector('.' + dropdownClass);\r\n\t\t\t\tvar pos = dropdown.getBoundingClientRect();\r\n\r\n\t\t\t\tvar margin = parseFloat(dropdown.style.marginTop, 10) || 0;\r\n\r\n\t\t\t\tvar offset = window.innerHeight + margin - 10 - pos.bottom;\r\n\t\t\t\tdropdown.style.marginTop = Math.min(offset, 0) + 'px';\r\n\t\t\t}, 0);\r\n\t\t});\r\n\r\n\t\t$(window).trigger('composer:autocomplete:init', data);\r\n\r\n\t\tautocomplete._active[post_uuid] = autocomplete.setup(data);\r\n\r\n\t\tdata.element.on('textComplete:select', function() {\r\n\t\t\tpreview.render(postContainer);\r\n\t\t});\r\n\t};\r\n\r\n\t// This is a generic method that is also used by the chat\r\n\tautocomplete.setup = function (data) {\r\n\t\tvar element = data.element.get(0);\r\n\t\tif (!element) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tvar editor;\r\n\t\tif (element.nodeName === 'TEXTAREA') {\r\n\t\t\tvar Textarea = window.Textcomplete.editors.Textarea;\r\n\t\t\teditor = new Textarea(element);\r\n\t\t} else if (element.nodeName === 'DIV' && element.getAttribute('contenteditable') === 'true') {\r\n\t\t\tvar ContentEditable = window.Textcomplete.editors.ContentEditable;\r\n\t\t\teditor = new ContentEditable(element);\r\n\t\t}\r\n\r\n\t\t// yuku-t/textcomplete inherits directionality from target element itself\r\n\t\telement.setAttribute('dir', document.querySelector('html').getAttribute('data-dir'));\r\n\r\n\t\tvar textcomplete = new window.Textcomplete(editor, {\r\n\t\t\tdropdown: data.options,\r\n\t\t});\r\n\t\ttextcomplete.register(data.strategies);\r\n\t\ttextcomplete.on('rendered', function () {\r\n\t\t\tif (textcomplete.dropdown.items.length) {\r\n\t\t\t\t// Activate the first item by default.\r\n\t\t\t\ttextcomplete.dropdown.items[0].activate();\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn textcomplete;\r\n\t};\r\n\r\n\treturn autocomplete;\r\n});\r\n"]}