Skip to content

Commit

Permalink
Merge pull request #3162 from johnraz/ImproveSmartLinkPage
Browse files Browse the repository at this point in the history
Improve the reusability of smart link page
  • Loading branch information
digi604 committed May 21, 2014
2 parents 88488b6 + a18abac commit 4ed982d
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 5 deletions.
4 changes: 3 additions & 1 deletion cms/admin/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,9 @@ class AdvancedSettingsForm(forms.ModelForm):
)

redirect = PageSmartLinkField(label=_('Redirect'), required=False,
help_text=_('Redirects to this URL.'), placeholder_text=_('Start typing...'))
help_text=_('Redirects to this URL.'), placeholder_text=_('Start typing...'),
ajax_view='admin:cms_page_get_published_pagelist'
)

language = forms.ChoiceField(label=_("Language"), choices=get_language_tuple(),
help_text=_('The current language of the content fields.'))
Expand Down
7 changes: 5 additions & 2 deletions cms/forms/fields.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,12 @@ def compress(self, data_list):
class PageSmartLinkField(forms.CharField):
widget = PageSmartLinkWidget

def __init__(self, max_length=None, min_length=None, placeholder_text=None, *args, **kwargs):
def __init__(self, max_length=None, min_length=None, placeholder_text=None,
ajax_view=None, *args, **kwargs):
self.placeholder_text = placeholder_text
super(PageSmartLinkField, self).__init__(max_length, min_length, *args, **kwargs)
widget = self.widget(ajax_view=ajax_view)
super(PageSmartLinkField, self).__init__(max_length, min_length,
widget=widget, *args, **kwargs)

def widget_attrs(self, widget):
attrs = super(PageSmartLinkField, self).widget_attrs(widget)
Expand Down
15 changes: 13 additions & 2 deletions cms/forms/widgets.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from itertools import chain

from django.contrib.sites.models import Site
from django.core.urlresolvers import reverse
from django.core.urlresolvers import NoReverseMatch, reverse_lazy
from django.forms.widgets import Select, MultiWidget, TextInput
from django.utils.encoding import force_text
from django.utils.safestring import mark_safe
Expand Down Expand Up @@ -128,6 +128,17 @@ def format_output(self, rendered_widgets):
class PageSmartLinkWidget(TextInput):


def __init__(self, attrs=None, ajax_view=None):
super(PageSmartLinkWidget, self).__init__(attrs)
self.ajax_url = self.get_ajax_url(ajax_view=ajax_view)

def get_ajax_url(self, ajax_view):
try:
return reverse_lazy(ajax_view)
except NoReverseMatch:
raise Exception(
'You should provide an ajax_view argument that can be reversed to the PageSmartLinkWidget'
)

def render(self, name=None, value=None, attrs=None):
final_attrs = self.build_attrs(attrs)
Expand Down Expand Up @@ -175,7 +186,7 @@ def render(self, name=None, value=None, attrs=None):
'element_id': id_,
'placeholder_text': final_attrs.get('placeholder_text', ''),
'language_code': self.language,
'ajax_url': reverse("admin:cms_page_get_published_pagelist")
'ajax_url': force_unicode(self.ajax_url)
}]

output.append(super(PageSmartLinkWidget, self).render(name, value, attrs))
Expand Down

0 comments on commit 4ed982d

Please sign in to comment.