{% extends "layout.html" %} {% block title %}{{ torrent.display_name }} :: {{ config.SITE_NAME }}{% endblock %} {% block metatags %} {% set uploader_name = torrent.user.username if (torrent.user and not torrent.anonymous) else 'Anonymous' %} <meta property="og:description" content="{{ category_name(torrent.sub_category.id_as_string) }} | {{ torrent.filesize | filesizeformat(True) }} | Uploaded by {{ uploader_name }} on {{ torrent.created_time.strftime('%Y-%m-%d') }}"> {% endblock %} {% block body %} {% from "_formhelpers.html" import render_field %} <div class="panel panel-{% if torrent.deleted %}deleted{% elif torrent.remake %}danger{% elif torrent.trusted %}success{% else %}default{% endif %}"> <div class="panel-heading"{% if torrent.hidden %} style="background-color: darkgray;"{% endif %}> <h3 class="panel-title"> {% if can_edit %} <a href="{{ request.url }}/edit" title="Edit torrent"><i class="fa fa-fw fa-pencil"></i></a> {% endif %} {{ torrent.display_name }} </h3> </div> <div class="panel-body"> <div class="row"> <div class="col-md-1">Category:</div> <div class="col-md-5"> <a href="{{ url_for("home", c=torrent.main_category.id_as_string) }}">{{ torrent.main_category.name }}</a> - <a href="{{ url_for("home", c=torrent.sub_category.id_as_string) }}">{{ torrent.sub_category.name }}</a> </div> <div class="col-md-1">Date:</div> <div class="col-md-5" data-timestamp="{{ torrent.created_utc_timestamp|int }}">{{ torrent.created_time.strftime('%Y-%m-%d %H:%M UTC') }}</div> </div> <div class="row"> <div class="col-md-1">Submitter:</div> <div class="col-md-5"> {% set user_url = torrent.user and url_for('view_user', user_name=torrent.user.username) %} {%- if not torrent.anonymous and torrent.user -%} <a class="text-{{ torrent.user.userlevel_color }}" href="{{ user_url }}">{{ torrent.user.username }}</a> {%- else -%} Anonymous {% if torrent.user and (g.user == torrent.user or g.user.is_moderator) %}(<a href="{{ user_url }}">{{ torrent.user.username }}</a>){% endif %} {%- endif -%} {% if g.user and g.user.is_superadmin and torrent.uploader_ip %} ({{ torrent.uploader_ip_string }}) {% endif %} </div> <div class="col-md-1">Seeders:</div> <div class="col-md-5"><span style="color: green;">{% if config.ENABLE_SHOW_STATS %}{{ torrent.stats.seed_count }}{% else %}Coming soon{% endif %}</span></div> </div> <div class="row"> <div class="col-md-1">Information:</div> <div class="col-md-5"> {% if torrent.information %} {{ torrent.information_as_link | safe }} {% else %} No information. {% endif%} </div> <div class="col-md-1">Leechers:</div> <div class="col-md-5"><span style="color: red;">{% if config.ENABLE_SHOW_STATS %}{{ torrent.stats.leech_count }}{% else %}Coming soon{% endif %}</span></div> </div> <div class="row"> <div class="col-md-1">File size:</div> <div class="col-md-5">{{ torrent.filesize | filesizeformat(True) }}</div> <div class="col-md-1">Completed:</div> <div class="col-md-5">{% if config.ENABLE_SHOW_STATS %}{{ torrent.stats.download_count }}{% else %}Coming soon{% endif %}</div> </div> <div class="row"> <div class="col-md-offset-6 col-md-1">Info hash:</div> <div class="col-md-5"><kbd>{{ torrent.info_hash_as_hex }}</kbd></div> </div> </div> <div class="panel-footer"> {% if torrent.has_torrent %}<a href="{{ url_for('download_torrent', torrent_id=torrent.id )}}"><i class="fa fa-download fa-fw"></i>Download Torrent</a> or {% endif %}<a href="{{ torrent.magnet_uri }}" class="card-footer-item"><i class="fa fa-magnet fa-fw"></i>Magnet</a> </div> </div> <div class="panel panel-default"> <div class="panel-body" id="torrent-description"> {% if torrent.description %} {# Escape newlines into html entities because CF strips blank newlines #} {{ torrent.description | escape | replace('\r\n', '\n') | replace('\n', ' '|safe) }} {% else %} #### No description. {% endif%} </div> </div> {% if files and files.__len__() <= config.MAX_FILES_VIEW %} <div class="panel panel-default"> <div class="panel-heading"> <h3 class="panel-title">File list</h3> </div> <div class="torrent-file-list panel-body"> <ul> {% for key, value in files.items() recursive -%} {% if value is iterable %} {% set pre_expanded = not loop.depth0 and value.items()|length <= 20 %} <li> <a href="" class="folder"><i class="fa fa-folder{% if pre_expanded %}-open{% endif %}"></i>{{ key }}</a> <ul{% if pre_expanded %} data-show="yes"{% endif %}>{{ '\n' + loop(value.items()) }} </ul> </li> {% else %} <li><i class="fa fa-file"></i>{{ key }} <span class="file-size">({{ value | filesizeformat(True) }})</span></a></li> {% endif %} {% endfor %} </ul> </div> </div> {% elif files %} <div class="panel panel-default"> <div class="panel-heading panel-heading-collapse"> <h3 class="panel-title"> Too many files to display. </h3> </div> </div> {% else %} <div class="panel panel-default"> <div class="panel-heading panel-heading-collapse"> <h3 class="panel-title"> File list is not available for this torrent. </h3> </div> </div> {% endif %} <div class="panel panel-default"> <div class="panel-heading"> <h3 class="panel-title"> Comments - {{ comments | length }} </h3> </div> {% for comment in comments %} <div class="panel panel-default comment-panel" id="com-{{ loop.index }}"> <div class="panel-body"> <div class="col-md-2"> <p> <a class="text-{{ comment.user.userlevel_color }}" href="{{ url_for('view_user', user_name=comment.user.username) }}">{{ comment.user.username }}</a> {% if comment.user.id == torrent.uploader_id and not torrent.anonymous %} (uploader) {% endif %} </p> <p><img class="avatar" src="{{ comment.user.gravatar_url() }}" alt="{{ comment.user.userlevel_str }}"></p> </div> <div class="col-md-10"> <div class="row"> <a href="#com-{{ loop.index }}"><small data-timestamp-swap data-timestamp="{{ comment.created_utc_timestamp|int }}">{{ comment.created_time.strftime('%Y-%m-%d %H:%M UTC') }}</small></a> {% if g.user.is_moderator or g.user.id == comment.user_id %} <form class="delete-comment-form" action="{{ url_for('delete_comment', torrent_id=torrent.id, comment_id=comment.id) }}" method="POST"> <button name="submit" type="submit" class="btn btn-danger btn-xs" title="Delete">Delete</button> </form> {% endif %} </div> <div class="row"> {# Escape newlines into html entities because CF strips blank newlines #} <div class="comment-content" id="torrent-comment{{ comment.id }}">{{ comment.text }}</div> </div> </div> </div> </div> <script type="text/javascript"> var target = document.getElementById('torrent-comment{{ comment.id }}'); var text = target.innerHTML; var reader = new commonmark.Parser({safe: true}); var writer = new commonmark.HtmlRenderer({safe: true, softbreak: '<br />'}); var parsed = reader.parse(text.trim()); target.innerHTML = writer.render(parsed); </script> {% endfor %} {% if comment_form %} <form class="comment-box" method="POST"> {{ comment_form.csrf_token }} {{ render_field(comment_form.comment, class_='form-control') }} <input type="submit" value="Submit" class="btn btn-success btn-sm"> </form> {% endif %} </div> <script> var target = document.getElementById('torrent-description'); var text = target.innerHTML; var reader = new commonmark.Parser({safe: true}); var writer = new commonmark.HtmlRenderer({safe: true, softbreak: '<br />'}); var parsed = reader.parse(text.trim()); target.innerHTML = writer.render(parsed); </script> {% endblock %}