Fossil

Check-in [07a43dd39a]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:The new "Simple" view for timelines attempts to declutter the timeline without being as extreme as the "Compact" view. The check-in: or artifact: detail is still shown, but other details are omitted, though they can be recalled by clicking on the ellipsis. The "left" or "closed" prefix to the "check-in:" detail is also omitted. "Simple" attempts to be a compromise between "Compact" and "Verbose".
Downloads: Tarball | ZIP archive
Timelines: family | ancestors | descendants | both | timeline-enhance-2025
Files: files | file ages | folders
SHA3-256: 07a43dd39adb93452684bef5dcdc91293af3f598a627e031e3c9d9093693eb10
User & Date: drh 2025-10-18 17:18:37.997
Context
2025-10-18
19:28
Do not generate tarball hyperlinks unless we are sure the client is not a spider. check-in: 878407b82d user: drh tags: timeline-enhance-2025
17:18
The new "Simple" view for timelines attempts to declutter the timeline without being as extreme as the "Compact" view. The check-in: or artifact: detail is still shown, but other details are omitted, though they can be recalled by clicking on the ellipsis. The "left" or "closed" prefix to the "check-in:" detail is also omitted. "Simple" attempts to be a compromise between "Compact" and "Verbose". check-in: 07a43dd39a user: drh tags: timeline-enhance-2025
13:17
Rename the /tarlist page to /download. Rename the suggested-tarlist property to suggested-downloads. check-in: 717fbdc297 user: drh tags: timeline-enhance-2025
Changes
Unified Diff Ignore Whitespace Patch
Changes to src/branch.c.
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
  const char *zThisUser,      /* Suppress links to this user */
  const char *zThisTag        /* Suppress links to this tag */
){
  int rid;
  int tmFlagsNew;
  char *zBrName;

  if( (tmFlags & (TIMELINE_CLASSIC|TIMELINE_VERBOSE|TIMELINE_COMPACT))!=0 ){
    tmFlagsNew = (tmFlags & ~TIMELINE_VIEWS) | TIMELINE_MODERN;
    cgi_printf("(");
  }else{
    tmFlagsNew = tmFlags;
  }
  timeline_extra(pQuery,tmFlagsNew,zThisUser,zThisTag);

  if( !g.perm.Hyperlink ) return;
  rid = db_column_int(pQuery,0);
  zBrName = branch_of_rid(rid);
  @  branch:&nbsp;<span class='timelineHash'>\
  @ %z(href("%R/timeline?r=%T",zBrName))%h(zBrName)</a></span>
  if( (tmFlags & (TIMELINE_CLASSIC|TIMELINE_VERBOSE|TIMELINE_COMPACT))!=0 ){
    cgi_printf(")");
  }
}

/*
** WEBPAGE: brtimeline
**







|












|







1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
  const char *zThisUser,      /* Suppress links to this user */
  const char *zThisTag        /* Suppress links to this tag */
){
  int rid;
  int tmFlagsNew;
  char *zBrName;

  if( (tmFlags & TIMELINE_INLINE)!=0 ){
    tmFlagsNew = (tmFlags & ~TIMELINE_VIEWS) | TIMELINE_MODERN;
    cgi_printf("(");
  }else{
    tmFlagsNew = tmFlags;
  }
  timeline_extra(pQuery,tmFlagsNew,zThisUser,zThisTag);

  if( !g.perm.Hyperlink ) return;
  rid = db_column_int(pQuery,0);
  zBrName = branch_of_rid(rid);
  @  branch:&nbsp;<span class='timelineHash'>\
  @ %z(href("%R/timeline?r=%T",zBrName))%h(zBrName)</a></span>
  if( (tmFlags & TIMELINE_INLINE)!=0 ){
    cgi_printf(")");
  }
}

/*
** WEBPAGE: brtimeline
**
Changes to src/finfo.c.
392
393
394
395
396
397
398


399
400
401
402
403
404
405
  }
  login_anonymous_available();
  tmFlags = timeline_ss_submenu();
  if( tmFlags & TIMELINE_COLUMNAR ){
    zStyle = "Columnar";
  }else if( tmFlags & TIMELINE_COMPACT ){
    zStyle = "Compact";


  }else if( tmFlags & TIMELINE_VERBOSE ){
    zStyle = "Verbose";
  }else if( tmFlags & TIMELINE_CLASSIC ){
    zStyle = "Classic";
  }else{
    zStyle = "Modern";
  }







>
>







392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
  }
  login_anonymous_available();
  tmFlags = timeline_ss_submenu();
  if( tmFlags & TIMELINE_COLUMNAR ){
    zStyle = "Columnar";
  }else if( tmFlags & TIMELINE_COMPACT ){
    zStyle = "Compact";
  }else if( tmFlags & TIMELINE_SIMPLE ){
    zStyle = "Simple";
  }else if( tmFlags & TIMELINE_VERBOSE ){
    zStyle = "Verbose";
  }else if( tmFlags & TIMELINE_CLASSIC ){
    zStyle = "Classic";
  }else{
    zStyle = "Modern";
  }
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749





750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
        @ <td class="timelineDetailCell">
      }
    }
    if( tmFlags & TIMELINE_COMPACT ){
      cgi_printf("<span class='clutter' id='detail-%d'>",frid);
    }
    cgi_printf("<span class='timeline%sDetail'>", zStyle);
    if( tmFlags & (TIMELINE_COMPACT|TIMELINE_VERBOSE) ) cgi_printf("(");
    if( zUuid && (tmFlags & TIMELINE_VERBOSE)==0 ){
      @ file:&nbsp;%z(href("%R/file?name=%T&ci=%!S",zFName,zCkin))\
      @ [%S(zUuid)]</a>
      if( fShowId ){
        int srcId = delta_source_rid(frid);
        if( srcId>0 ){
          @ id:&nbsp;%z(href("%R/deltachain/%d",frid))\
          @ %d(frid)&larr;%d(srcId)</a>
        }else{
          @ id:&nbsp;%z(href("%R/deltachain/%d",frid))%d(frid)</a>
        }
      }
    }





    @ check-in:&nbsp;\
    hyperlink_to_version(zCkin);
    if( fShowId ){
      @ (%d(fmid))
    }
    @ user:&nbsp;\
    hyperlink_to_user(zUser, zDate, ",");
    @ branch:&nbsp;%z(href("%R/timeline?t=%T",zBr))%h(zBr)</a>,
    if( tmFlags & (TIMELINE_COMPACT|TIMELINE_VERBOSE) ){
      @ size:&nbsp;%d(szFile))
    }else{
      @ size:&nbsp;%d(szFile)
    }
    if( g.perm.Hyperlink && zUuid ){
      const char *z = zFName;
      @ <span id='links-%d(frid)'><span class='timelineExtraLinks'>
      @ %z(href("%R/annotate?filename=%h&checkin=%s",z,zCkin))







|


|










>
>
>
>
>








|
|







731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
        @ <td class="timelineDetailCell">
      }
    }
    if( tmFlags & TIMELINE_COMPACT ){
      cgi_printf("<span class='clutter' id='detail-%d'>",frid);
    }
    cgi_printf("<span class='timeline%sDetail'>", zStyle);
    if( tmFlags & TIMELINE_INLINE ) cgi_printf("(");
    if( zUuid && (tmFlags & TIMELINE_VERBOSE)==0 ){
      @ file:&nbsp;%z(href("%R/file?name=%T&ci=%!S",zFName,zCkin))\
      @ %S(zUuid)</a>
      if( fShowId ){
        int srcId = delta_source_rid(frid);
        if( srcId>0 ){
          @ id:&nbsp;%z(href("%R/deltachain/%d",frid))\
          @ %d(frid)&larr;%d(srcId)</a>
        }else{
          @ id:&nbsp;%z(href("%R/deltachain/%d",frid))%d(frid)</a>
        }
      }
    }
    if( tmFlags & TIMELINE_SIMPLE ){
      @ <span class='timelineEllipsis' data-id='%d(frid)' \
      @ id='ellipsis-%d(frid)'>...</span>
      @ <span class='clutter' id='detail-%d(frid)'>
    }
    @ check-in:&nbsp;\
    hyperlink_to_version(zCkin);
    if( fShowId ){
      @ (%d(fmid))
    }
    @ user:&nbsp;\
    hyperlink_to_user(zUser, zDate, ",");
    @ branch:&nbsp;%z(href("%R/timeline?t=%T",zBr))%h(zBr)</a>,
    if( tmFlags & TIMELINE_INLINE ){
      @ size:&nbsp;%d(szFile)
    }else{
      @ size:&nbsp;%d(szFile)
    }
    if( g.perm.Hyperlink && zUuid ){
      const char *z = zFName;
      @ <span id='links-%d(frid)'><span class='timelineExtraLinks'>
      @ %z(href("%R/annotate?filename=%h&checkin=%s",z,zCkin))
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
        }
      }
      zAncLink = href("%R/finfo?name=%T&from=%!S&debug=1",zFName,zCkin);
      @ %z(zAncLink)[ancestry]</a>
    }
    tag_private_status(frid);
    /* End timelineDetail */
    if( tmFlags & TIMELINE_COMPACT ){
      @ </span></span>
    }else{
      @ </span>
    }
    @ </td></tr>
  }
  db_finalize(&q);
  db_finalize(&qparent);
  if( pGraph ){
    graph_finish(pGraph, 0, TIMELINE_DISJOINT);







|
|

|







798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
        }
      }
      zAncLink = href("%R/finfo?name=%T&from=%!S&debug=1",zFName,zCkin);
      @ %z(zAncLink)[ancestry]</a>
    }
    tag_private_status(frid);
    /* End timelineDetail */
    if( tmFlags & (TIMELINE_COMPACT|TIMELINE_SIMPLE) ){
      @ </span>)</span>
    }else{
      @ )</span>
    }
    @ </td></tr>
  }
  db_finalize(&q);
  db_finalize(&qparent);
  if( pGraph ){
    graph_finish(pGraph, 0, TIMELINE_DISJOINT);
Changes to src/timeline.c.
113
114
115
116
117
118
119


120
121
122
123
124
125
126
127
#define TIMELINE_SHOWRID  0x0000400 /* Show RID values in addition to hashes */
#define TIMELINE_BISECT   0x0000800 /* Show supplemental bisect information */
#define TIMELINE_COMPACT  0x0001000 /* Use the "compact" view style */
#define TIMELINE_VERBOSE  0x0002000 /* Use the "detailed" view style */
#define TIMELINE_MODERN   0x0004000 /* Use the "modern" view style */
#define TIMELINE_COLUMNAR 0x0008000 /* Use the "columns" view style */
#define TIMELINE_CLASSIC  0x0010000 /* Use the "classic" view style */


#define TIMELINE_VIEWS    0x001f000 /* Mask for all of the view styles */
#define TIMELINE_NOSCROLL 0x0100000 /* Don't scroll to the selection */
#define TIMELINE_FILEDIFF 0x0200000 /* Show File differences, not ckin diffs */
#define TIMELINE_CHPICK   0x0400000 /* Show cherrypick merges */
#define TIMELINE_FILLGAPS 0x0800000 /* Dotted lines for missing nodes */
#define TIMELINE_XMERGE   0x1000000 /* Omit merges from off-graph nodes */
#define TIMELINE_NOTKT    0x2000000 /* Omit extra ticket classes */
#define TIMELINE_FORUMTXT 0x4000000 /* Render all forum messages */







>
>
|







113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#define TIMELINE_SHOWRID  0x0000400 /* Show RID values in addition to hashes */
#define TIMELINE_BISECT   0x0000800 /* Show supplemental bisect information */
#define TIMELINE_COMPACT  0x0001000 /* Use the "compact" view style */
#define TIMELINE_VERBOSE  0x0002000 /* Use the "detailed" view style */
#define TIMELINE_MODERN   0x0004000 /* Use the "modern" view style */
#define TIMELINE_COLUMNAR 0x0008000 /* Use the "columns" view style */
#define TIMELINE_CLASSIC  0x0010000 /* Use the "classic" view style */
#define TIMELINE_SIMPLE   0x0020000 /* Use the "simple" view style */
#define TIMELINE_INLINE   0x0033000 /* Mask for views with in-line display */
#define TIMELINE_VIEWS    0x003f000 /* Mask for all of the view styles */
#define TIMELINE_NOSCROLL 0x0100000 /* Don't scroll to the selection */
#define TIMELINE_FILEDIFF 0x0200000 /* Show File differences, not ckin diffs */
#define TIMELINE_CHPICK   0x0400000 /* Show cherrypick merges */
#define TIMELINE_FILLGAPS 0x0800000 /* Dotted lines for missing nodes */
#define TIMELINE_XMERGE   0x1000000 /* Omit merges from off-graph nodes */
#define TIMELINE_NOTKT    0x2000000 /* Omit extra ticket classes */
#define TIMELINE_FORUMTXT 0x4000000 /* Render all forum messages */
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
  const char *zDate = db_column_text(pQuery, 2);
  const char *zType = db_column_text(pQuery, 7);
  const char *zUser = db_column_text(pQuery, 4);
  const char *zTagList = db_column_text(pQuery, 8);
  int tagid = db_column_int(pQuery, 9);
  const char *zDispUser = zUser && zUser[0] ? zUser : "anonymous";

  if( (tmFlags & (TIMELINE_CLASSIC|TIMELINE_VERBOSE|TIMELINE_COMPACT))!=0 ){
    cgi_printf("(");
  }

  /* The EXTRA_FORMAT macro is an integer that controls various experiments
  ** in the layout of the extra text.
  **
  **   0   Legacy appearance.







|







194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
  const char *zDate = db_column_text(pQuery, 2);
  const char *zType = db_column_text(pQuery, 7);
  const char *zUser = db_column_text(pQuery, 4);
  const char *zTagList = db_column_text(pQuery, 8);
  int tagid = db_column_int(pQuery, 9);
  const char *zDispUser = zUser && zUser[0] ? zUser : "anonymous";

  if( (tmFlags & TIMELINE_INLINE)!=0 ){
    cgi_printf("(");
  }

  /* The EXTRA_FORMAT macro is an integer that controls various experiments
  ** in the layout of the extra text.
  **
  **   0   Legacy appearance.
232
233
234
235
236
237
238
239
240




241
242
243
244

245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260






261
262
263
264
265
266
267
            || zType[0]=='n' || zType[0]=='f'){
    cgi_printf("artifact:&nbsp;%z%S</a> ",href("%R/info/%!S",zUuid),zUuid);
  }
#endif /* EXTRA_FORMAT==0 */
#if EXTRA_FORMAT==1
  if( (tmFlags & TIMELINE_CLASSIC)==0 ){
    if( zType[0]=='c' ){
      int isLeaf = db_column_int(pQuery, 5);
      const char *zPrefix;




      if( isLeaf ){
        zPrefix = has_closed_tag(rid) ? "closed&nbsp;" : "leaf&nbsp;";
      }else{
        zPrefix = "";

      }
      cgi_printf("%scheck-in:&nbsp;%z<span class='timelineHash'>"
                 "%S</span></a> ",
                  zPrefix, href("%R/info/%!S",zUuid),zUuid);
    }else if( zType[0]=='e' && tagid ){
      cgi_printf("technote:&nbsp;");
      hyperlink_to_event_tagid(tagid<0?-tagid:tagid);
    }else{
      cgi_printf("artifact:&nbsp;%z%S</a> ",
                 href("%R/info/%!S",zUuid),zUuid);
    }
  }else if( zType[0]=='g' || zType[0]=='w' || zType[0]=='t'
            || zType[0]=='n' || zType[0]=='f'){
    cgi_printf("artifact:&nbsp;%z%S</a> ",href("%R/info/%!S",zUuid),zUuid);
  }
#endif /* EXTRA_FORMAT==1 */







  if( g.perm.Hyperlink && fossil_strcmp(zDispUser, zThisUser)!=0 ){
    char *zLink;
    if( zType[0]!='f' || (tmFlags & TIMELINE_FORUMTXT)==0 ){
      zLink = mprintf("%R/timeline?u=%h&c=%t&y=a", zDispUser, zDate);
    }else{
      zLink = mprintf("%R/timeline?u=%h&c=%t&y=a&vfx", zDispUser, zDate);







<

>
>
>
>
|
|
|
|
>
















>
>
>
>
>
>







234
235
236
237
238
239
240

241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
            || zType[0]=='n' || zType[0]=='f'){
    cgi_printf("artifact:&nbsp;%z%S</a> ",href("%R/info/%!S",zUuid),zUuid);
  }
#endif /* EXTRA_FORMAT==0 */
#if EXTRA_FORMAT==1
  if( (tmFlags & TIMELINE_CLASSIC)==0 ){
    if( zType[0]=='c' ){

      const char *zPrefix;
      if( tmFlags & TIMELINE_SIMPLE ){
        zPrefix = "";
      }else{
        int isLeaf = db_column_int(pQuery, 5);
        if( isLeaf ){
          zPrefix = has_closed_tag(rid) ? "closed&nbsp;" : "leaf&nbsp;";
        }else{
          zPrefix = "";
        }
      }
      cgi_printf("%scheck-in:&nbsp;%z<span class='timelineHash'>"
                 "%S</span></a> ",
                  zPrefix, href("%R/info/%!S",zUuid),zUuid);
    }else if( zType[0]=='e' && tagid ){
      cgi_printf("technote:&nbsp;");
      hyperlink_to_event_tagid(tagid<0?-tagid:tagid);
    }else{
      cgi_printf("artifact:&nbsp;%z%S</a> ",
                 href("%R/info/%!S",zUuid),zUuid);
    }
  }else if( zType[0]=='g' || zType[0]=='w' || zType[0]=='t'
            || zType[0]=='n' || zType[0]=='f'){
    cgi_printf("artifact:&nbsp;%z%S</a> ",href("%R/info/%!S",zUuid),zUuid);
  }
#endif /* EXTRA_FORMAT==1 */

  if( (tmFlags & TIMELINE_SIMPLE)!=0 ){
    @ <span class='timelineEllipsis' id='ellipsis-%d(rid)' \
    @ data-id='%d(rid)'>...</span>
    @ <span class='clutter' id='detail-%d(rid)'>
  }

  if( g.perm.Hyperlink && fossil_strcmp(zDispUser, zThisUser)!=0 ){
    char *zLink;
    if( zType[0]!='f' || (tmFlags & TIMELINE_FORUMTXT)==0 ){
      zLink = mprintf("%R/timeline?u=%h&c=%t&y=a", zDispUser, zDate);
    }else{
      zLink = mprintf("%R/timeline?u=%h&c=%t&y=a&vfx", zDispUser, zDate);
308
309
310
311
312
313
314




315
316
317
318
319
320
321
                 href("%R/deltachain/%d",rid), rid, srcId);
    }else{
      cgi_printf(" id:&nbsp;%z%d</a>",
                 href("%R/deltachain/%d",rid), rid);
    }
  }
  tag_private_status(rid);





#if EXTRA_FORMAT==2
  if( (tmFlags & TIMELINE_CLASSIC)==0 ){
    if( zType[0]=='c' ){
      cgi_printf(" check-in:&nbsp;%z<span class='timelineHash'>"
                 "%S</span></a>",
                  href("%R/info/%!S",zUuid),zUuid);







>
>
>
>







320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
                 href("%R/deltachain/%d",rid), rid, srcId);
    }else{
      cgi_printf(" id:&nbsp;%z%d</a>",
                 href("%R/deltachain/%d",rid), rid);
    }
  }
  tag_private_status(rid);

  if( (tmFlags & TIMELINE_SIMPLE)!=0 ){
    cgi_printf("</span>");  /* End of the declutter span */
  }

#if EXTRA_FORMAT==2
  if( (tmFlags & TIMELINE_CLASSIC)==0 ){
    if( zType[0]=='c' ){
      cgi_printf(" check-in:&nbsp;%z<span class='timelineHash'>"
                 "%S</span></a>",
                  href("%R/info/%!S",zUuid),zUuid);
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
            || zType[0]=='n' || zType[0]=='f'){
    cgi_printf(" artifact:&nbsp;%z%S</a>",href("%R/info/%!S",zUuid),zUuid);
  }
#endif /* EXTRA_FORMAT==2 */


  /* End timelineDetail */
  if( (tmFlags & (TIMELINE_CLASSIC|TIMELINE_VERBOSE|TIMELINE_COMPACT))!=0 ){
    cgi_printf(")");
  }
}


/*
** SETTING: timeline-truncate-at-blank  boolean default=off







|







346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
            || zType[0]=='n' || zType[0]=='f'){
    cgi_printf(" artifact:&nbsp;%z%S</a>",href("%R/info/%!S",zUuid),zUuid);
  }
#endif /* EXTRA_FORMAT==2 */


  /* End timelineDetail */
  if( (tmFlags & TIMELINE_INLINE)!=0 ){
    cgi_printf(")");
  }
}


/*
** SETTING: timeline-truncate-at-blank  boolean default=off
418
419
420
421
422
423
424


425
426
427
428
429
430
431
  if( (tmFlags & TIMELINE_VIEWS)==0 ){
    tmFlags |= timeline_ss_cookie();
  }
  if( tmFlags & TIMELINE_COLUMNAR ){
    zStyle = "Columnar";
  }else if( tmFlags & TIMELINE_COMPACT ){
    zStyle = "Compact";


  }else if( tmFlags & TIMELINE_VERBOSE ){
    zStyle = "Verbose";
  }else if( tmFlags & TIMELINE_CLASSIC ){
    zStyle = "Classic";
  }else{
    zStyle = "Modern";
  }







>
>







434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
  if( (tmFlags & TIMELINE_VIEWS)==0 ){
    tmFlags |= timeline_ss_cookie();
  }
  if( tmFlags & TIMELINE_COLUMNAR ){
    zStyle = "Columnar";
  }else if( tmFlags & TIMELINE_COMPACT ){
    zStyle = "Compact";
  }else if( tmFlags & TIMELINE_SIMPLE ){
    zStyle = "Simple";
  }else if( tmFlags & TIMELINE_VERBOSE ){
    zStyle = "Verbose";
  }else if( tmFlags & TIMELINE_CLASSIC ){
    zStyle = "Classic";
  }else{
    zStyle = "Modern";
  }
1323
1324
1325
1326
1327
1328
1329

1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341

1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
  const char *v = cookie_value("ss",0);
  if( v==0 ) v = timeline_default_ss();
  switch( v[0] ){
    case 'c':  tmFlags = TIMELINE_COMPACT;  break;
    case 'v':  tmFlags = TIMELINE_VERBOSE;  break;
    case 'j':  tmFlags = TIMELINE_COLUMNAR; break;
    case 'x':  tmFlags = TIMELINE_CLASSIC;  break;

    default:   tmFlags = TIMELINE_MODERN;   break;
  }
  return tmFlags;
}

/* Available timeline display styles, together with their y= query
** parameter names.
*/
const char *const timeline_view_styles[] = {
  "m", "Modern View",
  "j", "Columnar View",
  "c", "Compact View",

  "v", "Verbose View",
  "x", "Classic View",
};
#if INTERFACE
# define N_TIMELINE_VIEW_STYLE 5
#endif

/*
** Add the select/option box to the timeline submenu that is used to
** set the ss= parameter that determines the viewing mode.
**
** Return the TIMELINE_* value appropriate for the view-style.







>












>




|







1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
  const char *v = cookie_value("ss",0);
  if( v==0 ) v = timeline_default_ss();
  switch( v[0] ){
    case 'c':  tmFlags = TIMELINE_COMPACT;  break;
    case 'v':  tmFlags = TIMELINE_VERBOSE;  break;
    case 'j':  tmFlags = TIMELINE_COLUMNAR; break;
    case 'x':  tmFlags = TIMELINE_CLASSIC;  break;
    case 's':  tmFlags = TIMELINE_SIMPLE;   break;
    default:   tmFlags = TIMELINE_MODERN;   break;
  }
  return tmFlags;
}

/* Available timeline display styles, together with their y= query
** parameter names.
*/
const char *const timeline_view_styles[] = {
  "m", "Modern View",
  "j", "Columnar View",
  "c", "Compact View",
  "s", "Simple View",
  "v", "Verbose View",
  "x", "Classic View",
};
#if INTERFACE
# define N_TIMELINE_VIEW_STYLE 6
#endif

/*
** Add the select/option box to the timeline submenu that is used to
** set the ss= parameter that determines the viewing mode.
**
** Return the TIMELINE_* value appropriate for the view-style.