mirror of
https://github.com/9001/copyparty.git
synced 2025-08-17 09:02:15 -06:00
smart-home
This commit is contained in:
parent
a994e034f7
commit
dad92bde26
10
.gitignore
vendored
10
.gitignore
vendored
|
@ -11,14 +11,12 @@ dist/
|
||||||
sfx/
|
sfx/
|
||||||
.venv/
|
.venv/
|
||||||
|
|
||||||
# sublime
|
# ide
|
||||||
*.sublime-workspace
|
*.sublime-workspace
|
||||||
|
|
||||||
# winmerge
|
# winmerge
|
||||||
*.bak
|
*.bak
|
||||||
|
|
||||||
# other licenses
|
# derived
|
||||||
contrib/
|
copyparty/web/deps/
|
||||||
|
srv/
|
||||||
# deps
|
|
||||||
copyparty/web/deps
|
|
||||||
|
|
|
@ -859,6 +859,7 @@ class HttpCli(object):
|
||||||
file_ts = max(ts_md, ts_html)
|
file_ts = max(ts_md, ts_html)
|
||||||
file_lastmod, do_send = self._chk_lastmod(file_ts)
|
file_lastmod, do_send = self._chk_lastmod(file_ts)
|
||||||
self.out_headers["Last-Modified"] = file_lastmod
|
self.out_headers["Last-Modified"] = file_lastmod
|
||||||
|
self.out_headers["Cache-Control"] = "no-cache"
|
||||||
status = 200 if do_send else 304
|
status = 200 if do_send else 304
|
||||||
|
|
||||||
targs = {
|
targs = {
|
||||||
|
|
|
@ -287,12 +287,15 @@ function save_chk() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// returns [before,selection,after]
|
// get selection bounds, expanded to whole lines
|
||||||
function getsel() {
|
function linebounds(just_car) {
|
||||||
var car = dom_src.selectionStart;
|
var car = dom_src.selectionStart;
|
||||||
var cdr = dom_src.selectionEnd;
|
var cdr = dom_src.selectionEnd;
|
||||||
console.log(car, cdr);
|
console.log(car, cdr);
|
||||||
|
|
||||||
|
if (just_car)
|
||||||
|
cdr = car;
|
||||||
|
|
||||||
var txt = dom_src.value;
|
var txt = dom_src.value;
|
||||||
car = Math.max(car, 0);
|
car = Math.max(car, 0);
|
||||||
cdr = Math.min(cdr, txt.length - 1);
|
cdr = Math.min(cdr, txt.length - 1);
|
||||||
|
@ -308,10 +311,19 @@ function getsel() {
|
||||||
if (cdr < car)
|
if (cdr < car)
|
||||||
cdr = txt.length;
|
cdr = txt.length;
|
||||||
|
|
||||||
|
return [car, cdr];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// returns [before,selection,after]
|
||||||
|
function getsel() {
|
||||||
|
var lb = linebounds(false),
|
||||||
|
txt = dom_src.value;
|
||||||
|
|
||||||
return [
|
return [
|
||||||
txt.substring(0, car),
|
txt.substring(0, lb[0]),
|
||||||
txt.substring(car, cdr),
|
txt.substring(lb[0], lb[1]),
|
||||||
txt.substring(cdr)
|
txt.substring(lb[1])
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -356,6 +368,30 @@ function md_header(dedent) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// smart-home
|
||||||
|
function md_home(shift) {
|
||||||
|
var car = dom_src.selectionStart,
|
||||||
|
sb = linebounds(true),
|
||||||
|
n1 = sb[0],
|
||||||
|
n2 = sb[1];
|
||||||
|
|
||||||
|
var ln = dom_src.value.substring(n1, n2);
|
||||||
|
var m = /^[ \t#>*_~`+-]*([0-9]+\. +)?/.exec(ln);
|
||||||
|
if (!m)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
var home = n1 + m[0].length;
|
||||||
|
car = (car == home) ? n1 : home;
|
||||||
|
|
||||||
|
var cdr = shift ? dom_src.selectionEnd : car;
|
||||||
|
if (car > cdr)
|
||||||
|
car = [cdr, cdr = car][0];
|
||||||
|
|
||||||
|
dom_src.setSelectionRange(car, cdr);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// hotkeys / toolbar
|
// hotkeys / toolbar
|
||||||
(function () {
|
(function () {
|
||||||
function keydown(ev) {
|
function keydown(ev) {
|
||||||
|
@ -376,6 +412,9 @@ function md_header(dedent) {
|
||||||
md_header(ev.shiftKey);
|
md_header(ev.shiftKey);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if (!ctrl && (ev.code == "Home" || kc == 36)) {
|
||||||
|
return md_home(ev.shiftKey);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
document.onkeydown = keydown;
|
document.onkeydown = keydown;
|
||||||
|
|
Loading…
Reference in a new issue