Reverted erroneous commit [8495] to the tags branch.

- Legacy-Id: 8496
Note: SVN reference [8495] has been migrated to Git commit c706413064
This commit is contained in:
Henrik Levkowetz 2014-10-27 13:13:35 +00:00
parent c706413064
commit ad2777972d
282 changed files with 9026 additions and 13180 deletions

25
README
View file

@ -1,25 +0,0 @@
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
View file

@ -1,11 +0,0 @@
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

View file

@ -1,6 +1,5 @@
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
@ -10,7 +9,7 @@ register = template.Library()
class CommunityListNode(template.Node):
def __init__(self, user, var_name):
self.user = user
self.var_name = var_name
@ -58,13 +57,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 settings.DEBUG or not clist.cached:
if not clist.cached:
clist.cached = render_to_string('community/raw_view.html',
{'cl': clist,
'dc': clist.get_display_config()})

View file

@ -87,32 +87,35 @@ def ballot_icon(context, doc):
positions = list(doc.active_ballot().active_ad_positions().items())
positions.sort(key=sort_key)
res = ['<a href="%s" data-toggle="modal" data-target="#modal-%d" title="IESG positions (click to show more)" class="ballot-icon"><table>' % (
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)),
urlreverse("ietf.doc.views_doc.ballot_popup", kwargs=dict(name=doc.name, ballot_id=ballot.pk)),
ballot.pk)]
edit_position_url,
title
)]
res.append("<tr>")
for i, (ad, pos) in enumerate(positions):
if i > 0 and i % 5 == 0:
res.append("</tr><tr>")
res.append("</tr>")
res.append("<tr>")
c = "position-%s" % (pos.pos.slug if pos else "norecord")
if user_is_person(user, ad):
c += " my"
res.append('<td class="%s"></td>' % c)
res.append('<td class="%s" />' % c)
# 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)
res.append("</tr>")
res.append("</table></a>")
return "".join(res)
@ -134,8 +137,7 @@ def ballotposition(doc, user):
@register.filter
# FACELIFT: added flavor argument for styling
def state_age_colored(doc, flavor=""):
def state_age_colored(doc):
if doc.type_id == 'draft':
if not doc.get_state_slug() in ["active", "rfc"]:
# Don't show anything for expired/withdrawn/replaced drafts
@ -154,7 +156,7 @@ def state_age_colored(doc, flavor=""):
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
@ -178,26 +180,16 @@ def state_age_colored(doc, flavor=""):
goal1 = 14
goal2 = 28
if days > goal2:
if flavor == "facelift":
class_name = "label label-danger"
else:
class_name = "ietf-small ietf-highlight-r"
class_name = "ietf-small ietf-highlight-r"
elif days > goal1:
if flavor == "facelift":
class_name = "label label-warning"
else:
class_name = "ietf-small ietf-highlight-y"
class_name = "ietf-small ietf-highlight-y"
else:
class_name = "ietf-small"
if days > goal1:
title = ' title="Goal is &lt;%d days"' % (goal1,)
else:
title = ''
# 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 "" ))
return mark_safe('<span class="%s"%s>(for&nbsp;%d&nbsp;day%s)</span>' % (
class_name, title, days, 's' if days != 1 else ''))
else:
return ""

View file

@ -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, striptags
from django.template.defaultfilters import truncatewords_html, linebreaksbr, stringfilter, urlize
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\-\.]+)>", "&lt;\1&gt;", 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 "//tools.ietf.org/html/rfc" + string;
return "http://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])+"&hellip;"
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 &nbsp;/&gt;/&lt;
Unescape &nbsp;/&gt;/&lt;
"""
text = text.replace("&gt;", ">")
text = text.replace("&lt;", "<")
@ -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_html(sanitize_html(full)))))
full = mark_safe(keep_spacing(linebreaksbr(urlize(sanitize_html(full)))))
snippet = truncatewords_html(full, 25)
if 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 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 full
@register.filter
@ -512,66 +512,3 @@ 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)

View file

@ -43,32 +43,24 @@ 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(flavor=""):
res = cache.get('wgmenu' + flavor)
def wg_menu():
res = cache.get('base_left_wgmenu')
if res:
return res
areas = Group.objects.filter(type="area", state="active").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")
groups = Group.objects.filter(type="wg", state="active", parent__in=areas).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 wgs if g.parent_id == a.id]
a.active_groups = [g for g in groups if g.parent_id == a.id]
areas = [a for a in areas if a.active_groups]
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)
res = render_to_string('base/wg_menu.html', {'areas':areas})
cache.set('base_left_wgmenu', res, 30*60)
return res

View file

@ -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 the 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<br> 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),

View file

@ -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'},
{'title': 'Status', 'key':'status', 'colspan':'2'},
{'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'):

View file

@ -39,7 +39,7 @@ class GroupForm(forms.Form):
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: https://site/path (Optional description). Separate multiple entries with newline. Prefer HTTPS URLs where possible.", 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)
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'] = ""
self.fields['acronym'].widget.attrs['readonly'] = True
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):

View file

@ -24,13 +24,11 @@ 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, 'editable':editable }, context_instance=RequestContext(request))
return render_to_response('group/stream_documents.html', {'stream':stream, 'docs':docs, 'meta':meta }, context_instance=RequestContext(request))
class StreamEditForm(forms.Form):
delegates = AutocompletedEmailsField(required=False, only_users=True)
@ -64,7 +62,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_stream.streams")
return redirect("ietf.group.views.streams")
else:
form = StreamEditForm(initial=dict(delegates=Email.objects.filter(role__group=group, role__name="delegate")))
@ -74,4 +72,4 @@ def stream_edit(request, acronym):
'form': form,
},
context_instance=RequestContext(request))

View file

@ -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]

View file

@ -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,9 +58,6 @@ 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"))
@ -179,8 +176,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", {
@ -306,7 +303,7 @@ class RescheduleForm(forms.Form):
def __init__(self, *args, **kwargs):
dates = kwargs.pop('telechat_dates')
super(self.__class__, self).__init__(*args, **kwargs)
# telechat choices
@ -363,9 +360,6 @@ 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({

View file

@ -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'],

View file

@ -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("Designations for other contributions", blank=True, max_length=255)
other_designations = models.CharField(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, 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)
patents = models.TextField("Patent Applications", db_column="p_applications", max_length=255)
date_applied = models.CharField(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("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)
comments = models.TextField("Licensing Comments", blank=True)
lic_checkbox = models.BooleanField("All terms and conditions has been disclosed", 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("Address", blank=True, max_length=255)
address2 = models.CharField("Address (continued)", blank=True, max_length=255)
address1 = models.CharField(blank=True, max_length=255)
address2 = models.CharField(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)

View file

@ -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(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)
rfclist = forms.CharField(required=False)
draftlist = forms.CharField(required=False)
stdonly_license = forms.BooleanField(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(label="RFC numbers", required=False, initial=rfclist_initial)
self.base_fields["rfclist"] = forms.CharField(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(label="Internet-Draft filenames (draft-...)", required=False, initial=draftlist_initial)
self.base_fields["draftlist"] = forms.CharField(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(label="Above licensing declaration is limited solely to standards-track IETF documents", required=False)
self.base_fields["stdonly_license"] = forms.BooleanField(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(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.")
self.fields["update_auth"] = forms.BooleanField()
if request.method == 'POST':
form = UpdateForm(request.POST)
else:

View file

@ -9,7 +9,8 @@ from ietf.meeting import ajax
urlpatterns = patterns('',
(r'^(?P<meeting_num>\d+)/materials.html$', views.materials),
(r'^agenda/$', views.agenda),
(r'^agenda(-utc)?(?P<ext>.html)?$', views.agenda),
(r'^(?P<base>agenda-utc)(?P<ext>.html)?$', views.agenda),
(r'^agenda(?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),
@ -27,7 +28,8 @@ 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(-utc)?(?P<ext>.html)?/?$', views.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+)/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),

View file

@ -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,7 +400,6 @@ 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
@ -462,7 +461,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,
@ -480,15 +479,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 nominee',
comments = forms.CharField(label='Comments on this candidate',
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, \

View file

@ -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 \

View file

@ -41,8 +41,12 @@ 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 class="badge" title="%d earlier comments from you on %s as %s">%s</span>&nbsp;' % (count, nominee.email.address, position, count)
return '<span title="%d earlier comments from you on %s as %s">%s</span>&nbsp;' % (count, nominee.email.address, position, mark)
@register.filter
@ -72,7 +76,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)

View file

@ -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:

View file

@ -1,44 +0,0 @@
import json
from django.utils.html import escape
from django.utils.functional import lazy
from django import forms
from django.core.urlresolvers import reverse as urlreverse
import debug # pyflakes:ignore
from ietf.person.models import Email
def json_emails(emails):
if isinstance(emails, basestring):
emails = Email.objects.filter(address__in=[x.strip() for x in emails.split(",") if x.strip()]).select_related("person")
return json.dumps([{"id": e.address + "", "name": escape(u"%s <%s>" % (e.person.name, e.address))} for e in emails])
class EmailsField(forms.CharField):
"""Multi-select field using jquery.tokeninput.js. Since the API of
tokeninput" is asymmetric, we have to pass it a JSON
representation on the way out and parse the ids coming back as a
comma-separated list on the way in."""
def __init__(self, *args, **kwargs):
kwargs["max_length"] = 1000
if not "help_text" in kwargs:
kwargs["help_text"] = "Type in name to search for person."
super(EmailsField, self).__init__(*args, **kwargs)
self.widget.attrs["class"] = "tokenized-field"
self.widget.attrs["data-ajax-url"] = lazy(urlreverse, str)("ajax_search_emails") # make this lazy to prevent initialization problem
def parse_tokenized_value(self, value):
return Email.objects.filter(address__in=[x.strip() for x in value.split(",") if x.strip()]).select_related("person")
def prepare_value(self, value):
if not value:
return ""
if isinstance(value, str) or isinstance(value, unicode):
value = self.parse_tokenized_value(value)
return json_emails(value)
def clean(self, value):
value = super(EmailsField, self).clean(value)
return self.parse_tokenized_value(value)

View file

@ -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,11 +87,10 @@ USE_I18N = False
USE_TZ = False
MEDIA_URL = '//www.ietf.org/'
MEDIA_URL = 'http://www.ietf.org/'
STATIC_URL = "/"
STATIC_ROOT = os.path.abspath(BASE_DIR + "/../static/")
STATIC_URL = STATIC_ROOT + '/'
WSGI_APPLICATION = "ietf.wsgi.application"
@ -234,35 +233,8 @@ 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',
@ -274,7 +246,7 @@ INTERNAL_IPS = (
)
# no slash at end
IDTRACKER_BASE_URL = "//datatracker.ietf.org"
IDTRACKER_BASE_URL = "http://datatracker.ietf.org"
RFCDIFF_PREFIX = "//www.ietf.org/rfcdiff"
# Valid values:
@ -315,22 +287,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 = "//www.ietf.org/mailman/listinfo/%(list_addr)s"
MAILING_LIST_INFO_URL = "https://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": "//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",
"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",
}
MEETING_DOC_HREFS = {
"agenda": "/meeting/{meeting}/agenda/{doc.group.acronym}/",
"minutes": "/www.ietf.org/proceedings/{meeting}/minutes/{doc.external_url}",
"slides": "/www.ietf.org/proceedings/{meeting}/slides/{doc.external_url}",
"minutes": "http://www.ietf.org/proceedings/{meeting}/minutes/{doc.external_url}",
"slides": "http://www.ietf.org/proceedings/{meeting}/slides/{doc.external_url}",
"recording": "{doc.external_url}",
}
@ -355,15 +327,15 @@ IANA_APPROVE_EMAIL = "drafts-approval@icann.org"
# Put real password in settings_local.py
IANA_SYNC_PASSWORD = "secret"
IANA_SYNC_CHANGES_URL = "//datatracker.iana.org:4443/data-tracker/changes"
IANA_SYNC_PROTOCOLS_URL = "//www.iana.org/protocols/"
IANA_SYNC_CHANGES_URL = "https://datatracker.iana.org:4443/data-tracker/changes"
IANA_SYNC_PROTOCOLS_URL = "http://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 = "//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"
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"
# Liaison Statement Tool settings
LIAISON_UNIVERSAL_FROM = 'Liaison Statement Management Tool <lsmt@' + IETF_DOMAIN + '>'
@ -399,7 +371,7 @@ INTERNET_DRAFT_DAYS_TO_EXPIRE = 185
IDSUBMIT_REPOSITORY_PATH = INTERNET_DRAFT_PATH
IDSUBMIT_STAGING_PATH = '/a/www/www6s/staging/'
IDSUBMIT_STAGING_URL = '//www.ietf.org/staging/'
IDSUBMIT_STAGING_URL = 'http://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
@ -442,7 +414,7 @@ SECR_AUTH_UNRESTRICTED_URLS = (
(r'^/secr/sreq/'),
)
SECR_BLUE_SHEET_PATH = '/a/www/ietf-datatracker/documents/blue_sheet.rtf'
SECR_BLUE_SHEET_URL = '//datatracker.ietf.org/documents/blue_sheet.rtf'
SECR_BLUE_SHEET_URL = 'https://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/'
@ -479,16 +451,19 @@ BADNESS_MUCHTOOBIG = 500
SELENIUM_TESTS = False
SELENIUM_TESTS_ONLY = False
# Set debug apps in DEV_APPS settings_local
DEV_APPS = ()
# 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"
# 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

View file

@ -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.' % (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) )
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) )
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. 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.<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.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. 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.<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.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. 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.<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.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 the Secretariat'), widget=forms.Textarea, required=False)
note = forms.CharField(label=mark_safe(u'Comment to<br/> the Secretariat'), widget=forms.Textarea, required=False)
class Meta:
model = Submission

View file

@ -17,7 +17,7 @@ def show_submission_files(context, submission):
exists = True
elif submission.state_id == "posted":
continue
result.append({'name': '%s' % ext[1:],
result.append({'name': '[%s version]' % ext[1:].upper(),
'exists': exists,
'url': '%s%s-%s%s' % (settings.IDSUBMIT_STAGING_URL, submission.name, submission.rev, ext)})
return {'files': result}
@ -27,16 +27,15 @@ 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>%s</pre>' % escape(pages))
result = '<pre>\n'
return mark_safe('<pre class="twopages">%s</pre>' % escape(pages))
result = '<pre class="twopages">\n'
for line in pages.split('\n'):
if line.find('%s-%s' % (submission.name, submission.rev)) > -1:
result += '<div class="bg-danger"><b>'
result += '</pre><pre class="twopages" style="background: red;">'
result += escape(line)
result += '\n'
result += '</b></div>\n'
result += '</pre><pre class="twopages">\n'
else:
result += escape(line)
result += '\n'
result += '</pre>pre>\n'
return mark_safe(result)

View file

@ -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. 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.<br />We recommend you that you cancel this submission and upload your files again.' % os.path.basename(source)
break
if not submission.title:

View file

@ -1,153 +0,0 @@
{% 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 %}

View file

@ -1,19 +0,0 @@
{% 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 }} &mdash; {{ 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 }} &mdash; {{ group.name}}</a></li>
{% endfor %}
</ul>
</li>

View file

@ -1,51 +0,0 @@
{# 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 %}

View file

@ -1,24 +1,18 @@
{% load bootstrap3 %}
<h2>Display customization</h2>
{% bootstrap_messages %}
<form action="#custom" method="post" />{% csrf_token %}
<h3>Sort method</h2>
{{ display_form.sort_method }}
<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 %}
<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>

View file

@ -1,130 +1,124 @@
{% extends "ietf.html" %}
{% load bootstrap3 %}
{% extends "base.html" %}
{% block title %}{{ cl.long_name }}{% endblock %}
{% block content %}
<h1>{{ cl.long_name }}</h1>
{% 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>
<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>
</ul>
<p></p>
<div class="yui-content">
<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 id="view">
{% include "community/view_list.html" %}
</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 %}
{% comment %}
XXX scrolling jumps around when using this, unfortunately
<script>
$('.nav-memory a').click(function (e) {
e.preventDefault();
$(this).tab('show');
});
{% block js %}
<script type="text/javascript" src="/js/community.js"></script>
{% endblock js %}
// 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 %}
{% 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 %}

View file

@ -1,29 +1,22 @@
{% extends "ietf.html" %}
{% load bootstrap3 %}
{% extends "base.html" %}
{% block title %}Subscribe to {{ cl.long_name }}{% endblock %}
{% block content %}
<h1>Subscribe to {{ cl.long_name }}</h1>
{% if success %}
<h1>Subscription successful</h1>
<p>We have sent an email to your email address with instructions to complete your subscription.</p>
<p>
We have sent an email to your email address with instructions to complete your subscription.
</p>
{% else %}
<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>
<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>
{% endif %}
{% endblock %}

View file

@ -1,13 +1,13 @@
{% extends "ietf.html" %}
{% extends "base.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>
<a class="btn btn-primary" href="{% url "view_personal_list" secret=cl.secret %}">Back</a>
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>
</p>
{% endblock %}

View file

@ -1,33 +1,22 @@
{% extends "ietf.html" %}
{% load bootstrap3 %}
{% extends "base.html" %}
{% block title %}Cancel subscription to {{ cl.long_name }}{% endblock %}
{% block content %}
<h1>Cancel subscription to {{ cl.long_name }}</h1>
{% if success %}
<h1>Cancellation successful</h1>
<p>
You will receive a confirmation email shortly containing further instructions on how to cancel your subscription.
</p>
<p>
You will receive a confirmation email shortly containing further instructions on how to cancel your subscription.
</p>
{% else %}
<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>
<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>
{% endif %}
{% endblock %}

View file

@ -1,15 +1,13 @@
{% extends "ietf.html" %}
{% extends "base.html" %}
{% block title %}Cancelled subscription to {{ cl.long_name }}{% endblock %}
{% block title %}Canceled subscription to {{ cl.long_name }}{% endblock %}
{% block content %}
<h1>Cancelled subscription to {{ cl.long_name }}</h1>
<h1>Canceled subscription to {{ cl.long_name }}</h1>
<p>
Your email address {{ email }} has been successfully removed from the {{ cl.long_name }} {% if significant %}significant {% endif %}changes mailing list.
You email address {{ email }} has been successfully removed form {{ cl.long_name }} {% if significant %}significant {% endif %}changes mailing list.
</p>
<p>
<a class="btn btn-primary" href="{{ cl.get_public_url }}">Back</a>
<a href="{{ cl.get_public_url }}">Return to the list view</a>
</p>
{% endblock %}

View file

@ -1,8 +1,8 @@
{% extends "ietf.html" %}
{% extends "base.html" %}
{% block pagehead %}
<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/" />
<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/" />
{% endblock %}
{% block title %}{{ cl.long_name }}{% endblock %}
@ -10,7 +10,7 @@
{% block content %}
<h1>{{ cl.long_name }}</h1>
<p>
Subscribe to notification email lists:
Subscribe to notification email list:
</p>
<ul>
<li><a href="../subscribe/">All changes email list</a></li>

View file

@ -3,45 +3,42 @@
{% with cl.get_rfcs_and_drafts as documents %}
{% with dc.get_active_fields as fields %}
<h2>Drafts</h2>
<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 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>
{% endwith %}
{% with dc.get_active_fields as fields %}
<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>
{% 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 %}
</table>
{% endwith %}
{% endwith %}

View file

@ -1,51 +1,68 @@
{% extends "ietf.html" %}
{# Copyright The IETF Trust 2010, All Rights Reserved #}
{% extends "base.html" %}
{% load ietf_filters %}
{% block title %}User settings{% endblock %}
{% block content %}
<h1>User settings</h1>
<h2>Cookie settings for the IETF datatracker</h2>
<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>
<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>
<h2>How many days is considered "new"?</h2>
<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>
<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">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>
<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 %}

View file

@ -1,23 +1,33 @@
{% extends "ietf.html" %}
{% extends "base.html" %}
{% load bootstrap3 %}
{% block title %}Add comment on {{ doc }}{% endblock %}
{% block title %}Add comment for {{ doc }}{% endblock %}
{% block morecss %}
form.add-comment #id_comment {
width: 600px;
height: 300px;
}
form.add-comment .actions {
padding-top: 20px;
}
{% endblock %}
{% block content %}
<h1>Add comment<br><small>{{ doc }}</small></h1>
<h1>Add comment on {{ doc }}</h1>
{% bootstrap_messages %}
<p>The comment will be added to the history trail.</p>
<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 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>
{% endblock %}

View file

@ -1,27 +1,36 @@
{% extends "ietf.html" %}
{% load bootstrap3 %}
{% load ietf_filters %}
{% extends "base.html" %}
{% 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<br><small>{{ doc }}</small></h1>
<h1>Approval announcement writeup for {{ doc }}</h1>
{% bootstrap_messages %}
<form action="" method="post">{% csrf_token %}
<form role="form" method="post">
{% csrf_token %}
{% bootstrap_form approval_text_form %}
<p>Sent after approval.</p>
{% 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 %}
{{ 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>
</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%}

View file

@ -1,23 +1,45 @@
{% extends "ietf.html" %}
{% extends "base.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<br><small>{{ doc }}</small></h1>
<h1>Approve Ballot for {{ doc }}</h1>
<form role="form" method="post">
{% csrf_token %}
<pre>{{ announcement }}</pre>
<div>IETF announcement:</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 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>
</form>
{% endblock %}

View file

@ -1,17 +1,19 @@
{% extends "ietf.html" %}
{% extends "base.html" %}
{% block title %}Ballot issued for {{ doc }}{% endblock %}
{% block title %}Ballot for {{ doc }} issued{% endblock %}
{% block content %}
<h1>Ballot issued<br><small>{{ doc }}</small></h1>
<h1>Ballot for {{ doc }} issued</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 %}
<a class="btn btn-default pull-right" href="{{ back_url }}">Back</a>
<div class="actions">
<a href="{{ back_url }}">Back to document</a>
</div>
{% endblock %}

View file

@ -1,22 +1,18 @@
{% extends "ietf.html" %}
{% extends "base.html" %}
{% block title %}Clear ballot for {{ doc }}{% endblock %}
{% block content %}
<h1>Clear ballot<br><small>{{ doc }}</small></h1>
<h1>Clear ballot for {{ doc }}</h1>
<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>
<form action="" method="post">{% csrf_token %}
<p>Clear the ballot for {{ doc.file_tag }}?</p>
<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>
<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>
</form>
{% endblock %}

View file

@ -1,22 +1,18 @@
{% extends "ietf.html" %}
{% extends "base.html" %}
{% block title %}Defer ballot for {{ doc }}{% endblock %}
{% block content %}
<h1>Defer ballot<br><small>{{ doc }}</small></h1>
<h1>Defer ballot for {{ doc }}</h1>
<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>
<form class="defer" action="" method="post">{% csrf_token %}
<p>Defer the ballot for {{ doc.file_tag }}?</p>
<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>
<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>
</form>
{% endblock %}

View file

@ -1,64 +1,92 @@
{% extends "ietf.html" %}
{% load bootstrap3 %}
{% extends "base.html" %}
{% block title %}Change position for {{ ad.plain_name }} on {{ doc }}{% endblock %}
{% block content %}
<h1>Change position for {{ ad.plain_name }}<br><small>{{ doc }}</small></h1>
{% 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 %}
{% bootstrap_messages %}
{% block content %}
<h1>Change position for {{ ad.plain_name }} on {{ doc }}</h1>
<div class="question">{{ ballot.ballot_type.question }}</div>
{% if ballot_deferred %}
<p class="alert alert-info">
Ballot deferred by {{ ballot_deferred.by }} on {{ ballot_deferred.time|date:"Y-m-d" }}.
</p>
<div class="ballot-deferred">Ballot deferred by {{ ballot_deferred.by }} on {{ ballot_deferred.time|date:"Y-m-d" }}.</div>
{% endif %}
<form role="form" method="post">
{% csrf_token %}
<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>
{% 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 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 }}
{% buttons %}
<button type="submit" class="btn btn-primary" name="send_mail">Save & send email</button>
<input type="submit" class="btn btn-default" value="Save">
<div class="actions">
<a href="{{ return_to_url }}">Back</a>
</div>
{{ form.return_to_url }}
{% 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 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());
{% block content_end %}
<script>
var blockingPositions = {{ blocking_positions|safe }};
</script>
<script type="text/javascript" src="/js/doc-edit-position.js"></script>
{% endblock %}

View file

@ -1,36 +1,46 @@
{% extends "ietf.html" %}
{% extends "base.html" %}
{% load bootstrap3 %}
{% load ietf_filters %}
{% block title %}Last Call text for {{ doc }}{% endblock %}
{% block title %}Last call text for {{ doc }}{% endblock %}
{% block morecss %}
form #id_last_call_text {
width: 700px;
height: 600px;
}
{% endblock %}
{% block content %}
<h1>Last call text<br><small>{{ doc }}</small></h1>
<h1>Last Call text for {{ doc }}</h1>
{% bootstrap_messages %}
<form action="" method="post">{% csrf_token %}
<form role="form" method="post">
{% csrf_token %}
{% bootstrap_form last_call_form %}
<p>{{ last_call_form.last_call_text.errors }}</p>
{% 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 %}
{{ last_call_form.last_call_text }}
{% 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 %}
<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>
</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%}

View file

@ -1,55 +1,47 @@
{% extends "ietf.html" %}
{% extends "base.html" %}
{% load ietf_filters %}
{% block title %}Send ballot position email for {{ ad }}{% endblock %}
{% block title %}Send ballot position for {{ ad }}{% endblock %}
{% block morecss %}
form.send-ballot pre {
margin: 0;
padding: 4px;
border-top: 4px solid #eee;
border-bottom: 4px solid #eee;
}
{% endblock %}
{% block content %}
<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>
<h1>Send ballot position email for {{ ad }}</h1>
<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 %}

View file

@ -1,28 +1,34 @@
{% extends "ietf.html" %}
{% load bootstrap3 %}
{% extends "base.html" %}
{% 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>
<h1>Ballot writeup and notes<br><small>{{ doc }}</small></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>
{% 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 %}
{{ 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>
</form>
{% endblock%}

View file

@ -1,37 +1,14 @@
{% load ietf_filters %}
<div class="ballot-popup">
<div class="content">
{{ ballot_content }}
</div>
<div class="actions">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">
<span aria-hidden="true">&times;</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>
{% 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>

View file

@ -1,22 +1,39 @@
{% extends "ietf.html" %}
{% extends "base.html" %}
{% load bootstrap3 %}
{% block morecss %}
.warning {
font-weight: bold;
color: #a00;
}
{% endblock %}
{% block title %}Change shepherding AD for {{titletext}}{% endblock %}
{% block title %}
Change the shepherding AD for {{titletext}}
{% endblock %}
{% block content %}
<h1>Change shepherding AD<br><small>{{titletext}}</small></h1>
<h1>Change the shepherding AD for {{titletext}}</h1>
{% 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 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>
</form>
{% endblock %}

View file

@ -1,37 +1,49 @@
{% extends "ietf.html" %}
{% extends "base.html" %}
{% load bootstrap3 %}
{% block morecss %}
.warning {
font-weight: bold;
color: #a00;
}
{% endblock %}
{% block title %}
Change document shepherd for {{ doc.name }}-{{ doc.rev }}
Change the document shepherd for {{ doc.name }}-{{ doc.rev }}
{% endblock %}
{% block pagehead %}
<link rel="stylesheet" href="/facelift/css/tokenfield-typeahead.min.css">
<link rel="stylesheet" href="/facelift/css/bootstrap-tokenfield.min.css">
<link rel="stylesheet" type="text/css" href="/css/token-input.css"></link>
{% endblock %}
{% block content %}
<h1>Change document shepherd<br><small>{{ doc.name }}-{{ doc.rev }}</small></h1>
<h1>Change the document shepherd for {{ doc.name }}-{{ doc.rev }}</h1>
<p>The shepherd needs to have a Datatracker account. A new account can be
<a href="{% url "create_account" %}">created here</a>.</p>
{% 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 %}">Back</a>
{% endbuttons %}
<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>
</form>
{% endblock %}
{% block js %}
<script src="/facelift/js/lib/typeahead.bundle.min.js"></script>
<script src="/facelift/js/lib/bootstrap-tokenfield.min.js"></script>
{% block content_end %}
<script type="text/javascript" src="/js/lib/jquery.tokeninput.js"></script>
<script type="text/javascript" src="/js/tokenized-field.js"></script>
{% endblock %}

View file

@ -1,24 +1,46 @@
{% extends "ietf.html" %}
{% extends "base.html" %}
{% load bootstrap3 %}
{% block title %}Change State: {{doc.title}}{% endblock %}
{% block title %}Change state for {{doc.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>Change state<br><small>{{doc.title}}</small></h1>
<h1>Change State: {{doc.title}}</h1>
{% bootstrap_messages %}
<p class="helptext">For help on the states, see the <a href="{{help_url}}">state table</a>.</p>
<p><a class="btn btn-info" href="{{help_url}}">Help on states</a></p>
<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 %}
<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 %}
{{ 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>
{% endblock %}

View file

@ -1,22 +1,42 @@
{% extends "ietf.html" %}
{% extends "base.html" %}
{% load bootstrap3 %}
{% block morecss %}
.warning {
font-weight: bold;
color: #a00;
}
form.edit-info #id_title {
width: 600px;
}
{% endblock %}
{% block title %}Change title for {{doc.title}}{% endblock %}
{% block title %}
Change the title for {{titletext}}
{% endblock %}
{% block content %}
<h1>Change title<br><small>{{titletext}}</small></h1>
<h1>Change the title for {{titletext}}</h1>
{% 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 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>
</form>
{% endblock %}

View file

@ -1,33 +1,40 @@
{% extends "ietf.html" %}
{% load bootstrap3 %}
{% load ietf_filters %}
{% extends "base.html" %}
{% 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<br><small>{{ charter.chartered_group.acronym }}</small></h1>
<h1>WG {{ announcement }} announcement writeup for {{ charter.chartered_group.acronym }}</h1>
{% bootstrap_messages %}
<form action="" method="post">{% csrf_token %}
<form role="form" method="post">
{% csrf_token %}
{% bootstrap_form announcement_text_form %}
{{ announcement_text_form.announcement_text }}
{% 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>
<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>
{% 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 %}
{% 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 %}
<a class="btn btn-default pull-right" href="{{ back_url }}">Back</a>
{% endbuttons %}
</form>
{% endblock%}

View file

@ -1,17 +1,38 @@
{% extends "ietf.html" %}
{% extends "base.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>
<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>
<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>
{% endblock %}

View file

@ -1,4 +1,4 @@
{% extends "ietf.html" %}
{% extends "base.html" %}
{% block title %}Ballot for {{ doc.name }} issued{% endblock %}
@ -7,7 +7,7 @@
<p>Ballot has been sent out.</p>
<div class="buttonlist">
<a class="btn btn-default" href="{% url "doc_writeup" name=doc.name %}">Back</a>
<div class="actions">
<a href="{% url "doc_writeup" name=doc.name %}">Back to writeups</a>
</div>
{% endblock %}

View file

@ -1,28 +1,30 @@
{% extends "ietf.html" %}
{% load bootstrap3 %}
{% extends "base.html" %}
{% 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>
<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 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>
</form>
{% endblock%}

View file

@ -1,24 +1,39 @@
{% extends "ietf.html" %}
{% extends "base.html" %}
{% load bootstrap3 %}
{% block morecss %}
.warning {
font-weight: bold;
color: #a00;
}
{% endblock %}
{% block title %}
Change responsible AD for {{ charter.canonical_name }}-{{ charter.rev }}
Change the responsible AD for {{ charter.canonical_name }}-{{ charter.rev }}
{% endblock %}
{% block content %}
<h1>Change responsible AD<br><small>{{ charter.canonical_name }}-{{ charter.rev }}</small></h1>
<h1>Change the responsible AD for {{ charter.canonical_name }}-{{ charter.rev }}</h1>
{% 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 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>
</form>
{% endblock %}

View file

@ -1,46 +1,77 @@
{% extends "ietf.html" %}
{% load bootstrap3 %}
{% extends "base.html" %}
{% 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><a class="btn btn-info" href="{% url "state_help" type="charter" %}">Help on states</a></p>
<p class="helptext">For help on the states, see the <a href="{% url "state_help" type="charter" %}">state table</a>.</p>
{% endif %}
<form role="form" method="post">
{% csrf_token %}
{% for field in form.visible_fields %}
{% bootstrap_field field %}
<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 %}
{% 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 %}
{% else %}
<th>{{ field.label_tag }}</th>
<td>{{ field }}
{% if field.help_text %}<div class="help">{{ field.help_text }}</div>{% endif %}
{% endif %}
{% if initial_review %}
<p class="alert alert-warning"><b>Warning:</b> Announced initial review time hasn't elapsed yet. It does so at {{ initial_review.expires }}.</p>
{{ 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 %}
{% 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 %}
{% 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>
{% 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>
</form>
{% if prev_state %}
@ -56,21 +87,10 @@
{% endif %}
{% endblock %}
{% 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();
});
{% 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>
{% endblock %}

View file

@ -1,26 +1,40 @@
{% extends "ietf.html" %}
{% extends "base.html" %}
{% load bootstrap3 %}
{% block morecss %}
form #id_content {
width: 40em;
height: 600px;
}
{% endblock %}
{% block title %}
Charter submission for {{ group.acronym }} {{ group.type.name }}
{% endblock %}
{% block content %}
<h1>Charter submission<br><small>{{ group.acronym }} {{ group.type.name }}</small></h1>
<h1>Charter submission for {{ group.acronym }} {{ group.type.name }}</h1>
{% 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 %}
<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>
</form>
{% endblock %}

View file

@ -1,22 +1,39 @@
{% extends "ietf.html" %}
{% load bootstrap3 %}
{% extends "base.html" %}
{% 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>
{% bootstrap_messages %}
<form class="approve" action="" method="post">{% csrf_token %}
<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 %}
<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>
{% endblock %}

View file

@ -1,28 +1,48 @@
{% extends "ietf.html" %}
{% load bootstrap3 %}
{% extends "base.html" %}
{% load ietf_filters %}
{% block title %}Begin IETF conflict review for {{doc_to_review.canonical_name}}-{{doc_to_review.rev}}{% endblock %}
{% 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 content %}
<h1>Begin IETF conflict review<br><small>{{doc_to_review.canonical_name}}-{{doc_to_review.rev}}</small></h1>
{% bootstrap_messages %}
<h1>Begin IETF conflict review for {{doc_to_review.canonical_name}}-{{doc_to_review.rev}}</h1>
{% if user|has_role:"Secretariat" %}
<p><a class="btn btn-info" href="{% url "state_help" type="conflict-review" %}">Help on states</a></p>
<p class="helptext">For help on the initial state choice, see the <a href="{% url "state_help" type="conflict-review" %}">state table</a>.</p>
{% endif %}
<form role="form" method="post">
{% csrf_token %}
{% bootstrap_form form %}
<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 %}
{% 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 %}
{{ 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>
</form>
{% endblock %}

View file

@ -1,28 +1,41 @@
{% extends "ietf.html" %}
{% extends "base.html" %}
{% load bootstrap3 %}
{% block morecss %}
form #id_content {
width: 40em;
height: 450px;
}
{% endblock %}
{% block title %}
Edit conflict review for {{ conflictdoc.canonical_name }}-{{ conflictdoc.rev }}
{% endblock %}
{% block content %}
<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 %}
<h1>Edit conflict review for {{ conflictdoc.canonical_name }}-{{ conflictdoc.rev }}</h1>
<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 %}

View file

@ -1,10 +1,19 @@
{% extends "ietf.html" %}
{% extends "base.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 %}

View file

@ -1,114 +1,77 @@
{% load ietf_filters %}
<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="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 %}&nbsp;<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="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>

View file

@ -1,171 +1,139 @@
{% extends "ietf.html" %}
{% extends "base.html" %}
{% load ietf_filters %}
{% block title %}{{ doc.canonical_name }}-{{ doc.rev }}{% endblock %}
{% block pagehead %}
<link rel="alternate" type="application/atom+xml" href="/feed/group-changes/{{ group.acronym }}/">
<link rel="stylesheet" type="text/css" href="/css/doc.css"></link>
{% endblock %}
{% block morecss %}
.edit { width: 1px }
{% endblock %}
{% block title %}{{ doc.title }}{% endblock %}
{% block content %}
{{ top|safe }}
{% include "doc/revisions_list.html" %}
<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 }}
<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>
{% if snapshot %}
<span class="label label-warning">Snapshot</span>
{% endif %}
</td>
</tr>
<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>
<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 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>
{% 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>
{% if ballot_summary %}
<div class="ballot-summary">
({{ ballot_summary }})
</div>
{% endif %}
{% 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 %}
{% endif %}
</td>
</tr>
{% if ballot_summary %}
<br><i>{{ ballot_summary }}</i>
{% endif %}
</td>
{% 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>
<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 colspan='2'><hr size='1' noshade /></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>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>Last updated</th>
<td class="edit"></td>
<td>{{ doc.time|date:"Y-m-d" }}</td>
</tr>
</table>
<tr><td>Last updated:</td><td> {{ doc.time|date:"Y-m-d" }}</td></tr>
<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 %}
<tr><td colspan='2'><hr size='1' noshade /></td></tr>
</table>
{% 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="links">
<a href="/feed/group-changes/{{ group.acronym }}/">Atom feed</a>
</div>
{% else %}
<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 %}
{% 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>
{% 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 %}
<h2>Charter<br><small>{{ doc.canonical_name }}-{{ doc.rev }}</small></h2>
{% 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 }}
{% if not snapshot and can_manage and chartering and group.state_id != "conclude" %}
<p><a class="btn btn-default" href="{% url "charter_submit" name=doc.name %}">Change charter text</a></p>
<a class="edit" href="{% url "charter_submit" name=doc.name %}">Change charter text</a>
{% endif %}
</h3>
{% if doc.rev != "" %}
{{ content|safe|keep_spacing|sanitize_html|wordwrap:80|safe }}
<div class="document-markup">
{{ content|safe|keep_spacing|sanitize_html|wordwrap:80|safe }}
</div>
{% endif %}
{% if not snapshot and chartering %}
<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 %}
<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>
{% 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 %}

View file

@ -1,121 +1,109 @@
{% extends "ietf.html" %}
{% extends "base.html" %}
{% load ietf_filters %}
{% block morecss %}
.edit { width: 1px }
{% endblock %}
{% block title %}{{ doc.name }}-{{ doc.rev }}{% endblock %}
{% block title %}{{ doc.title }}{% endblock %}
{% block pagehead %}
<link rel="stylesheet" type="text/css" href="/css/doc.css"></link>
{% endblock %}
{% block content %}
{{ top|safe }}
{% include "doc/revisions_list.html" %}
<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>
<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>
{% if snapshot %}
<span class="label label-warning">Snapshot</span>
{% endif %}
</td>
</tr>
<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>
<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 not snapshot and user|has_role:"Area Director,Secretariat" %}
{% 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 %}
{% 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 ballot_summary %}
<br><i>{{ ballot_summary }}</i>
{% endif %}
</td>
</tr>
{% 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 %}
<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>
</td>
</tr>
{% 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 "conflict_review_notices" name=doc.name %}">Edit</a>
{% endif %}
</td>
<td>
{{doc.notify}}
</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>Last updated</th>
<td class="edit"></td>
<td>{{ doc.time|date:"Y-m-d" }}</td>
</tr>
</table>
<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 }}
<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="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 %}
<a class="edit" href="{% url "conflict_review_submit" name=doc.name %}">Change conflict review text</a>
{% endif %}
</h3>
{% if doc.rev %}
<p>{{ content|fill:"80"|safe|linebreaksbr|keep_spacing|sanitize_html|safe }}</p>
<div class="document-markup">
{{ content|fill:"80"|safe|linebreaksbr|keep_spacing|sanitize_html|safe }}
</div>
{% endif %}
{% endblock %}

View file

@ -1,400 +1,303 @@
{% extends "ietf.html" %}
{% extends "base.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="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 %}
<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 %}" />
{% endblock %}
{% block content %}
{{ top|safe }}
<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 %})
<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 %})
{% 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 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 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 resurrected_by %}- resurrect requested by {{ resurrected_by }}{% endif %}
{% endif %}
{% if replaced_by %}
<tr>
<th>Replaced by</th>
<td class="edit"></td>
<td>
{{ replaced_by|join:", "|urlize_ietf_docs }}
</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>
<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>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>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>
<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>
{% 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 %}
{% 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>
<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>
<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>
<th>IETF conflict review</th>
<td class="edit"></td>
<td>{{ conflict_reviews|join:", "|urlize_ietf_docs }}</td>
</tr>
{% endif %}
{% if conflict_reviews %}
<tr>
<td>IETF Conflict Review:</td>
<td>{{ conflict_reviews|join:", "|urlize_ietf_docs }}</td>
</tr>
{% endif %}
<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)" }}
<tr><td colspan='2'><hr size='1' noshade /></td></tr>
{% for m in milestones %}
<span title="{{ m.desc }} ({{ m.group.acronym }} milestone)" class="milestone">{{ m.due|date:"M Y" }}</span>
{% endfor %}
<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>
{% 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>
{% for m in milestones %}
<span title="{{ m.desc }} ({{ m.group.acronym }} milestone)" class="milestone">{{ m.due|date:"M Y" }}</span>
{% 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>
</a>
</td>
</tr>
{% endif %}
{% 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>
<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>
{% endif %}
</td>
<td>
{{ doc.shepherd|default:"(None)" }}
</td>
</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 %}
{% 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 %}
<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 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 %}
{% 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>
<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>
<tr><td colspan='2'><hr size='1' noshade /></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>
{% 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>
<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 %}
<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 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 %}
{% 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 %}
<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 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 ballot_summary %}
<br><i>{{ ballot_summary }}</i>
{% endif %}
</td>
</tr>
{% 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 %}
<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>
<div class="telechat">
<a {% if can_edit %}class="editlink" href="{% url "doc_change_telechat_date" name=doc.name %}"{% endif %}>
{% 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 %}
{% 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>
<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>
{% if ballot_summary %}<div class="ballot-summary">({{ ballot_summary }})</div>{% endif %}
</td>
</tr>
<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&amp;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 }}&amp;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&amp;rid=77&amp;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 %}
<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 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 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 %}
{% if actions %}
{% for label, url in actions %}
<a class="btn btn-default btn-xs" href="{{ url }}">{{ label|capfirst_allcaps }}</a>
{% endfor %}
{% endif %}
</p>
<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&amp;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" %}
{{ 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 %}
<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>
{% 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="{{doc.href}}">{{doc.href}}</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>
<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 %}
<a {% if not author.author.invalid_address %}href="mailto:{{ author.author.address }}"{% endif %}>{{ author.author.person }} {% if not author.author.invalid_address %}&lt;{{ author.author.address }}&gt;{% endif %}</a>
{% 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>
<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 %}

View file

@ -1,110 +1,81 @@
{% extends "ietf.html" %}
{% extends "base.html" %}
{% load ietf_filters %}
{% block title %}History for {{ doc.name }}-{{ doc.rev }}{% endblock %}
{% block pagehead %}
<link rel="alternate" type="application/atom+xml" href="/feed/document-changes/{{ doc.name }}/" />
<link rel="stylesheet" type="text/css" href="/css/doc.css"></link>
<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 %}
<h2>Revision differences</h2>
<div class="ietf-box diff-tool">
<h2>Diffs</h2>
<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>
<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>
{% endif %}
<h2>Document history</h2>
{% if user|has_role:"Area Director,Secretariat,IANA,RFC Editor" %}
<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 class="history-actions">
<a class="button" href="{% url "doc_add_comment" name=doc.name %}">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>
<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 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 %}
</table>
{% endblock content %}
{% block content_end %}
<script type="text/javascript" src="/js/history.js"></script>
{% endblock content_end %}

View file

@ -1,64 +1,59 @@
{% extends "ietf.html" %}
{% extends "base.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>
<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>
<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>
Showing RFCs and active Internet-Drafts, sorted by <a href="{% url 'relationship_subset_help' subset='reference' %}">reference type</a>, then document name.
</p>
</div>
{% if numdocs %}
<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>
<div class="showmore">
Results restricted to the first 250 of {{ numdocs }} documents. <a href="?full=True">Show All</a>
</div>
{% endif %}
<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>
<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>
</div>
{% endblock %}

View file

@ -1,51 +1,54 @@
{% extends "ietf.html" %}
{% extends "base.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>
<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 %}
<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 %}
</table>
</div>
{% endblock %}

View file

@ -1,132 +1,137 @@
{% extends "ietf.html" %}
{% extends "base.html" %}
{% load ietf_filters %}
{% block morecss %}
.edit { width: 1px }
{% endblock %}
{% block title %}{{ doc.canonical_name }}-{{ doc.rev }}{% endblock %}
{% block title %}{{ doc.title }}{% endblock %}
{% block pagehead %}
<link rel="stylesheet" type="text/css" href="/css/doc.css"></link>
{% endblock %}
{% block content %}
{{ top|safe }}
{% include "doc/revisions_list.html" %}
<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>
<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>
{% 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 %}
<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>
<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 not snapshot and user|has_role:"Area Director,Secretariat" %}
<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 %}
{% 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 %}
{% if ballot_summary %}
<br><i>{{ ballot_summary }}</i>
{% endif %}
</td>
</tr>
{% endif %}
</div>
</td>
</tr>
<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>
<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>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>
{% if ballot_summary %}
<div class="ballot-summary">
({{ ballot_summary }})
</div>
{% endif %}
<tr>
<th>Last updated</th>
<td class="edit"></td>
<td>{{ doc.time|date:"Y-m-d" }}</td>
</tr>
</table>
{% endif %}
</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>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>
{% 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>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 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>
<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 doc.rev %}
{{ content|fill:"80"|safe|linebreaksbr|keep_spacing|sanitize_html|safe }}
<div class="markup_draft">
{{ content|fill:"80"|safe|linebreaksbr|keep_spacing|sanitize_html|safe }}
</div>
{% endif %}
{% endblock %}

View file

@ -1,12 +1,9 @@
{% load ietf_filters %}
<h1>{{ doc.title }}<br/>{{ name }}</h1>
<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 %}
<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 %}
</ul>
<p></p>
</div>

View file

@ -1,37 +1,28 @@
{% extends "ietf.html" %}
{% load ietf_filters %}
{% extends "base.html" %}
{% 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|capfirst_allcaps }}
{% if subtitle %}
<br><small>{{ subtitle|safe }}</small>
{% endif %}
</h2>
<h2>{{ title }}</h2>
{% for name, text, url in writeups %}
{% if text %}
<pre>{{ text|urlize }}</pre>
{% endif %}
{% if subtitle %}<p>{{ subtitle|safe }}</p>{% endif %}
<p>
{% if can_edit %}
<a href="{{ url }}" class="btn btn-primary">
{% if text %}
Edit
{% else %}
Generate
{% endif %}
{{ name|lower_allcaps }}
</a>
{% endif %}
</p>
{% endfor %}
{% 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>
{% endfor %}
{% endfor %}
{% endblock content %}

View file

@ -1,28 +1,43 @@
{% extends "ietf.html" %}
{% extends "base.html" %}
{% load bootstrap3 %}
{% block title %}Adopt {{ doc }} in Group{% endblock %}
{% block title %}Adopt {{ doc }} in group{% endblock %}
{% 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 content %}
<h1>Adopt {{ doc }} in group</h1>
<h1>Adopt {{ doc }} in Group</h1>
{% bootstrap_messages %}
<p class="intro">You can adopt this draft into a group.</p>
<p class="alert alert-info">You can adopt this draft into a group.
For a WG, the draft enters the IETF stream and the
<p class="intro">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 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 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>
{% endblock %}

View file

@ -1,22 +1,39 @@
{% extends "ietf.html" %}
{% extends "base.html" %}
{% load bootstrap3 %}
{% block morecss %}
.warning {
font-weight: bold;
color: #a00;
}
{% endblock %}
{% block title %}Change shepherding AD for {{ doc.name }}-{{ doc.rev }}{% endblock %}
{% block title %}
Change the shepherding AD for {{ doc.name }}-{{ doc.rev }}
{% endblock %}
{% block content %}
<h1>Change shepherding AD<br><small>{{ doc.name }}-{{ doc.rev }}</small></h1>
<h1>Change the shepherding AD for {{ doc.name }}-{{ doc.rev }}</h1>
{% 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 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>
</form>
{% endblock %}

View file

@ -1,22 +1,21 @@
{% extends "ietf.html" %}
{% extends "base.html" %}
{% load bootstrap3 %}
{% block title %}Change consensus for {{ doc.name }}-{{ doc.rev }}{% endblock %}
{% block title %}Change whether {{ doc.name }}-{{ doc.rev }} is the result of a consensus process{% endblock %}
{% block content %}
<h1>Change consensus<br><small>{{ doc.name }}-{{ doc.rev }}</small></h1>
<h1>Change whether {{ doc.name }}-{{ doc.rev }} is the result of a consensus process</h1>
{% 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 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>
</form>
{% endblock %}

View file

@ -1,21 +1,24 @@
{% extends "ietf.html" %}
{% extends "base.html" %}
{% load bootstrap3 %}
{% block title %}Change IANA state of {{ doc }}{% endblock %}
{% block title %}Change IANA state for {{ doc }}{% endblock %}
{% block morecss %}
form table .actions { text-align: right; padding-top: 1em; }
{% endblock %}
{% block content %}
<h1>Change IANA state<br><small>{{ doc }}</small></h1>
<h1>Change IANA state of {{ doc }}</h1>
{% 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 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>
</form>
{% endblock %}

View file

@ -1,21 +1,29 @@
{% extends "ietf.html" %}
{% load bootstrap3 %}
{% extends "base.html" %}
{% 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<br><small>{{ doc }}</small></h1>
<h1>Change intended status for {{ doc }}</h1>
{% 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 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>
</form>
{% endblock %}

View file

@ -1,39 +1,86 @@
{% extends "ietf.html" %}
{% 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"/>
{% load bootstrap3 %}
<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>');
}
{% block title %}Change documents replaced by {{ doc }}{% endblock %}
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;
});
}
{% bootstrap_messages %}
{% block pagehead %}
<link rel="stylesheet" href="/facelift/css/tokenfield-typeahead.min.css">
<link rel="stylesheet" href="/facelift/css/bootstrap-tokenfield.min.css">
setup_ajax($("#id_replaces"), $("#replaces_list"),
$("#id_replaces_search"), "{% url "doc_ajax_internet_draft" %}");
});
</script>
{% endblock %}
{% block content %}
<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 %}
<h1>Change which documents {{ doc }} replaces</h1>
<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 %}

View file

@ -1,25 +1,40 @@
{% extends "ietf.html" %}
{% extends "base.html" %}
{% load bootstrap3 %}
{% block morecss %}
form #id_content {
width: 40em;
height: 450px;
}
{% endblock %}
{% block title %}
Edit shepherd writeup for {{ doc.canonical_name }}-{{ doc.rev }}
{% endblock %}
{% block content %}
<h1>Edit shepherd writeup<br><small>{{ doc.canonical_name }}-{{ doc.rev }}</small></h1>
<h1>Edit shepherd writeup for {{ doc.canonical_name }}-{{ doc.rev }}</h1>
{% 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 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>
</form>
{% endblock %}

View file

@ -1,69 +1,86 @@
{% extends "ietf.html" %}
{% extends "base.html" %}
{% load bootstrap3 %}
{% block title %}Change state of {{ doc }}{% endblock %}
{% block title %}Change state for {{ doc }}{% endblock %}
{% 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 content %}
<h1>Change state<br><small>{{ doc }}</small></h1>
<h1>Change state of {{ doc }}</h1>
{% 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 %}
<p class="helptext">For help on the states, see the <a href="{% url "state_help" type="draft-iesg" %}">state table</a>.</p>
<form class="change-state" action="" method="post">{% csrf_token %}
<table>
{{ form.as_table }}
{% if state and state.slug == "rfcqueue" %}
<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>
<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>
{% endif %}
{% 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 %}
<tr>
<td colspan="2" class="actions">
<a href="{{ doc.get_absolute_url }}">Back</a>
<input type="submit" value="Save"/>
</td>
</tr>
</table>
</form>
{% if next_states %}
<h2>Or jump directly to</h2>
<h3>Or jump directly to</h3>
<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>
<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>
{% endif %}
{% if to_iesg_eval %}
<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>
<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>
{% endif %}
{% if prev_state %}
<h2>Or revert to previous state</h2>
<h3>Or revert to previous state</h3>
<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>
<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>
{% endif %}
{% endblock %}

View file

@ -1,20 +1,29 @@
{% extends "ietf.html" %}
{% load bootstrap3 %}
{% extends "base.html" %}
{% 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<br><small>{{ doc }}</small></h1>
<h1>Change stream for {{ doc }}</h1>
{% 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 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>
</form>
{% endblock %}

View file

@ -1,43 +1,72 @@
{% extends "ietf.html" %}
{% extends "base.html" %}
{% load bootstrap3 %}
{% block title %}Change {{ state_type.label }} for {{ doc }}{% endblock %}
{% block title %}Change {{ state_type.label }} of {{ 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 }}<br><small>{{ doc }}</small></h1>
<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>
{% if next_states %}
<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>
<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>
{% endif %}
<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 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>
{% endblock %}
{% 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);
}
});
{% 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);
});
});
</script>
{% endblock %}

View file

@ -1,22 +1,34 @@
{% extends "ietf.html" %}
{% load bootstrap3 %}
{% extends "base.html" %}
{% block title %}Edit IESG note for {{ doc.name }}{% endblock %}
{% block content %}
<h1>Edit IESG note<br><small>{{ doc.name }}</small></h1>
{% 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>
{% block morecss %}
form.edit-iesg-note #id_note {
width: 600px;
height: 150px;
}
{% endblock %}
{% block content %}
<h1>Edit IESG note for {{ doc.name }}</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>
</form>
{% endblock %}

View file

@ -1,22 +1,64 @@
{% extends "ietf.html" %}
{% extends "base.html" %}
{% load bootstrap3 %}
{% load ietf_filters %}
{% block title %}Edit info on {{ doc }}{% endblock %}
{% block title %}Edit info for {{ doc }}{% endblock %}
{% 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 content %}
<h1>Edit info<br><small>{{ doc }}</small></h1>
{% load ietf_filters %}
<h1>Edit info on {{ doc }}</h1>
{% 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 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>
</form>
{% endblock %}

View file

@ -1,15 +1,17 @@
{% extends "ietf.html" %}
{% extends "base.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 <i>last call</i> has been submitted to the secretariat.</p>
<p>Your request to issue the Last Call has been submitted to the Secretariat.</p>
<p>Note that the <i>last call</i> will not actually go out until the
<p>Note that the Last Call 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>
<a class="btn btn-default" href="{{ url }}">Back</a>
<div class="actions">
<a href="{{ url }}">Back</a>
</div>
{% endblock %}

View file

@ -1,28 +1,39 @@
{% extends "ietf.html" %}
{% extends "base.html" %}
{% load bootstrap3 %}
{% block title %}Make Last Call for {{ doc.name }}{% endblock %}
{% block title %}Make last call for {{ doc.name }}{% 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>Make last call<br><small>{{ doc.name }}</small></h1>
<h1>Make Last Call for {{ doc.name }}</h1>
{% bootstrap_messages %}
<p>Make last call for following draft:</p>
<p class="alert alert-info">
<b>Last call for:</b>
{{ doc.name }} ({{ doc.group.acronym }}) to {{ doc.intended_std_level.name }}
</p>
<div>{{ doc.file_tag }} ({{ doc.group.acronym }}) - {{ doc.intended_std_level.name }}</div>
<form role="form" method="post">
{% csrf_token %}
{% bootstrap_form form %}
<form style="margin-top:20px" action="" method="post">{% csrf_token %}
<table>
{{ form.as_table }}
</table>
{% 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 %}
<div class="actions">
<a href="{{ doc.get_absolute_url }}">Back</a>
<input type="reset" value="Reset">
<input type="submit" value="Make Last Call"/>
</div>
</form>
{% endblock %}

View file

@ -1,53 +1,46 @@
{% extends "ietf.html" %}
{% load bootstrap3 %}
{% extends "base.html" %}
{% 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<br><small>{{ doc }}</small></h1>
<h1>Request publication for {{ doc }}</h1>
{% 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>
<p>Send a publication request to the RFC Editor for {{ doc }} and move
it to the <em>{{ next_state.name }}</em> stream state.</p>
{% if not doc.intended_std_level %}
<p class="alert alert-warning">
<b>Note:</b> Intended RFC status is not set for the document.
</p>
<p class="warning">Note: Intended RFC status is not set for the document.</p>
{% endif %}
{% if doc.stream_id != "ise" and not consensus_filled_in %}
<p class="alert alert-warning">
<b>Note:</b> Consensus status is not set for the document.
</p>
<p class="warning">Note: Consensus status is not set for the document.</p>
{% endif %}
<form role="form" method="post">
{% csrf_token %}
<div class="form-group">
<label>From</label>
<input class="form-control" type="text" placeholder="{{ message.frm }}" disabled>
</div>
<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>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 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>
</form>
{% endblock %}

View file

@ -1,21 +1,19 @@
{% extends "ietf.html" %}
{% extends "base.html" %}
{% block title %}Request resurrection for {{ doc }}{% endblock %}
{% block title %}Request resurrection of {{ doc }}{% endblock %}
{% block content %}
<h1>Request resurrection<br><small>{{ doc }}</small></h1>
<h1>Request resurrection of {{ doc }}</h1>
<p>Request resurrection of the Internet-Draft {{ doc.file_tag }}?</p>
<form action="" method="post">{% csrf_token %}
<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>
<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>
<div class="actions">
<a href="{{ back_url }}">Back</a>
<input type="submit" value="Request resurrection"/>
</div>
</form>
{% endblock %}

View file

@ -1,24 +1,18 @@
{% extends "ietf.html" %}
{% extends "base.html" %}
{% block title %}Resurrect {{ doc }}{% endblock %}
{% block content %}
<form action="" method="post">{% csrf_token %}
<h1>Resurrect {{ doc }}</h1>
<p>Resurrect {{ doc.file_tag }}?</p>
<h1>Resurrect<br><small>{{ doc }}</small></h1>
<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>
<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>
<div class="actions">
<a href="{{ back_url }}">Back</a>
<input type="submit" value="Resurrect"/>
</div>
</form>
{% endblock %}

View file

@ -1,9 +1,10 @@
{% extends "ietf.html" %}
{# Copyright The IETF Trust 2007, All Rights Reserved #}
{% extends "base.html" %}
{% block title %}Posting approved I-D to RFC Editor failed{% endblock %}
{% block title %}Posting Approved Draft to RFC Editor Failed{% endblock %}
{% block content %}
<h1>Posting approved I-D to RFC Editor failed</h1>
<h1>Posting Approved Draft to RFC Editor Failed</h1>
<p>Sorry, when trying to notify the RFC Editor through HTTP, we hit an
error.</p>
@ -13,11 +14,13 @@ 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 %}

View file

@ -1,8 +1,15 @@
{% extends "ietf.html" %}
{% extends "base.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 %}

View file

@ -1,11 +1,15 @@
{% extends "ietf.html" %}
{% extends "base.html" %}
{# Copyright The IETF Trust 2007, All Rights Reserved #}
{% load ietf_filters %}
{% block pagehead %}
{% if last_call_only %}
<link rel="alternate" type="application/atom+xml" href="/feed/last-call/">
{% endif %}
{% 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; }
{% endblock %}
{% block title %}{{ title }}{% endblock %}
@ -13,41 +17,51 @@
{% block content %}
<h1>{{ title }}</h1>
<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>
{% for state, docs in grouped_docs %}
<h2 id="{{ state.slug }}">{{ state.name }}</h2>
{% 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>
<table>
<tr>
<th class="area">Area</th>
<th class="date">{% if state.slug == "lc" %}Expires at{% else %}Date{% endif %}</th>
</tr>
<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>
{% 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 %}
</table>
{% endfor %}
{% endblock %}

View file

@ -1,10 +1,15 @@
{% extends "ietf.html" %}
{% extends "base.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 %}

View file

@ -1,25 +1,43 @@
{% extends "ietf.html" %}
{% extends "base.html" %}
{% load bootstrap3 %}
{% block morecss %}
form.edit-info #id_notify {
width: 600px;
}
.warning {
font-weight: bold;
color: #a00;
}
{% endblock %}
{% block title %}
Edit notification addresses for {{titletext}}
Edit notification addresses for {{titletext}}
{% endblock %}
{% block content %}
<h1>Edit notification addresses<br><small>{{titletext}}</small></h1>
<h1>Edit notification addresses for {{titletext}}</h1>
{% 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 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>
</form>
{% endblock %}

View file

@ -1,30 +1,36 @@
{% extends "ietf.html" %}
{% extends "base.html" %}
{% load bootstrap3 %}
{% block title %}
Set Telechat Date for {{ doc.name }}
{% endblock %}
{% block title %}Set telechat date for {{ doc.name }}{% endblock %}
{% block morecss %}
form.telechat-date td.actions {
padding-top: 1em;
}
{% endblock %}
{% block content %}
<h1>Set telechat date<br><small>{{ doc.name }}</small></h1>
{% load ietf_filters %}
<h1>Set Telechat Date for {{ doc.name }}</h1>
{% 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 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>
</form>
{% if prompts %}
{% for prompt in prompts %}
{# XXX FACELIFT: check what this is #}
<div class="prompt">{{prompt}}</div>
}
{% endfor %}
<div>
{% for prompt in prompts %}
<div class="prompt">{{prompt}}</div>
{% endfor %}
</div>
{% endif %}
{% endblock %}

View file

@ -1,34 +1,78 @@
{% extends "ietf.html" %}
{% 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 %}
{% 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 %}
<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>
<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="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>
<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;">&nbsp;</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>
{% endblock content %}
{% block js %}
<script type="text/javascript" src="/js/utils.js"></script>
<script type="text/javascript" src="/js/doc-search.js"></script>
{% endblock %}

View file

@ -1,4 +1,9 @@
{% extends "ietf.html" %}
{% extends "base.html" %}
{% block morecss %}
.contents { max-width: 50em; }
.contents a { float: left; width: 7em; margin-right: 2em; }
{% endblock %}
{% block title %}Active Internet-Drafts{% endblock %}
@ -13,24 +18,19 @@ 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="buttonlist">
{% for group in groups %}
<a class="btn btn-default btn-xs" href="#{{ group.acronym }}">{{ group.acronym }}</a>
{% endfor %}
<p class="contents">
{% for group in groups %}<a 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>
<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 %}
<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 %}
{% endfor %}
{% endblock %}

View file

@ -1,4 +1,4 @@
{% extends "ietf.html" %}
{% extends "base.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 is also an <a href="{% url "index_active_drafts" %}">index of
<p>There's 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,13 +28,14 @@ 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 %}
<h2 id="{{ state.slug }}">{{ heading }} ({{ count }})</h2>
<p class="links">{{ links|safe }}</p>
<h3 id="{{ state.slug }}">{{ heading }} ({{ count }})</h3>
<p class="links">{{ links|safe }}</p>
{% endfor %}
{% endblock %}

View file

@ -1,27 +1,29 @@
{% extends "ietf.html" %}
{% extends "base.html" %}
{% block title %}Document relationships{% endblock %}
{% block title %}Document Relationships{% endblock %}
{% block morecss %}
.ietf-table .name { white-space: nowrap; padding-right: 1em; }
.ietf-table .desc { max-width: 35em; }
{% endblock %}
{% block content %}
<h1>Document relationships</h1>
<h1>Document Relationships</h1>
<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 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>
{% endblock %}

Some files were not shown because too many files have changed in this diff Show more