pod.mak 7.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. <%def name="Button(piId, pbWithLabel, psButtonCssClass, psButtonTitle, psButtonIcon, psButtonLabel)" >
  2. <button id='${piId}' type="button" class="${psButtonCssClass}" title="${psButtonTitle}"><i class="${psButtonIcon}"></i>${u'' if (pbWithLabel==False) else u' %s'%(psButtonLabel)}</button>
  3. </%def>
  4. <%def name="SaveButton(piId, pbWithLabel=False)" >
  5. ${Button(piId, pbWithLabel, 'btn btn-success', _('Save'), ' icon-g-ok-2 icon-g-white', _('Save'))}
  6. </%def>
  7. <%def name="EditButton(piId, pbWithLabel=False)" >
  8. ${Button(piId, pbWithLabel, 'btn', _('Edit'), 'icon-g-edit', _('Edit'))}
  9. </%def>
  10. <%def name='CancelButton(piId, pbWithLabel=False)'>
  11. ${Button(piId, pbWithLabel, 'btn ', _('Cancel'), 'icon-g-ban', _('Cancel'))}
  12. </%def>
  13. <%def name='AddButton(piId, pbWithLabel=False, psLabel=None)'>
  14. ${Button(piId, pbWithLabel, 'btn', psLabel or _('New'), 'icon-g-circle-plus', psLabel or _('New'))}
  15. </%def>
  16. <%def name='Badge(psLabel, psCssClass="")'>
  17. <span class='badge ${psCssClass}'>${psLabel}</span>
  18. </%def>
  19. <%def name='ItemNb(plItemList)'>
  20. % if len(plItemList)>0:
  21. <sup class="pod-item-nb-sup-block"> ${len(plItemList)}</sup>
  22. % endif
  23. </%def>
  24. <%def name='RichTextEditorToolbar(psRichTextEditorNodeId, psMenuOptions="styles|boldanditalic|lists|justifiers|links|images|undoredo|fullscreen")'>
  25. <div class="btn-toolbar" data-role="${psRichTextEditorNodeId}-toolbar" data-target="${psRichTextEditorNodeId}">
  26. % if psMenuOptions.find('styles')>=0:
  27. <div class="btn-group">
  28. <a class="btn" data-edit="formatBlock p" title="Normal paragraph">§</h1></a></li>
  29. <a class="btn" data-edit="formatBlock pre" title="Fixed width (code)">C</h1></a>
  30. <a class="btn" data-edit="formatBlock h1" title="Title - level 1">h1</a>
  31. <a class="btn" data-edit="formatBlock h2" title="Title - level 2">h2</a>
  32. <a class="btn" data-edit="formatBlock h3" title="Title - level 3">h3</a>
  33. <a class="btn" data-edit="formatBlock h4" title="Title - level 4">h4</a>
  34. <a class="btn" data-edit="formatBlock h5" title="Title - level 5">h5</a>
  35. <a class="btn" data-edit="formatBlock h6" title="Title - level 6">h6</a>
  36. </div>
  37. % endif
  38. % if psMenuOptions.find('boldanditalic')>=0:
  39. <div class="btn-group">
  40. <a class="btn" data-edit="bold" title="Bold (Ctrl/Cmd+B)"><i class="fa fa-bold"></i></a>
  41. <a class="btn" data-edit="italic" title="Italic (Ctrl/Cmd+I)"><i class="fa fa-italic"></i></a>
  42. <a class="btn" data-edit="strikethrough" title="Strikethrough"><i class="fa fa-strikethrough"></i></a>
  43. <a class="btn" data-edit="underline" title="Underline (Ctrl/Cmd+U)"><i class="fa fa-underline"></i></a>
  44. </div>
  45. % endif
  46. % if psMenuOptions.find('lists')>=0:
  47. <div class="btn-group">
  48. <a class="btn" data-edit="insertunorderedlist" title="Bullet list"><i class="fa fa-list-ul"></i></a>
  49. <a class="btn" data-edit="insertorderedlist" title="Number list"><i class="fa fa-list-ol"></i></a>
  50. <a class="btn" data-edit="outdent" title="Reduce indent (Shift+Tab)"><i class="fa fa-outdent"></i></a>
  51. <a class="btn" data-edit="indent" title="Indent (Tab)"><i class="fa fa-indent"></i></a>
  52. </div>
  53. % endif
  54. % if psMenuOptions.find('justifiers')>=0:
  55. <div class="btn-group">
  56. <a class="btn" data-edit="justifyleft" title="Align Left (Ctrl/Cmd+L)"><i class="fa fa-align-left"></i></a>
  57. <a class="btn" data-edit="justifycenter" title="Center (Ctrl/Cmd+E)"><i class="fa fa-align-center"></i></a>
  58. <a class="btn" data-edit="justifyright" title="Align Right (Ctrl/Cmd+R)"><i class="fa fa-align-right"></i></a>
  59. <a class="btn" data-edit="justifyfull" title="Justify (Ctrl/Cmd+J)"><i class="fa fa-align-justify"></i></a>
  60. </div>
  61. % endif
  62. % if psMenuOptions.find('links')>=0:
  63. <div class="btn-group">
  64. <a class="btn dropdown-toggle" data-toggle="dropdown" title="Hyperlink"><i class="fa fa-link"></i></a>
  65. <div class="dropdown-menu input-append">
  66. <input class="span2" placeholder="URL" type="text" data-edit="createLink"/>
  67. <button class="btn" type="button">Add</button>
  68. </div>
  69. <a class="btn" data-edit="unlink" title="Remove Hyperlink"><i class="fa fa-cut"></i></a>
  70. </div>
  71. % endif
  72. % if psMenuOptions.find('images')>=0:
  73. <div class="btn-group">
  74. <a class="btn" title="Insert picture (or just drag & drop)" id="pictureBtn"><i class="fa fa-picture-o"></i></a>
  75. <input type="file" data-role="magic-overlay" data-target="#pictureBtn" data-edit="insertImage" />
  76. </div>
  77. % endif
  78. % if psMenuOptions.find('undoredo')>=0:
  79. <div class="btn-group">
  80. <a class="btn" data-edit="undo" title="Undo (Ctrl/Cmd+Z)"><i class="fa fa-undo"></i></a>
  81. <a class="btn" data-edit="redo" title="Redo (Ctrl/Cmd+Y)"><i class="fa fa-repeat"></i></a>
  82. </div>
  83. % endif
  84. % if psMenuOptions.find('fullscreen')>=0:
  85. <div class="btn-group">
  86. <a class="btn btn-primary pod-toggle-full-screen-button"
  87. title="Toggle fullscreen"
  88. onclick="toggleFullScreen('#${psRichTextEditorNodeId}-widget', '#${psRichTextEditorNodeId}-widget-inner')"
  89. >
  90. ## TODO - D.A. - 2013-11-13 - Use jQuery instead of static JS call
  91. ## >The previous button "onclick" should be replaced by a jquery dynamic link finding parent node with the right id
  92. <i class="fa fa-expand"></i>
  93. </a>
  94. </div>
  95. % endif
  96. <input type="text" data-edit="inserttext" id="voiceBtn" x-webkit-speech="">
  97. </div>
  98. </%def>
  99. <%def name='RichTextEditor(psRichTextEditorNodeId, psRichTextEditorContent="", psMenuOptions="styles|boldanditalic|lists|justifiers|links|images|undoredo|fullscreen")'>
  100. <div id="${psRichTextEditorNodeId}-widget" class="rich-text-editor-widget">
  101. <div id="${psRichTextEditorNodeId}-widget-inner" class="rich-text-editor-widget-inner">
  102. <div id="${psRichTextEditorNodeId}-alert-container"></div>
  103. ${RichTextEditorToolbar(psRichTextEditorNodeId, psMenuOptions)}
  104. <div id="${psRichTextEditorNodeId}" class="pod-rich-text-zone pod-input-like-shadow">
  105. ${psRichTextEditorContent|n}
  106. </div>
  107. </div>
  108. <script>
  109. ##########################
  110. ##
  111. ## Initializes the rich text editor widget with toolbar
  112. ##
  113. $(document).ready(function() {
  114. initToolbarBootstrapBindings('#${psRichTextEditorNodeId}');
  115. $('#${psRichTextEditorNodeId}').wysiwyg({
  116. ## FIXME - 2013-11-13 - D.A.
  117. ## The selector is now based on the id of the toolbar div
  118. ## according to the following bug report:
  119. ## https://github.com/mindmup/bootstrap-wysiwyg/issues/52
  120. ## // toolbarSelector: '#${psRichTextEditorNodeId} [data-role=editor-toolbar]',
  121. toolbarSelector: '[data-role=${psRichTextEditorNodeId}-toolbar]',
  122. fileUploadError: showErrorAlert
  123. });
  124. window.prettyPrint && prettyPrint();
  125. });
  126. </script>
  127. </div>
  128. </%def>