@@ -44,10 +44,18 @@
44 44 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
opt.ondiscard[=function]: if set, a Discard button is added
45 45 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
which, when activated, clears the current draft and removes
46 46 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
this object's widget from the DOM. After that, opt.ondiscard()
47 47 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
is called and passed no arguments.
48 48 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
49 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ opt.onsubmit[=function]: if set, this function is called
50 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ immediately after the post has been successfully saved,
51 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ and passed this object.
52 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
53 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ opt.hiddenFields: an optional list of input elements to
54 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ incorporate into the form for requests which request the
55 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ preview or save the post.
56 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
49 57 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
TODO:
50 58 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
51 59 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
opt.inReplyTo=uuid: if this is a new response to a post, this
52 60 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
is the full forum post uuid of the being-replied-to post.
53 61 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -71,11 +79,11 @@
71 79 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
button: F.nu()
72 80 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
});
73 81 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const wrapper = e.widget = D.addClass(D.div(), 'ForumPostEditor');
74 82 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
D.clearElement(wrapper);
75 83 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
76 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( !opt.inReplyTo ){
84 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !opt.inReplyTo && !opt.hideTitle ){
77 85 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Title... */
78 86 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
e.titleBar = D.addClass(D.div(),'titlebar');
79 87 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
e.title = D.attr(
80 88 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
D.addClass(D.input('text'), 'title'),
81 89 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
'placeholder',
@@ -205,11 +213,11 @@
205 213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
e.tabEdit.append(e.editor);
206 214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
e.tabEdit.dataset.tabLabel = 'Edit';
207 215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
this.#tabs.addTab( e.tabEdit );
208 216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
this.#tabs.switchToTab( e.tabEdit );
209 217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( this.#draft ){
210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- this.editorContent = opt.edit?.W || this.#draft.content || '';
218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ this.editorContent = this.#draft.content || opt.edit?.W || '';
211 219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
e.editor.addEventListener(
212 220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
'blur', ()=>{
213 221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
this.#draft.content = this.editorContent;
214 222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
this.#storeDraft();
215 223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -217,10 +225,11 @@
217 225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( opt.edit?.W ){
218 226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
this.editorContent = opt.artifact.W;
219 227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
220 228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
e.preview = D.addClass(D.div(), 'preview');
221 229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
e.preview.dataset.tabLabel = 'Preview';
230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ this.#toDisable.push(e.button.preview);
222 231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
this.#tabs.addTab( e.preview );
223 232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
224 233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
225 234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( F.user.enableDebug ){
226 235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
e.debug = D.addClass(D.div(), 'debug');
@@ -282,11 +291,10 @@
282 291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
e.buttons.append(e.button.preview, e.button.submit);
283 292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( e.button.discard ){
284 293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
e.buttons.append(e.button.discard);
285 294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
this.#toDisable.push(e.button.discard);
286 295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- this.#toDisable.push(e.button.preview);
288 296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
289 297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
e.help = D.attr(D.div(), 'id', idPrefix+'-help');
290 298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
e.help.$needsInit = true;
291 299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
e.help.dataset.tabLabel = 'Help';
292 300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
this.#tabs.addTab(e.help);
@@ -345,12 +353,11 @@
345 353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return false;
346 354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
347 355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}, true);
348 356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}/*shift-enter preview bits*/
349 357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- {
351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- let visible = true;
358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(0){ /* Needs to be optional */
352 359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const elemsToToggle = document.body.querySelectorAll(
353 360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
':scope > header, :scope > nav'
354 361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
355 362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
e.button.toggleHeader =
356 363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
D.button('Toggle header', e=>{
@@ -362,13 +369,14 @@
362 369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
363 370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
364 371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}/*constructor*/
365 372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
366 373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
discard(){
367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- this.#clearDraft();
368 374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const e = this.#e.widget;
369 375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( e.parentNode ){
376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ console.debug("FPE discarding", this);
377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ this.#clearDraft();
370 378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
e.remove();
371 379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( this.#opt.ondiscard instanceof Function ){
372 380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
this.#opt.ondiscard();
373 381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
374 382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -423,11 +431,11 @@
423 431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
collecting, e.g., the CSRF token and an initial page title.
424 432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
425 433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
addHiddenFields(list){
426 434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
this.#extraFields ??= [];
427 435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for( const f of list ){
428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( 'title'===f.name ){
436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( 'title'===f.name && this.#e.title ){
429 437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( f.value && this.#opt.isNewThread && !this.#e.title.value ){
430 438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
this.#e.title.value = f.value;
431 439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
432 440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
433 441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
this.#extraFields.push(f);
@@ -438,11 +446,11 @@
438 446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
get mimetype(){
439 447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return this.#e.mimetype.select.value;
440 448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
441 449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
442 450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
get title(){
443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return this.#e.title.value;
451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return this.#e.title?.value;
444 452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
445 453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
446 454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#initHelpTab(){
447 455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const eh = this.#e.help;
448 456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const list = D.ul();
@@ -474,12 +482,16 @@
474 482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#newFormData(addThisContent){
475 483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const fd = new FormData;
476 484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(const f of this.#extraFields){
477 485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fd.append(f.name, f.value);
478 486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( this.#e.title ){
488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fd.append('title', this.title.trim());
489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( this.#opt.edit?.H ){
490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fd.append('title', this.#opt.edit.H);
491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
479 492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fd.append('mimetype', this.mimetype);
480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fd.append('title', this.title.trim());
481 493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fd.append('content', addThisContent || this.editorContent.trim());
482 494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( this.#e.captcha ){
483 495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fd.append('captcha', this.#e.captcha.value);
484 496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
485 497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return fd;
@@ -555,12 +567,12 @@
555 567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#validate(tgt){
556 568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( this.#e.captcha && 8!==this.#e.captcha.value.length ){
557 569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
this.reportError("Enter the captcha value.");
558 570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
559 571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( this.#opt.isNewThread ){
561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- let v = this.#e.title.value.trim();
572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( this.#e.title ){
573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const v = this.#e.title.value.trim();
562 574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !v ){
563 575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
this.reportError("A non-empty title is required.");
564 576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
565 577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
566 578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -616,10 +628,13 @@
616 628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
this.reportError(j.message);
617 629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
618 630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
619 631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( 1 ){
620 632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
this.#clearDraft();
633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( this.#opt.onsubmit instanceof Function ){
634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ this.#opt.onsubmit(this);
635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
621 636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
window.location = F.repoUrl('forumpost/'+j.uuid);
622 637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
623 638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
this.reportError(
624 639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"Saving worked but we're ignoring it and staying here."
625 640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
@@ -629,13 +644,37 @@
629 644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
.finally(()=>this.#isWaiting = false);
630 645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
631 646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
632 647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#storeDraft(){
633 648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( this.#draft ){
649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ this.#draft.mtime = Date.now();
634 650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
F.storage.setJSON(this.#opt.draftKey, this.#draft);
635 651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
636 652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /**
655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Looks for editing draft keys matching either a fixes key or a
656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ regex, and removes each matching one which is older than some
657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fixed "best-before" date.
658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static purgeOldDrafts(key){
660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const age = (3600 * 24 * 10/*days*/) * 1000/*ms*/;
661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const now = Date().now();
662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( key instanceof RegExp ){
663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(const k of F.storage.keys().filter(v=>key.test(v))){
664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const o = F.getJSON(k);
665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( o && (o.mtime+age < now)){
666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ F.storage.remove(k);
667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const o = F.getJSON(key);
671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( o && (o.mtime+age < now)){
672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ F.storage.remove(key);
673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
637 676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
638 677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
async #fetchPost(){
639 678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
640 679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
TODO: when editing an existing post, fetch the raw body of the
641 680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
post and populate this.e.
@@ -819,33 +858,36 @@
819 858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
});
820 859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
});
821 860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
});
822 861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
823 862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const userIsIndividual = ['anonymous','guest'].indexOf(F.user.name)<0;
863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ F.user.isIndividual = ['anonymous','guest'].indexOf(F.user.name)<0;
864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
825 865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const eForumNew = document.body.classList.contains('cpage-forumnew')
826 866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
? document.querySelector('#forumnew-placeholder')
827 867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
: null;
828 868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( eForumNew ){
829 869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* /forumnew */
830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const fpe = new fossil.ForumPostEditor({
831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- draftKey: 'forumnew',
870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const fpe = new F.ForumPostEditor({
871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ draftKey: 'draft-forumnew',
832 872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
hiddenFields: eForumNew.querySelectorAll('input[type=hidden]'),
833 873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
captcha: eForumNew.querySelector('.captcha-for-js'),
834 874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ondiscard: ()=>{
835 875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
window.location = F.repoUrl('forum');
836 876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- //mimetype: 'text/plain'
838 877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
});
839 878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
eForumNew.parentElement.insertBefore(fpe.widget, eForumNew);
840 879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
eForumNew.remove();
841 880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil.page.fpe = fpe /* for testing via the console */;
842 881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}/*eForumNew*/
843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- else if( userIsIndividual
882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ else if( F.user.isIndividual
844 883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& (document.body.classList.contains('cpage-forumpost')
845 884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| document.body.classList.contains('cpage-forumthread'))){
846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* /forumpost and /forumthread */
885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* /forumpost and /forumthread. Take over the Edit/Reply buttons
886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ to use a ForumPostEditor. Because of complications involving
887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fetching a captcha, we'll leave the buttons as-is for
888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ non-logged-in users. */
847 889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
848 890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const fetchPost = async (fpid)=>{
849 891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return window.fetch(F.repoUrl('ajax/artifact.json?uuid='+fpid))
850 892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
.then(r=>r.json())
851 893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
.then(j=>{
@@ -873,11 +915,11 @@
873 915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
eButton.innerText = eButton.dataset.originalLabel;
874 916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
delete eButton.dataset.originalLabel;
875 917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
876 918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
877 919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const replyClicked = (ePost, eBtnReply)=>{
920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const replyClicked = (form, ePost, eBtnReply)=>{
879 921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const fpid = setupEditReplyElement(ePost, eBtnReply);
880 922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
eBtnReply.innerText = "Replying...";
881 923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
F.toast.error("Reply is TODO. fpid="+fpid);
882 924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
883 925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
TODOs include:
@@ -892,14 +934,14 @@
892 934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
a Cancel button.
893 935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
894 936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- When cancelled or submitted, restore the reply button and
895 937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ePost position.
896 938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( 0 ) restoreEditReplyElement(ePost, eBtnReply);
939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ restoreEditReplyElement(ePost, eBtnReply);
898 940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}/*replyClicked()*/;
899 941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const editClicked = (ePost, eBtnEdit)=>{
942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const editClicked = (form, ePost, eBtnEdit)=>{
901 943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const fpid = setupEditReplyElement(ePost, eBtnEdit);
902 944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
eBtnEdit.innerText = "Editing...";
903 945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
F.toast.error("Edit is TODO. fpid="+fpid);
904 946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
905 947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
TODOs include:
@@ -913,13 +955,31 @@
913 955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
914 956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- When cancelled or submitted, restore the edit button and
915 957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ePost position.
916 958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
917 959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fetchPost(fpid)
918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- .then(j=>{
919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- console.debug("Got post... now what?", j);
920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( 0 ) restoreEditReplyElement(ePost, eBtnEdit);
960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ .then(artifact=>{
961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const ondone = (fpe)=>{
962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ restoreEditReplyElement(ePost, eBtnEdit);
963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ console.debug("ondiscard/onsubmit", fpe);
964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( fpe/*onsubmit*/ ){
965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( fpe.widget.parentNode ){
966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fpe.widget.remove();
967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const fpe = new F.ForumPostEditor({
971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ hiddenFields: form.querySelectorAll('input[type=hidden]'),
972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ondiscard: ondone,
973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ onsubmit: ondone,
974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ draftKey: 'draft-forumedit-'+fpid.substr(0,12),
975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ hideTitle: true/*fixme: only show if this is the root post*/,
976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ edit: artifact
977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ });
978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const w = fpe.widget;
979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ w.style.borderTop = '2px dotted';
980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ePost.append(w);
921 981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
});
922 982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}/*editClicked()*/;
923 983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
924 984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
document.body.querySelectorAll(
925 985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
'.forumpost-single-controls > form'
@@ -931,23 +991,27 @@
931 991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
932 992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
933 993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const btnReply = form.querySelector('input[type=submit][name=reply]');
934 994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( btnReply ){
935 995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
//console.debug("hacking Reply button", btnReply);
936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const b = D.button("Reply", ()=>replyClicked(eThePost, b));
996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const b = D.button("Reply", ()=>replyClicked(form, eThePost, b));
937 997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
b.type = 'button'/*keep container form from submitting*/;
938 998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
btnReply.parentElement.insertBefore(b, btnReply);
939 999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
btnReply.remove();
940 1000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
941 1001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const btnEdit = form.querySelector('input[type=submit][name=edit]');
942 1002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( btnEdit ){
943 1003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
//console.debug("hacking Edit button", btnEdit);
944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const b = D.button("Edit", ()=>editClicked(eThePost, b));
1004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const b = D.button("Edit", ()=>editClicked(form, eThePost, b));
945 1005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
b.type = 'button';
946 1006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
btnEdit.parentElement.insertBefore(b, btnEdit);
947 1007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
btnEdit.remove();
948 1008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
949 1009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
})/*for-each form*/;
950 1010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}/* /forumpost and /forumthread */
951 1011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( 0 ){
1013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* TODO every now and then, not every request... */
1014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ F.ForumPostEditor.purgeOldDrafts(/^draft-forum.*/);
1015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
952 1016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
})/*F.onPageLoad callback*/;
953 1017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
})(window.fossil);
954 1018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!