server
This commit is contained in:
4
internal/server/static/ace/ace.js
Normal file
4
internal/server/static/ace/ace.js
Normal file
@@ -0,0 +1,4 @@
|
||||
ace.define("ace/snippets/golang", ["require", "exports", "module"], function (e, t, n) {
|
||||
"use strict";
|
||||
t.snippetText = undefined, t.scope = "golang"
|
||||
})
|
||||
345
internal/server/static/ace/mode-golang.js
Normal file
345
internal/server/static/ace/mode-golang.js
Normal file
@@ -0,0 +1,345 @@
|
||||
ace.define("ace/mode/doc_comment_highlight_rules", ["require", "exports", "module", "ace/lib/oop", "ace/mode/text_highlight_rules"], function (e, t, n) {
|
||||
"use strict";
|
||||
var r = e("../lib/oop"), i = e("./text_highlight_rules").TextHighlightRules, s = function () {
|
||||
this.$rules = {
|
||||
start: [{
|
||||
token: "comment.doc.tag",
|
||||
regex: "@[\\w\\d_]+"
|
||||
}, s.getTagRule(), {defaultToken: "comment.doc", caseInsensitive: !0}]
|
||||
}
|
||||
};
|
||||
r.inherits(s, i), s.getTagRule = function (e) {
|
||||
return {token: "comment.doc.tag.storage.type", regex: "\\b(?:TODO|FIXME|XXX|HACK)\\b"}
|
||||
}, s.getStartRule = function (e) {
|
||||
return {token: "comment.doc", regex: "\\/\\*(?=\\*)", next: e}
|
||||
}, s.getEndRule = function (e) {
|
||||
return {token: "comment.doc", regex: "\\*\\/", next: e}
|
||||
}, t.DocCommentHighlightRules = s
|
||||
}), ace.define("ace/mode/golang_highlight_rules", ["require", "exports", "module", "ace/lib/oop", "ace/mode/doc_comment_highlight_rules", "ace/mode/text_highlight_rules"], function (e, t, n) {
|
||||
var r = e("../lib/oop"), i = e("./doc_comment_highlight_rules").DocCommentHighlightRules,
|
||||
s = e("./text_highlight_rules").TextHighlightRules, o = function () {
|
||||
var e = "else|break|case|return|goto|if|const|select|continue|struct|default|switch|for|range|func|import|package|chan|defer|fallthrough|go|interface|map|range|select|type|var",
|
||||
t = "string|uint8|uint16|uint32|uint64|int8|int16|int32|int64|float32|float64|complex64|complex128|byte|rune|uint|int|uintptr|bool|error",
|
||||
n = "new|close|cap|copy|panic|panicln|print|println|len|make|delete|real|recover|imag|append",
|
||||
r = "nil|true|false|iota", s = this.createKeywordMapper({
|
||||
keyword: e,
|
||||
"constant.language": r,
|
||||
"support.function": n,
|
||||
"support.type": t
|
||||
}, ""), o = "\\\\(?:[0-7]{3}|x\\h{2}|u{4}|U\\h{6}|[abfnrtv'\"\\\\])".replace(/\\h/g, "[a-fA-F\\d]");
|
||||
this.$rules = {
|
||||
start: [{token: "comment", regex: "\\/\\/.*$"}, i.getStartRule("doc-start"), {
|
||||
token: "comment.start",
|
||||
regex: "\\/\\*",
|
||||
next: "comment"
|
||||
}, {token: "string", regex: /"(?:[^"\\]|\\.)*?"/}, {
|
||||
token: "string",
|
||||
regex: "`",
|
||||
next: "bqstring"
|
||||
}, {
|
||||
token: "constant.numeric",
|
||||
regex: "'(?:[^\\'\ud800-\udbff]|[\ud800-\udbff][\udc00-\udfff]|" + o.replace('"', "") + ")'"
|
||||
}, {token: "constant.numeric", regex: "0[xX][0-9a-fA-F]+\\b"}, {
|
||||
token: "constant.numeric",
|
||||
regex: "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
|
||||
}, {
|
||||
token: ["keyword", "text", "entity.name.function"],
|
||||
regex: "(func)(\\s+)([a-zA-Z_$][a-zA-Z0-9_$]*)\\b"
|
||||
}, {
|
||||
token: function (e) {
|
||||
return e[e.length - 1] == "(" ? [{
|
||||
type: s(e.slice(0, -1)) || "support.function",
|
||||
value: e.slice(0, -1)
|
||||
}, {type: "paren.lparen", value: e.slice(-1)}] : s(e) || "identifier"
|
||||
}, regex: "[a-zA-Z_$][a-zA-Z0-9_$]*\\b\\(?"
|
||||
}, {
|
||||
token: "keyword.operator",
|
||||
regex: "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^="
|
||||
}, {token: "punctuation.operator", regex: "\\?|\\:|\\,|\\;|\\."}, {
|
||||
token: "paren.lparen",
|
||||
regex: "[[({]"
|
||||
}, {token: "paren.rparen", regex: "[\\])}]"}, {token: "text", regex: "\\s+"}],
|
||||
comment: [{token: "comment.end", regex: "\\*\\/", next: "start"}, {defaultToken: "comment"}],
|
||||
bqstring: [{token: "string", regex: "`", next: "start"}, {defaultToken: "string"}]
|
||||
}, this.embedRules(i, "doc-", [i.getEndRule("start")])
|
||||
};
|
||||
r.inherits(o, s), t.GolangHighlightRules = o
|
||||
}), ace.define("ace/mode/matching_brace_outdent", ["require", "exports", "module", "ace/range"], function (e, t, n) {
|
||||
"use strict";
|
||||
var r = e("../range").Range, i = function () {
|
||||
};
|
||||
(function () {
|
||||
this.checkOutdent = function (e, t) {
|
||||
return /^\s+$/.test(e) ? /^\s*\}/.test(t) : !1
|
||||
}, this.autoOutdent = function (e, t) {
|
||||
var n = e.getLine(t), i = n.match(/^(\s*\})/);
|
||||
if (!i) return 0;
|
||||
var s = i[1].length, o = e.findMatchingBracket({row: t, column: s});
|
||||
if (!o || o.row == t) return 0;
|
||||
var u = this.$getIndent(e.getLine(o.row));
|
||||
e.replace(new r(t, 0, t, s - 1), u)
|
||||
}, this.$getIndent = function (e) {
|
||||
return e.match(/^\s*/)[0]
|
||||
}
|
||||
}).call(i.prototype), t.MatchingBraceOutdent = i
|
||||
}), ace.define("ace/mode/behaviour/cstyle", ["require", "exports", "module", "ace/lib/oop", "ace/mode/behaviour", "ace/token_iterator", "ace/lib/lang"], function (e, t, n) {
|
||||
"use strict";
|
||||
var r = e("../../lib/oop"), i = e("../behaviour").Behaviour, s = e("../../token_iterator").TokenIterator,
|
||||
o = e("../../lib/lang"), u = ["text", "paren.rparen", "punctuation.operator"],
|
||||
a = ["text", "paren.rparen", "punctuation.operator", "comment"], f, l = {}, c = function (e) {
|
||||
var t = -1;
|
||||
e.multiSelect && (t = e.selection.index, l.rangeCount != e.multiSelect.rangeCount && (l = {rangeCount: e.multiSelect.rangeCount}));
|
||||
if (l[t]) return f = l[t];
|
||||
f = l[t] = {
|
||||
autoInsertedBrackets: 0,
|
||||
autoInsertedRow: -1,
|
||||
autoInsertedLineEnd: "",
|
||||
maybeInsertedBrackets: 0,
|
||||
maybeInsertedRow: -1,
|
||||
maybeInsertedLineStart: "",
|
||||
maybeInsertedLineEnd: ""
|
||||
}
|
||||
}, h = function (e, t, n, r) {
|
||||
var i = e.end.row - e.start.row;
|
||||
return {text: n + t + r, selection: [0, e.start.column + 1, i, e.end.column + (i ? 0 : 1)]}
|
||||
}, p = function () {
|
||||
this.add("braces", "insertion", function (e, t, n, r, i) {
|
||||
var s = n.getCursorPosition(), u = r.doc.getLine(s.row);
|
||||
if (i == "{") {
|
||||
c(n);
|
||||
var a = n.getSelectionRange(), l = r.doc.getTextRange(a);
|
||||
if (l !== "" && l !== "{" && n.getWrapBehavioursEnabled()) return h(a, l, "{", "}");
|
||||
if (p.isSaneInsertion(n, r)) return /[\]\}\)]/.test(u[s.column]) || n.inMultiSelectMode ? (p.recordAutoInsert(n, r, "}"), {
|
||||
text: "{}",
|
||||
selection: [1, 1]
|
||||
}) : (p.recordMaybeInsert(n, r, "{"), {text: "{", selection: [1, 1]})
|
||||
} else if (i == "}") {
|
||||
c(n);
|
||||
var d = u.substring(s.column, s.column + 1);
|
||||
if (d == "}") {
|
||||
var v = r.$findOpeningBracket("}", {column: s.column + 1, row: s.row});
|
||||
if (v !== null && p.isAutoInsertedClosing(s, u, i)) return p.popAutoInsertedClosing(), {
|
||||
text: "",
|
||||
selection: [1, 1]
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (i == "\n" || i == "\r\n") {
|
||||
c(n);
|
||||
var m = "";
|
||||
p.isMaybeInsertedClosing(s, u) && (m = o.stringRepeat("}", f.maybeInsertedBrackets), p.clearMaybeInsertedClosing());
|
||||
var d = u.substring(s.column, s.column + 1);
|
||||
if (d === "}") {
|
||||
var g = r.findMatchingBracket({row: s.row, column: s.column + 1}, "}");
|
||||
if (!g) return null;
|
||||
var y = this.$getIndent(r.getLine(g.row))
|
||||
} else {
|
||||
if (!m) {
|
||||
p.clearMaybeInsertedClosing();
|
||||
return
|
||||
}
|
||||
var y = this.$getIndent(u)
|
||||
}
|
||||
var b = y + r.getTabString();
|
||||
return {text: "\n" + b + "\n" + y + m, selection: [1, b.length, 1, b.length]}
|
||||
}
|
||||
p.clearMaybeInsertedClosing()
|
||||
}
|
||||
}), this.add("braces", "deletion", function (e, t, n, r, i) {
|
||||
var s = r.doc.getTextRange(i);
|
||||
if (!i.isMultiLine() && s == "{") {
|
||||
c(n);
|
||||
var o = r.doc.getLine(i.start.row), u = o.substring(i.end.column, i.end.column + 1);
|
||||
if (u == "}") return i.end.column++, i;
|
||||
f.maybeInsertedBrackets--
|
||||
}
|
||||
}), this.add("parens", "insertion", function (e, t, n, r, i) {
|
||||
if (i == "(") {
|
||||
c(n);
|
||||
var s = n.getSelectionRange(), o = r.doc.getTextRange(s);
|
||||
if (o !== "" && n.getWrapBehavioursEnabled()) return h(s, o, "(", ")");
|
||||
if (p.isSaneInsertion(n, r)) return p.recordAutoInsert(n, r, ")"), {text: "()", selection: [1, 1]}
|
||||
} else if (i == ")") {
|
||||
c(n);
|
||||
var u = n.getCursorPosition(), a = r.doc.getLine(u.row), f = a.substring(u.column, u.column + 1);
|
||||
if (f == ")") {
|
||||
var l = r.$findOpeningBracket(")", {column: u.column + 1, row: u.row});
|
||||
if (l !== null && p.isAutoInsertedClosing(u, a, i)) return p.popAutoInsertedClosing(), {
|
||||
text: "",
|
||||
selection: [1, 1]
|
||||
}
|
||||
}
|
||||
}
|
||||
}), this.add("parens", "deletion", function (e, t, n, r, i) {
|
||||
var s = r.doc.getTextRange(i);
|
||||
if (!i.isMultiLine() && s == "(") {
|
||||
c(n);
|
||||
var o = r.doc.getLine(i.start.row), u = o.substring(i.start.column + 1, i.start.column + 2);
|
||||
if (u == ")") return i.end.column++, i
|
||||
}
|
||||
}), this.add("brackets", "insertion", function (e, t, n, r, i) {
|
||||
if (i == "[") {
|
||||
c(n);
|
||||
var s = n.getSelectionRange(), o = r.doc.getTextRange(s);
|
||||
if (o !== "" && n.getWrapBehavioursEnabled()) return h(s, o, "[", "]");
|
||||
if (p.isSaneInsertion(n, r)) return p.recordAutoInsert(n, r, "]"), {text: "[]", selection: [1, 1]}
|
||||
} else if (i == "]") {
|
||||
c(n);
|
||||
var u = n.getCursorPosition(), a = r.doc.getLine(u.row), f = a.substring(u.column, u.column + 1);
|
||||
if (f == "]") {
|
||||
var l = r.$findOpeningBracket("]", {column: u.column + 1, row: u.row});
|
||||
if (l !== null && p.isAutoInsertedClosing(u, a, i)) return p.popAutoInsertedClosing(), {
|
||||
text: "",
|
||||
selection: [1, 1]
|
||||
}
|
||||
}
|
||||
}
|
||||
}), this.add("brackets", "deletion", function (e, t, n, r, i) {
|
||||
var s = r.doc.getTextRange(i);
|
||||
if (!i.isMultiLine() && s == "[") {
|
||||
c(n);
|
||||
var o = r.doc.getLine(i.start.row), u = o.substring(i.start.column + 1, i.start.column + 2);
|
||||
if (u == "]") return i.end.column++, i
|
||||
}
|
||||
}), this.add("string_dquotes", "insertion", function (e, t, n, r, i) {
|
||||
if (i == '"' || i == "'") {
|
||||
c(n);
|
||||
var s = i, o = n.getSelectionRange(), u = r.doc.getTextRange(o);
|
||||
if (u !== "" && u !== "'" && u != '"' && n.getWrapBehavioursEnabled()) return h(o, u, s, s);
|
||||
if (!u) {
|
||||
var a = n.getCursorPosition(), f = r.doc.getLine(a.row), l = f.substring(a.column - 1, a.column),
|
||||
p = f.substring(a.column, a.column + 1), d = r.getTokenAt(a.row, a.column),
|
||||
v = r.getTokenAt(a.row, a.column + 1);
|
||||
if (l == "\\" && d && /escape/.test(d.type)) return null;
|
||||
var m = d && /string|escape/.test(d.type), g = !v || /string|escape/.test(v.type), y;
|
||||
if (p == s) y = m !== g; else {
|
||||
if (m && !g) return null;
|
||||
if (m && g) return null;
|
||||
var b = r.$mode.tokenRe;
|
||||
b.lastIndex = 0;
|
||||
var w = b.test(l);
|
||||
b.lastIndex = 0;
|
||||
var E = b.test(l);
|
||||
if (w || E) return null;
|
||||
if (p && !/[\s;,.})\]\\]/.test(p)) return null;
|
||||
y = !0
|
||||
}
|
||||
return {text: y ? s + s : "", selection: [1, 1]}
|
||||
}
|
||||
}
|
||||
}), this.add("string_dquotes", "deletion", function (e, t, n, r, i) {
|
||||
var s = r.doc.getTextRange(i);
|
||||
if (!i.isMultiLine() && (s == '"' || s == "'")) {
|
||||
c(n);
|
||||
var o = r.doc.getLine(i.start.row), u = o.substring(i.start.column + 1, i.start.column + 2);
|
||||
if (u == s) return i.end.column++, i
|
||||
}
|
||||
})
|
||||
};
|
||||
p.isSaneInsertion = function (e, t) {
|
||||
var n = e.getCursorPosition(), r = new s(t, n.row, n.column);
|
||||
if (!this.$matchTokenType(r.getCurrentToken() || "text", u)) {
|
||||
var i = new s(t, n.row, n.column + 1);
|
||||
if (!this.$matchTokenType(i.getCurrentToken() || "text", u)) return !1
|
||||
}
|
||||
return r.stepForward(), r.getCurrentTokenRow() !== n.row || this.$matchTokenType(r.getCurrentToken() || "text", a)
|
||||
}, p.$matchTokenType = function (e, t) {
|
||||
return t.indexOf(e.type || e) > -1
|
||||
}, p.recordAutoInsert = function (e, t, n) {
|
||||
var r = e.getCursorPosition(), i = t.doc.getLine(r.row);
|
||||
this.isAutoInsertedClosing(r, i, f.autoInsertedLineEnd[0]) || (f.autoInsertedBrackets = 0), f.autoInsertedRow = r.row, f.autoInsertedLineEnd = n + i.substr(r.column), f.autoInsertedBrackets++
|
||||
}, p.recordMaybeInsert = function (e, t, n) {
|
||||
var r = e.getCursorPosition(), i = t.doc.getLine(r.row);
|
||||
this.isMaybeInsertedClosing(r, i) || (f.maybeInsertedBrackets = 0), f.maybeInsertedRow = r.row, f.maybeInsertedLineStart = i.substr(0, r.column) + n, f.maybeInsertedLineEnd = i.substr(r.column), f.maybeInsertedBrackets++
|
||||
}, p.isAutoInsertedClosing = function (e, t, n) {
|
||||
return f.autoInsertedBrackets > 0 && e.row === f.autoInsertedRow && n === f.autoInsertedLineEnd[0] && t.substr(e.column) === f.autoInsertedLineEnd
|
||||
}, p.isMaybeInsertedClosing = function (e, t) {
|
||||
return f.maybeInsertedBrackets > 0 && e.row === f.maybeInsertedRow && t.substr(e.column) === f.maybeInsertedLineEnd && t.substr(0, e.column) == f.maybeInsertedLineStart
|
||||
}, p.popAutoInsertedClosing = function () {
|
||||
f.autoInsertedLineEnd = f.autoInsertedLineEnd.substr(1), f.autoInsertedBrackets--
|
||||
}, p.clearMaybeInsertedClosing = function () {
|
||||
f && (f.maybeInsertedBrackets = 0, f.maybeInsertedRow = -1)
|
||||
}, r.inherits(p, i), t.CstyleBehaviour = p
|
||||
}), ace.define("ace/mode/folding/cstyle", ["require", "exports", "module", "ace/lib/oop", "ace/range", "ace/mode/folding/fold_mode"], function (e, t, n) {
|
||||
"use strict";
|
||||
var r = e("../../lib/oop"), i = e("../../range").Range, s = e("./fold_mode").FoldMode,
|
||||
o = t.FoldMode = function (e) {
|
||||
e && (this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + e.start)), this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + e.end)))
|
||||
};
|
||||
r.inherits(o, s), function () {
|
||||
this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/, this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/, this.singleLineBlockCommentRe = /^\s*(\/\*).*\*\/\s*$/, this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/, this.startRegionRe = /^\s*(\/\*|\/\/)#?region\b/, this._getFoldWidgetBase = this.getFoldWidget, this.getFoldWidget = function (e, t, n) {
|
||||
var r = e.getLine(n);
|
||||
if (this.singleLineBlockCommentRe.test(r) && !this.startRegionRe.test(r) && !this.tripleStarBlockCommentRe.test(r)) return "";
|
||||
var i = this._getFoldWidgetBase(e, t, n);
|
||||
return !i && this.startRegionRe.test(r) ? "start" : i
|
||||
}, this.getFoldWidgetRange = function (e, t, n, r) {
|
||||
var i = e.getLine(n);
|
||||
if (this.startRegionRe.test(i)) return this.getCommentRegionBlock(e, i, n);
|
||||
var s = i.match(this.foldingStartMarker);
|
||||
if (s) {
|
||||
var o = s.index;
|
||||
if (s[1]) return this.openingBracketBlock(e, s[1], n, o);
|
||||
var u = e.getCommentFoldRange(n, o + s[0].length, 1);
|
||||
return u && !u.isMultiLine() && (r ? u = this.getSectionRange(e, n) : t != "all" && (u = null)), u
|
||||
}
|
||||
if (t === "markbegin") return;
|
||||
var s = i.match(this.foldingStopMarker);
|
||||
if (s) {
|
||||
var o = s.index + s[0].length;
|
||||
return s[1] ? this.closingBracketBlock(e, s[1], n, o) : e.getCommentFoldRange(n, o, -1)
|
||||
}
|
||||
}, this.getSectionRange = function (e, t) {
|
||||
var n = e.getLine(t), r = n.search(/\S/), s = t, o = n.length;
|
||||
t += 1;
|
||||
var u = t, a = e.getLength();
|
||||
while (++t < a) {
|
||||
n = e.getLine(t);
|
||||
var f = n.search(/\S/);
|
||||
if (f === -1) continue;
|
||||
if (r > f) break;
|
||||
var l = this.getFoldWidgetRange(e, "all", t);
|
||||
if (l) {
|
||||
if (l.start.row <= s) break;
|
||||
if (l.isMultiLine()) t = l.end.row; else if (r == f) break
|
||||
}
|
||||
u = t
|
||||
}
|
||||
return new i(s, o, u, e.getLine(u).length)
|
||||
}, this.getCommentRegionBlock = function (e, t, n) {
|
||||
var r = t.search(/\s*$/), s = e.getLength(), o = n, u = /^\s*(?:\/\*|\/\/|--)#?(end)?region\b/, a = 1;
|
||||
while (++n < s) {
|
||||
t = e.getLine(n);
|
||||
var f = u.exec(t);
|
||||
if (!f) continue;
|
||||
f[1] ? a-- : a++;
|
||||
if (!a) break
|
||||
}
|
||||
var l = n;
|
||||
if (l > o) return new i(o, r, l, t.length)
|
||||
}
|
||||
}.call(o.prototype)
|
||||
}), ace.define("ace/mode/golang", ["require", "exports", "module", "ace/lib/oop", "ace/mode/text", "ace/mode/golang_highlight_rules", "ace/mode/matching_brace_outdent", "ace/mode/behaviour/cstyle", "ace/mode/folding/cstyle"], function (e, t, n) {
|
||||
var r = e("../lib/oop"), i = e("./text").Mode, s = e("./golang_highlight_rules").GolangHighlightRules,
|
||||
o = e("./matching_brace_outdent").MatchingBraceOutdent, u = e("./behaviour/cstyle").CstyleBehaviour,
|
||||
a = e("./folding/cstyle").FoldMode, f = function () {
|
||||
this.HighlightRules = s, this.$outdent = new o, this.foldingRules = new a, this.$behaviour = new u
|
||||
};
|
||||
r.inherits(f, i), function () {
|
||||
this.lineCommentStart = "//", this.blockComment = {
|
||||
start: "/*",
|
||||
end: "*/"
|
||||
}, this.getNextLineIndent = function (e, t, n) {
|
||||
var r = this.$getIndent(t), i = this.getTokenizer().getLineTokens(t, e), s = i.tokens, o = i.state;
|
||||
if (s.length && s[s.length - 1].type == "comment") return r;
|
||||
if (e == "start") {
|
||||
var u = t.match(/^.*[\{\(\[]\s*$/);
|
||||
u && (r += n)
|
||||
}
|
||||
return r
|
||||
}, this.checkOutdent = function (e, t, n) {
|
||||
return this.$outdent.checkOutdent(t, n)
|
||||
}, this.autoOutdent = function (e, t, n) {
|
||||
this.$outdent.autoOutdent(t, n)
|
||||
}, this.$id = "ace/mode/golang"
|
||||
}.call(f.prototype), t.Mode = f
|
||||
})
|
||||
4
internal/server/static/ace/snippets/ golang.js
Normal file
4
internal/server/static/ace/snippets/ golang.js
Normal file
@@ -0,0 +1,4 @@
|
||||
ace.define("ace/snippets/golang", ["require", "exports", "module"], function (e, t, n) {
|
||||
"use strict";
|
||||
t.snippetText = undefined, t.scope = "golang"
|
||||
})
|
||||
@@ -0,0 +1,5 @@
|
||||
ace.define("ace/theme/tomorrow_night_eighties", ["require", "exports", "module", "ace/lib/dom"], function (e, t, n) {
|
||||
t.isDark = !0, t.cssClass = "ace-tomorrow-night-eighties", t.cssText = ".ace-tomorrow-night-eighties .ace_gutter {background: #272727;color: #CCC}.ace-tomorrow-night-eighties .ace_print-margin {width: 1px;background: #272727}.ace-tomorrow-night-eighties {background-color: #2D2D2D;color: #CCCCCC}.ace-tomorrow-night-eighties .ace_constant.ace_other,.ace-tomorrow-night-eighties .ace_cursor {color: #CCCCCC}.ace-tomorrow-night-eighties .ace_marker-layer .ace_selection {background: #515151}.ace-tomorrow-night-eighties.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #2D2D2D;}.ace-tomorrow-night-eighties .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-tomorrow-night-eighties .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #6A6A6A}.ace-tomorrow-night-bright .ace_stack {background: rgb(66, 90, 44)}.ace-tomorrow-night-eighties .ace_marker-layer .ace_active-line {background: #393939}.ace-tomorrow-night-eighties .ace_gutter-active-line {background-color: #393939}.ace-tomorrow-night-eighties .ace_marker-layer .ace_selected-word {border: 1px solid #515151}.ace-tomorrow-night-eighties .ace_invisible {color: #6A6A6A}.ace-tomorrow-night-eighties .ace_keyword,.ace-tomorrow-night-eighties .ace_meta,.ace-tomorrow-night-eighties .ace_storage,.ace-tomorrow-night-eighties .ace_storage.ace_type,.ace-tomorrow-night-eighties .ace_support.ace_type {color: #CC99CC}.ace-tomorrow-night-eighties .ace_keyword.ace_operator {color: #66CCCC}.ace-tomorrow-night-eighties .ace_constant.ace_character,.ace-tomorrow-night-eighties .ace_constant.ace_language,.ace-tomorrow-night-eighties .ace_constant.ace_numeric,.ace-tomorrow-night-eighties .ace_keyword.ace_other.ace_unit,.ace-tomorrow-night-eighties .ace_support.ace_constant,.ace-tomorrow-night-eighties .ace_variable.ace_parameter {color: #F99157}.ace-tomorrow-night-eighties .ace_invalid {color: #CDCDCD;background-color: #F2777A}.ace-tomorrow-night-eighties .ace_invalid.ace_deprecated {color: #CDCDCD;background-color: #CC99CC}.ace-tomorrow-night-eighties .ace_fold {background-color: #6699CC;border-color: #CCCCCC}.ace-tomorrow-night-eighties .ace_entity.ace_name.ace_function,.ace-tomorrow-night-eighties .ace_support.ace_function,.ace-tomorrow-night-eighties .ace_variable {color: #6699CC}.ace-tomorrow-night-eighties .ace_support.ace_class,.ace-tomorrow-night-eighties .ace_support.ace_type {color: #FFCC66}.ace-tomorrow-night-eighties .ace_heading,.ace-tomorrow-night-eighties .ace_markup.ace_heading,.ace-tomorrow-night-eighties .ace_string {color: #99CC99}.ace-tomorrow-night-eighties .ace_comment {color: #999999}.ace-tomorrow-night-eighties .ace_entity.ace_name.ace_tag,.ace-tomorrow-night-eighties .ace_entity.ace_other.ace_attribute-name,.ace-tomorrow-night-eighties .ace_meta.ace_tag,.ace-tomorrow-night-eighties .ace_variable {color: #F2777A}.ace-tomorrow-night-eighties .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ09NrYAgMjP4PAAtGAwchHMyAAAAAAElFTkSuQmCC) right repeat-y}";
|
||||
var r = e("../lib/dom");
|
||||
r.importCssString(t.cssText, t.cssClass)
|
||||
})
|
||||
28
internal/server/static/index.html
Normal file
28
internal/server/static/index.html
Normal file
@@ -0,0 +1,28 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||
<title>Monkey Playground</title>
|
||||
<link href="style.css" rel="stylesheet"/>
|
||||
</head>
|
||||
<body>
|
||||
<div class="layout">
|
||||
<div class="top">
|
||||
<b><a href="https://git.unflavoredmeson.com/unflavoredmeson/monkey-lango"
|
||||
style="color: #FFF; text-decoration: none;">Monkey</a></b>
|
||||
<span>⌘/Ctrl + ENTER to Run. ⌘/Ctrl + SPACE to Format.</span>
|
||||
</div>
|
||||
<div class="bottom">
|
||||
<div class="left">
|
||||
<pre id="code"></pre>
|
||||
</div>
|
||||
<div id="output" class="right"></div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="ace/ace.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="https://code.jquery.com/jquery-1.12.4.min.js"
|
||||
integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous"></script>
|
||||
<script src="main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
79
internal/server/static/main.js
Normal file
79
internal/server/static/main.js
Normal file
@@ -0,0 +1,79 @@
|
||||
(function () {
|
||||
var editor = ace.edit('code');
|
||||
editor.setTheme('ace/theme/tomorrow_night_eighties');
|
||||
editor.session.setMode('ace/mode/golang');
|
||||
editor.focus();
|
||||
|
||||
var localStorage = window.localStorage || {
|
||||
setItem: function () {
|
||||
}, getItem: function () {
|
||||
return '';
|
||||
}
|
||||
};
|
||||
|
||||
var savedCode = localStorage.getItem('code') || '';
|
||||
if (savedCode === '') {
|
||||
savedCode = 'println("Hello World!")\n';
|
||||
}
|
||||
editor.setValue(savedCode, 1);
|
||||
|
||||
$('#code').on('keydown', function (e) {
|
||||
var meta = e.metaKey || e.ctrlKey;
|
||||
var keyCode = (e.keyCode || e.which);
|
||||
var enter = keyCode === 10 || keyCode === 13;
|
||||
var format = keyCode === 32;
|
||||
|
||||
if (meta && format) {
|
||||
e.preventDefault();
|
||||
$('#output').html('<p class="ide">Formatting...</p>');
|
||||
$.ajax({
|
||||
url: '/api/format',
|
||||
method: 'POST',
|
||||
data: {
|
||||
code: editor.getValue()
|
||||
},
|
||||
success: function (data) {
|
||||
editor.setValue(data, 1);
|
||||
$('#output').html('');
|
||||
},
|
||||
error: function (xhr, status, text) {
|
||||
var response = xhr.responseText.replace(/\n/g, '<br/>');
|
||||
if (response) {
|
||||
$('#output').html('<p class="msg-err">' + response + '</p>');
|
||||
localStorage.setItem('code', editor.getValue());
|
||||
} else {
|
||||
$('#output').html('<p class="msg-err">Looks like the server is not reachable.</p>');
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (meta && enter) {
|
||||
e.preventDefault();
|
||||
$('#output').html('');
|
||||
$('#output').append('<p class="ide">Executing...</p>');
|
||||
$.ajax({
|
||||
url: '/api/run',
|
||||
method: 'POST',
|
||||
data: {
|
||||
code: editor.getValue()
|
||||
},
|
||||
success: function (data) {
|
||||
var output = data.replace(/\n/g, '<br/>');
|
||||
$('#output').html('<p class="msg">' + output + '</p>');
|
||||
localStorage.setItem('code', editor.getValue());
|
||||
},
|
||||
error: function (xhr, status, text) {
|
||||
var response = xhr.responseText.replace(/\n/g, '<br/>');
|
||||
if (response) {
|
||||
$('#output').html('<p class="msg-err">' + response + '</p>');
|
||||
localStorage.setItem('code', editor.getValue());
|
||||
} else {
|
||||
$('#output').html('<p class="msg-err">Looks like the server is not reachable.</p>');
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
})();
|
||||
66
internal/server/static/style.css
Normal file
66
internal/server/static/style.css
Normal file
@@ -0,0 +1,66 @@
|
||||
@import url("//fonts.googleapis.com/css?family=Ubuntu+Mono");
|
||||
html, body {
|
||||
background: #333;
|
||||
font-size: 16px;
|
||||
color: #FFF;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
overflow: hidden; }
|
||||
|
||||
.layout {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
width: 100%;
|
||||
height: 100%; }
|
||||
.layout .top {
|
||||
flex-basis: 50px;
|
||||
background: #222;
|
||||
font-size: 20px;
|
||||
display: flex;
|
||||
flex-direction: row; }
|
||||
.layout .top b {
|
||||
flex: 1;
|
||||
padding-left: 20px;
|
||||
line-height: 50px;
|
||||
font-family: 'Ubuntu Mono', monospace; }
|
||||
.layout .top span {
|
||||
flex: 1;
|
||||
text-align: right;
|
||||
line-height: 50px;
|
||||
color: #555;
|
||||
padding-right: 20px;
|
||||
font-family: 'Ubuntu Mono', monospace; }
|
||||
.layout .bottom {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: row; }
|
||||
.layout .bottom .left {
|
||||
background: #383838;
|
||||
width: 50%;
|
||||
position: relative; }
|
||||
.layout .bottom .left #code {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-size: 14px;
|
||||
margin: 0;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0; }
|
||||
.layout .bottom .right {
|
||||
width: 50%;
|
||||
padding: 20px;
|
||||
font-family: 'Ubuntu Mono', monospace; }
|
||||
.layout .bottom .right p {
|
||||
margin-top: 0; }
|
||||
.layout .bottom .right .ide {
|
||||
color: #555; }
|
||||
.layout .bottom .right .msg {
|
||||
color: #FFC107; }
|
||||
.layout .bottom .right .msg-err {
|
||||
color: #F44336; }
|
||||
|
||||
/*# sourceMappingURL=style.css.map */
|
||||
7
internal/server/static/style.css.map
Normal file
7
internal/server/static/style.css.map
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"version": 3,
|
||||
"mappings": "AAAQ,4DAAoD;AAE5D,UAAW;EACV,UAAU,EAAE,IAAI;EAChB,SAAS,EAAE,IAAI;EACf,KAAK,EAAE,IAAI;EACX,KAAK,EAAE,IAAI;EAAE,MAAM,EAAE,IAAI;EACzB,MAAM,EAAE,CAAC;EAAE,OAAO,EAAE,CAAC;EACrB,QAAQ,EAAE,MAAM;;AAGjB,OAAQ;EACP,OAAO,EAAE,IAAI;EACb,cAAc,EAAE,MAAM;EACtB,KAAK,EAAE,IAAI;EAAE,MAAM,EAAE,IAAI;EACzB,YAAK;IACJ,UAAU,EAAE,IAAI;IAChB,UAAU,EAAE,IAAI;IAChB,SAAS,EAAE,IAAI;IACf,OAAO,EAAE,IAAI;IACb,cAAc,EAAE,GAAG;IAEnB,cAAE;MACD,IAAI,EAAE,CAAC;MACP,YAAY,EAAE,IAAI;MAClB,WAAW,EAAE,IAAI;MACjB,WAAW,EAAE,wBAAwB;IAGtC,iBAAK;MACJ,IAAI,EAAE,CAAC;MACP,UAAU,EAAE,KAAK;MACjB,WAAW,EAAE,IAAI;MACjB,KAAK,EAAE,IAAI;MACX,aAAa,EAAE,IAAI;MACnB,WAAW,EAAE,wBAAwB;EAIvC,eAAQ;IACP,IAAI,EAAE,CAAC;IACP,OAAO,EAAE,IAAI;IACb,cAAc,EAAE,GAAG;IAEnB,qBAAM;MACL,UAAU,EAAE,OAAO;MACnB,KAAK,EAAE,GAAG;MACV,QAAQ,EAAE,QAAQ;MAElB,2BAAM;QACL,MAAM,EAAE,CAAC;QAAE,OAAO,EAAE,CAAC;QACrB,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,CAAC;QAAE,QAAQ,EAAE,QAAQ;QAC7B,GAAG,EAAE,CAAC;QAAE,MAAM,EAAE,CAAC;QACjB,IAAI,EAAE,CAAC;QAAE,KAAK,EAAE,CAAC;IAInB,sBAAO;MACN,KAAK,EAAE,GAAG;MACV,OAAO,EAAE,IAAI;MACb,WAAW,EAAE,wBAAwB;MAErC,wBAAE;QACD,UAAU,EAAE,CAAC;MAGd,2BAAK;QACJ,KAAK,EAAE,IAAI;MAGZ,2BAAK;QACJ,KAAK,EAAE,OAAO;MAGZ,+BAAS;QACP,KAAK,EAAE,OAAO",
|
||||
"sources": ["style.scss"],
|
||||
"names": [],
|
||||
"file": "style.css"
|
||||
}
|
||||
81
internal/server/static/style.scss
Normal file
81
internal/server/static/style.scss
Normal file
@@ -0,0 +1,81 @@
|
||||
@import url('//fonts.googleapis.com/css?family=Ubuntu+Mono');
|
||||
|
||||
html, body {
|
||||
background: #333;
|
||||
font-size: 16px;
|
||||
color: #FFF;
|
||||
width: 100%; height: 100%;
|
||||
margin: 0; padding: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.layout {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
width: 100%; height: 100%;
|
||||
.top {
|
||||
flex-basis: 50px;
|
||||
background: #222;
|
||||
font-size: 20px;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
|
||||
b {
|
||||
flex: 1;
|
||||
padding-left: 20px;
|
||||
line-height: 50px;
|
||||
font-family: 'Ubuntu Mono', monospace;
|
||||
}
|
||||
|
||||
span {
|
||||
flex: 1;
|
||||
text-align: right;
|
||||
line-height: 50px;
|
||||
color: #555;
|
||||
padding-right: 20px;
|
||||
font-family: 'Ubuntu Mono', monospace;
|
||||
}
|
||||
}
|
||||
|
||||
.bottom {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
|
||||
.left {
|
||||
background: #383838;
|
||||
width: 50%;
|
||||
position: relative;
|
||||
|
||||
#code {
|
||||
margin: 0; padding: 0;
|
||||
font-size: 14px;
|
||||
margin: 0; position: absolute;
|
||||
top: 0; bottom: 0;
|
||||
left: 0; right: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.right {
|
||||
width: 50%;
|
||||
padding: 20px;
|
||||
font-family: 'Ubuntu Mono', monospace;
|
||||
|
||||
p {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.ide {
|
||||
color: #555;
|
||||
}
|
||||
|
||||
.msg {
|
||||
color: #FFC107;
|
||||
}
|
||||
|
||||
.msg-err {
|
||||
color: #F44336;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user