1
function disable_save_if_safe()
3
/* If this is defined, this engine supports change notification, so is able
4
* to enable the button again. Disable it for them. */
5
if(editbox.editor.addChangeHandler)
7
var savebutton = document.getElementById("save_button");
8
savebutton.disabled = true;
9
window.onbeforeunload = null;
13
function save_file(filename)
15
data = editbox.getCode();
3
var savebutton = document.getElementById("save_button");
4
var filename = document.getElementById("save_filename").value;
5
data = editAreaLoader.getValue("editbox");
16
6
/* Do NOT refresh the page contents (causes problems for editarea and is
18
if (current_file.svnstatus != "revision" ||
19
confirm("You are currently viewing an older version of this file. " +
20
"Saving will overwrite the current version. " +
21
"Are you sure you want to continue?"))
23
do_action("putfile", filename,
24
{"path":".", "data":data, "overwrite":"true"},
25
"multipart/form-data", true);
26
disable_save_if_safe();
30
function save_file_as(default_filename)
32
filename = prompt("Path to save to:", default_filename);
33
if (!filename) return;
35
/* The filename will be path_joined with the app name, so needs to not
36
* be absolute, lest it clobber the app name. */
37
if (filename.charAt(0) == "/") filename = filename.substring(1);
38
ajax_call(save_file_as_callback, "fileservice", filename, {}, "POST");
41
function save_file_as_callback(response)
43
if (response.status == 404 || confirm("Are you sure you want to overwrite " + filename + "?"))
47
/* Return a warning to be used in window.onbeforeunload. */
48
function confirm_beforeunload() {
49
return 'If you continue, any unsaved changes to the current file will be lost.';
8
do_action("putfile", filename,
9
{"path":".", "data":data, "overwrite":"true"},
10
"multipart/form-data", true);
11
savebutton.setAttribute("value", "Saved");
12
// XXX Do not disable for now; there is a problem getting the callback
14
//savebutton.setAttribute("disabled", "disabled");
52
17
function edit_text()
54
19
var savebutton = document.getElementById("save_button");
55
savebutton.disabled = false;
56
window.onbeforeunload = confirm_beforeunload;
20
savebutton.setAttribute("value", "Save");
21
savebutton.removeAttribute("disabled");
59
/** Presents the "editor heading" inserting it into a given element at
60
* the front. Note that the save widget is handled by the Python.
24
/** Presents the "editor heading" (the part with the save box)
25
* inserting it into a given element at the front.
62
27
function present_editorhead(elem, path, handler_type)
64
29
var div = document.getElementById("actions2");
31
/* Set up minimal interface */
32
var p = dom_make_text_elem("p", "Save as: ");
33
var pathname = document.createElement("input");
34
pathname.setAttribute("type", "text");
35
pathname.setAttribute("size", "30");
36
pathname.setAttribute("id", "save_filename");
37
pathname.setAttribute("value", path);
38
p.appendChild(pathname);
39
var savebutton = document.createElement("input");
40
savebutton.setAttribute("id", "save_button");
41
savebutton.setAttribute("type", "button");
42
savebutton.setAttribute("value", "Saved");
43
// XXX Do not disable for now; there is a problem getting the callback
45
//savebutton.setAttribute("disabled", "disabled");
46
savebutton.setAttribute("onclick", "save_file()");
47
p.appendChild(savebutton);
48
var t = document.createTextNode(" ");
66
52
/* Print a warning message if this is not actually a text file.
68
54
if (handler_type != "text")
78
function highlighting_changed(select)
80
editbox.edit(editbox.getCode(), select.value);
83
function initialise_codepress()
85
editbox.addChangeHandler(edit_text);
86
editbox.addSaveHandler(function() {document.getElementById("save_button").click()});
88
/* We can only safely disable the save button on the first load.
89
* Syntax highlighting changes will also get this function called.
90
* We unfortunately need the change handler added each time.
92
if (!initialise_codepress.already)
94
disable_save_if_safe();
95
initialise_codepress.already = true;
99
64
/** Presents the text editor.
101
66
function handle_text(path, text, handler_type)
108
73
present_editorhead(files, path, handler_type);
110
75
var div = document.createElement("div");
111
div.style.height = '100%';
112
76
files.appendChild(div);
113
77
var txt_elem = dom_make_text_elem("textarea",
115
79
div.appendChild(txt_elem);
116
80
txt_elem.setAttribute("id", "editbox");
117
language = language_from_mime(current_file.type);
119
// Assume plaintext if no type can be determined.
120
language = language ? language : "text";
121
document.getElementById("highlighting_select").value = language;
123
txt_elem.className = "codepress autocomplete-off " + language;
124
81
txt_elem.setAttribute("onchange", "edit_text()");
125
82
/* TODO: Make CSS height: 100% work */
126
83
txt_elem.setAttribute("rows", "35");
129
window.onbeforeunload = confirm_beforeunload;
131
/* And set a callback so we know that the editor iframe is loaded so we
132
* can set a callback so we know when to enable the save button.
133
* We also take this opportunity to disable the save button, if
134
* the browser is likely to reenable it as needed. */
135
editbox.onload = initialise_codepress
138
function language_from_mime(mime)
140
return {'text/x-python': 'python',
141
'application/x-javascript': 'javascript',
142
'application/javascript': 'javascript',
144
'text/plain': 'text',
146
'application/xml': 'html',
147
'application/xhtml+xml': 'html'}[mime];
85
/* Load EditArea into the editbox */
89
toolbar: "search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, highlight, |, help",
90
start_highlight: true,
93
replace_tab_by_spaces: 4,
94
change_callback: "edit_text"