from logging.handlers import RotatingFileHandler
from pathlib import Path, PosixPath
from typing import Optional
+from xml.sax.saxutils import escape
import bcrypt
import bleach
@app.context_processor
def inject_global_vars():
- use_json = request.headers["Accept"] == "application/json"
+ use_xml = request.headers["Accept"] == "application/xml"
return dict(
gif_data=get_gif_data(),
current_user_playlists=get_current_user_playlists(),
- use_json=use_json,
- dumps=json.dumps,
+ use_xml=use_xml,
+ escape=escape,
bgcolor="#e8e6b5",
fgcolor="#695c73",
accolor="#9373a9",
-{% if use_json %}{% extends "base.json" %}{% else %}{% extends "base.html" %}{% endif %}
+{% if use_xml %}{% extends "base.xml" %}{% else %}{% extends "base.html" %}{% endif %}
{% block title %}Activity{% endblock %}
var targetUrl = new URL(event.target.href);
if (urlIsOnSameSite(targetUrl)) {
event.preventDefault();
- fetch(targetUrl, {redirect: "follow", headers: {"Accept": "application/json"}}).then(handleAjaxResponse);
+ fetch(targetUrl, {redirect: "follow", headers: {"Accept": "application/xml"}}).then(handleAjaxResponse);
}
});
if (urlIsOnSameSite(targetUrl)) {
event.preventDefault();
var formData = new FormData(event.target);
- fetch(targetUrl, {redirect: "follow", body: formData, method: event.target.method, headers: {"Accept": "application/json"}})
+ fetch(targetUrl, {redirect: "follow", body: formData, method: event.target.method, headers: {"Accept": "application/xml"}})
.then(handleAjaxResponse);
}
});
var url = new URL(response.url);
url.searchParams.delete("request-type");
- // Get page content from JSON response
- var data = await response.json();
+ // Get page content from XML response
+ var text = await response.text();
+ console.log(text);
+ var parser = new DOMParser();
+ var data = parser.parseFromString(text, "application/xml");
window.history.pushState(data, "", url);
updatePageState(data);
function updatePageState(data) {
if (!data) {
- fetch(window.location.href, {redirect: "follow", headers: {"Accept": "application/json"}}).then(handleAjaxResponse);
+ fetch(window.location.href, {redirect: "follow", headers: {"Accept": "application/xml"}}).then(handleAjaxResponse);
return;
}
document.getElementById("main").innerHTML = data.body;
-{% if use_json %}{% extends "base.json" %}{% else %}{% extends "base.html" %}{% endif %}
+{% if use_xml %}{% extends "base.xml" %}{% else %}{% extends "base.html" %}{% endif %}
{% block title %}Write a Comment{% endblock %}
-{% if use_json %}{% extends "base.json" %}{% else %}{% extends "base.html" %}{% endif %}
+{% if use_xml %}{% extends "base.xml" %}{% else %}{% extends "base.html" %}{% endif %}
{% block title %}{% if song %}Edit Song{% else %}Upload Song{% endif %}{% endblock %}
-{% if use_json %}{% extends "base.json" %}{% else %}{% extends "base.html" %}{% endif %}
+{% if use_xml %}{% extends "base.xml" %}{% else %}{% extends "base.html" %}{% endif %}
{% block title %}Little Song Place{% endblock %}
-{% if use_json %}{% extends "base.json" %}{% else %}{% extends "base.html" %}{% endif %}
+{% if use_xml %}{% extends "base.xml" %}{% else %}{% extends "base.html" %}{% endif %}
{% block title %}Sign In{% endblock %}
-{% if use_json %}{% extends "base.json" %}{% else %}{% extends "base.html" %}{% endif %}
+{% if use_xml %}{% extends "base.xml" %}{% else %}{% extends "base.html" %}{% endif %}
{% block title %}Site News{% endblock %}
-{% if use_json %}{% extends "base.json" %}{% else %}{% extends "base.html" %}{% endif %}
+{% if use_xml %}{% extends "base.xml" %}{% else %}{% extends "base.html" %}{% endif %}
{% block title %}{{ name }}{% endblock %}
-{% if use_json %}{% extends "base.json" %}{% else %}{% extends "base.html" %}{% endif %}
+{% if use_xml %}{% extends "base.xml" %}{% else %}{% extends "base.html" %}{% endif %}
{% block title %}{{ name }}'s profile{% endblock %}
-{% if use_json %}{% extends "base.json" %}{% else %}{% extends "base.html" %}{% endif %}
+{% if use_xml %}{% extends "base.xml" %}{% else %}{% extends "base.html" %}{% endif %}
{% block title %}Create Account{% endblock %}
-{% if use_json %}{% extends "base.json" %}{% else %}{% extends "base.html" %}{% endif %}
+{% if use_xml %}{% extends "base.xml" %}{% else %}{% extends "base.html" %}{% endif %}
{% block head %}
<meta property="og:title" content="{{ song.title }}" />
-{% if use_json %}{% extends "base.json" %}{% else %}{% extends "base.html" %}{% endif %}
+{% if use_xml %}{% extends "base.xml" %}{% else %}{% extends "base.html" %}{% endif %}
{% block title %}Songs{% endblock %}
NOW
- AJAX pages so songs can play during navigation
- - Back (history stack)
- Use correct content type header for response
- HTTP Error handling
- Break up main.py, test_offline.py