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

Revision 1929, 20.7 KB checked in by laszlo, 12 years ago (diff)

fixed #1479 spent 24h
If you want to use the word wrap in a div, you should set the wrapme class for the tag.

Now it is working in IE and FireFox?. Somebody should extend it to Safari.

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