~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to www/media/browser/editor.js

  • Committer: mattgiuca
  • Date: 2008-01-29 05:42:01 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:325
tutorial: Added "run" button which submits the students code to the
tutorialservice for "unofficial" testing.
Currently tutorialservice:run just echoes the code back to the student.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
function disable_save_if_safe()
2
 
{
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)
6
 
    {
7
 
        var savebutton = document.getElementById("save_button");
8
 
        savebutton.disabled = true;
9
 
        window.onbeforeunload = null;
10
 
    }
11
 
}
12
 
 
13
 
function save_file(filename)
14
 
{
15
 
    data = editbox.getCode();
16
 
    /* Do NOT refresh the page contents (causes problems for editarea and is
17
 
     * unnecessary). */
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?"))
22
 
    {
23
 
        do_action("putfile", filename,
24
 
                  {"path":".", "data":data, "overwrite":"true"},
25
 
                  "multipart/form-data", true);
26
 
        disable_save_if_safe();
27
 
    }
28
 
}
29
 
 
30
 
function save_file_as(default_filename)
31
 
{
32
 
    filename = prompt("Path to save to:", default_filename);
33
 
    if (!filename) return;
34
 
 
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");
39
 
}
40
 
 
41
 
function save_file_as_callback(response)
42
 
{
43
 
    if (response.status == 404 || confirm("Are you sure you want to overwrite " + filename + "?"))
44
 
        save_file(filename);
45
 
}
46
 
 
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.';
 
1
saved_status = null;
 
2
 
 
3
function save_file()
 
4
{
 
5
    filename = document.getElementById("save_filename").value;
 
6
    data = editAreaLoader.getValue("editbox");
 
7
    do_action("putfile", filename, {"path":".", "data":data});
 
8
    saved_status.data = "Saved.";
50
9
}
51
10
 
52
11
function edit_text()
53
12
{
54
 
    var savebutton = document.getElementById("save_button");
55
 
    savebutton.disabled = false;
56
 
    window.onbeforeunload = confirm_beforeunload;
 
13
    saved_status.data = "Not saved.";
57
14
}
58
15
 
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.
 
16
/** Presents the text editor.
61
17
 */
62
 
function present_editorhead(elem, path, handler_type)
 
18
function handle_text(path, text, handler_type)
63
19
{
64
 
    var div = document.getElementById("actions2");
 
20
    /* Create a textarea with the text in it
 
21
     * (The makings of a primitive editor).
 
22
     */
 
23
 
 
24
    setmode(true);
 
25
    var files = document.getElementById("filesbody");
 
26
    var div = document.createElement("div");
 
27
    files.appendChild(div);
 
28
    div.setAttribute("class", "padding");
 
29
 
 
30
    /* Set up minimal interface */
 
31
    var p = dom_make_text_elem("p", "Path: ");
 
32
    var pathname = document.createElement("input");
 
33
    pathname.setAttribute("type", "text");
 
34
    pathname.setAttribute("size", "30");
 
35
    pathname.setAttribute("id", "save_filename");
 
36
    pathname.setAttribute("value", path);
 
37
    p.appendChild(pathname);
 
38
    var savebutton = document.createElement("input");
 
39
    savebutton.setAttribute("type", "button");
 
40
    savebutton.setAttribute("value", "Save");
 
41
    savebutton.setAttribute("onclick", "save_file()");
 
42
    p.appendChild(savebutton);
 
43
    var t = document.createTextNode(" ");
 
44
    p.appendChild(t);
 
45
    saved_status = document.createTextNode("Saved.");
 
46
    //p.appendChild(saved_status);
 
47
    div.appendChild(p);
65
48
 
66
49
    /* Print a warning message if this is not actually a text file.
67
50
     */
73
56
            "you save this file, you could corrupt it.");
74
57
        div.appendChild(warn);
75
58
    }
76
 
}
77
 
 
78
 
function highlighting_changed(select)
79
 
{
80
 
    editbox.edit(editbox.getCode(), select.value);
81
 
}
82
 
 
83
 
function initialise_codepress()
84
 
{
85
 
    editbox.addChangeHandler(edit_text);
86
 
    editbox.addSaveHandler(function() {document.getElementById("save_button").click()});
87
 
     
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.
91
 
     */
92
 
    if (!initialise_codepress.already)
93
 
    {
94
 
        disable_save_if_safe();
95
 
        initialise_codepress.already = true;
96
 
    }
97
 
}
98
 
 
99
 
/** Presents the text editor.
100
 
 */
101
 
function handle_text(path, text, handler_type)
102
 
{
103
 
    /* Create a textarea with the text in it
104
 
     * (The makings of a primitive editor).
105
 
     */
106
 
    var files = document.getElementById("filesbody");
107
 
    /* Put our UI at the top */
108
 
    present_editorhead(files, path, handler_type);
109
 
 
110
 
    var div = document.createElement("div");
111
 
    div.style.height = '100%';
112
 
    files.appendChild(div);
113
59
    var txt_elem = dom_make_text_elem("textarea",
114
60
        text.toString())
115
61
    div.appendChild(txt_elem);
116
62
    txt_elem.setAttribute("id", "editbox");
117
 
    language = language_from_mime(current_file.type);
118
 
 
119
 
    // Assume plaintext if no type can be determined.
120
 
    language = language ? language : "text";
121
 
    document.getElementById("highlighting_select").value = language;
122
 
 
123
 
    txt_elem.className = "codepress autocomplete-off " + language;
124
63
    txt_elem.setAttribute("onchange", "edit_text()");
125
64
    /* TODO: Make CSS height: 100% work */
126
65
    txt_elem.setAttribute("rows", "35");
127
 
    CodePress.run();
128
 
 
129
 
    window.onbeforeunload = confirm_beforeunload;
130
 
 
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
136
 
}
137
 
 
138
 
function language_from_mime(mime)
139
 
{
140
 
    return {'text/x-python': 'python',
141
 
            'application/x-javascript': 'javascript',
142
 
            'application/javascript': 'javascript',
143
 
            'text/css': 'css',
144
 
            'text/plain': 'text',
145
 
            'text/html': 'html',
146
 
            'application/xml': 'html',
147
 
            'application/xhtml+xml': 'html'}[mime];
148
 
}
 
66
 
 
67
    /* Load EditArea into the editbox */
 
68
    editAreaLoader.init({
 
69
        id : "editbox",
 
70
        syntax: "python",
 
71
        start_highlight: true
 
72
    });
 
73
}
 
74