Rebase /personal/lars/5.6.4-facelift/ on trunk
- Legacy-Id: 8520
This commit is contained in:
commit
41cb195f52
25
README
Normal file
25
README
Normal file
|
@ -0,0 +1,25 @@
|
|||
This is the "facelift" datatracker branch that uses Twitter Bootstrap for
|
||||
the UI.
|
||||
|
||||
You need to install a few new django extensions:
|
||||
https://pypi.python.org/pypi/django-widget-tweaks
|
||||
https://pypi.python.org/pypi/django-bootstrap3
|
||||
https://pypi.python.org/pypi/django-typogrify
|
||||
|
||||
The meta goal of this effort is: *** NO CHANGES TO THE PYTHON CODE ***
|
||||
|
||||
Whenever changes to the python code are made, they can only fix HTML bugs,
|
||||
or add comments (tagged with "FACELIFT") about functionality that can be
|
||||
removed once the facelift templates become default. Or they need to add
|
||||
functionality that is only called from the new facelift templates.
|
||||
|
||||
Javascript that is only used on one template goes into that template.
|
||||
Javascript that is used by more than one template goes into ietf.js.
|
||||
|
||||
CSS that is only used on one template goes into that template.
|
||||
CSS that is used by more than one template goes into ietf.css. No CSS in the
|
||||
templates or - god forbid - style tags! (And no CSS or HTML styling in
|
||||
python code!!)
|
||||
|
||||
Templates that use jquery or bootstrap plugins include the css in the pagehead
|
||||
block, and the js in the js block.
|
11
TODO
Normal file
11
TODO
Normal file
|
@ -0,0 +1,11 @@
|
|||
Major pieces not facelifted: milestone editing, liaison editing, WG workflow customization
|
||||
|
||||
Use affix for navigation on active_wgs.html
|
||||
|
||||
Figure out why {% if debug %} does not work in the text templates under ietf/templates_facelift/community/public.
|
||||
|
||||
Make django generate HTML5 date inputs or use a js-based datepicker.
|
||||
|
||||
Deferring ballots does not work. (Seems to be an upstream bug.)
|
||||
|
||||
Make tables that are too wide to usefully work on small screens responsive. See http://getbootstrap.com/css/#tables-responsive
|
|
@ -1,5 +1,6 @@
|
|||
from django import template
|
||||
from django.template.loader import render_to_string
|
||||
from django.conf import settings
|
||||
|
||||
from ietf.community.models import CommunityList
|
||||
from ietf.group.models import Role
|
||||
|
@ -9,7 +10,7 @@ register = template.Library()
|
|||
|
||||
|
||||
class CommunityListNode(template.Node):
|
||||
|
||||
|
||||
def __init__(self, user, var_name):
|
||||
self.user = user
|
||||
self.var_name = var_name
|
||||
|
@ -57,13 +58,13 @@ def show_field(field, doc):
|
|||
|
||||
|
||||
class CommunityListViewNode(template.Node):
|
||||
|
||||
|
||||
def __init__(self, clist):
|
||||
self.clist = clist
|
||||
|
||||
def render(self, context):
|
||||
clist = self.clist.resolve(context)
|
||||
if not clist.cached:
|
||||
if settings.DEBUG or not clist.cached:
|
||||
clist.cached = render_to_string('community/raw_view.html',
|
||||
{'cl': clist,
|
||||
'dc': clist.get_display_config()})
|
||||
|
|
|
@ -87,35 +87,32 @@ def ballot_icon(context, doc):
|
|||
positions = list(doc.active_ballot().active_ad_positions().items())
|
||||
positions.sort(key=sort_key)
|
||||
|
||||
edit_position_url = ""
|
||||
if has_role(user, "Area Director"):
|
||||
edit_position_url = urlreverse('ietf.doc.views_ballot.edit_position', kwargs=dict(name=doc.name, ballot_id=ballot.pk))
|
||||
|
||||
title = "IESG positions (click to show more%s)" % (", right-click to edit position" if edit_position_url else "")
|
||||
|
||||
res = ['<a href="%s" data-popup="%s" data-edit="%s" title="%s" class="ballot-icon"><table>' % (
|
||||
urlreverse("doc_ballot", kwargs=dict(name=doc.name, ballot_id=ballot.pk)),
|
||||
res = ['<a href="%s" data-toggle="modal" data-target="#modal-%d" title="IESG positions (click to show more)" class="ballot-icon"><table>' % (
|
||||
urlreverse("ietf.doc.views_doc.ballot_popup", kwargs=dict(name=doc.name, ballot_id=ballot.pk)),
|
||||
edit_position_url,
|
||||
title
|
||||
)]
|
||||
ballot.pk)]
|
||||
|
||||
res.append("<tr>")
|
||||
|
||||
for i, (ad, pos) in enumerate(positions):
|
||||
if i > 0 and i % 5 == 0:
|
||||
res.append("</tr>")
|
||||
res.append("<tr>")
|
||||
res.append("</tr><tr>")
|
||||
|
||||
c = "position-%s" % (pos.pos.slug if pos else "norecord")
|
||||
|
||||
if user_is_person(user, ad):
|
||||
c += " my"
|
||||
|
||||
res.append('<td class="%s" />' % c)
|
||||
res.append('<td class="%s"></td>' % c)
|
||||
|
||||
res.append("</tr>")
|
||||
res.append("</table></a>")
|
||||
# add sufficient table calls to last row to avoid HTML validation warning
|
||||
while (i + 1) % 5 != 0:
|
||||
res.append('<td class="empty"></td>')
|
||||
i = i + 1
|
||||
|
||||
res.append("</tr></table></a>")
|
||||
# XXX FACELIFT: Loading via href will go away in bootstrap 4.
|
||||
# See http://getbootstrap.com/javascript/#modals-usage
|
||||
res.append('<div id="modal-%d" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true"><div class="modal-dialog modal-lg"><div class="modal-content"></div></div></div>' % ballot.pk)
|
||||
|
||||
return "".join(res)
|
||||
|
||||
|
@ -137,7 +134,8 @@ def ballotposition(doc, user):
|
|||
|
||||
|
||||
@register.filter
|
||||
def state_age_colored(doc):
|
||||
# FACELIFT: added flavor argument for styling
|
||||
def state_age_colored(doc, flavor=""):
|
||||
if doc.type_id == 'draft':
|
||||
if not doc.get_state_slug() in ["active", "rfc"]:
|
||||
# Don't show anything for expired/withdrawn/replaced drafts
|
||||
|
@ -156,7 +154,7 @@ def state_age_colored(doc):
|
|||
except IndexError:
|
||||
state_date = datetime.date(1990,1,1)
|
||||
days = (datetime.date.today() - state_date).days
|
||||
# loosely based on
|
||||
# loosely based on
|
||||
# http://trac.tools.ietf.org/group/iesg/trac/wiki/PublishPath
|
||||
if iesg_state == "lc":
|
||||
goal1 = 30
|
||||
|
@ -180,16 +178,26 @@ def state_age_colored(doc):
|
|||
goal1 = 14
|
||||
goal2 = 28
|
||||
if days > goal2:
|
||||
class_name = "ietf-small ietf-highlight-r"
|
||||
if flavor == "facelift":
|
||||
class_name = "label label-danger"
|
||||
else:
|
||||
class_name = "ietf-small ietf-highlight-r"
|
||||
elif days > goal1:
|
||||
class_name = "ietf-small ietf-highlight-y"
|
||||
if flavor == "facelift":
|
||||
class_name = "label label-warning"
|
||||
else:
|
||||
class_name = "ietf-small ietf-highlight-y"
|
||||
else:
|
||||
class_name = "ietf-small"
|
||||
if days > goal1:
|
||||
title = ' title="Goal is <%d days"' % (goal1,)
|
||||
else:
|
||||
title = ''
|
||||
return mark_safe('<span class="%s"%s>(for %d day%s)</span>' % (
|
||||
class_name, title, days, 's' if days != 1 else ''))
|
||||
# It's too bad that this function returns HTML; this makes it hard to
|
||||
# style. For the facelift, I therefore needed to add a new "flavor"
|
||||
# parameter, which is ugly.
|
||||
return mark_safe('<span class="%s"%s>%sfor %d day%s%s</span>' % (
|
||||
class_name, title, '(' if flavor != "facelift" else "", days,
|
||||
's' if days != 1 else '', '(' if flavor != "facelift" else "" ))
|
||||
else:
|
||||
return ""
|
||||
|
|
|
@ -9,7 +9,7 @@ from email.utils import parseaddr
|
|||
from ietf.doc.models import ConsensusDocEvent
|
||||
from django import template
|
||||
from django.utils.html import escape, fix_ampersands
|
||||
from django.template.defaultfilters import truncatewords_html, linebreaksbr, stringfilter, urlize
|
||||
from django.template.defaultfilters import truncatewords_html, linebreaksbr, stringfilter, urlize, striptags
|
||||
from django.template import resolve_variable
|
||||
from django.utils.safestring import mark_safe, SafeData
|
||||
from django.utils.html import strip_tags
|
||||
|
@ -48,12 +48,12 @@ def parse_email_list(value):
|
|||
u'<a href="mailto:joe@example.org">joe@example.org</a>, <a href="mailto:fred@example.com">fred@example.com</a>'
|
||||
|
||||
Parsing a non-string should return the input value, rather than fail:
|
||||
|
||||
|
||||
>>> parse_email_list(['joe@example.org', 'fred@example.com'])
|
||||
['joe@example.org', 'fred@example.com']
|
||||
|
||||
|
||||
Null input values should pass through silently:
|
||||
|
||||
|
||||
>>> parse_email_list('')
|
||||
''
|
||||
|
||||
|
@ -87,7 +87,7 @@ def fix_angle_quotes(value):
|
|||
if "<" in value:
|
||||
value = re.sub("<([\w\-\.]+@[\w\-\.]+)>", "<\1>", value)
|
||||
return value
|
||||
|
||||
|
||||
# there's an "ahref -> a href" in GEN_UTIL
|
||||
# but let's wait until we understand what that's for.
|
||||
@register.filter(name='make_one_per_line')
|
||||
|
@ -99,7 +99,7 @@ def make_one_per_line(value):
|
|||
'a\\nb\\nc'
|
||||
|
||||
Pass through non-strings:
|
||||
|
||||
|
||||
>>> make_one_per_line([1, 2])
|
||||
[1, 2]
|
||||
|
||||
|
@ -110,7 +110,7 @@ def make_one_per_line(value):
|
|||
return re.sub(", ?", "\n", value)
|
||||
else:
|
||||
return value
|
||||
|
||||
|
||||
@register.filter(name='timesum')
|
||||
def timesum(value):
|
||||
"""
|
||||
|
@ -222,7 +222,7 @@ def rfclink(string):
|
|||
URL for that RFC.
|
||||
"""
|
||||
string = str(string);
|
||||
return "http://tools.ietf.org/html/rfc" + string;
|
||||
return "//tools.ietf.org/html/rfc" + string;
|
||||
|
||||
@register.filter(name='urlize_ietf_docs', is_safe=True, needs_autoescape=True)
|
||||
def urlize_ietf_docs(string, autoescape=None):
|
||||
|
@ -274,7 +274,7 @@ def truncate_ellipsis(text, arg):
|
|||
return escape(text[:num-1])+"…"
|
||||
else:
|
||||
return escape(text)
|
||||
|
||||
|
||||
@register.filter
|
||||
def split(text, splitter=None):
|
||||
return text.split(splitter)
|
||||
|
@ -375,7 +375,7 @@ def linebreaks_lf(text):
|
|||
@register.filter(name='clean_whitespace')
|
||||
def clean_whitespace(text):
|
||||
"""
|
||||
Map all ASCII control characters (0x00-0x1F) to spaces, and
|
||||
Map all ASCII control characters (0x00-0x1F) to spaces, and
|
||||
remove unnecessary spaces.
|
||||
"""
|
||||
text = re.sub("[\000-\040]+", " ", text)
|
||||
|
@ -384,7 +384,7 @@ def clean_whitespace(text):
|
|||
@register.filter(name='unescape')
|
||||
def unescape(text):
|
||||
"""
|
||||
Unescape />/<
|
||||
Unescape />/<
|
||||
"""
|
||||
text = text.replace(">", ">")
|
||||
text = text.replace("<", "<")
|
||||
|
@ -423,7 +423,7 @@ def has_role(user, role_names):
|
|||
@register.filter
|
||||
def stable_dictsort(value, arg):
|
||||
"""
|
||||
Like dictsort, except it's stable (preserves the order of items
|
||||
Like dictsort, except it's stable (preserves the order of items
|
||||
whose sort key is the same). See also bug report
|
||||
http://code.djangoproject.com/ticket/12110
|
||||
"""
|
||||
|
@ -448,10 +448,10 @@ def format_history_text(text):
|
|||
if text.startswith("This was part of a ballot set with:"):
|
||||
full = urlize_ietf_docs(full)
|
||||
|
||||
full = mark_safe(keep_spacing(linebreaksbr(urlize(sanitize_html(full)))))
|
||||
full = mark_safe(keep_spacing(linebreaksbr(urlize_html(sanitize_html(full)))))
|
||||
snippet = truncatewords_html(full, 25)
|
||||
if snippet != full:
|
||||
return mark_safe(u'<div class="snippet">%s<span class="show-all">[show all]</span></div><div style="display:none" class="full">%s</div>' % (snippet, full))
|
||||
return mark_safe(u'<div class="snippet">%s<button class="btn btn-xs btn-default show-all"><span class="fa fa-caret-down"></span></button></div><div class="hidden full">%s</div>' % (snippet, full))
|
||||
return full
|
||||
|
||||
@register.filter
|
||||
|
@ -512,3 +512,66 @@ def consensus(doc):
|
|||
else:
|
||||
return "Unknown"
|
||||
|
||||
# FACELIFT: The following filters are only used by the facelift UI:
|
||||
|
||||
@register.filter
|
||||
def pos_to_label(text):
|
||||
"""Return a valid Bootstrap3 label type for a ballot position."""
|
||||
return {
|
||||
'Yes': 'success',
|
||||
'No Objection': 'info',
|
||||
'Abstain': 'warning',
|
||||
'Discuss': 'danger',
|
||||
'Block': 'danger',
|
||||
'Recuse': 'default',
|
||||
}.get(str(text), 'blank')
|
||||
|
||||
@register.filter
|
||||
def capfirst_allcaps(text):
|
||||
from django.template import defaultfilters
|
||||
"""Like capfirst, except it doesn't lowercase words in ALL CAPS."""
|
||||
result = text
|
||||
i = False
|
||||
for token in re.split("(\W+)", striptags(text)):
|
||||
if not re.match("^[A-Z]+$", token):
|
||||
if not i:
|
||||
result = result.replace(token, token.capitalize())
|
||||
i = True
|
||||
else:
|
||||
result = result.replace(token, token.lower())
|
||||
return result
|
||||
|
||||
@register.filter
|
||||
def lower_allcaps(text):
|
||||
from django.template import defaultfilters
|
||||
"""Like lower, except it doesn't lowercase words in ALL CAPS."""
|
||||
result = text
|
||||
i = False
|
||||
for token in re.split("(\W+)", striptags(text)):
|
||||
if not re.match("^[A-Z]+$", token):
|
||||
result = result.replace(token, token.lower())
|
||||
return result
|
||||
|
||||
# See https://djangosnippets.org/snippets/2072/ and
|
||||
# https://stackoverflow.com/questions/9939248/how-to-prevent-django-basic-inlines-from-autoescaping
|
||||
@register.filter
|
||||
def urlize_html(html, autoescape=False):
|
||||
"""
|
||||
Returns urls found in an (X)HTML text node element as urls via Django urlize filter.
|
||||
"""
|
||||
try:
|
||||
from BeautifulSoup import BeautifulSoup
|
||||
from django.utils.html import urlize
|
||||
except ImportError:
|
||||
if settings.DEBUG:
|
||||
raise template.TemplateSyntaxError, "Error in urlize_html The Python BeautifulSoup libraries aren't installed."
|
||||
return html
|
||||
else:
|
||||
soup = BeautifulSoup(html)
|
||||
|
||||
textNodes = soup.findAll(text=True)
|
||||
for textNode in textNodes:
|
||||
urlizedText = urlize(textNode, autoescape=autoescape)
|
||||
textNode.replaceWith(BeautifulSoup(urlizedText))
|
||||
|
||||
return str(soup)
|
||||
|
|
|
@ -43,24 +43,32 @@ area_short_names = {
|
|||
'rai':'RAI'
|
||||
}
|
||||
|
||||
# FACELIFT: Function is called with "facelift" flavor from the new UI code.
|
||||
# The old code (and flavoring) can be remove eventually.
|
||||
@register.simple_tag
|
||||
def wg_menu():
|
||||
res = cache.get('base_left_wgmenu')
|
||||
def wg_menu(flavor=""):
|
||||
res = cache.get('wgmenu' + flavor)
|
||||
if res:
|
||||
return res
|
||||
|
||||
areas = Group.objects.filter(type="area", state="active").order_by('acronym')
|
||||
groups = Group.objects.filter(type="wg", state="active", parent__in=areas).order_by("acronym")
|
||||
wgs = Group.objects.filter(type="wg", state="active", parent__in=areas).order_by("acronym")
|
||||
rgs = Group.objects.filter(type="rg", state="active").order_by("acronym")
|
||||
|
||||
for a in areas:
|
||||
a.short_area_name = area_short_names.get(a.acronym) or a.name
|
||||
if a.short_area_name.endswith(" Area"):
|
||||
a.short_area_name = a.short_area_name[:-len(" Area")]
|
||||
|
||||
a.active_groups = [g for g in groups if g.parent_id == a.id]
|
||||
a.active_groups = [g for g in wgs if g.parent_id == a.id]
|
||||
|
||||
areas = [a for a in areas if a.active_groups]
|
||||
|
||||
res = render_to_string('base/wg_menu.html', {'areas':areas})
|
||||
cache.set('base_left_wgmenu', res, 30*60)
|
||||
if flavor == "facelift":
|
||||
res = render_to_string('base/menu_wg.html', {'areas':areas, 'rgs':rgs})
|
||||
elif flavor == "modal":
|
||||
res = render_to_string('base/menu_wg_modal.html', {'areas':areas, 'rgs':rgs})
|
||||
else:
|
||||
res = render_to_string('base/wg_menu.html', {'areas':areas, 'rgs':rgs})
|
||||
cache.set('wgmenu' + flavor, res, 30*60)
|
||||
return res
|
||||
|
|
|
@ -13,7 +13,7 @@ from django.contrib.auth.decorators import login_required
|
|||
import debug # pyflakes:ignore
|
||||
|
||||
from ietf.doc.models import ( Document, DocHistory, State, DocEvent, BallotDocEvent,
|
||||
BallotPositionDocEvent, InitialReviewDocEvent, NewRevisionDocEvent,
|
||||
BallotPositionDocEvent, InitialReviewDocEvent, NewRevisionDocEvent,
|
||||
WriteupDocEvent, save_document_in_history )
|
||||
from ietf.doc.utils import ( add_state_change_event, close_open_ballots,
|
||||
create_ballot_if_not_open, get_chartering_type )
|
||||
|
@ -33,7 +33,7 @@ from ietf.group.mails import email_iesg_secretary_re_charter
|
|||
class ChangeStateForm(forms.Form):
|
||||
charter_state = forms.ModelChoiceField(State.objects.filter(used=True, type="charter"), label="Charter state", empty_label=None, required=False)
|
||||
initial_time = forms.IntegerField(initial=0, label="Review time", help_text="(in weeks)", required=False)
|
||||
message = forms.CharField(widget=forms.Textarea, help_text="Leave blank to change state without notifying the Secretariat", required=False, label=mark_safe("Message to<br> Secretariat"))
|
||||
message = forms.CharField(widget=forms.Textarea, help_text="Leave blank to change state without notifying the Secretariat", required=False, label=mark_safe("Message to the Secretariat"))
|
||||
comment = forms.CharField(widget=forms.Textarea, help_text="Optional comment for the charter history", required=False)
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.hide = kwargs.pop('hide', None)
|
||||
|
@ -47,7 +47,7 @@ class ChangeStateForm(forms.Form):
|
|||
# hide requested fields
|
||||
if self.hide:
|
||||
for f in self.hide:
|
||||
self.fields[f].widget = forms.HiddenInput
|
||||
self.fields[f].widget = forms.HiddenInput()
|
||||
|
||||
@login_required
|
||||
def change_state(request, name, option=None):
|
||||
|
@ -101,7 +101,7 @@ def change_state(request, name, option=None):
|
|||
e.state_id = group.state.slug
|
||||
e.desc = "Group state changed to %s from %s" % (group.state, oldstate)
|
||||
e.save()
|
||||
|
||||
|
||||
else:
|
||||
charter_state = State.objects.get(used=True, type="charter", slug="approved")
|
||||
charter_rev = approved_revision(charter.rev)
|
||||
|
@ -327,12 +327,12 @@ def submit(request, name=None, option=None):
|
|||
e.desc = "New version available: <b>%s-%s.txt</b>" % (charter.canonical_name(), charter.rev)
|
||||
e.rev = charter.rev
|
||||
e.save()
|
||||
|
||||
|
||||
# Save file on disk
|
||||
form.save(group, charter.rev)
|
||||
|
||||
if option in ['initcharter','recharter'] and charter.ad == None:
|
||||
charter.ad = group.ad
|
||||
charter.ad = group.ad
|
||||
|
||||
charter.time = datetime.datetime.now()
|
||||
charter.save()
|
||||
|
@ -405,7 +405,7 @@ def announcement_text(request, name, ann):
|
|||
e.desc = "%s %s text was changed" % (group.type.name, ann)
|
||||
e.text = t
|
||||
e.save()
|
||||
|
||||
|
||||
charter.time = e.time
|
||||
charter.save()
|
||||
|
||||
|
@ -440,7 +440,7 @@ class BallotWriteupForm(forms.Form):
|
|||
|
||||
def clean_ballot_writeup(self):
|
||||
return self.cleaned_data["ballot_writeup"].replace("\r", "")
|
||||
|
||||
|
||||
@role_required('Area Director','Secretariat')
|
||||
def ballot_writeupnotes(request, name):
|
||||
"""Editing of ballot write-up and notes"""
|
||||
|
@ -453,13 +453,13 @@ def ballot_writeupnotes(request, name):
|
|||
login = request.user.person
|
||||
|
||||
approval = charter.latest_event(WriteupDocEvent, type="changed_action_announcement")
|
||||
|
||||
|
||||
existing = charter.latest_event(WriteupDocEvent, type="changed_ballot_writeup_text")
|
||||
if not existing:
|
||||
existing = generate_ballot_writeup(request, charter)
|
||||
|
||||
reissue = charter.latest_event(DocEvent, type="sent_ballot_announcement")
|
||||
|
||||
|
||||
form = BallotWriteupForm(initial=dict(ballot_writeup=existing.text))
|
||||
|
||||
if request.method == 'POST' and ("save_ballot_writeup" in request.POST or "send_ballot" in request.POST):
|
||||
|
@ -644,7 +644,7 @@ def approve(request, name):
|
|||
send_mail_preformatted(request, announcement)
|
||||
|
||||
return HttpResponseRedirect(charter.get_absolute_url())
|
||||
|
||||
|
||||
return render_to_response('doc/charter/approve.html',
|
||||
dict(charter=charter,
|
||||
announcement=announcement),
|
||||
|
|
|
@ -148,7 +148,7 @@ def fill_in_search_attributes(docs):
|
|||
for d in docs:
|
||||
if isinstance(d,DocAlias):
|
||||
d = d.document
|
||||
rel_this_doc = d.all_related_that_doc(['replaces','obs'])
|
||||
rel_this_doc = d.all_related_that_doc(['replaces','obs'])
|
||||
for rel in rel_this_doc:
|
||||
rel_id_camefrom.setdefault(rel.document.pk,[]).append(d.pk)
|
||||
rel_docs += [x.document for x in rel_this_doc]
|
||||
|
@ -240,7 +240,7 @@ def retrieve_search_results(form, all_types=False):
|
|||
"""Takes a validated SearchForm and return the results."""
|
||||
if not form.is_valid():
|
||||
raise ValueError("SearchForm doesn't validate: %s" % form.errors)
|
||||
|
||||
|
||||
query = form.cleaned_data
|
||||
|
||||
types=[];
|
||||
|
@ -282,7 +282,7 @@ def retrieve_search_results(form, all_types=False):
|
|||
if query["olddrafts"]:
|
||||
allowed_draft_states.extend(['repl', 'expired', 'auth-rm', 'ietf-rm'])
|
||||
|
||||
docs = docs.filter(Q(states__slug__in=allowed_draft_states) |
|
||||
docs = docs.filter(Q(states__slug__in=allowed_draft_states) |
|
||||
~Q(type__slug='draft')).distinct()
|
||||
|
||||
# radio choices
|
||||
|
@ -365,7 +365,7 @@ def retrieve_search_results(form, all_types=False):
|
|||
meta['headers'] = [{'title': 'Document', 'key':'document'},
|
||||
{'title': 'Title', 'key':'title'},
|
||||
{'title': 'Date', 'key':'date'},
|
||||
{'title': 'Status', 'key':'status', 'colspan':'2'},
|
||||
{'title': 'Status', 'key':'status'},
|
||||
{'title': 'IPR', 'key':'ipr'},
|
||||
{'title': 'AD / Shepherd', 'key':'ad'}]
|
||||
|
||||
|
@ -440,14 +440,14 @@ def ad_dashboard_group(doc):
|
|||
return '%s Internet-Draft' % doc.get_state('draft').name
|
||||
elif doc.type.slug=='conflrev':
|
||||
if doc.get_state_slug('conflrev') in ('appr-reqnopub-sent','appr-noprob-sent'):
|
||||
return 'Approved Conflict Review'
|
||||
return 'Approved Conflict Review'
|
||||
elif doc.get_state_slug('conflrev') in ('appr-reqnopub-pend','appr-noprob-pend','appr-reqnopub-pr','appr-noprob-pr'):
|
||||
return "%s Conflict Review" % State.objects.get(type__slug='draft-iesg',slug='approved')
|
||||
else:
|
||||
return '%s Conflict Review' % doc.get_state('conflrev')
|
||||
elif doc.type.slug=='statchg':
|
||||
if doc.get_state_slug('statchg') in ('appr-sent',):
|
||||
return 'Approved Status Change'
|
||||
return 'Approved Status Change'
|
||||
if doc.get_state_slug('statchg') in ('appr-pend','appr-pr'):
|
||||
return '%s Status Change' % State.objects.get(type__slug='draft-iesg',slug='approved')
|
||||
else:
|
||||
|
@ -461,7 +461,7 @@ def ad_dashboard_group(doc):
|
|||
return "Document"
|
||||
|
||||
def ad_dashboard_sort_key(doc):
|
||||
|
||||
|
||||
if doc.type.slug=='draft' and doc.get_state_slug('draft') == 'rfc':
|
||||
return "21%04d" % int(doc.rfc_number())
|
||||
if doc.type.slug=='statchg' and doc.get_state_slug('statchg') == 'appr-sent':
|
||||
|
@ -474,26 +474,26 @@ def ad_dashboard_sort_key(doc):
|
|||
seed = ad_dashboard_group(doc)
|
||||
|
||||
if doc.type.slug=='conflrev' and doc.get_state_slug('conflrev') == 'adrev':
|
||||
state = State.objects.get(type__slug='draft-iesg',slug='ad-eval')
|
||||
state = State.objects.get(type__slug='draft-iesg',slug='ad-eval')
|
||||
return "1%d%s" % (state.order,seed)
|
||||
|
||||
if doc.type.slug=='charter':
|
||||
if doc.get_state_slug('charter') in ('notrev','infrev'):
|
||||
return "100%s" % seed
|
||||
elif doc.get_state_slug('charter') == 'intrev':
|
||||
state = State.objects.get(type__slug='draft-iesg',slug='ad-eval')
|
||||
state = State.objects.get(type__slug='draft-iesg',slug='ad-eval')
|
||||
return "1%d%s" % (state.order,seed)
|
||||
elif doc.get_state_slug('charter') == 'extrev':
|
||||
state = State.objects.get(type__slug='draft-iesg',slug='lc')
|
||||
state = State.objects.get(type__slug='draft-iesg',slug='lc')
|
||||
return "1%d%s" % (state.order,seed)
|
||||
elif doc.get_state_slug('charter') == 'iesgrev':
|
||||
state = State.objects.get(type__slug='draft-iesg',slug='iesg-eva')
|
||||
state = State.objects.get(type__slug='draft-iesg',slug='iesg-eva')
|
||||
return "1%d%s" % (state.order,seed)
|
||||
|
||||
if doc.type.slug=='statchg' and doc.get_state_slug('statchg') == 'adrev':
|
||||
state = State.objects.get(type__slug='draft-iesg',slug='ad-eval')
|
||||
state = State.objects.get(type__slug='draft-iesg',slug='ad-eval')
|
||||
return "1%d%s" % (state.order,seed)
|
||||
|
||||
|
||||
if seed.startswith('Needs Shepherd'):
|
||||
return "100%s" % seed
|
||||
if seed.endswith(' Document'):
|
||||
|
|
|
@ -29,17 +29,17 @@ class GroupForm(forms.Form):
|
|||
name = forms.CharField(max_length=255, label="Name", required=True)
|
||||
acronym = forms.CharField(max_length=10, label="Acronym", required=True)
|
||||
state = forms.ModelChoiceField(GroupStateName.objects.all(), label="State", required=True)
|
||||
chairs = AutocompletedEmailsField(required=False, only_users=True)
|
||||
secretaries = AutocompletedEmailsField(required=False, only_users=True)
|
||||
chairs = AutocompletedEmailsField(label="Chairs", required=False, only_users=True)
|
||||
secretaries = AutocompletedEmailsField(label="Secretarias", required=False, only_users=True)
|
||||
techadv = AutocompletedEmailsField(label="Technical Advisors", required=False, only_users=True)
|
||||
delegates = AutocompletedEmailsField(required=False, only_users=True, max_entries=MAX_GROUP_DELEGATES,
|
||||
help_text=mark_safe("Chairs can delegate the authority to update the state of group documents - max %s persons at a given time" % MAX_GROUP_DELEGATES))
|
||||
delegates = AutocompletedEmailsField(label="Delegates", required=False, only_users=True, max_entries=MAX_GROUP_DELEGATES,
|
||||
help_text=mark_safe("Chairs can delegate the authority to update the state of group documents - at most %s persons at a given time." % MAX_GROUP_DELEGATES))
|
||||
ad = forms.ModelChoiceField(Person.objects.filter(role__name="ad", role__group__state="active").order_by('name'), label="Shepherding AD", empty_label="(None)", required=False)
|
||||
parent = forms.ModelChoiceField(Group.objects.filter(state="active").order_by('name'), empty_label="(None)", required=False)
|
||||
list_email = forms.CharField(max_length=64, required=False)
|
||||
list_subscribe = forms.CharField(max_length=255, required=False)
|
||||
list_archive = forms.CharField(max_length=255, required=False)
|
||||
urls = forms.CharField(widget=forms.Textarea, label="Additional URLs", help_text="Format: http://site/path (Optional description). Separate multiple entries with newline.", required=False)
|
||||
urls = forms.CharField(widget=forms.Textarea, label="Additional URLs", help_text="Format: https://site/path (Optional description). Separate multiple entries with newline. Prefer HTTPS URLs where possible.", required=False)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.group = kwargs.pop('group', None)
|
||||
|
@ -60,7 +60,7 @@ class GroupForm(forms.Form):
|
|||
self.confirm_msg = ""
|
||||
self.autoenable_confirm = False
|
||||
if self.group:
|
||||
self.fields['acronym'].widget.attrs['readonly'] = True
|
||||
self.fields['acronym'].widget.attrs['readonly'] = ""
|
||||
|
||||
if self.group_type == "rg":
|
||||
self.fields['ad'].widget = forms.HiddenInput()
|
||||
|
@ -149,7 +149,7 @@ def get_or_create_initial_charter(group, group_type):
|
|||
)
|
||||
charter.save()
|
||||
charter.set_state(State.objects.get(used=True, type="charter", slug="notrev"))
|
||||
|
||||
|
||||
# Create an alias as well
|
||||
DocAlias.objects.create(name=charter.name, document=charter)
|
||||
|
||||
|
@ -220,12 +220,12 @@ def edit(request, group_type=None, acronym=None, action="edit"):
|
|||
group.charter = get_or_create_initial_charter(group, group_type)
|
||||
|
||||
changes = []
|
||||
|
||||
|
||||
def desc(attr, new, old):
|
||||
entry = "%(attr)s changed to <b>%(new)s</b> from %(old)s"
|
||||
if new_group:
|
||||
entry = "%(attr)s changed to <b>%(new)s</b>"
|
||||
|
||||
|
||||
return entry % dict(attr=attr, new=new, old=old)
|
||||
|
||||
def diff(attr, name):
|
||||
|
|
|
@ -24,11 +24,13 @@ def stream_documents(request, acronym):
|
|||
streams = [ s.slug for s in StreamName.objects.all().exclude(slug__in=['ietf', 'legacy']) ]
|
||||
if not acronym in streams:
|
||||
raise Http404("No such stream: %s" % acronym)
|
||||
group = get_object_or_404(Group, acronym=acronym)
|
||||
editable = has_role(request.user, "Secretariat") or group.has_role(request.user, "chair")
|
||||
stream = StreamName.objects.get(slug=acronym)
|
||||
form = SearchForm({'by':'stream', 'stream':acronym,
|
||||
'rfcs':'on', 'activedrafts':'on'})
|
||||
docs, meta = retrieve_search_results(form)
|
||||
return render_to_response('group/stream_documents.html', {'stream':stream, 'docs':docs, 'meta':meta }, context_instance=RequestContext(request))
|
||||
return render_to_response('group/stream_documents.html', {'stream':stream, 'docs':docs, 'meta':meta, 'editable':editable }, context_instance=RequestContext(request))
|
||||
|
||||
class StreamEditForm(forms.Form):
|
||||
delegates = AutocompletedEmailsField(required=False, only_users=True)
|
||||
|
@ -62,7 +64,7 @@ def stream_edit(request, acronym):
|
|||
for e in new:
|
||||
Role.objects.get_or_create(name_id=slug, email=e, group=group, person=e.person)
|
||||
|
||||
return redirect("ietf.group.views.streams")
|
||||
return redirect("ietf.group.views_stream.streams")
|
||||
else:
|
||||
form = StreamEditForm(initial=dict(delegates=Email.objects.filter(role__group=group, role__name="delegate")))
|
||||
|
||||
|
@ -72,4 +74,4 @@ def stream_edit(request, acronym):
|
|||
'form': form,
|
||||
},
|
||||
context_instance=RequestContext(request))
|
||||
|
||||
|
||||
|
|
|
@ -85,50 +85,50 @@ def get_doc_section(doc):
|
|||
def agenda_sections():
|
||||
return OrderedDict([
|
||||
('1', {'title':"Administrivia"}),
|
||||
('1.1', {'title':"Roll Call"}),
|
||||
('1.2', {'title':"Bash the Agenda"}),
|
||||
('1.3', {'title':"Approval of the Minutes of Past Telechats"}),
|
||||
('1.4', {'title':"List of Remaining Action Items from Last Telechat"}),
|
||||
('2', {'title':"Protocol Actions"}),
|
||||
('2.1', {'title':"WG Submissions"}),
|
||||
('2.1.1', {'title':"New Items", 'docs': []}),
|
||||
('2.1.2', {'title':"Returning Items", 'docs':[]}),
|
||||
('2.1.3', {'title':"For Action", 'docs':[]}),
|
||||
('2.2', {'title':"Individual Submissions"}),
|
||||
('2.2.1', {'title':"New Items", 'docs':[]}),
|
||||
('2.2.2', {'title':"Returning Items", 'docs':[]}),
|
||||
('2.2.3', {'title':"For Action", 'docs':[]}),
|
||||
('2.3', {'title':"Status Changes"}),
|
||||
('2.3.1', {'title':"New Items", 'docs':[]}),
|
||||
('2.3.2', {'title':"Returning Items", 'docs':[]}),
|
||||
('2.3.3', {'title':"For Action", 'docs':[]}),
|
||||
('3', {'title':"Document Actions"}),
|
||||
('3.1', {'title':"WG Submissions"}),
|
||||
('3.1.1', {'title':"New Items", 'docs':[]}),
|
||||
('3.1.2', {'title':"Returning Items", 'docs':[]}),
|
||||
('3.1.3', {'title':"For Action", 'docs':[]}),
|
||||
('3.2', {'title':"Individual Submissions Via AD"}),
|
||||
('3.2.1', {'title':"New Items", 'docs':[]}),
|
||||
('3.2.2', {'title':"Returning Items", 'docs':[]}),
|
||||
('3.2.3', {'title':"For Action", 'docs':[]}),
|
||||
('3.3', {'title':"Status Changes"}),
|
||||
('3.3.1', {'title':"New Items", 'docs':[]}),
|
||||
('3.3.2', {'title':"Returning Items", 'docs':[]}),
|
||||
('3.3.3', {'title':"For Action", 'docs':[]}),
|
||||
('3.4', {'title':"IRTF and Independent Submission Stream Documents"}),
|
||||
('3.4.1', {'title':"New Items", 'docs':[]}),
|
||||
('3.4.2', {'title':"Returning Items", 'docs':[]}),
|
||||
('3.4.3', {'title':"For Action", 'docs':[]}),
|
||||
('4', {'title':"Working Group Actions"}),
|
||||
('4.1', {'title':"WG Creation"}),
|
||||
('4.1.1', {'title':"Proposed for IETF Review", 'docs':[]}),
|
||||
('4.1.2', {'title':"Proposed for Approval", 'docs':[]}),
|
||||
('4.2', {'title':"WG Rechartering"}),
|
||||
('4.2.1', {'title':"Under Evaluation for IETF Review", 'docs':[]}),
|
||||
('4.2.2', {'title':"Proposed for Approval", 'docs':[]}),
|
||||
('5', {'title':"IAB News We Can Use"}),
|
||||
('6', {'title':"Management Issues"}),
|
||||
('7', {'title':"Working Group News"}),
|
||||
('1.1', {'title':"Roll call"}),
|
||||
('1.2', {'title':"Bash the agenda"}),
|
||||
('1.3', {'title':"Approval of the minutes of past telechats"}),
|
||||
('1.4', {'title':"List of remaining action items from last telechat"}),
|
||||
('2', {'title':"Protocol actions"}),
|
||||
('2.1', {'title':"WG submissions"}),
|
||||
('2.1.1', {'title':"New items", 'docs': []}),
|
||||
('2.1.2', {'title':"Returning items", 'docs':[]}),
|
||||
('2.1.3', {'title':"For action", 'docs':[]}),
|
||||
('2.2', {'title':"Individual submissions"}),
|
||||
('2.2.1', {'title':"New items", 'docs':[]}),
|
||||
('2.2.2', {'title':"Returning items", 'docs':[]}),
|
||||
('2.2.3', {'title':"For action", 'docs':[]}),
|
||||
('2.3', {'title':"Status changes"}),
|
||||
('2.3.1', {'title':"New items", 'docs':[]}),
|
||||
('2.3.2', {'title':"Returning items", 'docs':[]}),
|
||||
('2.3.3', {'title':"For action", 'docs':[]}),
|
||||
('3', {'title':"Document actions"}),
|
||||
('3.1', {'title':"WG submissions"}),
|
||||
('3.1.1', {'title':"New items", 'docs':[]}),
|
||||
('3.1.2', {'title':"Returning items", 'docs':[]}),
|
||||
('3.1.3', {'title':"For action", 'docs':[]}),
|
||||
('3.2', {'title':"Individual submissions via AD"}),
|
||||
('3.2.1', {'title':"New items", 'docs':[]}),
|
||||
('3.2.2', {'title':"Returning items", 'docs':[]}),
|
||||
('3.2.3', {'title':"For action", 'docs':[]}),
|
||||
('3.3', {'title':"Status changes"}),
|
||||
('3.3.1', {'title':"New items", 'docs':[]}),
|
||||
('3.3.2', {'title':"Returning items", 'docs':[]}),
|
||||
('3.3.3', {'title':"For action", 'docs':[]}),
|
||||
('3.4', {'title':"IRTF and Independent Submission stream documents"}),
|
||||
('3.4.1', {'title':"New items", 'docs':[]}),
|
||||
('3.4.2', {'title':"Returning items", 'docs':[]}),
|
||||
('3.4.3', {'title':"For action", 'docs':[]}),
|
||||
('4', {'title':"Working Group actions"}),
|
||||
('4.1', {'title':"WG creation"}),
|
||||
('4.1.1', {'title':"Proposed for IETF review", 'docs':[]}),
|
||||
('4.1.2', {'title':"Proposed for approval", 'docs':[]}),
|
||||
('4.2', {'title':"WG rechartering"}),
|
||||
('4.2.1', {'title':"Under evaluation for IETF review", 'docs':[]}),
|
||||
('4.2.2', {'title':"Proposed for approval", 'docs':[]}),
|
||||
('5', {'title':"IAB news we can use"}),
|
||||
('6', {'title':"Management issues"}),
|
||||
('7', {'title':"Working Group news"}),
|
||||
])
|
||||
|
||||
def fill_in_agenda_administrivia(date, sections):
|
||||
|
@ -185,7 +185,7 @@ def fill_in_agenda_docs(date, sections, matches=None):
|
|||
|
||||
# prune empty "For action" sections
|
||||
empty_for_action = [n for n, section in sections.iteritems()
|
||||
if section["title"] == "For Action" and not section["docs"]]
|
||||
if section["title"] == "For action" and not section["docs"]]
|
||||
for num in empty_for_action:
|
||||
del sections[num]
|
||||
|
||||
|
|
|
@ -2,24 +2,24 @@
|
|||
|
||||
# Portion Copyright (C) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
|
||||
# All rights reserved. Contact: Pasi Eronen <pasi.eronen@nokia.com>
|
||||
#
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
#
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
#
|
||||
#
|
||||
# * Redistributions in binary form must reproduce the above
|
||||
# copyright notice, this list of conditions and the following
|
||||
# disclaimer in the documentation and/or other materials provided
|
||||
# with the distribution.
|
||||
#
|
||||
#
|
||||
# * Neither the name of the Nokia Corporation and/or its
|
||||
# subsidiary(-ies) nor the names of its contributors may be used
|
||||
# to endorse or promote products derived from this software
|
||||
# without specific prior written permission.
|
||||
#
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
|
@ -58,6 +58,9 @@ from ietf.iesg.models import TelechatDate
|
|||
from ietf.ietfauth.utils import has_role, role_required, user_is_person
|
||||
from ietf.person.models import Person
|
||||
|
||||
# FACELIFT:
|
||||
from ietf.doc.views_search import fill_in_search_attributes
|
||||
|
||||
def review_decisions(request, year=None):
|
||||
events = DocEvent.objects.filter(type__in=("iesg_disapproved", "iesg_approved"))
|
||||
|
||||
|
@ -176,8 +179,8 @@ def agenda(request, date=None):
|
|||
data = agenda_data(date)
|
||||
|
||||
if has_role(request.user, ["Area Director", "IAB Chair", "Secretariat"]):
|
||||
data["sections"]["1.1"]["title"] = data["sections"]["1.1"]["title"].replace("Roll Call", '<a href="https://www.ietf.org/iesg/internal/rollcall.txt">Roll Call</a>')
|
||||
data["sections"]["1.3"]["title"] = data["sections"]["1.3"]["title"].replace("Minutes", '<a href="https://www.ietf.org/iesg/internal/minutes.txt">Minutes</a>')
|
||||
data["sections"]["1.1"]["title"] = data["sections"]["1.1"]["title"].replace("Roll call", '<a href="https://www.ietf.org/iesg/internal/rollcall.txt">Roll Call</a>')
|
||||
data["sections"]["1.3"]["title"] = data["sections"]["1.3"]["title"].replace("minutes", '<a href="https://www.ietf.org/iesg/internal/minutes.txt">Minutes</a>')
|
||||
|
||||
request.session['ballot_edit_return_point'] = request.path_info
|
||||
return render_to_response("iesg/agenda.html", {
|
||||
|
@ -303,7 +306,7 @@ class RescheduleForm(forms.Form):
|
|||
|
||||
def __init__(self, *args, **kwargs):
|
||||
dates = kwargs.pop('telechat_dates')
|
||||
|
||||
|
||||
super(self.__class__, self).__init__(*args, **kwargs)
|
||||
|
||||
# telechat choices
|
||||
|
@ -360,6 +363,9 @@ def agenda_documents(request):
|
|||
telechats = []
|
||||
for date in dates:
|
||||
sections = agenda_sections()
|
||||
# FACELIFT: augment the docs with the search attributes, since we're using
|
||||
# the search_result_row view to display them (which expects them)
|
||||
fill_in_search_attributes(docs_by_date[date])
|
||||
fill_in_agenda_docs(date, sections, docs_by_date[date])
|
||||
|
||||
telechats.append({
|
||||
|
|
|
@ -217,7 +217,7 @@ class PersonForm(ModelForm):
|
|||
|
||||
# Make sure the alias table contains any new and/or old names.
|
||||
old_names = set([x.name for x in Alias.objects.filter(person=self.instance)])
|
||||
curr_names = set([x for x in [self.instance.name,
|
||||
curr_names = set([x for x in [self.instance.name,
|
||||
self.instance.ascii,
|
||||
self.instance.ascii_short,
|
||||
self.data['name'],
|
||||
|
|
|
@ -12,8 +12,8 @@ LICENSE_CHOICES = (
|
|||
(3, 'c) Reasonable and Non-Discriminatory License to All Implementers with Possible Royalty/Fee.'),
|
||||
(4, 'd) Licensing Declaration to be Provided Later (implies a willingness'
|
||||
' to commit to the provisions of a), b), or c) above to all implementers;'
|
||||
' otherwise, the next option "Unwilling to Commit to the Provisions of'
|
||||
' a), b), or c) Above". - must be selected).'),
|
||||
' otherwise, the next option - "Unwilling to Commit to the Provisions of'
|
||||
' a), b), or c) Above" - must be selected).'),
|
||||
(5, 'e) Unwilling to Commit to the Provisions of a), b), or c) Above.'),
|
||||
(6, 'f) See Text Below for Licensing Declaration.'),
|
||||
)
|
||||
|
@ -27,10 +27,10 @@ SELECT_CHOICES = (
|
|||
(2, 'NO'),
|
||||
)
|
||||
STATUS_CHOICES = (
|
||||
( 0, "Waiting for approval" ),
|
||||
( 1, "Approved and Posted" ),
|
||||
( 2, "Rejected by Administrator" ),
|
||||
( 3, "Removed by Request" ),
|
||||
( 0, "Waiting for approval" ),
|
||||
( 1, "Approved and Posted" ),
|
||||
( 2, "Rejected by Administrator" ),
|
||||
( 3, "Removed by Request" ),
|
||||
)
|
||||
|
||||
class IprDetail(models.Model):
|
||||
|
@ -45,35 +45,35 @@ class IprDetail(models.Model):
|
|||
legacy_title_2 = models.CharField(blank=True, null=True, db_column="additional_old_title2", max_length=255)
|
||||
|
||||
# Patent holder fieldset
|
||||
legal_name = models.CharField("Legal Name", db_column="p_h_legal_name", max_length=255)
|
||||
legal_name = models.CharField("Legal name", db_column="p_h_legal_name", max_length=255)
|
||||
|
||||
# Patent Holder Contact fieldset
|
||||
# self.contact.filter(contact_type=1)
|
||||
|
||||
# IETF Contact fieldset
|
||||
# self.contact.filter(contact_type=3)
|
||||
|
||||
|
||||
# Related IETF Documents fieldset
|
||||
rfc_number = models.IntegerField(null=True, editable=False, blank=True) # always NULL
|
||||
id_document_tag = models.IntegerField(null=True, editable=False, blank=True) # always NULL
|
||||
other_designations = models.CharField(blank=True, max_length=255)
|
||||
other_designations = models.CharField("Designations for other contributions", blank=True, max_length=255)
|
||||
document_sections = models.TextField("Specific document sections covered", blank=True, max_length=255, db_column='disclouser_identify')
|
||||
|
||||
# Patent Information fieldset
|
||||
patents = models.TextField("Patent Applications", db_column="p_applications", max_length=255)
|
||||
date_applied = models.CharField(max_length=255)
|
||||
patents = models.TextField("Patent, serial, publication, registration, or application/file number(s)", db_column="p_applications", max_length=255)
|
||||
date_applied = models.CharField("Date(s) granted or applied for", max_length=255)
|
||||
country = models.CharField(max_length=255)
|
||||
notes = models.TextField("Additional notes", db_column="p_notes", blank=True)
|
||||
is_pending = models.IntegerField("Unpublished Pending Patent Application", blank=True, null=True, choices=SELECT_CHOICES, db_column="selecttype")
|
||||
applies_to_all = models.IntegerField("Applies to all IPR owned by Submitter", blank=True, null=True, choices=SELECT_CHOICES, db_column="selectowned")
|
||||
is_pending = models.IntegerField("Unpublished pending patent application", blank=True, null=True, choices=SELECT_CHOICES, db_column="selecttype")
|
||||
applies_to_all = models.IntegerField("Applies to all IPR owned by submitter", blank=True, null=True, choices=SELECT_CHOICES, db_column="selectowned")
|
||||
|
||||
# Licensing Declaration fieldset
|
||||
licensing_option = models.IntegerField(null=True, blank=True, choices=LICENSE_CHOICES)
|
||||
lic_opt_a_sub = models.IntegerField(null=True, editable=False, choices=STDONLY_CHOICES)
|
||||
lic_opt_b_sub = models.IntegerField(null=True, editable=False, choices=STDONLY_CHOICES)
|
||||
lic_opt_c_sub = models.IntegerField(null=True, editable=False, choices=STDONLY_CHOICES)
|
||||
comments = models.TextField("Licensing Comments", blank=True)
|
||||
lic_checkbox = models.BooleanField("All terms and conditions has been disclosed", default=False)
|
||||
comments = models.TextField("Licensing comments", blank=True)
|
||||
lic_checkbox = models.BooleanField("The individual submitting this template represents and warrants that all terms and conditions that must be satisfied for implementers of any covered IETF specification to obtain a license have been disclosed in this IPR disclosure statement.", default=False)
|
||||
|
||||
|
||||
# Other notes fieldset
|
||||
|
@ -119,8 +119,8 @@ class IprContact(models.Model):
|
|||
name = models.CharField(max_length=255)
|
||||
title = models.CharField(blank=True, max_length=255)
|
||||
department = models.CharField(blank=True, max_length=255)
|
||||
address1 = models.CharField(blank=True, max_length=255)
|
||||
address2 = models.CharField(blank=True, max_length=255)
|
||||
address1 = models.CharField("Address", blank=True, max_length=255)
|
||||
address2 = models.CharField("Address (continued)", blank=True, max_length=255)
|
||||
telephone = models.CharField(blank=True, max_length=25)
|
||||
fax = models.CharField(blank=True, max_length=25)
|
||||
email = models.EmailField(max_length=255)
|
||||
|
|
|
@ -16,19 +16,19 @@ from ietf.ipr.view_sections import section_table
|
|||
|
||||
# ----------------------------------------------------------------
|
||||
# Create base forms from models
|
||||
# ----------------------------------------------------------------
|
||||
# ----------------------------------------------------------------
|
||||
|
||||
phone_re = re.compile(r'^\+?[0-9 ]*(\([0-9]+\))?[0-9 -]+( ?x ?[0-9]+)?$')
|
||||
phone_error_message = """Phone numbers may have a leading "+", and otherwise only contain numbers [0-9]; dash, period or space; parentheses, and an optional extension number indicated by 'x'."""
|
||||
|
||||
class BaseIprForm(forms.ModelForm):
|
||||
licensing_option = forms.IntegerField(widget=forms.RadioSelect(choices=LICENSE_CHOICES), required=False)
|
||||
is_pending = forms.IntegerField(widget=forms.RadioSelect(choices=((1, "YES"), (2, "NO"))), required=False)
|
||||
applies_to_all = forms.IntegerField(widget=forms.RadioSelect(choices=((1, "YES"), (2, "NO"))), required=False)
|
||||
is_pending = forms.IntegerField(widget=forms.RadioSelect(choices=((1, "Yes"), (2, "No"))), required=False)
|
||||
applies_to_all = forms.IntegerField(widget=forms.RadioSelect(choices=((1, "Yes"), (2, "No"))), required=False)
|
||||
class Meta:
|
||||
model = IprDetail
|
||||
exclude = ('rfc_document', 'id_document_tag') # 'legacy_url_0','legacy_url_1','legacy_title_1','legacy_url_2','legacy_title_2')
|
||||
|
||||
|
||||
class BaseContactForm(forms.ModelForm):
|
||||
telephone = forms.RegexField(phone_re, error_message=phone_error_message, required=False)
|
||||
fax = forms.RegexField(phone_re, error_message=phone_error_message, required=False)
|
||||
|
@ -68,9 +68,9 @@ def new(request, type, update=None, submitter=None):
|
|||
|
||||
class IprForm(BaseIprForm):
|
||||
holder_contact = None
|
||||
rfclist = forms.CharField(required=False)
|
||||
draftlist = forms.CharField(required=False)
|
||||
stdonly_license = forms.BooleanField(required=False)
|
||||
rfclist = forms.CharField(label="RFC numbers", required=False)
|
||||
draftlist = forms.CharField(label="Internet-Draft filenames (draft-...)", required=False)
|
||||
stdonly_license = forms.BooleanField(label="Above licensing declaration is limited solely to standards-track IETF documents", required=False)
|
||||
hold_contact_is_submitter = forms.BooleanField(required=False)
|
||||
ietf_contact_is_submitter = forms.BooleanField(required=False)
|
||||
if section_list.get("holder_contact", False):
|
||||
|
@ -98,16 +98,16 @@ def new(request, type, update=None, submitter=None):
|
|||
rfclist_initial = ""
|
||||
if update:
|
||||
rfclist_initial = " ".join(a.doc_alias.name.upper() for a in IprDocAlias.objects.filter(doc_alias__name__startswith="rfc", ipr=update))
|
||||
self.base_fields["rfclist"] = forms.CharField(required=False, initial=rfclist_initial)
|
||||
self.base_fields["rfclist"] = forms.CharField(label="RFC numbers", required=False, initial=rfclist_initial)
|
||||
draftlist_initial = ""
|
||||
if update:
|
||||
draftlist_initial = " ".join(a.doc_alias.name + ("-%s" % a.rev if a.rev else "") for a in IprDocAlias.objects.filter(ipr=update).exclude(doc_alias__name__startswith="rfc"))
|
||||
self.base_fields["draftlist"] = forms.CharField(required=False, initial=draftlist_initial)
|
||||
self.base_fields["draftlist"] = forms.CharField(label="Internet-Draft filenames (draft-...)", required=False, initial=draftlist_initial)
|
||||
if section_list.get("holder_contact", False):
|
||||
self.base_fields["hold_contact_is_submitter"] = forms.BooleanField(required=False)
|
||||
if section_list.get("ietf_contact", False):
|
||||
self.base_fields["ietf_contact_is_submitter"] = forms.BooleanField(required=False)
|
||||
self.base_fields["stdonly_license"] = forms.BooleanField(required=False)
|
||||
self.base_fields["stdonly_license"] = forms.BooleanField(label="Above licensing declaration is limited solely to standards-track IETF documents", required=False)
|
||||
|
||||
BaseIprForm.__init__(self, *args, **kw)
|
||||
# Special validation code
|
||||
|
@ -184,7 +184,7 @@ def new(request, type, update=None, submitter=None):
|
|||
data["generic"] = section_list["generic"]
|
||||
data["status"] = "0"
|
||||
data["comply"] = "1"
|
||||
|
||||
|
||||
for src in ["hold", "ietf"]:
|
||||
if "%s_contact_is_submitter" % src in data:
|
||||
for subfield in ["name", "title", "department", "address1", "address2", "telephone", "fax", "email"]:
|
||||
|
@ -202,7 +202,7 @@ def new(request, type, update=None, submitter=None):
|
|||
|
||||
legal_name_genitive = data['legal_name'] + "'" if data['legal_name'].endswith('s') else data['legal_name'] + "'s"
|
||||
if type == "generic":
|
||||
instance.title = legal_name_genitive + " General License Statement"
|
||||
instance.title = legal_name_genitive + " General License Statement"
|
||||
elif type == "specific":
|
||||
data["ipr_summary"] = get_ipr_summary(form.cleaned_data)
|
||||
instance.title = legal_name_genitive + """ Statement about IPR related to %(ipr_summary)s""" % data
|
||||
|
@ -295,7 +295,7 @@ def update(request, ipr_id=None):
|
|||
"""Update a specific IPR disclosure"""
|
||||
ipr = get_object_or_404(IprDetail, ipr_id=ipr_id)
|
||||
if not ipr.status in [1,3]:
|
||||
raise Http404
|
||||
raise Http404
|
||||
type = "specific"
|
||||
if ipr.generic:
|
||||
type = "generic"
|
||||
|
@ -311,8 +311,8 @@ def update(request, ipr_id=None):
|
|||
class UpdateForm(BaseContactForm):
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(UpdateForm, self).__init__(*args, **kwargs)
|
||||
self.fields["update_auth"] = forms.BooleanField()
|
||||
|
||||
self.fields["update_auth"] = forms.BooleanField(label="I am authorized to update this IPR disclosure, and I understand that notification of this update will be provided to the submitter of the original IPR disclosure and to the Patent Holder's Contact.")
|
||||
|
||||
if request.method == 'POST':
|
||||
form = UpdateForm(request.POST)
|
||||
else:
|
||||
|
|
|
@ -9,8 +9,7 @@ from ietf.meeting import ajax
|
|||
urlpatterns = patterns('',
|
||||
(r'^(?P<meeting_num>\d+)/materials.html$', views.materials),
|
||||
(r'^agenda/$', views.agenda),
|
||||
(r'^(?P<base>agenda-utc)(?P<ext>.html)?$', views.agenda),
|
||||
(r'^agenda(?P<ext>.html)?$', views.agenda),
|
||||
(r'^agenda(-utc)?(?P<ext>.html)?$', views.agenda),
|
||||
(r'^agenda(?P<ext>.txt)$', views.agenda),
|
||||
(r'^agenda(?P<ext>.csv)$', views.agenda),
|
||||
(r'^agenda/edit$', views.edit_agenda),
|
||||
|
@ -28,8 +27,7 @@ urlpatterns = patterns('',
|
|||
(r'^(?P<num>\d+)/agenda/(?P<owner>[A-Za-z0-9-.+_]+@[A-Za-z0-9._]+)/(?P<name>[A-Za-z0-9-:_]+)/sessions.json$', ajax.scheduledsessions_json),
|
||||
(r'^(?P<num>\d+)/agenda/(?P<owner>[A-Za-z0-9-.+_]+@[A-Za-z0-9._]+)/(?P<name>[A-Za-z0-9-:_]+).json$', ajax.agenda_infourl),
|
||||
(r'^(?P<num>\d+)/agenda/edit$', views.edit_agenda),
|
||||
(r'^(?P<num>\d+)/agenda(?P<ext>.html)?/?$', views.agenda),
|
||||
(r'^(?P<num>\d+)/(?P<base>agenda-utc)(?P<ext>.html)?/?$', views.agenda),
|
||||
(r'^(?P<num>\d+)/agenda(-utc)?(?P<ext>.html)?/?$', views.agenda),
|
||||
(r'^(?P<num>\d+)/requests.html$', RedirectView.as_view(url='/meeting/%(num)s/requests', permanent=True)),
|
||||
(r'^(?P<num>\d+)/requests$', views.meeting_requests),
|
||||
(r'^(?P<num>\d+)/agenda(?P<ext>.txt)$', views.agenda),
|
||||
|
|
|
@ -11,7 +11,7 @@ from ietf.dbtemplate.forms import DBTemplateForm
|
|||
from ietf.group.models import Group, Role
|
||||
from ietf.ietfauth.utils import role_required
|
||||
from ietf.name.models import RoleName, FeedbackTypeName, NomineePositionStateName
|
||||
from ietf.nomcom.models import ( NomCom, Nomination, Nominee, NomineePosition,
|
||||
from ietf.nomcom.models import ( NomCom, Nomination, Nominee, NomineePosition,
|
||||
Position, Feedback, ReminderDates )
|
||||
from ietf.nomcom.utils import (NOMINATION_RECEIPT_TEMPLATE, FEEDBACK_RECEIPT_TEMPLATE,
|
||||
get_user_email, validate_private_key, validate_public_key,
|
||||
|
@ -378,7 +378,7 @@ class MergeForm(BaseNomcomForm, forms.Form):
|
|||
|
||||
|
||||
class NominateForm(BaseNomcomForm, forms.ModelForm):
|
||||
comments = forms.CharField(label="Candidate's Qualifications for the Position:",
|
||||
comments = forms.CharField(label="Candidate's qualifications for the position",
|
||||
widget=forms.Textarea())
|
||||
confirmation = forms.BooleanField(label='Email comments back to me as confirmation',
|
||||
help_text="If you want to get a confirmation mail containing your feedback in cleartext, \
|
||||
|
@ -400,6 +400,7 @@ class NominateForm(BaseNomcomForm, forms.ModelForm):
|
|||
'candidate_email', 'candidate_phone',
|
||||
'comments']
|
||||
|
||||
self.fields['nominator_email'].label = 'Nominator email'
|
||||
if self.nomcom:
|
||||
self.fields['position'].queryset = Position.objects.get_by_nomcom(self.nomcom).opened()
|
||||
self.fields['comments'].help_text = self.nomcom.initial_text
|
||||
|
@ -461,7 +462,7 @@ class NominateForm(BaseNomcomForm, forms.ModelForm):
|
|||
# send receipt email to nominator
|
||||
if confirmation:
|
||||
if author:
|
||||
subject = 'Nomination Receipt'
|
||||
subject = 'Nomination receipt'
|
||||
from_email = settings.NOMCOM_FROM_EMAIL
|
||||
to_email = author.address
|
||||
context = {'nominee': nominee.email.person.name,
|
||||
|
@ -479,15 +480,15 @@ class NominateForm(BaseNomcomForm, forms.ModelForm):
|
|||
|
||||
|
||||
class FeedbackForm(BaseNomcomForm, forms.ModelForm):
|
||||
position_name = forms.CharField(label='position',
|
||||
position_name = forms.CharField(label='Position',
|
||||
widget=forms.TextInput(attrs={'size': '40'}))
|
||||
nominee_name = forms.CharField(label='nominee name',
|
||||
nominee_name = forms.CharField(label='Nominee name',
|
||||
widget=forms.TextInput(attrs={'size': '40'}))
|
||||
nominee_email = forms.CharField(label='nominee email',
|
||||
nominee_email = forms.CharField(label='Nominee email',
|
||||
widget=forms.TextInput(attrs={'size': '40'}))
|
||||
nominator_email = forms.CharField(label='commenter email')
|
||||
nominator_email = forms.CharField(label='Commenter email')
|
||||
|
||||
comments = forms.CharField(label='Comments on this candidate',
|
||||
comments = forms.CharField(label='Comments on this nominee',
|
||||
widget=forms.Textarea())
|
||||
confirmation = forms.BooleanField(label='Email comments back to me as confirmation',
|
||||
help_text="If you want to get a confirmation mail containing your feedback in cleartext, \
|
||||
|
|
|
@ -38,7 +38,7 @@ class NomCom(models.Model):
|
|||
upload_to=upload_path_handler, blank=True, null=True)
|
||||
|
||||
group = models.ForeignKey(Group)
|
||||
send_questionnaire = models.BooleanField(verbose_name='Send questionnaires automatically"', default=False,
|
||||
send_questionnaire = models.BooleanField(verbose_name='Send questionnaires automatically', default=False,
|
||||
help_text='If you check this box, questionnaires are sent automatically after nominations')
|
||||
reminder_interval = models.PositiveIntegerField(help_text='If the nomcom user sets the interval field then a cron command will \
|
||||
send reminders to the nominees who have not responded using \
|
||||
|
|
|
@ -41,12 +41,8 @@ def add_num_nominations(user, position, nominee):
|
|||
nominees__in=[nominee],
|
||||
author=author,
|
||||
type='comment').count()
|
||||
if count:
|
||||
mark = """<span style="white-space: pre; color: red;">*</span>"""
|
||||
else:
|
||||
mark = """<span style="white-space: pre;"> </span> """
|
||||
|
||||
return '<span title="%d earlier comments from you on %s as %s">%s</span> ' % (count, nominee.email.address, position, mark)
|
||||
return '<span class="badge" title="%d earlier comments from you on %s as %s">%s</span> ' % (count, nominee.email.address, position, count)
|
||||
|
||||
|
||||
@register.filter
|
||||
|
@ -76,7 +72,7 @@ def decrypt(string, request, year, plain=False):
|
|||
code, out, error = pipe(command % (settings.OPENSSL_COMMAND,
|
||||
encrypted_file.name), key)
|
||||
if code != 0:
|
||||
log("openssl error: %s:\n Error %s: %s" %(command, code, error))
|
||||
log("openssl error: %s:\n Error %s: %s" %(command, code, error))
|
||||
|
||||
os.unlink(encrypted_file.name)
|
||||
|
||||
|
|
|
@ -56,7 +56,7 @@ def index(request):
|
|||
nomcom.ann_url = None
|
||||
return render_to_response('nomcom/index.html',
|
||||
{'nomcom_list': nomcom_list,}, RequestContext(request))
|
||||
|
||||
|
||||
|
||||
def year_index(request, year):
|
||||
nomcom = get_nomcom_by_year(year)
|
||||
|
@ -70,21 +70,21 @@ def year_index(request, year):
|
|||
|
||||
def announcements(request):
|
||||
address_re = re.compile("<.*>")
|
||||
|
||||
|
||||
nomcoms = Group.objects.filter(type="nomcom")
|
||||
|
||||
regimes = []
|
||||
|
||||
|
||||
for n in nomcoms:
|
||||
e = GroupEvent.objects.filter(group=n, type="changed_state", changestategroupevent__state="active").order_by('time')[:1]
|
||||
n.start_year = e[0].time.year if e else 0
|
||||
e = GroupEvent.objects.filter(group=n, type="changed_state", changestategroupevent__state="conclude").order_by('time')[:1]
|
||||
n.end_year = e[0].time.year if e else n.start_year + 1
|
||||
|
||||
r = n.role_set.select_related().filter(name="chair")
|
||||
chair = None
|
||||
if r:
|
||||
chair = r[0]
|
||||
r = n.role_set.select_related().filter(name="chair")
|
||||
chair = None
|
||||
if r:
|
||||
chair = r[0]
|
||||
|
||||
announcements = Message.objects.filter(related_groups=n).order_by('-time')
|
||||
for a in announcements:
|
||||
|
|
|
@ -34,7 +34,7 @@ class AutocompletedPersonsField(forms.CharField):
|
|||
max_entries=None, # max number of selected objs
|
||||
only_users=False, # only select persons who also have a user
|
||||
model=Person, # or Email
|
||||
hint_text="Type in name to search for person",
|
||||
hint_text="Type in name to search for person.",
|
||||
*args, **kwargs):
|
||||
kwargs["max_length"] = 1000
|
||||
self.max_entries = max_entries
|
||||
|
@ -106,7 +106,7 @@ class AutocompletedPersonField(AutocompletedPersonsField):
|
|||
class AutocompletedEmailsField(AutocompletedPersonsField):
|
||||
"""Version of AutocompletedPersonsField with the defaults right for Emails."""
|
||||
|
||||
def __init__(self, model=Email, hint_text="Type in name or email to search for person and email address",
|
||||
def __init__(self, model=Email, hint_text="Type in name or email to search for person and email address.",
|
||||
*args, **kwargs):
|
||||
super(AutocompletedEmailsField, self).__init__(model=model, hint_text=hint_text, *args, **kwargs)
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ except ImportError:
|
|||
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
# a place to put ajax logs if necessary.
|
||||
LOG_DIR = '/var/log/datatracker'
|
||||
LOG_DIR = '/var/log/datatracker'
|
||||
|
||||
import sys
|
||||
sys.path.append(os.path.abspath(BASE_DIR + "/.."))
|
||||
|
@ -63,9 +63,9 @@ DATABASES = {
|
|||
}
|
||||
|
||||
DATABASE_TEST_OPTIONS = {
|
||||
# Comment this out if your database doesn't support InnoDB
|
||||
'init_command': 'SET storage_engine=InnoDB',
|
||||
}
|
||||
# Comment this out if your database doesn't support InnoDB
|
||||
'init_command': 'SET storage_engine=InnoDB',
|
||||
}
|
||||
|
||||
# Local time zone for this installation. Choices can be found here:
|
||||
# http://www.postgresql.org/docs/8.1/static/datetime-keywords.html#DATETIME-TIMEZONE-SET-TABLE
|
||||
|
@ -87,10 +87,11 @@ USE_I18N = False
|
|||
|
||||
USE_TZ = False
|
||||
|
||||
MEDIA_URL = 'http://www.ietf.org/'
|
||||
MEDIA_URL = '//www.ietf.org/'
|
||||
|
||||
STATIC_URL = "/"
|
||||
STATIC_ROOT = os.path.abspath(BASE_DIR + "/../static/")
|
||||
STATIC_URL = STATIC_ROOT + '/'
|
||||
|
||||
WSGI_APPLICATION = "ietf.wsgi.application"
|
||||
|
||||
|
@ -233,8 +234,35 @@ INSTALLED_APPS = (
|
|||
'ietf.secr.sreq',
|
||||
'ietf.nomcom',
|
||||
'ietf.dbtemplate',
|
||||
# FACELIFT: apps for facelift UI
|
||||
'widget_tweaks',
|
||||
'typogrify',
|
||||
'bootstrap3',
|
||||
'mathfilters',
|
||||
)
|
||||
|
||||
# Settings for django-bootstrap3
|
||||
# See http://django-bootstrap3.readthedocs.org/en/latest/settings.html
|
||||
BOOTSTRAP3 = {
|
||||
# Label class to use in horizontal forms
|
||||
'horizontal_label_class': 'col-md-2',
|
||||
|
||||
# Field class to use in horiozntal forms
|
||||
'horizontal_field_class': 'col-md-10',
|
||||
|
||||
# Set HTML required attribute on required fields
|
||||
'set_required': True,
|
||||
|
||||
# Set placeholder attributes to label if no placeholder is provided
|
||||
'set_placeholder': False,
|
||||
|
||||
# Class to indicate required
|
||||
'form_required_class': 'bootstrap3-required',
|
||||
|
||||
# Class to indicate error
|
||||
'form_error_class': 'bootstrap3-error',
|
||||
}
|
||||
|
||||
INTERNAL_IPS = (
|
||||
# AMS servers
|
||||
'64.170.98.32',
|
||||
|
@ -246,7 +274,7 @@ INTERNAL_IPS = (
|
|||
)
|
||||
|
||||
# no slash at end
|
||||
IDTRACKER_BASE_URL = "http://datatracker.ietf.org"
|
||||
IDTRACKER_BASE_URL = "//datatracker.ietf.org"
|
||||
RFCDIFF_PREFIX = "//www.ietf.org/rfcdiff"
|
||||
|
||||
# Valid values:
|
||||
|
@ -287,22 +315,22 @@ INTERNET_DRAFT_ARCHIVE_DIR = '/a/www/www6s/draft-archive'
|
|||
MEETING_RECORDINGS_DIR = '/a/www/audio'
|
||||
|
||||
# Mailing list info URL for lists hosted on the IETF servers
|
||||
MAILING_LIST_INFO_URL = "https://www.ietf.org/mailman/listinfo/%(list_addr)s"
|
||||
MAILING_LIST_INFO_URL = "//www.ietf.org/mailman/listinfo/%(list_addr)s"
|
||||
|
||||
# Ideally, more of these would be local -- but since we don't support
|
||||
# versions right now, we'll point to external websites
|
||||
DOC_HREFS = {
|
||||
"charter": "http://www.ietf.org/charter/{doc.name}-{doc.rev}.txt",
|
||||
"draft": "http://www.ietf.org/archive/id/{doc.name}-{doc.rev}.txt",
|
||||
"slides": "http://www.ietf.org/slides/{doc.name}-{doc.rev}",
|
||||
"conflrev": "http://www.ietf.org/cr/{doc.name}-{doc.rev}.txt",
|
||||
"statchg": "http://www.ietf.org/sc/{doc.name}-{doc.rev}.txt",
|
||||
"charter": "//www.ietf.org/charter/{doc.name}-{doc.rev}.txt",
|
||||
"draft": "//www.ietf.org/archive/id/{doc.name}-{doc.rev}.txt",
|
||||
"slides": "//www.ietf.org/slides/{doc.name}-{doc.rev}",
|
||||
"conflrev": "//www.ietf.org/cr/{doc.name}-{doc.rev}.txt",
|
||||
"statchg": "//www.ietf.org/sc/{doc.name}-{doc.rev}.txt",
|
||||
}
|
||||
|
||||
MEETING_DOC_HREFS = {
|
||||
"agenda": "/meeting/{meeting}/agenda/{doc.group.acronym}/",
|
||||
"minutes": "http://www.ietf.org/proceedings/{meeting}/minutes/{doc.external_url}",
|
||||
"slides": "http://www.ietf.org/proceedings/{meeting}/slides/{doc.external_url}",
|
||||
"minutes": "//www.ietf.org/proceedings/{meeting}/minutes/{doc.external_url}",
|
||||
"slides": "//www.ietf.org/proceedings/{meeting}/slides/{doc.external_url}",
|
||||
"recording": "{doc.external_url}",
|
||||
}
|
||||
|
||||
|
@ -327,15 +355,15 @@ IANA_APPROVE_EMAIL = "drafts-approval@icann.org"
|
|||
|
||||
# Put real password in settings_local.py
|
||||
IANA_SYNC_PASSWORD = "secret"
|
||||
IANA_SYNC_CHANGES_URL = "https://datatracker.iana.org:4443/data-tracker/changes"
|
||||
IANA_SYNC_PROTOCOLS_URL = "http://www.iana.org/protocols/"
|
||||
IANA_SYNC_CHANGES_URL = "//datatracker.iana.org:4443/data-tracker/changes"
|
||||
IANA_SYNC_PROTOCOLS_URL = "//www.iana.org/protocols/"
|
||||
|
||||
RFC_TEXT_RSYNC_SOURCE="ftp.rfc-editor.org::rfcs-text-only"
|
||||
|
||||
RFC_EDITOR_SYNC_PASSWORD="secret"
|
||||
RFC_EDITOR_SYNC_NOTIFICATION_URL = "http://www.rfc-editor.org/parser/parser.php"
|
||||
RFC_EDITOR_QUEUE_URL = "http://www.rfc-editor.org/queue2.xml"
|
||||
RFC_EDITOR_INDEX_URL = "http://www.rfc-editor.org/rfc/rfc-index.xml"
|
||||
RFC_EDITOR_SYNC_NOTIFICATION_URL = "//www.rfc-editor.org/parser/parser.php"
|
||||
RFC_EDITOR_QUEUE_URL = "//www.rfc-editor.org/queue2.xml"
|
||||
RFC_EDITOR_INDEX_URL = "//www.rfc-editor.org/rfc/rfc-index.xml"
|
||||
|
||||
# Liaison Statement Tool settings
|
||||
LIAISON_UNIVERSAL_FROM = 'Liaison Statement Management Tool <lsmt@' + IETF_DOMAIN + '>'
|
||||
|
@ -371,7 +399,7 @@ INTERNET_DRAFT_DAYS_TO_EXPIRE = 185
|
|||
|
||||
IDSUBMIT_REPOSITORY_PATH = INTERNET_DRAFT_PATH
|
||||
IDSUBMIT_STAGING_PATH = '/a/www/www6s/staging/'
|
||||
IDSUBMIT_STAGING_URL = 'http://www.ietf.org/staging/'
|
||||
IDSUBMIT_STAGING_URL = '//www.ietf.org/staging/'
|
||||
IDSUBMIT_IDNITS_BINARY = '/a/www/ietf-datatracker/scripts/idnits'
|
||||
|
||||
IDSUBMIT_MAX_PLAIN_DRAFT_SIZE = 6291456 # Max size of the txt draft in bytes
|
||||
|
@ -414,7 +442,7 @@ SECR_AUTH_UNRESTRICTED_URLS = (
|
|||
(r'^/secr/sreq/'),
|
||||
)
|
||||
SECR_BLUE_SHEET_PATH = '/a/www/ietf-datatracker/documents/blue_sheet.rtf'
|
||||
SECR_BLUE_SHEET_URL = 'https://datatracker.ietf.org/documents/blue_sheet.rtf'
|
||||
SECR_BLUE_SHEET_URL = '//datatracker.ietf.org/documents/blue_sheet.rtf'
|
||||
SECR_INTERIM_LISTING_DIR = '/a/www/www6/meeting/interim'
|
||||
SECR_MAX_UPLOAD_SIZE = 40960000
|
||||
SECR_PROCEEDINGS_DIR = '/a/www/www6s/proceedings/'
|
||||
|
@ -451,19 +479,16 @@ BADNESS_MUCHTOOBIG = 500
|
|||
SELENIUM_TESTS = False
|
||||
SELENIUM_TESTS_ONLY = False
|
||||
|
||||
# Path to the email alias lists. Used by ietf.utils.aliases
|
||||
DRAFT_ALIASES_PATH = "/a/postfix/draft-aliases"
|
||||
DRAFT_VIRTUAL_PATH = "/a/postfix/draft-virtual"
|
||||
|
||||
GROUP_ALIASES_PATH = "/a/postfix/group-aliases"
|
||||
GROUP_VIRTUAL_PATH = "/a/postfix/group-virtual"
|
||||
|
||||
POSTCONFIRM_PATH = "/a/postconfirm/test-wrapper"
|
||||
# Set debug apps in DEV_APPS settings_local
|
||||
DEV_APPS = ()
|
||||
|
||||
# Put the production SECRET_KEY in settings_local.py, and also any other
|
||||
# sensitive or site-specific changes. DO NOT commit settings_local.py to svn.
|
||||
from settings_local import * # pyflakes:ignore
|
||||
|
||||
# Add DEV_APPS to INSTALLED_APPS
|
||||
INSTALLED_APPS += DEV_APPS
|
||||
|
||||
# We provide a secret key only for test and development modes. It's
|
||||
# absolutely vital that django fails to start in production mode unless a
|
||||
# secret key has been provided elsewhere, not in this file which is
|
||||
|
|
|
@ -47,20 +47,20 @@ class UploadForm(forms.Form):
|
|||
ietf_monday = Meeting.get_ietf_monday()
|
||||
|
||||
if now.date() >= (first_cut_off-timedelta(days=settings.CUTOFF_WARNING_DAYS)) and now.date() < first_cut_off:
|
||||
self.cutoff_warning = ( 'The pre-meeting cut-off date for new documents (i.e., version -00 Internet-Drafts) is %s at %02sh UTC.<br/>' % (first_cut_off, settings.CUTOFF_HOUR) +
|
||||
'The pre-meeting cut-off date for revisions to existing documents is %s at %02sh UTC.<br/>' % (second_cut_off, settings.CUTOFF_HOUR) )
|
||||
self.cutoff_warning = ( 'The pre-meeting cut-off date for new documents (i.e., version -00 Internet-Drafts) is %s at %02sh UTC.' % (first_cut_off, settings.CUTOFF_HOUR) +
|
||||
'The pre-meeting cut-off date for revisions to existing documents is %s at %02sh UTC.' % (second_cut_off, settings.CUTOFF_HOUR) )
|
||||
elif now.date() >= first_cut_off and now.date() < second_cut_off: # We are in the first_cut_off
|
||||
if now.date() == first_cut_off and now.hour < settings.CUTOFF_HOUR:
|
||||
self.cutoff_warning = 'The pre-meeting cut-off date for new documents (i.e., version -00 Internet-Drafts) is %s, at %02sh UTC. After that, you will not be able to submit a new document until %s, at %sh UTC' % (first_cut_off, settings.CUTOFF_HOUR, ietf_monday, settings.CUTOFF_HOUR, )
|
||||
else: # No 00 version allowed
|
||||
self.cutoff_warning = 'The pre-meeting cut-off date for new documents (i.e., version -00 Internet-Drafts) was %s at %sh UTC. You will not be able to submit a new document until %s, at %sh UTC.<br>You can still submit a version -01 or higher Internet-Draft until %sh UTC, %s' % (first_cut_off, settings.CUTOFF_HOUR, ietf_monday, settings.CUTOFF_HOUR, settings.CUTOFF_HOUR, second_cut_off, )
|
||||
self.cutoff_warning = 'The pre-meeting cut-off date for new documents (i.e., version -00 Internet-Drafts) was %s at %sh UTC. You will not be able to submit a new document until %s, at %sh UTC. You can still submit a version -01 or higher Internet-Draft until %sh UTC, %s' % (first_cut_off, settings.CUTOFF_HOUR, ietf_monday, settings.CUTOFF_HOUR, settings.CUTOFF_HOUR, second_cut_off, )
|
||||
self.in_first_cut_off = True
|
||||
elif now.date() >= second_cut_off and now.date() < ietf_monday:
|
||||
if now.date() == second_cut_off and now.hour < settings.CUTOFF_HOUR: # We are in the first_cut_off yet
|
||||
self.cutoff_warning = 'The pre-meeting cut-off date for new documents (i.e., version -00 Internet-Drafts) was %s at %02sh UTC. You will not be able to submit a new document until %s, at %02sh UTC.<br>The I-D submission tool will be shut down at %02sh UTC today, and reopened at %02sh UTC on %s' % (first_cut_off, settings.CUTOFF_HOUR, ietf_monday, settings.CUTOFF_HOUR, settings.CUTOFF_HOUR, settings.CUTOFF_HOUR, ietf_monday)
|
||||
self.cutoff_warning = 'The pre-meeting cut-off date for new documents (i.e., version -00 Internet-Drafts) was %s at %02sh UTC. You will not be able to submit a new document until %s, at %02sh UTC. The I-D submission tool will be shut down at %02sh UTC today, and reopened at %02sh UTC on %s' % (first_cut_off, settings.CUTOFF_HOUR, ietf_monday, settings.CUTOFF_HOUR, settings.CUTOFF_HOUR, settings.CUTOFF_HOUR, ietf_monday)
|
||||
self.in_first_cut_off = True
|
||||
else: # Completely shut down of the tool
|
||||
self.cutoff_warning = 'The cut-off time for the I-D submission was %02dh UTC, %s.<br>The I-D submission tool will be reopened at %02dh local time at the IETF meeting location, %s.' % (settings.CUTOFF_HOUR, second_cut_off, settings.CUTOFF_HOUR, ietf_monday)
|
||||
self.cutoff_warning = 'The cut-off time for the I-D submission was %02dh UTC, %s. The I-D submission tool will be reopened at %02dh local time at the IETF meeting location, %s.' % (settings.CUTOFF_HOUR, second_cut_off, settings.CUTOFF_HOUR, ietf_monday)
|
||||
self.shutdown = True
|
||||
|
||||
def clean_file(self, field_name, parser_class):
|
||||
|
@ -116,7 +116,7 @@ class UploadForm(forms.Form):
|
|||
# check existing
|
||||
existing = Submission.objects.filter(name=self.parsed_draft.filename, rev=self.parsed_draft.revision).exclude(state__in=("posted", "cancel"))
|
||||
if existing:
|
||||
raise forms.ValidationError(mark_safe('Submission with same name and revision is currently being processed. <a href="%s">Check the status here</a>' % urlreverse("submit_submission_status", kwargs={ 'submission_id': existing[0].pk })))
|
||||
raise forms.ValidationError(mark_safe('Submission with same name and revision is currently being processed. <a href="%s">Check the status here.</a>' % urlreverse("submit_submission_status", kwargs={ 'submission_id': existing[0].pk })))
|
||||
|
||||
# cut-off
|
||||
if self.parsed_draft.revision == '00' and self.in_first_cut_off:
|
||||
|
@ -227,7 +227,7 @@ class EditSubmissionForm(forms.ModelForm):
|
|||
pages = forms.IntegerField(required=True)
|
||||
abstract = forms.CharField(widget=forms.Textarea, required=True)
|
||||
|
||||
note = forms.CharField(label=mark_safe(u'Comment to<br/> the Secretariat'), widget=forms.Textarea, required=False)
|
||||
note = forms.CharField(label=mark_safe(u'Comment to the Secretariat'), widget=forms.Textarea, required=False)
|
||||
|
||||
class Meta:
|
||||
model = Submission
|
||||
|
|
|
@ -17,7 +17,7 @@ def show_submission_files(context, submission):
|
|||
exists = True
|
||||
elif submission.state_id == "posted":
|
||||
continue
|
||||
result.append({'name': '[%s version]' % ext[1:].upper(),
|
||||
result.append({'name': '%s' % ext[1:],
|
||||
'exists': exists,
|
||||
'url': '%s%s-%s%s' % (settings.IDSUBMIT_STAGING_URL, submission.name, submission.rev, ext)})
|
||||
return {'files': result}
|
||||
|
@ -27,15 +27,16 @@ def show_submission_files(context, submission):
|
|||
def two_pages_decorated_with_errors(submission, errors):
|
||||
pages = submission.first_two_pages or ''
|
||||
if 'rev' not in errors.keys():
|
||||
return mark_safe('<pre class="twopages">%s</pre>' % escape(pages))
|
||||
result = '<pre class="twopages">\n'
|
||||
return mark_safe('<pre>%s</pre>' % escape(pages))
|
||||
result = '<pre>\n'
|
||||
for line in pages.split('\n'):
|
||||
if line.find('%s-%s' % (submission.name, submission.rev)) > -1:
|
||||
result += '</pre><pre class="twopages" style="background: red;">'
|
||||
result += '<div class="bg-danger"><b>'
|
||||
result += escape(line)
|
||||
result += '\n'
|
||||
result += '</pre><pre class="twopages">\n'
|
||||
result += '</b></div>\n'
|
||||
else:
|
||||
result += escape(line)
|
||||
result += '\n'
|
||||
result += '</pre>pre>\n'
|
||||
return mark_safe(result)
|
||||
|
|
|
@ -39,7 +39,7 @@ def validate_submission(submission):
|
|||
for ext in submission.file_types.split(','):
|
||||
source = os.path.join(settings.IDSUBMIT_STAGING_PATH, '%s-%s%s' % (submission.name, submission.rev, ext))
|
||||
if not os.path.exists(source):
|
||||
errors['files'] = '"%s" was not found in the staging area.<br />We recommend you that you cancel this submission and upload your files again.' % os.path.basename(source)
|
||||
errors['files'] = '"%s" was not found in the staging area. We recommend you that you cancel this submission and upload your files again.' % os.path.basename(source)
|
||||
break
|
||||
|
||||
if not submission.title:
|
||||
|
|
153
ietf/templates/base/menu.html
Normal file
153
ietf/templates/base/menu.html
Normal file
|
@ -0,0 +1,153 @@
|
|||
{% load wg_menu %}
|
||||
{% load streams_menu %}
|
||||
{% load ietf_filters community_tags %}
|
||||
|
||||
<li {% if flavor == "top" %}class="dropdown"{% else %}class="nav-header"{% endif %}>
|
||||
{% if flavor == "top" %}<a href="#" class="dropdown-toggle" data-toggle="dropdown">{% endif %}
|
||||
{#<span class="fa fa-user"></span>#}
|
||||
{% if user.is_authenticated %} {{ user }} {% else %} User {% endif %}
|
||||
{% if flavor == "top" %}
|
||||
</a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
{% endif %}
|
||||
{% if request.get_full_path == "/accounts/logout/" %}
|
||||
<li><a rel="nofollow" href="/accounts/login{% if "/accounts/logout/" not in request.get_full_path %}/?next={{request.get_full_path|urlencode}}{% endif %}">Sign in</a></li>
|
||||
{% else %}
|
||||
{% if user.is_authenticated %}
|
||||
<li><a rel="nofollow" href="/accounts/logout/" >Sign out</a></li>
|
||||
<li><a rel="nofollow" href="/accounts/profile/">Edit profile</a></li>
|
||||
{% else %}
|
||||
<li><a rel="nofollow" href="/accounts/login/?next={{request.get_full_path|urlencode}}">Sign in</a></li>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
<li><a href="{% url "account_index" %}">{% if request.user.is_authenticated %}Manage account{% else %}New account{% endif %}</a></li>
|
||||
<li><a href="{%url "ietf.cookies.views.settings" %}" rel="nofollow">Settings</a></li>
|
||||
|
||||
{% if user|has_role:"Area Director" %}
|
||||
{% if flavor == "top" %}<li class="divider hidden-xs"></li>{% endif %}
|
||||
<li {%if flavor == "top" %}class="dropdown-header hidden-xs"{% else %}class="nav-header"{% endif %}>AD dashboard</li>
|
||||
<li><a href="{% url "docs_for_ad" name=user.person.full_name_as_key %}">My docs</a></li>
|
||||
<li><a href="{% url "ietf.iesg.views.agenda_documents" %}">Next telechat</a></li>
|
||||
<li><a href="{% url "ietf.iesg.views.discusses" %}">Discusses</a></li>
|
||||
<li><a href="{% url "ietf.iesg.views.milestones_needing_review" %}">Milestone review</a></li>
|
||||
{% endif %}
|
||||
|
||||
{% if user|has_role:"Secretariat" %}
|
||||
{% if flavor == "top" %}<li class="divider hidden-xs"></li>{% endif %}
|
||||
<li {%if flavor == "top" %}class="dropdown-header hidden-xs"{% else %}class="nav-header"{% endif %}>IETF secretariat</li>
|
||||
<li><a href="/admin/iesg/telechatdate/">Telechat dates</a></li>
|
||||
<li><a href="/admin/iesg/telechatagendaitem/">Management items</a></li>
|
||||
<li><a href="{% url "ietf.iesg.views.milestones_needing_review" %}">Milestones</a></li>
|
||||
<li><a href="{% url "ietf.sync.views.discrepancies" %}">Sync discrepancies</a>
|
||||
{% endif %}
|
||||
|
||||
{% if user|has_role:"IANA" %}
|
||||
{% if flavor == "top" %}<li class="divider hidden-xs"></li>{% endif %}
|
||||
<li {%if flavor == "top" %}class="dropdown-header hidden-xs"{% else %}class="nav-header"{% endif %}>IANA</li>
|
||||
<li><a href="{% url "ietf.sync.views.discrepancies" %}">Sync discrepancies</a></li>
|
||||
{% endif %}
|
||||
|
||||
{% if user|has_role:"RFC Editor" %}
|
||||
{% if flavor == "top" %}<li class="divider hidden-xs"></li>{% endif %}
|
||||
<li {%if flavor == "top" %}class="dropdown-header hidden-xs"{% else %}class="nav-header"{% endif %}>RFC Editor</li>
|
||||
<li><a href="{% url "ietf.sync.views.discrepancies" %}">Sync discrepancies</a></li>
|
||||
{% endif %}
|
||||
{% if flavor == "top" %}</ul>{% endif %}
|
||||
|
||||
<li {% if flavor == "top" %}class="dropdown"{% else %}class="nav-header"{% endif %}>
|
||||
{% if flavor == "top" %}<a href="#" class="dropdown-toggle" data-toggle="dropdown">{% endif %}
|
||||
{#<span class="fa fa-users"></span>#}
|
||||
Groups
|
||||
{% if flavor == "top" %}
|
||||
</a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
{% endif %}
|
||||
|
||||
<li><a href="{% url "ietf.group.info.active_groups" group_type="wg" %}">Active WGs</a></li>
|
||||
<li><a href="{% url "ietf.group.info.active_groups" group_type="rg" %}">Active RGs</a></li>
|
||||
|
||||
{% if flavor == "top" %}<li class="divider visible-lg-block"></li>{% endif %}
|
||||
<li {%if flavor == "top" %}class="dropdown-header visible-lg-block"{% else %}class="nav-header hidden-nojs"{% endif %}>By area/parent</li>
|
||||
{% wg_menu "facelift" %}
|
||||
<li class="hidden-lg hidden-nojs"><a href="#" data-toggle="modal" data-target="#navmodal">Jump to group</a></li>
|
||||
|
||||
{% if flavor == "top" %}<li class="divider hidden-xs"></li>{% endif %}
|
||||
<li {%if flavor == "top" %}class="dropdown-header hidden-xs"{% else %}class="nav-header"{% endif %}>New work</li>
|
||||
<li><a href="{% url "ietf.group.info.chartering_groups" %}">Chartering WGs</a></li>
|
||||
<li><a href="{% url "ietf.group.info.bofs" group_type="wg" %}">BOFs</a></li>
|
||||
|
||||
{% if flavor == "top" %}<li class="divider hidden-xs"></li>{% endif %}
|
||||
<li {%if flavor == "top" %}class="dropdown-header hidden-xs"{% else %}class="nav-header"{% endif %}>Other groups</li>
|
||||
<li><a href="{% url "ietf.group.info.concluded_groups" %}">Concluded WGs</a></li>
|
||||
<li><a href="//www.ietf.org/list/nonwg.html">Non-WG lists</a></li>
|
||||
|
||||
{% if flavor == "top" %}</ul>{% endif %}
|
||||
|
||||
<li {% if flavor == "top" %}class="dropdown"{% else %}class="nav-header"{% endif %}>
|
||||
{% if flavor == "top" %}<a href="#" class="dropdown-toggle" data-toggle="dropdown">{% endif %}
|
||||
{#<span class="fa fa-file-text"></span>#}
|
||||
Documents
|
||||
{% if flavor == "top" %}
|
||||
</a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
{% endif %}
|
||||
<li><a href="{% url "submit_upload_submission" %}">Submit a draft</a></li>
|
||||
|
||||
{% if user|has_role:"WG Chair" %}
|
||||
{% if flavor == "top" %}<li class="divider hidden-xs"></li>{% endif %}
|
||||
<li {%if flavor == "top" %}class="dropdown-header hidden-xs"{% else %}class="nav-header"{% endif %}>WG chair</li>
|
||||
<li><a href="{% url "submit_approvals" %}">Approve a draft</a></li>
|
||||
{% endif %}
|
||||
|
||||
{% get_user_managed_lists user as community_lists %}
|
||||
{% if community_lists %}
|
||||
<li><a href="{{ community_lists.personal.get_manage_url }}">My tracked docs</a></li>
|
||||
{% for cl in community_lists.group %}
|
||||
<li><a href="{{ cl.get_manage_url }}">WG {{ cl.short_name }} docs</a></li>
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
<li><a rel="nofollow" href="/accounts/login/?next={{request.get_full_path|urlencode}}">Sign in to track docs</a></li>
|
||||
{% endif %}
|
||||
|
||||
{% if user|has_role:"Area Director,Secretariat" %}
|
||||
{% if flavor == "top" %}<li class="divider hidden-xs"></li>{% endif %}
|
||||
<li><a href="{% url "rfc_status_changes" %}">RFC status changes</a></li>
|
||||
{% endif %}
|
||||
{% if flavor == "top" %}<li class="divider hidden-xs"></li>{% endif %}
|
||||
<li {%if flavor == "top" %}class="dropdown-header hidden-xs"{% else %}class="nav-header"{% endif %}>RFC streams</li>
|
||||
<li><a href="{% url "ietf.group.views_stream.streams" %}iab/">IAB</a></li>
|
||||
<li><a href="{% url "ietf.group.views_stream.streams" %}irtf/">IRTF</a></li>
|
||||
<li><a href="{% url "ietf.group.views_stream.streams" %}ise/">ISE</a></li>
|
||||
|
||||
{% if flavor == "top" %}</ul>{% endif %}
|
||||
|
||||
<li {% if flavor == "top" %}class="dropdown"{% else %}class="nav-header"{% endif %}>
|
||||
{% if flavor == "top" %}<a href="#" class="dropdown-toggle" data-toggle="dropdown">{% endif %}
|
||||
{#<span class="fa fa-comments"></span>#}
|
||||
Meetings
|
||||
{% if flavor == "top" %}
|
||||
</a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
{% endif %}
|
||||
|
||||
<li><a href="/meeting/agenda/">Agenda</a></li>
|
||||
<li><a href="/meeting/">Materials</a></li>
|
||||
<li><a href="//www.ietf.org/meeting/proceedings.html">Past proceedings</a></li>
|
||||
<li><a href="//www.ietf.org/meeting/upcoming.html">Upcoming</a></li>
|
||||
<li><a href="/meeting/requests">Session requests</a></li>
|
||||
{% if flavor == "top" %}</ul>{% endif %}
|
||||
|
||||
<li {% if flavor == "top" %}class="dropdown"{% else %}class="nav-header"{% endif %}>
|
||||
{% if flavor == "top" %}<a href="#" class="dropdown-toggle" data-toggle="dropdown">{% endif %}
|
||||
{#<span class="fa fa-folder"></span>#}
|
||||
Other
|
||||
{% if flavor == "top" %}
|
||||
</a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
{% endif %}
|
||||
|
||||
<li><a href="/ipr/">IPR disclosures</a></li>
|
||||
<li><a href="/liaison/">Liaison statements</a></li>
|
||||
<li><a href="/iesg/agenda/">IESG agenda</a></li>
|
||||
{% if flavor == "top" %}</ul>{% endif %}
|
19
ietf/templates/base/menu_wg.html
Normal file
19
ietf/templates/base/menu_wg.html
Normal file
|
@ -0,0 +1,19 @@
|
|||
{% for area in areas %}
|
||||
<li class="hidden-nojs dropdown-submenu visible-lg-block">
|
||||
<a href="/wg/#{{ area.acronym }}">{{ area.short_area_name }}</a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
{% for g in area.active_groups %}
|
||||
<li><a href="{% url "ietf.group.info.group_home" group_type=g.type_id acronym=g.acronym %}">{{ g.acronym }} — {{ g.name}}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</li>
|
||||
{% endfor %}
|
||||
|
||||
<li class="hidden-nojs dropdown-submenu visible-lg-block">
|
||||
<a href="">IRTF</a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
{% for group in rgs %}
|
||||
<li><a href="{% url "ietf.group.info.group_home" group_type=group.type_id acronym=group.acronym %}">{{ group.acronym }} — {{ group.name}}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</li>
|
51
ietf/templates/base/menu_wg_modal.html
Normal file
51
ietf/templates/base/menu_wg_modal.html
Normal file
|
@ -0,0 +1,51 @@
|
|||
{# widthratio rounds up, is useless #}
|
||||
{% load mathfilters %}
|
||||
|
||||
{% with cols=areas|length|add:1 %}
|
||||
{% with colw=100|div:cols %}
|
||||
<div class="table-responsive">
|
||||
<table class="table table-condensed">
|
||||
<thead>
|
||||
<tr>
|
||||
{% for area in areas %}
|
||||
<th class="text-center" style="width:{{colw}}%">
|
||||
{{area.acronym|upper}}
|
||||
</th>
|
||||
{% endfor %}
|
||||
<th class="text-center" style="width:{{colw}}%">
|
||||
IRTF
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
{% for area in areas %}
|
||||
<td>
|
||||
<div class="btn-group-vertical btn-block">
|
||||
{% for group in area.active_groups %}
|
||||
<div class="btn-group btn-group-xs btn-group-justified">
|
||||
<a href="{% url "ietf.group.info.group_home" group_type=group.type_id acronym=group.acronym %}" class="btn btn-default">
|
||||
{{group.acronym}}
|
||||
</a>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</td>
|
||||
{% endfor %}
|
||||
<td>
|
||||
<div class="btn-group-vertical btn-block">
|
||||
{% for group in rgs %}
|
||||
<div class="btn-group btn-group-xs btn-group-justified">
|
||||
<a href="{% url "ietf.group.info.group_home" group_type=group.type_id acronym=group.acronym %}" class="btn btn-default">
|
||||
{{group.acronym}}
|
||||
</a>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{% endwith %}
|
||||
{% endwith %}
|
|
@ -1,18 +1,24 @@
|
|||
<h2>Display customization</h2>
|
||||
{% load bootstrap3 %}
|
||||
|
||||
<form action="#custom" method="post" />{% csrf_token %}
|
||||
<h3>Sort method</h2>
|
||||
{{ display_form.sort_method }}
|
||||
{% bootstrap_messages %}
|
||||
|
||||
<h3>Show fields</h2>
|
||||
<div>
|
||||
{% for field in dc.get_display_fields_config %}
|
||||
<div style="float: left; width: 30%;">
|
||||
<input id="id_{{ field.codename }}" type="checkbox" name="{{ field.codename }}"{% if field.active %} checked="checked"{% endif %} />
|
||||
<label for="id_{{ field.codename }}">{{ field.description }}</label>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div style="clear: both;"><br /></div>
|
||||
<input type="submit" value="Save configuration" name="save_display" />
|
||||
<form role="form" method="post" action="#custom">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form display_form %}
|
||||
|
||||
<div class="form-group">
|
||||
<label>Show fields</label>
|
||||
{% for field in dc.get_display_fields_config %}
|
||||
<div class="checkbox">
|
||||
<label for="id_{{ field.codename }}">
|
||||
<input id="id_{{ field.codename }}" type="checkbox" name="{{ field.codename }}" {% if field.active %}checked{% endif %}>
|
||||
{{ field.description }}
|
||||
</label>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
{% buttons %}
|
||||
<input type="submit" class="btn btn-primary" name="save_display">
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
|
|
|
@ -1,124 +1,130 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% load bootstrap3 %}
|
||||
|
||||
{% block title %}{{ cl.long_name }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>{{ cl.long_name }}</h1>
|
||||
<div id="mytabs" class="yui-navset">
|
||||
<ul class="yui-nav">
|
||||
<li class="selected"><a href="#view"><em>Documents</em></a></li>
|
||||
<li><a href="#documents"><em>Explicitly added</em></a></li>
|
||||
<li><a href="#rules"><em>Rules</em></a></li>
|
||||
<li><a href="#custom"><em>Display customization</em></a></li>
|
||||
<li><a href="#info"><em>Exports</em></a></li>
|
||||
|
||||
{% bootstrap_messages %}
|
||||
|
||||
<ul class="nav nav-tabs nav-memory">
|
||||
<li class="active"><a href="#view" data-toggle="tab">Documents</a></li>
|
||||
<li><a href="#documents" data-toggle="tab">Explicitly added</a></li>
|
||||
<li><a href="#rules" data-toggle="tab">Rules</a></li>
|
||||
<li><a href="#custom" data-toggle="tab">Display customization</a></li>
|
||||
<li><a href="#info" data-toggle="tab">Exports</a></li>
|
||||
</ul>
|
||||
|
||||
<div class="yui-content">
|
||||
<p></p>
|
||||
|
||||
<div id="view">
|
||||
{% include "community/view_list.html" %}
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane active" id="view">
|
||||
{% include "community/view_list.html" %}
|
||||
</div>
|
||||
|
||||
<div class="tab-pane" id="documents">
|
||||
<p>
|
||||
In order to add some individual documents to your list, you have to:
|
||||
</p>
|
||||
<ul>
|
||||
<li>Search for the document or documents you want to add using the datatracker search form.</li>
|
||||
<li>In the search results, you'll find a link to add individual documents to your list.</li>
|
||||
</ul>
|
||||
<a class="btn btn-default" href="/doc/search">Search documents</a>
|
||||
|
||||
<table class="table table-condensed table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th><th>State</th><th>Title</th><th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for doc in cl.added_ids.all %}
|
||||
<tr>
|
||||
<td>{{ doc.display_name }}</td>
|
||||
<td>{{ doc.get_state }}</td>
|
||||
<td><a href="{{ doc.get_absolute_url }}">{{ doc.title }}</a></td>
|
||||
<td><a class="btn btn-danger btn-xs" href="{% url "community_remove_document" cl.pk doc.pk %}">Remove</a></td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="tab-pane" id="rules">
|
||||
<table class="table table-condensed table-striped">
|
||||
<thead>
|
||||
<tr><th>Rule</th><th>Value</th><th>Documents</th><th></th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for rule in cl.rule_set.all %}
|
||||
{% with rule.get_callable_rule as callable %}
|
||||
<tr>
|
||||
<td>{{ callable.description }}</td>
|
||||
<td>{{ callable.show_value }}</td>
|
||||
<td>{% with rule.cached_ids.count as count %}{{ count }} document{{ count|pluralize }}{% endwith %}</td>
|
||||
<td><a class="btn btn-danger btn-xs" href="{% url "community_remove_rule" cl.pk rule.pk %}">Remove</a></td>
|
||||
</tr>
|
||||
{% endwith %}
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h3>Add a new rule</h3>
|
||||
|
||||
<form role="form" method="post">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form rule_form %}
|
||||
|
||||
{% buttons %}
|
||||
<input type="submit" class="btn btn-primary" name="save_rule" value="Add rule">
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="tab-pane" id="custom">
|
||||
{% include "community/customize_display.html" %}
|
||||
</div>
|
||||
|
||||
<div class="tab-pane" id="info">
|
||||
<p>Feel free to share the following links if you need to:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="{{ cl.secret }}/view/">Read only view for {{ cl.long_name }}</a></li>
|
||||
<li><a href="{{ cl.secret }}/changes/feed/">Feed for every change in status of {{ cl.long_name }}</a></li>
|
||||
<li><a href="{{ cl.secret }}/changes/significant/feed/">Feed for significant change in status of {{ cl.long_name }}</a></li>
|
||||
<li><a href="{{ cl.secret }}/subscribe/">Subscribe to the mailing list for every change in status of {{ cl.long_name }}</a></li>
|
||||
<li><a href="{{ cl.secret }}/subscribe/significant/">Subscribe to the mailing list for significant change in status of {{ cl.long_name }}</a></li>
|
||||
</ul>
|
||||
|
||||
<p>Export your list to CSV format:</p>
|
||||
<ul>
|
||||
<li><a href="csv/">CSV for {{ cl.long_name }}</a></li>
|
||||
<li><a href="{{ cl.secret }}/csv/">Read only CSV for {{ cl.long_name }}</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="documents">
|
||||
<h2>Documents explicitly included, from a document search.</a></h2>
|
||||
<p>
|
||||
In order to add some individual documents to your list you have to:
|
||||
</p>
|
||||
<ul>
|
||||
<li>Search for the document or documents you want to add using the datatracker search form.</li>
|
||||
<li>In the search result you'll find a link to add individual documents to your list.</li>
|
||||
</ul>
|
||||
<p>
|
||||
<a href="/doc/search"><b>Go to the Search Form to search for and add specific documents</b></a>
|
||||
</p>
|
||||
|
||||
<table class="ietf-table">
|
||||
<tr><th>Name</th><th>State</th><th>Title</th><th>Remove from list</th></tr>
|
||||
{% for doc in cl.added_ids.all %}
|
||||
<tr class="{% cycle oddrow,evenrow %}">
|
||||
<td>{{ doc.display_name }}</td>
|
||||
<td>{{ doc.get_state }}</td>
|
||||
<td><a href="{{ doc.get_absolute_url }}"</a>{{ doc.title }}</td>
|
||||
<td><a href="{% url "community_remove_document" cl.pk doc.pk %}">Remove</a></td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div id="rules">
|
||||
<h2>Rules added to this list</h2>
|
||||
<table class="ietf-table">
|
||||
<tr><th>Rule</th><th>Value</th><th>Documents</th><th>Remove from list</th></tr>
|
||||
{% for rule in cl.rule_set.all %}
|
||||
{% with rule.get_callable_rule as callable %}
|
||||
<tr class="{% cycle oddrow,evenrow %}">
|
||||
<td>{{ callable.description }}</td>
|
||||
<td>{{ callable.show_value }}</td>
|
||||
<td>{% with rule.cached_ids.count as count %}{{ count }} document{{ count|pluralize }}{% endwith %}</td>
|
||||
<td><a href="{% url "community_remove_rule" cl.pk rule.pk %}">Remove</a></td>
|
||||
</tr>
|
||||
{% endwith %}
|
||||
{% endfor %}
|
||||
</table>
|
||||
|
||||
<h3>Add a new rule</h3>
|
||||
<form method="post" action="#rules">{% csrf_token %}
|
||||
{{ rule_form.as_p }}
|
||||
<input type="submit" name="save_rule" value="Add rule" />
|
||||
</form>
|
||||
<div class="rule_values" style="display: none;">
|
||||
{% for entry in rule_form.get_all_options %}
|
||||
<div class="{{ entry.type }}">
|
||||
<select>
|
||||
{% for option in entry.options %}
|
||||
<option value={{ option.0 }}>{{ option.1|safe }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="custom">
|
||||
{% include "community/customize_display.html" %}
|
||||
</div>
|
||||
|
||||
<div id="info">
|
||||
<p>Feel free to share the following links if you need it.</p>
|
||||
<ul>
|
||||
<li><a href="{{ cl.secret }}/view/">Read only view for {{ cl.long_name }}</a></li>
|
||||
<li><a href="{{ cl.secret }}/changes/feed/">Feed for every change in status of {{ cl.long_name }}</a></li>
|
||||
<li><a href="{{ cl.secret }}/changes/significant/feed/">Feed for significant change in status of {{ cl.long_name }}</a></li>
|
||||
<li><a href="{{ cl.secret }}/subscribe/">Subscribe to the mailing list for every change in status of {{ cl.long_name }}</a></li>
|
||||
<li><a href="{{ cl.secret }}/subscribe/significant/">Subscribe to the mailing list for significant change in status of {{ cl.long_name }}</a></li>
|
||||
</ul>
|
||||
|
||||
<p>Export your list to CSV format</p>
|
||||
<ul>
|
||||
<li><a href="csv/">CSV for {{ cl.long_name }}</a></li>
|
||||
<li><a href="{{ cl.secret }}/csv/">Read only CSV for {{ cl.long_name }}</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block js %}
|
||||
<script type="text/javascript" src="/js/community.js"></script>
|
||||
{% endblock js %}
|
||||
{% comment %}
|
||||
XXX scrolling jumps around when using this, unfortunately
|
||||
<script>
|
||||
$('.nav-memory a').click(function (e) {
|
||||
e.preventDefault();
|
||||
$(this).tab('show');
|
||||
});
|
||||
|
||||
{% block scripts %}
|
||||
var tabView = new YAHOO.widget.TabView('mytabs');
|
||||
var url = location.href.split('#');
|
||||
if (url[1]) {
|
||||
url[1] = "#"+url[1];
|
||||
var tabs = tabView.get('tabs');
|
||||
for (var i = 0; i < tabs.length; i++) {
|
||||
if (url[1].indexOf(tabs[i].get('href')) == 0) {
|
||||
tabView.set('activeIndex', i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
{% endblock %}
|
||||
// store the currently selected tab in the hash value
|
||||
$("ul.nav-tabs > li > a").on("shown.bs.tab", function (e) {
|
||||
var id = $(e.target).attr("href").substr(1);
|
||||
window.location.hash = id;
|
||||
});
|
||||
|
||||
// on load of the page: switch to the currently selected tab
|
||||
var hash = window.location.hash;
|
||||
$('.nav-memory a[href="' + hash + '"]').tab('show');
|
||||
</script>
|
||||
{% endcomment %}
|
||||
|
|
|
@ -1,22 +1,29 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% load bootstrap3 %}
|
||||
|
||||
{% block title %}Subscribe to {{ cl.long_name }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Subscribe to {{ cl.long_name }}</h1>
|
||||
|
||||
{% if success %}
|
||||
<p>
|
||||
We have sent an email to your email address with instructions to complete your subscription.
|
||||
</p>
|
||||
<h1>Subscription successful</h1>
|
||||
|
||||
<p>We have sent an email to your email address with instructions to complete your subscription.</p>
|
||||
{% else %}
|
||||
<p>
|
||||
Subscribe to the email list for notifications of {% if significant %}significant {% endif %}changes on {{ cl.long_name }}.
|
||||
</p>
|
||||
<form action="" method="post">{% csrf_token %}
|
||||
<table>
|
||||
{{ form }}
|
||||
</table>
|
||||
<input type="submit" value="Subscribe" />
|
||||
</form>
|
||||
<h1>Subscribe to {{ cl.long_name }}</h1>
|
||||
|
||||
{% bootstrap_messages %}
|
||||
|
||||
<p>Subscribe to the email list for notifications of {% if significant %}significant {% endif %}changes on {{ cl.long_name }}.</p>
|
||||
|
||||
<form role="form" method="post">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form form %}
|
||||
|
||||
{% buttons %}
|
||||
<button type="submit" class="btn btn-primary">Subscribe</button>
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block title %}Subscription to {{ cl.long_name }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Subscription to {{ cl.long_name }}</h1>
|
||||
|
||||
<p>Your email address {{ email }} has been successfully subscribed to {{ cl.long_name }}.</p>
|
||||
|
||||
<p>
|
||||
You email address {{ email }} has been successfully subscribed to {{ cl.long_name }}
|
||||
</p>
|
||||
<p>
|
||||
<a href="{% url "view_personal_list" secret=cl.secret %}">Return to the list view</a>
|
||||
<a class="btn btn-primary" href="{% url "view_personal_list" secret=cl.secret %}">Back</a>
|
||||
</p>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,22 +1,33 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% load bootstrap3 %}
|
||||
|
||||
{% block title %}Cancel subscription to {{ cl.long_name }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Cancel subscription to {{ cl.long_name }}</h1>
|
||||
|
||||
{% if success %}
|
||||
<p>
|
||||
You will receive a confirmation email shortly containing further instructions on how to cancel your subscription.
|
||||
</p>
|
||||
<h1>Cancellation successful</h1>
|
||||
|
||||
<p>
|
||||
You will receive a confirmation email shortly containing further instructions on how to cancel your subscription.
|
||||
</p>
|
||||
{% else %}
|
||||
<p>
|
||||
Cancel your subscription to the email list for notifications of {% if significant %}significant {% endif %}changes on {{ cl.long_name }}.
|
||||
</p>
|
||||
<form action="" method="post">{% csrf_token %}
|
||||
<table>
|
||||
{{ form }}
|
||||
</table>
|
||||
<input type="submit" value="Cancel subscription" />
|
||||
</form>
|
||||
<h1>Cancel subscription to {{ cl.long_name }}</h1>
|
||||
|
||||
{% bootstrap_messages %}
|
||||
|
||||
<p>
|
||||
Cancel your subscription to the email list for notifications of {% if significant %}significant {% endif %}changes on {{ cl.long_name }}.
|
||||
</p>
|
||||
|
||||
<form role="form" method="post">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form form %}
|
||||
|
||||
{% buttons %}
|
||||
<button type="submit" class="btn btn-primary">Subscribe</button>
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,13 +1,15 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block title %}Canceled subscription to {{ cl.long_name }}{% endblock %}
|
||||
{% block title %}Cancelled subscription to {{ cl.long_name }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Canceled subscription to {{ cl.long_name }}</h1>
|
||||
<h1>Cancelled subscription to {{ cl.long_name }}</h1>
|
||||
|
||||
<p>
|
||||
You email address {{ email }} has been successfully removed form {{ cl.long_name }} {% if significant %}significant {% endif %}changes mailing list.
|
||||
Your email address {{ email }} has been successfully removed from the {{ cl.long_name }} {% if significant %}significant {% endif %}changes mailing list.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<a href="{{ cl.get_public_url }}">Return to the list view</a>
|
||||
<a class="btn btn-primary" href="{{ cl.get_public_url }}">Back</a>
|
||||
</p>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block pagehead %}
|
||||
<link rel="alternate" type="application/rss+xml" title="Changes on {{ cl.long_name }} RSS Feed" href="../changes/feed/" />
|
||||
<link rel="alternate" type="application/rss+xml" title="Significant changes on {{ cl.long_name }} RSS Feed" href="../changes/significant/feed/" />
|
||||
<link rel="alternate" type="application/atom+xml" title="Changes on {{ cl.long_name }}" href="../changes/feed/" />
|
||||
<link rel="alternate" type="application/atom+xml" title="Significant changes on {{ cl.long_name }}" href="../changes/significant/feed/" />
|
||||
{% endblock %}
|
||||
|
||||
{% block title %}{{ cl.long_name }}{% endblock %}
|
||||
|
@ -10,7 +10,7 @@
|
|||
{% block content %}
|
||||
<h1>{{ cl.long_name }}</h1>
|
||||
<p>
|
||||
Subscribe to notification email list:
|
||||
Subscribe to notification email lists:
|
||||
</p>
|
||||
<ul>
|
||||
<li><a href="../subscribe/">All changes email list</a></li>
|
||||
|
|
|
@ -3,42 +3,45 @@
|
|||
{% with cl.get_rfcs_and_drafts as documents %}
|
||||
{% with dc.get_active_fields as fields %}
|
||||
<h2>Drafts</h2>
|
||||
<table class="ietf-table">
|
||||
<tr>
|
||||
{% for field in fields %}
|
||||
<th>{{ field.description }}</th>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
{% for doc in documents.1 %}
|
||||
<tr class="{% cycle oddrow,evenrow %}">
|
||||
{% for field in fields %}
|
||||
<td>
|
||||
{% show_field field doc %}
|
||||
</td>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
{% endfor %}
|
||||
<table class="table table-condensed table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
{% for field in fields %}
|
||||
<th>{{ field.description }}</th>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for doc in documents.1 %}
|
||||
<tr>
|
||||
{% for field in fields %}
|
||||
<td>{% show_field field doc %}</td>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% endwith %}
|
||||
|
||||
<h2>RFCs</h2>
|
||||
{% with dc.get_active_fields as fields %}
|
||||
<table class="ietf-table">
|
||||
<tr>
|
||||
{% for field in fields %}
|
||||
<th>{{ field.rfcDescription }}</th>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
{% for doc in documents.0 %}
|
||||
<tr class="{% cycle oddrow,evenrow %}">
|
||||
{% for field in fields %}
|
||||
<td>
|
||||
{% show_field field doc %}
|
||||
</td>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
{% endfor %}
|
||||
<h2>RFCs</h2>
|
||||
<table class="table table-condensed table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
{% for field in fields %}
|
||||
<th>{{ field.rfcDescription }}</th>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for doc in documents.0 %}
|
||||
<tr>
|
||||
{% for field in fields %}
|
||||
<td>{% show_field field doc %}</td>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% endwith %}
|
||||
|
||||
{% endwith %}
|
||||
|
|
|
@ -1,68 +1,51 @@
|
|||
{# Copyright The IETF Trust 2010, All Rights Reserved #}
|
||||
{% extends "base.html" %}
|
||||
{% load ietf_filters %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block title %}User settings{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<h2>Cookie settings for the IETF datatracker</h2>
|
||||
<h1>User settings</h1>
|
||||
|
||||
<p> Following settings are implemented using cookies, so if you have
|
||||
cookies disabled then you are not able to change the settings
|
||||
(everything still continues to work by using default settings).</p>
|
||||
<p>
|
||||
The following settings are implemented using cookies, so if you have
|
||||
cookies disabled then you will not be able to change the settings
|
||||
(everything still continues to work by using default settings).
|
||||
</p>
|
||||
|
||||
<table id="settings">
|
||||
<tr class="setting-header">
|
||||
<td colspan="6">
|
||||
<h2 class="ietf-divider">How many days is considered new</h2>
|
||||
</td>
|
||||
<tr>
|
||||
<tr class="setting-description">
|
||||
<td colspan="6">
|
||||
<p>This setting affects how many days is considered new enough to get the special marking in the drafts page. Default setting is 14 days.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="settings-values">
|
||||
<td>{% if new_enough == 7 %}<span class="ietf-highlight-y"><a href="/accounts/settings/new_enough/7">7 days</a></span>{%else%}<a href="/accounts/settings/new_enough/7">7 days</a>{% endif %}</td></td>
|
||||
<td>{% if new_enough == 14 %}<span class="ietf-highlight-y"><a href="/accounts/settings/new_enough/14">14 days</a></span>{%else%}<a href="/accounts/settings/new_enough/14">14 days</a>{% endif %}</td>
|
||||
<td>{% if new_enough == 21 %}<span class="ietf-highlight-y"><a href="/accounts/settings/new_enough/21">21 days</a></span>{%else%}<a href="/accounts/settings/new_enough/21">21 days</a>{% endif %}</td>
|
||||
<td>{% if new_enough == 30 %}<span class="ietf-highlight-y"><a href="/accounts/settings/new_enough/30">30 days</a></span>{%else%}<a href="/accounts/settings/new_enough/30">30 days</a>{% endif %}</td>
|
||||
<td>{% if new_enough == 60 %}<span class="ietf-highlight-y"><a href="/accounts/settings/new_enough/60">60 days</a></span>{%else%}<a href="/accounts/settings/new_enough/60">60 days</a>{% endif %}</td>
|
||||
<td>{% if new_enough == 90 %}<span class="ietf-highlight-y"><a href="/accounts/settings/new_enough/90">90 days</a></span>{%else%}<a href="/accounts/settings/new_enough/90">90 days</a>{% endif %}</td>
|
||||
</tr>
|
||||
<h2>How many days is considered "new"?</h2>
|
||||
|
||||
<tr class="setting-header">
|
||||
<td colspan="6">
|
||||
<h2 class="ietf-divider">How many days is considered soon</h2>
|
||||
</td>
|
||||
<tr>
|
||||
<tr class="setting-description">
|
||||
<td colspan="6">
|
||||
<p>This setting tells what is considered soon when showing document which is going to be expire soon. Default setting is 14 days.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="settings-values">
|
||||
<td>{% if expires_soon == 7 %}<span class="ietf-highlight-y"><a href="/accounts/settings/expires_soon/7">7 days</a></span>{%else%}<a href="/accounts/settings/expires_soon/7">7 days</a>{% endif %}</td></td>
|
||||
<td>{% if expires_soon == 14 %}<span class="ietf-highlight-y"><a href="/accounts/settings/expires_soon/14">14 days</a></span>{%else%}<a href="/accounts/settings/expires_soon/14">14 days</a>{% endif %}</td>
|
||||
<td>{% if expires_soon == 21 %}<span class="ietf-highlight-y"><a href="/accounts/settings/expires_soon/21">21 days</a></span>{%else%}<a href="/accounts/settings/expires_soon/21">21 days</a>{% endif %}</td>
|
||||
<td>{% if expires_soon == 30 %}<span class="ietf-highlight-y"><a href="/accounts/settings/expires_soon/30">30 days</a></span>{%else%}<a href="/accounts/settings/expires_soon/30">30 days</a>{% endif %}</td>
|
||||
<td>{% if expires_soon == 60 %}<span class="ietf-highlight-y"><a href="/accounts/settings/expires_soon/60">60 days</a></span>{%else%}<a href="/accounts/settings/expires_soon/60">60 days</a>{% endif %}</td>
|
||||
<td>{% if expires_soon == 90 %}<span class="ietf-highlight-y"><a href="/accounts/settings/expires_soon/90">90 days</a></span>{%else%}<a href="/accounts/settings/expires_soon/90">90 days</a>{% endif %}</td>
|
||||
</tr>
|
||||
<p>This setting affects how many days are considered "new enough" to get the special highlighting in the documents table. Default setting is 14 days.</p>
|
||||
|
||||
<div class="btn-group btn-group-justified">
|
||||
<a class="btn btn-default {% if new_enough == 7 %}active{% endif %}" href="/accounts/settings/new_enough/7">7 days</a>
|
||||
<a class="btn btn-default {% if new_enough == 14 %}active{% endif %}" href="/accounts/settings/new_enough/14">14 days</a>
|
||||
<a class="btn btn-default {% if new_enough == 21 %}active{% endif %}" href="/accounts/settings/new_enough/21">21 days</a>
|
||||
<a class="btn btn-default {% if new_enough == 30 %}active{% endif %}" href="/accounts/settings/new_enough/30">30 days</a>
|
||||
<a class="btn btn-default {% if new_enough == 60 %}active{% endif %}" href="/accounts/settings/new_enough/60">60 days</a>
|
||||
<a class="btn btn-default {% if new_enough == 90 %}active{% endif %}" href="/accounts/settings/new_enough/90">90 days</a>
|
||||
</div>
|
||||
|
||||
<h2 class="ietf-divider">How many days is considered "soon"?</h2>
|
||||
|
||||
<p>This setting tells what is considered "soon" when showing documents that are going to be expire soon. Default setting is 14 days.</p>
|
||||
|
||||
<div class="btn-group btn-group-justified">
|
||||
<a class="btn btn-default {% if expires_soon == 7 %}active{% endif %}" href="/accounts/settings/expires_soon/7">7 days</a>
|
||||
<a class="btn btn-default {% if expires_soon == 14 %}active{% endif %}" href="/accounts/settings/expires_soon/14">14 days</a>
|
||||
<a class="btn btn-default {% if expires_soon == 21 %}active{% endif %}" href="/accounts/settings/expires_soon/21">21 days</a>
|
||||
<a class="btn btn-default {% if expires_soon == 30 %}active{% endif %}" href="/accounts/settings/expires_soon/30">30 days</a>
|
||||
<a class="btn btn-default {% if expires_soon == 60 %}active{% endif %}" href="/accounts/settings/expires_soon/60">60 days</a>
|
||||
<a class="btn btn-default {% if expires_soon == 90 %}active{% endif %}" href="/accounts/settings/expires_soon/90">90 days</a>
|
||||
</div>
|
||||
|
||||
<h2 class="ietf-divider">Show full document text by default?</h2>
|
||||
|
||||
<p>Show the full text immediately on the document page instead of only showing beginning of it. This defaults to off.</p>
|
||||
|
||||
<div class="btn-group btn-group-justified">
|
||||
<a class="btn btn-default {% if full_draft == "off" %}active{% endif %}" href="/accounts/settings/full_draft/off">Off</a>
|
||||
<a class="btn btn-default {% if full_draft == "on" %}active{% endif %}" href="/accounts/settings/full_draft/on">On</a>
|
||||
</div>
|
||||
|
||||
<tr class="setting-header">
|
||||
<td colspan="6">
|
||||
<h2 class="ietf-divider">Show full document text in document page</h2>
|
||||
</td>
|
||||
<tr>
|
||||
<tr class="setting-description">
|
||||
<td colspan="6">
|
||||
<p>Show the full draft immediately on the document page instead of only showing beginning of it. This defaults to off.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="settings-values">
|
||||
<td>{% if full_draft == "off" %}<span class="ietf-highlight-y"><a href="/accounts/settings/full_draft/off">off</a></span>{%else%}<a href="/accounts/settings/full_draft/off">off</a>{% endif %}</td></td>
|
||||
<td>{% if full_draft == "on" %}<span class="ietf-highlight-y"><a href="/accounts/settings/full_draft/on">on</a></span>{%else%}<a href="/accounts/settings/full_draft/on">on</a>{% endif %}</td></td>
|
||||
</tr>
|
||||
</table>
|
||||
{% endblock %}
|
||||
|
||||
|
|
|
@ -1,33 +1,23 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block title %}Add comment on {{ doc }}{% endblock %}
|
||||
{% load bootstrap3 %}
|
||||
|
||||
{% block morecss %}
|
||||
form.add-comment #id_comment {
|
||||
width: 600px;
|
||||
height: 300px;
|
||||
}
|
||||
|
||||
form.add-comment .actions {
|
||||
padding-top: 20px;
|
||||
}
|
||||
{% endblock %}
|
||||
{% block title %}Add comment for {{ doc }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Add comment on {{ doc }}</h1>
|
||||
<h1>Add comment<br><small>{{ doc }}</small></h1>
|
||||
|
||||
<p>The comment will be added to the history trail.</p>
|
||||
{% bootstrap_messages %}
|
||||
|
||||
<form class="add-comment" action="" method="post">{% csrf_token %}
|
||||
<table>
|
||||
{{ form.as_table }}
|
||||
<tr>
|
||||
<td></td>
|
||||
<td class="actions">
|
||||
<a href="{% url "doc_history" name=doc.name %}">Back</a>
|
||||
<input type="submit" value="Add comment"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<form role="form" method="post">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form form %}
|
||||
<p class="help-block">The comment will be added to the history trail.</p>
|
||||
|
||||
{% buttons %}
|
||||
<button type="submit" class="btn btn-primary">Submit</button>
|
||||
<a class="btn btn-default pull-right" href="{% url "doc_view" name=doc.name %}">Back</a>
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,36 +1,27 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% load bootstrap3 %}
|
||||
{% load ietf_filters %}
|
||||
|
||||
{% block title %}Approval announcement writeup for {{ doc }}{% endblock %}
|
||||
|
||||
{% block morecss %}
|
||||
form #id_approval_text {
|
||||
width: 700px;
|
||||
height: 600px;
|
||||
}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Approval announcement writeup for {{ doc }}</h1>
|
||||
<h1>Approval announcement writeup<br><small>{{ doc }}</small></h1>
|
||||
|
||||
<form action="" method="post">{% csrf_token %}
|
||||
{% bootstrap_messages %}
|
||||
|
||||
<p>Sent after approval.</p>
|
||||
<form role="form" method="post">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form approval_text_form %}
|
||||
|
||||
{{ approval_text_form.approval_text }}
|
||||
|
||||
<div class="actions">
|
||||
<a href="{{ back_url }}">Back</a>
|
||||
<input type="submit" name="save_approval_text" value="Save Approval Announcement Text" />
|
||||
<input type="submit" name="regenerate_approval_text" value="Regenerate Approval Announcement Text" />
|
||||
</div>
|
||||
{% buttons %}
|
||||
<button type="submit" class="btn btn-primary" name="save_approval_text">Save text</button>
|
||||
<button type="submit" class="btn btn-warning" name="regenerate_approval_text">Regenerate text</button>
|
||||
{% if user|has_role:"Secretariat" and can_announce %}
|
||||
<a class="btn btn-default" href="{% url "doc_approve_ballot" name=doc.name %}">Approve ballot</a>
|
||||
{% endif %}
|
||||
<a class="btn btn-default pull-right" href="{% url "doc_view" name=doc.name %}">Back</a>
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
|
||||
{% load ietf_filters %}
|
||||
{% if user|has_role:"Secretariat" %}
|
||||
<p>
|
||||
{% if can_announce %}
|
||||
<a href="{% url "doc_approve_ballot" name=doc.name %}">Approve ballot</a>
|
||||
{% endif %}
|
||||
</p>
|
||||
{% endif %}
|
||||
{% endblock%}
|
||||
|
|
|
@ -1,45 +1,23 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block title %}Approve ballot for {{ doc }}{% endblock %}
|
||||
|
||||
{% block morecss %}
|
||||
form.approve-ballot pre {
|
||||
margin: 0;
|
||||
padding: 4px;
|
||||
border-top: 4px solid #eee;
|
||||
border-bottom: 4px solid #eee;
|
||||
}
|
||||
form.approve-ballot .announcement {
|
||||
overflow-x: auto;
|
||||
overflow-y: scroll;
|
||||
width: 800px;
|
||||
height: 400px;
|
||||
border: 1px solid #bbb;
|
||||
}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Approve Ballot for {{ doc }}</h1>
|
||||
<h1>Approve ballot<br><small>{{ doc }}</small></h1>
|
||||
|
||||
<div>IETF announcement:</div>
|
||||
<form role="form" method="post">
|
||||
{% csrf_token %}
|
||||
<pre>{{ announcement }}</pre>
|
||||
|
||||
<form class="approve-ballot" action="" method="post">{% csrf_token %}
|
||||
|
||||
<div class="announcement">
|
||||
<pre>{{ announcement }}</pre>
|
||||
</div>
|
||||
|
||||
<div class="actions">
|
||||
<a href="{% url "doc_ballot_approvaltext" name=doc.name %}">Back</a>
|
||||
{% if action == "to_announcement_list" %}
|
||||
<input type="submit" value="Notify the RFC Editor, send out the announcement and close ballot"/>
|
||||
{% endif %}
|
||||
{% if action == "to_rfc_editor" %}
|
||||
<input type="submit" value="Send message to the RFC Editor and close ballot"/>
|
||||
{% endif %}
|
||||
{% if action == "do_not_publish" %}
|
||||
<input type="submit" value="Send message to the RFC Editor (DNP) and close ballot"/>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="buttonlist">
|
||||
{% if action == "to_announcement_list" %}
|
||||
<button class="btn btn-warning" type="submit">Notify RFC Editor, send announcement & close ballot</button>
|
||||
{% elif action == "to_rfc_editor" %}
|
||||
<button class="btn btn-warning" type="submit">Email RFC Editor & close ballot</button>
|
||||
{% elif action == "do_not_publish" %}
|
||||
<button class="btn btn-warning" type="submit">Email RFC Editor (DNP) & close ballot"/>
|
||||
{% endif %}
|
||||
<a class="btn btn-default pull-right" href="{% url "doc_ballot_approvaltext" name=doc.name %}">Back</a>
|
||||
</div>
|
||||
</form>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,19 +1,17 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block title %}Ballot for {{ doc }} issued{% endblock %}
|
||||
{% block title %}Ballot issued for {{ doc }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Ballot for {{ doc }} issued</h1>
|
||||
<h1>Ballot issued<br><small>{{ doc }}</small></h1>
|
||||
|
||||
<p>Ballot has been sent out.</p>
|
||||
|
||||
{% if doc.telechat_date %}
|
||||
<p>The document is currently on the {{ doc.telechat_date }} telechat agenda.</p>
|
||||
<p>The document is currently on the {{ doc.telechat_date }} telechat agenda.</p>
|
||||
{% else %}
|
||||
<p>The document is not on any telechat agenda.</p>
|
||||
<p>The document is not on any telechat agenda.</p>
|
||||
{% endif %}
|
||||
|
||||
<div class="actions">
|
||||
<a href="{{ back_url }}">Back to document</a>
|
||||
</div>
|
||||
<a class="btn btn-default pull-right" href="{{ back_url }}">Back</a>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,18 +1,22 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block title %}Clear ballot for {{ doc }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Clear ballot for {{ doc }}</h1>
|
||||
<h1>Clear ballot<br><small>{{ doc }}</small></h1>
|
||||
|
||||
<form action="" method="post">{% csrf_token %}
|
||||
<p>Clear the ballot for {{ doc.file_tag }}?</p>
|
||||
<form role="form" method="post">
|
||||
{% csrf_token %}
|
||||
<p class="alert alert-danger">
|
||||
<b>Clear the ballot for {{ doc }}?</b>
|
||||
<br>
|
||||
This will clear all ballot positions and discuss entries.
|
||||
</p>
|
||||
|
||||
<p>This will clear all ballot positions and discuss entries.</p>
|
||||
|
||||
<div class="actions">
|
||||
<a href="{{ back_url }}ballot/">Back</a>
|
||||
<input type="submit" value="Clear ballot"/>
|
||||
</div>
|
||||
<div class="buttonlist">
|
||||
<button type="submit" class="btn btn-danger">Clear</button>
|
||||
<a class="btn btn-default pull-right" href="{{ back_url }}ballot/">Back</a>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,18 +1,22 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block title %}Defer ballot for {{ doc }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Defer ballot for {{ doc }}</h1>
|
||||
<h1>Defer ballot<br><small>{{ doc }}</small></h1>
|
||||
|
||||
<form class="defer" action="" method="post">{% csrf_token %}
|
||||
<p>Defer the ballot for {{ doc.file_tag }}?</p>
|
||||
<form role="form" method="post">
|
||||
{% csrf_token %}
|
||||
<p class="alert alert-danger">
|
||||
<b>Defer the ballot for {{ doc }}?</b>
|
||||
<br>
|
||||
The ballot will then be put on the IESG agenda of {{ telechat_date }}.
|
||||
</p>
|
||||
|
||||
<p>The ballot will then be on the IESG agenda of {{ telechat_date }}.</p>
|
||||
|
||||
<div class="actions">
|
||||
<a href="{{ back_url }}">Back</a>
|
||||
<input type="submit" value="Defer ballot"/>
|
||||
</div>
|
||||
<div class="buttonlist">
|
||||
<input type="submit" class="btn btn-danger" value="Defer ballot">
|
||||
<a class="btn btn-default pull-right" href="{% url "doc_view" name=doc.name %}">Back</a>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,92 +1,64 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% load bootstrap3 %}
|
||||
|
||||
{% block title %}Change position for {{ ad.plain_name }} on {{ doc }}{% endblock %}
|
||||
|
||||
{% block morecss %}
|
||||
div.ballot-deferred {
|
||||
margin-top: 8px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
form.position-form .position ul {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
form.position-form .position li {
|
||||
list-style-type: none;
|
||||
float: left;
|
||||
padding-right: 10px;
|
||||
}
|
||||
form.position-form .last-edited {
|
||||
font-style: italic;
|
||||
}
|
||||
form.position-form .discuss-text {
|
||||
padding-top: 20px
|
||||
}
|
||||
form.position-form #id_discuss,
|
||||
form.position-form #id_comment {
|
||||
width: 700px;
|
||||
height: 250px;
|
||||
}
|
||||
form.position-form .comment-text {
|
||||
margin-top: 20px;
|
||||
}
|
||||
div.question {
|
||||
font-size: 173%;
|
||||
padding-left: 5px;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Change position for {{ ad.plain_name }} on {{ doc }}</h1>
|
||||
<h1>Change position for {{ ad.plain_name }}<br><small>{{ doc }}</small></h1>
|
||||
|
||||
{% bootstrap_messages %}
|
||||
|
||||
<div class="question">{{ ballot.ballot_type.question }}</div>
|
||||
|
||||
{% if ballot_deferred %}
|
||||
<div class="ballot-deferred">Ballot deferred by {{ ballot_deferred.by }} on {{ ballot_deferred.time|date:"Y-m-d" }}.</div>
|
||||
<p class="alert alert-info">
|
||||
Ballot deferred by {{ ballot_deferred.by }} on {{ ballot_deferred.time|date:"Y-m-d" }}.
|
||||
</p>
|
||||
{% endif %}
|
||||
|
||||
<form class="position-form" action="" method="post">{% csrf_token %}
|
||||
<div>
|
||||
<span class="position">{{ form.position }}</span>
|
||||
<span class="actions">
|
||||
<input type="submit" name="send_mail" value="Save and send email"/>
|
||||
<input type="submit" value="Save"/>
|
||||
{% if doc.type_id == "draft" or doc.type_id == "conflrev" %}
|
||||
{% if ballot_deferred %}<input type="submit" name="Undefer" value="Undefer"/>{% else %}<input type="submit" name="Defer" value="Defer"/>{% endif %}
|
||||
{% endif %}
|
||||
</span>
|
||||
</div>
|
||||
<form role="form" method="post">
|
||||
{% csrf_token %}
|
||||
|
||||
<div style="clear:left"></div>
|
||||
|
||||
<div class="discuss-widgets"{% if not show_discuss_text %} style="display:none"{% endif %}>
|
||||
<div class="discuss-text">
|
||||
{{ form.discuss.label_tag }}
|
||||
{% if old_pos and old_pos.discuss_time %}<span class="last-edited">(last edited {{ old_pos.discuss_time }})</span>{% endif %}
|
||||
</div>
|
||||
{{ form.discuss.errors }}
|
||||
{{ form.discuss }}
|
||||
</div>
|
||||
|
||||
<div class="comment-text">
|
||||
{{ form.comment.label_tag }}
|
||||
{% if old_pos and old_pos.comment_time %}<span class="last-edited">(last edited {{ old_pos.comment_time }}){% endif %}</span>
|
||||
</div>
|
||||
{{ form.comment }}
|
||||
{% for field in form %}
|
||||
{% bootstrap_field field %}
|
||||
{% if field.name == "discuss" and old_pos and old_pos.discuss_time %}
|
||||
<span class="help-block">Last edited {{ old_pos.discuss_time }}</span>
|
||||
{% elif field.name == "comment" and old_pos and old_pos.comment_time %}
|
||||
<span class="help-block">Last edited {{ old_pos.comment_time }}</span>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
<div class="actions">
|
||||
<a href="{{ return_to_url }}">Back</a>
|
||||
</div>
|
||||
|
||||
{{ form.return_to_url }}
|
||||
{% buttons %}
|
||||
<button type="submit" class="btn btn-primary" name="send_mail">Save & send email</button>
|
||||
<input type="submit" class="btn btn-default" value="Save">
|
||||
|
||||
{% if doc.type_id == "draft" or doc.type_id == "conflrev" %}
|
||||
{% if ballot_deferred %}
|
||||
<input type="submit" class="btn btn-warning" name="Undefer" value="Undefer ballot">
|
||||
{% else %}
|
||||
<input type="submit" class="btn btn-danger" name="Defer" value="Defer ballot">
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
<a class="btn btn-default pull-right" href="{{ doc.get_absolute_url }}">Back</a>
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
{% endblock %}
|
||||
|
||||
{% block content_end %}
|
||||
<script>
|
||||
var blockingPositions = {{ blocking_positions|safe }};
|
||||
</script>
|
||||
<script type="text/javascript" src="/js/doc-edit-position.js"></script>
|
||||
{% block scripts %}
|
||||
var block_pos = {{ blocking_positions|safe }};
|
||||
|
||||
function discuss_toggle(val) {
|
||||
if (val in block_pos) {
|
||||
$("#div_id_discuss").show();
|
||||
} else {
|
||||
$("#div_id_discuss").hide();
|
||||
}
|
||||
}
|
||||
|
||||
$("input[name=position]").click(function () {
|
||||
discuss_toggle($(this).val());
|
||||
});
|
||||
|
||||
discuss_toggle($("input[name=position]:checked").val());
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,46 +1,36 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block title %}Last Call text for {{ doc }}{% endblock %}
|
||||
{% load bootstrap3 %}
|
||||
{% load ietf_filters %}
|
||||
|
||||
{% block morecss %}
|
||||
form #id_last_call_text {
|
||||
width: 700px;
|
||||
height: 600px;
|
||||
}
|
||||
{% endblock %}
|
||||
{% block title %}Last call text for {{ doc }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Last Call text for {{ doc }}</h1>
|
||||
<h1>Last call text<br><small>{{ doc }}</small></h1>
|
||||
|
||||
<form action="" method="post">{% csrf_token %}
|
||||
{% bootstrap_messages %}
|
||||
|
||||
<p>{{ last_call_form.last_call_text.errors }}</p>
|
||||
<form role="form" method="post">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form last_call_form %}
|
||||
|
||||
{{ last_call_form.last_call_text }}
|
||||
{% if can_request_last_call and need_intended_status %}
|
||||
<span class="help-block">
|
||||
You need to select intended status of {{ need_intended_status }} and regenerate last call text to request last call.
|
||||
</span>
|
||||
{% endif %}
|
||||
|
||||
<p>{{ last_call_form.last_call_text.errors }}</p>
|
||||
|
||||
{% if can_request_last_call and need_intended_status %}
|
||||
<p>You need to select intended status of {{ need_intended_status }} and regenerate last call text to request last call.</p>
|
||||
{% endif %}
|
||||
|
||||
<div class="actions">
|
||||
<a href="{{ back_url }}">Back</a>
|
||||
<input type="submit" name="save_last_call_text" value="Save Last Call Text" />
|
||||
<input type="submit" name="regenerate_last_call_text" value="Regenerate Last Call Text" />
|
||||
{% if can_request_last_call and not need_intended_status %}
|
||||
<input style="margin-left: 8px" type="submit" name="send_last_call_request" value="Save and Request Last Call" />
|
||||
{% endif %}
|
||||
</div>
|
||||
{% buttons %}
|
||||
<button type="submit" class="btn btn-primary" name="save_last_call_text">Save text</button>
|
||||
{% if can_request_last_call and not need_intended_status %}
|
||||
<button type="submit" class="btn btn-warning" name="send_last_call_request">Save text & request last call</button>
|
||||
{% endif %}
|
||||
<button type="submit" class="btn btn-warning" name="regenerate_last_call_text">Regenerate text</button>
|
||||
{% if user|has_role:"Secretariat" and can_make_last_call %}
|
||||
<a class="btn btn-danger" href="{% url "doc_make_last_call" name=doc.name %}">Issue last call</a>
|
||||
{% endif %}
|
||||
<a class="btn btn-default pull-right" href="{% url "doc_view" name=doc.name %}">Back</a>
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
|
||||
{% load ietf_filters %}
|
||||
{% if user|has_role:"Secretariat" %}
|
||||
<p>
|
||||
{% if can_make_last_call %}
|
||||
<a href="{% url "doc_make_last_call" name=doc.name %}">Make Last Call</a>
|
||||
{% endif %}
|
||||
|
||||
</p>
|
||||
{% endif %}
|
||||
{% endblock%}
|
||||
|
|
|
@ -1,47 +1,55 @@
|
|||
{% extends "base.html" %}
|
||||
{% load ietf_filters %}
|
||||
{% block title %}Send ballot position email for {{ ad }}{% endblock %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block morecss %}
|
||||
form.send-ballot pre {
|
||||
margin: 0;
|
||||
padding: 4px;
|
||||
border-top: 4px solid #eee;
|
||||
border-bottom: 4px solid #eee;
|
||||
}
|
||||
{% endblock %}
|
||||
{% load ietf_filters %}
|
||||
|
||||
{% block title %}Send ballot position for {{ ad }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Send ballot position email for {{ ad }}</h1>
|
||||
<h1>Send ballot position for {{ ad }}</h1>
|
||||
|
||||
<form role="form" method="post">
|
||||
{% csrf_token %}
|
||||
|
||||
<div class="form-group">
|
||||
<label>From</label>
|
||||
<input class="form-control" type="text" placeholder="{{ frm }}" disabled>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label>To</label>
|
||||
<input class="form-control" type="text" placeholder="{{ to }}" disabled>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label>Cc</label>
|
||||
<input class="form-control" type="email" name="cc">
|
||||
<span class="help-block">Separate email addresses with commas.</span>
|
||||
</div>
|
||||
|
||||
{% if doc.notify %}
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<input type="checkbox" name="cc_state_change" value="1" checked>
|
||||
<b>Cc:</b> {{ doc.notify }}
|
||||
</label>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="form-group">
|
||||
<label>Subject</label>
|
||||
<input class="form-control" type="text" placeholder="{{ subject }}" disabled>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label>Body</label>
|
||||
<pre>{{ body|wrap_text }}</pre>
|
||||
</div>
|
||||
|
||||
<div class="buttonlist">
|
||||
<input type="submit" class="btn btn-danger" value="Send">
|
||||
<a class="btn btn-default pull-right" href="{{ back_url }}">Back</a>
|
||||
</div>
|
||||
|
||||
<form class="send-ballot" action="" method="post">{% csrf_token %}
|
||||
<table>
|
||||
<tr><th>From:</th> <td>{{ frm }}</td></tr>
|
||||
<tr><th>To:</th> <td>{{ to }}</td></tr>
|
||||
<tr>
|
||||
<th>Cc:<br/>
|
||||
<span class="help">separated<br/> by comma</span></th>
|
||||
<td><input type="text" name="cc" value="" size="75" /><br/>
|
||||
{% if doc.notify %}
|
||||
<label>
|
||||
<input type="checkbox" name="cc_state_change" value="1" checked="checked" />
|
||||
{{ doc.notify }}
|
||||
</label>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
<tr><th>Subject:</th> <td>{{ subject }}</td></tr>
|
||||
<tr>
|
||||
<th>Body:</th>
|
||||
<td><pre>{{ body|wrap_text }}</pre></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td class="actions">
|
||||
<a href="{{ back_url }}">Back</a>
|
||||
<input type="submit" value="Send"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,34 +1,28 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% load bootstrap3 %}
|
||||
|
||||
{% block title %}Ballot writeup and notes for {{ doc }}{% endblock %}
|
||||
|
||||
{% block morecss %}
|
||||
form #id_ballot_writeup {
|
||||
width: 700px;
|
||||
height: 600px;
|
||||
}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Ballot writeup and notes for {{ doc }}</h1>
|
||||
|
||||
|
||||
<form action="" method="post">{% csrf_token %}
|
||||
|
||||
<p>(Technical Summary, Working Group Summary, Document Quality,
|
||||
Personnel, RFC Editor Note, IRTF Note, IESG Note, IANA Note)</p>
|
||||
|
||||
<p>This text will be appended to all announcements and messages to
|
||||
the IRTF or RFC Editor.</p>
|
||||
<h1>Ballot writeup and notes<br><small>{{ doc }}</small></h1>
|
||||
|
||||
{{ ballot_writeup_form.ballot_writeup }}
|
||||
|
||||
<div class="actions">
|
||||
<a href="{{ back_url }}">Back</a>
|
||||
<input type="submit" name="save_ballot_writeup" value="Save Ballot Writeup" />
|
||||
<input style="margin-left: 8px" type="submit" name="issue_ballot" value="Save and {% if ballot_issued %}Re-{% endif %}Issue Ballot" />
|
||||
</div>
|
||||
{% bootstrap_messages %}
|
||||
|
||||
<form role="form" method="post">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form ballot_writeup_form %}
|
||||
|
||||
<span class="help-block">
|
||||
Technical summary, Working Group summary, document quality, personnel, RFC Editor note, IRTF note, IESG note, IANA note. This text will be appended to all announcements and messages to the IRTF or RFC Editor.
|
||||
</span>
|
||||
|
||||
{% buttons %}
|
||||
<button type="submit" class="btn btn-primary" name="save_ballot_writeup">Save</button>
|
||||
<button type="submit" class="btn btn-warning" name="issue_ballot">Save & {% if ballot_issued %}re-{% endif %}issue ballot</button>
|
||||
<a class="btn btn-default pull-right" href="{% url "doc_view" name=doc.name %}">Back</a>
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
|
||||
|
||||
{% endblock%}
|
||||
|
|
|
@ -1,14 +1,37 @@
|
|||
{% load ietf_filters %}
|
||||
<div class="ballot-popup">
|
||||
<div class="content">
|
||||
{{ ballot_content }}
|
||||
</div>
|
||||
<div class="actions">
|
||||
|
||||
{% if request.user|has_role:"Area Director" %}
|
||||
<a href="{% url "ietf.doc.views_ballot.edit_position" name=doc.name ballot_id=ballot_id %}" class="button" style="margin-right: 1em;">Edit Position</a>
|
||||
{% endif %}
|
||||
|
||||
<a href="" class="button close">Close</a>
|
||||
</div>
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal">
|
||||
<span aria-hidden="true">×</span>
|
||||
<span class="sr-only">Close</span>
|
||||
</button>
|
||||
<h4 class="modal-title" id="modal-title-{{ ballot_id }}">Ballot for {{ doc.name }}</h4>
|
||||
{% if deferred %}
|
||||
<p>Ballot deferred by {{ deferred.by }} on {{ deferred.time|date:"Y-m-d" }}.</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<div class="modal-body">
|
||||
{{ ballot_content }}
|
||||
</div>
|
||||
|
||||
<div class="modal-footer">
|
||||
{% if editable and user|has_role:"Area Director,Secretariat" %}
|
||||
{% if user|has_role:"Area Director" %}
|
||||
<a class="btn btn-default" href="{% url "ietf.doc.views_ballot.edit_position" name=doc.name ballot_id=ballot_id %}">Edit position</a>
|
||||
{% endif %}
|
||||
|
||||
{% if doc.type_id == "draft" or doc.type_id == "conflrev" %}
|
||||
{% if deferred %}
|
||||
<a class="btn btn-default" href="{% url "doc_undefer_ballot" name=doc.name %}">Undefer ballot</a>
|
||||
{% else %}
|
||||
<a class="btn btn-warning" href="{% url "doc_defer_ballot" name=doc.name %}">Defer ballot</a>
|
||||
{% endif %}
|
||||
|
||||
{% if user|has_role:"Secretariat" %}
|
||||
<a class="btn btn-danger" href="{% url "doc_clear_ballot" name=doc.name %}">Clear ballot</a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
<button type="button" class="btn btn-primary" data-dismiss="modal">Close</button>
|
||||
</div>
|
||||
|
|
|
@ -1,39 +1,22 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block morecss %}
|
||||
.warning {
|
||||
font-weight: bold;
|
||||
color: #a00;
|
||||
}
|
||||
{% endblock %}
|
||||
{% load bootstrap3 %}
|
||||
|
||||
{% block title %}
|
||||
Change the shepherding AD for {{titletext}}
|
||||
{% endblock %}
|
||||
{% block title %}Change shepherding AD for {{titletext}}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Change the shepherding AD for {{titletext}}</h1>
|
||||
<h1>Change shepherding AD<br><small>{{titletext}}</small></h1>
|
||||
|
||||
<form class="edit-info" action="" enctype="multipart/form-data" method="post">{% csrf_token %}
|
||||
<table>
|
||||
{% for field in form.visible_fields %}
|
||||
<tr>
|
||||
<th>{{ field.label_tag }}</th>
|
||||
<td>
|
||||
{{ field }}
|
||||
{% if field.help_text %}<div class="help">{{ field.help_text }}</div>{% endif %}
|
||||
{{ field.errors }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
<tr>
|
||||
<td></td>
|
||||
<td class="actions">
|
||||
<a href="{% url "doc_view" name=doc.canonical_name %}">Back</a>
|
||||
<input type="submit" value="Submit"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
{% bootstrap_messages %}
|
||||
|
||||
<form role="form" enctype="multipart/form-data" method="post">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form form %}
|
||||
|
||||
{% buttons %}
|
||||
<button type="submit" class="btn btn-primary">Submit</button>
|
||||
<a class="btn btn-default pull-right" href="{% url "doc_view" name=doc.canonical_name %}">Back</a>
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,49 +1,36 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block morecss %}
|
||||
.warning {
|
||||
font-weight: bold;
|
||||
color: #a00;
|
||||
}
|
||||
{% endblock %}
|
||||
{% load bootstrap3 %}
|
||||
|
||||
{% block title %}
|
||||
Change the document shepherd for {{ doc.name }}-{{ doc.rev }}
|
||||
Change document shepherd for {{ doc.name }}-{{ doc.rev }}
|
||||
{% endblock %}
|
||||
|
||||
{% block pagehead %}
|
||||
<link rel="stylesheet" type="text/css" href="/css/token-input.css"></link>
|
||||
<link rel="stylesheet" href="/facelift/css/tokenfield-typeahead.min.css">
|
||||
<link rel="stylesheet" href="/facelift/css/bootstrap-tokenfield.min.css">
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Change the document shepherd for {{ doc.name }}-{{ doc.rev }}</h1>
|
||||
<h1>Change document shepherd<br><small>{{ doc.name }}-{{ doc.rev }}</small></h1>
|
||||
|
||||
<p>The shepherd needs to have a Datatracker account. A new account can be
|
||||
<a href="{% url "create_account" %}">created here</a>.</p>
|
||||
|
||||
<form class="edit-info" action="" method="post">{% csrf_token %}
|
||||
<table>
|
||||
{% for field in form.visible_fields %}
|
||||
<tr>
|
||||
<th>{{ field.label_tag }}</th>
|
||||
<td>
|
||||
{{ field }}
|
||||
{% if field.help_text %}<div class="help">{{ field.help_text }}</div>{% endif %}
|
||||
{{ field.errors }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
<tr>
|
||||
<td></td>
|
||||
<td class="actions">
|
||||
<a class="button" href="{% url "doc_view" name=doc.name %}">Cancel</a>
|
||||
<input class="button" type="submit" value="Save"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
{% bootstrap_messages %}
|
||||
|
||||
<form class="tokenized-form" role="form" enctype="multipart/form-data" method="post">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form form %}
|
||||
|
||||
{% buttons %}
|
||||
<button type="submit" class="btn btn-primary">Submit</button>
|
||||
<a class="btn btn-default pull-right" href="{% url "doc_view" name=doc.name %}">Cancel</a>
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
{% endblock %}
|
||||
{% block content_end %}
|
||||
<script type="text/javascript" src="/js/lib/jquery.tokeninput.js"></script>
|
||||
<script type="text/javascript" src="/js/tokenized-field.js"></script>
|
||||
|
||||
{% block js %}
|
||||
<script src="/facelift/js/lib/typeahead.bundle.min.js"></script>
|
||||
<script src="/facelift/js/lib/bootstrap-tokenfield.min.js"></script>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,46 +1,24 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block title %}Change State: {{doc.title}}{% endblock %}
|
||||
{% load bootstrap3 %}
|
||||
|
||||
{% block morecss %}
|
||||
form.change-state select {
|
||||
width: 22em;
|
||||
}
|
||||
|
||||
#id_message, #id_comment {
|
||||
width: 40em;
|
||||
}
|
||||
|
||||
form.change-state .actions {
|
||||
text-align: right;
|
||||
padding-top: 10px;
|
||||
}
|
||||
{% endblock %}
|
||||
{% block title %}Change state for {{doc.title}}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Change State: {{doc.title}}</h1>
|
||||
<h1>Change state<br><small>{{doc.title}}</small></h1>
|
||||
|
||||
<p class="helptext">For help on the states, see the <a href="{{help_url}}">state table</a>.</p>
|
||||
{% bootstrap_messages %}
|
||||
|
||||
<form class="change-state" action="" method="post">{% csrf_token %}
|
||||
<table>
|
||||
{% for field in form.visible_fields %}
|
||||
<tr>
|
||||
<th>{{ field.label_tag }}</th>
|
||||
<td>{{ field }}
|
||||
{% if field.help_text %}<div class="help">{{ field.help_text }}</div>{% endif %}
|
||||
<p><a class="btn btn-info" href="{{help_url}}">Help on states</a></p>
|
||||
|
||||
{{ field.errors }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
<tr>
|
||||
<td colspan="2" class="actions">
|
||||
<a href="{% url "doc_view" name=doc.name %}">Back</a>
|
||||
<input type="submit" value="Submit"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<form role="form" method="post">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form form %}
|
||||
|
||||
{% buttons %}
|
||||
<button type="submit" class="btn btn-primary">Submit</button>
|
||||
<a class="btn btn-default pull-right" href="{% url "doc_view" name=doc.name %}">Back</a>
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,42 +1,22 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block morecss %}
|
||||
.warning {
|
||||
font-weight: bold;
|
||||
color: #a00;
|
||||
}
|
||||
form.edit-info #id_title {
|
||||
width: 600px;
|
||||
}
|
||||
{% endblock %}
|
||||
{% load bootstrap3 %}
|
||||
|
||||
{% block title %}
|
||||
Change the title for {{titletext}}
|
||||
{% endblock %}
|
||||
{% block title %}Change title for {{doc.title}}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Change the title for {{titletext}}</h1>
|
||||
<h1>Change title<br><small>{{titletext}}</small></h1>
|
||||
|
||||
<form class="edit-info" action="" enctype="multipart/form-data" method="POST">
|
||||
<table>
|
||||
{% for field in form.visible_fields %}
|
||||
<tr>
|
||||
<th>{{ field.label_tag }}:</th>
|
||||
<td>
|
||||
{{ field }}
|
||||
{% if field.help_text %}<div class="help">{{ field.help_text }}</div>{% endif %}
|
||||
{{ field.errors }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
<tr>
|
||||
<td></td>
|
||||
<td class="actions">
|
||||
<a href="{% url "doc_view" name=doc.canonical_name %}">Back</a>
|
||||
<input type="submit" value="Submit"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
{% bootstrap_messages %}
|
||||
|
||||
<form role="form" method="post">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form form %}
|
||||
|
||||
{% buttons %}
|
||||
<button type="submit" class="btn btn-primary">Submit</button>
|
||||
<a class="btn btn-default pull-right" href="{% url "doc_view" name=doc.canonical_name %}">Back</a>
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,40 +1,33 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% load bootstrap3 %}
|
||||
{% load ietf_filters %}
|
||||
|
||||
{% block title %}WG {{ announcement }} announcement writeup for {{ charter.chartered_group.acronym }}{% endblock %}
|
||||
|
||||
{% block morecss %}
|
||||
form #id_announcement_text {
|
||||
width: 700px;
|
||||
height: 600px;
|
||||
}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>WG {{ announcement }} announcement writeup for {{ charter.chartered_group.acronym }}</h1>
|
||||
<h1>WG {{ announcement }} announcement writeup<br><small>{{ charter.chartered_group.acronym }}</small></h1>
|
||||
|
||||
<form action="" method="post">{% csrf_token %}
|
||||
{% bootstrap_messages %}
|
||||
|
||||
{{ announcement_text_form.announcement_text }}
|
||||
<form role="form" method="post">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form announcement_text_form %}
|
||||
|
||||
<div class="actions">
|
||||
<a class="button" href="{{ back_url }}">Cancel</a>
|
||||
<input class="button" type="submit" name="regenerate_text" value="Regenerate" />
|
||||
<input class="button" type="submit" name="save_text" value="Save" />
|
||||
</div>
|
||||
{% buttons %}
|
||||
<button type="submit" class="btn btn-primary" name="save_text">Submit</button>
|
||||
<button type="submit" class="btn btn-warning" name="regenerate_text">Regenerate</button>
|
||||
|
||||
{% load ietf_filters %}
|
||||
{% if user|has_role:"Secretariat" %}
|
||||
<h3>Secretariat actions</h3>
|
||||
|
||||
<div class="actions">
|
||||
{% if announcement == "action" %}
|
||||
<a href="{% url "charter_approve" name=charter.canonical_name %}">Go to charter approval page</a>
|
||||
{% else %}
|
||||
<input type="submit" name="send_text" value="Send WG {{ announcement }} announcement" />
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if user|has_role:"Secretariat" %}
|
||||
{% if announcement == "action" %}
|
||||
<a type="submit" class="btn btn-default" href="{% url "charter_approve" name=charter.canonical_name %}">Charter approval page</a>
|
||||
{% else %}
|
||||
<input type="submit" type="submit" class="btn btn-default" name="send_text" value="Send WG {{ announcement }} announcement" />
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
<a class="btn btn-default pull-right" href="{{ back_url }}">Back</a>
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
|
||||
{% endblock%}
|
||||
|
|
|
@ -1,38 +1,17 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block title %}Approve {{ charter.canonical_name }}{% endblock %}
|
||||
|
||||
{% block morecss %}
|
||||
form.approve pre {
|
||||
margin: 0;
|
||||
padding: 4px;
|
||||
border-top: 4px solid #eee;
|
||||
border-bottom: 4px solid #eee;
|
||||
}
|
||||
form.approve .announcement {
|
||||
overflow-x: auto;
|
||||
overflow-y: scroll;
|
||||
width: 800px;
|
||||
height: 400px;
|
||||
border: 1px solid #bbb;
|
||||
}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Approve {{ charter.canonical_name }}-{{ charter.rev }}</h1>
|
||||
|
||||
<div>IETF announcement:</div>
|
||||
|
||||
<form class="approve" action="" method="post">{% csrf_token %}
|
||||
|
||||
<div class="announcement">
|
||||
<pre>{{ announcement }}</pre>
|
||||
</div>
|
||||
|
||||
<div class="actions">
|
||||
<a href="{% url "doc_view" name=charter.name %}">Back</a>
|
||||
<a href="{% url "charter_edit_announcement" name=charter.canonical_name ann="action" %}?next=approve">Go to edit/regenerate announcement page</a>
|
||||
<input type="submit" value="Send out the announcement, close ballot and update revision"/>
|
||||
</div>
|
||||
<form role="form" method="post">
|
||||
{% csrf_token %}
|
||||
<pre>{{ announcement }}</pre>
|
||||
<div class="buttonlist">
|
||||
<button type="submit" class="btn btn-primary">Send announcement, close ballot & update revision</button>
|
||||
<a class="btn btn-default" href="{% url "charter_edit_announcement" name=charter.canonical_name ann="action" %}?next=approve">Edit/regenerate announcement</a>
|
||||
<a class="btn btn-default pull-right" href="{% url "doc_view" name=charter.name %}">Back</a>
|
||||
</div>
|
||||
</form>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block title %}Ballot for {{ doc.name }} issued{% endblock %}
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
|||
|
||||
<p>Ballot has been sent out.</p>
|
||||
|
||||
<div class="actions">
|
||||
<a href="{% url "doc_writeup" name=doc.name %}">Back to writeups</a>
|
||||
<div class="buttonlist">
|
||||
<a class="btn btn-default" href="{% url "doc_writeup" name=doc.name %}">Back</a>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,30 +1,28 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% load bootstrap3 %}
|
||||
|
||||
{% block title %}Ballot writeup and notes for {{ charter.chartered_group }}{% endblock %}
|
||||
|
||||
{% block morecss %}
|
||||
form #id_ballot_writeup {
|
||||
width: 700px;
|
||||
height: 600px;
|
||||
}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Ballot writeup and notes for {{ charter.chartered_group }}</h1>
|
||||
|
||||
|
||||
<form action="" method="post">{% csrf_token %}
|
||||
|
||||
<p>(Working Group Summary, Personnel, IAB Note, IESG Note, IANA Note)</p>
|
||||
|
||||
{{ ballot_writeup_form.ballot_writeup }}
|
||||
|
||||
<div class="actions">
|
||||
<a class="button" href="{% url "doc_writeup" name=charter.name %}">Cancel</a>
|
||||
<input class="button" type="submit" name="save_ballot_writeup" value="Save Ballot Writeup" />
|
||||
<input class="button" style="margin-left: 8px" type="submit" name="send_ballot" value="Save and {% if reissue %}Re-{% endif %}Send Ballot to the IESG" />
|
||||
</div>
|
||||
<h1>Ballot writeup and notes<br><small>{{ charter.chartered_group }}</small></h1>
|
||||
|
||||
{% bootstrap_messages %}
|
||||
|
||||
<form role="form" method="post">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form ballot_writeup_form %}
|
||||
|
||||
<span class="help-block">
|
||||
Working group summary, personnel, IAB note, IESG note, IANA note.
|
||||
</span>
|
||||
|
||||
{% buttons %}
|
||||
<button type="submit" class="btn btn-primary" name="save_ballot_writeup">Save</button>
|
||||
<button type="submit" class="btn btn-warning" name="send_ballot">Save & {% if ballot_issued %}re-{% endif %}issue ballot</button>
|
||||
<a class="btn btn-default pull-right" href="{% url "doc_writeup" name=charter.name %}">Back</a>
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
|
||||
|
||||
{% endblock%}
|
||||
|
|
|
@ -1,39 +1,24 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block morecss %}
|
||||
.warning {
|
||||
font-weight: bold;
|
||||
color: #a00;
|
||||
}
|
||||
{% endblock %}
|
||||
{% load bootstrap3 %}
|
||||
|
||||
{% block title %}
|
||||
Change the responsible AD for {{ charter.canonical_name }}-{{ charter.rev }}
|
||||
Change responsible AD for {{ charter.canonical_name }}-{{ charter.rev }}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Change the responsible AD for {{ charter.canonical_name }}-{{ charter.rev }}</h1>
|
||||
<h1>Change responsible AD<br><small>{{ charter.canonical_name }}-{{ charter.rev }}</small></h1>
|
||||
|
||||
<form class="edit-info" action="" enctype="multipart/form-data" method="post">{% csrf_token %}
|
||||
<table>
|
||||
{% for field in form.visible_fields %}
|
||||
<tr>
|
||||
<th>{{ field.label_tag }}</th>
|
||||
<td>
|
||||
{{ field }}
|
||||
{% if field.help_text %}<div class="help">{{ field.help_text }}</div>{% endif %}
|
||||
{{ field.errors }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
<tr>
|
||||
<td></td>
|
||||
<td class="actions">
|
||||
<a href="{% url "doc_view" name=charter.canonical_name %}">Back</a>
|
||||
<input type="submit" value="Submit"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
{% bootstrap_messages %}
|
||||
|
||||
<form role="form" enctype="multipart/form-data" method="post">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form form %}
|
||||
|
||||
{% buttons %}
|
||||
<button type="submit" class="btn btn-primary">Submit</button>
|
||||
<a class="btn btn-default pull-right" href="{% url "doc_view" name=charter.canonical_name %}">Back</a>
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,77 +1,46 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% load bootstrap3 %}
|
||||
|
||||
{% block title %}{{ title }}{% endblock %}
|
||||
|
||||
{% block morecss %}
|
||||
form.change-state select {
|
||||
width: 22em;
|
||||
}
|
||||
|
||||
#id_message, #id_comment {
|
||||
width: 40em;
|
||||
}
|
||||
|
||||
form.change-state .actions {
|
||||
text-align: right;
|
||||
padding-top: 10px;
|
||||
}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>{{ title }}</h1>
|
||||
|
||||
{% bootstrap_messages %}
|
||||
|
||||
{% if not option %}
|
||||
<p class="helptext">For help on the states, see the <a href="{% url "state_help" type="charter" %}">state table</a>.</p>
|
||||
<p><a class="btn btn-info" href="{% url "state_help" type="charter" %}">Help on states</a></p>
|
||||
{% endif %}
|
||||
|
||||
<form class="change-state" action="" method="post">{% csrf_token %}
|
||||
<table>
|
||||
{% for field in form.visible_fields %}
|
||||
<tr>
|
||||
{% if field.name == "initial_time" %}
|
||||
{% if option == "recharter" %}
|
||||
<th>{{ field.label_tag }}</th>
|
||||
<td>{{ field }}
|
||||
{% if field.help_text %}<div class="help">{{ field.help_text }}</div>{% endif %}
|
||||
{% else %}
|
||||
{% if option == "initcharter" %}
|
||||
<th>{{ field.label_tag }}</th>
|
||||
<td>{{ field }}
|
||||
{% if field.help_text %}<div class="help">{{ field.help_text }}</div>{% endif %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
<form role="form" method="post">
|
||||
{% csrf_token %}
|
||||
{% for field in form.visible_fields %}
|
||||
{% bootstrap_field field %}
|
||||
|
||||
{% else %}
|
||||
<th>{{ field.label_tag }}</th>
|
||||
<td>{{ field }}
|
||||
{% if field.help_text %}<div class="help">{{ field.help_text }}</div>{% endif %}
|
||||
{% endif %}
|
||||
{% if field.name == "charter_state" and chartering_type == "rechartering" %}
|
||||
<div class="checkbox ballot-wo-extern">
|
||||
<label>
|
||||
<input type="checkbox" name="ballot_wo_extern">
|
||||
<b>Ask whether external review can be skipped in ballot</b>
|
||||
</label>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
{{ field.errors }}
|
||||
</td>
|
||||
</tr>
|
||||
{% if field.name == "charter_state" and chartering_type == "rechartering" %}
|
||||
<tr class="ballot-wo-extern" style="display:none">
|
||||
<td></td>
|
||||
<td><label><input name="ballot_wo_extern" type="checkbox" /> Ask whether external review can be skipped in ballot</label></td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% if initial_review %}
|
||||
<tr><td></td><td class="warning">Warning: Announced initial review time hasn't elapsed yet. It does so at {{ initial_review.expires }}.</td></tr>
|
||||
<p class="alert alert-warning"><b>Warning:</b> Announced initial review time hasn't elapsed yet. It does so at {{ initial_review.expires }}.</p>
|
||||
{% endif %}
|
||||
<tr>
|
||||
<td colspan="2" class="actions">
|
||||
{% if option == "initcharter" or option == "recharter" %}
|
||||
<input type="submit" value="Initiate chartering"/>
|
||||
{% endif %}
|
||||
{% if not option or option == "abandon" %}
|
||||
<a href="{% url "doc_view" name=doc.name %}">Back</a>
|
||||
<input type="submit" value="Save and (possibly) notify Secretariat"/>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
{% buttons %}
|
||||
{% if option == "initcharter" or option == "recharter" %}
|
||||
<button class="btn btn-primary" type="submit">Initiate chartering</button>
|
||||
{% endif %}
|
||||
{% if not option or option == "abandon" %}
|
||||
<button class="btn btn-primary" type="submit">Save & notify secretariat</button>
|
||||
<a class="btn btn-default pull-right" href="{% url "doc_view" name=doc.name %}">Back</a>
|
||||
{% endif %}
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
|
||||
{% if prev_state %}
|
||||
|
@ -87,10 +56,21 @@ form.change-state .actions {
|
|||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block content_end %}
|
||||
<script type="text/javascript">
|
||||
var info_msg = {{ info_msg|safe }},
|
||||
statesForBallotWoExtern = {{ states_for_ballot_wo_extern }};
|
||||
</script>
|
||||
<script type="text/javascript" src="/js/charter-change-state.js"></script>
|
||||
{% block scripts %}
|
||||
var info_msg = {{ info_msg|safe }}, statesForBallotWoExtern = {{ states_for_ballot_wo_extern }};
|
||||
|
||||
$(document).ready(function () {
|
||||
function stateChanged() {
|
||||
var v = $(this).val();
|
||||
$("#id_message").val(info_msg[v] || "");
|
||||
|
||||
if ($.inArray(+v, statesForBallotWoExtern) != -1)
|
||||
$(".ballot-wo-extern").show();
|
||||
else
|
||||
$(".ballot-wo-extern").hide();
|
||||
}
|
||||
$("#id_charter_state").click(stateChanged).change(stateChanged).keydown(stateChanged);
|
||||
$("#id_charter_state").click();
|
||||
});
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,40 +1,26 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block morecss %}
|
||||
form #id_content {
|
||||
width: 40em;
|
||||
height: 600px;
|
||||
}
|
||||
{% endblock %}
|
||||
{% load bootstrap3 %}
|
||||
|
||||
{% block title %}
|
||||
Charter submission for {{ group.acronym }} {{ group.type.name }}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Charter submission for {{ group.acronym }} {{ group.type.name }}</h1>
|
||||
<h1>Charter submission<br><small>{{ group.acronym }} {{ group.type.name }}</small></h1>
|
||||
|
||||
<p>The text will be submitted as <strong>{{ name }}-{{ next_rev }}</strong></p>
|
||||
<form class="edit-info" action="" enctype="multipart/form-data" method="post">{% csrf_token %}
|
||||
<table>
|
||||
{% for field in form.visible_fields %}
|
||||
<tr>
|
||||
<th>{{ field.label_tag }}</th>
|
||||
<td>
|
||||
{{ field }}
|
||||
{% if field.help_text %}<div class="help">{{ field.help_text }}</div>{% endif %}
|
||||
{{ field.errors }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
<tr>
|
||||
<td></td>
|
||||
<td class="actions">
|
||||
<a class="button" href="{% url "doc_view" name=group.charter.name %}">Cancel</a>
|
||||
<input class="button" type="submit" value="Submit"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
{% bootstrap_messages %}
|
||||
|
||||
<p class="alert alert-info">The text will be submitted as <b>charter-ietf-{{ name }}-{{ next_rev }}</b>.</p>
|
||||
|
||||
<form role="form" enctype="multipart/form-data" method="post">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form form %}
|
||||
|
||||
{% buttons %}
|
||||
<button type="submit" class="btn btn-primary">Submit</button>
|
||||
<a class="btn btn-default pull-right" href="{% url "doc_view" name=group.charter.name %}">Back</a>
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,39 +1,22 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% load bootstrap3 %}
|
||||
|
||||
{% block title %}Approve {{ review.canonical_name }}{% endblock %}
|
||||
|
||||
{% block morecss %}
|
||||
form #id_announcement_text {
|
||||
overflow-x: auto;
|
||||
overflow-y: scroll;
|
||||
width: 800px;
|
||||
height: 400px;
|
||||
border: 1px solid #bbb;
|
||||
}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Approve {{ review.canonical_name }}</h1>
|
||||
|
||||
<form class="approve" action="" method="post">{% csrf_token %}
|
||||
{% bootstrap_messages %}
|
||||
|
||||
<table>
|
||||
{% for field in form.visible_fields %}
|
||||
<tr>
|
||||
<td>
|
||||
<div>{{ field.label_tag }}</div>
|
||||
{{ field }}
|
||||
{% if field.help_text %}<div class="help">{{ field.help_text }}</div>{% endif %}
|
||||
{{ field.errors }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
<tr>
|
||||
<td class="actions">
|
||||
<a href="{% url "doc_view" name=review.name %}">Back</a>
|
||||
<input type="submit" value="Send out the announcement and close the ballot"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<form role="form" method="post">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form form %}
|
||||
|
||||
{% buttons %}
|
||||
<button type="submit" class="btn btn-warning">Send announcement & close ballot</button>
|
||||
<a class="btn btn-default pull-right" href="{% url "doc_view" name=review.name %}">Back</a>
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,48 +1,28 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% load bootstrap3 %}
|
||||
|
||||
{% load ietf_filters %}
|
||||
|
||||
{% block title %}Begin IETF conflict review : {{doc_to_review.canonical_name}}-{{doc_to_review.rev}}{% endblock %}
|
||||
|
||||
{% block morecss %}
|
||||
form.start-conflict-review #id_notify {
|
||||
width: 600px;
|
||||
}
|
||||
form.start-conflict-review .actions {
|
||||
padding-top: 20px;
|
||||
}
|
||||
.warning {
|
||||
font-weight: bold;
|
||||
color: #a00;
|
||||
}
|
||||
{% endblock %}
|
||||
{% block title %}Begin IETF conflict review for {{doc_to_review.canonical_name}}-{{doc_to_review.rev}}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Begin IETF conflict review for {{doc_to_review.canonical_name}}-{{doc_to_review.rev}}</h1>
|
||||
<h1>Begin IETF conflict review<br><small>{{doc_to_review.canonical_name}}-{{doc_to_review.rev}}</small></h1>
|
||||
|
||||
{% bootstrap_messages %}
|
||||
|
||||
{% if user|has_role:"Secretariat" %}
|
||||
<p class="helptext">For help on the initial state choice, see the <a href="{% url "state_help" type="conflict-review" %}">state table</a>.</p>
|
||||
<p><a class="btn btn-info" href="{% url "state_help" type="conflict-review" %}">Help on states</a></p>
|
||||
{% endif %}
|
||||
|
||||
<form class="start-conflict-review" action="" method="post">{% csrf_token %}
|
||||
<table>
|
||||
{% for field in form.visible_fields %}
|
||||
<tr>
|
||||
<th>{{ field.label_tag }}</th>
|
||||
<td>{{ field }}
|
||||
{% if field.help_text %}<div class="help">{{ field.help_text }}</div>{% endif %}
|
||||
<form role="form" method="post">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form form %}
|
||||
|
||||
{{ field.errors }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
<tr>
|
||||
<td colspan="2" class="actions">
|
||||
<a href="{% url "doc_view" name=doc_to_review.name %}">Back</a>
|
||||
<input type="submit" value="Submit"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
{% buttons %}
|
||||
<button type="submit" class="btn btn-primary">Submit</button>
|
||||
<a class="btn btn-default pull-right" href="{% url "doc_view" name=doc_to_review.name %}">Back</a>
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,41 +1,28 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block morecss %}
|
||||
form #id_content {
|
||||
width: 40em;
|
||||
height: 450px;
|
||||
}
|
||||
{% endblock %}
|
||||
{% load bootstrap3 %}
|
||||
|
||||
{% block title %}
|
||||
Edit conflict review for {{ conflictdoc.canonical_name }}-{{ conflictdoc.rev }}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Edit conflict review for {{ conflictdoc.canonical_name }}-{{ conflictdoc.rev }}</h1>
|
||||
<h1>Edit conflict review<br><small>{{ conflictdoc.canonical_name }}-{{ conflictdoc.rev }}</small></h1>
|
||||
|
||||
{% bootstrap_messages %}
|
||||
|
||||
<p class="alert alert-info">The text will be submitted as <strong>{{ review.canonical_name }}-{{ next_rev }}</strong></p>
|
||||
|
||||
<form role="form" enctype="multipart/form-data" method="post">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form form %}
|
||||
|
||||
{% buttons %}
|
||||
<button type="submit" class="btn btn-primary" name="submit_response">Submit</button>
|
||||
<button type="submit" class="btn btn-warning" name="reset_text">Reset to template text</button>
|
||||
<a class="btn btn-default pull-right" href="{% url "doc_view" name=review.canonical_name %}">Back</a>
|
||||
{% endbuttons %}
|
||||
|
||||
<p>The text will be submitted as <strong>{{ review.canonical_name }}-{{ next_rev }}</strong></p>
|
||||
<form class="edit-info" action="" enctype="multipart/form-data" method="post">{% csrf_token %}
|
||||
<table>
|
||||
{% for field in form.visible_fields %}
|
||||
<tr>
|
||||
<th>{{ field.label_tag }}</th>
|
||||
<td>
|
||||
{{ field }}
|
||||
{% if field.help_text %}<div class="help">{{ field.help_text }}</div>{% endif %}
|
||||
{{ field.errors }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
<tr>
|
||||
<td></td>
|
||||
<td class="actions">
|
||||
<a href="{% url "doc_view" name=review.canonical_name %}">Back</a>
|
||||
<input type="submit" name="reset_text" value="Reset to Template Text"/>
|
||||
<input type="submit" name="submit_response" value="Submit"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,19 +1,10 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% load ietf_filters %}
|
||||
|
||||
{% block title %}Ballot for {{ doc.name }}-{{ doc.rev }}{% endblock %}
|
||||
|
||||
{% block pagehead %}
|
||||
<link rel="stylesheet" type="text/css" href="/css/doc.css"></link>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{{ top|safe }}
|
||||
|
||||
{{ ballot_content|safe }}
|
||||
|
||||
{{ top|safe }}
|
||||
{{ ballot_content|safe }}
|
||||
{% endblock content %}
|
||||
|
||||
{% block content_end %}
|
||||
{% endblock content_end %}
|
||||
|
|
|
@ -1,77 +1,114 @@
|
|||
{% load ietf_filters %}
|
||||
|
||||
<div class="ballot-sidebar">
|
||||
{% if editable and user|has_role:"Area Director,Secretariat" %}
|
||||
<div class="ballot-actions">
|
||||
{% if user|has_role:"Area Director" %}
|
||||
<div class="action"><a href="{% url "ietf.doc.views_ballot.edit_position" name=doc.name ballot_id=ballot.pk %}">Edit position</a></div>
|
||||
{% endif %}
|
||||
|
||||
{% if doc.type_id == "draft" or doc.type_id == "conflrev" or doc.type_id == "statchg" %}
|
||||
<div class="action">
|
||||
{% if deferred %}
|
||||
<div><a href="{% url "doc_undefer_ballot" name=doc.name %}">Undefer ballot</a></div>
|
||||
<div>Ballot deferred by {{ deferred.by }} on {{ deferred.time|date:"Y-m-d" }}.</div>
|
||||
{% else %}
|
||||
{% if doc.telechat_date %}
|
||||
<div><a href="{% url "doc_defer_ballot" name=doc.name %}">Defer ballot</a></div>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% if user|has_role:"Secretariat" %}
|
||||
<div><a href="{% url "doc_clear_ballot" name=doc.name %}">Clear ballot</a></div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% for n, positions in position_groups %}
|
||||
<div class="position-group">
|
||||
<div class="heading"><span class="square position-{{ n.slug }}"></span> {{ n.name }}</div>
|
||||
{% for p in positions %}
|
||||
<div>{% if p.old_ad %}[{% endif %}<a{% if user|has_role:"Secretariat" %} href="{% url "ietf.doc.views_ballot.edit_position" name=doc.name ballot_id=ballot.pk %}?ad={{ p.ad.pk }}" title="Click to edit the position of {{ p.ad.plain_name }}"{% endif %}>{{ p.ad.plain_name }}</a>{% if p.old_ad %}]{% endif %}{% if p.comment or p.discuss %} <a href="#{{ p.ad.plain_name|slugify }}"><img src="/images/comment.png" width="14" height="12" alt="*" border="0"/></a>{% endif %}</div>
|
||||
{% if p.old_positions %}<div class="was">(was {{ p.old_positions|join:", " }})</div>{% endif %}
|
||||
{% empty %}
|
||||
<i>none</i>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
||||
</div>
|
||||
|
||||
<div class="ballot-content">
|
||||
|
||||
{% if all_ballots and all_ballots|length > 1 %}
|
||||
<div class="other-ballots">
|
||||
Available ballots:
|
||||
{% for b in all_ballots %}
|
||||
<a{% if b != ballot %} href="{% url "doc_ballot" name=doc.name ballot_id=b.pk %}"{% endif %}>{{ b.ballot_type.name }} ({{ b.rev }})</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<h2 style="margin-top:12px;">{{ ballot.ballot_type.question }}</h2>
|
||||
|
||||
{% if not ballot_open %}
|
||||
<p>Note: This ballot was opened for revision {{ ballot.rev }} and is now closed.</p>
|
||||
{% endif %}
|
||||
|
||||
<p>Summary: <i>{{ summary }}</i></p>
|
||||
|
||||
{% for p in text_positions %}
|
||||
<h2 id="{{ p.ad.plain_name|slugify }}" class="ad-ballot-comment">{% if p.old_ad %}[{% endif %}{{ p.ad.plain_name }}{% if p.old_ad %}]{% endif %}</h2>
|
||||
|
||||
{% if p.pos.blocking and p.discuss %}
|
||||
<p><b>{{ p.pos.name }} ({{ p.discuss_time|date:"Y-m-d" }}{% if not p.for_current_revision %} for -{{ p.get_dochistory.rev }}{% endif %})</b> <img src="/images/comment.png" width="14" height="12" alt=""/></p>
|
||||
|
||||
<pre>{{ p.discuss|wrap_text:80 }}</pre>
|
||||
{% endif %}
|
||||
|
||||
{% if p.comment %}
|
||||
<p><b>Comment ({{ p.comment_time|date:"Y-m-d" }}{% if not p.for_current_revision %} for -{{ p.get_dochistory.rev }}{% endif %})</b> <img src="/images/comment.png" width="14" height="12" alt=""/></p>
|
||||
<pre>{{ p.comment|wrap_text:80 }}</pre>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
<div class="row">
|
||||
<div class="col-md-2 hidden-sm hidden-xs">
|
||||
{% for n, positions in position_groups %}
|
||||
<h4><span class="label label-{{ n|pos_to_label }}"> {{ n.name }}</span></h4>
|
||||
{% for p in positions|dictsort:"ad.last_name" %}
|
||||
<div>
|
||||
{% if p.old_ad %}<span class="text-muted">{% endif %}
|
||||
{% if p.comment or p.discuss %}
|
||||
<a href="#{{ p.ad.plain_name|slugify }}">
|
||||
{% endif %}
|
||||
{{ p.ad.plain_name }}
|
||||
{% if p.comment or p.discuss %}
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if user|has_role:"Secretariat" %}</a>{% endif %}
|
||||
{% if p.old_ad %}</span>{% endif %}
|
||||
</div>
|
||||
{% empty %}
|
||||
(None)
|
||||
{% endfor %}
|
||||
<br>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
<div class="col-md-10">
|
||||
{% if all_ballots and all_ballots|length > 1 %}
|
||||
<ul class="pagination pagination-sm">
|
||||
<li class="disabled"><span><b>Ballots</b></span></li>
|
||||
{% for b in all_ballots %}
|
||||
<li {% if b == ballot %}class="active"{% endif %}>
|
||||
<a href="{% url "doc_ballot" name=doc.name ballot_id=b.pk %}">
|
||||
{{ b.ballot_type.name }} ({{ b.rev }})
|
||||
</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
|
||||
{% if doc.type_id == "draft" or doc.type_id == "conflrev" or doc.type_id == "statchg" %}
|
||||
{% if deferred %}
|
||||
<p class="alert alert-danger">Ballot deferred by {{ deferred.by }} on {{ deferred.time|date:"Y-m-d" }}.</p>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
<p class="alert alert-info"><b>Summary:</b> {{ summary }}</p>
|
||||
{% if not ballot_open %}
|
||||
<p class="alert alert-warning"><b>Note:</b> This ballot was opened for revision {{ ballot.rev }} and is now closed.</p>
|
||||
{% endif %}
|
||||
|
||||
{% if ballot.ballot_type.question %}
|
||||
<p class="well"><b>Ballot question:</b> "{{ ballot.ballot_type.question }}"</p>
|
||||
{% endif %}
|
||||
|
||||
{% if editable and user|has_role:"Area Director,Secretariat" %}
|
||||
{% if user|has_role:"Area Director" %}
|
||||
<a class="btn btn-primary" href="{% url "ietf.doc.views_ballot.edit_position" name=doc.name ballot_id=ballot.pk %}">Edit position</a>
|
||||
{% endif %}
|
||||
|
||||
{% if doc.type_id == "draft" or doc.type_id == "conflrev" or doc.type_id == "statchg" %}
|
||||
{% if deferred %}
|
||||
<a class="btn btn-default" href="{% url "doc_undefer_ballot" name=doc.name %}">Undefer ballot</a>
|
||||
{% else %}
|
||||
{% if doc.telechat_date %}
|
||||
<a class="btn btn-warning" href="{% url "doc_defer_ballot" name=doc.name %}">Defer ballot</a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% if user|has_role:"Secretariat" %}
|
||||
<a class="btn btn-danger" href="{% url "doc_clear_ballot" name=doc.name %}">Clear ballot</a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% for n, positions in position_groups %}
|
||||
{% for p in positions|dictsort:"ad.last_name" %}
|
||||
<h4 id="{{ p.ad.plain_name|slugify }}">
|
||||
{% if p.old_ad %}<span class="text-muted">{% endif %}
|
||||
{{ p.ad.plain_name }}
|
||||
{% if p.old_ad %}</span>{% endif %}
|
||||
<span class="pull-right">
|
||||
{% if p.old_positions %}
|
||||
<span class="text-muted small">(was {{ p.old_positions|join:", " }})</span>
|
||||
{% endif %}
|
||||
<span class="label label-{{ p.pos|pos_to_label }}">{{p.pos}}</span>
|
||||
{% if user|has_role:"Secretariat" %}
|
||||
<a href="{% url "ietf.doc.views_ballot.edit_position" name=doc.name ballot_id=ballot.pk %}?ad={{ p.ad.pk }}" title="Click to edit the position of {{ p.ad.plain_name }}" class="btn btn-default btn-xs">
|
||||
Edit</a>
|
||||
{% endif %}
|
||||
</span>
|
||||
</h4>
|
||||
|
||||
{% if p.pos.blocking and p.discuss %}
|
||||
<div class="panel panel-danger">
|
||||
<div class="panel-heading">
|
||||
<h5 class="panel-title"><b>{{ p.pos.name }}</b> ({{ p.discuss_time|date:"Y-m-d" }} for -{{ p.get_dochistory.rev}})</h5>
|
||||
</div>
|
||||
<div class="panel-body"><pre class="ballot">{{ p.discuss|wrap_text:80|escape|urlize }}</pre></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if p.comment %}
|
||||
<div class="panel panel-{{ p.pos|pos_to_label }}">
|
||||
<div class="panel-heading">
|
||||
<h5 class="panel-title"><b>Comment</b> ({{ p.comment_time|date:"Y-m-d" }} for -{{ p.get_dochistory.rev}})</h5>
|
||||
</div>
|
||||
<div class="panel-body"><pre class="ballot">{{ p.comment|wrap_text:80|escape|urlize }}</pre></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,139 +1,171 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% load ietf_filters %}
|
||||
|
||||
{% block title %}{{ doc.canonical_name }}-{{ doc.rev }}{% endblock %}
|
||||
|
||||
{% block pagehead %}
|
||||
<link rel="stylesheet" type="text/css" href="/css/doc.css"></link>
|
||||
<link rel="alternate" type="application/atom+xml" href="/feed/group-changes/{{ group.acronym }}/">
|
||||
{% endblock %}
|
||||
|
||||
{% block morecss %}
|
||||
.edit { width: 1px }
|
||||
{% endblock %}
|
||||
|
||||
{% block title %}{{ doc.title }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{{ top|safe }}
|
||||
|
||||
{% include "doc/revisions_list.html" %}
|
||||
|
||||
<div class="ietf-box metabox">
|
||||
<div>
|
||||
{% if snapshot %}Snapshot of{% endif %}
|
||||
{% if doc.get_state_slug != "approved" %}Proposed{% endif %}
|
||||
Charter for "{{ group.name }}"
|
||||
(<a href="{{ group.about_url }}">{{ group.acronym }}</a>) {{ group.type.name }}
|
||||
</div>
|
||||
<table class="table table-condensed table-striped">
|
||||
<tr>
|
||||
<th>
|
||||
{% if doc.get_state_slug != "approved" %}
|
||||
Proposed charter
|
||||
{% else %}
|
||||
Charter
|
||||
{% endif %}
|
||||
</th>
|
||||
<td class="edit"></td>
|
||||
<td>
|
||||
{{ group.name }} {{ group.type.name }}
|
||||
<a href="{{ group.about_url }}">({{ group.acronym }})</a> {{ group.type.name }}
|
||||
|
||||
<table id="metatable" width="100%">
|
||||
<tr>
|
||||
<td>WG State:</td>
|
||||
<td>{{ group.state.name }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="/doc/help/state/charter/">Charter State</a>:</td>
|
||||
<td>
|
||||
<div>
|
||||
<a title="{{ doc.get_state.desc }}"
|
||||
{% if not snapshot and can_manage %}
|
||||
class="editlink" href="{% url "charter_change_state" name=doc.name %}"
|
||||
{% endif %}>
|
||||
{{ doc.get_state.name }}
|
||||
</a>
|
||||
{% if chartering == "initial" %} - (Initial Chartering){% endif %}
|
||||
{% if chartering == "rechartering" %} - (Rechartering){% endif %}
|
||||
</div>
|
||||
{% if snapshot %}
|
||||
<span class="label label-warning">Snapshot</span>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
{% if not snapshot and chartering %}
|
||||
<div class="telechat">
|
||||
<a
|
||||
{% if user|has_role:"Area Director,Secretariat" %}
|
||||
class="editlink" href="{% url "charter_telechat_date" name=doc.name %}"
|
||||
{% endif %}>
|
||||
{% if not telechat %}Not on agenda of IESG telechat{% else %}On agenda of {{ telechat.telechat_date|date:"Y-m-d" }} IESG telechat{% endif %}
|
||||
</a>
|
||||
</div>
|
||||
<tr>
|
||||
<th>WG state</th>
|
||||
<td class="edit"></td>
|
||||
<td>{{ group.state.name }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><a href="/doc/help/state/charter/">Charter state</a></th>
|
||||
<td class="edit">
|
||||
{% if not snapshot and can_manage %}
|
||||
<a class="btn btn-default btn-xs pull-right" title="{{ doc.get_state.desc }}" href="{% url "charter_change_state" name=doc.name %}">Edit</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{{ doc.get_state.name }}
|
||||
|
||||
{% if ballot_summary %}
|
||||
<div class="ballot-summary">
|
||||
({{ ballot_summary }})
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if chartering == "initial" %}
|
||||
<span class="label label-info">Initial chartering</span>
|
||||
{% endif %}
|
||||
{% if chartering == "rechartering" %}
|
||||
<span class="label label-info">Rechartering</span>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% if not snapshot and chartering %}
|
||||
<tr>
|
||||
<th>Telechat date</th>
|
||||
<td class="edit">
|
||||
{% if can_manage %}
|
||||
<a class="btn btn-default btn-xs pull-right" href="{% url "charter_telechat_date" name=doc.name %}">Edit</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{% if not telechat %}
|
||||
(None)
|
||||
{% else %}
|
||||
On agenda of {{ telechat.telechat_date|date:"Y-m-d" }} IESG telechat
|
||||
{% endif %}
|
||||
|
||||
<tr>
|
||||
<td>Responsible AD:</td>
|
||||
<td><a {% if user|has_role:"Area Director,Secretariat" %}class="editlink" href="{% url "charter_edit_ad" name=doc.name %}"{% endif %}>{{ doc.ad|default:"none" }}</a> </td>
|
||||
</tr>
|
||||
{% if ballot_summary %}
|
||||
<br><i>{{ ballot_summary }}</i>
|
||||
{% endif %}
|
||||
</td>
|
||||
{% endif %}
|
||||
|
||||
<tr><td colspan='2'><hr size='1' noshade /></td></tr>
|
||||
<tr>
|
||||
<th>Responsible AD</th>
|
||||
<td class="edit">
|
||||
{% if can_manage %}
|
||||
<a class="btn btn-default btn-xs pull-right" href="{% url "charter_edit_ad" name=doc.name %}">Edit</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{{ doc.ad|default:"(None)" }}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Send notices to:</td>
|
||||
<td><a {% if user|has_role:"Area Director,Secretariat" %}
|
||||
class="editlink" href="{% url "charter_edit_notify" name=doc.name %}"
|
||||
{% endif %}>
|
||||
{{ doc.notify|default:"none" }}
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Send notices to</th>
|
||||
<td class="edit">
|
||||
{% if can_manage %}
|
||||
<a class="btn btn-default btn-xs pull-right" href="{% url "charter_edit_notify" name=doc.name %}">Edit</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{{ doc.notify|default:"(None)" }}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr><td>Last updated:</td><td> {{ doc.time|date:"Y-m-d" }}</td></tr>
|
||||
<tr>
|
||||
<th>Last updated</th>
|
||||
<td class="edit"></td>
|
||||
<td>{{ doc.time|date:"Y-m-d" }}</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<tr><td colspan='2'><hr size='1' noshade /></td></tr>
|
||||
</table>
|
||||
<p class="buttonlist">
|
||||
{% if not snapshot and can_manage %}
|
||||
{% if chartering %}
|
||||
{% url "charter_startstop_process" name=doc.name option='abandon' as abandon_url %}
|
||||
{% if abandon_url %}
|
||||
<a class="btn btn-danger" href="{{ abandon_url }}">Abandon chartering</a>
|
||||
{% endif %}
|
||||
|
||||
<div class="links">
|
||||
<a href="/feed/group-changes/{{ group.acronym }}/">Atom feed</a>
|
||||
</div>
|
||||
{% if user|has_role:"Secretariat" %}
|
||||
{% url "charter_approve" name=doc.name as approve_url %}
|
||||
{% if approve_url %}
|
||||
<a class="btn btn-warning" href="{{ approve_url }}">Approve charter</a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
<div class="actions">
|
||||
{% if not snapshot and can_manage %}
|
||||
{% if chartering %}
|
||||
{% url "charter_startstop_process" name=doc.name option='abandon' as abandon_url %}{% if abandon_url %}<a class="button" href="{{ abandon_url }}">Abandon Effort</a>{% endif %}
|
||||
{% else %}
|
||||
|
||||
{% if user|has_role:"Secretariat" %}
|
||||
{% url "charter_approve" name=doc.name as approve_url %}{% if approve_url %}<a class="button" href="{{ approve_url }}">Approve Charter</a>{% endif %}
|
||||
{% endif %}
|
||||
{% if group.state_id == "proposed" or group.state_id == "bof" %}
|
||||
{% url "charter_submit" name=doc.name option='initcharter' as start_url %}
|
||||
{% if start_url %}
|
||||
<a class="btn btn-default" href="{{ start_url }}">Start chartering</a>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{% url "charter_submit" name=doc.name option='recharter' as recharter_url %}
|
||||
{% if recharter_url %}
|
||||
<a class="btn btn-default" href="{{ recharter_url }}">Recharter</a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</p>
|
||||
|
||||
{% else %}
|
||||
{% if group.state_id == "proposed" or group.state_id == "bof" %}
|
||||
{% url "charter_submit" name=doc.name option='initcharter' as start_url %}{% if start_url %}<a class="button" href="{{ start_url }}">Start Chartering</a>{% endif %}
|
||||
{% else %}
|
||||
{% url "charter_submit" name=doc.name option='recharter' as recharter_url %}{% if recharter_url %}<a class="button" href="{{ recharter_url }}">Recharter</a>{% endif %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>Other versions: <a href="{{ txt_url }}">plain text</a></p>
|
||||
|
||||
<h3>Charter {{ doc.canonical_name }}-{{ doc.rev }}
|
||||
<h2>Charter<br><small>{{ doc.canonical_name }}-{{ doc.rev }}</small></h2>
|
||||
|
||||
{% if not snapshot and can_manage and chartering and group.state_id != "conclude" %}
|
||||
<a class="edit" href="{% url "charter_submit" name=doc.name %}">Change charter text</a>
|
||||
<p><a class="btn btn-default" href="{% url "charter_submit" name=doc.name %}">Change charter text</a></p>
|
||||
{% endif %}
|
||||
</h3>
|
||||
|
||||
{% if doc.rev != "" %}
|
||||
<div class="document-markup">
|
||||
{{ content|safe|keep_spacing|sanitize_html|wordwrap:80|safe }}
|
||||
</div>
|
||||
{{ content|safe|keep_spacing|sanitize_html|wordwrap:80|safe }}
|
||||
{% endif %}
|
||||
|
||||
{% if not snapshot and chartering %}
|
||||
<h3>Proposed Milestones
|
||||
{% if can_manage %}
|
||||
<a class="edit" href="{% url "group_edit_charter_milestones" group_type=doc.group.type_id acronym=doc.group.acronym %}">Edit charter milestones</a>
|
||||
{% endif %}
|
||||
</h3>
|
||||
<h2>Proposed milestones</h2>
|
||||
{% if can_manage %}
|
||||
<p><a class="btn btn-primary" href="{% url "group_edit_charter_milestones" group_type=doc.group.type_id acronym=doc.group.acronym %}">Edit milestones</a></p>
|
||||
{% endif %}
|
||||
|
||||
{% if milestones %}
|
||||
{% include "group/milestones.html" %}
|
||||
{% else %}
|
||||
<p>No milestones for charter found.</p>
|
||||
{% endif %}
|
||||
{% if milestones %}
|
||||
{% include "group/milestones.html" %}
|
||||
{% else %}
|
||||
<p>No milestones for charter found.</p>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,109 +1,121 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% load ietf_filters %}
|
||||
|
||||
{% block title %}{{ doc.name }}-{{ doc.rev }}{% endblock %}
|
||||
|
||||
{% block pagehead %}
|
||||
<link rel="stylesheet" type="text/css" href="/css/doc.css"></link>
|
||||
{% block morecss %}
|
||||
.edit { width: 1px }
|
||||
{% endblock %}
|
||||
|
||||
{% block title %}{{ doc.title }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{{ top|safe }}
|
||||
|
||||
{% include "doc/revisions_list.html" %}
|
||||
|
||||
<div class="ietf-box metabox">
|
||||
<div>
|
||||
{% if snapshot %}Snapshot of{% endif %}
|
||||
{% if doc.get_state_slug not in approved_states %}Proposed{% endif %}
|
||||
IESG Conflict Review for the {{conflictdoc.stream}} document: <a href="{% url "doc_view" name=conflictdoc.canonical_name %}">{{ conflictdoc.canonical_name }}{% if conflictdoc.get_state_slug != 'rfc' %}-{{ conflictdoc.rev }}{% endif %}</a>
|
||||
</div>
|
||||
<table class="table table-condensed table-striped">
|
||||
<tr>
|
||||
<th>
|
||||
{% if doc.get_state_slug not in approved_states %}
|
||||
Proposed conflict review
|
||||
{% else %}
|
||||
Conflict review
|
||||
{% endif %}
|
||||
</th>
|
||||
<td class="edit"></td>
|
||||
<td>
|
||||
<a href="{% url "doc_view" name=conflictdoc.canonical_name %}">
|
||||
{{ conflictdoc.canonical_name }}{% if conflictdoc.get_state_slug != 'rfc' %}-{{ conflictdoc.rev }}{% endif %}
|
||||
</a>
|
||||
<span class="label label-info">{{conflictdoc.stream}} stream</span>
|
||||
|
||||
<table id="metatable" width="100%">
|
||||
<tr>
|
||||
<td><a href="/doc/help/state/conflict-review/">Conflict Review State</a>:</td>
|
||||
<td>
|
||||
<div>
|
||||
<a title="{{ doc.get_state.desc }}"{% if not snapshot and user|has_role:"Area Director,Secretariat" %} class="editlink" href="{% url "conflict_review_change_state" name=doc.name %}"{% endif %}>{{ doc.get_state.name }}</a>
|
||||
{% if snapshot %}
|
||||
<span class="label label-warning">Snapshot</span>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
{% if not snapshot and user|has_role:"Area Director,Secretariat" %}
|
||||
<tr>
|
||||
<th><a href="/doc/help/state/conflict-review/">Conflict review state</a></th>
|
||||
<td class="edit">
|
||||
{% if not snapshot and user|has_role:"Area Director,Secretariat" %}
|
||||
<a title="{{ doc.get_state.desc }}" class="btn btn-default btn-xs pull-right" href="{% url "conflict_review_change_state" name=doc.name %}">Edit</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{{ doc.get_state.name }}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
{% if request.user|has_role:"Secretariat" %}{% if doc.get_state_slug = 'appr-reqnopub-pend' or doc.get_state_slug = 'appr-noprob-pend' %}
|
||||
- <a href="{% url "conflict_review_approve" name=doc.name %}">Approve conflict review</a>
|
||||
{% endif %}{% endif %}
|
||||
{% if not snapshot %}
|
||||
<tr>
|
||||
<th>Telechat date</th>
|
||||
<td class="edit">
|
||||
{% if not snapshot and user|has_role:"Area Director,Secretariat" and doc.get_state_slug not in approved_states %}
|
||||
<a class="btn btn-default btn-xs pull-right" href="{% url "conflict_review_telechat_date" name=doc.name %}">Edit</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{% if not telechat %}
|
||||
(None)
|
||||
{% else %}
|
||||
On agenda of {{ telechat.telechat_date|date:"Y-m-d" }} IESG telechat
|
||||
{% if doc.returning_item %} (returning item){% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% endif %}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{% if not snapshot %}
|
||||
<tr>
|
||||
<td>Telechat Date:</td>
|
||||
<td>
|
||||
<a {% if not snapshot and user|has_role:"Area Director,Secretariat" and doc.get_state_slug not in approved_states %}
|
||||
class="editlink" href="{% url "conflict_review_telechat_date" name=doc.name %}"
|
||||
{%endif%} >
|
||||
{% if not telechat %}Not on agenda of an IESG telechat{% else %}On agenda of {{ telechat.telechat_date|date:"Y-m-d" }} IESG telechat{% if doc.returning_item %} (returning item){% endif %}{% endif %}
|
||||
</a>
|
||||
{% if ballot_summary %}
|
||||
<div class="ballot-summary">
|
||||
({{ ballot_summary }})
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if ballot_summary %}
|
||||
<br><i>{{ ballot_summary }}</i>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
<tr>
|
||||
<th>Shepherding AD</th>
|
||||
<td class="edit">
|
||||
{% if not snapshot and user|has_role:"Area Director,Secretariat" and doc.get_state_slug not in approved_states %}
|
||||
<a class="btn btn-default btn-xs pull-right" href="{% url "conflict_review_ad" name=doc.name %}">Edit</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{{doc.ad}}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Shepherding AD:</td>
|
||||
<td>
|
||||
<a {% if not snapshot and user|has_role:"Area Director,Secretariat" and doc.get_state_slug not in approved_states %}
|
||||
class="editlink" href="{% url "conflict_review_ad" name=doc.name %}"
|
||||
{% endif %}
|
||||
>
|
||||
{{doc.ad}}
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Send notices to</th>
|
||||
<td class="edit">
|
||||
{% if not snapshot and user|has_role:"Area Director,Secretariat" and doc.get_state_slug not in approved_states %}
|
||||
<a class="btn btn-default btn-xs pull-right" href="{% url "conflict_review_notices" name=doc.name %}">Edit</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{{doc.notify}}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Send notices to:</td>
|
||||
<td>
|
||||
<a {% if not snapshot and user|has_role:"Area Director,Secretariat" and doc.get_state_slug not in approved_states %}
|
||||
class="editlink" href="{% url "conflict_review_notices" name=doc.name %}"
|
||||
{% endif %}
|
||||
>
|
||||
{{doc.notify}}
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
<tr><td colspan='2'><hr size='1' noshade /></td></tr>
|
||||
|
||||
<tr><td>Last updated:</td><td> {{ doc.time|date:"Y-m-d" }}</td></tr>
|
||||
|
||||
{% comment %}
|
||||
<tr><td colspan='2'><hr size='1' noshade /></td></tr>
|
||||
{% endcomment %}
|
||||
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
<h3>Conflict Review for {{ conflictdoc.name }}-{{ conflictdoc.rev }}
|
||||
<tr>
|
||||
<th>Last updated</th>
|
||||
<td class="edit"></td>
|
||||
<td>{{ doc.time|date:"Y-m-d" }}</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h2>Conflict review<br><small>{{ conflictdoc.name }}-{{ conflictdoc.rev }}</small></h2>
|
||||
{% if not snapshot and user|has_role:"Area Director,Secretariat" and doc.get_state_slug != 'apprsent' %}
|
||||
<a class="edit" href="{% url "conflict_review_submit" name=doc.name %}">Change conflict review text</a>
|
||||
<a class="btn btn-default" href="{% url "conflict_review_submit" name=doc.name %}">Change conflict review text</a>
|
||||
{% endif %}
|
||||
|
||||
{% if not snapshot and user|has_role:"Area Director,Secretariat" %}
|
||||
{% if request.user|has_role:"Secretariat" %}
|
||||
{% if doc.get_state_slug = 'appr-reqnopub-pend' or doc.get_state_slug = 'appr-noprob-pend' %}
|
||||
<a class="btn btn-warning" href="{% url "conflict_review_approve" name=doc.name %}">Approve conflict review</a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</h3>
|
||||
|
||||
{% if doc.rev %}
|
||||
<div class="document-markup">
|
||||
{{ content|fill:"80"|safe|linebreaksbr|keep_spacing|sanitize_html|safe }}
|
||||
</div>
|
||||
<p>{{ content|fill:"80"|safe|linebreaksbr|keep_spacing|sanitize_html|safe }}</p>
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,303 +1,401 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% load ietf_filters %}
|
||||
|
||||
{% block title %}{% if doc.get_state_slug == "rfc" %}RFC {{ rfc_number }}{% else %}{{ name }}-{{ doc.rev }}{% endif %}{% endblock %}
|
||||
|
||||
{% block pagehead %}
|
||||
<link rel="stylesheet" type="text/css" href="/css/doc.css"></link>
|
||||
<meta name="description" content="{{ doc.title }} {% if doc.get_state_slug == "rfc" %}(RFC {{ rfc_number }}{% if published %}, {{ published.time|date:"F Y" }}{% endif %}{% if obsoleted_by %}; obsoleted by {{ obsoleted_by|join:", " }}{% endif %}){% else %}(Internet-Draft, {{ doc.time|date:"Y" }}){% endif %}" />
|
||||
<link rel="alternate" type="application/atom+xml" title="Document changes" href="/feed/document-changes/{{ name }}/">
|
||||
<meta name="description" content="{{ doc.title }} {% if doc.get_state_slug == "rfc" %}(RFC {{ rfc_number }}{% if published %}, {{ published.time|date:"F Y" }}{% endif %}{% if obsoleted_by %}; obsoleted by {{ obsoleted_by|join:", " }}{% endif %}){% else %}(Internet-Draft, {{ doc.time|date:"Y" }}){% endif %}">
|
||||
{% endblock %}
|
||||
|
||||
{% block morecss %}
|
||||
.edit { width: 1px }
|
||||
{% endblock %}
|
||||
|
||||
{% block title %}
|
||||
{% if doc.get_state_slug == "rfc" %}
|
||||
RFC {{ rfc_number }}
|
||||
{% else %}
|
||||
{{ name }}-{{ doc.rev }}
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{{ top|safe }}
|
||||
|
||||
<div class="ietf-box metabox">
|
||||
<table id="metatable" width="100%">
|
||||
<tr>
|
||||
<td>Document type:</td>
|
||||
<td>
|
||||
{% if doc.get_state_slug == "rfc" %}
|
||||
RFC - {{ doc.std_level }}
|
||||
({% if published %}{{ published.time|date:"F Y" }}{% else %}publication date unknown{% endif %}{% if has_errata %}; <a href="http://www.rfc-editor.org/errata_search.php?rfc={{ rfc_number }}" rel="nofollow">Errata</a>{% else %}; No errata{% endif %})
|
||||
<table class="table table-condensed table-striped">
|
||||
<tr>
|
||||
<th>Document type</th>
|
||||
<td class="edit"></td>
|
||||
<td>
|
||||
{% if doc.get_state_slug == "rfc" %}
|
||||
RFC - {{ doc.std_level }}
|
||||
({% if published %}{{ published.time|date:"F Y" }}{% else %}publication date unknown{% endif %}{% if has_errata %}; <a href="//www.rfc-editor.org/errata_search.php?rfc={{ rfc_number }}" rel="nofollow">Errata</a>{% else %}; No errata{% endif %})
|
||||
|
||||
{% if obsoleted_by %}<div>Obsoleted by {{ obsoleted_by|join:", "|urlize_ietf_docs }}</div>{% endif %}
|
||||
{% if updated_by %}<div>Updated by {{ updated_by|join:", "|urlize_ietf_docs }}</div>{% endif %}
|
||||
{% if obsoletes %}<div>Obsoletes {{ obsoletes|join:", "|urlize_ietf_docs }}</div>{% endif %}
|
||||
{% if updates %}<div>Updates {{ updates|join:", "|urlize_ietf_docs }}</div>{% endif %}
|
||||
{% if status_changes %}<div>Status changed by {{ status_changes|join:", "|urlize_ietf_docs }}</div>{% endif %}
|
||||
{% if proposed_status_changes %}<div>Proposed status changed by {{ proposed_status_changes|join:", "|urlize_ietf_docs }}</div>{% endif %}
|
||||
{% if rfc_aliases %}<div>Also Known As {{ rfc_aliases|join:", "|urlize_ietf_docs }}</div>{% endif %}
|
||||
{% if draft_name %}<div>Was <a href="/doc/{{ draft_name}}/">{{ draft_name }}</a> {% if submission %}({{ submission|safe }}){% endif %}</div>{% endif %}
|
||||
{% else %}
|
||||
{{ doc.get_state }} Internet-Draft {% if submission %}({{ submission|safe }}){% endif %}
|
||||
{% if obsoleted_by %}<div>Obsoleted by {{ obsoleted_by|join:", "|urlize_ietf_docs }}</div>{% endif %}
|
||||
{% if updated_by %}<div>Updated by {{ updated_by|join:", "|urlize_ietf_docs }}</div>{% endif %}
|
||||
{% if obsoletes %}<div>Obsoletes {{ obsoletes|join:", "|urlize_ietf_docs }}</div>{% endif %}
|
||||
{% if updates %}<div>Updates {{ updates|join:", "|urlize_ietf_docs }}</div>{% endif %}
|
||||
{% if status_changes %}<div>Status changed by {{ status_changes|join:", "|urlize_ietf_docs }}</div>{% endif %}
|
||||
{% if proposed_status_changes %}<div>Proposed status changed by {{ proposed_status_changes|join:", "|urlize_ietf_docs }}</div>{% endif %}
|
||||
{% if rfc_aliases %}<div>Also known as {{ rfc_aliases|join:", "|urlize_ietf_docs }}</div>{% endif %}
|
||||
{% if draft_name %}<div>Was <a href="/doc/{{ draft_name}}/">{{ draft_name }}</a> {% if submission %}({{ submission|safe }}){% endif %}</div>{% endif %}
|
||||
{% else %}
|
||||
{{ doc.get_state }} Internet-Draft {% if submission %}({{ submission|safe }}){% endif %}
|
||||
{% if resurrected_by %}- resurrect requested by {{ resurrected_by }}{% endif %}
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
{% if resurrected_by %}- resurrect requested by {{ resurrected_by }}{% endif %}
|
||||
{% endif %}
|
||||
{% if replaces or can_edit_stream_info %}
|
||||
<tr>
|
||||
<th>Replaces</th>
|
||||
<td class="edit">
|
||||
{% if can_edit_stream_info %}
|
||||
<a class="btn btn-default btn-xs" href="{% url "doc_change_replaces" name=doc.name %}">Edit</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{{ replaces|join:", "|urlize_ietf_docs|default:"(None)" }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
|
||||
{% if replaces or can_edit_stream_info %}
|
||||
<div>
|
||||
<a{% if can_edit_stream_info %} class="editlink" href="{% url "doc_change_replaces" name=doc.name %}"{% endif %}>
|
||||
Replaces: {{ replaces|join:", "|urlize_ietf_docs|default:"None" }}
|
||||
</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if replaced_by %}<div>Replaced by: {{ replaced_by|join:", "|urlize_ietf_docs }}</div>{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% if replaced_by %}
|
||||
<tr>
|
||||
<th>Replaced by</th>
|
||||
<td class="edit"></td>
|
||||
<td>
|
||||
{{ replaced_by|join:", "|urlize_ietf_docs }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
|
||||
<tr>
|
||||
<td>Document stream:</td>
|
||||
<td>
|
||||
<a {% if can_change_stream %} class="editlink" href="{% url "doc_change_stream" name=doc.name %}"{% endif %}>
|
||||
{{ doc.stream|default:"No stream defined" }}
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Document stream</th>
|
||||
<td class="edit">
|
||||
{% if can_change_stream %}
|
||||
<a class="btn btn-default btn-xs" href="{% url "doc_change_stream" name=doc.name %}">Edit</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{{ doc.stream|default:"(None)" }}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Last updated:</td>
|
||||
<td>
|
||||
{{ doc.time|date:"Y-m-d" }}
|
||||
{% if latest_revision and latest_revision.time.date != doc.time.date %}
|
||||
(latest revision {{ latest_revision.time|date:"Y-m-d" }})
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Last updated</th>
|
||||
<td class="edit"></td>
|
||||
<td>
|
||||
{{ doc.time|date:"Y-m-d" }}
|
||||
{% if latest_revision and latest_revision.time.date != doc.time.date %}
|
||||
(latest revision {{ latest_revision.time|date:"Y-m-d" }})
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
{% if doc.get_state_slug != "rfc" %}
|
||||
<tr>
|
||||
<td>Intended RFC status:</td>
|
||||
<td>
|
||||
<a {% if can_edit or can_edit_stream_info %}class="editlink" href="{% url "doc_change_intended_status" name=doc.name %}"{% endif %}>
|
||||
{{ doc.intended_std_level|default:"Unknown" }}</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
|
||||
<tr>
|
||||
<td>Other versions:</td>
|
||||
<td>
|
||||
{% if doc.get_state_slug != "active" and doc.get_state_slug != "rfc" %}(expired, archived):{% endif %}
|
||||
{% if file_urls %}
|
||||
{% for label, url in file_urls %}<a href="{{ url }}">{{ label}}</a>{% if not forloop.last%}, {% endif %}{% endfor %}
|
||||
{% else %}
|
||||
(not online)
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
{% if conflict_reviews %}
|
||||
<tr>
|
||||
<td>IETF Conflict Review:</td>
|
||||
<td>{{ conflict_reviews|join:", "|urlize_ietf_docs }}</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
|
||||
<tr><td colspan='2'><hr size='1' noshade /></td></tr>
|
||||
|
||||
<tr>
|
||||
{% if doc.stream %}
|
||||
<td>{{ doc.stream }} State:</td>
|
||||
<td class="stream-state">
|
||||
<a {% if doc.stream and can_edit_stream_info %}class="editlink" href="{% url "doc_change_stream_state" name=doc.name state_type=stream_state_type_slug %}"{% endif %}>
|
||||
{{ stream_state|default:"(None)" }}
|
||||
</a>
|
||||
|
||||
{% for m in milestones %}
|
||||
<span title="{{ m.desc }} ({{ m.group.acronym }} milestone)" class="milestone">{{ m.due|date:"M Y" }}</span>
|
||||
{% endfor %}
|
||||
|
||||
{% if stream_tags %}
|
||||
<div class="stream-tags">{% for tag in stream_tags %}{{ tag.name }}{% if not forloop.last %}, {% endif %}{% endfor %}</div>
|
||||
{% endif %}
|
||||
</td>
|
||||
{% else %}
|
||||
<td>Stream State:</td><td>No stream defined</td>
|
||||
{% endif %}
|
||||
</tr>
|
||||
|
||||
{% if consensus %}
|
||||
<tr>
|
||||
<td>Consensus:</td>
|
||||
<td>
|
||||
<a title="Whether the document is the result of a community consensus process as defined in RFC 5741" {% if can_edit_consensus %}class="editlink" href="{% url "doc_edit_consensus" name=doc.name %}"{% endif %}>
|
||||
{{ consensus }}
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
|
||||
<tr>
|
||||
<td>Document shepherd:</td>
|
||||
<td>
|
||||
<a {% if can_edit_stream_info or is_shepherd %}class="editlink" href="{% if can_edit_stream_info %}{% url "doc_edit_shepherd" name=doc.name %}{% elif is_shepherd %}{% url "doc_change_shepherd_email" name=doc.name %}{% endif %}"{% endif %}>
|
||||
{% if doc.shepherd %}{{ doc.shepherd.person }}{% else %}No shepherd assigned{% endif %}
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
{% if shepherd_writeup or can_edit_shepherd_writeup %}
|
||||
<tr>
|
||||
<td>Shepherd Write-Up:</td>
|
||||
<td>
|
||||
<a {% if can_edit_shepherd_writeup %}class="editlink"{% endif %} href="{% url "doc_shepherd_writeup" name=doc.name %}">
|
||||
{% if shepherd_writeup %}Last changed {{ shepherd_writeup.time|date:"Y-m-d"}}{% else %}(None){% endif %}
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
|
||||
<tr><td colspan='2'><hr size='1' noshade /></td></tr>
|
||||
|
||||
{% if published and started_iesg_process and published.time < started_iesg_process.time %}
|
||||
<tr>
|
||||
<td colspan='2' style="font-style:italic">This information refers to IESG processing after the RFC was initially published:</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
|
||||
<tr>
|
||||
<td><a href="{% url "state_help" "draft-iesg" %}">IESG State</a>:</td>
|
||||
<td>
|
||||
<a {% if iesg_state and can_edit %}class="editlink" href="{% url "doc_change_state" name=doc.name %}"{% endif %}>
|
||||
{{ iesg_state_summary|default:"I-D Exists" }}</a>
|
||||
|
||||
{% if iana_review_state %}
|
||||
<div>IANA Review State:
|
||||
<a {% if can_edit_iana_state %}class="editlink" href="{% url "doc_change_iana_state" name=doc.name state_type="iana-review" %}"{% endif %}>{{ iana_review_state }}</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if iana_review_state %}
|
||||
<div>IANA Action State:
|
||||
<a {% if can_edit_iana_state %}class="editlink" href="{% url "doc_change_iana_state" name=doc.name state_type="iana-action" %}"{% endif %}>{{ iana_action_state }}</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if rfc_editor_state %}
|
||||
<div>
|
||||
RFC Editor State:
|
||||
<a href="http://www.rfc-editor.org/queue2.html#{{ doc.name }}">{{ rfc_editor_state }}</a></div>
|
||||
{% endif %}
|
||||
|
||||
<div class="telechat">
|
||||
<a {% if can_edit %}class="editlink" href="{% url "doc_change_telechat_date" name=doc.name %}"{% endif %}>
|
||||
|
||||
{% if telechat %}
|
||||
On agenda of {{ telechat.telechat_date }} IESG telechat {% if telechat.returning_item %} (returning item){% endif %}
|
||||
{% else %}
|
||||
{% if can_edit %}Not on an upcoming telechat agenda{% endif %}
|
||||
{% endif %}
|
||||
</a>
|
||||
</div>
|
||||
|
||||
{% if ballot_summary %}<div class="ballot-summary">({{ ballot_summary }})</div>{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Responsible AD:</td>
|
||||
<td>
|
||||
<a {% if can_edit %}class="editlink" href="{% url "doc_change_ad" name=doc.name %}"{% endif %}>
|
||||
{{ doc.ad|default:"(None)" }}
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
{% if iesg_state %}
|
||||
{% if doc.note or can_edit %}
|
||||
<tr>
|
||||
<td>IESG Note:</td>
|
||||
<td>
|
||||
<a {% if can_edit %}class="editlink" href="{% url "doc_change_iesg_note" name=doc.name %}"{% endif %}>
|
||||
{{ doc.note|default:"(None)"|linebreaksbr }}
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
<tr>
|
||||
<td>Send notices to:</td>
|
||||
<td>
|
||||
<a {% if can_edit %}class="editlink" href="{% url "doc_change_notify" name=doc.name %}"{% endif %}>
|
||||
{{ doc.notify|default:"No addresses provided"}}
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr><td colspan='2'><hr size='1' noshade /></td></tr>
|
||||
</table>
|
||||
|
||||
<div class="links">
|
||||
<a href="mailto:{{ doc.name }}@tools.ietf.org?subject=Mail%20regarding%20{{ doc.name }}" rel="nofollow">Email Authors</a>
|
||||
| <a href="{% url "ipr_search" %}?option=document_search&id={{ doc.name }}" rel="nofollow">IPR Disclosures{% if doc.related_ipr %} ({{doc.related_ipr|length}}){% endif %}</a>
|
||||
| <a href="{% url 'doc_references' doc.canonical_name %}" rel="nofollow">References</a>
|
||||
| <a href="{% url 'doc_referenced_by' doc.canonical_name %}" rel="nofollow">Referenced By</a>
|
||||
| <a href="http://www.ietf.org/tools/idnits?url=http://www.ietf.org/archive/id/{{ doc.filename_with_rev }}" rel="nofollow" target="_blank">Check nits</a>
|
||||
| <a href="/feed/document-changes/{{ name }}/">History feed</a>
|
||||
| <a href="http://www.google.com/search?as_q={{ doc.name }}&as_sitesearch={{ search_archive }}" rel="nofollow" target="_blank">Search Mailing Lists</a>
|
||||
{% if user|has_role:"Area Director" %}
|
||||
| <a href="https://www.iesg.org/bin/c5i?mid=6&rid=77&target={{ doc.name }}" rel="nofollow" target="_blank">Search Mailing Lists (ARO)</a>
|
||||
{% endif %}
|
||||
{% if user.is_authenticated %}
|
||||
{% if tracking_document %}
|
||||
| <span class="search-results"><span class="removefromlist"><a href="{% url "community_remove_track_document" doc.name %}" title="Remove from your personal ID list"><img src="/images/remove_from_list.png" alt="Remove from your personal ID list"/>Untrack this document</a></span></span>
|
||||
{% else %}
|
||||
| <span class="search-results"><span class="addtolist"><a href="{% url "community_add_track_document" doc.name %}" title="Add to your personal ID list"><img src="/images/add_to_list.png" alt="Add to your personal ID list"/>Track this document</a></span></span>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
{% if can_edit and iesg_state %}
|
||||
<div class="links">
|
||||
<a href="{% url "doc_ballot_lastcall" name=doc.name %}">Last Call Text</a>
|
||||
| <a href="{% url "doc_ballot_writeupnotes" name=doc.name %}">Ballot Text</a>
|
||||
| <a href="{% url "doc_ballot_approvaltext" name=doc.name %}">Announcement Text</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if actions %}
|
||||
<div class="actions">
|
||||
{% for label, url in actions %}<a class="button" href="{{ url }}">{{ label }}</a> {% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
{% if doc.get_state_slug == "active" or doc.get_state_slug == "rfc" %}
|
||||
|
||||
<div class="document-markup">
|
||||
{{ content|safe }}
|
||||
</div>
|
||||
|
||||
{% if split_content %}
|
||||
<p><a style="display:inline-block;margin-left:17em;" href="?include_text=1">[include full document text]</a></p>
|
||||
{% if doc.get_state_slug != "rfc" %}
|
||||
<tr>
|
||||
<th>Intended RFC status</th>
|
||||
<td class="edit">
|
||||
{% if can_edit or can_edit_stream_info %}
|
||||
<a class="btn btn-default btn-xs" href="{% url "doc_change_intended_status" name=doc.name %}">Edit</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{{ doc.intended_std_level|default:"(None)" }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
|
||||
{% else %}
|
||||
<tr>
|
||||
<th>Other versions</th>
|
||||
<td class="edit"></td>
|
||||
<td>
|
||||
{% if doc.get_state_slug != "active" and doc.get_state_slug != "rfc" %}<div class="pull-right label label-warning">Expired & archived</div>{% endif %}
|
||||
{% if file_urls %}
|
||||
{% for label, url in file_urls %}
|
||||
<a class="btn btn-default btn-xs" href="{{ url }}">
|
||||
<span class="fa fa-file-{% if label == "pdf" %}pdf-{% elif label == "xml" or label == "html" %}code-{% elif label == "plain text" %}text-{% endif %}o"></span>
|
||||
{{ label }}</a>
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
(not online)
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<p>This Internet-Draft is no longer active. A copy of the expired Internet-Draft can be found here:<br/>
|
||||
<a href="{{doc.href}}">{{doc.href}}</a>
|
||||
{% if conflict_reviews %}
|
||||
<tr>
|
||||
<th>IETF conflict review</th>
|
||||
<td class="edit"></td>
|
||||
<td>{{ conflict_reviews|join:", "|urlize_ietf_docs }}</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
|
||||
<h4>Abstract</h4>
|
||||
<tr>
|
||||
{% if doc.stream %}
|
||||
<th>{{ doc.stream }} state</th>
|
||||
<td class="edit">
|
||||
{% if doc.stream and can_edit_stream_info %}
|
||||
<a class="btn btn-default btn-xs" href="{% url "doc_change_stream_state" name=doc.name state_type=stream_state_type_slug %}">Edit</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{{ stream_state|default:"(None)" }}
|
||||
|
||||
<p>{{ doc.abstract }}</p>
|
||||
{% for m in milestones %}
|
||||
<span title="{{ m.desc }} ({{ m.group.acronym }} milestone)" class="milestone">{{ m.due|date:"M Y" }}</span>
|
||||
{% endfor %}
|
||||
|
||||
<h4>Authors</h4>
|
||||
{% if stream_tags %}
|
||||
<div class="stream-tags">{% for tag in stream_tags %}{{ tag.name }}{% if not forloop.last %}, {% endif %}{% endfor %}</div>
|
||||
{% endif %}
|
||||
</td>
|
||||
{% else %}
|
||||
<th>Stream state</th>
|
||||
<td class="edit"></td>
|
||||
<td>(No stream defined)</td>
|
||||
{% endif %}
|
||||
</tr>
|
||||
|
||||
<p>
|
||||
{% for author in doc.documentauthor_set.all %}
|
||||
<a {% if not author.author.invalid_address %}href="mailto:{{ author.author.address }}"{% endif %}>{{ author.author.person }} {% if not author.author.invalid_address %}<{{ author.author.address }}>{% endif %}</a>
|
||||
{% if not forloop.last %}<br/>{% endif %}{% endfor %}
|
||||
{% if consensus %}
|
||||
<tr>
|
||||
<th>Consensus</th>
|
||||
<td class="edit">
|
||||
{% if can_edit or can_edit_stream_info %}
|
||||
<a class="btn btn-default btn-xs" href="{% url "doc_edit_consensus" name=doc.name %}">Edit</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
<span title="Whether the document is the result of a community consensus process as defined in RFC 5741">{{ consensus }}</span>
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
|
||||
<tr>
|
||||
<th>Document shepherd</th>
|
||||
<td class="edit">
|
||||
{% if can_edit_stream_info %}
|
||||
<a class="btn btn-default btn-xs" href="{% url "doc_edit_shepherd" name=doc.name %}">Edit</a>
|
||||
{% elif is_shepherd %}
|
||||
<a class="btn btn-default btn-xs" href="{% url "doc_change_shepherd_email" name=doc.name %}">Change Email</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{% if doc.shepherd %}{{ doc.shepherd.person }}{% else %}No shepherd assigned{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
{% if shepherd_writeup or can_edit_shepherd_writeup %}
|
||||
<tr>
|
||||
<th>Shepherd write-up</th>
|
||||
<td class="edit">
|
||||
{% if can_edit_shepherd_writeup %}
|
||||
{% url "doc_edit_shepherd_writeup" name=doc.name as doc_edit_url %}
|
||||
{% if doc_edit_url %}
|
||||
<a class="btn btn-default btn-xs" href="{{doc_edit_url}}">Edit</a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{% if shepherd_writeup %}
|
||||
<a class="btn btn-default btn-xs" href="{% url "doc_shepherd_writeup" name=doc.name %}">Show</a>
|
||||
(last changed {{ shepherd_writeup.time|date:"Y-m-d"}})
|
||||
{% else %}
|
||||
(None)
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
|
||||
{% if published and started_iesg_process and published.time < started_iesg_process.time %}
|
||||
<tr>
|
||||
<th colspan="3" class="warning">This information refers to IESG processing after the RFC was initially published:</th>
|
||||
</tr>
|
||||
{% endif %}
|
||||
|
||||
<tr>
|
||||
<th><a href="{% url "state_help" "draft-iesg" %}">IESG state</a></th>
|
||||
<td class="edit">
|
||||
{% if iesg_state and can_edit %}
|
||||
<a class="btn btn-default btn-xs" href="{% url "doc_change_state" name=doc.name %}">Edit</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{{ iesg_state_summary|default:"I-D Exists" }}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
{% if iana_review_state %}
|
||||
<tr>
|
||||
<th>IANA review state</th>
|
||||
<td class="edit">
|
||||
{% if can_edit_iana_state %}
|
||||
<a class="btn btn-default btn-xs" href="{% url "doc_change_iana_state" name=doc.name state_type="iana-review" %}">Edit</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{{ iana_review_state }}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th>IANA action state</th>
|
||||
<td class="edit">
|
||||
{% if can_edit_iana_state %}
|
||||
<a class="btn btn-default btn-xs" href="{% url "doc_change_iana_state" name=doc.name state_type="iana-action" %}">Edit</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{{ iana_action_state }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
|
||||
{% if rfc_editor_state %}
|
||||
<tr>
|
||||
<th>RFC Editor state</th>
|
||||
<td class="edit"></td>
|
||||
<td><a href="//www.rfc-editor.org/queue2.html#{{ doc.name }}">{{ rfc_editor_state }}</a></td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
|
||||
<tr>
|
||||
<th>Telechat date</th>
|
||||
<td class="edit">
|
||||
{% if can_edit %}
|
||||
<a class="btn btn-default btn-xs" href="{% url "doc_change_telechat_date" name=doc.name %}">Edit</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{% if telechat %}
|
||||
On agenda of {{ telechat.telechat_date }} IESG telechat
|
||||
{% if telechat.returning_item %}
|
||||
(returning item)
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{% if can_edit %}
|
||||
(None)
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% if ballot_summary %}
|
||||
<br><i>{{ ballot_summary }}</i>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th>Responsible AD</th>
|
||||
<td class="edit">
|
||||
{% if can_edit %}
|
||||
<a class="btn btn-default btn-xs" href="{% url "doc_change_ad" name=doc.name %}">Edit</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{{ doc.ad|default:"(None)" }}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
{% if iesg_state %}
|
||||
{% if doc.note or can_edit %}
|
||||
<tr>
|
||||
<th>IESG note</th>
|
||||
<td class="edit">
|
||||
{% if can_edit %}
|
||||
<a class="btn btn-default btn-xs" href="{% url "doc_change_iesg_note" name=doc.name %}">Edit</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{{ doc.note|default:"(None)"|linebreaksbr }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
<tr>
|
||||
<th>Send notices to</th>
|
||||
<td class="edit">
|
||||
{% if can_edit %}
|
||||
<a class="btn btn-default btn-xs" href="{% url "doc_change_notify" name=doc.name %}">Edit</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{{ doc.notify|default:"(None)"}}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<p class="buttonlist">
|
||||
<a class="btn btn-default btn-xs" href="mailto:{{ doc.name }}@tools.ietf.org?subject=Mail%20regarding%20{{ doc.name }}"><span class="fa fa-envelope-o"></span> Email authors</a>
|
||||
<a class="btn btn-default btn-xs" href="{% url "ipr_search" %}?option=document_search&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 "doc_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 "doc_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="//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="//www.google.com/search?as_q={{ doc.name }}&as_sitesearch={{ search_archive }}" rel="nofollow" target="_blank"><span class="fa fa-search"></span> Search lists</a>
|
||||
{% if user|has_role:"Area Director" %}
|
||||
<a class="btn btn-default btn-xs" href="//www.iesg.org/bin/c5i?mid=6&rid=77&target={{ doc.name }}" rel="nofollow" target="_blank">Search lists (ARO)</a>
|
||||
{% endif %}
|
||||
{% if user.is_authenticated %}
|
||||
{% if tracking_document %}
|
||||
<a class="btn btn-default btn-xs" href="{% url "community_remove_track_document" doc.name %}" title="Remove from your personal ID list"><span class="fa fa-bookmark-o"></span> Untrack</a>
|
||||
{% else %}
|
||||
<a class="btn btn-default btn-xs" href="{% url "community_add_track_document" doc.name %}" title="Add to your personal ID list"><span class="fa fa-bookmark"></span> Track</a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% if can_edit and iesg_state %}
|
||||
<a class="btn btn-default btn-xs" href="{% url "doc_ballot_lastcall" name=doc.name %}">Last call text</a>
|
||||
<a class="btn btn-default btn-xs" href="{% url "doc_ballot_writeupnotes" name=doc.name %}">Ballot text</a>
|
||||
<a class="btn btn-default btn-xs" href="{% url "doc_ballot_approvaltext" name=doc.name %}">Announcement text</a>
|
||||
{% endif %}
|
||||
|
||||
{% if actions %}
|
||||
{% for label, url in actions %}
|
||||
<a class="btn btn-default btn-xs" href="{{ url }}">{{ label|capfirst_allcaps }}</a>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
</p>
|
||||
|
||||
<p>(Note: The e-mail addresses provided for the authors of this Internet-Draft may no longer be valid)</p>
|
||||
{% if doc.get_state_slug == "active" or doc.get_state_slug == "rfc" %}
|
||||
{{ content|safe }}
|
||||
|
||||
{% if split_content %}
|
||||
<a class="btn btn-default btn-block" href="?include_text=1"><span class="fa fa-caret-down"></span> Show full document</a>
|
||||
{% endif %}
|
||||
|
||||
{% else %}
|
||||
<p></p>
|
||||
<div class="panel panel-warning">
|
||||
<div class="panel-heading">
|
||||
This Internet-Draft is no longer active. A copy of the expired Internet-Draft can be found at
|
||||
<a href="//www.ietf.org/archive/id/{{ doc.name }}-{{ doc.rev }}.txt">https://www.ietf.org/archive/id/{{ doc.name }}-{{ doc.rev }}.txt</a>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<p>This Internet-Draft is no longer active. A copy of
|
||||
the expired Internet-Draft can be found here:<br/>
|
||||
<a href="{{doc.href}}">{{doc.href}}</a>
|
||||
|
||||
<h4>Abstract</h4>
|
||||
<p>{{ doc.abstract }}</p>
|
||||
|
||||
<h4>Authors</h4>
|
||||
<p>
|
||||
{% for author in doc.documentauthor_set.all %}
|
||||
{% if not author.author.invalid_address %}
|
||||
<span class="fa fa-envelope-o"></span>
|
||||
<a href="mailto:{{ author.author.address }}">
|
||||
{% endif %}
|
||||
{{ author.author.person }}
|
||||
{% if not author.author.invalid_address %}
|
||||
({{ author.author.address }})</a>
|
||||
{% endif %}
|
||||
{% if not forloop.last %}<br>{% endif %}
|
||||
{% endfor %}
|
||||
</p>
|
||||
<p>(Note: The e-mail addresses provided for the authors of this Internet-Draft may no longer be valid.)</p>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block js %}
|
||||
<script type="text/javascript" src="/js/utils.js"></script>
|
||||
<script type="text/javascript" src="/js/doc-search.js"></script>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,81 +1,110 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% load ietf_filters %}
|
||||
|
||||
{% block title %}History for {{ doc.name }}-{{ doc.rev }}{% endblock %}
|
||||
|
||||
{% block pagehead %}
|
||||
<link rel="stylesheet" type="text/css" href="/css/doc.css"></link>
|
||||
<link rel="alternate" type="application/atom+xml" href="/feed/document-changes/{{ doc.name }}/" />
|
||||
<link rel="alternate" type="application/atom+xml" href="/feed/document-changes/{{ doc.name }}/" />
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{{ top|safe }}
|
||||
|
||||
{% if diff_revisions and diff_revisions|length > 1 %}
|
||||
<div class="ietf-box diff-tool">
|
||||
<h2>Diffs</h2>
|
||||
<h2>Revision differences</h2>
|
||||
|
||||
<form action="http{% if request.is_secure %}s{% endif %}:{{rfcdiff_prefix}}" method="get" target="_blank">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<label>From:</label>
|
||||
<select name="url1">
|
||||
{% for name, rev, time, url in diff_revisions %}
|
||||
<option value="{{ url }}" {% if forloop.counter == 2 %} selected="selected" {% endif %}>{{ name }}{% if rev %}-{{ rev }}{% endif %} ({{ time|date:"Y-m-d" }})</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</td>
|
||||
<td rowspan="2" valign="top">
|
||||
<label>Format:</label>
|
||||
<select name="difftype">
|
||||
<option value="--html" selected="selected">Side-by-side</option>
|
||||
<option value="--abdiff">Before-after</option>
|
||||
<option value="--chbars">Change bars</option>
|
||||
<option value="--hwdiff">Wdiff</option>
|
||||
</select>
|
||||
<input name="submit" value="Go!" type="submit" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<label>To:</label>
|
||||
<select name="url2">
|
||||
{% for name, rev, time, url in diff_revisions %}
|
||||
<option value="{{ url }}" {% if forloop.counter == 1 %} selected="selected" {% endif %}>{{ name }}{% if rev %}-{{ rev }}{% endif %} ({{ time|date:"Y-m-d" }})</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
<form class="form-horizontal" role="form" action="{{rfcdiff_prefix}}" method="get" target="_blank">
|
||||
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 ">
|
||||
<label for="url1" class="control-label">From revision</label>
|
||||
</div>
|
||||
<div class="col-sm-10">
|
||||
<select class="form-control" id="url1" name="url1">
|
||||
{% for name, rev, time, url in diff_revisions %}
|
||||
<option value="{{ url }}" {% if forloop.counter == 2 %} selected="selected" {% endif %}>
|
||||
{{ name }}{% if rev %}-{{ rev }}{% endif %}
|
||||
({{ time|date:"Y-m-d" }})
|
||||
</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 ">
|
||||
<label for="url2" class="control-label">To revision</label>
|
||||
</div>
|
||||
<div class="col-sm-10">
|
||||
<select class="form-control" id="url2" name="url2">
|
||||
{% for name, rev, time, url in diff_revisions %}
|
||||
<option value="{{ url }}" {% if forloop.counter == 1 %} selected="selected" {% endif %}>
|
||||
{{ name }}{% if rev %}-{{ rev }}{% endif %}
|
||||
({{ time|date:"Y-m-d" }})
|
||||
</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 ">
|
||||
<label class="control-label">Diff format</label>
|
||||
</div>
|
||||
<div class="col-sm-10">
|
||||
<div class="btn-group" data-toggle="buttons">
|
||||
<label class="btn btn-default active">
|
||||
<input type="radio" name="difftype" value="--html"> Side-by-side
|
||||
</label>
|
||||
<label class="btn btn-default">
|
||||
<input type="radio" name="difftype" value="--abdiff"> Before-after
|
||||
</label>
|
||||
<label class="btn btn-default">
|
||||
<input type="radio" name="difftype" value="--chbars"> Change bars
|
||||
</label>
|
||||
<label class="btn btn-default">
|
||||
<input type="radio" name="difftype" value="--hwdiff"> Wdiff
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<div class="col-sm-offset-2 col-sm-10">
|
||||
<button type="submit" class="btn btn-primary">Submit</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
{% endif %}
|
||||
|
||||
<h2>Document history</h2>
|
||||
{% if user|has_role:"Area Director,Secretariat,IANA,RFC Editor" %}
|
||||
<div class="history-actions">
|
||||
<a class="button" href="{% url "doc_add_comment" name=doc.name %}">Add comment</a>
|
||||
<div class="buttonlist">
|
||||
<a class="btn btn-default" href="{% url "doc_add_comment" name=doc.name %}"><span class="fa fa-plus"></span> Add comment</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<table class="table table-condensed table-striped ietf">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Date</th>
|
||||
<th>Version</th>
|
||||
<th>By</th>
|
||||
<th>Action</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<table class="ietf-table history">
|
||||
<tr><th>Date</th><th>Version</th><th>By</th><th>Text</th></tr>
|
||||
|
||||
{% for e in events %}
|
||||
<tr class="{% cycle oddrow,evenrow %}" id="history-{{ e.pk }}">
|
||||
<td>{{ e.time|date:"Y-m-d" }}</td>
|
||||
<td>{{ e.rev }}</td>
|
||||
<td>{{ e.by }}</td>
|
||||
<td>{{ e.desc|format_history_text }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
<tbody>
|
||||
{% for e in events %}
|
||||
<tr id="history-{{ e.pk }}">
|
||||
<td class="text-nowrap">{{ e.time|date:"Y-m-d" }}</td>
|
||||
<td class="text-right">{{ e.rev }}</td>
|
||||
<td>{{ e.by|escape }}</td>
|
||||
<td>{{ e.desc|format_history_text }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% endblock content %}
|
||||
|
||||
{% block content_end %}
|
||||
<script type="text/javascript" src="/js/history.js"></script>
|
||||
{% endblock content_end %}
|
||||
|
|
|
@ -1,59 +1,64 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block title %}
|
||||
References to {{alias_name}}
|
||||
{% endblock %}
|
||||
{% block morecss %}
|
||||
.referencetable {margin-top:1em;}
|
||||
.referenctable .references {width:100%;}
|
||||
.referencetable .references .reference .source {width:30%;}
|
||||
.referencetable .references .reference .title {width:35%;}
|
||||
.referencetable .references .reference .level {width:15%;}
|
||||
.referencetable .references .reference .reftype {width:15%;}
|
||||
.referencetable .references .reference .downref {width:5%;}
|
||||
.reflinks {font-size:80%;float:right;}
|
||||
.showmore {margin-top:1em;}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>References to {{alias_name}}</h1>
|
||||
<div class="info-message-warning">
|
||||
This is an experimental product. These dependencies are extracted using heuristics looking for strings with particular prefixes. Notably, this means that references to I-Ds by title only are not reflected here. If it's really important, please inspect the documents' references sections directly.
|
||||
</div>
|
||||
<div>
|
||||
|
||||
<p class="alert alert-info">
|
||||
This is an experimental product. These dependencies are extracted using heuristics looking for strings with particular prefixes. Notably, this means that references to I-Ds by title only are not reflected here. If it's really important, please inspect the documents' references sections directly.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Showing RFCs and active Internet-Drafts, sorted by <a href="{% url 'relationship_subset_help' subset='reference' %}">reference type</a>, then document name.
|
||||
</div>
|
||||
</p>
|
||||
|
||||
{% if numdocs %}
|
||||
<div class="showmore">
|
||||
Results restricted to the first 250 of {{ numdocs }} documents. <a href="?full=True">Show All</a>
|
||||
</div>
|
||||
<div class="alert alert-warning">
|
||||
<p>Showing only the first 250 of {{ numdocs }} documents.</p>
|
||||
<p><a class="btn btn-default" href="?full=True">Show all</a></p>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="referencetable">
|
||||
<table class="references ietf-table">
|
||||
<tr><th>Document</th><th>Title</th><th>Status</th><th>Reference Type</th><th>Downref</th></tr>
|
||||
{% for ref in refs %}
|
||||
<tr class="reference {% cycle 'evenrow' 'oddrow' %}">
|
||||
<td class="source">
|
||||
{% with ref.source.canonical_name as name %}
|
||||
<a href="{% url 'doc_view' name=name %}">{{name}}</a> {% if ref.target.name != alias_name %}(as {{ref.target.name}}){% endif %} <span class="reflinks">(<a href="{% url 'doc_references' name %}">refs</a>, <a href="{% url 'doc_referenced_by' name %}">refby</a>)</span>
|
||||
{% endwith %}
|
||||
</td>
|
||||
<td class="title">
|
||||
{{ref.source.title}}
|
||||
</td>
|
||||
<td class="level">
|
||||
{% ifequal ref.source.get_state.slug 'rfc' %}
|
||||
{% with ref.source.std_level as lvl %}{% if lvl %}{{lvl}}{% endif %}{%endwith%}
|
||||
{% else %}
|
||||
{% with ref.source.intended_std_level as lvl %}{% if lvl %}{{lvl}}{% endif %}{%endwith%}
|
||||
{% endifequal %}
|
||||
</td>
|
||||
<td class="reftype">
|
||||
{{ref.relationship.name}}
|
||||
</td>
|
||||
<td class="downref">
|
||||
{{ref.is_downref|default:''}}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
|
||||
<table class="table table-condensed table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Document</th>
|
||||
<th>Title</th>
|
||||
<th>Status</th>
|
||||
<th>Type</th>
|
||||
<th>Downref</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for ref in refs %}
|
||||
{% with ref.source.canonical_name as name %}
|
||||
<tr>
|
||||
<td>
|
||||
<a href="{% url 'doc_view' name=name %}">{{name}}</a>
|
||||
{% if ref.target.name != alias_name %}
|
||||
<br><span class="label label-info">As {{ref.target.name}}</span>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
<b>{{ref.source.title}}</b><br>
|
||||
<a class="btn btn-default btn-xs" href="{% url 'doc_references' name %}">Refs</a>
|
||||
<a class="btn btn-default btn-xs" href="{% url 'doc_referenced_by' name %}">Ref'd by</a>
|
||||
</td>
|
||||
<td>
|
||||
{% ifequal ref.source.get_state.slug 'rfc' %}
|
||||
{% with ref.source.std_level as lvl %}{% if lvl %}{{lvl}}{% endif %}{%endwith%}
|
||||
{% else %}
|
||||
{% with ref.source.intended_std_level as lvl %}{% if lvl %}{{lvl}}{% endif %}{%endwith%}
|
||||
{% endifequal %}
|
||||
</td>
|
||||
<td>{{ref.relationship.name}}</td>
|
||||
<td>{{ref.is_downref|default:''}}</td>
|
||||
</tr>
|
||||
{% endwith %}
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,54 +1,51 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block title %}
|
||||
References from {{doc.canonical_name}}
|
||||
{% endblock %}
|
||||
{% block morecss %}
|
||||
.referencetable {margin-top:1em;}
|
||||
.referenctable .references {width:100%;}
|
||||
.referencetable .references .reference .source {width:30%;}
|
||||
.referencetable .references .reference .title {width:35%;}
|
||||
.referencetable .references .reference .level {width:15%;}
|
||||
.referencetable .references .reference .reftype {width:15%;}
|
||||
.referencetable .references .reference .downref {width:5%;}
|
||||
.reflinks {font-size:80%;float:right;}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>References from {{doc.canonical_name}}</h1>
|
||||
<div class="info-message-warning">
|
||||
This is an experimental product. These dependencies are extracted using heuristics looking for strings with particular prefixes. Notably, this means that references to I-Ds by title only are not reflected here. If it's really important, please inspect the documents' references sections directly.
|
||||
</div>
|
||||
<div>
|
||||
Sorted by document name.
|
||||
<a href="{% url 'relationship_subset_help' subset='reference' %}">Reference type help</a>
|
||||
</div>
|
||||
<div class="referencetable">
|
||||
<table class="references ietf-table">
|
||||
<tr><th>Document</th><th>Title</th><th>Status</th><th>Reference Type</th><th>Downref</th></tr>
|
||||
{% for ref in refs %}
|
||||
<tr class="reference {% cycle 'evenrow' 'oddrow' %}">
|
||||
<td class="target">
|
||||
{% with ref.target.name as name %}
|
||||
<a href="{% url 'doc_view' name=name %}">{{name}}</a> <span class="reflinks">(<a href="{% url 'doc_references' name %}">refs</a>, <a href="{% url 'doc_referenced_by' name %}">refby</a>)</span>
|
||||
{% endwith %}
|
||||
</td>
|
||||
<td class="title">
|
||||
{{ref.target.document.title}}
|
||||
</td>
|
||||
<td class="level">
|
||||
{% ifequal ref.target.document.get_state.slug 'rfc' %}
|
||||
{% with ref.target.document.std_level as lvl %}{% if lvl %}{{lvl}}{% endif %}{%endwith%}
|
||||
{% else %}
|
||||
{% with ref.target.document.intended_std_level as lvl %}{% if lvl %}{{lvl}}{% endif %}{%endwith%}
|
||||
{% endifequal %}
|
||||
</td>
|
||||
<td class="reftype">
|
||||
{{ref.relationship.name}}
|
||||
</td>
|
||||
<td class="downref">
|
||||
{{ref.is_downref|default:''}}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
|
||||
<p class="alert alert-info">
|
||||
This is an experimental product. These dependencies are extracted using heuristics looking for strings with particular prefixes. Notably, this means that references to I-Ds by title only are not reflected here. If it's really important, please inspect the documents' references sections directly.
|
||||
</p>
|
||||
<p>
|
||||
<a class="btn btn-default" href="{% url 'relationship_subset_help' subset='reference' %}">Reference type help</a>
|
||||
</p>
|
||||
|
||||
<table class="table table-condensed table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Document</th>
|
||||
<th>Title</th>
|
||||
<th>Status</th>
|
||||
<th>Type</th>
|
||||
<th>Downref</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for ref in refs %}
|
||||
{% with ref.target.name as name %}
|
||||
<tr>
|
||||
<td><a href="{% url 'doc_view' name=name %}">{{name}}</a></td>
|
||||
<td>
|
||||
<b>{{ref.target.document.title}}</b><br>
|
||||
<a class="btn btn-default btn-xs" href="{% url 'doc_references' name %}">Refs</a>
|
||||
<a class="btn btn-default btn-xs" href="{% url 'doc_referenced_by' name %}">Ref'd by</a>
|
||||
</td>
|
||||
<td>
|
||||
{% ifequal ref.target.document.get_state.slug 'rfc' %}
|
||||
{% with ref.target.document.std_level as lvl %}{% if lvl %}{{lvl}}{% endif %}{%endwith%}
|
||||
{% else %}
|
||||
{% with ref.target.document.intended_std_level as lvl %}{% if lvl %}{{lvl}}{% endif %}{%endwith%}
|
||||
{% endifequal %}
|
||||
</td>
|
||||
<td>{{ref.relationship.name}}</td>
|
||||
<td>{{ref.is_downref|default:''}}</td>
|
||||
</tr>
|
||||
{% endwith %}
|
||||
{% endfor %}
|
||||
</table>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,137 +1,132 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% load ietf_filters %}
|
||||
|
||||
{% block title %}{{ doc.canonical_name }}-{{ doc.rev }}{% endblock %}
|
||||
|
||||
{% block pagehead %}
|
||||
<link rel="stylesheet" type="text/css" href="/css/doc.css"></link>
|
||||
{% block morecss %}
|
||||
.edit { width: 1px }
|
||||
{% endblock %}
|
||||
|
||||
{% block title %}{{ doc.title }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{{ top|safe }}
|
||||
|
||||
{% include "doc/revisions_list.html" %}
|
||||
|
||||
<div class="ietf-box metabox">
|
||||
<div>
|
||||
{% if snapshot %}Snapshot of{% endif %}
|
||||
{% if doc.get_state_slug not in approved_states %}Proposed{% endif %}
|
||||
Status change :
|
||||
<a {% if not snapshot and user|has_role:"Area Director,Secretariat" and doc.get_state_slug not in approved_states %}
|
||||
class="editlink" href="{% url "status_change_title" name=doc.name %}"
|
||||
{% endif %}
|
||||
>
|
||||
{{ doc.title }} </a>
|
||||
</div>
|
||||
<table class="table table-condensed table-striped">
|
||||
<tr>
|
||||
<th>
|
||||
{% if doc.get_state_slug not in approved_states %}
|
||||
Proposed status change
|
||||
{% else %}
|
||||
Status change
|
||||
{% endif %}
|
||||
</th>
|
||||
<td class="edit">
|
||||
{% if not snapshot and user|has_role:"Area Director,Secretariat" and doc.get_state_slug not in approved_states %}
|
||||
<a class="btn btn-default btn-xs pull-right" href="{% url "status_change_title" name=doc.name %}">Edit</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{{ doc.title }}
|
||||
{% if snapshot %}
|
||||
<span class="label label-warning">Snapshot</span>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<table id="metatable" width="100%">
|
||||
{% regroup sorted_relations by relationship.name as relation_groups %}
|
||||
{% for relation_group in relation_groups %}
|
||||
<tr>
|
||||
<td>{{relation_group.grouper}}:</td>
|
||||
<td>{% for rel in relation_group.list %}{{rel.target.document.canonical_name|upper|urlize_ietf_docs}}{% if not forloop.last %}, {% endif %}{% endfor %}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
<tr>
|
||||
<td><a href="{% url "state_help" type="status-change" %}">Review State</a>:</td>
|
||||
<td>
|
||||
<div>
|
||||
<a title="{{ doc.get_state.desc }}"{% if not snapshot and user|has_role:"Area Director,Secretariat" %} class="editlink" href="{% url "status_change_change_state" name=doc.name %}"{% endif %}>{{ doc.get_state.name }}</a>
|
||||
{% regroup sorted_relations by relationship.name as relation_groups %}
|
||||
{% for relation_group in relation_groups %}
|
||||
<tr>
|
||||
<th>{{relation_group.grouper}}</th>
|
||||
<td class="edit"></td>
|
||||
<td>{% for rel in relation_group.list %}{{rel.target.document.canonical_name|upper|urlize_ietf_docs}}{% if not forloop.last %}, {% endif %}{% endfor %}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
|
||||
{% if not snapshot and user|has_role:"Area Director,Secretariat" %}
|
||||
<tr>
|
||||
<th><a href="{% url "state_help" type="status-change" %}">Review state</a></th>
|
||||
<td class="edit">
|
||||
{% if not snapshot and user|has_role:"Area Director,Secretariat" %}
|
||||
<a class="btn btn-default btn-xs pull-right" href="{% url "status_change_change_state" name=doc.name %}">Edit</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
<span title="{{ doc.get_state.desc }}">{{ doc.get_state.name }}</span>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
{% if request.user|has_role:"Secretariat" %}{% if doc.get_state_slug = 'appr-pend' %}
|
||||
- <a href="{% url "status_change_approve" name=doc.name %}">Approve RFC status changes</a>
|
||||
{% endif %}{% endif %}
|
||||
<tr>
|
||||
<th>Telechat date</th>
|
||||
<td class="edit">
|
||||
{% if not snapshot and user|has_role:"Area Director,Secretariat" and doc.get_state_slug not in approved_states %}
|
||||
<a class="btn btn-default btn-xs pull-right" href="{% url "status_change_telechat_date" name=doc.name %}">Edit</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{% if not telechat %}
|
||||
(None)
|
||||
{% else %}
|
||||
On agenda of {{ telechat.telechat_date|date:"Y-m-d" }} IESG telechat
|
||||
{% if doc.returning_item %}(returning item){% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% endif %}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{% if ballot_summary %}
|
||||
<br><i>{{ ballot_summary }}</i>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Telechat Date:</td>
|
||||
<td>
|
||||
{% if not snapshot %}
|
||||
<a {% if not snapshot and user|has_role:"Area Director,Secretariat" and doc.get_state_slug not in approved_states %}
|
||||
class="editlink" href="{% url "status_change_telechat_date" name=doc.name %}"
|
||||
{%endif%} >
|
||||
{% if not telechat %}Not on agenda of an IESG telechat{% else %}On agenda of {{ telechat.telechat_date|date:"Y-m-d" }} IESG telechat{% if doc.returning_item %} (returning item){% endif %}{% endif %}
|
||||
</a>
|
||||
<tr>
|
||||
<th>Shepherding AD</th>
|
||||
<td class="edit">
|
||||
{% if not snapshot and user|has_role:"Area Director,Secretariat" and doc.get_state_slug not in approved_states %}
|
||||
<a class="btn btn-default btn-xs pull-right" href="{% url "status_change_ad" name=doc.name %}">Edit</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{{doc.ad}}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
{% if ballot_summary %}
|
||||
<div class="ballot-summary">
|
||||
({{ ballot_summary }})
|
||||
</div>
|
||||
{% endif %}
|
||||
<tr>
|
||||
<th>Send notices to</th>
|
||||
<td class="edit">
|
||||
{% if not snapshot and user|has_role:"Area Director,Secretariat" and doc.get_state_slug not in approved_states %}
|
||||
<a class="btn btn-default btn-xs pull-right" href="{% url "status_change_notices" name=doc.name %}">Edit</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{{doc.notify}}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Last updated</th>
|
||||
<td class="edit"></td>
|
||||
<td>{{ doc.time|date:"Y-m-d" }}</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<tr>
|
||||
<td>Shepherding AD:</td>
|
||||
<td>
|
||||
<a {% if not snapshot and user|has_role:"Area Director,Secretariat" and doc.get_state_slug not in approved_states %}
|
||||
class="editlink" href="{% url "status_change_ad" name=doc.name %}"
|
||||
{% endif %}
|
||||
>
|
||||
{{doc.ad}}
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<p class="buttonlist">
|
||||
{% if not snapshot and user|has_role:"Area Director,Secretariat" %}
|
||||
{% if doc.get_state_slug not in approved_states %}
|
||||
<a class="btn btn-default" href="{% url "status_change_relations" name=doc.name %}">Edit affected RFCs</a>
|
||||
<a class="btn btn-default" href="{% url "status_change_last_call" name=doc.name %}">Edit last call text</a>
|
||||
{% endif %}
|
||||
|
||||
<tr>
|
||||
<td>Send notices to:</td>
|
||||
<td>
|
||||
<a {% if not snapshot and user|has_role:"Area Director,Secretariat" and doc.get_state_slug not in approved_states %}
|
||||
class="editlink" href="{% url "status_change_notices" name=doc.name %}"
|
||||
{% endif %}
|
||||
>
|
||||
{{doc.notify}}
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% if doc.get_state_slug != 'apprsent' %}
|
||||
<a class="btn btn-default" href="{% url "status_change_submit" name=doc.name %}">Edit status change text</a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
|
||||
<tr><td colspan='2'><hr size='1' noshade /></td></tr>
|
||||
|
||||
<tr><td>Last updated:</td><td> {{ doc.time|date:"Y-m-d" }}</td></tr>
|
||||
{% if not snapshot and user|has_role:"Area Director,Secretariat" and doc.get_state_slug not in approved_states %}
|
||||
<tr><td colspan="2">
|
||||
<span id="doc_edit_affected_rfc_list_button" class="yui-button yui-link-button" style="margin-left:2px;">
|
||||
<span class="first-child">
|
||||
<a href="{% url "status_change_relations" name=doc.name %}">Edit Affected RFC List</a>
|
||||
</span>
|
||||
</span>
|
||||
<span id="doc_edit_last_call_text" class="yui-button yui-link-button" style="margin-left:2px;">
|
||||
<span class="first-child">
|
||||
<a href="{% url "status_change_last_call" name=doc.name %}">Edit Last Call Text</a>
|
||||
</span>
|
||||
</span>
|
||||
</td><tr/>
|
||||
{% endif %}
|
||||
|
||||
{% comment %}
|
||||
<tr><td colspan='2'><hr size='1' noshade /></td></tr>
|
||||
{% endcomment %}
|
||||
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
<h3>RFC Status Change : {{ doc.title }}
|
||||
|
||||
{% if not snapshot and user|has_role:"Area Director,Secretariat" and doc.get_state_slug != 'apprsent' %}
|
||||
<a class="edit" href="{% url "status_change_submit" name=doc.name %}">Change status change text</a>
|
||||
{% endif %}
|
||||
</h3>
|
||||
{% if request.user|has_role:"Secretariat" and doc.get_state_slug = 'appr-pend' %}
|
||||
<a class="btn btn-warning" href="{% url "status_change_approve" name=doc.name %}">Approve RFC status change</a>
|
||||
{% endif %}
|
||||
</p>
|
||||
|
||||
{% if doc.rev %}
|
||||
<div class="markup_draft">
|
||||
{{ content|fill:"80"|safe|linebreaksbr|keep_spacing|sanitize_html|safe }}
|
||||
</div>
|
||||
{{ content|fill:"80"|safe|linebreaksbr|keep_spacing|sanitize_html|safe }}
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,9 +1,12 @@
|
|||
<h1>{{ doc.title }}<br/>{{ name }}</h1>
|
||||
{% load ietf_filters %}
|
||||
|
||||
<div id="mytabs" class="yui-navset">
|
||||
<ul class="yui-nav">
|
||||
{% for name, t, url, active, tooltip in tabs %}
|
||||
<li {% if t == selected %}class="selected"{% endif %}{% if tooltip %}title="{{tooltip}}"{% endif %}{% if not active %}class="disabled"{% endif %}><a{% if active %} href="{{ url }}"{% endif %}><em>{{ name }}</em></a></li>
|
||||
{% endfor %}
|
||||
<h1>{{ doc.title }}<br><small>{{ name }}</small></h1>
|
||||
|
||||
<ul class="nav nav-tabs">
|
||||
{% for name, t, url, active, tooltip in tabs %}
|
||||
<li {% if tooltip %}title="{{tooltip}}"{% endif %} class="{% if t == selected %}active {% endif %}{% if not active %}disabled {% endif %}">
|
||||
<a {% if active %}href="{{ url }}"{% endif %}>{{ name|capfirst_allcaps }}</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
<p></p>
|
||||
|
|
|
@ -1,28 +1,37 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% load ietf_filters %}
|
||||
|
||||
{% block title %}Writeups for {{ doc.name }}-{{ doc.rev }}{% endblock %}
|
||||
|
||||
{% block pagehead %}
|
||||
<link rel="stylesheet" type="text/css" href="/css/doc.css"></link>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{{ top|safe }}
|
||||
|
||||
{% for title, subtitle, writeups in sections %}
|
||||
<h2>{{ title }}</h2>
|
||||
<h2>
|
||||
{{ title|capfirst_allcaps }}
|
||||
{% if subtitle %}
|
||||
<br><small>{{ subtitle|safe }}</small>
|
||||
{% endif %}
|
||||
</h2>
|
||||
|
||||
{% if subtitle %}<p>{{ subtitle|safe }}</p>{% endif %}
|
||||
{% for name, text, url in writeups %}
|
||||
{% if text %}
|
||||
<pre>{{ text|urlize }}</pre>
|
||||
{% endif %}
|
||||
|
||||
{% for name, text, url in writeups %}
|
||||
<div class="writeup">
|
||||
{% if can_edit %}<a href="{{ url }}" class="edit button">{% if text %}Edit{% else %}Generate{% endif %} {{ name }}</a>{% endif %}
|
||||
|
||||
<pre {% if can_edit %}class="editable"{% endif %}>
|
||||
{{ text }}
|
||||
</pre>
|
||||
</div>
|
||||
<p>
|
||||
{% if can_edit %}
|
||||
<a href="{{ url }}" class="btn btn-primary">
|
||||
{% if text %}
|
||||
Edit
|
||||
{% else %}
|
||||
Generate
|
||||
{% endif %}
|
||||
{{ name|lower_allcaps }}
|
||||
</a>
|
||||
{% endif %}
|
||||
</p>
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
|
||||
{% endblock content %}
|
||||
|
|
|
@ -1,43 +1,28 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block title %}Adopt {{ doc }} in Group{% endblock %}
|
||||
{% load bootstrap3 %}
|
||||
|
||||
{% block morecss %}
|
||||
form.adopt-draft th { width: 8em; }
|
||||
form.adopt-draft #id_comment { width: 30em; }
|
||||
form.adopt-draft #id_weeks { width: 3em; }
|
||||
form.adopt-draft .actions { text-align: right; padding-top: 1em; }
|
||||
p.intro { max-width: 50em; }
|
||||
{% endblock %}
|
||||
{% block title %}Adopt {{ doc }} in group{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Adopt {{ doc }} in Group</h1>
|
||||
<h1>Adopt {{ doc }} in group</h1>
|
||||
|
||||
<p class="intro">You can adopt this draft into a group.</p>
|
||||
{% bootstrap_messages %}
|
||||
|
||||
<p class="intro">For a WG, the draft enters the IETF stream and the
|
||||
<p class="alert alert-info">You can adopt this draft into a group.
|
||||
For a WG, the draft enters the IETF stream and the
|
||||
stream state becomes "Call for Adoption by WG Issued". For an RG, the
|
||||
draft enters the IRTF stream and the stream state becomes "Active RG
|
||||
Document".</p>
|
||||
|
||||
<form class="adopt-draft" action="" method="post">{% csrf_token %}
|
||||
{% for field in form.hidden_fields %}{{ field }}{% endfor %}
|
||||
<table>
|
||||
{% for field in form.visible_fields %}
|
||||
<tr>
|
||||
<th>{{ field.label_tag }}</th>
|
||||
<td>{{ field }}
|
||||
{% if field.help_text %}<div class="help">{{ field.help_text }}</div>{% endif %}
|
||||
{{ field.errors }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
<tr>
|
||||
<td colspan="2" class="actions">
|
||||
<a class="button" href="{{ doc.get_absolute_url }}">Cancel</a>
|
||||
<input class="button" type="submit" value="Adopt Draft"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<form role="form" method="post">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form form %}
|
||||
|
||||
{% buttons %}
|
||||
<button type="submit" class="btn btn-primary">Submit</button>
|
||||
<a class="btn btn-default pull-right" href="{{ doc.get_absolute_url }}">Back</a>
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,39 +1,22 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block morecss %}
|
||||
.warning {
|
||||
font-weight: bold;
|
||||
color: #a00;
|
||||
}
|
||||
{% endblock %}
|
||||
{% load bootstrap3 %}
|
||||
|
||||
{% block title %}
|
||||
Change the shepherding AD for {{ doc.name }}-{{ doc.rev }}
|
||||
{% endblock %}
|
||||
{% block title %}Change shepherding AD for {{ doc.name }}-{{ doc.rev }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Change the shepherding AD for {{ doc.name }}-{{ doc.rev }}</h1>
|
||||
<h1>Change shepherding AD<br><small>{{ doc.name }}-{{ doc.rev }}</small></h1>
|
||||
|
||||
<form class="edit-info" action="" enctype="multipart/form-data" method="post">{% csrf_token %}
|
||||
<table>
|
||||
{% for field in form.visible_fields %}
|
||||
<tr>
|
||||
<th>{{ field.label_tag }}</th>
|
||||
<td>
|
||||
{{ field }}
|
||||
{% if field.help_text %}<div class="help">{{ field.help_text }}</div>{% endif %}
|
||||
{{ field.errors }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
<tr>
|
||||
<td></td>
|
||||
<td class="actions">
|
||||
<a href="{% url "doc_view" name=doc.name %}">Back</a>
|
||||
<input type="submit" value="Submit"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
{% bootstrap_messages %}
|
||||
|
||||
<form role="form" enctype="multipart/form-data" method="post">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form form %}
|
||||
|
||||
{% buttons %}
|
||||
<button type="submit" class="btn btn-primary">Submit</button>
|
||||
<a class="btn btn-default pull-right" href="{% url "doc_view" name=doc.name %}">Back</a>
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,21 +1,22 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block title %}Change whether {{ doc.name }}-{{ doc.rev }} is the result of a consensus process{% endblock %}
|
||||
{% load bootstrap3 %}
|
||||
|
||||
{% block title %}Change consensus for {{ doc.name }}-{{ doc.rev }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Change whether {{ doc.name }}-{{ doc.rev }} is the result of a consensus process</h1>
|
||||
<h1>Change consensus<br><small>{{ doc.name }}-{{ doc.rev }}</small></h1>
|
||||
|
||||
<form action="" method="post">{% csrf_token %}
|
||||
<table>
|
||||
{{ form.as_table }}
|
||||
<tr>
|
||||
<td></td>
|
||||
<td class="actions">
|
||||
<a href="{% url "doc_view" name=doc.name %}">Back</a>
|
||||
<input type="submit" value="Submit"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
{% bootstrap_messages %}
|
||||
|
||||
<form role="form" method="post">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form form %}
|
||||
|
||||
{% buttons %}
|
||||
<button type="submit" class="btn btn-primary">Submit</button>
|
||||
<a class="btn btn-default pull-right" href="{% url "doc_view" name=doc.name %}">Back</a>
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,24 +1,21 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block title %}Change IANA state of {{ doc }}{% endblock %}
|
||||
{% load bootstrap3 %}
|
||||
|
||||
{% block morecss %}
|
||||
form table .actions { text-align: right; padding-top: 1em; }
|
||||
{% endblock %}
|
||||
{% block title %}Change IANA state for {{ doc }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Change IANA state of {{ doc }}</h1>
|
||||
<h1>Change IANA state<br><small>{{ doc }}</small></h1>
|
||||
|
||||
<form action="" method="post">{% csrf_token %}
|
||||
<table>
|
||||
{{ form.as_table }}
|
||||
<tr>
|
||||
<td colspan="2" class="actions">
|
||||
<a href="{{ doc.get_absolute_url }}">Back</a>
|
||||
<input type="submit" value="Save"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
{% bootstrap_messages %}
|
||||
|
||||
<form role="form" method="post">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form form %}
|
||||
|
||||
{% buttons %}
|
||||
<button type="submit" class="btn btn-primary">Submit</button>
|
||||
<a class="btn btn-default pull-right" href="{{ doc.get_absolute_url }}">Back</a>
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,29 +1,21 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% load bootstrap3 %}
|
||||
|
||||
{% block title %}Change intended status for {{ doc }}{% endblock %}
|
||||
|
||||
{% block morecss %}
|
||||
form.change-intended-status select {
|
||||
width: 22em;
|
||||
}
|
||||
form.change-intended-status .actions {
|
||||
text-align: right;
|
||||
padding-top: 10px;
|
||||
}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Change intended status for {{ doc }}</h1>
|
||||
<h1>Change intended status<br><small>{{ doc }}</small></h1>
|
||||
|
||||
<form class="change-intended-status" action="" method="post">{% csrf_token %}
|
||||
<table>
|
||||
{{ form.as_table }}
|
||||
<tr>
|
||||
<td colspan="2" class="actions">
|
||||
<a href="{{ doc.get_absolute_url }}">Back</a>
|
||||
<input type="submit" value="Save"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
{% bootstrap_messages %}
|
||||
|
||||
<form role="form" method="post">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form form %}
|
||||
|
||||
{% buttons %}
|
||||
<button type="submit" class="btn btn-primary">Submit</button>
|
||||
<a class="btn btn-default pull-right" href="{{ doc.get_absolute_url }}">Back</a>
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,86 +1,39 @@
|
|||
{% extends "base.html" %}
|
||||
{% block title %}Change which documents {{ doc }} replaces{% endblock %}
|
||||
{% block pagehead %}{{ block.super }}
|
||||
<!--TODO: The template will later load another version of jQuery.
|
||||
We should eliminate the duplication.-->
|
||||
<script type="text/javascript" src="{{ SECR_STATIC_URL }}js/jquery-1.5.1.min.js"></script>
|
||||
<script type="text/javascript" src="{{ SECR_STATIC_URL }}js/jquery-ui-1.8.9.min.js"></script>
|
||||
<script type="text/javascript" src="{{ SECR_STATIC_URL }}js/jquery.json-2.2.min.js"></script>
|
||||
<link rel="stylesheet" href="{{ SECR_STATIC_URL }}css/redmond/jquery-ui-1.8.9.custom.css" type="text/css" media="screen" charset="utf-8"/>
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
<script type="text/javascript">
|
||||
// Free up the $ and jQuery names.
|
||||
j=$.noConflict(true);
|
||||
j(document).ready(function($) {
|
||||
function add_to_list(list, id, label) {
|
||||
list.append('<li><a href="' + id
|
||||
+ '"><img src="{{ SECR_STATIC_URL }}img/delete.png" alt="delete"></a> '
|
||||
+ label + '</li>');
|
||||
}
|
||||
{% load bootstrap3 %}
|
||||
|
||||
function setup_ajax(field, list, searchfield, url) {
|
||||
var datastore = {};
|
||||
window.field = field;
|
||||
if (field.val() != '') {
|
||||
datastore = $.parseJSON(field.val());
|
||||
}
|
||||
$.each(datastore, function(k, v) {
|
||||
add_to_list(list, k, v);
|
||||
});
|
||||
searchfield.autocomplete({
|
||||
source: url,
|
||||
minLength: 1,
|
||||
select: function(event, ui) {
|
||||
datastore[ui.item.id] = ui.item.label;
|
||||
field.val($.toJSON(datastore));
|
||||
searchfield.val('');
|
||||
add_to_list(list, ui.item.id, ui.item.label);
|
||||
return false;
|
||||
}
|
||||
});
|
||||
// Automatically select the first element in the autocomplete list, so
|
||||
// that hitting Enter adds it.
|
||||
$(".ui-autocomplete-input").live("autocompleteopen", function() {
|
||||
var autocomplete = $(this).data("autocomplete");
|
||||
var menu = autocomplete.menu;
|
||||
menu.activate($.Event({ type: "mouseenter" }),
|
||||
menu.element.children().first());
|
||||
});
|
||||
list.delegate("a", "click", function() {
|
||||
delete datastore[$(this).attr("href")];
|
||||
field.val($.toJSON(datastore));
|
||||
$(this).closest("li").remove();
|
||||
return false;
|
||||
});
|
||||
}
|
||||
{% block title %}Change documents replaced by {{ doc }}{% endblock %}
|
||||
|
||||
setup_ajax($("#id_replaces"), $("#replaces_list"),
|
||||
$("#id_replaces_search"), "{% url "doc_ajax_internet_draft" %}");
|
||||
});
|
||||
</script>
|
||||
{% bootstrap_messages %}
|
||||
|
||||
{% block pagehead %}
|
||||
<link rel="stylesheet" href="/facelift/css/tokenfield-typeahead.min.css">
|
||||
<link rel="stylesheet" href="/facelift/css/bootstrap-tokenfield.min.css">
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Change which documents {{ doc }} replaces</h1>
|
||||
<h1>Change documents replaced by<br><small>{{ doc }}</small></h1>
|
||||
|
||||
<form class="tokenized-form" role="form" method="post">
|
||||
{% csrf_token %}
|
||||
|
||||
<div class="form-group">
|
||||
<label>{{ form.replaces.label }}</label>
|
||||
<input type="text" class="form-control tokenized-field" data-ajax-url="{% url "doc_ajax_internet_draft" %}?term=" data-display="label" data-io="#id_replaces" data-format="json">
|
||||
<span class="help-block">Enter draft names, separated with commas.</span>
|
||||
</div>
|
||||
|
||||
{% bootstrap_form form %}
|
||||
|
||||
{% buttons %}
|
||||
<input type="submit" class="btn btn-primary" value="Save">
|
||||
<a class="btn btn-default pull-right" href="{{ doc.get_absolute_url }}">Back</a>
|
||||
{% endbuttons %}
|
||||
|
||||
<form class="change-replaces" action="" method="post">{% csrf_token %}
|
||||
{{ form.non_field_errors }}
|
||||
{{ form.replaces.label_tag }}
|
||||
<input type="text" id="id_replaces_search">
|
||||
{{ form.replaces }}
|
||||
<ul id="replaces_list"></ul>
|
||||
{{ form.replaces.errors }}
|
||||
<table>
|
||||
<tr>
|
||||
<td>{{ form.comment.label_tag }}</td>
|
||||
<td>{{ form.comment.errors }} {{ form.comment }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2" class="actions">
|
||||
<a href="{{ doc.get_absolute_url }}">Back</a>
|
||||
<input type="submit" value="Save"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
{% endblock %}
|
||||
|
||||
{% block js %}
|
||||
<script src="/facelift/js/lib/typeahead.bundle.min.js"></script>
|
||||
<script src="/facelift/js/lib/bootstrap-tokenfield.min.js"></script>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,40 +1,25 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block morecss %}
|
||||
form #id_content {
|
||||
width: 40em;
|
||||
height: 450px;
|
||||
}
|
||||
{% endblock %}
|
||||
{% load bootstrap3 %}
|
||||
|
||||
{% block title %}
|
||||
Edit shepherd writeup for {{ doc.canonical_name }}-{{ doc.rev }}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Edit shepherd writeup for {{ doc.canonical_name }}-{{ doc.rev }}</h1>
|
||||
<h1>Edit shepherd writeup<br><small>{{ doc.canonical_name }}-{{ doc.rev }}</small></h1>
|
||||
|
||||
<form class="edit-info" action="" enctype="multipart/form-data" method="post">{% csrf_token %}
|
||||
<table>
|
||||
{% for field in form.visible_fields %}
|
||||
<tr>
|
||||
<th>{{ field.label_tag }}</th>
|
||||
<td>
|
||||
{{ field }}
|
||||
{% if field.help_text %}<div class="help">{{ field.help_text }}</div>{% endif %}
|
||||
{{ field.errors }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
<tr>
|
||||
<td></td>
|
||||
<td class="actions">
|
||||
<a href="{% url "doc_view" name=doc.canonical_name %}">Back</a>
|
||||
<input type="submit" name="reset_text" value="Reset to Template Text"/>
|
||||
<input type="submit" name="submit_response" value="Submit"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
{% bootstrap_messages %}
|
||||
|
||||
<form role="form" enctype="multipart/form-data" method="post">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form form %}
|
||||
|
||||
{% buttons %}
|
||||
<button type="submit" class="btn btn-primary" name="submit_response">Submit</button>
|
||||
<button type="submit" class="btn btn-warning" name="reset_text">Reset to template text</button>
|
||||
<a class="btn btn-default pull-right" href="{% url "doc_view" name=doc.name %}">Back</a>
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,86 +1,69 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block title %}Change state of {{ doc }}{% endblock %}
|
||||
{% load bootstrap3 %}
|
||||
|
||||
{% block morecss %}
|
||||
form.change-state select { width: 22em; }
|
||||
form.change-state #id_comment { width: 30em; }
|
||||
form.change-state .cancel-pub-note { width: 30em; color: #a00; }
|
||||
form.change-state .actions {
|
||||
text-align: right;
|
||||
padding-top: 10px;
|
||||
}
|
||||
.next-states,
|
||||
.prev-state {
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
.next-states form,
|
||||
.prev-state form {
|
||||
display: inline;
|
||||
margin-right: 10px;
|
||||
}
|
||||
{% endblock %}
|
||||
{% block title %}Change state for {{ doc }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Change state of {{ doc }}</h1>
|
||||
<h1>Change state<br><small>{{ doc }}</small></h1>
|
||||
|
||||
<p class="helptext">For help on the states, see the <a href="{% url "state_help" type="draft-iesg" %}">state table</a>.</p>
|
||||
{% bootstrap_messages %}
|
||||
|
||||
<p>
|
||||
<a class="btn btn-info" href="{% url "state_help" type="draft-iesg" %}">Help on states</a>
|
||||
</p>
|
||||
|
||||
<form role="form" method="post">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form form %}
|
||||
|
||||
<form class="change-state" action="" method="post">{% csrf_token %}
|
||||
<table>
|
||||
{{ form.as_table }}
|
||||
{% if state and state.slug == "rfcqueue" %}
|
||||
<tr>
|
||||
<td></td>
|
||||
<td class="cancel-pub-note">Note: if you pull the draft out of the
|
||||
{{ state.name }} state, the RFC Editor and IANA will be notified
|
||||
by email with this comment so they can update their queues.</td>
|
||||
</tr>
|
||||
<span class="help-block">
|
||||
<b>Note:</b> If you pull the draft out of the
|
||||
<i>{{ state.name }}</i> state, the RFC Editor and IANA will be notified
|
||||
by email with this comment, so they can update their queues.
|
||||
</span>
|
||||
{% endif %}
|
||||
<tr>
|
||||
<td colspan="2" class="actions">
|
||||
<a href="{{ doc.get_absolute_url }}">Back</a>
|
||||
<input type="submit" value="Save"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
{% buttons %}
|
||||
<button type="submit" class="btn btn-primary">Submit</button>
|
||||
<a class="btn btn-default pull-right" href="{% url "doc_view" name=doc.name %}">Back</a>
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
|
||||
{% if next_states %}
|
||||
<h3>Or jump directly to</h3>
|
||||
<h2>Or jump directly to</h2>
|
||||
|
||||
<div class="next-states">
|
||||
{% for n in next_states %}
|
||||
<form action="" method="post">{% csrf_token %}
|
||||
<input type="hidden" name="state" value="{{ n.pk }}" />
|
||||
<input type="submit" value="{{ n.name }}" />
|
||||
</form>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div class="buttonlist">
|
||||
{% for n in next_states %}
|
||||
<form role="form" method="post">
|
||||
{% csrf_token %}
|
||||
<input type="hidden" name="state" value="{{ n.pk }}">
|
||||
<input class="btn btn-default" type="submit" value="{{ n.name }}">
|
||||
</form>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if to_iesg_eval %}
|
||||
<h3>You could also jump directly to</h3>
|
||||
<div class="warn-states">
|
||||
<form action="" method="post">{% csrf_token %}
|
||||
<input type="hidden" name="state" value="{{ to_iesg_eval.pk }}" />
|
||||
<input type="submit" value="{{ to_iesg_eval.name }}" />
|
||||
</form>
|
||||
<p>
|
||||
But the ballot for this document has not yet been issued.
|
||||
<a href="{% url "doc_ballot_writeupnotes" name=doc.name %}">Edit Ballot Text</a>
|
||||
</p>
|
||||
</div>
|
||||
<h2>You could also jump directly to</h2>
|
||||
|
||||
<form role="form" method="post">
|
||||
{% csrf_token %}
|
||||
<input type="hidden" name="state" value="{{ to_iesg_eval.pk }}">
|
||||
<input class="btn btn-warning" type="submit" value="{{ to_iesg_eval.name }}">
|
||||
But the ballot for this document has not yet been issued.
|
||||
<a class="btn btn-default" href="{% url "doc_ballot_writeupnotes" name=doc.name %}">Edit ballot text</a>
|
||||
</form>
|
||||
{% endif %}
|
||||
|
||||
{% if prev_state %}
|
||||
<h3>Or revert to previous state</h3>
|
||||
<h2>Or revert to previous state</h2>
|
||||
|
||||
<div class="prev-state">
|
||||
<form action="" method="post">{% csrf_token %}
|
||||
<input type="hidden" name="state" value="{{ prev_state.pk }}" />
|
||||
<input type="submit" value="Back to {{ prev_state.name }}" />
|
||||
</form>
|
||||
</div>
|
||||
<form role="form" method="post">
|
||||
{% csrf_token %}
|
||||
<input type="hidden" name="state" value="{{ prev_state.pk }}">
|
||||
<input class="btn btn-danger" type="submit" value="Revert to {{ prev_state.name }}">
|
||||
</form>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,29 +1,20 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% load bootstrap3 %}
|
||||
|
||||
{% block title %}Change stream for {{ doc }}{% endblock %}
|
||||
|
||||
{% block morecss %}
|
||||
form.change-stream select {
|
||||
width: 22em;
|
||||
}
|
||||
form.change-stream .actions {
|
||||
text-align: right;
|
||||
padding-top: 10px;
|
||||
}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Change stream for {{ doc }}</h1>
|
||||
<h1>Change stream<br><small>{{ doc }}</small></h1>
|
||||
|
||||
<form class="change-stream" action="" method="post">{% csrf_token %}
|
||||
<table>
|
||||
{{ form.as_table }}
|
||||
<tr>
|
||||
<td colspan="2" class="actions">
|
||||
<a href="{{ doc.get_absolute_url }}">Back</a>
|
||||
<input type="submit" value="Save"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
{% bootstrap_messages %}
|
||||
|
||||
<form role="form" method="post">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form form %}
|
||||
{% buttons %}
|
||||
<button type="submit" class="btn btn-primary">Submit</button>
|
||||
<a class="btn btn-default pull-right" href="{{ doc.get_absolute_url }}">Back</a>
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,72 +1,43 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block title %}Change {{ state_type.label }} of {{ doc }}{% endblock %}
|
||||
{% load bootstrap3 %}
|
||||
|
||||
{% block title %}Change {{ state_type.label }} for {{ doc }}{% endblock %}
|
||||
|
||||
{% block morecss %}
|
||||
.next-states { margin-bottom: 1em; }
|
||||
.next-states a {
|
||||
display: inline-block;
|
||||
margin: 0 0.2em;
|
||||
padding: 0.2em 0.3em;
|
||||
border-radius: 0.2em;
|
||||
cursor: pointer;
|
||||
color: #333;
|
||||
font-weight: bold;
|
||||
}
|
||||
.next-states a:hover { background-color: #eee; transition-duration: 0.2s; }
|
||||
form.change-state th { max-width: 8em; }
|
||||
form.change-state th, form.change-state td { padding-bottom: 0.3em; }
|
||||
form.change-state #id_comment { width: 30em; }
|
||||
form.change-state #id_weeks { width: 2em;}
|
||||
form.change-state .actions { text-align: right; padding-top: 1em; }
|
||||
form.change-state ul { padding: 0; margin: 0; }
|
||||
form.change-state ul li { padding: 0; padding-bottom: 0.1em; margin: 0; list-style-type: none; }
|
||||
form.change-state ul li input { vertical-align: middle; }
|
||||
form.change-state ul li label { cursor: pointer; }
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Change {{ state_type.label }} of {{ doc }}</h1>
|
||||
|
||||
<p class="intro">For help on the states, see the <a href="{% url "state_help" type=state_type.slug %}">state table</a>.</p>
|
||||
<h1>Change {{ state_type.label }}<br><small>{{ doc }}</small></h1>
|
||||
|
||||
{% if next_states %}
|
||||
<div class="next-states">
|
||||
<span>Recommended next state{{ next_states|pluralize }}:</span>
|
||||
{% for state in next_states %}<a tabindex="0" data-state="{{ state.pk }}">{{ state.name }}</a> {% if not forloop.last %} or {% endif %}{% endfor %}
|
||||
</div>
|
||||
<p>
|
||||
<b>Move document to {{ next_states|pluralize:"to one of" }} the recommended next state{{ next_states|pluralize }}:</b>
|
||||
</p>
|
||||
<p class="buttonlist">
|
||||
{% for state in next_states %}
|
||||
<button class="btn btn-default next-state" data-state="{{ state.pk }}">{{ state.name }}</button>
|
||||
{% endfor %}
|
||||
<a class="btn btn-info pull-right" href="{% url "state_help" type=state_type.slug %}">Help on states</a>
|
||||
</p>
|
||||
{% endif %}
|
||||
|
||||
<form class="change-state" action="" method="post">{% csrf_token %}
|
||||
<table cellspacing="0">
|
||||
{% for field in form.visible_fields %}
|
||||
<tr>
|
||||
<th>{{ field.label_tag }}</th>
|
||||
<td>{{ field }}
|
||||
{% if field.help_text %}<div class="help">{{ field.help_text }}</div>{% endif %}
|
||||
|
||||
{{ field.errors }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
<tr>
|
||||
<td colspan="2" class="actions">
|
||||
<a class="button" href="{{ doc.get_absolute_url }}">Cancel</a>
|
||||
<input class="button" type="submit" value="Save"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<form role="form" method="post">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form form %}
|
||||
{% buttons %}
|
||||
<button type="submit" class="btn btn-primary">Submit</button>
|
||||
<a class="btn btn-default pull-right" href="{{ doc.get_absolute_url }}">Back</a>
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
{% endblock %}
|
||||
|
||||
{% block js %}
|
||||
<script>
|
||||
jQuery(document).ready(function () {
|
||||
jQuery(".next-states a").click(function (e) {
|
||||
e.preventDefault();
|
||||
var s = jQuery(this).data("state");
|
||||
jQuery("#id_new_state").val(s);
|
||||
});
|
||||
{% block scripts %}
|
||||
$(document).ready(function () {
|
||||
$("button.next-state").click(function (e) {
|
||||
var s = $(this).data("state");
|
||||
if (s) {
|
||||
e.preventDefault();
|
||||
$("#id_new_state").val(s);
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,34 +1,22 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% load bootstrap3 %}
|
||||
|
||||
{% block title %}Edit IESG note for {{ doc.name }}{% endblock %}
|
||||
|
||||
{% block morecss %}
|
||||
form.edit-iesg-note #id_note {
|
||||
width: 600px;
|
||||
height: 150px;
|
||||
}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Edit IESG note for {{ doc.name }}</h1>
|
||||
<h1>Edit IESG note<br><small>{{ doc.name }}</small></h1>
|
||||
|
||||
<form class="edit-iesg-note" action="" method="post">{% csrf_token %}
|
||||
<table>
|
||||
{% for field in form.visible_fields %}
|
||||
<tr>
|
||||
<th>{{ field.label_tag }}</th>
|
||||
<td>{{ field }}
|
||||
{% if field.help_text %}<div class="help">{{ field.help_text }}</div>{% endif %}
|
||||
{{ field.errors }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
<tr>
|
||||
<td></td>
|
||||
<td class="actions">
|
||||
<a href="{{ doc.get_absolute_url }}">Back</a>
|
||||
<input type="submit" value="Save"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
{% bootstrap_messages %}
|
||||
|
||||
<form role="form" method="post">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form form %}
|
||||
|
||||
{% buttons %}
|
||||
<button type="submit" class="btn btn-primary">Submit</button>
|
||||
<a class="btn btn-default pull-right" href="{{ doc.get_absolute_url }}">Back</a>
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,64 +1,22 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block title %}Edit info on {{ doc }}{% endblock %}
|
||||
{% load bootstrap3 %}
|
||||
{% load ietf_filters %}
|
||||
|
||||
{% block scripts %}
|
||||
function make_bold()
|
||||
{
|
||||
var e = document.getElementById("ballotwarn");
|
||||
e.setAttribute("class","warning");
|
||||
}
|
||||
{% endblock %}
|
||||
|
||||
{% block morecss %}
|
||||
form.edit-info #id_notify {
|
||||
width: 600px;
|
||||
}
|
||||
form.edit-info #id_note {
|
||||
width: 600px;
|
||||
height: 150px;
|
||||
}
|
||||
form.edit-info .actions {
|
||||
padding-top: 20px;
|
||||
}
|
||||
.warning {
|
||||
font-weight: bold;
|
||||
color: #a00;
|
||||
}
|
||||
{% endblock %}
|
||||
{% block title %}Edit info for {{ doc }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{% load ietf_filters %}
|
||||
<h1>Edit info on {{ doc }}</h1>
|
||||
<h1>Edit info<br><small>{{ doc }}</small></h1>
|
||||
|
||||
<form class="edit-info" action="" method="post">{% csrf_token %}
|
||||
<table>
|
||||
{% for field in form.standard_fields %}
|
||||
<tr>
|
||||
<th>{{ field.label_tag }}</th>
|
||||
<td>{{ field }}
|
||||
{% if field.name == "telechat_date" %}
|
||||
{% if not ballot_issued %}
|
||||
<span id="ballotwarn"> A ballot for this document has not been issued: <a href="{% url "doc_ballot_writeupnotes" name=doc.name %}">Edit Ballot Text</a></span>
|
||||
{% endif %}
|
||||
{{ form.returning_item }} {{ form.returning_item.label_tag }} {{ form.returning_item.errors }}
|
||||
{% endif %}
|
||||
{% if field.name == "ad" %}
|
||||
{% if user|has_role:"Area Director" %}
|
||||
<label><input type="checkbox" name="ad" value="{{ login.pk }}" /> Assign to me</label>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% if field.help_text %}<div class="help">{{ field.help_text }}</div>{% endif %}
|
||||
{{ field.errors }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
<tr>
|
||||
<td></td>
|
||||
<td class="actions">
|
||||
<a href="{{ doc.get_absolute_url }}">Back</a>
|
||||
<input type="submit" value="Save"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
{% bootstrap_messages %}
|
||||
|
||||
<form class="tokenized-form" role="form" method="post">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form form %}
|
||||
|
||||
{% buttons %}
|
||||
<button class="btn btn-primary" type="submit">Submit</button>
|
||||
<a class="btn btn-default pull-right" href="{{ doc.get_absolute_url }}">Back</a>
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,17 +1,15 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block title %}Last Call Requested{% endblock %}
|
||||
{% block title %}Last call requested{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Last Call Requested</h1>
|
||||
<h1>Last call requested</h1>
|
||||
|
||||
<p>Your request to issue the Last Call has been submitted to the Secretariat.</p>
|
||||
<p>Your request to issue the <i>last call</i> has been submitted to the secretariat.</p>
|
||||
|
||||
<p>Note that the Last Call will not actually go out until the
|
||||
<p>Note that the <i>last call</i> will not actually go out until the
|
||||
secretariat takes appropriate steps. This may take up to one business
|
||||
day, as it involves a person taking action.</p>
|
||||
|
||||
<div class="actions">
|
||||
<a href="{{ url }}">Back</a>
|
||||
</div>
|
||||
<a class="btn btn-default" href="{{ url }}">Back</a>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,39 +1,28 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block title %}Make Last Call for {{ doc.name }}{% endblock %}
|
||||
{% load bootstrap3 %}
|
||||
|
||||
{% block morecss %}
|
||||
form.approve-ballot pre {
|
||||
margin: 0;
|
||||
padding: 4px;
|
||||
border-top: 4px solid #eee;
|
||||
border-bottom: 4px solid #eee;
|
||||
}
|
||||
form.approve-ballot .announcement {
|
||||
overflow-x: auto;
|
||||
overflow-y: scroll;
|
||||
width: 800px;
|
||||
height: 400px;
|
||||
border: 1px solid #bbb;
|
||||
}
|
||||
{% endblock %}
|
||||
{% block title %}Make last call for {{ doc.name }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Make Last Call for {{ doc.name }}</h1>
|
||||
<h1>Make last call<br><small>{{ doc.name }}</small></h1>
|
||||
|
||||
<p>Make last call for following draft:</p>
|
||||
{% bootstrap_messages %}
|
||||
|
||||
<div>{{ doc.file_tag }} ({{ doc.group.acronym }}) - {{ doc.intended_std_level.name }}</div>
|
||||
<p class="alert alert-info">
|
||||
<b>Last call for:</b>
|
||||
{{ doc.name }} ({{ doc.group.acronym }}) to {{ doc.intended_std_level.name }}
|
||||
</p>
|
||||
|
||||
<form style="margin-top:20px" action="" method="post">{% csrf_token %}
|
||||
<table>
|
||||
{{ form.as_table }}
|
||||
</table>
|
||||
<form role="form" method="post">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form form %}
|
||||
|
||||
<div class="actions">
|
||||
<a href="{{ doc.get_absolute_url }}">Back</a>
|
||||
<input type="reset" value="Reset">
|
||||
<input type="submit" value="Make Last Call"/>
|
||||
</div>
|
||||
{% buttons %}
|
||||
<button type="submit" class="btn btn-primary">Make last call</button>
|
||||
<button type="reset" class="btn btn-warning">Reset</button>
|
||||
<a class="btn btn-default pull-right" href="{{ doc.get_absolute_url }}">Back</a>
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,46 +1,53 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% load bootstrap3 %}
|
||||
|
||||
{% block title %}Request publication for {{ doc }}{% endblock %}
|
||||
|
||||
{% block morecss %}
|
||||
p.warning { color: #a00; font-weight: bold; }
|
||||
form.request-publication #id_subject,
|
||||
form.request-publication #id_body { width: 50em; }
|
||||
form.request-publication #id_body { height: 30em; }
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Request publication for {{ doc }}</h1>
|
||||
<h1>Request publication<br><small>{{ doc }}</small></h1>
|
||||
|
||||
<p>Send a publication request to the RFC Editor for {{ doc }} and move
|
||||
it to the <em>{{ next_state.name }}</em> stream state.</p>
|
||||
{% bootstrap_messages %}
|
||||
|
||||
<p class="alert alert-info">
|
||||
Send a publication request to the RFC Editor for {{ doc }} and move it to the <i>{{ next_state.name }}</i> stream state.
|
||||
Please edit the message and remove any parts in brackets you do not
|
||||
fill in. For independent submissions, see the <a
|
||||
href="http://www.rfc-editor.org/indsubs.html">guidelines</a>.
|
||||
</p>
|
||||
|
||||
{% if not doc.intended_std_level %}
|
||||
<p class="warning">Note: Intended RFC status is not set for the document.</p>
|
||||
<p class="alert alert-warning">
|
||||
<b>Note:</b> Intended RFC status is not set for the document.
|
||||
</p>
|
||||
{% endif %}
|
||||
|
||||
{% if doc.stream_id != "ise" and not consensus_filled_in %}
|
||||
<p class="warning">Note: Consensus status is not set for the document.</p>
|
||||
<p class="alert alert-warning">
|
||||
<b>Note:</b> Consensus status is not set for the document.
|
||||
</p>
|
||||
{% endif %}
|
||||
|
||||
<form role="form" method="post">
|
||||
{% csrf_token %}
|
||||
|
||||
<p>Please edit the message and remove any parts in brackets you do not
|
||||
fill in. For independent submissions, see the <a
|
||||
href="http://www.rfc-editor.org/indsubs.html">guidelines</a>.</p>
|
||||
<div class="form-group">
|
||||
<label>From</label>
|
||||
<input class="form-control" type="text" placeholder="{{ message.frm }}" disabled>
|
||||
</div>
|
||||
|
||||
<form class="request-publication" action="" method="post">{% csrf_token %}
|
||||
<table>
|
||||
<tr><td>From:</td> <td>{{ message.frm }}</td></tr>
|
||||
<tr><td>To:</td> <td>{{ message.to }}</td></tr>
|
||||
<tr><td>Subject:</td> <td>{{ form.subject }} {{ form.subject.errors }}</td></tr>
|
||||
<tr><td style="vertical-align: top">Message:</td> <td>{{ form.body }} {{ form.body.errors }}</td></tr>
|
||||
<tr class="actions"><td></td>
|
||||
<td>
|
||||
<a class="button" href="{% url "doc_view" name=doc.name %}">Cancel</a>
|
||||
<input class="button" name="reset" type="submit" value="Reset"/>
|
||||
<input class="button" type="submit" value="Send request to the RFC Editor"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="form-group">
|
||||
<label>To</label>
|
||||
<input class="form-control" type="text" placeholder="{{ message.to }}" disabled>
|
||||
</div>
|
||||
|
||||
{% bootstrap_form form %}
|
||||
|
||||
{% buttons %}
|
||||
<button type="submit" class="btn btn-danger">Email RFC Editor</button>
|
||||
<button type="reset" class="btn btn-warning">Reset</button>
|
||||
<a class="btn btn-default pull-right" href="{% url "doc_view" name=doc.name %}">Back</a>
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,19 +1,21 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block title %}Request resurrection of {{ doc }}{% endblock %}
|
||||
{% block title %}Request resurrection for {{ doc }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Request resurrection of {{ doc }}</h1>
|
||||
<h1>Request resurrection<br><small>{{ doc }}</small></h1>
|
||||
|
||||
<form action="" method="post">{% csrf_token %}
|
||||
<p>Request resurrection of the Internet Draft {{ doc.file_tag }}?</p>
|
||||
<p>Request resurrection of the Internet-Draft {{ doc.file_tag }}?</p>
|
||||
|
||||
<p>This will send a notification to the Secretariat to resurrect the
|
||||
I-D.</p>
|
||||
<p>This will send a notification to the Secretariat to resurrect the I-D.</p>
|
||||
|
||||
<div class="actions">
|
||||
<a href="{{ back_url }}">Back</a>
|
||||
<input type="submit" value="Request resurrection"/>
|
||||
</div>
|
||||
<form role="form" method="post">
|
||||
{% csrf_token %}
|
||||
|
||||
<div class="buttonlist">
|
||||
<input class="btn btn-primary" type="submit" value="Request resurrection">
|
||||
<a class="btn btn-default pull-right" href="{{ back_url }}">Back</a>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,18 +1,24 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block title %}Resurrect {{ doc }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<form action="" method="post">{% csrf_token %}
|
||||
<h1>Resurrect {{ doc }}</h1>
|
||||
|
||||
<p>Resurrect {{ doc.file_tag }}?</p>
|
||||
|
||||
<p>This will change the status to Active{% if doc.idinternal.resurrect_requested_by %} and email a notice to {{ doc.idinternal.resurrect_requested_by }}{% endif %}.</p>
|
||||
<h1>Resurrect<br><small>{{ doc }}</small></h1>
|
||||
|
||||
<div class="actions">
|
||||
<a href="{{ back_url }}">Back</a>
|
||||
<input type="submit" value="Resurrect"/>
|
||||
</div>
|
||||
<p>Resurrect {{ doc }}?</p>
|
||||
|
||||
<p>
|
||||
This will change the status to Active {% if doc.idinternal.resurrect_requested_by %} and email a notice to {{ doc.idinternal.resurrect_requested_by }}{% endif %}.
|
||||
</p>
|
||||
|
||||
<form role="form" method="post">
|
||||
{% csrf_token %}
|
||||
|
||||
<div class="buttonlist">
|
||||
<input class="btn btn-primary" type="submit" value="Resurrect">
|
||||
<a class="btn btn-default pull-right" href="{{ back_url }}">Back</a>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
{# Copyright The IETF Trust 2007, All Rights Reserved #}
|
||||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block title %}Posting Approved Draft to RFC Editor Failed{% endblock %}
|
||||
{% block title %}Posting approved I-D to RFC Editor failed{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Posting Approved Draft to RFC Editor Failed</h1>
|
||||
<h1>Posting approved I-D to RFC Editor failed</h1>
|
||||
|
||||
<p>Sorry, when trying to notify the RFC Editor through HTTP, we hit an
|
||||
error.</p>
|
||||
|
@ -14,13 +13,11 @@ yet so if this is an intermittent error, you can go back and try
|
|||
again.</p>
|
||||
|
||||
<p>The error was:</p>
|
||||
|
||||
<p><code>{{ error }}</code></p>
|
||||
|
||||
{% if response %}
|
||||
<p>The response from the RFC Editor was:</p>
|
||||
|
||||
<p><code>{{ response|linebreaksbr }}</code></p>
|
||||
<p>The response from the RFC Editor was:</p>
|
||||
<p><code>{{ response|linebreaksbr }}</code></p>
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,15 +1,8 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block title %}Documents for {{ ad_name }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Documents for {{ ad_name }}</h1>
|
||||
|
||||
{% include "doc/search/search_results.html" %}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block js %}
|
||||
<script type="text/javascript" src="/js/utils.js"></script>
|
||||
<script type="text/javascript" src="/js/doc-search.js"></script>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,15 +1,11 @@
|
|||
{% extends "base.html" %}
|
||||
{# Copyright The IETF Trust 2007, All Rights Reserved #}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% load ietf_filters %}
|
||||
|
||||
{% block pagehead %}
|
||||
{% if last_call_only %}<link rel="alternate" type="application/atom+xml" href="/feed/last-call/">{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block morecss %}
|
||||
th.area, td.area { text-align: left; padding-right: 0.5em; }
|
||||
th.date, td.date { text-align: left; padding-right: 0.5em; white-space: nowrap; }
|
||||
{% if last_call_only %}
|
||||
<link rel="alternate" type="application/atom+xml" href="/feed/last-call/">
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block title %}{{ title }}{% endblock %}
|
||||
|
@ -17,51 +13,41 @@ th.date, td.date { text-align: left; padding-right: 0.5em; white-space: nowrap;
|
|||
{% block content %}
|
||||
<h1>{{ title }}</h1>
|
||||
|
||||
{% for state, docs in grouped_docs %}
|
||||
<h2 id="{{ state.slug }}">{{ state.name }}</h2>
|
||||
<table class="table table-condensed table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="text-nowrap">Area</th>
|
||||
<th class="text-nowrap">{% if state.slug == "lc" %}Expires at{% else %}Date{% endif %}</th>
|
||||
<th>Document</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for state, docs in grouped_docs %}
|
||||
<tr class="warning"><th colspan="3">{{ state.name }}</th></tr>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<th class="area">Area</th>
|
||||
<th class="date">{% if state.slug == "lc" %}Expires at{% else %}Date{% endif %}</th>
|
||||
</tr>
|
||||
{% for doc in docs %}
|
||||
<tr>
|
||||
<td class="text-nowrap">{% if doc.area_acronym %}{{ doc.area_acronym }}{% endif %}</td>
|
||||
<td class="text-nowrap">
|
||||
{% if state.slug == "lc" %}
|
||||
{% if doc.lc_expires %}{{ doc.lc_expires|date:"Y-m-d" }}{% endif %}
|
||||
{% else %}
|
||||
{{ doc.time|date:"Y-m-d" }}
|
||||
{% endif %}
|
||||
</td>
|
||||
|
||||
{% for doc in docs %}
|
||||
<tr class="doc">
|
||||
<td class="area">{% if doc.area_acronym %}{{ doc.area_acronym.upper }}{% endif %}</td>
|
||||
<td class="date">
|
||||
{% if state.slug == "lc" %}
|
||||
{% if doc.lc_expires %}{{ doc.lc_expires|date:"M j, Y" }}{% endif %}
|
||||
{% else %}
|
||||
{{ doc.time|date:"M j, Y" }}
|
||||
{% endif %}
|
||||
</td>
|
||||
|
||||
<td>{{ doc.title }} ({{ doc.intended_std_level.name }})</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td><a href="{% url "doc_view" doc.name %}">{{ doc.name }}</a></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>AD:</td>
|
||||
<td><a href="mailto:{{ doc.ad.email_address|urlencode }}">{{ doc.ad.plain_name }}</a></td>
|
||||
</tr>
|
||||
|
||||
{% if doc.note %}
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>Note:</td>
|
||||
<td>{{ doc.note|linebreaksbr|urlize }}</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
|
||||
{% endfor %}
|
||||
<td>
|
||||
<b>{{ doc.title }}</b> ({{ doc.intended_std_level.name }})
|
||||
<br><a href="{% url "doc_view" doc.name %}">{{ doc.name }}</a>
|
||||
<br>AD: <a href="mailto:{{ doc.ad.email_address|urlencode }}">{{ doc.ad.plain_name }}</a>
|
||||
{% if doc.note %}
|
||||
<br><i>Note: {{ doc.note|linebreaksbr|urlize }}</i>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% endfor %}
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,15 +1,10 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block title %}Internet-Drafts in IETF Last Call{% endblock %}
|
||||
{% block title %}Internet-Drafts in IETF last call{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Internet-Drafts in IETF Last Call</h1>
|
||||
<h1>Internet-Drafts in IETF last call</h1>
|
||||
|
||||
{% include "doc/search/search_results.html" %}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block js %}
|
||||
<script type="text/javascript" src="/js/utils.js"></script>
|
||||
<script type="text/javascript" src="/js/doc-search.js"></script>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,43 +1,25 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block morecss %}
|
||||
form.edit-info #id_notify {
|
||||
width: 600px;
|
||||
}
|
||||
.warning {
|
||||
font-weight: bold;
|
||||
color: #a00;
|
||||
}
|
||||
{% endblock %}
|
||||
{% load bootstrap3 %}
|
||||
|
||||
{% block title %}
|
||||
Edit notification addresses for {{titletext}}
|
||||
Edit notification addresses for {{titletext}}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Edit notification addresses for {{titletext}}</h1>
|
||||
<h1>Edit notification addresses<br><small>{{titletext}}</small></h1>
|
||||
|
||||
<form class="edit-info" action="" enctype="multipart/form-data" method="post">{% csrf_token %}
|
||||
<table>
|
||||
{% for field in form.visible_fields %}
|
||||
<tr>
|
||||
<th>{{ field.label_tag }}</th>
|
||||
<td>
|
||||
{{ field }}
|
||||
{% if field.help_text %}<div class="help">{{ field.help_text }}</div>{% endif %}
|
||||
{{ field.errors }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
<tr>
|
||||
<td></td>
|
||||
<td class="actions">
|
||||
<a href="{% url "doc_view" name=doc.canonical_name %}">Back</a>
|
||||
<input type="submit" name="save_addresses" value="Save" />
|
||||
<input type="submit" name="regenerate_addresses" value="Regenerate Address List" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
{% bootstrap_messages %}
|
||||
|
||||
<form role="form" enctype="multipart/form-data" method="post">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form form %}
|
||||
|
||||
{% buttons %}
|
||||
<button type="submit" class="btn btn-primary" name="save_addresses">Submit</button>
|
||||
<input type="submit" class="btn btn-warning" name="regenerate_addresses" value="Regenerate address list">
|
||||
<a class="btn btn-default pull-right" href="{% url "doc_view" name=doc.canonical_name %}">Back</a>
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,36 +1,30 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block title %}
|
||||
Set Telechat Date for {{ doc.name }}
|
||||
{% endblock %}
|
||||
{% load bootstrap3 %}
|
||||
|
||||
{% block morecss %}
|
||||
form.telechat-date td.actions {
|
||||
padding-top: 1em;
|
||||
}
|
||||
{% endblock %}
|
||||
{% block title %}Set telechat date for {{ doc.name }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{% load ietf_filters %}
|
||||
<h1>Set Telechat Date for {{ doc.name }}</h1>
|
||||
<h1>Set telechat date<br><small>{{ doc.name }}</small></h1>
|
||||
|
||||
<form class="telechat-date" action="" method="post">{% csrf_token %}
|
||||
<table>
|
||||
{{ form.as_table }}
|
||||
<tr>
|
||||
<td></td>
|
||||
<td class="actions">
|
||||
<a href="{% url "doc_view" name=doc.name %}">Back</a>
|
||||
<input type="submit" value="Save"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
{% bootstrap_messages %}
|
||||
|
||||
<form role="form" method="post">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form form %}
|
||||
|
||||
{% buttons %}
|
||||
<button type="submit" class="btn btn-primary">Submit</button>
|
||||
<a class="btn btn-default pull-right" href="{% url "doc_view" name=doc.name %}">Back</a>
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
|
||||
{% if prompts %}
|
||||
<div>
|
||||
{% for prompt in prompts %}
|
||||
<div class="prompt">{{prompt}}</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% for prompt in prompts %}
|
||||
{# XXX FACELIFT: check what this is #}
|
||||
<div class="prompt">{{prompt}}</div>
|
||||
}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,78 +1,34 @@
|
|||
{% extends "base.html" %}
|
||||
{% comment %}
|
||||
Copyright (C) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
|
||||
All rights reserved. Contact: Pasi Eronen <pasi.eronen@nokia.com>
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above
|
||||
copyright notice, this list of conditions and the following
|
||||
disclaimer in the documentation and/or other materials provided
|
||||
with the distribution.
|
||||
|
||||
* Neither the name of the Nokia Corporation and/or its
|
||||
subsidiary(-ies) nor the names of its contributors may be used
|
||||
to endorse or promote products derived from this software
|
||||
without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
{% endcomment %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block title %}IETF Datatracker{% endblock %}
|
||||
|
||||
{% block morecss %}
|
||||
.ietf-main-title h1 { font-size:40px; font-weight:bold; margin-bottom:10px; margin-top:5px;}
|
||||
td.ietf-main-logo { padding: 8px; }
|
||||
.ietf-main-logo div { text-align:center; }
|
||||
td.ietf-main-search { width:650px; padding:8px; }
|
||||
td.ietf-main-intro { width:200px; background:#fff5df; padding:8px; border:1px solid #cccccc; }
|
||||
.ietf-main-intro li { padding-left:0; margin-left:0; }
|
||||
.ietf-main-intro ul { margin-left:5px; padding-left:10px; }
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<table>
|
||||
<tr valign="middle">
|
||||
<td colspan="2" class="ietf-main-title"><h1>IETF Datatracker</h1></td>
|
||||
<td class="ietf-main-logo"><div><img src="/images/ietflogo.png" width="140" alt=""/></div></td>
|
||||
</tr>
|
||||
<div class="row">
|
||||
<div class="text-center">
|
||||
<img class="ietflogo" src="/facelift/images/ietflogo{% ifnotequal server_mode "production" %}-dev{% endifnotequal %}.png" alt="IETF">
|
||||
<h1>Datatracker</h1>
|
||||
{% ifnotequal server_mode "production" %}
|
||||
<p>Development Mode<p>
|
||||
{% endifnotequal %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<tr valign="top"><td class="ietf-box ietf-main-search">
|
||||
<h1>Search Internet-Drafts and RFCs</h1>
|
||||
{% include "doc/search/search_form.html" %}
|
||||
</td>
|
||||
<td style="width:8px;"> </td>
|
||||
<td class="ietf-main-intro">
|
||||
The IETF Datatracker is the IETF's web system for managing information
|
||||
about:
|
||||
<ul>
|
||||
<li><a href="{% url "doc_search" %}">Internet-Drafts and RFCs</a></li>
|
||||
<li><a href="/ipr/">IPR disclosures</a></li>
|
||||
<li><a href="/liaison/">Liaison statements</a></li>
|
||||
<li><a href="/meeting/agenda/">Meeting agenda</a> and <a href="/meeting/">session agendas/slides/minutes</a></li>
|
||||
<li><a href="/iesg/agenda/">IESG telechat agenda</a></li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="row">
|
||||
<div class="col-sm-4 col-sm-push-8">
|
||||
<h2>About</h2>
|
||||
<p>The IETF Datatracker is the IETF's web system for managing organizational information, such as:</p>
|
||||
<ul>
|
||||
<li><a href="{% url "doc_search" %}">Internet-Drafts (I-Ds) and Requests for Comments (RFCs)</a></li>
|
||||
<li><a href="/ipr/">IPR disclosures</a></li>
|
||||
<li><a href="/liaison/">Liaison statements</a></li>
|
||||
<li><a href="/meeting/agenda/">Meeting agendas</a> and <a href="/meeting/">session agendas, slides and minutes</a></li>
|
||||
<li><a href="/iesg/agenda/">IESG telechat agendas</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-sm-8 col-sm-pull-4">
|
||||
<h2>Search Documents</h2>
|
||||
{% include "doc/search/search_form.html" %}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
{% endblock content %}
|
||||
|
||||
{% block js %}
|
||||
<script type="text/javascript" src="/js/utils.js"></script>
|
||||
<script type="text/javascript" src="/js/doc-search.js"></script>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,9 +1,4 @@
|
|||
{% extends "base.html" %}
|
||||
|
||||
{% block morecss %}
|
||||
.contents { max-width: 50em; }
|
||||
.contents a { float: left; width: 7em; margin-right: 2em; }
|
||||
{% endblock %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block title %}Active Internet-Drafts{% endblock %}
|
||||
|
||||
|
@ -18,19 +13,24 @@ group. For normal use, it is recommended to use the
|
|||
Internet-Drafts</a> (that page also lists some machine-readable files
|
||||
for download).</p>
|
||||
|
||||
<p class="contents">
|
||||
{% for group in groups %}<a href="#{{ group.acronym }}">{{ group.acronym }}</a> {% endfor %}
|
||||
<p class="buttonlist">
|
||||
{% for group in groups %}
|
||||
<a class="btn btn-default btn-xs" href="#{{ group.acronym }}">{{ group.acronym }}</a>
|
||||
{% endfor %}
|
||||
</p>
|
||||
|
||||
<div style="clear:left"></div>
|
||||
|
||||
{% for group in groups %}
|
||||
<h2 id="{{ group.acronym }}">{{ group.name }} ({{ group.acronym }})</h2>
|
||||
{% for d in group.active_drafts %}
|
||||
<p>{{ d.title }}<br>
|
||||
{% for a in d.authors %}{{ a }}{% if not forloop.last %}, {% endif %}{% endfor %}<br>
|
||||
<a href="/doc/{{ d.name }}/">{{ d.name }}-{{ d.rev }}</a> ({{ d.rev_time|date:"Y-m-d" }})</p>
|
||||
{% endfor %}
|
||||
<h2 id="{{ group.acronym }}">{{ group.name }} ({{ group.acronym }})</h2>
|
||||
{% for d in group.active_drafts %}
|
||||
<p>
|
||||
<b>{{ d.title }}.</b><br>
|
||||
{% for a in d.authors %}
|
||||
{{ a }}{% if not forloop.last %}, {% else %}.{% endif %}
|
||||
{% endfor %}
|
||||
<br><a href="/doc/{{ d.name }}/">{{ d.name }}-{{ d.rev }}</a>
|
||||
<br>{{ d.rev_time|date:"Y-m-d" }}
|
||||
</p>
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block title %}Index of all Internet-Drafts and RFCs{% endblock %}
|
||||
|
||||
|
@ -10,16 +10,16 @@ this page is to ensure all pages can be found by search engines. For
|
|||
normal use, it is recommended to use the <a href="{% url "doc_search" %}">search
|
||||
page</a>.</p>
|
||||
|
||||
<p>There's also an <a href="{% url "index_active_drafts" %}">index of
|
||||
<p>There is also an <a href="{% url "index_active_drafts" %}">index of
|
||||
active Internet-Drafts</a> with more information.</p>
|
||||
|
||||
<p>In addition, the following files are available for download:</p>
|
||||
<ul>
|
||||
<li><a href="http://www.ietf.org/id/1id-index.txt">Active Internet-Drafts (text)</a></li>
|
||||
<li><a href="http://www.ietf.org/id/1id-abstracts.txt">Active Internet-Drafts with abstracts (text)</a></li>
|
||||
<li><a href="http://www.ietf.org/id/all_id2.txt">All Internet-Drafts (tab-separated)</a>, <a href="http://www.ietf.org/id/all_id.txt">older version (with fewer fields)</a></li>
|
||||
<li><a href="http://www.rfc-editor.org/rfc/rfc-index.txt">All RFCs (text)</a></li>
|
||||
<li><a href="http://www.rfc-editor.org/rfc/rfc-index.xml">All RFCs (XML)</a></li>
|
||||
<li><a href="http://www.ietf.org/id/1id-index.txt">Active Internet-Drafts (text)</a></li>
|
||||
<li><a href="http://www.ietf.org/id/1id-abstracts.txt">Active Internet-Drafts with abstracts (text)</a></li>
|
||||
<li><a href="http://www.ietf.org/id/all_id2.txt">All Internet-Drafts (tab-separated)</a>, <a href="http://www.ietf.org/id/all_id.txt">older version (with fewer fields)</a></li>
|
||||
<li><a href="http://www.rfc-editor.org/rfc/rfc-index.txt">All RFCs (text)</a></li>
|
||||
<li><a href="http://www.rfc-editor.org/rfc/rfc-index.xml">All RFCs (XML)</a></li>
|
||||
</ul>
|
||||
|
||||
<h2>Contents</h2>
|
||||
|
@ -28,14 +28,13 @@ active Internet-Drafts</a> with more information.</p>
|
|||
|
||||
<ul>
|
||||
{% for state, heading, count, _ in categories %}
|
||||
<li><a href="#{{ state.slug }}">{{ heading }} ({{ count }})</a></li>
|
||||
<li><a href="#{{ state.slug }}">{{ heading }} ({{ count }})</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
|
||||
{% for state, heading, count, links in categories %}
|
||||
<h3 id="{{ state.slug }}">{{ heading }} ({{ count }})</h3>
|
||||
|
||||
<p class="links">{{ links|safe }}</p>
|
||||
<h2 id="{{ state.slug }}">{{ heading }} ({{ count }})</h2>
|
||||
<p class="links">{{ links|safe }}</p>
|
||||
{% endfor %}
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,29 +1,27 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "ietf.html" %}
|
||||
|
||||
{% block title %}Document Relationships{% endblock %}
|
||||
|
||||
{% block morecss %}
|
||||
.ietf-table .name { white-space: nowrap; padding-right: 1em; }
|
||||
.ietf-table .desc { max-width: 35em; }
|
||||
{% endblock %}
|
||||
{% block title %}Document relationships{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Document Relationships</h1>
|
||||
<h1>Document relationships</h1>
|
||||
|
||||
<table class="ietf-table">
|
||||
<tr>
|
||||
<th>Relationship</th>
|
||||
<th>Description</th>
|
||||
<th>Inverse Relationship</th>
|
||||
</tr>
|
||||
|
||||
{% for rel in relations %}
|
||||
<tr id="{{ rel.slug }}" class="{{ forloop.counter|divisibleby:2|yesno:"evenrow,oddrow" }}">
|
||||
<td class="name">{{ rel.name }}</td>
|
||||
<td class="desc">{{ rel.desc|linebreaksbr }}</td>
|
||||
<td class="revname">{{ rel.revname }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
<table class="table table-condensed table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Relationship</th>
|
||||
<th>Description</th>
|
||||
<th>Inverse relationship</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for rel in relations %}
|
||||
<tr id="{{ rel.slug }}">
|
||||
<td class="name">{{ rel.name }}</td>
|
||||
<td class="desc">{{ rel.desc|linebreaksbr }}</td>
|
||||
<td class="revname">{{ rel.revname }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
{% endblock %}
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue