Display htmlized pages much more like tools.ietf.org. Commit ready for merge.
- Legacy-Id: 18869
This commit is contained in:
commit
b075c2dca8
|
@ -677,7 +677,7 @@ Man Expires September 22, 2015 [Page 3]
|
|||
q = PyQuery(r.content)
|
||||
self.assertEqual(len(q('.rfcmarkup pre')), 4)
|
||||
self.assertEqual(len(q('.rfcmarkup span.h1')), 2)
|
||||
self.assertEqual(len(q('.rfcmarkup a[href]')), 31)
|
||||
self.assertEqual(len(q('.rfcmarkup a[href]')), 41)
|
||||
|
||||
r = self.client.get(urlreverse("ietf.doc.views_doc.document_html", kwargs=dict(name=draft.name, rev=draft.rev)))
|
||||
self.assertEqual(r.status_code, 200)
|
||||
|
|
|
@ -934,6 +934,81 @@ def join_justified(left, right, width=72):
|
|||
break
|
||||
return lines
|
||||
|
||||
def build_file_urls(doc):
|
||||
if doc.get_state_slug() == "rfc":
|
||||
name = doc.canonical_name()
|
||||
base_path = os.path.join(settings.RFC_PATH, name + ".")
|
||||
possible_types = settings.RFC_FILE_TYPES
|
||||
found_types = [t for t in possible_types if os.path.exists(base_path + t)]
|
||||
|
||||
base = "https://www.rfc-editor.org/rfc/"
|
||||
|
||||
file_urls = []
|
||||
for t in found_types:
|
||||
label = "plain text" if t == "txt" else t
|
||||
file_urls.append((label, base + name + "." + t))
|
||||
|
||||
if "pdf" not in found_types and "txt" in found_types:
|
||||
file_urls.append(("pdf", base + "pdfrfc/" + name + ".txt.pdf"))
|
||||
|
||||
if "txt" in found_types:
|
||||
file_urls.append(("htmlized", settings.TOOLS_ID_HTML_URL + name))
|
||||
if doc.tags.filter(slug="verified-errata").exists():
|
||||
file_urls.append(("with errata", settings.RFC_EDITOR_INLINE_ERRATA_URL.format(rfc_number=doc.rfc_number())))
|
||||
file_urls.append(("bibtex", urlreverse('ietf.doc.views_doc.document_main',kwargs=dict(name=name))+"bibtex"))
|
||||
else:
|
||||
base_path = os.path.join(settings.INTERNET_DRAFT_PATH, doc.name + "-" + doc.rev + ".")
|
||||
possible_types = settings.IDSUBMIT_FILE_TYPES
|
||||
found_types = [t for t in possible_types if os.path.exists(base_path + t)]
|
||||
base = settings.IETF_ID_ARCHIVE_URL
|
||||
file_urls = []
|
||||
for t in found_types:
|
||||
label = "plain text" if t == "txt" else t
|
||||
file_urls.append((label, base + doc.name + "-" + doc.rev + "." + t))
|
||||
|
||||
if "pdf" not in found_types:
|
||||
file_urls.append(("pdf", settings.TOOLS_ID_PDF_URL + doc.name + "-" + doc.rev + ".pdf"))
|
||||
file_urls.append(("htmlized (tools)", settings.TOOLS_ID_HTML_URL + doc.name + "-" + doc.rev))
|
||||
file_urls.append(("htmlized", urlreverse('ietf.doc.views_doc.document_html', kwargs=dict(name=doc.name, rev=doc.rev))))
|
||||
file_urls.append(("bibtex", urlreverse('ietf.doc.views_doc.document_main',kwargs=dict(name=doc.name,rev=doc.rev))+"bibtex"))
|
||||
|
||||
return file_urls, found_types
|
||||
|
||||
def build_doc_supermeta_block(doc):
|
||||
items = []
|
||||
items.append(f'[<a href="{ settings.IDTRACKER_BASE_URL }" title="Document search and retrieval page">Search</a>]')
|
||||
|
||||
file_urls, found_types = build_file_urls(doc)
|
||||
file_urls = [('txt',url) if label=='plain text' else (label,url) for label,url in file_urls]
|
||||
|
||||
if file_urls:
|
||||
file_labels = {
|
||||
'txt' : 'Plaintext version of this document',
|
||||
'xml' : 'XML source for this document',
|
||||
'pdf' : 'PDF version of this document',
|
||||
'html' : 'HTML version of this document, from XML2RFC',
|
||||
'bibtex' : 'BibTex entry for this document',
|
||||
}
|
||||
parts=[]
|
||||
for label,url in file_urls:
|
||||
if 'htmlized' not in label:
|
||||
file_label=file_labels.get(label,'')
|
||||
title_attribute = f' title="{file_label}"' if file_label else ''
|
||||
partstring = f'<a href="{url}"{title_attribute}>{label}</a>'
|
||||
parts.append(partstring)
|
||||
items.append('[' + '|'.join(parts) + ']')
|
||||
|
||||
items.append(f'[<a href="{ urlreverse("ietf.doc.views_doc.document_main",kwargs=dict(name=doc.canonical_name())) }" title="Datatracker information for this document">Tracker</a>]')
|
||||
if doc.group.acronym != 'none':
|
||||
items.append(f'[<a href="{urlreverse("ietf.group.views.group_home",kwargs=dict(acronym=doc.group.acronym))}" title="The working group handling this document">WG</a>]')
|
||||
items.append(f'[<a href="mailto:{doc.name}@ietf.org?subject={doc.name}" title="Send email to the document authors">Email</a>]')
|
||||
if doc.rev != "00":
|
||||
items.append(f'[<a href="{settings.RFCDIFF_BASE_URL}?difftype=--hwdiff&url2={doc.name}-{doc.rev}.txt" title="Inline diff (wdiff)">Diff1</a>]')
|
||||
items.append(f'[<a href="{settings.RFCDIFF_BASE_URL}?url2={doc.name}-{doc.rev}.txt" title="Side-by-side diff">Diff2</a>]')
|
||||
items.append(f'[<a href="{settings.IDNITS_BASE_URL}?url={settings.IETF_ID_ARCHIVE_URL}{doc.name}-{doc.rev}.txt" title="Run an idnits check of this document">Nits</a>]')
|
||||
|
||||
return ' '.join(items)
|
||||
|
||||
def build_doc_meta_block(doc, path):
|
||||
def add_markup(path, doc, lines):
|
||||
is_hst = doc.is_dochistory()
|
||||
|
|
|
@ -60,7 +60,7 @@ from ietf.doc.utils import (add_links_in_new_revision_events, augment_events_wit
|
|||
needed_ballot_positions, nice_consensus, prettify_std_name, update_telechat, has_same_ballot,
|
||||
get_initial_notify, make_notify_changed_event, make_rev_history, default_consensus,
|
||||
add_events_message_info, get_unicode_document_content, build_doc_meta_block,
|
||||
augment_docs_and_user_with_user_info, irsg_needed_ballot_positions, add_action_holder_change_event )
|
||||
augment_docs_and_user_with_user_info, irsg_needed_ballot_positions, add_action_holder_change_event, build_doc_supermeta_block, build_file_urls )
|
||||
from ietf.group.models import Role, Group
|
||||
from ietf.group.utils import can_manage_group_type, can_manage_materials, group_features_role_filter
|
||||
from ietf.ietfauth.utils import ( has_role, is_authorized_in_doc_stream, user_is_person,
|
||||
|
@ -210,31 +210,12 @@ def document_main(request, name, rev=None):
|
|||
|
||||
latest_revision = None
|
||||
|
||||
file_urls, found_types = build_file_urls(doc)
|
||||
|
||||
content = doc.text_or_error() # pyflakes:ignore
|
||||
content = markup_txt.markup(maybe_split(content, split=split_content))
|
||||
|
||||
if doc.get_state_slug() == "rfc":
|
||||
# content
|
||||
content = doc.text_or_error() # pyflakes:ignore
|
||||
content = markup_txt.markup(maybe_split(content, split=split_content))
|
||||
|
||||
# file types
|
||||
base_path = os.path.join(settings.RFC_PATH, name + ".")
|
||||
possible_types = settings.RFC_FILE_TYPES
|
||||
found_types = [t for t in possible_types if os.path.exists(base_path + t)]
|
||||
|
||||
base = "https://www.rfc-editor.org/rfc/"
|
||||
|
||||
file_urls = []
|
||||
for t in found_types:
|
||||
label = "plain text" if t == "txt" else t
|
||||
file_urls.append((label, base + name + "." + t))
|
||||
|
||||
if "pdf" not in found_types and "txt" in found_types:
|
||||
file_urls.append(("pdf", base + "pdfrfc/" + name + ".txt.pdf"))
|
||||
|
||||
if "txt" in found_types:
|
||||
file_urls.append(("htmlized", settings.TOOLS_ID_HTML_URL + name))
|
||||
if doc.tags.filter(slug="verified-errata").exists():
|
||||
file_urls.append(("with errata", settings.RFC_EDITOR_INLINE_ERRATA_URL.format(rfc_number=rfc_number)))
|
||||
|
||||
if not found_types:
|
||||
content = "This RFC is not currently available online."
|
||||
split_content = False
|
||||
|
@ -242,37 +223,8 @@ def document_main(request, name, rev=None):
|
|||
content = "This RFC is not available in plain text format."
|
||||
split_content = False
|
||||
else:
|
||||
content = doc.text_or_error() # pyflakes:ignore
|
||||
content = markup_txt.markup(maybe_split(content, split=split_content))
|
||||
|
||||
# file types
|
||||
base_path = os.path.join(settings.INTERNET_DRAFT_PATH, doc.name + "-" + doc.rev + ".")
|
||||
possible_types = settings.IDSUBMIT_FILE_TYPES
|
||||
found_types = [t for t in possible_types if os.path.exists(base_path + t)]
|
||||
|
||||
# if not snapshot and doc.get_state_slug() == "active":
|
||||
# base = settings.IETF_ID_URL
|
||||
# else:
|
||||
# base = settings.IETF_ID_ARCHIVE_URL
|
||||
base = settings.IETF_ID_ARCHIVE_URL
|
||||
|
||||
file_urls = []
|
||||
for t in found_types:
|
||||
label = "plain text" if t == "txt" else t
|
||||
file_urls.append((label, base + doc.name + "-" + doc.rev + "." + t))
|
||||
|
||||
if "pdf" not in found_types:
|
||||
file_urls.append(("pdf", settings.TOOLS_ID_PDF_URL + doc.name + "-" + doc.rev + ".pdf"))
|
||||
#file_urls.append(("htmlized", settings.TOOLS_ID_HTML_URL + doc.name + "-" + doc.rev))
|
||||
file_urls.append(("htmlized (tools)", settings.TOOLS_ID_HTML_URL + doc.name + "-" + doc.rev))
|
||||
file_urls.append(("htmlized", urlreverse('ietf.doc.views_doc.document_html', kwargs=dict(name=doc.name, rev=doc.rev))))
|
||||
|
||||
# latest revision
|
||||
latest_revision = doc.latest_event(NewRevisionDocEvent, type="new_revision")
|
||||
|
||||
# bibtex
|
||||
file_urls.append(("bibtex", "bibtex"))
|
||||
|
||||
# ballot
|
||||
iesg_ballot_summary = None
|
||||
irsg_ballot_summary = None
|
||||
|
@ -707,7 +659,6 @@ def document_html(request, name, rev=None):
|
|||
if not os.path.exists(doc.get_file_name()):
|
||||
raise Http404("File not found: %s" % doc.get_file_name())
|
||||
|
||||
top = render_document_top(request, doc, "status", name)
|
||||
if not rev and not name.startswith('rfc'):
|
||||
rev = doc.rev
|
||||
if rev:
|
||||
|
@ -717,9 +668,29 @@ def document_html(request, name, rev=None):
|
|||
else:
|
||||
doc = doc.fake_history_obj(rev)
|
||||
if doc.type_id in ['draft',]:
|
||||
doc.supermeta = build_doc_supermeta_block(doc)
|
||||
doc.meta = build_doc_meta_block(doc, settings.HTMLIZER_URL_PREFIX)
|
||||
|
||||
return render(request, "doc/document_html.html", {"doc":doc, "top":top, "navbar_mode":"navbar-static-top", })
|
||||
doccolor = 'bgwhite' # Unknown
|
||||
if doc.type_id=='draft':
|
||||
if doc.is_rfc():
|
||||
if doc.related_that('obs'):
|
||||
doccolor = 'bgbrown'
|
||||
else:
|
||||
doccolor = {
|
||||
'ps' : 'bgblue',
|
||||
'exp' : 'bgyellow',
|
||||
'inf' : 'bgorange',
|
||||
'ds' : 'bgcyan',
|
||||
'hist' : 'bggrey',
|
||||
'std' : 'bggreen',
|
||||
'bcp' : 'bgmagenta',
|
||||
'unkn' : 'bgwhite',
|
||||
}.get(doc.std_level_id, 'bgwhite')
|
||||
else:
|
||||
doccolor = 'bgred' # Draft
|
||||
|
||||
return render(request, "doc/document_html.html", {"doc":doc, "doccolor":doccolor })
|
||||
|
||||
def check_doc_email_aliases():
|
||||
pattern = re.compile(r'^expand-(.*?)(\..*?)?@.*? +(.*)$')
|
||||
|
|
|
@ -549,6 +549,7 @@ INTERNAL_IPS = (
|
|||
# no slash at end
|
||||
IDTRACKER_BASE_URL = "https://datatracker.ietf.org"
|
||||
RFCDIFF_BASE_URL = "https://www.ietf.org/rfcdiff"
|
||||
IDNITS_BASE_URL = "https://www.ietf.org/tools/idnits"
|
||||
|
||||
# The name of the method to use to invoke the test suite
|
||||
TEST_RUNNER = 'ietf.utils.test_runner.IetfTestRunner'
|
||||
|
|
|
@ -675,7 +675,7 @@
|
|||
<a class="btn btn-default btn-xs" href="{% url "ietf.ipr.views.search" %}?submit=draft&id={{ doc.name }}" rel="nofollow"><span class="fa fa-bolt"></span> IPR {% if doc.related_ipr %} <span class="badge">{{doc.related_ipr|length}}</span>{% endif %}</a>
|
||||
<a class="btn btn-default btn-xs" href="{% url 'ietf.doc.views_doc.document_references' doc.canonical_name %}" rel="nofollow"><span class="fa fa-long-arrow-left"></span> References</a>
|
||||
<a class="btn btn-default btn-xs" href="{% url 'ietf.doc.views_doc.document_referenced_by' doc.canonical_name %}" rel="nofollow"><span class="fa fa-long-arrow-right"></span> Referenced by</a>
|
||||
<a class="btn btn-default btn-xs" href="https://www.ietf.org/tools/idnits?url=https://www.ietf.org/archive/id/{{ doc.filename_with_rev }}" rel="nofollow" target="_blank"><span class="fa fa-exclamation"></span> Nits</a>
|
||||
<a class="btn btn-default btn-xs" href="{{settings.IDNITS_BASE_URL}}?url=https://www.ietf.org/archive/id/{{ doc.filename_with_rev }}" rel="nofollow" target="_blank"><span class="fa fa-exclamation"></span> Nits</a>
|
||||
<div class="dropdown inline">
|
||||
<button class="btn btn-default btn-xs dropdown-toggle" type="button" id="ddSearchMenu" data-toggle="dropdown" aria-expanded="true">
|
||||
<span class="fa fa-search"></span> Search lists <span class="caret"></span>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "doc/htmlized_base.html" %}
|
||||
{# Copyright The IETF Trust 2016, All Rights Reserved #}
|
||||
{% load origin %}
|
||||
{% load static %}
|
||||
|
@ -12,7 +12,20 @@
|
|||
{% endblock %}
|
||||
|
||||
{% block morecss %}
|
||||
.inline { display: inline; }
|
||||
|
||||
.bgwhite { background-color: white; }
|
||||
.bgred { background-color: #F44; }
|
||||
.bggrey { background-color: #666; }
|
||||
.bgbrown { background-color: #840; }
|
||||
.bgorange { background-color: #FA0; }
|
||||
.bgyellow { background-color: #EE0; }
|
||||
.bgmagenta{ background-color: #F4F; }
|
||||
.bgblue { background-color: #66F; }
|
||||
.bgcyan { background-color: #4DD; }
|
||||
.bggreen { background-color: #4F4; }
|
||||
|
||||
.draftcontent { margin-top:0px !important;}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block title %}
|
||||
|
@ -23,43 +36,80 @@
|
|||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block bodyAttrs %}style="padding-top: 0;"{% endblock %}
|
||||
{% block bodyAttrs %}onload="addHeaderTags()" style="padding-top: 0;"{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{% origin %}
|
||||
<div class="hidden-print">
|
||||
{{ top | safe }}
|
||||
</div>
|
||||
|
||||
<div class="rfcmarkup">
|
||||
<div class="noprint" style="height: 6px;">
|
||||
<div onmouseover="this.style.cursor='pointer';"
|
||||
onclick="showElem('legend');"
|
||||
onmouseout="hideElem('legend')"
|
||||
style="height: 6px; min-height: 6px; width: 96ex; position: absolute; margin-top:0; "
|
||||
class="meta-info {{doccolor}}"
|
||||
title="Click for colour legend." > </div>
|
||||
<div id="legend"
|
||||
class="meta-info noprint pre legend"
|
||||
style="position:absolute; top: 4px; left: 4ex; visibility:hidden; background-color: white; padding: 4px 9px 5px 7px; border: solid #345 1px; "
|
||||
onmouseover="showElem('legend');"
|
||||
onmouseout="hideElem('legend');">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{# {% include "doc/revisions_list.html" %} #}
|
||||
<div class="col-md-2"></div>
|
||||
<div class="col-md-8 rfcmarkup">
|
||||
{% if doc.meta %}
|
||||
<div class="hidden-print">
|
||||
<pre class="meta-info">{{ doc.meta|safe }}</pre>
|
||||
<div class="noprint">
|
||||
<pre class="pre meta-info">{{ doc.supermeta|safe }}
|
||||
|
||||
{{ doc.meta|safe }}</pre>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% comment %}
|
||||
{% if doc.is_dochistory %}
|
||||
{% if doc.rev != doc.doc.rev %}
|
||||
<pre class="meta-info alert-warning text-center">A newer version of the document below exists</pre>
|
||||
{% elif doc.doc.is_rfc %}
|
||||
<pre class="meta-info alert-info text-center">The draft below has been published as <a href="{% url 'ietf.doc.views_doc.document_html' name=doc.doc.canonical_name %}">RFC {{doc.doc.rfc_number}}</a></pre>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endcomment %}
|
||||
|
||||
<div>
|
||||
<div class="draftcontent">
|
||||
{{ doc.htmlized|default:"Generation of htmlized text failed"|safe }}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="col-md-1"></div>
|
||||
<div class="col-md-1"></div>
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block footer %}
|
||||
<div></div>
|
||||
{% block js %}
|
||||
<script type="text/javascript"><!--
|
||||
function addHeaderTags() {
|
||||
var spans = document.getElementsByTagName("span");
|
||||
for (var i=0; i < spans.length; i++) {
|
||||
var elem = spans[i];
|
||||
if (elem) {
|
||||
var level = elem.getAttribute("class");
|
||||
if (level == "h1" || level == "h2" || level == "h3" || level == "h4" || level == "h5" || level == "h6") {
|
||||
elem.innerHTML = "<"+level+">"+elem.innerHTML+"</"+level+">";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
var legend_html = "Colour legend:<br /> \
|
||||
<table> \
|
||||
<tr><td>Unknown:</td> <td><span class='cplate bgwhite'> </span></td></tr> \
|
||||
<tr><td>Draft:</td> <td><span class='cplate bgred'> </span></td></tr> \
|
||||
<tr><td>Informational:</td> <td><span class='cplate bgorange'> </span></td></tr> \
|
||||
<tr><td>Experimental:</td> <td><span class='cplate bgyellow'> </span></td></tr> \
|
||||
<tr><td>Best Common Practice:</td> <td><span class='cplate bgmagenta'> </span></td></tr> \
|
||||
<tr><td>Proposed Standard:</td> <td><span class='cplate bgblue'> </span></td></tr> \
|
||||
<tr><td>Draft Standard (old designation):</td> <td><span class='cplate bgcyan'> </span></td></tr> \
|
||||
<tr><td>Internet Standard:</td> <td><span class='cplate bggreen'> </span></td></tr> \
|
||||
<tr><td>Historic:</td> <td><span class='cplate bggrey'> </span></td></tr> \
|
||||
<tr><td>Obsolete:</td> <td><span class='cplate bgbrown'> </span></td></tr> \
|
||||
</table>";
|
||||
function showElem(id) {
|
||||
var elem = document.getElementById(id);
|
||||
elem.innerHTML = eval(id+"_html");
|
||||
elem.style.visibility='visible';
|
||||
}
|
||||
function hideElem(id) {
|
||||
var elem = document.getElementById(id);
|
||||
elem.style.visibility='hidden';
|
||||
elem.innerHTML = "";
|
||||
}
|
||||
// -->
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
|
161
ietf/templates/doc/htmlized_base.html
Normal file
161
ietf/templates/doc/htmlized_base.html
Normal file
|
@ -0,0 +1,161 @@
|
|||
<!DOCTYPE html> {% load ietf_filters static %}
|
||||
{# Copyright The IETF Trust 2021, All Rights Reserved #}
|
||||
{% load origin %}{% origin %}
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<title>{% block title %}No title{% endblock %}</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<style>
|
||||
|
||||
@media only screen
|
||||
and (min-width: 992px)
|
||||
and (max-width: 1199px) {
|
||||
body { font-size: 14pt; }
|
||||
div.content { width: 96ex; margin: 0 auto; }
|
||||
}
|
||||
@media only screen
|
||||
and (min-width: 768px)
|
||||
and (max-width: 991px) {
|
||||
body { font-size: 14pt; }
|
||||
div.content { width: 96ex; margin: 0 auto; }
|
||||
}
|
||||
@media only screen
|
||||
and (min-width: 480px)
|
||||
and (max-width: 767px) {
|
||||
body { font-size: 11pt; }
|
||||
div.content { width: 96ex; margin: 0 auto; }
|
||||
}
|
||||
@media only screen
|
||||
and (max-width: 479px) {
|
||||
body { font-size: 8pt; }
|
||||
div.content { width: 96ex; margin: 0 auto; }
|
||||
}
|
||||
@media only screen
|
||||
and (min-device-width : 375px)
|
||||
and (max-device-width : 667px) {
|
||||
body { font-size: 9.5pt; }
|
||||
div.content { width: 96ex; margin: 0; }
|
||||
}
|
||||
@media only screen
|
||||
and (min-device-width: 1200px) {
|
||||
body { font-size: 10pt; margin: 0 4em; }
|
||||
div.content { width: 96ex; margin: 0; }
|
||||
}
|
||||
h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 {
|
||||
font-weight: bold;
|
||||
/* line-height: 0pt; */
|
||||
display: inline;
|
||||
white-space: pre;
|
||||
font-family: monospace;
|
||||
font-size: 1em;
|
||||
font-weight: bold;
|
||||
}
|
||||
pre {
|
||||
font-size: 1em;
|
||||
margin-top: 0px;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
.pre {
|
||||
white-space: pre;
|
||||
font-family: monospace;
|
||||
}
|
||||
.header{
|
||||
font-weight: bold;
|
||||
}
|
||||
.newpage {
|
||||
page-break-before: always;
|
||||
}
|
||||
.invisible {
|
||||
text-decoration: none;
|
||||
color: white;
|
||||
}
|
||||
@media print {
|
||||
body {
|
||||
margin-top: 5em;
|
||||
font-family: monospace;
|
||||
font-size: 10.5pt;
|
||||
}
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
a:link, a:visited {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
.noprint {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
@media screen {
|
||||
.grey, .grey a:link, .grey a:visited {
|
||||
color: #777;
|
||||
}
|
||||
.meta-info {
|
||||
background-color: #EEE;
|
||||
}
|
||||
.top {
|
||||
border-top: 7px solid #EEE;
|
||||
}
|
||||
.pad {
|
||||
padding-top: 7px;
|
||||
line-height: 24px;
|
||||
padding-bottom: 4px;
|
||||
}
|
||||
.bgwhite { background-color: white; }
|
||||
.bgred { background-color: #F44; }
|
||||
.bggrey { background-color: #666; }
|
||||
.bgbrown { background-color: #840; }
|
||||
.bgorange { background-color: #FA0; }
|
||||
.bgyellow { background-color: #EE0; }
|
||||
.bgmagenta{ background-color: #F4F; }
|
||||
.bgblue { background-color: #66F; }
|
||||
.bgcyan { background-color: #4DD; }
|
||||
.bggreen { background-color: #4F4; }
|
||||
|
||||
.legend { font-size: 90%; }
|
||||
.cplate { font-size: 70%; border: solid grey 1px; }
|
||||
}
|
||||
|
||||
{% block morecss %}{% endblock %}
|
||||
</style>
|
||||
|
||||
<!--[if lt IE 9]>
|
||||
<script src="{% static 'html5shiv/html5shiv.min.js' %}"></script>
|
||||
<script src="{% static 'respond/dest/respond.min.js' %}"></script>
|
||||
<![endif]-->
|
||||
{% block pagehead %}{% endblock %}
|
||||
|
||||
{% if server_mode and server_mode == "production" %}
|
||||
<link rel="shortcut icon" href="{% static 'ietf/images/ietf-icon-blue3.png' %}">
|
||||
{% else %}
|
||||
<link rel="shortcut icon" href="{% static 'ietf/images/ietf-icon-red3.png' %}">
|
||||
{% endif %}
|
||||
<link rel="apple-touch-icon" href="{% static 'ietf/images/apple-touch-icon.png' %}">
|
||||
</head>
|
||||
|
||||
<body {% block bodyAttrs %}{%endblock%}>
|
||||
|
||||
<div class="content" id="content">
|
||||
{% block content %}{{ content|safe }}{% endblock %}
|
||||
{% block content_end %}{% endblock %}
|
||||
</div>
|
||||
|
||||
{% block footer %}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
</div>
|
||||
|
||||
{% comment %}
|
||||
<!-- Remove the *-nojs attributes if we are running js. This depends on jQuery's removeClass(): -->
|
||||
<!-- Do this as early as possible (after loading the page and jQuery) to avoid rendering changes -->
|
||||
{% endcomment %}
|
||||
<script>$(".visible-nojs").removeClass("visible-nojs");</script>
|
||||
<script>$(".hidden-nojs").removeClass("hidden-nojs");</script>
|
||||
{% block js %}{% endblock %}
|
||||
</body>
|
||||
</html>
|
||||
|
Loading…
Reference in a new issue