mirror of
https://github.com/Yubico/yubiadmin.git
synced 2025-02-27 08:54:15 +01:00
Added Ace editor.
This commit is contained in:
parent
1d3fb37561
commit
54ac3a1bb8
@ -31,7 +31,7 @@ from wtforms.fields import (SelectField, TextField, BooleanField, IntegerField,
|
|||||||
PasswordField)
|
PasswordField)
|
||||||
from wtforms.widgets import PasswordInput
|
from wtforms.widgets import PasswordInput
|
||||||
from wtforms.validators import NumberRange, URL, EqualTo, Regexp, Optional
|
from wtforms.validators import NumberRange, URL, EqualTo, Regexp, Optional
|
||||||
from yubiadmin.util.app import App, CollectionApp, render
|
from yubiadmin.util.app import App, CollectionApp
|
||||||
from yubiadmin.util.config import (python_handler, python_list_handler,
|
from yubiadmin.util.config import (python_handler, python_list_handler,
|
||||||
FileConfig)
|
FileConfig)
|
||||||
from yubiadmin.util.form import ConfigForm, FileForm, ListField
|
from yubiadmin.util.form import ConfigForm, FileForm, ListField
|
||||||
@ -212,8 +212,8 @@ class YubiAuthApp(App):
|
|||||||
Advanced
|
Advanced
|
||||||
"""
|
"""
|
||||||
return self.render_forms(request, [
|
return self.render_forms(request, [
|
||||||
FileForm(AUTH_CONFIG_FILE, 'Configuration')
|
FileForm(AUTH_CONFIG_FILE, 'Configuration', lang='python')
|
||||||
])
|
], script='editor')
|
||||||
|
|
||||||
def users(self, request):
|
def users(self, request):
|
||||||
"""
|
"""
|
||||||
|
@ -131,7 +131,8 @@ class FreeRadius(App):
|
|||||||
"""
|
"""
|
||||||
return self.render_forms(request, [
|
return self.render_forms(request, [
|
||||||
FileForm(CLIENTS_CONFIG_FILE, 'clients.conf',
|
FileForm(CLIENTS_CONFIG_FILE, 'clients.conf',
|
||||||
'Changes require the FreeRADIUS server to be restarted.')
|
'Changes require the FreeRADIUS server to be restarted.',
|
||||||
|
lang='ini')
|
||||||
], script='editor')
|
], script='editor')
|
||||||
|
|
||||||
|
|
||||||
|
@ -270,8 +270,8 @@ class YubikeyVal(App):
|
|||||||
Advanced
|
Advanced
|
||||||
"""
|
"""
|
||||||
return self.render_forms(request, [
|
return self.render_forms(request, [
|
||||||
FileForm(YKVAL_CONFIG_FILE, 'Configuration')
|
FileForm(YKVAL_CONFIG_FILE, 'Configuration', lang='php')
|
||||||
])
|
], script='editor')
|
||||||
|
|
||||||
# Pulls the tab to the right:
|
# Pulls the tab to the right:
|
||||||
advanced.advanced = True
|
advanced.advanced = True
|
||||||
|
11
yubiadmin/static/js/ace/ace.js
Normal file
11
yubiadmin/static/js/ace/ace.js
Normal file
File diff suppressed because one or more lines are too long
1
yubiadmin/static/js/ace/mode-ini.js
Normal file
1
yubiadmin/static/js/ace/mode-ini.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
define("ace/mode/ini",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/ini_highlight_rules","ace/mode/folding/cstyle"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./ini_highlight_rules").IniHighlightRules,u=e("./folding/cstyle").FoldMode,a=function(){var e=new o;this.foldingRules=new u,this.$tokenizer=new s(e.getRules())};r.inherits(a,i),function(){this.lineCommentStart=";",this.blockComment={start:"/*",end:"*/"}}.call(a.prototype),t.Mode=a}),define("ace/mode/ini_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"punctuation.definition.comment.ini",regex:"#.*",push_:[{token:"comment.line.number-sign.ini",regex:"$",next:"pop"},{defaultToken:"comment.line.number-sign.ini"}]},{token:"punctuation.definition.comment.ini",regex:";.*",push_:[{token:"comment.line.semicolon.ini",regex:"$",next:"pop"},{defaultToken:"comment.line.semicolon.ini"}]},{token:["keyword.other.definition.ini","text","punctuation.separator.key-value.ini"],regex:"\\b([a-zA-Z0-9_.-]+)\\b(\\s*)(=)"},{token:["punctuation.definition.entity.ini","constant.section.group-title.ini","punctuation.definition.entity.ini"],regex:"^(\\[)(.*?)(\\])"},{token:"punctuation.definition.string.begin.ini",regex:"'",push:[{token:"punctuation.definition.string.end.ini",regex:"'",next:"pop"},{token:"constant.character.escape.ini",regex:"\\\\."},{defaultToken:"string.quoted.single.ini"}]},{token:"punctuation.definition.string.begin.ini",regex:'"',push:[{token:"punctuation.definition.string.end.ini",regex:'"',next:"pop"},{defaultToken:"string.quoted.double.ini"}]}]},this.normalizeRules()};s.metaData={fileTypes:["ini","conf"],keyEquivalent:"^~I",name:"Ini",scopeName:"source.ini"},r.inherits(s,i),t.IniHighlightRules=s}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){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.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i){var s=i.index;return i[1]?this.openingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s+i[0].length,1)}if(t!=="markbeginend")return;var i=r.match(this.foldingStopMarker);if(i){var s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],n,s):e.getCommentFoldRange(n,s,-1)}}}.call(o.prototype)})
|
1
yubiadmin/static/js/ace/mode-php.js
Normal file
1
yubiadmin/static/js/ace/mode-php.js
Normal file
File diff suppressed because one or more lines are too long
1
yubiadmin/static/js/ace/mode-python.js
Normal file
1
yubiadmin/static/js/ace/mode-python.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
define("ace/mode/python",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/python_highlight_rules","ace/mode/folding/pythonic","ace/range"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./python_highlight_rules").PythonHighlightRules,u=e("./folding/pythonic").FoldMode,a=e("../range").Range,f=function(){this.$tokenizer=new s((new o).getRules()),this.foldingRules=new u("\\:")};r.inherits(f,i),function(){this.lineCommentStart="#",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.$tokenizer.getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"){var o=t.match(/^.*[\{\(\[\:]\s*$/);o&&(r+=n)}return r};var e={pass:1,"return":1,raise:1,"break":1,"continue":1};this.checkOutdent=function(t,n,r){if(r!=="\r\n"&&r!=="\r"&&r!=="\n")return!1;var i=this.$tokenizer.getLineTokens(n.trim(),t).tokens;if(!i)return!1;do var s=i.pop();while(s&&(s.type=="comment"||s.type=="text"&&s.value.match(/^\s+$/)));return s?s.type=="keyword"&&e[s.value]:!1},this.autoOutdent=function(e,t,n){n+=1;var r=this.$getIndent(t.getLine(n)),i=t.getTabString();r.slice(-i.length)==i&&t.remove(new a(n,r.length-i.length,n,r.length))}}.call(f.prototype),t.Mode=f}),define("ace/mode/python_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){var e="and|as|assert|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|raise|return|try|while|with|yield",t="True|False|None|NotImplemented|Ellipsis|__debug__",n="abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|binfile|iter|property|tuple|bool|filter|len|range|type|bytearray|float|list|raw_input|unichr|callable|format|locals|reduce|unicode|chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|__import__|complex|hash|min|set|apply|delattr|help|next|setattr|buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern",r=this.createKeywordMapper({"invalid.deprecated":"debugger","support.function":n,"constant.language":t,keyword:e},"identifier"),i="(?:r|u|ur|R|U|UR|Ur|uR)?",s="(?:(?:[1-9]\\d*)|(?:0))",o="(?:0[oO]?[0-7]+)",u="(?:0[xX][\\dA-Fa-f]+)",a="(?:0[bB][01]+)",f="(?:"+s+"|"+o+"|"+u+"|"+a+")",l="(?:[eE][+-]?\\d+)",c="(?:\\.\\d+)",h="(?:\\d+)",p="(?:(?:"+h+"?"+c+")|(?:"+h+"\\.))",d="(?:(?:"+p+"|"+h+")"+l+")",v="(?:"+d+"|"+p+")",m="\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\abfnrtv'\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})";this.$rules={start:[{token:"comment",regex:"#.*$"},{token:"string",regex:i+'"{3}',next:"qqstring3"},{token:"string",regex:i+'"(?=.)',next:"qqstring"},{token:"string",regex:i+"'{3}",next:"qstring3"},{token:"string",regex:i+"'(?=.)",next:"qstring"},{token:"constant.numeric",regex:"(?:"+v+"|\\d+)[jJ]\\b"},{token:"constant.numeric",regex:v},{token:"constant.numeric",regex:f+"[lL]\\b"},{token:"constant.numeric",regex:f+"\\b"},{token:r,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"\\+|\\-|\\*|\\*\\*|\\/|\\/\\/|%|<<|>>|&|\\||\\^|~|<|>|<=|=>|==|!=|<>|="},{token:"paren.lparen",regex:"[\\[\\(\\{]"},{token:"paren.rparen",regex:"[\\]\\)\\}]"},{token:"text",regex:"\\s+"}],qqstring3:[{token:"constant.language.escape",regex:m},{token:"string",regex:'"{3}',next:"start"},{defaultToken:"string"}],qstring3:[{token:"constant.language.escape",regex:m},{token:"string",regex:"'{3}",next:"start"},{defaultToken:"string"}],qqstring:[{token:"constant.language.escape",regex:m},{token:"string",regex:"\\\\$",next:"qqstring"},{token:"string",regex:'"|$',next:"start"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:m},{token:"string",regex:"\\\\$",next:"qstring"},{token:"string",regex:"'|$",next:"start"},{defaultToken:"string"}]}};r.inherits(s,i),t.PythonHighlightRules=s}),define("ace/mode/folding/pythonic",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode"],function(e,t,n){var r=e("../../lib/oop"),i=e("./fold_mode").FoldMode,s=t.FoldMode=function(e){this.foldingStartMarker=new RegExp("([\\[{])(?:\\s*)$|("+e+")(?:\\s*)(?:#.*)?$")};r.inherits(s,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i)return i[1]?this.openingBracketBlock(e,i[1],n,i.index):i[2]?this.indentationBlock(e,n,i.index+i[2].length):this.indentationBlock(e,n)}}.call(s.prototype)})
|
1
yubiadmin/static/js/ace/theme-chrome.js
Normal file
1
yubiadmin/static/js/ace/theme-chrome.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
define("ace/theme/chrome",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!1,t.cssClass="ace-chrome",t.cssText='.ace-chrome .ace_gutter {background: #ebebeb;color: #333;overflow : hidden;}.ace-chrome .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-chrome .ace_scroller {background-color: #FFFFFF;}.ace-chrome .ace_cursor {border-left: 2px solid black;}.ace-chrome .ace_overwrite-cursors .ace_cursor {border-left: 0px;border-bottom: 1px solid black;}.ace-chrome .ace_invisible {color: rgb(191, 191, 191);}.ace-chrome .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-chrome .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-chrome .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-chrome .ace_invalid {background-color: rgb(153, 0, 0);color: white;}.ace-chrome .ace_fold {}.ace-chrome .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-chrome .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-chrome .ace_support.ace_type,.ace-chrome .ace_support.ace_class.ace-chrome .ace_support.ace_other {color: rgb(109, 121, 222);}.ace-chrome .ace_variable.ace_parameter {font-style:italic;color:#FD971F;}.ace-chrome .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-chrome .ace_comment {color: #236e24;}.ace-chrome .ace_comment.ace_doc {color: #236e24;}.ace-chrome .ace_comment.ace_doc.ace_tag {color: #236e24;}.ace-chrome .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-chrome .ace_variable {color: rgb(49, 132, 149);}.ace-chrome .ace_xml-pe {color: rgb(104, 104, 91);}.ace-chrome .ace_entity.ace_name.ace_function {color: #0000A2;}.ace-chrome .ace_markup.ace_heading {color: rgb(12, 7, 255);}.ace-chrome .ace_markup.ace_list {color:rgb(185, 6, 144);}.ace-chrome .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-chrome .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-chrome .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-chrome .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-chrome .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-chrome .ace_gutter-active-line {background-color : #dcdcdc;}.ace-chrome .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-chrome .ace_storage,.ace-chrome .ace_keyword,.ace-chrome .ace_meta.ace_tag {color: rgb(147, 15, 128);}.ace-chrome .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-chrome .ace_string {color: #1A1AA6;}.ace-chrome .ace_entity.ace_other.ace_attribute-name {color: #994409;}.ace-chrome .ace_indent-guide {background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==") right repeat-y;}';var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)})
|
1
yubiadmin/static/js/ace/worker-php.js
Normal file
1
yubiadmin/static/js/ace/worker-php.js
Normal file
File diff suppressed because one or more lines are too long
@ -1,5 +1,9 @@
|
|||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
$.getScript("http://rawgithub.com/ajaxorg/ace-builds/master/src-noconflict/ace.js", function(data, textStatus, jqxhr) {
|
$.ajaxSetup({cache: true});
|
||||||
|
$.getScript("/js/ace/ace.js", function(data, textStatus, jqxhr) {
|
||||||
|
ace.config.set("modePath", "/js/ace/");
|
||||||
|
ace.config.set("workerPath", "/js/ace/");
|
||||||
|
ace.config.set("themePath", "/js/ace/");
|
||||||
$('textarea.editor').each(function() {
|
$('textarea.editor').each(function() {
|
||||||
var textarea = $(this);
|
var textarea = $(this);
|
||||||
var text = textarea.text();
|
var text = textarea.text();
|
||||||
@ -8,6 +12,11 @@ $(document).ready(function() {
|
|||||||
div.height(textarea.height());
|
div.height(textarea.height());
|
||||||
div.text(text);
|
div.text(text);
|
||||||
var editor = ace.edit(div.get(0));
|
var editor = ace.edit(div.get(0));
|
||||||
|
editor.setTheme('ace/theme/chrome');
|
||||||
|
var mode = textarea.attr('ace-mode');
|
||||||
|
if(mode) {
|
||||||
|
editor.getSession().setMode('ace/mode/'+mode);
|
||||||
|
}
|
||||||
textarea.after(div);
|
textarea.after(div);
|
||||||
textarea.hide();
|
textarea.hide();
|
||||||
editor.getSession().on('change', function(e) {
|
editor.getSession().on('change', function(e) {
|
||||||
|
@ -102,11 +102,13 @@ class FileForm(ConfigForm):
|
|||||||
def write(self, content, value):
|
def write(self, content, value):
|
||||||
return value
|
return value
|
||||||
|
|
||||||
def __init__(self, filename, legend=None, description=None, *args,
|
def __init__(self, filename, legend=None, description=None, lang=None,
|
||||||
**kwargs):
|
*args, **kwargs):
|
||||||
self.config = FileConfig(filename, [('content', self.Handler())])
|
self.config = FileConfig(filename, [('content', self.Handler())])
|
||||||
self.legend = legend
|
self.legend = legend
|
||||||
self.description = description
|
self.description = description
|
||||||
|
if lang:
|
||||||
|
self.attrs['content']['ace-mode'] = lang
|
||||||
super(FileForm, self).__init__(*args, **kwargs)
|
super(FileForm, self).__init__(*args, **kwargs)
|
||||||
self.content.label.text = 'File: %s' % filename
|
self.content.label.text = 'File: %s' % filename
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user