editor.html 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. {% macro editor(field, submit_button, placeholder=None, rows=4, hide_links=False, hide_images=False, hide_hr=False, hide_attachments=False, zen=False, extra=None) %}
  2. <div class="editor editor-editable">
  3. {% if field.errors %}
  4. <div class="editor-error">
  5. {% for error in field.errors %}
  6. <p class="help-block">{{ error }}</p>
  7. {% endfor %}
  8. </div>
  9. {% endif %}
  10. {% set context = field.field.widget.get_context(field.html_name, field.value()) %}
  11. <div class="editor-input">
  12. <div>
  13. <textarea name="{{ context.name }}" id="id_{{ context.name }}" rows="{{ rows }}"{% if placeholder %} placeholder="{{ placeholder }}"{% endif %}>{% if 'value' in context %}{{ context.value }}{% endif %}</textarea>
  14. {% if zen %}
  15. <div class="editor-zen-on tooltip-left" title="{% trans %}Click to enter Zen mode{% endtrans %}">
  16. <a href="#"><i class="icon-expand-alt"></i></a>
  17. </div>
  18. {% endif %}
  19. </div>
  20. </div>
  21. <div class="editor-actions">
  22. <ul class="editor-tools unstyled pull-left">
  23. <li><a href="#" class="tooltip-top btn editor-bold" title="{% trans %}Bold{% endtrans %}"><i class="icon-bold"></i></a></li>
  24. <li><a href="#" class="tooltip-top btn editor-emphasis" title="{% trans %}Emphasis{% endtrans %}"><i class="icon-italic"></i></a></li>
  25. {% if not hide_links %}<li><a href="#" class="tooltip-top btn editor-link" title="{% trans %}Insert Link{% endtrans %}"><i class="icon-share-alt"></i></a></li>{% endif %}
  26. {% if not hide_images %}<li><a href="#" class="tooltip-top btn editor-image" title="{% trans %}Insert Image{% endtrans %}"><i class="icon-picture"></i></a></li>{% endif %}
  27. {% if not hide_hr %}<li><a href="#" class="tooltip-top btn editor-hr" title="{% trans %}Insert Horizontal Line{% endtrans %}"><i class="icon-minus"></i></a></li>{% endif %}
  28. </ul>
  29. <a href="{{ url('help_md') }}" class="editor-help" target="_blank">{% trans %}Formatting Help{% endtrans %}</a>
  30. <button name="save" type="submit" class="btn btn-primary pull-right">{{ submit_button }}</button>
  31. {% if extra %}{{ extra }}{% endif %}
  32. </div>
  33. {% if not hide_attachments %}
  34. {{ attachments_editor() }}
  35. {% endif %}
  36. </div>
  37. {% endmacro %}
  38. {% macro zen() %}
  39. <div class="zen-overlay editor-editable">
  40. <div>
  41. <div class="container">
  42. <textarea id="overlay-textarea" name="overlay-textarea" placeholder="{% trans %}Message Body{% endtrans %}"></textarea>
  43. <div class="overlay-options">
  44. <ul>
  45. <li><a href="#" class="tooltip-left editor-bold" title="{% trans %}Bold{% endtrans %}"><i class="icon-bold"></i></a></li>
  46. <li><a href="#" class="tooltip-left editor-emphasis" title="{% trans %}Emphasis{% endtrans %}"><i class="icon-italic"></i></a></li>
  47. <li><a href="#" class="tooltip-left editor-link" title="{% trans %}Insert Link{% endtrans %}"><i class="icon-share-alt"></i></a></li>
  48. <li><a href="#" class="tooltip-left editor-image" title="{% trans %}Insert Image{% endtrans %}"><i class="icon-picture"></i></a></li>
  49. <li><a href="#" class="tooltip-left editor-hr" title="{% trans %}Insert Horizontal Line{% endtrans %}"><i class="icon-minus"></i></a></li>
  50. <li><a href="{{ url('help_md') }}" class="tooltip-left" title="{% trans %}Formatting Help{% endtrans %}" target="_blank"><i class="icon-info"></i></a></li>
  51. <li><hr></li>
  52. <li class="editor-zen-off tooltip-left" title="{% trans %}Leave Zen mode{% endtrans %}"><a href="#"><i class="icon-off"></i></a></li>
  53. </ul>
  54. </div>
  55. </div>
  56. </div>
  57. </div>
  58. {% endmacro %}
  59. {% macro attachments_editor() %}
  60. {% if acl.threads.can_upload_attachments(forum) %}
  61. <div class="editor-upload">
  62. <input type="file" name="new_file">
  63. <button name="upload" type="submit" class="btn pull-right">{% trans %}Attach File{% endtrans %}</button>
  64. </div>
  65. {% endif %}
  66. {% if attachments %}
  67. <ul class="unstyled editor-attachments">
  68. {% for attachment in attachments %}
  69. <li{% if attachment.pk in attachments_removed %} class="attachment-removed"{% endif %}>
  70. <div class="attachment-image">
  71. <a href="{{ url('attachments_server', attachment=attachment.hash_id) }}">
  72. {% if attachment.is_image %}
  73. <img src="{{ url('attachments_thumbs_server', attachment=attachment.hash_id) }}" alt="">
  74. {% else %}
  75. <i class="icon-file"></i>
  76. {% endif %}
  77. </a>
  78. </div>
  79. <div class="attachment-actions">
  80. {% if attachment.pk in attachments_removed %}
  81. <button name="restore_attachment" value="{{ attachment.pk }}" type="submit" class="btn pull-right"><i class="icon-plus"></i> {% trans %}Restore{% endtrans %}</button>
  82. {% else %}
  83. <button type="button" class="btn btn-insert pull-right editor-insert-attachment" data-attachment-md="{% if attachment.is_image %}[![{{ attachment.name }}]({{ url('attachments_thumbs_server', attachment=attachment.hash_id) }})]({{ url('attachments_server', attachment=attachment.hash_id) }}){% else %}[{{ attachment.name }}]({{ url('attachments_server', attachment=attachment.hash_id) }}){% endif %}"><i class="icon-share"></i> {% trans %}Insert{% endtrans %}</button>
  84. {% if acl.threads.can_delete_attachment(user, forum, attachment) %}
  85. <button name="remove_attachment" value="{{ attachment.pk }}" type="submit" class="btn btn-remove pull-right"><i class="icon-remove"></i> {% trans %}Remove{% endtrans %}</button>
  86. {% endif %}
  87. {% endif %}
  88. </div>
  89. <div class="attachment-body">
  90. <h4>{% if attachment.pk in attachments_removed %}<span class="attachment-removed-message"><i class="icon-remove"></i> {% trans %}Removed:{% endtrans %}</span> {% endif %}{{ attachment.name }}</h4>
  91. <div class="attachment-details">
  92. {% if attachment.user_id %}
  93. <a href="{{ url('user', user=attachment.user_id, username=attachment.user_name_slug) }}">{{ attachment.user_name }}</a>,
  94. {% else %}
  95. {{ attachment.user_name }},
  96. {% endif %}
  97. {% if acl.users.can_see_users_trails() %}
  98. <abbr title="{{ attachment.agent }}">{{ attachment.ip }}</abbr>,
  99. {% endif %}
  100. {{ attachment.date|date }},
  101. {{ _(attachments_types[attachment.filetype_id].name) }}, {{ attachment.size|filesize }}
  102. </div>
  103. </div>
  104. </li>
  105. {% endfor %}
  106. </ul>
  107. {% endif %}
  108. {% endmacro %}
  109. {% macro js() %}
  110. <script type="text/javascript">
  111. $(function () {
  112. ed_lang_enter_link_url = "{% trans %}Enter link address{% endtrans %}";
  113. ed_lang_enter_link_label = "{% trans %}Enter link label (optional){% endtrans %}";
  114. ed_lang_enter_image_url = "{% trans %}Enter image address{% endtrans %}";
  115. ed_lang_enter_image_label = "{% trans %}Enter image label{% endtrans %}";
  116. ed_emojis = ['{{ ("', '".join(emojis))|safe }}'];
  117. ed_emoji_tpl = "<li data-value='${key}'><img src='{{ STATIC_URL }}emojis/${name}.png' height='20' width='20'/> ${name} </li>";
  118. ed_emojis_list = $.map(ed_emojis, function(value, i) {
  119. return {'id':i, 'key':value+":", 'name':value};
  120. });
  121. });
  122. </script>
  123. <script src="{{ STATIC_URL }}cranefly/js/jquery.caret.js"></script>
  124. <script src="{{ STATIC_URL }}cranefly/js/jquery.atwho.js"></script>
  125. <script src="{{ STATIC_URL }}cranefly/js/editor.js"></script>
  126. {% endmacro %}