App-Mxpress-PDF
view release on metacpan or search on metacpan
public/javascripts/ace/ext-prompt.js view on Meta::CPAN
define("ace/ext/menu_tools/get_editor_keyboard_shortcuts",["require","exports","module","ace/lib/keys"], function(require, exports, module) {
"use strict";
var keys = require("../../lib/keys");
module.exports.getEditorKeybordShortcuts = function(editor) {
var KEY_MODS = keys.KEY_MODS;
var keybindings = [];
var commandMap = {};
editor.keyBinding.$handlers.forEach(function(handler) {
var ckb = handler.commandKeyBinding;
for (var i in ckb) {
var key = i.replace(/(^|-)\w/g, function(x) { return x.toUpperCase(); });
var commands = ckb[i];
if (!Array.isArray(commands))
commands = [commands];
commands.forEach(function(command) {
if (typeof command != "string")
command = command.name;
if (commandMap[command]) {
commandMap[command].key += "|" + key;
} else {
commandMap[command] = {key: key, command: command};
keybindings.push(commandMap[command]);
}
});
}
});
return keybindings;
};
});
define("ace/autocomplete/popup",["require","exports","module","ace/virtual_renderer","ace/editor","ace/range","ace/lib/event","ace/lib/lang","ace/lib/dom"], function(require, exports, module) {
"use strict";
var Renderer = require("../virtual_renderer").VirtualRenderer;
var Editor = require("../editor").Editor;
var Range = require("../range").Range;
var event = require("../lib/event");
var lang = require("../lib/lang");
var dom = require("../lib/dom");
var $singleLineEditor = function(el) {
var renderer = new Renderer(el);
renderer.$maxLines = 4;
var editor = new Editor(renderer);
editor.setHighlightActiveLine(false);
editor.setShowPrintMargin(false);
editor.renderer.setShowGutter(false);
editor.renderer.setHighlightGutterLine(false);
editor.$mouseHandler.$focusTimeout = 0;
editor.$highlightTagPending = true;
return editor;
};
var AcePopup = function(parentNode) {
var el = dom.createElement("div");
var popup = new $singleLineEditor(el);
if (parentNode)
parentNode.appendChild(el);
el.style.display = "none";
popup.renderer.content.style.cursor = "default";
popup.renderer.setStyle("ace_autocomplete");
popup.setOption("displayIndentGuides", false);
popup.setOption("dragDelay", 150);
var noop = function(){};
popup.focus = noop;
popup.$isFocused = true;
popup.renderer.$cursorLayer.restartTimer = noop;
popup.renderer.$cursorLayer.element.style.opacity = 0;
popup.renderer.$maxLines = 8;
popup.renderer.$keepTextAreaAtCursor = false;
popup.setHighlightActiveLine(false);
popup.session.highlight("");
popup.session.$searchHighlight.clazz = "ace_highlight-marker";
public/javascripts/ace/ext-prompt.js view on Meta::CPAN
background: #25282c;\
color: #c1c1c1;\
}", "autocompletion.css");
exports.AcePopup = AcePopup;
exports.$singleLineEditor = $singleLineEditor;
});
define("ace/autocomplete/util",["require","exports","module"], function(require, exports, module) {
"use strict";
exports.parForEach = function(array, fn, callback) {
var completed = 0;
var arLength = array.length;
if (arLength === 0)
callback();
for (var i = 0; i < arLength; i++) {
fn(array[i], function(result, err) {
completed++;
if (completed === arLength)
callback(result, err);
});
}
};
var ID_REGEX = /[a-zA-Z_0-9\$\-\u00A2-\u2000\u2070-\uFFFF]/;
exports.retrievePrecedingIdentifier = function(text, pos, regex) {
regex = regex || ID_REGEX;
var buf = [];
for (var i = pos-1; i >= 0; i--) {
if (regex.test(text[i]))
buf.push(text[i]);
else
break;
}
return buf.reverse().join("");
};
exports.retrieveFollowingIdentifier = function(text, pos, regex) {
regex = regex || ID_REGEX;
var buf = [];
for (var i = pos; i < text.length; i++) {
if (regex.test(text[i]))
buf.push(text[i]);
else
break;
}
return buf;
};
exports.getCompletionPrefix = function (editor) {
var pos = editor.getCursorPosition();
var line = editor.session.getLine(pos.row);
var prefix;
editor.completers.forEach(function(completer) {
if (completer.identifierRegexps) {
completer.identifierRegexps.forEach(function(identifierRegex) {
if (!prefix && identifierRegex)
prefix = this.retrievePrecedingIdentifier(line, pos.column, identifierRegex);
}.bind(this));
}
}.bind(this));
return prefix || this.retrievePrecedingIdentifier(line, pos.column);
};
});
define("ace/snippets",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/lib/lang","ace/range","ace/range_list","ace/keyboard/hash_handler","ace/tokenizer","ace/clipboard","ace/lib/dom","ace/editor"], function(require, exports, ...
"use strict";
var oop = require("./lib/oop");
var EventEmitter = require("./lib/event_emitter").EventEmitter;
var lang = require("./lib/lang");
var Range = require("./range").Range;
var RangeList = require("./range_list").RangeList;
var HashHandler = require("./keyboard/hash_handler").HashHandler;
var Tokenizer = require("./tokenizer").Tokenizer;
var clipboard = require("./clipboard");
var VARIABLES = {
CURRENT_WORD: function(editor) {
return editor.session.getTextRange(editor.session.getWordRange());
},
SELECTION: function(editor, name, indentation) {
var text = editor.session.getTextRange();
if (indentation)
return text.replace(/\n\r?([ \t]*\S)/g, "\n" + indentation + "$1");
return text;
},
CURRENT_LINE: function(editor) {
return editor.session.getLine(editor.getCursorPosition().row);
},
PREV_LINE: function(editor) {
return editor.session.getLine(editor.getCursorPosition().row - 1);
},
LINE_INDEX: function(editor) {
return editor.getCursorPosition().row;
},
LINE_NUMBER: function(editor) {
return editor.getCursorPosition().row + 1;
},
SOFT_TABS: function(editor) {
return editor.session.getUseSoftTabs() ? "YES" : "NO";
},
TAB_SIZE: function(editor) {
return editor.session.getTabSize();
},
CLIPBOARD: function(editor) {
return clipboard.getText && clipboard.getText();
},
FILENAME: function(editor) {
return /[^/\\]*$/.exec(this.FILEPATH(editor))[0];
},
FILENAME_BASE: function(editor) {
return /[^/\\]*$/.exec(this.FILEPATH(editor))[0].replace(/\.[^.]*$/, "");
},
DIRECTORY: function(editor) {
return this.FILEPATH(editor).replace(/[^/\\]*$/, "");
},
FILEPATH: function(editor) { return "/not implemented.txt"; },
WORKSPACE_NAME: function() { return "Unknown"; },
FULLNAME: function() { return "Unknown"; },
BLOCK_COMMENT_START: function(editor) {
var mode = editor.session.$mode || {};
return mode.blockComment && mode.blockComment.start || "";
},
BLOCK_COMMENT_END: function(editor) {
var mode = editor.session.$mode || {};
return mode.blockComment && mode.blockComment.end || "";
},
LINE_COMMENT: function(editor) {
var mode = editor.session.$mode || {};
return mode.lineCommentStart || "";
},
CURRENT_YEAR: date.bind(null, {year: "numeric"}),
CURRENT_YEAR_SHORT: date.bind(null, {year: "2-digit"}),
CURRENT_MONTH: date.bind(null, {month: "numeric"}),
CURRENT_MONTH_NAME: date.bind(null, {month: "long"}),
CURRENT_MONTH_NAME_SHORT: date.bind(null, {month: "short"}),
CURRENT_DATE: date.bind(null, {day: "2-digit"}),
CURRENT_DAY_NAME: date.bind(null, {weekday: "long"}),
CURRENT_DAY_NAME_SHORT: date.bind(null, {weekday: "short"}),
CURRENT_HOUR: date.bind(null, {hour: "2-digit", hour12: false}),
CURRENT_MINUTE: date.bind(null, {minute: "2-digit"}),
CURRENT_SECOND: date.bind(null, {second: "2-digit"})
};
VARIABLES.SELECTED_TEXT = VARIABLES.SELECTION;
function date(dateFormat) {
var str = new Date().toLocaleString("en-us", dateFormat);
return str.length == 1 ? "0" + str : str;
}
var SnippetManager = function() {
this.snippetMap = {};
this.snippetNameMap = {};
};
(function() {
oop.implement(this, EventEmitter);
this.getTokenizer = function() {
return SnippetManager.$tokenizer || this.createTokenizer();
};
this.createTokenizer = function() {
function TabstopToken(str) {
str = str.substr(1);
if (/^\d+$/.test(str))
return [{tabstopId: parseInt(str, 10)}];
return [{text: str}];
}
function escape(ch) {
return "(?:[^\\\\" + ch + "]|\\\\.)";
}
var formatMatcher = {
regex: "/(" + escape("/") + "+)/",
onMatch: function(val, state, stack) {
var ts = stack[0];
ts.fmtString = true;
ts.guard = val.slice(1, -1);
ts.flag = "";
return "";
},
next: "formatString"
};
SnippetManager.$tokenizer = new Tokenizer({
start: [
{regex: /\\./, onMatch: function(val, state, stack) {
var ch = val[1];
if (ch == "}" && stack.length) {
val = ch;
} else if ("`$\\".indexOf(ch) != -1) {
val = ch;
}
return [val];
}},
{regex: /}/, onMatch: function(val, state, stack) {
return [stack.length ? stack.shift() : val];
}},
{regex: /\$(?:\d+|\w+)/, onMatch: TabstopToken},
{regex: /\$\{[\dA-Z_a-z]+/, onMatch: function(str, state, stack) {
var t = TabstopToken(str.substr(1));
public/javascripts/ace/ext-prompt.js view on Meta::CPAN
}
}
if (snippets.content)
removeSnippet(snippets);
else if (Array.isArray(snippets))
snippets.forEach(removeSnippet);
};
this.parseSnippetFile = function(str) {
str = str.replace(/\r/g, "");
var list = [], snippet = {};
var re = /^#.*|^({[\s\S]*})\s*$|^(\S+) (.*)$|^((?:\n*\t.*)+)/gm;
var m;
while (m = re.exec(str)) {
if (m[1]) {
try {
snippet = JSON.parse(m[1]);
list.push(snippet);
} catch (e) {}
} if (m[4]) {
snippet.content = m[4].replace(/^\t/gm, "");
list.push(snippet);
snippet = {};
} else {
var key = m[2], val = m[3];
if (key == "regex") {
var guardRe = /\/((?:[^\/\\]|\\.)*)|$/g;
snippet.guard = guardRe.exec(val)[1];
snippet.trigger = guardRe.exec(val)[1];
snippet.endTrigger = guardRe.exec(val)[1];
snippet.endGuard = guardRe.exec(val)[1];
} else if (key == "snippet") {
snippet.tabTrigger = val.match(/^\S*/)[0];
if (!snippet.name)
snippet.name = val;
} else if (key) {
snippet[key] = val;
}
}
}
return list;
};
this.getSnippetByName = function(name, editor) {
var snippetMap = this.snippetNameMap;
var snippet;
this.getActiveScopes(editor).some(function(scope) {
var snippets = snippetMap[scope];
if (snippets)
snippet = snippets[name];
return !!snippet;
}, this);
return snippet;
};
}).call(SnippetManager.prototype);
var TabstopManager = function(editor) {
if (editor.tabstopManager)
return editor.tabstopManager;
editor.tabstopManager = this;
this.$onChange = this.onChange.bind(this);
this.$onChangeSelection = lang.delayedCall(this.onChangeSelection.bind(this)).schedule;
this.$onChangeSession = this.onChangeSession.bind(this);
this.$onAfterExec = this.onAfterExec.bind(this);
this.attach(editor);
};
(function() {
this.attach = function(editor) {
this.index = 0;
this.ranges = [];
this.tabstops = [];
this.$openTabstops = null;
this.selectedTabstop = null;
this.editor = editor;
this.editor.on("change", this.$onChange);
this.editor.on("changeSelection", this.$onChangeSelection);
this.editor.on("changeSession", this.$onChangeSession);
this.editor.commands.on("afterExec", this.$onAfterExec);
this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);
};
this.detach = function() {
this.tabstops.forEach(this.removeTabstopMarkers, this);
this.ranges = null;
this.tabstops = null;
this.selectedTabstop = null;
this.editor.removeListener("change", this.$onChange);
this.editor.removeListener("changeSelection", this.$onChangeSelection);
this.editor.removeListener("changeSession", this.$onChangeSession);
this.editor.commands.removeListener("afterExec", this.$onAfterExec);
this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);
this.editor.tabstopManager = null;
this.editor = null;
};
this.onChange = function(delta) {
var isRemove = delta.action[0] == "r";
var selectedTabstop = this.selectedTabstop || {};
var parents = selectedTabstop.parents || {};
var tabstops = (this.tabstops || []).slice();
for (var i = 0; i < tabstops.length; i++) {
var ts = tabstops[i];
var active = ts == selectedTabstop || parents[ts.index];
ts.rangeList.$bias = active ? 0 : 1;
if (delta.action == "remove" && ts !== selectedTabstop) {
var parentActive = ts.parents && ts.parents[selectedTabstop.index];
var startIndex = ts.rangeList.pointIndex(delta.start, parentActive);
startIndex = startIndex < 0 ? -startIndex - 1 : startIndex + 1;
var endIndex = ts.rangeList.pointIndex(delta.end, parentActive);
endIndex = endIndex < 0 ? -endIndex - 1 : endIndex - 1;
var toRemove = ts.rangeList.ranges.slice(startIndex, endIndex);
for (var j = 0; j < toRemove.length; j++)
this.removeRange(toRemove[j]);
}
ts.rangeList.$onChange(delta);
}
var session = this.editor.session;
if (!this.$inChange && isRemove && session.getLength() == 1 && !session.getValue())
this.detach();
};
this.updateLinkedFields = function() {
var ts = this.selectedTabstop;
if (!ts || !ts.hasLinkedRanges || !ts.firstNonLinked)
public/javascripts/ace/ext-prompt.js view on Meta::CPAN
dest.unshift(range);
else
dest[i] = range;
if (p.fmtString || (dest.firstNonLinked && useLink)) {
range.linked = true;
dest.hasLinkedRanges = true;
} else if (!dest.firstNonLinked)
dest.firstNonLinked = range;
}
if (!dest.firstNonLinked)
dest.hasLinkedRanges = false;
if (dest === ts) {
arg.push(dest);
this.$openTabstops[index] = dest;
}
this.addTabstopMarkers(dest);
dest.rangeList = dest.rangeList || new RangeList();
dest.rangeList.$bias = 0;
dest.rangeList.addList(dest);
}, this);
if (arg.length > 2) {
if (this.tabstops.length)
arg.push(arg.splice(2, 1)[0]);
this.tabstops.splice.apply(this.tabstops, arg);
}
};
this.addTabstopMarkers = function(ts) {
var session = this.editor.session;
ts.forEach(function(range) {
if (!range.markerId)
range.markerId = session.addMarker(range, "ace_snippet-marker", "text");
});
};
this.removeTabstopMarkers = function(ts) {
var session = this.editor.session;
ts.forEach(function(range) {
session.removeMarker(range.markerId);
range.markerId = null;
});
};
this.removeRange = function(range) {
var i = range.tabstop.indexOf(range);
if (i != -1) range.tabstop.splice(i, 1);
i = this.ranges.indexOf(range);
if (i != -1) this.ranges.splice(i, 1);
i = range.tabstop.rangeList.ranges.indexOf(range);
if (i != -1) range.tabstop.splice(i, 1);
this.editor.session.removeMarker(range.markerId);
if (!range.tabstop.length) {
i = this.tabstops.indexOf(range.tabstop);
if (i != -1)
this.tabstops.splice(i, 1);
if (!this.tabstops.length)
this.detach();
}
};
this.keyboardHandler = new HashHandler();
this.keyboardHandler.bindKeys({
"Tab": function(editor) {
if (exports.snippetManager && exports.snippetManager.expandWithTab(editor))
return;
editor.tabstopManager.tabNext(1);
editor.renderer.scrollCursorIntoView();
},
"Shift-Tab": function(editor) {
editor.tabstopManager.tabNext(-1);
editor.renderer.scrollCursorIntoView();
},
"Esc": function(editor) {
editor.tabstopManager.detach();
}
});
}).call(TabstopManager.prototype);
var movePoint = function(point, diff) {
if (point.row == 0)
point.column += diff.column;
point.row += diff.row;
};
var moveRelative = function(point, start) {
if (point.row == start.row)
point.column -= start.column;
point.row -= start.row;
};
require("./lib/dom").importCssString("\
.ace_snippet-marker {\
-moz-box-sizing: border-box;\
box-sizing: border-box;\
background: rgba(194, 193, 208, 0.09);\
border: 1px dotted rgba(211, 208, 235, 0.62);\
position: absolute;\
}");
exports.snippetManager = new SnippetManager();
var Editor = require("./editor").Editor;
(function() {
this.insertSnippet = function(content, options) {
return exports.snippetManager.insertSnippet(this, content, options);
};
this.expandSnippet = function(options) {
return exports.snippetManager.expandWithTab(this, options);
};
}).call(Editor.prototype);
});
define("ace/autocomplete",["require","exports","module","ace/keyboard/hash_handler","ace/autocomplete/popup","ace/autocomplete/util","ace/lib/lang","ace/lib/dom","ace/snippets","ace/config"], function(require, exports, module) {
"use strict";
var HashHandler = require("./keyboard/hash_handler").HashHandler;
var AcePopup = require("./autocomplete/popup").AcePopup;
var util = require("./autocomplete/util");
var lang = require("./lib/lang");
var dom = require("./lib/dom");
var snippetManager = require("./snippets").snippetManager;
var config = require("./config");
var Autocomplete = function() {
this.autoInsert = false;
this.autoSelect = true;
this.exactMatch = false;
this.gatherCompletionsId = 0;
this.keyboardHandler = new HashHandler();
this.keyboardHandler.bindKeys(this.commands);
this.blurListener = this.blurListener.bind(this);
this.changeListener = this.changeListener.bind(this);
this.mousedownListener = this.mousedownListener.bind(this);
this.mousewheelListener = this.mousewheelListener.bind(this);
this.changeTimer = lang.delayedCall(function() {
this.updateCompletions(true);
}.bind(this));
this.tooltipTimer = lang.delayedCall(this.updateDocTooltip.bind(this), 50);
};
(function() {
this.$init = function() {
this.popup = new AcePopup(document.body || document.documentElement);
this.popup.on("click", function(e) {
this.insertMatch();
e.stop();
}.bind(this));
this.popup.focus = this.editor.focus.bind(this.editor);
this.popup.on("show", this.tooltipTimer.bind(null, null));
this.popup.on("select", this.tooltipTimer.bind(null, null));
this.popup.on("changeHoverMarker", this.tooltipTimer.bind(null, null));
return this.popup;
};
this.getPopup = function() {
return this.popup || this.$init();
};
this.openPopup = function(editor, prefix, keepPopupPosition) {
if (!this.popup)
this.$init();
this.popup.autoSelect = this.autoSelect;
this.popup.setData(this.completions.filtered, this.completions.filterText);
editor.keyBinding.addKeyboardHandler(this.keyboardHandler);
var renderer = editor.renderer;
this.popup.setRow(this.autoSelect ? 0 : -1);
if (!keepPopupPosition) {
this.popup.setTheme(editor.getTheme());
this.popup.setFontSize(editor.getFontSize());
var lineHeight = renderer.layerConfig.lineHeight;
var pos = renderer.$cursorLayer.getPixelPosition(this.base, true);
pos.left -= this.popup.getTextLeftOffset();
var rect = editor.container.getBoundingClientRect();
pos.top += rect.top - renderer.layerConfig.offset;
pos.left += rect.left - editor.renderer.scrollLeft;
pos.left += renderer.gutterWidth;
this.popup.show(pos, lineHeight);
} else if (keepPopupPosition && !prefix) {
this.detach();
}
};
this.detach = function() {
this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);
this.editor.off("changeSelection", this.changeListener);
this.editor.off("blur", this.blurListener);
this.editor.off("mousedown", this.mousedownListener);
this.editor.off("mousewheel", this.mousewheelListener);
this.changeTimer.cancel();
this.hideDocTooltip();
this.gatherCompletionsId += 1;
if (this.popup && this.popup.isOpen)
this.popup.hide();
if (this.base)
this.base.detach();
this.activated = false;
this.completions = this.base = null;
};
this.changeListener = function(e) {
var cursor = this.editor.selection.lead;
public/javascripts/ace/ext-prompt.js view on Meta::CPAN
callback(null, {
prefix: util.getCompletionPrefix(editor),
matches: matches,
finished: (--total === 0)
});
});
});
return true;
};
this.showPopup = function(editor, options) {
if (this.editor)
this.detach();
this.activated = true;
this.editor = editor;
if (editor.completer != this) {
if (editor.completer)
editor.completer.detach();
editor.completer = this;
}
editor.on("changeSelection", this.changeListener);
editor.on("blur", this.blurListener);
editor.on("mousedown", this.mousedownListener);
editor.on("mousewheel", this.mousewheelListener);
this.updateCompletions(false, options);
};
this.updateCompletions = function(keepPopupPosition, options) {
if (keepPopupPosition && this.base && this.completions) {
var pos = this.editor.getCursorPosition();
var prefix = this.editor.session.getTextRange({start: this.base, end: pos});
if (prefix == this.completions.filterText)
return;
this.completions.setFilter(prefix);
if (!this.completions.filtered.length)
return this.detach();
if (this.completions.filtered.length == 1
&& this.completions.filtered[0].value == prefix
&& !this.completions.filtered[0].snippet)
return this.detach();
this.openPopup(this.editor, prefix, keepPopupPosition);
return;
}
if (options && options.matches) {
var pos = this.editor.getSelectionRange().start;
this.base = this.editor.session.doc.createAnchor(pos.row, pos.column);
this.base.$insertRight = true;
this.completions = new FilteredList(options.matches);
return this.openPopup(this.editor, "", keepPopupPosition);
}
var _id = this.gatherCompletionsId;
this.gatherCompletions(this.editor, function(err, results) {
var detachIfFinished = function() {
if (!results.finished) return;
return this.detach();
}.bind(this);
var prefix = results.prefix;
var matches = results && results.matches;
if (!matches || !matches.length)
return detachIfFinished();
if (prefix.indexOf(results.prefix) !== 0 || _id != this.gatherCompletionsId)
return;
this.completions = new FilteredList(matches);
if (this.exactMatch)
this.completions.exactMatch = true;
this.completions.setFilter(prefix);
var filtered = this.completions.filtered;
if (!filtered.length)
return detachIfFinished();
if (filtered.length == 1 && filtered[0].value == prefix && !filtered[0].snippet)
return detachIfFinished();
if (this.autoInsert && filtered.length == 1 && results.finished)
return this.insertMatch(filtered[0]);
this.openPopup(this.editor, prefix, keepPopupPosition);
}.bind(this));
};
this.cancelContextMenu = function() {
this.editor.$mouseHandler.cancelContextMenu();
};
this.updateDocTooltip = function() {
var popup = this.popup;
var all = popup.data;
var selected = all && (all[popup.getHoveredRow()] || all[popup.getRow()]);
var doc = null;
if (!selected || !this.editor || !this.popup.isOpen)
return this.hideDocTooltip();
this.editor.completers.some(function(completer) {
if (completer.getDocTooltip)
doc = completer.getDocTooltip(selected);
return doc;
});
if (!doc && typeof selected != "string")
doc = selected;
if (typeof doc == "string")
doc = {docText: doc};
if (!doc || !(doc.docHTML || doc.docText))
return this.hideDocTooltip();
this.showDocTooltip(doc);
};
this.showDocTooltip = function(item) {
if (!this.tooltipNode) {
this.tooltipNode = dom.createElement("div");
this.tooltipNode.className = "ace_tooltip ace_doc-tooltip";
this.tooltipNode.style.margin = 0;
this.tooltipNode.style.pointerEvents = "auto";
this.tooltipNode.tabIndex = -1;
this.tooltipNode.onblur = this.blurListener.bind(this);
this.tooltipNode.onclick = this.onTooltipClick.bind(this);
}
var tooltipNode = this.tooltipNode;
if (item.docHTML) {
tooltipNode.innerHTML = item.docHTML;
} else if (item.docText) {
tooltipNode.textContent = item.docText;
}
if (!tooltipNode.parentNode)
document.body.appendChild(tooltipNode);
var popup = this.popup;
var rect = popup.container.getBoundingClientRect();
tooltipNode.style.top = popup.container.style.top;
tooltipNode.style.bottom = popup.container.style.bottom;
tooltipNode.style.display = "block";
if (window.innerWidth - rect.right < 320) {
if (rect.left < 320) {
if(popup.isTopdown) {
tooltipNode.style.top = rect.bottom + "px";
tooltipNode.style.left = rect.left + "px";
tooltipNode.style.right = "";
tooltipNode.style.bottom = "";
} else {
tooltipNode.style.top = popup.container.offsetTop - tooltipNode.offsetHeight + "px";
tooltipNode.style.left = rect.left + "px";
tooltipNode.style.right = "";
tooltipNode.style.bottom = "";
}
} else {
tooltipNode.style.right = window.innerWidth - rect.left + "px";
tooltipNode.style.left = "";
}
} else {
tooltipNode.style.left = (rect.right + 1) + "px";
tooltipNode.style.right = "";
}
};
this.hideDocTooltip = function() {
this.tooltipTimer.cancel();
if (!this.tooltipNode) return;
var el = this.tooltipNode;
if (!this.editor.isFocused() && document.activeElement == el)
this.editor.focus();
this.tooltipNode = null;
if (el.parentNode)
el.parentNode.removeChild(el);
};
this.onTooltipClick = function(e) {
var a = e.target;
while (a && a != this.tooltipNode) {
if (a.nodeName == "A" && a.href) {
a.rel = "noreferrer";
a.target = "_blank";
break;
}
a = a.parentNode;
}
};
this.destroy = function() {
this.detach();
if (this.popup) {
this.popup.destroy();
var el = this.popup.container;
if (el && el.parentNode)
el.parentNode.removeChild(el);
}
if (this.editor && this.editor.completer == this)
this.editor.completer == null;
this.popup = null;
};
}).call(Autocomplete.prototype);
Autocomplete.for = function(editor) {
if (editor.completer) {
return editor.completer;
}
if (config.get("sharedPopups")) {
if (!Autocomplete.$shared)
Autocomplete.$sharedInstance = new Autocomplete();
editor.completer = Autocomplete.$sharedInstance;
} else {
editor.completer = new Autocomplete();
editor.once("destroy", function(e, editor) {
editor.completer.destroy();
});
}
return editor.completer;
};
Autocomplete.startCommand = {
name: "startAutocomplete",
exec: function(editor, options) {
var completer = Autocomplete.for(editor);
completer.autoInsert = false;
completer.autoSelect = true;
completer.showPopup(editor, options);
completer.cancelContextMenu();
},
bindKey: "Ctrl-Space|Ctrl-Shift-Space|Alt-Space"
};
var FilteredList = function(array, filterText) {
this.all = array;
this.filtered = array;
this.filterText = filterText || "";
this.exactMatch = false;
};
(function(){
this.setFilter = function(str) {
if (str.length > this.filterText && str.lastIndexOf(this.filterText, 0) === 0)
var matches = this.filtered;
else
var matches = this.all;
this.filterText = str;
matches = this.filterCompletions(matches, this.filterText);
matches = matches.sort(function(a, b) {
return b.exactMatch - a.exactMatch || b.$score - a.$score
|| (a.caption || a.value).localeCompare(b.caption || b.value);
});
var prev = null;
matches = matches.filter(function(item){
var caption = item.snippet || item.caption || item.value;
if (caption === prev) return false;
prev = caption;
return true;
});
this.filtered = matches;
};
this.filterCompletions = function(items, needle) {
var results = [];
var upper = needle.toUpperCase();
var lower = needle.toLowerCase();
loop: for (var i = 0, item; item = items[i]; i++) {
var caption = item.caption || item.value || item.snippet;
if (!caption) continue;
var lastIndex = -1;
var matchMask = 0;
var penalty = 0;
var index, distance;
if (this.exactMatch) {
if (needle !== caption.substr(0, needle.length))
continue loop;
} else {
var fullMatchIndex = caption.toLowerCase().indexOf(lower);
if (fullMatchIndex > -1) {
penalty = fullMatchIndex;
} else {
for (var j = 0; j < needle.length; j++) {
var i1 = caption.indexOf(lower[j], lastIndex + 1);
var i2 = caption.indexOf(upper[j], lastIndex + 1);
index = (i1 >= 0) ? ((i2 < 0 || i1 < i2) ? i1 : i2) : i2;
if (index < 0)
continue loop;
distance = index - lastIndex - 1;
if (distance > 0) {
if (lastIndex === -1)
public/javascripts/ace/ext-prompt.js view on Meta::CPAN
el.appendChild(popup.container);
updateCompletions();
}
if (options.$rules) {
var tokenizer = new Tokenizer(options.$rules);
cmdLine.session.bgTokenizer.setTokenizer(tokenizer);
}
if (options.placeholder) {
cmdLine.setOption("placeholder", options.placeholder);
}
if (options.hasDescription) {
var promptTextContainer = dom.buildDom(["div", {class: "ace_prompt_text_container"}]);
dom.buildDom(options.prompt || "Press 'Enter' to confirm or 'Escape' to cancel", promptTextContainer);
el.appendChild(promptTextContainer);
}
overlay.setIgnoreFocusOut(options.ignoreFocusOut);
function accept() {
var val;
if (popup && popup.getCursorPosition().row > 0) {
val = valueFromRecentList();
} else {
val = cmdLine.getValue();
}
var curData = popup ? popup.getData(popup.getRow()) : val;
if (curData && !curData.error) {
done();
options.onAccept && options.onAccept({
value: val,
item: curData
}, cmdLine);
}
}
var keys = {
"Enter": accept,
"Esc|Shift-Esc": function() {
options.onCancel && options.onCancel(cmdLine.getValue(), cmdLine);
done();
}
};
if (popup) {
Object.assign(keys, {
"Up": function(editor) { popup.goTo("up"); valueFromRecentList();},
"Down": function(editor) { popup.goTo("down"); valueFromRecentList();},
"Ctrl-Up|Ctrl-Home": function(editor) { popup.goTo("start"); valueFromRecentList();},
"Ctrl-Down|Ctrl-End": function(editor) { popup.goTo("end"); valueFromRecentList();},
"Tab": function(editor) {
popup.goTo("down"); valueFromRecentList();
},
"PageUp": function(editor) { popup.gotoPageUp(); valueFromRecentList();},
"PageDown": function(editor) { popup.gotoPageDown(); valueFromRecentList();}
});
}
cmdLine.commands.bindKeys(keys);
function done() {
overlay.close();
callback && callback();
openPrompt = null;
}
cmdLine.on("input", function() {
options.onInput && options.onInput();
updateCompletions();
});
function updateCompletions() {
if (options.getCompletions) {
var prefix;
if (options.getPrefix) {
prefix = options.getPrefix(cmdLine);
}
var completions = options.getCompletions(cmdLine);
popup.setData(completions, prefix);
popup.resize(true);
}
}
function valueFromRecentList() {
var current = popup.getData(popup.getRow());
if (current && !current.error)
return current.value || current.caption || current;
}
cmdLine.resize(true);
if (popup) {
popup.resize(true);
}
cmdLine.focus();
openPrompt = {
close: done,
name: options.name,
editor: editor
};
}
prompt.gotoLine = function(editor, callback) {
function stringifySelection(selection) {
if (!Array.isArray(selection))
selection = [selection];
return selection.map(function(r) {
var cursor = r.isBackwards ? r.start: r.end;
var anchor = r.isBackwards ? r.end: r.start;
var row = anchor.row;
var s = (row + 1) + ":" + anchor.column;
if (anchor.row == cursor.row) {
if (anchor.column != cursor.column)
s += ">" + ":" + cursor.column;
} else {
s += ">" + (cursor.row + 1) + ":" + cursor.column;
}
public/javascripts/ace/ext-prompt.js view on Meta::CPAN
range.end = readPosition();
}
else if (parts[i] == "<") {
i++;
range.start = readPosition();
}
ranges.unshift(range);
});
editor.selection.fromJSON(ranges);
var scrollTop = editor.renderer.scrollTop;
editor.renderer.scrollSelectionIntoView(
editor.selection.anchor,
editor.selection.cursor,
0.5
);
editor.renderer.animateScrolling(scrollTop);
},
history: function() {
var undoManager = editor.session.getUndoManager();
if (!prompt.gotoLine._history)
return [];
return prompt.gotoLine._history;
},
getCompletions: function(cmdLine) {
var value = cmdLine.getValue();
var m = value.replace(/^:/, "").split(":");
var row = Math.min(parseInt(m[0]) || 1, editor.session.getLength()) - 1;
var line = editor.session.getLine(row);
var current = value + " " + line;
return [current].concat(this.history());
},
$rules: {
start: [{
regex: /\d+/,
token: "string"
}, {
regex: /[:,><+\-c]/,
token: "keyword"
}]
}
});
};
prompt.commands = function(editor, callback) {
function normalizeName(name) {
return (name || "").replace(/^./, function(x) {
return x.toUpperCase(x);
}).replace(/[a-z][A-Z]/g, function(x) {
return x[0] + " " + x[1].toLowerCase(x);
});
}
function getEditorCommandsByName(excludeCommands) {
var commandsByName = [];
var commandMap = {};
editor.keyBinding.$handlers.forEach(function(handler) {
var platform = handler.platform;
var cbn = handler.byName;
for (var i in cbn) {
var key;
if (cbn[i].bindKey && cbn[i].bindKey[platform] !== null) {
key = cbn[i].bindKey["win"];
} else {
key = "";
}
var commands = cbn[i];
var description = commands.description || normalizeName(commands.name);
if (!Array.isArray(commands))
commands = [commands];
commands.forEach(function(command) {
if (typeof command != "string")
command = command.name;
var needle = excludeCommands.find(function(el) {
return el === command;
});
if (!needle) {
if (commandMap[command]) {
commandMap[command].key += "|" + key;
} else {
commandMap[command] = {key: key, command: command, description: description};
commandsByName.push(commandMap[command]);
}
}
});
}
});
return commandsByName;
}
var excludeCommandsList = ["insertstring", "inserttext", "setIndentation", "paste"];
var shortcutsArray = getEditorCommandsByName(excludeCommandsList);
shortcutsArray = shortcutsArray.map(function(item) {
return {value: item.description, meta: item.key, command: item.command};
});
prompt(editor, "", {
name: "commands",
selection: [0, Number.MAX_VALUE],
maxHistoryCount: 5,
onAccept: function(data) {
if (data.item) {
var commandName = data.item.command;
this.addToHistory(data.item);
editor.execCommand(commandName);
}
},
addToHistory: function(item) {
var history = this.history();
history.unshift(item);
delete item.message;
for (var i = 1; i < history.length; i++) {
if (history[i]["command"] == item.command ) {
history.splice(i, 1);
break;
}
}
if (this.maxHistoryCount > 0 && history.length > this.maxHistoryCount) {
history.splice(history.length - 1, 1);
}
prompt.commands.history = history;
},
history: function() {
( run in 0.953 second using v1.01-cache-2.11-cpan-2398b32b56e )