mirror of
https://expo.survex.com/repositories/troggle/.git
synced 2024-11-22 07:11:52 +00:00
initial text file editing stuff
This commit is contained in:
parent
704ff8335d
commit
cb81a066db
@ -16,12 +16,15 @@ import troggle.settings as settings
|
|||||||
from troggle.core.models.caves import Cave
|
from troggle.core.models.caves import Cave
|
||||||
from troggle.core.utils import WriteAndCommitError, write_and_commit
|
from troggle.core.utils import WriteAndCommitError, write_and_commit
|
||||||
from troggle.core.views.editor_helpers import HTMLarea
|
from troggle.core.views.editor_helpers import HTMLarea
|
||||||
|
from troggle.core.views.uploads import edittxtpage
|
||||||
|
|
||||||
from .auth import login_required_if_public
|
from .auth import login_required_if_public
|
||||||
|
|
||||||
"""Formerly a separate package called 'flatpages' written by Martin Green 2011.
|
"""Formerly a separate package called 'flatpages' written by Martin Green 2011.
|
||||||
This was NOT django.contrib.flatpages which stores HTML in the database, so the name was changed to expopages.
|
This was NOT django.contrib.flatpages which stores HTML in the database, so the name was changed to expopages.
|
||||||
Then it was incorporated into troggle directly, rather than being an unnecessary external package.
|
Then it was incorporated into troggle directly, rather than being an unnecessary external package.
|
||||||
|
|
||||||
|
This is a succession of hacks and needs to be redisgned and refactored.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
default_head = """<head>
|
default_head = """<head>
|
||||||
@ -356,7 +359,7 @@ def getmimetype(path):
|
|||||||
return "application/zip"
|
return "application/zip"
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
|
|
||||||
@login_required_if_public
|
@login_required_if_public
|
||||||
@ensure_csrf_cookie
|
@ensure_csrf_cookie
|
||||||
def editexpopage(request, path):
|
def editexpopage(request, path):
|
||||||
@ -377,6 +380,12 @@ def editexpopage(request, path):
|
|||||||
+ "<h3>UTF-8 Parsing Failure:<br>Default file encoding on this Troggle installation is not UTF-8:<br>failure detected in expowebpage in views.expo.py</h3> Please Please reconfigure Debian/Apache/Django to fix this, i.e. contact Wookey. </body"
|
+ "<h3>UTF-8 Parsing Failure:<br>Default file encoding on this Troggle installation is not UTF-8:<br>failure detected in expowebpage in views.expo.py</h3> Please Please reconfigure Debian/Apache/Django to fix this, i.e. contact Wookey. </body"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# detect if this is a text file for editing
|
||||||
|
filepath = Path(settings.EXPOWEB) / path
|
||||||
|
if filepath.suffix == ".txt":
|
||||||
|
print("Editing TEXT file", filepath)
|
||||||
|
return edittxtpage(request, path, filepath)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
filepath = Path(settings.EXPOWEB) / path
|
filepath = Path(settings.EXPOWEB) / path
|
||||||
o = open(filepath, "r", encoding="utf8")
|
o = open(filepath, "r", encoding="utf8")
|
||||||
|
@ -146,9 +146,45 @@ class TextForm(forms.Form): # not a model-form, just a form-form
|
|||||||
class ExpofileRenameForm(forms.Form): # not a model-form, just a form-form
|
class ExpofileRenameForm(forms.Form): # not a model-form, just a form-form
|
||||||
renameto = forms.CharField(strip=True, required=False)
|
renameto = forms.CharField(strip=True, required=False)
|
||||||
|
|
||||||
|
class ExpotextfileForm(forms.Form): # not a model-form, just a form-form
|
||||||
|
text = forms.CharField(strip=True, required=False)
|
||||||
|
|
||||||
class LogbookEditForm(forms.Form): # not a model-form, just a form-form
|
class LogbookEditForm(forms.Form): # not a model-form, just a form-form
|
||||||
author = forms.CharField(strip=True, required=False)
|
author = forms.CharField(strip=True, required=False)
|
||||||
|
|
||||||
|
def edittxtpage(request, path, filepath):
|
||||||
|
"""Editing a .txt file on expoweb/
|
||||||
|
"""
|
||||||
|
def simple_get():
|
||||||
|
form = ExpotextfileForm()
|
||||||
|
return render(
|
||||||
|
request,
|
||||||
|
"textfileform.html",
|
||||||
|
{
|
||||||
|
"form": form,
|
||||||
|
"path": path,
|
||||||
|
"filepath": filepath,
|
||||||
|
"text": text,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
if not filepath.is_file():
|
||||||
|
print(f"Not a file: {filepath}")
|
||||||
|
errpage = f"<html>" + default_head + f"<h3>File not found '{filepath}'<br><br>failure detected in expowebpage() in views.expo.py</h3> </body>"
|
||||||
|
return HttpResponse(errpage)
|
||||||
|
try:
|
||||||
|
with open(filepath) as f:
|
||||||
|
text = f.read()
|
||||||
|
except IOError:
|
||||||
|
print("### File reading failue, but it exists.. ### ", filepath)
|
||||||
|
filefound = False
|
||||||
|
|
||||||
|
if request.method == "GET":
|
||||||
|
return simple_get()
|
||||||
|
|
||||||
|
elif request.method == "POST":
|
||||||
|
pass
|
||||||
|
|
||||||
@login_required_if_public
|
@login_required_if_public
|
||||||
def logbookedit(request, year=None, slug=None):
|
def logbookedit(request, year=None, slug=None):
|
||||||
"""Edit a logbook entry
|
"""Edit a logbook entry
|
||||||
|
@ -855,7 +855,7 @@ def read_cave(filename, mvf=None, cave=None):
|
|||||||
# we have already checked for uniqueness but the Cave object may/should be already created by the Entrance parsing
|
# we have already checked for uniqueness but the Cave object may/should be already created by the Entrance parsing
|
||||||
manual_edit = False
|
manual_edit = False
|
||||||
|
|
||||||
# The Cave object might be known by another (alias) name
|
# The Cave object should already have been created when reading the entrance_data file
|
||||||
caves = Cave.objects.filter(filename=filename)
|
caves = Cave.objects.filter(filename=filename)
|
||||||
if len(caves) ==1:
|
if len(caves) ==1:
|
||||||
cave = caves[0]
|
cave = caves[0]
|
||||||
|
46
templates/textfileform.html
Normal file
46
templates/textfileform.html
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% block title %}Online text file editor{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
<h2>Editing text file (not fully working yet)</h2>
|
||||||
|
<style>
|
||||||
|
input, textarea, pre {font-family: monospace; font-weight: bold; text-align:left; font-size: 100%; padding: 0.5em; }
|
||||||
|
textarea {text-align:left }
|
||||||
|
pre {text-align:left; font-size: 110% }
|
||||||
|
</style>
|
||||||
|
<div style = "max-width:95%; margin-left:4%; font-family: monospace; font-weight: bold; font-size: 110%; text-align: left; " >
|
||||||
|
File: {{path}} <br>
|
||||||
|
Full path on server: {{filepath}}
|
||||||
|
|
||||||
|
<form method ='post' >
|
||||||
|
{% csrf_token %}
|
||||||
|
<br />
|
||||||
|
<textarea {% if not user.username %} disabled{% endif %}
|
||||||
|
rows="{% if textrows%}{{textrows}}{% else %}20{% endif %}" cols="100"
|
||||||
|
label = "" name = "text"
|
||||||
|
required />{% if text %}{{text}}{% else %}We had a lot of fun...{% endif %}
|
||||||
|
</textarea>
|
||||||
|
<br>
|
||||||
|
[Edit the text by just typing in the box.]
|
||||||
|
|
||||||
|
|
||||||
|
<button class="fancybutton2" style="padding: 0.5em 25px; margin-left: 110px" name="Save" type = "submit"
|
||||||
|
title="Saves the file in UTF-8 characterset" value = "Save" >
|
||||||
|
Save the file
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
<br />
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
<hr />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{% endblock %}
|
Loading…
Reference in New Issue
Block a user