diff --git a/web/templates/setup.html b/web/templates/setup.html
index 9704d8b..d55179e 100644
--- a/web/templates/setup.html
+++ b/web/templates/setup.html
@@ -73,7 +73,7 @@
var iframeWnd = $($("iframe")[0].contentWindow);
// disable a links
- $("iframe").contents().find("a").attr("href", "#");
+ //$("iframe").contents().find("a").attr("href", "#");
iframeWnd.on('click', function(event) {
selectedElement = $(event.target).getPath();
diff --git a/web/templates/template.html b/web/templates/template.html
index 21ce0ba..e0b9832 100644
--- a/web/templates/template.html
+++ b/web/templates/template.html
@@ -40,6 +40,9 @@
Feeds
+
+ Source code
+
diff --git a/web/views.py b/web/views.py
index c7ca238..f1379b8 100644
--- a/web/views.py
+++ b/web/views.py
@@ -3,15 +3,53 @@ from django.http import HttpResponse
from .utils import *
from .models import Feed
from django.db.models import ObjectDoesNotExist
+from bs4 import BeautifulSoup
# Create your views here.
def iframe(request, url):
+ content_type = False
try:
- html = requests.get(url).text
+ req = requests.get(url)
+ html = req.content
+ bs = False
+
+ content_type = req.headers["Content-Type"] if "Content-Type" in req.headers else False
+
+ if not content_type or content_type.startswith("text/html"):
+ bs = BeautifulSoup(html, 'html.parser')
+ base_scheme = url.split("://")[0]
+ base_url = url.split("//")[-1].split("/")[0].split('?')[0]
+
+ # fixes
+ # fix click links
+ all_a = bs.find_all("a")
+ for a in all_a:
+ a["href"] = "javascript:void(0)"
+
+ # fix absolute CSS
+ all_links = bs.find_all("link", {"href": True})
+ for link in all_links:
+ if link["href"].startswith("/"):
+ link["href"] = "/iframe/" + base_scheme + "://" + base_url + link["href"]
+
+ # fix absolute javascript
+ all_scripts = bs.find_all("script", {"src": True})
+ for script in all_scripts:
+ if script.get("src").startswith("/"):
+ script["src"] = "/iframe/" + base_scheme + "://" + base_url + script["src"]
+
+ # fix absolute images
+ all_imgs = bs.find_all("img", {"src": True})
+ for img in all_imgs:
+ if img.get("src").startswith("/"):
+ img["src"] = "/iframe/" + base_scheme + "://" + base_url + img["src"]
+ final_html = str(bs) if bs else html
+ html = final_html
+
except Exception as e:
html = str(e)
- return HttpResponse(html)
+ return HttpResponse(html, content_type=content_type)
def dummy(request):
return HttpResponse("toto")