Пример #1
0
    def render(self, name, value, attrs=None):
        # THIS IS A COPY OF django.forms.widgets.MultiWidget.render()
        # (except for the last line)

        # value is a list of values, each corresponding to a widget
        # in self.widgets.

        site_choices = get_site_choices()
        page_choices = get_page_choices()
        self.site_choices = site_choices
        self.choices = page_choices
        self.widgets = (Select(choices=site_choices ),
                   Select(choices=[('', '----')]),
                   Select(choices=self.choices, attrs={'style': "display:none;"} ),
        )

        if not isinstance(value, list):
            value = self.decompress(value)
        output = []
        final_attrs = self.build_attrs(attrs)
        id_ = final_attrs.get('id', None)
        for i, widget in enumerate(self.widgets):
            try:
                widget_value = value[i]
            except IndexError:
                widget_value = None
            if id_:
                final_attrs = dict(final_attrs, id='%s_%s' % (id_, i))
            output.append(widget.render(name + '_%s' % i, widget_value, final_attrs))
        output.append(r'''<script type="text/javascript">
(function($) {
    var handleSiteChange = function(site_name, selected_id) {
        $("#id_%(name)s_1 optgroup").remove();
        var myOptions = $("#id_%(name)s_2 optgroup[label='" + site_name + "']").clone();
        $("#id_%(name)s_1").append(myOptions);
        $("#id_%(name)s_1").change();
    };
    var handlePageChange = function(page_id) {
        if (page_id) {
            $("#id_%(name)s_2 option").attr('selected', false);
            $("#id_%(name)s_2 option[value=" + page_id + "]").attr('selected', true);
        } else {
            $("#id_%(name)s_2 option[value=]").attr('selected', true);
        };
    };
    $("#id_%(name)s_0").change(function(){
        var site_label = $("#id_%(name)s_0").children(":selected").text();
        handleSiteChange( site_label );
    });
    $("#id_%(name)s_1").change(function(){
        var page_id = $(this).find('option:selected').val();
        handlePageChange( page_id );
    });
    $(function(){
        handleSiteChange( $("#id_%(name)s_0").children(":selected").text() );
        $("#add_id_%(name)s").hide();
    });
})(django.jQuery);
</script>''' % {'name': name})
        return mark_safe(self.format_output(output))
Пример #2
0
    def test_get_page_choices_with_multiple_translations(self):
        site = get_current_site()
        pages = [
            create_page("0001", "nav_playground.html", "en"),
            create_page("0002", "nav_playground.html", "en"),
            create_page("0003", "nav_playground.html", "en"),
            create_page("0004", "nav_playground.html", "en"),
        ]
        languages = ['de', 'fr']

        for page in pages:
            for language in languages:
                title = page.get_title('en')
                create_title(language, title, page=page)

        for language in ['en'] + languages:
            expected = [
                ('', '----'),
                (site.name, [
                    (page.pk, page.get_title(language, fallback=False))
                    for page in pages
                ])
            ]

            with force_language(language):
                self.assertSequenceEqual(get_page_choices(), expected)
Пример #3
0
 def _build_widgets(self):
     site_choices = get_site_choices()
     page_choices = get_page_choices()
     self.site_choices = site_choices
     self.choices = page_choices
     self.widgets = (Select(choices=site_choices ),
                Select(choices=[('', '----')]),
                Select(choices=self.choices, attrs={'style': "display:none;"} ),
     )
Пример #4
0
 def _build_widgets(self):
     site_choices = get_site_choices()
     page_choices = get_page_choices()
     self.site_choices = site_choices
     self.choices = page_choices
     self.widgets = (Select(choices=site_choices),
                     Select(choices=[('', '----')]),
                     Select(choices=self.choices, attrs={'style': "display:none;"}),
                     )
Пример #5
0
 def __init__(self, queryset, empty_label=u"---------", cache_choices=False,
              required=True, widget=None, to_field_name=None, *args, **kwargs):
     errors = self.default_error_messages.copy()
     if 'error_messages' in kwargs:
         errors.update(kwargs['error_messages'])
     site_choices, page_choices = get_site_choices(), get_page_choices()
     kwargs['required']=required
     fields = (
         forms.ChoiceField(choices=site_choices, required=False, error_messages={'invalid': errors['invalid_site']}),
         forms.ChoiceField(choices=page_choices, required=False, error_messages={'invalid': errors['invalid_page']}),
     )
     super(PageSelectFormField, self).__init__(fields, *args, **kwargs)
Пример #6
0
 def __init__(self, site_choices=None, page_choices=None, attrs=None):
     if attrs is not None:
         self.attrs = attrs.copy()
     else:
         self.attrs = {}
     if site_choices is None or page_choices is None:
         site_choices, page_choices = get_site_choices(), get_page_choices()
     self.site_choices = site_choices
     self.choices = page_choices
     widgets = (Select(choices=site_choices ),
                Select(choices=[('', '----')]),
                Select(choices=self.choices, attrs={'style': "display:none;"} ),
     )
     super(PageSelectWidget, self).__init__(widgets, attrs)
Пример #7
0
 def __init__(self, site_choices=None, page_choices=None, attrs=None):
     if attrs is not None:
         self.attrs = attrs.copy()
     else:
         self.attrs = {}
     if site_choices is None or page_choices is None:
         site_choices, page_choices = get_site_choices(), get_page_choices()
     self.site_choices = site_choices
     self.choices = page_choices
     widgets = (Select(choices=site_choices ),
                Select(choices=[('', '----')]),
                Select(choices=self.choices, attrs={'style': "display:none;"} ),
     )
     super(PageSelectWidget, self).__init__(widgets, attrs)
Пример #8
0
    def test_page_choices_draft_only(self):
        """
        The page choices should always use draft ids
        """
        site = get_current_site()
        pages = [
            create_page("0001", "nav_playground.html", "en", published=True),
            create_page("0002", "nav_playground.html", "en", published=True),
            create_page("0003", "nav_playground.html", "en", published=True),
            create_page("0004", "nav_playground.html", "en", published=True),
        ]

        expected = [('', '----'),
                    (site.name, [(page.pk, page.get_title('en',
                                                          fallback=False))
                                 for page in pages])]
        self.assertSequenceEqual(get_page_choices('en'), expected)
Пример #9
0
    def render(self, name, value, attrs=None):
        # THIS IS A COPY OF django.forms.widgets.MultiWidget.render()
        # (except for the last line)

        # value is a list of values, each corresponding to a widget
        # in self.widgets.

        site_choices = get_site_choices()
        page_choices = get_page_choices()
        self.site_choices = site_choices
        self.choices = page_choices
        self.widgets = (Select(choices=site_choices ),
                   Select(choices=[('', '----')]),
                   Select(choices=self.choices, attrs={'style': "display:none;"} ),
        )

        if not isinstance(value, list):
            value = self.decompress(value)
        output = []
        final_attrs = self.build_attrs(attrs)
        id_ = final_attrs.get('id', None)
        for i, widget in enumerate(self.widgets):
            try:
                widget_value = value[i]
            except IndexError:
                widget_value = None
            if id_:
                final_attrs = dict(final_attrs, id='%s_%s' % (id_, i))
            output.append(widget.render(name + '_%s' % i, widget_value, final_attrs))
        output.append(r'''<script type="text/javascript">
            var CMS = window.CMS || {};

            CMS.Widgets = CMS.Widgets || {};
            CMS.Widgets._pageSelectWidgets = CMS.Widgets._pageSelectWidgets || [];
            CMS.Widgets._pageSelectWidgets.push({
                name: '%(name)s'
            });
        </script>''' % {
            'name': name
        })
        return mark_safe(self.format_output(output))
    def render(self, name, value, attrs=None):
        # THIS IS A COPY OF django.forms.widgets.MultiWidget.render()
        # (except for the last line)

        # value is a list of values, each corresponding to a widget
        # in self.widgets.

        site_choices = get_site_choices()
        page_choices = get_page_choices()
        self.site_choices = site_choices
        self.choices = page_choices
        self.widgets = (
            Select(choices=site_choices),
            Select(choices=[('', '----')]),
            Select(choices=self.choices, attrs={'style': "display:none;"}),
        )

        if not isinstance(value, list):
            value = self.decompress(value)
        output = []
        final_attrs = self.build_attrs(attrs)
        id_ = final_attrs.get('id', None)
        for i, widget in enumerate(self.widgets):
            try:
                widget_value = value[i]
            except IndexError:
                widget_value = None
            if id_:
                final_attrs = dict(final_attrs, id='%s_%s' % (id_, i))
            output.append(
                widget.render(name + '_%s' % i, widget_value, final_attrs))
        output.append(r'''<script type="text/javascript">
            var CMS = window.CMS || {};

            CMS.Widgets = CMS.Widgets || {};
            CMS.Widgets._pageSelectWidgets = CMS.Widgets._pageSelectWidgets || [];
            CMS.Widgets._pageSelectWidgets.push({
                name: '%(name)s'
            });
        </script>''' % {'name': name})
        return mark_safe(self.format_output(output))
Пример #11
0
 def test_get_page_choices(self):
     result = get_page_choices()
     self.assertEquals(result, [('', '----')])
Пример #12
0
 def test_superlazy_iterator_behaves_properly_for_pages(self):
     normal_result = get_page_choices()
     lazy_result = SuperLazyIterator(get_page_choices)
     
     self.assertEquals(normal_result, list(lazy_result))
Пример #13
0
 def test_get_page_choices(self):
     result = get_page_choices()
     self.assertEquals(result, [('', '----')])
Пример #14
0
    def test_superlazy_iterator_behaves_properly_for_pages(self):
        normal_result = get_page_choices()
        lazy_result = SuperLazyIterator(get_page_choices)

        self.assertEquals(normal_result, list(lazy_result))
Пример #15
0
 def test_get_page_choices(self):
     result = get_page_choices()
     self.assertEqual(result, [("", "----")])