296 lines
13 KiB
HTML
296 lines
13 KiB
HTML
{{extend 'layout.html'}}
|
|
<!-- begin "edit" block -->
|
|
{{
|
|
def shortcut(combo, description):
|
|
return XML('<li><span class="teletype-text">%s</span><span>%s</span></li>' % (combo, description))
|
|
}}
|
|
{{if TEXT_EDITOR == 'amy':}}
|
|
{{include 'default/amy_ajax.html'}}
|
|
{{elif TEXT_EDITOR == 'codemirror':}}
|
|
{{cm=URL('static','codemirror')}}
|
|
<link rel="stylesheet" href="{{=cm}}/lib/codemirror.css">
|
|
<link rel="stylesheet" href="{{=cm}}/theme/web2py.css">
|
|
<script src="{{=cm}}/lib/codemirror.js"></script>
|
|
<script src="{{=cm}}/mode/clike/clike.js"></script>
|
|
{{if TEXT_EDITOR_KEYBINDING == 'emacs':}}<script src="{{=cm}}/keymap/emacs.js"></script>{{pass}}
|
|
{{if TEXT_EDITOR_KEYBINDING == 'vi':}}<script src="{{=cm}}/keymap/vim.js"></script>{{pass}}
|
|
<script src="{{=cm}}/mode/python/python.js"></script>
|
|
<script src="{{=cm}}/mode/xml/xml.js"></script>
|
|
<script src="{{=cm}}/mode/css/css.js"></script>
|
|
<script src="{{=cm}}/mode/javascript/javascript.js"></script>
|
|
<script src="{{=cm}}/mode/htmlmixed/htmlmixed.js"></script>
|
|
<script src="{{=cm}}/lib/util/search.js"></script>
|
|
<script src="{{=cm}}/lib/util/searchcursor.js"></script>
|
|
<script src="{{=cm}}/lib/util/dialog.js"></script>
|
|
<link rel="stylesheet" href="{{=cm}}/lib/util/dialog.css">
|
|
<script src="{{=cm}}/emmet.min.js"></script>
|
|
<script language="Javascript" type="text/javascript" src="{{=URL('static','js/ajax_editor.js')}}"></script>
|
|
{{elif TEXT_EDITOR == 'ace':}}
|
|
<script src="{{=URL(r=request,c='static',f='ace/src/ace.js')}}" type="text/javascript" charset="utf-8"></script>
|
|
<script src="{{=URL(r=request,c='static',f='ace/src/theme-%s.js' % TEXT_EDITOR_THEME)}}" type="text/javascript" charset="utf-8"></script>
|
|
<script>var theme = "ace/theme/{{=TEXT_EDITOR_THEME}}";</script>
|
|
{{if filetype == 'python':}}
|
|
<script src="{{=URL(r=request,c='static',f='ace/src/mode-python.js')}}" type="text/javascript" charset="utf-8"></script>
|
|
<script>
|
|
var mode = require("ace/mode/python").Mode;
|
|
</script>
|
|
{{elif filetype in ('html', 'load'):}}
|
|
<script src="{{=URL(r=request,c='static',f='ace/src/mode-html.js')}}" type="text/javascript" charset="utf-8"></script>
|
|
<script>
|
|
var mode = require("ace/mode/html").Mode;
|
|
</script>
|
|
{{elif filetype == 'js':}}
|
|
<script src="{{=URL(r=request,c='static',f='ace/src/mode-javascript.js')}}" type="text/javascript" charset="utf-8"></script>
|
|
<script>
|
|
var mode = require("ace/mode/javascript").Mode;
|
|
</script>
|
|
{{elif filetype == 'css':}}
|
|
<script src="{{=URL(r=request,c='static',f='ace/src/mode-css.js')}}" type="text/javascript" charset="utf-8"></script>
|
|
<script>
|
|
var mode = require("ace/mode/css").Mode;
|
|
</script>
|
|
{{else:}}
|
|
<script src="{{=URL(r=request,c='static',f='ace/src/mode-text.js')}}" type="text/javascript" charset="utf-8"></script>
|
|
<script>
|
|
var mode = require("ace/mode/text").Mode;
|
|
</script>
|
|
{{pass}}
|
|
{{if TEXT_EDITOR_KEYBINDING == 'emacs':}}
|
|
<script src="{{=URL(r=request,c='static',f='ace/src/keybinding-emacs.js')}}" type="text/javascript" charset="utf-8"></script>
|
|
<script>
|
|
var keybinding = require("ace/keyboard/keybinding/emacs").Emacs;
|
|
</script>
|
|
{{elif TEXT_EDITOR_KEYBINDING == 'vi':}}
|
|
<script src="{{=URL(r=request,c='static',f='ace/src/keybinding-vi.js')}}" type="text/javascript" charset="utf-8"></script>
|
|
<script>
|
|
var keybinding = require("ace/keyboard/keybinding/vim").Vim;
|
|
</script>
|
|
{{else:}}
|
|
<script>
|
|
var keybinding = null;
|
|
</script>
|
|
{{pass}}
|
|
<script language="Javascript" type="text/javascript" src="{{=URL('static','js/ajax_editor.js')}}"></script>
|
|
{{else:}}
|
|
<script language="Javascript" type="text/javascript" src="{{=URL(r=request,c='static',f='edit_area/edit_area_full.js')}}"></script><script language="Javascript" type="text/javascript">
|
|
editAreaLoader.init({id: "body",start_highlight: true,allow_resize: "both",allow_toggle: {{=editarea_preferences['ALLOW_TOGGLE']}},language: "en",syntax: "{{=filetype}}",replace_tab_by_spaces: {{=editarea_preferences['REPLACE_TAB_BY_SPACES']}}, font_size: {{=editarea_preferences['FONT_SIZE']}}, fullscreen: {{=editarea_preferences['FULL_SCREEN']}}, display: "{{=editarea_preferences['DISPLAY']}}", show_line_colors: true, word_wrap: true, save_callback: "doClickSave" {{if filetype=='html':}},plugins: "zencoding"{{pass}} });
|
|
</script>
|
|
<script language="Javascript" type="text/javascript" src="{{=URL('static','js/ajax_editor.js')}}"></script>
|
|
<script language="Javascript" type="text/javascript">
|
|
jQuery(document).ready(function(){
|
|
setTimeout("keepalive('{{=URL('keepalive')}}')",10000);
|
|
});
|
|
</script>
|
|
{{pass}}
|
|
|
|
{{block sectionclass}}edit{{end}}
|
|
|
|
<h2>{{=T('Editing file "%s"',filename)}}</h2>
|
|
|
|
{{if functions:}}
|
|
<p class="formfield well well-small">
|
|
<span style="text-align:left;" id="exposed">
|
|
{{=B(T('exposes:'))}} {{=XML(', '.join([A(f,_href=URL(a=app,c=controller,f=f)).xml() for f in functions]))}}
|
|
</span>
|
|
{{if editviewlinks:}}<br/>
|
|
{{=B(T('edit views:'))}}
|
|
{{=XML(', '.join([v.xml() for v in editviewlinks]))}}
|
|
{{pass}}
|
|
</p>
|
|
{{pass}}
|
|
<div class='row-fluid'>
|
|
<p class="right controls pull-right">
|
|
{{if filetype=='python':}}
|
|
{{=A(SPAN(T('toggle breakpoint')),
|
|
_value="breakpoint", _name="breakpoint",
|
|
_onclick="return doToggleBreakpoint('%s','%s://%s%s');" % (filename,
|
|
request.env['wsgi_url_scheme'], request.env['http_host'],
|
|
URL(c='debug', f='toggle_breakpoint')),
|
|
_class="button special btn btn-inverse")}}
|
|
{{pass}}
|
|
{{=button(URL('design',args=request.vars.app if request.vars.app else request.args[0], anchor=request.vars.id), T('back'))}}
|
|
{{if edit_controller:}}
|
|
{{=button(edit_controller, T('edit controller'))}}
|
|
{{pass}}
|
|
{{if view_link:}}
|
|
{{=button(view_link, T('try view'))}}
|
|
{{pass}}
|
|
{{if request.args[1]=='models':}}
|
|
<a class="button btn" href="http://www.web2py.com/sqldesigner" target="_blank"><span>{{=T('online designer')}}</span></a>
|
|
{{pass}}
|
|
<a class="button btn" href="http://www.web2py.com/examples/static/epydoc/index.html" target="_blank"><span>{{=T('docs')}}</span></a>
|
|
</p>
|
|
</div>
|
|
<div id="editor_area">
|
|
<form action="{{=URL('edit',args=filename)}}" method="post" name="editform" id="editform">
|
|
<div class="editor-bar-column">
|
|
<label>{{=T('Save file:')}}</label>
|
|
<a value="save" name="save" onclick="return doClickSave();" class="icon saveicon btn btn-mini" style="background-image: -webkit-linear-gradient(top,white,#E6E6E6);">
|
|
{{=IMG(_src=URL('static', 'images/save_icon.png'), _alt=T('Save'))}}
|
|
</a>
|
|
</div>
|
|
<div class="editor-bar-column">
|
|
<div class="row-fluid">
|
|
<div class="span7">
|
|
<label>{{=T('Saved file hash:')}}</label>
|
|
<input type="input" name="file_hash" value="{{=file_hash}}" class="input-long uneditable-input" readonly="readonly"/>
|
|
</div>
|
|
<div class="span5">
|
|
<label>{{=T('Last saved on:')}}</label>
|
|
<input type="input" name="saved_on" value="{{=saved_on}}" class="input-normal uneditable-input" readonly="readonly"/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{{if TEXT_EDITOR == 'amy':}}
|
|
<textarea style="width: auto; height:400px;direction:ltr;" rows="58" cols="100" -amy-enabled="true" id="body" name="data">{{=data}}</textarea>
|
|
<script>window.eamy = eamy;</script>
|
|
{{elif TEXT_EDITOR == 'codemirror':}}
|
|
<textarea style="width: auto; height:auto; direction:ltr;" id="body" name="data">{{=data}}</textarea>
|
|
<script>
|
|
function isFullScreen(instance) {
|
|
return /\bCodeMirror-fullscreen\b/.test(instance.getWrapperElement().className);
|
|
}
|
|
function winHeight() {
|
|
return window.innerHeight || (document.documentElement || document.body).clientHeight;
|
|
}
|
|
function setFullScreen(instance, full) {
|
|
var wrap = instance.getWrapperElement(), scroll = instance.getScrollerElement();
|
|
if (full) {
|
|
wrap.className += " CodeMirror-fullscreen";
|
|
scroll.style.height = winHeight() + "px";
|
|
document.documentElement.style.overflow = "hidden";
|
|
} else {
|
|
wrap.className = wrap.className.replace(" CodeMirror-fullscreen", "");
|
|
scroll.style.height = "";
|
|
document.documentElement.style.overflow = "";
|
|
}
|
|
instance.refresh();
|
|
}
|
|
CodeMirror.connect(window, "resize", function() {
|
|
var showing = document.body.getElementsByClassName("CodeMirror-fullscreen")[0];
|
|
if (!showing) return;
|
|
showing.CodeMirror.getScrollerElement().style.height = winHeight() + "px";
|
|
});
|
|
// must be here or break emmet/zencoding
|
|
CodeMirror.defaults.extraKeys["Ctrl-S"] =
|
|
function(instance) {doClickSave();};
|
|
CodeMirror.defaults.extraKeys["Ctrl-F11"]=
|
|
function(instance) {
|
|
setFullScreen(instance, !isFullScreen(instance));};
|
|
{{if filetype=='python':}}
|
|
CodeMirror.defaults.extraKeys["Tab"] = "indentMore";
|
|
{{pass}}
|
|
CodeMirror.defaults.extraKeys["Esc"]=
|
|
function(instance) {
|
|
if (isFullScreen(instance))
|
|
setFullScreen(instance, false);};
|
|
var cm_opts = {
|
|
{{if filetype=='html':}}
|
|
mode : "text/html", lineNumbers : true,
|
|
profile: 'xhtml',
|
|
{{else:}}
|
|
mode: { name: '{{=filetype}}'{{if filetype=='python':}},version: 2,singleLineStringErrors: false{{pass}} },
|
|
{{pass}}
|
|
lineNumbers: true,
|
|
indentUnit: 4,
|
|
theme: "web2py",
|
|
tabMode: "shift",
|
|
lineWrapping: true,
|
|
{{if TEXT_EDITOR_KEYBINDING == 'emacs':}}keyMap: "emacs",{{pass}}
|
|
{{if TEXT_EDITOR_KEYBINDING == 'vi':}}keyMap: "vim",{{pass}}
|
|
matchBrackets: true,
|
|
autofocus: true,
|
|
onCursorActivity: function() {
|
|
editor.setLineClass(hlLine, null, null);
|
|
hlLine = editor.setLineClass(editor.getCursor().line, null, "activeline");}
|
|
};
|
|
var editor = CodeMirror.fromTextArea(
|
|
document.getElementById("body"),cm_opts);
|
|
var hlLine = editor.setLineClass(0, "activeline");
|
|
window.mirror = editor;
|
|
jQuery(function(){jQuery('.CodeMirror-scroll').css("height","auto").css("overflow-x","auto");});
|
|
</script>
|
|
{{elif TEXT_EDITOR == 'ace':}}
|
|
<div id="editor" style="height: 500px; width: auto; position: relative">{{=data}}</div>
|
|
<script>
|
|
window.onload = function() {
|
|
var editor = ace.edit("editor");
|
|
editor.setTheme(theme);
|
|
editor.getSession().setMode(new mode());
|
|
if (keybinding) {
|
|
editor.setKeyboardHandler(keybinding);
|
|
}
|
|
editor.commands.addCommand({
|
|
name: 'saveFile',
|
|
bindKey: {
|
|
win: 'Ctrl-S',
|
|
mac: 'Ctrl-S',
|
|
sender: 'editor|cli'
|
|
},
|
|
exec: function(env, args, request) {
|
|
doClickSave();
|
|
}
|
|
});
|
|
window.ace_editor = editor;
|
|
};
|
|
</script>
|
|
{{else:}}
|
|
<textarea cols="80" rows="25" id="body" style="direction:ltr;" name="data">{{=data}}</textarea>
|
|
<script>window.textarea = area.textarea;</script>
|
|
{{pass}}
|
|
<div class="editor-bar-bottom" style="margin-top:9px;">
|
|
<button class="editbutton btn" onclick="window.location.reload(); return false">{{=T('restore')}}</button>
|
|
{{=T('currently saved or')}}
|
|
<button class="editbutton btn" type="submit" name="revert">{{=T('revert')}}</button>
|
|
{{=T('to previous version.')}}
|
|
</div>
|
|
<br/>
|
|
</form>
|
|
</div>
|
|
|
|
<div class="row-fluid">
|
|
<div class="help span4 alert alert-block alert-info">
|
|
{{if TEXT_EDITOR=='edit_area' and filetype=='html':}}
|
|
<h3>{{=T('Key bindings for ZenCoding Plugin')}}</h3>
|
|
<ul class="keybindings unstyled">
|
|
{{=shortcut('Ctrl+S', T('Save via Ajax'))}}
|
|
{{=shortcut('Ctrl+,', T('Expand Abbreviation'))}}
|
|
{{=shortcut('Ctrl+M', T('Match Pair'))}}
|
|
{{=shortcut('Ctrl+H', T('Wrap with Abbreviation'))}}
|
|
{{=shortcut('Shift+Ctrl+M', T('Merge Lines'))}}
|
|
{{=shortcut('Ctrl+Shift+←', T('Previous Edit Point'))}}
|
|
{{=shortcut('Ctrl+Shift+→', T('Next Edit Point'))}}
|
|
{{=shortcut('Ctrl+Shift+↑', T('Go to Matching Pair'))}}
|
|
</ul>
|
|
{{elif TEXT_EDITOR == 'codemirror' and filetype=='html':}}
|
|
<h3>{{=T('Key bindings for ZenCoding Plugin')}}</h3>
|
|
<ul class="keybindings unstyled">
|
|
{{=shortcut('Ctrl+S', T('Save via Ajax'))}}
|
|
{{=shortcut('Ctrl+F11', T('Toggle Fullscreen'))}}
|
|
{{=shortcut('Ctrl-F / Cmd-F', T('Start searching'))}}
|
|
{{=shortcut('Ctrl-G / Cmd-G', T('Find Next'))}}
|
|
{{=shortcut('Shift-Ctrl-G / Shift-Cmd-G', T('Find Previous'))}}
|
|
{{=shortcut('Shift-Ctrl-F / Cmd-Option-F', T('Replace'))}}
|
|
{{=shortcut('Shift-Ctrl-R / Shift-Cmd-Option-F', T('Replace All'))}}
|
|
{{=shortcut('Tab', T('Expand Abbreviation'))}}
|
|
</ul>
|
|
{{elif TEXT_EDITOR == 'codemirror':}}
|
|
<h3>{{=T("Key bindings")}}</h3>
|
|
<ul class="keybindings unstyled">
|
|
{{=shortcut('Ctrl+S', T('Save via Ajax'))}}
|
|
{{=shortcut('Ctrl+F11', T('Toggle Fullscreen'))}}
|
|
{{=shortcut('Ctrl-F / Cmd-F', T('Start searching'))}}
|
|
{{=shortcut('Ctrl-G / Cmd-G', T('Find Next'))}}
|
|
{{=shortcut('Shift-Ctrl-G / Shift-Cmd-G', T('Find Previous'))}}
|
|
{{=shortcut('Shift-Ctrl-F / Cmd-Option-F', T('Replace'))}}
|
|
{{=shortcut('Shift-Ctrl-R / Shift-Cmd-Option-F', T('Replace All'))}}
|
|
</ul>
|
|
{{else:}}
|
|
<h3>{{=T("Key bindings")}}</h3>
|
|
<ul class="keybindings unstyled">
|
|
{{=shortcut('Ctrl+S', T('Save via Ajax'))}}
|
|
</ul>
|
|
{{pass}}
|
|
</div>
|
|
</div>
|
|
<!-- end "edit" block --> |