JavaScriptからCGIを叩く
以下はTextboxの実際のコード。
code:sample.js
function overWriteEditable(body,file,num){//編集可能領域を元ファイルで上書きする
var formData = new FormData();
formData.set("num",num);
formData.set("file",file);
formData.set("body",body);
fetch("/cgi-bin/cgi-writelines.cgi",{
body: formData,
cache: "no-store",
method: "post"
}).then(response => {
if (response.ok) {
response.text().then(function (text) {
console.log(text)
owlcall("save done")
})
}
else {alert("not OK"); throw response;}}).catch(err => {
alert(err);
throw err;
});
}
"/cgi-bin/cgi-writelines.cgiとなっているが中身はPythonのコード
上のfetchでそのコードが実行される(ローカルサーバー上で実行される格好)
code:cgi-writelines.py
# -*- coding: utf-8 -*-
import cgi
import cgitb
import mailbox
cgitb.enable()
import sys
import io
import os
import re
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
print('Content-type: text/html; charset=UTF-8\n')
form = cgi.FieldStorage()
num = int(form.getvalue('num', ''))
file = form.getvalue('file', '')
body = form.getvalue('body', '')
print(body)
FilePath = "/Users/Tadanori/Dropbox/textbox/list/" + file +".md"
with open(FilePath, mode='r') as f:
l = f.read()
patren = '(<div.*contentEditable="True".*?>)(.|\s)*?(</div>)'
m = re.sub(patren, r'\1' + "\n\n" +body + r'\3' + "", l,1)
with open(FilePath, mode='w') as f:
f.write(m)
言語は、実行しているパソコンに入っているならば、RubyでもPHPでも構わない。
Node.jsなどの手もある