summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--public/js/index.js84
1 files changed, 84 insertions, 0 deletions
diff --git a/public/js/index.js b/public/js/index.js
index e192db59..b05c8d2a 100644
--- a/public/js/index.js
+++ b/public/js/index.js
@@ -50,9 +50,93 @@ var defaultExtraKeys = {
"Ctrl-C": function (cm) {
if (!mac && cm.getOption('keyMap').substr(0, 3) === 'vim') document.execCommand("copy");
else return CodeMirror.Pass;
+ },
+ "Ctrl-*": function (cm) {
+ wrapTextWith(cm, '*');
+ },
+ "Shift-Ctrl-8": function (cm) {
+ wrapTextWith(cm, '*');
+ },
+ "Ctrl-_": function (cm) {
+ wrapTextWith(cm, '_');
+ },
+ "Shift-Ctrl--": function (cm) {
+ wrapTextWith(cm, '_');
+ },
+ "Ctrl-~": function (cm) {
+ wrapTextWith(cm, '~');
+ },
+ "Shift-Ctrl-`": function (cm) {
+ wrapTextWith(cm, '~');
+ },
+ "Ctrl-^": function (cm) {
+ wrapTextWith(cm, '^');
+ },
+ "Shift-Ctrl-6": function (cm) {
+ wrapTextWith(cm, '^');
+ },
+ "Ctrl-+": function (cm) {
+ wrapTextWith(cm, '+');
+ },
+ "Shift-Ctrl-=": function (cm) {
+ wrapTextWith(cm, '+');
+ },
+ "Ctrl-=": function (cm) {
+ wrapTextWith(cm, '=');
+ },
+ "Shift-Ctrl-Backspace": function (cm) {
+ wrapTextWith(cm, 'Backspace');
}
};
+var wrapSymbols = ['*', '_', '~', '^', '+', '='];
+
+function wrapTextWith(cm, symbol) {
+ if (!cm.getSelection()) {
+ return CodeMirror.Pass;
+ } else {
+ var ranges = cm.listSelections();
+ for (var i = 0; i < ranges.length; i++) {
+ var range = ranges[i];
+ if (!range.empty()) {
+ var from = range.from(), to = range.to();
+ if (symbol !== 'Backspace') {
+ cm.replaceRange(symbol, to, to, '+input');
+ cm.replaceRange(symbol, from, from, '+input');
+ // workaround selection range not correct after add symbol
+ var _ranges = cm.listSelections();
+ var anchorIndex = editor.indexFromPos(_ranges[i].anchor);
+ var headIndex = editor.indexFromPos(_ranges[i].head);
+ if (anchorIndex > headIndex) {
+ _ranges[i].anchor.ch--;
+ } else {
+ _ranges[i].head.ch--;
+ }
+ cm.setSelections(_ranges);
+ } else {
+ var preEndPos = {
+ line: to.line,
+ ch: to.ch + 1
+ };
+ var preText = cm.getRange(to, preEndPos);
+ var preIndex = wrapSymbols.indexOf(preText);
+ var postEndPos = {
+ line: from.line,
+ ch: from.ch - 1
+ };
+ var postText = cm.getRange(postEndPos, from);
+ var postIndex = wrapSymbols.indexOf(postText);
+ // check if surround symbol are list in array and matched
+ if (preIndex > -1 && postIndex > -1 && preIndex === postIndex) {
+ cm.replaceRange("", to, preEndPos, '+delete');
+ cm.replaceRange("", postEndPos, from, '+delete');
+ }
+ }
+ }
+ }
+ }
+}
+
var idleTime = 300000; //5 mins
var updateViewDebounce = 200;
var cursorMenuThrottle = 50;