Fossil SCM

Experimentally add a 'toggle header' button to maximize screen space on mobile devices.

stephan 2026-06-06 19:15 UTC forum-editor-2026
Commit 6ffb97a8c50b08f461587616e219a90eff8abf3b6754dde51a6e96eac444b254
1 file changed +16 -1
--- src/fossil.page.forumpost.js
+++ src/fossil.page.forumpost.js
@@ -52,10 +52,11 @@
5252
mimetype: F.nu(),
5353
button: F.nu()
5454
});
5555
const wrapper = e.widget = D.addClass(D.div(), 'ForumPostEditor');
5656
D.clearElement(wrapper);
57
+
5758
if( !opt.inReplyTo ){
5859
/* Title... */
5960
e.titleBar = D.addClass(D.div(),'titlebar');
6061
e.title = D.addClass(D.input('text'), 'title');
6162
e.title.setAttribute('maxlength', 125);
@@ -99,10 +100,11 @@
99100
e.mimetype.wrapper.append(e.mimetype.label);
100101
}
101102
e.mimetype.wrapper.append(e.mimetype.select);
102103
}
103104
105
+ e.buttons = D.addClass(D.div(), 'buttons');
104106
{ /* Preview/submit buttons... */
105107
e.button.preview = D.button("Preview", e=>this.#preview());
106108
e.button.submit = D.button("Submit");
107109
if( 1 ){
108110
F.confirmer(e.button.submit, {
@@ -111,11 +113,10 @@
111113
});
112114
}else{
113115
e.button.submit.addEventListener('click', ()=>this.#submit());
114116
}
115117
e.button.submit.setAttribute('disabled', '');
116
- e.buttons = D.addClass(D.div(), 'buttons');
117118
wrapper.append(e.buttons);
118119
119120
e.error = D.addClass(D.div(), 'error', 'hidden');
120121
wrapper.append(e.error);
121122
e.error.addEventListener('dblclick',()=>this.reportError());
@@ -279,10 +280,24 @@
279280
forces a document reflow. */);
280281
return false;
281282
}
282283
}, true);
283284
}/*shift-enter preview bits*/
285
+
286
+ {
287
+ let visible = true;
288
+ const elemsToToggle = document.body.querySelectorAll(
289
+ ':scope > header, :scope > nav'
290
+ );
291
+ e.button.toggleHeader =
292
+ D.button('Toggle header', e=>{
293
+ for(const et of elemsToToggle){
294
+ et.classList.toggle('hidden');
295
+ }
296
+ });
297
+ e.buttons.append(e.button.toggleHeader);
298
+ }
284299
285300
}/*constructor*/
286301
287302
/** This widget's top-most DOM element. */
288303
get widget(){
289304
--- src/fossil.page.forumpost.js
+++ src/fossil.page.forumpost.js
@@ -52,10 +52,11 @@
52 mimetype: F.nu(),
53 button: F.nu()
54 });
55 const wrapper = e.widget = D.addClass(D.div(), 'ForumPostEditor');
56 D.clearElement(wrapper);
 
57 if( !opt.inReplyTo ){
58 /* Title... */
59 e.titleBar = D.addClass(D.div(),'titlebar');
60 e.title = D.addClass(D.input('text'), 'title');
61 e.title.setAttribute('maxlength', 125);
@@ -99,10 +100,11 @@
99 e.mimetype.wrapper.append(e.mimetype.label);
100 }
101 e.mimetype.wrapper.append(e.mimetype.select);
102 }
103
 
104 { /* Preview/submit buttons... */
105 e.button.preview = D.button("Preview", e=>this.#preview());
106 e.button.submit = D.button("Submit");
107 if( 1 ){
108 F.confirmer(e.button.submit, {
@@ -111,11 +113,10 @@
111 });
112 }else{
113 e.button.submit.addEventListener('click', ()=>this.#submit());
114 }
115 e.button.submit.setAttribute('disabled', '');
116 e.buttons = D.addClass(D.div(), 'buttons');
117 wrapper.append(e.buttons);
118
119 e.error = D.addClass(D.div(), 'error', 'hidden');
120 wrapper.append(e.error);
121 e.error.addEventListener('dblclick',()=>this.reportError());
@@ -279,10 +280,24 @@
279 forces a document reflow. */);
280 return false;
281 }
282 }, true);
283 }/*shift-enter preview bits*/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
284
285 }/*constructor*/
286
287 /** This widget's top-most DOM element. */
288 get widget(){
289
--- src/fossil.page.forumpost.js
+++ src/fossil.page.forumpost.js
@@ -52,10 +52,11 @@
52 mimetype: F.nu(),
53 button: F.nu()
54 });
55 const wrapper = e.widget = D.addClass(D.div(), 'ForumPostEditor');
56 D.clearElement(wrapper);
57
58 if( !opt.inReplyTo ){
59 /* Title... */
60 e.titleBar = D.addClass(D.div(),'titlebar');
61 e.title = D.addClass(D.input('text'), 'title');
62 e.title.setAttribute('maxlength', 125);
@@ -99,10 +100,11 @@
100 e.mimetype.wrapper.append(e.mimetype.label);
101 }
102 e.mimetype.wrapper.append(e.mimetype.select);
103 }
104
105 e.buttons = D.addClass(D.div(), 'buttons');
106 { /* Preview/submit buttons... */
107 e.button.preview = D.button("Preview", e=>this.#preview());
108 e.button.submit = D.button("Submit");
109 if( 1 ){
110 F.confirmer(e.button.submit, {
@@ -111,11 +113,10 @@
113 });
114 }else{
115 e.button.submit.addEventListener('click', ()=>this.#submit());
116 }
117 e.button.submit.setAttribute('disabled', '');
 
118 wrapper.append(e.buttons);
119
120 e.error = D.addClass(D.div(), 'error', 'hidden');
121 wrapper.append(e.error);
122 e.error.addEventListener('dblclick',()=>this.reportError());
@@ -279,10 +280,24 @@
280 forces a document reflow. */);
281 return false;
282 }
283 }, true);
284 }/*shift-enter preview bits*/
285
286 {
287 let visible = true;
288 const elemsToToggle = document.body.querySelectorAll(
289 ':scope > header, :scope > nav'
290 );
291 e.button.toggleHeader =
292 D.button('Toggle header', e=>{
293 for(const et of elemsToToggle){
294 et.classList.toggle('hidden');
295 }
296 });
297 e.buttons.append(e.button.toggleHeader);
298 }
299
300 }/*constructor*/
301
302 /** This widget's top-most DOM element. */
303 get widget(){
304

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button