Refactored history snippets for general use

Moved from VersionedMaterials to SessionPresentation for the through table name
Added the abstract and most recent presentation to the documents on the group materials page
Working snapshot before building historic edu-team documents
 - Legacy-Id: 8349
This commit is contained in:
Robert Sparks 2014-09-19 21:33:30 +00:00
parent 75b94bd114
commit c3f460cbe9
12 changed files with 39 additions and 23 deletions

View file

@ -447,7 +447,11 @@ def format_history_text(text):
if text.startswith("This was part of a ballot set with:"):
full = urlize_ietf_docs(full)
full = mark_safe(keep_spacing(linebreaksbr(urlize(sanitize_html(full)))))
return format_snippet(full)
@register.filter
def format_snippet(text):
full = mark_safe(keep_spacing(linebreaksbr(urlize(sanitize_html(text)))))
snippet = truncatewords_html(full, 25)
if snippet != full:
return mark_safe(u'<div class="snippet">%s<span class="show-all">[show all]</span></div><div style="display:none" class="full">%s</div>' % (snippet, full))

View file

@ -267,7 +267,8 @@ def concluded_groups(request):
dict(group_types=group_types))
def get_group_materials(group):
return Document.objects.filter(group=group, type__in=group.features.material_types, session=None).exclude(states__slug="deleted")
# return Document.objects.filter(group=group, type__in=group.features.material_types, session=None).exclude(states__slug="deleted")
return Document.objects.filter(group=group, type__in=group.features.material_types).exclude(states__slug="deleted")
def construct_group_menu_context(request, group, selected, group_type, others):
"""Return context with info for the group menu filled in."""
@ -450,6 +451,8 @@ def materials(request, acronym, group_type=None):
if d.type not in doc_types:
doc_types[d.type] = []
doc_types[d.type].append(d)
# This needs to be better - probably looking at ScheduledSession, and perhaps ignoring future Sessions
d.last_presented = d.sessionpresentation_set.order_by('-session__meeting__date').first()
return render(request, 'group/materials.html',
construct_group_menu_context(request, group, "materials", group_type, {

View file

@ -188,7 +188,7 @@ class Migration(SchemaMigration):
'comments': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['group.Group']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'materials': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['doc.Document']", 'symmetrical': 'False', 'through': u"orm['meeting.VersionedMaterials']", 'blank': 'True'}),
'materials': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['doc.Document']", 'symmetrical': 'False', 'through': u"orm['meeting.SessionPresentation']", 'blank': 'True'}),
'meeting': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['meeting.Meeting']"}),
'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
@ -213,8 +213,8 @@ class Migration(SchemaMigration):
'time': ('django.db.models.fields.DateTimeField', [], {}),
'type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['name.TimeSlotTypeName']"})
},
u'meeting.versionedmaterials': {
'Meta': {'object_name': 'VersionedMaterials', 'db_table': "'meeting_session_materials'"},
u'meeting.sessionpresentation': {
'Meta': {'object_name': 'SessionPresentation', 'db_table': "'meeting_session_materials'"},
'doc': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['doc.Document']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'rev': ('django.db.models.fields.CharField', [], {'max_length': '16', 'blank': 'True'}),

View file

@ -4,7 +4,7 @@ from south.v2 import DataMigration
class Migration(DataMigration):
def forwards(self, orm):
for vm in orm['meeting.VersionedMaterials'].objects.all():
for vm in orm['meeting.SessionPresentation'].objects.all():
vm.rev = vm.document.rev
vm.save()
@ -185,7 +185,7 @@ class Migration(DataMigration):
'comments': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['group.Group']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'materials': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['doc.Document']", 'symmetrical': 'False', 'through': u"orm['meeting.VersionedMaterials']", 'blank': 'True'}),
'materials': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['doc.Document']", 'symmetrical': 'False', 'through': u"orm['meeting.SessionPresentation']", 'blank': 'True'}),
'meeting': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['meeting.Meeting']"}),
'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
@ -210,8 +210,8 @@ class Migration(DataMigration):
'time': ('django.db.models.fields.DateTimeField', [], {}),
'type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['name.TimeSlotTypeName']"})
},
u'meeting.versionedmaterials': {
'Meta': {'object_name': 'VersionedMaterials', 'db_table': "'meeting_session_materials'"},
u'meeting.sessionpresentation': {
'Meta': {'object_name': 'SessionPresentation', 'db_table': "'meeting_session_materials'"},
'document': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['doc.Document']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'rev': ('django.db.models.fields.CharField', [], {'max_length': '16', 'blank': 'True'}),

View file

@ -777,7 +777,7 @@ class Constraint(models.Model):
return ct1
class VersionedMaterials(models.Model):
class SessionPresentation(models.Model):
session = models.ForeignKey('Session')
document = models.ForeignKey(Document)
rev = models.CharField(verbose_name="revision", max_length=16, blank=True)
@ -811,7 +811,7 @@ class Session(models.Model):
scheduled = models.DateTimeField(null=True, blank=True)
modified = models.DateTimeField(default=datetime.datetime.now)
materials = models.ManyToManyField(Document, through=VersionedMaterials, blank=True)
materials = models.ManyToManyField(Document, through=SessionPresentation, blank=True)
resources = models.ManyToManyField(ResourceAssociation)
unique_constraints_dict = None

View file

@ -2,7 +2,7 @@ import datetime
from ietf.doc.models import Document, State
from ietf.group.models import Group
from ietf.meeting.models import Meeting, Room, TimeSlot, Session, Schedule, ScheduledSession, ResourceAssociation, VersionedMaterials
from ietf.meeting.models import Meeting, Room, TimeSlot, Session, Schedule, ScheduledSession, ResourceAssociation, SessionPresentation
from ietf.name.models import RoomResourceName
from ietf.person.models import Person
from ietf.utils.test_data import make_test_data
@ -46,15 +46,15 @@ def make_meeting_test_data():
doc = Document.objects.create(name='agenda-mars-ietf-42', type_id='agenda', title="Agenda", external_url="agenda-mars")
doc.set_state(State.objects.get(type=doc.type_id, slug="active"))
mars_session.versionedmaterials_set.add(VersionedMaterials(session=mars_session,document=doc,rev=doc.rev))
mars_session.sessionpresentation_set.add(SessionPresentation(session=mars_session,document=doc,rev=doc.rev))
doc = Document.objects.create(name='minutes-mars-ietf-42', type_id='minutes', title="Minutes", external_url="minutes-mars")
doc.set_state(State.objects.get(type=doc.type_id, slug="active"))
mars_session.versionedmaterials_set.add(VersionedMaterials(session=mars_session,document=doc,rev=doc.rev))
mars_session.sessionpresentation_set.add(SessionPresentation(session=mars_session,document=doc,rev=doc.rev))
doc = Document.objects.create(name='slides-mars-ietf-42', type_id='slides', title="Slideshow", external_url="slides-mars")
doc.set_state(State.objects.get(type=doc.type_id, slug="active"))
mars_session.versionedmaterials_set.add(VersionedMaterials(session=mars_session,document=doc,rev=doc.rev))
mars_session.sessionpresentation_set.add(SessionPresentation(session=mars_session,document=doc,rev=doc.rev))
return meeting

View file

@ -23,7 +23,7 @@ from ietf.secr.utils.meeting import get_upload_root, get_material, get_timeslot
from ietf.doc.models import Document, DocAlias, DocEvent, State, NewRevisionDocEvent
from ietf.group.models import Group
from ietf.ietfauth.utils import has_role
from ietf.meeting.models import Meeting, Session, TimeSlot, ScheduledSession, VersionedMaterials
from ietf.meeting.models import Meeting, Session, TimeSlot, ScheduledSession, SessionPresentation
from ietf.secr.proceedings.forms import EditSlideForm, InterimMeetingForm, ReplaceSlideForm, UnifiedUploadForm
from ietf.secr.proceedings.proc_utils import ( gen_acknowledgement, gen_agenda, gen_areas, gen_attendees,
gen_group_pages, gen_index, gen_irtf, gen_overview, gen_plenaries, gen_progress, gen_research,
@ -842,9 +842,9 @@ def upload_unified(request, meeting_num, acronym=None, session_id=None):
# for the current meeting (until tools support different materials for diff sessions)
if sessions:
for s in sessions:
s.materials.versionedmaterials_set.add(VersionedMaterials(session=s,document=doc,rev=doc.rev))
s.materials.sessionpresentation_set.add(SessionPresentation(session=s,document=doc,rev=doc.rev))
else:
session.materials.versionedmaterials_set.add(VersionedMaterials(session=session,document=doc,rev=doc.rev))
session.materials.sessionpresentation_set.add(SessionPresentation(session=session,document=doc,rev=doc.rev))
# create NewRevisionDocEvent instead of uploaded, per Ole
NewRevisionDocEvent.objects.create(type='new_revision',

View file

@ -77,5 +77,5 @@
{% endblock content %}
{% block content_end %}
<script type="text/javascript" src="/js/history.js"></script>
<script type="text/javascript" src="/js/snippet.js"></script>
{% endblock content_end %}

View file

@ -22,5 +22,5 @@
{% endblock %}
{% block content_end %}
<script src="/js/history.js" type="text/javascript"></script>
<script src="/js/snippet.js" type="text/javascript"></script>
{% endblock %}

View file

@ -6,6 +6,7 @@
{% block morecss %}
{{ block.super }}
.materials .edit-options { float: right; margin-left: 2em; font-style: italic; }
.materials .snippable { width:25em; }
{% endblock %}
{% block group_content %}
@ -19,15 +20,19 @@
<tr>
<th>Title</th>
<th>Rev.</th>
<th>Abstract</th>
<th>Curr. Rev.</th>
<th>Date</th>
<th>Last Presented</th>
</tr>
{% for d in docs %}
<tr class="{% cycle "evenrow" "oddrow" %}">
<td><a class="title-link" href="{% url "doc_view" name=d.name %}">{{ d.title }}</a></td>
<td class='snippable'>{{ d.abstract|format_snippet }} </td>
<td>{{ d.rev }}</td>
<td>{{ d.time|date:"Y-m-d" }}</td>
<td>{% if d.last_presented %}-{{ d.last_presented.rev }} at {{d.last_presented.session.meeting}}{% endif %}</td>
</tr>
{% endfor %}
</table>
@ -39,3 +44,7 @@
{% endif %}
{% endblock %}
{% block content_end %}
<script src="/js/snippet.js" type="text/javascript"></script>
{% endblock %}

View file

@ -154,7 +154,7 @@ table.ietf-table { border-collapse:collapse; border:1px solid #7f7f7f; }
.ietf-divider { background: #2647a0; color: white; font-size:116%; padding:0.5em 1em; }
table.history .snippet .show-all { color: blue; cursor: pointer; }
table .snippet .show-all { color: blue; cursor: pointer; }
.error-text {
font-size: 1.095em;

View file

@ -1,5 +1,5 @@
jQuery(function () {
jQuery("table.history .snippet .show-all").click(function () {
jQuery("table .snippet .show-all").click(function () {
jQuery(this).parents(".snippet").hide().siblings(".full").show();
});
});