Ticket #3184: better-unordered.diff

File better-unordered.diff, 4.1 KB (added by Dirk Datzert <dummy@…>, 8 years ago)

I made 1 whole patch, and added the failing testcase

  • django/template/defaultfilters.py

     
    55from django.utils.translation import gettext
    66import re
    77import random as random_module
     8from types import StringTypes, ListType
    89
    910register = Library()
    1011
     
    305306        </ul>
    306307        </li>
    307308    """
    308     def _helper(value, tabs):
     309    def _create(value, tabs):
    309310        indent = '\t' * tabs
    310311        if value[1]:
    311312            return '%s<li>%s\n%s<ul>\n%s\n%s</ul>\n%s</li>' % (indent, value[0], indent,
    312313                '\n'.join([_helper(v, tabs+1) for v in value[1]]), indent, indent)
    313314        else:
    314315            return '%s<li>%s</li>' % (indent, value[0])
     316
     317    def _helper(value, tabs):
     318        if type(value) != ListType:
     319            value = [value]
     320        l = len(value)
     321        if l == 0:
     322            return ''
     323        else:
     324            html = []
     325            i = 0
     326            while i < l:
     327                if type(value[i]) == ListType:
     328                    html.append(_create(['', value[i]], tabs))
     329                    i += 1
     330                    continue
     331                elif i < l-1 and type(value[i+1]) == ListType:
     332                    html.append(_create([value[i], value[i+1]], tabs))
     333                    i += 2
     334                    continue
     335                else:
     336                    html.append(_create([value[i], []], tabs))
     337                i += 1
     338            return '\n'.join(html)
     339
    315340    return _helper(value, 1)
    316341
    317342###################
  • tests/regressiontests/defaultfilters/tests.py

     
    223223>>> unordered_list(['item 1', [['item 1.1', []], ['item 1.2', []]]])
    224224'\t<li>item 1\n\t<ul>\n\t\t<li>item 1.1</li>\n\t\t<li>item 1.2</li>\n\t</ul>\n\t</li>'
    225225
     226>>> unordered_list([[['item 1.1', []], ['item 1.2', []]]])
     227'\t<li>\n\t<ul>\n\t\t<li>item 1.1</li>\n\t\t<li>item 1.2</li>\n\t</ul>\n\t</li>'
     228
     229>>> unordered_list(['item 1'])
     230'\t<li>item 1</li>'
     231
     232>>> unordered_list(['item 1', ['item 1.1']])
     233'\t<li>item 1\n\t<ul>\n\t\t<li>item 1.1</li>\n\t</ul>\n\t</li>'
     234
     235>>> unordered_list(['item 1', ['item 1.1', 'item 1.2']])
     236'\t<li>item 1\n\t<ul>\n\t\t<li>item 1.1</li>\n\t\t<li>item 1.2</li>\n\t</ul>\n\t</li>'
     237
     238>>> unordered_list([['item 1.1', 'item 1.2'], 'item 2'])
     239'\t<li>\n\t<ul>\n\t\t<li>item 1.1</li>\n\t\t<li>item 1.2</li>\n\t</ul>\n\t</li>\n\t<li>item 2</li>'
     240
     241>>> unordered_list(['item 1', ['item 1.1'], 'item 2'])
     242'\t<li>item 1\n\t<ul>\n\t\t<li>item 1.1</li>\n\t</ul>\n\t</li>\n\t<li>item 2</li>'
     243
     244>>> unordered_list(['item 1', ['item 1.1', 'item 1.2'], 'item 2'])
     245'\t<li>item 1\n\t<ul>\n\t\t<li>item 1.1</li>\n\t\t<li>item 1.2</li>\n\t</ul>\n\t</li>\n\t<li>item 2</li>'
     246
     247>>> unordered_list([['item 1.1', 'item 1.2'], ['item 2.1', 'item 2.2']])
     248'\t<li>\n\t<ul>\n\t\t<li>item 1.1</li>\n\t\t<li>item 1.2</li>\n\t</ul>\n\t</li>\n\t<li>\n\t<ul>\n\t\t<li>item 2.1</li>\n\t\t<li>item 2.2</li>\n\t</ul>\n\t</li>'
     249
     250>>> unordered_list([['item 1.1']])
     251'\t<li>\n\t<ul>\n\t\t<li>item 1.1</li>\n\t</ul>\n\t</li>'
     252
     253# reported by simonbun <simonbun@versea.be>
     254# this is not working correct
     255#>>> unordered_list(['page1', ['page2', ['page3', ['page4']]]])
     256#'\t<li>page1\n\t<ul>\n\t\t<li>page2\n\t\t<ul>\n\t\t\t<li>page3\n\t\t\t<ul>\n\t\t\t\t<li>page4</li>\n\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t\t</li>\n\t</ul>\n\t</li>'
     257
     258# this will be outputed, but it is not correct
     259>>> unordered_list(['page1', ['page2', ['page3', ['page4']]]])
     260'\t<li>page1\n\t<ul>\n\t\t<li>page2</li>\n\t\t<li>page3\n\t\t<ul>\n\t\t\t<li>page4</li>\n\t\t</ul>\n\t\t</li>\n\t</ul>\n\t</li>'
     261
     262# instead this will work, expected by the original unordered algorithm
     263>>> unordered_list(['page1', [['page2', [['page3', [['page4', []]]]]]]])
     264'\t<li>page1\n\t<ul>\n\t\t<li>page2\n\t\t<ul>\n\t\t\t<li>page3\n\t\t\t<ul>\n\t\t\t\t<li>page4</li>\n\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t\t</li>\n\t</ul>\n\t</li>'
     265
    226266>>> add('1', '2')
    2272673
    228268
Back to Top