Commit d99d8ebc0075922ea1ebb4b1b9772e7ed7520595
Exists in
master
and in
4 other branches
Merge pull request #103 from colab/improve_widget
Improve widget
Showing
9 changed files
with
84 additions
and
11 deletions
Show diff stats
colab/accounts/templates/accounts/user_update_form.html
| 1 | 1 | {% extends "base.html" %} |
| 2 | -{% load i18n gravatar plugins %} | |
| 2 | +{% load i18n gravatar plugins widgets_tag %} | |
| 3 | + | |
| 4 | +{% block html %} | |
| 5 | + {% import_widgets 'profile' %} | |
| 6 | + {{ block.super }} | |
| 7 | +{% endblock %} | |
| 3 | 8 | |
| 4 | 9 | {% block head_js %} |
| 5 | 10 | <script> |
| ... | ... | @@ -105,7 +110,7 @@ $(function() { |
| 105 | 110 | {% block head %} |
| 106 | 111 | {{ block.super }} |
| 107 | 112 | |
| 108 | - {% for widget in widgets %} | |
| 113 | + {% for widget in widgets_profile %} | |
| 109 | 114 | {{ widget.get_header }} |
| 110 | 115 | {% endfor %} |
| 111 | 116 | |
| ... | ... | @@ -129,7 +134,7 @@ $(function() { |
| 129 | 134 | <!-- Start of navs --> |
| 130 | 135 | <ul class="nav nav-tabs"> |
| 131 | 136 | <li class="active"><a data-toggle="pill" href="#profile">Profile</a></li> |
| 132 | - {% for widget in widgets %} | |
| 137 | + {% for widget in widgets_profile %} | |
| 133 | 138 | <li> |
| 134 | 139 | <a data-toggle="pill" href="#{{ widget.identifier }}">{{ widget.name }}</a> |
| 135 | 140 | </li> |
| ... | ... | @@ -229,7 +234,7 @@ $(function() { |
| 229 | 234 | </div> |
| 230 | 235 | </form> |
| 231 | 236 | </div> |
| 232 | - {% for widget in widgets %} | |
| 237 | + {% for widget in widgets_profile %} | |
| 233 | 238 | <div id="{{ widget.identifier }}" class="tab-pane fade"> |
| 234 | 239 | <h2>{{ widget.name }}</h2> |
| 235 | 240 | {{ widget.get_body }} | ... | ... |
colab/accounts/views.py
| ... | ... | @@ -15,7 +15,6 @@ from colab.super_archives.models import (EmailAddress, |
| 15 | 15 | EmailAddressValidation) |
| 16 | 16 | from colab.search.utils import get_collaboration_data, get_visible_threads |
| 17 | 17 | from colab.accounts.models import User |
| 18 | -from colab.widgets.widget_manager import WidgetManager | |
| 19 | 18 | |
| 20 | 19 | from .forms import (UserCreationForm, ListsForm, UserUpdateForm) |
| 21 | 20 | from .utils import mailman |
| ... | ... | @@ -43,12 +42,6 @@ class UserProfileUpdateView(UserProfileBaseMixin, UpdateView): |
| 43 | 42 | |
| 44 | 43 | return obj |
| 45 | 44 | |
| 46 | - def get_context_data(self, **kwargs): | |
| 47 | - context = {} | |
| 48 | - context['widgets'] = WidgetManager.get_widgets('profile', self.request) | |
| 49 | - context.update(kwargs) | |
| 50 | - return super(UserProfileUpdateView, self).get_context_data(**context) | |
| 51 | - | |
| 52 | 45 | |
| 53 | 46 | class UserProfileDetailView(UserProfileBaseMixin, DetailView): |
| 54 | 47 | template_name = 'accounts/user_detail.html' | ... | ... |
colab/settings.py
colab/templates/base.html
| ... | ... | @@ -0,0 +1,14 @@ |
| 1 | +from django import template | |
| 2 | +from colab.widgets.widget_manager import WidgetManager | |
| 3 | + | |
| 4 | + | |
| 5 | +register = template.Library() | |
| 6 | + | |
| 7 | + | |
| 8 | +@register.simple_tag(takes_context=True) | |
| 9 | +def import_widgets(context, area_id, widget_var=None): | |
| 10 | + if not widget_var: | |
| 11 | + widget_var = "widgets_{}".format(area_id) | |
| 12 | + context[widget_var] = WidgetManager.get_widgets(area_id, | |
| 13 | + context['request']) | |
| 14 | + return "" | ... | ... |
| ... | ... | @@ -0,0 +1,29 @@ |
| 1 | +import unittest | |
| 2 | +from mock import patch | |
| 3 | + | |
| 4 | +from colab.widgets.templatetags.widgets_tag import import_widgets | |
| 5 | +from colab.widgets.widget_manager import WidgetManager | |
| 6 | + | |
| 7 | + | |
| 8 | +class WidgetsTest(unittest.TestCase): | |
| 9 | + @patch.object(WidgetManager, 'get_widgets') | |
| 10 | + def test_import_widgets_tag(self, get_widgets): | |
| 11 | + return_list = [1, 2, 3] | |
| 12 | + get_widgets.return_value = return_list | |
| 13 | + | |
| 14 | + context = {'request': ""} | |
| 15 | + import_widgets(context, 'area') | |
| 16 | + | |
| 17 | + self.assertIn('widgets_area', context) | |
| 18 | + self.assertEquals(context['widgets_area'], return_list) | |
| 19 | + | |
| 20 | + @patch.object(WidgetManager, 'get_widgets') | |
| 21 | + def test_import_widgets_tag_with_named_var(self, get_widgets): | |
| 22 | + return_list = [1, 2, 3] | |
| 23 | + get_widgets.return_value = return_list | |
| 24 | + | |
| 25 | + context = {'request': ""} | |
| 26 | + import_widgets(context, 'area', 'var') | |
| 27 | + | |
| 28 | + self.assertIn('var', context) | |
| 29 | + self.assertEquals(context['var'], return_list) | ... | ... |
docs/source/dev.rst
| ... | ... | @@ -48,3 +48,32 @@ Example Widget: |
| 48 | 48 | self.content = processed_content |
| 49 | 49 | |
| 50 | 50 | To add the widget in a view check the Widgets section in User Documentation. |
| 51 | +To use a widget in the templates, you have to use the ``import_widget`` tag inside the ``html`` block. | |
| 52 | +You can also set the variable that the widgets of an area will be imported. | |
| 53 | +Or you can use the default name, which is ``widgets_area_name``. | |
| 54 | +For example, in the ``profile`` area the variable name is ``widgets_profile``. | |
| 55 | +This variable will be inserted directly in the page ``context``. | |
| 56 | + | |
| 57 | +.. code-block:: python | |
| 58 | + | |
| 59 | + {% load widgets_tag %} | |
| 60 | + | |
| 61 | + {% block html %} | |
| 62 | + {% import_widgets 'profile' %} | |
| 63 | + {{ block.super }} | |
| 64 | + {% endblock %} | |
| 65 | + | |
| 66 | + {# example of how to use #} | |
| 67 | + {% block head %} | |
| 68 | + {{ block.super }} | |
| 69 | + | |
| 70 | + {% for widget in widgets_profile %} | |
| 71 | + {{ widget.get_header }} | |
| 72 | + {% endfor %} | |
| 73 | + | |
| 74 | + {% endblock %} | |
| 75 | + | |
| 76 | + | |
| 77 | +.. warning:: | |
| 78 | + | |
| 79 | + Warning! Remember to use the tag ``{{ block.super }}`` inside the html block. Otherwise, the page will appear blank. | ... | ... |