Skip to content
This repository was archived by the owner on May 25, 2023. It is now read-only.

Commit 9dcbd5b

Browse files
committed
Fix redirect to external link.
1 parent f3aca0b commit 9dcbd5b

File tree

4 files changed

+34
-15
lines changed

4 files changed

+34
-15
lines changed

Diff for: setup.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
setup(name = "django-ajax-tile",
88
author = "Eric Man",
99
url = "http://github.com/GradConnection/django-ajax-tile",
10-
version = "0.12",
10+
version = "0.13",
1111
packages = find_packages('src'),
1212
package_dir = {'tile': 'src/tile'},
1313
package_data={'tile': ['static/tile/*', 'templates/tile/*']},

Diff for: src/tile/decorators.py

+7-5
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import json
2+
from django.template.response import TemplateResponse
23

3-
def tile(template, selector, context_data=[], title=None):
4+
def tile(template=None, selector=None, context_data=[], title=None):
45
def _decorator(view):
5-
if not isinstance(selector, basestring):
6+
if not isinstance(selector, basestring) and selector is not None:
67
raise TypeError("selector must be a string")
78

8-
if not isinstance(template, basestring):
9+
if not isinstance(template, basestring) and template is not None:
910
raise TypeError("template must be a string")
1011

1112
if not isinstance(context_data, list):
@@ -29,8 +30,9 @@ def _wrapped(request, *args, **kwargs):
2930
if context_data:
3031
data = [(key, response.context_data[key]) for key in context_data]
3132
response['X-Tile-Context-Data'] = json.dumps(dict(data))
32-
response.template_name = "tile/template.html"
33-
response.context_data['tile_template_name'] = template
33+
if isinstance(response, TemplateResponse):
34+
response.template_name = "tile/template.html"
35+
response.context_data['tile_template_name'] = template
3436
return response
3537
return _wrapped
3638
return _decorator

Diff for: src/tile/middleware.py

+11-3
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,19 @@
77
from django import http
88

99
class TileMiddleware(object):
10-
def process_template_response(self, request, response):
10+
def process_response(self, request, response):
1111
protocol = "https://" if request.is_secure() else "http://"
1212
host = request.get_host()
1313
path = request.path
14-
if response.get('X-Tile-Partial'):
14+
15+
if isinstance(response, http.HttpResponseRedirect):
16+
response['X-Tile-From-Location'] = response['location']
17+
if response.get('X-Tile-Partial'):
18+
new_response = http.HttpResponse("")
19+
new_response['X-Tile-Partial'] = True
20+
new_response['X-Tile-From-Location'] = response['location']
21+
return new_response
22+
else:
1523
response['X-Tile-From-Location'] = protocol + host + path
24+
1625
return response
17-

Diff for: src/tile/static/tile/tile.js

+15-6
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,9 @@
104104
data: data,
105105
success: makeSuccess(url, title, data, callback),
106106
error:function(jqXHR, textStatus, errorThrown){
107+
console.log(jqXHR);
108+
console.log(textStatus);
109+
console.log(errorThrown);
107110
window.location = url;
108111
},
109112
async:false
@@ -224,15 +227,16 @@
224227

225228
function makeSuccess(url, title, data, callback){
226229
function success(htmlData, textStatus, jqXHR){
230+
// Removes the problem of 301 redirected urls not in URL bar.
231+
if (jqXHR.getResponseHeader("X-Tile-From-Location")) {
232+
url = jqXHR.getResponseHeader("X-Tile-From-Location");
233+
}
227234
var isPartial = jqXHR.getResponseHeader("X-Tile-Partial");
228235
if (!isPartial) {
229236
// Load the entire page.
230237
window.location = url;
231238
}
232239
else {
233-
// Removes the problem of 301 redirected urls not in URL bar.
234-
url = jqXHR.getResponseHeader("X-Tile-From-Location");
235-
236240
// Where downloaded HTML will go.
237241
var selector = jqXHR.getResponseHeader("X-Tile-Selector");
238242

@@ -242,9 +246,14 @@
242246
// Title to set window to.
243247
title = title || jqXHR.getResponseHeader("X-Tile-Title");
244248

245-
pushstate(url, title, data, htmlData, selector, callback,
246-
JSON.parse(metaData));
247-
249+
try {
250+
pushstate(url, title, data, htmlData, selector, callback,
251+
JSON.parse(metaData));
252+
}
253+
catch(err) {
254+
window.location = url;
255+
}
256+
248257
// Google analytics
249258
if ( typeof window.pageTracker !== 'undefined' ) {
250259
window.pageTracker._trackPageview(relativeUrl);

0 commit comments

Comments
 (0)