Merged in Lars Eggert's changes to the search page, and Henrik's lefthand-menu addition

- Legacy-Id: 1255
This commit is contained in:
Henrik Levkowetz 2008-11-18 21:36:14 +00:00
parent ce266472d4
commit 4506cb41e1
68 changed files with 1034 additions and 749 deletions

2
ietf/.gitignore vendored
View file

@ -1,3 +1 @@
/*.swp
/*.pyc
/settings_local.py

View file

@ -1,2 +1 @@
/*.pyc
/settings_local.py

1
ietf/idtracker/fixtures/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
/*.pyc

View file

@ -5,7 +5,7 @@ from models import IESGLogin, IDStatus, Area, IDState, IDSubState
class IDSearch(forms.Form):
search_job_owner = forms.ChoiceField(choices=(), required=False)
search_group_acronym = forms.CharField(widget=forms.TextInput(attrs={'size': 6, 'maxlength': 10}), required=False)
search_group_acronym = forms.CharField(widget=forms.TextInput(attrs={'size': 7, 'maxlength': 10}), required=False)
search_status_id = forms.ModelChoiceField(IDStatus.objects.all(), empty_label="--All", required=False)
search_area_acronym = forms.ModelChoiceField(Area.objects.filter(status=Area.ACTIVE), empty_label="--All/Any", required=False)
search_cur_state = forms.ModelChoiceField(IDState.objects.all(), empty_label="--All/Any", required=False)

View file

@ -1,5 +1,6 @@
# Copyright The IETF Trust 2007, All Rights Reserved
from django.conf import settings
from django.db import models
from ietf.utils import FKAsOneToOne
from django.test import TestCase
@ -117,6 +118,7 @@ class IDIntendedStatus(models.Model):
pass
class InternetDraft(models.Model):
DAYS_TO_EXPIRE=185
id_document_tag = models.AutoField(primary_key=True)
title = models.CharField(maxlength=255, db_column='id_document_name')
id_document_key = models.CharField(maxlength=255, editable=False)
@ -153,9 +155,19 @@ class InternetDraft(models.Model):
self.id_document_key = self.title.upper()
super(InternetDraft, self).save()
def displayname(self):
return "%s-%s.txt" % ( self.filename, self.revision_display() )
if self.status.status == "Replaced":
css="replaced"
else:
css="active"
return '<span class="' + css + '">' + self.filename + '</span>'
def displayname_with_link(self):
if self.status.status == "Replaced":
css="replaced"
else:
css="active"
return '<a class="' + css + '" href="%s">%s</a>' % ( self.doclink(), self.filename )
def doclink(self):
return "http://www.ietf.org/internet-drafts/%s" % ( self.displayname() )
return "http://" + settings.TOOLS_SERVER + "/html/%s" % ( self.filename )
def group_acronym(self):
return self.group.acronym
def __str__(self):
@ -176,12 +188,26 @@ class InternetDraft(models.Model):
def filename_with_link(self, text=None):
if text is None:
text=self.filename
if self.status.status != 'Active':
return text
else:
return '<a href="%s">%s</a>' % ( self.doclink(), text )
def displayname_with_link(self):
return self.filename_with_link(self.displayname())
return '<a href="%s">%s</a>' % ( self.doclink(), text )
def expiration(self):
return self.revision_date + datetime.timedelta(self.DAYS_TO_EXPIRE)
def can_expire(self):
# Copying the logic from expire-ids-1 without thinking
# much about it.
if self.review_by_rfc_editor:
return False
idinternal = self.idinternal
if idinternal:
cur_state_id = idinternal.cur_state_id
# 42 is "AD is Watching"; this matches what's in the
# expire-ids-1 perl script.
# A better way might be to add a column to the table
# saying whether or not a document is prevented from
# expiring.
if cur_state_id < 42:
return False
return True
class Meta:
db_table = "internet_drafts"
class Admin:
@ -364,7 +390,7 @@ class Rfc(models.Model):
def revision_display(self):
return "RFC"
def doclink(self):
return "http://www.ietf.org/rfc/%s" % ( self.displayname() )
return "http://" + settings.TOOLS_SERVER + "/html/%s" % ( self.displayname() )
def doctype(self):
return "RFC"
def filename_with_link(self):
@ -581,12 +607,17 @@ class DocumentComment(models.Model):
if self.created_by_id and self.created_by_id != 999:
return self.created_by.__str__()
else:
return "system"
return "(System)"
def get_username(self):
if self.created_by_id and self.created_by_id != 999:
return self.created_by.login_name
else:
return "system"
return "(System)"
def get_fullname(self):
if self.created_by_id and self.created_by_id != 999:
return self.created_by.first_name + " " + self.created_by.last_name
else:
return "(System)"
def datetime(self):
# this is just a straightforward combination, except that the time is
# stored incorrectly in the database.

View file

@ -1,2 +1 @@
/*.pyc
/settings_local.py

View file

@ -169,6 +169,11 @@ def allononeline(text):
"""Simply removes CRs, LFs, leading and trailing whitespace from the given string."""
return text.replace("\r", "").replace("\n", "").strip()
@register.filter(name='allononelinew')
def allononelinew(text):
"""Map runs of whitespace to a single space and strip leading and trailing whitespace from the given string."""
return re.sub("[\r\n\t ]+", " ", text).strip()
@register.filter(name='rfcspace')
def rfcspace(string):
"""
@ -213,9 +218,63 @@ def inpast(date):
return date < datetime.datetime.now()
return True
@register.filter(name='truncatemore')
def truncatemore(text, arg):
"""Truncate the text if longer than 'words', and if truncated,
add a link to the full text (given in 'link').
"""
from django.utils.text import truncate_words
args = arg.split(",")
if len(args) == 3:
count, link, format = args
elif len(args) == 2:
format = "[<a href='%s'>more</a>]"
count, link = args
else:
return text
try:
length = int(count)
except ValueError: # invalid literal for int()
return text # Fail silently.
if not isinstance(text, basestring):
text = str(text)
words = text.split()
if len(words) > length:
words = words[:length]
words.append(format % link)
return ' '.join(words)
@register.filter(name="wrap_long_lines")
def wrap_long_lines(text):
"""Wraps long lines without loosing the formatting and indentation
of short lines"""
if type(text) != type(""):
return text
text = re.sub(" *\r\n", "\n", text) # get rid of DOS line endings
text = re.sub(" *\r", "\n", text) # get rid of MAC line endings
text = re.sub("( *\n){3,}", "\n\n", text) # get rid of excessive vertical whitespace
lines = text.split("\n")
filled = []
wrapped = False
for line in lines:
if wrapped and line.strip() != "":
line = filled[-1] + " " + line
filled = filled[:-1]
else:
wrapped = False
while (len(line) > 80) and (" " in line[:80]):
wrapped = True
breakpoint = line.rfind(" ",0,79)
filled += [ line[:breakpoint] ]
line = line[breakpoint+1:]
filled += [ line.rstrip() ]
return "\n".join(filled)
def _test():
import doctest
doctest.testmod()
if __name__ == "__main__":
_test()

View file

@ -76,7 +76,24 @@ def search(request):
if status != '':
q_objs.append(Q(draft__status=status,rfc_flag=0))
matches = IDInternal.objects.all().filter(*q_objs)
matches = matches.order_by('cur_state', 'cur_sub_state', '-primary_flag')
matches = matches.order_by('cur_state', 'cur_sub_state', 'ballot_id', '-primary_flag')
# sort by date in reverse
# first build docstate groups, within which we sort
# in each docstate group, we build ballot id groups, which we sort
m1 = [] # list of: docstate, list of: event date; ballot id; list of: ms for the ballot id
for m in matches:
if m1 and m1[-1][0] == m.docstate():
if m1[-1][1] and m1[-1][1][0][1] == m.ballot_id:
m1[-1][1][0][2].append(m)
else:
m1[-1][1].append((m.event_date, m.ballot_id, [m]))
else:
m1.append((m.docstate(), [(m.event_date, m.ballot_id, [m])]))
matches = []
for ms in m1: ms[1].sort(reverse=True)
for ms in m1:
for mt in ms[1]:
matches.extend(mt[2])
#
# Now search by I-D exists, if there could be any results.
# If searching by job owner, current state or substate, there
@ -119,6 +136,7 @@ def search(request):
'form': form,
'matches': matches,
'searching': searching,
'spacing': True
}, context_instance=RequestContext(request))
# proof of concept, orphaned for now
@ -209,7 +227,7 @@ def view_id(request, queryset, slug, slug_field):
except IDInternal.DoesNotExist:
draft = get_object_or_404(InternetDraft, filename=slug)
return render_to_response('idtracker/idinternal_notfound.html', {'draft': draft}, context_instance=RequestContext(request))
return render_to_response('idtracker/idinternal_detail.html', {'object': object}, context_instance=RequestContext(request))
return render_to_response('idtracker/idinternal_detail.html', {'object': object, 'spacing': False}, context_instance=RequestContext(request))
def view_rfc(request, object_id):
'''A replacement for the object_detail generic view for this
@ -223,7 +241,7 @@ def view_rfc(request, object_id):
This view gets the appropriate row from IDInternal and
calls the template with the necessary context.'''
object = get_object_or_404(IDInternal, pk=object_id, rfc_flag=1)
return render_to_response('idtracker/idinternal_detail.html', {'object': object}, context_instance=RequestContext(request))
return render_to_response('idtracker/idinternal_detail.html', {'object': object, 'spacing': False}, context_instance=RequestContext(request))
# Wrappers around object_detail to give permalink a handle.
# The named-URLs feature in django 0.97 will eliminate the

View file

@ -1,2 +1 @@
/*.pyc
/settings_local.py

75
ietf/proceedings/feeds.py Normal file
View file

@ -0,0 +1,75 @@
import re
from django.contrib.syndication.feeds import Feed
from django.utils.feedgenerator import Atom1Feed
from ietf.proceedings.models import WgProceedingsActivities
from ietf.proceedings.models import Slide, WgAgenda, Proceeding
from datetime import datetime, time
from django.db import connection
class LatestWgProceedingsActivity(Feed):
feed_type = Atom1Feed
link = "/foo"
description = "foobar"
language = "en"
feed_url = "/feed/ipr/"
base_url = "http://www3.ietf.org/proceedings/"
def items(self):
objs = []
for act in WgProceedingsActivities.objects.order_by('-act_date')[:60]:
obj = {}
m = re.match("^slide, '(.*)', was uploaded$", act.activity)
if m:
obj['title'] = m.group(1)
obj['title'] = re.sub("[^ -~]+", "", obj['title'])
slides = Slide.objects.filter(meeting=act.meeting).filter(slide_name=m.group(1)).filter(group_acronym_id=act.group_acronym_id)
if len(slides) == 1:
obj['link'] = self.base_url + slides[0].file_loc()
m = re.match("^agenda was uploaded$", act.activity)
if m:
obj['title'] = "agenda";
agendas = WgAgenda.objects.filter(meeting=act.meeting).filter(group_acronym_id=act.group_acronym_id)
if len(agendas) == 1:
dir = Proceeding.objects.get(meeting_num=act.meeting).dir_name
obj['link'] = self.base_url + dir + "/agenda/" + agendas[0].filename
if len(obj) > 0:
try:
act.irtf = False
obj['group_acronym'] = act.acronym()
except:
act.irtf = True
try:
obj['group_acronym'] = act.acronym()
except:
obj['group_acronym'] = "?"
obj['date'] = datetime.combine(act.act_date, time(int(act.act_time[0:2]), int(act.act_time[3:5]), int(act.act_time[6:8])))
obj['author'] = str(act.act_by)
objs.append(obj)
return objs
def get_object(self, bits):
obj = {}
obj['title'] = "This is the title";
return obj
def title(self, obj):
return "Meeting Materials Activity"
def item_link(self, item):
if 'link' in item:
return item['link']
else:
return ""
def item_pubdate(self, item):
return item['date']
def item_author_name(self, item):
return item['author']
def item_author_email(self, item):
return None;

View file

@ -469,3 +469,23 @@ class Slide(models.Model, ResolveAcronym):
db_table = 'slides'
class Admin:
pass
class WgProceedingsActivities(models.Model, ResolveAcronym):
id = models.AutoField(primary_key=True)
group_acronym_id = models.IntegerField(null=True, blank=True)
group_acronym = models.ForeignKey(Acronym, raw_id_admin=True)
meeting = models.ForeignKey(Meeting, db_column='meeting_num')
activity = models.CharField(blank=True, maxlength=255)
act_date = models.DateField(null=True, blank=True)
act_time = models.CharField(blank=True, maxlength=100)
act_by = models.ForeignKey(PersonOrOrgInfo, db_column='act_by')
irtf = None
def __str__(self):
#return "IETF%d: %s slides (%s)" % (self.meeting_id, self.acronym(), self.activity)
return "this is WgProceedingsActivities.__str__"
class Meta:
db_table = 'wg_proceedings_activities'
class Admin:
pass

View file

@ -5,7 +5,6 @@
# http://code.djangoproject.com/wiki/SplitSettings
import os
import syslog
syslog.openlog("django", syslog.LOG_PID, syslog.LOG_LOCAL0)
@ -15,16 +14,21 @@ BASE_DIR = os.path.dirname(os.path.abspath(__file__))
DEBUG = True
TEMPLATE_DEBUG = DEBUG
# Domain name of the IETF
IETF_DOMAIN = 'ietf.org'
ADMINS = (
('IETF Django Developers', 'django-project@ietf.org'),
('IETF Django Developers', 'django-project@' + IETF_DOMAIN),
('GMail Tracker Archive', 'ietf.tracker.archive+errors@gmail.com'),
)
# Server name of the tools server
TOOLS_SERVER = 'tools.' + IETF_DOMAIN
# Override this in the settings_local.py file:
SERVER_EMAIL = 'Django Server<django-project@ietf.org>'
SERVER_EMAIL = 'Django Server <django-project@' + TOOLS_SERVER + '>'
DEFAULT_FROM_EMAIL = 'IETF Secretariat <ietf-secretariat-reply@ietf.org>'
DEFAULT_FROM_EMAIL = 'IETF Secretariat <ietf-secretariat-reply@' + IETF_DOMAIN + '>'
MANAGERS = ADMINS
@ -33,7 +37,7 @@ DATABASE_NAME = 'ietf' # Or path to database file if using sqlite3.
DATABASE_USER = 'ietf' # Not used with sqlite3.
#DATABASE_PASSWORD = 'playing' # Not used with sqlite3.
DATABASE_PORT = '' # Set to empty string for default. Not used with sqlite3.
#DATABASE_HOST = '' # Set to empty string for localhost. Not used with sqlite3.
DATABASE_HOST = '130.129.48.40' # Set to empty string for localhost. Not used with sqlite3.
# 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
@ -131,6 +135,8 @@ INSTALLED_APPS = (
'ietf.my',
'ietf.proceedings',
'ietf.redirects',
# not yet merged from the Vancouver branch
# 'ietf.wgcharter',
)
INTERNAL_IPS = (

View file

@ -1,2 +1 @@
/*.pyc
/settings_local.py

View file

@ -1,2 +1 @@
/*.pyc
/settings_local.py

View file

@ -0,0 +1,50 @@
{# Copyright The IETF Trust 2007, All Rights Reserved #}
{% extends "base.html" %}
{% block title %}IETF Announcement{% endblock %}
{% block head %}
<style type="text/css" media="all">@import "/css/base.css";</style>
{% endblock %}
{% block content %}
<div>
<form action="{% url ietf.announcements.views.send %}" method="post">
{% if form.is_valid %}{% ifequal request.POST.op "Preview" %}
<pre>
From: {{ form.clean_data.sender }}
To: {{ form.clean_data.recipient }}{% if form.clean_data.cc %}
Cc: {{ form.clean_data.cc }}{% endif %}{% if form.clean_data.bcc %}
Bcc: {{ form.clean_data.bcc }}{% endif %}{% if form.clean_data.reply_to %}
Reply-to: {{ form.clean_data.reply_to }}{% endif %}
{{ form.clean_data.body }}
</pre>
<input class="form-submit" name="op" type="submit" value="Send"/>
{% endifequal %}{% endif %}
{% for field in form %}
<div class="form-item">
{{ field.label_tag }}
{# Ideally this would go in the <lable> tag #}
{% if field.field.required %}
<span class="form-required" title="This field is required.">*</span>
{% endif %}
{{ field }}
{% if field.help_text %}
<div class="description">
{{ field.help_text }}
</div>
{% endif %}
{% if field.errors %}{{field.errors }}{% endif %}
</div>
{% endfor %}
<input class="form-submit" name="op" type="submit" value="Preview"/>
</form>
</div>
{% endblock %}

View file

@ -0,0 +1,13 @@
{# Copyright The IETF Trust 2007, All Rights Reserved #}
{% extends "base.html" %}
{% block title %}IETF Announcement{% endblock %}
{% block head %}
<style type="text/css" media="all">@import "http://cvs.drupal.org/viewvc.py/drupal/drupal/modules/system/system.css?view=co";</style>
{% endblock %}
{% block content %}
<h2>Announcement sent.</h2>
{% endblock %}

View file

@ -1,112 +0,0 @@
{# Copyright The IETF Trust 2007, All Rights Reserved #}
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>{% block title %}IETF Data{% endblock %} - WCF</title>
<style type="text/css">
@import "http://www1.tools.ietf.org/demo/www.ietf.org/v1.css";
</style>
</head><body>
<div id="leftmenu">
<div class="menulogo">
<img class="menulogo" src="/images/ietflogo2i.png" alt="IETF logo" />
</div>
<ul>
<li><a title="About the Internet Engineering Task Force">About the IETF</a>
<ul> <!--sublist for about-->
<li><a title="What is the IETF?">Overview</a></li>
<li><a title="History of the IETF, from the Education Team">IETF history</a></li>
<!-- note: this link should be changed to reflect the new struct -->
<li><a title="How an IETF standard is adopted">IETF standards process</a></li>
<!-- same as "process? -->
<!-- <li><a href="#">IETF rules</a></li> -->
<!-- I don't know of a "who's who" -->
<!-- <li><a href="#">People</a></li> -->
</ul></li><!--end about sublist-->
<li><a title="What the IETF is doing">IETF activities</a>
<ul> <!--sublist for activities-->
<li><a title="Internet Engineering Steering Group">IESG</a></li>
<li><a title="Liasons with other standards bodies">IETF Liaison Activities</a></li>
<li><a title="The Secretariat, provided by NeuStar Secretariat Services">IETF administration</a> </li>
<li><a title="IESG and IAB Nominations Committee">The NomCom</a></li>
<li><a title="IETF Working Groups">Working Groups</a></li>
<li><a title="Meetings past, present, and future">Meetings</a></li>
<li><a href="http://tools.ietf.org" >More Tools</a></li>
</ul> </li><!--end activities sublist-->
<li><a title="Documents of the IETF">Documents</a>
<ul><!--sublist for documents-->
<li><a href="/demo/www.ietf.org/documents/rfc" title="Repository of RFC documents">RFCs</a></li>
<li><a title="Internet Draft pages">Internet-Drafts</a></li>
<li><a title="Proceedings of past meetings">Proceedings</a></li>
<li><a href="/demo/www.ietf.org/submit/" title="Submit Internet Drafts">Submission</a></li>
</ul> <!--end documents sublist-->
<li><a title="Other sites having to do with the IETF">Related sites</a>
<ul> <!--begin othersites sublist-->
<li><a href="http://www.iab.org">IAB</a></li>
<li><a href="http://koi.uoregon.edu/~iaoc/">IASA</a></li>
<li><a href="http://www.rfc-editor.org/">RFC Editor</a></li>
<li><a href="http://www.iana.org/">IANA</a></li>
<li><a href="http://www.irtf.org/">IRTF</a></li>
</ul> </li><!--end the othersites sublist-->
<li>Site search:</li>
<li><form method="get" action="http://www.google.com/u/ietf">
<input name="q" size="16" maxlength="255" value="" type="text" /><br />
<input name="sa" value="Go" type="submit" />
</form>
</li>
</ul>
</div>
<div id="maincontent">
{% block content %}{% endblock %}
{% block main_content %}{% endblock %}
{% if debug %}
<div id="debug">
<h2>Queries</h2>
<p>
{{ sql_queries|length }} Queries
{% ifnotequal sql_queries|length 0 %}
(<span style="cursor: pointer;" onclick="document.getElementById('debugQueryTable').style.display='';">Show</span>)
{% endifnotequal %}
</p>
<table id="debugQueryTable" style="display: none;">
<col width="1"></col>
<col></col>
<col width="1"></col>
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">SQL</th>
<th scope="col">Time</th>
</tr>
</thead>
<tbody>
{% for query in sql_queries %}<tr class="{% cycle odd,even %}">
<td>{{ forloop.counter }}</td>
<td>{{ query.sql|escape }}</td>
<td>{{ query.time }}</td>
</tr>{% endfor %}
</tbody>
</table>
</div>
{% endif %}
</div>
<div id="footer">
The IETF is an organized activity of the <a href="http://www.isoc.org">Internet Society</a>
{% include "footer.html" %}
</div>
</body>
</html>

View file

@ -1,56 +1,43 @@
{% block doctype %}<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
{% endblock %}
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
{# Copyright The IETF Trust 2007, All Rights Reserved #}
<!-- Copyright The IETF Trust 2007, All Rights Reserved -->
<head>
<!-- Project Revision {{ revision_num }}, {{ revision_time }} -->
<title>{% block title %}IETF Data{% endblock %}{% ifnotequal server_mode "production" %} - {{ server_mode|upper }} MODE{% endifnotequal %}</title>
{% ifnotequal server_mode "production" %}
<link rel="icon" href="/images/ietf-dev-icon.bmp" />
{% else %}
<link rel="icon" href="/images/ietf-icon.bmp" />
{% endifnotequal %}
{% block head %}{% endblock %}
<style type="text/css"><!--
{% block css %}{% endblock %}
// -->
</style>
</head>
<body {% block body_attributes %}{% endblock %}>
<center>
<table border=0 cellpadding=0 cellspacing=0>
<tr>
<td><a href="http://www.ietf.org/home.html"><img src="/images/header/ietflogo_sm.gif" border="0" /></a></td>
<td><a href="http://www.ietf.org/home.html"><img src="/images/header/home11.gif" border="0" /></a></td>
<td><img src="/images/header/separator.gif" border="0" /></td>
<td><a href="http://www.ietf.org/html.charters/wg-dir.html"><img src="/images/header/wg11.gif" border="0" /></a></td>
<td><img src="/images/header/separator.gif" border="0" /></td>
<td><a href="http://www.ietf.org/meetings/meetings.html"><img src="/images/header/meetings11.gif" border="0" /></a></td>
<td><img src="/images/header/separator.gif" border="0" /></td>
<td><a href="http://www.ietf.org/proceedings_directory.html"><img src="/images/header/proceed11.gif" border="0" /></a></td>
<td><img src="/images/header/separator.gif" border="0" /></td>
<td><a href="{% url ietf.idindex.views.search %}"><img src="/images/header/id-index11.gif" border="0" /></a></td>
<td><img src="/images/header/separator.gif" border="0" /></td>
<td><a href="http://www.ietf.org/rfc.html"><img src="/images/header/rfc11.gif" border="0" /></a></td>
</tr>
</table>
</center>
{% if user.is_authenticated %}
<span style="float: right; font-size: 80%;">Logged in as {{ user }}
|
<a href="/accounts/logout/">Log Out</a></span>
{% endif %}
<hr/>
<!-- end new headers and layout -->
<div id="content">
{% block content %}{% endblock %}
{% block main_content %}{% endblock %}
</div>
{% block footer %}{% include "footer.html" %}{% endblock %}
{% include "debug.html" %}
</body>
<!-- Copyright The IETF Trust 2007, All Rights Reserved -->
<head>
<!-- Project Revision {{ revision_num }}, {{ revision_time }} -->
<title>{% block title %}IETF Data{% endblock %}{% ifnotequal server_mode "production" %} - {{ server_mode|upper }} MODE{% endifnotequal %}</title>
{% ifnotequal server_mode "production" %}
<link rel="icon" href="/images/ietf-dev-icon.bmp" />
{% else %}
<link rel="icon" href="/images/ietf-icon.bmp" />
{% endifnotequal %}
<link rel="stylesheet" href="/css/base.css" type="text/css" />
{% block head %}{% endblock %}
<style type="text/css"><!--
{% block css %}{% endblock %}
// -->
</style>
</head>
<body {% block body_attributes %}{% endblock %}>
<div id="leftmenu">
{% include "leftmenu.html" %}
</div>
<!-- end new headers and layout -->
<div id="content">
{% if user.is_authenticated %}
<span style="float: right; font-size: 80%;">Logged in as {{ user }} |
<a href="/accounts/logout/">Log Out</a></span>
{% endif %}
{% block content %}{% endblock %}
</div>
{% block footer %}{% include "footer.html" %}{% endblock %}
{% include "debug.html" %}
</body>
</html>

View file

@ -1,7 +1,7 @@
{# Copyright The IETF Trust 2007, All Rights Reserved #}
{% if debug %}
{% load ietf_filters %}
<div id="debug">
<div id="debug" style="clear: right;">
<h2>Queries</h2>
<p>
{{ sql_queries|length }} Queries ({{ sql_queries|timesum }}s)

View file

@ -1,2 +1 @@
/*.pyc
/settings_local.py

View file

@ -1,3 +1,3 @@
{# Copyright The IETF Trust 2007, All Rights Reserved #}
{% load ietf_filters %}
{{ obj.comment_text|format_textarea|truncatewords_html:"40" }}
{{ obj.comment_text|format_textarea|truncatewords_html:"20" }}

View file

@ -1,3 +1,3 @@
{# Copyright The IETF Trust 2007, All Rights Reserved #}
{% load ietf_filters %}
{{ obj.telechat_minute|escape|linebreaks|truncatewords_html:"40" }}
{{ obj.telechat_minute|escape|linebreaks|truncatewords_html:"20" }}

View file

@ -0,0 +1 @@
{{ obj.group_acronym }}: {{ obj.title|escape }}

View file

@ -1,6 +1,6 @@
{# Copyright The IETF Trust 2007, All Rights Reserved #}
<div id="footer">
<hr/>
<div style="width: 100%; height: 1em; font-size: 9pt; font-style: italic;">
<span style="float: left;">Made with <a href="http://www.djangoproject.com/">django</a></span>
<span style="float: right;">v{{ version_num }}, {{ revision_date }} - <a href="mailto:webtools@ietf.org">webtools@ietf.org</a></span>
</div>

View file

@ -1,2 +1 @@
/*.pyc
/settings_local.py

View file

@ -29,6 +29,23 @@
<b>{{ form.other_group.label_tag }}</b> {{ form.other_group }}&nbsp;
<b>{{ form.status_id.label_tag }}</b> {{ form.status_id }}</td>
</tr>
<tr>
<td colspan="2">
<table style="width:100%" cellpadding="2" cellspacing="1" border="0" bgcolor="#ffffff">
<tr>
<td><b>{{ form.sub_after_date.label_tag }}</b></td><td>{{ form.sub_after_date }}</td><td><b>{{ form.exp_after_date.label_tag }}</b></td><td>{{ form.exp_after_date }}</td>
</tr>
<tr>
<td><b>{{ form.sub_before_date.label_tag }}</b></td><td>{{ form.sub_before_date }}</td><td><b>{{ form.exp_before_date.label_tag }}</b></td><td>{{ form.exp_before_date }}</td>
</tr>
<tr>
<td><b>{{ form.sub_within_date.label_tag }}</b></td><td>{{ form.sub_within_date }}</td><td><b>{{ form.exp_within_date.label_tag }}</b></td><td>{{ form.exp_within_date }}</td>
</tr>
</table></td></tr>
<tr>
<td><b>Author:</b></td>
<td>{{ form.last_name.label_tag }} {{ form.last_name }} &nbsp;
@ -37,7 +54,17 @@
<tr><td colspan="2" align="center"><br><input type="submit" value=" Search "></td></tr>
</table>
</td></tr></table>
</form>
</center>
{% if form.errors %}
<p class="error">
Please fix the following error{{ form.errors|pluralize }} and retry your search:
{{ form.errors }}
</p>
{% endif %}
{% endif %}
{% endblock %}

View file

@ -1,2 +1 @@
/*.pyc
/settings_local.py

View file

@ -1,10 +1,9 @@
{# Copyright The IETF Trust 2007, All Rights Reserved #}
{% extends "idtracker/base.html" %}
{# Copyright The IETF Trust 2007, All Rights Reserved #}{% extends "base.html" %}
{% load ietf_filters %}
{% block title %}-- Ballot for {{ object.drafts.all.0.document.filename }}{% endblock %}
{% block idcontent %}
{% block content %}
<pre>
To: Internet Engineering Steering Group &lt;iesg@ietf.org&gt;
From: IESG Secretary &lt;iesg-secretary@ietf.org&gt;

View file

@ -1,37 +0,0 @@
{# Copyright The IETF Trust 2007, All Rights Reserved #}
<html>
<HEAD>
<!-- Project Revision {{ revision_num }}, {{ revision_time }} -->
<title>IETF I-D Tracker {% block title %}{% endblock %}{% ifnotequal server_mode "production" %} - {{ server_mode|upper }} MODE{% endifnotequal %}</title>
{% ifnotequal server_mode "production" %}
<link rel="icon" href="/images/ietf-dev-icon.bmp" />
{% else %}
<link rel="icon" href="/images/ietf-icon.bmp" />
{% endifnotequal %}
{% block head %}{% endblock %}
<STYLE TYPE="text/css">
<!--
TD {text-decoration: none; color: #000000; font: 9pt arial;}
A:Link {color: #0000ff; text-decoration:underline}
A:Hover {color: #ff0000; text-decoration:underline}
A:visited {color: #0000ff; text-decoration:underline}
.largefont {font-weight: bold; color: #000000; font: 18pt arial}
.largefont2 {color: #000000; font: 14pt verdana}
.largefont3 {color: #000000; font: 13pt verdana}
.largefont_red {font-weight: bold; color: #ff0000; font: 16pt arial}
-->
</STYLE>
</head>
<body link="blue" vlink="blue">
{% block idcontent %}
{% endblock %}
{% include "footer.html" %}
{% include "debug.html" %}
</body>
</html>

View file

@ -1,31 +1,42 @@
{# Copyright The IETF Trust 2007, All Rights Reserved #}
{% extends "idtracker/base.html" %}
{% extends "base.html" %}
{% load ietf_filters %}
{% block title %}-- comment on {{ object.document.document.filename }}{% endblock %}
{% block title %}
Comment on {{ object.document.document.filename }}
{% endblock %}
{% block idcontent %}
{% block content %}
<h1 class="first">Comment on {{ object.document.document.displayname_with_link }}</h1>
{% if object.ballot %}
<h3><font color="red">[IN IESG DISCUSSION <b>*{{ object.get_ballot_display }}*</b>]</font></h3>
{% endif %}
<table cellpadding="1" cellspacing="1" border="0">
<tr><td><b>Date and Time:</td><td>{{ object.date }}, {{ object.time }}</td></tr>
<tr><td><b>Document:</td><td>{{ object.document.document.filename }}</td></tr>
<tr><td><b>Version:</td><td>{{ object.version }}</td></tr>
<tr><td><b>Commented by:</td><td>{{ object.get_author }}</td></tr>
<table class="top">
<tr><th>Date:</th><td>{{ object.date }}, {{ object.time }}</td></tr>
<tr><th>Document:</th>
<td>{{ object.document.document.displayname_with_link }}</td>
</tr>
<tr><th>Version:</th><td>{{ object.version }}</td></tr>
<tr><th>Commented by:</th><td>{{ object.get_author }}</td></tr>
{% if object.origin_state %}
<tr><td><b>State before Comment:</td><td>{{ object.origin_state }}</td></tr>
<tr><th>State before Comment:</th><td>{{ object.origin_state }}</td></tr>
{% endif %}
{% if object.result_state %}
<tr><td><b>State after Comment:</td><td>{{ object.result_state }}</td></tr>
<tr><th>State after Comment:</th><td>{{ object.result_state }}</td></tr>
{% endif %}
<tr><td><b>Comment:</td><td>{{ object.comment_text|format_textarea }}</td></tr>
<tr><th>Comment:</th><td>
{% if object.ballot %}
<span class="{{ object.get_ballot_display }}">[IESG Evaluation {{ object.get_ballot_display|upper }}] </span>
{% endif %}
<pre>{{ object.comment_text|wrap_long_lines }}</pre></td></tr>
</table>
<center><form>
<input type="button" value="close" onClick="history.go(-1);return true">
</form></center>
<form action="."><p><input type="button" value="Back" onClick="history.go(-1)"/></p></form>
{% endblock %}

View file

@ -1,5 +1,4 @@
{# Copyright The IETF Trust 2007, All Rights Reserved #}
{% extends "base.html" %}
{# Copyright The IETF Trust 2007, All Rights Reserved #}{% extends "base.html" %}
{% block title %}Send E-Mail{% endblock %}

View file

@ -1,5 +1,4 @@
{# Copyright The IETF Trust 2007, All Rights Reserved #}
{% extends "base.html" %}
{# Copyright The IETF Trust 2007, All Rights Reserved #}{% extends "base.html" %}
{% block title %}Your email has been sent.{% endblock %}

View file

@ -1,292 +1,220 @@
{# Copyright The IETF Trust 2007, All Rights Reserved #}
{% extends "idtracker/base.html" %}
{# Copyright The IETF Trust 2007, All Rights Reserved #}{% extends "base.html" %}
{% load ietf_filters %}
{% block title %}-- {{ object.document.filename }}{% endblock %}
{% block head %}
<link rel="alternate" type="application/atom+xml" href="/feed/comments/{{ object.document.filename }}/">
<link rel="alternate" type="application/atom+xml" href="/feed/comments/{{ object.document.filename }}/"/>
{% endblock %}
{% block idcontent %}
<table width="90%" cellpading="1" cellspacing="0">
<tr>
<td bgcolor="000000">
<table width="100%" cellspacing="0" cellpading="5">
<tr bgcolor="BEBEBE" align="center">
<th colspan="2">
<div class="largefont">
Detail Info
</div>
{% if object.ballot_others.count %}
<div align="right">
<a href="#action">Action List</a>
</div>
{% endif %}
</th>
</tr>
{% block content %}
<tr bgcolor="white">
<td>
<div class="largefont3">
{{ object.document.doctype }} Name:
</div>
</td>
<h1 class="first">Detailed Information</h1>
<td>
<div class="largefont3">
{{ object.document.displayname_with_link }}
{% ifequal object.document.doctype "Draft" %}
{% ifnotequal object.document.status.status "Active" %}
({{ object.document.status.status }})
{% endifnotequal %}
{% endifequal %}
<font color="red">
{% if object.via_rfc_editor %}
(Independent submission via RFC Editor)
{% else %}
{% ifequal object.document.group_acronym "none" %}
(Individual submission)
{% else %}
(WG &lt;{{ object.document.group_acronym }}&gt; submission)
{% endifequal %}
{% endif %}
</font>
{% ifequal object.document.status.status "Replaced" %}
<br>Replaced by
{% if object.document.replaced_by.idinternal %}
<a href="{{ object.document.replaced_by.idinternal.get_absolute_url }}">
{% endif %}
{{ object.document.replaced_by.filename }}
{% if object.document.replaced_by.idinternal %}
</a>
{% endif %}
{% endifequal %}
{% if object.document.replaces_set.count %}
<br>Replaces
{% for replaces in object.document.replaces_set.all %}
{% if replaces.idinternal %}
<a href="{{ replaces.idinternal.get_absolute_url }}">
{% endif %}
{{ replaces.filename }}{% if replaces.idinternal %}</a>{% endif %}{% if not forloop.last %},{% endif %}
{% endfor %}
{% endif %}
</div>
</td>
</tr>
<!--
{% if object.ballot_others.count %}
<a href="#action">Action List</a>
{% endif %}
-->
<tr bgcolor="white">
<td>
<div class="largefont3">
IESG Discussion:
</div>
</td>
<table class="top">
<tr>
<th>
{{ object.document.doctype }} Name:
</th>
<td>
<div class="largefont3">
{% if object.ballot.ballot_issued %}
<a href="{% url ietf.idtracker.views.view_ballot object.ballot_id %}">IESG evaluation record</a>
[<a href="/idtracker/help/evaluation/">What
they mean</a>]
[<a href="/idtracker/help/ballot/">How they are
recorded</a>]
{% else %}
No IESG evaluation record
{% endif %}
</div>
</td>
</tr>
<td>
{{ object.document.displayname_with_link }}
{% ifequal object.document.doctype "Draft" %}
{% ifnotequal object.document.status.status "Active" %}
({{ object.document.status.status }})
{% endifnotequal %}
{% endifequal %}
{% if object.via_rfc_editor %}
(Independent submission via RFC Editor)
{% else %}
{% ifequal object.document.group_acronym "none" %}
(Individual submission)
{% else %}
(<a href="/idtracker/?search_group_acronym={{ object.document.group_acronym }}">{{ object.document.group_acronym|upper }}</a> WG submission)
{% endifequal %}
{% endif %}
{% ifequal object.document.status.status "Replaced" %}
Replaced by
{% if object.document.replaced_by.idinternal %}
<a href="{{ object.document.replaced_by.idinternal.get_absolute_url }}">
{% endif %}
{{ object.document.replaced_by.displayname_with_link }}
{% if object.document.replaced_by.idinternal %}
</a>
{% endif %}
{% endifequal %}
{% if object.document.replaces_set.count %}
<br>Replaces
{% for replaces in object.document.replaces_set.all %}
{% if replaces.idinternal %}
<a href="{{ replaces.idinternal.get_absolute_url }}">
{% endif %}
{{ replaces.displayname_with_link }}{% if replaces.idinternal %}</a>{% endif %}{% if not forloop.last %},{% endif %}
{% endfor %}
{% endif %}
</td>
</tr>
<tr bgcolor="white">
<td>
<div class="largefont3">
Version:
</div>
</td>
<tr>
<th>
Version:
</th>
<td>
<div class="largefont3">
{{ object.document.revision }}
</div>
</td>
</tr>
<td>
{{ object.document.revision }}
</td>
</tr>
<tr bgcolor="white">
<td>
<div class="largefont3">
Intended Status:
</div>
</td>
<tr>
<th>
Intended Status:
</th>
<td>
<div class="largefont3">
{{ object.document.intended_status }}
</div>
</td>
</tr>
<td>
{{ object.document.intended_status }}
</td>
</tr>
<tr bgcolor="white">
<td>
<div class="largefont3">
On Next Agenda?
</div>
</td>
<tr>
<th>
On Next Agenda?
</th>
<td>
<div class="largefont3">
{{ object.agenda|yesno:"Yes,No" }}
</div>
</td>
</tr>
<td>
{{ object.agenda|yesno:"Yes,No" }}
</td>
</tr>
<tr bgcolor="white">
<td>
<div class="largefont3">
Current State:
</div>
</td>
<tr>
<th>
IESG Discussion:
</th>
<td>
<div class="largefont3">
<a href="/idtracker/help/state/{{ object.cur_state_id }}/">
{{ object.cur_state }}</a>
{% if object.cur_sub_state %}
::
<a href="/idtracker/help/substate/{{ object.cur_sub_state_id }}/">
{{ object.cur_sub_state }}
</a>
{% endif %}
{% if object.rfc_flag %}
{% else %}
{% ifequal object.cur_state.state "RFC Ed Queue" %}
<a href="http://www.rfc-editor.org/queue.html#{{ object.document.filename }}">
[RFC Editor State]</a>
{% endifequal %}
{% endif %}
</div>
<a href="/idtracker/help/state/">
[Show States Table]</a>
</td>
</tr>
<td>
{% if object.ballot.ballot_issued %}
<a href="{% url ietf.idtracker.views.view_ballot object.ballot_id %}">IESG evaluation record</a>
[<a href="/idtracker/help/evaluation/">What they mean</a>]
[<a href="/idtracker/help/ballot/">How they are recorded</a>]
{% else %}
No IESG evaluation record
{% endif %}
</td>
</tr>
<tr bgcolor="white">
<td>
<div class="largefont3">
Responsible AD:
</div>
</td>
<tr>
<th>
Current State:
</th>
<td>
<div class="largefont3">
{{ object.job_owner }}
</div>
</td>
</tr>
<td>
<a title="{{ object.cur_state.description|escape|allononelinew }}" href="/idtracker/help/state/{{ object.cur_state_id }}/">
{{ object.cur_state }}</a>
{% if object.cur_sub_state %}
::
<a title="{{ object.cur_sub_state.description|escape|allononelinew }}" href="/idtracker/help/substate/{{ object.cur_sub_state_id }}/">
{{ object.cur_sub_state }}</a>
{% endif %}
{% if object.rfc_flag %}
{% else %}
{% ifequal object.cur_state.state "RFC Ed Queue" %}
<a href="http://www.rfc-editor.org/queue.html#{{ object.document.filename }}">
[RFC Editor State]</a>
{% endifequal %}
{% endif %}
<a href="/idtracker/help/state/">
[State explanations]</a>
</td>
</tr>
<tr bgcolor="white">
<td>
<div class="largefont3">
Status Date:
</div>
</td>
<tr>
<th>
Responsible AD:
</th>
<td bgcolor="white">
<div class="largefont3">
{% firstof object.status_date "&nbsp;" %}
</div>
</td>
</tr>
<td>
{{ object.job_owner }}
</td>
</tr>
<tr bgcolor="white">
<td>
<div class="largefont3">
Note:
</div>
</td>
<tr>
<th>
Status Date:
</th>
<td>
<div class="largefont3">
{# |unformat_textarea #}
{% firstof object.note &nbsp; %}
</div>
</td>
</tr>
<td>
{% firstof object.status_date "&nbsp;" %}
</td>
</tr>
<tr bgcolor="white">
<td width="20%">&nbsp;</td>
<tr>
<th>
Note:
</th>
<td>
<table cellpadding="1" cellspacing="1" border="0">
<tr>
<td>
<form action="{% url ietf.idtracker.views.search %}" method="GET">
<input type="submit" value=
"Main Menu">
</form>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
<td>
{# |unformat_textarea #}
{% firstof object.note &nbsp; %}
</td>
</tr>
<!--
<tr>
<td/>
<td>
<form action="{% url ietf.idtracker.views.search %}" method="GET">
<input type="submit" value=
"Main Menu">
</form>
</td>
</tr>
-->
</table>
{% if object.ballot_others.count %}
<a name="action"></a>
<table border="1" bgcolor="black">
<tr><td><font color="white"><h3>Actions</h3></font>
<h1>Ballot Set</h1>
{% regroup object.ballot_set by docstate as grouped %}
{% include "idtracker/search_result_table.html" %}
</td>
</tr>
</table>
{% endif %}
<h3>Comment Log <span style="font-size: 80%">[<a href="/feed/comments/{{ object.document.filename }}/">atom feed</a>]</span></h3>
<table cellpadding="1" cellspacing="1" border="0">
<tr bgcolor="#7DC189">
<th>Date</th>
<h1>Comment Log [<a href="/feed/comments/{{ object.document.filename }}/">atom feed</a>]</h1>
<table>
<tr>
<th>Version</th>
<th>Comment</th>
<th>Action</th>
<th>Who</th>
<th>Date</th>
</tr>
{% for comment in object.public_comments %}
<tr bgcolor="{% cycle #CFE1CC,#7DC189 %}">
<td>{{ comment.version }}</td>
<td>
{% if comment.ballot %}
<span class="{{ comment.get_ballot_display }}">[IESG Evaluation {{ comment.get_ballot_display|upper }}] </span>
{% endif %}
{{ comment.comment_text|removetags:"b br"|truncatewords_html:"20" }}
[<a href="{{ comment.get_absolute_url }}">more</a>]
</td>
<td>{{ comment.get_fullname }}</td>
<td>{{ comment.date }}</td>
<td align="center">{{ comment.version }}</td>
<td><font color="blue">[{{ comment.get_username }}]</font>
{% if comment.ballot %}
<font color="red">[IN IESG DISCUSSION
<b>*{{ comment.get_ballot_display }}*</b>]</font>
{% endif %} {{ comment.comment_text|format_textarea|truncatewords_html:"25" }}</td>
<!-- this form element technically belongs inside the <td>
but that actually changes the visible spacing in most
browsers, so we let layout concerns make us write
invalid HTML. -->
<form action="{{ comment.get_absolute_url }}" method="GET">
<td>
<input type="submit" value="View Detail">
</td>
</form>
</tr>
{% endfor %}
</table>
<br>
<form action="{% url ietf.idtracker.views.search %}" method="GET">
<input type="submit" value="Main Menu">
<input type="button" name="back_button" value="BACK"
onclick="history.go(-1);return true">
</form>
<p><a href="{% url ietf.idtracker.views.search %}">Main Menu</a></p>
{% endblock %}

View file

@ -1,4 +1,4 @@
{% extends "base.html" %}
{# Copyright The IETF Trust 2007, All Rights Reserved #}{% extends "base.html" %}
{% block title %}Not Found - {{ draft.filename }}{% endblock %}

View file

@ -1,101 +1,86 @@
{# Copyright The IETF Trust 2007, All Rights Reserved #}
{% extends "idtracker/base.html" %}
{% block title %}-- Search{% endblock %}
{% extends "base.html" %}
{% load ietf_filters %}
{% block title %}IETF I-D Tracker{% endblock %}
{% block idcontent %}
{% block content %}
{# does this belong here or is it better in the head? #}
<script language="javascript">
function clear_fields() {
document.search_form.search_job_owner.selectedIndex=0;
document.search_form.search_status_id.selectedIndex=0;
document.search_form.search_area_acronym.selectedIndex=0;
document.search_form.search_cur_state.selectedIndex=0;
document.search_form.sub_state_id.selectedIndex=0;
document.search_form.search_group_acronym.value = "";
document.search_form.search_filename.value = "";
document.search_form.search_rfcnumber.value = "";
return true;
}
</script>
<script type="text/javascript" language="javascript">
function clear_fields() {
document.search_form.search_job_owner.selectedIndex = 0;
document.search_form.search_status_id.selectedIndex = 0;
document.search_form.search_area_acronym.selectedIndex = 0;
document.search_form.search_cur_state.selectedIndex = 0;
document.search_form.sub_state_id.selectedIndex = 0;
document.search_form.search_group_acronym.value = "";
document.search_form.search_filename.value = "";
document.search_form.search_rfcnumber.value = "";
}
</script>
<form action="." method="GET" name="search_form">
<center>
{% if searching %}
{% else %}
<img src="/images/ietflogo2e.gif" border="0" height="137" width="280"><br>
<h1>IETF I-D TRACKER</h1>
{% endif %}
<table cellpadding="1" cellspacing="0" border="0">
<tr bgcolor="silver">
<th colspan="2">I-D - Search Criteria</th>
</tr>
<h1 class="first">IETF I-D Tracker</h1>
<form action="." method="get" name="search_form">
<table class="top">
<tr>
<td align="right"><label for="id_search_job_owner"><b>Responsible
AD:</b></label></td>
<td>{{ form.search_job_owner }}&nbsp;&nbsp;&nbsp;<label for="id_search_group_acronym">
<b>WG Acronym:</b></label>{{ form.search_group_acronym }}&nbsp;&nbsp;&nbsp;<label
for="id_search_status_id"><b>Status:</b></label>
{{ form.search_status_id }}</td>
<th><label for="id_search_job_owner">Responsible AD:</label></th>
<td>{{ form.search_job_owner }} </td>
</tr>
<tr>
<td align="right"><label for="id_search_cur_state"><b>Document
State:</b></label></td>
<td>{{ form.search_cur_state }} <label for="id_sub_state_id"><b>sub
state</b>: {{ form.sub_state_id }}</label> </td>
<th><label for="id_search_group_acronym">WG Acronym:</label></th>
<td>{{ form.search_group_acronym }} </td>
</tr>
<tr>
<td align="right"><label for=
"id_search_filename"><b>Filename:</b></label></td>
<td>{{ form.search_filename }} &nbsp;&nbsp;&nbsp; <label for=
"id_search_rfcnumber"><b>RFC Number:</b></label> {{ form.search_rfcnumber }}
&nbsp;&nbsp;&nbsp; <label for="id_search_area_acronym"><b>Area Acronym:</b></label>
{{ form.search_area_acronym }}</td>
<th><label for="id_search_area_acronym">Area Acronym:</label></th>
<td>{{ form.search_area_acronym }} </td>
</tr>
{% if form.errors %}
<tr>
<td colspan="2">Please fix the following errors and try your search again:
{{ form.errors }}</td>
<th><label for="id_search_status_id">Status:</label></th>
<td>{{ form.search_status_id }} </td>
</tr>
<tr>
<th><a href="/idtracker/help/state/">Current State:</a></th>
<td>{{ form.search_cur_state }}{{ form.sub_state_id }} </td>
</tr>
<tr>
<th><label for="id_search_filename">Draft Name:</label></th>
<td>{{ form.search_filename }} </td>
</tr>
<tr>
<th><label for="id_search_rfcnumber">RFC Number:</label></th>
<td>{{ form.search_rfcnumber }} </td>
</tr>
<tr>
<td/>
<td class="buttons">
<input type="button" value="Reset Form" onClick="clear_fields()"/>
<input type="submit" value="Search I-Ds"/>
</td>
</tr>
{% endif %}
<TR BGCOLOR="silver">
<TD ALIGN="CENTER" colspan="2"><INPUT TYPE="submit" VALUE="SEARCH" name="search_button">
<input type="button" value="Clear Fields" onClick="clear_fields();">
</TD>
</TR>
</table>
</form>
<HR>
Document States: <a href="/images/state_diagram.gif">State Diagram</a> and
<a href="/idtracker/help/state/">State Explanations</a>
{% if form.errors %}
<p class="error">
Please fix the following error{{ form.errors|pluralize }} and retry your search:
{{ form.errors }}
</p>
{% endif %}
</center>
{% if matches %}
<hr>
<b>Search Result</b><br>
{% regroup matches by docstate as grouped %}
{% include "idtracker/search_result_table.html" %}
{% else %}
{% if searching %}
<p>No matches to your query.</p>
<p class="error">No matches to your query.</p>
{% endif %}
{% endif %}
{% if matches or searching %}
<form action="." method="POST">
<input type="submit" value="Main Menu">
<input type="button" name="back_button" value="BACK" onClick="history.go(-1);return true">
</form>
<p><a href=".">Back</a></p>
{% endif %}
{% endblock %}

View file

@ -1,55 +0,0 @@
{# Copyright The IETF Trust 2007, All Rights Reserved #}
<h1 style="text-align: center; color: red;">IESG Data Tracker</h1>
<table cellpadding="1" cellspacing="0" border="0">
<form method="post">
<input type="hidden" name="command" value="search_list">
<TR BGCOLOR="silver"><Th colspan="2">I-D - Search Criteria</Th></TR>
<TR><TD colspan="2">
<table cellpadding="1" cellspacing="0" border="0">
<TR><td align="right">
<label for="id_job_owner"><B>Responsible AD:</B></label></td>
<td>{{ form.job_owner }}
&nbsp;&nbsp;&nbsp;<label for="id_group_acronym"><B>WG Acronym:</B></label>
[TBD<!-- - model needs to fix group_acronym in idform-->]
&nbsp;&nbsp;&nbsp;<label for="id_status"><B>Status:</B></label>
{{ idform.status }}</td>
</tr>
<tr><td align="right">
<label for="id_cur_state"><b>Document State:</b></label></td>
<td>{{ form.cur_state }}
<label for="id_cur_sub_state"><b>sub state</b>:
{{ form.cur_sub_state }}</label>
</td></tr>
<tr><td align="right">
<label for="id_filename"><b>Filename:</b></label></td>
<td>{{ idform.filename }}
&nbsp;&nbsp;&nbsp;
<label for="id_rfc_number"><b>RFC Number:<b></label>
{{ idform.rfc_number }}
&nbsp;&nbsp;&nbsp;
<label for="id_area_acronym"><b>Area:</b></label>
{{ form.area_acronym }}</td></tr>
<tr><td align="right">
<label for="id_note"><b>Note:</b></label>
</td><td>
{{ form.note }} (have to fix this in view)
</td></tr>
<tr><td colspan="2">
<input type="submit">
</td></tr>
</form>
</table>
<hr>
{% if matches %}
<ul>
{% for match in matches %}
<li>{{ match.filename }}</li>
{% endfor %}
</ul>
{% else %}
<p>No matches to your query.</p>
{% endif %}

View file

@ -1,38 +1,48 @@
{# Copyright The IETF Trust 2007, All Rights Reserved #}
{% load myifchanged %}
<tr bgcolor="#{% myifchanged match.ballot_id %}{% cycle F8D6F8,E2AFE2 as ballotcolor %}{% else %}{% if match.synthetic %}{% cycle ballotcolor %}{% else %}{% cyclevalue ballotcolor %}{% endif %}{% endmyifchanged %}">
{% if match.synthetic %}
<td>&nbsp;</td>
{% else %}
<!-- this form element technically belongs inside the <td>
but that actually changes the visible spacing in most
browsers, so we let layout concerns make us write
invalid HTML. -->
<form method="GET" action="{% url ietf.idtracker.views.view_id match.document.filename %}"><td><input type="submit" value="DETAIL"></td></form>
{% endif %}
<td nowrap>{% if match.primary_flag %}<li>{% else %}<dd>{% endif %}{{ match.document.filename_with_link }} ({{ match.document.intended_status }})
{# we can't do alternating row colors with CSS alone #}
<tr
bgcolor="#{% myifchanged match.ballot_id %}{% cycle F8D6F8,E2AFE2 as ballotcolor %}{% else %}{% if match.synthetic %}{% cycle ballotcolor %}{% else %}{% cyclevalue ballotcolor %}{% endif %}{% endmyifchanged %}">
<td {% if not match.primary_flag %} class="nonprimary" {% endif %} >
<a href="{% url ietf.idtracker.views.view_id match.document.filename %}">
{{ match.document.displayname }}
</a>
{% ifequal match.document.status.status "Replaced" %}
<br>&nbsp;&nbsp;&nbsp;&nbsp;Replaced by
{% if match.document.replaced_by.idinternal %}
<p class="replace">Replaced by
<!-- {% if match.document.replaced_by.idinternal %}
<a href="{% url ietf.idtracker.views.search %}?search_filename={{ match.document.replaced_by.filename }}">
{% endif %}
{{ match.document.replaced_by.filename }}
{% if match.document.replaced_by.idinternal %}
--> {{ match.document.replaced_by.displayname_with_link }}
<!-- {% if match.document.replaced_by.idinternal %}
</a>
{% endif %}
--> </p>
{% endifequal %}
{% if match.document.replaces_set.count %}
<br>&nbsp;&nbsp;&nbsp;&nbsp;Replaces
<p class="replace">Replaces
{% for replaces in match.document.replaces_set.all %}
{% if replaces.idinternal %}
<!-- {% if replaces.idinternal %}
<a href="{% url ietf.idtracker.views.search %}?search_filename={{ replaces.filename }}">
{% endif %}
{{ replaces.filename }}{% if replaces.idinternal %}</a>{% endif %}{% if not forloop.last %},{% endif %}
{% endfor %}
--> {{ replaces.displayname_with_link }}
<!-- {% if replaces.idinternal %}</a>{% endif %}{% if not forloop.last %}</p><p class="replace">{% endif %}
--> {% endfor %}</p>
{% endif %}
</td>
<td>{{ match.document.revision_display }}</td>
<td>
<a href="{{ match.document.doclink }}">{{ match.document.revision_display }}</a>
</td>
<td>{{ match.document.intended_status }}</td>
<td>{{ match.job_owner }}</td>
<td>{% firstof match.status_date "" %}</td>
<td>{{ match.event_date }}</td>
</tr>

View file

@ -1,15 +1,36 @@
{# Copyright The IETF Trust 2007, All Rights Reserved #}
{% for group in grouped %}
<h3>In State: <a href="/idtracker/help/state/{{ group.list.0.cur_state_id }}/">{{ group.list.0.cur_state }}</a>{% if group.list.0.cur_sub_state %} :: <a href="/idtracker/help/substate/{{ group.list.0.cur_sub_state_id }}/">{{ group.list.0.cur_sub_state }}</a>{% endif %}</h3>
<table bgcolor="#DFDFDF" cellspacing="0" cellpadding="0" border="0" width="800">
<tr bgcolor="#A3A3A3"><th>&nbsp;</th><th width="250">Name (Intended Status)</th><th>Ver</th><th>Responsible AD</th><th>Status Date</th><th>Modified (EST)</th></tr>
{# Same sort algorithm as I-D tracker #}
{% regroup group.list by primary_flag as primaries %}
{% for pgroup in primaries %}
{% for match in pgroup.list|dictsort:"document.filename" %}
{% include "idtracker/search_result_row.html" %}
{% endfor %}
{% endfor %}
</table>
{% endfor %}
<table>
{% for group in grouped %}
{% load ietf_filters %}
<tr>
<th {% if spacing %} class="state" {% endif %} colspan="7">
State:
<a title="{{ group.list.0.cur_state.description|escape|allononelinew }}" href="/idtracker/help/state/{{ group.list.0.cur_state_id }}/">{{ group.list.0.cur_state }}</a>
{% if group.list.0.cur_sub_state %}
:: <a title="{{ group.list.0.cur_sub_state.description|escape|allononelinew }}" href="/idtracker/help/substate/{{ group.list.0.cur_sub_state_id }}/">
{{ group.list.0.cur_sub_state }}</a>
{% endif %}
</th>
</tr>
<tr>
<th>Document</th>
<th>Version</th>
<th>Intended Status</th>
<th>Responsible AD</th>
<th>Modified</th>
</tr>
{# Same sort algorithm as I-D tracker #}
{% regroup group.list by primary_flag as primaries %}
{% for pgroup in primaries %}
{% for match in pgroup.list %}
{% include "idtracker/search_result_row.html" %}
{% endfor %}
{% endfor %}
{% endfor %}
</table>

View file

@ -1,10 +1,9 @@
{# Copyright The IETF Trust 2007, All Rights Reserved #}
{% extends "idtracker/base.html" %}
{# Copyright The IETF Trust 2007, All Rights Reserved #}{% extends "base.html" %}
{% block idcontent %}
{% block content %}
<h3>{{ state.state }}</h3>
{{ state.description|escape }}
<center><form>
<input type="button" value="close" onClick="window.close();">
<center><form action=".">
<input type="button" value="Back" onClick="history.go(-1);"/>
</form></center>
{% endblock%}

View file

@ -1,42 +1,57 @@
{# Copyright The IETF Trust 2007, All Rights Reserved #}
{% extends "idtracker/base.html" %}
{# Copyright The IETF Trust 2007, All Rights Reserved #}{% extends "base.html" %}
{% block idcontent %}
{% block content %}
<h2>Main States</h2>
<a href="/images/state_diagram.gif">[View States Diagram]</a><br>
<table cellpadding="1" cellspacing="0" border="1" width="750">
<h1 class="first">Main I-D States</h1>
<tr>
<th>State Name</th><th>Description</th><th>Next State(s)</th>
<table class="states">
<tr class="states">
<th>State <a href="/images/state_diagram.gif">[View Diagram]</a></th>
<th>Description</th>
<th>Next State(s)</th>
</tr>
<tr><td>I-D Exists</td>
<td width="700">Initial (default) state for all internet drafts. Such documents are<br>
{# XXX I-D Exists should be added to the database #}
<tr class="states">
<td>I-D Exists</td>
<td >Initial (default) state for all internet drafts. Such documents are
not being tracked by the IESG as no request has been made of the
IESG to do anything with the document.</td>
<td><ul><li> AD is watching<li> Publication Requested</ul></td></tr>
<td>
<ul class="states">
<li> AD is watching
<li> Publication Requested</ul>
</td></tr>
{% for state in states %}
<tr>
<td width="200">{{ state.state }}</td><td width="350">{{ state.description }}</td><td width="200">
<ul>
{% for next in state.nextstate.all %}
<li>{{ next.next_state.state }}
{% endfor %}
</ul>
<tr class="states">
<td class="state">{{ state.state }}</td>
<td>{{ state.description }}</td>
<td>
<ul class="states">
{% for next in state.nextstate.all %}
<li>{{ next.next_state.state }}
{% endfor %}
</ul>
</td>
</tr>
{% endfor %}
</table>
<h2>Sub States</h2>
<table cellpadding="1" cellspacing="0" border="1" width="750">
<tr><th width="250">Sub State Name</th><th>Description</th></tr>
<h1>Sub States</h1>
<table class="states">
<tr class="states"><th>Sub State Name</th><th>Description</th></tr>
{% for substate in substates %}
<tr><td>{{ substate.sub_state }}</td>
<td>{{ substate.description }}</td></tr>
<tr class="states">
<td class="state">{{ substate.sub_state }}</td>
<td>{{ substate.description }}</td>
</tr>
{% endfor %}
</table>
{% endblock %}
css

View file

@ -1,5 +1,4 @@
{# Copyright The IETF Trust 2007, All Rights Reserved #}
{% extends "base.html" %}
{# Copyright The IETF Trust 2007, All Rights Reserved #}{% extends "base.html" %}
{% block head %}{% if lastcall %}
<link rel="alternate" type="application/atom+xml" href="/feed/last-call/">

View file

@ -1,9 +1,7 @@
{# Copyright The IETF Trust 2007, All Rights Reserved #}
{% extends "idtracker/base.html" %}
{# Copyright The IETF Trust 2007, All Rights Reserved #}{% extends "base.html" %}
{% block idcontent %}
<h2>Explanation of Discusses</h2>
<hr>
{% block content %}
<h1 class="first">Explanation of Discusses</h1>
<pre>
The process that the IESG uses for recording and documenting issues
with documents is called an Evaluation. Evaluations provide a
@ -94,8 +92,8 @@ vote "no". Continued deadlock sends it back to the working group.
</pre>
<center><form>
<input type="button" value="close" onClick="window.close();">
</form></center>
<form action=".">
<input type="button" value="Back" onClick="history.go(-1);"/>
</form>
{% endblock %}

View file

@ -1,9 +1,7 @@
{# Copyright The IETF Trust 2007, All Rights Reserved #}
{% extends "idtracker/base.html" %}
{# Copyright The IETF Trust 2007, All Rights Reserved #}{% extends "base.html" %}
{% block idcontent %}
<h2>Key file</h2>
<hr>
{% block content %}
<h1 class="first">Key file</h1>
<pre>
Key to how the Secretariat has historically recorded Evaluations:
@ -18,7 +16,7 @@ Key to how the Secretariat has historically recorded Evaluations:
- a "D" in the Discuss column indicates "Defer"
</pre>
<center><form>
<input type="button" value="close" onClick="window.close();">
</form></center>
<form action=".">
<input type="button" value="Back" onClick="history.go(-1);"/>
</form>
{% endblock %}

View file

@ -1,2 +1 @@
/*.pyc
/settings_local.py

View file

@ -1,2 +1 @@
/*.pyc
/settings_local.py

View file

@ -0,0 +1,73 @@
<div class="menulogo">
<img class="menulogo" src="/images/ietflogo2i.png" alt="IETF logo" />
</div>
<ul>
<li><a title="About the Internet Engineering Task Force">About the IETF</a>
<ul> <!--sublist for about-->
<li><a href="http://www.ietf.org/overview.html" title="What is the IETF?">Overview</a></li>
<li><a href="" title="History of the IETF, from the Education Team">IETF history</a></li>
<!-- note: this link should be changed to reflect the new struct -->
<li><a href="http://www.ietf.org/IETF-Standards-Process.html" title="How an IETF standard is adopted">IETF standards process</a></li>
<!-- same as "process? -->
<!-- <li><a href="#">IETF rules</a></li> -->
<!-- I don't know of a "who's who" -->
<!-- <li><a href="#">People</a></li> -->
</ul></li><!--end about sublist-->
<li><a title="What the IETF is doing">IETF activities</a>
<ul> <!--sublist for activities-->
<li><a href="http://www.ietf.org/iesg.html" title="Internet Engineering Steering Group">IESG</a></li>
<li><a href="http://www.ietf.org/liaisonActivities.html" title="Liasons with other standards bodies">IETF Liaison Activities</a></li>
<li><a href="http://www.ietf.org/secretariat.html" title="The Secretariat">IETF administration</a> </li>
<li><a href="http://www.ietf.org/nomcom/" title="IESG and IAB Nominations Committee">The NomCom</a></li>
<li><a href="http://www.ietf.org/html.charters/wg-dir.html" title="IETF Working Groups">Working Groups</a></li>
<li><a href="http://www3.ietf.org/meetings/meetings.html" title="Meetings past, present, and future">Meetings</a></li>
</ul> </li><!--end activities sublist-->
<li><a title="Documents of the IETF">Documents</a>
<ul><!--sublist for documents-->
<li><a href="http://www.ietf.org/rfc.html" title="Repository of RFC documents">RFCs</a></li>
<li><a href="http://www.ietf.org/ID.html" title="Internet Draft pages">Internet-Drafts</a></li>
<li><a href="http://www.ietf.org/proceedings_directory.html" title="Proceedings of past meetings">Proceedings</a></li>
<li><a href="https://datatracker.ietf.org/idst/upload.cgi" title="Submit Internet Drafts">Submission</a></li>
</ul> <!--end documents sublist-->
<li><a title="Other sites having to do with the IETF">Related sites</a>
<ul> <!--begin othersites sublist-->
<li><a href="http://www.iab.org">IAB</a></li>
<li><a href="http://iaoc.ietf.org">IASA</a></li>
<li><a href="http://www.rfc-editor.org/">RFC Editor</a></li>
<li><a href="http://www.iana.org/">IANA</a></li>
<li><a href="http://www.irtf.org/">IRTF</a></li>
</ul> </li><!--end the othersites sublist-->
<li><a title="Tools, tools, tools">Various Tools</a>
<ul> <!--begin othersites sublist-->
<li><a href="http://www.ietf.org/tools.html" >Tools on www.ietf.org</a></li>
<li><a href="http://tools.ietf.org" >Tools on tools.ietf.org</a></li>
<li><a href="http://datatracker.ietf.org" >&nbsp;&nbsp;&nbsp;datatracker.ietf.org</a>
<ul>
<li><a href="/drafts" >Drafts</a></li>
<li><a href="/idtracker" >ID Tracker</a></li>
<li><a href="/iesg/telechat" >IESG Minutes</a></li>
<li><a href="/liaison" >Liaisons</a></li>
<li><a href="/ipr" >IPR Declarations</a></li>
<li><a href="/meeting/agenda" >Meeting Agenda</a></li>
<li><a href="/meeting/materials" >Meeting Materials</a></li>
<li><a href="/wgcharter/" >WG Charters</a></li>
<li><a href="" ></a></li>
</ul>
</li>
</ul> </li><!--end the othersites sublist-->
<li>Site search:</li>
<li><form method="get" action="http://www.google.com/u/ietf">
<input name="q" size="10" maxlength="255" value="" type="text" />
<input name="sa" value="Go" type="submit" />
</form>
</li>
</ul>

View file

@ -1,2 +1 @@
/*.pyc
/settings_local.py

View file

@ -1,2 +1 @@
/*.pyc
/settings_local.py

1
ietf/templates/meeting/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
/*.pyc

View file

@ -1,2 +1 @@
/*.pyc
/settings_local.py

View file

@ -0,0 +1,6 @@
The following draft will expire soon:
Filename: {{draft.filename}}
Title: {{draft.title}}
State: {{draft.idstate}}
Expires: {{expiration}} (in {{expiration|timeuntil}})

View file

@ -0,0 +1 @@
Expiration impending: {{draft.filename}}

View file

@ -0,0 +1 @@
/*.pyc

1
ietf/templates/utils/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
/*.pyc

View file

@ -1,10 +1,11 @@
# Copyright The IETF Trust 2007, All Rights Reserved
# Copyright The IETF Trust 2007, All Rights Reserved
from django.conf.urls.defaults import patterns, include, handler404, handler500
from ietf.iesg.feeds import IESGMinutes, IESGAgenda
from ietf.idtracker.feeds import DocumentComments, InLastCall
from ietf.ipr.feeds import LatestIprDisclosures
from ietf.proceedings.feeds import LatestWgProceedingsActivity
from ietf.liaisons.feeds import Liaisons
from ietf.idtracker.sitemaps import IDTrackerMap, DraftMap
@ -22,6 +23,7 @@ feeds = {
'comments': DocumentComments,
'ipr': LatestIprDisclosures,
'liaison': Liaisons,
'wg-proceedings' : LatestWgProceedingsActivity
}
sitemaps = {
@ -64,8 +66,13 @@ urlpatterns = patterns('',
(r'^review/top/(?P<page>[0-9a-f]+)/$', 'ietf.utils.views.top'),
# Google webmaster tools verification url
(r'googlea30ad1dacffb5e5b.html', 'django.views.generic.simple.direct_to_template', { 'template': 'googlea30ad1dacffb5e5b.html' })
(r'googlea30ad1dacffb5e5b.html', 'django.views.generic.simple.direct_to_template', { 'template': 'googlea30ad1dacffb5e5b.html' }),
# ekr, fluffy, wgcharter tool
(r'^wgcharter/', include('ietf.wgcharter.urls')),
# Uncomment this for pre-approval tool for initial Internet-Drafts
#(r'^wg/', include('ietf.wg.urls')),
)
if settings.SERVER_MODE in ('development', 'test'):

1
static/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
/*.pyc

1
static/css/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
/*.pyc

View file

@ -1,34 +1,188 @@
/* Copyright The IETF Trust 2007, All Rights Reserved */
body {
margin:0;
padding:0;
font-family: Arial, sans-serif;
font-size: 13px;
color: #022D66;
font-style: normal;
}
th {
padding:6px 0px 10px 30px;
line-height:1em;
font-family: Arial, sans-serif;
font-size: 1.0em;
color: #333;
}
td {text-decoration: none; color: #000000; font: 10pt arial;}
td img { whitespace: nowrap; display:inline; }
/* Links
----------------------------------------------- */
a:link, a:visited {
border-bottom:1px dotted #69f;
color:#36c;
text-decoration:none;
}
a:visited {
border-bottom-color:#969;
color:#36c;
}
a:hover {
border-bottom:1px solid #f00;
color:#f00;
}
a.noline:link, a.noline:visited, a.noline:hover {border-style:none;}
font-size: .85em;
margin: 0;
padding: 0;
background-color: white;
font-family: Verdana, Helvetica, Arial, sans-serif;
}
#content {
margin-left: 12em;
}
#content h1 {
margin-top: 2em;
padding-bottom: .25em;
font-size: 1.5em;
}
#content h1.first {
margin-top: 0em;
}
#content h2 {
font-size: 1.15em;
}
#content table, #content td, #content th {
padding: 0em;
margin: 0em;
vertical-align: top;
border-style: none;
border-width: 0em;
border-collapse: collapse;
}
#content p.replace {
padding: 0em;
margin: 0em;
padding-left: 1.5em;
}
#content td.nonprimary {
padding-left: 1.5em;
}
#content th, #content td {
text-align: left;
padding-top: 0.25em;
padding-bottom: 0.25em;
padding-left: 0.5em;
padding-right: 0.5em;
}
#content th {
font-weight: bold;
background-color: lightgray;
white-space: nowrap;
}
#content td.buttons {
text-align: right;
}
#content table.top {
background-color: lightgray;
padding: .5em;
}
#content p.error {
font-weight: bold;
color: red;
}
#content th.state {
padding-top: 2em;
font-size: 1.15em;
background-color: white;
}
#content tr.states {
border-style: solid;
border-width: 0.1em;
}
#content td.state, #content th.state {
white-space: nowrap;
}
#content ul.states {
margin-top: 0em;
padding-left: 1.25em;
list-style: square;
}
#content table {
margin-right: 1em;
}
#content .discuss {
color: red;
font-weight: bold;
}
#content .comment {
color: yellow;
font-weight: bold;
}
#content .replaced {
text-decoration: line-through;
}
#content .active {
text-decoration: none;
}
#content a.active {
text-decoration: underline;
}
#leftmenu {
float: left;
background-color: #313163;
color: #c8c8c8;
padding: 0.5em;
margin-right: 0em;
margin-right: 1em;
width: 11em;
min-width: 148px;
}
#leftmenu ul li {
list-style-type: none;
}
#leftmenu ul li a:link, #leftmenu ul li a:visited {
color: #ffffff;
text-decoration: none;
}
#leftmenu ul {
padding-left: 0;
margin-left: 0;
}
#leftmenu ul li ul {
margin-left: 1.5em;
font-size: .85em;
}
.menulogo {
text-align: center;
}
#footer {
clear: both;
margin-right: 1em;
font-size: 7pt;
font-style: italic;
}
#debug {
font-size: 7pt;
}
/*XXX announcement tool additions - may need to be new-css-i-fied? */
input {
display: block
width: 95%
}
span.form-required {
color: #FFAE00;
}
.form-item .description {
font-size: 0.85em;
}
.description {
color: #898989;
line-height: 150%;
margin-bottom: 0.75em;
}

1
static/images/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
/*.pyc

1
static/images/header/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
/*.pyc

1
static/images/nwg/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
/*.pyc

1
static/media/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
/*.pyc

1
static/media/css/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
/*.pyc

1
static/media/img/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
/*.pyc

1
static/media/img/admin/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
/*.pyc

1
static/media/js/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
/*.pyc

1
static/media/js/admin/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
/*.pyc