diff --git a/ietf/doc/templatetags/ietf_filters.py b/ietf/doc/templatetags/ietf_filters.py index 2d03d55f4..fd9bb2df7 100644 --- a/ietf/doc/templatetags/ietf_filters.py +++ b/ietf/doc/templatetags/ietf_filters.py @@ -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'
%s[show all]
' % (snippet, full)) diff --git a/ietf/group/info.py b/ietf/group/info.py index cff40b125..4beacd9e2 100644 --- a/ietf/group/info.py +++ b/ietf/group/info.py @@ -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, { diff --git a/ietf/meeting/migrations/0019_version_materials.py b/ietf/meeting/migrations/0019_version_materials.py index c53ef7c8c..f699c6847 100644 --- a/ietf/meeting/migrations/0019_version_materials.py +++ b/ietf/meeting/migrations/0019_version_materials.py @@ -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'}), diff --git a/ietf/meeting/migrations/0020_snapshot_material_revisions.py b/ietf/meeting/migrations/0020_snapshot_material_revisions.py index 088e6a8ac..ee26a3902 100644 --- a/ietf/meeting/migrations/0020_snapshot_material_revisions.py +++ b/ietf/meeting/migrations/0020_snapshot_material_revisions.py @@ -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'}), diff --git a/ietf/meeting/models.py b/ietf/meeting/models.py index bb62596a0..6ac604027 100644 --- a/ietf/meeting/models.py +++ b/ietf/meeting/models.py @@ -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 diff --git a/ietf/meeting/test_data.py b/ietf/meeting/test_data.py index c568cbe21..e7a877f76 100644 --- a/ietf/meeting/test_data.py +++ b/ietf/meeting/test_data.py @@ -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 diff --git a/ietf/secr/proceedings/views.py b/ietf/secr/proceedings/views.py index 58636c00d..3afce1325 100644 --- a/ietf/secr/proceedings/views.py +++ b/ietf/secr/proceedings/views.py @@ -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', diff --git a/ietf/templates/doc/document_history.html b/ietf/templates/doc/document_history.html index ec50b9cee..c2de18b59 100644 --- a/ietf/templates/doc/document_history.html +++ b/ietf/templates/doc/document_history.html @@ -77,5 +77,5 @@ {% endblock content %} {% block content_end %} - + {% endblock content_end %} diff --git a/ietf/templates/group/history.html b/ietf/templates/group/history.html index 66d2b0a8d..b59871d53 100644 --- a/ietf/templates/group/history.html +++ b/ietf/templates/group/history.html @@ -22,5 +22,5 @@ {% endblock %} {% block content_end %} - + {% endblock %} diff --git a/ietf/templates/group/materials.html b/ietf/templates/group/materials.html index 221e00e1f..afa04ff3d 100644 --- a/ietf/templates/group/materials.html +++ b/ietf/templates/group/materials.html @@ -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 @@ Title - Rev. + Abstract + Curr. Rev. Date + Last Presented {% for d in docs %} {{ d.title }} + {{ d.abstract|format_snippet }} {{ d.rev }} {{ d.time|date:"Y-m-d" }} + {% if d.last_presented %}-{{ d.last_presented.rev }} at {{d.last_presented.session.meeting}}{% endif %} {% endfor %} @@ -39,3 +44,7 @@ {% endif %} {% endblock %} + +{% block content_end %} + +{% endblock %} diff --git a/static/css/base2.css b/static/css/base2.css index 1bd01acd8..1824c97d0 100644 --- a/static/css/base2.css +++ b/static/css/base2.css @@ -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; diff --git a/static/js/history.js b/static/js/snippet.js similarity index 61% rename from static/js/history.js rename to static/js/snippet.js index 3b44400e6..411af9144 100644 --- a/static/js/history.js +++ b/static/js/snippet.js @@ -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(); }); });