source: trunk/skins/lemill/widget_chapter.pt @ 1358

Revision 1358, 19.5 KB checked in by pjotr, 13 years ago (diff)

Fixes #1136, still needs to be tested at least with PILOT materials

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    <!-- TextArea Widgets -->
12
13    <metal:view_macro define-macro="view" tal:define="value accessor">
14        <tal:chapters repeat="chapter value">           
15            <tal:defs tal:define="UID python:field.isUid(chapter);
16            index repeat/chapter/index;">
17            <div tal:condition="not:UID"                 
18            tal:content="structure chapter"></div>
19                <div tal:condition="UID" tal:omit-tag="">
20                <tal:inner_defs define="piece python:field.getObjectByUID(context, UID);">
21                <tal:we_got_piece condition="piece">
22                <tal:image condition="piece/isImage">
23                    <img src="" tal:define="pieceurl piece/image_large/absolute_url | python:'default_movieclip.png'"
24                    tal:attributes="src pieceurl; alt piece/Title | nothing" class="media_piece"/>
25                </tal:image>
26                <tal:audio condition="piece/isAudio">
27                    <div style="height:20px" class="visualClear">&nbsp;</div>
28                    <metal:audioplayer use-macro="here/macros_audioplayer/macros/audioplayer"/>
29                </tal:audio>
30                </tal:we_got_piece>
31                </tal:inner_defs>
32                </div>
33            </tal:defs>
34        </tal:chapters>
35    </metal:view_macro>
36
37
38    <metal:define define-macro="area_edit">
39      <tal:define
40          define="inputname fieldName;
41                  not_empty python: len(value[0]) or (len(value)>1);
42                  edit_chapter request/edit | python:-1;
43                  edit_chapter python: test(not_empty, int(edit_chapter), 0);
44                  translation translation | python:0;
45                  chapter_count python:len(value);
46                  text_edit python:True;
47                  engineer python:request.get('engineer');
48                  ">
49        <input type="hidden" name="chapter_count" id="chapter_count" value="1" tal:attributes="value chapter_count; name python:'%s_count' % fieldName; id python:'%s_count' % fieldName"/>
50        <input type="hidden" name="chapter_edited" id="chapter_edited" value="0" tal:attributes="value edit_chapter; name python:'%s_edited' % fieldName ;id python:'%s_edited' % fieldName "/>
51        <input type="hidden" name="chapter_deleted" id="chapter_deleted" value="-1" tal:attributes="name python:'%s_deleted' % fieldName;id python:'%s_deleted' % fieldName"/>
52        <input type="hidden" name="chapter_uploaded" id="chapter_uploaded" value="-1" tal:attributes="name python:'%s_uploaded' % fieldName;id python:'%s_uploaded' % fieldName"/>
53        <input type="hidden" name="translation" id="translation" value="0" tal:attributes="value translation"/>
54        <input tal:condition="not:engineer" type="hidden" name="insert_point" id="insert_point" value="-1" />
55
56       <tal:chapters repeat="chapter value">
57          <tal:definitions define="index repeat/chapter/index;
58          index python:int(index);
59          UID python:field.isUid(chapter);
60           ">       
61
62            <a name="#" tal:attributes="name index"></a>
63
64
65           <fieldset>
66           
67            <tal:view_mode condition="python:index!=edit_chapter">
68
69             <legend>
70                <input class="context"
71                    tabindex=""
72                    type="submit"
73                    name="form.button.editChapter"
74                    value="Edit" i18n:domain="plone"
75                    i18n:attributes="value label_edit;"
76                    tal:attributes="tabindex tabindex/next;
77                    disabled python:test(isLocked, 'disabled', None);
78                    onClick python:'''javascript:document.getElementById('%s_edited').value=%s''' % (fieldName, index)"                    />
79                <input class="context"
80                    tabindex=""
81                    type="submit"
82                    name="form.button.moveChapterUp"
83                    value="Move Up" i18n:domain="lemill"
84                    i18n:attributes="value label_move_up;"
85                    tal:attributes="tabindex tabindex/next;
86                    disabled python:test(isLocked or not index!=0, 'disabled', None);
87                    onClick python:'''javascript:document.getElementById('%s_deleted').value=%s''' % (fieldName, index)"
88                    />
89                <input class="context"
90                    tabindex=""
91                    type="submit"
92                    name="form.button.moveChapterDown"
93                    value="Move Down" i18n:domain="lemill"
94                    i18n:attributes="value label_move_down;"
95                    tal:attributes="tabindex tabindex/next;
96                    disabled python:test(isLocked or not index!=len(value)-1, 'disabled', None);
97                    onClick python:'''javascript:document.getElementById('%s_deleted').value=%s''' % (fieldName, index)"
98                    />
99
100                <input class="context deleteButtonPosition"
101                    tabindex=""
102                    type="submit"
103                    name="form.button.delChapter"
104                    value="Delete" i18n:domain="plone"
105                    tal:condition="not:UID"
106                    i18n:attributes="value;"
107                    tal:attributes="tabindex tabindex/next;
108                    disabled python:test(isLocked, 'disabled', None);
109                    onClick python:'''javascript:document.getElementById('%s_deleted').value=%s''' % (fieldName, index)"
110                    />
111                <input class="context deleteButtonPosition"
112                    tabindex=""
113                    type="submit"
114                    name="form.button.delPiece"
115                    value="Delete" i18n:domain="plone"
116                    tal:condition="UID"
117                    i18n:attributes="value;"
118                    tal:attributes="tabindex tabindex/next;
119                    disabled python:test(isLocked, 'disabled', None);
120                    onClick python:'''javascript:document.getElementById('%s_deleted').value=%s''' % (fieldName, index)"
121                    />
122            </legend>
123           
124           <div tal:condition="python: not UID and len(chapter)>0" tal:replace="structure chapter"/>
125
126           <div tal:condition="UID" tal:omit-tag="">
127            <tal:defs define="piece python:field.getObjectByUID(context,UID);">
128            <tal:we_got_piece condition="piece">
129                <tal:audio tal:condition="piece/isAudio">
130                    <div style="height:20px" class="visualClear">&nbsp;</div>
131                   <metal:block metal:use-macro="here/macros_audioplayer/macros/audioplayer" />
132                    <div style="height:20px" class="visualClear">&nbsp;</div>
133                </tal:audio>
134
135                <div tal:condition="piece/isImage">
136                 <img src="" tal:define="pieceurl piece/image_large/absolute_url;"
137                   tal:attributes="src pieceurl" />
138                </div>
139            </tal:we_got_piece>
140            </tal:defs>
141           </div>
142           
143           <input type="hidden" tal:attributes="id python:'%s_%s' % (fieldName,index);
144                                               name python:'%s_%s' % (fieldName,index);
145                                               value chapter" />
146
147          </tal:view_mode>
148          <tal:edit_mode condition="python:index==edit_chapter">
149           <a name="edit" />
150           <legend>
151                <input class="context"
152                    tabindex=""
153                    type="submit"
154                    name="form.button.editChapter"
155                    value="Save" i18n:domain="plone"
156                    i18n:attributes="value label_edit;"
157                    tal:attributes="tabindex tabindex/next;
158                    disabled python:test(isLocked, 'disabled', None);
159                    onClick python:'''javascript:document.getElementById('%s_edited').value=%s''' % (fieldName, -1)"                    />
160           </legend>
161           <div tal:condition="not:UID">
162              <div class="translatedText"
163                  tal:condition="translation">
164                  <label i18n:translate="label_original_field">
165                  Original
166                         <span i18n:name="field" >:</span>
167                  </label>
168                  <div tal:define="transfield python:source.getField(fieldName);
169                      transchapter python:transfield.getChapter(context, index);"  class="text_to_translate">
170                          <span tal:replace="structure python:transchapter"/>           
171                  </div>
172              </div>
173            <tal:def define="inputvalue chapter;
174                fieldName python:'%s_%s' % (fieldName, index);
175                inputname fieldName;
176                height python:'260px';
177                rows python:18">     
178                   <metal:block metal:use-macro="here/wysiwyg_support/macros/wysiwygEditorBox" />
179            </tal:def>
180           </div>
181           <div tal:condition="UID">
182
183               <input type="hidden" tal:attributes="id python:'%s_%s' % (fieldName,index);
184                                                   name python:'%s_%s' % (fieldName,index);
185                                                   value chapter" />
186               <metal:block metal:use-macro="here/widget_chapter/macros/piece_edit" />
187           </div>
188           
189           <input type="hidden"
190                 name=""
191                 value="html"
192                 tal:attributes="name python:'%s_%s_text_format' % (fieldName, index);" />
193
194          </tal:edit_mode>
195           </fieldset>
196          </tal:definitions>
197       </tal:chapters>
198
199       <tal:buttons condition="not:translation">
200           <input class="context"
201               tabindex=""
202               type="submit"
203               name="form.button.add_mediapieces"
204               value="Add media piece"
205               i18n:attributes="value label_add_media_piece;"
206               tal:attributes="tabindex tabindex/next"
207               />               
208           <input class="context"
209               tabindex=""
210               type="submit"
211               name="form.button.add_textareas"
212               value="Add text block"
213               i18n:attributes="value label_add_textarea;"
214               tal:attributes="tabindex tabindex/next"
215               />
216        <tal:engineer condition="engineer">
217        Insertion point:
218           <input class="context"
219               type="text"
220               size="2"
221               name="insert_point"
222               value="-1"/>
223        </tal:engineer>
224
225       </tal:buttons>
226
227
228
229      </tal:define>
230    </metal:define>
231
232    <metal:define define-macro="area_format">
233      <tal:define
234          define="field_text_format string:${fieldName}_${index}_text_format;
235                  contentType python:request.get(field_text_format, here.getContentType(fieldName));
236                  allowable_ct python:getattr(field, 'allowable_content_types', ());
237                  mimetypes python:[t for t in allowable_ct if t.startswith('text/')];
238                  contenttype python:hasattr(field, 'getContentType') and field.getContentType(here) or ''">
239
240        <tal:condition condition="python:len(mimetypes) &gt; 1">
241        <div style="text-align: right; margin-right: 0.75em;">
242          <label i18n:domain="plone" i18n:translate="label_format">Format</label>
243          <select tal:attributes="id string:${fieldName}_text_format;
244                                  name string:${fieldName}_text_format;
245                                  tabindex tabindex/next">
246            <option selected="selected"
247                    value=""
248                    tal:attributes="value contentType"
249                    tal:condition="python:contenttype not in mimetypes">
250              (no change)
251            </option>
252            <option tal:repeat="item mimetypes"
253                    tal:content="python:here.lookupMime(item)"
254                    tal:attributes="value item;
255                                    selected python:test(here.checkSelected(item, contenttype, contenttypes=1), 'selected', None);"
256                    />
257          </select>
258        </div>
259        </tal:condition>
260      </tal:define>
261    </metal:define>
262
263    <metal:define define-macro="edit">
264       <metal:use use-macro="field_macro | here/field/macros/edit">
265        <metal:fill fill-slot="widget_body">
266          <metal:block use-macro="here/widget_chapter/macros/area_edit" />
267        </metal:fill>
268      </metal:use>
269    </metal:define>
270
271    <metal:define define-macro="search">
272      <metal:use use-macro="here/widgets/field/macros/edit">
273        <metal:fill fill-slot="widget_body">
274
275          <metal:block use-macro="here/widget_chapter/macros/area_edit" />
276
277        </metal:fill>
278      </metal:use>
279    </metal:define>
280
281
282    <metal:define define-macro="piece_edit">
283                <tal:if_collection
284                        condition="widget/collections_only"
285                        define="vocab python:field.Vocabulary(here);
286                                    vlen python:len(vocab);
287                                    format python:widget.format">
288
289                    <select tal:attributes="name fieldName;
290                                            id fieldName;
291                                            tabindex tabindex/next;">
292                        <option tal:repeat="item vocab"
293                                tal:attributes="value item;"
294                                                tal:content="python:context.getImageName(vocab.getValue(item))"
295                                />
296                    </select>
297                    <input type="submit" i18n:attributes="value label_add_image;" name="form.button.addImage" value="Add image" />
298
299
300                </tal:if_collection>
301                <tal:if_collection condition="not:widget/collections_only">
302                <table style="width:100%">
303                    <tr>
304                        <td style="width:550px">
305                <div class="one-piece"
306                    tal:define="piece python:field.getObjectByUID(context,UID);
307                                piece_id piece/getId | python:0;
308                                piece_uid UID | python:0;
309                                piece_desc piece/getDescription | string:;
310                                isAudio piece/isAudio | python:0">
311                    <div class="piece-edit-box" id="piece-edit-box"
312                        tal:attributes="style python:test(piece_id!=0 and not isAudio, 'background-image:url(\''+str(piece_id)+'/image_large\')', '');
313                        id python:'piece-edit-box-%s' % index; ">
314                        <div style="height:20px" class="visualClear">&nbsp;</div>
315
316                        <div style="height:50px" class="visualClear" tal:condition="isAudio">
317                           <metal:block metal:use-macro="here/macros_audioplayer/macros/audioplayer" />
318                            <div style="height:20px" class="visualClear">&nbsp;</div>
319
320                        </div>
321   
322                        <div>
323                            <div id="pres-text"><tal:block i18n:translate="label_upload_a_file">Upload a file</tal:block>...</div>
324                            <br />
325                            <input type="hidden"
326                                   value="0"
327                                   name="piece_uid"
328                                   id="piece_uid"
329                                   tal:attributes="value piece_uid | python:0"
330                            />
331                            <input id="material-file"
332                                   type="file"
333                                   value=""
334                                   name="file_box"
335                                   tal:attributes="id string:${fieldName}_file;
336                                                   name string:${fieldName}_file"
337                            />
338                            <input id="piece-uploadbutton"
339                                   type="submit"
340                                   name="form.button.uploadPiece"
341                                   value="Upload file"
342                                   tal:attributes="onClick python:'''javascript:document.getElementById('%s_uploaded').value=%s''' % (fieldName, index)"
343                                   i18n:attributes="value label_upload_file;"
344                            />
345                        </div>
346                        <div style="height:50px" class="visualClear">&nbsp;</div>
347                        <div>
348                            <div id="pres-text" i18n:translate="label_or_search_from_pieces">... or search from media pieces: </div>
349                            <div style="height:5px" class="visualClear">&nbsp;</div>
350                            <br />
351                            <input id="piece-search-0"
352                                   type="text"
353                                   value=""
354                                   name="search_box"
355                                   tal:attributes="id python:'piece-search-%s' % index"/>
356                            <input id="piece-searchbutton"
357                                   type="button"
358                                   value="Search"
359                                   name="searchButton"
360                                   i18n:attributes="value label_search;" i18n:domain="plone"
361                                   onclick="javascript:search_for_pieces()"
362                                   tal:attributes="onclick python:'''javascript:search_for_pieces(event,%s,'audio=accept')''' % index"
363                            />
364                        </div>
365                        <div id="insertHere"></div>
366                        </div>
367   
368                    </div>
369
370            </td>
371            <td style="width:140px">
372                <div id="piece-search-results">
373                    <b i18n:domain="plone" i18n:translate="heading_search_results">Search results</b>
374                    <div id="piece-search-results-body">
375                        search results here!
376                    </div>
377                </div>
378            </td>
379            </tr>
380                </table>
381            </tal:if_collection>
382    </metal:define>
383   
384    <metal:define define-macro="show_small_images">
385        <tal:def define="global le_sum_in_a_row python:0"></tal:def>
386        <input type="hidden" name="toBeRemoved" id="toBeRemoved" value="1" />
387        <tal:imgs repeat="ref context/getRefsToImages">
388       
389            <tal:cond condition="python:le_sum_in_a_row==6">
390                <tal:def define="global le_sum_in_a_row python:0"></tal:def>
391                <div style="clear:both"></div>
392            </tal:cond>
393
394            <div style="width:120px;height:140px;border:1px solid blue;float:left;margin:3px;overflow:hidden">
395                <img tal:attributes="src python:ref.absolute_url()+'/image_small'" />
396                <div style="clear:both"></div>
397                <div style="width:120px;text-align:center">
398                    <input type="submit"
399                        value="Remove"
400                        onclick="" i18n:domain="plone"
401            i18n:attributes="value label_remove;"
402                        tal:attributes="onclick string:javascript:setValue('toBeRemoved', '${ref/UID}');"
403                        name="form.button.removeImage"
404                        style="width:118px;height:18px"
405                        />
406                </div>
407            </div>
408            <tal:plus tal:define="global le_sum_in_a_row python:le_sum_in_a_row+1"></tal:plus>
409        </tal:imgs>
410        <div style="clear:both"></div>
411    </metal:define>
412
413  </body>
414
415</html>
Note: See TracBrowser for help on using the repository browser.