Projet

Général

Profil

0001-misc-use-full-URLs-for-href-src-attributes-in-404-sk.patch

Frédéric Péters, 14 août 2020 12:30

Télécharger (3,71 ko)

Voir les différences:

Subject: [PATCH] misc: use full URLs for href/src attributes in 404 skeleton
 pages (#45895)

 combo/data/models.py  | 8 ++++----
 combo/public/views.py | 6 +++++-
 tests/test_public.py  | 4 ++++
 3 files changed, 13 insertions(+), 5 deletions(-)
combo/data/models.py
1046 1046
    def get_cell_extra_context(self, context):
1047 1047
        extra_context = super(TextCell, self).get_cell_extra_context(context)
1048 1048
        text = self.text or ''
1049
        render_skeleton = context.get('render_skeleton')
1049
        force_absolute_url = context.get('force_absolute_url') or context.get('render_skeleton')
1050 1050

  
1051 1051
        def sub_variadic_url(match):
1052 1052
            attribute = match.group(1)
......
1059 1059
            return '%s="%s"' % (attribute, url)
1060 1060
        text = re.sub(r'(href|src)="(.*?)"', sub_variadic_url, text)
1061 1061

  
1062
        if render_skeleton:
1062
        if force_absolute_url:
1063 1063
            request = context.get('request')
1064 1064
            def sub_src(match):
1065 1065
                url = request.build_absolute_uri(match.group(1))
......
1204 1204
        return url
1205 1205

  
1206 1206
    def get_cell_extra_context(self, context):
1207
        render_skeleton = context.get('render_skeleton')
1207
        force_absolute_url = context.get('force_absolute_url') or context.get('render_skeleton')
1208 1208
        request = context.get('request')
1209 1209
        extra_context = super(LinkCell, self).get_cell_extra_context(context)
1210 1210
        if self.link_page:
......
1212 1212
        else:
1213 1213
            extra_context['title'] = self.title or self.url
1214 1214
        url = self.get_url(context)
1215
        if render_skeleton and not urlparse.urlparse(url).netloc:
1215
        if force_absolute_url and not urlparse.urlparse(url).netloc:
1216 1216
            # create full URL when used in a skeleton
1217 1217
            url = request.build_absolute_uri(url)
1218 1218
        extra_context['url'] = url
combo/public/views.py
240 240
    source = request.GET['source']
241 241

  
242 242
    if source == '404':
243
        request.extra_context_data = {'site_base': request.build_absolute_uri('/')[:-1]}
243
        request.extra_context_data = {
244
            'site_base': request.build_absolute_uri('/')[:-1],
245
            'force_absolute_url': True,
246
        }
244 247
        response = error404(request, exception=Http404())
245 248
        response.status_code = 200
246 249
        return response
......
324 327
        'pages': pages,
325 328
        'request': request,
326 329
        'render_skeleton': True,
330
        'force_absolute_url': True,
327 331
        'check_badges': should_check_badges(),
328 332
        'site_base': request.build_absolute_uri('/')[:-1],
329 333
    }
tests/test_public.py
366 366
    resp = app.get('/__skeleton__/?source=404')
367 367
    assert "This page doesn't exist" in resp.text
368 368
    assert resp.status_code == 200
369
    assert 'href="http://testserver/test/foobar"' in resp.text
370
    assert 'href="http://www.example.com/test"' in resp.text
371
    assert 'href="#top"' in resp.text
372
    assert 'href="http://testserver/plop/"' in resp.text
369 373

  
370 374
    # do not consider empty redirection
371 375
    Page.objects.all().delete()
372
-