From 1f1c4ecd776501c35e4da5439e3df9f50cc26bf7 Mon Sep 17 00:00:00 2001 From: Wesley Bomar Date: Fri, 6 Aug 2021 15:50:40 -0500 Subject: [PATCH] GH-75: Data List - Plugin: Support Label Link --- taccsite_cms/contrib/taccsite_data_list/TODO.md | 2 +- .../contrib/taccsite_data_list/cms_plugins.py | 11 +++++++++-- .../taccsite_data_list/migrations/0001_initial.py | 5 +++-- taccsite_cms/contrib/taccsite_data_list/models.py | 7 ++++++- .../taccsite_data_list/templates/data_list_item.html | 10 ++++++---- .../templates/data_list_item_key.html | 9 +++++++++ 6 files changed, 34 insertions(+), 10 deletions(-) create mode 100644 taccsite_cms/contrib/taccsite_data_list/templates/data_list_item_key.html diff --git a/taccsite_cms/contrib/taccsite_data_list/TODO.md b/taccsite_cms/contrib/taccsite_data_list/TODO.md index 11a7fe6c5..10ed2591a 100644 --- a/taccsite_cms/contrib/taccsite_data_list/TODO.md +++ b/taccsite_cms/contrib/taccsite_data_list/TODO.md @@ -1,3 +1,3 @@ # To Do -- [ ] Add missing link feature to "Data List Item" plugin. +- [ ] Support label that is link within text. → GH-306 diff --git a/taccsite_cms/contrib/taccsite_data_list/cms_plugins.py b/taccsite_cms/contrib/taccsite_data_list/cms_plugins.py index bcbb0a23f..4f280c658 100644 --- a/taccsite_cms/contrib/taccsite_data_list/cms_plugins.py +++ b/taccsite_cms/contrib/taccsite_data_list/cms_plugins.py @@ -5,6 +5,8 @@ from taccsite_cms.contrib.helpers import concat_classnames from taccsite_cms.contrib.taccsite_offset.cms_plugins import get_direction_classname +from taccsite_cms.contrib.helpers import AbstractMaxChildrenPlugin + from .models import TaccsiteDataList, TaccsiteDataListItem from .constants import ORIENTATION_DICT, TYPE_STYLE_DICT, DENSITY_DICT @@ -21,7 +23,7 @@ def get_classname(dict, value): # Plugins @plugin_pool.register_plugin -class TaccsiteDataListPlugin(CMSPluginBase): +class TaccsiteDataListPlugin(CMSPluginBase, AbstractMaxChildrenPlugin): """ Components > "Data List" Plugin https://confluence.tacc.utexas.edu/x/EiIFDg @@ -91,12 +93,17 @@ class TaccsiteDataListItemPlugin(CMSPluginBase): cache = True text_enabled = False - allow_children = False + allow_children = True + child_classes = [ + 'LinkPlugin' + ] + max_children = 1 # Only a label until we know what value will need fieldsets = [ (None, { 'fields': ( ('key', 'value'), + ('use_plugin_as_key'), ) }) ] diff --git a/taccsite_cms/contrib/taccsite_data_list/migrations/0001_initial.py b/taccsite_cms/contrib/taccsite_data_list/migrations/0001_initial.py index 2a59bc45a..2c82520b9 100644 --- a/taccsite_cms/contrib/taccsite_data_list/migrations/0001_initial.py +++ b/taccsite_cms/contrib/taccsite_data_list/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 2.2.16 on 2021-08-06 04:17 +# Generated by Django 2.2.16 on 2021-08-06 20:17 from django.db import migrations, models import django.db.models.deletion @@ -33,8 +33,9 @@ class Migration(migrations.Migration): name='TaccsiteDataListItem', fields=[ ('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, related_name='taccsite_data_list_taccsitedatalistitem', serialize=False, to='cms.CMSPlugin')), - ('key', models.CharField(help_text='The label for the item value.', max_length=50, verbose_name='Label')), + ('key', models.CharField(help_text='A label for the data value. To create a link, add a child plugin.', max_length=50, verbose_name='Label')), ('value', models.CharField(help_text='The data value.', max_length=100, verbose_name='Value')), + ('use_plugin_as_key', models.BooleanField(default=True, help_text='If a child plugin is added, and this option is checked, then the child plugin will be used (not the Label field text).', verbose_name='Support child plugin for Label')), ('attributes', djangocms_attributes_field.fields.AttributesField(default=dict)), ], options={ diff --git a/taccsite_cms/contrib/taccsite_data_list/models.py b/taccsite_cms/contrib/taccsite_data_list/models.py index ff07a26f9..4d1190647 100644 --- a/taccsite_cms/contrib/taccsite_data_list/models.py +++ b/taccsite_cms/contrib/taccsite_data_list/models.py @@ -67,7 +67,7 @@ class TaccsiteDataListItem(CMSPlugin): """ key = models.CharField( verbose_name=_('Label'), - help_text=_('The label for the item value.'), + help_text=_('A label for the data value. To create a link, add a child plugin.'), blank=False, max_length=50, ) @@ -77,6 +77,11 @@ class TaccsiteDataListItem(CMSPlugin): blank=False, max_length=100, ) + use_plugin_as_key = models.BooleanField( + verbose_name=_('Support child plugin for Label'), + help_text=_('If a child plugin is added, and this option is checked, then the child plugin will be used (not the Label field text).'), + default=True, + ) attributes = fields.AttributesField() diff --git a/taccsite_cms/contrib/taccsite_data_list/templates/data_list_item.html b/taccsite_cms/contrib/taccsite_data_list/templates/data_list_item.html index 18f53d456..0ed71f277 100644 --- a/taccsite_cms/contrib/taccsite_data_list/templates/data_list_item.html +++ b/taccsite_cms/contrib/taccsite_data_list/templates/data_list_item.html @@ -1,14 +1,16 @@ -{% load cms_tags %} - {% if parent_plugin_instance.type_style == 'dlist' %} -
{{ instance.key }}
+
+ {% include "./data_list_item_key.html" %} +
{{ instance.value }}
{% elif parent_plugin_instance.type_style == 'table' %} - {{ instance.key }} + + {% include "./data_list_item_key.html" %} + {{ instance.value }} diff --git a/taccsite_cms/contrib/taccsite_data_list/templates/data_list_item_key.html b/taccsite_cms/contrib/taccsite_data_list/templates/data_list_item_key.html new file mode 100644 index 000000000..a6cc3ad86 --- /dev/null +++ b/taccsite_cms/contrib/taccsite_data_list/templates/data_list_item_key.html @@ -0,0 +1,9 @@ +{% load cms_tags %} + +{% if instance.use_plugin_as_key and instance.child_plugin_instances|length %} + {% for plugin_instance in instance.child_plugin_instances %} + {% render_plugin plugin_instance %} + {% endfor %} +{% else %} + {{ instance.key }} +{% endif %}