view templates/snippet/snippet_details.djhtml @ 102:f872c643b056

Updates to snippet functionality (see details) Sorry about the large commit, but it was difficult to break it up as a lot of new functionality was introduced. Most of it is specific to the snippet feature but there are some other changes as well. Commit highlights: * Added the ability to switch the syntax highlighting colour scheme when viewing a snippet. This is currently done on a per-snippet basis only, but eventually it will be possible to set a default in your profile to have all the snippets you view use that colour scheme. There are currently 8 different colour schemes, all of which were taken from the default pygments stylesheets (some were modified). * Added a "num_views" field to the Snippet model, with the field being incremented any time the snippet view is called (raw or regular view). * Created a simple "explore" view that lists the recently-posted snippets. Will implement pagination and sorting by other attributes ("popularity", for example, based on number of views) as well. * Added a post-save hook to the User model to ensure that a Profile is created for every user as soon as the User itself is created. This alleviates the need for a get_profile method that checks if the user has a profile or not and creates one if necessary. (The code is currently still there, will be cleaned up soon). * Added back the wordwrap toggling feature. Currently, if you want to enable word-wrapping, the line numbers have to be hidden in order to ensure that the lines and their numbers don't go out of sync. This will be fixed soon. * History/diff view is back * And some other minor cosmetic changes. Note: since some existing models have been changed, you'll likely need to delete the existing sqlite database before running syncdb. The alternative is to determine the necessary column changes/additions and run the SQL query yourself.
author dellsystem <ilostwaldo@gmail.com>
date Fri, 31 Aug 2012 02:53:22 -0400
parents d48e8676b18f
children 7d753658dc0e
line wrap: on
line source

{% extends "snippet/base.djhtml" %}
{% load mptt_tags %}
{% load i18n %}

{% block extrahead %}
{% if request.session.userprefs %}
<style type="text/css" media="all">
  .highlight {
  {# FIXME: Thats stupid #}
  {% ifnotequal request.session.userprefs.font_family "None" %}
  font-family: {{ request.session.userprefs.font_family }} !important;
  {% endifnotequal %}
  {% ifnotequal request.session.userprefs.font_size "None" %}
  font-size: {{ request.session.userprefs.font_size }}px !important;
  {% endifnotequal %}
  {% ifnotequal request.session.userprefs.line_height "None" %}
  line-height: {{ request.session.userprefs.line_height }}px !important;
  {% endifnotequal %}
  }
</style>
{% endif %}
{% endblock %}

{% block title %}
Viewing snippet — {{ snippet.get_title }}
{% endblock title %}

{% block headline %}
<h1>
  {% trans "Snippet" %} #{{ snippet.pk }}
  {% if snippet.parent_id %}
  {% blocktrans with snippet.parent.get_absolute_url as parent_url and snippet.parent.id as parent_id %}
  (Copy of <a href="{{ parent_url }}">snippet #{{ parent_id }}</a>)
  {% endblocktrans %}
  {% endif %}
  <span class="date">
    {{ snippet.published|date:_("DATETIME_FORMAT") }} ({% trans "UTC" %})
  </span>
</h1>
{% endblock headline %}

{% load snippet_tags %}

{% block content %}
<div id="non-sidebar">
    <div id="diff">
    </div>

    <h1>{{ snippet.get_title }}</h1>
    <div class="snippet-options">
        <abbr title="{% trans "Time to live" %}"
              >TTL:
        </abbr>
        {{ snippet.expires|timeuntil  }}
        &mdash;
        {% if snippet.pk|in_list:request.session.snippet_list %}
        <a onclick="return confirm('{% trans "Really delete this snippet?" %}')"
           href="{% url snippet_delete snippet.secret_id %}">
            Delete this snippet
        </a>
        &mdash;
        {% endif %}
        <a id="toggle-wordwrap" href="#">{% trans "Toggle wordwrap" %}</a>
        &mdash;
        Syntax highlighting style:
        <select id="change-highlighting"
                data-default="{{ default_style }}">
            {% for pygments_style in pygments_styles %}
            <option name="{{ pygments_style }}">
                {{ pygments_style }}
                {% if pygments_style == default_style %}
                (default)
                {% endif %}
            </option>
            {% endfor %}
        </select>
        <div>
            Author:
            {% if snippet.author %}
            <a href="{% url agora.apps.profile.views.showprofile snippet.author %}">
            {{ snippet.author }}
            </a>
            {% else %}
            anonymous
            {% endif %}
            &mdash;
            Language: {{language}}
        </div>
    </div>
    <br />
    <div class="snippet">
        <table>
            <tr>
                <th id="line-numbers">
                    {# this has to look like this due to the pre tags #}
                    <pre class="numbers">{% for l in lines %}<a href="#l{{ forloop.counter }}" id="l{{ forloop.counter }}">{{ forloop.counter }}</a>
{% endfor %}</pre>
                </th>
                <td>
                    {# this has to look like this due to the pre tags #}
                    <pre class="highlight {{ default_style }}">{% for line in snippet.content_splitted %}<span class="line" id="l{{ forloop.counter }}">{% if line %}{{ line|safe }}{% else %}&nbsp;{% endif %}</span>
{% endfor %}</pre>
                </td>
            </tr>
        </table>
    </div>

    <br />

    <h2 id="revise">{% trans "Revise this snippet" %}</h2>

    {% include "snippet/snippet_form.djhtml" %}
</div><div id="sidebar">
    <h2>{% trans "History" %}</h2>
    {% if no_descendants %}
        <p>{% trans "This snippet has no children!" %}</p>
        <p>
            <a href="#revise">
            {% trans "Make one" %} &raquo;
            </a>
        </p>
    {% else %}
    <form method="get" id="diffform" action="{% url snippet_diff %}">
      <div class="tree">
        {% for tree_item,structure in tree|tree_info %}
        {% if structure.new_level %}
        <ul>
          <li>
            {% else %}
          </li>
          <li>
            {% endif %}
            <div>
              <span class="diff">
                <input type="radio" name="a"
                       value="{{ tree_item.id }}"
                       {% ifequal tree_item.id snippet.parent_id %}
                       checked="checked"
                       {% endifequal %}/>
                <input type="radio"
                       name="b"
                       value="{{ tree_item.id }}"
                       {% ifequal snippet tree_item %}
                       checked="checked"
                       {% endifequal %}/>
              </span>
              {% ifequal snippet tree_item %}
                <strong>{{ tree_item.get_title }}</strong>
              {% else %}
                <a href="{{ tree_item.get_absolute_url }}">
                    {{ tree_item.get_title }}
                </a>
              {% endifequal %}
            </div>
            {% for level in structure.closed_levels %}
          </li>
        </ul>
        {% endfor %}
        {% endfor %}
        <div class="submit">
          <input type="submit" value="{% trans "Compare" %}"/>
        </div>
      </div>
    </form>
    {% endif %}
    <br />
    <h2>{% trans "Options" %}</h2>
    <a href="{% url snippet_details_raw snippet.secret_id %}">
       {% trans "View raw" %}
     </a>
</div>
</div>
{% endblock %}

{% block script_footer %}
<script type="text/javascript">
{%include "snippet/snippet_details.js" %}
</script>
{% endblock script_footer %}