Collection of themes/skins for the Fossil SCM

⌈⌋ branch:  Fossil Skins Extra


Hex Artifact Content

Artifact c1e14fa3499c9c6ef37cc6efea1e96b82abcf222:

  • File so-skin.txt — part of check-in [add39a01c8] at 2014-03-17 15:03:42 on branch trunk — Stackoverflow-skin with updated TH1X, slim #language-bar positioning (user: mario size: 21102)

0000: 23 20 54 68 65 20 22 73 6b 69 6e 22 20 63 6f 6e  # The "skin" con
0010: 66 69 67 75 72 61 74 69 6f 6e 20 65 78 70 6f 72  figuration expor
0020: 74 65 64 20 66 72 6f 6d 0a 23 20 72 65 70 6f 73  ted from.# repos
0030: 69 74 6f 72 79 20 22 2f 68 6f 6d 65 2f 6d 61 72  itory "/home/mar
0040: 69 6f 2f 66 6f 73 73 69 6c 2e 64 2f 63 61 6e 6f  io/fossil.d/cano
0050: 6e 69 63 5f 61 75 74 6f 6c 6f 61 64 65 72 2e 66  nic_autoloader.f
0060: 6f 73 73 69 6c 22 0a 23 20 6f 6e 20 32 30 31 34  ossil".# on 2014
0070: 2d 30 33 2d 31 37 20 31 35 3a 30 30 3a 30 35 0a  -03-17 15:00:05.
0080: 63 6f 6e 66 69 67 20 2f 63 6f 6e 66 69 67 20 37  config /config 7
0090: 38 39 35 0a 31 33 39 35 30 36 38 33 39 34 20 27  895.1395068394 '
00a0: 63 73 73 27 20 76 61 6c 75 65 20 27 2f 2a 20 47  css' value '/* G
00b0: 65 6e 65 72 61 6c 20 73 65 74 74 69 6e 67 73 20  eneral settings 
00c0: 66 6f 72 20 74 68 65 20 65 6e 74 69 72 65 20 70  for the entire p
00d0: 61 67 65 20 2a 2f 0d 0a 62 6f 64 79 20 7b 0d 0a  age */..body {..
00e0: 20 20 6d 61 72 67 69 6e 3a 20 30 65 78 20 31 65    margin: 0ex 1e
00f0: 78 3b 0d 0a 20 20 70 61 64 64 69 6e 67 3a 20 30  x;..  padding: 0
0100: 70 78 3b 0d 0a 20 20 62 61 63 6b 67 72 6f 75 6e  px;..  backgroun
0110: 64 2d 63 6f 6c 6f 72 3a 20 77 68 69 74 65 3b 0d  d-color: white;.
0120: 0a 20 20 66 6f 6e 74 2d 66 61 6d 69 6c 79 3a 20  .  font-family: 
0130: 73 61 6e 73 2d 73 65 72 69 66 3b 0d 0a 7d 0d 0a  sans-serif;..}..
0140: 0d 0a 2f 2a 20 54 68 65 20 70 72 6f 6a 65 63 74  ../* The project
0150: 20 6c 6f 67 6f 20 69 6e 20 74 68 65 20 75 70 70   logo in the upp
0160: 65 72 20 6c 65 66 74 2d 68 61 6e 64 20 63 6f 72  er left-hand cor
0170: 6e 65 72 20 6f 66 20 65 61 63 68 20 70 61 67 65  ner of each page
0180: 20 2a 2f 0d 0a 23 6c 6f 67 6f 20 7b 0d 0a 20 20   */..#logo {..  
0190: 74 65 78 74 2d 61 6c 69 67 6e 3a 20 63 65 6e 74  text-align: cent
01a0: 65 72 3b 0d 0a 20 20 76 65 72 74 69 63 61 6c 2d  er;..  vertical-
01b0: 61 6c 69 67 6e 3a 20 62 6f 74 74 6f 6d 3b 0d 0a  align: bottom;..
01c0: 20 20 66 6f 6e 74 2d 77 65 69 67 68 74 3a 20 62    font-weight: b
01d0: 6f 6c 64 3b 0d 0a 20 20 63 6f 6c 6f 72 3a 20 23  old;..  color: #
01e0: 66 39 30 3b 0d 0a 20 20 70 61 64 64 69 6e 67 3a  f90;..  padding:
01f0: 20 35 70 78 20 32 30 70 78 20 30 70 78 20 30 70   5px 20px 0px 0p
0200: 78 3b 0d 0a 7d 0d 0a 0d 0a 2f 2a 20 54 68 65 20  x;..}..../* The 
0210: 70 61 67 65 20 74 69 74 6c 65 20 63 65 6e 74 65  page title cente
0220: 72 65 64 20 61 74 20 74 68 65 20 74 6f 70 20 6f  red at the top o
0230: 66 20 65 61 63 68 20 70 61 67 65 20 2a 2f 0d 0a  f each page */..
0240: 2e 74 69 74 6c 65 20 7b 0d 0a 20 20 66 6f 6e 74  .title {..  font
0250: 2d 73 69 7a 65 3a 20 32 65 6d 3b 0d 0a 20 20 66  -size: 2em;..  f
0260: 6f 6e 74 2d 77 65 69 67 68 74 3a 20 32 30 30 3b  ont-weight: 200;
0270: 0d 0a 20 20 63 6f 6c 6f 72 3a 20 23 33 33 33 3b  ..  color: #333;
0280: 0d 0a 20 20 76 65 72 74 69 63 61 6c 2d 61 6c 69  ..  vertical-ali
0290: 67 6e 3a 20 62 6f 74 74 6f 6d 3b 0d 0a 20 20 77  gn: bottom;..  w
02a0: 69 64 74 68 3a 20 31 30 30 25 20 3b 0d 0a 20 20  idth: 100% ;..  
02b0: 70 6f 73 69 74 69 6f 6e 3a 20 72 65 6c 61 74 69  position: relati
02c0: 76 65 3b 20 74 6f 70 3a 33 30 70 78 3b 0d 0a 7d  ve; top:30px;..}
02d0: 0d 0a 2e 74 69 74 6c 65 20 62 20 7b 20 66 6f 6e  ...title b { fon
02e0: 74 2d 77 65 69 67 68 74 3a 20 38 30 30 3b 20 7d  t-weight: 800; }
02f0: 0d 0a 0d 0a 2f 2a 20 54 68 65 20 6c 6f 67 69 6e  ..../* The login
0300: 20 73 74 61 74 75 73 20 6d 65 73 73 61 67 65 20   status message 
0310: 69 6e 20 74 68 65 20 74 6f 70 20 72 69 67 68 74  in the top right
0320: 2d 68 61 6e 64 20 63 6f 72 6e 65 72 20 2a 2f 0d  -hand corner */.
0330: 0a 2e 73 74 61 74 75 73 20 7b 0d 0a 20 20 64 69  ..status {..  di
0340: 73 70 6c 61 79 3a 20 74 61 62 6c 65 2d 63 65 6c  splay: table-cel
0350: 6c 3b 0d 0a 20 20 74 65 78 74 2d 61 6c 69 67 6e  l;..  text-align
0360: 3a 20 72 69 67 68 74 3b 0d 0a 20 20 76 65 72 74  : right;..  vert
0370: 69 63 61 6c 2d 61 6c 69 67 6e 3a 20 62 6f 74 74  ical-align: bott
0380: 6f 6d 3b 0d 0a 20 20 63 6f 6c 6f 72 3a 20 23 66  om;..  color: #f
0390: 66 39 39 30 30 3b 0d 0a 20 20 66 6f 6e 74 2d 73  f9900;..  font-s
03a0: 69 7a 65 3a 20 30 2e 38 65 6d 3b 0d 0a 20 20 66  ize: 0.8em;..  f
03b0: 6f 6e 74 2d 77 65 69 67 68 74 3a 20 62 6f 6c 64  ont-weight: bold
03c0: 3b 0d 0a 20 20 6d 69 6e 2d 77 69 64 74 68 3a 20  ;..  min-width: 
03d0: 32 30 30 70 78 3b 0d 0a 20 20 77 68 69 74 65 2d  200px;..  white-
03e0: 73 70 61 63 65 3a 20 6e 6f 77 72 61 70 3b 0d 0a  space: nowrap;..
03f0: 7d 0d 0a 0d 0a 2f 2a 20 54 68 65 20 68 65 61 64  }..../* The head
0400: 65 72 20 61 63 72 6f 73 73 20 74 68 65 20 74 6f  er across the to
0410: 70 20 6f 66 20 74 68 65 20 70 61 67 65 20 2a 2f  p of the page */
0420: 0d 0a 68 65 61 64 65 72 2c 20 2e 68 65 61 64 65  ..header, .heade
0430: 72 20 7b 0d 0a 20 20 64 69 73 70 6c 61 79 3a 20  r {..  display: 
0440: 74 61 62 6c 65 3b 0d 0a 20 20 77 69 64 74 68 3a  table;..  width:
0450: 20 31 30 30 25 20 3b 0d 0a 7d 0d 0a 0d 0a 2f 2a   100% ;..}..../*
0460: 20 54 68 65 20 6d 61 69 6e 20 6d 65 6e 75 20 62   The main menu b
0470: 61 72 20 74 68 61 74 20 61 70 70 65 61 72 73 20  ar that appears 
0480: 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68  at the top of th
0490: 65 20 70 61 67 65 20 62 65 6e 65 61 74 68 0d 0a  e page beneath..
04a0: 2a 2a 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f  ** the header */
04b0: 0d 0a 6e 61 76 2c 20 2e 6d 61 69 6e 6d 65 6e 75  ..nav, .mainmenu
04c0: 20 7b 0d 0a 20 20 70 61 64 64 69 6e 67 3a 20 35   {..  padding: 5
04d0: 70 78 20 31 30 70 78 20 35 70 78 20 31 30 70 78  px 10px 5px 10px
04e0: 3b 0d 0a 20 20 66 6f 6e 74 2d 73 69 7a 65 3a 20  ;..  font-size: 
04f0: 30 2e 39 65 6d 3b 0d 0a 20 20 66 6f 6e 74 2d 77  0.9em;..  font-w
0500: 65 69 67 68 74 3a 20 62 6f 6c 64 3b 0d 0a 20 20  eight: bold;..  
0510: 74 65 78 74 2d 61 6c 69 67 6e 3a 20 63 65 6e 74  text-align: cent
0520: 65 72 3b 0d 0a 20 20 6c 65 74 74 65 72 2d 73 70  er;..  letter-sp
0530: 61 63 69 6e 67 3a 20 31 70 78 3b 0d 0a 7d 0d 0a  acing: 1px;..}..
0540: 0d 0a 2f 2a 20 54 68 65 20 73 75 62 6d 65 6e 75  ../* The submenu
0550: 20 62 61 72 20 74 68 61 74 20 2a 73 6f 6d 65 74   bar that *somet
0560: 69 6d 65 73 2a 20 61 70 70 65 61 72 73 20 62 65  imes* appears be
0570: 6c 6f 77 20 74 68 65 20 6d 61 69 6e 20 6d 65 6e  low the main men
0580: 75 20 2a 2f 0d 0a 2e 73 75 62 6d 65 6e 75 2c 20  u */...submenu, 
0590: 2e 73 65 63 74 69 6f 6e 6d 65 6e 75 20 7b 0d 0a  .sectionmenu {..
05a0: 20 20 70 61 64 64 69 6e 67 3a 20 33 70 78 20 31    padding: 3px 1
05b0: 30 70 78 20 33 70 78 20 30 70 78 3b 0d 0a 20 20  0px 3px 0px;..  
05c0: 66 6f 6e 74 2d 73 69 7a 65 3a 20 30 2e 39 65 6d  font-size: 0.9em
05d0: 3b 0d 0a 20 20 74 65 78 74 2d 61 6c 69 67 6e 3a  ;..  text-align:
05e0: 20 63 65 6e 74 65 72 3b 0d 0a 20 20 62 61 63 6b   center;..  back
05f0: 67 72 6f 75 6e 64 2d 63 6f 6c 6f 72 3a 20 23 66  ground-color: #f
0600: 66 39 39 30 30 3b 0d 0a 20 20 63 6f 6c 6f 72 3a  f9900;..  color:
0610: 20 77 68 69 74 65 3b 0d 0a 7d 0d 0a 2e 6d 61 69   white;..}...mai
0620: 6e 6d 65 6e 75 20 61 2c 20 2e 6d 61 69 6e 6d 65  nmenu a, .mainme
0630: 6e 75 20 61 3a 76 69 73 69 74 65 64 2c 20 2e 73  nu a:visited, .s
0640: 75 62 6d 65 6e 75 20 61 2c 20 2e 73 75 62 6d 65  ubmenu a, .subme
0650: 6e 75 20 61 3a 76 69 73 69 74 65 64 2c 0d 0a 2e  nu a:visited,...
0660: 73 65 63 74 69 6f 6e 6d 65 6e 75 3e 61 2e 62 75  sectionmenu>a.bu
0670: 74 74 6f 6e 3a 6c 69 6e 6b 2c 20 2e 73 65 63 74  tton:link, .sect
0680: 69 6f 6e 6d 65 6e 75 3e 61 2e 62 75 74 74 6f 6e  ionmenu>a.button
0690: 3a 76 69 73 69 74 65 64 20 7b 0d 0a 20 20 70 61  :visited {..  pa
06a0: 64 64 69 6e 67 3a 20 33 70 78 20 31 30 70 78 20  dding: 3px 10px 
06b0: 33 70 78 20 31 30 70 78 3b 0d 0a 20 20 63 6f 6c  3px 10px;..  col
06c0: 6f 72 3a 20 77 68 69 74 65 3b 0d 0a 20 20 74 65  or: white;..  te
06d0: 78 74 2d 64 65 63 6f 72 61 74 69 6f 6e 3a 20 6e  xt-decoration: n
06e0: 6f 6e 65 3b 0d 0a 7d 0d 0a 2e 6d 61 69 6e 6d 65  one;..}...mainme
06f0: 6e 75 20 61 3a 68 6f 76 65 72 2c 20 2e 73 75 62  nu a:hover, .sub
0700: 6d 65 6e 75 20 61 3a 68 6f 76 65 72 2c 20 2e 73  menu a:hover, .s
0710: 65 63 74 69 6f 6e 6d 65 6e 75 3e 61 2e 62 75 74  ectionmenu>a.but
0720: 74 6f 6e 3a 68 6f 76 65 72 20 7b 0d 0a 20 20 63  ton:hover {..  c
0730: 6f 6c 6f 72 3a 20 23 66 66 39 39 30 30 3b 0d 0a  olor: #ff9900;..
0740: 20 20 62 61 63 6b 67 72 6f 75 6e 64 2d 63 6f 6c    background-col
0750: 6f 72 3a 20 77 68 69 74 65 3b 0d 0a 7d 0d 0a 0d  or: white;..}...
0760: 0a 2f 2a 20 41 6c 6c 20 70 61 67 65 20 63 6f 6e  ./* All page con
0770: 74 65 6e 74 20 66 72 6f 6d 20 74 68 65 20 62 6f  tent from the bo
0780: 74 74 6f 6d 20 6f 66 20 74 68 65 20 6d 65 6e 75  ttom of the menu
0790: 20 6f 72 20 73 75 62 6d 65 6e 75 20 64 6f 77 6e   or submenu down
07a0: 20 74 6f 0d 0a 2a 2a 20 74 68 65 20 66 6f 6f 74   to..** the foot
07b0: 65 72 20 2a 2f 0d 0a 2e 63 6f 6e 74 65 6e 74 20  er */...content 
07c0: 7b 0d 0a 20 20 70 61 64 64 69 6e 67 3a 20 30 65  {..  padding: 0e
07d0: 78 20 31 65 78 20 30 65 78 20 32 65 78 3b 0d 0a  x 1ex 0ex 2ex;..
07e0: 7d 0d 0a 0d 0a 2f 2a 20 53 6f 6d 65 20 70 61 67  }..../* Some pag
07f0: 65 73 20 68 61 76 65 20 73 65 63 74 69 6f 6e 20  es have section 
0800: 64 69 76 69 64 65 72 73 20 2a 2f 0d 0a 64 69 76  dividers */..div
0810: 2e 73 65 63 74 69 6f 6e 20 7b 0d 0a 20 20 6d 61  .section {..  ma
0820: 72 67 69 6e 2d 62 6f 74 74 6f 6d 3a 20 30 70 78  rgin-bottom: 0px
0830: 3b 0d 0a 20 20 6d 61 72 67 69 6e 2d 74 6f 70 3a  ;..  margin-top:
0840: 20 31 65 6d 3b 0d 0a 20 20 70 61 64 64 69 6e 67   1em;..  padding
0850: 3a 20 31 70 78 20 31 70 78 20 31 70 78 20 31 70  : 1px 1px 1px 1p
0860: 78 3b 0d 0a 20 20 66 6f 6e 74 2d 73 69 7a 65 3a  x;..  font-size:
0870: 20 31 2e 32 65 6d 3b 0d 0a 20 20 66 6f 6e 74 2d   1.2em;..  font-
0880: 77 65 69 67 68 74 3a 20 62 6f 6c 64 3b 0d 0a 20  weight: bold;.. 
0890: 20 62 61 63 6b 67 72 6f 75 6e 64 2d 63 6f 6c 6f   background-colo
08a0: 72 3a 20 23 66 66 39 39 30 30 3b 0d 0a 20 20 63  r: #ff9900;..  c
08b0: 6f 6c 6f 72 3a 20 77 68 69 74 65 3b 0d 0a 20 20  olor: white;..  
08c0: 77 68 69 74 65 2d 73 70 61 63 65 3a 20 6e 6f 77  white-space: now
08d0: 72 61 70 3b 0d 0a 7d 0d 0a 0d 0a 2f 2a 20 54 68  rap;..}..../* Th
08e0: 65 20 22 44 61 74 65 22 20 74 68 61 74 20 6f 63  e "Date" that oc
08f0: 63 75 72 73 20 6f 6e 20 74 68 65 20 6c 65 66 74  curs on the left
0900: 20 68 61 6e 64 20 73 69 64 65 20 6f 66 20 74 69   hand side of ti
0910: 6d 65 6c 69 6e 65 73 20 2a 2f 0d 0a 2e 64 69 76  melines */...div
0920: 69 64 65 72 20 7b 0d 0a 20 20 62 6f 72 64 65 72  ider {..  border
0930: 2d 72 61 64 69 75 73 3a 20 34 70 78 3b 0d 0a 20  -radius: 4px;.. 
0940: 20 63 6f 6c 6f 72 3a 20 23 37 35 30 3b 0d 0a 20   color: #750;.. 
0950: 20 62 61 63 6b 67 72 6f 75 6e 64 3a 20 23 66 66   background: #ff
0960: 65 65 63 63 3b 0d 0a 20 20 62 6f 72 64 65 72 3a  eecc;..  border:
0970: 20 32 70 78 20 23 66 39 30 20 73 6f 6c 69 64 3b   2px #f90 solid;
0980: 0d 0a 20 20 66 6f 6e 74 2d 73 69 7a 65 3a 20 31  ..  font-size: 1
0990: 65 6d 3b 20 66 6f 6e 74 2d 77 65 69 67 68 74 3a  em; font-weight:
09a0: 20 6e 6f 72 6d 61 6c 3b 0d 0a 20 20 70 61 64 64   normal;..  padd
09b0: 69 6e 67 3a 20 2e 32 35 65 6d 3b 0d 0a 20 20 6d  ing: .25em;..  m
09c0: 61 72 67 69 6e 3a 20 2e 32 65 6d 20 30 20 2e 32  argin: .2em 0 .2
09d0: 65 6d 20 30 3b 0d 0a 20 20 66 6c 6f 61 74 3a 20  em 0;..  float: 
09e0: 6c 65 66 74 3b 0d 0a 20 20 63 6c 65 61 72 3a 20  left;..  clear: 
09f0: 6c 65 66 74 3b 0d 0a 20 20 77 68 69 74 65 2d 73  left;..  white-s
0a00: 70 61 63 65 3a 20 6e 6f 77 72 61 70 3b 0d 0a 7d  pace: nowrap;..}
0a10: 0d 0a 0d 0a 2f 2a 20 54 68 65 20 66 6f 6f 74 65  ..../* The foote
0a20: 72 20 61 74 20 74 68 65 20 76 65 72 79 20 62 6f  r at the very bo
0a30: 74 74 6f 6d 20 6f 66 20 74 68 65 20 70 61 67 65  ttom of the page
0a40: 20 2a 2f 0d 0a 66 6f 6f 74 65 72 2c 20 2e 66 6f   */..footer, .fo
0a50: 6f 74 65 72 20 7b 0d 0a 20 20 63 6c 65 61 72 3a  oter {..  clear:
0a60: 20 62 6f 74 68 3b 0d 0a 7d 0d 0a 0d 0a 2f 2a 20   both;..}..../* 
0a70: 76 65 72 62 61 74 69 6d 20 62 6c 6f 63 6b 73 20  verbatim blocks 
0a80: 2a 2f 0d 0a 70 72 65 2e 76 65 72 62 61 74 69 6d  */..pre.verbatim
0a90: 20 7b 0d 0a 20 20 20 62 61 63 6b 67 72 6f 75 6e   {..   backgroun
0aa0: 64 2d 63 6f 6c 6f 72 3a 20 23 66 35 66 35 66 35  d-color: #f5f5f5
0ab0: 3b 0d 0a 20 20 20 70 61 64 64 69 6e 67 3a 20 30  ;..   padding: 0
0ac0: 2e 35 65 6d 3b 0d 0a 7d 0d 0a 0d 0a 2f 2a 20 54  .5em;..}..../* T
0ad0: 68 65 20 6c 61 62 65 6c 2f 76 61 6c 75 65 20 70  he label/value p
0ae0: 61 69 72 73 20 6f 6e 20 28 66 6f 72 20 65 78 61  airs on (for exa
0af0: 6d 70 6c 65 29 20 74 68 65 20 63 69 20 70 61 67  mple) the ci pag
0b00: 65 20 2a 2f 0d 0a 74 61 62 6c 65 2e 6c 61 62 65  e */..table.labe
0b10: 6c 2d 76 61 6c 75 65 20 74 68 20 7b 0d 0a 20 20  l-value th {..  
0b20: 76 65 72 74 69 63 61 6c 2d 61 6c 69 67 6e 3a 20  vertical-align: 
0b30: 74 6f 70 3b 0d 0a 20 20 74 65 78 74 2d 61 6c 69  top;..  text-ali
0b40: 67 6e 3a 20 72 69 67 68 74 3b 0d 0a 20 20 70 61  gn: right;..  pa
0b50: 64 64 69 6e 67 3a 20 30 2e 32 65 78 20 32 65 78  dding: 0.2ex 2ex
0b60: 3b 0d 0a 7d 0d 0a 0d 0a 2f 2a 20 53 69 64 65 2d  ;..}..../* Side-
0b70: 62 79 2d 73 69 64 65 20 64 69 66 66 20 2a 2f 0d  by-side diff */.
0b80: 0a 74 61 62 6c 65 2e 73 62 73 64 69 66 66 20 7b  .table.sbsdiff {
0b90: 0d 0a 20 20 62 61 63 6b 67 72 6f 75 6e 64 2d 63  ..  background-c
0ba0: 6f 6c 6f 72 3a 20 77 68 69 74 65 3b 0d 0a 20 20  olor: white;..  
0bb0: 66 6f 6e 74 2d 66 61 6d 69 6c 79 3a 20 66 69 78  font-family: fix
0bc0: 65 64 2c 20 44 65 6a 61 76 75 20 53 61 6e 73 20  ed, Dejavu Sans 
0bd0: 4d 6f 6e 6f 2c 20 4d 6f 6e 61 63 6f 2c 20 4c 75  Mono, Monaco, Lu
0be0: 63 69 64 61 20 43 6f 6e 73 6f 6c 65 2c 20 6d 6f  cida Console, mo
0bf0: 6e 6f 73 70 61 63 65 3b 0d 0a 20 20 66 6f 6e 74  nospace;..  font
0c00: 2d 73 69 7a 65 3a 20 38 70 74 3b 0d 0a 20 20 62  -size: 8pt;..  b
0c10: 6f 72 64 65 72 2d 63 6f 6c 6c 61 70 73 65 3a 63  order-collapse:c
0c20: 6f 6c 6c 61 70 73 65 3b 0d 0a 20 20 77 68 69 74  ollapse;..  whit
0c30: 65 2d 73 70 61 63 65 3a 20 70 72 65 3b 0d 0a 20  e-space: pre;.. 
0c40: 20 77 69 64 74 68 3a 20 39 38 25 3b 0d 0a 20 20   width: 98%;..  
0c50: 62 6f 72 64 65 72 3a 20 31 70 78 20 23 30 30 30  border: 1px #000
0c60: 20 64 61 73 68 65 64 3b 0d 0a 20 20 6d 61 72 67   dashed;..  marg
0c70: 69 6e 2d 6c 65 66 74 3a 20 61 75 74 6f 3b 0d 0a  in-left: auto;..
0c80: 20 20 6d 61 72 67 69 6e 2d 72 69 67 68 74 3a 20    margin-right: 
0c90: 61 75 74 6f 3b 0d 0a 7d 0d 0a 0d 0a 74 61 62 6c  auto;..}....tabl
0ca0: 65 2e 73 62 73 64 69 66 66 20 74 68 2e 64 69 66  e.sbsdiff th.dif
0cb0: 66 68 64 72 20 7b 0d 0a 20 20 62 6f 72 64 65 72  fhdr {..  border
0cc0: 2d 62 6f 74 74 6f 6d 3a 20 64 6f 74 74 65 64 3b  -bottom: dotted;
0cd0: 0d 0a 20 20 62 6f 72 64 65 72 2d 77 69 64 74 68  ..  border-width
0ce0: 3a 20 31 70 78 3b 0d 0a 7d 0d 0a 0d 0a 74 61 62  : 1px;..}....tab
0cf0: 6c 65 2e 73 62 73 64 69 66 66 20 74 72 20 74 64  le.sbsdiff tr td
0d00: 20 7b 0d 0a 20 20 77 68 69 74 65 2d 73 70 61 63   {..  white-spac
0d10: 65 3a 20 70 72 65 3b 0d 0a 20 20 70 61 64 64 69  e: pre;..  paddi
0d20: 6e 67 2d 6c 65 66 74 3a 20 33 70 78 3b 0d 0a 20  ng-left: 3px;.. 
0d30: 20 70 61 64 64 69 6e 67 2d 72 69 67 68 74 3a 20   padding-right: 
0d40: 33 70 78 3b 0d 0a 20 20 6d 61 72 67 69 6e 3a 20  3px;..  margin: 
0d50: 30 70 78 3b 0d 0a 20 20 76 65 72 74 69 63 61 6c  0px;..  vertical
0d60: 2d 61 6c 69 67 6e 3a 20 74 6f 70 3b 0d 0a 7d 0d  -align: top;..}.
0d70: 0a 0d 0a 74 61 62 6c 65 2e 73 62 73 64 69 66 66  ...table.sbsdiff
0d80: 20 74 72 20 74 64 2e 6c 69 6e 65 6e 6f 20 7b 0d   tr td.lineno {.
0d90: 0a 20 20 74 65 78 74 2d 61 6c 69 67 6e 3a 20 72  .  text-align: r
0da0: 69 67 68 74 3b 0d 0a 7d 0d 0a 0d 0a 74 61 62 6c  ight;..}....tabl
0db0: 65 2e 73 62 73 64 69 66 66 20 74 72 20 74 64 2e  e.sbsdiff tr td.
0dc0: 73 72 63 6c 69 6e 65 20 7b 0d 0a 7d 0d 0a 0d 0a  srcline {..}....
0dd0: 74 61 62 6c 65 2e 73 62 73 64 69 66 66 20 74 72  table.sbsdiff tr
0de0: 20 74 64 2e 6d 65 74 61 20 7b 0d 0a 20 20 62 61   td.meta {..  ba
0df0: 63 6b 67 72 6f 75 6e 64 2d 63 6f 6c 6f 72 3a 20  ckground-color: 
0e00: 72 67 62 28 31 37 30 2c 20 31 36 30 2c 20 32 35  rgb(170, 160, 25
0e10: 35 29 3b 0d 0a 20 20 74 65 78 74 2d 61 6c 69 67  5);..  text-alig
0e20: 6e 3a 20 63 65 6e 74 65 72 3b 0d 0a 7d 0d 0a 0d  n: center;..}...
0e30: 0a 74 61 62 6c 65 2e 73 62 73 64 69 66 66 20 74  .table.sbsdiff t
0e40: 72 20 74 64 2e 61 64 64 65 64 20 7b 0d 0a 20 20  r td.added {..  
0e50: 62 61 63 6b 67 72 6f 75 6e 64 2d 63 6f 6c 6f 72  background-color
0e60: 3a 20 72 67 62 28 31 38 30 2c 20 32 35 30 2c 20  : rgb(180, 250, 
0e70: 31 38 30 29 3b 0d 0a 7d 0d 0a 74 61 62 6c 65 2e  180);..}..table.
0e80: 73 62 73 64 69 66 66 20 74 72 20 74 64 2e 61 64  sbsdiff tr td.ad
0e90: 64 65 64 76 6f 69 64 20 7b 0d 0a 20 20 62 61 63  dedvoid {..  bac
0ea0: 6b 67 72 6f 75 6e 64 2d 63 6f 6c 6f 72 3a 20 72  kground-color: r
0eb0: 67 62 28 31 39 30 2c 20 31 39 30 2c 20 31 38 30  gb(190, 190, 180
0ec0: 29 3b 0d 0a 7d 0d 0a 0d 0a 74 61 62 6c 65 2e 73  );..}....table.s
0ed0: 62 73 64 69 66 66 20 74 72 20 74 64 2e 72 65 6d  bsdiff tr td.rem
0ee0: 6f 76 65 64 20 7b 0d 0a 20 20 62 61 63 6b 67 72  oved {..  backgr
0ef0: 6f 75 6e 64 2d 63 6f 6c 6f 72 3a 20 72 67 62 28  ound-color: rgb(
0f00: 32 35 30 2c 20 31 33 30 2c 20 31 33 30 29 3b 0d  250, 130, 130);.
0f10: 0a 7d 0d 0a 74 61 62 6c 65 2e 73 62 73 64 69 66  .}..table.sbsdif
0f20: 66 20 74 72 20 74 64 2e 72 65 6d 6f 76 65 64 76  f tr td.removedv
0f30: 6f 69 64 20 7b 0d 0a 20 20 62 61 63 6b 67 72 6f  oid {..  backgro
0f40: 75 6e 64 2d 63 6f 6c 6f 72 3a 20 72 67 62 28 31  und-color: rgb(1
0f50: 39 30 2c 20 31 39 30 2c 20 31 38 30 29 3b 0d 0a  90, 190, 180);..
0f60: 7d 0d 0a 0d 0a 74 61 62 6c 65 2e 73 62 73 64 69  }....table.sbsdi
0f70: 66 66 20 74 72 20 74 64 2e 63 68 61 6e 67 65 64  ff tr td.changed
0f80: 20 7b 0d 0a 20 20 62 61 63 6b 67 72 6f 75 6e 64   {..  background
0f90: 2d 63 6f 6c 6f 72 3a 20 72 67 62 28 32 31 30 2c  -color: rgb(210,
0fa0: 20 32 31 30 2c 20 32 30 30 29 3b 0d 0a 7d 0d 0a   210, 200);..}..
0fb0: 74 61 62 6c 65 2e 73 62 73 64 69 66 66 20 74 72  table.sbsdiff tr
0fc0: 20 74 64 2e 63 68 61 6e 67 65 64 76 6f 69 64 20   td.changedvoid 
0fd0: 7b 0d 0a 20 20 62 61 63 6b 67 72 6f 75 6e 64 2d  {..  background-
0fe0: 63 6f 6c 6f 72 3a 20 72 67 62 28 31 39 30 2c 20  color: rgb(190, 
0ff0: 31 39 30 2c 20 31 38 30 29 3b 0d 0a 7d 0d 0a 0d  190, 180);..}...
1000: 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ./**************
1010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1020: 2a 2a 2a 0d 0a 20 2a 0d 0a 20 2a 20 20 53 4f 20  ***.. *.. *  SO 
1030: 6c 6f 6f 6b 61 6c 69 6b 65 2e 0d 0a 20 2a 0d 0a  lookalike... *..
1040: 20 2a 2f 0d 0a 68 74 6d 6c 20 7b 0d 0a 7d 0d 0a   */..html {..}..
1050: 62 6f 64 79 20 7b 0d 0a 20 20 20 70 61 64 64 69  body {..   paddi
1060: 6e 67 3a 20 30 3b 0d 0a 20 20 20 6d 61 72 67 69  ng: 0;..   margi
1070: 6e 3a 20 30 3b 0d 0a 7d 0d 0a 62 6f 64 79 2c 20  n: 0;..}..body, 
1080: 70 2c 20 61 72 74 69 63 6c 65 2c 20 74 64 20 7b  p, article, td {
1090: 0d 0a 20 20 20 66 6f 6e 74 2d 66 61 6d 69 6c 79  ..   font-family
10a0: 3a 20 41 72 69 61 6c 3b 0d 0a 20 20 20 66 6f 6e  : Arial;..   fon
10b0: 74 2d 73 69 7a 65 3a 20 31 34 70 78 3b 0d 0a 20  t-size: 14px;.. 
10c0: 20 20 63 6f 6c 6f 72 3a 20 23 31 31 31 3b 0d 0a    color: #111;..
10d0: 7d 0d 0a 70 2c 20 61 72 74 69 63 6c 65 20 7b 0d  }..p, article {.
10e0: 0a 20 20 20 6c 69 6e 65 2d 68 65 69 67 68 74 3a  .   line-height:
10f0: 20 31 37 35 25 3b 0d 0a 7d 0d 0a 6c 69 20 7b 0d   175%;..}..li {.
1100: 0a 20 20 20 6d 61 72 67 69 6e 2d 62 6f 74 74 6f  .   margin-botto
1110: 6d 3a 20 35 70 74 3b 0d 0a 7d 0d 0a 2e 63 6f 6e  m: 5pt;..}...con
1120: 74 61 69 6e 65 72 20 7b 0d 0a 20 20 20 6d 61 72  tainer {..   mar
1130: 67 69 6e 2d 6c 65 66 74 3a 20 61 75 74 6f 3b 0d  gin-left: auto;.
1140: 0a 20 20 20 6d 61 72 67 69 6e 2d 72 69 67 68 74  .   margin-right
1150: 3a 20 61 75 74 6f 3b 0d 0a 20 20 20 77 69 64 74  : auto;..   widt
1160: 68 3a 20 39 36 30 70 78 3b 0d 0a 20 20 20 63 6c  h: 960px;..   cl
1170: 65 61 72 3a 20 62 6f 74 68 3b 0d 0a 7d 0d 0a 61  ear: both;..}..a
1180: 20 7b 0d 0a 20 20 20 74 65 78 74 2d 64 65 63 6f   {..   text-deco
1190: 72 61 74 69 6f 6e 3a 20 6e 6f 6e 65 3b 0d 0a 20  ration: none;.. 
11a0: 20 20 66 6f 6e 74 2d 77 65 69 67 68 74 3a 20 37    font-weight: 7
11b0: 30 30 3b 0d 0a 20 20 20 63 6f 6c 6f 72 3a 20 23  00;..   color: #
11c0: 30 37 63 3b 0d 0a 7d 0d 0a 61 3a 76 69 73 69 74  07c;..}..a:visit
11d0: 65 64 20 7b 0d 0a 20 20 20 63 6f 6c 6f 72 3a 20  ed {..   color: 
11e0: 23 34 36 38 3b 0d 0a 7d 0d 0a 2e 68 65 61 64 65  #468;..}...heade
11f0: 72 20 7b 0d 0a 20 20 20 62 61 63 6b 67 72 6f 75  r {..   backgrou
1200: 6e 64 3a 20 23 65 65 65 3b 0d 0a 20 20 20 63 6f  nd: #eee;..   co
1210: 6c 6f 72 3a 20 23 39 39 39 3b 0d 0a 20 20 20 70  lor: #999;..   p
1220: 61 64 64 69 6e 67 3a 20 32 70 78 20 30 3b 0d 0a  adding: 2px 0;..
1230: 7d 0d 0a 23 74 69 74 6c 65 20 7b 0d 0a 20 20 20  }..#title {..   
1240: 66 6c 6f 61 74 3a 20 6c 65 66 74 3b 0d 0a 20 20  float: left;..  
1250: 20 63 6f 6c 6f 72 3a 20 23 36 36 36 3b 0d 0a 20   color: #666;.. 
1260: 20 20 66 6f 6e 74 2d 77 65 69 67 68 74 3a 20 37    font-weight: 7
1270: 30 30 3b 0d 0a 20 20 20 6d 61 72 67 69 6e 3a 20  00;..   margin: 
1280: 33 70 78 3b 0d 0a 7d 0d 0a 0d 0a 2e 62 61 64 67  3px;..}.....badg
1290: 65 31 20 7b 20 63 6f 6c 6f 72 3a 20 23 66 64 35  e1 { color: #fd5
12a0: 3b 20 7d 0d 0a 2e 62 61 64 67 65 32 20 7b 20 63  ; }...badge2 { c
12b0: 6f 6c 6f 72 3a 20 23 63 63 63 3b 20 7d 0d 0a 2e  olor: #ccc; }...
12c0: 62 61 64 67 65 33 20 7b 20 63 6f 6c 6f 72 3a 20  badge3 { color: 
12d0: 23 63 39 36 3b 20 7d 0d 0a 0d 0a 23 6c 6f 67 6f  #c96; }....#logo
12e0: 20 7b 0d 0a 20 20 20 68 65 69 67 68 74 3a 20 31   {..   height: 1
12f0: 30 30 70 78 3b 0d 0a 7d 0d 0a 23 6e 61 76 6c 69  00px;..}..#navli
1300: 73 74 20 7b 0d 0a 20 20 20 70 61 64 64 69 6e 67  st {..   padding
1310: 2d 74 6f 70 3a 20 35 35 70 78 3b 0d 0a 7d 0d 0a  -top: 55px;..}..
1320: 23 6e 61 76 6c 69 73 74 20 61 20 7b 20 0d 0a 20  #navlist a { .. 
1330: 20 20 63 6f 6c 6f 72 3a 20 23 66 66 66 66 66 66    color: #ffffff
1340: 3b 0d 0a 20 20 20 66 6f 6e 74 2d 77 65 69 67 68  ;..   font-weigh
1350: 74 3a 20 39 30 30 3b 0d 0a 20 20 20 66 6f 6e 74  t: 900;..   font
1360: 2d 73 69 7a 65 3a 20 31 33 30 25 3b 0d 0a 20 20  -size: 130%;..  
1370: 20 70 61 64 64 69 6e 67 3a 20 34 70 78 20 31 35   padding: 4px 15
1380: 70 78 3b 0d 0a 20 20 20 62 61 63 6b 67 72 6f 75  px;..   backgrou
1390: 6e 64 3a 20 23 37 37 37 3b 0d 0a 7d 0d 0a 23 6e  nd: #777;..}..#n
13a0: 61 76 6c 69 73 74 20 61 2e 63 75 72 72 65 6e 74  avlist a.current
13b0: 2c 20 23 6e 61 76 6c 69 73 74 20 61 3a 68 6f 76  , #navlist a:hov
13c0: 65 72 20 7b 20 0d 0a 20 20 20 62 61 63 6b 67 72  er { ..   backgr
13d0: 6f 75 6e 64 3a 20 23 66 39 30 3b 0d 0a 7d 0d 0a  ound: #f90;..}..
13e0: 23 6e 61 76 6c 69 73 74 20 61 2e 6c 61 73 74 20  #navlist a.last 
13f0: 7b 20 0d 0a 20 20 20 6d 61 72 67 69 6e 2d 6c 65  { ..   margin-le
1400: 66 74 3a 20 35 30 70 78 3b 3b 0d 0a 7d 0d 0a 0d  ft: 50px;;..}...
1410: 0a 0d 0a 2e 6d 61 69 6e 62 61 72 20 7b 0d 0a 20  ....mainbar {.. 
1420: 20 20 77 69 64 74 68 3a 20 37 33 30 70 78 3b 0d    width: 730px;.
1430: 0a 20 20 20 66 6c 6f 61 74 3a 20 6c 65 66 74 3b  .   float: left;
1440: 0d 0a 20 20 20 70 61 64 64 69 6e 67 2d 74 6f 70  ..   padding-top
1450: 3a 20 31 30 70 78 3b 0d 0a 7d 0d 0a 0d 0a 2e 73  : 10px;..}.....s
1460: 69 64 65 62 61 72 20 7b 0d 0a 20 20 20 77 69 64  idebar {..   wid
1470: 74 68 3a 20 32 32 30 70 78 3b 0d 0a 20 20 20 66  th: 220px;..   f
1480: 6c 6f 61 74 3a 20 72 69 67 68 74 3b 0d 0a 7d 0d  loat: right;..}.
1490: 0a 0d 0a 0d 0a 2e 74 6f 70 69 63 20 7b 0d 0a 20  ......topic {.. 
14a0: 20 20 20 70 61 64 64 69 6e 67 3a 20 32 32 70 74     padding: 22pt
14b0: 20 30 20 31 35 70 74 20 30 3b 0d 0a 20 20 20 20   0 15pt 0;..    
14c0: 62 6f 72 64 65 72 2d 62 6f 74 74 6f 6d 3a 20 31  border-bottom: 1
14d0: 70 78 20 73 6f 6c 69 64 20 23 39 39 39 3b 0d 0a  px solid #999;..
14e0: 7d 0d 0a 2e 74 6f 70 69 63 20 74 74 2c 20 2e 74  }...topic tt, .t
14f0: 6f 70 69 63 20 6b 62 64 20 7b 0d 0a 20 20 20 66  opic kbd {..   f
1500: 6f 6e 74 2d 73 69 7a 65 3a 20 38 30 25 3b 0d 0a  ont-size: 80%;..
1510: 20 20 20 63 6f 6c 6f 72 3a 20 23 35 35 35 3b 0d     color: #555;.
1520: 0a 20 20 20 62 61 63 6b 67 72 6f 75 6e 64 3a 20  .   background: 
1530: 23 66 37 66 37 66 37 3b 0d 0a 20 20 20 6d 61 72  #f7f7f7;..   mar
1540: 67 69 6e 2d 6c 65 66 74 3a 20 33 30 70 78 3b 0d  gin-left: 30px;.
1550: 0a 20 20 20 64 69 73 70 6c 61 79 3a 20 62 6c 6f  .   display: blo
1560: 63 6b 3b 0d 0a 7d 0d 0a 2e 74 6f 70 69 63 2d 6f  ck;..}...topic-o
1570: 70 74 69 6f 6e 73 20 61 2c 20 2e 74 6f 70 69 63  ptions a, .topic
1580: 2d 6f 70 74 69 6f 6e 73 20 7b 0d 0a 20 20 20 63  -options {..   c
1590: 6f 6c 6f 72 3a 20 23 61 61 61 3b 0d 0a 20 20 20  olor: #aaa;..   
15a0: 66 6f 6e 74 2d 77 65 69 67 68 74 3a 20 31 30 30  font-weight: 100
15b0: 3b 0d 0a 20 20 20 70 61 64 64 69 6e 67 2d 74 6f  ;..   padding-to
15c0: 70 3a 20 33 30 70 78 3b 0d 0a 7d 0d 0a 75 6c 2e  p: 30px;..}..ul.
15d0: 74 6f 70 69 63 2d 6c 69 73 74 20 7b 0d 0a 20 20  topic-list {..  
15e0: 20 6d 61 72 67 69 6e 2d 74 6f 70 3a 20 32 30 70   margin-top: 20p
15f0: 74 3b 0d 0a 20 20 20 70 61 64 64 69 6e 67 3a 20  t;..   padding: 
1600: 30 3b 0d 0a 7d 0d 0a 0d 0a 0d 0a 23 68 65 6c 70  0;..}......#help
1610: 62 6f 78 20 7b 0d 0a 20 20 20 62 61 63 6b 67 72  box {..   backgr
1620: 6f 75 6e 64 3a 20 23 66 65 63 3b 0d 0a 20 20 20  ound: #fec;..   
1630: 62 6f 72 64 65 72 2d 72 61 64 69 75 73 3a 20 35  border-radius: 5
1640: 70 78 3b 0d 0a 20 20 20 70 61 64 64 69 6e 67 3a  px;..   padding:
1650: 20 31 30 70 78 3b 0d 0a 20 20 20 6d 61 72 67 69   10px;..   margi
1660: 6e 2d 74 6f 70 3a 20 31 35 70 78 3b 0d 0a 20 20  n-top: 15px;..  
1670: 20 63 6f 6c 6f 72 3a 20 23 37 35 30 3b 0d 0a 7d   color: #750;..}
1680: 0d 0a 23 68 65 6c 70 62 6f 78 20 68 34 20 7b 0d  ..#helpbox h4 {.
1690: 0a 20 20 20 63 6f 6c 6f 72 3a 20 23 61 30 30 3b  .   color: #a00;
16a0: 0d 0a 20 20 20 66 6f 6e 74 2d 73 69 7a 65 3a 20  ..   font-size: 
16b0: 31 34 30 25 3b 0d 0a 20 20 20 6d 61 72 67 69 6e  140%;..   margin
16c0: 3a 20 30 3b 0d 0a 7d 0d 0a 0d 0a 2e 74 61 67 20  : 0;..}.....tag 
16d0: 7b 0d 0a 20 20 20 70 61 64 64 69 6e 67 3a 32 70  {..   padding:2p
16e0: 78 20 35 70 78 3b 0d 0a 20 20 20 62 61 63 6b 67  x 5px;..   backg
16f0: 72 6f 75 6e 64 3a 23 65 31 65 39 66 31 3b 0d 0a  round:#e1e9f1;..
1700: 20 20 20 63 6f 6c 6f 72 3a 23 35 38 61 3b 0d 0a     color:#58a;..
1710: 20 20 20 62 6f 72 64 65 72 3a 31 70 78 20 6f 75     border:1px ou
1720: 74 73 65 74 20 23 63 64 65 3b 0d 0a 7d 0d 0a 0d  tset #cde;..}...
1730: 0a 0d 0a 69 6e 70 75 74 5b 74 79 70 65 3d 73 75  ...input[type=su
1740: 62 6d 69 74 5d 20 7b 0d 0a 20 20 20 62 6f 72 64  bmit] {..   bord
1750: 65 72 3a 20 31 70 78 20 73 6f 6c 69 64 20 62 6c  er: 1px solid bl
1760: 61 63 6b 3b 0d 0a 20 20 20 70 61 64 64 69 6e 67  ack;..   padding
1770: 3a 20 33 70 78 20 31 30 70 78 3b 0d 0a 20 20 20  : 3px 10px;..   
1780: 66 6f 6e 74 3a 20 6e 6f 72 6d 61 6c 20 6e 6f 72  font: normal nor
1790: 6d 61 6c 20 62 6f 6c 64 20 31 34 30 25 20 22 54  mal bold 140% "T
17a0: 72 65 62 75 63 68 65 74 20 4d 53 22 2c 20 73 61  rebuchet MS", sa
17b0: 6e 73 2d 73 65 72 69 66 3b 0d 0a 7d 0d 0a 74 65  ns-serif;..}..te
17c0: 78 74 61 72 65 61 20 7b 0d 0a 20 20 20 62 6f 72  xtarea {..   bor
17d0: 64 65 72 3a 20 31 70 78 20 73 6f 6c 69 64 20 23  der: 1px solid #
17e0: 39 39 39 3b 0d 0a 20 20 20 62 6f 72 64 65 72 2d  999;..   border-
17f0: 62 6f 74 74 6f 6d 3a 20 37 70 78 20 73 6f 6c 69  bottom: 7px soli
1800: 64 20 23 64 64 64 3b 0d 0a 7d 0d 0a 0d 0a 0d 0a  d #ddd;..}......
1810: 23 66 6f 6f 74 65 72 2d 73 70 61 63 65 72 20 7b  #footer-spacer {
1820: 0d 0a 20 20 20 63 6c 65 61 72 3a 20 62 6f 74 68  ..   clear: both
1830: 3b 0d 0a 20 20 20 70 61 64 64 69 6e 67 2d 74 6f  ;..   padding-to
1840: 70 3a 20 31 33 30 70 78 3b 0d 0a 7d 0d 0a 66 6f  p: 130px;..}..fo
1850: 6f 74 65 72 20 7b 0d 0a 20 20 20 63 6c 65 61 72  oter {..   clear
1860: 3a 20 62 6f 74 68 3b 0d 0a 20 20 20 62 61 63 6b  : both;..   back
1870: 67 72 6f 75 6e 64 3a 20 23 35 35 35 3b 0d 0a 20  ground: #555;.. 
1880: 20 20 70 61 64 64 69 6e 67 3a 20 36 35 70 78 20    padding: 65px 
1890: 32 37 35 70 78 3b 0d 0a 20 20 20 62 6f 72 64 65  275px;..   borde
18a0: 72 2d 74 6f 70 3a 20 39 70 78 20 73 6f 6c 69 64  r-top: 9px solid
18b0: 20 62 6c 61 63 6b 3b 0d 0a 20 20 20 63 6f 6c 6f   black;..   colo
18c0: 72 3a 20 23 65 65 65 3b 0d 0a 7d 0d 0a 66 6f 6f  r: #eee;..}..foo
18d0: 74 65 72 20 70 20 7b 0d 0a 20 20 20 63 6f 6c 6f  ter p {..   colo
18e0: 72 3a 20 23 39 39 39 3b 0d 0a 7d 0d 0a 66 6f 6f  r: #999;..}..foo
18f0: 74 65 72 20 61 2c 20 66 6f 6f 74 65 72 20 61 3a  ter a, footer a:
1900: 76 69 73 69 74 65 64 20 7b 0d 0a 20 20 20 63 6f  visited {..   co
1910: 6c 6f 72 3a 20 23 66 65 63 3b 0d 0a 7d 0d 0a 66  lor: #fec;..}..f
1920: 6f 6f 74 65 72 20 75 6c 20 7b 0d 0a 20 20 20 6c  ooter ul {..   l
1930: 69 73 74 2d 73 74 79 6c 65 2d 74 79 70 65 3a 20  ist-style-type: 
1940: 73 71 75 61 72 65 3b 0d 0a 20 20 20 70 61 64 64  square;..   padd
1950: 69 6e 67 3a 20 30 3b 0d 0a 7d 0d 0a 66 6f 6f 74  ing: 0;..}..foot
1960: 65 72 20 6c 69 20 7b 0d 0a 20 20 20 64 69 73 70  er li {..   disp
1970: 6c 61 79 3a 20 69 6e 6c 69 6e 65 3b 0d 0a 20 20  lay: inline;..  
1980: 20 70 61 64 64 69 6e 67 2d 72 69 67 68 74 3a 20   padding-right: 
1990: 31 30 70 74 3b 0d 0a 7d 0d 0a 66 6f 6f 74 65 72  10pt;..}..footer
19a0: 20 6c 69 3a 62 65 66 6f 72 65 20 7b 0d 0a 20 20   li:before {..  
19b0: 20 63 6f 6c 6f 72 3a 20 23 66 37 33 3b 0d 0a 20   color: #f73;.. 
19c0: 20 20 63 6f 6e 74 65 6e 74 3a 20 22 e2 ac 9b 20    content: "⬛ 
19d0: 20 22 3b 0d 0a 7d 0d 0a 66 6f 6f 74 65 72 20 6c   ";..}..footer l
19e0: 69 3a 6e 74 68 2d 63 68 69 6c 64 28 65 76 65 6e  i:nth-child(even
19f0: 29 3a 62 65 66 6f 72 65 20 7b 0d 0a 20 20 20 63  ):before {..   c
1a00: 6f 6c 6f 72 3a 20 23 66 63 39 3b 0d 0a 7d 0d 0a  olor: #fc9;..}..
1a10: 66 6f 6f 74 65 72 20 6c 69 3a 6e 74 68 2d 63 68  footer li:nth-ch
1a20: 69 6c 64 28 33 29 3a 62 65 66 6f 72 65 20 7b 0d  ild(3):before {.
1a30: 0a 20 20 20 63 6f 6c 6f 72 3a 20 23 35 37 66 3b  .   color: #57f;
1a40: 0d 0a 7d 0d 0a 66 6f 6f 74 65 72 20 6c 69 3a 6e  ..}..footer li:n
1a50: 74 68 2d 63 68 69 6c 64 28 34 29 3a 62 65 66 6f  th-child(4):befo
1a60: 72 65 20 7b 0d 0a 20 20 20 63 6f 6c 6f 72 3a 20  re {..   color: 
1a70: 23 36 66 37 3b 0d 0a 7d 0d 0a 0d 0a 0d 0a 23 6d  #6f7;..}......#m
1a80: 61 69 6e 20 7b 0d 0a 20 20 20 70 61 64 64 69 6e  ain {..   paddin
1a90: 67 2d 74 6f 70 3a 20 33 30 70 78 3b 0d 0a 20 20  g-top: 30px;..  
1aa0: 20 6d 69 6e 2d 68 65 69 67 68 74 3a 20 37 30 30   min-height: 700
1ab0: 70 78 3b 0d 0a 7d 0d 0a 23 6d 61 69 6e 20 2e 63  px;..}..#main .c
1ac0: 6f 6e 74 65 6e 74 20 7b 0d 0a 20 20 20 70 61 64  ontent {..   pad
1ad0: 64 69 6e 67 2d 74 6f 70 3a 20 31 35 70 74 3b 0d  ding-top: 15pt;.
1ae0: 0a 20 20 20 70 61 64 64 69 6e 67 2d 62 6f 74 74  .   padding-bott
1af0: 6f 6d 3a 20 35 30 70 74 3b 0d 0a 7d 0d 0a 68 32  om: 50pt;..}..h2
1b00: 2e 73 75 62 74 69 74 6c 65 20 7b 0d 0a 20 20 20  .subtitle {..   
1b10: 66 6f 6e 74 2d 73 69 7a 65 3a 20 32 34 70 78 3b  font-size: 24px;
1b20: 0d 0a 20 20 20 66 6f 6e 74 2d 77 65 69 67 68 74  ..   font-weight
1b30: 3a 20 37 30 30 3b 20 20 20 0d 0a 20 20 20 64 69  : 700;   ..   di
1b40: 73 70 6c 61 79 3a 20 69 6e 6c 69 6e 65 3b 0d 0a  splay: inline;..
1b50: 20 20 20 62 6f 72 64 65 72 2d 62 6f 74 74 6f 6d     border-bottom
1b60: 3a 20 31 70 78 20 73 6f 6c 69 64 20 23 39 39 39  : 1px solid #999
1b70: 3b 0d 0a 7d 0d 0a 2e 73 75 62 6d 65 6e 75 20 7b  ;..}...submenu {
1b80: 20 0d 0a 20 20 20 64 69 73 70 6c 61 79 3a 20 69   ..   display: i
1b90: 6e 6c 69 6e 65 3b 0d 0a 20 20 20 62 61 63 6b 67  nline;..   backg
1ba0: 72 6f 75 6e 64 3a 20 77 68 69 74 65 3b 0d 0a 20  round: white;.. 
1bb0: 20 20 62 6f 72 64 65 72 3a 20 31 70 78 20 23 66    border: 1px #f
1bc0: 66 66 20 73 6f 6c 69 64 3b 0d 0a 20 20 20 62 6f  ff solid;..   bo
1bd0: 72 64 65 72 2d 62 6f 74 74 6f 6d 3a 20 31 70 78  rder-bottom: 1px
1be0: 20 23 39 39 39 20 73 6f 6c 69 64 3b 0d 0a 7d 0d   #999 solid;..}.
1bf0: 0a 2e 73 75 62 6d 65 6e 75 20 61 2c 20 2e 73 75  ..submenu a, .su
1c00: 62 6d 65 6e 75 20 61 3a 76 69 73 69 74 65 64 20  bmenu a:visited 
1c10: 7b 0d 0a 20 20 66 6f 6e 74 2d 73 69 7a 65 3a 20  {..  font-size: 
1c20: 31 38 70 78 3b 0d 0a 20 20 66 6f 6e 74 2d 77 65  18px;..  font-we
1c30: 69 67 68 74 3a 20 32 30 30 3b 0d 0a 20 20 63 6f  ight: 200;..  co
1c40: 6c 6f 72 3a 20 62 6c 61 63 6b 3b 0d 0a 7d 0d 0a  lor: black;..}..
1c50: 2e 73 75 62 6d 65 6e 75 20 61 3a 68 6f 76 65 72  .submenu a:hover
1c60: 20 7b 0d 0a 20 20 20 62 6f 72 64 65 72 3a 20 31   {..   border: 1
1c70: 70 78 20 23 36 36 36 20 73 6f 6c 69 64 3b 0d 0a  px #666 solid;..
1c80: 20 20 20 62 6f 72 64 65 72 2d 62 6f 74 74 6f 6d     border-bottom
1c90: 3a 20 77 68 69 74 65 3b 0d 0a 7d 0d 0a 0d 0a 63  : white;..}....c
1ca0: 6f 64 65 20 7b 0d 0a 20 20 20 62 61 63 6b 67 72  ode {..   backgr
1cb0: 6f 75 6e 64 3a 20 23 65 65 65 3b 0d 0a 7d 0d 0a  ound: #eee;..}..
1cc0: 70 72 65 20 7b 0d 0a 20 20 20 62 61 63 6b 67 72  pre {..   backgr
1cd0: 6f 75 6e 64 3a 20 23 66 33 66 33 66 33 3b 0d 0a  ound: #f3f3f3;..
1ce0: 20 20 20 70 61 64 64 69 6e 67 3a 20 33 70 74 3b     padding: 3pt;
1cf0: 0d 0a 7d 0d 0a 0d 0a 75 6c 20 7b 0d 0a 20 20 20  ..}....ul {..   
1d00: 6d 61 72 67 69 6e 2d 74 6f 70 3a 20 33 70 74 3b  margin-top: 3pt;
1d10: 0d 0a 7d 0d 0a 0d 0a 2e 73 65 61 72 63 68 2d 72  ..}.....search-r
1d20: 65 73 75 6c 74 20 7b 0d 0a 20 20 20 70 61 64 64  esult {..   padd
1d30: 69 6e 67 3a 20 35 70 74 3b 0d 0a 7d 0d 0a 2e 73  ing: 5pt;..}...s
1d40: 65 61 72 63 68 2d 72 65 73 75 6c 74 20 61 20 7b  earch-result a {
1d50: 0d 0a 20 20 20 66 6f 6e 74 2d 73 69 7a 65 3a 20  ..   font-size: 
1d60: 31 34 30 25 3b 0d 0a 20 20 20 66 6f 6e 74 2d 77  140%;..   font-w
1d70: 65 69 67 68 74 3a 20 33 30 30 3b 0d 0a 7d 0d 0a  eight: 300;..}..
1d80: 2e 73 65 61 72 63 68 2d 6c 69 6e 6b 20 61 20 7b  .search-link a {
1d90: 0d 0a 20 20 20 66 6f 6e 74 2d 77 65 69 67 68 74  ..   font-weight
1da0: 3a 20 31 30 30 3b 0d 0a 20 20 20 66 6f 6e 74 2d  : 100;..   font-
1db0: 73 69 7a 65 3a 20 36 30 25 3b 0d 0a 20 20 20 63  size: 60%;..   c
1dc0: 6f 6c 6f 72 3a 20 23 33 33 37 37 33 33 3b 0d 0a  olor: #337733;..
1dd0: 7d 0d 0a 2e 73 65 61 72 63 68 2d 65 78 63 65 72  }...search-excer
1de0: 70 74 20 7b 0d 0a 20 20 20 63 6f 6c 6f 72 3a 20  pt {..   color: 
1df0: 23 33 33 33 3b 0d 0a 7d 0d 0a 2e 73 65 61 72 63  #333;..}...searc
1e00: 68 2d 68 65 61 64 6c 69 6e 65 20 7b 0d 0a 20 20  h-headline {..  
1e10: 20 66 6f 6e 74 2d 73 69 7a 65 3a 20 33 30 30 25   font-size: 300%
1e20: 3b 0d 0a 20 20 20 63 6f 6c 6f 72 3a 20 23 39 39  ;..   color: #99
1e30: 39 3b 0d 0a 20 20 20 6c 65 74 74 65 72 2d 73 70  9;..   letter-sp
1e40: 61 63 69 6e 67 3a 20 35 70 74 3b 0d 0a 7d 0d 0a  acing: 5pt;..}..
1e50: 2e 73 65 61 72 63 68 2d 65 78 63 65 72 70 74 20  .search-excerpt 
1e60: 6d 61 72 6b 20 7b 0d 0a 20 20 20 74 65 78 74 2d  mark {..   text-
1e70: 64 65 63 6f 72 61 74 69 6f 6e 3a 20 6e 6f 6e 65  decoration: none
1e80: 3b 0d 0a 20 20 20 66 6f 6e 74 2d 73 74 79 6c 65  ;..   font-style
1e90: 3a 20 69 74 61 6c 69 63 3b 0d 0a 20 20 20 66 6f  : italic;..   fo
1ea0: 6e 74 2d 77 65 69 67 68 74 3a 20 37 30 30 3b 0d  nt-weight: 700;.
1eb0: 0a 20 20 20 63 6f 6c 6f 72 3a 20 23 61 61 33 33  .   color: #aa33
1ec0: 32 32 3b 0d 0a 7d 0d 0a 0d 0a 23 6c 61 6e 67 75  22;..}....#langu
1ed0: 61 67 65 2d 62 61 72 20 7b 0d 0a 20 20 20 63 6c  age-bar {..   cl
1ee0: 65 61 72 3a 20 62 6f 74 68 3b 0d 0a 20 20 20 70  ear: both;..   p
1ef0: 6f 73 69 74 69 6f 6e 3a 20 72 65 6c 61 74 69 76  osition: relativ
1f00: 65 3b 0d 0a 20 20 20 74 6f 70 3a 20 2d 32 70 78  e;..   top: -2px
1f10: 3b 0d 0a 20 20 20 77 69 64 74 68 3a 20 31 30 30  ;..   width: 100
1f20: 25 3b 0d 0a 20 20 20 68 65 69 67 68 74 3a 20 35  %;..   height: 5
1f30: 70 78 3b 0d 0a 20 20 20 62 6f 78 2d 73 69 7a 69  px;..   box-sizi
1f40: 6e 67 3a 20 62 6f 72 64 65 72 2d 62 6f 78 3b 0d  ng: border-box;.
1f50: 0a 20 20 20 62 61 63 6b 67 72 6f 75 6e 64 3a 20  .   background: 
1f60: 23 65 65 66 3b 0d 0a 7d 0d 0a 27 0a 63 6f 6e 66  #eef;..}..'.conf
1f70: 69 67 20 2f 63 6f 6e 66 69 67 20 32 39 39 30 0a  ig /config 2990.
1f80: 31 33 39 35 30 36 38 30 31 33 20 27 68 65 61 64  1395068013 'head
1f90: 65 72 27 20 76 61 6c 75 65 20 27 3c 68 74 6d 6c  er' value '<html
1fa0: 3e 0d 0a 3c 68 65 61 64 3e 0d 0a 3c 62 61 73 65  >..<head>..<base
1fb0: 20 68 72 65 66 3d 22 24 62 61 73 65 75 72 6c 2f   href="$baseurl/
1fc0: 24 63 75 72 72 65 6e 74 5f 70 61 67 65 22 20 2f  $current_page" /
1fd0: 3e 0d 0a 3c 74 69 74 6c 65 3e 24 3c 70 72 6f 6a  >..<title>$<proj
1fe0: 65 63 74 5f 6e 61 6d 65 3e 3a 20 24 3c 74 69 74  ect_name>: $<tit
1ff0: 6c 65 3e 3c 2f 74 69 74 6c 65 3e 0d 0a 20 20 3c  le></title>..  <
2000: 6c 69 6e 6b 20 72 65 6c 3d 61 6c 74 65 72 6e 61  link rel=alterna
2010: 74 65 20 74 79 70 65 3d 22 61 70 70 6c 69 63 61  te type="applica
2020: 74 69 6f 6e 2f 72 73 73 2b 78 6d 6c 22 20 74 69  tion/rss+xml" ti
2030: 74 6c 65 3d 54 69 6d 65 6c 69 6e 65 20 68 72 65  tle=Timeline hre
2040: 66 3d 22 24 68 6f 6d 65 2f 74 69 6d 65 6c 69 6e  f="$home/timelin
2050: 65 2e 72 73 73 22 3e 0d 0a 20 20 3c 6c 69 6e 6b  e.rss">..  <link
2060: 20 72 65 6c 3d 73 74 79 6c 65 73 68 65 65 74 20   rel=stylesheet 
2070: 68 72 65 66 3d 22 24 68 6f 6d 65 2f 73 74 79 6c  href="$home/styl
2080: 65 2e 63 73 73 3f 64 65 66 61 75 6c 74 22 20 74  e.css?default" t
2090: 79 70 65 3d 22 74 65 78 74 2f 63 73 73 22 20 6d  ype="text/css" m
20a0: 65 64 69 61 3d 22 73 63 72 65 65 6e 22 3e 0d 0a  edia="screen">..
20b0: 3c 6c 69 6e 6b 20 72 65 6c 3d 22 73 74 79 6c 65  <link rel="style
20c0: 73 68 65 65 74 22 20 68 72 65 66 3d 22 68 74 74  sheet" href="htt
20d0: 70 73 3a 2f 2f 67 6f 6f 67 6c 65 2d 63 6f 64 65  ps://google-code
20e0: 2d 70 72 65 74 74 69 66 79 2e 67 6f 6f 67 6c 65  -prettify.google
20f0: 63 6f 64 65 2e 63 6f 6d 2f 73 76 6e 2f 6c 6f 61  code.com/svn/loa
2100: 64 65 72 2f 70 72 65 74 74 69 66 79 2e 63 73 73  der/prettify.css
2110: 22 20 74 79 70 65 3d 22 74 65 78 74 2f 63 73 73  " type="text/css
2120: 22 20 6d 65 64 69 61 3d 22 73 63 72 65 65 6e 22  " media="screen"
2130: 3e 0d 0a 3c 73 63 72 69 70 74 20 73 72 63 3d 22  >..<script src="
2140: 2f 2f 61 6a 61 78 2e 67 6f 6f 67 6c 65 61 70 69  //ajax.googleapi
2150: 73 2e 63 6f 6d 2f 61 6a 61 78 2f 6c 69 62 73 2f  s.com/ajax/libs/
2160: 6a 71 75 65 72 79 2f 32 2e 31 2e 30 2f 6a 71 75  jquery/2.1.0/jqu
2170: 65 72 79 2e 6d 69 6e 2e 6a 73 22 3e 3c 2f 73 63  ery.min.js"></sc
2180: 72 69 70 74 3e 0d 0a 3c 73 63 72 69 70 74 20 73  ript>..<script s
2190: 72 63 3d 22 2f 2f 67 6f 6f 67 6c 65 2d 63 6f 64  rc="//google-cod
21a0: 65 2d 70 72 65 74 74 69 66 79 2e 67 6f 6f 67 6c  e-prettify.googl
21b0: 65 63 6f 64 65 2e 63 6f 6d 2f 73 76 6e 2f 6c 6f  ecode.com/svn/lo
21c0: 61 64 65 72 2f 72 75 6e 5f 70 72 65 74 74 69 66  ader/run_prettif
21d0: 79 2e 6a 73 3f 61 75 74 6f 6c 6f 61 64 3d 74 72  y.js?autoload=tr
21e0: 75 65 22 3e 3c 2f 73 63 72 69 70 74 3e 0d 0a 3c  ue"></script>..<
21f0: 2f 68 65 61 64 3e 0d 0a 3c 62 6f 64 79 20 6f 6e  /head>..<body on
2200: 4c 6f 61 64 3d 22 24 28 27 27 63 6f 64 65 2c 70  Load="$(''code,p
2210: 72 65 27 27 29 2e 61 64 64 43 6c 61 73 73 28 27  re'').addClass('
2220: 27 70 72 65 74 74 79 70 72 69 6e 74 27 27 29 3b  'prettyprint'');
2230: 22 3e 0d 0a 0d 0a 3c 68 65 61 64 65 72 20 63 6c  ">....<header cl
2240: 61 73 73 3d 68 65 61 64 65 72 3e 0d 0a 3c 64 69  ass=header>..<di
2250: 76 20 63 6c 61 73 73 3d 63 6f 6e 74 61 69 6e 65  v class=containe
2260: 72 3e 0d 0a 20 20 20 3c 61 20 68 72 65 66 3d 22  r>..   <a href="
2270: 2e 22 20 69 64 3d 22 74 69 74 6c 65 22 3e f0 9d  ." id="title">
2280: 8c 94 20 46 6f 73 73 69 6c 20 48 75 62 3c 2f 61   Fossil Hub</a
2290: 3e 0d 0a 20 20 20 3c 64 69 76 20 73 74 79 6c 65  >..   <div style
22a0: 3d 22 66 6c 6f 61 74 3a 72 69 67 68 74 22 3e 0d  ="float:right">.
22b0: 0a 20 20 20 20 20 20 3c 74 68 31 3e 0d 0a 20 20  .      <th1>..  
22c0: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66          if {[inf
22d0: 6f 20 65 78 69 73 74 73 20 6c 6f 67 69 6e 5d 7d  o exists login]}
22e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
22f0: 20 20 20 68 74 6d 6c 20 22 e2 9c 89 20 3c 61 20     html "✉ <a 
2300: 68 72 65 66 3d 27 27 24 68 6f 6d 65 2f 6c 6f 67  href=''$home/log
2310: 69 6e 27 27 20 63 6c 61 73 73 3d 27 27 70 72 6f  in'' class=''pro
2320: 66 69 6c 65 2d 6c 69 6e 6b 27 27 3e 24 6c 6f 67  file-link''>$log
2330: 69 6e 3c 2f 61 3e 20 37 35 31 22 0d 0a 20 20 20  in</a> 751"..   
2340: 20 20 20 20 20 20 20 20 20 20 20 20 68 74 6d 6c              html
2350: 20 22 3c 73 70 61 6e 20 63 6c 61 73 73 3d 62 61   "<span class=ba
2360: 64 67 65 31 3e e2 9c b9 3c 2f 73 70 61 6e 3e 31  dge1>✹</span>1
2370: 20 20 3c 73 70 61 6e 20 63 6c 61 73 73 3d 62 61    <span class=ba
2380: 64 67 65 33 3e e2 9c b9 3c 2f 73 70 61 6e 3e 35  dge3>✹</span>5
2390: 20 7c 20 22 0d 0a 20 20 20 20 20 20 20 20 20 20   | "..          
23a0: 20 20 20 20 20 68 74 6d 6c 20 22 3c 61 20 68 72       html "<a hr
23b0: 65 66 3d 27 27 24 68 6f 6d 65 2f 6c 6f 67 69 6e  ef=''$home/login
23c0: 27 27 3e 4c 6f 67 6f 75 74 3c 2f 61 3e 20 7c 20  ''>Logout</a> | 
23d0: 22 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65  "..          } e
23e0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..         
23f0: 20 20 20 20 20 20 20 68 74 6d 6c 20 22 3c 61 20         html "<a 
2400: 68 72 65 66 3d 27 27 24 68 6f 6d 65 2f 6c 6f 67  href=''$home/log
2410: 69 6e 27 27 3e 4c 6f 67 69 6e 3c 2f 61 3e 20 7c  in''>Login</a> |
2420: 20 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   "..            
2430: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2440: 20 20 20 69 66 20 7b 5b 68 61 73 63 61 70 20 73     if {[hascap s
2450: 5d 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ]} {..          
2460: 20 20 20 20 20 20 68 74 6d 6c 20 22 3c 61 20 68        html "<a h
2470: 72 65 66 3d 27 27 24 68 6f 6d 65 2f 73 65 74 75  ref=''$home/setu
2480: 70 27 27 3e 41 64 6d 69 6e 3c 2f 61 3e 20 7c 20  p''>Admin</a> | 
2490: 22 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65  "..          } e
24a0: 6c 73 65 69 66 20 7b 5b 68 61 73 63 61 70 20 61  lseif {[hascap a
24b0: 5d 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ]} {..          
24c0: 20 20 20 20 20 20 68 74 6d 6c 20 22 3c 61 20 68        html "<a h
24d0: 72 65 66 3d 27 27 24 68 6f 6d 65 2f 73 65 74 75  ref=''$home/setu
24e0: 70 5f 75 6c 69 73 74 27 27 3e 55 73 65 72 73 3c  p_ulist''>Users<
24f0: 2f 61 3e 20 7c 20 22 0d 0a 20 20 20 20 20 20 20  /a> | "..       
2500: 20 20 20 7d 0d 0a 20 20 20 20 20 20 3c 2f 74 68     }..      </th
2510: 31 3e 0d 0a 20 20 20 20 20 20 3c 61 20 68 72 65  1>..      <a hre
2520: 66 3d 22 2f 2f 66 6f 73 73 69 6c 2d 73 63 6d 2e  f="//fossil-scm.
2530: 6f 72 67 22 3e 46 6f 73 73 69 6c 20 6d 61 6e 75  org">Fossil manu
2540: 61 6c 3c 2f 61 3e 20 7c 0d 0a 20 20 20 20 20 20  al</a> |..      
2550: 3c 66 6f 72 6d 20 69 64 3d 67 6f 6f 67 6c 65 20  <form id=google 
2560: 73 74 79 6c 65 3d 22 64 69 73 70 6c 61 79 3a 69  style="display:i
2570: 6e 6c 69 6e 65 22 20 61 63 74 69 6f 6e 3d 22 77  nline" action="w
2580: 69 6b 69 22 3e 0d 0a 20 20 20 20 20 20 20 20 20  iki">..         
2590: 3c 69 6e 70 75 74 20 6e 61 6d 65 3d 22 6e 61 6d  <input name="nam
25a0: 65 22 20 73 69 7a 65 3d 22 32 38 22 20 76 61 6c  e" size="28" val
25b0: 75 65 3d 22 22 20 70 6c 61 63 65 68 6f 6c 64 65  ue="" placeholde
25c0: 72 3d 22 73 65 61 72 63 68 20 77 69 6b 69 2b 66  r="search wiki+f
25d0: 69 6c 65 73 22 3e 0d 0a 20 20 20 20 20 20 3c 2f  iles">..      </
25e0: 66 6f 72 6d 3e 0d 0a 20 20 20 20 20 20 3c 21 2d  form>..      <!-
25f0: 2d 66 6f 72 6d 20 69 64 3d 67 6f 6f 67 6c 65 20  -form id=google 
2600: 73 74 79 6c 65 3d 22 64 69 73 70 6c 61 79 3a 69  style="display:i
2610: 6e 6c 69 6e 65 22 20 61 63 74 69 6f 6e 3d 22 68  nline" action="h
2620: 74 74 70 3a 2f 2f 67 6f 6f 67 6c 65 2e 63 6f 6d  ttp://google.com
2630: 2f 73 65 61 72 63 68 22 3e 0d 0a 20 20 20 20 20  /search">..     
2640: 20 20 20 20 3c 69 6e 70 75 74 20 6e 61 6d 65 3d      <input name=
2650: 22 71 22 20 73 69 7a 65 3d 22 32 38 22 20 76 61  "q" size="28" va
2660: 6c 75 65 3d 22 22 20 70 6c 61 63 65 68 6f 6c 64  lue="" placehold
2670: 65 72 3d 22 73 65 61 72 63 68 22 3e 0d 0a 20 20  er="search">..  
2680: 20 20 20 20 20 20 20 3c 69 6e 70 75 74 20 74 79         <input ty
2690: 70 65 3d 22 68 69 64 64 65 6e 22 20 6e 61 6d 65  pe="hidden" name
26a0: 3d 22 61 73 5f 73 69 74 65 73 65 61 72 63 68 22  ="as_sitesearch"
26b0: 20 76 61 6c 75 65 3d 22 24 62 61 73 65 75 72 6c   value="$baseurl
26c0: 22 3e 0d 0a 20 20 20 20 20 20 3c 2f 66 6f 72 6d  ">..      </form
26d0: 2d 2d 3e 0d 0a 20 20 20 3c 2f 64 69 76 3e 0d 0a  -->..   </div>..
26e0: 3c 2f 64 69 76 3e 0d 0a 3c 2f 68 65 61 64 65 72  </div>..</header
26f0: 3e 0d 0a 0d 0a 3c 64 69 76 20 69 64 3d 6c 61 6e  >....<div id=lan
2700: 67 75 61 67 65 2d 62 61 72 3e 3c 74 68 31 3e 63  guage-bar><th1>c
2710: 61 74 63 68 20 7b 20 75 69 3a 3a 6c 61 6e 67 5f  atch { ui::lang_
2720: 73 74 61 74 73 20 7d 20 3c 2f 74 68 31 3e 3c 2f  stats } </th1></
2730: 64 69 76 3e 0d 0a 0d 0a 3c 64 69 76 20 63 6c 61  div>....<div cla
2740: 73 73 3d 22 63 6f 6e 74 61 69 6e 65 72 20 6c 6f  ss="container lo
2750: 67 6f 2d 74 69 74 6c 65 2d 6e 61 76 22 3e 0d 0a  go-title-nav">..
2760: 20 20 20 20 3c 61 20 68 72 65 66 3d 22 24 68 6f      <a href="$ho
2770: 6d 65 22 3e 3c 69 6d 67 20 69 64 3d 6c 6f 67 6f  me"><img id=logo
2780: 20 73 72 63 3d 22 24 68 6f 6d 65 2f 6c 6f 67 6f   src="$home/logo
2790: 22 20 61 6c 74 3d 22 24 3c 74 69 74 6c 65 3e 22  " alt="$<title>"
27a0: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 3c 2f 61 3e   align=left></a>
27b0: 0d 0a 20 20 20 20 3c 73 70 61 6e 20 63 6c 61 73  ..    <span clas
27c0: 73 3d 74 69 74 6c 65 3e 24 3c 70 72 6f 6a 65 63  s=title>$<projec
27d0: 74 5f 6e 61 6d 65 3e 3c 2f 73 70 61 6e 3e 0d 0a  t_name></span>..
27e0: 0d 0a 20 20 20 20 3c 6e 61 76 20 69 64 3d 6e 61  ..    <nav id=na
27f0: 76 6c 69 73 74 20 63 6c 61 73 73 3d 6d 61 69 6e  vlist class=main
2800: 6d 65 6e 75 3e 0d 0a 20 20 20 20 3c 74 68 31 3e  menu>..    <th1>
2810: 0d 0a 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  ..         if {[
2820: 61 6e 79 63 61 70 20 6a 6f 72 5d 7d 20 7b 0d 0a  anycap jor]} {..
2830: 20 20 20 20 20 20 20 20 20 20 20 68 74 6d 6c 20             html 
2840: 22 3c 61 20 68 72 65 66 3d 27 27 24 68 6f 6d 65  "<a href=''$home
2850: 2f 74 69 6d 65 6c 69 6e 65 27 27 3e 54 69 6d 65  /timeline''>Time
2860: 6c 69 6e 65 3c 2f 61 3e 5c 6e 22 0d 0a 20 20 20  line</a>\n"..   
2870: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2880: 20 20 69 66 20 7b 5b 68 61 73 63 61 70 20 6f 68    if {[hascap oh
2890: 5d 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ]} {..          
28a0: 20 68 74 6d 6c 20 22 3c 61 20 63 6c 61 73 73 3d   html "<a class=
28b0: 63 75 72 72 65 6e 74 20 68 72 65 66 3d 27 27 24  current href=''$
28c0: 68 6f 6d 65 2f 74 72 65 65 3f 63 69 3d 74 69 70  home/tree?ci=tip
28d0: 27 27 3e 46 69 6c 65 73 3c 2f 61 3e 5c 6e 22 0d  ''>Files</a>\n".
28e0: 0a 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  .         }..   
28f0: 20 20 20 20 20 20 69 66 20 7b 5b 68 61 73 63 61        if {[hasca
2900: 70 20 6f 5d 7d 20 7b 0d 0a 20 20 20 20 20 20 20  p o]} {..       
2910: 20 20 20 20 68 74 6d 6c 20 22 3c 61 20 68 72 65      html "<a hre
2920: 66 3d 27 27 24 68 6f 6d 65 2f 62 72 6c 69 73 74  f=''$home/brlist
2930: 27 27 3e 42 72 61 6e 63 68 65 73 3c 2f 61 3e 5c  ''>Branches</a>\
2940: 6e 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 68  n"..           h
2950: 74 6d 6c 20 22 3c 61 20 68 72 65 66 3d 27 27 24  tml "<a href=''$
2960: 68 6f 6d 65 2f 74 61 67 6c 69 73 74 27 27 3e 54  home/taglist''>T
2970: 61 67 73 3c 2f 61 3e 5c 6e 22 0d 0a 20 20 20 20  ags</a>\n"..    
2980: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2990: 20 69 66 20 7b 5b 68 61 73 63 61 70 20 72 5d 7d   if {[hascap r]}
29a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 68   {..           h
29b0: 74 6d 6c 20 22 3c 61 20 68 72 65 66 3d 27 27 24  tml "<a href=''$
29c0: 68 6f 6d 65 2f 72 70 74 76 69 65 77 3f 72 6e 3d  home/rptview?rn=
29d0: 31 27 27 3e 54 69 63 6b 65 74 73 3c 2f 61 3e 5c  1''>Tickets</a>\
29e0: 6e 22 0d 0a 20 20 20 20 20 20 20 20 20 7d 0d 0a  n"..         }..
29f0: 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61           if {[ha
2a00: 73 63 61 70 20 6a 5d 7d 20 7b 0d 0a 20 20 20 20  scap j]} {..    
2a10: 20 20 20 20 20 20 20 68 74 6d 6c 20 22 3c 61 20         html "<a 
2a20: 63 6c 61 73 73 3d 6c 61 73 74 20 68 72 65 66 3d  class=last href=
2a30: 27 27 24 68 6f 6d 65 2f 77 69 6b 69 27 27 3e 57  ''$home/wiki''>W
2a40: 69 6b 69 3c 2f 61 3e 5c 6e 22 0d 0a 20 20 20 20  iki</a>\n"..    
2a50: 20 20 20 20 20 20 20 68 74 6d 6c 20 22 3c 61 20         html "<a 
2a60: 68 72 65 66 3d 27 27 24 68 6f 6d 65 2f 74 69 6d  href=''$home/tim
2a70: 65 6c 69 6e 65 3f 79 3d 77 27 27 3e 52 43 3c 2f  eline?y=w''>RC</
2a80: 61 3e 5c 6e 22 0d 0a 20 20 20 20 20 20 20 20 20  a>\n"..         
2a90: 7d 0d 0a 20 20 20 20 3c 2f 74 68 31 3e 0d 0a 20  }..    </th1>.. 
2aa0: 20 20 20 3c 2f 6e 61 76 3e 0d 0a 3c 2f 64 69 76     </nav>..</div
2ab0: 3e 0d 0a 0d 0a 3c 64 69 76 20 63 6c 61 73 73 3d  >....<div class=
2ac0: 63 6f 6e 74 61 69 6e 65 72 20 69 64 3d 6d 61 69  container id=mai
2ad0: 6e 3e 0d 0a 20 20 20 3c 68 32 20 63 6c 61 73 73  n>..   <h2 class
2ae0: 3d 73 75 62 74 69 74 6c 65 3e 3c 62 3e 24 3c 74  =subtitle><b>$<t
2af0: 69 74 6c 65 3e 3c 2f 62 3e 3c 2f 68 32 3e 0d 0a  itle></b></h2>..
2b00: 0d 0a 3c 74 68 31 3e 0d 0a 20 20 63 61 74 63 68  ..<th1>..  catch
2b10: 20 7b 75 69 3a 3a 73 65 61 72 63 68 5f 6f 6e 5f   {ui::search_on_
2b20: 77 69 6b 69 7d 0d 0a 3c 2f 74 68 31 3e 27 0a 63  wiki}..</th1>'.c
2b30: 6f 6e 66 69 67 20 2f 63 6f 6e 66 69 67 20 39 30  onfig /config 90
2b40: 39 0a 31 33 39 32 35 33 38 34 30 36 20 27 66 6f  9.1392538406 'fo
2b50: 6f 74 65 72 27 20 76 61 6c 75 65 20 27 3c 2f 64  oter' value '</d
2b60: 69 76 3e 3c 21 2d 2d 63 6f 6e 74 61 69 6e 65 72  iv><!--container
2b70: 2d 2d 3e 0d 0a 0d 0a 20 20 20 3c 66 6f 6f 74 65  -->....   <foote
2b80: 72 20 63 6c 61 73 73 3d 66 6f 6f 74 65 72 3e 0d  r class=footer>.
2b90: 0a 0d 0a 20 20 20 20 20 20 3c 70 3e 3c 61 20 68  ...      <p><a h
2ba0: 72 65 66 3d 68 74 74 70 3a 2f 2f 66 6f 73 73 69  ref=http://fossi
2bb0: 6c 2d 73 63 6d 2e 6f 72 67 2f 3e 46 6f 73 73 69  l-scm.org/>Fossi
2bc0: 6c 3c 2f 61 3e 20 76 65 72 73 69 6f 6e 20 3c 74  l</a> version <t
2bd0: 74 3e 24 72 65 6c 65 61 73 65 5f 76 65 72 73 69  t>$release_versi
2be0: 6f 6e 3c 2f 74 74 3e 20 7c 20 4d 61 6e 69 66 65  on</tt> | Manife
2bf0: 73 74 3a 20 24 6d 61 6e 69 66 65 73 74 5f 76 65  st: $manifest_ve
2c00: 72 73 69 6f 6e 20 7c 20 4d 61 6e 69 66 65 73 74  rsion | Manifest
2c10: 20 64 61 74 65 3a 20 24 6d 61 6e 69 66 65 73 74   date: $manifest
2c20: 5f 64 61 74 65 3c 2f 70 3e 0d 0a 0d 0a 20 20 20  _date</p>....   
2c30: 20 20 20 3c 70 3e 20 20 0d 0a 20 20 20 20 20 20     <p>  ..      
2c40: 20 20 20 3c 61 20 68 72 65 66 3d 77 69 6b 69 3e     <a href=wiki>
2c50: 77 69 6b 69 3c 2f 61 3e 0d 0a 20 20 20 20 20 20  wiki</a>..      
2c60: 20 7c 20 3c 61 20 68 72 65 66 3d 6c 6f 67 69 6e   | <a href=login
2c70: 3e 61 63 63 6f 75 6e 74 3c 2f 61 3e 0d 0a 20 20  >account</a>..  
2c80: 20 20 20 20 20 7c 20 3c 61 20 68 72 65 66 3d 73       | <a href=s
2c90: 65 74 75 70 3e 61 64 6d 69 6e 3c 2f 61 3e 0d 0a  etup>admin</a>..
2ca0: 20 20 20 20 20 20 20 7c 20 3c 61 20 68 72 65 66         | <a href
2cb0: 3d 68 6f 6d 65 3e 68 6f 6d 65 3c 2f 61 3e 0d 0a  =home>home</a>..
2cc0: 20 20 20 20 20 20 3c 2f 70 3e 0d 0a 20 20 20 20        </p>..    
2cd0: 20 20 3c 75 6c 3e 0d 0a 20 20 20 20 20 20 20 20    <ul>..        
2ce0: 20 3c 6c 69 3e 3c 61 20 68 72 65 66 3d 74 72 65   <li><a href=tre
2cf0: 65 3f 63 69 3d 74 69 70 3e 46 69 6c 65 73 3c 2f  e?ci=tip>Files</
2d00: 61 3e 0d 0a 20 20 20 20 20 20 20 20 20 3c 6c 69  a>..         <li
2d10: 3e 3c 61 20 68 72 65 66 3d 7a 69 70 2f 74 72 75  ><a href=zip/tru
2d20: 6e 6b 2e 7a 69 70 3f 75 75 69 64 3d 74 72 75 6e  nk.zip?uuid=trun
2d30: 6b 3e 5a 49 50 3c 2f 61 3e 0d 0a 20 20 20 20 20  k>ZIP</a>..     
2d40: 20 20 20 20 3c 6c 69 3e 3c 61 20 68 72 65 66 3d      <li><a href=
2d50: 74 61 72 62 61 6c 6c 2f 74 72 75 6e 6b 2e 7a 69  tarball/trunk.zi
2d60: 70 3f 75 75 69 64 3d 74 72 75 6e 6b 3e 54 47 5a  p?uuid=trunk>TGZ
2d70: 3c 2f 61 3e 0d 0a 20 20 20 20 20 20 20 20 20 3c  </a>..         <
2d80: 6c 69 3e 3c 61 20 68 72 65 66 3d 74 69 6d 65 6c  li><a href=timel
2d90: 69 6e 65 3e 54 69 6d 65 6c 69 6e 65 3c 2f 61 3e  ine>Timeline</a>
2da0: 0d 0a 20 20 20 20 20 20 20 20 20 3c 6c 69 3e 3c  ..         <li><
2db0: 61 20 68 72 65 66 3d 62 72 6c 69 73 74 3e 42 72  a href=brlist>Br
2dc0: 61 6e 63 68 65 73 3c 2f 61 3e 0d 0a 20 20 20 20  anches</a>..    
2dd0: 20 20 20 20 20 3c 6c 69 3e 3c 61 20 68 72 65 66       <li><a href
2de0: 3d 74 61 67 6c 69 73 74 3e 54 61 67 73 3c 2f 61  =taglist>Tags</a
2df0: 3e 0d 0a 20 20 20 20 20 20 20 20 20 3c 6c 69 3e  >..         <li>
2e00: 3c 61 20 68 72 65 66 3d 72 65 70 6f 72 74 6c 69  <a href=reportli
2e10: 73 74 3e 54 69 63 6b 65 74 73 3c 2f 61 3e 0d 0a  st>Tickets</a>..
2e20: 20 20 20 20 20 20 20 20 20 3c 6c 69 3e 3c 61 20           <li><a 
2e30: 68 72 65 66 3d 72 65 70 6f 72 74 73 3e 52 65 70  href=reports>Rep
2e40: 6f 72 74 73 3c 2f 61 3e 0d 0a 20 20 20 20 20 20  orts</a>..      
2e50: 3c 2f 75 6c 3e 0d 0a 20 20 20 20 20 20 3c 70 3e  </ul>..      <p>
2e60: 20 20 0d 0a 20 20 20 20 20 20 53 6b 69 6e 20 69    ..      Skin i
2e70: 6e 73 70 69 72 65 64 20 62 79 20 3c 61 20 68 72  nspired by <a hr
2e80: 65 66 3d 2f 2f 73 2e 74 6b 2f 73 6f 3e 53 74 61  ef=//s.tk/so>Sta
2e90: 63 6b 6f 76 65 72 66 6c 6f 77 3c 2f 61 3e 0d 0a  ckoverflow</a>..
2ea0: 20 20 20 20 20 20 3c 2f 70 3e 0d 0a 20 20 20 3c        </p>..   <
2eb0: 2f 66 6f 6f 74 65 72 3e 0d 0a 0d 0a 3c 2f 62 6f  /footer>....</bo
2ec0: 64 79 3e 0d 0a 3c 2f 68 74 6d 6c 3e 0d 0a 27 0a  dy>..</html>..'.
2ed0: 63 6f 6e 66 69 67 20 2f 63 6f 6e 66 69 67 20 39  config /config 9
2ee0: 30 39 37 0a 31 33 39 35 30 36 38 30 35 31 20 27  097.1395068051 '
2ef0: 74 68 31 2d 73 65 74 75 70 27 20 76 61 6c 75 65  th1-setup' value
2f00: 20 27 0a 0a 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d   '...# ---------
2f10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2f20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2f30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2f40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 43 6f 6e  ----------.# Con
2f50: 74 72 6f 6c 20 73 74 72 75 63 74 75 72 65 73 0a  trol structures.
2f60: 23 0a 23 20 20 20 2b 2b 20 76 61 72 6e 61 6d 65  #.#   ++ varname
2f70: 0a 23 20 20 20 3f 3a 20 5b 69 66 5d 20 7b 74 68  .#   ?: [if] {th
2f80: 65 6e 7d 20 7b 65 6c 73 65 7d 0a 23 20 20 20 69  en} {else}.#   i
2f90: 73 73 65 74 20 76 61 72 6e 61 6d 65 0a 23 20 20  sset varname.#  
2fa0: 20 65 71 20 73 74 72 31 20 73 74 72 32 0a 23 0a   eq str1 str2.#.
2fb0: 23 20 20 20 77 68 69 6c 65 20 7b 63 6f 6e 64 7d  #   while {cond}
2fc0: 20 7b 63 6f 64 65 7d 0a 23 20 20 20 66 6f 72 65   {code}.#   fore
2fd0: 61 63 68 20 76 61 72 6e 61 6d 65 20 7b 6c 69 73  ach varname {lis
2fe0: 74 7d 20 7b 63 6f 64 65 7d 0a 23 20 20 20 73 77  t} {code}.#   sw
2ff0: 69 74 63 68 20 76 61 6c 75 65 20 7b 20 76 61 6c  itch value { val
3000: 31 20 7b 63 6f 64 65 31 7d 20 76 61 6c 32 20 7b  1 {code1} val2 {
3010: 63 6f 64 65 32 7d 20 2e 2e 2e 20 7d 0a 23 0a 0a  code2} ... }.#..
3020: 0a 0a 23 2d 2d 20 50 72 65 2d 69 6e 63 72 65 6d  ..#-- Pre-increm
3030: 65 6e 74 20 20 5b 2b 2b 20 76 61 72 6e 61 6d 65  ent  [++ varname
3040: 5d 0a 70 72 6f 63 20 2b 2b 20 7b 76 61 72 6e 61  ].proc ++ {varna
3050: 6d 65 7d 20 7b 0a 20 20 20 75 70 76 61 72 20 31  me} {.   upvar 1
3060: 20 24 76 61 72 6e 61 6d 65 20 69 0a 20 20 20 72   $varname i.   r
3070: 65 74 75 72 6e 20 5b 75 70 6c 65 76 65 6c 20 31  eturn [uplevel 1
3080: 20 22 73 65 74 20 7b 24 76 61 72 6e 61 6d 65 7d   "set {$varname}
3090: 20 5b 65 78 70 72 20 31 2b 24 69 5d 22 5d 0a 7d   [expr 1+$i]"].}
30a0: 0a 0a 0a 23 2d 2d 20 74 65 72 6e 61 72 79 20 2f  ...#-- ternary /
30b0: 20 69 66 2d 73 68 6f 72 74 68 61 6e 64 20 28 63   if-shorthand (c
30c0: 6f 6e 64 2f 74 68 65 6e 2f 65 6c 73 65 20 6d 61  ond/then/else ma
30d0: 79 20 62 65 20 6c 69 74 65 72 61 6c 73 2c 20 6f  y be literals, o
30e0: 72 20 7b 5b 65 78 70 72 65 73 73 69 6f 6e 73 5d  r {[expressions]
30f0: 7d 20 74 68 65 6d 73 65 6c 76 65 73 29 0a 70 72  } themselves).pr
3100: 6f 63 20 3f 3a 20 7b 63 6f 6e 64 20 74 68 65 6e  oc ?: {cond then
3110: 20 65 6c 73 65 7d 20 7b 0a 20 20 20 75 70 6c 65   else} {.   uple
3120: 76 65 6c 20 31 20 22 69 66 20 7b 24 63 6f 6e 64  vel 1 "if {$cond
3130: 7d 20 7b 20 72 65 74 75 72 6e 20 24 74 68 65 6e  } { return $then
3140: 3b 20 7d 20 65 6c 73 65 20 7b 20 72 65 74 75 72  ; } else { retur
3150: 6e 20 24 65 6c 73 65 3b 20 7d 22 0a 7d 0a 0a 0a  n $else; }".}...
3160: 23 2d 2d 20 69 6e 66 6f 20 65 78 69 73 74 73 20  #-- info exists 
3170: 73 68 6f 72 74 68 61 6e 64 0a 70 72 6f 63 20 69  shorthand.proc i
3180: 73 73 65 74 20 7b 76 61 72 6e 61 6d 65 7d 20 7b  sset {varname} {
3190: 0a 20 20 20 72 65 74 75 72 6e 20 5b 75 70 6c 65  .   return [uple
31a0: 76 65 6c 20 31 20 22 69 6e 66 6f 20 65 78 69 73  vel 1 "info exis
31b0: 74 73 20 7b 24 76 61 72 6e 61 6d 65 7d 22 5d 0a  ts {$varname}"].
31c0: 7d 0a 0a 0a 23 2d 2d 20 73 74 72 69 6e 67 20 65  }...#-- string e
31d0: 71 75 61 6c 69 74 79 20 73 68 6f 72 74 68 61 6e  quality shorthan
31e0: 64 0a 70 72 6f 63 20 65 71 20 7b 73 74 72 31 20  d.proc eq {str1 
31f0: 73 74 72 32 7d 20 7b 0a 20 20 20 72 65 74 75 72  str2} {.   retur
3200: 6e 20 5b 65 78 70 72 20 7b 24 73 74 72 31 20 65  n [expr {$str1 e
3210: 71 20 24 73 74 72 32 7d 5d 0a 7d 0a 0a 0a 23 2d  q $str2}].}...#-
3220: 2d 20 77 68 69 6c 65 20 6c 6f 6f 70 0a 70 72 6f  - while loop.pro
3230: 63 20 77 68 69 6c 65 20 7b 63 6f 6e 64 69 74 69  c while {conditi
3240: 6f 6e 20 63 6f 64 65 7d 20 7b 0a 20 20 20 72 65  on code} {.   re
3250: 74 75 72 6e 20 5b 75 70 6c 65 76 65 6c 20 31 20  turn [uplevel 1 
3260: 22 66 6f 72 20 7b 7d 20 7b 24 63 6f 6e 64 69 74  "for {} {$condit
3270: 69 6f 6e 7d 20 7b 7d 20 7b 24 63 6f 64 65 7d 22  ion} {} {$code}"
3280: 5d 0a 7d 0a 0a 0a 23 2d 2d 20 66 6f 72 65 61 63  ].}...#-- foreac
3290: 68 20 6c 69 73 74 0a 23 0a 23 20 66 6f 72 65 61  h list.#.# forea
32a0: 63 68 20 56 41 52 20 22 61 62 63 20 78 79 7a 20  ch VAR "abc xyz 
32b0: 31 32 33 22 20 7b 20 70 75 74 73 20 22 28 24 56  123" { puts "($V
32c0: 41 52 29 20 22 20 7d 0a 23 0a 70 72 6f 63 20 66  AR) " }.#.proc f
32d0: 6f 72 65 61 63 68 20 7b 76 61 72 6e 61 6d 65 20  oreach {varname 
32e0: 6c 69 73 74 20 63 6f 64 65 7d 20 7b 0a 20 20 20  list code} {.   
32f0: 75 70 76 61 72 20 31 20 24 76 61 72 6e 61 6d 65  upvar 1 $varname
3300: 20 76 61 6c 0a 20 20 20 66 6f 72 20 7b 73 65 74   val.   for {set
3310: 20 69 20 30 7d 20 20 7b 24 69 20 3c 20 5b 6c 6c   i 0}  {$i < [ll
3320: 65 6e 67 74 68 20 24 6c 69 73 74 5d 7d 20 20 7b  ength $list]}  {
3330: 2b 2b 20 69 7d 20 7b 0a 20 20 20 20 20 20 73 65  ++ i} {.      se
3340: 74 20 76 61 6c 20 5b 6c 69 6e 64 65 78 20 24 6c  t val [lindex $l
3350: 69 73 74 20 24 69 5d 0a 20 20 20 20 20 20 75 70  ist $i].      up
3360: 6c 65 76 65 6c 20 31 20 22 24 63 6f 64 65 22 0a  level 1 "$code".
3370: 20 20 20 7d 0a 7d 0a 0a 0a 23 2d 2d 20 41 20 73     }.}...#-- A s
3380: 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 2e  witch statement.
3390: 0a 23 0a 23 20 73 77 69 74 63 68 20 22 76 61 6c  .#.# switch "val
33a0: 22 20 7b 0a 23 20 20 20 20 20 20 20 20 22 63 6d  " {.#        "cm
33b0: 70 31 22 20 7b 63 6f 64 65 31 7d 0a 23 20 20 20  p1" {code1}.#   
33c0: 20 20 20 20 20 22 63 6d 70 32 22 20 7b 63 6f 64       "cmp2" {cod
33d0: 65 32 7d 0a 23 20 20 20 20 20 20 20 20 22 63 6d  e2}.#        "cm
33e0: 70 33 22 20 7b 63 6f 64 65 33 7d 0a 23 20 20 20  p3" {code3}.#   
33f0: 7b 7b 64 65 66 61 75 6c 74 7d 7d 20 7b 63 6f 64  {{default}} {cod
3400: 65 4e 7d 0a 23 20 7d 0a 23 0a 70 72 6f 63 20 73  eN}.# }.#.proc s
3410: 77 69 74 63 68 20 7b 63 6f 6d 70 61 72 65 5f 76  witch {compare_v
3420: 61 6c 75 65 20 76 61 6c 5f 63 6f 64 65 5f 70 61  alue val_code_pa
3430: 69 72 73 7d 20 7b 0a 20 20 20 73 65 74 20 6c 65  irs} {.   set le
3440: 6e 20 5b 6c 6c 65 6e 67 74 68 20 24 76 61 6c 5f  n [llength $val_
3450: 63 6f 64 65 5f 70 61 69 72 73 5d 0a 20 20 20 23  code_pairs].   #
3460: 20 6c 6f 6f 70 20 6f 76 65 72 20 63 6f 6d 70 61   loop over compa
3470: 72 65 20 76 61 6c 75 65 73 20 2b 20 63 6f 64 65  re values + code
3480: 20 70 61 69 72 73 0a 20 20 20 66 6f 72 20 20 7b   pairs.   for  {
3490: 73 65 74 20 6e 20 30 7d 20 20 7b 24 6e 20 3c 20  set n 0}  {$n < 
34a0: 24 6c 65 6e 7d 20 20 7b 2b 2b 20 6e 7d 20 7b 0a  $len}  {++ n} {.
34b0: 20 20 20 20 20 20 73 65 74 20 63 6d 70 20 5b 6c        set cmp [l
34c0: 69 6e 64 65 78 20 24 76 61 6c 5f 63 6f 64 65 5f  index $val_code_
34d0: 70 61 69 72 73 20 24 6e 5d 3b 0a 20 20 20 20 20  pairs $n];.     
34e0: 20 69 66 20 7b 5b 65 78 70 72 20 24 63 6d 70 20   if {[expr $cmp 
34f0: 65 71 20 24 63 6f 6d 70 61 72 65 5f 76 61 6c 75  eq $compare_valu
3500: 65 20 7c 7c 20 24 63 6d 70 20 65 71 20 7b 7b 64  e || $cmp eq {{d
3510: 65 66 61 75 6c 74 7d 7d 20 5d 7d 20 7b 0a 20 20  efault}} ]} {.  
3520: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 75         return [u
3530: 70 6c 65 76 65 6c 20 31 20 5b 6c 69 6e 64 65 78  plevel 1 [lindex
3540: 20 24 76 61 6c 5f 63 6f 64 65 5f 70 61 69 72 73   $val_code_pairs
3550: 20 5b 2b 2b 20 6e 5d 5d 5d 3b 0a 20 20 20 20 20   [++ n]]];.     
3560: 20 7d 0a 20 20 20 7d 0a 7d 0a 0a 0a 0a 0a 0a 0a   }.   }.}.......
3570: 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  # --------------
3580: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3590: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
35a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
35b0: 2d 2d 2d 2d 2d 0a 23 20 53 74 72 69 6e 67 20 66  -----.# String f
35c0: 75 6e 63 74 69 6f 6e 73 0a 23 0a 23 20 20 20 73  unctions.#.#   s
35d0: 74 72 3a 3a 63 6f 6e 74 61 69 6e 73 20 6e 65 65  tr::contains nee
35e0: 64 6c 65 20 68 61 79 73 74 61 63 6b 0a 23 20 20  dle haystack.#  
35f0: 20 73 74 72 3a 3a 6e 65 78 74 20 6e 65 65 64 6c   str::next needl
3600: 65 20 68 61 79 73 74 61 63 6b 20 73 74 61 72 74  e haystack start
3610: 69 6e 64 65 78 0a 23 20 20 20 73 74 72 3a 3a 77  index.#   str::w
3620: 72 61 70 20 68 61 79 73 74 61 63 6b 20 6e 65 65  rap haystack nee
3630: 64 6c 65 20 61 64 64 62 65 66 6f 72 65 20 61 64  dle addbefore ad
3640: 64 61 66 74 65 72 0a 23 0a 0a 0a 20 20 20 0a 23  dafter.#...   .#
3650: 2d 2d 20 72 65 74 75 72 6e 73 20 74 72 75 65 20  -- returns true 
3660: 69 66 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69  if string contai
3670: 6e 65 64 20 69 6e 20 61 6e 6f 74 68 65 72 20 73  ned in another s
3680: 74 72 69 6e 67 0a 70 72 6f 63 20 73 74 72 3a 3a  tring.proc str::
3690: 63 6f 6e 74 61 69 6e 73 20 7b 6e 65 65 64 6c 65  contains {needle
36a0: 20 68 61 79 73 74 61 63 6b 7d 20 7b 0a 20 20 20   haystack} {.   
36b0: 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 2d 31  return [expr {-1
36c0: 20 21 3d 20 5b 73 74 72 69 6e 67 20 66 69 72 73   != [string firs
36d0: 74 20 24 6e 65 65 64 6c 65 20 24 68 61 79 73 74  t $needle $hayst
36e0: 61 63 6b 5d 7d 5d 0a 7d 0a 0a 0a 23 2d 2d 20 77  ack]}].}...#-- w
36f0: 72 61 70 70 65 72 20 66 6f 72 20 5b 73 74 72 69  rapper for [stri
3700: 6e 67 20 66 69 72 73 74 20 2e 2e 2e 5d 20 74 6f  ng first ...] to
3710: 20 73 75 70 70 6f 72 74 20 73 74 61 72 74 69 6e   support startin
3720: 64 65 78 0a 70 72 6f 63 20 73 74 72 3a 3a 6e 65  dex.proc str::ne
3730: 78 74 20 7b 73 65 61 72 63 68 20 63 6f 6e 74 65  xt {search conte
3740: 6e 74 20 73 74 61 72 74 7d 20 7b 0a 20 20 20 23  nt start} {.   #
3750: 20 63 75 74 20 6f 75 74 20 24 63 6f 6e 74 65 6e   cut out $conten
3760: 74 20 61 74 20 24 73 74 61 72 74 20 62 65 66 6f  t at $start befo
3770: 72 65 20 73 65 61 72 63 68 69 6e 67 0a 20 20 20  re searching.   
3780: 73 65 74 20 70 20 5b 73 74 72 69 6e 67 20 66 69  set p [string fi
3790: 72 73 74 20 24 73 65 61 72 63 68 20 5b 73 74 72  rst $search [str
37a0: 69 6e 67 20 72 61 6e 67 65 20 24 63 6f 6e 74 65  ing range $conte
37b0: 6e 74 20 24 73 74 61 72 74 20 5b 73 74 72 69 6e  nt $start [strin
37c0: 67 20 6c 65 6e 67 74 68 20 24 63 6f 6e 74 65 6e  g length $conten
37d0: 74 5d 5d 5d 0a 20 20 20 69 66 20 5b 65 78 70 72  t]]].   if [expr
37e0: 20 24 70 3e 3d 30 5d 20 7b 0a 20 20 20 20 20 20   $p>=0] {.      
37f0: 73 65 74 20 70 20 5b 65 78 70 72 20 24 73 74 61  set p [expr $sta
3800: 72 74 2b 24 70 5d 0a 20 20 20 7d 0a 20 20 20 72  rt+$p].   }.   r
3810: 65 74 75 72 6e 20 24 70 0a 7d 0a 0a 0a 23 2d 2d  eturn $p.}...#--
3820: 20 65 6e 63 6c 6f 73 65 20 73 74 72 69 6e 67 20   enclose string 
3830: 69 6e 20 65 2e 67 2e 20 68 74 6d 6c 20 74 61 67  in e.g. html tag
3840: 73 0a 70 72 6f 63 20 73 74 72 3a 3a 77 72 61 70  s.proc str::wrap
3850: 20 7b 63 6f 6e 74 65 6e 74 20 73 65 61 72 63 68   {content search
3860: 20 62 65 66 6f 72 65 20 61 66 74 65 72 7d 20 7b   before after} {
3870: 0a 20 20 20 73 65 74 20 6c 65 6e 20 5b 73 74 72  .   set len [str
3880: 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 65 61 72  ing length $sear
3890: 63 68 5d 0a 20 20 20 73 65 74 20 70 20 30 0a 20  ch].   set p 0. 
38a0: 20 20 77 68 69 6c 65 20 7b 5b 65 78 70 72 20 5b    while {[expr [
38b0: 73 65 74 20 70 20 5b 73 74 72 3a 3a 6e 65 78 74  set p [str::next
38c0: 20 24 73 65 61 72 63 68 20 24 63 6f 6e 74 65 6e   $search $conten
38d0: 74 20 24 70 5d 5d 3e 3d 30 5d 7d 20 7b 0a 20 20  t $p]]>=0]} {.  
38e0: 20 20 20 20 73 65 74 20 63 6f 6e 74 65 6e 74 20      set content 
38f0: 22 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 20 24  "[string range $
3900: 63 6f 6e 74 65 6e 74 20 30 20 5b 65 78 70 72 20  content 0 [expr 
3910: 24 70 2d 31 5d 5d 24 62 65 66 6f 72 65 24 73 65  $p-1]]$before$se
3920: 61 72 63 68 24 61 66 74 65 72 5b 73 74 72 69 6e  arch$after[strin
3930: 67 20 72 61 6e 67 65 20 24 63 6f 6e 74 65 6e 74  g range $content
3940: 20 5b 65 78 70 72 20 24 70 2b 24 6c 65 6e 5d 20   [expr $p+$len] 
3950: 32 30 30 30 5d 22 3b 0a 20 20 20 20 20 20 73 65  2000]";.      se
3960: 74 20 70 20 5b 65 78 70 72 20 24 70 2b 5b 73 74  t p [expr $p+[st
3970: 72 69 6e 67 20 6c 65 6e 67 74 68 20 22 24 62 65  ring length "$be
3980: 66 6f 72 65 2b 24 73 65 61 72 63 68 2b 24 61 66  fore+$search+$af
3990: 74 65 72 22 5d 5d 3b 20 23 20 73 6b 69 70 20 61  ter"]]; # skip a
39a0: 20 6c 69 74 74 6c 65 20 66 75 72 74 68 65 72 0a   little further.
39b0: 20 20 20 7d 0a 20 20 20 72 65 74 75 72 6e 20 24     }.   return $
39c0: 63 6f 6e 74 65 6e 74 0a 7d 0a 0a 0a 23 2d 2d 20  content.}...#-- 
39d0: 53 70 6c 69 74 20 73 74 72 69 6e 67 20 69 6e 74  Split string int
39e0: 6f 20 6c 69 73 74 20 6f 6e 20 64 65 6c 69 6d 69  o list on delimi
39f0: 74 65 72 20 63 68 61 72 61 63 74 65 72 0a 23 20  ter character.# 
3a00: 28 62 61 73 69 63 61 6c 6c 79 20 6a 75 73 74 20  (basically just 
3a10: 74 75 72 6e 73 20 64 65 6c 69 6d 69 74 65 72 20  turns delimiter 
3a20: 69 6e 74 6f 20 73 70 61 63 65 29 0a 23 0a 70 72  into space).#.pr
3a30: 6f 63 20 73 74 72 3a 3a 65 78 70 6c 6f 64 65 20  oc str::explode 
3a40: 7b 64 65 6c 69 6d 20 73 74 72 7d 20 7b 0a 20 20  {delim str} {.  
3a50: 20 73 65 74 20 72 20 22 22 0a 20 20 20 73 65 74   set r "".   set
3a60: 20 6c 65 6e 20 5b 73 74 72 69 6e 67 20 6c 65 6e   len [string len
3a70: 67 74 68 20 24 73 74 72 5d 0a 20 20 20 77 68 69  gth $str].   whi
3a80: 6c 65 20 7b 2d 31 20 21 3d 20 5b 73 65 74 20 70  le {-1 != [set p
3a90: 20 5b 73 74 72 69 6e 67 20 66 69 72 73 74 20 24   [string first $
3aa0: 64 65 6c 69 6d 20 24 73 74 72 5d 5d 7d 20 7b 0a  delim $str]]} {.
3ab0: 20 20 20 20 20 20 73 65 74 20 72 20 22 24 72 20        set r "$r 
3ac0: 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 20 24 73  [string range $s
3ad0: 74 72 20 30 20 5b 65 78 70 72 20 24 70 2d 31 5d  tr 0 [expr $p-1]
3ae0: 5d 22 0a 20 20 20 20 20 20 73 65 74 20 73 74 72  ]".      set str
3af0: 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 20 24   [string range $
3b00: 73 74 72 20 5b 2b 2b 20 70 5d 20 24 6c 65 6e 5d  str [++ p] $len]
3b10: 0a 20 20 20 7d 0a 20 20 20 72 65 74 75 72 6e 20  .   }.   return 
3b20: 5b 6c 69 73 74 20 5b 73 74 72 69 6e 67 20 74 72  [list [string tr
3b30: 69 6d 20 22 24 72 20 24 73 74 72 22 5d 5d 0a 7d  im "$r $str"]].}
3b40: 20 20 20 0a 0a 0a 0a 0a 0a 0a 23 20 2d 2d 2d 2d     .......# ----
3b50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3b60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3b70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3b80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
3b90: 23 20 55 73 65 72 20 49 6e 74 65 72 66 61 63 65  # User Interface
3ba0: 20 75 74 69 6c 69 74 79 20 63 6f 64 65 0a 23 0a   utility code.#.
3bb0: 23 20 20 20 73 71 6c 3a 3a 61 6c 6c 6f 77 65 64  #   sql::allowed
3bc0: 20 73 61 66 65 5f 73 74 72 69 6e 67 0a 23 20 20   safe_string.#  
3bd0: 20 75 69 3a 3a 70 61 67 65 5f 65 78 69 73 74 73   ui::page_exists
3be0: 20 57 69 6b 69 50 61 67 65 0a 23 20 20 20 75 69   WikiPage.#   ui
3bf0: 3a 3a 66 69 6c 65 5f 65 78 69 73 74 73 20 66 69  ::file_exists fi
3c00: 6c 65 2e 6e 61 6d 65 0a 23 0a 23 20 20 20 75 69  le.name.#.#   ui
3c10: 3a 3a 73 65 61 72 63 68 20 74 65 72 6d 73 20 62  ::search terms b
3c20: 61 73 65 75 72 6c 0a 23 20 20 20 75 69 3a 3a 73  aseurl.#   ui::s
3c30: 65 61 72 63 68 5f 6f 6e 5f 77 69 6b 69 20 20 20  earch_on_wiki   
3c40: 0a 23 20 20 20 75 69 3a 3a 73 74 61 74 73 0a 23  .#   ui::stats.#
3c50: 20 20 20 75 69 3a 3a 6c 61 6e 67 5f 73 74 61 74     ui::lang_stat
3c60: 73 0a 23 0a 0a 0a 0a 23 2d 2d 20 57 68 69 74 65  s.#....#-- White
3c70: 6c 69 73 74 20 70 65 72 6d 69 73 73 69 62 6c 65  list permissible
3c80: 20 63 68 61 72 61 63 74 65 72 73 20 66 6f 72 20   characters for 
3c90: 53 51 4c 20 63 6f 6e 74 65 78 74 0a 23 20 2a 20  SQL context.# * 
3ca0: 41 20 77 6f 72 6b 61 72 6f 75 6e 64 20 66 6f 72  A workaround for
3cb0: 20 74 68 65 20 6c 61 63 6b 20 6f 66 20 53 51 4c   the lack of SQL
3cc0: 20 65 73 63 61 70 69 6e 67 20 68 65 72 65 20 28   escaping here (
3cd0: 6f 72 20 74 68 65 20 6e 65 77 20 71 75 65 72 79  or the new query
3ce0: 20 41 50 49 20 62 72 61 6e 63 68 29 0a 23 20 2a   API branch).# *
3cf0: 20 55 73 65 64 20 69 6e 20 4c 49 4b 45 20 63 6f   Used in LIKE co
3d00: 6e 74 65 78 74 2c 20 73 6f 20 3f 20 61 6e 64 20  ntext, so ? and 
3d10: 25 20 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65  % are not allowe
3d20: 64 0a 23 20 2a 20 41 6e 64 20 27 27 20 61 6e 64  d.# * And '' and
3d30: 20 5c 20 6f 72 20 22 20 6e 6f 74 20 69 6e 63 6c   \ or " not incl
3d40: 75 64 65 64 20 69 6e 20 74 68 65 20 77 68 69 74  uded in the whit
3d50: 65 6c 69 73 74 20 66 6f 72 20 6f 62 76 69 6f 75  elist for obviou
3d60: 73 20 72 65 61 73 6f 6e 73 2e 0a 70 72 6f 63 20  s reasons..proc 
3d70: 73 71 6c 3a 3a 61 6c 6c 6f 77 65 64 20 7b 73 74  sql::allowed {st
3d80: 72 7d 20 7b 0a 20 20 20 72 65 74 75 72 6e 20 5b  r} {.   return [
3d90: 72 65 67 65 78 70 20 7b 5e 5b 61 2d 7a 41 2d 5a  regexp {^[a-zA-Z
3da0: 30 2d 39 20 21 24 26 2f 28 29 7b 7d 3d 3c 3e 2c  0-9 !$&/(){}=<>,
3db0: 2e 3b 3a 2d 5f 2b 23 2a 40 5d 2b 24 7d 20 24 73  .;:-_+#*@]+$} $s
3dc0: 74 72 5d 0a 7d 0a 0a 0a 23 2d 2d 20 53 65 61 72  tr].}...#-- Sear
3dd0: 63 68 20 66 75 6e 63 74 69 6f 6e 0a 23 20 2a 20  ch function.# * 
3de0: 52 65 71 75 69 72 65 73 20 66 6f 73 73 69 6c 2d  Requires fossil-
3df0: 73 65 61 72 63 68 2e 70 68 70 20 74 6f 20 62 75  search.php to bu
3e00: 69 6c 64 20 74 68 65 20 61 63 63 6f 72 64 69 6e  ild the accordin
3e10: 67 20 74 61 62 6c 65 0a 23 20 20 20 28 72 65 61  g table.#   (rea
3e20: 64 69 6e 67 20 66 72 6f 6d 20 74 68 65 20 72 61  ding from the ra
3e30: 77 20 62 6c 6f 62 73 20 69 73 20 69 6d 70 6f 73  w blobs is impos
3e40: 73 69 62 6c 65 29 20 61 73 20 63 72 6f 6e 6a 6f  sible) as cronjo
3e50: 62 0a 23 20 2a 20 41 6e 64 20 61 20 70 61 74 63  b.# * And a patc
3e60: 68 65 64 20 60 66 6f 73 73 69 6c 60 20 62 69 6e  hed `fossil` bin
3e70: 61 72 79 20 73 72 63 2f 72 65 70 6f 72 74 2e 63  ary src/report.c
3e80: 20 74 6f 20 61 6c 6c 6f 77 0a 23 20 20 20 53 45   to allow.#   SE
3e90: 4c 45 43 54 73 20 6f 6e 20 74 68 65 20 60 73 65  LECTs on the `se
3ea0: 61 72 63 68 60 20 74 61 62 6c 65 2e 0a 70 72 6f  arch` table..pro
3eb0: 63 20 75 69 3a 3a 73 65 61 72 63 68 20 7b 74 65  c ui::search {te
3ec0: 72 6d 73 20 62 61 73 65 75 72 6c 7d 20 7b 0a 0a  rms baseurl} {..
3ed0: 20 20 20 23 20 63 6c 65 61 6e 75 70 20 24 74 65     # cleanup $te
3ee0: 72 6d 73 0a 20 20 20 69 66 20 5b 73 71 6c 3a 3a  rms.   if [sql::
3ef0: 61 6c 6c 6f 77 65 64 20 24 74 65 72 6d 73 5d 20  allowed $terms] 
3f00: 7b 0a 20 20 20 0a 20 20 20 20 20 20 23 20 70 72  {.   .      # pr
3f10: 65 70 61 72 65 20 73 65 61 72 63 68 20 71 75 65  epare search que
3f20: 72 79 0a 20 20 20 20 20 20 73 65 74 20 57 48 45  ry.      set WHE
3f30: 52 45 20 22 31 22 0a 20 20 20 20 20 20 66 6f 72  RE "1".      for
3f40: 65 61 63 68 20 73 65 61 72 63 68 20 24 74 65 72  each search $ter
3f50: 6d 73 20 7b 0a 20 20 20 20 20 20 20 20 20 73 65  ms {.         se
3f60: 74 20 57 48 45 52 45 20 22 24 57 48 45 52 45 20  t WHERE "$WHERE 
3f70: 41 4e 44 20 63 6f 6e 74 65 6e 74 20 4c 49 4b 45  AND content LIKE
3f80: 20 27 27 25 24 73 65 61 72 63 68 25 27 27 22 0a   ''%$search%''".
3f90: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 23        }..      #
3fa0: 20 70 65 72 66 6f 72 6d 20 73 65 61 72 63 68 0a   perform search.
3fb0: 20 20 20 20 20 20 71 75 65 72 79 20 22 53 45 4c        query "SEL
3fc0: 45 43 54 20 70 61 74 68 2c 20 74 79 70 65 2c 20  ECT path, type, 
3fd0: 6e 61 6d 65 2c 20 63 6f 6e 74 65 6e 74 20 46 52  name, content FR
3fe0: 4f 4d 20 66 78 5f 73 65 61 72 63 68 20 57 48 45  OM fx_search WHE
3ff0: 52 45 20 24 57 48 45 52 45 22 20 7b 0a 0a 20 20  RE $WHERE" {..  
4000: 20 20 20 20 20 20 20 23 20 63 6f 6e 65 6e 74 20         # conent 
4010: 65 78 63 65 72 70 74 20 61 6e 64 20 68 69 67 68  excerpt and high
4020: 6c 69 67 68 74 69 6e 67 20 20 20 20 20 20 0a 20  lighting      . 
4030: 20 20 20 20 20 20 20 20 73 65 74 20 70 20 5b 73          set p [s
4040: 74 72 69 6e 67 20 66 69 72 73 74 20 24 74 65 72  tring first $ter
4050: 6d 73 20 24 63 6f 6e 74 65 6e 74 5d 0a 20 20 20  ms $content].   
4060: 20 20 20 20 20 20 73 65 74 20 65 78 63 65 72 70        set excerp
4070: 74 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 20  t [string range 
4080: 24 63 6f 6e 74 65 6e 74 20 5b 65 78 70 72 20 24  $content [expr $
4090: 70 2d 35 30 5d 20 5b 65 78 70 72 20 24 70 2b 34  p-50] [expr $p+4
40a0: 35 30 5d 5d 0a 20 20 20 20 20 20 20 20 20 66 6f  50]].         fo
40b0: 72 65 61 63 68 20 73 65 61 72 63 68 20 24 74 65  reach search $te
40c0: 72 6d 73 20 7b 0a 20 20 20 20 20 20 20 20 20 20  rms {.          
40d0: 20 20 73 65 74 20 65 78 63 65 72 70 74 20 5b 73    set excerpt [s
40e0: 74 72 3a 3a 77 72 61 70 20 22 24 65 78 63 65 72  tr::wrap "$excer
40f0: 70 74 22 20 24 73 65 61 72 63 68 20 3c 6d 61 72  pt" $search <mar
4100: 6b 3e 20 3c 2f 6d 61 72 6b 3e 5d 0a 20 20 20 20  k> </mark>].    
4110: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 0a 20 20       }.      .  
4120: 20 20 20 20 20 20 20 23 20 66 6f 72 6d 61 74 20         # format 
4130: 72 65 73 75 6c 74 20 6c 69 73 74 0a 20 20 20 20  result list.    
4140: 20 20 20 20 20 68 74 6d 6c 20 22 0a 20 20 20 20       html ".    
4150: 20 20 20 20 20 3c 64 69 76 20 63 6c 61 73 73 3d       <div class=
4160: 73 65 61 72 63 68 2d 72 65 73 75 6c 74 3e 0a 20  search-result>. 
4170: 20 20 20 20 20 20 20 20 20 20 20 3c 62 3e 5b 68             <b>[h
4180: 74 6d 6c 69 7a 65 20 24 74 79 70 65 5d 3c 2f 62  tmlize $type]</b
4190: 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20 3c 61  >.            <a
41a0: 20 68 72 65 66 3d 5b 68 74 6d 6c 69 7a 65 20 24   href=[htmlize $
41b0: 70 61 74 68 5d 3e 5b 68 74 6d 6c 69 7a 65 20 24  path]>[htmlize $
41c0: 6e 61 6d 65 5d 3c 2f 61 3e 20 3c 62 72 3e 0a 20  name]</a> <br>. 
41d0: 20 20 20 20 20 20 20 20 20 20 20 3c 73 70 61 6e             <span
41e0: 20 63 6c 61 73 73 3d 73 65 61 72 63 68 2d 6c 69   class=search-li
41f0: 6e 6b 3e 3c 61 20 68 72 65 66 3d 5b 68 74 6d 6c  nk><a href=[html
4200: 69 7a 65 20 24 70 61 74 68 5d 3e 24 62 61 73 65  ize $path]>$base
4210: 75 72 6c 2f 5b 68 74 6d 6c 69 7a 65 20 24 70 61  url/[htmlize $pa
4220: 74 68 5d 3c 2f 61 3e 3c 2f 73 70 61 6e 3e 20 3c  th]</a></span> <
4230: 62 72 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20  br>.            
4240: 3c 73 6d 61 6c 6c 20 63 6c 61 73 73 3d 73 65 61  <small class=sea
4250: 72 63 68 2d 65 78 63 65 72 70 74 3e 24 65 78 63  rch-excerpt>$exc
4260: 65 72 70 74 3c 2f 73 6d 61 6c 6c 3e 0a 20 20 20  erpt</small>.   
4270: 20 20 20 20 20 20 3c 2f 64 69 76 3e 5c 6e 22 3b        </div>\n";
4280: 0a 20 20 20 20 20 20 7d 0a 20 20 20 7d 0a 7d 0a  .      }.   }.}.
4290: 0a 0a 23 2d 2d 20 43 68 65 63 6b 20 66 6f 72 20  ..#-- Check for 
42a0: 65 78 69 73 74 65 6e 63 65 20 6f 66 20 77 69 6b  existence of wik
42b0: 69 20 70 61 67 65 0a 70 72 6f 63 20 75 69 3a 3a  i page.proc ui::
42c0: 70 61 67 65 5f 65 78 69 73 74 73 20 7b 6e 61 6d  page_exists {nam
42d0: 65 7d 20 7b 0a 20 20 20 69 66 20 5b 73 71 6c 3a  e} {.   if [sql:
42e0: 3a 61 6c 6c 6f 77 65 64 20 24 6e 61 6d 65 5d 20  :allowed $name] 
42f0: 7b 0a 20 20 20 20 20 20 71 75 65 72 79 20 22 53  {.      query "S
4300: 45 4c 45 43 54 20 31 20 46 52 4f 4d 20 74 61 67  ELECT 1 FROM tag
4310: 20 57 48 45 52 45 20 74 61 67 6e 61 6d 65 20 3d   WHERE tagname =
4320: 20 27 27 77 69 6b 69 2d 24 6e 61 6d 65 27 27 22   ''wiki-$name''"
4330: 20 7b 0a 20 20 20 20 20 20 20 20 20 72 65 74 75   {.         retu
4340: 72 6e 20 31 0a 20 20 20 20 20 20 7d 0a 20 20 20  rn 1.      }.   
4350: 7d 0a 20 20 20 72 65 74 75 72 6e 20 30 0a 7d 0a  }.   return 0.}.
4360: 0a 0a 23 2d 2d 20 43 68 65 63 6b 20 69 66 20 66  ..#-- Check if f
4370: 69 6c 65 20 65 78 69 73 74 73 20 69 6e 20 72 65  ile exists in re
4380: 70 6f 73 69 74 6f 72 79 0a 70 72 6f 63 20 75 69  pository.proc ui
4390: 3a 3a 66 69 6c 65 5f 65 78 69 73 74 73 20 7b 6e  ::file_exists {n
43a0: 61 6d 65 7d 20 7b 0a 20 20 20 69 66 20 5b 73 71  ame} {.   if [sq
43b0: 6c 3a 3a 61 6c 6c 6f 77 65 64 20 24 6e 61 6d 65  l::allowed $name
43c0: 5d 20 7b 0a 20 20 20 20 20 20 71 75 65 72 79 20  ] {.      query 
43d0: 22 53 45 4c 45 43 54 20 31 20 46 52 4f 4d 20 66  "SELECT 1 FROM f
43e0: 69 6c 65 6e 61 6d 65 20 57 48 45 52 45 20 6e 61  ilename WHERE na
43f0: 6d 65 20 3d 20 27 27 24 6e 61 6d 65 27 27 22 20  me = ''$name''" 
4400: 7b 0a 20 20 20 20 20 20 20 20 20 72 65 74 75 72  {.         retur
4410: 6e 20 31 0a 20 20 20 20 20 20 7d 0a 20 20 20 7d  n 1.      }.   }
4420: 0a 20 20 20 72 65 74 75 72 6e 20 30 0a 7d 0a 0a  .   return 0.}..
4430: 0a 23 2d 2d 20 43 61 6c 6c 20 75 69 3a 3a 73 65  .#-- Call ui::se
4440: 61 72 63 68 20 6f 6e 20 6e 6f 6e 2d 65 78 69 73  arch on non-exis
4450: 74 61 6e 74 20 77 69 6b 69 20 70 61 67 65 73 0a  tant wiki pages.
4460: 23 20 2a 20 57 65 20 63 61 6e 20 67 65 74 20 24  # * We can get $
4470: 3c 74 69 74 6c 65 3e 20 61 73 20 73 65 61 72 63  <title> as searc
4480: 68 20 74 65 72 6d 73 0a 23 20 20 20 28 6e 6f 20  h terms.#   (no 
4490: 77 61 79 20 74 6f 20 61 63 63 65 73 73 20 71 75  way to access qu
44a0: 65 72 79 20 73 74 72 69 6e 67 20 70 61 72 61 6d  ery string param
44b0: 65 74 65 72 73 20 6f 74 68 65 72 77 69 73 65 29  eters otherwise)
44c0: 0a 23 20 2a 20 42 75 74 20 74 68 69 73 20 69 73  .# * But this is
44d0: 20 61 6c 73 6f 20 63 6f 6e 76 65 6e 69 65 6e 74   also convenient
44e0: 2c 20 61 73 20 69 74 20 64 6f 75 62 6c 65 73 20  , as it doubles 
44f0: 61 73 20 77 69 6b 69 20 70 61 67 65 20 73 65 61  as wiki page sea
4500: 72 63 68 0a 70 72 6f 63 20 75 69 3a 3a 73 65 61  rch.proc ui::sea
4510: 72 63 68 5f 6f 6e 5f 77 69 6b 69 20 7b 7d 20 7b  rch_on_wiki {} {
4520: 0a 20 20 20 75 70 76 61 72 20 31 20 20 74 69 74  .   upvar 1  tit
4530: 6c 65 20 74 69 74 6c 65 20 20 62 61 73 65 75 72  le title  baseur
4540: 6c 20 62 61 73 65 75 72 6c 20 20 63 75 72 72 65  l baseurl  curre
4550: 6e 74 5f 70 61 67 65 20 63 75 72 72 65 6e 74 5f  nt_page current_
4560: 70 61 67 65 0a 20 20 20 69 66 20 5b 65 78 70 72  page.   if [expr
4570: 20 7b 5b 72 65 67 65 78 70 20 7b 5e 77 69 6b 69   {[regexp {^wiki
4580: 5b 3f 5d 6e 61 6d 65 3d 7d 20 24 63 75 72 72 65  [?]name=} $curre
4590: 6e 74 5f 70 61 67 65 5d 20 26 26 20 21 20 5b 75  nt_page] && ! [u
45a0: 69 3a 3a 70 61 67 65 5f 65 78 69 73 74 73 20 24  i::page_exists $
45b0: 74 69 74 6c 65 5d 7d 5d 20 7b 0a 20 20 20 20 20  title]}] {.     
45c0: 20 68 74 6d 6c 20 22 3c 68 32 20 63 6c 61 73 73   html "<h2 class
45d0: 3d 73 65 61 72 63 68 2d 68 65 61 64 6c 69 6e 65  =search-headline
45e0: 3e 53 65 61 72 63 68 3c 2f 68 32 3e 22 3b 0a 20  >Search</h2>";. 
45f0: 20 20 20 20 20 75 69 3a 3a 73 65 61 72 63 68 20       ui::search 
4600: 24 74 69 74 6c 65 20 24 62 61 73 65 75 72 6c 0a  $title $baseurl.
4610: 20 20 20 20 20 20 68 74 6d 6c 20 22 3c 62 72 3e        html "<br>
4620: 3c 62 72 3e 3c 62 72 3e 3c 62 72 3e 22 0a 20 20  <br><br><br>".  
4630: 20 7d 0a 7d 0a 0a 0a 23 2d 2d 20 4f 72 64 65 72   }.}...#-- Order
4640: 65 64 20 6c 69 73 74 20 6f 66 20 70 72 6f 6a 65  ed list of proje
4650: 63 74 20 73 74 61 74 69 73 74 69 63 73 20 28 77  ct statistics (w
4660: 69 6c 6c 20 70 6f 70 75 6c 61 74 65 20 67 6c 6f  ill populate glo
4670: 62 61 6c 20 24 73 74 61 74 73 28 29 20 61 72 72  bal $stats() arr
4680: 61 79 29 0a 70 72 6f 63 20 75 69 3a 3a 73 74 61  ay).proc ui::sta
4690: 74 73 20 7b 7d 20 7b 0a 20 20 20 75 70 6c 65 76  ts {} {.   uplev
46a0: 65 6c 20 31 20 7b 20 71 75 65 72 79 20 7b 53 45  el 1 { query {SE
46b0: 4c 45 43 54 0a 20 20 20 20 20 28 53 45 4c 45 43  LECT.     (SELEC
46c0: 54 20 63 6f 75 6e 74 28 6f 62 6a 69 64 29 20 46  T count(objid) F
46d0: 52 4f 4d 20 65 76 65 6e 74 20 57 48 45 52 45 20  ROM event WHERE 
46e0: 74 79 70 65 3d 27 27 63 69 27 27 20 4c 49 4d 49  type=''ci'' LIMI
46f0: 54 20 31 29 20 41 53 20 60 73 74 61 74 73 5f 63  T 1) AS `stats_c
4700: 68 65 63 6b 69 6e 73 60 2c 0a 20 20 20 20 20 28  heckins`,.     (
4710: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 6e 61 6d  SELECT count(nam
4720: 65 29 20 46 52 4f 4d 20 66 69 6c 65 6e 61 6d 65  e) FROM filename
4730: 20 4c 49 4d 49 54 20 31 29 20 41 53 20 60 73 74   LIMIT 1) AS `st
4740: 61 74 73 5f 66 69 6c 65 73 60 2c 0a 20 20 20 20  ats_files`,.    
4750: 20 28 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 73   (SELECT count(s
4760: 74 61 74 75 73 29 20 46 52 4f 4d 20 74 69 63 6b  tatus) FROM tick
4770: 65 74 20 4c 49 4d 49 54 20 31 29 20 41 53 20 60  et LIMIT 1) AS `
4780: 73 74 61 74 73 5f 74 69 63 6b 65 74 73 60 2c 0a  stats_tickets`,.
4790: 20 20 20 20 20 28 53 45 4c 45 43 54 20 63 6f 75       (SELECT cou
47a0: 6e 74 28 44 49 53 54 49 4e 43 54 20 75 73 65 72  nt(DISTINCT user
47b0: 29 20 46 52 4f 4d 20 65 76 65 6e 74 20 4c 49 4d  ) FROM event LIM
47c0: 49 54 20 31 29 20 41 53 20 60 73 74 61 74 73 5f  IT 1) AS `stats_
47d0: 64 65 76 65 6c 6f 70 65 72 73 60 2c 0a 20 20 20  developers`,.   
47e0: 20 20 28 53 45 4c 45 43 54 20 63 6f 75 6e 74 28    (SELECT count(
47f0: 44 49 53 54 49 4e 43 54 20 76 61 6c 75 65 29 20  DISTINCT value) 
4800: 46 52 4f 4d 20 74 61 67 78 72 65 66 20 57 48 45  FROM tagxref WHE
4810: 52 45 20 74 61 67 69 64 3d 38 29 20 41 53 20 60  RE tagid=8) AS `
4820: 73 74 61 74 73 5f 62 72 61 6e 63 68 65 73 60 2c  stats_branches`,
4830: 0a 20 20 20 20 20 28 53 45 4c 45 43 54 20 63 6f  .     (SELECT co
4840: 75 6e 74 28 74 61 67 6e 61 6d 65 29 20 46 52 4f  unt(tagname) FRO
4850: 4d 20 74 61 67 20 57 48 45 52 45 20 74 61 67 6e  M tag WHERE tagn
4860: 61 6d 65 20 4c 49 4b 45 20 27 27 73 79 6d 2d 25  ame LIKE ''sym-%
4870: 27 27 29 20 41 53 20 60 73 74 61 74 73 5f 74 61  '') AS `stats_ta
4880: 67 73 60 2c 0a 20 20 20 20 20 28 53 45 4c 45 43  gs`,.     (SELEC
4890: 54 20 63 6f 75 6e 74 28 74 61 67 6e 61 6d 65 29  T count(tagname)
48a0: 20 46 52 4f 4d 20 74 61 67 20 57 48 45 52 45 20   FROM tag WHERE 
48b0: 74 61 67 6e 61 6d 65 20 52 45 47 45 58 50 20 27  tagname REGEXP '
48c0: 27 5e 73 79 6d 5b 5c 5c 2d 5c 5c 77 5f 2e 5d 2b  '^sym[\\-\\w_.]+
48d0: 5c 5c 64 2b 5c 5c 2e 5c 5c 64 2b 27 27 29 20 41  \\d+\\.\\d+'') A
48e0: 53 20 60 73 74 61 74 73 5f 72 65 6c 65 61 73 65  S `stats_release
48f0: 73 60 0a 20 20 20 7d 20 7b 7d 20 7d 0a 7d 0a 0a  s`.   } {} }.}..
4900: 0a 23 2d 2d 20 4c 61 6e 67 75 61 67 65 2f 43 6f  .#-- Language/Co
4910: 6e 74 65 6e 74 20 73 74 61 74 69 73 74 69 63 73  ntent statistics
4920: 20 28 6f 75 74 70 75 74 73 20 63 6f 6c 6f 72 65   (outputs colore
4930: 64 20 62 61 72 20 67 72 61 70 68 29 0a 70 72 6f  d bar graph).pro
4940: 63 20 75 69 3a 3a 6c 61 6e 67 5f 73 74 61 74 73  c ui::lang_stats
4950: 20 7b 7d 20 7b 0a 20 20 20 23 20 66 65 74 63 68   {} {.   # fetch
4960: 20 24 6c 61 6e 67 28 6a 73 2f 2e 2e 2e 29 2c 20   $lang(js/...), 
4970: 24 6c 61 6e 67 5f 63 6f 6c 6f 72 28 6a 73 29 2c  $lang_color(js),
4980: 20 24 6c 61 6e 67 5f 6c 69 73 74 2c 20 24 74 6f   $lang_list, $to
4990: 74 61 6c 5f 73 69 7a 65 0a 20 20 20 71 75 65 72  tal_size.   quer
49a0: 79 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20  y {SELECT name, 
49b0: 76 61 6c 75 65 20 46 52 4f 4d 20 66 78 5f 73 74  value FROM fx_st
49c0: 61 74 73 20 4f 52 44 45 52 20 62 79 20 56 41 4c  ats ORDER by VAL
49d0: 55 45 20 44 45 53 43 7d 20 7b 0a 20 20 20 20 20  UE DESC} {.     
49e0: 20 73 65 74 20 24 6e 61 6d 65 20 24 76 61 6c 75   set $name $valu
49f0: 65 0a 20 20 20 7d 0a 20 20 20 23 20 6f 75 74 70  e.   }.   # outp
4a00: 75 74 20 63 6f 6c 6f 72 20 62 61 72 20 66 6f 72  ut color bar for
4a10: 20 6c 61 6e 67 75 61 67 65 20 70 72 6f 70 6f 72   language propor
4a20: 74 69 6f 6e 73 0a 20 20 20 23 68 74 6d 6c 20 22  tions.   #html "
4a30: 3c 64 69 76 20 63 6c 61 73 73 3d 6c 61 6e 67 75  <div class=langu
4a40: 61 67 65 2d 62 61 72 20 73 74 79 6c 65 3d 27 27  age-bar style=''
4a50: 77 69 64 74 68 3a 31 30 30 25 3b 20 68 65 69 67  width:100%; heig
4a60: 68 74 3a 33 70 74 3b 20 62 6f 78 2d 73 69 7a 69  ht:3pt; box-sizi
4a70: 6e 67 3a 62 6f 72 64 65 72 2d 62 6f 78 3b 27 27  ng:border-box;''
4a80: 3e 22 0a 20 20 20 66 6f 72 65 61 63 68 20 6e 61  >".   foreach na
4a90: 6d 65 20 24 6c 61 6e 67 5f 6c 69 73 74 20 7b 0a  me $lang_list {.
4aa0: 20 20 20 20 20 20 73 65 74 20 70 65 72 63 65 6e        set percen
4ab0: 74 20 22 5b 65 78 70 72 20 24 6c 61 6e 67 28 24  t "[expr $lang($
4ac0: 6e 61 6d 65 29 2a 31 30 30 5d 25 22 0a 20 20 20  name)*100]%".   
4ad0: 20 20 20 68 74 6d 6c 20 22 3c 73 70 61 6e 20 63     html "<span c
4ae0: 6c 61 73 73 3d 63 6f 64 65 2d 72 61 74 65 2d 24  lass=code-rate-$
4af0: 6e 61 6d 65 20 73 74 79 6c 65 3d 27 27 68 65 69  name style=''hei
4b00: 67 68 74 3a 31 30 30 25 3b 20 77 69 64 74 68 3a  ght:100%; width:
4b10: 24 70 65 72 63 65 6e 74 3b 20 64 69 73 70 6c 61  $percent; displa
4b20: 79 3a 69 6e 6c 69 6e 65 2d 62 6c 6f 63 6b 3b 20  y:inline-block; 
4b30: 62 61 63 6b 67 72 6f 75 6e 64 2d 63 6f 6c 6f 72  background-color
4b40: 3a 23 24 6c 61 6e 67 5f 63 6f 6c 6f 72 28 24 6e  :#$lang_color($n
4b50: 61 6d 65 29 27 27 20 74 69 74 6c 65 3d 27 27 24  ame)'' title=''$
4b60: 70 65 72 63 65 6e 74 20 24 6e 61 6d 65 27 27 3e  percent $name''>
4b70: 3c 2f 73 70 61 6e 3e 22 3b 0a 20 20 20 7d 0a 20  </span>";.   }. 
4b80: 20 20 23 68 74 6d 6c 20 22 3c 2f 64 69 76 3e 22    #html "</div>"
4b90: 3b 0a 7d 0a 0a 0a 0a 23 2d 2d 20 70 72 69 6e 74  ;.}....#-- print
4ba0: 20 74 77 6f 20 74 61 62 6c 65 20 72 6f 77 73 20   two table rows 
4bb0: 66 6f 72 20 6c 61 73 74 20 63 6f 6d 6d 69 74 0a  for last commit.
4bc0: 70 72 6f 63 20 75 69 3a 3a 6c 61 73 74 5f 63 6f  proc ui::last_co
4bd0: 6d 6d 69 74 20 7b 7d 20 7b 0a 20 20 20 71 75 65  mmit {} {.   que
4be0: 72 79 20 7b 53 45 4c 45 43 54 20 2a 2c 20 43 41  ry {SELECT *, CA
4bf0: 53 54 28 6a 75 6c 69 61 6e 64 61 79 28 27 27 6e  ST(julianday(''n
4c00: 6f 77 27 27 29 2d 6d 74 69 6d 65 20 41 53 20 49  ow'')-mtime AS I
4c10: 4e 54 29 20 41 53 20 61 67 65 2c 20 73 75 62 73  NT) AS age, subs
4c20: 74 72 28 63 6f 6d 6d 65 6e 74 2c 30 2c 31 39 39  tr(comment,0,199
4c30: 29 20 41 53 20 6d 73 67 2c 20 73 75 62 73 74 72  ) AS msg, substr
4c40: 28 75 75 69 64 2c 20 30 2c 20 31 30 29 20 41 53  (uuid, 0, 10) AS
4c50: 20 73 68 6f 72 74 5f 75 75 69 64 0a 20 20 20 20   short_uuid.    
4c60: 20 20 20 20 20 20 46 52 4f 4d 20 65 76 65 6e 74        FROM event
4c70: 20 4a 4f 49 4e 20 62 6c 6f 62 20 4f 4e 20 62 6c   JOIN blob ON bl
4c80: 6f 62 2e 72 69 64 3d 65 76 65 6e 74 2e 6f 62 6a  ob.rid=event.obj
4c90: 69 64 0a 20 20 20 20 20 20 20 20 20 20 57 48 45  id.          WHE
4ca0: 52 45 20 74 79 70 65 3d 27 27 63 69 27 27 20 4f  RE type=''ci'' O
4cb0: 52 44 45 52 20 42 59 20 6d 74 69 6d 65 20 44 45  RDER BY mtime DE
4cc0: 53 43 20 4c 49 4d 49 54 20 31 0a 20 20 20 7d 20  SC LIMIT 1.   } 
4cd0: 7b 0a 20 20 20 20 20 20 68 74 6d 6c 20 22 20 20  {.      html "  
4ce0: 3c 74 72 3e 3c 74 68 20 63 6f 6c 73 70 61 6e 3d  <tr><th colspan=
4cf0: 33 3e 24 6d 73 67 3c 2f 74 68 3e 3c 2f 74 72 3e  3>$msg</th></tr>
4d00: 22 3b 0a 20 20 20 20 20 20 68 74 6d 6c 20 22 20  ";.      html " 
4d10: 20 3c 74 72 3e 3c 74 68 20 63 6f 6c 73 70 61 6e   <tr><th colspan
4d20: 3d 33 20 73 74 79 6c 65 3d 62 61 63 6b 67 72 6f  =3 style=backgro
4d30: 75 6e 64 3a 23 66 66 66 3e 3c 61 20 68 72 65 66  und:#fff><a href
4d40: 3d 27 27 74 69 6d 65 6c 69 6e 65 3f 75 3d 24 75  =''timeline?u=$u
4d50: 73 65 72 27 27 20 63 6c 61 73 73 3d 75 73 65 72  ser'' class=user
4d60: 3e 24 75 73 65 72 3c 2f 61 3e 20 61 75 74 68 6f  >$user</a> autho
4d70: 72 65 64 20 24 61 67 65 20 64 61 79 73 20 61 67  red $age days ag
4d80: 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20 3c 73  o.            <s
4d90: 70 61 6e 20 73 74 79 6c 65 3d 66 6c 6f 61 74 3a  pan style=float:
4da0: 72 69 67 68 74 3e 6c 61 73 74 20 63 68 65 63 6b  right>last check
4db0: 69 6e 20 3c 61 20 68 72 65 66 3d 27 27 63 69 2f  in <a href=''ci/
4dc0: 24 75 75 69 64 27 27 3e 24 73 68 6f 72 74 5f 75  $uuid''>$short_u
4dd0: 75 69 64 3c 2f 61 3e 3c 2f 73 70 61 6e 3e 3c 2f  uid</a></span></
4de0: 74 68 3e 3c 2f 74 72 3e 22 3b 0a 20 20 20 7d 0a  th></tr>";.   }.
4df0: 7d 0a 0a 0a 23 2d 2d 20 6f 75 74 70 75 74 73 20  }...#-- outputs 
4e00: 74 61 62 6c 65 20 72 6f 77 73 20 63 6f 6e 74 61  table rows conta
4e10: 69 6e 69 6e 67 20 74 6f 70 2d 6c 65 76 65 6c 20  ining top-level 
4e20: 66 69 6c 65 6e 61 6d 65 73 20 61 6e 64 20 72 65  filenames and re
4e30: 63 65 6e 74 20 63 68 65 63 6b 69 6e 20 63 6f 6d  cent checkin com
4e40: 6d 65 6e 74 73 0a 70 72 6f 63 20 75 69 3a 3a 72  ments.proc ui::r
4e50: 65 63 65 6e 74 5f 66 69 6c 65 73 20 7b 7d 20 7b  ecent_files {} {
4e60: 0a 20 20 20 73 65 74 20 73 65 65 6e 20 22 22 0a  .   set seen "".
4e70: 0a 20 20 20 23 20 66 69 6c 65 73 0a 20 20 20 71  .   # files.   q
4e80: 75 65 72 79 20 7b 0a 20 20 20 20 20 20 20 53 45  uery {.       SE
4e90: 4c 45 43 54 20 44 49 53 54 49 4e 43 54 0a 20 20  LECT DISTINCT.  
4ea0: 20 20 20 20 20 20 20 20 20 20 20 69 6e 73 74 72             instr
4eb0: 28 6e 61 6d 65 2c 20 27 27 2f 27 27 29 20 61 73  (name, ''/'') as
4ec0: 20 64 69 72 2c 0a 20 20 20 20 20 20 20 20 20 20   dir,.          
4ed0: 20 20 20 28 43 41 53 45 20 69 6e 73 74 72 28 6e     (CASE instr(n
4ee0: 61 6d 65 2c 27 27 2f 27 27 29 20 57 48 45 4e 20  ame,''/'') WHEN 
4ef0: 30 20 54 48 45 4e 20 6e 61 6d 65 0a 20 20 20 20  0 THEN name.    
4f00: 20 20 20 20 20 20 20 20 20 20 45 4c 53 45 20 73            ELSE s
4f10: 75 62 73 74 72 28 6e 61 6d 65 2c 30 2c 69 6e 73  ubstr(name,0,ins
4f20: 74 72 28 6e 61 6d 65 2c 20 27 27 2f 27 27 29 29  tr(name, ''/''))
4f30: 20 45 4e 44 29 20 41 53 20 6e 61 6d 65 2c 0a 20   END) AS name,. 
4f40: 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62 73              subs
4f50: 74 72 28 63 6f 6d 6d 65 6e 74 2c 20 30 2c 20 37  tr(comment, 0, 7
4f60: 30 29 20 41 53 20 63 6f 6d 6d 65 6e 74 2c 0a 20  0) AS comment,. 
4f70: 20 20 20 20 20 20 20 20 20 20 20 20 75 75 69 64              uuid
4f80: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 43  ,.             C
4f90: 41 53 54 28 6a 75 6c 69 61 6e 64 61 79 28 27 27  AST(julianday(''
4fa0: 6e 6f 77 27 27 29 2d 6d 74 69 6d 65 20 41 53 20  now'')-mtime AS 
4fb0: 49 4e 54 29 20 41 53 20 61 67 65 0a 20 20 20 20  INT) AS age.    
4fc0: 20 20 20 46 52 4f 4d 20 66 69 6c 65 6e 61 6d 65     FROM filename
4fd0: 0a 20 20 20 20 20 20 20 4a 4f 49 4e 20 6d 6c 69  .       JOIN mli
4fe0: 6e 6b 20 4f 4e 20 66 69 6c 65 6e 61 6d 65 2e 66  nk ON filename.f
4ff0: 6e 69 64 3d 6d 6c 69 6e 6b 2e 66 6e 69 64 0a 20  nid=mlink.fnid. 
5000: 20 20 20 20 20 20 4a 4f 49 4e 20 65 76 65 6e 74        JOIN event
5010: 20 4f 4e 20 6d 6c 69 6e 6b 2e 6d 69 64 3d 65 76   ON mlink.mid=ev
5020: 65 6e 74 2e 6f 62 6a 69 64 0a 20 20 20 20 20 20  ent.objid.      
5030: 20 4a 4f 49 4e 20 62 6c 6f 62 20 4f 4e 20 62 6c   JOIN blob ON bl
5040: 6f 62 2e 72 69 64 3d 65 76 65 6e 74 2e 6f 62 6a  ob.rid=event.obj
5050: 69 64 0a 20 20 20 20 20 20 20 47 52 4f 55 50 20  id.       GROUP 
5060: 42 59 20 6e 61 6d 65 20 4f 52 44 45 52 20 42 59  BY name ORDER BY
5070: 20 64 69 72 20 44 45 53 43 2c 20 6d 74 69 6d 65   dir DESC, mtime
5080: 20 44 45 53 43 0a 20 20 20 7d 20 7b 0a 20 20 20   DESC.   } {.   
5090: 20 20 20 69 66 20 7b 24 64 69 72 20 26 26 20 5b     if {$dir && [
50a0: 73 74 72 3a 3a 63 6f 6e 74 61 69 6e 73 20 24 6e  str::contains $n
50b0: 61 6d 65 20 24 73 65 65 6e 5d 7d 20 7b 20 63 6f  ame $seen]} { co
50c0: 6e 74 69 6e 75 65 20 7d 20 65 6c 73 65 20 7b 20  ntinue } else { 
50d0: 73 65 74 20 73 65 65 6e 20 22 24 6e 61 6d 65 2c  set seen "$name,
50e0: 24 73 65 65 6e 22 20 7d 0a 20 20 20 20 20 20 68  $seen" }.      h
50f0: 74 6d 6c 20 22 20 20 20 20 20 20 20 20 20 20 20  tml "           
5100: 20 20 20 20 3c 74 72 3e 3c 74 64 3e 22 3b 0a 20      <tr><td>";. 
5110: 20 20 20 20 20 69 66 20 7b 24 64 69 72 20 3e 20       if {$dir > 
5120: 30 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 68  0} {.          h
5130: 74 6d 6c 20 22 3c 61 20 63 6c 61 73 73 3d 64 69  tml "<a class=di
5140: 72 20 68 72 65 66 3d 27 27 74 72 65 65 3f 6e 61  r href=''tree?na
5150: 6d 65 3d 5b 68 74 6d 6c 69 7a 65 20 24 6e 61 6d  me=[htmlize $nam
5160: 65 5d 27 27 3e 3c 62 20 63 6c 61 73 73 3d 67 6c  e]''><b class=gl
5170: 79 70 68 3e f0 9f 93 82 3c 2f 62 3e 20 5b 68 74  yph>📂</b> [ht
5180: 6d 6c 69 7a 65 20 24 6e 61 6d 65 5d 3c 2f 61 3e  mlize $name]</a>
5190: 22 3b 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  ";.      } else 
51a0: 7b 0a 20 20 20 20 20 20 20 20 20 20 68 74 6d 6c  {.          html
51b0: 20 22 3c 61 20 63 6c 61 73 73 3d 66 69 6c 65 20   "<a class=file 
51c0: 68 72 65 66 3d 27 27 63 69 2f 24 75 75 69 64 3f  href=''ci/$uuid?
51d0: 73 62 73 3d 30 27 27 3e 3c 62 20 63 6c 61 73 73  sbs=0''><b class
51e0: 3d 67 6c 79 70 68 3e f0 9f 93 84 3c 2f 62 3e 20  =glyph>📄</b> 
51f0: 5b 68 74 6d 6c 69 7a 65 20 24 6e 61 6d 65 5d 3c  [htmlize $name]<
5200: 2f 61 3e 22 3b 0a 20 20 20 20 20 20 7d 0a 20 20  /a>";.      }.  
5210: 20 20 20 20 68 74 6d 6c 20 22 3c 2f 74 64 3e 20      html "</td> 
5220: 3c 74 64 3e 5b 68 74 6d 6c 69 7a 65 20 24 63 6f  <td>[htmlize $co
5230: 6d 6d 65 6e 74 5d 3c 2f 74 64 3e 20 3c 74 64 3e  mment]</td> <td>
5240: 5b 68 74 6d 6c 69 7a 65 20 24 61 67 65 5d 20 64  [htmlize $age] d
5250: 61 79 73 20 61 67 6f 3c 2f 74 64 3e 3c 2f 74 72  ays ago</td></tr
5260: 3e 5c 6e 22 3b 0a 20 20 20 7d 0a 7d 27 0a        >\n";.   }.}'.