189 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			189 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
{% macro pager(current_page, page_count) %}
 | 
						|
{% set left_start = [1, current_page - 5] | max %}
 | 
						|
{% set right_end = [page_count, current_page + 5] | min %}
 | 
						|
<div class="pager">
 | 
						|
  <span>Page:</span>
 | 
						|
  {% if current_page > 5 %}
 | 
						|
    <a href="?page=1" class="pagebutton">1</a>
 | 
						|
    {% if left_start > 2 %}
 | 
						|
      <span class="currentpage">…</span>
 | 
						|
    {% endif %}
 | 
						|
  {% endif %}
 | 
						|
  {% for i in range(left_start, current_page) %}
 | 
						|
    <a href="?page={{i}}" class="pagebutton">{{i}}</a>
 | 
						|
  {% endfor %}
 | 
						|
  {% if page_count > 0 %}
 | 
						|
    <span class="currentpage">{{current_page}}</span>
 | 
						|
  {% endif %}
 | 
						|
  {% for i in range(current_page + 1, right_end + 1) %}
 | 
						|
    <a href="?page={{i}}" class="pagebutton">{{i}}</a>
 | 
						|
  {% endfor %}
 | 
						|
  {% if right_end < page_count %}
 | 
						|
    {% if right_end < page_count - 1 %}
 | 
						|
      <span class="currentpage">…</span>
 | 
						|
    {% endif %}
 | 
						|
    <a href="?page={{page_count}}" class="pagebutton">{{page_count}}</a>
 | 
						|
  {% endif %}
 | 
						|
</div>
 | 
						|
{% endmacro %}
 | 
						|
 | 
						|
{% macro infobox(message, kind=InfoboxKind.INFO) %}
 | 
						|
<div class="{{ "infobox " + InfoboxHTMLClass[kind] }}">
 | 
						|
  <span>
 | 
						|
  <div class="infobox-icon-container">
 | 
						|
    <img src="{{ InfoboxIcons[kind] }}">
 | 
						|
  </div>
 | 
						|
  {{ message }}
 | 
						|
  </span>
 | 
						|
</div>
 | 
						|
{% endmacro %}
 | 
						|
 | 
						|
{% macro timestamp(unix_ts) %}
 | 
						|
<span class="timestamp" data-utc="{{ unix_ts }}">{{ unix_ts | ts_datetime('%Y-%m-%d %H:%M')}} <abbr title="Server Time">ST</abbr></span>
 | 
						|
{% endmacro %}
 | 
						|
 | 
						|
{% macro babycode_editor_component(ta_name, ta_placeholder="Post body", optional=False, prefill="") %}
 | 
						|
<div class="babycode-editor-container">
 | 
						|
  <div class="tab-buttons">
 | 
						|
    <button type=button class="tab-button active" data-target-id="tab-edit">Write</button>
 | 
						|
    <button type=button class="tab-button" data-target-id="tab-preview">Preview</button>
 | 
						|
  </div>
 | 
						|
  <div class="tab-content active" id="tab-edit">
 | 
						|
    <span class="babycode-button-container">
 | 
						|
      <button class="babycode-button" type=button id="post-editor-bold" title="Insert Bold"><strong>B</strong></button>
 | 
						|
      <button class="babycode-button" type=button id="post-editor-italics" title="Insert Italics"><em>I</em></button>
 | 
						|
      <button class="babycode-button" type=button id="post-editor-strike" title="Insert Strikethrough"><del>S</del></button>
 | 
						|
      <button class="babycode-button" type=button id="post-editor-url" title="Insert Link"><code>://</code></button>
 | 
						|
      <button class="babycode-button" type=button id="post-editor-code" title="Insert Code block"><code></></code></button>
 | 
						|
      <button class="babycode-button contain-svg full" type=button id="post-editor-img" title="Insert Image"><img src="/static/misc/image.svg"></button>
 | 
						|
      <button class="babycode-button" type=button id="post-editor-ol" title="Insert Ordered list">1.</button>
 | 
						|
      <button class="babycode-button" type=button id="post-editor-ul" title="Insert Unordered list">•</button>
 | 
						|
    </span>
 | 
						|
    <textarea class="babycode-editor" name="{{ ta_name }}" id="babycode-content" placeholder="{{ ta_placeholder }}" {{ "required" if not optional else "" }}>{{ prefill }}</textarea>
 | 
						|
    <a href="{{ url_for("app.babycode_guide") }}" target="_blank">babycode guide</a>
 | 
						|
  </div>
 | 
						|
  <div class="tab-content" id="tab-preview">
 | 
						|
    <div id="babycode-preview-errors-container">Type something!</div>
 | 
						|
    <div id="babycode-preview-container"></div>
 | 
						|
  </div>
 | 
						|
</div>
 | 
						|
<script src="{{ "/static/js/babycode-editor.js" | cachebust }}"></script>
 | 
						|
{% endmacro %}
 | 
						|
 | 
						|
{% macro babycode_editor_form(ta_name, prefill = "", cancel_url="", endpoint="") %}
 | 
						|
{% set save_button_text = "Post reply" if not cancel_url else "Save" %}
 | 
						|
<form class="post-edit-form" method="post" action={{ endpoint }}>
 | 
						|
  {{babycode_editor_component(ta_name, prefill = prefill)}}
 | 
						|
  {% if not cancel_url %}
 | 
						|
    <span>
 | 
						|
      <input type="checkbox" id="subscribe" name="subscribe" {{ "checked" if session.get('subscribe_by_default', default=true) else "" }}>
 | 
						|
      <label for="subscribe">Subscribe to thread</label>
 | 
						|
    </span>
 | 
						|
  {% endif %}
 | 
						|
  <span>
 | 
						|
    <input type="submit" value="{{ save_button_text }}">
 | 
						|
    {% if cancel_url %}
 | 
						|
      <a class="linkbutton warn" href="{{ cancel_url }}">Cancel</a>
 | 
						|
    {% endif %}
 | 
						|
  </span>
 | 
						|
</form>
 | 
						|
{% endmacro %}
 | 
						|
 | 
						|
{% macro full_post(post, render_sig = True, is_latest = False, editing = False, active_user = None, no_reply = false) %}
 | 
						|
{% set postclass = "post" %}
 | 
						|
{% if editing %}
 | 
						|
  {% set postclass = postclass + " editing" %}
 | 
						|
{% endif %}
 | 
						|
{% set post_permalink = url_for("threads.thread", slug = post['thread_slug'], after = post['id'], _anchor = ("post-" + (post['id'] | string))) %}
 | 
						|
<div class=" {{ postclass }}" id="post-{{ post['id'] }}">
 | 
						|
  <div class="usercard">
 | 
						|
    <div class="usercard-inner">
 | 
						|
      <a href="{{ url_for("users.page", username=post['username']) }}" style="display: contents;">
 | 
						|
      <img src="{{ post['avatar_path'] }}" class="avatar">
 | 
						|
      </a>
 | 
						|
      <a href="{{ url_for("users.page", username=post['username']) }}" class="username-link">{{ post['username'] }}</a>
 | 
						|
      {% if post['status'] %}
 | 
						|
        <em class="user-status">{{ post['status'] }}</em>
 | 
						|
      {% endif %}
 | 
						|
    </div>
 | 
						|
  </div>
 | 
						|
 | 
						|
  <div class="post-content-container" {{ "id=latest-post" if is_latest else "" }}>
 | 
						|
    <div class="post-info">
 | 
						|
      <a href="{{ post_permalink }}" title="Permalink"><i>
 | 
						|
        {% if (post['edited_at'] | int) > (post['created_at'] | int) %}
 | 
						|
          Edited on {{ timestamp(post['edited_at']) }}
 | 
						|
        {% else %}
 | 
						|
          Posted on {{ timestamp(post['edited_at']) }}
 | 
						|
        {% endif %}
 | 
						|
      </i></a>
 | 
						|
      <span>
 | 
						|
        {% set show_edit = false %}
 | 
						|
        {% if active_user %}
 | 
						|
          {% set show_edit = (active_user.id | string) == (post['user_id'] | string) and (not post['thread_is_locked'] or active_user.is_mod()) and not no_reply %}
 | 
						|
        {% endif %}
 | 
						|
        {% if show_edit %}
 | 
						|
          <a class="linkbutton" href="{{ url_for('posts.edit', post_id=post.id, _anchor='babycode-content') }}">Edit</a>
 | 
						|
        {% endif %}
 | 
						|
 | 
						|
        {% set show_reply = true %}
 | 
						|
 | 
						|
        {% if active_user and post['thread_is_locked'] and not active_user.is_mod() %}
 | 
						|
          {% set show_reply = false %}
 | 
						|
        {% elif active_user and active_user.is_guest() %}
 | 
						|
          {% set show_reply = false %}
 | 
						|
        {% elif editing %}
 | 
						|
          {% set show_reply = false %}
 | 
						|
        {% elif no_reply %}
 | 
						|
          {% set show_reply = false %}
 | 
						|
        {% endif %}
 | 
						|
 | 
						|
        {% if show_reply %}
 | 
						|
          {% set qtext = "[url=%s]%s said:[/url]" | format(post_permalink, post['username']) %}
 | 
						|
          {% set reply_text = "%s\n[quote]%s[/quote]\n" | format(qtext, post['original_markup']) %}
 | 
						|
          <button value="{{ reply_text }}" class="reply-button">Quote</button>
 | 
						|
        {% endif %}
 | 
						|
 | 
						|
        {% set show_delete = false %}
 | 
						|
 | 
						|
        {% if active_user %}
 | 
						|
          {% set show_delete = (((post['user_id'] | string) == (active_user.id | string) and not post['thread_is_locked']) or active_user.is_mod()) and not no_reply %}
 | 
						|
        {% endif %}
 | 
						|
 | 
						|
        {% if show_delete %}
 | 
						|
          <button class="critical post-delete-button" value="{{ post['id'] }}">Delete</button>
 | 
						|
        {% endif %}
 | 
						|
      </span>
 | 
						|
    </div>
 | 
						|
    <div class="post-content">
 | 
						|
      {% if not editing %}
 | 
						|
        <div class="post-inner" data-post-permalink="{{ post_permalink }}" data-author-username="{{ post.username }}">{{ post['content'] | safe }}</div>
 | 
						|
        {% if render_sig and post['signature_rendered'] %}
 | 
						|
          <div class="signature-container">
 | 
						|
            <hr>
 | 
						|
            {{ post['signature_rendered'] | safe }}
 | 
						|
          </div>
 | 
						|
        {% endif %}
 | 
						|
      {% else %}
 | 
						|
        {{ babycode_editor_form(cancel_url = post_permalink, prefill = post['original_markup'], ta_name = "new_content") }}
 | 
						|
      {% endif %}
 | 
						|
    </div>
 | 
						|
  </div>
 | 
						|
</div>
 | 
						|
{% endmacro %}
 | 
						|
 | 
						|
{% macro accordion(hidden=false, style="", disabled=false) %}
 | 
						|
{% if disabled %}
 | 
						|
{% set hidden = true %}
 | 
						|
{% endif %}
 | 
						|
<div class="accordion {{ "hidden" if hidden else ""}}" style="{{style}}">
 | 
						|
  <div class="accordion-header">
 | 
						|
    <button type="button" class="accordion-toggle" {{"disabled" if disabled else ""}}>{{ "+" if hidden else "-" }}</button>
 | 
						|
    {{ caller('header') }}
 | 
						|
  </div>
 | 
						|
  <div class="accordion-content {{ "hidden" if hidden else "" }}">
 | 
						|
    {{ caller('content') }}
 | 
						|
  </div>
 | 
						|
</div>
 | 
						|
{% endmacro %}
 |