source: trunk/skins/lemill/widget_exercise.pt @ 2278

Revision 2278, 25.0 KB checked in by gabor, 12 years ago (diff)

fixed #1665 spent 10m

Line 
1<html xmlns="http://www.w3.org/1999/xhtml"
2      xmlns:tal="http://xml.zope.org/namespaces/tal"
3      xmlns:metal="http://xml.zope.org/namespaces/metal"
4      xmlns:i18n="http://xml.zope.org/namespaces/i18n"
5      i18n:domain="lemill">
6
7  <head><title></title></head>
8
9  <body>
10
11<!-- Main view macro -->
12
13<metal:view_macro define-macro="view" tal:define="value accessor"> 
14<form method="post" action="sendAnswers" tal:attributes="action python:'%s/sendAnswers' % here_url">
15    <tal:chapters repeat="chaptertuple value">           
16        <tal:defs tal:define="chapter python:chaptertuple[0];
17        type python:chaptertuple[1];
18        index repeat/chaptertuple/index;">
19        <div tal:condition="python:type=='text_block'" tal:omit-tag="">
20            <metal:view_text_block use-macro="here/widget_chapter/macros/view_text_block" />
21        </div>
22        <div tal:condition="python:type=='media_piece'" tal:omit-tag="">
23            <metal:view_text_block use-macro="here/widget_chapter/macros/view_media_piece" />
24        </div>
25        <div tal:condition="python:type=='guidelines'" tal:omit-tag="">
26            <metal:view_text_block use-macro="here/widget_exercise/macros/view_guidelines" />
27        </div>
28        <div tal:condition="python:type=='multiple_choices'" tal:omit-tag="">
29            <metal:view_text_block use-macro="here/widget_exercise/macros/view_multiple_choices" />
30        </div>
31        <div tal:condition="python:type=='fill_in_the_blanks'" tal:omit-tag="">
32            <metal:view_text_block use-macro="here/widget_exercise/macros/view_fill_in_the_blanks" />
33        </div>
34        <div tal:condition="python:type=='open_ended'" tal:omit-tag="">
35                        <metal:view_text_block use-macro="here/widget_exercise/macros/view_open_ended" />
36        </div>
37        <div class="visualClear" style="height:20px">&nbsp;</div>
38        </tal:defs>
39    </tal:chapters>
40    <fieldset class="visualNoPrint">
41        <div class="visualClear" style="height:10px">&nbsp;</div>
42            <label for="your_name"><tal:block i18n:translate="label_your_name">Your name</tal:block></label>
43            <div class="formHelp" i18n:translate="desc_exercise_your_name">If you're sending exercise to teacher, enter your name so that the teacher knows who completed the exercise.</div>       
44            <p>
45            <input type="text" value="" id="your_name" name="your_name" tal:attributes="tabindex tabindex/next"/>
46            </p>
47
48        <div class="visualClear" style="height:10px">&nbsp;</div>
49            <label for="students_email"><tal:block i18n:translate="label_your_email">Your e-mail</tal:block>
50                <span class="fieldRequired" title="Required"
51                i18n:attributes="title title_required;"
52                i18n:translate="label_required">(Required)</span>
53            </label>
54            <div class="formHelp" i18n:translate="desc_exercise_your_email">Enter your e-mail to get automatic feedback to your answers.</div>       
55            <p>
56            <input type="text" value="" id="students_email" name="students_email" tal:attributes="tabindex tabindex/next"/>
57            </p>
58        <div class="visualClear" style="height:10px">&nbsp;</div>
59
60            <label for="teachers_email"><tal:block i18n:translate="label_teachers_email">Teacher's e-mail</tal:block></label>
61            <div class="formHelp" i18n:translate="desc_exercise_teachers_email">Enter your teacher's e-mail to send your answers for assessment.</div>       
62            <p>
63            <input type="text" value="" id="teachers_email" name="teachers_email" tal:attributes="tabindex tabindex/next"/>
64            </p>
65        <div class="visualClear" style="height:10px">&nbsp;</div>
66
67            <label for="captcha"><tal:block i18n:translate="label_humanity_test">Humanity test</tal:block></label>
68            <div class="formHelp" i18n:domain="lemill" i18n:translate="help_humanity_captcha_test">
69                Please type the word you see in the image into this field. This is important to make sure that you are a human and not a robot that will spam LeMill.
70            </div>
71    <p><img src="lemill_tool/generateCaptcha" /></p>
72            <p>
73            <input type="text" value="" id="captcha" name="captcha" tal:attributes="tabindex tabindex/next"/>
74            </p>
75        <div class="visualClear" style="height:10px">&nbsp;</div>
76
77            <p>
78        <input class="context"
79            tabindex=""
80            type="submit"
81            name="submit"
82            value="Send e-mail"
83            i18n:attributes="value button_send_email"
84            tal:attributes="tabindex tabindex/next"
85            />
86            </p>
87   
88    </fieldset>
89    </form>
90</metal:view_macro>
91
92<!-- view macros -->
93
94<metal:view_guidelines define-macro="view_guidelines">
95    <div tal:replace="structure chapter" />
96</metal:view_guidelines>
97   
98<metal:view_multiple_choices define-macro="view_multiple_choices">
99    <table tal:define="question python:chapter[0]; answers python:context.getAllAnswers(chapter)" width="60%" >
100        <tr>
101        <td valign="middle" align="left">
102            <p tal:content="structure question">PLACEHOLDER</p>
103        </td>
104        </tr>
105        <tr>
106        <td>
107            <span tal:repeat="answer answers" tal:omit-tag="">
108            <p>
109                <input type="checkbox" value=""
110                tal:attributes="id python:'exercise_%s_checkbox_%s' % (index,answer[0]);
111                name python:'exercise_%s_checkbox_%s' % (index,answer[0]);
112                value python:answer[0]" />
113                <span tal:replace="structure python:answer[1]"></span>
114            </p>
115            </span>
116        </td>                   
117        </tr>
118    </table>
119</metal:view_multiple_choices>
120
121
122<metal:view_fill_in_the_blanks define-macro="view_fill_in_the_blanks">
123    <p tal:content="structure python:context.replace_blanks_with_input_tag(index,answers=False, readonly=False)">PLACEHOLDER</p>
124</metal:view_fill_in_the_blanks>
125
126<metal:view_open_ended define-macro="view_open_ended">
127    <p tal:content="structure chapter">PLACEHOLDER</p>
128    <textarea cols="40" rows="8" value=""
129    tal:attributes="id python:'exercise_%s_answer' % index;
130                    name python:'exercise_%s_answer' % index;
131                    tabindex tabindex/next;
132                    "></textarea>   
133</metal:view_open_ended>
134
135
136<!-- Main edit macro -->
137
138<metal:define define-macro="area_edit">
139  <tal:define
140      define="inputname fieldName;
141              edit_chapter request/edit | python:0;
142              edit_chapter python: int(edit_chapter);
143              translation translation | python:0;
144              chapter_count python:len(value);
145              text_edit python:True;
146              granularity python:1;
147              ">
148    <input type="hidden" name="chapter_count" id="chapter_count" value="1"
149    tal:attributes="value chapter_count; name python:'%s_count' % fieldName; id python:'%s_count' % fieldName"/>
150    <input type="hidden" name="chapter_edited" id="chapter_edited" value="0"
151     tal:attributes="value edit_chapter; name python:'%s_edited' % fieldName ;id python:'%s_edited' % fieldName "/>
152    <input type="hidden" name="chapter_last_edited" id="chapter_last_edited" value="0"
153     tal:attributes="value edit_chapter; name python:'%s_last_edited' % fieldName ;id python:'%s_last_edited' % fieldName "/>
154    <input type="hidden" name="chapter_deleted" id="chapter_deleted" value="-1"
155     tal:attributes="name python:'%s_deleted' % fieldName;id python:'%s_deleted' % fieldName"/>
156    <input type="hidden" name="chapter_uploaded" id="chapter_uploaded" value="-1"
157     tal:attributes="name python:'%s_uploaded' % fieldName;id python:'%s_uploaded' % fieldName"/>
158
159   <tal:chapters repeat="chaptertuple value">
160      <tal:definitions define="index repeat/chaptertuple/index;
161      start repeat/chaptertuple/start;
162      chapter python:chaptertuple[0];
163      type python:chaptertuple[1];
164      index python:int(index);
165      UID python:field.isUid(chapter);
166      cleaned_chapter python:field.getChapter(context, index)[0];
167       ">
168
169        <a name="#" tal:attributes="name index"> </a>
170
171       <fieldset>
172       
173    <tal:view-mode condition="python:index!=edit_chapter">
174
175        <tal:legend metal:use-macro="here/widget_exercise/macros/legend_view_buttons" />
176
177       <div tal:condition="python: type=='text_block'">
178            <metal:block use-macro="here/widget_chapter/macros/edit_view_text_block" />
179            <input type="hidden" tal:attributes="value chapter;
180                id python:'%s_%s' % (fieldName, index);
181                name python:'%s_%s' % (fieldName, index)"/>
182       </div>
183
184       <div tal:condition="python: type=='guidelines'">
185            <metal:block use-macro="here/widget_exercise/macros/edit_view_guidelines" />
186            <input type="hidden" tal:attributes="value chapter;
187                id python:'%s_%s' % (fieldName, index);
188                name python:'%s_%s' % (fieldName, index)"/>
189       </div>
190
191        <div tal:condition="python:type=='media_piece'">
192          <metal:block use-macro="here/widget_chapter/macros/edit_view_media_piece" />
193            <input type="hidden" tal:attributes="value chapter;
194                id python:'%s_%s' % (fieldName, index);
195                name python:'%s_%s' % (fieldName, index)"/>
196        </div>
197
198        <div tal:condition="python: type=='multiple_choices'">
199            <metal:block use-macro="here/widget_exercise/macros/edit_view_multiple_choices" />
200            <input type="hidden" tal:attributes="value python:chapter[0];
201                id python:'%s_%s_question' % (fieldName, index);
202                name python:'%s_%s_question' % (fieldName, index)"/>
203            <input type="hidden" tal:attributes="value python:'\n'.join(chapter[1]);
204                id python:'%s_%s_correct' % (fieldName, index);
205                name python:'%s_%s_correct' % (fieldName, index)"/>
206            <input type="hidden" tal:attributes="value python:'\n'.join(chapter[2]);
207                id python:'%s_%s_incorrect' % (fieldName, index);
208                name python:'%s_%s_incorrect' % (fieldName, index)"/>
209        </div>
210       
211        <div tal:condition="python: type=='fill_in_the_blanks'">
212            <metal:block use-macro="here/widget_exercise/macros/edit_view_fill_in_the_blanks" />
213            <input type="hidden" tal:attributes="value chapter;
214                id python:'%s_%s_blanks' % (fieldName, index);
215                name python:'%s_%s_blanks' % (fieldName, index)"/>
216        </div>
217             
218        <div tal:condition="python: type=='open_ended'">
219            <metal:block use-macro="here/widget_exercise/macros/edit_view_open_ended" />
220            <input type="hidden" tal:attributes="value chapter;
221                id python:'%s_%s_open' % (fieldName, index);
222                name python:'%s_%s_open' % (fieldName, index)"/>
223        </div>
224       
225    </tal:view-mode>
226       
227
228    <tal:edit-mode condition="python: index==edit_chapter">
229
230       <legend>
231            <input class="context"
232                tabindex=""
233                type="submit"
234                name="form.button.editChapter"
235                value="Save" i18n:domain="plone"
236                i18n:attributes="value label_save;"
237                tal:attributes="tabindex tabindex/next;
238                disabled python:test(isLocked, 'disabled', None);
239                onClick python:'''javascript:document.getElementById('%s_edited').value=%s''' % (fieldName, -1)"                    />
240       </legend>
241
242       <tal:guidelines tal:condition="python: type=='guidelines'">
243           <metal:block metal:use-macro="here/widget_exercise/macros/edit_guidelines" />
244       </tal:guidelines>           
245
246       <div tal:condition="python: type=='media_piece'">
247           <metal:block metal:use-macro="here/widget_chapter/macros/edit_media_piece" />
248       </div>
249
250       <tal:text_block tal:condition="python: type=='text_block'">
251           <metal:block metal:use-macro="here/widget_chapter/macros/edit_text_block" />
252       </tal:text_block>
253       
254        <tal:multiple_choices condition="python: type=='multiple_choices'">
255           <metal:block metal:use-macro="here/widget_exercise/macros/edit_multiple_choices" />
256        </tal:multiple_choices>
257
258        <tal:fill_in_the_blanks condition="python: type=='fill_in_the_blanks'">
259           <metal:block metal:use-macro="here/widget_exercise/macros/edit_fill_in_the_blanks" />
260        </tal:fill_in_the_blanks>
261
262        <tal:open_ended condition="python: type=='open_ended'">
263           <metal:block metal:use-macro="here/widget_exercise/macros/edit_open_ended" />
264        </tal:open_ended>
265        </tal:edit-mode>
266        <input type="hidden" tal:attributes="value type;
267            id python:'%s_%s_type' % (fieldName, index);
268            name python:'%s_%s_type' % (fieldName, index)"/>
269
270    </fieldset>
271  </tal:definitions>
272 </tal:chapters>
273
274   <tal:buttons condition="not:translation">
275       <input class="context"
276           tabindex=""
277           type="submit"
278           name="form.button.add_exercise_mediapiece"
279           value="Add media piece"
280           i18n:attributes="value label_add_media_piece;"
281           tal:attributes="tabindex tabindex/next"
282           />               
283       <input class="context"
284           tabindex=""
285           type="submit"
286           name="form.button.add_exercise_textarea"
287           value="Add text block"
288           i18n:attributes="value label_add_textarea;"
289           tal:attributes="tabindex tabindex/next"
290           />
291    <div>
292       <input class="context"
293           tabindex=""
294           type="submit"
295           name="form.button.add_open_ended"
296           value="Add open-ended question"
297           i18n:attributes="value label_add_open_ended_question;"
298           tal:attributes="tabindex tabindex/next"
299           />               
300       <input class="context"
301           tabindex=""
302           type="submit"
303           name="form.button.add_fill_in_the_blanks"
304           value="Add fill-in-the-blanks exercise"
305           i18n:attributes="value label_add_fill_in_the_blanks_exercise;"
306           tal:attributes="tabindex tabindex/next"
307           />
308       <input class="context"
309           tabindex=""
310           type="submit"
311           name="form.button.add_multiple_choice"
312           value="Add multiple choice question"
313           i18n:attributes="value label_add_multiple_choice_question;"
314           tal:attributes="tabindex tabindex/next"
315           />
316    </div>
317   </tal:buttons>
318  </tal:define>
319</metal:define>
320
321<metal:legend define-macro="legend_view_buttons">
322
323        <legend>
324        <input class="context"
325            tabindex=""
326            type="submit"
327            name="form.button.editChapter"
328            value="Edit" i18n:domain="plone"
329            i18n:attributes="value label_edit;"
330            tal:attributes="tabindex tabindex/next;
331            disabled python:test(isLocked, 'disabled', None);
332            onClick python:'''javascript:document.getElementById('%s_edited').value=%s''' % (fieldName, index)"                    />
333        <input class="context"
334            tabindex=""
335            type="submit"
336            name="form.button.moveChapterUp"
337            value="Move up" i18n:domain="lemill"
338            i18n:attributes="value label_move_up;"
339            tal:attributes="tabindex tabindex/next;
340            disabled python:test(isLocked or index &lt; granularity or index==1, 'disabled', None);
341            onClick python:'''javascript:document.getElementById('%s_deleted').value=%s''' % (fieldName, index)"
342            />
343        <input class="context"
344            tabindex=""
345            type="submit"
346            name="form.button.moveChapterDown"
347            value="Move down" i18n:domain="lemill"
348            i18n:attributes="value label_move_down;"
349            tal:attributes="tabindex tabindex/next;
350            disabled python:test(isLocked or index==len(value)-granularity or index==0, 'disabled', None);
351            onClick python:'''javascript:document.getElementById('%s_deleted').value=%s''' % (fieldName, index)"
352            />
353
354        <input class="context deleteButtonPosition"
355            tabindex=""
356            type="submit"
357            name="form.button.delChapter"
358            value="Delete" i18n:domain="plone"
359            i18n:attributes="value;"
360            tal:attributes="tabindex tabindex/next;
361            disabled python:test(isLocked or index==0, 'disabled', None);
362            onClick python:'''javascript:document.getElementById('%s_deleted').value=%s''' % (fieldName, index)"
363            />
364    </legend>
365
366</metal:legend>
367
368<!-- edit/view macros,  called from Main edit macros if chapter is not the one that is edited -->
369
370
371<metal:edit_view_guidelines define-macro="edit_view_guidelines">
372    <div tal:replace="structure cleaned_chapter" />
373</metal:edit_view_guidelines>
374
375
376<metal:edit_view_multiple_choices define-macro="edit_view_multiple_choices">
377     <label><tal:block i18n:translate="label_exercise_multiple_choice_question">Multiple choice question:</tal:block></label>
378    <table tal:define="question python:cleaned_chapter[0]; answers python:context.getAllAnswers(cleaned_chapter)" width="60%">
379       <tr>
380        <td valign="middle" align="left">
381         <p tal:content="structure question">PLACEHOLDER</p>
382        </td>
383        </tr>
384        <tr>
385        <td>
386     <span tal:repeat="answer answers" tal:omit-tag="">
387         <p>
388         <input type="checkbox" value=""
389             tal:attributes="id python:'%s_%s_%s' % (fieldName,index,answer[0]);
390             name python:'%s_%s_%s' % (fieldName,index,answer[0])" />
391         <span tal:content="structure python:answer[1]"></span>
392         </p>
393     </span>
394        </td>
395       </tr>
396    </table>
397</metal:edit_view_multiple_choices>
398
399<metal:edit_view_fill_in_the_blanks define-macro="edit_view_fill_in_the_blanks">
400     <label><tal:block i18n:translate="label_exercise_fill_in_the_blanks">Fill-in-the-blanks exercise:</tal:block></label>
401     <p tal:content="structure python:context.replace_blanks_with_input_tag(index,readonly=True)">PLACEHOLDER</p>
402</metal:edit_view_fill_in_the_blanks>
403
404<metal:edit_view_open_ended define-macro="edit_view_open_ended">
405     <label><tal:block i18n:translate="label_exercise_open_ended">Open-ended question:</tal:block></label>
406     <p tal:content="structure cleaned_chapter">PLACEHOLDER</p>
407     <textarea cols="40" rows="8" value="" disabled="1"></textarea>
408</metal:edit_view_open_ended>
409
410<!--- edit macros, called from Main edit macro for chapter that is open to editing -->
411
412<metal:edit_guidelines define-macro="edit_guidelines">
413 <label><tal:block i18n:translate="label_exercise_guidelines">Guidelines</tal:block></label>
414 <div class="formHelp" i18n:translate="desc_exercise_guidelines">Enter here guidelines for completing the exercise.</div>
415 <div class="translatedText"
416    tal:condition="translation">
417    <label i18n:translate="label_original_field">
418    Original
419            <span i18n:name="field" >:</span>
420    </label>
421    <div tal:define="transfield python:source.getField(fieldName);
422        transchapter python:transfield.getChapter(source, index)[0];"  class="text_to_translate">
423            <span tal:replace="structure transchapter"/>           
424    </div>
425 </div>
426 <textarea cols="40" rows="4"
427  tal:attributes="id python:'%s_%s' % (fieldName,index);
428      name python:'%s_%s' % (fieldName,index);
429      tabindex tabindex/next;" tal:content="chapter"></textarea>
430</metal:edit_guidelines>
431
432<metal:edit_multiple_choices define-macro="edit_multiple_choices">
433  <span tal:define="question python:chapter[0]; correct python:chapter[1]; incorrect python:chapter[2]" tal:omit-tag="">
434   <table>
435    <tr>
436     <td cellpadding="10">
437     <label><tal:block i18n:translate="label_exercise_multiple_choice_question">Multiple choice question:</tal:block></label>
438     <div class="translatedText"
439        tal:condition="translation">
440        <label i18n:translate="label_original_field">
441        Original
442                <span i18n:name="field" >:</span>
443        </label>
444        <div tal:define="transfield python:source.getField(fieldName);
445            transchapter python:transfield.getChapter(source, index)[0][0];"  class="text_to_translate">
446                <span tal:replace="structure transchapter"/>           
447        </div>
448     </div>
449     <textarea cols="30" rows="4"
450      tal:attributes="id python:'%s_%s_question' % (fieldName,index);
451          name python:'%s_%s_question' % (fieldName,index);
452          tabindex tabindex/next;" tal:content="question"></textarea>
453     </td>
454     <td>
455     <label><tal:block i18n:translate="label_exercise_correct_choices">Correct choices:</tal:block></label>
456     <div class="formHelp" i18n:translate="desc_exercise_correct_choices">Enter a list of correct choices, one for each line.</div>
457     <div class="translatedText"
458        tal:condition="translation">
459        <label i18n:translate="label_original_field">
460        Original
461                <span i18n:name="field" >:</span>
462        </label>
463        <div tal:define="transfield python:source.getField(fieldName);
464            transchapter python:transfield.getChapter(source, index)[0][1];"  class="text_to_translate">
465                <span tal:replace="structure transchapter"/>           
466        </div>
467     </div>
468     <textarea cols="15" rows="4"
469      tal:attributes="id python:'%s_%s_correct' % (fieldName,index);
470          name python:'%s_%s_correct' % (fieldName,index);
471          tabindex tabindex/next;" tal:content="python:'\n'.join(correct)"></textarea>
472     <br/>
473     <label><tal:block i18n:translate="label_exercise_incorrect_choices">Incorrect choices:</tal:block></label>
474     <div class="formHelp" i18n:translate="desc_exercise_incorrect_choices">Enter a list of incorrect choices, one for each line.</div>
475     <div class="translatedText"
476        tal:condition="translation">
477        <label i18n:translate="label_original_field">
478        Original
479                <span i18n:name="field" >:</span>
480        </label>
481        <div tal:define="transfield python:source.getField(fieldName);
482            transchapter python:transfield.getChapter(source, index)[0][2];"  class="text_to_translate">
483                <span tal:replace="structure transchapter"/>           
484        </div>
485     </div>
486     <textarea cols="15" rows="4"
487      tal:attributes="id python:'%s_%s_incorrect' % (fieldName,index);
488          name python:'%s_%s_incorrect' % (fieldName,index);
489          tabindex tabindex/next;" tal:content="python:'\n'.join(incorrect)"></textarea>
490     </td>
491    </tr>
492   </table>
493  </span>
494</metal:edit_multiple_choices>
495
496<metal:edit_fill_in_the_blanks define-macro="edit_fill_in_the_blanks">
497 <label><tal:block i18n:translate="label_exercise_fill_in_the_blanks">Fill-in-the-blanks exercise:</tal:block></label>
498 <div class="formHelp" i18n:translate="desc_exercise_fill_in_the_blanks">Write the correct answers inside braces like this: {answer}. The word will be replaced with an empty box. If there are more than one correct answer you can write multiple braces like this: The Eiffel tower is the most famous building of {Paris}{France}.</div>
499 <div class="translatedText"
500    tal:condition="translation">
501    <label i18n:translate="label_original_field">
502    Original
503            <span i18n:name="field" >:</span>
504    </label>
505    <div tal:define="transfield python:source.getField(fieldName);
506        transchapter python:transfield.getChapter(source, index)[0];"  class="text_to_translate">
507            <span tal:replace="structure transchapter"/>           
508    </div>
509 </div>
510 <textarea cols="40" rows="12"
511  tal:attributes="id python:'%s_%s_blanks' % (fieldName,index);
512      name python:'%s_%s_blanks' % (fieldName,index);
513      tabindex tabindex/next;" tal:content="chapter"></textarea>
514</metal:edit_fill_in_the_blanks>
515
516
517
518<metal:edit_open_ended define-macro="edit_open_ended">
519     <label><tal:block i18n:translate="label_exercise_open_ended">Open-ended question:</tal:block></label>
520     <div class="formHelp" i18n:translate="desc_exercise_open_ended">Enter here a question that requires free-form answer.</div>
521     <div class="translatedText"
522        tal:condition="translation">
523        <label i18n:translate="label_original_field">
524        Original
525                <span i18n:name="field" >:</span>
526        </label>
527        <div tal:define="transfield python:source.getField(fieldName);
528            transchapter python:transfield.getChapter(source, index)[0];"  class="text_to_translate">
529                <span tal:replace="structure transchapter"/>           
530        </div>
531     </div>
532     <textarea cols="40" rows="4"
533      tal:attributes="id python:'%s_%s_open' % (fieldName,index);
534          name python:'%s_%s_open' % (fieldName,index);
535          tabindex tabindex/next;" tal:content="chapter"></textarea>
536</metal:edit_open_ended>
537
538<!-- area format and other strange macros -->
539
540
541<metal:define define-macro="edit">
542   <metal:use use-macro="field_macro | here/field/macros/edit">
543    <metal:fill fill-slot="widget_body">
544      <metal:block use-macro="here/widget_exercise/macros/area_edit" />
545    </metal:fill>
546  </metal:use>
547</metal:define>
548
549<metal:define define-macro="search">
550  <metal:use use-macro="here/widgets/field/macros/edit">
551    <metal:fill fill-slot="widget_body">
552
553      <metal:block use-macro="here/widget_exercise/macros/area_edit" />
554
555    </metal:fill>
556  </metal:use>
557</metal:define>
558
559<metal:define define-macro="area_format">
560    <metal:use use-macro="here/widget_chapter/macros/area_format" />
561</metal:define>
562
563
564
565  </body>
566
567</html>
Note: See TracBrowser for help on using the repository browser.