Add a button to I-D and RFC pages that provides a citation in bibtex format for
the document. Commit ready for merge. - Legacy-Id: 10529
This commit is contained in:
parent
95e2147f73
commit
29f021d7f4
|
@ -45,7 +45,7 @@ urlpatterns = patterns('',
|
|||
url(r'^ad/(?P<name>[\w.-]+)/$(?u)', views_search.docs_for_ad, name="docs_for_ad"),
|
||||
(r'^ad2/(?P<name>[\w.-]+)/$(?u)', RedirectView.as_view(url='/doc/ad/%(name)s/', permanent=True)),
|
||||
url(r'^rfc-status-changes/$', views_status_change.rfc_status_changes, name='rfc_status_changes'),
|
||||
url(r'^start-rfc-status-change/(?P<name>[A-Za-z0-9._+-]*)$', views_status_change.start_rfc_status_change, name='start_rfc_status_change'),
|
||||
url(r'^start-rfc-status-change/(?P<name>[A-Za-z0-9._+-]*)$', views_status_change.start_rfc_status_change, name='start_rfc_status_change'),
|
||||
url(r'^iesg/(?P<last_call_only>[A-Za-z0-9.-]+/)?$', views_search.drafts_in_iesg_process, name="drafts_in_iesg_process"),
|
||||
url(r'^email-aliases/$', views_doc.email_aliases),
|
||||
|
||||
|
@ -54,6 +54,7 @@ urlpatterns = patterns('',
|
|||
url(r'^select2search/(?P<model_name>(document|docalias))/(?P<doc_type>draft)/$', views_search.ajax_select2_search_docs, name="ajax_select2_search_docs"),
|
||||
|
||||
url(r'^(?P<name>[A-Za-z0-9._+-]+)/(?:(?P<rev>[0-9-]+)/)?$', views_doc.document_main, name="doc_view"),
|
||||
url(r'^(?P<name>[A-Za-z0-9._+-]+)/(?:(?P<rev>[0-9-]+)/)?bibtex/$', views_doc.document_bibtex, name="doc_bibtex"),
|
||||
url(r'^(?P<name>[A-Za-z0-9._+-]+)/history/$', views_doc.document_history, name="doc_history"),
|
||||
url(r'^(?P<name>[A-Za-z0-9._+-]+)/writeup/$', views_doc.document_writeup, name="doc_writeup"),
|
||||
url(r'^(?P<name>[A-Za-z0-9._+-]+)/email/$', views_doc.document_email, name="doc_email"),
|
||||
|
@ -73,8 +74,8 @@ urlpatterns = patterns('',
|
|||
url(r'^(?P<name>[A-Za-z0-9._+-]+)/edit/state/(?P<state_type>iana-action|iana-review)/$', views_draft.change_iana_state, name='doc_change_iana_state'),
|
||||
url(r'^(?P<name>[A-Za-z0-9._+-]+)/edit/info/$', views_draft.edit_info, name='doc_edit_info'),
|
||||
url(r'^(?P<name>[A-Za-z0-9._+-]+)/edit/requestresurrect/$', views_draft.request_resurrect, name='doc_request_resurrect'),
|
||||
url(r'^(?P<name>[A-Za-z0-9._+-]+)/edit/submit-to-iesg/$', views_draft.to_iesg, name='doc_to_iesg'),
|
||||
url(r'^(?P<name>[A-Za-z0-9._+-]+)/edit/resurrect/$', views_draft.resurrect, name='doc_resurrect'),
|
||||
url(r'^(?P<name>[A-Za-z0-9._+-]+)/edit/submit-to-iesg/$', views_draft.to_iesg, name='doc_to_iesg'),
|
||||
url(r'^(?P<name>[A-Za-z0-9._+-]+)/edit/resurrect/$', views_draft.resurrect, name='doc_resurrect'),
|
||||
url(r'^(?P<name>[A-Za-z0-9._+-]+)/edit/addcomment/$', views_doc.add_comment, name='doc_add_comment'),
|
||||
url(r'^ajax/internet_draft/?$', views_draft.doc_ajax_internet_draft, name="doc_ajax_internet_draft"),
|
||||
|
||||
|
|
|
@ -58,7 +58,7 @@ from ietf.name.models import StreamName, BallotPositionName
|
|||
from ietf.person.models import Email
|
||||
from ietf.utils.history import find_history_active_at
|
||||
from ietf.doc.forms import TelechatForm, NotifyForm
|
||||
from ietf.doc.mails import email_comment
|
||||
from ietf.doc.mails import email_comment
|
||||
from ietf.mailtrigger.utils import gather_relevant_expansions
|
||||
|
||||
def render_document_top(request, doc, tab, name):
|
||||
|
@ -101,7 +101,7 @@ def document_main(request, name, rev=None):
|
|||
|
||||
if doc.type_id == 'conflrev':
|
||||
conflictdoc = doc.related_that_doc('conflrev')[0].document
|
||||
|
||||
|
||||
revisions = []
|
||||
for h in doc.history_set.order_by("time", "id"):
|
||||
if h.rev and not h.rev in revisions:
|
||||
|
@ -233,6 +233,9 @@ def document_main(request, name, rev=None):
|
|||
# latest revision
|
||||
latest_revision = doc.latest_event(NewRevisionDocEvent, type="new_revision")
|
||||
|
||||
# bibtex
|
||||
file_urls.append(("bibtex", "bibtex"))
|
||||
|
||||
# ballot
|
||||
ballot_summary = None
|
||||
if iesg_state and iesg_state.slug in IESG_BALLOT_ACTIVE_STATES:
|
||||
|
@ -281,7 +284,7 @@ def document_main(request, name, rev=None):
|
|||
if doc.stream_id == "ietf" and iesg_state:
|
||||
show_in_states = set(IESG_BALLOT_ACTIVE_STATES)
|
||||
show_in_states.update(('approved','ann','rfcqueue','pub'))
|
||||
if iesg_state.slug in show_in_states:
|
||||
if iesg_state.slug in show_in_states:
|
||||
can_edit_consensus = can_edit
|
||||
e = doc.latest_event(ConsensusDocEvent, type="changed_consensus")
|
||||
consensus = nice_consensus(e and e.consensus)
|
||||
|
@ -463,7 +466,7 @@ def document_main(request, name, rev=None):
|
|||
if doc.rev == "00" and not os.path.isfile(pathname):
|
||||
# This could move to a template
|
||||
content = "A conflict review response has not yet been proposed."
|
||||
else:
|
||||
else:
|
||||
content = get_document_content(filename, pathname, split=False, markup=True)
|
||||
|
||||
ballot_summary = None
|
||||
|
@ -491,13 +494,13 @@ def document_main(request, name, rev=None):
|
|||
if doc.rev == "00" and not os.path.isfile(pathname):
|
||||
# This could move to a template
|
||||
content = "Status change text has not yet been proposed."
|
||||
else:
|
||||
else:
|
||||
content = get_document_content(filename, pathname, split=False)
|
||||
|
||||
ballot_summary = None
|
||||
if doc.get_state_slug() in ("iesgeval"):
|
||||
ballot_summary = needed_ballot_positions(doc, doc.active_ballot().active_ad_positions().values())
|
||||
|
||||
|
||||
if isinstance(doc,Document):
|
||||
sorted_relations=doc.relateddocument_set.all().order_by('relationship__name')
|
||||
elif isinstance(doc,DocHistory):
|
||||
|
@ -590,7 +593,7 @@ def document_email(request,name):
|
|||
aliases = get_doc_email_aliases(name) if doc.type_id=='draft' else None
|
||||
|
||||
expansions = gather_relevant_expansions(doc=doc)
|
||||
|
||||
|
||||
return render(request, "doc/document_email.html",
|
||||
dict(doc=doc,
|
||||
top=top,
|
||||
|
@ -665,6 +668,32 @@ def document_history(request, name):
|
|||
),
|
||||
context_instance=RequestContext(request))
|
||||
|
||||
|
||||
def document_bibtex(request, name, rev=None):
|
||||
doc = get_object_or_404(Document, docalias__name=name)
|
||||
|
||||
latest_revision = doc.latest_event(NewRevisionDocEvent, type="new_revision")
|
||||
replaced_by = [d.name for d in doc.related_that("replaces")]
|
||||
published = doc.latest_event(type="published_rfc")
|
||||
rfc = latest_revision.doc if latest_revision.doc.get_state_slug() == "rfc" else None
|
||||
|
||||
if rev != None and rev != doc.rev:
|
||||
# find the entry in the history
|
||||
for h in doc.history_set.order_by("-time"):
|
||||
if rev == h.rev:
|
||||
doc = h
|
||||
break
|
||||
|
||||
return render_to_response("doc/document_bibtex.bib",
|
||||
dict(doc=doc,
|
||||
replaced_by=replaced_by,
|
||||
published=published,
|
||||
rfc=rfc,
|
||||
latest_revision=latest_revision),
|
||||
content_type="text/plain; charset=utf-8",
|
||||
context_instance=RequestContext(request))
|
||||
|
||||
|
||||
def document_writeup(request, name):
|
||||
doc = get_object_or_404(Document, docalias__name=name)
|
||||
top = render_document_top(request, doc, "writeup", name)
|
||||
|
@ -921,7 +950,7 @@ def add_comment(request, name):
|
|||
form = AddCommentForm(request.POST)
|
||||
if form.is_valid():
|
||||
c = form.cleaned_data['comment']
|
||||
|
||||
|
||||
e = DocEvent(doc=doc, by=login)
|
||||
e.type = "added_comment"
|
||||
e.desc = c
|
||||
|
@ -932,7 +961,7 @@ def add_comment(request, name):
|
|||
return redirect("doc_history", name=doc.name)
|
||||
else:
|
||||
form = AddCommentForm()
|
||||
|
||||
|
||||
return render_to_response('doc/add_comment.html',
|
||||
dict(doc=doc,
|
||||
form=form),
|
||||
|
@ -1035,7 +1064,7 @@ def email_aliases(request,name=''):
|
|||
doc = get_object_or_404(Document, name=name) if name else None
|
||||
if not name:
|
||||
# require login for the overview page, but not for the
|
||||
# document-specific pages
|
||||
# document-specific pages
|
||||
if not request.user.is_authenticated():
|
||||
return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
|
||||
aliases = get_doc_email_aliases(name)
|
||||
|
|
31
ietf/templates/doc/document_bibtex.bib
Normal file
31
ietf/templates/doc/document_bibtex.bib
Normal file
|
@ -0,0 +1,31 @@
|
|||
{% spaceless %}
|
||||
|
||||
{% load ietf_filters %}
|
||||
|
||||
{% if doc.get_state_slug == "rfc" %}
|
||||
@misc{% templatetag openbrace %}rfc{{ doc.rfc_number }},
|
||||
series = {Request for Comments},
|
||||
number= {{ doc.rfc_number }},
|
||||
howpublished= {% templatetag openbrace %}{{ doc.stream }} RFC {{ doc.rfc_number }} ({{ doc.intended_std_level }}){% templatetag closebrace %},
|
||||
publisher = {RFC Editor},
|
||||
doi = {% templatetag openbrace %}10.17487/rfc{{ doc.rfc_number }}{% templatetag closebrace %},
|
||||
url = {https://rfc-editor.org/rfc/rfc{{ doc.rfc_number }}.txt},{% else %}
|
||||
{% if published %}%% You should probably cite rfc{{ latest_revision.doc.rfc_number }} instead of this I-D.{% else %}{% if replaced_by %}%% You should probably cite {{replaced_by|join:" or "}} instead of this I-D.{% else %}
|
||||
{% if doc.rev != latest_revision.rev %}%% You should probably cite {{latest_revision.doc.name}}-{{latest_revision.rev}} instead of this revision.{%endif%}{% endif %}{% endif %}
|
||||
@techreport{% templatetag openbrace %}{{doc.name|slice:"6:"}}-{{doc.rev}},
|
||||
number= {% templatetag openbrace %}{{doc.name}}-{{doc.rev}}{% templatetag closebrace %},
|
||||
type = {% templatetag openbrace %}Internet-Draft{% templatetag closebrace %},
|
||||
institution = {% templatetag openbrace %}Internet Engineering Task Force{% templatetag closebrace %},
|
||||
publisher = {% templatetag openbrace %}Internet Engineering Task Force{% templatetag closebrace %},
|
||||
note = {% templatetag openbrace %}Work in Progress{% templatetag closebrace %},
|
||||
url = {% templatetag openbrace %}https://tools.ietf.org/html/{{doc.name}}-{{doc.rev}}{% templatetag closebrace %},{% endif %}
|
||||
author= {% templatetag openbrace %}{% for entry in doc.authors.all %}{% with entry.person as author %}{{author.name}}{% endwith %}{% if not forloop.last %} and {% endif %}{% endfor %}{% templatetag closebrace %},
|
||||
title= {% templatetag openbrace %}{% templatetag openbrace %}{{doc.title}}{% templatetag closebrace %}{% templatetag closebrace %},
|
||||
pagetotal = {{ doc.pages }},
|
||||
year = {{ doc.time.year }},
|
||||
month = {{ doc.time|date:"b" }},
|
||||
day = {{ doc.time.day }},
|
||||
abstract = {% templatetag openbrace %}{{ doc.abstract|clean_whitespace }}{% templatetag closebrace %},
|
||||
{% templatetag closebrace %}
|
||||
|
||||
{% endspaceless %}
|
Loading…
Reference in a new issue