⚝
One Hat Cyber Team
⚝
Your IP:
216.73.217.4
Server IP:
41.128.143.86
Server:
Linux host.raqmix.cloud 6.8.0-1025-azure #30~22.04.1-Ubuntu SMP Wed Mar 12 15:28:20 UTC 2025 x86_64
Server Software:
Apache
PHP Version:
8.3.23
Buat File
|
Buat Folder
Eksekusi
Dir :
~
/
usr
/
share
/
grafana
/
public
/
build
/
View File Name :
6464.f379e014f9909e621de6.js.map
{"version":3,"file":"6464.f379e014f9909e621de6.js","mappings":"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","sources":["webpack://grafana/./node_modules/brace/ext/language_tools.js"],"sourcesContent":["ace.define(\"ace/snippets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/lang\",\"ace/range\",\"ace/anchor\",\"ace/keyboard/hash_handler\",\"ace/tokenizer\",\"ace/lib/dom\",\"ace/editor\"], function(acequire, exports, module) {\n\"use strict\";\nvar oop = acequire(\"./lib/oop\");\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\nvar lang = acequire(\"./lib/lang\");\nvar Range = acequire(\"./range\").Range;\nvar Anchor = acequire(\"./anchor\").Anchor;\nvar HashHandler = acequire(\"./keyboard/hash_handler\").HashHandler;\nvar Tokenizer = acequire(\"./tokenizer\").Tokenizer;\nvar comparePoints = Range.comparePoints;\n\nvar SnippetManager = function() {\n this.snippetMap = {};\n this.snippetNameMap = {};\n};\n\n(function() {\n oop.implement(this, EventEmitter);\n \n this.getTokenizer = function() {\n function TabstopToken(str, _, stack) {\n str = str.substr(1);\n if (/^\\d+$/.test(str) && !stack.inFormatString)\n return [{tabstopId: parseInt(str, 10)}];\n return [{text: str}];\n }\n function escape(ch) {\n return \"(?:[^\\\\\\\\\" + ch + \"]|\\\\\\\\.)\";\n }\n SnippetManager.$tokenizer = new Tokenizer({\n start: [\n {regex: /:/, onMatch: function(val, state, stack) {\n if (stack.length && stack[0].expectIf) {\n stack[0].expectIf = false;\n stack[0].elseBranch = stack[0];\n return [stack[0]];\n }\n return \":\";\n }},\n {regex: /\\\\./, onMatch: function(val, state, stack) {\n var ch = val[1];\n if (ch == \"}\" && stack.length) {\n val = ch;\n }else if (\"`$\\\\\".indexOf(ch) != -1) {\n val = ch;\n } else if (stack.inFormatString) {\n if (ch == \"n\")\n val = \"\\n\";\n else if (ch == \"t\")\n val = \"\\n\";\n else if (\"ulULE\".indexOf(ch) != -1) {\n val = {changeCase: ch, local: ch > \"a\"};\n }\n }\n\n return [val];\n }},\n {regex: /}/, onMatch: function(val, state, stack) {\n return [stack.length ? stack.shift() : val];\n }},\n {regex: /\\$(?:\\d+|\\w+)/, onMatch: TabstopToken},\n {regex: /\\$\\{[\\dA-Z_a-z]+/, onMatch: function(str, state, stack) {\n var t = TabstopToken(str.substr(1), state, stack);\n stack.unshift(t[0]);\n return t;\n }, next: \"snippetVar\"},\n {regex: /\\n/, token: \"newline\", merge: false}\n ],\n snippetVar: [\n {regex: \"\\\\|\" + escape(\"\\\\|\") + \"*\\\\|\", onMatch: function(val, state, stack) {\n stack[0].choices = val.slice(1, -1).split(\",\");\n }, next: \"start\"},\n {regex: \"/(\" + escape(\"/\") + \"+)/(?:(\" + escape(\"/\") + \"*)/)(\\\\w*):?\",\n onMatch: function(val, state, stack) {\n var ts = stack[0];\n ts.fmtString = val;\n\n val = this.splitRegex.exec(val);\n ts.guard = val[1];\n ts.fmt = val[2];\n ts.flag = val[3];\n return \"\";\n }, next: \"start\"},\n {regex: \"`\" + escape(\"`\") + \"*`\", onMatch: function(val, state, stack) {\n stack[0].code = val.splice(1, -1);\n return \"\";\n }, next: \"start\"},\n {regex: \"\\\\?\", onMatch: function(val, state, stack) {\n if (stack[0])\n stack[0].expectIf = true;\n }, next: \"start\"},\n {regex: \"([^:}\\\\\\\\]|\\\\\\\\.)*:?\", token: \"\", next: \"start\"}\n ],\n formatString: [\n {regex: \"/(\" + escape(\"/\") + \"+)/\", token: \"regex\"},\n {regex: \"\", onMatch: function(val, state, stack) {\n stack.inFormatString = true;\n }, next: \"start\"}\n ]\n });\n SnippetManager.prototype.getTokenizer = function() {\n return SnippetManager.$tokenizer;\n };\n return SnippetManager.$tokenizer;\n };\n\n this.tokenizeTmSnippet = function(str, startState) {\n return this.getTokenizer().getLineTokens(str, startState).tokens.map(function(x) {\n return x.value || x;\n });\n };\n\n this.$getDefaultValue = function(editor, name) {\n if (/^[A-Z]\\d+$/.test(name)) {\n var i = name.substr(1);\n return (this.variables[name[0] + \"__\"] || {})[i];\n }\n if (/^\\d+$/.test(name)) {\n return (this.variables.__ || {})[name];\n }\n name = name.replace(/^TM_/, \"\");\n\n if (!editor)\n return;\n var s = editor.session;\n switch(name) {\n case \"CURRENT_WORD\":\n var r = s.getWordRange();\n case \"SELECTION\":\n case \"SELECTED_TEXT\":\n return s.getTextRange(r);\n case \"CURRENT_LINE\":\n return s.getLine(editor.getCursorPosition().row);\n case \"PREV_LINE\": // not possible in textmate\n return s.getLine(editor.getCursorPosition().row - 1);\n case \"LINE_INDEX\":\n return editor.getCursorPosition().column;\n case \"LINE_NUMBER\":\n return editor.getCursorPosition().row + 1;\n case \"SOFT_TABS\":\n return s.getUseSoftTabs() ? \"YES\" : \"NO\";\n case \"TAB_SIZE\":\n return s.getTabSize();\n case \"FILENAME\":\n case \"FILEPATH\":\n return \"\";\n case \"FULLNAME\":\n return \"Ace\";\n }\n };\n this.variables = {};\n this.getVariableValue = function(editor, varName) {\n if (this.variables.hasOwnProperty(varName))\n return this.variables[varName](editor, varName) || \"\";\n return this.$getDefaultValue(editor, varName) || \"\";\n };\n this.tmStrFormat = function(str, ch, editor) {\n var flag = ch.flag || \"\";\n var re = ch.guard;\n re = new RegExp(re, flag.replace(/[^gi]/, \"\"));\n var fmtTokens = this.tokenizeTmSnippet(ch.fmt, \"formatString\");\n var _self = this;\n var formatted = str.replace(re, function() {\n _self.variables.__ = arguments;\n var fmtParts = _self.resolveVariables(fmtTokens, editor);\n var gChangeCase = \"E\";\n for (var i = 0; i < fmtParts.length; i++) {\n var ch = fmtParts[i];\n if (typeof ch == \"object\") {\n fmtParts[i] = \"\";\n if (ch.changeCase && ch.local) {\n var next = fmtParts[i + 1];\n if (next && typeof next == \"string\") {\n if (ch.changeCase == \"u\")\n fmtParts[i] = next[0].toUpperCase();\n else\n fmtParts[i] = next[0].toLowerCase();\n fmtParts[i + 1] = next.substr(1);\n }\n } else if (ch.changeCase) {\n gChangeCase = ch.changeCase;\n }\n } else if (gChangeCase == \"U\") {\n fmtParts[i] = ch.toUpperCase();\n } else if (gChangeCase == \"L\") {\n fmtParts[i] = ch.toLowerCase();\n }\n }\n return fmtParts.join(\"\");\n });\n this.variables.__ = null;\n return formatted;\n };\n\n this.resolveVariables = function(snippet, editor) {\n var result = [];\n for (var i = 0; i < snippet.length; i++) {\n var ch = snippet[i];\n if (typeof ch == \"string\") {\n result.push(ch);\n } else if (typeof ch != \"object\") {\n continue;\n } else if (ch.skip) {\n gotoNext(ch);\n } else if (ch.processed < i) {\n continue;\n } else if (ch.text) {\n var value = this.getVariableValue(editor, ch.text);\n if (value && ch.fmtString)\n value = this.tmStrFormat(value, ch);\n ch.processed = i;\n if (ch.expectIf == null) {\n if (value) {\n result.push(value);\n gotoNext(ch);\n }\n } else {\n if (value) {\n ch.skip = ch.elseBranch;\n } else\n gotoNext(ch);\n }\n } else if (ch.tabstopId != null) {\n result.push(ch);\n } else if (ch.changeCase != null) {\n result.push(ch);\n }\n }\n function gotoNext(ch) {\n var i1 = snippet.indexOf(ch, i + 1);\n if (i1 != -1)\n i = i1;\n }\n return result;\n };\n\n this.insertSnippetForSelection = function(editor, snippetText) {\n var cursor = editor.getCursorPosition();\n var line = editor.session.getLine(cursor.row);\n var tabString = editor.session.getTabString();\n var indentString = line.match(/^\\s*/)[0];\n \n if (cursor.column < indentString.length)\n indentString = indentString.slice(0, cursor.column);\n\n snippetText = snippetText.replace(/\\r/g, \"\");\n var tokens = this.tokenizeTmSnippet(snippetText);\n tokens = this.resolveVariables(tokens, editor);\n tokens = tokens.map(function(x) {\n if (x == \"\\n\")\n return x + indentString;\n if (typeof x == \"string\")\n return x.replace(/\\t/g, tabString);\n return x;\n });\n var tabstops = [];\n tokens.forEach(function(p, i) {\n if (typeof p != \"object\")\n return;\n var id = p.tabstopId;\n var ts = tabstops[id];\n if (!ts) {\n ts = tabstops[id] = [];\n ts.index = id;\n ts.value = \"\";\n }\n if (ts.indexOf(p) !== -1)\n return;\n ts.push(p);\n var i1 = tokens.indexOf(p, i + 1);\n if (i1 === -1)\n return;\n\n var value = tokens.slice(i + 1, i1);\n var isNested = value.some(function(t) {return typeof t === \"object\";});\n if (isNested && !ts.value) {\n ts.value = value;\n } else if (value.length && (!ts.value || typeof ts.value !== \"string\")) {\n ts.value = value.join(\"\");\n }\n });\n tabstops.forEach(function(ts) {ts.length = 0;});\n var expanding = {};\n function copyValue(val) {\n var copy = [];\n for (var i = 0; i < val.length; i++) {\n var p = val[i];\n if (typeof p == \"object\") {\n if (expanding[p.tabstopId])\n continue;\n var j = val.lastIndexOf(p, i - 1);\n p = copy[j] || {tabstopId: p.tabstopId};\n }\n copy[i] = p;\n }\n return copy;\n }\n for (var i = 0; i < tokens.length; i++) {\n var p = tokens[i];\n if (typeof p != \"object\")\n continue;\n var id = p.tabstopId;\n var i1 = tokens.indexOf(p, i + 1);\n if (expanding[id]) {\n if (expanding[id] === p)\n expanding[id] = null;\n continue;\n }\n \n var ts = tabstops[id];\n var arg = typeof ts.value == \"string\" ? [ts.value] : copyValue(ts.value);\n arg.unshift(i + 1, Math.max(0, i1 - i));\n arg.push(p);\n expanding[id] = p;\n tokens.splice.apply(tokens, arg);\n\n if (ts.indexOf(p) === -1)\n ts.push(p);\n }\n var row = 0, column = 0;\n var text = \"\";\n tokens.forEach(function(t) {\n if (typeof t === \"string\") {\n var lines = t.split(\"\\n\");\n if (lines.length > 1){\n column = lines[lines.length - 1].length;\n row += lines.length - 1;\n } else\n column += t.length;\n text += t;\n } else {\n if (!t.start)\n t.start = {row: row, column: column};\n else\n t.end = {row: row, column: column};\n }\n });\n var range = editor.getSelectionRange();\n var end = editor.session.replace(range, text);\n\n var tabstopManager = new TabstopManager(editor);\n var selectionId = editor.inVirtualSelectionMode && editor.selection.index;\n tabstopManager.addTabstops(tabstops, range.start, end, selectionId);\n };\n \n this.insertSnippet = function(editor, snippetText) {\n var self = this;\n if (editor.inVirtualSelectionMode)\n return self.insertSnippetForSelection(editor, snippetText);\n \n editor.forEachSelection(function() {\n self.insertSnippetForSelection(editor, snippetText);\n }, null, {keepOrder: true});\n \n if (editor.tabstopManager)\n editor.tabstopManager.tabNext();\n };\n\n this.$getScope = function(editor) {\n var scope = editor.session.$mode.$id || \"\";\n scope = scope.split(\"/\").pop();\n if (scope === \"html\" || scope === \"php\") {\n if (scope === \"php\" && !editor.session.$mode.inlinePhp) \n scope = \"html\";\n var c = editor.getCursorPosition();\n var state = editor.session.getState(c.row);\n if (typeof state === \"object\") {\n state = state[0];\n }\n if (state.substring) {\n if (state.substring(0, 3) == \"js-\")\n scope = \"javascript\";\n else if (state.substring(0, 4) == \"css-\")\n scope = \"css\";\n else if (state.substring(0, 4) == \"php-\")\n scope = \"php\";\n }\n }\n \n return scope;\n };\n\n this.getActiveScopes = function(editor) {\n var scope = this.$getScope(editor);\n var scopes = [scope];\n var snippetMap = this.snippetMap;\n if (snippetMap[scope] && snippetMap[scope].includeScopes) {\n scopes.push.apply(scopes, snippetMap[scope].includeScopes);\n }\n scopes.push(\"_\");\n return scopes;\n };\n\n this.expandWithTab = function(editor, options) {\n var self = this;\n var result = editor.forEachSelection(function() {\n return self.expandSnippetForSelection(editor, options);\n }, null, {keepOrder: true});\n if (result && editor.tabstopManager)\n editor.tabstopManager.tabNext();\n return result;\n };\n \n this.expandSnippetForSelection = function(editor, options) {\n var cursor = editor.getCursorPosition();\n var line = editor.session.getLine(cursor.row);\n var before = line.substring(0, cursor.column);\n var after = line.substr(cursor.column);\n\n var snippetMap = this.snippetMap;\n var snippet;\n this.getActiveScopes(editor).some(function(scope) {\n var snippets = snippetMap[scope];\n if (snippets)\n snippet = this.findMatchingSnippet(snippets, before, after);\n return !!snippet;\n }, this);\n if (!snippet)\n return false;\n if (options && options.dryRun)\n return true;\n editor.session.doc.removeInLine(cursor.row,\n cursor.column - snippet.replaceBefore.length,\n cursor.column + snippet.replaceAfter.length\n );\n\n this.variables.M__ = snippet.matchBefore;\n this.variables.T__ = snippet.matchAfter;\n this.insertSnippetForSelection(editor, snippet.content);\n\n this.variables.M__ = this.variables.T__ = null;\n return true;\n };\n\n this.findMatchingSnippet = function(snippetList, before, after) {\n for (var i = snippetList.length; i--;) {\n var s = snippetList[i];\n if (s.startRe && !s.startRe.test(before))\n continue;\n if (s.endRe && !s.endRe.test(after))\n continue;\n if (!s.startRe && !s.endRe)\n continue;\n\n s.matchBefore = s.startRe ? s.startRe.exec(before) : [\"\"];\n s.matchAfter = s.endRe ? s.endRe.exec(after) : [\"\"];\n s.replaceBefore = s.triggerRe ? s.triggerRe.exec(before)[0] : \"\";\n s.replaceAfter = s.endTriggerRe ? s.endTriggerRe.exec(after)[0] : \"\";\n return s;\n }\n };\n\n this.snippetMap = {};\n this.snippetNameMap = {};\n this.register = function(snippets, scope) {\n var snippetMap = this.snippetMap;\n var snippetNameMap = this.snippetNameMap;\n var self = this;\n \n if (!snippets) \n snippets = [];\n \n function wrapRegexp(src) {\n if (src && !/^\\^?\\(.*\\)\\$?$|^\\\\b$/.test(src))\n src = \"(?:\" + src + \")\";\n\n return src || \"\";\n }\n function guardedRegexp(re, guard, opening) {\n re = wrapRegexp(re);\n guard = wrapRegexp(guard);\n if (opening) {\n re = guard + re;\n if (re && re[re.length - 1] != \"$\")\n re = re + \"$\";\n } else {\n re = re + guard;\n if (re && re[0] != \"^\")\n re = \"^\" + re;\n }\n return new RegExp(re);\n }\n\n function addSnippet(s) {\n if (!s.scope)\n s.scope = scope || \"_\";\n scope = s.scope;\n if (!snippetMap[scope]) {\n snippetMap[scope] = [];\n snippetNameMap[scope] = {};\n }\n\n var map = snippetNameMap[scope];\n if (s.name) {\n var old = map[s.name];\n if (old)\n self.unregister(old);\n map[s.name] = s;\n }\n snippetMap[scope].push(s);\n\n if (s.tabTrigger && !s.trigger) {\n if (!s.guard && /^\\w/.test(s.tabTrigger))\n s.guard = \"\\\\b\";\n s.trigger = lang.escapeRegExp(s.tabTrigger);\n }\n \n if (!s.trigger && !s.guard && !s.endTrigger && !s.endGuard)\n return;\n \n s.startRe = guardedRegexp(s.trigger, s.guard, true);\n s.triggerRe = new RegExp(s.trigger, \"\", true);\n\n s.endRe = guardedRegexp(s.endTrigger, s.endGuard, true);\n s.endTriggerRe = new RegExp(s.endTrigger, \"\", true);\n }\n\n if (snippets && snippets.content)\n addSnippet(snippets);\n else if (Array.isArray(snippets))\n snippets.forEach(addSnippet);\n \n this._signal(\"registerSnippets\", {scope: scope});\n };\n this.unregister = function(snippets, scope) {\n var snippetMap = this.snippetMap;\n var snippetNameMap = this.snippetNameMap;\n\n function removeSnippet(s) {\n var nameMap = snippetNameMap[s.scope||scope];\n if (nameMap && nameMap[s.name]) {\n delete nameMap[s.name];\n var map = snippetMap[s.scope||scope];\n var i = map && map.indexOf(s);\n if (i >= 0)\n map.splice(i, 1);\n }\n }\n if (snippets.content)\n removeSnippet(snippets);\n else if (Array.isArray(snippets))\n snippets.forEach(removeSnippet);\n };\n this.parseSnippetFile = function(str) {\n str = str.replace(/\\r/g, \"\");\n var list = [], snippet = {};\n var re = /^#.*|^({[\\s\\S]*})\\s*$|^(\\S+) (.*)$|^((?:\\n*\\t.*)+)/gm;\n var m;\n while (m = re.exec(str)) {\n if (m[1]) {\n try {\n snippet = JSON.parse(m[1]);\n list.push(snippet);\n } catch (e) {}\n } if (m[4]) {\n snippet.content = m[4].replace(/^\\t/gm, \"\");\n list.push(snippet);\n snippet = {};\n } else {\n var key = m[2], val = m[3];\n if (key == \"regex\") {\n var guardRe = /\\/((?:[^\\/\\\\]|\\\\.)*)|$/g;\n snippet.guard = guardRe.exec(val)[1];\n snippet.trigger = guardRe.exec(val)[1];\n snippet.endTrigger = guardRe.exec(val)[1];\n snippet.endGuard = guardRe.exec(val)[1];\n } else if (key == \"snippet\") {\n snippet.tabTrigger = val.match(/^\\S*/)[0];\n if (!snippet.name)\n snippet.name = val;\n } else {\n snippet[key] = val;\n }\n }\n }\n return list;\n };\n this.getSnippetByName = function(name, editor) {\n var snippetMap = this.snippetNameMap;\n var snippet;\n this.getActiveScopes(editor).some(function(scope) {\n var snippets = snippetMap[scope];\n if (snippets)\n snippet = snippets[name];\n return !!snippet;\n }, this);\n return snippet;\n };\n\n}).call(SnippetManager.prototype);\n\n\nvar TabstopManager = function(editor) {\n if (editor.tabstopManager)\n return editor.tabstopManager;\n editor.tabstopManager = this;\n this.$onChange = this.onChange.bind(this);\n this.$onChangeSelection = lang.delayedCall(this.onChangeSelection.bind(this)).schedule;\n this.$onChangeSession = this.onChangeSession.bind(this);\n this.$onAfterExec = this.onAfterExec.bind(this);\n this.attach(editor);\n};\n(function() {\n this.attach = function(editor) {\n this.index = 0;\n this.ranges = [];\n this.tabstops = [];\n this.$openTabstops = null;\n this.selectedTabstop = null;\n\n this.editor = editor;\n this.editor.on(\"change\", this.$onChange);\n this.editor.on(\"changeSelection\", this.$onChangeSelection);\n this.editor.on(\"changeSession\", this.$onChangeSession);\n this.editor.commands.on(\"afterExec\", this.$onAfterExec);\n this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n };\n this.detach = function() {\n this.tabstops.forEach(this.removeTabstopMarkers, this);\n this.ranges = null;\n this.tabstops = null;\n this.selectedTabstop = null;\n this.editor.removeListener(\"change\", this.$onChange);\n this.editor.removeListener(\"changeSelection\", this.$onChangeSelection);\n this.editor.removeListener(\"changeSession\", this.$onChangeSession);\n this.editor.commands.removeListener(\"afterExec\", this.$onAfterExec);\n this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n this.editor.tabstopManager = null;\n this.editor = null;\n };\n\n this.onChange = function(delta) {\n var changeRange = delta;\n var isRemove = delta.action[0] == \"r\";\n var start = delta.start;\n var end = delta.end;\n var startRow = start.row;\n var endRow = end.row;\n var lineDif = endRow - startRow;\n var colDiff = end.column - start.column;\n\n if (isRemove) {\n lineDif = -lineDif;\n colDiff = -colDiff;\n }\n if (!this.$inChange && isRemove) {\n var ts = this.selectedTabstop;\n var changedOutside = ts && !ts.some(function(r) {\n return comparePoints(r.start, start) <= 0 && comparePoints(r.end, end) >= 0;\n });\n if (changedOutside)\n return this.detach();\n }\n var ranges = this.ranges;\n for (var i = 0; i < ranges.length; i++) {\n var r = ranges[i];\n if (r.end.row < start.row)\n continue;\n\n if (isRemove && comparePoints(start, r.start) < 0 && comparePoints(end, r.end) > 0) {\n this.removeRange(r);\n i--;\n continue;\n }\n\n if (r.start.row == startRow && r.start.column > start.column)\n r.start.column += colDiff;\n if (r.end.row == startRow && r.end.column >= start.column)\n r.end.column += colDiff;\n if (r.start.row >= startRow)\n r.start.row += lineDif;\n if (r.end.row >= startRow)\n r.end.row += lineDif;\n\n if (comparePoints(r.start, r.end) > 0)\n this.removeRange(r);\n }\n if (!ranges.length)\n this.detach();\n };\n this.updateLinkedFields = function() {\n var ts = this.selectedTabstop;\n if (!ts || !ts.hasLinkedRanges)\n return;\n this.$inChange = true;\n var session = this.editor.session;\n var text = session.getTextRange(ts.firstNonLinked);\n for (var i = ts.length; i--;) {\n var range = ts[i];\n if (!range.linked)\n continue;\n var fmt = exports.snippetManager.tmStrFormat(text, range.original);\n session.replace(range, fmt);\n }\n this.$inChange = false;\n };\n this.onAfterExec = function(e) {\n if (e.command && !e.command.readOnly)\n this.updateLinkedFields();\n };\n this.onChangeSelection = function() {\n if (!this.editor)\n return;\n var lead = this.editor.selection.lead;\n var anchor = this.editor.selection.anchor;\n var isEmpty = this.editor.selection.isEmpty();\n for (var i = this.ranges.length; i--;) {\n if (this.ranges[i].linked)\n continue;\n var containsLead = this.ranges[i].contains(lead.row, lead.column);\n var containsAnchor = isEmpty || this.ranges[i].contains(anchor.row, anchor.column);\n if (containsLead && containsAnchor)\n return;\n }\n this.detach();\n };\n this.onChangeSession = function() {\n this.detach();\n };\n this.tabNext = function(dir) {\n var max = this.tabstops.length;\n var index = this.index + (dir || 1);\n index = Math.min(Math.max(index, 1), max);\n if (index == max)\n index = 0;\n this.selectTabstop(index);\n if (index === 0)\n this.detach();\n };\n this.selectTabstop = function(index) {\n this.$openTabstops = null;\n var ts = this.tabstops[this.index];\n if (ts)\n this.addTabstopMarkers(ts);\n this.index = index;\n ts = this.tabstops[this.index];\n if (!ts || !ts.length)\n return;\n \n this.selectedTabstop = ts;\n if (!this.editor.inVirtualSelectionMode) { \n var sel = this.editor.multiSelect;\n sel.toSingleRange(ts.firstNonLinked.clone());\n for (var i = ts.length; i--;) {\n if (ts.hasLinkedRanges && ts[i].linked)\n continue;\n sel.addRange(ts[i].clone(), true);\n }\n if (sel.ranges[0])\n sel.addRange(sel.ranges[0].clone());\n } else {\n this.editor.selection.setRange(ts.firstNonLinked);\n }\n \n this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n };\n this.addTabstops = function(tabstops, start, end) {\n if (!this.$openTabstops)\n this.$openTabstops = [];\n if (!tabstops[0]) {\n var p = Range.fromPoints(end, end);\n moveRelative(p.start, start);\n moveRelative(p.end, start);\n tabstops[0] = [p];\n tabstops[0].index = 0;\n }\n\n var i = this.index;\n var arg = [i + 1, 0];\n var ranges = this.ranges;\n tabstops.forEach(function(ts, index) {\n var dest = this.$openTabstops[index] || ts;\n \n for (var i = ts.length; i--;) {\n var p = ts[i];\n var range = Range.fromPoints(p.start, p.end || p.start);\n movePoint(range.start, start);\n movePoint(range.end, start);\n range.original = p;\n range.tabstop = dest;\n ranges.push(range);\n if (dest != ts)\n dest.unshift(range);\n else\n dest[i] = range;\n if (p.fmtString) {\n range.linked = true;\n dest.hasLinkedRanges = true;\n } else if (!dest.firstNonLinked)\n dest.firstNonLinked = range;\n }\n if (!dest.firstNonLinked)\n dest.hasLinkedRanges = false;\n if (dest === ts) {\n arg.push(dest);\n this.$openTabstops[index] = dest;\n }\n this.addTabstopMarkers(dest);\n }, this);\n \n if (arg.length > 2) {\n if (this.tabstops.length)\n arg.push(arg.splice(2, 1)[0]);\n this.tabstops.splice.apply(this.tabstops, arg);\n }\n };\n\n this.addTabstopMarkers = function(ts) {\n var session = this.editor.session;\n ts.forEach(function(range) {\n if (!range.markerId)\n range.markerId = session.addMarker(range, \"ace_snippet-marker\", \"text\");\n });\n };\n this.removeTabstopMarkers = function(ts) {\n var session = this.editor.session;\n ts.forEach(function(range) {\n session.removeMarker(range.markerId);\n range.markerId = null;\n });\n };\n this.removeRange = function(range) {\n var i = range.tabstop.indexOf(range);\n range.tabstop.splice(i, 1);\n i = this.ranges.indexOf(range);\n this.ranges.splice(i, 1);\n this.editor.session.removeMarker(range.markerId);\n if (!range.tabstop.length) {\n i = this.tabstops.indexOf(range.tabstop);\n if (i != -1)\n this.tabstops.splice(i, 1);\n if (!this.tabstops.length)\n this.detach();\n }\n };\n\n this.keyboardHandler = new HashHandler();\n this.keyboardHandler.bindKeys({\n \"Tab\": function(ed) {\n if (exports.snippetManager && exports.snippetManager.expandWithTab(ed)) {\n return;\n }\n\n ed.tabstopManager.tabNext(1);\n },\n \"Shift-Tab\": function(ed) {\n ed.tabstopManager.tabNext(-1);\n },\n \"Esc\": function(ed) {\n ed.tabstopManager.detach();\n },\n \"Return\": function(ed) {\n return false;\n }\n });\n}).call(TabstopManager.prototype);\n\n\n\nvar changeTracker = {};\nchangeTracker.onChange = Anchor.prototype.onChange;\nchangeTracker.setPosition = function(row, column) {\n this.pos.row = row;\n this.pos.column = column;\n};\nchangeTracker.update = function(pos, delta, $insertRight) {\n this.$insertRight = $insertRight;\n this.pos = pos; \n this.onChange(delta);\n};\n\nvar movePoint = function(point, diff) {\n if (point.row == 0)\n point.column += diff.column;\n point.row += diff.row;\n};\n\nvar moveRelative = function(point, start) {\n if (point.row == start.row)\n point.column -= start.column;\n point.row -= start.row;\n};\n\n\nacequire(\"./lib/dom\").importCssString(\"\\\n.ace_snippet-marker {\\\n -moz-box-sizing: border-box;\\\n box-sizing: border-box;\\\n background: rgba(194, 193, 208, 0.09);\\\n border: 1px dotted rgba(211, 208, 235, 0.62);\\\n position: absolute;\\\n}\");\n\nexports.snippetManager = new SnippetManager();\n\n\nvar Editor = acequire(\"./editor\").Editor;\n(function() {\n this.insertSnippet = function(content, options) {\n return exports.snippetManager.insertSnippet(this, content, options);\n };\n this.expandSnippet = function(options) {\n return exports.snippetManager.expandWithTab(this, options);\n };\n}).call(Editor.prototype);\n\n});\n\nace.define(\"ace/autocomplete/popup\",[\"require\",\"exports\",\"module\",\"ace/virtual_renderer\",\"ace/editor\",\"ace/range\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/lib/dom\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Renderer = acequire(\"../virtual_renderer\").VirtualRenderer;\nvar Editor = acequire(\"../editor\").Editor;\nvar Range = acequire(\"../range\").Range;\nvar event = acequire(\"../lib/event\");\nvar lang = acequire(\"../lib/lang\");\nvar dom = acequire(\"../lib/dom\");\n\nvar $singleLineEditor = function(el) {\n var renderer = new Renderer(el);\n\n renderer.$maxLines = 4;\n\n var editor = new Editor(renderer);\n\n editor.setHighlightActiveLine(false);\n editor.setShowPrintMargin(false);\n editor.renderer.setShowGutter(false);\n editor.renderer.setHighlightGutterLine(false);\n\n editor.$mouseHandler.$focusWaitTimout = 0;\n editor.$highlightTagPending = true;\n\n return editor;\n};\n\nvar AcePopup = function(parentNode) {\n var el = dom.createElement(\"div\");\n var popup = new $singleLineEditor(el);\n\n if (parentNode)\n parentNode.appendChild(el);\n el.style.display = \"none\";\n popup.renderer.content.style.cursor = \"default\";\n popup.renderer.setStyle(\"ace_autocomplete\");\n\n popup.setOption(\"displayIndentGuides\", false);\n popup.setOption(\"dragDelay\", 150);\n\n var noop = function(){};\n\n popup.focus = noop;\n popup.$isFocused = true;\n\n popup.renderer.$cursorLayer.restartTimer = noop;\n popup.renderer.$cursorLayer.element.style.opacity = 0;\n\n popup.renderer.$maxLines = 8;\n popup.renderer.$keepTextAreaAtCursor = false;\n\n popup.setHighlightActiveLine(false);\n popup.session.highlight(\"\");\n popup.session.$searchHighlight.clazz = \"ace_highlight-marker\";\n\n popup.on(\"mousedown\", function(e) {\n var pos = e.getDocumentPosition();\n popup.selection.moveToPosition(pos);\n selectionMarker.start.row = selectionMarker.end.row = pos.row;\n e.stop();\n });\n\n var lastMouseEvent;\n var hoverMarker = new Range(-1,0,-1,Infinity);\n var selectionMarker = new Range(-1,0,-1,Infinity);\n selectionMarker.id = popup.session.addMarker(selectionMarker, \"ace_active-line\", \"fullLine\");\n popup.setSelectOnHover = function(val) {\n if (!val) {\n hoverMarker.id = popup.session.addMarker(hoverMarker, \"ace_line-hover\", \"fullLine\");\n } else if (hoverMarker.id) {\n popup.session.removeMarker(hoverMarker.id);\n hoverMarker.id = null;\n }\n };\n popup.setSelectOnHover(false);\n popup.on(\"mousemove\", function(e) {\n if (!lastMouseEvent) {\n lastMouseEvent = e;\n return;\n }\n if (lastMouseEvent.x == e.x && lastMouseEvent.y == e.y) {\n return;\n }\n lastMouseEvent = e;\n lastMouseEvent.scrollTop = popup.renderer.scrollTop;\n var row = lastMouseEvent.getDocumentPosition().row;\n if (hoverMarker.start.row != row) {\n if (!hoverMarker.id)\n popup.setRow(row);\n setHoverMarker(row);\n }\n });\n popup.renderer.on(\"beforeRender\", function() {\n if (lastMouseEvent && hoverMarker.start.row != -1) {\n lastMouseEvent.$pos = null;\n var row = lastMouseEvent.getDocumentPosition().row;\n if (!hoverMarker.id)\n popup.setRow(row);\n setHoverMarker(row, true);\n }\n });\n popup.renderer.on(\"afterRender\", function() {\n var row = popup.getRow();\n var t = popup.renderer.$textLayer;\n var selected = t.element.childNodes[row - t.config.firstRow];\n if (selected == t.selectedNode)\n return;\n if (t.selectedNode)\n dom.removeCssClass(t.selectedNode, \"ace_selected\");\n t.selectedNode = selected;\n if (selected)\n dom.addCssClass(selected, \"ace_selected\");\n });\n var hideHoverMarker = function() { setHoverMarker(-1); };\n var setHoverMarker = function(row, suppressRedraw) {\n if (row !== hoverMarker.start.row) {\n hoverMarker.start.row = hoverMarker.end.row = row;\n if (!suppressRedraw)\n popup.session._emit(\"changeBackMarker\");\n popup._emit(\"changeHoverMarker\");\n }\n };\n popup.getHoveredRow = function() {\n return hoverMarker.start.row;\n };\n\n event.addListener(popup.container, \"mouseout\", hideHoverMarker);\n popup.on(\"hide\", hideHoverMarker);\n popup.on(\"changeSelection\", hideHoverMarker);\n\n popup.session.doc.getLength = function() {\n return popup.data.length;\n };\n popup.session.doc.getLine = function(i) {\n var data = popup.data[i];\n if (typeof data == \"string\")\n return data;\n return (data && data.value) || \"\";\n };\n\n var bgTokenizer = popup.session.bgTokenizer;\n bgTokenizer.$tokenizeRow = function(row) {\n var data = popup.data[row];\n var tokens = [];\n if (!data)\n return tokens;\n if (typeof data == \"string\")\n data = {value: data};\n if (!data.caption)\n data.caption = data.value || data.name;\n\n var last = -1;\n var flag, c;\n for (var i = 0; i < data.caption.length; i++) {\n c = data.caption[i];\n flag = data.matchMask & (1 << i) ? 1 : 0;\n if (last !== flag) {\n tokens.push({type: data.className || \"\" + ( flag ? \"completion-highlight\" : \"\"), value: c});\n last = flag;\n } else {\n tokens[tokens.length - 1].value += c;\n }\n }\n\n if (data.meta) {\n var maxW = popup.renderer.$size.scrollerWidth / popup.renderer.layerConfig.characterWidth;\n var metaData = data.meta;\n if (metaData.length + data.caption.length > maxW - 2) {\n metaData = metaData.substr(0, maxW - data.caption.length - 3) + \"\\u2026\";\n }\n tokens.push({type: \"rightAlignedText\", value: metaData});\n }\n return tokens;\n };\n bgTokenizer.$updateOnChange = noop;\n bgTokenizer.start = noop;\n\n popup.session.$computeWidth = function() {\n return this.screenWidth = 0;\n };\n\n popup.$blockScrolling = Infinity;\n popup.isOpen = false;\n popup.isTopdown = false;\n popup.autoSelect = true;\n\n popup.data = [];\n popup.setData = function(list) {\n popup.setValue(lang.stringRepeat(\"\\n\", list.length), -1);\n popup.data = list || [];\n popup.setRow(0);\n };\n popup.getData = function(row) {\n return popup.data[row];\n };\n\n popup.getRow = function() {\n return selectionMarker.start.row;\n };\n popup.setRow = function(line) {\n line = Math.max(this.autoSelect ? 0 : -1, Math.min(this.data.length, line));\n if (selectionMarker.start.row != line) {\n popup.selection.clearSelection();\n selectionMarker.start.row = selectionMarker.end.row = line || 0;\n popup.session._emit(\"changeBackMarker\");\n popup.moveCursorTo(line || 0, 0);\n if (popup.isOpen)\n popup._signal(\"select\");\n }\n };\n\n popup.on(\"changeSelection\", function() {\n if (popup.isOpen)\n popup.setRow(popup.selection.lead.row);\n popup.renderer.scrollCursorIntoView();\n });\n\n popup.hide = function() {\n this.container.style.display = \"none\";\n this._signal(\"hide\");\n popup.isOpen = false;\n };\n popup.show = function(pos, lineHeight, topdownOnly) {\n var el = this.container;\n var screenHeight = window.innerHeight;\n var screenWidth = window.innerWidth;\n var renderer = this.renderer;\n var maxH = renderer.$maxLines * lineHeight * 1.4;\n var top = pos.top + this.$borderSize;\n var allowTopdown = top > screenHeight / 2 && !topdownOnly;\n if (allowTopdown && top + lineHeight + maxH > screenHeight) {\n renderer.$maxPixelHeight = top - 2 * this.$borderSize;\n el.style.top = \"\";\n el.style.bottom = screenHeight - top + \"px\";\n popup.isTopdown = false;\n } else {\n top += lineHeight;\n renderer.$maxPixelHeight = screenHeight - top - 0.2 * lineHeight;\n el.style.top = top + \"px\";\n el.style.bottom = \"\";\n popup.isTopdown = true;\n }\n\n el.style.display = \"\";\n this.renderer.$textLayer.checkForSizeChanges();\n\n var left = pos.left;\n if (left + el.offsetWidth > screenWidth)\n left = screenWidth - el.offsetWidth;\n\n el.style.left = left + \"px\";\n\n this._signal(\"show\");\n lastMouseEvent = null;\n popup.isOpen = true;\n };\n\n popup.getTextLeftOffset = function() {\n return this.$borderSize + this.renderer.$padding + this.$imageSize;\n };\n\n popup.$imageSize = 0;\n popup.$borderSize = 1;\n\n return popup;\n};\n\ndom.importCssString(\"\\\n.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\\\n background-color: #CAD6FA;\\\n z-index: 1;\\\n}\\\n.ace_editor.ace_autocomplete .ace_line-hover {\\\n border: 1px solid #abbffe;\\\n margin-top: -1px;\\\n background: rgba(233,233,253,0.4);\\\n}\\\n.ace_editor.ace_autocomplete .ace_line-hover {\\\n position: absolute;\\\n z-index: 2;\\\n}\\\n.ace_editor.ace_autocomplete .ace_scroller {\\\n background: none;\\\n border: none;\\\n box-shadow: none;\\\n}\\\n.ace_rightAlignedText {\\\n color: gray;\\\n display: inline-block;\\\n position: absolute;\\\n right: 4px;\\\n text-align: right;\\\n z-index: -1;\\\n}\\\n.ace_editor.ace_autocomplete .ace_completion-highlight{\\\n color: #000;\\\n text-shadow: 0 0 0.01em;\\\n}\\\n.ace_editor.ace_autocomplete {\\\n width: 280px;\\\n z-index: 200000;\\\n background: #fbfbfb;\\\n color: #444;\\\n border: 1px lightgray solid;\\\n position: fixed;\\\n box-shadow: 2px 3px 5px rgba(0,0,0,.2);\\\n line-height: 1.4;\\\n}\");\n\nexports.AcePopup = AcePopup;\n\n});\n\nace.define(\"ace/autocomplete/util\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\n\nexports.parForEach = function(array, fn, callback) {\n var completed = 0;\n var arLength = array.length;\n if (arLength === 0)\n callback();\n for (var i = 0; i < arLength; i++) {\n fn(array[i], function(result, err) {\n completed++;\n if (completed === arLength)\n callback(result, err);\n });\n }\n};\n\nvar ID_REGEX = /[a-zA-Z_0-9\\$\\-\\u00A2-\\uFFFF]/;\n\nexports.retrievePrecedingIdentifier = function(text, pos, regex) {\n regex = regex || ID_REGEX;\n var buf = [];\n for (var i = pos-1; i >= 0; i--) {\n if (regex.test(text[i]))\n buf.push(text[i]);\n else\n break;\n }\n return buf.reverse().join(\"\");\n};\n\nexports.retrieveFollowingIdentifier = function(text, pos, regex) {\n regex = regex || ID_REGEX;\n var buf = [];\n for (var i = pos; i < text.length; i++) {\n if (regex.test(text[i]))\n buf.push(text[i]);\n else\n break;\n }\n return buf;\n};\n\nexports.getCompletionPrefix = function (editor) {\n var pos = editor.getCursorPosition();\n var line = editor.session.getLine(pos.row);\n var prefix;\n editor.completers.forEach(function(completer) {\n if (completer.identifierRegexps) {\n completer.identifierRegexps.forEach(function(identifierRegex) {\n if (!prefix && identifierRegex)\n prefix = this.retrievePrecedingIdentifier(line, pos.column, identifierRegex);\n }.bind(this));\n }\n }.bind(this));\n return prefix || this.retrievePrecedingIdentifier(line, pos.column);\n};\n\n});\n\nace.define(\"ace/autocomplete\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\",\"ace/autocomplete/popup\",\"ace/autocomplete/util\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/lib/dom\",\"ace/snippets\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar HashHandler = acequire(\"./keyboard/hash_handler\").HashHandler;\nvar AcePopup = acequire(\"./autocomplete/popup\").AcePopup;\nvar util = acequire(\"./autocomplete/util\");\nvar event = acequire(\"./lib/event\");\nvar lang = acequire(\"./lib/lang\");\nvar dom = acequire(\"./lib/dom\");\nvar snippetManager = acequire(\"./snippets\").snippetManager;\n\nvar Autocomplete = function() {\n this.autoInsert = false;\n this.autoSelect = true;\n this.exactMatch = false;\n this.gatherCompletionsId = 0;\n this.keyboardHandler = new HashHandler();\n this.keyboardHandler.bindKeys(this.commands);\n\n this.blurListener = this.blurListener.bind(this);\n this.changeListener = this.changeListener.bind(this);\n this.mousedownListener = this.mousedownListener.bind(this);\n this.mousewheelListener = this.mousewheelListener.bind(this);\n\n this.changeTimer = lang.delayedCall(function() {\n this.updateCompletions(true);\n }.bind(this));\n\n this.tooltipTimer = lang.delayedCall(this.updateDocTooltip.bind(this), 50);\n};\n\n(function() {\n\n this.$init = function() {\n this.popup = new AcePopup(document.body || document.documentElement);\n this.popup.on(\"click\", function(e) {\n this.insertMatch();\n e.stop();\n }.bind(this));\n this.popup.focus = this.editor.focus.bind(this.editor);\n this.popup.on(\"show\", this.tooltipTimer.bind(null, null));\n this.popup.on(\"select\", this.tooltipTimer.bind(null, null));\n this.popup.on(\"changeHoverMarker\", this.tooltipTimer.bind(null, null));\n return this.popup;\n };\n\n this.getPopup = function() {\n return this.popup || this.$init();\n };\n\n this.openPopup = function(editor, prefix, keepPopupPosition) {\n if (!this.popup)\n this.$init();\n\n\tthis.popup.autoSelect = this.autoSelect;\n\n this.popup.setData(this.completions.filtered);\n\n editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n \n var renderer = editor.renderer;\n this.popup.setRow(this.autoSelect ? 0 : -1);\n if (!keepPopupPosition) {\n this.popup.setTheme(editor.getTheme());\n this.popup.setFontSize(editor.getFontSize());\n\n var lineHeight = renderer.layerConfig.lineHeight;\n\n var pos = renderer.$cursorLayer.getPixelPosition(this.base, true);\n pos.left -= this.popup.getTextLeftOffset();\n\n var rect = editor.container.getBoundingClientRect();\n pos.top += rect.top - renderer.layerConfig.offset;\n pos.left += rect.left - editor.renderer.scrollLeft;\n pos.left += renderer.gutterWidth;\n\n this.popup.show(pos, lineHeight);\n } else if (keepPopupPosition && !prefix) {\n this.detach();\n }\n };\n\n this.detach = function() {\n this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n this.editor.off(\"changeSelection\", this.changeListener);\n this.editor.off(\"blur\", this.blurListener);\n this.editor.off(\"mousedown\", this.mousedownListener);\n this.editor.off(\"mousewheel\", this.mousewheelListener);\n this.changeTimer.cancel();\n this.hideDocTooltip();\n\n this.gatherCompletionsId += 1;\n if (this.popup && this.popup.isOpen)\n this.popup.hide();\n\n if (this.base)\n this.base.detach();\n this.activated = false;\n this.completions = this.base = null;\n };\n\n this.changeListener = function(e) {\n var cursor = this.editor.selection.lead;\n if (cursor.row != this.base.row || cursor.column < this.base.column) {\n this.detach();\n }\n if (this.activated)\n this.changeTimer.schedule();\n else\n this.detach();\n };\n\n this.blurListener = function(e) {\n var el = document.activeElement;\n var text = this.editor.textInput.getElement();\n var fromTooltip = e.relatedTarget && this.tooltipNode && this.tooltipNode.contains(e.relatedTarget);\n var container = this.popup && this.popup.container;\n if (el != text && el.parentNode != container && !fromTooltip\n && el != this.tooltipNode && e.relatedTarget != text\n ) {\n this.detach();\n }\n };\n\n this.mousedownListener = function(e) {\n this.detach();\n };\n\n this.mousewheelListener = function(e) {\n this.detach();\n };\n\n this.goTo = function(where) {\n var row = this.popup.getRow();\n var max = this.popup.session.getLength() - 1;\n\n switch(where) {\n case \"up\": row = row <= 0 ? max : row - 1; break;\n case \"down\": row = row >= max ? -1 : row + 1; break;\n case \"start\": row = 0; break;\n case \"end\": row = max; break;\n }\n\n this.popup.setRow(row);\n };\n\n this.insertMatch = function(data, options) {\n if (!data)\n data = this.popup.getData(this.popup.getRow());\n if (!data)\n return false;\n\n if (data.completer && data.completer.insertMatch) {\n data.completer.insertMatch(this.editor, data);\n } else {\n if (this.completions.filterText) {\n var ranges = this.editor.selection.getAllRanges();\n for (var i = 0, range; range = ranges[i]; i++) {\n range.start.column -= this.completions.filterText.length;\n this.editor.session.remove(range);\n }\n }\n if (data.snippet)\n snippetManager.insertSnippet(this.editor, data.snippet);\n else\n this.editor.execCommand(\"insertstring\", data.value || data);\n }\n this.detach();\n };\n\n\n this.commands = {\n \"Up\": function(editor) { editor.completer.goTo(\"up\"); },\n \"Down\": function(editor) { editor.completer.goTo(\"down\"); },\n \"Ctrl-Up|Ctrl-Home\": function(editor) { editor.completer.goTo(\"start\"); },\n \"Ctrl-Down|Ctrl-End\": function(editor) { editor.completer.goTo(\"end\"); },\n\n \"Esc\": function(editor) { editor.completer.detach(); },\n \"Return\": function(editor) { return editor.completer.insertMatch(); },\n \"Shift-Return\": function(editor) { editor.completer.insertMatch(null, {deleteSuffix: true}); },\n \"Tab\": function(editor) {\n var result = editor.completer.insertMatch();\n if (!result && !editor.tabstopManager)\n editor.completer.goTo(\"down\");\n else\n return result;\n },\n\n \"PageUp\": function(editor) { editor.completer.popup.gotoPageUp(); },\n \"PageDown\": function(editor) { editor.completer.popup.gotoPageDown(); }\n };\n\n this.gatherCompletions = function(editor, callback) {\n var session = editor.getSession();\n var pos = editor.getCursorPosition();\n\n var prefix = util.getCompletionPrefix(editor);\n\n this.base = session.doc.createAnchor(pos.row, pos.column - prefix.length);\n this.base.$insertRight = true;\n\n var matches = [];\n var total = editor.completers.length;\n editor.completers.forEach(function(completer, i) {\n completer.getCompletions(editor, session, pos, prefix, function(err, results) {\n if (!err && results)\n matches = matches.concat(results);\n callback(null, {\n prefix: util.getCompletionPrefix(editor),\n matches: matches,\n finished: (--total === 0)\n });\n });\n });\n return true;\n };\n\n this.showPopup = function(editor) {\n if (this.editor)\n this.detach();\n\n this.activated = true;\n\n this.editor = editor;\n if (editor.completer != this) {\n if (editor.completer)\n editor.completer.detach();\n editor.completer = this;\n }\n\n editor.on(\"changeSelection\", this.changeListener);\n editor.on(\"blur\", this.blurListener);\n editor.on(\"mousedown\", this.mousedownListener);\n editor.on(\"mousewheel\", this.mousewheelListener);\n\n this.updateCompletions();\n };\n\n this.updateCompletions = function(keepPopupPosition) {\n if (keepPopupPosition && this.base && this.completions) {\n var pos = this.editor.getCursorPosition();\n var prefix = this.editor.session.getTextRange({start: this.base, end: pos});\n if (prefix == this.completions.filterText)\n return;\n this.completions.setFilter(prefix);\n if (!this.completions.filtered.length)\n return this.detach();\n if (this.completions.filtered.length == 1\n && this.completions.filtered[0].value == prefix\n && !this.completions.filtered[0].snippet)\n return this.detach();\n this.openPopup(this.editor, prefix, keepPopupPosition);\n return;\n }\n var _id = this.gatherCompletionsId;\n this.gatherCompletions(this.editor, function(err, results) {\n var detachIfFinished = function() {\n if (!results.finished) return;\n return this.detach();\n }.bind(this);\n\n var prefix = results.prefix;\n var matches = results && results.matches;\n\n if (!matches || !matches.length)\n return detachIfFinished();\n if (prefix.indexOf(results.prefix) !== 0 || _id != this.gatherCompletionsId)\n return;\n\n this.completions = new FilteredList(matches);\n\n if (this.exactMatch)\n this.completions.exactMatch = true;\n\n this.completions.setFilter(prefix);\n var filtered = this.completions.filtered;\n if (!filtered.length)\n return detachIfFinished();\n if (filtered.length == 1 && filtered[0].value == prefix && !filtered[0].snippet)\n return detachIfFinished();\n if (this.autoInsert && filtered.length == 1 && results.finished)\n return this.insertMatch(filtered[0]);\n\n this.openPopup(this.editor, prefix, keepPopupPosition);\n }.bind(this));\n };\n\n this.cancelContextMenu = function() {\n this.editor.$mouseHandler.cancelContextMenu();\n };\n\n this.updateDocTooltip = function() {\n var popup = this.popup;\n var all = popup.data;\n var selected = all && (all[popup.getHoveredRow()] || all[popup.getRow()]);\n var doc = null;\n if (!selected || !this.editor || !this.popup.isOpen)\n return this.hideDocTooltip();\n this.editor.completers.some(function(completer) {\n if (completer.getDocTooltip)\n doc = completer.getDocTooltip(selected);\n return doc;\n });\n if (!doc)\n doc = selected;\n\n if (typeof doc == \"string\")\n doc = {docText: doc};\n if (!doc || !(doc.docHTML || doc.docText))\n return this.hideDocTooltip();\n this.showDocTooltip(doc);\n };\n\n this.showDocTooltip = function(item) {\n if (!this.tooltipNode) {\n this.tooltipNode = dom.createElement(\"div\");\n this.tooltipNode.className = \"ace_tooltip ace_doc-tooltip\";\n this.tooltipNode.style.margin = 0;\n this.tooltipNode.style.pointerEvents = \"auto\";\n this.tooltipNode.tabIndex = -1;\n this.tooltipNode.onblur = this.blurListener.bind(this);\n this.tooltipNode.onclick = this.onTooltipClick.bind(this);\n }\n\n var tooltipNode = this.tooltipNode;\n if (item.docHTML) {\n tooltipNode.innerHTML = item.docHTML;\n } else if (item.docText) {\n tooltipNode.textContent = item.docText;\n }\n\n if (!tooltipNode.parentNode)\n document.body.appendChild(tooltipNode);\n var popup = this.popup;\n var rect = popup.container.getBoundingClientRect();\n tooltipNode.style.top = popup.container.style.top;\n tooltipNode.style.bottom = popup.container.style.bottom;\n\n if (window.innerWidth - rect.right < 320) {\n tooltipNode.style.right = window.innerWidth - rect.left + \"px\";\n tooltipNode.style.left = \"\";\n } else {\n tooltipNode.style.left = (rect.right + 1) + \"px\";\n tooltipNode.style.right = \"\";\n }\n tooltipNode.style.display = \"block\";\n };\n\n this.hideDocTooltip = function() {\n this.tooltipTimer.cancel();\n if (!this.tooltipNode) return;\n var el = this.tooltipNode;\n if (!this.editor.isFocused() && document.activeElement == el)\n this.editor.focus();\n this.tooltipNode = null;\n if (el.parentNode)\n el.parentNode.removeChild(el);\n };\n\n this.onTooltipClick = function(e) {\n var a = e.target;\n while (a && a != this.tooltipNode) {\n if (a.nodeName == \"A\" && a.href) {\n a.rel = \"noreferrer\";\n a.target = \"_blank\";\n break;\n }\n a = a.parentNode;\n }\n };\n\n}).call(Autocomplete.prototype);\n\nAutocomplete.startCommand = {\n name: \"startAutocomplete\",\n exec: function(editor) {\n if (!editor.completer)\n editor.completer = new Autocomplete();\n editor.completer.autoInsert = false;\n editor.completer.autoSelect = true;\n editor.completer.showPopup(editor);\n editor.completer.cancelContextMenu();\n },\n bindKey: \"Ctrl-Space|Ctrl-Shift-Space|Alt-Space\"\n};\n\nvar FilteredList = function(array, filterText) {\n this.all = array;\n this.filtered = array;\n this.filterText = filterText || \"\";\n this.exactMatch = false;\n};\n(function(){\n this.setFilter = function(str) {\n if (str.length > this.filterText && str.lastIndexOf(this.filterText, 0) === 0)\n var matches = this.filtered;\n else\n var matches = this.all;\n\n this.filterText = str;\n matches = this.filterCompletions(matches, this.filterText);\n matches = matches.sort(function(a, b) {\n return b.exactMatch - a.exactMatch || b.score - a.score;\n });\n var prev = null;\n matches = matches.filter(function(item){\n var caption = item.snippet || item.caption || item.value;\n if (caption === prev) return false;\n prev = caption;\n return true;\n });\n\n this.filtered = matches;\n };\n this.filterCompletions = function(items, needle) {\n var results = [];\n var upper = needle.toUpperCase();\n var lower = needle.toLowerCase();\n loop: for (var i = 0, item; item = items[i]; i++) {\n var caption = item.value || item.caption || item.snippet;\n if (!caption) continue;\n var lastIndex = -1;\n var matchMask = 0;\n var penalty = 0;\n var index, distance;\n\n if (this.exactMatch) {\n if (needle !== caption.substr(0, needle.length))\n continue loop;\n }else{\n for (var j = 0; j < needle.length; j++) {\n var i1 = caption.indexOf(lower[j], lastIndex + 1);\n var i2 = caption.indexOf(upper[j], lastIndex + 1);\n index = (i1 >= 0) ? ((i2 < 0 || i1 < i2) ? i1 : i2) : i2;\n if (index < 0)\n continue loop;\n distance = index - lastIndex - 1;\n if (distance > 0) {\n if (lastIndex === -1)\n penalty += 10;\n penalty += distance;\n }\n matchMask = matchMask | (1 << index);\n lastIndex = index;\n }\n }\n item.matchMask = matchMask;\n item.exactMatch = penalty ? 0 : 1;\n item.score = (item.score || 0) - penalty;\n results.push(item);\n }\n return results;\n };\n}).call(FilteredList.prototype);\n\nexports.Autocomplete = Autocomplete;\nexports.FilteredList = FilteredList;\n\n});\n\nace.define(\"ace/autocomplete/text_completer\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(acequire, exports, module) {\n var Range = acequire(\"../range\").Range;\n \n var splitRegex = /[^a-zA-Z_0-9\\$\\-\\u00C0-\\u1FFF\\u2C00-\\uD7FF\\w]+/;\n\n function getWordIndex(doc, pos) {\n var textBefore = doc.getTextRange(Range.fromPoints({row: 0, column:0}, pos));\n return textBefore.split(splitRegex).length - 1;\n }\n function wordDistance(doc, pos) {\n var prefixPos = getWordIndex(doc, pos);\n var words = doc.getValue().split(splitRegex);\n var wordScores = Object.create(null);\n \n var currentWord = words[prefixPos];\n\n words.forEach(function(word, idx) {\n if (!word || word === currentWord) return;\n\n var distance = Math.abs(prefixPos - idx);\n var score = words.length - distance;\n if (wordScores[word]) {\n wordScores[word] = Math.max(score, wordScores[word]);\n } else {\n wordScores[word] = score;\n }\n });\n return wordScores;\n }\n\n exports.getCompletions = function(editor, session, pos, prefix, callback) {\n var wordScore = wordDistance(session, pos, prefix);\n var wordList = Object.keys(wordScore);\n callback(null, wordList.map(function(word) {\n return {\n caption: word,\n value: word,\n score: wordScore[word],\n meta: \"local\"\n };\n }));\n };\n});\n\nace.define(\"ace/ext/language_tools\",[\"require\",\"exports\",\"module\",\"ace/snippets\",\"ace/autocomplete\",\"ace/config\",\"ace/lib/lang\",\"ace/autocomplete/util\",\"ace/autocomplete/text_completer\",\"ace/editor\",\"ace/config\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar snippetManager = acequire(\"../snippets\").snippetManager;\nvar Autocomplete = acequire(\"../autocomplete\").Autocomplete;\nvar config = acequire(\"../config\");\nvar lang = acequire(\"../lib/lang\");\nvar util = acequire(\"../autocomplete/util\");\n\nvar textCompleter = acequire(\"../autocomplete/text_completer\");\nvar keyWordCompleter = {\n getCompletions: function(editor, session, pos, prefix, callback) {\n if (session.$mode.completer) {\n return session.$mode.completer.getCompletions(editor, session, pos, prefix, callback);\n }\n var state = editor.session.getState(pos.row);\n var completions = session.$mode.getCompletions(state, session, pos, prefix);\n callback(null, completions);\n }\n};\n\nvar snippetCompleter = {\n getCompletions: function(editor, session, pos, prefix, callback) {\n var snippetMap = snippetManager.snippetMap;\n var completions = [];\n snippetManager.getActiveScopes(editor).forEach(function(scope) {\n var snippets = snippetMap[scope] || [];\n for (var i = snippets.length; i--;) {\n var s = snippets[i];\n var caption = s.name || s.tabTrigger;\n if (!caption)\n continue;\n completions.push({\n caption: caption,\n snippet: s.content,\n meta: s.tabTrigger && !s.name ? s.tabTrigger + \"\\u21E5 \" : \"snippet\",\n type: \"snippet\"\n });\n }\n }, this);\n callback(null, completions);\n },\n getDocTooltip: function(item) {\n if (item.type == \"snippet\" && !item.docHTML) {\n item.docHTML = [\n \"
\", lang.escapeHTML(item.caption), \"
\", \"
\",\n lang.escapeHTML(item.snippet)\n ].join(\"\");\n }\n }\n};\n\nvar completers = [snippetCompleter, textCompleter, keyWordCompleter];\nexports.setCompleters = function(val) {\n completers.length = 0;\n if (val) completers.push.apply(completers, val);\n};\nexports.addCompleter = function(completer) {\n completers.push(completer);\n};\nexports.textCompleter = textCompleter;\nexports.keyWordCompleter = keyWordCompleter;\nexports.snippetCompleter = snippetCompleter;\n\nvar expandSnippet = {\n name: \"expandSnippet\",\n exec: function(editor) {\n return snippetManager.expandWithTab(editor);\n },\n bindKey: \"Tab\"\n};\n\nvar onChangeMode = function(e, editor) {\n loadSnippetsForMode(editor.session.$mode);\n};\n\nvar loadSnippetsForMode = function(mode) {\n var id = mode.$id;\n if (!snippetManager.files)\n snippetManager.files = {};\n loadSnippetFile(id);\n if (mode.modes)\n mode.modes.forEach(loadSnippetsForMode);\n};\n\nvar loadSnippetFile = function(id) {\n if (!id || snippetManager.files[id])\n return;\n var snippetFilePath = id.replace(\"mode\", \"snippets\");\n snippetManager.files[id] = {};\n config.loadModule(snippetFilePath, function(m) {\n if (m) {\n snippetManager.files[id] = m;\n if (!m.snippets && m.snippetText)\n m.snippets = snippetManager.parseSnippetFile(m.snippetText);\n snippetManager.register(m.snippets || [], m.scope);\n if (m.includeScopes) {\n snippetManager.snippetMap[m.scope].includeScopes = m.includeScopes;\n m.includeScopes.forEach(function(x) {\n loadSnippetFile(\"ace/mode/\" + x);\n });\n }\n }\n });\n};\n\nvar doLiveAutocomplete = function(e) {\n var editor = e.editor;\n var hasCompleter = editor.completer && editor.completer.activated;\n if (e.command.name === \"backspace\") {\n if (hasCompleter && !util.getCompletionPrefix(editor))\n editor.completer.detach();\n }\n else if (e.command.name === \"insertstring\") {\n var prefix = util.getCompletionPrefix(editor);\n if (prefix && !hasCompleter) {\n if (!editor.completer) {\n editor.completer = new Autocomplete();\n }\n editor.completer.autoInsert = false;\n editor.completer.showPopup(editor);\n }\n }\n};\n\nvar Editor = acequire(\"../editor\").Editor;\nacequire(\"../config\").defineOptions(Editor.prototype, \"editor\", {\n enableBasicAutocompletion: {\n set: function(val) {\n if (val) {\n if (!this.completers)\n this.completers = Array.isArray(val)? val: completers;\n this.commands.addCommand(Autocomplete.startCommand);\n } else {\n this.commands.removeCommand(Autocomplete.startCommand);\n }\n },\n value: false\n },\n enableLiveAutocompletion: {\n set: function(val) {\n if (val) {\n if (!this.completers)\n this.completers = Array.isArray(val)? val: completers;\n this.commands.on('afterExec', doLiveAutocomplete);\n } else {\n this.commands.removeListener('afterExec', doLiveAutocomplete);\n }\n },\n value: false\n },\n enableSnippets: {\n set: function(val) {\n if (val) {\n this.commands.addCommand(expandSnippet);\n this.on(\"changeMode\", onChangeMode);\n onChangeMode(null, this);\n } else {\n this.commands.removeCommand(expandSnippet);\n this.off(\"changeMode\", onChangeMode);\n }\n },\n value: false\n }\n});\n});\n (function() {\n ace.acequire([\"ace/ext/language_tools\"], function() {});\n })();\n "],"names":["acequire","exports","module","oop","EventEmitter","lang","Range","Anchor","HashHandler","Tokenizer","comparePoints","SnippetManager","TabstopToken","str","_","stack","escape","ch","val","state","t","ts","startState","x","editor","name","i","varName","flag","re","fmtTokens","_self","formatted","fmtParts","gChangeCase","next","snippet","result","gotoNext","value","i1","snippetText","cursor","line","tabString","indentString","tokens","tabstops","p","id","isNested","expanding","copyValue","copy","j","arg","row","column","text","lines","range","end","tabstopManager","TabstopManager","selectionId","self","scope","c","scopes","snippetMap","options","before","after","snippets","snippetList","s","snippetNameMap","wrapRegexp","src","guardedRegexp","guard","opening","addSnippet","map","old","removeSnippet","nameMap","list","m","key","guardRe","delta","changeRange","isRemove","start","startRow","endRow","lineDif","colDiff","changedOutside","r","ranges","session","fmt","e","lead","anchor","isEmpty","containsLead","containsAnchor","dir","max","index","sel","moveRelative","dest","movePoint","ed","changeTracker","pos","$insertRight","point","diff","Editor","content","Renderer","event","dom","$singleLineEditor","el","renderer","AcePopup","parentNode","popup","noop","selectionMarker","lastMouseEvent","hoverMarker","setHoverMarker","selected","hideHoverMarker","suppressRedraw","data","bgTokenizer","last","maxW","metaData","lineHeight","topdownOnly","screenHeight","screenWidth","maxH","top","allowTopdown","left","array","fn","callback","completed","arLength","err","ID_REGEX","regex","buf","prefix","completer","identifierRegex","util","snippetManager","Autocomplete","keepPopupPosition","rect","fromTooltip","container","where","matches","total","results","_id","detachIfFinished","FilteredList","filtered","all","doc","item","tooltipNode","a","filterText","b","prev","caption","items","needle","upper","lower","loop","lastIndex","matchMask","penalty","distance","i2","splitRegex","getWordIndex","textBefore","wordDistance","prefixPos","words","wordScores","currentWord","word","idx","score","wordScore","wordList","config","textCompleter","keyWordCompleter","completions","snippetCompleter","completers","expandSnippet","onChangeMode","loadSnippetsForMode","mode","loadSnippetFile","snippetFilePath","doLiveAutocomplete","hasCompleter"],"sourceRoot":""}