Add stuff to xpplannot
This commit is contained in:
parent
24377874fa
commit
76044807a6
@ -2,28 +2,37 @@
|
|||||||
import requests
|
import requests
|
||||||
import json
|
import json
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# This script demonstrates how to query annotations for a particular URL using the hypothes.is API. An API key is required.
|
|
||||||
# The end result of this script is a Python dictionary with annotation data in it. Top save to csv or other format, further parsing would be required
|
|
||||||
def get_annotations():
|
def get_annotations():
|
||||||
KEY = "6879-GqSSbtmCoLUb8u9f6Gxh6DuScIkFKj321HSYzYZnjxc"
|
KEY = "6879-rwfbfodYqhBn2OK2ODnNGkzlWUa4bPCoJi2U8pgTYHg"
|
||||||
# here is the viewer pdf from each pdf
|
|
||||||
URL = "https://monoskop.org/Monoskop"
|
|
||||||
|
|
||||||
#a dictionary containing necessary http headers
|
|
||||||
headers = {
|
headers = {
|
||||||
"Host": "hypothes.is",
|
"Host": "xppl",
|
||||||
"Accept": "application/json",
|
"Accept": "application/json",
|
||||||
|
"Content-Type": "application/json",
|
||||||
"Authorization": "Bearer %s" % KEY
|
"Authorization": "Bearer %s" % KEY
|
||||||
}
|
}
|
||||||
|
|
||||||
base_url = "https://hypothes.is/api/search"
|
search_url = "".join("http://localhost:5000/api/search")
|
||||||
|
|
||||||
search_url = "".join([base_url, "?uri=", URL])
|
|
||||||
|
|
||||||
r = requests.get(search_url, headers=headers)
|
r = requests.get(search_url, headers=headers)
|
||||||
#data is a python dictionary
|
data = json.loads(r.text)
|
||||||
return json.loads(r.text)
|
return data
|
||||||
|
|
||||||
|
# extract=[]
|
||||||
|
# for item in data['rows']:
|
||||||
|
# # if 'exact' in item['target'][0]['selector'][2]:
|
||||||
|
# if 'selector' in item['target'][0]:
|
||||||
|
# if len(item['target'][0]['selector']) > 2:
|
||||||
|
# extract.append('extract:' + (item['target'][0]['selector'][2]['exact']))
|
||||||
|
# extract.append('annotation:' + item['text'])
|
||||||
|
# extract.append ('-----------')
|
||||||
|
# else:
|
||||||
|
# extract.append('annotation:' + item['text'])
|
||||||
|
# extract.append ('-----------')
|
||||||
|
# return extract
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
70
app/static/img/xppl-logo.svg
Executable file
70
app/static/img/xppl-logo.svg
Executable file
@ -0,0 +1,70 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
version="1.1"
|
||||||
|
id="svg2"
|
||||||
|
width="21.333332"
|
||||||
|
height="21.333332"
|
||||||
|
viewBox="0 0 21.333332 21.333332"
|
||||||
|
sodipodi:docname="xppl-logo.svg"
|
||||||
|
inkscape:version="0.92.2 (5c3e80d, 2017-08-06)">
|
||||||
|
<metadata
|
||||||
|
id="metadata8">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs6" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="754"
|
||||||
|
inkscape:window-height="480"
|
||||||
|
id="namedview4"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="11.062501"
|
||||||
|
inkscape:cx="10.666666"
|
||||||
|
inkscape:cy="10.666666"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="0"
|
||||||
|
inkscape:current-layer="svg2" />
|
||||||
|
<image
|
||||||
|
width="21.333332"
|
||||||
|
height="21.333332"
|
||||||
|
preserveAspectRatio="none"
|
||||||
|
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBI
|
||||||
|
WXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gYJExABRrWV7QAAASlJREFUOMu1krGOAWEUhb870UzE
|
||||||
|
FDqFRKHTaInphUqt0mg9gIfgCeYxJGK6f8IrqFUShYxEgcjZYsNuRFhr95T3/Pfknny/SRJvyAMY
|
||||||
|
j8f4vs9yuWS73VIoFOj3+9dHcRxjZpgZ2WyWdrvNbrf7NCXpfD6rXq+rVqup2+2qWCwqTVNdNJvN
|
||||||
|
BMg5p/l8LkCj0UiSlAHwPI8oiqhWqywWC6bTKUEQ3D35eDwCYGYAZC5GmqacTicANpvN3eUwDPF9
|
||||||
|
n1arRa/X+6pwOBxUqVTUbDY1GAyUz+e1Xq/vVrgVkjQcDpXL5bRarbTf71Uul9XpdH4UYH+C8e2A
|
||||||
|
h5y/+UmSPL7AOUccx0wmE6Io+l2FW87PlHnK+ZUA5xyNRuP/KIRhiJlRKpWus7f/wQfum92c9FWQ
|
||||||
|
cQAAAABJRU5ErkJggg==
|
||||||
|
"
|
||||||
|
id="image10"
|
||||||
|
x="0"
|
||||||
|
y="0" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.3 KiB |
@ -178,7 +178,7 @@
|
|||||||
html {
|
html {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
/* Font size is needed to make the activity bar the correct size. */
|
/* Font size is needed to make the activity bar the correct size. */
|
||||||
font-size: 10px;
|
font-size: 18px;
|
||||||
}
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
@ -1613,15 +1613,15 @@ html[dir='rtl'] #documentPropertiesOverlay .row > * {
|
|||||||
background: none repeat scroll 0 0 yellow;
|
background: none repeat scroll 0 0 yellow;
|
||||||
}
|
}
|
||||||
#PDFBug .stats {
|
#PDFBug .stats {
|
||||||
font-family: courier;
|
font-family: Archivo Narrow;
|
||||||
font-size: 10px;
|
font-size: 18px;
|
||||||
white-space: pre;
|
white-space: pre;
|
||||||
}
|
}
|
||||||
#PDFBug .stats .title {
|
#PDFBug .stats .title {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
#PDFBug table {
|
#PDFBug table {
|
||||||
font-size: 10px;
|
font-size: 18px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#viewer.textLayer-visible .textLayer > div,
|
#viewer.textLayer-visible .textLayer > div,
|
||||||
|
@ -413,14 +413,103 @@ http://sourceforge.net/adobe/cmap/wiki/License/
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script type="application/json" class="js-hypothesis-config">
|
<!-- <script type="application/json" class="js-hypothesis-config">
|
||||||
{
|
{
|
||||||
"openSidebar": true,
|
"openSidebar": true,
|
||||||
"branding": {"appBackgroundColor": "yellow"},
|
"branding": {"appBackgroundColor": "yellow"},
|
||||||
"services": {"authority": "http://localhost:8080/", "grantToken": "***", "icon": "https://openclipart.org/download/272629/sihouette-animaux-10.svg"}
|
"services": {"authority": "http://localhost:8080/", "grantToken": "***", "icon": "https://openclipart.org/download/272629/sihouette-animaux-10.svg"}
|
||||||
}</script>
|
}</script> -->
|
||||||
<script src="//localhost:5000/embed.js"></script>
|
|
||||||
|
|
||||||
|
<!-- <script type="text/javascript">
|
||||||
|
window.hypothesisConfig = function () {
|
||||||
|
return {
|
||||||
|
services: [{
|
||||||
|
apiUrl: 'https://hypothes.is/api/',
|
||||||
|
authority: 'partner.org',
|
||||||
|
grantToken: '***',
|
||||||
|
icon: 'https://openclipart.org/download/272629/sihouette-animaux-10.svg'
|
||||||
|
}],
|
||||||
|
};
|
||||||
|
};
|
||||||
|
</script> -->
|
||||||
|
|
||||||
|
<!-- <script src="//localhost:5000/embed.js"></script> -->
|
||||||
|
|
||||||
|
<!-- <script src= "/embed.js"></script> -->
|
||||||
|
|
||||||
|
<!-- <script type="text/javascript">
|
||||||
|
window.hypothesisConfig = function () {
|
||||||
|
return {
|
||||||
|
openSidebar: true,
|
||||||
|
showHighlights: true,
|
||||||
|
branding: {
|
||||||
|
appBackgroundColor: 'yellow',
|
||||||
|
ctaBackgroundColor: 'rgba(227, 38, 54, 1)',
|
||||||
|
ctaTextColor: '#eee',
|
||||||
|
selectionFontFamily: 'archivo narrow',
|
||||||
|
annotationFontFamily: 'archivo narrow',
|
||||||
|
accentColor: 'red'
|
||||||
|
},
|
||||||
|
services: [{
|
||||||
|
apiUrl: 'http://localhost:5000/api/',
|
||||||
|
authority: 'http://localhost:5000/',
|
||||||
|
grantToken: '6879-rwfbfodYqhBn2OK2ODnNGkzlWUa4bPCoJi2U8pgTYHg',
|
||||||
|
icon: 'https://pzwiki.wdka.nl/mw-mediadesign/images/9/9c/Xppl-logo.svg'
|
||||||
|
}],
|
||||||
|
onLayoutChange: {
|
||||||
|
width:'100'
|
||||||
|
},
|
||||||
|
sidebarAppUrl: 'http://localhost:5000/app.html'
|
||||||
|
};
|
||||||
|
};
|
||||||
|
</script> -->
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
window.hypothesisConfig = function () {
|
||||||
|
return {
|
||||||
|
openSidebar: true,
|
||||||
|
showHighlights: true,
|
||||||
|
usernameUrl: 'localhost:8080/annotations',
|
||||||
|
branding: {
|
||||||
|
appBackgroundColor: 'yellow',
|
||||||
|
ctaBackgroundColor: 'rgba(227, 38, 54, 1)',
|
||||||
|
ctaTextColor: '#eee',
|
||||||
|
selectionFontFamily: 'archivo narrow',
|
||||||
|
annotationFontFamily: 'archivo narrow',
|
||||||
|
accentColor: 'red'
|
||||||
|
},
|
||||||
|
services: {
|
||||||
|
apiUrl: 'http://localhost:5000/api/'
|
||||||
|
// authority: 'http://localhost:5000/',
|
||||||
|
// grantToken: '6879-rwfbfodYqhBn2OK2ODnNGkzlWUa4bPCoJi2U8pgTYHg',
|
||||||
|
// icon: 'https://pzwiki.wdka.nl/mw-mediadesign/images/9/9c/Xppl-logo.svg'
|
||||||
|
},
|
||||||
|
onLayoutChange: {
|
||||||
|
width:'200',
|
||||||
|
height:'2'
|
||||||
|
},
|
||||||
|
// sidebarAppUrl: 'http://localhost:5000/app.html'
|
||||||
|
};
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script async id="location" src= "//localhost:5000/embed.js"></script>
|
||||||
|
<!-- <p id="location"></p> -->
|
||||||
|
|
||||||
|
<script >
|
||||||
|
document.getElementById("#location").src = window.location.hostname + ":5000/embed.js";
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<!-- <script>
|
||||||
|
document.getElementById("location").src = window.location.hostname + ":5000/embed.js";
|
||||||
|
</script> -->
|
||||||
|
|
||||||
|
<!-- <script>
|
||||||
|
document.getElementById("demo").innerHTML =
|
||||||
|
"Page hostname is " + window.location.hostname;
|
||||||
|
</script>
|
||||||
|
-->
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
||||||
|
@ -1,65 +1,126 @@
|
|||||||
|
|
||||||
{% block main %}
|
{% block main %}
|
||||||
<h1 class="header">Annotations</h1>
|
<h1 class="header">Annotations</h1>
|
||||||
|
<!-- create pdf from the html annotations -->
|
||||||
|
<!-- <link rel=stylesheet href="{{ url_for('static', filename='style.css') }}" /> -->
|
||||||
|
<nav><a href="{{ url_for('annotations_pdf') }}">Get as PDF</a></nav><br><br>
|
||||||
|
|
||||||
<script type="application/json" class="js-hypothesis-config">
|
|
||||||
{
|
|
||||||
"openSidebar": true,
|
|
||||||
"branding": {"appBackgroundColor": "yellow"},
|
|
||||||
"theme": "clean",
|
|
||||||
"enableExperimentalNewNoteButton": true
|
|
||||||
|
|
||||||
}
|
<!-- <iframe src="/static/viewer/web/viewer.html?file=%2Fuploads%2FParatexts__Thresholds_of_Interpretation_-_Gerard_Genette.pdf" style="width:718px; height:700px;" frameborder="0"></iframe>
|
||||||
</script>
|
|
||||||
<script async src="http://localhost:5000/embed.js"></script>
|
-->
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- annotations and extracts from API -->
|
||||||
<!-- <iframe src="https://jonudell.info/h/facet/" style="width:100%;height:100px;"></iframe> -->
|
|
||||||
|
|
||||||
<!-- <iframe src="localhost:8080/app/uploads/viewer/web/viewer.html?file=%2Fhypothesis-client.pdf"></iframe> -->
|
|
||||||
|
|
||||||
<!-- <embed src="uploads/hypothesis-client.pdf" width="50%" ></embed><br> -->
|
|
||||||
<!-- <embed src="uploads/theresa.pdf" width="50%" ></embed> -->
|
|
||||||
|
|
||||||
{% for row in annot.rows %}
|
{% for row in annot.rows %}
|
||||||
row: {{row.updated}}<br>
|
{% if 'selector' in row.target[0] %}
|
||||||
|
{% if row.target[0].selector|length > 2%}
|
||||||
|
<a href="{{row.uri}}"><p align="right" style="font-family:archivo narrow;font-size:12;">{{row.document.title}}</p></a><br>
|
||||||
|
|
||||||
|
<div style="font-family:archivo narrow;font-size:18;">
|
||||||
|
<i>"{{row.target[0].selector[2].exact}}"</i></div><br>
|
||||||
|
|
||||||
|
{%if 'https://www.youtube.com'in row.text %}
|
||||||
|
<!-- <embed src="{{row.text}}" width="50%"></embed> -->
|
||||||
|
<a style="font-family:archivo narrow;font-size:18;color:#ff3300;" href="{{row.text}}">{{row.text}}</a><br>
|
||||||
|
{%elif '.jpg' in row.text%}
|
||||||
|
<img src="{{row.text}}" alt="{{row.document.title}}" width="400">
|
||||||
|
{%else%}
|
||||||
|
<div style="font-family:archivo narrow;font-size:18;color:#ff3300;">{{row.text}}</div><br>
|
||||||
|
{% endif %}
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
{%else%}
|
||||||
|
<a href="{{row.uri}}"><p align="right" style="font-family:archivo narrow;font-size:12;">{{row.document.title}}</p></a><br>
|
||||||
|
|
||||||
|
<div style="font-family:archivo narrow;font-size:18;">
|
||||||
|
<i>"{{row.target[0].selector[1].exact}}"</i></div><br>
|
||||||
|
|
||||||
|
{%if 'https://www.youtube.com'in row.text %}
|
||||||
|
<!-- <embed src="{{row.text}}" width="50%"></embed> -->
|
||||||
|
|
||||||
|
<a style="font-family:archivo narrow;font-size:18;color:#ff3300;" href="{{row.text}}">{{row.text}}</a><br>
|
||||||
|
{%elif '.jpg' in row.text%}
|
||||||
|
<img src="{{row.text}}" alt="{{row.document.title}}" width="400">
|
||||||
|
{%else%}
|
||||||
|
<div style="font-family:archivo narrow;font-size:18;color:#ff3300;">{{row.text}}</div><br>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
{% endif %}
|
||||||
|
{%else%}
|
||||||
|
<a href="{{row.uri}}"style="font-family:archivo narrow;font-size:12;">{{row.document.title}}</a><br>
|
||||||
|
<p style="font-family:archivo narrow;font-size:18;color:#ff3300;">{{row.text}}</p><br>
|
||||||
|
<hr><br>
|
||||||
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
dump:
|
<!-- dump of the API json annotations -->
|
||||||
|
<!-- dump:
|
||||||
<pre>
|
<pre>
|
||||||
{{dump}}
|
{{dump}}
|
||||||
</pre>
|
</pre>
|
||||||
<!-- <script src="https://gist.github.com/mjlavin80/186a6395c5819dbe25a8a0e001d5acfd.js"></script> -->
|
-->
|
||||||
|
|
||||||
|
<!-- <script type="application/json" class="js-hypothesis-config">
|
||||||
|
{
|
||||||
|
"openSidebar": true,
|
||||||
|
"branding": {"appBackgroundColor": "yellow"},
|
||||||
|
"enableExperimentalNewNoteButton": true
|
||||||
|
|
||||||
|
}
|
||||||
|
</script> -->
|
||||||
|
|
||||||
|
|
||||||
|
<!-- <script type="text/javascript">
|
||||||
|
window.hypothesisConfig = function () {
|
||||||
|
return {
|
||||||
|
openSidebar: true,
|
||||||
|
showHighlights: true,
|
||||||
|
usernameUrl: 'localhost:8080/annotations',
|
||||||
|
branding: {
|
||||||
|
appBackgroundColor: 'yellow',
|
||||||
|
ctaBackgroundColor: 'rgba(227, 38, 54, 1)',
|
||||||
|
ctaTextColor: '#eee',
|
||||||
|
selectionFontFamily: 'archivo narrow',
|
||||||
|
annotationFontFamily: 'archivo narrow',
|
||||||
|
accentColor: 'red'
|
||||||
|
},
|
||||||
|
services: {
|
||||||
|
apiUrl: 'http://localhost:5000/api/',
|
||||||
|
onProfileRequest: 'http://localhost:8080/',
|
||||||
|
onHelpRequest: 'http://localhost:8080/',
|
||||||
|
authority: 'http://localhost:5000/',
|
||||||
|
grantToken: '6879-rwfbfodYqhBn2OK2ODnNGkzlWUa4bPCoJi2U8pgTYHg',
|
||||||
|
icon: 'https://pzwiki.wdka.nl/mw-mediadesign/images/9/9c/Xppl-logo.svg'
|
||||||
|
},
|
||||||
|
onLayoutChange: {
|
||||||
|
width:200
|
||||||
|
},
|
||||||
|
// sidebarAppUrl: 'http://localhost:5000/app.html'
|
||||||
|
};
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script async id="location" src="http://localhost:5000/embed.js"></script> -->
|
||||||
|
|
||||||
|
<!-- <script async type="text/javascript" document.getElementById("location").src = window.location.hostname + ":5000/embed.js";></script> -->
|
||||||
|
|
||||||
|
<!-- <script async id="location" src= "//localhost:5000/embed.js"></script> -->
|
||||||
|
<!-- <p id="location"></p> -->
|
||||||
|
|
||||||
|
<!-- <script >
|
||||||
|
document.getElementById("#location").src = window.location.hostname + ":5000/embed.js";
|
||||||
|
</script>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- <script async src="http://localhost:5000/embed.js"></script> -->
|
||||||
|
|
||||||
|
|
||||||
<!-- <filename> -->
|
|
||||||
|
|
||||||
<!-- <embed type="PdfFileReader" src="http://localhost:8000/uploads/viewer.html?file=<filename>" width="300" height="300"> -->
|
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!-- <script type="application/json" class="js-hypothesis-config">
|
|
||||||
{
|
|
||||||
"showHighlights": "always",
|
|
||||||
"theme": "classic",
|
|
||||||
"branding": {"appBackgroundColor": "red"},
|
|
||||||
"onLayoutChange": {"width": 70},
|
|
||||||
"sidebarAppUrl": "https://hypothes.is/app.html"
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
<script async src="https://hypothes.is/embed.js"></script> -->
|
|
||||||
|
|
||||||
<!-- style="width:100%; height:500px;" -->
|
|
||||||
|
|
||||||
<!-- iframe {
|
|
||||||
#controlsContainer{ display:none; };
|
|
||||||
#title { display:none; };
|
|
||||||
width:100%;
|
|
||||||
height:500px;
|
|
||||||
} -->
|
|
||||||
|
0
app/test.txt
Normal file
0
app/test.txt
Normal file
21
app/views.py
21
app/views.py
@ -7,6 +7,7 @@ This file creates your application.
|
|||||||
|
|
||||||
from app import app, db, socketio, DOMAIN
|
from app import app, db, socketio, DOMAIN
|
||||||
from flask import Flask, Response, session, render_template, request, redirect, url_for, flash, send_from_directory, jsonify, abort
|
from flask import Flask, Response, session, render_template, request, redirect, url_for, flash, send_from_directory, jsonify, abort
|
||||||
|
from flask_weasyprint import HTML, render_pdf
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
from sqlalchemy.sql.expression import func, select
|
from sqlalchemy.sql.expression import func, select
|
||||||
@ -21,8 +22,6 @@ import datetime
|
|||||||
import time
|
import time
|
||||||
import autocomplete
|
import autocomplete
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
|
||||||
from werkzeug.utils import secure_filename
|
from werkzeug.utils import secure_filename
|
||||||
|
|
||||||
# import sqlite3
|
# import sqlite3
|
||||||
@ -332,7 +331,6 @@ def edit_stack_by_id(id):
|
|||||||
@app.route('/books', methods= ['POST','GET'])
|
@app.route('/books', methods= ['POST','GET'])
|
||||||
def show_books():
|
def show_books():
|
||||||
autocomplete.load() #Train markov model once, for autocomplete in search
|
autocomplete.load() #Train markov model once, for autocomplete in search
|
||||||
|
|
||||||
books = db.session.query(Book).all()
|
books = db.session.query(Book).all()
|
||||||
search = SearchForm(request.form)
|
search = SearchForm(request.form)
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
@ -355,6 +353,9 @@ def search_results(searchtype, query):
|
|||||||
if searchtype== 'All':
|
if searchtype== 'All':
|
||||||
results=Book.query.whoosh_search(query).all()
|
results=Book.query.whoosh_search(query).all()
|
||||||
|
|
||||||
|
# if searchtype== 'Annotation':
|
||||||
|
# results=Book.query.filter(Book.category.contains(query)).all()
|
||||||
|
|
||||||
if not results:
|
if not results:
|
||||||
upload_form = UploadForm(title= query, author='')
|
upload_form = UploadForm(title= query, author='')
|
||||||
return render_template('red_link.html', form=upload_form, title=query)
|
return render_template('red_link.html', form=upload_form, title=query)
|
||||||
@ -463,6 +464,7 @@ def send_text_file(file_name):
|
|||||||
file_dot_text = file_name + '.txt'
|
file_dot_text = file_name + '.txt'
|
||||||
return app.send_static_file(file_dot_text)
|
return app.send_static_file(file_dot_text)
|
||||||
|
|
||||||
|
# annotations
|
||||||
@app.route('/annotations')
|
@app.route('/annotations')
|
||||||
def annotations():
|
def annotations():
|
||||||
"""Render annotations page."""
|
"""Render annotations page."""
|
||||||
@ -471,6 +473,15 @@ def annotations():
|
|||||||
dump = json.dumps(annot, indent=2)
|
dump = json.dumps(annot, indent=2)
|
||||||
return render_template('annotations.html', annot=annot, dump=dump)
|
return render_template('annotations.html', annot=annot, dump=dump)
|
||||||
|
|
||||||
|
# PDF from annotations
|
||||||
|
@app.route('/annotations.pdf')
|
||||||
|
def annotations_pdf():
|
||||||
|
annot = get_annotations()
|
||||||
|
# Make a PDF straight from HTML in a string.
|
||||||
|
html = render_template(('annotations.html'), annot=annot)
|
||||||
|
return render_pdf(HTML(string=html))
|
||||||
|
|
||||||
|
|
||||||
@app.after_request
|
@app.after_request
|
||||||
def add_header(response):
|
def add_header(response):
|
||||||
"""
|
"""
|
||||||
@ -511,5 +522,5 @@ def new_message(message):
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
socketio.run(app)
|
# socketio.run(app)
|
||||||
#app.run(debug=True,host="0.0.0.0",port="8080")
|
app.run(debug=True,host="0.0.0.0",port="8080")
|
||||||
|
Loading…
Reference in New Issue
Block a user