0000: 2f 2a 0a 2a 2a 20 43 6f 70 79 72 69 67 68 74 20 /*.** Copyright
0010: 28 63 29 20 32 30 30 36 2c 32 30 30 37 20 44 2e (c) 2006,2007 D.
0020: 20 52 69 63 68 61 72 64 20 48 69 70 70 0a 2a 2a Richard Hipp.**
0030: 0a 2a 2a 20 54 68 69 73 20 70 72 6f 67 72 61 6d .** This program
0040: 20 69 73 20 66 72 65 65 20 73 6f 66 74 77 61 72 is free softwar
0050: 65 3b 20 79 6f 75 20 63 61 6e 20 72 65 64 69 73 e; you can redis
0060: 74 72 69 62 75 74 65 20 69 74 20 61 6e 64 2f 6f tribute it and/o
0070: 72 0a 2a 2a 20 6d 6f 64 69 66 79 20 69 74 20 75 r.** modify it u
0080: 6e 64 65 72 20 74 68 65 20 74 65 72 6d 73 20 6f nder the terms o
0090: 66 20 74 68 65 20 53 69 6d 70 6c 69 66 69 65 64 f the Simplified
00a0: 20 42 53 44 20 4c 69 63 65 6e 73 65 20 28 61 6c BSD License (al
00b0: 73 6f 0a 2a 2a 20 6b 6e 6f 77 6e 20 61 73 20 74 so.** known as t
00c0: 68 65 20 22 32 2d 43 6c 61 75 73 65 20 4c 69 63 he "2-Clause Lic
00d0: 65 6e 73 65 22 20 6f 72 20 22 46 72 65 65 42 53 ense" or "FreeBS
00e0: 44 20 4c 69 63 65 6e 73 65 22 2e 29 0a 0a 2a 2a D License".)..**
00f0: 20 54 68 69 73 20 70 72 6f 67 72 61 6d 20 69 73 This program is
0100: 20 64 69 73 74 72 69 62 75 74 65 64 20 69 6e 20 distributed in
0110: 74 68 65 20 68 6f 70 65 20 74 68 61 74 20 69 74 the hope that it
0120: 20 77 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2c will be useful,
0130: 0a 2a 2a 20 62 75 74 20 77 69 74 68 6f 75 74 20 .** but without
0140: 61 6e 79 20 77 61 72 72 61 6e 74 79 3b 20 77 69 any warranty; wi
0150: 74 68 6f 75 74 20 65 76 65 6e 20 74 68 65 20 69 thout even the i
0160: 6d 70 6c 69 65 64 20 77 61 72 72 61 6e 74 79 20 mplied warranty
0170: 6f 66 0a 2a 2a 20 6d 65 72 63 68 61 6e 74 61 62 of.** merchantab
0180: 69 6c 69 74 79 20 6f 72 20 66 69 74 6e 65 73 73 ility or fitness
0190: 20 66 6f 72 20 61 20 70 61 72 74 69 63 75 6c 61 for a particula
01a0: 72 20 70 75 72 70 6f 73 65 2e 0a 2a 2a 0a 2a 2a r purpose..**.**
01b0: 20 41 75 74 68 6f 72 20 63 6f 6e 74 61 63 74 20 Author contact
01c0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 3a 0a 2a 2a 20 information:.**
01d0: 20 20 64 72 68 40 68 77 61 63 69 2e 63 6f 6d 0a drh@hwaci.com.
01e0: 2a 2a 20 20 20 68 74 74 70 3a 2f 2f 77 77 77 2e ** http://www.
01f0: 68 77 61 63 69 2e 63 6f 6d 2f 64 72 68 2f 0a 2a hwaci.com/drh/.*
0200: 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a *.**************
0210: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0220: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0230: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0240: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0250: 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 69 6c *.**.** This fil
0260: 65 20 63 6f 6e 74 61 69 6e 73 20 63 6f 64 65 20 e contains code
0270: 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 to implement the
0280: 20 62 61 73 69 63 20 77 65 62 20 70 61 67 65 20 basic web page
0290: 6c 6f 6f 6b 20 61 6e 64 20 66 65 65 6c 2e 0a 2a look and feel..*
02a0: 2a 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 56 *.*/.#include "V
02b0: 45 52 53 49 4f 4e 2e 68 22 0a 23 69 6e 63 6c 75 ERSION.h".#inclu
02c0: 64 65 20 22 63 6f 6e 66 69 67 2e 68 22 0a 23 69 de "config.h".#i
02d0: 6e 63 6c 75 64 65 20 22 73 74 79 6c 65 2e 68 22 nclude "style.h"
02e0: 0a 0a 2f 2a 0a 2a 2a 20 45 6c 65 6d 65 6e 74 73 ../*.** Elements
02f0: 20 6f 66 20 74 68 65 20 73 75 62 6d 65 6e 75 20 of the submenu
0300: 61 72 65 20 63 6f 6c 6c 65 63 74 65 64 20 69 6e are collected in
0310: 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 to the following
0320: 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 61 6e .** structure an
0330: 64 20 64 69 73 70 6c 61 79 65 64 20 62 65 6c 6f d displayed belo
0340: 77 20 74 68 65 20 6d 61 69 6e 20 6d 65 6e 75 2e w the main menu.
0350: 0a 2a 2a 0a 2a 2a 20 50 6f 70 75 6c 61 74 65 20 .**.** Populate
0360: 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65 20 these structure
0370: 77 69 74 68 20 63 61 6c 6c 73 20 74 6f 0a 2a 2a with calls to.**
0380: 0a 2a 2a 20 20 20 20 20 20 73 74 79 6c 65 5f 73 .** style_s
0390: 75 62 6d 65 6e 75 5f 65 6c 65 6d 65 6e 74 28 29 ubmenu_element()
03a0: 0a 2a 2a 20 20 20 20 20 20 73 74 79 6c 65 5f 73 .** style_s
03b0: 75 62 6d 65 6e 75 5f 65 6e 74 72 79 28 29 0a 2a ubmenu_entry().*
03c0: 2a 20 20 20 20 20 20 73 74 79 6c 65 5f 73 75 62 * style_sub
03d0: 6d 65 6e 75 5f 63 68 65 63 6b 62 6f 78 28 29 0a menu_checkbox().
03e0: 2a 2a 20 20 20 20 20 20 73 74 79 6c 65 5f 73 75 ** style_su
03f0: 62 6d 65 6e 75 5f 62 69 6e 61 72 79 28 29 0a 2a bmenu_binary().*
0400: 2a 20 20 20 20 20 20 73 74 79 6c 65 5f 73 75 62 * style_sub
0410: 6d 65 6e 75 5f 6d 75 6c 74 69 63 68 6f 69 63 65 menu_multichoice
0420: 28 29 0a 2a 2a 20 20 20 20 20 20 73 74 79 6c 65 ().** style
0430: 5f 73 75 62 6d 65 6e 75 5f 73 71 6c 28 29 0a 2a _submenu_sql().*
0440: 2a 0a 2a 2a 20 70 72 69 6f 72 20 74 6f 20 63 61 *.** prior to ca
0450: 6c 6c 69 6e 67 20 73 74 79 6c 65 5f 66 69 6e 69 lling style_fini
0460: 73 68 5f 70 61 67 65 28 29 2e 20 20 54 68 65 20 sh_page(). The
0470: 73 74 79 6c 65 5f 66 69 6e 69 73 68 5f 70 61 67 style_finish_pag
0480: 65 28 29 20 72 6f 75 74 69 6e 65 0a 2a 2a 20 77 e() routine.** w
0490: 69 6c 6c 20 67 65 6e 65 72 61 74 65 20 74 68 65 ill generate the
04a0: 20 61 70 70 72 6f 70 72 69 61 74 65 20 48 54 4d appropriate HTM
04b0: 4c 20 74 65 78 74 20 6a 75 73 74 20 62 65 6c 6f L text just belo
04c0: 77 20 74 68 65 20 6d 61 69 6e 0a 2a 2a 20 6d 65 w the main.** me
04d0: 6e 75 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 73 74 nu..*/.static st
04e0: 72 75 63 74 20 53 75 62 6d 65 6e 75 20 7b 0a 20 ruct Submenu {.
04f0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c 61 const char *zLa
0500: 62 65 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 42 bel; /* B
0510: 75 74 74 6f 6e 20 6c 61 62 65 6c 20 2a 2f 0a 20 utton label */.
0520: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c 69 const char *zLi
0530: 6e 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4a nk; /* J
0540: 75 6d 70 20 74 6f 20 74 68 69 73 20 6c 69 6e 6b ump to this link
0550: 20 77 68 65 6e 20 62 75 74 74 6f 6e 20 69 73 20 when button is
0560: 70 72 65 73 73 65 64 20 2a 2f 0a 7d 20 61 53 75 pressed */.} aSu
0570: 62 6d 65 6e 75 5b 33 30 5d 3b 0a 73 74 61 74 69 bmenu[30];.stati
0580: 63 20 69 6e 74 20 6e 53 75 62 6d 65 6e 75 20 3d c int nSubmenu =
0590: 20 30 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 0; /* Numbe
05a0: 72 20 6f 66 20 62 75 74 74 6f 6e 73 20 2a 2f 0a r of buttons */.
05b0: 73 74 61 74 69 63 20 73 74 72 75 63 74 20 53 75 static struct Su
05c0: 62 6d 65 6e 75 43 74 72 6c 20 7b 0a 20 20 63 6f bmenuCtrl {. co
05d0: 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b nst char *zName;
05e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f /* Fo
05f0: 72 6d 20 71 75 65 72 79 20 70 61 72 61 6d 65 74 rm query paramet
0600: 65 72 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 er */. const ch
0610: 61 72 20 2a 7a 4c 61 62 65 6c 3b 20 20 20 20 20 ar *zLabel;
0620: 20 20 20 20 20 2f 2a 20 4c 61 62 65 6c 2e 20 20 /* Label.
0630: 4d 69 67 68 74 20 62 65 20 4e 55 4c 4c 20 66 6f Might be NULL fo
0640: 72 20 46 46 5f 4d 55 4c 54 49 20 2a 2f 0a 20 20 r FF_MULTI */.
0650: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 65 54 unsigned char eT
0660: 79 70 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 ype; /*
0670: 46 46 5f 45 4e 54 52 59 2c 20 46 46 5f 4d 55 4c FF_ENTRY, FF_MUL
0680: 54 49 2c 20 46 46 5f 43 48 45 43 4b 42 4f 58 20 TI, FF_CHECKBOX
0690: 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 63 68 */. unsigned ch
06a0: 61 72 20 65 56 69 73 69 62 6c 65 3b 20 20 20 20 ar eVisible;
06b0: 20 20 2f 2a 20 53 54 59 4c 45 5f 4e 4f 52 4d 41 /* STYLE_NORMA
06c0: 4c 20 6f 72 20 53 54 59 4c 45 5f 44 49 53 41 42 L or STYLE_DISAB
06d0: 4c 45 44 20 2a 2f 0a 20 20 73 68 6f 72 74 20 69 LED */. short i
06e0: 6e 74 20 69 53 69 7a 65 3b 20 20 20 20 20 20 20 nt iSize;
06f0: 20 20 20 20 20 20 2f 2a 20 57 69 64 74 68 20 66 /* Width f
0700: 6f 72 20 46 46 5f 45 4e 54 52 59 2e 20 20 43 6f or FF_ENTRY. Co
0710: 75 6e 74 20 66 6f 72 20 46 46 5f 4d 55 4c 54 49 unt for FF_MULTI
0720: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 */. const char
0730: 20 2a 63 6f 6e 73 74 20 2a 61 7a 43 68 6f 69 63 *const *azChoic
0740: 65 3b 20 2f 2a 20 76 61 6c 75 65 2f 64 69 73 70 e; /* value/disp
0750: 6c 61 79 20 70 61 69 72 73 20 66 6f 72 20 46 46 lay pairs for FF
0760: 5f 4d 55 4c 54 49 20 2a 2f 0a 20 20 63 6f 6e 73 _MULTI */. cons
0770: 74 20 63 68 61 72 20 2a 7a 46 61 6c 73 65 3b 20 t char *zFalse;
0780: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 46 5f 42 /* FF_B
0790: 49 4e 41 52 59 20 6c 61 62 65 6c 20 77 68 65 6e INARY label when
07a0: 20 66 61 6c 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 false */. cons
07b0: 74 20 63 68 61 72 20 2a 7a 4a 53 3b 20 20 20 20 t char *zJS;
07c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4a 61 76 61 /* Java
07d0: 73 63 72 69 70 74 20 74 6f 20 72 75 6e 20 6f 6e script to run on
07e0: 20 74 6f 67 67 6c 65 20 2a 2f 0a 7d 20 61 53 75 toggle */.} aSu
07f0: 62 6d 65 6e 75 43 74 72 6c 5b 32 30 5d 3b 0a 73 bmenuCtrl[20];.s
0800: 74 61 74 69 63 20 69 6e 74 20 6e 53 75 62 6d 65 tatic int nSubme
0810: 6e 75 43 74 72 6c 20 3d 20 30 3b 0a 23 64 65 66 nuCtrl = 0;.#def
0820: 69 6e 65 20 46 46 5f 45 4e 54 52 59 20 20 20 20 ine FF_ENTRY
0830: 31 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 1 /* Te
0840: 78 74 20 65 6e 74 72 79 20 62 6f 78 20 2a 2f 0a xt entry box */.
0850: 23 64 65 66 69 6e 65 20 46 46 5f 4d 55 4c 54 49 #define FF_MULTI
0860: 20 20 20 20 32 20 20 20 20 20 20 20 20 20 20 2f 2 /
0870: 2a 20 43 6f 6d 62 6f 62 6f 78 2e 20 20 4d 75 6c * Combobox. Mul
0880: 74 69 70 6c 65 20 63 68 6f 69 63 65 73 2e 20 2a tiple choices. *
0890: 2f 0a 23 64 65 66 69 6e 65 20 46 46 5f 42 49 4e /.#define FF_BIN
08a0: 41 52 59 20 20 20 33 20 20 20 20 20 20 20 20 20 ARY 3
08b0: 20 2f 2a 20 43 6f 6e 74 72 6f 6c 20 66 6f 72 20 /* Control for
08c0: 62 69 6e 61 72 79 20 71 75 65 72 79 20 70 61 72 binary query par
08d0: 61 6d 65 74 65 72 20 2a 2f 0a 23 64 65 66 69 6e ameter */.#defin
08e0: 65 20 46 46 5f 43 48 45 43 4b 42 4f 58 20 34 20 e FF_CHECKBOX 4
08f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63 /* Chec
0900: 6b 2d 62 6f 78 20 2a 2f 0a 0a 23 69 66 20 49 4e k-box */..#if IN
0910: 54 45 52 46 41 43 45 0a 23 64 65 66 69 6e 65 20 TERFACE.#define
0920: 53 54 59 4c 45 5f 4e 4f 52 4d 41 4c 20 20 20 30 STYLE_NORMAL 0
0930: 20 20 20 20 20 20 20 2f 2a 20 4e 6f 72 6d 61 6c /* Normal
0940: 20 64 69 73 70 6c 61 79 20 6f 66 20 63 6f 6e 74 display of cont
0950: 72 6f 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 rol */.#define S
0960: 54 59 4c 45 5f 44 49 53 41 42 4c 45 44 20 31 20 TYLE_DISABLED 1
0970: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 72 6f 6c /* Control
0980: 20 69 73 20 64 69 73 61 62 6c 65 64 20 2a 2f 0a is disabled */.
0990: 23 65 6e 64 69 66 20 2f 2a 20 49 4e 54 45 52 46 #endif /* INTERF
09a0: 41 43 45 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 ACE */../*.** Re
09b0: 6d 65 6d 62 65 72 20 74 68 61 74 20 74 68 65 20 member that the
09c0: 68 65 61 64 65 72 20 68 61 73 20 62 65 65 6e 20 header has been
09d0: 67 65 6e 65 72 61 74 65 64 2e 20 20 54 68 65 20 generated. The
09e0: 66 6f 6f 74 65 72 20 69 73 20 6f 6d 69 74 74 65 footer is omitte
09f0: 64 0a 2a 2a 20 69 66 20 61 6e 20 65 72 72 6f 72 d.** if an error
0a00: 20 6f 63 63 75 72 73 20 62 65 66 6f 72 65 20 74 occurs before t
0a10: 68 65 20 68 65 61 64 65 72 2e 0a 2a 2f 0a 73 74 he header..*/.st
0a20: 61 74 69 63 20 69 6e 74 20 68 65 61 64 65 72 48 atic int headerH
0a30: 61 73 42 65 65 6e 47 65 6e 65 72 61 74 65 64 20 asBeenGenerated
0a40: 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20 72 65 6d 65 = 0;../*.** reme
0a50: 6d 62 65 72 2c 20 69 66 20 61 20 73 69 64 65 62 mber, if a sideb
0a60: 6f 78 20 77 61 73 20 75 73 65 64 0a 2a 2f 0a 73 ox was used.*/.s
0a70: 74 61 74 69 63 20 69 6e 74 20 73 69 64 65 62 6f tatic int sidebo
0a80: 78 55 73 65 64 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a xUsed = 0;../*.*
0a90: 2a 20 41 64 2d 75 6e 69 74 20 73 74 79 6c 65 73 * Ad-unit styles
0aa0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75 6e 73 69 ..*/.static unsi
0ab0: 67 6e 65 64 20 61 64 55 6e 69 74 46 6c 61 67 73 gned adUnitFlags
0ac0: 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20 53 75 62 = 0;../*.** Sub
0ad0: 6d 65 6e 75 20 64 69 73 61 62 6c 65 20 66 6c 61 menu disable fla
0ae0: 67 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 g.*/.static int
0af0: 73 75 62 6d 65 6e 75 45 6e 61 62 6c 65 20 3d 20 submenuEnable =
0b00: 31 3b 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 1;../*.** Flags
0b10: 66 6f 72 20 76 61 72 69 6f 75 73 20 6a 61 76 61 for various java
0b20: 73 63 72 69 70 74 20 66 69 6c 65 73 20 6e 65 65 script files nee
0b30: 64 65 64 20 70 72 69 6f 72 20 74 6f 20 3c 2f 62 ded prior to </b
0b40: 6f 64 79 3e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 ody>.*/.static i
0b50: 6e 74 20 6e 65 65 64 48 72 65 66 4a 73 20 3d 20 nt needHrefJs =
0b60: 30 3b 20 20 20 20 20 20 2f 2a 20 68 72 65 66 2e 0; /* href.
0b70: 6a 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 78 74 js */../*.** Ext
0b80: 72 61 20 4a 53 20 61 64 64 65 64 20 74 6f 20 74 ra JS added to t
0b90: 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 66 69 he end of the fi
0ba0: 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 42 6c le..*/.static Bl
0bb0: 6f 62 20 62 6c 6f 62 4f 6e 4c 6f 61 64 20 3d 20 ob blobOnLoad =
0bc0: 42 4c 4f 42 5f 49 4e 49 54 49 41 4c 49 5a 45 52 BLOB_INITIALIZER
0bd0: 3b 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e 65 72 61 74 ;../*.** Generat
0be0: 65 20 61 6e 64 20 72 65 74 75 72 6e 20 61 20 61 e and return a a
0bf0: 6e 63 68 6f 72 20 74 61 67 20 6c 69 6b 65 20 74 nchor tag like t
0c00: 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 his:.**.**
0c10: 20 20 3c 61 20 68 72 65 66 3d 22 55 52 4c 22 3e <a href="URL">
0c20: 0a 2a 2a 20 20 6f 72 20 20 20 20 3c 61 20 69 64 .** or <a id
0c30: 3d 22 49 44 22 3e 0a 2a 2a 0a 2a 2a 20 54 68 65 ="ID">.**.** The
0c40: 20 66 6f 72 6d 20 6f 66 20 74 68 65 20 61 6e 63 form of the anc
0c50: 68 6f 72 20 74 61 67 20 69 73 20 64 65 74 65 72 hor tag is deter
0c60: 6d 69 6e 65 64 20 62 79 20 74 68 65 20 67 2e 6a mined by the g.j
0c70: 61 76 61 73 63 72 69 70 74 48 79 70 65 72 6c 69 avascriptHyperli
0c80: 6e 6b 0a 2a 2a 20 76 61 72 69 61 62 6c 65 2e 20 nk.** variable.
0c90: 20 54 68 65 20 68 72 65 66 3d 22 55 52 4c 22 20 The href="URL"
0ca0: 66 6f 72 6d 20 69 73 20 75 73 65 64 20 69 66 20 form is used if
0cb0: 67 2e 6a 61 76 61 73 63 72 69 70 74 48 79 70 65 g.javascriptHype
0cc0: 72 6c 69 6e 6b 20 69 73 20 66 61 6c 73 65 2e 0a rlink is false..
0cd0: 2a 2a 20 49 66 20 67 2e 6a 61 76 61 73 63 72 69 ** If g.javascri
0ce0: 70 74 48 79 70 65 72 6c 69 6e 6b 20 69 73 20 74 ptHyperlink is t
0cf0: 72 75 65 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 rue then the.**
0d00: 69 64 3d 22 49 44 22 20 66 6f 72 6d 20 69 73 20 id="ID" form is
0d10: 75 73 65 64 20 61 6e 64 20 6a 61 76 61 73 63 72 used and javascr
0d20: 69 70 74 20 69 73 20 67 65 6e 65 72 61 74 65 64 ipt is generated
0d30: 20 69 6e 20 74 68 65 20 66 6f 6f 74 65 72 20 74 in the footer t
0d40: 6f 20 63 61 75 73 65 0a 2a 2a 20 68 72 65 66 20 o cause.** href
0d50: 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69 6e 73 values to be ins
0d60: 65 72 74 65 64 20 61 66 74 65 72 20 74 68 65 20 erted after the
0d70: 70 61 67 65 20 68 61 73 20 6c 6f 61 64 65 64 2e page has loaded.
0d80: 20 20 49 66 0a 2a 2a 20 67 2e 70 65 72 6d 2e 48 If.** g.perm.H
0d90: 69 73 74 6f 72 79 20 69 73 20 66 61 6c 73 65 2c istory is false,
0da0: 20 74 68 65 6e 20 74 68 65 20 3c 61 20 69 64 3d then the <a id=
0db0: 22 49 44 22 3e 20 66 6f 72 6d 20 69 73 20 73 74 "ID"> form is st
0dc0: 69 6c 6c 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64 ill.** generated
0dd0: 20 62 75 74 20 74 68 65 20 6a 61 76 61 73 63 72 but the javascr
0de0: 69 70 74 20 69 73 20 6e 6f 74 20 67 65 6e 65 72 ipt is not gener
0df0: 61 74 65 64 20 73 6f 20 74 68 65 20 6c 69 6e 6b ated so the link
0e00: 73 20 6e 65 76 65 72 0a 2a 2a 20 61 63 74 69 76 s never.** activ
0e10: 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 ate..**.** If th
0e20: 65 20 75 73 65 72 20 6c 61 63 6b 73 20 74 68 65 e user lacks the
0e30: 20 48 79 70 65 72 6c 69 6e 6b 20 28 68 29 20 70 Hyperlink (h) p
0e40: 72 6f 70 65 72 74 79 20 61 6e 64 20 74 68 65 20 roperty and the
0e50: 22 61 75 74 6f 2d 68 79 70 65 72 6c 69 6e 6b 22 "auto-hyperlink"
0e60: 0a 2a 2a 20 73 65 74 74 69 6e 67 20 69 73 20 74 .** setting is t
0e70: 72 75 65 2c 20 74 68 65 6e 20 67 2e 70 65 72 6d rue, then g.perm
0e80: 2e 48 79 70 65 72 6c 69 6e 6b 20 69 73 20 63 68 .Hyperlink is ch
0e90: 61 6e 67 65 64 20 66 72 6f 6d 20 30 20 74 6f 20 anged from 0 to
0ea0: 31 20 61 6e 64 0a 2a 2a 20 67 2e 6a 61 76 61 73 1 and.** g.javas
0eb0: 63 72 69 70 74 48 79 70 65 72 6c 69 6e 6b 20 69 criptHyperlink i
0ec0: 73 20 73 65 74 20 74 6f 20 31 2e 20 20 54 68 65 s set to 1. The
0ed0: 20 67 2e 6a 61 76 61 73 63 72 69 70 74 48 79 70 g.javascriptHyp
0ee0: 65 72 6c 69 6e 6b 20 64 65 66 61 75 6c 74 73 0a erlink defaults.
0ef0: 2a 2a 20 74 6f 20 30 20 61 6e 64 20 6f 6e 6c 79 ** to 0 and only
0f00: 20 63 68 61 6e 67 65 73 20 74 6f 20 6f 6e 65 20 changes to one
0f10: 69 66 20 74 68 65 20 75 73 65 72 20 6c 61 63 6b if the user lack
0f20: 73 20 74 68 65 20 48 79 70 65 72 6c 69 6e 6b 20 s the Hyperlink
0f30: 28 68 29 20 70 72 6f 70 65 72 74 79 0a 2a 2a 20 (h) property.**
0f40: 61 6e 64 20 74 68 65 20 22 61 75 74 6f 2d 68 79 and the "auto-hy
0f50: 70 65 72 6c 69 6e 6b 22 20 73 65 74 74 69 6e 67 perlink" setting
0f60: 20 69 73 20 65 6e 61 62 6c 65 64 2e 0a 2a 2a 0a is enabled..**.
0f70: 2a 2a 20 46 69 6c 6c 69 6e 67 20 69 6e 20 74 68 ** Filling in th
0f80: 65 20 68 72 65 66 3d 22 55 52 4c 22 20 75 73 69 e href="URL" usi
0f90: 6e 67 20 6a 61 76 61 73 63 72 69 70 74 20 69 73 ng javascript is
0fa0: 20 61 20 64 65 66 65 6e 73 65 20 61 67 61 69 6e a defense again
0fb0: 73 74 20 62 6f 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 st bots..**.** T
0fc0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 69 73 20 he name of this
0fd0: 72 6f 75 74 69 6e 65 20 69 73 20 64 65 6c 69 62 routine is delib
0fe0: 65 72 61 74 65 6c 79 20 6b 65 70 74 20 73 68 6f erately kept sho
0ff0: 72 74 20 73 6f 20 74 68 61 74 20 63 61 6e 20 62 rt so that can b
1000: 65 0a 2a 2a 20 65 61 73 69 6c 79 20 75 73 65 64 e.** easily used
1010: 20 77 69 74 68 69 6e 20 40 2d 6c 69 6e 65 73 2e within @-lines.
1020: 20 20 45 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a Example:.**.**
1030: 20 20 20 20 20 20 40 20 25 7a 28 68 72 65 66 28 @ %z(href(
1040: 22 25 52 2f 61 72 74 69 66 61 63 74 2f 25 73 22 "%R/artifact/%s"
1050: 2c 7a 55 75 69 64 29 29 25 68 28 7a 46 4e 29 3c ,zUuid))%h(zFN)<
1060: 2f 61 3e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 25 /a>.**.** Note %
1070: 7a 20 66 6f 72 6d 61 74 2e 20 20 54 68 65 20 73 z format. The s
1080: 74 72 69 6e 67 20 72 65 74 75 72 6e 65 64 20 62 tring returned b
1090: 79 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 y this function
10a0: 69 73 20 61 6c 77 61 79 73 0a 2a 2a 20 6f 62 74 is always.** obt
10b0: 61 69 6e 65 64 20 66 72 6f 6d 20 66 6f 73 73 69 ained from fossi
10c0: 6c 5f 6d 61 6c 6c 6f 63 28 29 20 73 6f 20 72 65 l_malloc() so re
10d0: 6e 64 65 72 69 6e 67 20 69 74 20 77 69 74 68 20 ndering it with
10e0: 25 7a 20 77 69 6c 6c 20 72 65 63 6c 61 69 6d 0a %z will reclaim.
10f0: 2a 2a 20 74 68 61 74 20 6d 65 6d 6f 72 79 20 73 ** that memory s
1100: 70 61 63 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 pace..**.** Ther
1110: 65 20 61 72 65 20 74 68 72 65 65 20 76 65 72 73 e are three vers
1120: 69 6f 6e 73 20 6f 66 20 74 68 69 73 20 72 6f 75 ions of this rou
1130: 74 69 6e 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 28 tine:.**.** (
1140: 31 29 20 20 20 68 72 65 66 28 29 20 64 6f 65 73 1) href() does
1150: 20 61 20 70 6c 61 69 6e 20 68 79 70 65 72 6c 69 a plain hyperli
1160: 6e 6b 0a 2a 2a 20 20 20 20 28 32 29 20 20 20 78 nk.** (2) x
1170: 68 72 65 66 28 29 20 61 64 64 73 20 65 78 74 72 href() adds extr
1180: 61 20 61 74 74 72 69 62 75 74 65 20 74 65 78 74 a attribute text
1190: 0a 2a 2a 20 20 20 20 28 33 29 20 20 20 63 68 72 .** (3) chr
11a0: 65 66 28 29 20 61 64 64 73 20 61 20 63 6c 61 73 ef() adds a clas
11b0: 73 20 6e 61 6d 65 0a 2a 2a 0a 2a 2a 20 67 2e 70 s name.**.** g.p
11c0: 65 72 6d 2e 48 79 70 65 72 6c 69 6e 6b 20 69 73 erm.Hyperlink is
11d0: 20 74 72 75 65 20 69 66 20 74 68 65 20 75 73 65 true if the use
11e0: 72 20 68 61 73 20 74 68 65 20 48 79 70 65 72 6c r has the Hyperl
11f0: 69 6e 6b 20 28 68 29 20 70 72 6f 70 65 72 74 79 ink (h) property
1200: 2e 0a 2a 2a 20 4d 6f 73 74 20 6c 6f 67 67 65 64 ..** Most logged
1210: 20 69 6e 20 75 73 65 72 73 20 73 68 6f 75 6c 64 in users should
1220: 20 68 61 76 65 20 74 68 69 73 20 70 72 6f 70 65 have this prope
1230: 72 74 79 2c 20 73 69 6e 63 65 20 77 65 20 63 61 rty, since we ca
1240: 6e 20 61 73 73 75 6d 65 0a 2a 2a 20 74 68 61 74 n assume.** that
1250: 20 61 20 6c 6f 67 67 65 64 20 69 6e 20 75 73 65 a logged in use
1260: 72 20 69 73 20 6e 6f 74 20 61 20 62 6f 74 2e 20 r is not a bot.
1270: 20 4f 6e 6c 79 20 22 6e 6f 62 6f 64 79 22 20 6c Only "nobody" l
1280: 61 63 6b 73 20 67 2e 70 65 72 6d 2e 48 79 70 65 acks g.perm.Hype
1290: 72 6c 69 6e 6b 2c 0a 2a 2a 20 74 79 70 69 63 61 rlink,.** typica
12a0: 6c 6c 79 2e 0a 2a 2f 0a 63 68 61 72 20 2a 78 68 lly..*/.char *xh
12b0: 72 65 66 28 63 6f 6e 73 74 20 63 68 61 72 20 2a ref(const char *
12c0: 7a 45 78 74 72 61 2c 20 63 6f 6e 73 74 20 63 68 zExtra, const ch
12d0: 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e ar *zFormat, ...
12e0: 29 7b 0a 20 20 63 68 61 72 20 2a 7a 55 72 6c 3b ){. char *zUrl;
12f0: 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 . va_list ap;.
1300: 20 69 66 28 20 21 67 2e 70 65 72 6d 2e 48 79 70 if( !g.perm.Hyp
1310: 65 72 6c 69 6e 6b 20 29 20 72 65 74 75 72 6e 20 erlink ) return
1320: 66 6f 73 73 69 6c 5f 73 74 72 64 75 70 28 22 22 fossil_strdup(""
1330: 29 3b 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70 );. va_start(ap
1340: 2c 20 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 7a 55 , zFormat);. zU
1350: 72 6c 20 3d 20 76 6d 70 72 69 6e 74 66 28 7a 46 rl = vmprintf(zF
1360: 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 76 61 ormat, ap);. va
1370: 5f 65 6e 64 28 61 70 29 3b 0a 20 20 69 66 28 20 _end(ap);. if(
1380: 67 2e 70 65 72 6d 2e 48 79 70 65 72 6c 69 6e 6b g.perm.Hyperlink
1390: 20 26 26 20 21 67 2e 6a 61 76 61 73 63 72 69 70 && !g.javascrip
13a0: 74 48 79 70 65 72 6c 69 6e 6b 20 29 7b 0a 20 20 tHyperlink ){.
13b0: 20 20 63 68 61 72 20 2a 7a 48 55 72 6c 3b 0a 20 char *zHUrl;.
13c0: 20 20 20 69 66 28 20 7a 45 78 74 72 61 20 29 7b if( zExtra ){
13d0: 0a 20 20 20 20 20 20 7a 48 55 72 6c 20 3d 20 6d . zHUrl = m
13e0: 70 72 69 6e 74 66 28 22 3c 61 20 25 73 20 68 72 printf("<a %s hr
13f0: 65 66 3d 5c 22 25 68 5c 22 3e 22 2c 20 7a 45 78 ef=\"%h\">", zEx
1400: 74 72 61 2c 20 7a 55 72 6c 29 3b 0a 20 20 20 20 tra, zUrl);.
1410: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 48 55 }else{. zHU
1420: 72 6c 20 3d 20 6d 70 72 69 6e 74 66 28 22 3c 61 rl = mprintf("<a
1430: 20 68 72 65 66 3d 5c 22 25 68 5c 22 3e 22 2c 20 href=\"%h\">",
1440: 7a 55 72 6c 29 3b 0a 20 20 20 20 7d 0a 20 20 20 zUrl);. }.
1450: 20 66 6f 73 73 69 6c 5f 66 72 65 65 28 7a 55 72 fossil_free(zUr
1460: 6c 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 7a l);. return z
1470: 48 55 72 6c 3b 0a 20 20 7d 0a 20 20 6e 65 65 64 HUrl;. }. need
1480: 48 72 65 66 4a 73 20 3d 20 31 3b 0a 20 20 69 66 HrefJs = 1;. if
1490: 28 20 7a 45 78 74 72 61 3d 3d 30 20 29 7b 0a 20 ( zExtra==0 ){.
14a0: 20 20 20 72 65 74 75 72 6e 20 6d 70 72 69 6e 74 return mprint
14b0: 66 28 22 3c 61 20 64 61 74 61 2d 68 72 65 66 3d f("<a data-href=
14c0: 27 25 7a 27 20 68 72 65 66 3d 27 25 52 2f 68 6f '%z' href='%R/ho
14d0: 6e 65 79 70 6f 74 27 3e 22 2c 20 7a 55 72 6c 29 neypot'>", zUrl)
14e0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 ;. }else{. r
14f0: 65 74 75 72 6e 20 6d 70 72 69 6e 74 66 28 22 3c eturn mprintf("<
1500: 61 20 25 73 20 64 61 74 61 2d 68 72 65 66 3d 27 a %s data-href='
1510: 25 7a 27 20 68 72 65 66 3d 27 25 52 2f 68 6f 6e %z' href='%R/hon
1520: 65 79 70 6f 74 27 3e 22 2c 0a 20 20 20 20 20 20 eypot'>",.
1530: 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 45 78 zEx
1540: 74 72 61 2c 20 7a 55 72 6c 29 3b 0a 20 20 7d 0a tra, zUrl);. }.
1550: 7d 0a 63 68 61 72 20 2a 63 68 72 65 66 28 63 6f }.char *chref(co
1560: 6e 73 74 20 63 68 61 72 20 2a 7a 45 78 74 72 61 nst char *zExtra
1570: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 , const char *zF
1580: 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20 20 63 ormat, ...){. c
1590: 68 61 72 20 2a 7a 55 72 6c 3b 0a 20 20 76 61 5f har *zUrl;. va_
15a0: 6c 69 73 74 20 61 70 3b 0a 20 20 69 66 28 20 21 list ap;. if( !
15b0: 67 2e 70 65 72 6d 2e 48 79 70 65 72 6c 69 6e 6b g.perm.Hyperlink
15c0: 20 29 20 72 65 74 75 72 6e 20 66 6f 73 73 69 6c ) return fossil
15d0: 5f 73 74 72 64 75 70 28 22 22 29 3b 0a 20 20 76 _strdup("");. v
15e0: 61 5f 73 74 61 72 74 28 61 70 2c 20 7a 46 6f 72 a_start(ap, zFor
15f0: 6d 61 74 29 3b 0a 20 20 7a 55 72 6c 20 3d 20 76 mat);. zUrl = v
1600: 6d 70 72 69 6e 74 66 28 7a 46 6f 72 6d 61 74 2c mprintf(zFormat,
1610: 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e 64 28 61 ap);. va_end(a
1620: 70 29 3b 0a 20 20 69 66 28 20 67 2e 70 65 72 6d p);. if( g.perm
1630: 2e 48 79 70 65 72 6c 69 6e 6b 20 26 26 20 21 67 .Hyperlink && !g
1640: 2e 6a 61 76 61 73 63 72 69 70 74 48 79 70 65 72 .javascriptHyper
1650: 6c 69 6e 6b 20 29 7b 0a 20 20 20 20 63 68 61 72 link ){. char
1660: 20 2a 7a 48 55 72 6c 20 3d 20 6d 70 72 69 6e 74 *zHUrl = mprint
1670: 66 28 22 3c 61 20 63 6c 61 73 73 3d 5c 22 25 73 f("<a class=\"%s
1680: 5c 22 20 68 72 65 66 3d 5c 22 25 68 5c 22 3e 22 \" href=\"%h\">"
1690: 2c 20 7a 45 78 74 72 61 2c 20 7a 55 72 6c 29 3b , zExtra, zUrl);
16a0: 0a 20 20 20 20 66 6f 73 73 69 6c 5f 66 72 65 65 . fossil_free
16b0: 28 7a 55 72 6c 29 3b 0a 20 20 20 20 72 65 74 75 (zUrl);. retu
16c0: 72 6e 20 7a 48 55 72 6c 3b 0a 20 20 7d 0a 20 20 rn zHUrl;. }.
16d0: 6e 65 65 64 48 72 65 66 4a 73 20 3d 20 31 3b 0a needHrefJs = 1;.
16e0: 20 20 72 65 74 75 72 6e 20 6d 70 72 69 6e 74 66 return mprintf
16f0: 28 22 3c 61 20 63 6c 61 73 73 3d 27 25 73 27 20 ("<a class='%s'
1700: 64 61 74 61 2d 68 72 65 66 3d 27 25 7a 27 20 68 data-href='%z' h
1710: 72 65 66 3d 27 25 52 2f 68 6f 6e 65 79 70 6f 74 ref='%R/honeypot
1720: 27 3e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 '>",.
1730: 20 20 20 20 20 20 7a 45 78 74 72 61 2c 20 7a 55 zExtra, zU
1740: 72 6c 29 3b 0a 7d 0a 63 68 61 72 20 2a 68 72 65 rl);.}.char *hre
1750: 66 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 f(const char *zF
1760: 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20 20 63 ormat, ...){. c
1770: 68 61 72 20 2a 7a 55 72 6c 3b 0a 20 20 76 61 5f har *zUrl;. va_
1780: 6c 69 73 74 20 61 70 3b 0a 20 20 69 66 28 20 21 list ap;. if( !
1790: 67 2e 70 65 72 6d 2e 48 79 70 65 72 6c 69 6e 6b g.perm.Hyperlink
17a0: 20 29 20 72 65 74 75 72 6e 20 66 6f 73 73 69 6c ) return fossil
17b0: 5f 73 74 72 64 75 70 28 22 22 29 3b 0a 20 20 76 _strdup("");. v
17c0: 61 5f 73 74 61 72 74 28 61 70 2c 20 7a 46 6f 72 a_start(ap, zFor
17d0: 6d 61 74 29 3b 0a 20 20 7a 55 72 6c 20 3d 20 76 mat);. zUrl = v
17e0: 6d 70 72 69 6e 74 66 28 7a 46 6f 72 6d 61 74 2c mprintf(zFormat,
17f0: 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e 64 28 61 ap);. va_end(a
1800: 70 29 3b 0a 20 20 69 66 28 20 67 2e 70 65 72 6d p);. if( g.perm
1810: 2e 48 79 70 65 72 6c 69 6e 6b 20 26 26 20 21 67 .Hyperlink && !g
1820: 2e 6a 61 76 61 73 63 72 69 70 74 48 79 70 65 72 .javascriptHyper
1830: 6c 69 6e 6b 20 29 7b 0a 20 20 20 20 63 68 61 72 link ){. char
1840: 20 2a 7a 48 55 72 6c 20 3d 20 6d 70 72 69 6e 74 *zHUrl = mprint
1850: 66 28 22 3c 61 20 68 72 65 66 3d 5c 22 25 68 5c f("<a href=\"%h\
1860: 22 3e 22 2c 20 7a 55 72 6c 29 3b 0a 20 20 20 20 ">", zUrl);.
1870: 66 6f 73 73 69 6c 5f 66 72 65 65 28 7a 55 72 6c fossil_free(zUrl
1880: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 7a 48 );. return zH
1890: 55 72 6c 3b 0a 20 20 7d 0a 20 20 6e 65 65 64 48 Url;. }. needH
18a0: 72 65 66 4a 73 20 3d 20 31 3b 0a 20 20 72 65 74 refJs = 1;. ret
18b0: 75 72 6e 20 6d 70 72 69 6e 74 66 28 22 3c 61 20 urn mprintf("<a
18c0: 64 61 74 61 2d 68 72 65 66 3d 27 25 73 27 20 68 data-href='%s' h
18d0: 72 65 66 3d 27 25 52 2f 68 6f 6e 65 79 70 6f 74 ref='%R/honeypot
18e0: 27 3e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 '>",.
18f0: 20 20 20 20 20 20 20 7a 55 72 6c 29 3b 0a 7d 0a zUrl);.}.
1900: 0a 2f 2a 0a 2a 2a 20 47 65 6e 65 72 61 74 65 20 ./*.** Generate
1910: 3c 66 6f 72 6d 20 6d 65 74 68 6f 64 3d 22 70 6f <form method="po
1920: 73 74 22 20 61 63 74 69 6f 6e 3d 41 52 47 3e 2e st" action=ARG>.
1930: 20 20 54 68 65 20 41 52 47 20 76 61 6c 75 65 20 The ARG value
1940: 69 73 20 69 6e 73 65 72 74 65 64 0a 2a 2a 20 62 is inserted.** b
1950: 79 20 6a 61 76 61 73 63 72 69 70 74 2e 0a 2a 2f y javascript..*/
1960: 0a 76 6f 69 64 20 66 6f 72 6d 5f 62 65 67 69 6e .void form_begin
1970: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4f 74 (const char *zOt
1980: 68 65 72 41 72 67 73 2c 20 63 6f 6e 73 74 20 63 herArgs, const c
1990: 68 61 72 20 2a 7a 41 63 74 69 6f 6e 2c 20 2e 2e har *zAction, ..
19a0: 2e 29 7b 0a 20 20 63 68 61 72 20 2a 7a 4c 69 6e .){. char *zLin
19b0: 6b 3b 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b k;. va_list ap;
19c0: 0a 20 20 69 66 28 20 7a 4f 74 68 65 72 41 72 67 . if( zOtherArg
19d0: 73 3d 3d 30 20 29 20 7a 4f 74 68 65 72 41 72 67 s==0 ) zOtherArg
19e0: 73 20 3d 20 22 22 3b 0a 20 20 76 61 5f 73 74 61 s = "";. va_sta
19f0: 72 74 28 61 70 2c 20 7a 41 63 74 69 6f 6e 29 3b rt(ap, zAction);
1a00: 0a 20 20 7a 4c 69 6e 6b 20 3d 20 76 6d 70 72 69 . zLink = vmpri
1a10: 6e 74 66 28 7a 41 63 74 69 6f 6e 2c 20 61 70 29 ntf(zAction, ap)
1a20: 3b 0a 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a ;. va_end(ap);.
1a30: 20 20 69 66 28 20 67 2e 70 65 72 6d 2e 48 79 70 if( g.perm.Hyp
1a40: 65 72 6c 69 6e 6b 20 26 26 20 21 67 2e 6a 61 76 erlink && !g.jav
1a50: 61 73 63 72 69 70 74 48 79 70 65 72 6c 69 6e 6b ascriptHyperlink
1a60: 20 29 7b 0a 20 20 20 20 40 20 3c 66 6f 72 6d 20 ){. @ <form
1a70: 6d 65 74 68 6f 64 3d 22 50 4f 53 54 22 20 61 63 method="POST" ac
1a80: 74 69 6f 6e 3d 22 25 7a 28 7a 4c 69 6e 6b 29 22 tion="%z(zLink)"
1a90: 20 25 73 28 7a 4f 74 68 65 72 41 72 67 73 29 3e %s(zOtherArgs)>
1aa0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 65 . }else{. ne
1ab0: 65 64 48 72 65 66 4a 73 20 3d 20 31 3b 0a 20 20 edHrefJs = 1;.
1ac0: 20 20 40 20 3c 66 6f 72 6d 20 6d 65 74 68 6f 64 @ <form method
1ad0: 3d 22 50 4f 53 54 22 20 64 61 74 61 2d 61 63 74 ="POST" data-act
1ae0: 69 6f 6e 3d 27 25 73 28 7a 4c 69 6e 6b 29 27 20 ion='%s(zLink)'
1af0: 61 63 74 69 6f 6e 3d 27 25 52 2f 6c 6f 67 69 6e action='%R/login
1b00: 27 20 5c 0a 20 20 20 20 40 20 25 73 28 7a 4f 74 ' \. @ %s(zOt
1b10: 68 65 72 41 72 67 73 29 3e 0a 20 20 7d 0a 7d 0a herArgs)>. }.}.
1b20: 0a 2f 2a 0a 2a 2a 20 41 64 64 20 61 20 6e 65 77 ./*.** Add a new
1b30: 20 65 6c 65 6d 65 6e 74 20 74 6f 20 74 68 65 20 element to the
1b40: 73 75 62 6d 65 6e 75 0a 2a 2f 0a 76 6f 69 64 20 submenu.*/.void
1b50: 73 74 79 6c 65 5f 73 75 62 6d 65 6e 75 5f 65 6c style_submenu_el
1b60: 65 6d 65 6e 74 28 0a 20 20 63 6f 6e 73 74 20 63 ement(. const c
1b70: 68 61 72 20 2a 7a 4c 61 62 65 6c 2c 0a 20 20 63 har *zLabel,. c
1b80: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c 69 6e 6b onst char *zLink
1b90: 2c 0a 20 20 2e 2e 2e 0a 29 7b 0a 20 20 76 61 5f ,. ....){. va_
1ba0: 6c 69 73 74 20 61 70 3b 0a 20 20 61 73 73 65 72 list ap;. asser
1bb0: 74 28 20 6e 53 75 62 6d 65 6e 75 20 3c 20 63 6f t( nSubmenu < co
1bc0: 75 6e 74 28 61 53 75 62 6d 65 6e 75 29 20 29 3b unt(aSubmenu) );
1bd0: 0a 20 20 61 53 75 62 6d 65 6e 75 5b 6e 53 75 62 . aSubmenu[nSub
1be0: 6d 65 6e 75 5d 2e 7a 4c 61 62 65 6c 20 3d 20 7a menu].zLabel = z
1bf0: 4c 61 62 65 6c 3b 0a 20 20 76 61 5f 73 74 61 72 Label;. va_star
1c00: 74 28 61 70 2c 20 7a 4c 69 6e 6b 29 3b 0a 20 20 t(ap, zLink);.
1c10: 61 53 75 62 6d 65 6e 75 5b 6e 53 75 62 6d 65 6e aSubmenu[nSubmen
1c20: 75 5d 2e 7a 4c 69 6e 6b 20 3d 20 76 6d 70 72 69 u].zLink = vmpri
1c30: 6e 74 66 28 7a 4c 69 6e 6b 2c 20 61 70 29 3b 0a ntf(zLink, ap);.
1c40: 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20 20 va_end(ap);.
1c50: 6e 53 75 62 6d 65 6e 75 2b 2b 3b 0a 7d 0a 76 6f nSubmenu++;.}.vo
1c60: 69 64 20 73 74 79 6c 65 5f 73 75 62 6d 65 6e 75 id style_submenu
1c70: 5f 65 6e 74 72 79 28 0a 20 20 63 6f 6e 73 74 20 _entry(. const
1c80: 63 68 61 72 20 2a 7a 4e 61 6d 65 2c 20 20 20 20 char *zName,
1c90: 20 20 20 2f 2a 20 51 75 65 72 79 20 70 61 72 61 /* Query para
1ca0: 6d 65 74 65 72 20 6e 61 6d 65 20 2a 2f 0a 20 20 meter name */.
1cb0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c 61 62 const char *zLab
1cc0: 65 6c 2c 20 20 20 20 20 20 2f 2a 20 4c 61 62 65 el, /* Labe
1cd0: 6c 20 62 65 66 6f 72 65 20 74 68 65 20 65 6e 74 l before the ent
1ce0: 72 79 20 62 6f 78 20 2a 2f 0a 20 20 69 6e 74 20 ry box */. int
1cf0: 69 53 69 7a 65 2c 20 20 20 20 20 20 20 20 20 20 iSize,
1d00: 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 /* Size of
1d10: 74 68 65 20 65 6e 74 72 79 20 62 6f 78 20 2a 2f the entry box */
1d20: 0a 20 20 69 6e 74 20 65 56 69 73 69 62 6c 65 20 . int eVisible
1d30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 /* V
1d40: 69 73 69 62 6c 65 20 6f 72 20 64 69 73 61 62 6c isible or disabl
1d50: 65 64 20 2a 2f 0a 29 7b 0a 20 20 61 73 73 65 72 ed */.){. asser
1d60: 74 28 20 6e 53 75 62 6d 65 6e 75 43 74 72 6c 20 t( nSubmenuCtrl
1d70: 3c 20 63 6f 75 6e 74 28 61 53 75 62 6d 65 6e 75 < count(aSubmenu
1d80: 43 74 72 6c 29 20 29 3b 0a 20 20 61 53 75 62 6d Ctrl) );. aSubm
1d90: 65 6e 75 43 74 72 6c 5b 6e 53 75 62 6d 65 6e 75 enuCtrl[nSubmenu
1da0: 43 74 72 6c 5d 2e 7a 4e 61 6d 65 20 3d 20 7a 4e Ctrl].zName = zN
1db0: 61 6d 65 3b 0a 20 20 61 53 75 62 6d 65 6e 75 43 ame;. aSubmenuC
1dc0: 74 72 6c 5b 6e 53 75 62 6d 65 6e 75 43 74 72 6c trl[nSubmenuCtrl
1dd0: 5d 2e 7a 4c 61 62 65 6c 20 3d 20 7a 4c 61 62 65 ].zLabel = zLabe
1de0: 6c 3b 0a 20 20 61 53 75 62 6d 65 6e 75 43 74 72 l;. aSubmenuCtr
1df0: 6c 5b 6e 53 75 62 6d 65 6e 75 43 74 72 6c 5d 2e l[nSubmenuCtrl].
1e00: 69 53 69 7a 65 20 3d 20 69 53 69 7a 65 3b 0a 20 iSize = iSize;.
1e10: 20 61 53 75 62 6d 65 6e 75 43 74 72 6c 5b 6e 53 aSubmenuCtrl[nS
1e20: 75 62 6d 65 6e 75 43 74 72 6c 5d 2e 65 56 69 73 ubmenuCtrl].eVis
1e30: 69 62 6c 65 20 3d 20 65 56 69 73 69 62 6c 65 3b ible = eVisible;
1e40: 0a 20 20 61 53 75 62 6d 65 6e 75 43 74 72 6c 5b . aSubmenuCtrl[
1e50: 6e 53 75 62 6d 65 6e 75 43 74 72 6c 5d 2e 65 54 nSubmenuCtrl].eT
1e60: 79 70 65 20 3d 20 46 46 5f 45 4e 54 52 59 3b 0a ype = FF_ENTRY;.
1e70: 20 20 6e 53 75 62 6d 65 6e 75 43 74 72 6c 2b 2b nSubmenuCtrl++
1e80: 3b 0a 7d 0a 76 6f 69 64 20 73 74 79 6c 65 5f 73 ;.}.void style_s
1e90: 75 62 6d 65 6e 75 5f 63 68 65 63 6b 62 6f 78 28 ubmenu_checkbox(
1ea0: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a . const char *z
1eb0: 4e 61 6d 65 2c 20 20 20 20 20 20 20 2f 2a 20 51 Name, /* Q
1ec0: 75 65 72 79 20 70 61 72 61 6d 65 74 65 72 20 6e uery parameter n
1ed0: 61 6d 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 ame */. const c
1ee0: 68 61 72 20 2a 7a 4c 61 62 65 6c 2c 20 20 20 20 har *zLabel,
1ef0: 20 20 2f 2a 20 4c 61 62 65 6c 20 74 6f 20 64 69 /* Label to di
1f00: 73 70 6c 61 79 20 61 66 74 65 72 20 74 68 65 20 splay after the
1f10: 63 68 65 63 6b 62 6f 78 20 2a 2f 0a 20 20 69 6e checkbox */. in
1f20: 74 20 65 56 69 73 69 62 6c 65 2c 20 20 20 20 20 t eVisible,
1f30: 20 20 20 20 20 20 20 2f 2a 20 56 69 73 69 62 6c /* Visibl
1f40: 65 20 6f 72 20 64 69 73 61 62 6c 65 64 20 2a 2f e or disabled */
1f50: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a . const char *z
1f60: 4a 53 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f JS /* O
1f70: 70 74 69 6f 6e 61 6c 20 6a 61 76 61 73 63 72 69 ptional javascri
1f80: 70 74 20 74 6f 20 72 75 6e 20 6f 6e 20 74 6f 67 pt to run on tog
1f90: 67 6c 65 20 2a 2f 0a 29 7b 0a 20 20 61 73 73 65 gle */.){. asse
1fa0: 72 74 28 20 6e 53 75 62 6d 65 6e 75 43 74 72 6c rt( nSubmenuCtrl
1fb0: 20 3c 20 63 6f 75 6e 74 28 61 53 75 62 6d 65 6e < count(aSubmen
1fc0: 75 43 74 72 6c 29 20 29 3b 0a 20 20 61 53 75 62 uCtrl) );. aSub
1fd0: 6d 65 6e 75 43 74 72 6c 5b 6e 53 75 62 6d 65 6e menuCtrl[nSubmen
1fe0: 75 43 74 72 6c 5d 2e 7a 4e 61 6d 65 20 3d 20 7a uCtrl].zName = z
1ff0: 4e 61 6d 65 3b 0a 20 20 61 53 75 62 6d 65 6e 75 Name;. aSubmenu
2000: 43 74 72 6c 5b 6e 53 75 62 6d 65 6e 75 43 74 72 Ctrl[nSubmenuCtr
2010: 6c 5d 2e 7a 4c 61 62 65 6c 20 3d 20 7a 4c 61 62 l].zLabel = zLab
2020: 65 6c 3b 0a 20 20 61 53 75 62 6d 65 6e 75 43 74 el;. aSubmenuCt
2030: 72 6c 5b 6e 53 75 62 6d 65 6e 75 43 74 72 6c 5d rl[nSubmenuCtrl]
2040: 2e 65 56 69 73 69 62 6c 65 20 3d 20 65 56 69 73 .eVisible = eVis
2050: 69 62 6c 65 3b 0a 20 20 61 53 75 62 6d 65 6e 75 ible;. aSubmenu
2060: 43 74 72 6c 5b 6e 53 75 62 6d 65 6e 75 43 74 72 Ctrl[nSubmenuCtr
2070: 6c 5d 2e 7a 4a 53 20 3d 20 7a 4a 53 3b 0a 20 20 l].zJS = zJS;.
2080: 61 53 75 62 6d 65 6e 75 43 74 72 6c 5b 6e 53 75 aSubmenuCtrl[nSu
2090: 62 6d 65 6e 75 43 74 72 6c 5d 2e 65 54 79 70 65 bmenuCtrl].eType
20a0: 20 3d 20 46 46 5f 43 48 45 43 4b 42 4f 58 3b 0a = FF_CHECKBOX;.
20b0: 20 20 6e 53 75 62 6d 65 6e 75 43 74 72 6c 2b 2b nSubmenuCtrl++
20c0: 3b 0a 7d 0a 76 6f 69 64 20 73 74 79 6c 65 5f 73 ;.}.void style_s
20d0: 75 62 6d 65 6e 75 5f 62 69 6e 61 72 79 28 0a 20 ubmenu_binary(.
20e0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 const char *zNa
20f0: 6d 65 2c 20 20 20 20 20 20 20 2f 2a 20 51 75 65 me, /* Que
2100: 72 79 20 70 61 72 61 6d 65 74 65 72 20 6e 61 6d ry parameter nam
2110: 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 e */. const cha
2120: 72 20 2a 7a 54 72 75 65 2c 20 20 20 20 20 20 20 r *zTrue,
2130: 2f 2a 20 4c 61 62 65 6c 20 74 6f 20 73 68 6f 77 /* Label to show
2140: 20 77 68 65 6e 20 70 61 72 61 6d 65 74 65 72 20 when parameter
2150: 69 73 20 74 72 75 65 20 2a 2f 0a 20 20 63 6f 6e is true */. con
2160: 73 74 20 63 68 61 72 20 2a 7a 46 61 6c 73 65 2c st char *zFalse,
2170: 20 20 20 20 20 20 2f 2a 20 4c 61 62 65 6c 20 74 /* Label t
2180: 6f 20 73 68 6f 77 20 77 68 65 6e 20 74 68 65 20 o show when the
2190: 70 61 72 61 6d 65 74 65 72 20 69 73 20 66 61 6c parameter is fal
21a0: 73 65 20 2a 2f 0a 20 20 69 6e 74 20 65 56 69 73 se */. int eVis
21b0: 69 62 6c 65 20 20 20 20 20 20 20 20 20 20 20 20 ible
21c0: 20 2f 2a 20 56 69 73 69 62 6c 65 20 6f 72 20 64 /* Visible or d
21d0: 69 73 61 62 6c 65 64 20 2a 2f 0a 29 7b 0a 20 20 isabled */.){.
21e0: 61 73 73 65 72 74 28 20 6e 53 75 62 6d 65 6e 75 assert( nSubmenu
21f0: 43 74 72 6c 20 3c 20 63 6f 75 6e 74 28 61 53 75 Ctrl < count(aSu
2200: 62 6d 65 6e 75 43 74 72 6c 29 20 29 3b 0a 20 20 bmenuCtrl) );.
2210: 61 53 75 62 6d 65 6e 75 43 74 72 6c 5b 6e 53 75 aSubmenuCtrl[nSu
2220: 62 6d 65 6e 75 43 74 72 6c 5d 2e 7a 4e 61 6d 65 bmenuCtrl].zName
2230: 20 3d 20 7a 4e 61 6d 65 3b 0a 20 20 61 53 75 62 = zName;. aSub
2240: 6d 65 6e 75 43 74 72 6c 5b 6e 53 75 62 6d 65 6e menuCtrl[nSubmen
2250: 75 43 74 72 6c 5d 2e 7a 4c 61 62 65 6c 20 3d 20 uCtrl].zLabel =
2260: 7a 54 72 75 65 3b 0a 20 20 61 53 75 62 6d 65 6e zTrue;. aSubmen
2270: 75 43 74 72 6c 5b 6e 53 75 62 6d 65 6e 75 43 74 uCtrl[nSubmenuCt
2280: 72 6c 5d 2e 7a 46 61 6c 73 65 20 3d 20 7a 46 61 rl].zFalse = zFa
2290: 6c 73 65 3b 0a 20 20 61 53 75 62 6d 65 6e 75 43 lse;. aSubmenuC
22a0: 74 72 6c 5b 6e 53 75 62 6d 65 6e 75 43 74 72 6c trl[nSubmenuCtrl
22b0: 5d 2e 65 56 69 73 69 62 6c 65 20 3d 20 65 56 69 ].eVisible = eVi
22c0: 73 69 62 6c 65 3b 0a 20 20 61 53 75 62 6d 65 6e sible;. aSubmen
22d0: 75 43 74 72 6c 5b 6e 53 75 62 6d 65 6e 75 43 74 uCtrl[nSubmenuCt
22e0: 72 6c 5d 2e 65 54 79 70 65 20 3d 20 46 46 5f 42 rl].eType = FF_B
22f0: 49 4e 41 52 59 3b 0a 20 20 6e 53 75 62 6d 65 6e INARY;. nSubmen
2300: 75 43 74 72 6c 2b 2b 3b 0a 7d 0a 76 6f 69 64 20 uCtrl++;.}.void
2310: 73 74 79 6c 65 5f 73 75 62 6d 65 6e 75 5f 6d 75 style_submenu_mu
2320: 6c 74 69 63 68 6f 69 63 65 28 0a 20 20 63 6f 6e ltichoice(. con
2330: 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 2c 20 st char *zName,
2340: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 51 75 65 /* Que
2350: 72 79 20 70 61 72 61 6d 65 74 65 72 20 6e 61 6d ry parameter nam
2360: 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 6f 69 e */. int nChoi
2370: 63 65 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 ce,
2380: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 /* Number of
2390: 20 6f 70 74 69 6f 6e 73 20 2a 2f 0a 20 20 63 6f options */. co
23a0: 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74 20 nst char *const
23b0: 2a 61 7a 43 68 6f 69 63 65 2c 20 2f 2a 20 76 61 *azChoice, /* va
23c0: 6c 75 65 2f 64 69 73 70 6c 61 79 20 70 61 69 72 lue/display pair
23d0: 73 2e 20 20 32 2a 6e 43 68 6f 69 63 65 20 65 6e s. 2*nChoice en
23e0: 74 72 69 65 73 20 2a 2f 0a 20 20 69 6e 74 20 65 tries */. int e
23f0: 56 69 73 69 62 6c 65 20 20 20 20 20 20 20 20 20 Visible
2400: 20 20 20 20 20 20 20 20 2f 2a 20 56 69 73 69 62 /* Visib
2410: 6c 65 20 6f 72 20 64 69 73 61 62 6c 65 64 20 2a le or disabled *
2420: 2f 0a 29 7b 0a 20 20 61 73 73 65 72 74 28 20 6e /.){. assert( n
2430: 53 75 62 6d 65 6e 75 43 74 72 6c 20 3c 20 63 6f SubmenuCtrl < co
2440: 75 6e 74 28 61 53 75 62 6d 65 6e 75 43 74 72 6c unt(aSubmenuCtrl
2450: 29 20 29 3b 0a 20 20 61 53 75 62 6d 65 6e 75 43 ) );. aSubmenuC
2460: 74 72 6c 5b 6e 53 75 62 6d 65 6e 75 43 74 72 6c trl[nSubmenuCtrl
2470: 5d 2e 7a 4e 61 6d 65 20 3d 20 7a 4e 61 6d 65 3b ].zName = zName;
2480: 0a 20 20 61 53 75 62 6d 65 6e 75 43 74 72 6c 5b . aSubmenuCtrl[
2490: 6e 53 75 62 6d 65 6e 75 43 74 72 6c 5d 2e 69 53 nSubmenuCtrl].iS
24a0: 69 7a 65 20 3d 20 6e 43 68 6f 69 63 65 3b 0a 20 ize = nChoice;.
24b0: 20 61 53 75 62 6d 65 6e 75 43 74 72 6c 5b 6e 53 aSubmenuCtrl[nS
24c0: 75 62 6d 65 6e 75 43 74 72 6c 5d 2e 61 7a 43 68 ubmenuCtrl].azCh
24d0: 6f 69 63 65 20 3d 20 61 7a 43 68 6f 69 63 65 3b oice = azChoice;
24e0: 0a 20 20 61 53 75 62 6d 65 6e 75 43 74 72 6c 5b . aSubmenuCtrl[
24f0: 6e 53 75 62 6d 65 6e 75 43 74 72 6c 5d 2e 65 56 nSubmenuCtrl].eV
2500: 69 73 69 62 6c 65 20 3d 20 65 56 69 73 69 62 6c isible = eVisibl
2510: 65 3b 0a 20 20 61 53 75 62 6d 65 6e 75 43 74 72 e;. aSubmenuCtr
2520: 6c 5b 6e 53 75 62 6d 65 6e 75 43 74 72 6c 5d 2e l[nSubmenuCtrl].
2530: 65 54 79 70 65 20 3d 20 46 46 5f 4d 55 4c 54 49 eType = FF_MULTI
2540: 3b 0a 20 20 6e 53 75 62 6d 65 6e 75 43 74 72 6c ;. nSubmenuCtrl
2550: 2b 2b 3b 0a 7d 0a 76 6f 69 64 20 73 74 79 6c 65 ++;.}.void style
2560: 5f 73 75 62 6d 65 6e 75 5f 73 71 6c 28 0a 20 20 _submenu_sql(.
2570: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d const char *zNam
2580: 65 2c 20 20 20 20 20 20 20 2f 2a 20 51 75 65 72 e, /* Quer
2590: 79 20 70 61 72 61 6d 65 74 65 72 20 6e 61 6d 65 y parameter name
25a0: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 */. const char
25b0: 20 2a 7a 4c 61 62 65 6c 2c 20 20 20 20 20 20 2f *zLabel, /
25c0: 2a 20 4c 61 62 65 6c 20 6f 6e 20 74 68 65 20 63 * Label on the c
25d0: 6f 6e 74 72 6f 6c 20 2a 2f 0a 20 20 63 6f 6e 73 ontrol */. cons
25e0: 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c t char *zFormat,
25f0: 20 20 20 20 20 2f 2a 20 46 6f 72 6d 61 74 20 73 /* Format s
2600: 74 72 69 6e 67 20 66 6f 72 20 53 51 4c 20 63 6f tring for SQL co
2610: 6d 6d 61 6e 64 20 66 6f 72 20 63 68 6f 69 63 65 mmand for choice
2620: 73 20 2a 2f 0a 20 20 2e 2e 2e 20 20 20 20 20 20 s */. ...
2630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2640: 2f 2a 20 41 72 67 75 6d 65 6e 74 73 20 74 6f 20 /* Arguments to
2650: 74 68 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e the format strin
2660: 67 20 2a 2f 0a 29 7b 0a 20 20 53 74 6d 74 20 71 g */.){. Stmt q
2670: 3b 0a 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20 ;. int n = 0;.
2680: 20 69 6e 74 20 6e 41 6c 6c 6f 63 20 3d 20 30 3b int nAlloc = 0;
2690: 0a 20 20 63 68 61 72 20 2a 2a 61 7a 20 3d 20 30 . char **az = 0
26a0: 3b 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a ;. va_list ap;.
26b0: 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70 2c 20 . va_start(ap,
26c0: 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 64 62 5f 76 zFormat);. db_v
26d0: 70 72 65 70 61 72 65 28 26 71 2c 20 30 2c 20 7a prepare(&q, 0, z
26e0: 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 76 Format, ap);. v
26f0: 61 5f 65 6e 64 28 61 70 29 3b 0a 20 20 77 68 69 a_end(ap);. whi
2700: 6c 65 28 20 53 51 4c 49 54 45 5f 52 4f 57 3d 3d le( SQLITE_ROW==
2710: 64 62 5f 73 74 65 70 28 26 71 29 20 29 7b 0a 20 db_step(&q) ){.
2720: 20 20 20 69 66 28 20 6e 2b 32 3e 3d 6e 41 6c 6c if( n+2>=nAll
2730: 6f 63 20 29 7b 0a 20 20 20 20 20 20 6e 41 6c 6c oc ){. nAll
2740: 6f 63 20 2b 3d 20 6e 41 6c 6c 6f 63 20 2b 20 32 oc += nAlloc + 2
2750: 30 3b 0a 20 20 20 20 20 20 61 7a 20 3d 20 66 6f 0;. az = fo
2760: 73 73 69 6c 5f 72 65 61 6c 6c 6f 63 28 61 7a 2c ssil_realloc(az,
2770: 20 73 69 7a 65 6f 66 28 63 68 61 72 2a 29 2a 6e sizeof(char*)*n
2780: 41 6c 6c 6f 63 29 3b 0a 20 20 20 20 7d 0a 20 20 Alloc);. }.
2790: 20 20 61 7a 5b 6e 2b 2b 5d 20 3d 20 66 6f 73 73 az[n++] = foss
27a0: 69 6c 5f 73 74 72 64 75 70 28 64 62 5f 63 6f 6c il_strdup(db_col
27b0: 75 6d 6e 5f 74 65 78 74 28 26 71 2c 30 29 29 3b umn_text(&q,0));
27c0: 0a 20 20 20 20 61 7a 5b 6e 2b 2b 5d 20 3d 20 66 . az[n++] = f
27d0: 6f 73 73 69 6c 5f 73 74 72 64 75 70 28 64 62 5f ossil_strdup(db_
27e0: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 31 column_text(&q,1
27f0: 29 29 3b 0a 20 20 7d 0a 20 20 64 62 5f 66 69 6e ));. }. db_fin
2800: 61 6c 69 7a 65 28 26 71 29 3b 0a 20 20 69 66 28 alize(&q);. if(
2810: 20 6e 3e 30 20 29 7b 0a 20 20 20 20 61 53 75 62 n>0 ){. aSub
2820: 6d 65 6e 75 43 74 72 6c 5b 6e 53 75 62 6d 65 6e menuCtrl[nSubmen
2830: 75 43 74 72 6c 5d 2e 7a 4e 61 6d 65 20 3d 20 7a uCtrl].zName = z
2840: 4e 61 6d 65 3b 0a 20 20 20 20 61 53 75 62 6d 65 Name;. aSubme
2850: 6e 75 43 74 72 6c 5b 6e 53 75 62 6d 65 6e 75 43 nuCtrl[nSubmenuC
2860: 74 72 6c 5d 2e 7a 4c 61 62 65 6c 20 3d 20 7a 4c trl].zLabel = zL
2870: 61 62 65 6c 3b 0a 20 20 20 20 61 53 75 62 6d 65 abel;. aSubme
2880: 6e 75 43 74 72 6c 5b 6e 53 75 62 6d 65 6e 75 43 nuCtrl[nSubmenuC
2890: 74 72 6c 5d 2e 69 53 69 7a 65 20 3d 20 6e 2f 32 trl].iSize = n/2
28a0: 3b 0a 20 20 20 20 61 53 75 62 6d 65 6e 75 43 74 ;. aSubmenuCt
28b0: 72 6c 5b 6e 53 75 62 6d 65 6e 75 43 74 72 6c 5d rl[nSubmenuCtrl]
28c0: 2e 61 7a 43 68 6f 69 63 65 20 3d 20 28 63 6f 6e .azChoice = (con
28d0: 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74 20 2a st char *const *
28e0: 29 61 7a 3b 0a 20 20 20 20 61 53 75 62 6d 65 6e )az;. aSubmen
28f0: 75 43 74 72 6c 5b 6e 53 75 62 6d 65 6e 75 43 74 uCtrl[nSubmenuCt
2900: 72 6c 5d 2e 65 56 69 73 69 62 6c 65 20 3d 20 53 rl].eVisible = S
2910: 54 59 4c 45 5f 4e 4f 52 4d 41 4c 3b 0a 20 20 20 TYLE_NORMAL;.
2920: 20 61 53 75 62 6d 65 6e 75 43 74 72 6c 5b 6e 53 aSubmenuCtrl[nS
2930: 75 62 6d 65 6e 75 43 74 72 6c 5d 2e 65 54 79 70 ubmenuCtrl].eTyp
2940: 65 20 3d 20 46 46 5f 4d 55 4c 54 49 3b 0a 20 20 e = FF_MULTI;.
2950: 20 20 6e 53 75 62 6d 65 6e 75 43 74 72 6c 2b 2b nSubmenuCtrl++
2960: 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 ;. }.}../*.** D
2970: 69 73 61 62 6c 65 20 6f 72 20 65 6e 61 62 6c 65 isable or enable
2980: 20 74 68 65 20 73 75 62 6d 65 6e 75 0a 2a 2f 0a the submenu.*/.
2990: 76 6f 69 64 20 73 74 79 6c 65 5f 73 75 62 6d 65 void style_subme
29a0: 6e 75 5f 65 6e 61 62 6c 65 28 69 6e 74 20 6f 6e nu_enable(int on
29b0: 4f 66 66 29 7b 0a 20 20 73 75 62 6d 65 6e 75 45 Off){. submenuE
29c0: 6e 61 62 6c 65 20 3d 20 6f 6e 4f 66 66 3b 0a 7d nable = onOff;.}
29d0: 0a 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 .../*.** Compare
29e0: 20 74 77 6f 20 73 75 62 6d 65 6e 75 20 69 74 65 two submenu ite
29f0: 6d 73 20 66 6f 72 20 73 6f 72 74 69 6e 67 20 70 ms for sorting p
2a00: 75 72 70 6f 73 65 73 0a 2a 2f 0a 73 74 61 74 69 urposes.*/.stati
2a10: 63 20 69 6e 74 20 73 75 62 6d 65 6e 75 43 6f 6d c int submenuCom
2a20: 70 61 72 65 28 63 6f 6e 73 74 20 76 6f 69 64 20 pare(const void
2a30: 2a 61 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a *a, const void *
2a40: 62 29 7b 0a 20 20 63 6f 6e 73 74 20 73 74 72 75 b){. const stru
2a50: 63 74 20 53 75 62 6d 65 6e 75 20 2a 41 20 3d 20 ct Submenu *A =
2a60: 28 63 6f 6e 73 74 20 73 74 72 75 63 74 20 53 75 (const struct Su
2a70: 62 6d 65 6e 75 2a 29 61 3b 0a 20 20 63 6f 6e 73 bmenu*)a;. cons
2a80: 74 20 73 74 72 75 63 74 20 53 75 62 6d 65 6e 75 t struct Submenu
2a90: 20 2a 42 20 3d 20 28 63 6f 6e 73 74 20 73 74 72 *B = (const str
2aa0: 75 63 74 20 53 75 62 6d 65 6e 75 2a 29 62 3b 0a uct Submenu*)b;.
2ab0: 20 20 72 65 74 75 72 6e 20 66 6f 73 73 69 6c 5f return fossil_
2ac0: 73 74 72 63 6d 70 28 41 2d 3e 7a 4c 61 62 65 6c strcmp(A->zLabel
2ad0: 2c 20 42 2d 3e 7a 4c 61 62 65 6c 29 3b 0a 7d 0a , B->zLabel);.}.
2ae0: 0a 2f 2a 20 55 73 65 20 74 68 69 73 20 66 6f 72 ./* Use this for
2af0: 20 74 68 65 20 24 63 75 72 72 65 6e 74 5f 70 61 the $current_pa
2b00: 67 65 20 76 61 72 69 61 62 6c 65 20 69 66 20 69 ge variable if i
2b10: 74 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20 t is not NULL.
2b20: 49 66 20 69 74 0a 2a 2a 20 69 73 20 4e 55 4c 4c If it.** is NULL
2b30: 20 74 68 65 6e 20 75 73 65 20 67 2e 7a 50 61 74 then use g.zPat
2b40: 68 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68 61 h..*/.static cha
2b50: 72 20 2a 6c 6f 63 61 6c 5f 7a 43 75 72 72 65 6e r *local_zCurren
2b60: 74 50 61 67 65 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a tPage = 0;../*.*
2b70: 2a 20 53 65 74 20 74 68 65 20 64 65 73 69 72 65 * Set the desire
2b80: 64 20 24 63 75 72 72 65 6e 74 5f 70 61 67 65 20 d $current_page
2b90: 74 6f 20 73 6f 6d 65 74 68 69 6e 67 20 6f 74 68 to something oth
2ba0: 65 72 20 74 68 61 6e 20 67 2e 7a 50 61 74 68 0a er than g.zPath.
2bb0: 2a 2f 0a 76 6f 69 64 20 73 74 79 6c 65 5f 73 65 */.void style_se
2bc0: 74 5f 63 75 72 72 65 6e 74 5f 70 61 67 65 28 63 t_current_page(c
2bd0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d onst char *zForm
2be0: 61 74 2c 20 2e 2e 2e 29 7b 0a 20 20 66 6f 73 73 at, ...){. foss
2bf0: 69 6c 5f 66 72 65 65 28 6c 6f 63 61 6c 5f 7a 43 il_free(local_zC
2c00: 75 72 72 65 6e 74 50 61 67 65 29 3b 0a 20 20 69 urrentPage);. i
2c10: 66 28 20 7a 46 6f 72 6d 61 74 3d 3d 30 20 29 7b f( zFormat==0 ){
2c20: 0a 20 20 20 20 6c 6f 63 61 6c 5f 7a 43 75 72 72 . local_zCurr
2c30: 65 6e 74 50 61 67 65 20 3d 20 30 3b 0a 20 20 7d entPage = 0;. }
2c40: 65 6c 73 65 7b 0a 20 20 20 20 76 61 5f 6c 69 73 else{. va_lis
2c50: 74 20 61 70 3b 0a 20 20 20 20 76 61 5f 73 74 61 t ap;. va_sta
2c60: 72 74 28 61 70 2c 20 7a 46 6f 72 6d 61 74 29 3b rt(ap, zFormat);
2c70: 0a 20 20 20 20 6c 6f 63 61 6c 5f 7a 43 75 72 72 . local_zCurr
2c80: 65 6e 74 50 61 67 65 20 3d 20 76 6d 70 72 69 6e entPage = vmprin
2c90: 74 66 28 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b tf(zFormat, ap);
2ca0: 0a 20 20 20 20 76 61 5f 65 6e 64 28 61 70 29 3b . va_end(ap);
2cb0: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 72 . }.}../*.** Cr
2cc0: 65 61 74 65 20 61 20 54 48 31 20 76 61 72 69 61 eate a TH1 varia
2cd0: 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 ble containing t
2ce0: 68 65 20 55 52 4c 20 66 6f 72 20 74 68 65 20 73 he URL for the s
2cf0: 70 65 63 69 66 69 65 64 20 63 6f 6e 66 69 67 0a pecified config.
2d00: 2a 2a 20 72 65 73 6f 75 72 63 65 2e 20 54 68 65 ** resource. The
2d10: 20 72 65 73 75 6c 74 69 6e 67 20 76 61 72 69 61 resulting varia
2d20: 62 6c 65 20 6e 61 6d 65 20 77 69 6c 6c 20 62 65 ble name will be
2d30: 20 6f 66 20 74 68 65 20 66 6f 72 6d 0a 2a 2a 20 of the form.**
2d40: 24 5b 7a 56 61 72 50 72 65 66 69 78 5d 5f 75 72 $[zVarPrefix]_ur
2d50: 6c 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 l..*/.static voi
2d60: 64 20 75 72 6c 5f 76 61 72 28 0a 20 20 63 6f 6e d url_var(. con
2d70: 73 74 20 63 68 61 72 20 2a 7a 56 61 72 50 72 65 st char *zVarPre
2d80: 66 69 78 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61 fix,. const cha
2d90: 72 20 2a 7a 43 6f 6e 66 69 67 4e 61 6d 65 2c 0a r *zConfigName,.
2da0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 50 const char *zP
2db0: 61 67 65 4e 61 6d 65 0a 29 7b 0a 20 20 63 68 61 ageName.){. cha
2dc0: 72 20 2a 7a 56 61 72 4e 61 6d 65 20 3d 20 6d 70 r *zVarName = mp
2dd0: 72 69 6e 74 66 28 22 25 73 5f 75 72 6c 22 2c 20 rintf("%s_url",
2de0: 7a 56 61 72 50 72 65 66 69 78 29 3b 0a 20 20 63 zVarPrefix);. c
2df0: 68 61 72 20 2a 7a 55 72 6c 20 3d 20 30 3b 20 20 har *zUrl = 0;
2e00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 /* s
2e10: 74 79 6c 65 73 68 65 65 74 20 55 52 4c 20 2a 2f tylesheet URL */
2e20: 0a 20 20 69 6e 74 20 68 61 73 42 75 69 6c 74 69 . int hasBuilti
2e30: 6e 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 n = 0;
2e40: 2f 2a 20 74 72 75 65 20 66 6f 72 20 62 75 69 6c /* true for buil
2e50: 74 2d 69 6e 20 70 61 67 65 2d 73 70 65 63 69 66 t-in page-specif
2e60: 69 63 20 43 53 53 20 2a 2f 0a 0a 20 20 69 66 28 ic CSS */.. if(
2e70: 30 3d 3d 73 74 72 63 6d 70 28 22 63 73 73 22 2c 0==strcmp("css",
2e80: 7a 43 6f 6e 66 69 67 4e 61 6d 65 29 29 7b 0a 20 zConfigName)){.
2e90: 20 20 20 2f 2a 20 41 63 63 6f 75 6e 74 20 66 6f /* Account fo
2ea0: 72 20 70 61 67 65 2d 73 70 65 63 69 66 69 63 20 r page-specific
2eb0: 43 53 53 2c 20 61 70 70 65 6e 64 69 6e 67 20 61 CSS, appending a
2ec0: 20 2f 7b 7b 67 2e 7a 50 61 74 68 7d 7d 20 74 6f /{{g.zPath}} to
2ed0: 20 74 68 65 0a 20 20 20 20 2a 2a 20 75 72 6c 20 the. ** url
2ee0: 6f 6e 6c 79 20 69 66 20 77 65 20 68 61 76 65 20 only if we have
2ef0: 61 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 a corresponding
2f00: 62 75 69 6c 74 2d 69 6e 20 70 61 67 65 2d 73 70 built-in page-sp
2f10: 65 63 69 66 69 63 20 43 53 53 0a 20 20 20 20 2a ecific CSS. *
2f20: 2a 20 66 69 6c 65 2e 20 44 6f 20 6e 6f 74 20 61 * file. Do not a
2f30: 70 70 65 6e 64 20 69 74 20 74 6f 20 61 6c 6c 20 ppend it to all
2f40: 70 61 67 65 73 20 62 65 63 61 75 73 65 20 77 65 pages because we
2f50: 20 77 6f 75 6c 64 0a 20 20 20 20 2a 2a 20 65 66 would. ** ef
2f60: 66 65 63 74 69 76 65 6c 79 20 63 61 63 68 65 2d fectively cache-
2f70: 62 75 73 74 20 61 6c 6c 20 70 61 67 65 73 20 77 bust all pages w
2f80: 68 69 63 68 20 64 6f 20 6e 6f 74 20 68 61 76 65 hich do not have
2f90: 0a 20 20 20 20 2a 2a 20 70 61 67 65 2d 73 70 65 . ** page-spe
2fa0: 63 69 66 69 63 20 43 53 53 2e 20 2a 2f 0a 20 20 cific CSS. */.
2fb0: 20 20 63 68 61 72 20 2a 20 7a 42 75 69 6c 74 69 char * zBuilti
2fc0: 6e 20 3d 20 6d 70 72 69 6e 74 66 28 22 73 74 79 n = mprintf("sty
2fd0: 6c 65 2e 25 73 2e 63 73 73 22 2c 20 67 2e 7a 50 le.%s.css", g.zP
2fe0: 61 74 68 29 3b 0a 20 20 20 20 68 61 73 42 75 69 ath);. hasBui
2ff0: 6c 74 69 6e 20 3d 20 62 75 69 6c 74 69 6e 5f 66 ltin = builtin_f
3000: 69 6c 65 28 7a 42 75 69 6c 74 69 6e 2c 30 29 21 ile(zBuiltin,0)!
3010: 3d 30 3b 0a 20 20 20 20 66 6f 73 73 69 6c 5f 66 =0;. fossil_f
3020: 72 65 65 28 7a 42 75 69 6c 74 69 6e 29 3b 0a 20 ree(zBuiltin);.
3030: 20 7d 0a 20 20 7a 55 72 6c 20 3d 20 6d 70 72 69 }. zUrl = mpri
3040: 6e 74 66 28 22 25 52 2f 25 73 25 73 25 73 3f 69 ntf("%R/%s%s%s?i
3050: 64 3d 25 78 22 2c 20 7a 50 61 67 65 4e 61 6d 65 d=%x", zPageName
3060: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
3070: 20 20 20 68 61 73 42 75 69 6c 74 69 6e 20 3f 20 hasBuiltin ?
3080: 22 2f 22 20 3a 20 22 22 2c 20 68 61 73 42 75 69 "/" : "", hasBui
3090: 6c 74 69 6e 20 3f 20 67 2e 7a 50 61 74 68 20 3a ltin ? g.zPath :
30a0: 20 22 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 "",.
30b0: 20 20 20 20 20 20 73 6b 69 6e 5f 69 64 28 7a 43 skin_id(zC
30c0: 6f 6e 66 69 67 4e 61 6d 65 29 29 3b 0a 20 20 54 onfigName));. T
30d0: 68 5f 53 74 6f 72 65 28 7a 56 61 72 4e 61 6d 65 h_Store(zVarName
30e0: 2c 20 7a 55 72 6c 29 3b 0a 20 20 66 6f 73 73 69 , zUrl);. fossi
30f0: 6c 5f 66 72 65 65 28 7a 55 72 6c 29 3b 0a 20 20 l_free(zUrl);.
3100: 66 6f 73 73 69 6c 5f 66 72 65 65 28 7a 56 61 72 fossil_free(zVar
3110: 4e 61 6d 65 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 Name);.}../*.**
3120: 43 72 65 61 74 65 20 61 20 54 48 31 20 76 61 72 Create a TH1 var
3130: 69 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 iable containing
3140: 20 74 68 65 20 55 52 4c 20 66 6f 72 20 74 68 65 the URL for the
3150: 20 73 70 65 63 69 66 69 65 64 20 63 6f 6e 66 69 specified confi
3160: 67 20 69 6d 61 67 65 2e 0a 2a 2a 20 54 68 65 20 g image..** The
3170: 72 65 73 75 6c 74 69 6e 67 20 76 61 72 69 61 62 resulting variab
3180: 6c 65 20 6e 61 6d 65 20 77 69 6c 6c 20 62 65 20 le name will be
3190: 6f 66 20 74 68 65 20 66 6f 72 6d 20 24 5b 7a 49 of the form $[zI
31a0: 6d 61 67 65 4e 61 6d 65 5d 5f 69 6d 61 67 65 5f mageName]_image_
31b0: 75 72 6c 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 url..*/.static v
31c0: 6f 69 64 20 69 6d 61 67 65 5f 75 72 6c 5f 76 61 oid image_url_va
31d0: 72 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 49 r(const char *zI
31e0: 6d 61 67 65 4e 61 6d 65 29 7b 0a 20 20 63 68 61 mageName){. cha
31f0: 72 20 2a 7a 56 61 72 50 72 65 66 69 78 20 3d 20 r *zVarPrefix =
3200: 6d 70 72 69 6e 74 66 28 22 25 73 5f 69 6d 61 67 mprintf("%s_imag
3210: 65 22 2c 20 7a 49 6d 61 67 65 4e 61 6d 65 29 3b e", zImageName);
3220: 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6e 66 69 67 . char *zConfig
3230: 4e 61 6d 65 20 3d 20 6d 70 72 69 6e 74 66 28 22 Name = mprintf("
3240: 25 73 2d 69 6d 61 67 65 22 2c 20 7a 49 6d 61 67 %s-image", zImag
3250: 65 4e 61 6d 65 29 3b 0a 20 20 75 72 6c 5f 76 61 eName);. url_va
3260: 72 28 7a 56 61 72 50 72 65 66 69 78 2c 20 7a 43 r(zVarPrefix, zC
3270: 6f 6e 66 69 67 4e 61 6d 65 2c 20 7a 49 6d 61 67 onfigName, zImag
3280: 65 4e 61 6d 65 29 3b 0a 20 20 66 72 65 65 28 7a eName);. free(z
3290: 56 61 72 50 72 65 66 69 78 29 3b 0a 20 20 66 72 VarPrefix);. fr
32a0: 65 65 28 7a 43 6f 6e 66 69 67 4e 61 6d 65 29 3b ee(zConfigName);
32b0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 75 74 70 75 74 .}../*.** Output
32c0: 20 54 45 58 54 20 77 69 74 68 20 61 20 63 6c 69 TEXT with a cli
32d0: 63 6b 2d 74 6f 2d 63 6f 70 79 20 62 75 74 74 6f ck-to-copy butto
32e0: 6e 20 6e 65 78 74 20 74 6f 20 69 74 2e 20 4c 6f n next to it. Lo
32f0: 61 64 73 20 74 68 65 20 63 6f 70 79 62 74 6e 2e ads the copybtn.
3300: 6a 73 0a 2a 2a 20 4a 61 76 61 73 63 72 69 70 74 js.** Javascript
3310: 20 6d 6f 64 75 6c 65 2c 20 61 6e 64 20 67 65 6e module, and gen
3320: 65 72 61 74 65 73 20 48 54 4d 4c 20 65 6c 65 6d erates HTML elem
3330: 65 6e 74 73 20 77 69 74 68 20 74 68 65 20 66 6f ents with the fo
3340: 6c 6c 6f 77 69 6e 67 20 49 44 73 3a 0a 2a 2a 0a llowing IDs:.**.
3350: 2a 2a 20 20 20 20 54 41 52 47 45 54 49 44 3a 20 ** TARGETID:
3360: 20 20 20 20 20 20 54 68 65 20 3c 73 70 61 6e 3e The <span>
3370: 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 wrapper around
3380: 54 45 58 54 2e 0a 2a 2a 20 20 20 20 63 6f 70 79 TEXT..** copy
3390: 2d 54 41 52 47 45 54 49 44 3a 20 20 54 68 65 20 -TARGETID: The
33a0: 3c 73 70 61 6e 3e 20 66 6f 72 20 74 68 65 20 63 <span> for the c
33b0: 6f 70 79 20 62 75 74 74 6f 6e 2e 0a 2a 2a 0a 2a opy button..**.*
33c0: 2a 20 49 66 20 74 68 65 20 46 4c 49 50 50 45 44 * If the FLIPPED
33d0: 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f 6e argument is non
33e0: 2d 7a 65 72 6f 2c 20 74 68 65 20 63 6f 70 79 20 -zero, the copy
33f0: 62 75 74 74 6f 6e 20 69 73 20 64 69 73 70 6c 61 button is displa
3400: 79 65 64 20 61 66 74 65 72 20 54 45 58 54 2e 0a yed after TEXT..
3410: 2a 2a 0a 2a 2a 20 54 68 65 20 43 4f 50 59 4c 45 **.** The COPYLE
3420: 4e 47 54 48 20 61 72 67 75 6d 65 6e 74 20 64 65 NGTH argument de
3430: 66 69 6e 65 73 20 74 68 65 20 6c 65 6e 67 74 68 fines the length
3440: 20 6f 66 20 74 68 65 20 73 75 62 73 74 72 69 6e of the substrin
3450: 67 20 6f 66 20 54 45 58 54 20 63 6f 70 69 65 64 g of TEXT copied
3460: 20 74 6f 0a 2a 2a 20 63 6c 69 70 62 6f 61 72 64 to.** clipboard
3470: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 3c 3d 20 30 3a :.**.** <= 0:
3480: 20 20 20 4e 6f 20 6c 69 6d 69 74 20 28 64 65 66 No limit (def
3490: 61 75 6c 74 20 69 66 20 74 68 65 20 61 72 67 75 ault if the argu
34a0: 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 29 ment is omitted)
34b0: 2e 0a 2a 2a 20 20 20 20 3e 3d 20 33 3a 20 20 20 ..** >= 3:
34c0: 54 72 75 6e 63 61 74 65 20 54 45 58 54 20 61 66 Truncate TEXT af
34d0: 74 65 72 20 43 4f 50 59 4c 45 4e 47 54 48 20 28 ter COPYLENGTH (
34e0: 73 69 6e 67 6c 65 2d 62 79 74 65 29 20 63 68 61 single-byte) cha
34f0: 72 61 63 74 65 72 73 2e 0a 2a 2a 20 20 20 20 20 racters..**
3500: 20 20 31 3a 20 20 20 55 73 65 20 74 68 65 20 22 1: Use the "
3510: 68 61 73 68 2d 64 69 67 69 74 73 22 20 73 65 74 hash-digits" set
3520: 74 69 6e 67 20 61 73 20 74 68 65 20 6c 69 6d 69 ting as the limi
3530: 74 2e 0a 2a 2a 20 20 20 20 20 20 20 32 3a 20 20 t..** 2:
3540: 20 55 73 65 20 74 68 65 20 6c 65 6e 67 74 68 20 Use the length
3550: 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20 appropriate for
3560: 55 52 4c 73 20 61 73 20 74 68 65 20 6c 69 6d 69 URLs as the limi
3570: 74 20 28 64 65 66 69 6e 65 64 20 61 74 0a 2a 2a t (defined at.**
3580: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 70 comp
3590: 69 6c 65 2d 74 69 6d 65 20 62 79 20 46 4f 53 53 ile-time by FOSS
35a0: 49 4c 5f 48 41 53 48 5f 44 49 47 49 54 53 5f 55 IL_HASH_DIGITS_U
35b0: 52 4c 2c 20 64 65 66 61 75 6c 74 73 20 74 6f 20 RL, defaults to
35c0: 31 36 29 2e 0a 2a 2f 0a 63 68 61 72 20 2a 73 74 16)..*/.char *st
35d0: 79 6c 65 5f 63 6f 70 79 5f 62 75 74 74 6f 6e 28 yle_copy_button(
35e0: 0a 20 20 69 6e 74 20 62 4f 75 74 70 75 74 43 47 . int bOutputCG
35f0: 49 2c 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f I, /* Do
3600: 6e 27 74 20 72 65 74 75 72 6e 20 72 65 73 75 6c n't return resul
3610: 74 2c 20 62 75 74 20 73 65 6e 64 20 74 6f 20 63 t, but send to c
3620: 67 69 5f 70 72 69 6e 74 66 28 29 2e 20 2a 2f 0a gi_printf(). */.
3630: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 const char *zT
3640: 61 72 67 65 74 49 64 2c 20 20 2f 2a 20 54 68 65 argetId, /* The
3650: 20 54 41 52 47 45 54 49 44 20 61 72 67 75 6d 65 TARGETID argume
3660: 6e 74 2e 20 2a 2f 0a 20 20 69 6e 74 20 62 46 6c nt. */. int bFl
3670: 69 70 70 65 64 2c 20 20 20 20 20 20 20 20 20 20 ipped,
3680: 20 2f 2a 20 54 68 65 20 46 4c 49 50 50 45 44 20 /* The FLIPPED
3690: 61 72 67 75 6d 65 6e 74 2e 20 2a 2f 0a 20 20 69 argument. */. i
36a0: 6e 74 20 63 63 68 4c 65 6e 67 74 68 2c 20 20 20 nt cchLength,
36b0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 43 4f /* The CO
36c0: 50 59 4c 45 4e 47 54 48 20 61 72 67 75 6d 65 6e PYLENGTH argumen
36d0: 74 2e 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 t. */. const ch
36e0: 61 72 20 2a 7a 54 65 78 74 46 6d 74 2c 20 20 20 ar *zTextFmt,
36f0: 2f 2a 20 46 6f 72 6d 61 74 74 69 6e 67 20 6f 66 /* Formatting of
3700: 20 74 68 65 20 54 45 58 54 20 61 72 67 75 6d 65 the TEXT argume
3710: 6e 74 20 28 68 74 6d 6c 69 7a 65 64 29 2e 20 2a nt (htmlized). *
3720: 2f 0a 20 20 2e 2e 2e 20 20 20 20 20 20 20 20 20 /. ...
3730: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 /* F
3740: 6f 72 6d 61 74 74 69 6e 67 20 70 61 72 61 6d 65 ormatting parame
3750: 74 65 72 73 20 6f 66 20 74 68 65 20 54 45 58 54 ters of the TEXT
3760: 20 61 72 67 75 6d 65 6e 74 2e 20 2a 2f 0a 29 7b argument. */.){
3770: 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 . va_list ap;.
3780: 20 63 68 61 72 20 2a 7a 54 65 78 74 3b 0a 20 20 char *zText;.
3790: 63 68 61 72 20 2a 7a 52 65 73 75 6c 74 20 3d 20 char *zResult =
37a0: 30 3b 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70 0;. va_start(ap
37b0: 2c 7a 54 65 78 74 46 6d 74 29 3b 0a 20 20 7a 54 ,zTextFmt);. zT
37c0: 65 78 74 20 3d 20 76 6d 70 72 69 6e 74 66 28 7a ext = vmprintf(z
37d0: 54 65 78 74 46 6d 74 2f 2a 77 6f 72 6b 73 2d 6c TextFmt/*works-l
37e0: 69 6b 65 3a 3f 2a 2f 2c 61 70 29 3b 0a 20 20 76 ike:?*/,ap);. v
37f0: 61 5f 65 6e 64 28 61 70 29 3b 0a 20 20 69 66 28 a_end(ap);. if(
3800: 20 63 63 68 4c 65 6e 67 74 68 3d 3d 31 20 29 20 cchLength==1 )
3810: 63 63 68 4c 65 6e 67 74 68 20 3d 20 68 61 73 68 cchLength = hash
3820: 5f 64 69 67 69 74 73 28 30 29 3b 0a 20 20 65 6c _digits(0);. el
3830: 73 65 20 69 66 28 20 63 63 68 4c 65 6e 67 74 68 se if( cchLength
3840: 3d 3d 32 20 29 20 63 63 68 4c 65 6e 67 74 68 20 ==2 ) cchLength
3850: 3d 20 68 61 73 68 5f 64 69 67 69 74 73 28 31 29 = hash_digits(1)
3860: 3b 0a 20 20 69 66 28 20 21 62 46 6c 69 70 70 65 ;. if( !bFlippe
3870: 64 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 d ){. const c
3880: 68 61 72 20 2a 7a 42 74 6e 46 6d 74 20 3d 0a 20 har *zBtnFmt =.
3890: 20 20 20 20 20 22 3c 73 70 61 6e 20 63 6c 61 73 "<span clas
38a0: 73 3d 5c 22 6e 6f 62 72 5c 22 3e 22 0a 20 20 20 s=\"nobr\">".
38b0: 20 20 20 22 3c 73 70 61 6e 20 22 0a 20 20 20 20 "<span ".
38c0: 20 20 22 63 6c 61 73 73 3d 5c 22 63 6f 70 79 2d "class=\"copy-
38d0: 62 75 74 74 6f 6e 5c 22 20 22 0a 20 20 20 20 20 button\" ".
38e0: 20 22 69 64 3d 5c 22 63 6f 70 79 2d 25 68 5c 22 "id=\"copy-%h\"
38f0: 20 22 0a 20 20 20 20 20 20 22 64 61 74 61 2d 63 ". "data-c
3900: 6f 70 79 74 61 72 67 65 74 3d 5c 22 25 68 5c 22 opytarget=\"%h\"
3910: 20 22 0a 20 20 20 20 20 20 22 64 61 74 61 2d 63 ". "data-c
3920: 6f 70 79 6c 65 6e 67 74 68 3d 5c 22 25 64 5c 22 opylength=\"%d\"
3930: 3e 22 0a 20 20 20 20 20 20 22 3c 2f 73 70 61 6e >". "</span
3940: 3e 22 0a 20 20 20 20 20 20 22 3c 73 70 61 6e 20 >". "<span
3950: 69 64 3d 5c 22 25 68 5c 22 3e 22 0a 20 20 20 20 id=\"%h\">".
3960: 20 20 22 25 73 22 0a 20 20 20 20 20 20 22 3c 2f "%s". "</
3970: 73 70 61 6e 3e 22 0a 20 20 20 20 20 20 22 3c 2f span>". "</
3980: 73 70 61 6e 3e 22 3b 0a 20 20 20 20 69 66 28 20 span>";. if(
3990: 62 4f 75 74 70 75 74 43 47 49 20 29 7b 0a 20 20 bOutputCGI ){.
39a0: 20 20 20 20 63 67 69 5f 70 72 69 6e 74 66 28 0a cgi_printf(.
39b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
39c0: 20 20 7a 42 74 6e 46 6d 74 2f 2a 77 6f 72 6b 73 zBtnFmt/*works
39d0: 2d 6c 69 6b 65 3a 22 25 68 25 68 25 64 25 68 25 -like:"%h%h%d%h%
39e0: 73 22 2a 2f 2c 0a 20 20 20 20 20 20 20 20 20 20 s"*/,.
39f0: 20 20 20 20 20 20 20 20 7a 54 61 72 67 65 74 49 zTargetI
3a00: 64 2c 7a 54 61 72 67 65 74 49 64 2c 63 63 68 4c d,zTargetId,cchL
3a10: 65 6e 67 74 68 2c 7a 54 61 72 67 65 74 49 64 2c ength,zTargetId,
3a20: 7a 54 65 78 74 29 3b 0a 20 20 20 20 7d 65 6c 73 zText);. }els
3a30: 65 7b 0a 20 20 20 20 20 20 7a 52 65 73 75 6c 74 e{. zResult
3a40: 20 3d 20 6d 70 72 69 6e 74 66 28 0a 20 20 20 20 = mprintf(.
3a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 42 zB
3a60: 74 6e 46 6d 74 2f 2a 77 6f 72 6b 73 2d 6c 69 6b tnFmt/*works-lik
3a70: 65 3a 22 25 68 25 68 25 64 25 68 25 73 22 2a 2f e:"%h%h%d%h%s"*/
3a80: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
3a90: 20 20 20 20 7a 54 61 72 67 65 74 49 64 2c 7a 54 zTargetId,zT
3aa0: 61 72 67 65 74 49 64 2c 63 63 68 4c 65 6e 67 74 argetId,cchLengt
3ab0: 68 2c 7a 54 61 72 67 65 74 49 64 2c 7a 54 65 78 h,zTargetId,zTex
3ac0: 74 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 t);. }. }els
3ad0: 65 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 e{. const cha
3ae0: 72 20 2a 7a 42 74 6e 46 6d 74 20 3d 0a 20 20 20 r *zBtnFmt =.
3af0: 20 20 20 22 3c 73 70 61 6e 20 63 6c 61 73 73 3d "<span class=
3b00: 5c 22 6e 6f 62 72 5c 22 3e 22 0a 20 20 20 20 20 \"nobr\">".
3b10: 20 22 3c 73 70 61 6e 20 69 64 3d 5c 22 25 68 5c "<span id=\"%h\
3b20: 22 3e 22 0a 20 20 20 20 20 20 22 25 73 22 0a 20 ">". "%s".
3b30: 20 20 20 20 20 22 3c 2f 73 70 61 6e 3e 22 0a 20 "</span>".
3b40: 20 20 20 20 20 22 3c 73 70 61 6e 20 22 0a 20 20 "<span ".
3b50: 20 20 20 20 22 63 6c 61 73 73 3d 5c 22 63 6f 70 "class=\"cop
3b60: 79 2d 62 75 74 74 6f 6e 20 63 6f 70 79 2d 62 75 y-button copy-bu
3b70: 74 74 6f 6e 2d 66 6c 69 70 70 65 64 5c 22 20 22 tton-flipped\" "
3b80: 0a 20 20 20 20 20 20 22 69 64 3d 5c 22 63 6f 70 . "id=\"cop
3b90: 79 2d 25 68 5c 22 20 22 0a 20 20 20 20 20 20 22 y-%h\" ". "
3ba0: 64 61 74 61 2d 63 6f 70 79 74 61 72 67 65 74 3d data-copytarget=
3bb0: 5c 22 25 68 5c 22 20 22 0a 20 20 20 20 20 20 22 \"%h\" ". "
3bc0: 64 61 74 61 2d 63 6f 70 79 6c 65 6e 67 74 68 3d data-copylength=
3bd0: 5c 22 25 64 5c 22 3e 22 0a 20 20 20 20 20 20 22 \"%d\">". "
3be0: 3c 2f 73 70 61 6e 3e 22 0a 20 20 20 20 20 20 22 </span>". "
3bf0: 3c 2f 73 70 61 6e 3e 22 3b 0a 20 20 20 20 69 66 </span>";. if
3c00: 28 20 62 4f 75 74 70 75 74 43 47 49 20 29 7b 0a ( bOutputCGI ){.
3c10: 20 20 20 20 20 20 63 67 69 5f 70 72 69 6e 74 66 cgi_printf
3c20: 28 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 (.
3c30: 20 20 20 20 7a 42 74 6e 46 6d 74 2f 2a 77 6f 72 zBtnFmt/*wor
3c40: 6b 73 2d 6c 69 6b 65 3a 22 25 68 25 73 25 68 25 ks-like:"%h%s%h%
3c50: 68 25 64 22 2a 2f 2c 0a 20 20 20 20 20 20 20 20 h%d"*/,.
3c60: 20 20 20 20 20 20 20 20 20 20 7a 54 61 72 67 65 zTarge
3c70: 74 49 64 2c 7a 54 65 78 74 2c 7a 54 61 72 67 65 tId,zText,zTarge
3c80: 74 49 64 2c 7a 54 61 72 67 65 74 49 64 2c 63 63 tId,zTargetId,cc
3c90: 68 4c 65 6e 67 74 68 29 3b 0a 20 20 20 20 7d 65 hLength);. }e
3ca0: 6c 73 65 7b 0a 20 20 20 20 20 20 7a 52 65 73 75 lse{. zResu
3cb0: 6c 74 20 3d 20 6d 70 72 69 6e 74 66 28 0a 20 20 lt = mprintf(.
3cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3cd0: 7a 42 74 6e 46 6d 74 2f 2a 77 6f 72 6b 73 2d 6c zBtnFmt/*works-l
3ce0: 69 6b 65 3a 22 25 68 25 73 25 68 25 68 25 64 22 ike:"%h%s%h%h%d"
3cf0: 2a 2f 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 */,.
3d00: 20 20 20 20 20 20 7a 54 61 72 67 65 74 49 64 2c zTargetId,
3d10: 7a 54 65 78 74 2c 7a 54 61 72 67 65 74 49 64 2c zText,zTargetId,
3d20: 7a 54 61 72 67 65 74 49 64 2c 63 63 68 4c 65 6e zTargetId,cchLen
3d30: 67 74 68 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a gth);. }. }.
3d40: 20 20 66 72 65 65 28 7a 54 65 78 74 29 3b 0a 20 free(zText);.
3d50: 20 62 75 69 6c 74 69 6e 5f 72 65 71 75 65 73 74 builtin_request
3d60: 5f 6a 73 28 22 63 6f 70 79 62 74 6e 2e 6a 73 22 _js("copybtn.js"
3d70: 29 3b 0a 20 20 72 65 74 75 72 6e 20 7a 52 65 73 );. return zRes
3d80: 75 6c 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 ult;.}../*.** Re
3d90: 74 75 72 6e 20 61 20 72 61 6e 64 6f 6d 20 6e 6f turn a random no
3da0: 6e 63 65 20 74 68 61 74 20 69 73 20 73 74 6f 72 nce that is stor
3db0: 65 64 20 69 6e 20 73 74 61 74 69 63 20 73 70 61 ed in static spa
3dc0: 63 65 2e 20 20 46 6f 72 20 61 20 70 61 72 74 69 ce. For a parti
3dd0: 63 75 6c 61 72 0a 2a 2a 20 72 75 6e 2c 20 74 68 cular.** run, th
3de0: 65 20 73 61 6d 65 20 6e 6f 6e 63 65 20 69 73 20 e same nonce is
3df0: 61 6c 77 61 79 73 20 72 65 74 75 72 6e 65 64 2e always returned.
3e00: 0a 2a 2f 0a 63 68 61 72 20 2a 73 74 79 6c 65 5f .*/.char *style_
3e10: 6e 6f 6e 63 65 28 76 6f 69 64 29 7b 0a 20 20 73 nonce(void){. s
3e20: 74 61 74 69 63 20 63 68 61 72 20 7a 4e 6f 6e 63 tatic char zNonc
3e30: 65 5b 35 32 5d 3b 0a 20 20 69 66 28 20 7a 4e 6f e[52];. if( zNo
3e40: 6e 63 65 5b 30 5d 3d 3d 30 20 29 7b 0a 20 20 20 nce[0]==0 ){.
3e50: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 7a unsigned char z
3e60: 53 65 65 64 5b 32 34 5d 3b 0a 20 20 20 20 73 71 Seed[24];. sq
3e70: 6c 69 74 65 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 lite3_randomness
3e80: 28 32 34 2c 20 7a 53 65 65 64 29 3b 0a 20 20 20 (24, zSeed);.
3e90: 20 65 6e 63 6f 64 65 31 36 28 7a 53 65 65 64 2c encode16(zSeed,
3ea0: 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 29 (unsigned char*)
3eb0: 7a 4e 6f 6e 63 65 2c 32 34 29 3b 0a 20 20 7d 0a zNonce,24);. }.
3ec0: 20 20 72 65 74 75 72 6e 20 7a 4e 6f 6e 63 65 3b return zNonce;
3ed0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e .}../*.** Return
3ee0: 20 74 68 65 20 64 65 66 61 75 6c 74 20 43 6f 6e the default Con
3ef0: 74 65 6e 74 20 53 65 63 75 72 69 74 79 20 50 6f tent Security Po
3f00: 6c 69 63 79 20 28 43 53 50 29 20 73 74 72 69 6e licy (CSP) strin
3f10: 67 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 6f 48 g..** If the toH
3f20: 65 61 64 65 72 20 61 72 67 75 6d 65 6e 74 20 69 eader argument i
3f30: 73 20 74 72 75 65 2c 20 74 68 65 6e 20 61 6c 73 s true, then als
3f40: 6f 20 61 64 64 20 74 68 65 0a 2a 2a 20 43 53 50 o add the.** CSP
3f50: 20 74 6f 20 74 68 65 20 48 54 54 50 20 72 65 70 to the HTTP rep
3f60: 6c 79 20 68 65 61 64 65 72 2e 0a 2a 2a 0a 2a 2a ly header..**.**
3f70: 20 54 68 65 20 43 53 50 20 63 6f 6d 65 73 20 66 The CSP comes f
3f80: 72 6f 6d 20 74 68 65 20 22 64 65 66 61 75 6c 74 rom the "default
3f90: 2d 63 73 70 22 20 73 65 74 74 69 6e 67 20 69 66 -csp" setting if
3fa0: 20 69 74 20 65 78 69 73 74 73 20 61 6e 64 0a 2a it exists and.*
3fb0: 2a 20 69 73 20 6e 6f 6e 2d 65 6d 70 74 79 2e 20 * is non-empty.
3fc0: 20 49 66 20 74 68 61 74 20 73 65 74 74 69 6e 67 If that setting
3fd0: 20 69 73 20 61 6e 20 65 6d 70 74 79 20 73 74 72 is an empty str
3fe0: 69 6e 67 2c 20 74 68 65 6e 20 74 68 65 20 66 6f ing, then the fo
3ff0: 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 64 65 66 61 75 llowing.** defau
4000: 6c 74 20 69 73 20 75 73 65 64 20 69 6e 73 74 65 lt is used inste
4010: 61 64 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 64 65 ad:.**.** de
4020: 66 61 75 6c 74 2d 73 72 63 20 27 73 65 6c 66 27 fault-src 'self'
4030: 20 64 61 74 61 3a 3b 0a 2a 2a 20 20 20 20 20 73 data:;.** s
4040: 63 72 69 70 74 2d 73 72 63 20 27 73 65 6c 66 27 cript-src 'self'
4050: 20 27 6e 6f 6e 63 65 2d 24 6e 6f 6e 63 65 27 3b 'nonce-$nonce';
4060: 0a 2a 2a 20 20 20 20 20 73 74 79 6c 65 2d 73 72 .** style-sr
4070: 63 20 27 73 65 6c 66 27 20 27 75 6e 73 61 66 65 c 'self' 'unsafe
4080: 2d 69 6e 6c 69 6e 65 27 3b 0a 2a 2a 0a 2a 2a 20 -inline';.**.**
4090: 54 68 65 20 74 65 78 74 20 27 24 6e 6f 6e 63 65 The text '$nonce
40a0: 27 20 69 73 20 72 65 70 6c 61 63 65 64 20 62 79 ' is replaced by
40b0: 20 73 74 79 6c 65 5f 6e 6f 6e 63 65 28 29 20 69 style_nonce() i
40c0: 66 20 61 6e 64 20 77 68 65 72 65 65 76 65 72 20 f and whereever
40d0: 69 74 0a 2a 2a 20 6f 63 63 75 72 73 20 69 6e 20 it.** occurs in
40e0: 74 68 65 20 69 6e 70 75 74 20 73 74 72 69 6e 67 the input string
40f0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 ..**.** The stri
4100: 6e 67 20 72 65 74 75 72 6e 65 64 20 69 73 20 6f ng returned is o
4110: 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 66 6f 73 btained from fos
4120: 73 69 6c 5f 6d 61 6c 6c 6f 63 28 29 20 61 6e 64 sil_malloc() and
4130: 0a 2a 2a 20 73 68 6f 75 6c 64 20 62 65 20 72 65 .** should be re
4140: 6c 65 61 73 65 64 20 62 79 20 74 68 65 20 63 61 leased by the ca
4150: 6c 6c 65 72 2e 0a 2a 2f 0a 63 68 61 72 20 2a 73 ller..*/.char *s
4160: 74 79 6c 65 5f 63 73 70 28 69 6e 74 20 74 6f 48 tyle_csp(int toH
4170: 65 61 64 65 72 29 7b 0a 20 20 73 74 61 74 69 63 eader){. static
4180: 20 63 6f 6e 73 74 20 63 68 61 72 20 7a 42 61 63 const char zBac
4190: 6b 75 70 43 53 50 5b 5d 20 3d 20 0a 20 20 20 22 kupCSP[] = . "
41a0: 64 65 66 61 75 6c 74 2d 73 72 63 20 27 73 65 6c default-src 'sel
41b0: 66 27 20 64 61 74 61 3a 3b 20 22 0a 20 20 20 22 f' data:; ". "
41c0: 73 63 72 69 70 74 2d 73 72 63 20 27 73 65 6c 66 script-src 'self
41d0: 27 20 27 6e 6f 6e 63 65 2d 24 6e 6f 6e 63 65 27 ' 'nonce-$nonce'
41e0: 3b 20 22 0a 20 20 20 22 73 74 79 6c 65 2d 73 72 ; ". "style-sr
41f0: 63 20 27 73 65 6c 66 27 20 27 75 6e 73 61 66 65 c 'self' 'unsafe
4200: 2d 69 6e 6c 69 6e 65 27 22 3b 0a 20 20 63 6f 6e -inline'";. con
4210: 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 st char *zFormat
4220: 20 3d 20 64 62 5f 67 65 74 28 22 64 65 66 61 75 = db_get("defau
4230: 6c 74 2d 63 73 70 22 2c 22 22 29 3b 0a 20 20 42 lt-csp","");. B
4240: 6c 6f 62 20 63 73 70 3b 0a 20 20 63 68 61 72 20 lob csp;. char
4250: 2a 7a 4e 6f 6e 63 65 3b 0a 20 20 63 68 61 72 20 *zNonce;. char
4260: 2a 7a 43 73 70 3b 0a 20 20 69 6e 74 20 69 3b 0a *zCsp;. int i;.
4270: 20 20 69 66 28 20 7a 46 6f 72 6d 61 74 5b 30 5d if( zFormat[0]
4280: 3d 3d 30 20 29 7b 0a 20 20 20 20 7a 46 6f 72 6d ==0 ){. zForm
4290: 61 74 20 3d 20 7a 42 61 63 6b 75 70 43 53 50 3b at = zBackupCSP;
42a0: 0a 20 20 7d 0a 20 20 62 6c 6f 62 5f 69 6e 69 74 . }. blob_init
42b0: 28 26 63 73 70 2c 20 30 2c 20 30 29 3b 0a 20 20 (&csp, 0, 0);.
42c0: 77 68 69 6c 65 28 20 7a 46 6f 72 6d 61 74 5b 30 while( zFormat[0
42d0: 5d 20 26 26 20 28 7a 4e 6f 6e 63 65 20 3d 20 73 ] && (zNonce = s
42e0: 74 72 73 74 72 28 7a 46 6f 72 6d 61 74 2c 22 24 trstr(zFormat,"$
42f0: 6e 6f 6e 63 65 22 29 29 21 3d 30 20 29 7b 0a 20 nonce"))!=0 ){.
4300: 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28 26 blob_append(&
4310: 63 73 70 2c 20 7a 46 6f 72 6d 61 74 2c 20 28 69 csp, zFormat, (i
4320: 6e 74 29 28 7a 4e 6f 6e 63 65 20 2d 20 7a 46 6f nt)(zNonce - zFo
4330: 72 6d 61 74 29 29 3b 0a 20 20 20 20 62 6c 6f 62 rmat));. blob
4340: 5f 61 70 70 65 6e 64 28 26 63 73 70 2c 20 73 74 _append(&csp, st
4350: 79 6c 65 5f 6e 6f 6e 63 65 28 29 2c 20 2d 31 29 yle_nonce(), -1)
4360: 3b 0a 20 20 20 20 7a 46 6f 72 6d 61 74 20 3d 20 ;. zFormat =
4370: 7a 4e 6f 6e 63 65 20 2b 20 36 3b 0a 20 20 7d 0a zNonce + 6;. }.
4380: 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28 26 63 blob_append(&c
4390: 73 70 2c 20 7a 46 6f 72 6d 61 74 2c 20 2d 31 29 sp, zFormat, -1)
43a0: 3b 0a 20 20 7a 43 73 70 20 3d 20 62 6c 6f 62 5f ;. zCsp = blob_
43b0: 73 74 72 28 26 63 73 70 29 3b 0a 20 20 2f 2a 20 str(&csp);. /*
43c0: 4e 6f 20 77 68 69 74 65 73 70 61 63 65 20 6f 74 No whitespace ot
43d0: 68 65 72 20 74 68 61 6e 20 61 63 74 75 61 6c 20 her than actual
43e0: 73 70 61 63 65 20 63 68 61 72 61 63 74 65 72 73 space characters
43f0: 20 61 6c 6c 6f 77 65 64 20 69 6e 20 74 68 65 20 allowed in the
4400: 43 53 50 0a 20 20 2a 2a 20 73 74 72 69 6e 67 2e CSP. ** string.
4410: 20 20 53 65 65 20 68 74 74 70 73 3a 2f 2f 66 6f See https://fo
4420: 73 73 69 6c 2d 73 63 6d 2e 6f 72 67 2f 66 6f 72 ssil-scm.org/for
4430: 75 6d 2f 66 6f 72 75 6d 70 6f 73 74 2f 64 32 39 um/forumpost/d29
4440: 65 33 61 66 34 33 63 20 2a 2f 0a 20 20 66 6f 72 e3af43c */. for
4450: 28 69 3d 30 3b 20 7a 43 73 70 5b 69 5d 3b 20 69 (i=0; zCsp[i]; i
4460: 2b 2b 29 7b 20 69 66 28 20 66 6f 73 73 69 6c 5f ++){ if( fossil_
4470: 69 73 73 70 61 63 65 28 7a 43 73 70 5b 69 5d 29 isspace(zCsp[i])
4480: 20 29 20 7a 43 73 70 5b 69 5d 20 3d 20 27 20 27 ) zCsp[i] = ' '
4490: 3b 20 7d 0a 20 20 69 66 28 20 74 6f 48 65 61 64 ; }. if( toHead
44a0: 65 72 20 29 7b 0a 20 20 20 20 63 67 69 5f 70 72 er ){. cgi_pr
44b0: 69 6e 74 66 5f 68 65 61 64 65 72 28 22 43 6f 6e intf_header("Con
44c0: 74 65 6e 74 2d 53 65 63 75 72 69 74 79 2d 50 6f tent-Security-Po
44d0: 6c 69 63 79 3a 20 25 73 5c 72 5c 6e 22 2c 20 7a licy: %s\r\n", z
44e0: 43 73 70 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 Csp);. }. retu
44f0: 72 6e 20 7a 43 73 70 3b 0a 7d 0a 0a 2f 2a 0a 2a rn zCsp;.}../*.*
4500: 2a 20 44 65 66 61 75 6c 74 20 48 54 4d 4c 20 70 * Default HTML p
4510: 61 67 65 20 68 65 61 64 65 72 20 74 65 78 74 20 age header text
4520: 74 68 72 6f 75 67 68 20 3c 62 6f 64 79 3e 2e 20 through <body>.
4530: 20 49 66 20 74 68 65 20 72 65 70 6f 73 69 74 6f If the reposito
4540: 72 79 2d 73 70 65 63 69 66 69 63 0a 2a 2a 20 68 ry-specific.** h
4550: 65 61 64 65 72 20 74 65 6d 70 6c 61 74 65 20 6c eader template l
4560: 61 63 6b 73 20 61 20 3c 62 6f 64 79 3e 20 74 61 acks a <body> ta
4570: 67 2c 20 74 68 65 6e 20 61 6c 6c 20 6f 66 20 74 g, then all of t
4580: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 73 0a he following is.
4590: 2a 2a 20 70 72 65 70 65 6e 64 65 64 2e 0a 2a 2f ** prepended..*/
45a0: 0a 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 .static const ch
45b0: 61 72 20 7a 44 66 6c 74 48 65 61 64 65 72 5b 5d ar zDfltHeader[]
45c0: 20 3d 20 0a 40 20 3c 68 74 6d 6c 3e 0a 40 20 3c = .@ <html>.@ <
45d0: 68 65 61 64 3e 0a 40 20 3c 62 61 73 65 20 68 72 head>.@ <base hr
45e0: 65 66 3d 22 24 62 61 73 65 75 72 6c 2f 24 63 75 ef="$baseurl/$cu
45f0: 72 72 65 6e 74 5f 70 61 67 65 22 20 2f 3e 0a 40 rrent_page" />.@
4600: 20 3c 6d 65 74 61 20 63 68 61 72 73 65 74 3d 22 <meta charset="
4610: 55 54 46 2d 38 22 3e 0a 40 20 3c 6d 65 74 61 20 UTF-8">.@ <meta
4620: 68 74 74 70 2d 65 71 75 69 76 3d 22 43 6f 6e 74 http-equiv="Cont
4630: 65 6e 74 2d 53 65 63 75 72 69 74 79 2d 50 6f 6c ent-Security-Pol
4640: 69 63 79 22 20 63 6f 6e 74 65 6e 74 3d 22 24 64 icy" content="$d
4650: 65 66 61 75 6c 74 5f 63 73 70 22 20 2f 3e 0a 40 efault_csp" />.@
4660: 20 3c 6d 65 74 61 20 6e 61 6d 65 3d 22 76 69 65 <meta name="vie
4670: 77 70 6f 72 74 22 20 63 6f 6e 74 65 6e 74 3d 22 wport" content="
4680: 77 69 64 74 68 3d 64 65 76 69 63 65 2d 77 69 64 width=device-wid
4690: 74 68 2c 20 69 6e 69 74 69 61 6c 2d 73 63 61 6c th, initial-scal
46a0: 65 3d 31 2e 30 22 3e 0a 40 20 3c 74 69 74 6c 65 e=1.0">.@ <title
46b0: 3e 24 3c 70 72 6f 6a 65 63 74 5f 6e 61 6d 65 3e >$<project_name>
46c0: 3a 20 24 3c 74 69 74 6c 65 3e 3c 2f 74 69 74 6c : $<title></titl
46d0: 65 3e 0a 40 20 3c 6c 69 6e 6b 20 72 65 6c 3d 22 e>.@ <link rel="
46e0: 61 6c 74 65 72 6e 61 74 65 22 20 74 79 70 65 3d alternate" type=
46f0: 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 72 73 73 "application/rss
4700: 2b 78 6d 6c 22 20 74 69 74 6c 65 3d 22 52 53 53 +xml" title="RSS
4710: 20 46 65 65 64 22 20 5c 0a 40 20 20 68 72 65 66 Feed" \.@ href
4720: 3d 22 24 68 6f 6d 65 2f 74 69 6d 65 6c 69 6e 65 ="$home/timeline
4730: 2e 72 73 73 22 20 2f 3e 0a 40 20 3c 6c 69 6e 6b .rss" />.@ <link
4740: 20 72 65 6c 3d 22 73 74 79 6c 65 73 68 65 65 74 rel="stylesheet
4750: 22 20 68 72 65 66 3d 22 24 73 74 79 6c 65 73 68 " href="$stylesh
4760: 65 65 74 5f 75 72 6c 22 20 74 79 70 65 3d 22 74 eet_url" type="t
4770: 65 78 74 2f 63 73 73 22 20 2f 3e 0a 40 20 3c 2f ext/css" />.@ </
4780: 68 65 61 64 3e 0a 40 20 3c 62 6f 64 79 20 63 6c head>.@ <body cl
4790: 61 73 73 3d 22 24 63 75 72 72 65 6e 74 5f 66 65 ass="$current_fe
47a0: 61 74 75 72 65 22 3e 0a 3b 0a 0a 2f 2a 0a 2a 2a ature">.;../*.**
47b0: 20 52 65 74 75 72 6e 73 20 74 68 65 20 64 65 66 Returns the def
47c0: 61 75 6c 74 20 70 61 67 65 20 68 65 61 64 65 72 ault page header
47d0: 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 ..*/.const char
47e0: 2a 67 65 74 5f 64 65 66 61 75 6c 74 5f 68 65 61 *get_default_hea
47f0: 64 65 72 28 29 7b 0a 20 20 72 65 74 75 72 6e 20 der(){. return
4800: 7a 44 66 6c 74 48 65 61 64 65 72 3b 0a 7d 0a 0a zDfltHeader;.}..
4810: 2f 2a 0a 2a 2a 20 47 69 76 65 6e 20 61 20 55 52 /*.** Given a UR
4820: 4c 20 70 61 74 68 2c 20 65 78 74 72 61 63 74 20 L path, extract
4830: 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e the first elemen
4840: 74 20 61 73 20 61 20 22 66 65 61 74 75 72 65 22 t as a "feature"
4850: 20 6e 61 6d 65 2c 0a 2a 2a 20 75 73 65 64 20 61 name,.** used a
4860: 73 20 74 68 65 20 3c 62 6f 64 79 20 63 6c 61 73 s the <body clas
4870: 73 3d 22 46 45 41 54 55 52 45 22 3e 20 76 61 6c s="FEATURE"> val
4880: 75 65 20 62 79 20 64 65 66 61 75 6c 74 2c 20 74 ue by default, t
4890: 68 6f 75 67 68 0a 2a 2a 20 6c 61 74 65 72 2d 72 hough.** later-r
48a0: 75 6e 6e 69 6e 67 20 63 6f 64 65 20 6d 61 79 20 unning code may
48b0: 6f 76 65 72 72 69 64 65 20 74 68 69 73 2c 20 74 override this, t
48c0: 79 70 69 63 61 6c 6c 79 20 74 6f 20 67 72 6f 75 ypically to grou
48d0: 70 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 46 6f p multiple.** Fo
48e0: 73 73 69 6c 20 55 49 20 55 52 4c 73 20 69 6e 74 ssil UI URLs int
48f0: 6f 20 61 20 73 69 6e 67 6c 65 20 22 66 65 61 74 o a single "feat
4900: 75 72 65 22 20 73 6f 20 79 6f 75 20 63 61 6e 20 ure" so you can
4910: 68 61 76 65 20 70 65 72 2d 66 65 61 74 75 72 65 have per-feature
4920: 0a 2a 2a 20 43 53 53 20 72 75 6c 65 73 2e 0a 2a .** CSS rules..*
4930: 2a 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65 *.** For example
4940: 2c 20 22 62 6f 64 79 2e 66 6f 72 75 6d 20 64 69 , "body.forum di
4950: 76 2e 6d 61 72 6b 64 6f 77 6e 20 62 6c 6f 63 6b v.markdown block
4960: 71 75 6f 74 65 22 20 74 61 72 67 65 74 73 20 6f quote" targets o
4970: 6e 6c 79 0a 2a 2a 20 62 6c 6f 63 6b 20 71 75 6f nly.** block quo
4980: 74 65 73 20 6d 61 64 65 20 69 6e 20 66 6f 72 75 tes made in foru
4990: 6d 20 70 6f 73 74 73 2c 20 6c 65 61 76 69 6e 67 m posts, leaving
49a0: 20 6f 74 68 65 72 20 4d 61 72 6b 64 6f 77 6e 20 other Markdown
49b0: 71 75 6f 74 65 73 0a 2a 2a 20 61 6c 6f 6e 65 2e quotes.** alone.
49c0: 20 20 42 65 63 61 75 73 65 20 66 65 61 74 75 72 Because featur
49d0: 65 20 63 6c 61 73 73 20 22 66 6f 72 75 6d 22 20 e class "forum"
49e0: 67 72 6f 75 70 73 20 2f 66 6f 72 75 6d 6d 61 69 groups /forummai
49f0: 6e 2c 20 2f 66 6f 72 75 6d 70 6f 73 74 2c 0a 2a n, /forumpost,.*
4a00: 2a 20 61 6e 64 20 2f 66 6f 72 75 6d 65 32 2c 20 * and /forume2,
4a10: 69 74 20 77 6f 72 6b 73 20 61 63 72 6f 73 73 20 it works across
4a20: 61 6c 6c 20 72 65 6e 64 65 72 69 6e 67 73 20 6f all renderings o
4a30: 66 20 4d 61 72 6b 64 6f 77 6e 20 74 6f 20 48 54 f Markdown to HT
4a40: 4d 4c 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68 65 ML.** within the
4a50: 20 46 6f 73 73 69 6c 20 66 6f 72 75 6d 20 66 65 Fossil forum fe
4a60: 61 74 75 72 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 ature..*/.static
4a70: 20 63 6f 6e 73 74 20 63 68 61 72 2a 20 66 65 61 const char* fea
4a80: 74 75 72 65 5f 66 72 6f 6d 5f 70 61 67 65 5f 70 ture_from_page_p
4a90: 61 74 68 28 63 6f 6e 73 74 20 63 68 61 72 20 2a ath(const char *
4aa0: 7a 50 61 74 68 29 0a 7b 0a 20 20 63 6f 6e 73 74 zPath).{. const
4ab0: 20 63 68 61 72 2a 20 7a 53 6c 61 73 68 20 3d 20 char* zSlash =
4ac0: 73 74 72 63 68 72 28 7a 50 61 74 68 2c 20 27 2f strchr(zPath, '/
4ad0: 27 29 3b 0a 20 20 69 66 20 28 7a 53 6c 61 73 68 ');. if (zSlash
4ae0: 29 20 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 66 ) {. return f
4af0: 6f 73 73 69 6c 5f 73 74 72 6e 64 75 70 28 7a 50 ossil_strndup(zP
4b00: 61 74 68 2c 20 7a 53 6c 61 73 68 20 2d 20 7a 50 ath, zSlash - zP
4b10: 61 74 68 29 3b 0a 20 20 7d 20 65 6c 73 65 20 7b ath);. } else {
4b20: 0a 20 20 20 20 72 65 74 75 72 6e 20 7a 50 61 74 . return zPat
4b30: 68 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 h;. }.}../*.**
4b40: 4f 76 65 72 72 69 64 65 20 74 68 65 20 76 61 6c Override the val
4b50: 75 65 20 6f 66 20 74 68 65 20 54 48 31 20 76 61 ue of the TH1 va
4b60: 72 69 61 62 6c 65 20 63 75 72 72 65 6e 74 5f 66 riable current_f
4b70: 65 61 74 75 72 65 2c 20 69 74 73 20 64 65 66 61 eature, its defa
4b80: 75 6c 74 0a 2a 2a 20 73 65 74 20 62 79 20 66 65 ult.** set by fe
4b90: 61 74 75 72 65 5f 66 72 6f 6d 5f 70 61 67 65 5f ature_from_page_
4ba0: 70 61 74 68 28 29 2e 20 20 57 65 20 64 6f 20 6e path(). We do n
4bb0: 6f 74 20 63 61 6c 6c 20 74 68 69 73 20 66 72 6f ot call this fro
4bc0: 6d 0a 2a 2a 20 73 74 79 6c 65 5f 69 6e 69 74 5f m.** style_init_
4bd0: 74 68 31 5f 76 61 72 73 28 29 20 62 65 63 61 75 th1_vars() becau
4be0: 73 65 20 74 68 61 74 20 75 73 65 73 20 54 68 5f se that uses Th_
4bf0: 4d 61 79 62 65 53 74 6f 72 65 28 29 20 69 6e 73 MaybeStore() ins
4c00: 74 65 61 64 20 74 6f 0a 2a 2a 20 61 6c 6c 6f 77 tead to.** allow
4c10: 20 77 65 62 70 61 67 65 20 69 6d 70 6c 65 6d 65 webpage impleme
4c20: 6e 74 61 74 69 6f 6e 73 20 74 6f 20 63 61 6c 6c ntations to call
4c30: 20 74 68 69 73 20 62 65 66 6f 72 65 20 73 74 79 this before sty
4c40: 6c 65 5f 68 65 61 64 65 72 28 29 0a 2a 2a 20 74 le_header().** t
4c50: 6f 20 6f 76 65 72 72 69 64 65 20 74 68 61 74 20 o override that
4c60: 22 6d 61 79 62 65 22 20 64 65 66 61 75 6c 74 20 "maybe" default
4c70: 77 69 74 68 20 73 6f 6d 65 74 68 69 6e 67 20 62 with something b
4c80: 65 74 74 65 72 2e 0a 2a 2f 0a 76 6f 69 64 20 73 etter..*/.void s
4c90: 74 79 6c 65 5f 73 65 74 5f 63 75 72 72 65 6e 74 tyle_set_current
4ca0: 5f 66 65 61 74 75 72 65 28 63 6f 6e 73 74 20 63 _feature(const c
4cb0: 68 61 72 2a 20 7a 46 65 61 74 75 72 65 29 0a 7b har* zFeature).{
4cc0: 0a 20 20 54 68 5f 53 74 6f 72 65 28 22 63 75 72 . Th_Store("cur
4cd0: 72 65 6e 74 5f 66 65 61 74 75 72 65 22 2c 20 7a rent_feature", z
4ce0: 46 65 61 74 75 72 65 29 3b 0a 7d 0a 0a 2f 2a 0a Feature);.}../*.
4cf0: 2a 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 61 6c ** Initialize al
4d00: 6c 20 74 68 65 20 64 65 66 61 75 6c 74 20 54 48 l the default TH
4d10: 31 20 76 61 72 69 61 62 6c 65 73 0a 2a 2f 0a 73 1 variables.*/.s
4d20: 74 61 74 69 63 20 76 6f 69 64 20 73 74 79 6c 65 tatic void style
4d30: 5f 69 6e 69 74 5f 74 68 31 5f 76 61 72 73 28 63 _init_th1_vars(c
4d40: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 69 74 6c onst char *zTitl
4d50: 65 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 e){. const char
4d60: 20 2a 7a 4e 6f 6e 63 65 20 3d 20 73 74 79 6c 65 *zNonce = style
4d70: 5f 6e 6f 6e 63 65 28 29 3b 0a 20 20 63 68 61 72 _nonce();. char
4d80: 20 2a 7a 44 66 6c 74 43 73 70 3b 0a 0a 20 20 7a *zDfltCsp;.. z
4d90: 44 66 6c 74 43 73 70 20 3d 20 73 74 79 6c 65 5f DfltCsp = style_
4da0: 63 73 70 28 31 29 3b 0a 20 20 2f 2a 0a 20 20 2a csp(1);. /*. *
4db0: 2a 20 44 6f 20 6e 6f 74 20 6f 76 65 72 77 72 69 * Do not overwri
4dc0: 74 65 20 74 68 65 20 54 48 31 20 76 61 72 69 61 te the TH1 varia
4dd0: 62 6c 65 20 22 64 65 66 61 75 6c 74 5f 63 73 70 ble "default_csp
4de0: 22 20 69 66 20 69 74 20 65 78 69 73 74 73 2c 20 " if it exists,
4df0: 61 73 20 74 68 69 73 0a 20 20 2a 2a 20 61 6c 6c as this. ** all
4e00: 6f 77 73 20 69 74 20 74 6f 20 62 65 20 70 72 6f ows it to be pro
4e10: 70 65 72 6c 79 20 6f 76 65 72 72 69 64 64 65 6e perly overridden
4e20: 20 76 69 61 20 74 68 65 20 54 48 31 20 73 65 74 via the TH1 set
4e30: 75 70 20 73 63 72 69 70 74 20 28 69 2e 65 2e 20 up script (i.e.
4e40: 69 74 0a 20 20 2a 2a 20 69 73 20 65 76 61 6c 75 it. ** is evalu
4e50: 61 74 65 64 20 62 65 66 6f 72 65 20 74 68 65 20 ated before the
4e60: 68 65 61 64 65 72 20 69 73 20 72 65 6e 64 65 72 header is render
4e70: 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 54 68 5f 4d ed).. */. Th_M
4e80: 61 79 62 65 53 74 6f 72 65 28 22 64 65 66 61 75 aybeStore("defau
4e90: 6c 74 5f 63 73 70 22 2c 20 7a 44 66 6c 74 43 73 lt_csp", zDfltCs
4ea0: 70 29 3b 0a 20 20 66 6f 73 73 69 6c 5f 66 72 65 p);. fossil_fre
4eb0: 65 28 7a 44 66 6c 74 43 73 70 29 3b 0a 20 20 54 e(zDfltCsp);. T
4ec0: 68 5f 53 74 6f 72 65 28 22 6e 6f 6e 63 65 22 2c h_Store("nonce",
4ed0: 20 7a 4e 6f 6e 63 65 29 3b 0a 20 20 54 68 5f 53 zNonce);. Th_S
4ee0: 74 6f 72 65 28 22 70 72 6f 6a 65 63 74 5f 6e 61 tore("project_na
4ef0: 6d 65 22 2c 20 64 62 5f 67 65 74 28 22 70 72 6f me", db_get("pro
4f00: 6a 65 63 74 2d 6e 61 6d 65 22 2c 22 55 6e 6e 61 ject-name","Unna
4f10: 6d 65 64 20 46 6f 73 73 69 6c 20 50 72 6f 6a 65 med Fossil Proje
4f20: 63 74 22 29 29 3b 0a 20 20 54 68 5f 53 74 6f 72 ct"));. Th_Stor
4f30: 65 28 22 70 72 6f 6a 65 63 74 5f 64 65 73 63 72 e("project_descr
4f40: 69 70 74 69 6f 6e 22 2c 20 64 62 5f 67 65 74 28 iption", db_get(
4f50: 22 70 72 6f 6a 65 63 74 2d 64 65 73 63 72 69 70 "project-descrip
4f60: 74 69 6f 6e 22 2c 22 22 29 29 3b 0a 20 20 69 66 tion",""));. if
4f70: 28 20 7a 54 69 74 6c 65 20 29 20 54 68 5f 53 74 ( zTitle ) Th_St
4f80: 6f 72 65 28 22 74 69 74 6c 65 22 2c 20 7a 54 69 ore("title", zTi
4f90: 74 6c 65 29 3b 0a 20 20 54 68 5f 53 74 6f 72 65 tle);. Th_Store
4fa0: 28 22 62 61 73 65 75 72 6c 22 2c 20 67 2e 7a 42 ("baseurl", g.zB
4fb0: 61 73 65 55 52 4c 29 3b 0a 20 20 54 68 5f 53 74 aseURL);. Th_St
4fc0: 6f 72 65 28 22 73 65 63 75 72 65 75 72 6c 22 2c ore("secureurl",
4fd0: 20 66 6f 73 73 69 6c 5f 77 61 6e 74 73 5f 68 74 fossil_wants_ht
4fe0: 74 70 73 28 31 29 3f 20 67 2e 7a 48 74 74 70 73 tps(1)? g.zHttps
4ff0: 55 52 4c 3a 20 67 2e 7a 42 61 73 65 55 52 4c 29 URL: g.zBaseURL)
5000: 3b 0a 20 20 54 68 5f 53 74 6f 72 65 28 22 68 6f ;. Th_Store("ho
5010: 6d 65 22 2c 20 67 2e 7a 54 6f 70 29 3b 0a 20 20 me", g.zTop);.
5020: 54 68 5f 53 74 6f 72 65 28 22 69 6e 64 65 78 5f Th_Store("index_
5030: 70 61 67 65 22 2c 20 64 62 5f 67 65 74 28 22 69 page", db_get("i
5040: 6e 64 65 78 2d 70 61 67 65 22 2c 22 2f 68 6f 6d ndex-page","/hom
5050: 65 22 29 29 3b 0a 20 20 69 66 28 20 6c 6f 63 61 e"));. if( loca
5060: 6c 5f 7a 43 75 72 72 65 6e 74 50 61 67 65 3d 3d l_zCurrentPage==
5070: 30 20 29 20 73 74 79 6c 65 5f 73 65 74 5f 63 75 0 ) style_set_cu
5080: 72 72 65 6e 74 5f 70 61 67 65 28 22 25 54 22 2c rrent_page("%T",
5090: 20 67 2e 7a 50 61 74 68 29 3b 0a 20 20 54 68 5f g.zPath);. Th_
50a0: 53 74 6f 72 65 28 22 63 75 72 72 65 6e 74 5f 70 Store("current_p
50b0: 61 67 65 22 2c 20 6c 6f 63 61 6c 5f 7a 43 75 72 age", local_zCur
50c0: 72 65 6e 74 50 61 67 65 29 3b 0a 20 20 54 68 5f rentPage);. Th_
50d0: 53 74 6f 72 65 28 22 63 73 72 66 5f 74 6f 6b 65 Store("csrf_toke
50e0: 6e 22 2c 20 67 2e 7a 43 73 72 66 54 6f 6b 65 6e n", g.zCsrfToken
50f0: 29 3b 0a 20 20 54 68 5f 53 74 6f 72 65 28 22 72 );. Th_Store("r
5100: 65 6c 65 61 73 65 5f 76 65 72 73 69 6f 6e 22 2c elease_version",
5110: 20 52 45 4c 45 41 53 45 5f 56 45 52 53 49 4f 4e RELEASE_VERSION
5120: 29 3b 0a 20 20 54 68 5f 53 74 6f 72 65 28 22 6d );. Th_Store("m
5130: 61 6e 69 66 65 73 74 5f 76 65 72 73 69 6f 6e 22 anifest_version"
5140: 2c 20 4d 41 4e 49 46 45 53 54 5f 56 45 52 53 49 , MANIFEST_VERSI
5150: 4f 4e 29 3b 0a 20 20 54 68 5f 53 74 6f 72 65 28 ON);. Th_Store(
5160: 22 6d 61 6e 69 66 65 73 74 5f 64 61 74 65 22 2c "manifest_date",
5170: 20 4d 41 4e 49 46 45 53 54 5f 44 41 54 45 29 3b MANIFEST_DATE);
5180: 0a 20 20 54 68 5f 53 74 6f 72 65 28 22 63 6f 6d . Th_Store("com
5190: 70 69 6c 65 72 5f 6e 61 6d 65 22 2c 20 43 4f 4d piler_name", COM
51a0: 50 49 4c 45 52 5f 4e 41 4d 45 29 3b 0a 20 20 75 PILER_NAME);. u
51b0: 72 6c 5f 76 61 72 28 22 73 74 79 6c 65 73 68 65 rl_var("styleshe
51c0: 65 74 22 2c 20 22 63 73 73 22 2c 20 22 73 74 79 et", "css", "sty
51d0: 6c 65 2e 63 73 73 22 29 3b 0a 20 20 69 6d 61 67 le.css");. imag
51e0: 65 5f 75 72 6c 5f 76 61 72 28 22 6c 6f 67 6f 22 e_url_var("logo"
51f0: 29 3b 0a 20 20 69 6d 61 67 65 5f 75 72 6c 5f 76 );. image_url_v
5200: 61 72 28 22 62 61 63 6b 67 72 6f 75 6e 64 22 29 ar("background")
5210: 3b 0a 20 20 69 66 28 20 21 6c 6f 67 69 6e 5f 69 ;. if( !login_i
5220: 73 5f 6e 6f 62 6f 64 79 28 29 20 29 7b 0a 20 20 s_nobody() ){.
5230: 20 20 54 68 5f 53 74 6f 72 65 28 22 6c 6f 67 69 Th_Store("logi
5240: 6e 22 2c 20 67 2e 7a 4c 6f 67 69 6e 29 3b 0a 20 n", g.zLogin);.
5250: 20 7d 0a 20 20 54 68 5f 4d 61 79 62 65 53 74 6f }. Th_MaybeSto
5260: 72 65 28 22 63 75 72 72 65 6e 74 5f 66 65 61 74 re("current_feat
5270: 75 72 65 22 2c 20 66 65 61 74 75 72 65 5f 66 72 ure", feature_fr
5280: 6f 6d 5f 70 61 67 65 5f 70 61 74 68 28 6c 6f 63 om_page_path(loc
5290: 61 6c 5f 7a 43 75 72 72 65 6e 74 50 61 67 65 29 al_zCurrentPage)
52a0: 20 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 72 61 );.}../*.** Dra
52b0: 77 20 74 68 65 20 68 65 61 64 65 72 2e 0a 2a 2f w the header..*/
52c0: 0a 76 6f 69 64 20 73 74 79 6c 65 5f 68 65 61 64 .void style_head
52d0: 65 72 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a er(const char *z
52e0: 54 69 74 6c 65 46 6f 72 6d 61 74 2c 20 2e 2e 2e TitleFormat, ...
52f0: 29 7b 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b ){. va_list ap;
5300: 0a 20 20 63 68 61 72 20 2a 7a 54 69 74 6c 65 3b . char *zTitle;
5310: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a . const char *z
5320: 48 65 61 64 65 72 20 3d 20 73 6b 69 6e 5f 67 65 Header = skin_ge
5330: 74 28 22 68 65 61 64 65 72 22 29 3b 0a 20 20 6c t("header");. l
5340: 6f 67 69 6e 5f 63 68 65 63 6b 5f 63 72 65 64 65 ogin_check_crede
5350: 6e 74 69 61 6c 73 28 29 3b 0a 0a 20 20 76 61 5f ntials();.. va_
5360: 73 74 61 72 74 28 61 70 2c 20 7a 54 69 74 6c 65 start(ap, zTitle
5370: 46 6f 72 6d 61 74 29 3b 0a 20 20 7a 54 69 74 6c Format);. zTitl
5380: 65 20 3d 20 76 6d 70 72 69 6e 74 66 28 7a 54 69 e = vmprintf(zTi
5390: 74 6c 65 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a tleFormat, ap);.
53a0: 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 0a 20 va_end(ap);..
53b0: 20 63 67 69 5f 64 65 73 74 69 6e 61 74 69 6f 6e cgi_destination
53c0: 28 43 47 49 5f 48 45 41 44 45 52 29 3b 0a 0a 20 (CGI_HEADER);..
53d0: 20 40 20 3c 21 44 4f 43 54 59 50 45 20 68 74 6d @ <!DOCTYPE htm
53e0: 6c 3e 0a 0a 20 20 69 66 28 20 67 2e 74 68 54 72 l>.. if( g.thTr
53f0: 61 63 65 20 29 20 54 68 5f 54 72 61 63 65 28 22 ace ) Th_Trace("
5400: 42 45 47 49 4e 5f 48 45 41 44 45 52 3c 62 72 20 BEGIN_HEADER<br
5410: 2f 3e 5c 6e 22 2c 20 2d 31 29 3b 0a 0a 20 20 2f />\n", -1);.. /
5420: 2a 20 47 65 6e 65 72 61 74 65 20 74 68 65 20 68 * Generate the h
5430: 65 61 64 65 72 20 75 70 20 74 68 72 6f 75 67 68 eader up through
5440: 20 74 68 65 20 6d 61 69 6e 20 6d 65 6e 75 20 2a the main menu *
5450: 2f 0a 20 20 73 74 79 6c 65 5f 69 6e 69 74 5f 74 /. style_init_t
5460: 68 31 5f 76 61 72 73 28 7a 54 69 74 6c 65 29 3b h1_vars(zTitle);
5470: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 73 . if( sqlite3_s
5480: 74 72 6c 69 6b 65 28 22 25 3c 62 6f 64 79 25 22 trlike("%<body%"
5490: 2c 20 7a 48 65 61 64 65 72 2c 20 30 29 21 3d 30 , zHeader, 0)!=0
54a0: 20 29 7b 0a 20 20 20 20 54 68 5f 52 65 6e 64 65 ){. Th_Rende
54b0: 72 28 7a 44 66 6c 74 48 65 61 64 65 72 29 3b 0a r(zDfltHeader);.
54c0: 20 20 7d 0a 20 20 69 66 28 20 67 2e 74 68 54 72 }. if( g.thTr
54d0: 61 63 65 20 29 20 54 68 5f 54 72 61 63 65 28 22 ace ) Th_Trace("
54e0: 42 45 47 49 4e 5f 48 45 41 44 45 52 5f 53 43 52 BEGIN_HEADER_SCR
54f0: 49 50 54 3c 62 72 20 2f 3e 5c 6e 22 2c 20 2d 31 IPT<br />\n", -1
5500: 29 3b 0a 20 20 54 68 5f 52 65 6e 64 65 72 28 7a );. Th_Render(z
5510: 48 65 61 64 65 72 29 3b 0a 20 20 69 66 28 20 67 Header);. if( g
5520: 2e 74 68 54 72 61 63 65 20 29 20 54 68 5f 54 72 .thTrace ) Th_Tr
5530: 61 63 65 28 22 45 4e 44 5f 48 45 41 44 45 52 3c ace("END_HEADER<
5540: 62 72 20 2f 3e 5c 6e 22 2c 20 2d 31 29 3b 0a 20 br />\n", -1);.
5550: 20 54 68 5f 55 6e 73 74 6f 72 65 28 22 74 69 74 Th_Unstore("tit
5560: 6c 65 22 29 3b 20 20 20 2f 2a 20 41 76 6f 69 64 le"); /* Avoid
5570: 20 63 6f 6c 6c 69 73 69 6f 6e 73 20 77 69 74 68 collisions with
5580: 20 74 69 63 6b 65 74 20 66 69 65 6c 64 20 6e 61 ticket field na
5590: 6d 65 73 20 2a 2f 0a 20 20 63 67 69 5f 64 65 73 mes */. cgi_des
55a0: 74 69 6e 61 74 69 6f 6e 28 43 47 49 5f 42 4f 44 tination(CGI_BOD
55b0: 59 29 3b 0a 20 20 67 2e 63 67 69 4f 75 74 70 75 Y);. g.cgiOutpu
55c0: 74 20 3d 20 31 3b 0a 20 20 68 65 61 64 65 72 48 t = 1;. headerH
55d0: 61 73 42 65 65 6e 47 65 6e 65 72 61 74 65 64 20 asBeenGenerated
55e0: 3d 20 31 3b 0a 20 20 73 69 64 65 62 6f 78 55 73 = 1;. sideboxUs
55f0: 65 64 20 3d 20 30 3b 0a 20 20 69 66 28 20 67 2e ed = 0;. if( g.
5600: 70 65 72 6d 2e 44 65 62 75 67 20 26 26 20 50 28 perm.Debug && P(
5610: 22 73 68 6f 77 71 70 22 29 20 29 7b 0a 20 20 20 "showqp") ){.
5620: 20 40 20 3c 64 69 76 20 63 6c 61 73 73 3d 22 64 @ <div class="d
5630: 65 62 75 67 22 3e 0a 20 20 20 20 63 67 69 5f 70 ebug">. cgi_p
5640: 72 69 6e 74 5f 61 6c 6c 28 30 2c 20 30 29 3b 0a rint_all(0, 0);.
5650: 20 20 20 20 40 20 3c 2f 64 69 76 3e 0a 20 20 7d @ </div>. }
5660: 0a 7d 0a 0a 23 69 66 20 49 4e 54 45 52 46 41 43 .}..#if INTERFAC
5670: 45 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 70 61 72 E./* Allowed par
5680: 61 6d 65 74 65 72 73 20 66 6f 72 20 73 74 79 6c ameters for styl
5690: 65 5f 61 64 75 6e 69 74 28 29 20 2a 2f 0a 23 64 e_adunit() */.#d
56a0: 65 66 69 6e 65 20 41 44 55 4e 49 54 5f 4f 46 46 efine ADUNIT_OFF
56b0: 20 20 20 20 20 20 20 20 30 78 30 30 30 31 20 20 0x0001
56c0: 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 61 /* Do not a
56d0: 6c 6c 6f 77 20 61 64 73 20 6f 6e 20 74 68 69 73 llow ads on this
56e0: 20 70 61 67 65 20 2a 2f 0a 23 64 65 66 69 6e 65 page */.#define
56f0: 20 41 44 55 4e 49 54 5f 52 49 47 48 54 5f 4f 4b ADUNIT_RIGHT_OK
5700: 20 20 20 30 78 30 30 30 32 20 20 20 20 20 20 20 0x0002
5710: 2f 2a 20 52 69 67 68 74 2d 73 69 64 65 20 76 65 /* Right-side ve
5720: 72 74 69 63 61 6c 20 61 64 73 20 6f 6b 20 68 65 rtical ads ok he
5730: 72 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a re */.#endif../*
5740: 0a 2a 2a 20 56 61 72 69 6f 75 73 20 70 61 67 65 .** Various page
5750: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 implementations
5760: 20 63 61 6e 20 69 6e 76 6f 6b 65 20 74 68 69 73 can invoke this
5770: 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 6c 65 interface to le
5780: 74 20 74 68 65 0a 2a 2a 20 73 74 79 6c 65 20 6d t the.** style m
5790: 61 6e 61 67 65 72 20 6b 6e 6f 77 20 77 68 61 74 anager know what
57a0: 20 6b 69 6e 64 73 20 6f 66 20 61 64 73 20 61 72 kinds of ads ar
57b0: 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f e appropriate fo
57c0: 72 20 74 68 69 73 20 70 61 67 65 2e 0a 2a 2f 0a r this page..*/.
57d0: 76 6f 69 64 20 73 74 79 6c 65 5f 61 64 75 6e 69 void style_aduni
57e0: 74 5f 63 6f 6e 66 69 67 28 75 6e 73 69 67 6e 65 t_config(unsigne
57f0: 64 20 69 6e 74 20 6d 46 6c 61 67 73 29 7b 0a 20 d int mFlags){.
5800: 20 61 64 55 6e 69 74 46 6c 61 67 73 20 3d 20 6d adUnitFlags = m
5810: 46 6c 61 67 73 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 Flags;.}../*.**
5820: 52 65 74 75 72 6e 20 74 68 65 20 74 65 78 74 20 Return the text
5830: 6f 66 20 61 6e 20 61 64 2d 75 6e 69 74 2c 20 69 of an ad-unit, i
5840: 66 20 6f 6e 65 20 73 68 6f 75 6c 64 20 62 65 20 f one should be
5850: 72 65 6e 64 65 72 65 64 2e 20 20 52 65 74 75 72 rendered. Retur
5860: 6e 0a 2a 2a 20 4e 55 4c 4c 20 69 66 20 6e 6f 20 n.** NULL if no
5870: 61 64 2d 75 6e 69 74 20 69 73 20 64 65 73 69 72 ad-unit is desir
5880: 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 2a 70 ed..**.** The *p
5890: 41 64 46 6c 61 67 20 76 61 6c 75 65 20 6d 69 67 AdFlag value mig
58a0: 68 74 20 62 65 20 73 65 74 20 74 6f 20 41 44 55 ht be set to ADU
58b0: 4e 49 54 5f 52 49 47 48 54 5f 4f 4b 20 69 66 20 NIT_RIGHT_OK if
58c0: 74 68 69 73 20 69 73 0a 2a 2a 20 61 20 72 69 67 this is.** a rig
58d0: 68 74 2d 68 61 6e 64 20 76 65 72 74 69 63 61 6c ht-hand vertical
58e0: 20 61 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 ad..*/.static c
58f0: 6f 6e 73 74 20 63 68 61 72 20 2a 73 74 79 6c 65 onst char *style
5900: 5f 61 64 75 6e 69 74 5f 74 65 78 74 28 75 6e 73 _adunit_text(uns
5910: 69 67 6e 65 64 20 69 6e 74 20 2a 70 41 64 46 6c igned int *pAdFl
5920: 61 67 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 ag){. const cha
5930: 72 20 2a 7a 41 64 20 3d 20 30 3b 0a 20 20 2a 70 r *zAd = 0;. *p
5940: 41 64 46 6c 61 67 20 3d 20 30 3b 0a 20 20 69 66 AdFlag = 0;. if
5950: 28 20 61 64 55 6e 69 74 46 6c 61 67 73 20 26 20 ( adUnitFlags &
5960: 41 44 55 4e 49 54 5f 4f 46 46 20 29 20 72 65 74 ADUNIT_OFF ) ret
5970: 75 72 6e 20 30 3b 20 20 2f 2a 20 44 69 73 61 6c urn 0; /* Disal
5980: 6c 6f 77 20 61 64 73 20 6f 6e 20 74 68 69 73 20 low ads on this
5990: 70 61 67 65 20 2a 2f 0a 20 20 69 66 28 20 64 62 page */. if( db
59a0: 5f 67 65 74 5f 62 6f 6f 6c 65 61 6e 28 22 61 64 _get_boolean("ad
59b0: 75 6e 69 74 2d 64 69 73 61 62 6c 65 22 2c 30 29 unit-disable",0)
59c0: 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 69 ) return 0;. i
59d0: 66 28 20 67 2e 70 65 72 6d 2e 41 64 6d 69 6e 20 f( g.perm.Admin
59e0: 26 26 20 64 62 5f 67 65 74 5f 62 6f 6f 6c 65 61 && db_get_boolea
59f0: 6e 28 22 61 64 75 6e 69 74 2d 6f 6d 69 74 2d 69 n("adunit-omit-i
5a00: 66 2d 61 64 6d 69 6e 22 2c 30 29 20 29 7b 0a 20 f-admin",0) ){.
5a10: 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d return 0;. }
5a20: 0a 20 20 69 66 28 20 21 6c 6f 67 69 6e 5f 69 73 . if( !login_is
5a30: 5f 6e 6f 62 6f 64 79 28 29 0a 20 20 20 26 26 20 _nobody(). &&
5a40: 66 6f 73 73 69 6c 5f 73 74 72 63 6d 70 28 67 2e fossil_strcmp(g.
5a50: 7a 4c 6f 67 69 6e 2c 22 61 6e 6f 6e 79 6d 6f 75 zLogin,"anonymou
5a60: 73 22 29 21 3d 30 0a 20 20 20 26 26 20 64 62 5f s")!=0. && db_
5a70: 67 65 74 5f 62 6f 6f 6c 65 61 6e 28 22 61 64 75 get_boolean("adu
5a80: 6e 69 74 2d 6f 6d 69 74 2d 69 66 2d 75 73 65 72 nit-omit-if-user
5a90: 22 2c 30 29 0a 20 20 29 7b 0a 20 20 20 20 72 65 ",0). ){. re
5aa0: 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 69 66 turn 0;. }. if
5ab0: 28 20 28 61 64 55 6e 69 74 46 6c 61 67 73 20 26 ( (adUnitFlags &
5ac0: 20 41 44 55 4e 49 54 5f 52 49 47 48 54 5f 4f 4b ADUNIT_RIGHT_OK
5ad0: 29 21 3d 30 0a 20 20 20 26 26 20 21 66 6f 73 73 )!=0. && !foss
5ae0: 69 6c 5f 61 6c 6c 5f 77 68 69 74 65 73 70 61 63 il_all_whitespac
5af0: 65 28 7a 41 64 20 3d 20 64 62 5f 67 65 74 28 22 e(zAd = db_get("
5b00: 61 64 75 6e 69 74 2d 72 69 67 68 74 22 2c 20 30 adunit-right", 0
5b10: 29 29 0a 20 20 20 26 26 20 21 63 67 69 5f 62 6f )). && !cgi_bo
5b20: 64 79 5f 63 6f 6e 74 61 69 6e 73 28 22 3c 74 61 dy_contains("<ta
5b30: 62 6c 65 22 29 0a 20 20 29 7b 0a 20 20 20 20 2a ble"). ){. *
5b40: 70 41 64 46 6c 61 67 20 3d 20 41 44 55 4e 49 54 pAdFlag = ADUNIT
5b50: 5f 52 49 47 48 54 5f 4f 4b 3b 0a 20 20 20 20 72 _RIGHT_OK;. r
5b60: 65 74 75 72 6e 20 7a 41 64 3b 0a 20 20 7d 65 6c eturn zAd;. }el
5b70: 73 65 20 69 66 28 20 21 66 6f 73 73 69 6c 5f 61 se if( !fossil_a
5b80: 6c 6c 5f 77 68 69 74 65 73 70 61 63 65 28 7a 41 ll_whitespace(zA
5b90: 64 20 3d 20 64 62 5f 67 65 74 28 22 61 64 75 6e d = db_get("adun
5ba0: 69 74 22 2c 30 29 29 20 29 7b 0a 20 20 20 20 72 it",0)) ){. r
5bb0: 65 74 75 72 6e 20 7a 41 64 3b 0a 20 20 7d 0a 20 eturn zAd;. }.
5bc0: 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a return 0;.}../*
5bd0: 0a 2a 2a 20 49 6e 64 69 63 61 74 65 20 74 68 61 .** Indicate tha
5be0: 74 20 74 68 65 20 74 61 62 6c 65 2d 73 6f 72 74 t the table-sort
5bf0: 69 6e 67 20 6a 61 76 61 73 63 72 69 70 74 20 69 ing javascript i
5c00: 73 20 6e 65 65 64 65 64 2e 0a 2a 2f 0a 76 6f 69 s needed..*/.voi
5c10: 64 20 73 74 79 6c 65 5f 74 61 62 6c 65 5f 73 6f d style_table_so
5c20: 72 74 65 72 28 76 6f 69 64 29 7b 0a 20 20 62 75 rter(void){. bu
5c30: 69 6c 74 69 6e 5f 72 65 71 75 65 73 74 5f 6a 73 iltin_request_js
5c40: 28 22 73 6f 72 74 74 61 62 6c 65 2e 6a 73 22 29 ("sorttable.js")
5c50: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e 65 72 ;.}../*.** Gener
5c60: 61 74 65 20 63 6f 64 65 20 74 6f 20 6c 6f 61 64 ate code to load
5c70: 20 61 6c 6c 20 72 65 71 75 69 72 65 64 20 6a 61 all required ja
5c80: 76 61 73 63 72 69 70 74 20 66 69 6c 65 73 2e 0a vascript files..
5c90: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73 */.static void s
5ca0: 74 79 6c 65 5f 6c 6f 61 64 5f 61 6c 6c 5f 6a 73 tyle_load_all_js
5cb0: 5f 66 69 6c 65 73 28 76 6f 69 64 29 7b 0a 20 20 _files(void){.
5cc0: 69 66 28 20 6e 65 65 64 48 72 65 66 4a 73 20 26 if( needHrefJs &
5cd0: 26 20 67 2e 70 65 72 6d 2e 48 79 70 65 72 6c 69 & g.perm.Hyperli
5ce0: 6e 6b 20 29 7b 0a 20 20 20 20 69 6e 74 20 6e 44 nk ){. int nD
5cf0: 65 6c 61 79 20 3d 20 64 62 5f 67 65 74 5f 69 6e elay = db_get_in
5d00: 74 28 22 61 75 74 6f 2d 68 79 70 65 72 6c 69 6e t("auto-hyperlin
5d10: 6b 2d 64 65 6c 61 79 22 2c 30 29 3b 0a 20 20 20 k-delay",0);.
5d20: 20 69 6e 74 20 62 4d 6f 75 73 65 6f 76 65 72 20 int bMouseover
5d30: 3d 20 64 62 5f 67 65 74 5f 62 6f 6f 6c 65 61 6e = db_get_boolean
5d40: 28 22 61 75 74 6f 2d 68 79 70 65 72 6c 69 6e 6b ("auto-hyperlink
5d50: 2d 6d 6f 75 73 65 6f 76 65 72 22 2c 30 29 3b 0a -mouseover",0);.
5d60: 20 20 20 20 40 20 3c 73 63 72 69 70 74 20 69 64 @ <script id
5d70: 3d 27 68 72 65 66 2d 64 61 74 61 27 20 74 79 70 ='href-data' typ
5d80: 65 3d 27 61 70 70 6c 69 63 61 74 69 6f 6e 2f 6a e='application/j
5d90: 73 6f 6e 27 3e 5c 0a 20 20 20 20 40 20 7b 22 64 son'>\. @ {"d
5da0: 65 6c 61 79 22 3a 25 64 28 6e 44 65 6c 61 79 29 elay":%d(nDelay)
5db0: 2c 22 6d 6f 75 73 65 6f 76 65 72 22 3a 25 64 28 ,"mouseover":%d(
5dc0: 62 4d 6f 75 73 65 6f 76 65 72 29 7d 3c 2f 73 63 bMouseover)}</sc
5dd0: 72 69 70 74 3e 0a 20 20 7d 0a 20 20 40 20 3c 73 ript>. }. @ <s
5de0: 63 72 69 70 74 20 6e 6f 6e 63 65 3d 22 25 68 28 cript nonce="%h(
5df0: 73 74 79 6c 65 5f 6e 6f 6e 63 65 28 29 29 22 3e style_nonce())">
5e00: 2f 2a 20 73 74 79 6c 65 2e 63 3a 25 64 28 5f 5f /* style.c:%d(__
5e10: 4c 49 4e 45 5f 5f 29 20 2a 2f 0a 20 20 40 20 66 LINE__) */. @ f
5e20: 75 6e 63 74 69 6f 6e 20 64 65 62 75 67 4d 73 67 unction debugMsg
5e30: 28 6d 73 67 29 7b 0a 20 20 40 20 76 61 72 20 6e (msg){. @ var n
5e40: 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 67 65 74 45 = document.getE
5e50: 6c 65 6d 65 6e 74 42 79 49 64 28 22 64 65 62 75 lementById("debu
5e60: 67 4d 73 67 22 29 3b 0a 20 20 40 20 69 66 28 6e gMsg");. @ if(n
5e70: 29 7b 6e 2e 74 65 78 74 43 6f 6e 74 65 6e 74 3d ){n.textContent=
5e80: 6d 73 67 3b 7d 0a 20 20 40 20 7d 0a 20 20 69 66 msg;}. @ }. if
5e90: 28 20 6e 65 65 64 48 72 65 66 4a 73 20 26 26 20 ( needHrefJs &&
5ea0: 67 2e 70 65 72 6d 2e 48 79 70 65 72 6c 69 6e 6b g.perm.Hyperlink
5eb0: 20 29 7b 0a 20 20 20 20 40 20 2f 2a 20 68 72 65 ){. @ /* hre
5ec0: 66 2e 6a 73 20 2a 2f 0a 20 20 20 20 63 67 69 5f f.js */. cgi_
5ed0: 61 70 70 65 6e 64 5f 63 6f 6e 74 65 6e 74 28 62 append_content(b
5ee0: 75 69 6c 74 69 6e 5f 74 65 78 74 28 22 68 72 65 uiltin_text("hre
5ef0: 66 2e 6a 73 22 29 2c 2d 31 29 3b 0a 20 20 7d 0a f.js"),-1);. }.
5f00: 20 20 69 66 28 20 62 6c 6f 62 5f 73 69 7a 65 28 if( blob_size(
5f10: 26 62 6c 6f 62 4f 6e 4c 6f 61 64 29 3e 30 20 29 &blobOnLoad)>0 )
5f20: 7b 0a 20 20 20 20 40 20 77 69 6e 64 6f 77 2e 6f {. @ window.o
5f30: 6e 6c 6f 61 64 20 3d 20 66 75 6e 63 74 69 6f 6e nload = function
5f40: 28 29 7b 0a 20 20 20 20 63 67 69 5f 61 70 70 65 (){. cgi_appe
5f50: 6e 64 5f 63 6f 6e 74 65 6e 74 28 62 6c 6f 62 5f nd_content(blob_
5f60: 62 75 66 66 65 72 28 26 62 6c 6f 62 4f 6e 4c 6f buffer(&blobOnLo
5f70: 61 64 29 2c 20 62 6c 6f 62 5f 73 69 7a 65 28 26 ad), blob_size(&
5f80: 62 6c 6f 62 4f 6e 4c 6f 61 64 29 29 3b 0a 20 20 blobOnLoad));.
5f90: 20 20 63 67 69 5f 61 70 70 65 6e 64 5f 63 6f 6e cgi_append_con
5fa0: 74 65 6e 74 28 22 5c 6e 7d 5c 6e 22 2c 20 2d 31 tent("\n}\n", -1
5fb0: 29 3b 0a 20 20 7d 0a 20 20 40 20 3c 2f 73 63 72 );. }. @ </scr
5fc0: 69 70 74 3e 0a 20 20 62 75 69 6c 74 69 6e 5f 66 ipt>. builtin_f
5fd0: 75 6c 66 69 6c 6c 5f 6a 73 5f 72 65 71 75 65 73 ulfill_js_reques
5fe0: 74 73 28 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 ts();.}../*.** I
5ff0: 6e 76 6f 6b 65 20 74 68 69 73 20 72 6f 75 74 69 nvoke this routi
6000: 6e 65 20 61 66 74 65 72 20 61 6c 6c 20 6f 66 20 ne after all of
6010: 74 68 65 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20 the content for
6020: 61 20 77 65 62 70 61 67 65 20 68 61 73 20 62 65 a webpage has be
6030: 65 6e 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64 2e en.** generated.
6040: 20 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73 This routine s
6050: 68 6f 75 6c 64 20 62 65 20 63 61 6c 6c 65 64 20 hould be called
6060: 6f 6e 63 65 20 66 6f 72 20 65 76 65 72 79 20 77 once for every w
6070: 65 62 70 61 67 65 2c 20 61 74 0a 2a 2a 20 6f 72 ebpage, at.** or
6080: 20 6e 65 61 72 20 74 68 65 20 65 6e 64 20 6f 66 near the end of
6090: 20 70 61 67 65 20 67 65 6e 65 72 61 74 69 6f 6e page generation
60a0: 2e 20 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 . This routine
60b0: 64 6f 65 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 does the followi
60c0: 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 2a 20 20 50 ng:.**.** * P
60d0: 6f 70 75 6c 61 74 65 73 20 74 68 65 20 68 65 61 opulates the hea
60e0: 64 65 72 20 6f 66 20 74 68 65 20 70 61 67 65 2c der of the page,
60f0: 20 69 6e 63 6c 75 64 69 6e 67 20 73 65 74 74 69 including setti
6100: 6e 67 20 75 70 20 61 70 70 72 6f 70 72 69 61 74 ng up appropriat
6110: 65 0a 2a 2a 20 20 20 20 20 20 73 75 62 6d 65 6e e.** submen
6120: 75 20 65 6c 65 6d 65 6e 74 73 2e 20 20 54 68 65 u elements. The
6130: 20 68 65 61 64 65 72 20 67 65 6e 65 72 61 74 69 header generati
6140: 6f 6e 20 69 73 20 64 65 66 65 72 72 65 64 20 75 on is deferred u
6150: 6e 74 69 6c 20 74 68 69 73 20 70 6f 69 6e 74 0a ntil this point.
6160: 2a 2a 20 20 20 20 20 20 73 6f 20 74 68 61 74 20 ** so that
6170: 77 65 20 6b 6e 6f 77 20 74 68 61 74 20 61 6c 6c we know that all
6180: 20 73 74 79 6c 65 5f 73 75 62 6d 65 6e 75 5f 65 style_submenu_e
6190: 6c 65 6d 65 6e 74 28 29 20 61 6e 64 20 73 69 6d lement() and sim
61a0: 69 6c 61 72 20 68 61 76 65 0a 2a 2a 20 20 20 20 ilar have.**
61b0: 20 20 62 65 65 6e 20 72 65 63 65 69 76 65 64 2e been received.
61c0: 0a 2a 2a 0a 2a 2a 20 20 20 2a 20 20 46 69 6e 61 .**.** * Fina
61d0: 6c 69 7a 65 73 20 74 68 65 20 70 61 67 65 20 63 lizes the page c
61e0: 6f 6e 74 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 ontent..**.**
61f0: 2a 20 20 41 70 70 65 6e 64 73 20 74 68 65 20 66 * Appends the f
6200: 6f 6f 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 ooter..**.** The
6210: 20 7a 50 61 67 65 54 79 70 65 20 61 72 67 75 6d zPageType argum
6220: 65 6e 74 20 69 73 20 61 20 63 6c 61 73 73 20 6e ent is a class n
6230: 61 6d 65 20 69 6e 73 65 72 74 65 64 20 69 6e 20 ame inserted in
6240: 74 68 65 20 3c 64 69 76 3e 20 74 68 61 74 0a 2a the <div> that.*
6250: 2a 20 73 75 72 72 6f 75 6e 64 73 20 74 68 65 20 * surrounds the
6260: 70 61 67 65 20 63 6f 6e 74 65 6e 74 2e 20 20 43 page content. C
6270: 53 53 20 63 61 6e 20 75 73 65 20 74 68 69 73 20 SS can use this
6280: 74 6f 20 68 61 76 65 20 64 69 66 66 65 72 65 6e to have differen
6290: 74 20 73 74 79 6c 65 73 0a 2a 2a 20 61 63 63 6f t styles.** acco
62a0: 72 64 69 6e 67 20 74 6f 20 74 68 65 20 70 61 67 rding to the pag
62b0: 65 20 74 79 70 65 2e 0a 2a 2f 0a 76 6f 69 64 20 e type..*/.void
62c0: 73 74 79 6c 65 5f 66 69 6e 69 73 68 5f 70 61 67 style_finish_pag
62d0: 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 20 7a 50 e(const char* zP
62e0: 61 67 65 54 79 70 65 29 7b 0a 20 20 63 6f 6e 73 ageType){. cons
62f0: 74 20 63 68 61 72 20 2a 7a 46 6f 6f 74 65 72 3b t char *zFooter;
6300: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a . const char *z
6310: 41 64 20 3d 20 30 3b 0a 20 20 75 6e 73 69 67 6e Ad = 0;. unsign
6320: 65 64 20 69 6e 74 20 6d 41 64 46 6c 61 67 73 20 ed int mAdFlags
6330: 3d 20 30 3b 0a 0a 20 20 69 66 28 20 21 68 65 61 = 0;.. if( !hea
6340: 64 65 72 48 61 73 42 65 65 6e 47 65 6e 65 72 61 derHasBeenGenera
6350: 74 65 64 20 29 20 72 65 74 75 72 6e 3b 0a 0a 20 ted ) return;..
6360: 20 2f 2a 20 47 6f 20 62 61 63 6b 20 61 6e 64 20 /* Go back and
6370: 70 75 74 20 74 68 65 20 73 75 62 6d 65 6e 75 20 put the submenu
6380: 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 at the top of th
6390: 65 20 70 61 67 65 2e 20 20 57 65 20 64 65 6c 61 e page. We dela
63a0: 79 20 74 68 65 0a 20 20 2a 2a 20 63 72 65 61 74 y the. ** creat
63b0: 69 6f 6e 20 6f 66 20 74 68 65 20 73 75 62 6d 65 ion of the subme
63c0: 6e 75 20 75 6e 74 69 6c 20 74 68 65 20 65 6e 64 nu until the end
63d0: 20 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20 so that we can
63e0: 61 64 64 20 65 6c 65 6d 65 6e 74 73 0a 20 20 2a add elements. *
63f0: 2a 20 74 6f 20 74 68 65 20 73 75 62 6d 65 6e 75 * to the submenu
6400: 20 77 68 69 6c 65 20 67 65 6e 65 72 61 74 69 6e while generatin
6410: 67 20 70 61 67 65 20 74 65 78 74 2e 0a 20 20 2a g page text.. *
6420: 2f 0a 20 20 63 67 69 5f 64 65 73 74 69 6e 61 74 /. cgi_destinat
6430: 69 6f 6e 28 43 47 49 5f 48 45 41 44 45 52 29 3b ion(CGI_HEADER);
6440: 0a 20 20 69 66 28 20 73 75 62 6d 65 6e 75 45 6e . if( submenuEn
6450: 61 62 6c 65 20 26 26 20 6e 53 75 62 6d 65 6e 75 able && nSubmenu
6460: 2b 6e 53 75 62 6d 65 6e 75 43 74 72 6c 3e 30 20 +nSubmenuCtrl>0
6470: 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 ){. int i;.
6480: 20 20 69 66 28 20 6e 53 75 62 6d 65 6e 75 43 74 if( nSubmenuCt
6490: 72 6c 20 29 7b 0a 20 20 20 20 20 20 40 20 3c 66 rl ){. @ <f
64a0: 6f 72 6d 20 69 64 3d 27 66 30 31 27 20 6d 65 74 orm id='f01' met
64b0: 68 6f 64 3d 27 47 45 54 27 20 61 63 74 69 6f 6e hod='GET' action
64c0: 3d 27 25 52 2f 25 73 28 67 2e 7a 50 61 74 68 29 ='%R/%s(g.zPath)
64d0: 27 3e 0a 20 20 20 20 20 20 40 20 3c 69 6e 70 75 '>. @ <inpu
64e0: 74 20 74 79 70 65 3d 27 68 69 64 64 65 6e 27 20 t type='hidden'
64f0: 6e 61 6d 65 3d 27 75 64 63 27 20 76 61 6c 75 65 name='udc' value
6500: 3d 27 31 27 3e 0a 20 20 20 20 20 20 63 67 69 5f ='1'>. cgi_
6510: 74 61 67 5f 71 75 65 72 79 5f 70 61 72 61 6d 65 tag_query_parame
6520: 74 65 72 28 22 75 64 63 22 29 3b 0a 20 20 20 20 ter("udc");.
6530: 7d 0a 20 20 20 20 40 20 3c 64 69 76 20 63 6c 61 }. @ <div cla
6540: 73 73 3d 22 73 75 62 6d 65 6e 75 22 3e 0a 20 20 ss="submenu">.
6550: 20 20 69 66 28 20 6e 53 75 62 6d 65 6e 75 3e 30 if( nSubmenu>0
6560: 20 29 7b 0a 20 20 20 20 20 20 71 73 6f 72 74 28 ){. qsort(
6570: 61 53 75 62 6d 65 6e 75 2c 20 6e 53 75 62 6d 65 aSubmenu, nSubme
6580: 6e 75 2c 20 73 69 7a 65 6f 66 28 61 53 75 62 6d nu, sizeof(aSubm
6590: 65 6e 75 5b 30 5d 29 2c 20 73 75 62 6d 65 6e 75 enu[0]), submenu
65a0: 43 6f 6d 70 61 72 65 29 3b 0a 20 20 20 20 20 20 Compare);.
65b0: 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 53 75 62 6d for(i=0; i<nSubm
65c0: 65 6e 75 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 enu; i++){.
65d0: 20 20 20 73 74 72 75 63 74 20 53 75 62 6d 65 6e struct Submen
65e0: 75 20 2a 70 20 3d 20 26 61 53 75 62 6d 65 6e 75 u *p = &aSubmenu
65f0: 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20 69 66 28 [i];. if(
6600: 20 70 2d 3e 7a 4c 69 6e 6b 3d 3d 30 20 29 7b 0a p->zLink==0 ){.
6610: 20 20 20 20 20 20 20 20 20 20 40 20 3c 73 70 61 @ <spa
6620: 6e 20 63 6c 61 73 73 3d 22 6c 61 62 65 6c 22 3e n class="label">
6630: 25 68 28 70 2d 3e 7a 4c 61 62 65 6c 29 3c 2f 73 %h(p->zLabel)</s
6640: 70 61 6e 3e 0a 20 20 20 20 20 20 20 20 7d 65 6c pan>. }el
6650: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 40 20 se{. @
6660: 3c 61 20 63 6c 61 73 73 3d 22 6c 61 62 65 6c 22 <a class="label"
6670: 20 68 72 65 66 3d 22 25 68 28 70 2d 3e 7a 4c 69 href="%h(p->zLi
6680: 6e 6b 29 22 3e 25 68 28 70 2d 3e 7a 4c 61 62 65 nk)">%h(p->zLabe
6690: 6c 29 3c 2f 61 3e 0a 20 20 20 20 20 20 20 20 7d l)</a>. }
66a0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 . }. }.
66b0: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 53 for(i=0; i<nS
66c0: 75 62 6d 65 6e 75 43 74 72 6c 3b 20 69 2b 2b 29 ubmenuCtrl; i++)
66d0: 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 {. const ch
66e0: 61 72 20 2a 7a 51 50 4e 20 3d 20 61 53 75 62 6d ar *zQPN = aSubm
66f0: 65 6e 75 43 74 72 6c 5b 69 5d 2e 7a 4e 61 6d 65 enuCtrl[i].zName
6700: 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 ;. const ch
6710: 61 72 20 2a 7a 44 69 73 61 62 6c 65 64 20 3d 20 ar *zDisabled =
6720: 22 22 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 "";. const
6730: 63 68 61 72 20 2a 7a 58 74 72 61 43 6c 61 73 73 char *zXtraClass
6740: 20 3d 20 22 22 3b 0a 20 20 20 20 20 20 69 66 28 = "";. if(
6750: 20 61 53 75 62 6d 65 6e 75 43 74 72 6c 5b 69 5d aSubmenuCtrl[i]
6760: 2e 65 56 69 73 69 62 6c 65 20 26 20 53 54 59 4c .eVisible & STYL
6770: 45 5f 44 49 53 41 42 4c 45 44 20 29 7b 0a 20 20 E_DISABLED ){.
6780: 20 20 20 20 20 20 7a 44 69 73 61 62 6c 65 64 20 zDisabled
6790: 3d 20 22 20 64 69 73 61 62 6c 65 64 22 3b 0a 20 = " disabled";.
67a0: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 7a }else if( z
67b0: 51 50 4e 20 29 7b 0a 20 20 20 20 20 20 20 20 63 QPN ){. c
67c0: 67 69 5f 74 61 67 5f 71 75 65 72 79 5f 70 61 72 gi_tag_query_par
67d0: 61 6d 65 74 65 72 28 7a 51 50 4e 29 3b 0a 20 20 ameter(zQPN);.
67e0: 20 20 20 20 7d 0a 20 20 20 20 20 20 73 77 69 74 }. swit
67f0: 63 68 28 20 61 53 75 62 6d 65 6e 75 43 74 72 6c ch( aSubmenuCtrl
6800: 5b 69 5d 2e 65 54 79 70 65 20 29 7b 0a 20 20 20 [i].eType ){.
6810: 20 20 20 20 20 63 61 73 65 20 46 46 5f 45 4e 54 case FF_ENT
6820: 52 59 3a 0a 20 20 20 20 20 20 20 20 20 20 40 20 RY:. @
6830: 3c 73 70 61 6e 20 63 6c 61 73 73 3d 27 73 75 62 <span class='sub
6840: 6d 65 6e 75 63 74 72 6c 25 73 28 7a 58 74 72 61 menuctrl%s(zXtra
6850: 43 6c 61 73 73 29 27 3e 5c 0a 20 20 20 20 20 20 Class)'>\.
6860: 20 20 20 20 40 20 26 6e 62 73 70 3b 25 68 28 61 @ %h(a
6870: 53 75 62 6d 65 6e 75 43 74 72 6c 5b 69 5d 2e 7a SubmenuCtrl[i].z
6880: 4c 61 62 65 6c 29 5c 0a 20 20 20 20 20 20 20 20 Label)\.
6890: 20 20 40 20 3c 69 6e 70 75 74 20 74 79 70 65 3d @ <input type=
68a0: 27 74 65 78 74 27 20 6e 61 6d 65 3d 27 25 73 28 'text' name='%s(
68b0: 7a 51 50 4e 29 27 20 76 61 6c 75 65 3d 27 25 68 zQPN)' value='%h
68c0: 28 50 44 28 7a 51 50 4e 2c 20 22 22 29 29 27 20 (PD(zQPN, ""))'
68d0: 5c 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 \. if(
68e0: 61 53 75 62 6d 65 6e 75 43 74 72 6c 5b 69 5d 2e aSubmenuCtrl[i].
68f0: 69 53 69 7a 65 3c 30 20 29 7b 0a 20 20 20 20 20 iSize<0 ){.
6900: 20 20 20 20 20 20 20 40 20 73 69 7a 65 3d 27 25 @ size='%
6910: 64 28 2d 61 53 75 62 6d 65 6e 75 43 74 72 6c 5b d(-aSubmenuCtrl[
6920: 69 5d 2e 69 53 69 7a 65 29 27 20 5c 0a 20 20 20 i].iSize)' \.
6930: 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 }else if(
6940: 20 61 53 75 62 6d 65 6e 75 43 74 72 6c 5b 69 5d aSubmenuCtrl[i]
6950: 2e 69 53 69 7a 65 3e 30 20 29 7b 0a 20 20 20 20 .iSize>0 ){.
6960: 20 20 20 20 20 20 20 20 40 20 73 69 7a 65 3d 27 @ size='
6970: 25 64 28 61 53 75 62 6d 65 6e 75 43 74 72 6c 5b %d(aSubmenuCtrl[
6980: 69 5d 2e 69 53 69 7a 65 29 27 20 5c 0a 20 20 20 i].iSize)' \.
6990: 20 20 20 20 20 20 20 20 20 40 20 6d 61 78 6c 65 @ maxle
69a0: 6e 67 74 68 3d 27 25 64 28 61 53 75 62 6d 65 6e ngth='%d(aSubmen
69b0: 75 43 74 72 6c 5b 69 5d 2e 69 53 69 7a 65 29 27 uCtrl[i].iSize)'
69c0: 20 5c 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 \. }.
69d0: 20 20 20 20 20 20 20 20 20 40 20 69 64 3d 27 73 @ id='s
69e0: 75 62 6d 65 6e 75 63 74 72 6c 2d 25 64 28 69 29 ubmenuctrl-%d(i)
69f0: 27 25 73 28 7a 44 69 73 61 62 6c 65 64 29 3e 3c '%s(zDisabled)><
6a00: 2f 73 70 61 6e 3e 0a 20 20 20 20 20 20 20 20 20 /span>.
6a10: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 break;.
6a20: 63 61 73 65 20 46 46 5f 4d 55 4c 54 49 3a 20 7b case FF_MULTI: {
6a30: 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6a . int j
6a40: 3b 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 ;. cons
6a50: 74 20 63 68 61 72 20 2a 7a 56 61 6c 20 3d 20 50 t char *zVal = P
6a60: 28 7a 51 50 4e 29 3b 0a 20 20 20 20 20 20 20 20 (zQPN);.
6a70: 20 20 69 66 28 20 7a 58 74 72 61 43 6c 61 73 73 if( zXtraClass
6a80: 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 20 [0] ){.
6a90: 20 20 20 40 20 3c 73 70 61 6e 20 63 6c 61 73 73 @ <span class
6aa0: 3d 27 25 73 28 7a 58 74 72 61 43 6c 61 73 73 2b ='%s(zXtraClass+
6ab0: 31 29 27 3e 0a 20 20 20 20 20 20 20 20 20 20 7d 1)'>. }
6ac0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 61 . if( a
6ad0: 53 75 62 6d 65 6e 75 43 74 72 6c 5b 69 5d 2e 7a SubmenuCtrl[i].z
6ae0: 4c 61 62 65 6c 20 29 7b 0a 20 20 20 20 20 20 20 Label ){.
6af0: 20 20 20 20 20 40 20 26 6e 62 73 70 3b 25 68 28 @ %h(
6b00: 61 53 75 62 6d 65 6e 75 43 74 72 6c 5b 69 5d 2e aSubmenuCtrl[i].
6b10: 7a 4c 61 62 65 6c 29 5c 0a 20 20 20 20 20 20 20 zLabel)\.
6b20: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 40 }. @
6b30: 20 3c 73 65 6c 65 63 74 20 63 6c 61 73 73 3d 27 <select class='
6b40: 73 75 62 6d 65 6e 75 63 74 72 6c 27 20 73 69 7a submenuctrl' siz
6b50: 65 3d 27 31 27 20 6e 61 6d 65 3d 27 25 73 28 7a e='1' name='%s(z
6b60: 51 50 4e 29 27 20 5c 0a 20 20 20 20 20 20 20 20 QPN)' \.
6b70: 20 20 40 20 69 64 3d 27 73 75 62 6d 65 6e 75 63 @ id='submenuc
6b80: 74 72 6c 2d 25 64 28 69 29 27 25 73 28 7a 44 69 trl-%d(i)'%s(zDi
6b90: 73 61 62 6c 65 64 29 3e 0a 20 20 20 20 20 20 20 sabled)>.
6ba0: 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 61 53 for(j=0; j<aS
6bb0: 75 62 6d 65 6e 75 43 74 72 6c 5b 69 5d 2e 69 53 ubmenuCtrl[i].iS
6bc0: 69 7a 65 2a 32 3b 20 6a 2b 3d 32 29 7b 0a 20 20 ize*2; j+=2){.
6bd0: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 const
6be0: 63 68 61 72 20 2a 7a 51 50 56 20 3d 20 61 53 75 char *zQPV = aSu
6bf0: 62 6d 65 6e 75 43 74 72 6c 5b 69 5d 2e 61 7a 43 bmenuCtrl[i].azC
6c00: 68 6f 69 63 65 5b 6a 5d 3b 0a 20 20 20 20 20 20 hoice[j];.
6c10: 20 20 20 20 20 20 40 20 3c 6f 70 74 69 6f 6e 20 @ <option
6c20: 76 61 6c 75 65 3d 27 25 68 28 7a 51 50 56 29 27 value='%h(zQPV)'
6c30: 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 \. if
6c40: 28 20 66 6f 73 73 69 6c 5f 73 74 72 63 6d 70 28 ( fossil_strcmp(
6c50: 7a 56 61 6c 2c 20 7a 51 50 56 29 3d 3d 30 20 29 zVal, zQPV)==0 )
6c60: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 {.
6c70: 40 20 20 73 65 6c 65 63 74 65 64 5c 0a 20 20 20 @ selected\.
6c80: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 }.
6c90: 20 20 20 20 20 20 20 40 20 3e 25 68 28 61 53 75 @ >%h(aSu
6ca0: 62 6d 65 6e 75 43 74 72 6c 5b 69 5d 2e 61 7a 43 bmenuCtrl[i].azC
6cb0: 68 6f 69 63 65 5b 6a 2b 31 5d 29 3c 2f 6f 70 74 hoice[j+1])</opt
6cc0: 69 6f 6e 3e 0a 20 20 20 20 20 20 20 20 20 20 7d ion>. }
6cd0: 0a 20 20 20 20 20 20 20 20 20 20 40 20 3c 2f 73 . @ </s
6ce0: 65 6c 65 63 74 3e 0a 20 20 20 20 20 20 20 20 20 elect>.
6cf0: 20 69 66 28 20 7a 58 74 72 61 43 6c 61 73 73 5b if( zXtraClass[
6d00: 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 0] ){.
6d10: 20 20 40 20 3c 2f 73 70 61 6e 3e 0a 20 20 20 20 @ </span>.
6d20: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 }.
6d30: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 break;.
6d40: 20 7d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 }. case
6d50: 46 46 5f 42 49 4e 41 52 59 3a 20 7b 0a 20 20 20 FF_BINARY: {.
6d60: 20 20 20 20 20 20 20 69 6e 74 20 69 73 54 72 75 int isTru
6d70: 65 20 3d 20 50 42 28 7a 51 50 4e 29 3b 0a 20 20 e = PB(zQPN);.
6d80: 20 20 20 20 20 20 20 20 40 20 3c 73 65 6c 65 63 @ <selec
6d90: 74 20 63 6c 61 73 73 3d 27 73 75 62 6d 65 6e 75 t class='submenu
6da0: 63 74 72 6c 25 73 28 7a 58 74 72 61 43 6c 61 73 ctrl%s(zXtraClas
6db0: 73 29 27 20 73 69 7a 65 3d 27 31 27 20 5c 0a 20 s)' size='1' \.
6dc0: 20 20 20 20 20 20 20 20 20 40 20 6e 61 6d 65 3d @ name=
6dd0: 27 25 73 28 7a 51 50 4e 29 27 20 69 64 3d 27 73 '%s(zQPN)' id='s
6de0: 75 62 6d 65 6e 75 63 74 72 6c 2d 25 64 28 69 29 ubmenuctrl-%d(i)
6df0: 27 25 73 28 7a 44 69 73 61 62 6c 65 64 29 3e 0a '%s(zDisabled)>.
6e00: 20 20 20 20 20 20 20 20 20 20 40 20 3c 6f 70 74 @ <opt
6e10: 69 6f 6e 20 76 61 6c 75 65 3d 27 31 27 5c 0a 20 ion value='1'\.
6e20: 20 20 20 20 20 20 20 20 20 69 66 28 20 69 73 54 if( isT
6e30: 72 75 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 rue ){.
6e40: 20 20 20 40 20 20 73 65 6c 65 63 74 65 64 5c 0a @ selected\.
6e50: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 }.
6e60: 20 20 20 20 20 20 40 20 3e 25 68 28 61 53 75 62 @ >%h(aSub
6e70: 6d 65 6e 75 43 74 72 6c 5b 69 5d 2e 7a 4c 61 62 menuCtrl[i].zLab
6e80: 65 6c 29 3c 2f 6f 70 74 69 6f 6e 3e 0a 20 20 20 el)</option>.
6e90: 20 20 20 20 20 20 20 40 20 3c 6f 70 74 69 6f 6e @ <option
6ea0: 20 76 61 6c 75 65 3d 27 30 27 5c 0a 20 20 20 20 value='0'\.
6eb0: 20 20 20 20 20 20 69 66 28 20 21 69 73 54 72 75 if( !isTru
6ec0: 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 e ){.
6ed0: 20 40 20 20 73 65 6c 65 63 74 65 64 5c 0a 20 20 @ selected\.
6ee0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 }.
6ef0: 20 20 20 20 40 20 3e 25 68 28 61 53 75 62 6d 65 @ >%h(aSubme
6f00: 6e 75 43 74 72 6c 5b 69 5d 2e 7a 46 61 6c 73 65 nuCtrl[i].zFalse
6f10: 29 3c 2f 6f 70 74 69 6f 6e 3e 0a 20 20 20 20 20 )</option>.
6f20: 20 20 20 20 20 40 20 3c 2f 73 65 6c 65 63 74 3e @ </select>
6f30: 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b . break
6f40: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 ;. }.
6f50: 20 20 20 20 63 61 73 65 20 46 46 5f 43 48 45 43 case FF_CHEC
6f60: 4b 42 4f 58 3a 20 7b 0a 20 20 20 20 20 20 20 20 KBOX: {.
6f70: 20 20 40 20 3c 6c 61 62 65 6c 20 63 6c 61 73 73 @ <label class
6f80: 3d 27 73 75 62 6d 65 6e 75 63 74 72 6c 20 73 75 ='submenuctrl su
6f90: 62 6d 65 6e 75 63 6b 62 6f 78 25 73 28 7a 58 74 bmenuckbox%s(zXt
6fa0: 72 61 43 6c 61 73 73 29 27 3e 5c 0a 20 20 20 20 raClass)'>\.
6fb0: 20 20 20 20 20 20 40 20 3c 69 6e 70 75 74 20 74 @ <input t
6fc0: 79 70 65 3d 27 63 68 65 63 6b 62 6f 78 27 20 6e ype='checkbox' n
6fd0: 61 6d 65 3d 27 25 73 28 7a 51 50 4e 29 27 20 69 ame='%s(zQPN)' i
6fe0: 64 3d 27 73 75 62 6d 65 6e 75 63 74 72 6c 2d 25 d='submenuctrl-%
6ff0: 64 28 69 29 27 20 5c 0a 20 20 20 20 20 20 20 20 d(i)' \.
7000: 20 20 69 66 28 20 50 42 28 7a 51 50 4e 29 20 29 if( PB(zQPN) )
7010: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 40 20 {. @
7020: 63 68 65 63 6b 65 64 20 5c 0a 20 20 20 20 20 20 checked \.
7030: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 }.
7040: 69 66 28 20 61 53 75 62 6d 65 6e 75 43 74 72 6c if( aSubmenuCtrl
7050: 5b 69 5d 2e 7a 4a 53 20 29 7b 0a 20 20 20 20 20 [i].zJS ){.
7060: 20 20 20 20 20 20 20 40 20 64 61 74 61 2d 63 74 @ data-ct
7070: 72 6c 3d 27 25 73 28 61 53 75 62 6d 65 6e 75 43 rl='%s(aSubmenuC
7080: 74 72 6c 5b 69 5d 2e 7a 4a 53 29 27 25 73 28 7a trl[i].zJS)'%s(z
7090: 44 69 73 61 62 6c 65 64 29 3e 5c 0a 20 20 20 20 Disabled)>\.
70a0: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 }else{.
70b0: 20 20 20 20 20 20 20 20 20 40 20 25 73 28 7a 44 @ %s(zD
70c0: 69 73 61 62 6c 65 64 29 3e 5c 0a 20 20 20 20 20 isabled)>\.
70d0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 }.
70e0: 20 40 20 25 68 28 61 53 75 62 6d 65 6e 75 43 74 @ %h(aSubmenuCt
70f0: 72 6c 5b 69 5d 2e 7a 4c 61 62 65 6c 29 3c 2f 6c rl[i].zLabel)</l
7100: 61 62 65 6c 3e 0a 20 20 20 20 20 20 20 20 20 20 abel>.
7110: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d break;. }
7120: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 . }. }.
7130: 20 20 20 40 20 3c 2f 64 69 76 3e 0a 20 20 20 20 @ </div>.
7140: 69 66 28 20 6e 53 75 62 6d 65 6e 75 43 74 72 6c if( nSubmenuCtrl
7150: 20 29 7b 0a 20 20 20 20 20 20 63 67 69 5f 71 75 ){. cgi_qu
7160: 65 72 79 5f 70 61 72 61 6d 65 74 65 72 73 5f 74 ery_parameters_t
7170: 6f 5f 68 69 64 64 65 6e 28 29 3b 0a 20 20 20 20 o_hidden();.
7180: 20 20 63 67 69 5f 74 61 67 5f 71 75 65 72 79 5f cgi_tag_query_
7190: 70 61 72 61 6d 65 74 65 72 28 30 29 3b 0a 20 20 parameter(0);.
71a0: 20 20 20 20 40 20 3c 2f 66 6f 72 6d 3e 0a 20 20 @ </form>.
71b0: 20 20 20 20 62 75 69 6c 74 69 6e 5f 72 65 71 75 builtin_requ
71c0: 65 73 74 5f 6a 73 28 22 6d 65 6e 75 2e 6a 73 22 est_js("menu.js"
71d0: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 );. }. }..
71e0: 7a 41 64 20 3d 20 73 74 79 6c 65 5f 61 64 75 6e zAd = style_adun
71f0: 69 74 5f 74 65 78 74 28 26 6d 41 64 46 6c 61 67 it_text(&mAdFlag
7200: 73 29 3b 0a 20 20 69 66 28 20 28 6d 41 64 46 6c s);. if( (mAdFl
7210: 61 67 73 20 26 20 41 44 55 4e 49 54 5f 52 49 47 ags & ADUNIT_RIG
7220: 48 54 5f 4f 4b 29 21 3d 30 20 20 29 7b 0a 20 20 HT_OK)!=0 ){.
7230: 20 20 40 20 3c 64 69 76 20 63 6c 61 73 73 3d 22 @ <div class="
7240: 63 6f 6e 74 65 6e 74 20 61 64 75 6e 69 74 5f 72 content adunit_r
7250: 69 67 68 74 5f 63 6f 6e 74 61 69 6e 65 72 22 3e ight_container">
7260: 0a 20 20 20 20 40 20 3c 64 69 76 20 63 6c 61 73 . @ <div clas
7270: 73 3d 22 61 64 75 6e 69 74 5f 72 69 67 68 74 22 s="adunit_right"
7280: 3e 0a 20 20 20 20 63 67 69 5f 61 70 70 65 6e 64 >. cgi_append
7290: 5f 63 6f 6e 74 65 6e 74 28 7a 41 64 2c 20 2d 31 _content(zAd, -1
72a0: 29 3b 0a 20 20 20 20 40 20 3c 2f 64 69 76 3e 0a );. @ </div>.
72b0: 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 41 64 20 }else if( zAd
72c0: 29 7b 0a 20 20 20 20 40 20 3c 64 69 76 20 63 6c ){. @ <div cl
72d0: 61 73 73 3d 22 61 64 75 6e 69 74 5f 62 61 6e 6e ass="adunit_bann
72e0: 65 72 22 3e 0a 20 20 20 20 63 67 69 5f 61 70 70 er">. cgi_app
72f0: 65 6e 64 5f 63 6f 6e 74 65 6e 74 28 7a 41 64 2c end_content(zAd,
7300: 20 2d 31 29 3b 0a 20 20 20 20 40 20 3c 2f 64 69 -1);. @ </di
7310: 76 3e 0a 20 20 7d 0a 0a 20 20 40 20 3c 64 69 76 v>. }.. @ <div
7320: 20 63 6c 61 73 73 3d 22 63 6f 6e 74 65 6e 74 20 class="content
7330: 25 73 28 7a 50 61 67 65 54 79 70 65 29 22 3e 3c %s(zPageType)"><
7340: 73 70 61 6e 20 69 64 3d 22 64 65 62 75 67 4d 73 span id="debugMs
7350: 67 22 3e 3c 2f 73 70 61 6e 3e 0a 20 20 63 67 69 g"></span>. cgi
7360: 5f 64 65 73 74 69 6e 61 74 69 6f 6e 28 43 47 49 _destination(CGI
7370: 5f 42 4f 44 59 29 3b 0a 0a 20 20 69 66 28 20 73 _BODY);.. if( s
7380: 69 64 65 62 6f 78 55 73 65 64 20 29 7b 0a 20 20 ideboxUsed ){.
7390: 20 20 40 20 3c 64 69 76 20 63 6c 61 73 73 3d 22 @ <div class="
73a0: 65 6e 64 43 6f 6e 74 65 6e 74 22 3e 3c 2f 64 69 endContent"></di
73b0: 76 3e 0a 20 20 7d 0a 20 20 40 20 3c 2f 64 69 76 v>. }. @ </div
73c0: 3e 0a 0a 20 20 2f 2a 20 50 75 74 20 74 68 65 20 >.. /* Put the
73d0: 66 6f 6f 74 65 72 20 61 74 20 74 68 65 20 62 6f footer at the bo
73e0: 74 74 6f 6d 20 6f 66 20 74 68 65 20 70 61 67 65 ttom of the page
73f0: 2e 20 2a 2f 0a 20 20 7a 46 6f 6f 74 65 72 20 3d . */. zFooter =
7400: 20 73 6b 69 6e 5f 67 65 74 28 22 66 6f 6f 74 65 skin_get("foote
7410: 72 22 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 r");. if( sqlit
7420: 65 33 5f 73 74 72 6c 69 6b 65 28 22 25 3c 2f 62 e3_strlike("%</b
7430: 6f 64 79 3e 25 22 2c 20 7a 46 6f 6f 74 65 72 2c ody>%", zFooter,
7440: 20 30 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 74 0)==0 ){. st
7450: 79 6c 65 5f 6c 6f 61 64 5f 61 6c 6c 5f 6a 73 5f yle_load_all_js_
7460: 66 69 6c 65 73 28 29 3b 0a 20 20 7d 0a 20 20 69 files();. }. i
7470: 66 28 20 67 2e 74 68 54 72 61 63 65 20 29 20 54 f( g.thTrace ) T
7480: 68 5f 54 72 61 63 65 28 22 42 45 47 49 4e 5f 46 h_Trace("BEGIN_F
7490: 4f 4f 54 45 52 3c 62 72 20 2f 3e 5c 6e 22 2c 20 OOTER<br />\n",
74a0: 2d 31 29 3b 0a 20 20 54 68 5f 52 65 6e 64 65 72 -1);. Th_Render
74b0: 28 7a 46 6f 6f 74 65 72 29 3b 0a 20 20 69 66 28 (zFooter);. if(
74c0: 20 67 2e 74 68 54 72 61 63 65 20 29 20 54 68 5f g.thTrace ) Th_
74d0: 54 72 61 63 65 28 22 45 4e 44 5f 46 4f 4f 54 45 Trace("END_FOOTE
74e0: 52 3c 62 72 20 2f 3e 5c 6e 22 2c 20 2d 31 29 3b R<br />\n", -1);
74f0: 0a 0a 20 20 2f 2a 20 52 65 6e 64 65 72 20 74 72 .. /* Render tr
7500: 61 63 65 20 6c 6f 67 20 69 66 20 54 48 31 20 74 ace log if TH1 t
7510: 72 61 63 69 6e 67 20 69 73 20 65 6e 61 62 6c 65 racing is enable
7520: 64 2e 20 2a 2f 0a 20 20 69 66 28 20 67 2e 74 68 d. */. if( g.th
7530: 54 72 61 63 65 20 29 7b 0a 20 20 20 20 63 67 69 Trace ){. cgi
7540: 5f 61 70 70 65 6e 64 5f 63 6f 6e 74 65 6e 74 28 _append_content(
7550: 22 3c 73 70 61 6e 20 63 6c 61 73 73 3d 5c 22 74 "<span class=\"t
7560: 68 54 72 61 63 65 5c 22 3e 3c 68 72 20 2f 3e 5c hTrace\"><hr />\
7570: 6e 22 2c 20 2d 31 29 3b 0a 20 20 20 20 63 67 69 n", -1);. cgi
7580: 5f 61 70 70 65 6e 64 5f 63 6f 6e 74 65 6e 74 28 _append_content(
7590: 62 6c 6f 62 5f 73 74 72 28 26 67 2e 74 68 4c 6f blob_str(&g.thLo
75a0: 67 29 2c 20 62 6c 6f 62 5f 73 69 7a 65 28 26 67 g), blob_size(&g
75b0: 2e 74 68 4c 6f 67 29 29 3b 0a 20 20 20 20 63 67 .thLog));. cg
75c0: 69 5f 61 70 70 65 6e 64 5f 63 6f 6e 74 65 6e 74 i_append_content
75d0: 28 22 3c 2f 73 70 61 6e 3e 5c 6e 22 2c 20 2d 31 ("</span>\n", -1
75e0: 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 41 64 64 );. }.. /* Add
75f0: 20 64 6f 63 75 6d 65 6e 74 20 65 6e 64 20 6d 61 document end ma
7600: 72 6b 20 69 66 20 69 74 20 77 61 73 20 6e 6f 74 rk if it was not
7610: 20 69 6e 20 74 68 65 20 66 6f 6f 74 65 72 20 2a in the footer *
7620: 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f /. if( sqlite3_
7630: 73 74 72 6c 69 6b 65 28 22 25 3c 2f 62 6f 64 79 strlike("%</body
7640: 3e 25 22 2c 20 7a 46 6f 6f 74 65 72 2c 20 30 29 >%", zFooter, 0)
7650: 21 3d 30 20 29 7b 0a 20 20 20 20 73 74 79 6c 65 !=0 ){. style
7660: 5f 6c 6f 61 64 5f 61 6c 6c 5f 6a 73 5f 66 69 6c _load_all_js_fil
7670: 65 73 28 29 3b 0a 20 20 20 20 40 20 3c 2f 62 6f es();. @ </bo
7680: 64 79 3e 0a 20 20 20 20 40 20 3c 2f 68 74 6d 6c dy>. @ </html
7690: 3e 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 42 >. }.}../*.** B
76a0: 65 67 69 6e 20 61 20 73 69 64 65 2d 62 6f 78 20 egin a side-box
76b0: 6f 6e 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e on the right-han
76c0: 64 20 73 69 64 65 20 6f 66 20 61 20 70 61 67 65 d side of a page
76d0: 2e 20 20 54 68 65 20 74 69 74 6c 65 20 61 6e 64 . The title and
76e0: 0a 2a 2a 20 74 68 65 20 77 69 64 74 68 20 6f 66 .** the width of
76f0: 20 74 68 65 20 62 6f 78 20 61 72 65 20 67 69 76 the box are giv
7700: 65 6e 20 61 73 20 61 72 67 75 6d 65 6e 74 73 2e en as arguments.
7710: 20 20 54 68 65 20 77 69 64 74 68 20 69 73 20 75 The width is u
7720: 73 75 61 6c 6c 79 0a 2a 2a 20 61 20 70 65 72 63 sually.** a perc
7730: 65 6e 74 61 67 65 20 6f 66 20 74 6f 74 61 6c 20 entage of total
7740: 73 63 72 65 65 6e 20 77 69 64 74 68 2e 0a 2a 2f screen width..*/
7750: 0a 76 6f 69 64 20 73 74 79 6c 65 5f 73 69 64 65 .void style_side
7760: 62 6f 78 5f 62 65 67 69 6e 28 63 6f 6e 73 74 20 box_begin(const
7770: 63 68 61 72 20 2a 7a 54 69 74 6c 65 2c 20 63 6f char *zTitle, co
7780: 6e 73 74 20 63 68 61 72 20 2a 7a 57 69 64 74 68 nst char *zWidth
7790: 29 7b 0a 20 20 73 69 64 65 62 6f 78 55 73 65 64 ){. sideboxUsed
77a0: 20 3d 20 31 3b 0a 20 20 40 20 3c 64 69 76 20 63 = 1;. @ <div c
77b0: 6c 61 73 73 3d 22 73 69 64 65 62 6f 78 22 20 73 lass="sidebox" s
77c0: 74 79 6c 65 3d 22 77 69 64 74 68 3a 25 73 28 7a tyle="width:%s(z
77d0: 57 69 64 74 68 29 22 3e 0a 20 20 40 20 3c 64 69 Width)">. @ <di
77e0: 76 20 63 6c 61 73 73 3d 22 73 69 64 65 62 6f 78 v class="sidebox
77f0: 54 69 74 6c 65 22 3e 25 68 28 7a 54 69 74 6c 65 Title">%h(zTitle
7800: 29 3c 2f 64 69 76 3e 0a 7d 0a 0a 2f 2a 20 45 6e )</div>.}../* En
7810: 64 20 74 68 65 20 73 69 64 65 2d 62 6f 78 0a 2a d the side-box.*
7820: 2f 0a 76 6f 69 64 20 73 74 79 6c 65 5f 73 69 64 /.void style_sid
7830: 65 62 6f 78 5f 65 6e 64 28 76 6f 69 64 29 7b 0a ebox_end(void){.
7840: 20 20 40 20 3c 2f 64 69 76 3e 0a 7d 0a 0a 2f 2a @ </div>.}../*
7850: 0a 2a 2a 20 53 65 61 72 63 68 20 73 74 72 69 6e .** Search strin
7860: 67 20 7a 43 73 73 20 66 6f 72 20 7a 53 65 6c 65 g zCss for zSele
7870: 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 ctor..**.** Retu
7880: 72 6e 20 74 72 75 65 20 69 66 20 66 6f 75 6e 64 rn true if found
7890: 2e 20 20 52 65 74 75 72 6e 20 66 61 6c 73 65 20 . Return false
78a0: 69 66 20 6e 6f 74 20 66 6f 75 6e 64 0a 2a 2f 0a if not found.*/.
78b0: 73 74 61 74 69 63 20 69 6e 74 20 63 6f 6e 74 61 static int conta
78c0: 69 6e 73 53 65 6c 65 63 74 6f 72 28 63 6f 6e 73 insSelector(cons
78d0: 74 20 63 68 61 72 20 2a 7a 43 73 73 2c 20 63 6f t char *zCss, co
78e0: 6e 73 74 20 63 68 61 72 20 2a 7a 53 65 6c 65 63 nst char *zSelec
78f0: 74 6f 72 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 tor){. const ch
7900: 61 72 20 2a 7a 3b 0a 20 20 69 6e 74 20 6e 3b 0a ar *z;. int n;.
7910: 20 20 69 6e 74 20 73 65 6c 65 63 74 6f 72 4c 65 int selectorLe
7920: 6e 20 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28 n = (int)strlen(
7930: 7a 53 65 6c 65 63 74 6f 72 29 3b 0a 0a 20 20 66 zSelector);.. f
7940: 6f 72 28 7a 3d 7a 43 73 73 3b 20 2a 7a 3b 20 7a or(z=zCss; *z; z
7950: 2b 3d 73 65 6c 65 63 74 6f 72 4c 65 6e 29 7b 0a +=selectorLen){.
7960: 20 20 20 20 7a 20 3d 20 73 74 72 73 74 72 28 7a z = strstr(z
7970: 2c 20 7a 53 65 6c 65 63 74 6f 72 29 3b 0a 20 20 , zSelector);.
7980: 20 20 69 66 28 20 7a 3d 3d 30 20 29 20 72 65 74 if( z==0 ) ret
7990: 75 72 6e 20 30 3b 0a 20 20 20 20 69 66 28 20 7a urn 0;. if( z
79a0: 21 3d 7a 43 73 73 20 29 7b 0a 20 20 20 20 20 20 !=zCss ){.
79b0: 66 6f 72 28 20 6e 3d 2d 31 3b 20 7a 2b 6e 21 3d for( n=-1; z+n!=
79c0: 7a 43 73 73 20 26 26 20 66 6f 73 73 69 6c 5f 69 zCss && fossil_i
79d0: 73 73 70 61 63 65 28 7a 5b 6e 5d 29 3b 20 6e 2d sspace(z[n]); n-
79e0: 2d 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 2b -);. if( z+
79f0: 6e 21 3d 7a 43 73 73 20 26 26 20 7a 5b 6e 5d 21 n!=zCss && z[n]!
7a00: 3d 27 2c 27 20 26 26 20 7a 5b 6e 5d 21 3d 20 27 =',' && z[n]!= '
7a10: 7d 27 20 26 26 20 7a 5b 6e 5d 21 3d 27 2f 27 20 }' && z[n]!='/'
7a20: 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 ) continue;.
7a30: 7d 0a 20 20 20 20 66 6f 72 28 20 6e 3d 73 65 6c }. for( n=sel
7a40: 65 63 74 6f 72 4c 65 6e 3b 20 7a 5b 6e 5d 20 26 ectorLen; z[n] &
7a50: 26 20 66 6f 73 73 69 6c 5f 69 73 73 70 61 63 65 & fossil_isspace
7a60: 28 7a 5b 6e 5d 29 3b 20 6e 2b 2b 20 29 3b 0a 20 (z[n]); n++ );.
7a70: 20 20 20 69 66 28 20 7a 5b 6e 5d 3d 3d 27 2c 27 if( z[n]==','
7a80: 20 7c 7c 20 7a 5b 6e 5d 3d 3d 27 7b 27 20 7c 7c || z[n]=='{' ||
7a90: 20 7a 5b 6e 5d 3d 3d 27 2f 27 20 29 20 72 65 74 z[n]=='/' ) ret
7aa0: 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74 urn 1;. }. ret
7ab0: 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 urn 0;.}../*.**
7ac0: 43 4f 4d 4d 41 4e 44 3a 20 74 65 73 74 2d 63 6f COMMAND: test-co
7ad0: 6e 74 61 69 6e 73 2d 73 65 6c 65 63 74 6f 72 0a ntains-selector.
7ae0: 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 25 66 6f **.** Usage: %fo
7af0: 73 73 69 6c 20 74 65 73 74 2d 63 6f 6e 74 61 69 ssil test-contai
7b00: 6e 73 2d 73 65 6c 65 63 74 6f 72 20 46 49 4c 45 ns-selector FILE
7b10: 4e 41 4d 45 20 53 45 4c 45 43 54 4f 52 0a 2a 2a NAME SELECTOR.**
7b20: 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 69 66 .** Determine if
7b30: 20 74 68 65 20 43 53 53 20 73 74 79 6c 65 73 68 the CSS stylesh
7b40: 65 65 74 20 46 49 4c 45 4e 41 4d 45 20 63 6f 6e eet FILENAME con
7b50: 74 61 69 6e 73 20 53 45 4c 45 43 54 4f 52 2e 0a tains SELECTOR..
7b60: 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 **.** Note that
7b70: 61 73 20 6f 66 20 32 30 32 30 2d 30 35 2d 32 38 as of 2020-05-28
7b80: 2c 20 74 68 65 20 64 65 66 61 75 6c 74 20 72 75 , the default ru
7b90: 6c 65 73 20 61 72 65 20 61 6c 77 61 79 73 20 65 les are always e
7ba0: 6d 69 74 74 65 64 2c 0a 2a 2a 20 73 6f 20 74 68 mitted,.** so th
7bb0: 65 20 63 6f 6e 74 61 69 6e 73 53 65 6c 65 63 74 e containsSelect
7bc0: 6f 72 28 29 20 6c 6f 67 69 63 20 69 73 20 6e 6f or() logic is no
7bd0: 20 6c 6f 6e 67 65 72 20 61 70 70 6c 69 65 64 20 longer applied
7be0: 77 68 65 6e 20 65 6d 69 74 74 69 6e 67 0a 2a 2a when emitting.**
7bf0: 20 73 74 79 6c 65 2e 63 73 73 2e 20 49 74 20 69 style.css. It i
7c00: 73 20 75 6e 63 6c 65 61 72 20 77 68 65 74 68 65 s unclear whethe
7c10: 72 20 74 68 69 73 20 74 65 73 74 20 63 6f 6d 6d r this test comm
7c20: 61 6e 64 20 69 73 20 6e 6f 77 20 6f 62 73 6f 6c and is now obsol
7c30: 65 74 65 0a 2a 2a 20 6f 72 20 77 68 65 74 68 65 ete.** or whethe
7c40: 72 20 69 74 20 6d 61 79 20 73 74 69 6c 6c 20 73 r it may still s
7c50: 65 72 76 65 20 61 20 70 75 72 70 6f 73 65 2e 0a erve a purpose..
7c60: 2a 2f 0a 76 6f 69 64 20 63 6f 6e 74 61 69 6e 73 */.void contains
7c70: 5f 73 65 6c 65 63 74 6f 72 5f 63 6d 64 28 76 6f _selector_cmd(vo
7c80: 69 64 29 7b 0a 20 20 69 6e 74 20 66 6f 75 6e 64 id){. int found
7c90: 3b 0a 20 20 63 68 61 72 20 2a 7a 53 65 6c 65 63 ;. char *zSelec
7ca0: 74 6f 72 3b 0a 20 20 42 6c 6f 62 20 63 73 73 3b tor;. Blob css;
7cb0: 0a 20 20 69 66 28 20 67 2e 61 72 67 63 21 3d 34 . if( g.argc!=4
7cc0: 20 29 20 75 73 61 67 65 28 22 46 49 4c 45 4e 41 ) usage("FILENA
7cd0: 4d 45 20 53 45 4c 45 43 54 4f 52 22 29 3b 0a 20 ME SELECTOR");.
7ce0: 20 62 6c 6f 62 5f 72 65 61 64 5f 66 72 6f 6d 5f blob_read_from_
7cf0: 66 69 6c 65 28 26 63 73 73 2c 20 67 2e 61 72 67 file(&css, g.arg
7d00: 76 5b 32 5d 2c 20 45 78 74 46 49 4c 45 29 3b 0a v[2], ExtFILE);.
7d10: 20 20 7a 53 65 6c 65 63 74 6f 72 20 3d 20 67 2e zSelector = g.
7d20: 61 72 67 76 5b 33 5d 3b 0a 20 20 66 6f 75 6e 64 argv[3];. found
7d30: 20 3d 20 63 6f 6e 74 61 69 6e 73 53 65 6c 65 63 = containsSelec
7d40: 74 6f 72 28 62 6c 6f 62 5f 73 74 72 28 26 63 73 tor(blob_str(&cs
7d50: 73 29 2c 20 7a 53 65 6c 65 63 74 6f 72 29 3b 0a s), zSelector);.
7d60: 20 20 66 6f 73 73 69 6c 5f 70 72 69 6e 74 28 22 fossil_print("
7d70: 25 73 20 25 73 5c 6e 22 2c 20 7a 53 65 6c 65 63 %s %s\n", zSelec
7d80: 74 6f 72 2c 20 66 6f 75 6e 64 20 3f 20 22 66 6f tor, found ? "fo
7d90: 75 6e 64 22 20 3a 20 22 6e 6f 74 20 66 6f 75 6e und" : "not foun
7da0: 64 22 29 3b 0a 20 20 62 6c 6f 62 5f 72 65 73 65 d");. blob_rese
7db0: 74 28 26 63 73 73 29 3b 0a 7d 0a 0a 2f 2a 0a 2a t(&css);.}../*.*
7dc0: 2a 20 57 45 42 50 41 47 45 3a 20 73 63 72 69 70 * WEBPAGE: scrip
7dd0: 74 2e 6a 73 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 t.js.**.** Retur
7de0: 6e 20 74 68 65 20 22 4a 61 76 61 73 63 72 69 70 n the "Javascrip
7df0: 74 22 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74 t" content for t
7e00: 68 65 20 63 75 72 72 65 6e 74 20 73 6b 69 6e 20 he current skin
7e10: 28 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 79 (if there is any
7e20: 29 0a 2a 2f 0a 76 6f 69 64 20 70 61 67 65 5f 73 ).*/.void page_s
7e30: 63 72 69 70 74 5f 6a 73 28 76 6f 69 64 29 7b 0a cript_js(void){.
7e40: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 const char *zS
7e50: 63 72 69 70 74 20 3d 20 73 6b 69 6e 5f 67 65 74 cript = skin_get
7e60: 28 22 6a 73 22 29 3b 0a 20 20 69 66 28 20 50 28 ("js");. if( P(
7e70: 22 74 65 73 74 22 29 20 29 7b 0a 20 20 20 20 2f "test") ){. /
7e80: 2a 20 52 65 6e 64 65 72 20 74 68 65 20 73 63 72 * Render the scr
7e90: 69 70 74 20 61 73 20 70 6c 61 69 6e 2d 74 65 78 ipt as plain-tex
7ea0: 74 20 66 6f 72 20 74 65 73 74 69 6e 67 20 70 75 t for testing pu
7eb0: 72 70 6f 73 65 73 2c 20 69 66 20 74 68 65 20 22 rposes, if the "
7ec0: 74 65 73 74 22 0a 20 20 20 20 2a 2a 20 71 75 65 test". ** que
7ed0: 72 79 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 ry parameter is
7ee0: 70 72 65 73 65 6e 74 20 2a 2f 0a 20 20 20 20 63 present */. c
7ef0: 67 69 5f 73 65 74 5f 63 6f 6e 74 65 6e 74 5f 74 gi_set_content_t
7f00: 79 70 65 28 22 74 65 78 74 2f 70 6c 61 69 6e 22 ype("text/plain"
7f10: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 );. }else{.
7f20: 2f 2a 20 44 65 66 61 75 6c 74 20 62 65 68 61 76 /* Default behav
7f30: 69 6f 72 20 69 73 20 74 6f 20 72 65 74 75 72 6e ior is to return
7f40: 20 6a 61 76 61 73 63 72 69 70 74 20 2a 2f 0a 20 javascript */.
7f50: 20 20 20 63 67 69 5f 73 65 74 5f 63 6f 6e 74 65 cgi_set_conte
7f60: 6e 74 5f 74 79 70 65 28 22 61 70 70 6c 69 63 61 nt_type("applica
7f70: 74 69 6f 6e 2f 6a 61 76 61 73 63 72 69 70 74 22 tion/javascript"
7f80: 29 3b 0a 20 20 7d 0a 20 20 73 74 79 6c 65 5f 69 );. }. style_i
7f90: 6e 69 74 5f 74 68 31 5f 76 61 72 73 28 30 29 3b nit_th1_vars(0);
7fa0: 0a 20 20 54 68 5f 52 65 6e 64 65 72 28 7a 53 63 . Th_Render(zSc
7fb0: 72 69 70 74 3f 7a 53 63 72 69 70 74 3a 22 22 29 ript?zScript:"")
7fc0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 6f 6e ;.}../*.** If on
7fd0: 65 20 6f 66 20 74 68 65 20 22 6e 61 6d 65 22 20 e of the "name"
7fe0: 6f 72 20 22 70 61 67 65 22 20 55 52 4c 20 70 61 or "page" URL pa
7ff0: 72 61 6d 65 74 65 72 73 20 28 69 6e 20 74 68 61 rameters (in tha
8000: 74 20 6f 72 64 65 72 29 0a 2a 2a 20 69 73 20 73 t order).** is s
8010: 65 74 20 74 68 65 6e 20 74 68 69 73 20 66 75 6e et then this fun
8020: 63 74 69 6f 6e 20 6c 6f 6f 6b 73 20 66 6f 72 20 ction looks for
8030: 70 61 67 65 2f 70 61 67 65 20 67 72 6f 75 70 2d page/page group-
8040: 73 70 65 63 69 66 69 63 0a 2a 2a 20 43 53 53 20 specific.** CSS
8050: 61 6e 64 20 28 69 66 20 66 6f 75 6e 64 29 20 61 and (if found) a
8060: 70 70 65 6e 64 73 20 69 74 20 74 6f 20 70 4f 75 ppends it to pOu
8070: 74 2c 20 65 6c 73 65 20 69 74 20 69 73 20 61 20 t, else it is a
8080: 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 73 74 61 74 69 63 no-op..*/.static
8090: 20 76 6f 69 64 20 70 61 67 65 5f 73 74 79 6c 65 void page_style
80a0: 5f 63 73 73 5f 61 70 70 65 6e 64 5f 70 61 67 65 _css_append_page
80b0: 5f 73 74 79 6c 65 28 42 6c 6f 62 20 2a 70 4f 75 _style(Blob *pOu
80c0: 74 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 t){. const char
80d0: 20 2a 7a 50 61 67 65 20 3d 20 50 44 28 22 6e 61 *zPage = PD("na
80e0: 6d 65 22 2c 50 28 22 70 61 67 65 22 29 29 3b 0a me",P("page"));.
80f0: 20 20 63 68 61 72 20 2a 20 7a 46 69 6c 65 3b 0a char * zFile;.
8100: 20 20 69 6e 74 20 6e 46 69 6c 65 20 3d 20 30 3b int nFile = 0;
8110: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a . const char *z
8120: 42 75 69 6c 74 69 6e 3b 0a 0a 20 20 69 66 28 7a Builtin;.. if(z
8130: 50 61 67 65 3d 3d 30 20 7c 7c 20 7a 50 61 67 65 Page==0 || zPage
8140: 5b 30 5d 3d 3d 30 29 7b 0a 20 20 20 20 72 65 74 [0]==0){. ret
8150: 75 72 6e 3b 0a 20 20 7d 0a 20 20 7a 46 69 6c 65 urn;. }. zFile
8160: 20 3d 20 6d 70 72 69 6e 74 66 28 22 73 74 79 6c = mprintf("styl
8170: 65 2e 25 73 2e 63 73 73 22 2c 20 7a 50 61 67 65 e.%s.css", zPage
8180: 29 3b 0a 20 20 7a 42 75 69 6c 74 69 6e 20 3d 20 );. zBuiltin =
8190: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 62 75 (const char *)bu
81a0: 69 6c 74 69 6e 5f 66 69 6c 65 28 7a 46 69 6c 65 iltin_file(zFile
81b0: 2c 20 26 6e 46 69 6c 65 29 3b 0a 20 20 69 66 28 , &nFile);. if(
81c0: 6e 46 69 6c 65 3e 30 29 7b 0a 20 20 20 20 62 6c nFile>0){. bl
81d0: 6f 62 5f 61 70 70 65 6e 64 66 28 70 4f 75 74 2c ob_appendf(pOut,
81e0: 0a 20 20 20 20 20 20 22 5c 6e 2f 2a 2a 2a 2a 2a . "\n/*****
81f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
8200: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
8210: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
8220: 2a 2a 2a 2a 2a 2a 5c 6e 22 0a 20 20 20 20 20 20 ******\n".
8230: 22 2a 2a 20 53 74 61 72 74 20 6f 66 20 70 61 67 "** Start of pag
8240: 65 2d 73 70 65 63 69 66 69 63 20 43 53 53 20 66 e-specific CSS f
8250: 6f 72 20 70 61 67 65 20 25 73 2e 2e 2e 5c 6e 22 or page %s...\n"
8260: 0a 20 20 20 20 20 20 22 2a 2a 2a 2a 2a 2a 2a 2a . "********
8270: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
8280: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
8290: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
82a0: 2a 2a 2a 2f 5c 6e 22 2c 0a 20 20 20 20 20 20 7a ***/\n",. z
82b0: 50 61 67 65 29 3b 0a 20 20 20 20 62 6c 6f 62 5f Page);. blob_
82c0: 61 70 70 65 6e 64 28 70 4f 75 74 2c 20 7a 42 75 append(pOut, zBu
82d0: 69 6c 74 69 6e 2c 20 6e 46 69 6c 65 29 3b 0a 20 iltin, nFile);.
82e0: 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 blob_appendf(
82f0: 70 4f 75 74 2c 0a 20 20 20 20 20 20 22 5c 6e 2f pOut,. "\n/
8300: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
8310: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
8320: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
8330: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 5c 6e 22 0a 20 ***********\n".
8340: 20 20 20 20 20 22 2a 2a 20 45 6e 64 20 6f 66 20 "** End of
8350: 70 61 67 65 2d 73 70 65 63 69 66 69 63 20 43 53 page-specific CS
8360: 53 20 66 6f 72 20 70 61 67 65 20 25 73 2e 5c 6e S for page %s.\n
8370: 22 0a 20 20 20 20 20 20 22 2a 2a 2a 2a 2a 2a 2a ". "*******
8380: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
8390: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
83a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
83b0: 2a 2a 2a 2a 2f 5c 6e 22 2c 0a 20 20 20 20 20 20 ****/\n",.
83c0: 7a 50 61 67 65 29 3b 0a 20 20 20 20 66 6f 73 73 zPage);. foss
83d0: 69 6c 5f 66 72 65 65 28 7a 46 69 6c 65 29 3b 0a il_free(zFile);.
83e0: 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a return;. }.
83f0: 20 20 2f 2a 20 50 6f 74 65 6e 74 69 61 6c 20 54 /* Potential T
8400: 4f 44 4f 3a 20 63 68 65 63 6b 20 66 6f 72 20 61 ODO: check for a
8410: 6c 69 61 73 65 73 2f 70 61 67 65 20 67 72 6f 75 liases/page grou
8420: 70 73 2e 20 65 2e 67 2e 20 67 72 6f 75 70 20 61 ps. e.g. group a
8430: 6c 6c 0a 20 20 2a 2a 20 2f 66 6f 72 75 6d 58 59 ll. ** /forumXY
8440: 5a 20 43 53 53 20 69 6e 74 6f 20 6f 6e 65 20 66 Z CSS into one f
8450: 69 6c 65 2c 20 61 6c 6c 20 2f 73 65 74 75 70 58 ile, all /setupX
8460: 59 5a 20 69 6e 74 6f 20 61 6e 6f 74 68 65 72 2c YZ into another,
8470: 20 65 74 63 2e 20 41 73 0a 20 20 2a 2a 20 6f 66 etc. As. ** of
8480: 20 74 68 69 73 20 77 72 69 74 69 6e 67 2c 20 64 this writing, d
8490: 6f 69 6e 67 20 73 6f 20 77 6f 75 6c 64 20 6f 6e oing so would on
84a0: 6c 79 20 73 68 61 76 65 20 61 20 66 65 77 20 6b ly shave a few k
84b0: 62 20 66 72 6f 6d 0a 20 20 2a 2a 20 64 65 66 61 b from. ** defa
84c0: 75 6c 74 2e 63 73 73 2e 20 2a 2f 0a 20 20 66 6f ult.css. */. fo
84d0: 73 73 69 6c 5f 66 72 65 65 28 7a 46 69 6c 65 29 ssil_free(zFile)
84e0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 50 41 ;.}../*.** WEBPA
84f0: 47 45 3a 20 73 74 79 6c 65 2e 63 73 73 0a 2a 2a GE: style.css.**
8500: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 73 .** Return the s
8510: 74 79 6c 65 20 73 68 65 65 74 2e 0a 2a 2f 0a 76 tyle sheet..*/.v
8520: 6f 69 64 20 70 61 67 65 5f 73 74 79 6c 65 5f 63 oid page_style_c
8530: 73 73 28 76 6f 69 64 29 7b 0a 20 20 42 6c 6f 62 ss(void){. Blob
8540: 20 63 73 73 20 3d 20 65 6d 70 74 79 5f 62 6c 6f css = empty_blo
8550: 62 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 63 6f b;. int i;. co
8560: 6e 73 74 20 63 68 61 72 20 2a 20 7a 44 65 66 61 nst char * zDefa
8570: 75 6c 74 73 3b 0a 0a 20 20 63 67 69 5f 73 65 74 ults;.. cgi_set
8580: 5f 63 6f 6e 74 65 6e 74 5f 74 79 70 65 28 22 74 _content_type("t
8590: 65 78 74 2f 63 73 73 22 29 3b 0a 20 20 65 74 61 ext/css");. eta
85a0: 67 5f 63 68 65 63 6b 28 30 2c 20 30 29 3b 0a 20 g_check(0, 0);.
85b0: 20 2f 2a 20 45 6d 69 74 20 61 6c 6c 20 64 65 66 /* Emit all def
85c0: 61 75 6c 74 20 72 75 6c 65 73 2e 2e 2e 20 2a 2f ault rules... */
85d0: 0a 20 20 7a 44 65 66 61 75 6c 74 73 20 3d 20 28 . zDefaults = (
85e0: 63 6f 6e 73 74 20 63 68 61 72 2a 29 62 75 69 6c const char*)buil
85f0: 74 69 6e 5f 66 69 6c 65 28 22 64 65 66 61 75 6c tin_file("defaul
8600: 74 2e 63 73 73 22 2c 20 26 69 29 3b 0a 20 20 62 t.css", &i);. b
8610: 6c 6f 62 5f 61 70 70 65 6e 64 28 26 63 73 73 2c lob_append(&css,
8620: 20 7a 44 65 66 61 75 6c 74 73 2c 20 69 29 3b 0a zDefaults, i);.
8630: 20 20 2f 2a 20 50 61 67 65 2d 73 70 65 63 69 66 /* Page-specif
8640: 69 63 20 43 53 53 2c 20 69 66 20 61 6e 79 2e 2e ic CSS, if any..
8650: 2e 20 2a 2f 0a 20 20 70 61 67 65 5f 73 74 79 6c . */. page_styl
8660: 65 5f 63 73 73 5f 61 70 70 65 6e 64 5f 70 61 67 e_css_append_pag
8670: 65 5f 73 74 79 6c 65 28 26 63 73 73 29 3b 0a 20 e_style(&css);.
8680: 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28 26 63 73 blob_append(&cs
8690: 73 2c 0a 20 20 20 20 20 22 5c 6e 2f 2a 2a 2a 2a s,. "\n/****
86a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
86b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
86c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
86d0: 2a 2a 2a 2a 2a 2a 2a 5c 6e 22 0a 20 20 20 20 20 *******\n".
86e0: 22 2a 2a 20 41 6c 6c 20 43 53 53 20 77 68 69 63 "** All CSS whic
86f0: 68 20 66 6f 6c 6c 6f 77 73 20 69 73 20 73 75 70 h follows is sup
8700: 70 6c 69 65 64 20 62 79 20 74 68 65 20 72 65 70 plied by the rep
8710: 6f 73 69 74 6f 72 79 20 5c 22 73 6b 69 6e 5c 22 ository \"skin\"
8720: 2e 5c 6e 22 0a 20 20 20 20 20 22 2a 2a 2a 2a 2a .\n". "*****
8730: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
8740: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
8750: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
8760: 2a 2a 2a 2a 2a 2a 2f 5c 6e 22 2c 0a 20 20 20 20 ******/\n",.
8770: 20 2d 31 29 3b 0a 20 20 62 6c 6f 62 5f 61 70 70 -1);. blob_app
8780: 65 6e 64 28 26 63 73 73 2c 73 6b 69 6e 5f 67 65 end(&css,skin_ge
8790: 74 28 22 63 73 73 22 29 2c 2d 31 29 3b 0a 20 20 t("css"),-1);.
87a0: 2f 2a 20 50 72 6f 63 65 73 73 20 74 68 72 6f 75 /* Process throu
87b0: 67 68 20 54 48 31 20 69 6e 20 6f 72 64 65 72 20 gh TH1 in order
87c0: 74 6f 20 67 69 76 65 20 61 6e 20 6f 70 70 6f 72 to give an oppor
87d0: 74 75 6e 69 74 79 20 74 6f 20 73 75 62 73 74 69 tunity to substi
87e0: 74 75 74 65 0a 20 20 2a 2a 20 76 61 72 69 61 62 tute. ** variab
87f0: 6c 65 73 20 73 75 63 68 20 61 73 20 24 62 61 73 les such as $bas
8800: 65 75 72 6c 2e 0a 20 20 2a 2f 0a 20 20 54 68 5f eurl.. */. Th_
8810: 53 74 6f 72 65 28 22 62 61 73 65 75 72 6c 22 2c Store("baseurl",
8820: 20 67 2e 7a 42 61 73 65 55 52 4c 29 3b 0a 20 20 g.zBaseURL);.
8830: 54 68 5f 53 74 6f 72 65 28 22 73 65 63 75 72 65 Th_Store("secure
8840: 75 72 6c 22 2c 20 66 6f 73 73 69 6c 5f 77 61 6e url", fossil_wan
8850: 74 73 5f 68 74 74 70 73 28 31 29 3f 20 67 2e 7a ts_https(1)? g.z
8860: 48 74 74 70 73 55 52 4c 3a 20 67 2e 7a 42 61 73 HttpsURL: g.zBas
8870: 65 55 52 4c 29 3b 0a 20 20 54 68 5f 53 74 6f 72 eURL);. Th_Stor
8880: 65 28 22 68 6f 6d 65 22 2c 20 67 2e 7a 54 6f 70 e("home", g.zTop
8890: 29 3b 0a 20 20 69 6d 61 67 65 5f 75 72 6c 5f 76 );. image_url_v
88a0: 61 72 28 22 6c 6f 67 6f 22 29 3b 0a 20 20 69 6d ar("logo");. im
88b0: 61 67 65 5f 75 72 6c 5f 76 61 72 28 22 62 61 63 age_url_var("bac
88c0: 6b 67 72 6f 75 6e 64 22 29 3b 0a 20 20 54 68 5f kground");. Th_
88d0: 52 65 6e 64 65 72 28 62 6c 6f 62 5f 73 74 72 28 Render(blob_str(
88e0: 26 63 73 73 29 29 3b 0a 0a 20 20 2f 2a 20 54 65 &css));.. /* Te
88f0: 6c 6c 20 43 47 49 20 74 68 61 74 20 74 68 65 20 ll CGI that the
8900: 63 6f 6e 74 65 6e 74 20 72 65 74 75 72 6e 65 64 content returned
8910: 20 62 79 20 74 68 69 73 20 70 61 67 65 20 69 73 by this page is
8920: 20 63 6f 6e 73 69 64 65 72 65 64 20 63 61 63 68 considered cach
8930: 65 61 62 6c 65 20 2a 2f 0a 20 20 67 2e 69 73 43 eable */. g.isC
8940: 6f 6e 73 74 20 3d 20 31 3b 0a 7d 0a 0a 2f 2a 0a onst = 1;.}../*.
8950: 2a 2a 20 41 6c 6c 20 70 6f 73 73 69 62 6c 65 20 ** All possible
8960: 63 61 70 61 62 69 6c 69 74 69 65 73 0a 2a 2f 0a capabilities.*/.
8970: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 static const cha
8980: 72 20 61 6c 6c 43 61 70 5b 5d 20 3d 20 0a 20 20 r allCap[] = .
8990: 22 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f "abcdefghijklmno
89a0: 70 71 72 73 74 75 76 77 78 79 7a 30 31 32 33 34 pqrstuvwxyz01234
89b0: 35 36 37 38 39 41 42 43 44 45 46 47 48 49 4a 4b 56789ABCDEFGHIJK
89c0: 4c 22 3b 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d 70 75 L";../*.** Compu
89d0: 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 6c te the current l
89e0: 6f 67 69 6e 20 63 61 70 61 62 69 6c 69 74 69 65 ogin capabilitie
89f0: 73 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68 61 72 s.*/.static char
8a00: 20 2a 66 69 6e 64 5f 63 61 70 61 62 69 6c 69 74 *find_capabilit
8a10: 69 65 73 28 63 68 61 72 20 2a 7a 43 61 70 29 7b ies(char *zCap){
8a20: 0a 20 20 69 6e 74 20 69 2c 20 6a 3b 0a 20 20 63 . int i, j;. c
8a30: 68 61 72 20 63 3b 0a 20 20 66 6f 72 28 69 3d 6a har c;. for(i=j
8a40: 3d 30 3b 20 28 63 20 3d 20 61 6c 6c 43 61 70 5b =0; (c = allCap[
8a50: 6a 5d 29 21 3d 30 3b 20 6a 2b 2b 29 7b 0a 20 20 j])!=0; j++){.
8a60: 20 20 69 66 28 20 6c 6f 67 69 6e 5f 68 61 73 5f if( login_has_
8a70: 63 61 70 61 62 69 6c 69 74 79 28 26 63 2c 20 31 capability(&c, 1
8a80: 2c 20 30 29 20 29 20 7a 43 61 70 5b 69 2b 2b 5d , 0) ) zCap[i++]
8a90: 20 3d 20 63 3b 0a 20 20 7d 0a 20 20 7a 43 61 70 = c;. }. zCap
8aa0: 5b 69 5d 20 3d 20 30 3b 0a 20 20 72 65 74 75 72 [i] = 0;. retur
8ab0: 6e 20 7a 43 61 70 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a n zCap;.}../*.**
8ac0: 20 43 6f 6d 70 75 74 65 20 74 68 65 20 63 75 72 Compute the cur
8ad0: 72 65 6e 74 20 6c 6f 67 69 6e 20 63 61 70 61 62 rent login capab
8ae0: 69 6c 69 74 69 65 73 20 74 68 61 74 20 77 65 72 ilities that wer
8af0: 65 0a 2a 2a 20 63 6f 6e 74 72 69 62 75 74 65 64 e.** contributed
8b00: 20 62 79 20 41 6e 6f 6e 79 6d 6f 75 73 0a 2a 2f by Anonymous.*/
8b10: 0a 73 74 61 74 69 63 20 63 68 61 72 20 2a 66 69 .static char *fi
8b20: 6e 64 5f 61 6e 6f 6e 5f 63 61 70 61 62 69 6c 69 nd_anon_capabili
8b30: 74 69 65 73 28 63 68 61 72 20 2a 7a 43 61 70 29 ties(char *zCap)
8b40: 7b 0a 20 20 69 6e 74 20 69 2c 20 6a 3b 0a 20 20 {. int i, j;.
8b50: 63 68 61 72 20 63 3b 0a 20 20 66 6f 72 28 69 3d char c;. for(i=
8b60: 6a 3d 30 3b 20 28 63 20 3d 20 61 6c 6c 43 61 70 j=0; (c = allCap
8b70: 5b 6a 5d 29 21 3d 30 3b 20 6a 2b 2b 29 7b 0a 20 [j])!=0; j++){.
8b80: 20 20 20 69 66 28 20 6c 6f 67 69 6e 5f 68 61 73 if( login_has
8b90: 5f 63 61 70 61 62 69 6c 69 74 79 28 26 63 2c 20 _capability(&c,
8ba0: 31 2c 20 4c 4f 47 49 4e 5f 41 4e 4f 4e 29 0a 20 1, LOGIN_ANON).
8bb0: 20 20 20 20 20 26 26 20 21 6c 6f 67 69 6e 5f 68 && !login_h
8bc0: 61 73 5f 63 61 70 61 62 69 6c 69 74 79 28 26 63 as_capability(&c
8bd0: 2c 20 31 2c 20 30 29 20 29 20 7a 43 61 70 5b 69 , 1, 0) ) zCap[i
8be0: 2b 2b 5d 20 3d 20 63 3b 0a 20 20 7d 0a 20 20 7a ++] = c;. }. z
8bf0: 43 61 70 5b 69 5d 20 3d 20 30 3b 0a 20 20 72 65 Cap[i] = 0;. re
8c00: 74 75 72 6e 20 7a 43 61 70 3b 0a 7d 0a 0a 2f 2a turn zCap;.}../*
8c10: 0a 2a 2a 20 57 45 42 50 41 47 45 3a 20 74 65 73 .** WEBPAGE: tes
8c20: 74 5f 65 6e 76 0a 2a 2a 0a 2a 2a 20 44 69 73 70 t_env.**.** Disp
8c30: 6c 61 79 20 43 47 49 2d 76 61 72 69 61 62 6c 65 lay CGI-variable
8c40: 73 20 61 6e 64 20 6f 74 68 65 72 20 61 73 70 65 s and other aspe
8c50: 63 74 73 20 6f 66 20 74 68 65 20 72 75 6e 2d 74 cts of the run-t
8c60: 69 6d 65 0a 2a 2a 20 65 6e 76 69 72 6f 6e 6d 65 ime.** environme
8c70: 6e 74 2c 20 66 6f 72 20 64 65 62 75 67 67 69 6e nt, for debuggin
8c80: 67 20 61 6e 64 20 74 72 6f 75 62 6c 65 2d 73 68 g and trouble-sh
8c90: 6f 6f 74 69 6e 67 20 70 75 72 70 6f 73 65 73 2e ooting purposes.
8ca0: 0a 2a 2f 0a 76 6f 69 64 20 70 61 67 65 5f 74 65 .*/.void page_te
8cb0: 73 74 5f 65 6e 76 28 76 6f 69 64 29 7b 0a 20 20 st_env(void){.
8cc0: 77 65 62 70 61 67 65 5f 65 72 72 6f 72 28 22 22 webpage_error(""
8cd0: 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 45 42 50 );.}../*.** WEBP
8ce0: 41 47 45 3a 20 68 6f 6e 65 79 70 6f 74 0a 2a 2a AGE: honeypot.**
8cf0: 20 54 68 69 73 20 70 61 67 65 20 69 73 20 61 20 This page is a
8d00: 68 6f 6e 65 79 70 6f 74 20 66 6f 72 20 73 70 69 honeypot for spi
8d10: 64 65 72 73 20 61 6e 64 20 62 6f 74 73 2e 0a 2a ders and bots..*
8d20: 2f 0a 76 6f 69 64 20 68 6f 6e 65 79 70 6f 74 5f /.void honeypot_
8d30: 70 61 67 65 28 76 6f 69 64 29 7b 0a 20 20 63 67 page(void){. cg
8d40: 69 5f 73 65 74 5f 73 74 61 74 75 73 28 34 30 33 i_set_status(403
8d50: 2c 20 22 46 6f 72 62 69 64 64 65 6e 22 29 3b 0a , "Forbidden");.
8d60: 20 20 40 20 3c 70 3e 50 6c 65 61 73 65 20 65 6e @ <p>Please en
8d70: 61 62 6c 65 20 6a 61 76 61 73 63 72 69 70 74 20 able javascript
8d80: 6f 72 20 6c 6f 67 20 69 6e 20 74 6f 20 73 65 65 or log in to see
8d90: 20 74 68 69 73 20 63 6f 6e 74 65 6e 74 3c 2f 70 this content</p
8da0: 3e 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 65 62 70 61 >.}../*.** Webpa
8db0: 67 65 73 20 74 68 61 74 20 65 6e 63 6f 75 6e 74 ges that encount
8dc0: 65 72 20 61 6e 20 65 72 72 6f 72 20 64 75 65 20 er an error due
8dd0: 74 6f 20 6d 69 73 73 69 6e 67 20 6f 72 20 69 6e to missing or in
8de0: 63 6f 72 72 65 63 74 0a 2a 2a 20 71 75 65 72 79 correct.** query
8df0: 20 70 61 72 61 6d 65 74 65 72 73 20 63 61 6e 20 parameters can
8e00: 6a 75 6d 70 20 74 6f 20 74 68 69 73 20 72 6f 75 jump to this rou
8e10: 74 69 6e 65 20 74 6f 20 72 65 6e 64 65 72 20 61 tine to render a
8e20: 6e 20 65 72 72 6f 72 0a 2a 2a 20 6d 65 73 73 61 n error.** messa
8e30: 67 65 20 73 63 72 65 65 6e 2e 0a 2a 2a 0a 2a 2a ge screen..**.**
8e40: 20 46 6f 72 20 61 64 6d 69 6e 69 73 74 61 74 6f For administato
8e50: 72 73 2c 20 6f 72 20 69 66 20 74 68 65 20 74 65 rs, or if the te
8e60: 73 74 5f 65 6e 76 5f 65 6e 61 62 6c 65 20 73 65 st_env_enable se
8e70: 74 74 69 6e 67 20 69 73 20 74 72 75 65 2c 20 74 tting is true, t
8e80: 68 65 6e 0a 2a 2a 20 64 65 74 61 69 6c 73 20 6f hen.** details o
8e90: 66 20 74 68 65 20 72 65 71 75 65 73 74 20 65 6e f the request en
8ea0: 76 69 72 6f 6e 6d 65 6e 74 20 61 72 65 20 64 69 vironment are di
8eb0: 73 70 6c 61 79 65 64 2e 20 20 4f 74 68 65 72 77 splayed. Otherw
8ec0: 69 73 65 2c 20 6a 75 73 74 0a 2a 2a 20 74 68 65 ise, just.** the
8ed0: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69 error message i
8ee0: 73 20 73 68 6f 77 6e 2e 0a 2a 2a 0a 2a 2a 20 49 s shown..**.** I
8ef0: 66 20 7a 46 6f 72 6d 61 74 20 69 73 20 61 6e 20 f zFormat is an
8f00: 65 6d 70 74 79 20 73 74 72 69 6e 67 2c 20 74 68 empty string, th
8f10: 65 6e 20 74 68 69 73 20 69 73 20 74 68 65 20 2f en this is the /
8f20: 74 65 73 74 5f 65 6e 76 20 70 61 67 65 2e 0a 2a test_env page..*
8f30: 2f 0a 76 6f 69 64 20 77 65 62 70 61 67 65 5f 65 /.void webpage_e
8f40: 72 72 6f 72 28 63 6f 6e 73 74 20 63 68 61 72 20 rror(const char
8f50: 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a *zFormat, ...){.
8f60: 20 20 69 6e 74 20 73 68 6f 77 41 6c 6c 3b 0a 20 int showAll;.
8f70: 20 63 68 61 72 20 2a 7a 45 72 72 20 3d 20 30 3b char *zErr = 0;
8f80: 0a 20 20 69 6e 74 20 69 73 41 75 74 68 20 3d 20 . int isAuth =
8f90: 30 3b 0a 20 20 63 68 61 72 20 7a 43 61 70 5b 31 0;. char zCap[1
8fa0: 30 30 5d 3b 0a 0a 20 20 6c 6f 67 69 6e 5f 63 68 00];.. login_ch
8fb0: 65 63 6b 5f 63 72 65 64 65 6e 74 69 61 6c 73 28 eck_credentials(
8fc0: 29 3b 0a 20 20 69 66 28 20 67 2e 70 65 72 6d 2e );. if( g.perm.
8fd0: 41 64 6d 69 6e 20 7c 7c 20 67 2e 70 65 72 6d 2e Admin || g.perm.
8fe0: 53 65 74 75 70 20 20 7c 7c 20 64 62 5f 67 65 74 Setup || db_get
8ff0: 5f 62 6f 6f 6c 65 61 6e 28 22 74 65 73 74 5f 65 _boolean("test_e
9000: 6e 76 5f 65 6e 61 62 6c 65 22 2c 30 29 20 29 7b nv_enable",0) ){
9010: 0a 20 20 20 20 69 73 41 75 74 68 20 3d 20 31 3b . isAuth = 1;
9020: 0a 20 20 7d 0a 20 20 63 67 69 5f 6c 6f 61 64 5f . }. cgi_load_
9030: 65 6e 76 69 72 6f 6e 6d 65 6e 74 28 29 3b 0a 20 environment();.
9040: 20 73 74 79 6c 65 5f 73 65 74 5f 63 75 72 72 65 style_set_curre
9050: 6e 74 5f 66 65 61 74 75 72 65 28 22 65 72 72 6f nt_feature("erro
9060: 72 22 29 3b 0a 20 20 69 66 28 20 7a 46 6f 72 6d r");. if( zForm
9070: 61 74 5b 30 5d 20 29 7b 0a 20 20 20 20 76 61 5f at[0] ){. va_
9080: 6c 69 73 74 20 61 70 3b 0a 20 20 20 20 76 61 5f list ap;. va_
9090: 73 74 61 72 74 28 61 70 2c 20 7a 46 6f 72 6d 61 start(ap, zForma
90a0: 74 29 3b 0a 20 20 20 20 7a 45 72 72 20 3d 20 76 t);. zErr = v
90b0: 6d 70 72 69 6e 74 66 28 7a 46 6f 72 6d 61 74 2c mprintf(zFormat,
90c0: 20 61 70 29 3b 0a 20 20 20 20 76 61 5f 65 6e 64 ap);. va_end
90d0: 28 61 70 29 3b 0a 20 20 20 20 73 74 79 6c 65 5f (ap);. style_
90e0: 68 65 61 64 65 72 28 22 42 61 64 20 52 65 71 75 header("Bad Requ
90f0: 65 73 74 22 29 3b 0a 20 20 20 20 40 20 3c 68 31 est");. @ <h1
9100: 3e 2f 25 68 28 67 2e 7a 50 61 74 68 29 3a 20 25 >/%h(g.zPath): %
9110: 68 28 7a 45 72 72 29 3c 2f 68 31 3e 0a 20 20 20 h(zErr)</h1>.
9120: 20 73 68 6f 77 41 6c 6c 20 3d 20 30 3b 0a 20 20 showAll = 0;.
9130: 20 20 63 67 69 5f 73 65 74 5f 73 74 61 74 75 73 cgi_set_status
9140: 28 35 30 30 2c 20 22 42 61 64 20 52 65 71 75 65 (500, "Bad Reque
9150: 73 74 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 st");. }else if
9160: 28 20 21 69 73 41 75 74 68 20 29 7b 0a 20 20 20 ( !isAuth ){.
9170: 20 6c 6f 67 69 6e 5f 6e 65 65 64 65 64 28 30 29 login_needed(0)
9180: 3b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 ;. return;.
9190: 7d 65 6c 73 65 7b 0a 20 20 20 20 73 74 79 6c 65 }else{. style
91a0: 5f 68 65 61 64 65 72 28 22 45 6e 76 69 72 6f 6e _header("Environ
91b0: 6d 65 6e 74 20 54 65 73 74 22 29 3b 0a 20 20 20 ment Test");.
91c0: 20 73 68 6f 77 41 6c 6c 20 3d 20 50 42 28 22 73 showAll = PB("s
91d0: 68 6f 77 61 6c 6c 22 29 3b 0a 20 20 20 20 73 74 howall");. st
91e0: 79 6c 65 5f 73 75 62 6d 65 6e 75 5f 63 68 65 63 yle_submenu_chec
91f0: 6b 62 6f 78 28 22 73 68 6f 77 61 6c 6c 22 2c 20 kbox("showall",
9200: 22 43 6f 6f 6b 69 65 73 22 2c 20 30 2c 20 30 29 "Cookies", 0, 0)
9210: 3b 0a 20 20 20 20 73 74 79 6c 65 5f 73 75 62 6d ;. style_subm
9220: 65 6e 75 5f 65 6c 65 6d 65 6e 74 28 22 53 74 61 enu_element("Sta
9230: 74 73 22 2c 20 22 25 52 2f 73 74 61 74 22 29 3b ts", "%R/stat");
9240: 0a 20 20 7d 0a 0a 20 20 69 66 28 20 69 73 41 75 . }.. if( isAu
9250: 74 68 20 29 7b 0a 20 20 23 69 66 20 21 64 65 66 th ){. #if !def
9260: 69 6e 65 64 28 5f 57 49 4e 33 32 29 0a 20 20 20 ined(_WIN32).
9270: 20 40 20 75 69 64 3d 25 64 28 67 65 74 75 69 64 @ uid=%d(getuid
9280: 28 29 29 2c 20 67 69 64 3d 25 64 28 67 65 74 67 ()), gid=%d(getg
9290: 69 64 28 29 29 3c 62 72 20 2f 3e 0a 20 20 23 65 id())<br />. #e
92a0: 6e 64 69 66 0a 20 20 20 20 40 20 67 2e 7a 42 61 ndif. @ g.zBa
92b0: 73 65 55 52 4c 20 3d 20 25 68 28 67 2e 7a 42 61 seURL = %h(g.zBa
92c0: 73 65 55 52 4c 29 3c 62 72 20 2f 3e 0a 20 20 20 seURL)<br />.
92d0: 20 40 20 67 2e 7a 48 74 74 70 73 55 52 4c 20 3d @ g.zHttpsURL =
92e0: 20 25 68 28 67 2e 7a 48 74 74 70 73 55 52 4c 29 %h(g.zHttpsURL)
92f0: 3c 62 72 20 2f 3e 0a 20 20 20 20 40 20 67 2e 7a <br />. @ g.z
9300: 54 6f 70 20 3d 20 25 68 28 67 2e 7a 54 6f 70 29 Top = %h(g.zTop)
9310: 3c 62 72 20 2f 3e 0a 20 20 20 20 40 20 67 2e 7a <br />. @ g.z
9320: 50 61 74 68 20 3d 20 25 68 28 67 2e 7a 50 61 74 Path = %h(g.zPat
9330: 68 29 3c 62 72 20 2f 3e 0a 20 20 20 20 40 20 67 h)<br />. @ g
9340: 2e 75 73 65 72 55 69 64 20 3d 20 25 64 28 67 2e .userUid = %d(g.
9350: 75 73 65 72 55 69 64 29 3c 62 72 20 2f 3e 0a 20 userUid)<br />.
9360: 20 20 20 40 20 67 2e 7a 4c 6f 67 69 6e 20 3d 20 @ g.zLogin =
9370: 25 68 28 67 2e 7a 4c 6f 67 69 6e 29 3c 62 72 20 %h(g.zLogin)<br
9380: 2f 3e 0a 20 20 20 20 40 20 67 2e 69 73 48 75 6d />. @ g.isHum
9390: 61 6e 20 3d 20 25 64 28 67 2e 69 73 48 75 6d 61 an = %d(g.isHuma
93a0: 6e 29 3c 62 72 20 2f 3e 0a 20 20 20 20 69 66 28 n)<br />. if(
93b0: 20 67 2e 6e 52 65 71 75 65 73 74 20 29 7b 0a 20 g.nRequest ){.
93c0: 20 20 20 20 20 40 20 67 2e 6e 52 65 71 75 65 73 @ g.nReques
93d0: 74 20 3d 20 25 64 28 67 2e 6e 52 65 71 75 65 73 t = %d(g.nReques
93e0: 74 29 3c 62 72 20 2f 3e 0a 20 20 20 20 7d 0a 20 t)<br />. }.
93f0: 20 20 20 69 66 28 20 67 2e 6e 50 65 6e 64 69 6e if( g.nPendin
9400: 67 52 65 71 75 65 73 74 3e 31 20 29 7b 0a 20 20 gRequest>1 ){.
9410: 20 20 20 20 40 20 67 2e 6e 50 65 6e 64 69 6e 67 @ g.nPending
9420: 52 65 71 75 65 73 74 20 3d 20 25 64 28 67 2e 6e Request = %d(g.n
9430: 50 65 6e 64 69 6e 67 52 65 71 75 65 73 74 29 3c PendingRequest)<
9440: 62 72 20 2f 3e 0a 20 20 20 20 7d 0a 20 20 20 20 br />. }.
9450: 40 20 63 61 70 61 62 69 6c 69 74 69 65 73 20 3d @ capabilities =
9460: 20 25 73 28 66 69 6e 64 5f 63 61 70 61 62 69 6c %s(find_capabil
9470: 69 74 69 65 73 28 7a 43 61 70 29 29 3c 62 72 20 ities(zCap))<br
9480: 2f 3e 0a 20 20 20 20 69 66 28 20 7a 43 61 70 5b />. if( zCap[
9490: 30 5d 20 29 7b 0a 20 20 20 20 20 20 40 20 61 6e 0] ){. @ an
94a0: 6f 6e 79 6d 6f 75 73 2d 61 64 64 73 20 3d 20 25 onymous-adds = %
94b0: 73 28 66 69 6e 64 5f 61 6e 6f 6e 5f 63 61 70 61 s(find_anon_capa
94c0: 62 69 6c 69 74 69 65 73 28 7a 43 61 70 29 29 3c bilities(zCap))<
94d0: 62 72 20 2f 3e 0a 20 20 20 20 7d 0a 20 20 20 20 br />. }.
94e0: 40 20 67 2e 7a 52 65 70 6f 73 69 74 6f 72 79 4e @ g.zRepositoryN
94f0: 61 6d 65 20 3d 20 25 68 28 67 2e 7a 52 65 70 6f ame = %h(g.zRepo
9500: 73 69 74 6f 72 79 4e 61 6d 65 29 3c 62 72 20 2f sitoryName)<br /
9510: 3e 0a 20 20 20 20 40 20 6c 6f 61 64 5f 61 76 65 >. @ load_ave
9520: 72 61 67 65 28 29 20 3d 20 25 66 28 6c 6f 61 64 rage() = %f(load
9530: 5f 61 76 65 72 61 67 65 28 29 29 3c 62 72 20 2f _average())<br /
9540: 3e 0a 20 20 20 20 40 20 63 67 69 5f 63 73 72 66 >. @ cgi_csrf
9550: 5f 73 61 66 65 28 30 29 20 3d 20 25 64 28 63 67 _safe(0) = %d(cg
9560: 69 5f 63 73 72 66 5f 73 61 66 65 28 30 29 29 3c i_csrf_safe(0))<
9570: 62 72 20 2f 3e 0a 20 20 20 20 40 20 66 6f 73 73 br />. @ foss
9580: 69 6c 5f 65 78 65 5f 69 64 28 29 20 3d 20 25 68 il_exe_id() = %h
9590: 28 66 6f 73 73 69 6c 5f 65 78 65 5f 69 64 28 29 (fossil_exe_id()
95a0: 29 3c 62 72 20 2f 3e 0a 20 20 20 20 40 20 3c 68 )<br />. @ <h
95b0: 72 20 2f 3e 0a 20 20 20 20 50 28 22 48 54 54 50 r />. P("HTTP
95c0: 5f 55 53 45 52 5f 41 47 45 4e 54 22 29 3b 0a 20 _USER_AGENT");.
95d0: 20 20 20 63 67 69 5f 70 72 69 6e 74 5f 61 6c 6c cgi_print_all
95e0: 28 73 68 6f 77 41 6c 6c 2c 20 30 29 3b 0a 20 20 (showAll, 0);.
95f0: 20 20 69 66 28 20 73 68 6f 77 41 6c 6c 20 26 26 if( showAll &&
9600: 20 62 6c 6f 62 5f 73 69 7a 65 28 26 67 2e 68 74 blob_size(&g.ht
9610: 74 70 48 65 61 64 65 72 29 3e 30 20 29 7b 0a 20 tpHeader)>0 ){.
9620: 20 20 20 20 20 40 20 3c 68 72 20 2f 3e 0a 20 20 @ <hr />.
9630: 20 20 20 20 40 20 3c 70 72 65 3e 0a 20 20 20 20 @ <pre>.
9640: 20 20 40 20 25 68 28 62 6c 6f 62 5f 73 74 72 28 @ %h(blob_str(
9650: 26 67 2e 68 74 74 70 48 65 61 64 65 72 29 29 0a &g.httpHeader)).
9660: 20 20 20 20 20 20 40 20 3c 2f 70 72 65 3e 0a 20 @ </pre>.
9670: 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 7a }. }. if( z
9680: 45 72 72 20 26 26 20 7a 45 72 72 5b 30 5d 20 29 Err && zErr[0] )
9690: 7b 0a 20 20 20 20 73 74 79 6c 65 5f 66 69 6e 69 {. style_fini
96a0: 73 68 5f 70 61 67 65 28 22 65 72 72 6f 72 22 29 sh_page("error")
96b0: 3b 0a 20 20 20 20 63 67 69 5f 72 65 70 6c 79 28 ;. cgi_reply(
96c0: 29 3b 0a 20 20 20 20 66 6f 73 73 69 6c 5f 65 78 );. fossil_ex
96d0: 69 74 28 31 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a it(1);. }else{.
96e0: 20 20 20 20 73 74 79 6c 65 5f 66 69 6e 69 73 68 style_finish
96f0: 5f 70 61 67 65 28 22 74 65 73 74 22 29 3b 0a 20 _page("test");.
9700: 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e 65 }.}../*.** Gene
9710: 72 61 74 65 20 61 20 4e 6f 74 20 59 65 74 20 49 rate a Not Yet I
9720: 6d 70 6c 65 6d 65 6e 74 65 64 20 65 72 72 6f 72 mplemented error
9730: 20 70 61 67 65 2e 0a 2a 2f 0a 76 6f 69 64 20 77 page..*/.void w
9740: 65 62 70 61 67 65 5f 6e 6f 74 5f 79 65 74 5f 69 ebpage_not_yet_i
9750: 6d 70 6c 65 6d 65 6e 74 65 64 28 76 6f 69 64 29 mplemented(void)
9760: 7b 0a 20 20 77 65 62 70 61 67 65 5f 65 72 72 6f {. webpage_erro
9770: 72 28 22 4e 6f 74 20 79 65 74 20 69 6d 70 6c 65 r("Not yet imple
9780: 6d 65 6e 74 65 64 22 29 3b 0a 7d 0a 0a 2f 2a 0a mented");.}../*.
9790: 2a 2a 20 47 65 6e 65 72 61 74 65 20 61 20 77 65 ** Generate a we
97a0: 62 70 61 67 65 20 66 6f 72 20 61 20 77 65 62 70 bpage for a webp
97b0: 61 67 65 5f 61 73 73 65 72 74 28 29 2e 0a 2a 2f age_assert()..*/
97c0: 0a 76 6f 69 64 20 77 65 62 70 61 67 65 5f 61 73 .void webpage_as
97d0: 73 65 72 74 5f 70 61 67 65 28 63 6f 6e 73 74 20 sert_page(const
97e0: 63 68 61 72 20 2a 7a 46 69 6c 65 2c 20 69 6e 74 char *zFile, int
97f0: 20 69 4c 69 6e 65 2c 20 63 6f 6e 73 74 20 63 68 iLine, const ch
9800: 61 72 20 2a 7a 45 78 70 72 29 7b 0a 20 20 66 6f ar *zExpr){. fo
9810: 73 73 69 6c 5f 77 61 72 6e 69 6e 67 28 22 61 73 ssil_warning("as
9820: 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 61 74 sertion fault at
9830: 20 25 73 3a 25 64 20 2d 20 25 73 22 2c 20 7a 46 %s:%d - %s", zF
9840: 69 6c 65 2c 20 69 4c 69 6e 65 2c 20 7a 45 78 70 ile, iLine, zExp
9850: 72 29 3b 0a 20 20 63 67 69 5f 72 65 73 65 74 5f r);. cgi_reset_
9860: 63 6f 6e 74 65 6e 74 28 29 3b 0a 20 20 77 65 62 content();. web
9870: 70 61 67 65 5f 65 72 72 6f 72 28 22 61 73 73 65 page_error("asse
9880: 72 74 69 6f 6e 20 66 61 75 6c 74 20 61 74 20 25 rtion fault at %
9890: 73 3a 25 64 20 2d 20 25 73 22 2c 20 7a 46 69 6c s:%d - %s", zFil
98a0: 65 2c 20 69 4c 69 6e 65 2c 20 7a 45 78 70 72 29 e, iLine, zExpr)
98b0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 73 73 75 65 ;.}../*.** Issue
98c0: 20 61 20 34 30 34 20 4e 6f 74 20 46 6f 75 6e 64 a 404 Not Found
98d0: 20 65 72 72 6f 72 20 66 6f 72 20 61 20 77 65 62 error for a web
98e0: 70 61 67 65 0a 2a 2f 0a 76 6f 69 64 20 77 65 62 page.*/.void web
98f0: 70 61 67 65 5f 6e 6f 74 66 6f 75 6e 64 5f 65 72 page_notfound_er
9900: 72 6f 72 28 63 6f 6e 73 74 20 63 68 61 72 20 2a ror(const char *
9910: 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20 zFormat, ...){.
9920: 20 63 68 61 72 20 2a 7a 4d 73 67 3b 0a 20 20 76 char *zMsg;. v
9930: 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 69 66 28 a_list ap;. if(
9940: 20 7a 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 zFormat ){.
9950: 76 61 5f 73 74 61 72 74 28 61 70 2c 20 7a 46 6f va_start(ap, zFo
9960: 72 6d 61 74 29 3b 0a 20 20 20 20 7a 4d 73 67 20 rmat);. zMsg
9970: 3d 20 76 6d 70 72 69 6e 74 66 28 7a 46 6f 72 6d = vmprintf(zForm
9980: 61 74 2c 20 61 70 29 3b 0a 20 20 20 20 76 61 5f at, ap);. va_
9990: 65 6e 64 28 61 70 29 3b 0a 20 20 7d 65 6c 73 65 end(ap);. }else
99a0: 7b 0a 20 20 20 20 7a 4d 73 67 20 3d 20 22 4e 6f {. zMsg = "No
99b0: 74 20 46 6f 75 6e 64 22 3b 0a 20 20 7d 0a 20 20 t Found";. }.
99c0: 73 74 79 6c 65 5f 73 65 74 5f 63 75 72 72 65 6e style_set_curren
99d0: 74 5f 66 65 61 74 75 72 65 28 22 65 6e 6f 74 66 t_feature("enotf
99e0: 6f 75 6e 64 22 29 3b 0a 20 20 73 74 79 6c 65 5f ound");. style_
99f0: 68 65 61 64 65 72 28 22 4e 6f 74 20 46 6f 75 6e header("Not Foun
9a00: 64 22 29 3b 0a 20 20 40 20 3c 70 3e 25 68 28 7a d");. @ <p>%h(z
9a10: 4d 73 67 29 3c 2f 70 3e 0a 20 20 63 67 69 5f 73 Msg)</p>. cgi_s
9a20: 65 74 5f 73 74 61 74 75 73 28 34 30 34 2c 20 22 et_status(404, "
9a30: 4e 6f 74 20 46 6f 75 6e 64 22 29 3b 0a 20 20 73 Not Found");. s
9a40: 74 79 6c 65 5f 66 69 6e 69 73 68 5f 70 61 67 65 tyle_finish_page
9a50: 28 22 65 6e 6f 74 66 6f 75 6e 64 22 29 3b 0a 7d ("enotfound");.}
9a60: 0a 0a 23 69 66 20 49 4e 54 45 52 46 41 43 45 0a ..#if INTERFACE.
9a70: 23 20 64 65 66 69 6e 65 20 77 65 62 70 61 67 65 # define webpage
9a80: 5f 61 73 73 65 72 74 28 54 29 20 69 66 28 21 28 _assert(T) if(!(
9a90: 54 29 29 7b 77 65 62 70 61 67 65 5f 61 73 73 65 T)){webpage_asse
9aa0: 72 74 5f 70 61 67 65 28 5f 5f 46 49 4c 45 5f 5f rt_page(__FILE__
9ab0: 2c 5f 5f 4c 49 4e 45 5f 5f 2c 23 54 29 3b 7d 0a ,__LINE__,#T);}.
9ac0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 #endif../*.** Re
9ad0: 74 75 72 6e 73 20 61 20 70 73 65 75 64 6f 2d 72 turns a pseudo-r
9ae0: 61 6e 64 6f 6d 20 69 6e 70 75 74 20 66 69 65 6c andom input fiel
9af0: 64 20 49 44 2c 20 66 6f 72 20 75 73 65 20 69 6e d ID, for use in
9b00: 20 61 73 73 6f 63 69 61 74 69 6e 67 20 61 6e 0a associating an.
9b10: 2a 2a 20 49 44 2d 6c 65 73 73 20 69 6e 70 75 74 ** ID-less input
9b20: 20 66 69 65 6c 64 20 77 69 74 68 20 61 20 6c 61 field with a la
9b30: 62 65 6c 2e 20 54 68 65 20 6d 65 6d 6f 72 79 20 bel. The memory
9b40: 69 73 20 6f 77 6e 65 64 20 62 79 20 74 68 65 0a is owned by the.
9b50: 2a 2a 20 63 61 6c 6c 65 72 2e 0a 2a 2f 0a 73 74 ** caller..*/.st
9b60: 61 74 69 63 20 63 68 61 72 20 2a 20 73 74 79 6c atic char * styl
9b70: 65 5f 6e 65 78 74 5f 69 6e 70 75 74 5f 69 64 28 e_next_input_id(
9b80: 29 7b 0a 20 20 73 74 61 74 69 63 20 69 6e 74 20 ){. static int
9b90: 69 6e 70 75 74 49 44 20 3d 20 30 3b 0a 20 20 2b inputID = 0;. +
9ba0: 2b 69 6e 70 75 74 49 44 3b 0a 20 20 72 65 74 75 +inputID;. retu
9bb0: 72 6e 20 6d 70 72 69 6e 74 66 28 22 69 6e 70 75 rn mprintf("inpu
9bc0: 74 2d 69 64 2d 25 64 22 2c 20 69 6e 70 75 74 49 t-id-%d", inputI
9bd0: 44 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 75 74 D);.}../*.** Out
9be0: 70 75 74 73 20 61 20 6c 61 62 65 6c 65 64 20 63 puts a labeled c
9bf0: 68 65 63 6b 62 6f 78 20 65 6c 65 6d 65 6e 74 2e heckbox element.
9c00: 20 7a 57 72 61 70 70 65 72 49 64 20 69 73 20 61 zWrapperId is a
9c10: 6e 20 6f 70 74 69 6f 6e 61 6c 20 49 44 0a 2a 2a n optional ID.**
9c20: 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 63 value for the c
9c30: 6f 6e 74 61 69 6e 69 6e 67 20 65 6c 65 6d 65 6e ontaining elemen
9c40: 74 20 28 73 65 65 20 62 65 6c 6f 77 29 2e 20 7a t (see below). z
9c50: 46 69 65 6c 64 4e 61 6d 65 20 69 73 20 74 68 65 FieldName is the
9c60: 0a 2a 2a 20 66 6f 72 6d 20 65 6c 65 6d 65 6e 74 .** form element
9c70: 20 6e 61 6d 65 2e 20 7a 4c 61 62 65 6c 20 69 73 name. zLabel is
9c80: 20 74 68 65 20 6c 61 62 65 6c 20 66 6f 72 20 74 the label for t
9c90: 68 65 20 63 68 65 63 6b 62 6f 78 2e 20 7a 56 61 he checkbox. zVa
9ca0: 6c 75 65 20 69 73 0a 2a 2a 20 74 68 65 20 6f 70 lue is.** the op
9cb0: 74 69 6f 6e 61 6c 20 76 61 6c 75 65 20 66 6f 72 tional value for
9cc0: 20 74 68 65 20 63 68 65 63 6b 62 6f 78 2e 20 7a the checkbox. z
9cd0: 54 69 70 20 69 73 20 61 6e 20 6f 70 74 69 6f 6e Tip is an option
9ce0: 61 6c 20 74 6f 6f 6c 74 69 70 2c 0a 2a 2a 20 77 al tooltip,.** w
9cf0: 68 69 63 68 20 67 65 74 73 20 73 65 74 20 61 73 hich gets set as
9d00: 20 74 68 65 20 22 74 69 74 6c 65 22 20 61 74 74 the "title" att
9d10: 72 69 62 75 74 65 20 6f 66 20 74 68 65 20 6f 75 ribute of the ou
9d20: 74 65 72 6d 6f 73 74 0a 2a 2a 20 65 6c 65 6d 65 termost.** eleme
9d30: 6e 74 2e 20 49 66 20 69 73 43 68 65 63 6b 65 64 nt. If isChecked
9d40: 20 69 73 20 74 72 75 65 2c 20 74 68 65 20 63 68 is true, the ch
9d50: 65 63 6b 62 6f 78 20 67 65 74 73 20 74 68 65 20 eckbox gets the
9d60: 22 63 68 65 63 6b 65 64 22 0a 2a 2a 20 61 74 74 "checked".** att
9d70: 72 69 62 75 74 65 20 73 65 74 2c 20 65 6c 73 65 ribute set, else
9d80: 20 69 74 20 69 73 20 6e 6f 74 2e 0a 2a 2a 0a 2a it is not..**.*
9d90: 2a 20 52 65 73 75 6c 74 69 6e 67 20 73 74 72 75 * Resulting stru
9da0: 63 74 75 72 65 3a 0a 2a 2a 0a 2a 2a 20 3c 64 69 cture:.**.** <di
9db0: 76 20 63 6c 61 73 73 3d 27 69 6e 70 75 74 2d 77 v class='input-w
9dc0: 69 74 68 2d 6c 61 62 65 6c 27 20 74 69 74 6c 65 ith-label' title
9dd0: 3d 7b 7b 7a 54 69 70 7d 7d 20 69 64 3d 7b 7b 7a ={{zTip}} id={{z
9de0: 57 72 61 70 70 65 72 49 64 7d 7d 3e 0a 2a 2a 20 WrapperId}}>.**
9df0: 20 20 3c 69 6e 70 75 74 20 74 79 70 65 3d 27 63 <input type='c
9e00: 68 65 63 6b 62 6f 78 27 20 6e 61 6d 65 3d 7b 7b heckbox' name={{
9e10: 7a 46 69 65 6c 64 4e 61 6d 65 7d 7d 20 76 61 6c zFieldName}} val
9e20: 75 65 3d 7b 7b 7a 56 61 6c 75 65 7d 7d 0a 2a 2a ue={{zValue}}.**
9e30: 20 20 20 20 20 20 20 20 20 20 69 64 3d 27 41 20 id='A
9e40: 52 41 4e 44 4f 4d 20 56 41 4c 55 45 27 0a 2a 2a RANDOM VALUE'.**
9e50: 20 20 20 20 20 20 20 20 20 20 7b 7b 69 73 43 68 {{isCh
9e60: 65 63 6b 65 64 20 3f 20 22 20 63 68 65 63 6b 65 ecked ? " checke
9e70: 64 20 3a 20 22 22 7d 7d 2f 3e 0a 2a 2a 20 20 20 d : ""}}/>.**
9e80: 3c 6c 61 62 65 6c 20 66 6f 72 3d 27 49 44 20 4f <label for='ID O
9e90: 46 20 54 48 45 20 49 4e 50 55 54 20 46 49 45 4c F THE INPUT FIEL
9ea0: 44 27 3e 7b 7b 7a 4c 61 62 65 6c 7d 7d 3c 2f 6c D'>{{zLabel}}</l
9eb0: 61 62 65 6c 3e 0a 2a 2a 20 3c 2f 64 69 76 3e 0a abel>.** </div>.
9ec0: 2a 2a 0a 2a 2a 20 7a 4c 61 62 65 6c 2c 20 61 6e **.** zLabel, an
9ed0: 64 20 7a 56 61 6c 75 65 20 61 72 65 20 72 65 71 d zValue are req
9ee0: 75 69 72 65 64 2e 20 7a 46 69 65 6c 64 4e 61 6d uired. zFieldNam
9ef0: 65 2c 20 7a 57 72 61 70 70 65 72 49 64 2c 20 61 e, zWrapperId, a
9f00: 6e 64 20 7a 54 69 70 0a 2a 2a 20 61 72 65 20 6d nd zTip.** are m
9f10: 61 79 20 62 65 20 4e 55 4c 4c 20 6f 72 20 65 6d ay be NULL or em
9f20: 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 42 65 20 73 75 pty..**.** Be su
9f30: 72 65 20 74 68 61 74 20 74 68 65 20 69 6e 70 75 re that the inpu
9f40: 74 2d 77 69 74 68 2d 6c 61 62 65 6c 20 43 53 53 t-with-label CSS
9f50: 20 63 6c 61 73 73 20 69 73 20 64 65 66 69 6e 65 class is define
9f60: 64 20 73 65 6e 73 69 62 6c 79 2c 20 69 6e 0a 2a d sensibly, in.*
9f70: 2a 20 70 61 72 74 69 63 75 6c 61 72 2c 20 68 61 * particular, ha
9f80: 76 69 6e 67 20 69 74 73 20 64 69 73 70 6c 61 79 ving its display
9f90: 3a 69 6e 6c 69 6e 65 2d 62 6c 6f 63 6b 20 69 73 :inline-block is
9fa0: 20 75 73 65 66 75 6c 20 66 6f 72 20 61 6c 69 67 useful for alig
9fb0: 6e 6d 65 6e 74 0a 2a 2a 20 70 75 72 70 6f 73 65 nment.** purpose
9fc0: 73 2e 0a 2a 2f 0a 76 6f 69 64 20 73 74 79 6c 65 s..*/.void style
9fd0: 5f 6c 61 62 65 6c 65 64 5f 63 68 65 63 6b 62 6f _labeled_checkbo
9fe0: 78 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 7a x(const char * z
9ff0: 57 72 61 70 70 65 72 49 64 2c 0a 20 20 20 20 20 WrapperId,.
a000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a010: 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 const cha
a020: 72 20 2a 7a 46 69 65 6c 64 4e 61 6d 65 2c 20 63 r *zFieldName, c
a030: 6f 6e 73 74 20 63 68 61 72 20 2a 20 7a 4c 61 62 onst char * zLab
a040: 65 6c 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 el,.
a050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a060: 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 7a 56 61 const char * zVa
a070: 6c 75 65 2c 20 69 6e 74 20 69 73 43 68 65 63 6b lue, int isCheck
a080: 65 64 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 ed,.
a090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a0a0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 7a 54 69 const char * zTi
a0b0: 70 29 7b 0a 20 20 63 68 61 72 20 2a 20 7a 4c 61 p){. char * zLa
a0c0: 62 65 6c 49 44 20 3d 20 73 74 79 6c 65 5f 6e 65 belID = style_ne
a0d0: 78 74 5f 69 6e 70 75 74 5f 69 64 28 29 3b 0a 20 xt_input_id();.
a0e0: 20 43 58 28 22 3c 64 69 76 20 63 6c 61 73 73 3d CX("<div class=
a0f0: 27 69 6e 70 75 74 2d 77 69 74 68 2d 6c 61 62 65 'input-with-labe
a100: 6c 27 22 29 3b 0a 20 20 69 66 28 7a 54 69 70 20 l'");. if(zTip
a110: 26 26 20 2a 7a 54 69 70 29 7b 0a 20 20 20 20 43 && *zTip){. C
a120: 58 28 22 20 74 69 74 6c 65 3d 27 25 68 27 22 2c X(" title='%h'",
a130: 20 7a 54 69 70 29 3b 0a 20 20 7d 0a 20 20 69 66 zTip);. }. if
a140: 28 7a 57 72 61 70 70 65 72 49 64 20 26 26 20 2a (zWrapperId && *
a150: 7a 57 72 61 70 70 65 72 49 64 29 7b 0a 20 20 20 zWrapperId){.
a160: 20 43 58 28 22 20 69 64 3d 27 25 73 27 22 2c 7a CX(" id='%s'",z
a170: 57 72 61 70 70 65 72 49 64 29 3b 0a 20 20 7d 0a WrapperId);. }.
a180: 20 20 43 58 28 22 3e 3c 69 6e 70 75 74 20 74 79 CX("><input ty
a190: 70 65 3d 27 63 68 65 63 6b 62 6f 78 27 20 69 64 pe='checkbox' id
a1a0: 3d 27 25 73 27 20 22 2c 20 7a 4c 61 62 65 6c 49 ='%s' ", zLabelI
a1b0: 44 29 3b 0a 20 20 69 66 28 7a 46 69 65 6c 64 4e D);. if(zFieldN
a1c0: 61 6d 65 20 26 26 20 2a 7a 46 69 65 6c 64 4e 61 ame && *zFieldNa
a1d0: 6d 65 29 7b 0a 20 20 20 20 43 58 28 22 6e 61 6d me){. CX("nam
a1e0: 65 3d 27 25 73 27 20 22 2c 7a 46 69 65 6c 64 4e e='%s' ",zFieldN
a1f0: 61 6d 65 29 3b 0a 20 20 7d 0a 20 20 43 58 28 22 ame);. }. CX("
a200: 76 61 6c 75 65 3d 27 25 54 27 25 73 2f 3e 22 2c value='%T'%s/>",
a210: 0a 20 20 20 20 20 7a 56 61 6c 75 65 20 3f 20 7a . zValue ? z
a220: 56 61 6c 75 65 20 3a 20 22 22 2c 20 69 73 43 68 Value : "", isCh
a230: 65 63 6b 65 64 20 3f 20 22 20 63 68 65 63 6b 65 ecked ? " checke
a240: 64 22 20 3a 20 22 22 29 3b 0a 20 20 43 58 28 22 d" : "");. CX("
a250: 3c 6c 61 62 65 6c 20 66 6f 72 3d 27 25 73 27 3e <label for='%s'>
a260: 25 68 3c 2f 6c 61 62 65 6c 3e 3c 2f 64 69 76 3e %h</label></div>
a270: 22 2c 20 7a 4c 61 62 65 6c 49 44 2c 20 7a 4c 61 ", zLabelID, zLa
a280: 62 65 6c 29 3b 0a 20 20 66 6f 73 73 69 6c 5f 66 bel);. fossil_f
a290: 72 65 65 28 7a 4c 61 62 65 6c 49 44 29 3b 0a 7d ree(zLabelID);.}
a2a0: 0a 0a 2f 2a 0a 2a 2a 20 4f 75 74 70 75 74 73 20 ../*.** Outputs
a2b0: 61 20 53 45 4c 45 43 54 20 6c 69 73 74 20 66 72 a SELECT list fr
a2c0: 6f 6d 20 61 20 63 6f 6d 70 69 6c 65 2d 74 69 6d om a compile-tim
a2d0: 65 20 6c 69 73 74 20 6f 66 20 69 6e 74 65 67 65 e list of intege
a2e0: 72 73 2e 0a 2a 2a 20 54 68 65 20 76 61 72 67 73 rs..** The vargs
a2f0: 20 6d 75 73 74 20 62 65 20 61 20 6c 69 73 74 20 must be a list
a300: 6f 66 20 28 63 6f 6e 73 74 20 63 68 61 72 20 2a of (const char *
a310: 2c 20 69 6e 74 29 20 70 61 69 72 73 2c 20 74 65 , int) pairs, te
a320: 72 6d 69 6e 61 74 65 64 0a 2a 2a 20 77 69 74 68 rminated.** with
a330: 20 61 20 73 69 6e 67 6c 65 20 4e 55 4c 4c 2e 20 a single NULL.
a340: 45 61 63 68 20 70 61 69 72 20 69 73 20 69 6e 74 Each pair is int
a350: 65 72 70 72 65 74 65 64 20 61 73 2e 2e 2e 0a 2a erpreted as....*
a360: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 28 63 6f 6e *.** If the (con
a370: 73 74 20 63 68 61 72 20 2a 29 20 69 73 20 4e 55 st char *) is NU
a380: 4c 4c 2c 20 69 74 20 69 73 20 74 68 65 20 65 6e LL, it is the en
a390: 64 20 6f 66 20 74 68 65 20 6c 69 73 74 2c 20 65 d of the list, e
a3a0: 6c 73 65 0a 2a 2a 20 61 20 6e 65 77 20 4f 50 54 lse.** a new OPT
a3b0: 49 4f 4e 20 65 6e 74 72 79 20 69 73 20 63 72 65 ION entry is cre
a3c0: 61 74 65 64 2e 20 49 66 20 74 68 65 20 73 74 72 ated. If the str
a3d0: 69 6e 67 20 69 73 20 65 6d 70 74 79 2c 20 74 68 ing is empty, th
a3e0: 65 0a 2a 2a 20 6c 61 62 65 6c 20 61 6e 64 20 76 e.** label and v
a3f0: 61 6c 75 65 20 6f 66 20 74 68 65 20 4f 50 54 49 alue of the OPTI
a400: 4f 4e 20 69 73 20 74 68 65 20 69 6e 74 65 67 65 ON is the intege
a410: 72 20 70 61 72 74 20 6f 66 20 74 68 65 20 70 61 r part of the pa
a420: 69 72 2e 0a 2a 2a 20 49 66 20 74 68 65 20 73 74 ir..** If the st
a430: 72 69 6e 67 20 69 73 20 6e 6f 74 20 65 6d 70 74 ring is not empt
a440: 79 2c 20 69 74 20 62 65 63 6f 6d 65 73 20 74 68 y, it becomes th
a450: 65 20 6c 61 62 65 6c 20 61 6e 64 20 74 68 65 20 e label and the
a460: 69 6e 74 65 67 65 72 0a 2a 2a 20 74 68 65 20 76 integer.** the v
a470: 61 6c 75 65 2e 20 49 66 20 74 68 61 74 20 76 61 alue. If that va
a480: 6c 75 65 20 3d 3d 20 73 65 6c 65 63 74 65 64 56 lue == selectedV
a490: 61 6c 75 65 20 74 68 65 6e 20 74 68 61 74 20 4f alue then that O
a4a0: 50 54 49 4f 4e 0a 2a 2a 20 65 6c 65 6d 65 6e 74 PTION.** element
a4b0: 20 67 65 74 73 20 74 68 65 20 27 73 65 6c 65 63 gets the 'selec
a4c0: 74 65 64 27 20 61 74 74 72 69 62 75 74 65 2e 0a ted' attribute..
a4d0: 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 **.** Note that
a4e0: 74 68 65 20 70 61 69 72 73 20 61 72 65 20 6e 6f the pairs are no
a4f0: 74 20 69 6e 20 28 69 6e 74 2c 20 63 6f 6e 73 74 t in (int, const
a500: 20 63 68 61 72 20 2a 29 20 6f 72 64 65 72 20 62 char *) order b
a510: 65 63 61 75 73 65 0a 2a 2a 20 74 68 65 72 65 20 ecause.** there
a520: 69 73 20 6e 6f 20 77 65 6c 6c 2d 6b 6e 6f 77 6e is no well-known
a530: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 77 integer value w
a540: 68 69 63 68 20 77 65 20 63 61 6e 20 64 65 66 69 hich we can defi
a550: 6e 69 74 69 76 65 6c 79 20 75 73 65 0a 2a 2a 20 nitively use.**
a560: 61 73 20 61 20 6c 69 73 74 20 74 65 72 6d 69 6e as a list termin
a570: 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 7a 57 72 61 ator..**.** zWra
a580: 70 70 65 72 49 64 20 69 73 20 61 6e 20 6f 70 74 pperId is an opt
a590: 69 6f 6e 61 6c 20 49 44 20 76 61 6c 75 65 20 66 ional ID value f
a5a0: 6f 72 20 74 68 65 20 63 6f 6e 74 61 69 6e 69 6e or the containin
a5b0: 67 20 65 6c 65 6d 65 6e 74 20 28 73 65 65 0a 2a g element (see.*
a5c0: 2a 20 62 65 6c 6f 77 29 2e 0a 2a 2a 0a 2a 2a 20 * below)..**.**
a5d0: 7a 46 69 65 6c 64 4e 61 6d 65 20 69 73 20 74 68 zFieldName is th
a5e0: 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 66 e value of the f
a5f0: 6f 72 6d 20 65 6c 65 6d 65 6e 74 27 73 20 6e 61 orm element's na
a600: 6d 65 20 61 74 74 72 69 62 75 74 65 2e 20 4e 6f me attribute. No
a610: 74 65 0a 2a 2a 20 74 68 61 74 20 66 6f 73 73 69 te.** that fossi
a620: 6c 20 70 72 65 66 65 72 73 20 75 6e 64 65 72 73 l prefers unders
a630: 63 6f 72 65 73 20 6f 76 65 72 20 27 2d 27 20 66 cores over '-' f
a640: 6f 72 20 73 65 70 61 72 61 74 6f 72 73 20 69 6e or separators in
a650: 20 66 6f 72 6d 0a 2a 2a 20 65 6c 65 6d 65 6e 74 form.** element
a660: 20 6e 61 6d 65 73 2e 0a 2a 2a 0a 2a 2a 20 7a 4c names..**.** zL
a670: 61 62 65 6c 20 69 73 20 61 6e 20 6f 70 74 69 6f abel is an optio
a680: 6e 61 6c 20 73 74 72 69 6e 67 20 74 6f 20 75 73 nal string to us
a690: 65 20 61 73 20 61 20 22 6c 61 62 65 6c 22 20 66 e as a "label" f
a6a0: 6f 72 20 74 68 65 20 65 6c 65 6d 65 6e 74 0a 2a or the element.*
a6b0: 2a 20 28 73 65 65 20 62 65 6c 6f 77 29 2e 0a 2a * (see below)..*
a6c0: 2a 0a 2a 2a 20 7a 54 6f 6f 6c 74 69 70 20 69 73 *.** zTooltip is
a6d0: 20 61 6e 20 6f 70 74 69 6f 6e 61 6c 20 76 61 6c an optional val
a6e0: 75 65 20 66 6f 72 20 74 68 65 20 53 45 4c 45 43 ue for the SELEC
a6f0: 54 27 73 20 74 69 74 6c 65 20 61 74 74 72 69 62 T's title attrib
a700: 75 74 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 ute..**.** The s
a710: 74 72 75 63 74 75 72 65 20 6f 66 20 74 68 65 20 tructure of the
a720: 65 6d 69 74 74 65 64 20 48 54 4d 4c 20 69 73 3a emitted HTML is:
a730: 0a 2a 2a 0a 2a 2a 20 3c 64 69 76 20 63 6c 61 73 .**.** <div clas
a740: 73 3d 27 69 6e 70 75 74 2d 77 69 74 68 2d 6c 61 s='input-with-la
a750: 62 65 6c 27 20 74 69 74 6c 65 3d 7b 7b 7a 54 6f bel' title={{zTo
a760: 6f 6c 54 69 70 7d 7d 20 69 64 3d 7b 7b 7a 57 72 olTip}} id={{zWr
a770: 61 70 70 65 72 49 64 7d 7d 3e 0a 2a 2a 20 20 20 apperId}}>.**
a780: 3c 6c 61 62 65 6c 20 66 6f 72 3d 27 53 45 4c 45 <label for='SELE
a790: 43 54 20 45 4c 45 4d 45 4e 54 20 49 44 27 3e 7b CT ELEMENT ID'>{
a7a0: 7b 7a 4c 61 62 65 6c 7d 7d 3c 2f 6c 61 62 65 6c {zLabel}}</label
a7b0: 3e 0a 2a 2a 20 20 20 3c 73 65 6c 65 63 74 20 69 >.** <select i
a7c0: 64 3d 27 52 41 4e 44 4f 4d 20 49 44 27 20 6e 61 d='RANDOM ID' na
a7d0: 6d 65 3d 7b 7b 7a 46 69 65 6c 64 4e 61 6d 65 7d me={{zFieldName}
a7e0: 7d 3e 2e 2e 2e 3c 2f 73 65 6c 65 63 74 3e 0a 2a }>...</select>.*
a7f0: 2a 20 3c 2f 64 69 76 3e 0a 2a 2a 0a 2a 2a 20 45 * </div>.**.** E
a800: 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 73 74 xample:.**.** st
a810: 79 6c 65 5f 73 65 6c 65 63 74 5f 6c 69 73 74 5f yle_select_list_
a820: 69 6e 74 28 22 6d 79 2d 67 72 61 70 65 73 22 2c int("my-grapes",
a830: 20 22 6d 79 5f 67 72 61 70 65 73 22 2c 20 22 47 "my_grapes", "G
a840: 72 61 70 65 73 22 2c 0a 2a 2a 20 20 20 20 20 20 rapes",.**
a850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a860: 22 53 65 6c 65 63 74 20 74 68 65 20 6e 75 6d 62 "Select the numb
a870: 65 72 20 6f 66 20 67 72 61 70 65 73 22 2c 0a 2a er of grapes",.*
a880: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 *
a890: 20 20 20 20 20 20 20 20 61 74 6f 69 28 50 44 28 atoi(PD(
a8a0: 22 6d 79 5f 66 69 65 6c 64 22 2c 22 30 22 29 29 "my_field","0"))
a8b0: 2c 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 ,.**
a8c0: 20 20 20 20 20 20 20 20 20 20 20 22 22 2c 20 31 "", 1
a8d0: 2c 20 22 32 22 2c 20 32 2c 20 22 54 68 72 65 65 , "2", 2, "Three
a8e0: 22 2c 20 33 2c 0a 2a 2a 20 20 20 20 20 20 20 20 ", 3,.**
a8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4e N
a900: 55 4c 4c 29 3b 0a 2a 2a 20 0a 2a 2f 0a 76 6f 69 ULL);.** .*/.voi
a910: 64 20 73 74 79 6c 65 5f 73 65 6c 65 63 74 5f 6c d style_select_l
a920: 69 73 74 5f 69 6e 74 28 63 6f 6e 73 74 20 63 68 ist_int(const ch
a930: 61 72 20 2a 20 7a 57 72 61 70 70 65 72 49 64 2c ar * zWrapperId,
a940: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
a950: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 cons
a960: 74 20 63 68 61 72 20 2a 7a 46 69 65 6c 64 4e 61 t char *zFieldNa
a970: 6d 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a me, const char *
a980: 20 7a 4c 61 62 65 6c 2c 0a 20 20 20 20 20 20 20 zLabel,.
a990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a9a0: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a const char *
a9b0: 20 7a 54 6f 6f 6c 54 69 70 2c 20 69 6e 74 20 73 zToolTip, int s
a9c0: 65 6c 65 63 74 65 64 56 61 6c 2c 0a 20 20 20 20 electedVal,.
a9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a9e0: 20 20 20 20 20 20 20 2e 2e 2e 20 29 7b 0a 20 20 ... ){.
a9f0: 63 68 61 72 20 2a 20 7a 4c 61 62 65 6c 49 44 20 char * zLabelID
aa00: 3d 20 73 74 79 6c 65 5f 6e 65 78 74 5f 69 6e 70 = style_next_inp
aa10: 75 74 5f 69 64 28 29 3b 0a 20 20 76 61 5f 6c 69 ut_id();. va_li
aa20: 73 74 20 76 61 72 67 73 3b 0a 0a 20 20 76 61 5f st vargs;.. va_
aa30: 73 74 61 72 74 28 76 61 72 67 73 2c 73 65 6c 65 start(vargs,sele
aa40: 63 74 65 64 56 61 6c 29 3b 0a 20 20 43 58 28 22 ctedVal);. CX("
aa50: 3c 64 69 76 20 63 6c 61 73 73 3d 27 69 6e 70 75 <div class='inpu
aa60: 74 2d 77 69 74 68 2d 6c 61 62 65 6c 27 22 29 3b t-with-label'");
aa70: 0a 20 20 69 66 28 7a 54 6f 6f 6c 54 69 70 20 26 . if(zToolTip &
aa80: 26 20 2a 7a 54 6f 6f 6c 54 69 70 29 7b 0a 20 20 & *zToolTip){.
aa90: 20 20 43 58 28 22 20 74 69 74 6c 65 3d 27 25 68 CX(" title='%h
aaa0: 27 22 2c 7a 54 6f 6f 6c 54 69 70 29 3b 0a 20 20 '",zToolTip);.
aab0: 7d 0a 20 20 69 66 28 7a 57 72 61 70 70 65 72 49 }. if(zWrapperI
aac0: 64 20 26 26 20 2a 7a 57 72 61 70 70 65 72 49 64 d && *zWrapperId
aad0: 29 7b 0a 20 20 20 20 43 58 28 22 20 69 64 3d 27 ){. CX(" id='
aae0: 25 73 27 22 2c 7a 57 72 61 70 70 65 72 49 64 29 %s'",zWrapperId)
aaf0: 3b 0a 20 20 7d 0a 20 20 43 58 28 22 3e 22 29 3b ;. }. CX(">");
ab00: 0a 20 20 69 66 28 7a 4c 61 62 65 6c 20 26 26 20 . if(zLabel &&
ab10: 2a 7a 4c 61 62 65 6c 29 7b 0a 20 20 20 20 43 58 *zLabel){. CX
ab20: 28 22 3c 6c 61 62 65 6c 20 66 6f 72 3d 27 25 73 ("<label for='%s
ab30: 27 3e 25 68 3c 2f 6c 61 62 65 6c 3e 22 2c 20 7a '>%h</label>", z
ab40: 4c 61 62 65 6c 49 44 2c 20 7a 4c 61 62 65 6c 29 LabelID, zLabel)
ab50: 3b 0a 20 20 7d 0a 20 20 43 58 28 22 3c 73 65 6c ;. }. CX("<sel
ab60: 65 63 74 20 6e 61 6d 65 3d 27 25 73 27 20 69 64 ect name='%s' id
ab70: 3d 27 25 73 27 3e 22 2c 7a 46 69 65 6c 64 4e 61 ='%s'>",zFieldNa
ab80: 6d 65 2c 20 7a 4c 61 62 65 6c 49 44 29 3b 0a 20 me, zLabelID);.
ab90: 20 77 68 69 6c 65 28 31 29 7b 0a 20 20 20 20 63 while(1){. c
aba0: 6f 6e 73 74 20 63 68 61 72 20 2a 20 7a 4f 70 74 onst char * zOpt
abb0: 69 6f 6e 20 3d 20 76 61 5f 61 72 67 28 76 61 72 ion = va_arg(var
abc0: 67 73 2c 63 68 61 72 20 2a 29 3b 0a 20 20 20 20 gs,char *);.
abd0: 69 6e 74 20 76 3b 0a 20 20 20 20 69 66 28 4e 55 int v;. if(NU
abe0: 4c 4c 3d 3d 7a 4f 70 74 69 6f 6e 29 7b 0a 20 20 LL==zOption){.
abf0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d break;. }
ac00: 0a 20 20 20 20 76 20 3d 20 76 61 5f 61 72 67 28 . v = va_arg(
ac10: 76 61 72 67 73 2c 69 6e 74 29 3b 0a 20 20 20 20 vargs,int);.
ac20: 43 58 28 22 3c 6f 70 74 69 6f 6e 20 76 61 6c 75 CX("<option valu
ac30: 65 3d 27 25 64 27 25 73 3e 22 2c 0a 20 20 20 20 e='%d'%s>",.
ac40: 20 20 20 20 20 76 2c 20 76 3d 3d 73 65 6c 65 63 v, v==selec
ac50: 74 65 64 56 61 6c 20 3f 20 22 20 73 65 6c 65 63 tedVal ? " selec
ac60: 74 65 64 22 20 3a 20 22 22 29 3b 0a 20 20 20 20 ted" : "");.
ac70: 69 66 28 2a 7a 4f 70 74 69 6f 6e 29 7b 0a 20 20 if(*zOption){.
ac80: 20 20 20 20 43 58 28 22 25 73 22 2c 20 7a 4f 70 CX("%s", zOp
ac90: 74 69 6f 6e 29 3b 0a 20 20 20 20 7d 65 6c 73 65 tion);. }else
aca0: 7b 0a 20 20 20 20 20 20 43 58 28 22 25 64 22 2c {. CX("%d",
acb0: 76 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 43 58 v);. }. CX
acc0: 28 22 3c 2f 6f 70 74 69 6f 6e 3e 5c 6e 22 29 3b ("</option>\n");
acd0: 0a 20 20 7d 0a 20 20 43 58 28 22 3c 2f 73 65 6c . }. CX("</sel
ace0: 65 63 74 3e 5c 6e 22 29 3b 0a 20 20 43 58 28 22 ect>\n");. CX("
acf0: 3c 2f 64 69 76 3e 5c 6e 22 29 3b 0a 20 20 76 61 </div>\n");. va
ad00: 5f 65 6e 64 28 76 61 72 67 73 29 3b 0a 20 20 66 _end(vargs);. f
ad10: 6f 73 73 69 6c 5f 66 72 65 65 28 7a 4c 61 62 65 ossil_free(zLabe
ad20: 6c 49 44 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 lID);.}../*.** T
ad30: 68 65 20 43 2d 73 74 72 69 6e 67 20 63 6f 75 6e he C-string coun
ad40: 74 65 72 70 61 72 74 20 6f 66 20 73 74 79 6c 65 terpart of style
ad50: 5f 73 65 6c 65 63 74 5f 6c 69 73 74 5f 69 6e 74 _select_list_int
ad60: 28 29 2c 20 74 68 69 73 20 76 61 72 69 61 6e 74 (), this variant
ad70: 0a 2a 2a 20 64 69 66 66 65 72 73 20 6f 6e 6c 79 .** differs only
ad80: 20 69 6e 20 74 68 61 74 20 69 74 73 20 76 61 72 in that its var
ad90: 69 61 64 69 63 20 61 72 67 75 6d 65 6e 74 73 20 iadic arguments
ada0: 61 72 65 20 43 2d 73 74 72 69 6e 67 73 20 69 6e are C-strings in
adb0: 20 70 61 69 72 73 0a 2a 2a 20 6f 66 20 28 6f 70 pairs.** of (op
adc0: 74 69 6f 6e 4c 61 62 65 6c 2c 20 6f 70 74 69 6f tionLabel, optio
add0: 6e 56 61 6c 75 65 29 2e 20 49 66 20 61 20 67 69 nValue). If a gi
ade0: 76 65 6e 20 6f 70 74 69 6f 6e 4c 61 62 65 6c 20 ven optionLabel
adf0: 69 73 20 61 6e 20 65 6d 70 74 79 0a 2a 2a 20 73 is an empty.** s
ae00: 74 72 69 6e 67 2c 20 74 68 65 20 63 6f 72 72 65 tring, the corre
ae10: 73 70 6f 6e 64 69 6e 67 20 6f 70 74 69 6f 6e 56 sponding optionV
ae20: 61 6c 75 65 20 69 73 20 75 73 65 64 20 61 73 20 alue is used as
ae30: 69 74 73 20 6c 61 62 65 6c 2e 20 49 66 20 61 6e its label. If an
ae40: 79 0a 2a 2a 20 67 69 76 65 6e 20 76 61 6c 75 65 y.** given value
ae50: 20 6d 61 74 63 68 65 73 20 7a 53 65 6c 65 63 74 matches zSelect
ae60: 65 64 56 61 6c 2c 20 74 68 61 74 20 6f 70 74 69 edVal, that opti
ae70: 6f 6e 20 67 65 74 73 20 70 72 65 73 65 6c 65 63 on gets preselec
ae80: 74 65 64 2e 20 49 66 0a 2a 2a 20 6e 6f 20 6f 70 ted. If.** no op
ae90: 74 69 6f 6e 73 20 6d 61 74 63 68 20 7a 53 65 6c tions match zSel
aea0: 65 63 74 65 64 56 61 6c 20 74 68 65 6e 20 74 68 ectedVal then th
aeb0: 65 20 66 69 72 73 74 20 65 6e 74 72 79 20 69 73 e first entry is
aec0: 20 73 65 6c 65 63 74 65 64 20 62 79 0a 2a 2a 20 selected by.**
aed0: 64 65 66 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 41 default..**.** A
aee0: 6e 79 20 6f 66 20 28 7a 57 72 61 70 70 65 72 49 ny of (zWrapperI
aef0: 64 2c 20 7a 54 6f 6f 6c 74 69 70 2c 20 7a 53 65 d, zTooltip, zSe
af00: 6c 65 63 74 65 64 56 61 6c 29 20 6d 61 79 20 62 lectedVal) may b
af10: 65 20 4e 55 4c 4c 20 6f 72 20 65 6d 70 74 79 2e e NULL or empty.
af20: 0a 2a 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 3a 0a .**.** Example:.
af30: 2a 2a 0a 2a 2a 20 73 74 79 6c 65 5f 73 65 6c 65 **.** style_sele
af40: 63 74 5f 6c 69 73 74 5f 73 74 72 28 22 6d 79 2d ct_list_str("my-
af50: 67 72 61 70 65 73 22 2c 20 22 6d 79 5f 67 72 61 grapes", "my_gra
af60: 70 65 73 22 2c 20 22 47 72 61 70 65 73 22 2c 0a pes", "Grapes",.
af70: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 **
af80: 20 20 20 20 20 20 20 20 22 53 65 6c 65 63 74 20 "Select
af90: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 67 72 the number of gr
afa0: 61 70 65 73 22 2c 0a 2a 2a 20 20 20 20 20 20 20 apes",.**
afb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
afc0: 50 28 22 6d 79 5f 66 69 65 6c 64 22 29 2c 0a 2a P("my_field"),.*
afd0: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 *
afe0: 20 20 20 20 20 20 20 20 22 31 22 2c 20 22 4f 6e "1", "On
aff0: 65 22 2c 20 22 32 22 2c 20 22 54 77 6f 22 2c 20 e", "2", "Two",
b000: 22 22 2c 20 22 33 22 2c 0a 2a 2a 20 20 20 20 20 "", "3",.**
b010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b020: 20 20 4e 55 4c 4c 29 3b 0a 2a 2f 0a 76 6f 69 64 NULL);.*/.void
b030: 20 73 74 79 6c 65 5f 73 65 6c 65 63 74 5f 6c 69 style_select_li
b040: 73 74 5f 73 74 72 28 63 6f 6e 73 74 20 63 68 61 st_str(const cha
b050: 72 20 2a 20 7a 57 72 61 70 70 65 72 49 64 2c 0a r * zWrapperId,.
b060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b070: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 const
b080: 20 63 68 61 72 20 2a 7a 46 69 65 6c 64 4e 61 6d char *zFieldNam
b090: 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 e, const char *
b0a0: 7a 4c 61 62 65 6c 2c 0a 20 20 20 20 20 20 20 20 zLabel,.
b0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b0c0: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 const char *
b0d0: 7a 54 6f 6f 6c 54 69 70 2c 20 63 68 61 72 20 63 zToolTip, char c
b0e0: 6f 6e 73 74 20 2a 20 7a 53 65 6c 65 63 74 65 64 onst * zSelected
b0f0: 56 61 6c 2c 0a 20 20 20 20 20 20 20 20 20 20 20 Val,.
b100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b110: 2e 2e 2e 20 29 7b 0a 20 20 63 68 61 72 20 2a 20 ... ){. char *
b120: 7a 4c 61 62 65 6c 49 44 20 3d 20 73 74 79 6c 65 zLabelID = style
b130: 5f 6e 65 78 74 5f 69 6e 70 75 74 5f 69 64 28 29 _next_input_id()
b140: 3b 0a 20 20 76 61 5f 6c 69 73 74 20 76 61 72 67 ;. va_list varg
b150: 73 3b 0a 0a 20 20 76 61 5f 73 74 61 72 74 28 76 s;.. va_start(v
b160: 61 72 67 73 2c 7a 53 65 6c 65 63 74 65 64 56 61 args,zSelectedVa
b170: 6c 29 3b 0a 20 20 69 66 28 21 7a 53 65 6c 65 63 l);. if(!zSelec
b180: 74 65 64 56 61 6c 29 7b 0a 20 20 20 20 7a 53 65 tedVal){. zSe
b190: 6c 65 63 74 65 64 56 61 6c 20 3d 20 5f 5f 46 49 lectedVal = __FI
b1a0: 4c 45 5f 5f 2f 2a 73 6f 6d 65 20 73 74 72 69 6e LE__/*some strin
b1b0: 67 20 77 65 27 6c 6c 20 6e 65 76 65 72 20 6d 61 g we'll never ma
b1c0: 74 63 68 2a 2f 3b 0a 20 20 7d 0a 20 20 43 58 28 tch*/;. }. CX(
b1d0: 22 3c 64 69 76 20 63 6c 61 73 73 3d 27 69 6e 70 "<div class='inp
b1e0: 75 74 2d 77 69 74 68 2d 6c 61 62 65 6c 27 22 29 ut-with-label'")
b1f0: 3b 0a 20 20 69 66 28 7a 54 6f 6f 6c 54 69 70 20 ;. if(zToolTip
b200: 26 26 20 2a 7a 54 6f 6f 6c 54 69 70 29 7b 0a 20 && *zToolTip){.
b210: 20 20 20 43 58 28 22 20 74 69 74 6c 65 3d 27 25 CX(" title='%
b220: 68 27 22 2c 7a 54 6f 6f 6c 54 69 70 29 3b 0a 20 h'",zToolTip);.
b230: 20 7d 0a 20 20 69 66 28 7a 57 72 61 70 70 65 72 }. if(zWrapper
b240: 49 64 20 26 26 20 2a 7a 57 72 61 70 70 65 72 49 Id && *zWrapperI
b250: 64 29 7b 0a 20 20 20 20 43 58 28 22 20 69 64 3d d){. CX(" id=
b260: 27 25 73 27 22 2c 7a 57 72 61 70 70 65 72 49 64 '%s'",zWrapperId
b270: 29 3b 0a 20 20 7d 0a 20 20 43 58 28 22 3e 22 29 );. }. CX(">")
b280: 3b 0a 20 20 69 66 28 7a 4c 61 62 65 6c 20 26 26 ;. if(zLabel &&
b290: 20 2a 7a 4c 61 62 65 6c 29 7b 0a 20 20 20 20 43 *zLabel){. C
b2a0: 58 28 22 3c 6c 61 62 65 6c 20 66 6f 72 3d 27 25 X("<label for='%
b2b0: 73 27 3e 25 68 3c 2f 6c 61 62 65 6c 3e 22 2c 20 s'>%h</label>",
b2c0: 7a 4c 61 62 65 6c 49 44 2c 20 7a 4c 61 62 65 6c zLabelID, zLabel
b2d0: 29 3b 0a 20 20 7d 0a 20 20 43 58 28 22 3c 73 65 );. }. CX("<se
b2e0: 6c 65 63 74 20 6e 61 6d 65 3d 27 25 73 27 20 69 lect name='%s' i
b2f0: 64 3d 27 25 73 27 3e 22 2c 7a 46 69 65 6c 64 4e d='%s'>",zFieldN
b300: 61 6d 65 2c 20 7a 4c 61 62 65 6c 49 44 29 3b 0a ame, zLabelID);.
b310: 20 20 77 68 69 6c 65 28 31 29 7b 0a 20 20 20 20 while(1){.
b320: 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 7a 4c 61 const char * zLa
b330: 62 65 6c 20 3d 20 76 61 5f 61 72 67 28 76 61 72 bel = va_arg(var
b340: 67 73 2c 63 68 61 72 20 2a 29 3b 0a 20 20 20 20 gs,char *);.
b350: 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 7a 56 61 const char * zVa
b360: 6c 3b 0a 20 20 20 20 69 66 28 4e 55 4c 4c 3d 3d l;. if(NULL==
b370: 7a 4c 61 62 65 6c 29 7b 0a 20 20 20 20 20 20 62 zLabel){. b
b380: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 reak;. }.
b390: 7a 56 61 6c 20 3d 20 76 61 5f 61 72 67 28 76 61 zVal = va_arg(va
b3a0: 72 67 73 2c 63 68 61 72 20 2a 29 3b 0a 20 20 20 rgs,char *);.
b3b0: 20 43 58 28 22 3c 6f 70 74 69 6f 6e 20 76 61 6c CX("<option val
b3c0: 75 65 3d 27 25 54 27 25 73 3e 22 2c 0a 20 20 20 ue='%T'%s>",.
b3d0: 20 20 20 20 7a 56 61 6c 2c 20 30 3d 3d 66 6f 73 zVal, 0==fos
b3e0: 73 69 6c 5f 73 74 72 63 6d 70 28 7a 56 61 6c 2c sil_strcmp(zVal,
b3f0: 20 7a 53 65 6c 65 63 74 65 64 56 61 6c 29 20 3f zSelectedVal) ?
b400: 20 22 20 73 65 6c 65 63 74 65 64 22 20 3a 20 22 " selected" : "
b410: 22 29 3b 0a 20 20 20 20 69 66 28 2a 7a 4c 61 62 ");. if(*zLab
b420: 65 6c 29 7b 0a 20 20 20 20 20 20 43 58 28 22 25 el){. CX("%
b430: 73 22 2c 20 7a 4c 61 62 65 6c 29 3b 0a 20 20 20 s", zLabel);.
b440: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 43 58 }else{. CX
b450: 28 22 25 68 22 2c 7a 56 61 6c 29 3b 0a 20 20 20 ("%h",zVal);.
b460: 20 7d 0a 20 20 20 20 43 58 28 22 3c 2f 6f 70 74 }. CX("</opt
b470: 69 6f 6e 3e 5c 6e 22 29 3b 0a 20 20 7d 0a 20 20 ion>\n");. }.
b480: 43 58 28 22 3c 2f 73 65 6c 65 63 74 3e 5c 6e 22 CX("</select>\n"
b490: 29 3b 0a 20 20 43 58 28 22 3c 2f 64 69 76 3e 5c );. CX("</div>\
b4a0: 6e 22 29 3b 0a 20 20 76 61 5f 65 6e 64 28 76 61 n");. va_end(va
b4b0: 72 67 73 29 3b 0a 20 20 66 6f 73 73 69 6c 5f 66 rgs);. fossil_f
b4c0: 72 65 65 28 7a 4c 61 62 65 6c 49 44 29 3b 0a 7d ree(zLabelID);.}
b4d0: 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e 65 72 61 74 65 ../*.** Generate
b4e0: 20 61 20 3c 73 63 72 69 70 74 3e 20 77 69 74 68 a <script> with
b4f0: 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20 an appropriate
b500: 6e 6f 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 7a 4f 72 nonce..**.** zOr
b510: 69 67 69 6e 20 61 6e 64 20 69 4c 69 6e 65 20 61 igin and iLine a
b520: 72 65 20 74 68 65 20 73 6f 75 72 63 65 20 63 6f re the source co
b530: 64 65 20 66 69 6c 65 6e 61 6d 65 20 61 6e 64 20 de filename and
b540: 6c 69 6e 65 20 6e 75 6d 62 65 72 0a 2a 2a 20 74 line number.** t
b550: 68 61 74 20 67 65 6e 65 72 61 74 65 64 20 74 68 hat generated th
b560: 69 73 20 72 65 71 75 65 73 74 2e 0a 2a 2f 0a 76 is request..*/.v
b570: 6f 69 64 20 73 74 79 6c 65 5f 73 63 72 69 70 74 oid style_script
b580: 5f 62 65 67 69 6e 28 63 6f 6e 73 74 20 63 68 61 _begin(const cha
b590: 72 20 2a 7a 4f 72 69 67 69 6e 2c 20 69 6e 74 20 r *zOrigin, int
b5a0: 69 4c 69 6e 65 29 7b 0a 20 20 63 6f 6e 73 74 20 iLine){. const
b5b0: 63 68 61 72 20 2a 7a 3b 0a 20 20 66 6f 72 28 7a char *z;. for(z
b5c0: 3d 7a 4f 72 69 67 69 6e 3b 20 7a 5b 30 5d 21 3d =zOrigin; z[0]!=
b5d0: 30 3b 20 7a 2b 2b 29 7b 0a 20 20 20 20 69 66 28 0; z++){. if(
b5e0: 20 7a 5b 30 5d 3d 3d 27 2f 27 20 7c 7c 20 7a 5b z[0]=='/' || z[
b5f0: 30 5d 3d 3d 27 5c 5c 27 20 29 7b 0a 20 20 20 20 0]=='\\' ){.
b600: 20 20 7a 4f 72 69 67 69 6e 20 3d 20 7a 2b 31 3b zOrigin = z+1;
b610: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 43 58 28 . }. }. CX(
b620: 22 3c 73 63 72 69 70 74 20 6e 6f 6e 63 65 3d 27 "<script nonce='
b630: 25 73 27 3e 2f 2a 20 25 73 3a 25 64 20 2a 2f 5c %s'>/* %s:%d */\
b640: 6e 22 2c 20 73 74 79 6c 65 5f 6e 6f 6e 63 65 28 n", style_nonce(
b650: 29 2c 20 7a 4f 72 69 67 69 6e 2c 20 69 4c 69 6e ), zOrigin, iLin
b660: 65 29 3b 0a 7d 0a 0a 2f 2a 20 47 65 6e 65 72 61 e);.}../* Genera
b670: 74 65 20 74 68 65 20 63 6c 6f 73 69 6e 67 20 3c te the closing <
b680: 2f 73 63 72 69 70 74 3e 20 74 61 67 20 0a 2a 2f /script> tag .*/
b690: 0a 76 6f 69 64 20 73 74 79 6c 65 5f 73 63 72 69 .void style_scri
b6a0: 70 74 5f 65 6e 64 28 76 6f 69 64 29 7b 0a 20 20 pt_end(void){.
b6b0: 43 58 28 22 3c 2f 73 63 72 69 70 74 3e 5c 6e 22 CX("</script>\n"
b6c0: 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 6d 69 74 );.}../*.** Emit
b6d0: 73 20 61 20 4e 4f 53 43 52 49 50 54 20 74 61 67 s a NOSCRIPT tag
b6e0: 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 20 6d with an error m
b6f0: 65 73 73 61 67 65 20 73 74 61 74 69 6e 67 20 74 essage stating t
b700: 68 61 74 20 4a 53 20 69 73 0a 2a 2a 20 72 65 71 hat JS is.** req
b710: 75 69 72 65 64 20 66 6f 72 20 74 68 65 20 63 75 uired for the cu
b720: 72 72 65 6e 74 20 70 61 67 65 2e 20 54 68 69 73 rrent page. This
b730: 20 22 73 68 6f 75 6c 64 22 20 62 65 20 63 61 6c "should" be cal
b740: 6c 65 64 20 6e 65 61 72 20 74 68 65 20 74 6f 70 led near the top
b750: 0a 2a 2a 20 6f 66 20 70 61 67 65 73 20 77 68 69 .** of pages whi
b760: 63 68 20 2a 72 65 71 75 69 72 65 2a 20 4a 53 2e ch *require* JS.
b770: 20 54 68 65 20 69 6e 6e 65 72 20 44 49 56 20 68 The inner DIV h
b780: 61 73 20 74 68 65 20 43 53 53 20 63 6c 61 73 73 as the CSS class
b790: 0a 2a 2a 20 27 65 72 72 6f 72 27 20 61 6e 64 20 .** 'error' and
b7a0: 63 61 6e 20 62 65 20 73 74 79 6c 65 64 20 76 69 can be styled vi
b7b0: 61 20 61 20 28 6e 6f 73 63 72 69 70 74 20 3e 20 a a (noscript >
b7c0: 2e 65 72 72 6f 72 29 20 43 53 53 20 73 65 6c 65 .error) CSS sele
b7d0: 63 74 6f 72 2e 0a 2a 2f 0a 76 6f 69 64 20 73 74 ctor..*/.void st
b7e0: 79 6c 65 5f 65 6d 69 74 5f 6e 6f 73 63 72 69 70 yle_emit_noscrip
b7f0: 74 5f 66 6f 72 5f 6a 73 5f 70 61 67 65 28 76 6f t_for_js_page(vo
b800: 69 64 29 7b 0a 20 20 43 58 28 22 3c 6e 6f 73 63 id){. CX("<nosc
b810: 72 69 70 74 3e 3c 64 69 76 20 63 6c 61 73 73 3d ript><div class=
b820: 27 65 72 72 6f 72 27 3e 22 0a 20 20 20 20 20 22 'error'>". "
b830: 54 68 69 73 20 70 61 67 65 20 72 65 71 75 69 72 This page requir
b840: 65 73 20 4a 61 76 61 53 63 72 69 70 74 20 28 45 es JavaScript (E
b850: 53 32 30 31 35 2c 20 61 2e 6b 2e 61 2e 20 45 53 S2015, a.k.a. ES
b860: 36 2c 20 6f 72 20 6e 65 77 65 72 29 2e 22 0a 20 6, or newer).".
b870: 20 20 20 20 22 3c 2f 64 69 76 3e 3c 2f 6e 6f 73 "</div></nos
b880: 63 72 69 70 74 3e 22 29 3b 0a 7d 0a cript>");.}.