diff --git a/internewshid/hid/fixtures/bangladesh-refugee-crisis.json b/internewshid/hid/fixtures/bangladesh-refugee-crisis.json index aadb230adb76f6c185c89ef20fce8285ef67c891..6fc73d66070b8ab73e7132870d266b587278cdc7 100644 --- a/internewshid/hid/fixtures/bangladesh-refugee-crisis.json +++ b/internewshid/hid/fixtures/bangladesh-refugee-crisis.json @@ -302,7 +302,7 @@ "name": "feedback", "page": 1, "position": 2, - "settings": "{\"label\":\"Feedback\",\"columns\":[\"select_item\",\"created\",\"timestamp\",\"body\",\"translation\",\"category\",\"tags\",\"location\",\"gender\",\"age\",\"ennumerator\",\"source\"],\"filters\":{\"terms\":[]},\"dynamic_filters\":[\"time_range\",\"category\",\"tags\",\"gender\",\"age\",\"location\",\"ennumerator\",\"source\"],\"categories\":[\"bangladesh-refugee-crisis-sectors\"]}", + "settings": "{\"label\":\"Feedback\",\"columns\":[\"select_item\",\"timestamp\",\"body\",\"translation\",\"category\",\"tags\",\"location\",\"gender\",\"age\",\"ennumerator\",\"source\"],\"filters\":{\"terms\":[]},\"dynamic_filters\":[\"time_range\",\"category\",\"tags\",\"gender\",\"age\",\"location\",\"ennumerator\",\"source\"],\"categories\":[\"bangladesh-refugee-crisis-sectors\"]}", "tab_type": "view-and-edit-table" }, "model": "tabbed_page.tabinstance", diff --git a/internewshid/hid/tables.py b/internewshid/hid/tables.py index 71e8cc167f10963ce253eb5e78158ea4e5e9b43d..ce7160b64948afa911dfbd4bf577d0f66ae82fbc 100644 --- a/internewshid/hid/tables.py +++ b/internewshid/hid/tables.py @@ -24,18 +24,15 @@ class ItemTable(tables.Table): verbose_name=_('Select'), attrs={'td': {'class': 'col-md-1'}} ) - # Note(lukem): based on adding a bunch of new table fields, we have little - # space now on the table view. So, since we have not seen any demands from - # for this field (seems useful but anyway), we drop it for now to save - # space. Un-commenting this will bring it right back - # created = tables.columns.DateTimeColumn( - # verbose_name=_('Imported'), - # format=settings.SHORT_DATETIME_FORMAT, - # attrs={'td': {'class': 'col-md-1'}} - # ) - timestamp = tables.columns.DateTimeColumn( + + created = tables.columns.TemplateColumn( + template_name='hid/created_column.html', + verbose_name=_('Imported'), + attrs={'td': {'class': 'col-md-1'}} + ) + timestamp = tables.columns.TemplateColumn( + template_name='hid/timestamp_column.html', verbose_name=_('Created'), - format=settings.SHORT_DATETIME_FORMAT, attrs={'td': {'class': 'col-md-2'}} ) body = tables.TemplateColumn( @@ -107,20 +104,24 @@ class ItemTable(tables.Table): def render_tags(self, record, value): Template = loader.get_template('hid/tags_column.html') + context = self.context + try: tags = filter(None, [ term['name'] for term in record['terms'] if term['taxonomy'] == 'tags' ]) tags = [' '.join([x.capitalize() for x in t.split()]) for t in tags] - ctx = {'tags': ', '.join(list(filter( + context['tags'] = ', '.join(list(filter( lambda tag: tag != 'None' and tag is not None, tags - )))} + ))) except KeyError: - ctx = {'tags': []} + context['tags'] = [] - return Template.render(ctx) + context['record'] = record + + return Template.render(context.flatten()) @staticmethod def get_selected(params): diff --git a/internewshid/hid/templates/hid/age_column.html b/internewshid/hid/templates/hid/age_column.html index c5aec9cdcdb008a4524e9567d0ff5dcefb4f110c..6d9fe7ccfc4d9a1df24f508714256463f99ffd79 100644 --- a/internewshid/hid/templates/hid/age_column.html +++ b/internewshid/hid/templates/hid/age_column.html @@ -1 +1 @@ -{{ record.age }} +<a href='{% url "edit-item" item_id=record.id %}?next={{ request.path }}'>{{ record.age }}</a> diff --git a/internewshid/hid/templates/hid/created_column.html b/internewshid/hid/templates/hid/created_column.html new file mode 100644 index 0000000000000000000000000000000000000000..24361dde5188c05516f5a26e278e9021bbddd609 --- /dev/null +++ b/internewshid/hid/templates/hid/created_column.html @@ -0,0 +1 @@ +<a href='{% url "edit-item" item_id=record.id %}?next={{ request.path }}'>{{ record.created|date:"SHORT_DATETIME_FORMAT"|default:default }}</a> diff --git a/internewshid/hid/templates/hid/ennumerator_column.html b/internewshid/hid/templates/hid/ennumerator_column.html index 6dc76a4a7d0174354026b56d73143359c961b35d..197ddd6ab2c9aaf070513f1dd80721e96f571d74 100644 --- a/internewshid/hid/templates/hid/ennumerator_column.html +++ b/internewshid/hid/templates/hid/ennumerator_column.html @@ -1 +1 @@ -{{ record.ennumerator | title }} +<a href='{% url "edit-item" item_id=record.id %}?next={{ request.path }}'>{{ record.ennumerator | title }}</a> diff --git a/internewshid/hid/templates/hid/gender_column.html b/internewshid/hid/templates/hid/gender_column.html index d688b1e840b0b42b5572cb6fde1e528c63172582..eac3fc54d4db0caa37fe673c7fce49a9d75189a4 100644 --- a/internewshid/hid/templates/hid/gender_column.html +++ b/internewshid/hid/templates/hid/gender_column.html @@ -1 +1 @@ -{{ record.gender | title }} +<a href='{% url "edit-item" item_id=record.id %}?next={{ request.path }}'>{{ record.gender | title }}</a> diff --git a/internewshid/hid/templates/hid/location_column.html b/internewshid/hid/templates/hid/location_column.html index 7dfb820ad175d5c3e80a0dd680abee8ac8744bba..4162080a4898c4828607343cf1a84846b933da75 100644 --- a/internewshid/hid/templates/hid/location_column.html +++ b/internewshid/hid/templates/hid/location_column.html @@ -1 +1 @@ -{{ record.location | title }} +<a href='{% url "edit-item" item_id=record.id %}?next={{ request.path }}'>{{ record.location | title }}</a> diff --git a/internewshid/hid/templates/hid/source_column.html b/internewshid/hid/templates/hid/source_column.html index 5d958833f50d2b81641ac78c905ee9c59de34b1a..d3e6fe80f9b24bfaacd4d78faa3afc314a1b0a1f 100644 --- a/internewshid/hid/templates/hid/source_column.html +++ b/internewshid/hid/templates/hid/source_column.html @@ -1 +1 @@ -{{ record.source | title }} +<a href='{% url "edit-item" item_id=record.id %}?next={{ request.path }}'>{{ record.source | title }}</a> diff --git a/internewshid/hid/templates/hid/tags_column.html b/internewshid/hid/templates/hid/tags_column.html index 827ae20e5817ec69431141c11c44c2742ef2e8ed..ad04951be508bc59825e79df3cf0f273cdc5088c 100644 --- a/internewshid/hid/templates/hid/tags_column.html +++ b/internewshid/hid/templates/hid/tags_column.html @@ -1 +1 @@ -{{ tags }} +<a href='{% url "edit-item" item_id=record.id %}?next={{ request.path }}'>{{ tags }}</a> diff --git a/internewshid/hid/templates/hid/timestamp_column.html b/internewshid/hid/templates/hid/timestamp_column.html new file mode 100644 index 0000000000000000000000000000000000000000..ab83e050cde8923b720ba191be21dd94d79d734e --- /dev/null +++ b/internewshid/hid/templates/hid/timestamp_column.html @@ -0,0 +1 @@ +<a href='{% url "edit-item" item_id=record.id %}?next={{ request.path }}'>{{ record.timestamp|date:"SHORT_DATETIME_FORMAT"|default:default }}</a> diff --git a/internewshid/hid/tests/itemtable_tests.py b/internewshid/hid/tests/itemtable_tests.py index 36bb3deb2c3cce8d27287d72c64da88ad2b7786c..e1ad19f5681d5ae25566e27089932fba50ce83eb 100644 --- a/internewshid/hid/tests/itemtable_tests.py +++ b/internewshid/hid/tests/itemtable_tests.py @@ -1,5 +1,7 @@ import mock +from django.template import Context + from hid.constants import ITEM_TYPE_CATEGORY from hid.tables import ItemTable @@ -97,3 +99,38 @@ def test_render_category_passes_context_to_template(mock_loader): } mock_template.render.assert_called_with(context) + + +@mock.patch('hid.tables.loader') +def test_render_tags_passes_record_and_tags_to_template(mock_loader): + mock_template = mock.MagicMock() + mock_template.render = mock.MagicMock() + mock_loader.get_template = mock.MagicMock( + return_value=mock_template) + + record = { + 'terms': [ + { + 'name': 'foo', + 'taxonomy': 'tags', + }, + { + 'name': 'bar', + 'taxonomy': 'tags', + }, + { + 'name': 'baz', + 'taxonomy': 'not tags', + }, + ] + } + + table = ItemTable([], categories=None) + table.context = Context() + + table.render_tags(record, None) + + args, kwargs = mock_template.render.call_args + + assert args[0]['record'] == record + assert args[0]['tags'] == 'Foo, Bar'