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

« back to all changes in this revision

Viewing changes to ivle/webapp/tutorial/templates/exercise_edit.html

  • Committer: William Grant
  • Date: 2009-06-25 11:38:03 UTC
  • mfrom: (1099.7.41 exercise-ui)
  • Revision ID: grantw@unimelb.edu.au-20090625113803-dcezngl2rxh0tshh
Merge exercise-editor-makeover. The exercise editor has been made over.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
<html xmlns="http://www.w3.org/1999/xhtml"
2
 
      xmlns:py="http://genshi.edgewall.org/">
 
2
      xmlns:py="http://genshi.edgewall.org/"
 
3
      xmlns:iw="http://www.ivle.org/2009/widgets">
3
4
  <head>
4
5
    <title>Edit - ${exercise.name}</title>
5
6
    <!-- These let the javascript know which worksheet is open -->
8
9
    </script>
9
10
  </head>
10
11
  <body>
 
12
    <!--! iw:textarea: A textarea widget wrapper.
 
13
          Generates a textarea in a div with a label. Define iw_prefix earlier
 
14
          to automatically give a prefix to the name. -->
 
15
    <div py:match="iw:textarea" py:with="name=((iw_prefix + '_') or '') + str(select('@name'))">
 
16
      <label for="${name}">${select('@desc')}:</label>
 
17
      <br py:if="defined('iw_label_linebreak') and iw_label_linebreak" />
 
18
      <textarea id="${name}" cols="${select('@cols')}" rows="${select('@rows')}">${select('*|text()')}</textarea>
 
19
    </div>
 
20
 
 
21
    <div py:match="iw:text" py:with="name=((iw_prefix + '_') or '') + str(select('@name'))">
 
22
      <label for="${name}">${select('@desc')}:</label>
 
23
      <br py:if="defined('iw_label_linebreak') and iw_label_linebreak" />
 
24
      <input type="text" id="${name}" value="${select('*|text()')}" />
 
25
    </div>
 
26
 
 
27
    <a py:match="iw:delete" href="javascript:${select('@action')}"><img title="Delete" alt="Delete" src="${mediapath}cross.png"/></a>
 
28
 
11
29
    <h1>Edit Exercise - ${exercise.id}</h1>
12
30
    <div id="ivle_padding">
13
31
      <h3>Exercise Values:</h3>
14
 
      <label for="exercise_id">Exercise Identifier:</label>
15
 
      <input class="textinput" type="text" id="exercise_id" value="${exercise.id}" title="Exercise Identifier" />
16
 
      <br />
17
 
      <label for="exercise_name">Exercise Name:</label>
18
 
      <input class="textinput" type='text' id='exercise_name' value="${exercise.name}" title="Exercise Name" />
19
 
      <br />
20
 
      <label for="exercise_num_rows">Number of Rows</label>
21
 
      <input size="5" type="text" id="exercise_num_rows" value="${exercise.num_rows}" title="Number of Rows" />
22
 
      <br />
23
 
      <label for="exercise_desc">Exercise Description (in RST):</label><br />
24
 
      <textarea cols="80" rows="10" id="exercise_desc" title="Exercise Description">${exercise.description}</textarea>
25
 
      <br />
26
 
      <label for="exercise_partial">Exercise Partial Solution (Python):</label><br />
27
 
      <textarea cols="80" rows="5" id="exercise_partial" title="Partial Solution">${exercise.partial}</textarea>
28
 
      <br />
29
 
      <label for="exercise_solution">Exercise Full Solution:</label><br />
30
 
      <textarea cols="80" rows="5" id="exercise_solution" title="Solution">${exercise.solution}</textarea>
31
 
      <br />
32
 
      <label for="exercise_include">Exercise Included Code:</label><br />
33
 
      <textarea cols="80" rows="5" id="exercise_include" title="Included Code">${exercise.include}</textarea>
34
 
      <br />
35
 
      <input type="submit" value="Save Changes" onclick="edit_exercise()" />
36
 
      <br />
37
 
      <h2>Exercise Test Suites</h2>
38
 
      <ul>
 
32
      <div py:with="iw_prefix='exercise'; iw_label_linebreak=True">
 
33
        <iw:text name="id" desc="Identifier">${exercise.id}</iw:text>
 
34
        <iw:text name="name" desc="Name">${exercise.name}</iw:text>
 
35
        <iw:text name="num_rows" desc="Number of Rows">${exercise.num_rows}</iw:text>
 
36
        <iw:textarea name="desc" desc="Description (RST)" cols="80" rows="10">${exercise.description}</iw:textarea>
 
37
        <iw:textarea name="solution" desc="Solution" cols="80" rows="5">${exercise.solution}</iw:textarea>
 
38
        <iw:textarea name="partial" desc="Partial Solution" cols="80" rows="5">${exercise.partial}</iw:textarea>
 
39
        <iw:textarea name="include" desc="Included Code" cols="80" rows="5">${exercise.include}</iw:textarea>
 
40
        <input type="button" value="Save" onclick="edit_exercise()" />
 
41
      </div>
 
42
 
 
43
      <ul class="test_suites">
39
44
        <py:for each="test_suite in exercise.test_suites">
40
45
          <li>
41
 
            <h3><a id="suite_header_${test_suite.suiteid}" onclick="tog('suite_data_${test_suite.suiteid}')">Suite ${test_suite.seq_no + 1} - ${test_suite.description}</a> <a onclick="delete_suite('${test_suite.suiteid}')"><img src="${mediapath}cross.png"/></a></h3>
 
46
            <h3>
 
47
              <a id="suite_header_${test_suite.suiteid}"
 
48
                 onclick="tog('suite_data_${test_suite.suiteid}')">Suite ${test_suite.seq_no + 1}: &ldquo;${test_suite.description}&rdquo;</a>
 
49
              <iw:delete action="delete_suite('${test_suite.suiteid}')" />
 
50
            </h3>
42
51
            
43
52
            <div class="testsuite" id="suite_data_${test_suite.suiteid}">
44
 
              <div class="test_suite_vals">
45
 
                <div>
46
 
                  <label for="test_suite_description_${test_suite.suiteid}">Description:</label> <textarea id="test_suite_description_${test_suite.suiteid}" cols="80" rows="1">${test_suite.description}</textarea>
47
 
                </div>
48
 
                <div>
49
 
                  <label for="test_suite_function_${test_suite.suiteid}">Function:</label> <textarea id="test_suite_function_${test_suite.suiteid}" title="Suite Function" cols="80" rows="1">${test_suite.function}</textarea>
50
 
                </div>
51
 
                <div>
52
 
                  <label for="test_suite_stdin_${test_suite.suiteid}">Stdin:</label> <textarea id="test_suite_stdin_${test_suite.suiteid}" title="Suite Stdin" cols="80" rows="4">${test_suite.stdin}</textarea>
53
 
                </div>
54
 
                <br />
55
 
                <input type="submit" name="Save Suite" value="Save Suite" onclick="edit_suite('${test_suite.suiteid}')" />
 
53
              <div class="test_suite_vals"
 
54
                   py:with="iw_prefix='test_suite_%d' % test_suite.suiteid">
 
55
                <iw:textarea name="description" desc="Description" cols="80" rows="1">${test_suite.description}</iw:textarea>
 
56
                <iw:textarea name="function" desc="Function" cols="80" rows="1">${test_suite.function}</iw:textarea>
 
57
                <iw:textarea name="stdin" desc="Stdin" cols="80" rows="4">${test_suite.stdin}</iw:textarea>
 
58
                <input type="button" value="Save Suite" onclick="edit_suite('${test_suite.suiteid}')" />
56
59
              </div>
57
 
              <br />
58
60
          
59
 
              <a id='variables_header_${test_suite.suiteid}' onclick="tog('variables_${test_suite.suiteid}')"><h4>Suite ${test_suite.seq_no + 1} - Variables</h4></a>
60
 
        
 
61
              <h4>Variables</h4>
61
62
                <div class="test_variables" id="variables_${test_suite.suiteid}">
62
 
                  <py:for each="variable in test_suite.variables">
63
 
                    <span>
64
 
                      <a onclick="delete_var('${variable.varid}', '${test_suite.suiteid}')"><img src="${mediapath}cross.png"/></a>
 
63
                  <ul>
 
64
                    <li py:for="variable in test_suite.variables">
 
65
                      <iw:delete action="delete_var('${variable.varid}', '${test_suite.suiteid}')" />
65
66
                      <label for="var_type_${variable.varid}">Type:</label>
66
67
                      <select name="Variable Type" id="var_type_${variable.varid}">
67
68
                        <py:for each="var_type in var_types">
75
76
                      <input type="text" id="var_val_${variable.varid}" value="${variable.var_value}"/>
76
77
                      <label for="var_argno_${variable.varid}">Arg Num:</label>
77
78
                      <input size="5" type="text" id="var_argno_${variable.varid}" value="${variable.arg_no}" />
78
 
                      <input type="submit" value="Save" onclick="edit_var('${variable.varid}', '${test_suite.suiteid}')" />
79
 
                    </span>
80
 
                    <br />          
81
 
                  </py:for>
82
 
                  <a onclick="tog('add_variable_${test_suite.suiteid}')">Add A New Variable</a>
 
79
                      <input type="button" value="Save Variable" onclick="edit_var('${variable.varid}', '${test_suite.suiteid}')" />
 
80
                    </li>
 
81
                  </ul>
 
82
                  <a onclick="tog('add_variable_${test_suite.suiteid}')">New variable</a>
83
83
                  <div class="add_variable" id="add_variable_${test_suite.suiteid}">
84
84
                    <label for="new_var_type_${test_suite.suiteid}">Type:</label>
85
85
                    <select name="Variable Type" id="new_var_type_${test_suite.suiteid}">
93
93
                    <input type="text" id="new_var_val_${test_suite.suiteid}" />
94
94
                    <label for="new_var_argno_${test_suite.suiteid}">Arg Num:</label>
95
95
                    <input size="5" type="text" id="new_var_argno_${test_suite.suiteid}" />
96
 
                    <input type="submit" value="Add" onclick="add_var('${test_suite.suiteid}')" />
 
96
                    <input type="button" value="Add Variable" onclick="add_var('${test_suite.suiteid}')" />
97
97
                  </div>
98
98
                </div>
99
 
              <a onclick="tog('test_cases_${test_suite.suiteid}')" id="cases_header_${test_suite.suiteid}"><h4>Suite ${test_suite.seq_no + 1} - Test Cases</h4></a>
100
99
 
101
100
              <div class="test_cases" id="test_cases_${test_suite.suiteid}">    
102
101
                <ul>
103
102
                  <py:for each="test_case in test_suite.test_cases">
104
103
                    <li>
105
 
                      <h5><a onclick="tog('test_case_${test_case.testid}_${test_suite.suiteid}')" id="case_header_${test_case.testid}">Test Case ${test_case.seq_no + 1}</a> <a onclick="delete_testcase('${test_case.testid}','${test_suite.suiteid}')"><img src="${mediapath}cross.png"/></a></h5>
106
 
                      <div class="test_case" id="test_case_${test_case.testid}_${test_suite.suiteid}">
107
 
                        <label for="test_case_pass_${test_case.testid}_${test_suite.suiteid}">Pass Message:</label>
108
 
                        <input class="textinput" type="text" id="test_case_pass_${test_case.testid}_${test_suite.suiteid}" value="${test_case.passmsg}" />
109
 
                        <br />
110
 
                        <label for="test_case_fail_${test_case.testid}_${test_suite.suiteid}">Fail Message:</label>
111
 
                        <input class="textinput" type="text" id="test_case_fail_${test_case.testid}_${test_suite.suiteid}" value="${test_case.failmsg}" />
112
 
                        <br />
113
 
                        <label for="test_case_default_${test_case.test_default}_${test_suite.suiteid}">Default Mode:</label>
114
 
                        <input class="textinput" type="text" id="test_case_default_${test_case.test_default}_${test_suite.suiteid}" value="${test_case.test_default}" />
115
 
                        <br />
116
 
                        <input type="submit" onclick="edit_test_case('${test_case.testid}','${test_suite.suiteid}')" value="Save Case" />
117
 
                        <br />
 
104
                      <h5>
 
105
                        <a onclick="tog('test_case_${test_case.testid}_${test_suite.suiteid}')"
 
106
                           id="case_header_${test_case.testid}">Test Case ${test_case.seq_no + 1}: &ldquo;${test_case.passmsg}&rdquo;</a>
 
107
                        <iw:delete action="delete_testcase('${test_case.testid}','${test_suite.suiteid}')" />
 
108
                      </h5>
 
109
                      <div py:with="iw_prefix='test_case_%d_%d' % (test_case.testid, test_suite.suiteid)"
 
110
                           class="test_case" id="${iw_prefix}">
 
111
                        <iw:text name="pass" desc="Pass Message">${test_case.passmsg}</iw:text>
 
112
                        <iw:text name="fail" desc="Fail Message">${test_case.failmsg}</iw:text>
 
113
                        <iw:text name="default" desc="Default Mode">${test_case.test_default}</iw:text>
 
114
                        <input type="button" onclick="edit_test_case('${test_case.testid}','${test_suite.suiteid}')" value="Save Case" />
 
115
 
118
116
                        <h5>Test Case Parts</h5>
119
 
                        <div class="disabled_test_case_parts" id="test_case_parts_${test_case.testid}_${test_suite.suiteid}">
120
 
                          <py:for each="test_part in test_case.parts">
121
 
                            <a onclick="delete_testpart('${test_part.partid}','${test_case.testid}','${test_suite.suiteid}')"><img src="${mediapath}cross.png"/></a>
122
 
                            <label for="test_part_part_type_${test_part.partid}">Part Type:</label>
123
 
                            <select name="Part Type" id="test_part_part_type_${test_part.partid}">
 
117
                        <ul class="test_case_parts" id="test_case_parts_${test_case.testid}_${test_suite.suiteid}">
 
118
                          <li py:for="test_part in test_case.parts"
 
119
                              py:with="iw_prefix='test_part_%d' % test_part.partid">
 
120
                            <label for="test_part_${test_part.partid}_part_type">Part Type:</label>
 
121
                            <select name="Part Type" id="test_part_${test_part.partid}_part_type">
124
122
                              <py:for each="part_type in part_types">
125
123
                                <option py:if="part_type==test_part.part_type" selected="selected" value="${part_type}">${part_type}</option>
126
124
                                <option py:if="part_type!=test_part.part_type" value="${part_type}">${part_type}</option>
127
125
                              </py:for>
128
126
                            </select>
129
 
                            <label for="">Test Type</label>
130
 
                            <select name="Test Type" id="test_part_test_type_${test_part.partid}">
 
127
                            <label for="test_part_${test_part.partid}_test_type">Test Type</label>
 
128
                            <select name="Test Type" id="test_part_${test_part.partid}_test_type">
131
129
                              <py:for each="test_type in test_types">
132
130
                                <option py:if="test_type==test_part.test_type" selected="selected" value="${test_type}">${test_type}</option>
133
131
                                <option py:if="test_type!=test_part.test_type" value="${test_type}">${test_type}</option>
134
132
                              </py:for>
135
133
                            </select>
136
 
                            <br />
137
 
                            <label for="test_part_data_${test_part.partid}">Test:</label><br />
138
 
                            <textarea id="test_part_data_${test_part.partid}" rows="2" cols="80">${test_part.data}</textarea>
139
 
                            <br />
140
 
                            <label for="test_part_file_${test_part.partid}">Filename:</label>
141
 
                            <input type="text" id="test_part_file_${test_part.partid}" value="${test_part.filename}" />
142
 
                            <br />
143
 
                            <input type="submit" value="Save Part" onclick="edit_test_part('${test_part.partid}', '${test_case.testid}', ${test_suite.suiteid})"/>
144
 
                            <br />
145
 
                          </py:for>
146
 
                        </div>
147
 
                        <a onclick="tog('new_test_part_${test_case.testid}')">Add a New part</a>
148
 
                        <div class="add_new_part" id="new_test_part_${test_case.testid}">
149
 
                            <label for="new_test_part_part_type_${test_case.testid}">Part Type:</label>
150
 
                            <select name="Part Type" id="new_test_part_part_type_${test_case.testid}">
151
 
                              <py:for each="part_type in part_types">
152
 
                                <option value="${part_type}">${part_type}</option>
153
 
                              </py:for>
154
 
                            </select>
155
 
                            <br />
156
 
                            <label>Test Type:</label>
157
 
                            <select name="Test Type" id="new_test_part_test_type_${test_case.testid}">
158
 
                              <py:for each="test_type in test_types">
159
 
                                <option value="${test_type}">${test_type}</option>
160
 
                              </py:for>
161
 
                            </select>
162
 
                            <br />
163
 
                            <label>Test:</label>
164
 
                            <textarea id="new_test_part_data_${test_case.testid}" rows="2" cols="80"></textarea>
165
 
                            <br />
166
 
                            <label>Filename:</label>
167
 
                            <input type="text" id="new_test_part_file_${test_case.testid}"/>
168
 
                            <br />
169
 
                            <input type="submit" value="Add Part" onclick="add_test_part('${test_case.testid}', '${test_suite.suiteid}')" id="new_test_part_save_${test_case.testid}" />
170
 
                        </div>
 
134
                            <iw:delete action="delete_testpart('${test_part.partid}','${test_case.testid}','${test_suite.suiteid}')" />
 
135
                            <iw:textarea name="data" desc="Test" rows="2" cols="80">${test_part.data}</iw:textarea>
 
136
                            <iw:text name="file" desc="Filename">${test_part.filename}</iw:text>
 
137
                            <input type="button" value="Save Part" onclick="edit_test_part('${test_part.partid}', '${test_case.testid}', ${test_suite.suiteid})" />
 
138
                          </li>
 
139
                          <li py:with="iw_prefix='test_part_new'">
 
140
                            <a onclick="tog('new_test_part_${test_case.testid}')">New test case part</a>
 
141
                            <div class="add_new_part" id="new_test_part_${test_case.testid}">
 
142
                              <label for="test_part_new_part_type_${test_case.testid}">Part Type:</label>
 
143
                              <select name="Part Type" id="test_part_new_part_type_${test_case.testid}">
 
144
                                <py:for each="part_type in part_types">
 
145
                                  <option value="${part_type}">${part_type}</option>
 
146
                                </py:for>
 
147
                              </select>
 
148
                              <label for="test_part_new_test_type_${test_case.testid}">Test Type:</label>
 
149
                              <select name="Test Type" id="test_part_new_test_type_${test_case.testid}">
 
150
                                <py:for each="test_type in test_types">
 
151
                                  <option value="${test_type}">${test_type}</option>
 
152
                                </py:for>
 
153
                              </select>
 
154
                              <iw:textarea name="data" desc="Test" rows="2" cols="80" />
 
155
                              <iw:text name="file" desc="Filename" />
 
156
                              <input type="button" value="Create Part" onclick="add_test_part('${test_case.testid}', '${test_suite.suiteid}')" id="new_test_part_save_${test_case.testid}" />
 
157
                            </div>
 
158
                          </li>
 
159
                        </ul>
171
160
                      </div>
172
161
                    </li>
173
162
                  </py:for>
174
 
                  <li>
175
 
                    <a onclick="tog('new_test_part_${test_suite.suiteid}')"><h5>Add A New Test Case</h5></a>
176
 
                    <div class="add_new_part" id="new_test_part_${test_suite.suiteid}">
177
 
                      <label for="new_test_case_pass_${test_suite.suiteid}">Pass Message:</label>
178
 
                      <input class="textinput" type="text" id="new_test_case_pass_${test_suite.suiteid}" />
179
 
                      <br />
180
 
                      <label for="new_test_case_fail_${test_suite.suiteid}">Fail Message:</label>
181
 
                      <input class="textinput" type="text" id="new_test_case_fail_${test_suite.suiteid}" />
182
 
                      <br />
183
 
                      <label for="new_test_case_default_${test_suite.suiteid}">Default Mode:</label>
184
 
                      <input class="textinput" type="text" value="ignore" id="new_test_case_default_${test_suite.suiteid}" />
185
 
                      <br />
186
 
                      <input type="submit" value="Add Case" onclick="add_test_case('${test_suite.suiteid}')" />
 
163
                  <li class="new">
 
164
                    <h5><a onclick="tog('new_test_case_${test_suite.suiteid}')">New test case</a></h5>
 
165
                    <div py:with="iw_prefix='new_test_case_%d' % (test_suite.suiteid)"
 
166
                         class="test_case" id="${iw_prefix}">
 
167
                        <iw:text name="pass" desc="Pass Message" />
 
168
                        <iw:text name="fail" desc="Fail Message" />
 
169
                        <iw:text name="default" desc="Default Mode" />
 
170
                        <input type="button" value="Create Case" onclick="add_test_case('${test_suite.suiteid}')" />
187
171
                    </div>
188
172
                  </li>
189
173
                </ul>
192
176
            </div>
193
177
          </li>
194
178
        </py:for>
 
179
        <li class="new">
 
180
          <h3><a onclick="tog('suite_data_new')">New test suite</a></h3>
 
181
          <div class="testsuite" id="suite_data_new">
 
182
          <div class="test_suite_vals" py:with="iw_prefix='new_test_suite'">
 
183
            <iw:textarea name="description" desc="Description" cols="80" rows="1" />
 
184
            <iw:textarea name="function" desc="Function" cols="80" rows="1" />
 
185
            <iw:textarea name="stdin" desc="Stdin" cols="80" rows="4" />
 
186
            <input type="button" value="Create Suite" onclick="add_suite()" />
 
187
          </div>
 
188
          </div>
 
189
        </li>
195
190
      </ul>
196
 
      <a onclick="tog('add_suite')">Add A New Test Suite</a>
197
 
      <br />
198
 
      <div id="add_suite" class="test_suite_vals">
199
 
        <div>
200
 
          <label for="new_test_suite_description">Description:</label> <textarea id="new_test_suite_description" cols="80" rows="1"></textarea>
201
 
        </div>
202
 
        <div>
203
 
          <label for="new_test_suite_function">Function:</label> <textarea id="new_test_suite_function" title="Suite Function" cols="80" rows="1"></textarea>
204
 
        </div>
205
 
        <div>
206
 
          <label for="new_test_suite_stdin">Stdin:</label> <textarea id="new_test_suite_stdin" title="Suite Stdin" cols="80" rows="4"></textarea>
207
 
        </div>
208
 
        <input type='submit' name='Submit' onclick='add_suite()' value="Add Suite" />
209
 
      </div>
210
191
      
211
192
      <p><a href="/+exercises">Back To Exercise Listing</a></p>
212
193