Fossil SCM
merge trunk
Commit
1393a9107b3fee4b89886e2d3550f8523cee5e60
Parent
2050646c9f2fec7…
7 files changed
+12
-9
+12
-9
+2
-39
+49
+10
-7
+8
-2
+1
+12
-9
| --- src/configure.c | ||
| +++ src/configure.c | ||
| @@ -27,17 +27,18 @@ | ||
| 27 | 27 | #if INTERFACE |
| 28 | 28 | /* |
| 29 | 29 | ** Configuration transfers occur in groups. These are the allowed |
| 30 | 30 | ** groupings: |
| 31 | 31 | */ |
| 32 | -#define CONFIGSET_SKIN 0x000001 /* WWW interface appearance */ | |
| 33 | -#define CONFIGSET_TKT 0x000002 /* Ticket configuration */ | |
| 34 | -#define CONFIGSET_PROJ 0x000004 /* Project name */ | |
| 35 | -#define CONFIGSET_SHUN 0x000008 /* Shun settings */ | |
| 36 | -#define CONFIGSET_USER 0x000010 /* The USER table */ | |
| 37 | -#define CONFIGSET_ADDR 0x000020 /* The CONCEALED table */ | |
| 38 | -#define CONFIGSET_XFER 0x000040 /* Transfer configuration */ | |
| 32 | +#define CONFIGSET_CSS 0x000001 /* Style sheet only */ | |
| 33 | +#define CONFIGSET_SKIN 0x000002 /* WWW interface appearance */ | |
| 34 | +#define CONFIGSET_TKT 0x000004 /* Ticket configuration */ | |
| 35 | +#define CONFIGSET_PROJ 0x000008 /* Project name */ | |
| 36 | +#define CONFIGSET_SHUN 0x000010 /* Shun settings */ | |
| 37 | +#define CONFIGSET_USER 0x000020 /* The USER table */ | |
| 38 | +#define CONFIGSET_ADDR 0x000040 /* The CONCEALED table */ | |
| 39 | +#define CONFIGSET_XFER 0x000080 /* Transfer configuration */ | |
| 39 | 40 | |
| 40 | 41 | #define CONFIGSET_ALL 0x0000ff /* Everything */ |
| 41 | 42 | |
| 42 | 43 | #define CONFIGSET_OVERWRITE 0x100000 /* Causes overwrite instead of merge */ |
| 43 | 44 | #define CONFIGSET_OLDFORMAT 0x200000 /* Use the legacy format */ |
| @@ -52,11 +53,13 @@ | ||
| 52 | 53 | int groupMask; /* Mask for that configuration set */ |
| 53 | 54 | const char *zHelp; /* What it does */ |
| 54 | 55 | } aGroupName[] = { |
| 55 | 56 | { "/email", CONFIGSET_ADDR, "Concealed email addresses in tickets" }, |
| 56 | 57 | { "/project", CONFIGSET_PROJ, "Project name and description" }, |
| 57 | - { "/skin", CONFIGSET_SKIN, "Web interface apparance settings" }, | |
| 58 | + { "/skin", CONFIGSET_SKIN | CONFIGSET_CSS, | |
| 59 | + "Web interface apparance settings" }, | |
| 60 | + { "/css", CONFIGSET_CSS, "Style sheet" }, | |
| 58 | 61 | { "/shun", CONFIGSET_SHUN, "List of shunned artifacts" }, |
| 59 | 62 | { "/ticket", CONFIGSET_TKT, "Ticket setup", }, |
| 60 | 63 | { "/user", CONFIGSET_USER, "Users and privilege settings" }, |
| 61 | 64 | { "/xfer", CONFIGSET_XFER, "Transfer setup", }, |
| 62 | 65 | { "/all", CONFIGSET_ALL, "All of the above" }, |
| @@ -73,11 +76,11 @@ | ||
| 73 | 76 | */ |
| 74 | 77 | static struct { |
| 75 | 78 | const char *zName; /* Name of the configuration parameter */ |
| 76 | 79 | int groupMask; /* Which config groups is it part of */ |
| 77 | 80 | } aConfig[] = { |
| 78 | - { "css", CONFIGSET_SKIN }, | |
| 81 | + { "css", CONFIGSET_CSS }, | |
| 79 | 82 | { "header", CONFIGSET_SKIN }, |
| 80 | 83 | { "footer", CONFIGSET_SKIN }, |
| 81 | 84 | { "logo-mimetype", CONFIGSET_SKIN }, |
| 82 | 85 | { "logo-image", CONFIGSET_SKIN }, |
| 83 | 86 | { "background-mimetype", CONFIGSET_SKIN }, |
| 84 | 87 |
| --- src/configure.c | |
| +++ src/configure.c | |
| @@ -27,17 +27,18 @@ | |
| 27 | #if INTERFACE |
| 28 | /* |
| 29 | ** Configuration transfers occur in groups. These are the allowed |
| 30 | ** groupings: |
| 31 | */ |
| 32 | #define CONFIGSET_SKIN 0x000001 /* WWW interface appearance */ |
| 33 | #define CONFIGSET_TKT 0x000002 /* Ticket configuration */ |
| 34 | #define CONFIGSET_PROJ 0x000004 /* Project name */ |
| 35 | #define CONFIGSET_SHUN 0x000008 /* Shun settings */ |
| 36 | #define CONFIGSET_USER 0x000010 /* The USER table */ |
| 37 | #define CONFIGSET_ADDR 0x000020 /* The CONCEALED table */ |
| 38 | #define CONFIGSET_XFER 0x000040 /* Transfer configuration */ |
| 39 | |
| 40 | #define CONFIGSET_ALL 0x0000ff /* Everything */ |
| 41 | |
| 42 | #define CONFIGSET_OVERWRITE 0x100000 /* Causes overwrite instead of merge */ |
| 43 | #define CONFIGSET_OLDFORMAT 0x200000 /* Use the legacy format */ |
| @@ -52,11 +53,13 @@ | |
| 52 | int groupMask; /* Mask for that configuration set */ |
| 53 | const char *zHelp; /* What it does */ |
| 54 | } aGroupName[] = { |
| 55 | { "/email", CONFIGSET_ADDR, "Concealed email addresses in tickets" }, |
| 56 | { "/project", CONFIGSET_PROJ, "Project name and description" }, |
| 57 | { "/skin", CONFIGSET_SKIN, "Web interface apparance settings" }, |
| 58 | { "/shun", CONFIGSET_SHUN, "List of shunned artifacts" }, |
| 59 | { "/ticket", CONFIGSET_TKT, "Ticket setup", }, |
| 60 | { "/user", CONFIGSET_USER, "Users and privilege settings" }, |
| 61 | { "/xfer", CONFIGSET_XFER, "Transfer setup", }, |
| 62 | { "/all", CONFIGSET_ALL, "All of the above" }, |
| @@ -73,11 +76,11 @@ | |
| 73 | */ |
| 74 | static struct { |
| 75 | const char *zName; /* Name of the configuration parameter */ |
| 76 | int groupMask; /* Which config groups is it part of */ |
| 77 | } aConfig[] = { |
| 78 | { "css", CONFIGSET_SKIN }, |
| 79 | { "header", CONFIGSET_SKIN }, |
| 80 | { "footer", CONFIGSET_SKIN }, |
| 81 | { "logo-mimetype", CONFIGSET_SKIN }, |
| 82 | { "logo-image", CONFIGSET_SKIN }, |
| 83 | { "background-mimetype", CONFIGSET_SKIN }, |
| 84 |
| --- src/configure.c | |
| +++ src/configure.c | |
| @@ -27,17 +27,18 @@ | |
| 27 | #if INTERFACE |
| 28 | /* |
| 29 | ** Configuration transfers occur in groups. These are the allowed |
| 30 | ** groupings: |
| 31 | */ |
| 32 | #define CONFIGSET_CSS 0x000001 /* Style sheet only */ |
| 33 | #define CONFIGSET_SKIN 0x000002 /* WWW interface appearance */ |
| 34 | #define CONFIGSET_TKT 0x000004 /* Ticket configuration */ |
| 35 | #define CONFIGSET_PROJ 0x000008 /* Project name */ |
| 36 | #define CONFIGSET_SHUN 0x000010 /* Shun settings */ |
| 37 | #define CONFIGSET_USER 0x000020 /* The USER table */ |
| 38 | #define CONFIGSET_ADDR 0x000040 /* The CONCEALED table */ |
| 39 | #define CONFIGSET_XFER 0x000080 /* Transfer configuration */ |
| 40 | |
| 41 | #define CONFIGSET_ALL 0x0000ff /* Everything */ |
| 42 | |
| 43 | #define CONFIGSET_OVERWRITE 0x100000 /* Causes overwrite instead of merge */ |
| 44 | #define CONFIGSET_OLDFORMAT 0x200000 /* Use the legacy format */ |
| @@ -52,11 +53,13 @@ | |
| 53 | int groupMask; /* Mask for that configuration set */ |
| 54 | const char *zHelp; /* What it does */ |
| 55 | } aGroupName[] = { |
| 56 | { "/email", CONFIGSET_ADDR, "Concealed email addresses in tickets" }, |
| 57 | { "/project", CONFIGSET_PROJ, "Project name and description" }, |
| 58 | { "/skin", CONFIGSET_SKIN | CONFIGSET_CSS, |
| 59 | "Web interface apparance settings" }, |
| 60 | { "/css", CONFIGSET_CSS, "Style sheet" }, |
| 61 | { "/shun", CONFIGSET_SHUN, "List of shunned artifacts" }, |
| 62 | { "/ticket", CONFIGSET_TKT, "Ticket setup", }, |
| 63 | { "/user", CONFIGSET_USER, "Users and privilege settings" }, |
| 64 | { "/xfer", CONFIGSET_XFER, "Transfer setup", }, |
| 65 | { "/all", CONFIGSET_ALL, "All of the above" }, |
| @@ -73,11 +76,11 @@ | |
| 76 | */ |
| 77 | static struct { |
| 78 | const char *zName; /* Name of the configuration parameter */ |
| 79 | int groupMask; /* Which config groups is it part of */ |
| 80 | } aConfig[] = { |
| 81 | { "css", CONFIGSET_CSS }, |
| 82 | { "header", CONFIGSET_SKIN }, |
| 83 | { "footer", CONFIGSET_SKIN }, |
| 84 | { "logo-mimetype", CONFIGSET_SKIN }, |
| 85 | { "logo-image", CONFIGSET_SKIN }, |
| 86 | { "background-mimetype", CONFIGSET_SKIN }, |
| 87 |
+12
-9
| --- src/configure.c | ||
| +++ src/configure.c | ||
| @@ -27,17 +27,18 @@ | ||
| 27 | 27 | #if INTERFACE |
| 28 | 28 | /* |
| 29 | 29 | ** Configuration transfers occur in groups. These are the allowed |
| 30 | 30 | ** groupings: |
| 31 | 31 | */ |
| 32 | -#define CONFIGSET_SKIN 0x000001 /* WWW interface appearance */ | |
| 33 | -#define CONFIGSET_TKT 0x000002 /* Ticket configuration */ | |
| 34 | -#define CONFIGSET_PROJ 0x000004 /* Project name */ | |
| 35 | -#define CONFIGSET_SHUN 0x000008 /* Shun settings */ | |
| 36 | -#define CONFIGSET_USER 0x000010 /* The USER table */ | |
| 37 | -#define CONFIGSET_ADDR 0x000020 /* The CONCEALED table */ | |
| 38 | -#define CONFIGSET_XFER 0x000040 /* Transfer configuration */ | |
| 32 | +#define CONFIGSET_CSS 0x000001 /* Style sheet only */ | |
| 33 | +#define CONFIGSET_SKIN 0x000002 /* WWW interface appearance */ | |
| 34 | +#define CONFIGSET_TKT 0x000004 /* Ticket configuration */ | |
| 35 | +#define CONFIGSET_PROJ 0x000008 /* Project name */ | |
| 36 | +#define CONFIGSET_SHUN 0x000010 /* Shun settings */ | |
| 37 | +#define CONFIGSET_USER 0x000020 /* The USER table */ | |
| 38 | +#define CONFIGSET_ADDR 0x000040 /* The CONCEALED table */ | |
| 39 | +#define CONFIGSET_XFER 0x000080 /* Transfer configuration */ | |
| 39 | 40 | |
| 40 | 41 | #define CONFIGSET_ALL 0x0000ff /* Everything */ |
| 41 | 42 | |
| 42 | 43 | #define CONFIGSET_OVERWRITE 0x100000 /* Causes overwrite instead of merge */ |
| 43 | 44 | #define CONFIGSET_OLDFORMAT 0x200000 /* Use the legacy format */ |
| @@ -52,11 +53,13 @@ | ||
| 52 | 53 | int groupMask; /* Mask for that configuration set */ |
| 53 | 54 | const char *zHelp; /* What it does */ |
| 54 | 55 | } aGroupName[] = { |
| 55 | 56 | { "/email", CONFIGSET_ADDR, "Concealed email addresses in tickets" }, |
| 56 | 57 | { "/project", CONFIGSET_PROJ, "Project name and description" }, |
| 57 | - { "/skin", CONFIGSET_SKIN, "Web interface apparance settings" }, | |
| 58 | + { "/skin", CONFIGSET_SKIN | CONFIGSET_CSS, | |
| 59 | + "Web interface apparance settings" }, | |
| 60 | + { "/css", CONFIGSET_CSS, "Style sheet" }, | |
| 58 | 61 | { "/shun", CONFIGSET_SHUN, "List of shunned artifacts" }, |
| 59 | 62 | { "/ticket", CONFIGSET_TKT, "Ticket setup", }, |
| 60 | 63 | { "/user", CONFIGSET_USER, "Users and privilege settings" }, |
| 61 | 64 | { "/xfer", CONFIGSET_XFER, "Transfer setup", }, |
| 62 | 65 | { "/all", CONFIGSET_ALL, "All of the above" }, |
| @@ -73,11 +76,11 @@ | ||
| 73 | 76 | */ |
| 74 | 77 | static struct { |
| 75 | 78 | const char *zName; /* Name of the configuration parameter */ |
| 76 | 79 | int groupMask; /* Which config groups is it part of */ |
| 77 | 80 | } aConfig[] = { |
| 78 | - { "css", CONFIGSET_SKIN }, | |
| 81 | + { "css", CONFIGSET_CSS }, | |
| 79 | 82 | { "header", CONFIGSET_SKIN }, |
| 80 | 83 | { "footer", CONFIGSET_SKIN }, |
| 81 | 84 | { "logo-mimetype", CONFIGSET_SKIN }, |
| 82 | 85 | { "logo-image", CONFIGSET_SKIN }, |
| 83 | 86 | { "background-mimetype", CONFIGSET_SKIN }, |
| 84 | 87 |
| --- src/configure.c | |
| +++ src/configure.c | |
| @@ -27,17 +27,18 @@ | |
| 27 | #if INTERFACE |
| 28 | /* |
| 29 | ** Configuration transfers occur in groups. These are the allowed |
| 30 | ** groupings: |
| 31 | */ |
| 32 | #define CONFIGSET_SKIN 0x000001 /* WWW interface appearance */ |
| 33 | #define CONFIGSET_TKT 0x000002 /* Ticket configuration */ |
| 34 | #define CONFIGSET_PROJ 0x000004 /* Project name */ |
| 35 | #define CONFIGSET_SHUN 0x000008 /* Shun settings */ |
| 36 | #define CONFIGSET_USER 0x000010 /* The USER table */ |
| 37 | #define CONFIGSET_ADDR 0x000020 /* The CONCEALED table */ |
| 38 | #define CONFIGSET_XFER 0x000040 /* Transfer configuration */ |
| 39 | |
| 40 | #define CONFIGSET_ALL 0x0000ff /* Everything */ |
| 41 | |
| 42 | #define CONFIGSET_OVERWRITE 0x100000 /* Causes overwrite instead of merge */ |
| 43 | #define CONFIGSET_OLDFORMAT 0x200000 /* Use the legacy format */ |
| @@ -52,11 +53,13 @@ | |
| 52 | int groupMask; /* Mask for that configuration set */ |
| 53 | const char *zHelp; /* What it does */ |
| 54 | } aGroupName[] = { |
| 55 | { "/email", CONFIGSET_ADDR, "Concealed email addresses in tickets" }, |
| 56 | { "/project", CONFIGSET_PROJ, "Project name and description" }, |
| 57 | { "/skin", CONFIGSET_SKIN, "Web interface apparance settings" }, |
| 58 | { "/shun", CONFIGSET_SHUN, "List of shunned artifacts" }, |
| 59 | { "/ticket", CONFIGSET_TKT, "Ticket setup", }, |
| 60 | { "/user", CONFIGSET_USER, "Users and privilege settings" }, |
| 61 | { "/xfer", CONFIGSET_XFER, "Transfer setup", }, |
| 62 | { "/all", CONFIGSET_ALL, "All of the above" }, |
| @@ -73,11 +76,11 @@ | |
| 73 | */ |
| 74 | static struct { |
| 75 | const char *zName; /* Name of the configuration parameter */ |
| 76 | int groupMask; /* Which config groups is it part of */ |
| 77 | } aConfig[] = { |
| 78 | { "css", CONFIGSET_SKIN }, |
| 79 | { "header", CONFIGSET_SKIN }, |
| 80 | { "footer", CONFIGSET_SKIN }, |
| 81 | { "logo-mimetype", CONFIGSET_SKIN }, |
| 82 | { "logo-image", CONFIGSET_SKIN }, |
| 83 | { "background-mimetype", CONFIGSET_SKIN }, |
| 84 |
| --- src/configure.c | |
| +++ src/configure.c | |
| @@ -27,17 +27,18 @@ | |
| 27 | #if INTERFACE |
| 28 | /* |
| 29 | ** Configuration transfers occur in groups. These are the allowed |
| 30 | ** groupings: |
| 31 | */ |
| 32 | #define CONFIGSET_CSS 0x000001 /* Style sheet only */ |
| 33 | #define CONFIGSET_SKIN 0x000002 /* WWW interface appearance */ |
| 34 | #define CONFIGSET_TKT 0x000004 /* Ticket configuration */ |
| 35 | #define CONFIGSET_PROJ 0x000008 /* Project name */ |
| 36 | #define CONFIGSET_SHUN 0x000010 /* Shun settings */ |
| 37 | #define CONFIGSET_USER 0x000020 /* The USER table */ |
| 38 | #define CONFIGSET_ADDR 0x000040 /* The CONCEALED table */ |
| 39 | #define CONFIGSET_XFER 0x000080 /* Transfer configuration */ |
| 40 | |
| 41 | #define CONFIGSET_ALL 0x0000ff /* Everything */ |
| 42 | |
| 43 | #define CONFIGSET_OVERWRITE 0x100000 /* Causes overwrite instead of merge */ |
| 44 | #define CONFIGSET_OLDFORMAT 0x200000 /* Use the legacy format */ |
| @@ -52,11 +53,13 @@ | |
| 53 | int groupMask; /* Mask for that configuration set */ |
| 54 | const char *zHelp; /* What it does */ |
| 55 | } aGroupName[] = { |
| 56 | { "/email", CONFIGSET_ADDR, "Concealed email addresses in tickets" }, |
| 57 | { "/project", CONFIGSET_PROJ, "Project name and description" }, |
| 58 | { "/skin", CONFIGSET_SKIN | CONFIGSET_CSS, |
| 59 | "Web interface apparance settings" }, |
| 60 | { "/css", CONFIGSET_CSS, "Style sheet" }, |
| 61 | { "/shun", CONFIGSET_SHUN, "List of shunned artifacts" }, |
| 62 | { "/ticket", CONFIGSET_TKT, "Ticket setup", }, |
| 63 | { "/user", CONFIGSET_USER, "Users and privilege settings" }, |
| 64 | { "/xfer", CONFIGSET_XFER, "Transfer setup", }, |
| 65 | { "/all", CONFIGSET_ALL, "All of the above" }, |
| @@ -73,11 +76,11 @@ | |
| 76 | */ |
| 77 | static struct { |
| 78 | const char *zName; /* Name of the configuration parameter */ |
| 79 | int groupMask; /* Which config groups is it part of */ |
| 80 | } aConfig[] = { |
| 81 | { "css", CONFIGSET_CSS }, |
| 82 | { "header", CONFIGSET_SKIN }, |
| 83 | { "footer", CONFIGSET_SKIN }, |
| 84 | { "logo-mimetype", CONFIGSET_SKIN }, |
| 85 | { "logo-image", CONFIGSET_SKIN }, |
| 86 | { "background-mimetype", CONFIGSET_SKIN }, |
| 87 |
+2
-39
| --- src/skins.c | ||
| +++ src/skins.c | ||
| @@ -542,11 +542,10 @@ | ||
| 542 | 542 | @ } |
| 543 | 543 | @ |
| 544 | 544 | @ /* All page content from the bottom of the menu or submenu down to |
| 545 | 545 | @ ** the footer */ |
| 546 | 546 | @ div.content { |
| 547 | -@ float right; | |
| 548 | 547 | @ padding: 2ex 1ex 0ex 2ex; |
| 549 | 548 | @ } |
| 550 | 549 | @ |
| 551 | 550 | @ /* Some pages have section dividers */ |
| 552 | 551 | @ div.section { |
| @@ -660,11 +659,11 @@ | ||
| 660 | 659 | @ '); |
| 661 | 660 | ; |
| 662 | 661 | |
| 663 | 662 | |
| 664 | 663 | /* |
| 665 | -** Gradients and rounded corners. | |
| 664 | +** Shadow boxes and rounded corners. | |
| 666 | 665 | */ |
| 667 | 666 | static const char zBuiltinSkin4[] = |
| 668 | 667 | @ REPLACE INTO config(name,mtime,value) |
| 669 | 668 | @ VALUES('css',now(),'/* General settings for the entire page */ |
| 670 | 669 | @ html { |
| @@ -722,26 +721,16 @@ | ||
| 722 | 721 | @ /* The main menu bar that appears at the top of the page beneath |
| 723 | 722 | @ ** the header */ |
| 724 | 723 | @ div.mainmenu { |
| 725 | 724 | @ text-align: center; |
| 726 | 725 | @ color: white; |
| 727 | -@ -moz-border-top-right-radius: 5px; | |
| 728 | -@ -moz-border-top-left-radius: 5px; | |
| 729 | -@ -webkit-border-top-right-radius: 5px; | |
| 730 | -@ -webkit-border-top-left-radius: 5px; | |
| 731 | -@ -border-top-right-radius: 5px; | |
| 732 | -@ -border-top-left-radius: 5px; | |
| 733 | 726 | @ border-top-left-radius: 5px; |
| 734 | 727 | @ border-top-right-radius: 5px; |
| 735 | 728 | @ vertical-align: middle; |
| 736 | 729 | @ padding-top: 8px; |
| 737 | 730 | @ padding-bottom: 8px; |
| 738 | 731 | @ background-color: #446979; |
| 739 | -@ background: -webkit-gradient(linear,left bottom,left top, color-stop(0.02, rgb(51,81,94)), color-stop(0.76, rgb(85,129,149))); | |
| 740 | -@ background: -moz-linear-gradient(center bottom,rgb(51,81,94) 2%, rgb(85,129,149) 76%); | |
| 741 | -@ -webkit-box-shadow: 0px 3px 4px #333333; | |
| 742 | -@ -moz-box-shadow: 0px 3px 4px #333333; | |
| 743 | 732 | @ box-shadow: 0px 3px 4px #333333; |
| 744 | 733 | @ } |
| 745 | 734 | @ |
| 746 | 735 | @ /* The submenu bar that *sometimes* appears below the main menu */ |
| 747 | 736 | @ div.submenu { |
| @@ -750,12 +739,10 @@ | ||
| 750 | 739 | @ text-align: right; |
| 751 | 740 | @ color: #000; |
| 752 | 741 | @ background-color: #fff; |
| 753 | 742 | @ height: 1.5em; |
| 754 | 743 | @ vertical-align:middle; |
| 755 | -@ -webkit-box-shadow: 0px 3px 4px #999; | |
| 756 | -@ -moz-box-shadow: 0px 3px 4px #999; | |
| 757 | 744 | @ box-shadow: 0px 3px 4px #999; |
| 758 | 745 | @ } |
| 759 | 746 | @ div.mainmenu a, div.mainmenu a:visited { |
| 760 | 747 | @ padding: 3px 10px 3px 10px; |
| 761 | 748 | @ color: white; |
| @@ -766,43 +753,30 @@ | ||
| 766 | 753 | @ padding: 2px 8px; |
| 767 | 754 | @ color: #000; |
| 768 | 755 | @ font-family: Arial; |
| 769 | 756 | @ text-decoration: none; |
| 770 | 757 | @ margin:auto; |
| 771 | -@ -webkit-border-radius: 5px; | |
| 772 | -@ -moz-border-radius: 5px; | |
| 773 | 758 | @ border-radius: 5px; |
| 774 | -@ background: -webkit-gradient(linear,left bottom, left top, color-stop(0, rgb(184,184,184)), color-stop(0.75, rgb(214,214,214))); | |
| 775 | -@ background: -moz-linear-gradient(center bottom, rgb(184,184,184) 0%, rgb(214,214,214) 75%); | |
| 776 | 759 | @ background-color: #e0e0e0 ; |
| 777 | 760 | @ text-shadow: 0px -1px 0px #eee; |
| 778 | -@ filter: dropshadow(color=#eeeeee, offx=0, offy=-1); | |
| 779 | 761 | @ border: 1px solid #000; |
| 780 | 762 | @ } |
| 781 | 763 | @ |
| 782 | 764 | @ div.mainmenu a:hover { |
| 783 | 765 | @ color: #000; |
| 784 | 766 | @ background-color: white; |
| 785 | 767 | @ } |
| 786 | 768 | @ |
| 787 | 769 | @ div.submenu a:hover, div.sectionmenu>a.button:hover { |
| 788 | -@ background: -webkit-gradient(linear,left bottom, left top, color-stop(0, rgb(214,214,214)), color-stop(0.75, rgb(184,184,184))); | |
| 789 | -@ background: -moz-linear-gradient(center bottom, rgb(214,214,214) 0%, rgb(184,184,184) 75%); | |
| 790 | 770 | @ background-color: #c0c0c0 ; |
| 791 | 771 | @ } |
| 792 | 772 | @ |
| 793 | 773 | @ /* All page content from the bottom of the menu or submenu down to |
| 794 | 774 | @ ** the footer */ |
| 795 | 775 | @ div.content { |
| 796 | 776 | @ background-color: #fff; |
| 797 | -@ -webkit-box-shadow: 0px 3px 4px #999; | |
| 798 | -@ -moz-box-shadow: 0px 3px 4px #999; | |
| 799 | 777 | @ box-shadow: 0px 3px 4px #999; |
| 800 | -@ -moz-border-bottom-right-radius: 5px; | |
| 801 | -@ -moz-border-bottom-left-radius: 5px; | |
| 802 | -@ -webkit-border-bottom-right-radius: 5px; | |
| 803 | -@ -webkit-border-bottom-left-radius: 5px; | |
| 804 | 778 | @ border-bottom-right-radius: 5px; |
| 805 | 779 | @ border-bottom-left-radius: 5px; |
| 806 | 780 | @ padding-bottom: 1em; |
| 807 | 781 | @ min-height:40%; |
| 808 | 782 | @ } |
| @@ -811,28 +785,17 @@ | ||
| 811 | 785 | @ /* Some pages have section dividers */ |
| 812 | 786 | @ div.section { |
| 813 | 787 | @ margin-bottom: 0.5em; |
| 814 | 788 | @ margin-top: 1em; |
| 815 | 789 | @ margin-right: auto; |
| 816 | -@ | |
| 817 | 790 | @ padding: 1px 1px 1px 1px; |
| 818 | 791 | @ font-size: 1.2em; |
| 819 | 792 | @ font-weight: bold; |
| 820 | -@ | |
| 821 | 793 | @ text-align: center; |
| 822 | 794 | @ color: white; |
| 823 | -@ | |
| 824 | -@ -webkit-border-radius: 5px; | |
| 825 | -@ -moz-border-radius: 5px; | |
| 826 | 795 | @ border-radius: 5px; |
| 827 | -@ | |
| 828 | 796 | @ background-color: #446979; |
| 829 | -@ background: -webkit-gradient(linear,left bottom,left top, color-stop(0.02, rgb(51,81,94)), color-stop(0.76, rgb(85,129,149))); | |
| 830 | -@ background: -moz-linear-gradient(center bottom,rgb(51,81,94) 2%, rgb(85,129,149) 76%); | |
| 831 | -@ | |
| 832 | -@ -webkit-box-shadow: 0px 3px 4px #333333; | |
| 833 | -@ -moz-box-shadow: 0px 3px 4px #333333; | |
| 834 | 797 | @ box-shadow: 0px 3px 4px #333333; |
| 835 | 798 | @ } |
| 836 | 799 | @ |
| 837 | 800 | @ /* The "Date" that occurs on the left hand side of timelines */ |
| 838 | 801 | @ div.divider { |
| @@ -968,11 +931,11 @@ | ||
| 968 | 931 | } aBuiltinSkin[] = { |
| 969 | 932 | { "Default", 0 /* Filled in at runtime */ }, |
| 970 | 933 | { "Plain Gray, No Logo", zBuiltinSkin1 }, |
| 971 | 934 | { "Khaki, No Logo", zBuiltinSkin2 }, |
| 972 | 935 | { "Black & White, Menu on Left", zBuiltinSkin3 }, |
| 973 | - { "Gradient, Rounded Corners", zBuiltinSkin4 }, | |
| 936 | + { "Shadow boxes & Rounded Corners", zBuiltinSkin4 }, | |
| 974 | 937 | }; |
| 975 | 938 | |
| 976 | 939 | /* |
| 977 | 940 | ** For a skin named zSkinName, compute the name of the CONFIG table |
| 978 | 941 | ** entry where that skin is stored and return it. |
| 979 | 942 |
| --- src/skins.c | |
| +++ src/skins.c | |
| @@ -542,11 +542,10 @@ | |
| 542 | @ } |
| 543 | @ |
| 544 | @ /* All page content from the bottom of the menu or submenu down to |
| 545 | @ ** the footer */ |
| 546 | @ div.content { |
| 547 | @ float right; |
| 548 | @ padding: 2ex 1ex 0ex 2ex; |
| 549 | @ } |
| 550 | @ |
| 551 | @ /* Some pages have section dividers */ |
| 552 | @ div.section { |
| @@ -660,11 +659,11 @@ | |
| 660 | @ '); |
| 661 | ; |
| 662 | |
| 663 | |
| 664 | /* |
| 665 | ** Gradients and rounded corners. |
| 666 | */ |
| 667 | static const char zBuiltinSkin4[] = |
| 668 | @ REPLACE INTO config(name,mtime,value) |
| 669 | @ VALUES('css',now(),'/* General settings for the entire page */ |
| 670 | @ html { |
| @@ -722,26 +721,16 @@ | |
| 722 | @ /* The main menu bar that appears at the top of the page beneath |
| 723 | @ ** the header */ |
| 724 | @ div.mainmenu { |
| 725 | @ text-align: center; |
| 726 | @ color: white; |
| 727 | @ -moz-border-top-right-radius: 5px; |
| 728 | @ -moz-border-top-left-radius: 5px; |
| 729 | @ -webkit-border-top-right-radius: 5px; |
| 730 | @ -webkit-border-top-left-radius: 5px; |
| 731 | @ -border-top-right-radius: 5px; |
| 732 | @ -border-top-left-radius: 5px; |
| 733 | @ border-top-left-radius: 5px; |
| 734 | @ border-top-right-radius: 5px; |
| 735 | @ vertical-align: middle; |
| 736 | @ padding-top: 8px; |
| 737 | @ padding-bottom: 8px; |
| 738 | @ background-color: #446979; |
| 739 | @ background: -webkit-gradient(linear,left bottom,left top, color-stop(0.02, rgb(51,81,94)), color-stop(0.76, rgb(85,129,149))); |
| 740 | @ background: -moz-linear-gradient(center bottom,rgb(51,81,94) 2%, rgb(85,129,149) 76%); |
| 741 | @ -webkit-box-shadow: 0px 3px 4px #333333; |
| 742 | @ -moz-box-shadow: 0px 3px 4px #333333; |
| 743 | @ box-shadow: 0px 3px 4px #333333; |
| 744 | @ } |
| 745 | @ |
| 746 | @ /* The submenu bar that *sometimes* appears below the main menu */ |
| 747 | @ div.submenu { |
| @@ -750,12 +739,10 @@ | |
| 750 | @ text-align: right; |
| 751 | @ color: #000; |
| 752 | @ background-color: #fff; |
| 753 | @ height: 1.5em; |
| 754 | @ vertical-align:middle; |
| 755 | @ -webkit-box-shadow: 0px 3px 4px #999; |
| 756 | @ -moz-box-shadow: 0px 3px 4px #999; |
| 757 | @ box-shadow: 0px 3px 4px #999; |
| 758 | @ } |
| 759 | @ div.mainmenu a, div.mainmenu a:visited { |
| 760 | @ padding: 3px 10px 3px 10px; |
| 761 | @ color: white; |
| @@ -766,43 +753,30 @@ | |
| 766 | @ padding: 2px 8px; |
| 767 | @ color: #000; |
| 768 | @ font-family: Arial; |
| 769 | @ text-decoration: none; |
| 770 | @ margin:auto; |
| 771 | @ -webkit-border-radius: 5px; |
| 772 | @ -moz-border-radius: 5px; |
| 773 | @ border-radius: 5px; |
| 774 | @ background: -webkit-gradient(linear,left bottom, left top, color-stop(0, rgb(184,184,184)), color-stop(0.75, rgb(214,214,214))); |
| 775 | @ background: -moz-linear-gradient(center bottom, rgb(184,184,184) 0%, rgb(214,214,214) 75%); |
| 776 | @ background-color: #e0e0e0 ; |
| 777 | @ text-shadow: 0px -1px 0px #eee; |
| 778 | @ filter: dropshadow(color=#eeeeee, offx=0, offy=-1); |
| 779 | @ border: 1px solid #000; |
| 780 | @ } |
| 781 | @ |
| 782 | @ div.mainmenu a:hover { |
| 783 | @ color: #000; |
| 784 | @ background-color: white; |
| 785 | @ } |
| 786 | @ |
| 787 | @ div.submenu a:hover, div.sectionmenu>a.button:hover { |
| 788 | @ background: -webkit-gradient(linear,left bottom, left top, color-stop(0, rgb(214,214,214)), color-stop(0.75, rgb(184,184,184))); |
| 789 | @ background: -moz-linear-gradient(center bottom, rgb(214,214,214) 0%, rgb(184,184,184) 75%); |
| 790 | @ background-color: #c0c0c0 ; |
| 791 | @ } |
| 792 | @ |
| 793 | @ /* All page content from the bottom of the menu or submenu down to |
| 794 | @ ** the footer */ |
| 795 | @ div.content { |
| 796 | @ background-color: #fff; |
| 797 | @ -webkit-box-shadow: 0px 3px 4px #999; |
| 798 | @ -moz-box-shadow: 0px 3px 4px #999; |
| 799 | @ box-shadow: 0px 3px 4px #999; |
| 800 | @ -moz-border-bottom-right-radius: 5px; |
| 801 | @ -moz-border-bottom-left-radius: 5px; |
| 802 | @ -webkit-border-bottom-right-radius: 5px; |
| 803 | @ -webkit-border-bottom-left-radius: 5px; |
| 804 | @ border-bottom-right-radius: 5px; |
| 805 | @ border-bottom-left-radius: 5px; |
| 806 | @ padding-bottom: 1em; |
| 807 | @ min-height:40%; |
| 808 | @ } |
| @@ -811,28 +785,17 @@ | |
| 811 | @ /* Some pages have section dividers */ |
| 812 | @ div.section { |
| 813 | @ margin-bottom: 0.5em; |
| 814 | @ margin-top: 1em; |
| 815 | @ margin-right: auto; |
| 816 | @ |
| 817 | @ padding: 1px 1px 1px 1px; |
| 818 | @ font-size: 1.2em; |
| 819 | @ font-weight: bold; |
| 820 | @ |
| 821 | @ text-align: center; |
| 822 | @ color: white; |
| 823 | @ |
| 824 | @ -webkit-border-radius: 5px; |
| 825 | @ -moz-border-radius: 5px; |
| 826 | @ border-radius: 5px; |
| 827 | @ |
| 828 | @ background-color: #446979; |
| 829 | @ background: -webkit-gradient(linear,left bottom,left top, color-stop(0.02, rgb(51,81,94)), color-stop(0.76, rgb(85,129,149))); |
| 830 | @ background: -moz-linear-gradient(center bottom,rgb(51,81,94) 2%, rgb(85,129,149) 76%); |
| 831 | @ |
| 832 | @ -webkit-box-shadow: 0px 3px 4px #333333; |
| 833 | @ -moz-box-shadow: 0px 3px 4px #333333; |
| 834 | @ box-shadow: 0px 3px 4px #333333; |
| 835 | @ } |
| 836 | @ |
| 837 | @ /* The "Date" that occurs on the left hand side of timelines */ |
| 838 | @ div.divider { |
| @@ -968,11 +931,11 @@ | |
| 968 | } aBuiltinSkin[] = { |
| 969 | { "Default", 0 /* Filled in at runtime */ }, |
| 970 | { "Plain Gray, No Logo", zBuiltinSkin1 }, |
| 971 | { "Khaki, No Logo", zBuiltinSkin2 }, |
| 972 | { "Black & White, Menu on Left", zBuiltinSkin3 }, |
| 973 | { "Gradient, Rounded Corners", zBuiltinSkin4 }, |
| 974 | }; |
| 975 | |
| 976 | /* |
| 977 | ** For a skin named zSkinName, compute the name of the CONFIG table |
| 978 | ** entry where that skin is stored and return it. |
| 979 |
| --- src/skins.c | |
| +++ src/skins.c | |
| @@ -542,11 +542,10 @@ | |
| 542 | @ } |
| 543 | @ |
| 544 | @ /* All page content from the bottom of the menu or submenu down to |
| 545 | @ ** the footer */ |
| 546 | @ div.content { |
| 547 | @ padding: 2ex 1ex 0ex 2ex; |
| 548 | @ } |
| 549 | @ |
| 550 | @ /* Some pages have section dividers */ |
| 551 | @ div.section { |
| @@ -660,11 +659,11 @@ | |
| 659 | @ '); |
| 660 | ; |
| 661 | |
| 662 | |
| 663 | /* |
| 664 | ** Shadow boxes and rounded corners. |
| 665 | */ |
| 666 | static const char zBuiltinSkin4[] = |
| 667 | @ REPLACE INTO config(name,mtime,value) |
| 668 | @ VALUES('css',now(),'/* General settings for the entire page */ |
| 669 | @ html { |
| @@ -722,26 +721,16 @@ | |
| 721 | @ /* The main menu bar that appears at the top of the page beneath |
| 722 | @ ** the header */ |
| 723 | @ div.mainmenu { |
| 724 | @ text-align: center; |
| 725 | @ color: white; |
| 726 | @ border-top-left-radius: 5px; |
| 727 | @ border-top-right-radius: 5px; |
| 728 | @ vertical-align: middle; |
| 729 | @ padding-top: 8px; |
| 730 | @ padding-bottom: 8px; |
| 731 | @ background-color: #446979; |
| 732 | @ box-shadow: 0px 3px 4px #333333; |
| 733 | @ } |
| 734 | @ |
| 735 | @ /* The submenu bar that *sometimes* appears below the main menu */ |
| 736 | @ div.submenu { |
| @@ -750,12 +739,10 @@ | |
| 739 | @ text-align: right; |
| 740 | @ color: #000; |
| 741 | @ background-color: #fff; |
| 742 | @ height: 1.5em; |
| 743 | @ vertical-align:middle; |
| 744 | @ box-shadow: 0px 3px 4px #999; |
| 745 | @ } |
| 746 | @ div.mainmenu a, div.mainmenu a:visited { |
| 747 | @ padding: 3px 10px 3px 10px; |
| 748 | @ color: white; |
| @@ -766,43 +753,30 @@ | |
| 753 | @ padding: 2px 8px; |
| 754 | @ color: #000; |
| 755 | @ font-family: Arial; |
| 756 | @ text-decoration: none; |
| 757 | @ margin:auto; |
| 758 | @ border-radius: 5px; |
| 759 | @ background-color: #e0e0e0 ; |
| 760 | @ text-shadow: 0px -1px 0px #eee; |
| 761 | @ border: 1px solid #000; |
| 762 | @ } |
| 763 | @ |
| 764 | @ div.mainmenu a:hover { |
| 765 | @ color: #000; |
| 766 | @ background-color: white; |
| 767 | @ } |
| 768 | @ |
| 769 | @ div.submenu a:hover, div.sectionmenu>a.button:hover { |
| 770 | @ background-color: #c0c0c0 ; |
| 771 | @ } |
| 772 | @ |
| 773 | @ /* All page content from the bottom of the menu or submenu down to |
| 774 | @ ** the footer */ |
| 775 | @ div.content { |
| 776 | @ background-color: #fff; |
| 777 | @ box-shadow: 0px 3px 4px #999; |
| 778 | @ border-bottom-right-radius: 5px; |
| 779 | @ border-bottom-left-radius: 5px; |
| 780 | @ padding-bottom: 1em; |
| 781 | @ min-height:40%; |
| 782 | @ } |
| @@ -811,28 +785,17 @@ | |
| 785 | @ /* Some pages have section dividers */ |
| 786 | @ div.section { |
| 787 | @ margin-bottom: 0.5em; |
| 788 | @ margin-top: 1em; |
| 789 | @ margin-right: auto; |
| 790 | @ padding: 1px 1px 1px 1px; |
| 791 | @ font-size: 1.2em; |
| 792 | @ font-weight: bold; |
| 793 | @ text-align: center; |
| 794 | @ color: white; |
| 795 | @ border-radius: 5px; |
| 796 | @ background-color: #446979; |
| 797 | @ box-shadow: 0px 3px 4px #333333; |
| 798 | @ } |
| 799 | @ |
| 800 | @ /* The "Date" that occurs on the left hand side of timelines */ |
| 801 | @ div.divider { |
| @@ -968,11 +931,11 @@ | |
| 931 | } aBuiltinSkin[] = { |
| 932 | { "Default", 0 /* Filled in at runtime */ }, |
| 933 | { "Plain Gray, No Logo", zBuiltinSkin1 }, |
| 934 | { "Khaki, No Logo", zBuiltinSkin2 }, |
| 935 | { "Black & White, Menu on Left", zBuiltinSkin3 }, |
| 936 | { "Shadow boxes & Rounded Corners", zBuiltinSkin4 }, |
| 937 | }; |
| 938 | |
| 939 | /* |
| 940 | ** For a skin named zSkinName, compute the name of the CONFIG table |
| 941 | ** entry where that skin is stored and return it. |
| 942 |
+49
| --- src/stat.c | ||
| +++ src/stat.c | ||
| @@ -53,10 +53,13 @@ | ||
| 53 | 53 | |
| 54 | 54 | login_check_credentials(); |
| 55 | 55 | if( !g.perm.Read ){ login_needed(); return; } |
| 56 | 56 | brief = P("brief")!=0; |
| 57 | 57 | style_header("Repository Statistics"); |
| 58 | + if( g.perm.Admin ){ | |
| 59 | + style_submenu_element("URLs", "URLs and Checkouts", "urllist"); | |
| 60 | + } | |
| 58 | 61 | @ <table class="label-value"> |
| 59 | 62 | @ <tr><th>Repository Size:</th><td> |
| 60 | 63 | fsize = file_size(g.zRepositoryName); |
| 61 | 64 | bigSizeName(sizeof(zBuf), zBuf, fsize); |
| 62 | 65 | @ %s(zBuf) |
| @@ -131,8 +134,54 @@ | ||
| 131 | 134 | @ %d(db_int(0, "PRAGMA %s.freelist_count", zDb)) free pages, |
| 132 | 135 | @ %s(db_text(0, "PRAGMA %s.encoding", zDb)), |
| 133 | 136 | @ %s(db_text(0, "PRAGMA %s.journal_mode", zDb)) mode |
| 134 | 137 | @ </td></tr> |
| 135 | 138 | |
| 139 | + @ </table> | |
| 140 | + style_footer(); | |
| 141 | +} | |
| 142 | + | |
| 143 | +/* | |
| 144 | +** WEBPAGE: urllist | |
| 145 | +** | |
| 146 | +** Show ways in which this repository has been accessed | |
| 147 | +*/ | |
| 148 | +void urllist_page(void){ | |
| 149 | + Stmt q; | |
| 150 | + int cnt; | |
| 151 | + login_check_credentials(); | |
| 152 | + if( !g.perm.Admin ){ login_needed(); return; } | |
| 153 | + | |
| 154 | + style_header("URLs and Checkouts"); | |
| 155 | + style_submenu_element("Stat", "Repository Stats", "stat"); | |
| 156 | + @ <div class="section">URLs</div> | |
| 157 | + @ <table border="0" width='100%%'> | |
| 158 | + db_prepare(&q, "SELECT substr(name,9), datetime(mtime,'unixepoch')" | |
| 159 | + " FROM config WHERE name GLOB 'baseurl:*' ORDER BY 2"); | |
| 160 | + cnt = 0; | |
| 161 | + while( db_step(&q)==SQLITE_ROW ){ | |
| 162 | + @ <tr><td width='100%%'>%h(db_column_text(&q,0))</td> | |
| 163 | + @ <td><nobr>%h(db_column_text(&q,1))</nobr></td></tr> | |
| 164 | + cnt++; | |
| 165 | + } | |
| 166 | + db_finalize(&q); | |
| 167 | + if( cnt==0 ){ | |
| 168 | + @ <tr><td>(none)</td> | |
| 169 | + } | |
| 170 | + @ </table> | |
| 171 | + @ <div class="section">Checkouts</div> | |
| 172 | + @ <table border="0" width='100%%'> | |
| 173 | + db_prepare(&q, "SELECT substr(name,7), datetime(mtime,'unixepoch')" | |
| 174 | + " FROM config WHERE name GLOB 'ckout:*' ORDER BY 2"); | |
| 175 | + cnt = 0; | |
| 176 | + while( db_step(&q)==SQLITE_ROW ){ | |
| 177 | + @ <tr><td width='100%%'>%h(db_column_text(&q,0))</td> | |
| 178 | + @ <td><nobr>%h(db_column_text(&q,1))</nobr></td></tr> | |
| 179 | + cnt++; | |
| 180 | + } | |
| 181 | + db_finalize(&q); | |
| 182 | + if( cnt==0 ){ | |
| 183 | + @ <tr><td>(none)</td> | |
| 184 | + } | |
| 136 | 185 | @ </table> |
| 137 | 186 | style_footer(); |
| 138 | 187 | } |
| 139 | 188 |
| --- src/stat.c | |
| +++ src/stat.c | |
| @@ -53,10 +53,13 @@ | |
| 53 | |
| 54 | login_check_credentials(); |
| 55 | if( !g.perm.Read ){ login_needed(); return; } |
| 56 | brief = P("brief")!=0; |
| 57 | style_header("Repository Statistics"); |
| 58 | @ <table class="label-value"> |
| 59 | @ <tr><th>Repository Size:</th><td> |
| 60 | fsize = file_size(g.zRepositoryName); |
| 61 | bigSizeName(sizeof(zBuf), zBuf, fsize); |
| 62 | @ %s(zBuf) |
| @@ -131,8 +134,54 @@ | |
| 131 | @ %d(db_int(0, "PRAGMA %s.freelist_count", zDb)) free pages, |
| 132 | @ %s(db_text(0, "PRAGMA %s.encoding", zDb)), |
| 133 | @ %s(db_text(0, "PRAGMA %s.journal_mode", zDb)) mode |
| 134 | @ </td></tr> |
| 135 | |
| 136 | @ </table> |
| 137 | style_footer(); |
| 138 | } |
| 139 |
| --- src/stat.c | |
| +++ src/stat.c | |
| @@ -53,10 +53,13 @@ | |
| 53 | |
| 54 | login_check_credentials(); |
| 55 | if( !g.perm.Read ){ login_needed(); return; } |
| 56 | brief = P("brief")!=0; |
| 57 | style_header("Repository Statistics"); |
| 58 | if( g.perm.Admin ){ |
| 59 | style_submenu_element("URLs", "URLs and Checkouts", "urllist"); |
| 60 | } |
| 61 | @ <table class="label-value"> |
| 62 | @ <tr><th>Repository Size:</th><td> |
| 63 | fsize = file_size(g.zRepositoryName); |
| 64 | bigSizeName(sizeof(zBuf), zBuf, fsize); |
| 65 | @ %s(zBuf) |
| @@ -131,8 +134,54 @@ | |
| 134 | @ %d(db_int(0, "PRAGMA %s.freelist_count", zDb)) free pages, |
| 135 | @ %s(db_text(0, "PRAGMA %s.encoding", zDb)), |
| 136 | @ %s(db_text(0, "PRAGMA %s.journal_mode", zDb)) mode |
| 137 | @ </td></tr> |
| 138 | |
| 139 | @ </table> |
| 140 | style_footer(); |
| 141 | } |
| 142 | |
| 143 | /* |
| 144 | ** WEBPAGE: urllist |
| 145 | ** |
| 146 | ** Show ways in which this repository has been accessed |
| 147 | */ |
| 148 | void urllist_page(void){ |
| 149 | Stmt q; |
| 150 | int cnt; |
| 151 | login_check_credentials(); |
| 152 | if( !g.perm.Admin ){ login_needed(); return; } |
| 153 | |
| 154 | style_header("URLs and Checkouts"); |
| 155 | style_submenu_element("Stat", "Repository Stats", "stat"); |
| 156 | @ <div class="section">URLs</div> |
| 157 | @ <table border="0" width='100%%'> |
| 158 | db_prepare(&q, "SELECT substr(name,9), datetime(mtime,'unixepoch')" |
| 159 | " FROM config WHERE name GLOB 'baseurl:*' ORDER BY 2"); |
| 160 | cnt = 0; |
| 161 | while( db_step(&q)==SQLITE_ROW ){ |
| 162 | @ <tr><td width='100%%'>%h(db_column_text(&q,0))</td> |
| 163 | @ <td><nobr>%h(db_column_text(&q,1))</nobr></td></tr> |
| 164 | cnt++; |
| 165 | } |
| 166 | db_finalize(&q); |
| 167 | if( cnt==0 ){ |
| 168 | @ <tr><td>(none)</td> |
| 169 | } |
| 170 | @ </table> |
| 171 | @ <div class="section">Checkouts</div> |
| 172 | @ <table border="0" width='100%%'> |
| 173 | db_prepare(&q, "SELECT substr(name,7), datetime(mtime,'unixepoch')" |
| 174 | " FROM config WHERE name GLOB 'ckout:*' ORDER BY 2"); |
| 175 | cnt = 0; |
| 176 | while( db_step(&q)==SQLITE_ROW ){ |
| 177 | @ <tr><td width='100%%'>%h(db_column_text(&q,0))</td> |
| 178 | @ <td><nobr>%h(db_column_text(&q,1))</nobr></td></tr> |
| 179 | cnt++; |
| 180 | } |
| 181 | db_finalize(&q); |
| 182 | if( cnt==0 ){ |
| 183 | @ <tr><td>(none)</td> |
| 184 | } |
| 185 | @ </table> |
| 186 | style_footer(); |
| 187 | } |
| 188 |
+10
-7
| --- src/style.c | ||
| +++ src/style.c | ||
| @@ -445,10 +445,12 @@ | ||
| 445 | 445 | @ font-size: 0.9em; |
| 446 | 446 | @ font-weight: bold; |
| 447 | 447 | @ text-align: center; |
| 448 | 448 | @ letter-spacing: 1px; |
| 449 | 449 | @ background-color: #558195; |
| 450 | +@ border-top-left-radius: 8px; | |
| 451 | +@ border-top-right-radius: 8px; | |
| 450 | 452 | @ color: white; |
| 451 | 453 | @ } |
| 452 | 454 | @ |
| 453 | 455 | @ /* The submenu bar that *sometimes* appears below the main menu */ |
| 454 | 456 | @ div.submenu, div.sectionmenu { |
| @@ -470,11 +472,13 @@ | ||
| 470 | 472 | @ } |
| 471 | 473 | @ |
| 472 | 474 | @ /* All page content from the bottom of the menu or submenu down to |
| 473 | 475 | @ ** the footer */ |
| 474 | 476 | @ div.content { |
| 475 | -@ padding: 0ex 1ex 0ex 2ex; | |
| 477 | +@ padding: 0ex 1ex 1ex 1ex; | |
| 478 | +@ border: solid #aaa; | |
| 479 | +@ border-width: 1px; | |
| 476 | 480 | @ } |
| 477 | 481 | @ |
| 478 | 482 | @ /* Some pages have section dividers */ |
| 479 | 483 | @ div.section { |
| 480 | 484 | @ margin-bottom: 0px; |
| @@ -501,14 +505,15 @@ | ||
| 501 | 505 | @ |
| 502 | 506 | @ /* The footer at the very bottom of the page */ |
| 503 | 507 | @ div.footer { |
| 504 | 508 | @ clear: both; |
| 505 | 509 | @ font-size: 0.8em; |
| 506 | -@ margin-top: 12px; | |
| 507 | 510 | @ padding: 5px 10px 5px 10px; |
| 508 | 511 | @ text-align: right; |
| 509 | 512 | @ background-color: #558195; |
| 513 | +@ border-bottom-left-radius: 8px; | |
| 514 | +@ border-bottom-right-radius: 8px; | |
| 510 | 515 | @ color: white; |
| 511 | 516 | @ } |
| 512 | 517 | @ |
| 513 | 518 | @ /* Hyperlink colors in the footer */ |
| 514 | 519 | @ div.footer a { color: white; } |
| @@ -548,11 +553,11 @@ | ||
| 548 | 553 | "The nomenclature sidebox for branches,..", |
| 549 | 554 | @ float: right; |
| 550 | 555 | @ background-color: white; |
| 551 | 556 | @ border-width: medium; |
| 552 | 557 | @ border-style: double; |
| 553 | - @ margin: 10; | |
| 558 | + @ margin: 10px; | |
| 554 | 559 | }, |
| 555 | 560 | { "div.sideboxTitle", |
| 556 | 561 | "The nomenclature title in sideboxes for branches,..", |
| 557 | 562 | @ display: inline; |
| 558 | 563 | @ font-weight: bold; |
| @@ -571,18 +576,16 @@ | ||
| 571 | 576 | @ font-style: italic; |
| 572 | 577 | @ font-size: small; |
| 573 | 578 | }, |
| 574 | 579 | { "table.timelineTable", |
| 575 | 580 | "the format for the timeline data table", |
| 576 | - @ cellspacing: 0; | |
| 577 | 581 | @ border: 0; |
| 578 | - @ cellpadding: 0 | |
| 579 | 582 | }, |
| 580 | 583 | { "td.timelineTableCell", |
| 581 | 584 | "the format for the timeline data cells", |
| 582 | - @ valign: top; | |
| 583 | - @ align: left; | |
| 585 | + @ vertical-align: top; | |
| 586 | + @ text-align: left; | |
| 584 | 587 | }, |
| 585 | 588 | { "span.timelineLeaf", |
| 586 | 589 | "the format for the timeline leaf marks", |
| 587 | 590 | @ font-weight: bold; |
| 588 | 591 | }, |
| 589 | 592 |
| --- src/style.c | |
| +++ src/style.c | |
| @@ -445,10 +445,12 @@ | |
| 445 | @ font-size: 0.9em; |
| 446 | @ font-weight: bold; |
| 447 | @ text-align: center; |
| 448 | @ letter-spacing: 1px; |
| 449 | @ background-color: #558195; |
| 450 | @ color: white; |
| 451 | @ } |
| 452 | @ |
| 453 | @ /* The submenu bar that *sometimes* appears below the main menu */ |
| 454 | @ div.submenu, div.sectionmenu { |
| @@ -470,11 +472,13 @@ | |
| 470 | @ } |
| 471 | @ |
| 472 | @ /* All page content from the bottom of the menu or submenu down to |
| 473 | @ ** the footer */ |
| 474 | @ div.content { |
| 475 | @ padding: 0ex 1ex 0ex 2ex; |
| 476 | @ } |
| 477 | @ |
| 478 | @ /* Some pages have section dividers */ |
| 479 | @ div.section { |
| 480 | @ margin-bottom: 0px; |
| @@ -501,14 +505,15 @@ | |
| 501 | @ |
| 502 | @ /* The footer at the very bottom of the page */ |
| 503 | @ div.footer { |
| 504 | @ clear: both; |
| 505 | @ font-size: 0.8em; |
| 506 | @ margin-top: 12px; |
| 507 | @ padding: 5px 10px 5px 10px; |
| 508 | @ text-align: right; |
| 509 | @ background-color: #558195; |
| 510 | @ color: white; |
| 511 | @ } |
| 512 | @ |
| 513 | @ /* Hyperlink colors in the footer */ |
| 514 | @ div.footer a { color: white; } |
| @@ -548,11 +553,11 @@ | |
| 548 | "The nomenclature sidebox for branches,..", |
| 549 | @ float: right; |
| 550 | @ background-color: white; |
| 551 | @ border-width: medium; |
| 552 | @ border-style: double; |
| 553 | @ margin: 10; |
| 554 | }, |
| 555 | { "div.sideboxTitle", |
| 556 | "The nomenclature title in sideboxes for branches,..", |
| 557 | @ display: inline; |
| 558 | @ font-weight: bold; |
| @@ -571,18 +576,16 @@ | |
| 571 | @ font-style: italic; |
| 572 | @ font-size: small; |
| 573 | }, |
| 574 | { "table.timelineTable", |
| 575 | "the format for the timeline data table", |
| 576 | @ cellspacing: 0; |
| 577 | @ border: 0; |
| 578 | @ cellpadding: 0 |
| 579 | }, |
| 580 | { "td.timelineTableCell", |
| 581 | "the format for the timeline data cells", |
| 582 | @ valign: top; |
| 583 | @ align: left; |
| 584 | }, |
| 585 | { "span.timelineLeaf", |
| 586 | "the format for the timeline leaf marks", |
| 587 | @ font-weight: bold; |
| 588 | }, |
| 589 |
| --- src/style.c | |
| +++ src/style.c | |
| @@ -445,10 +445,12 @@ | |
| 445 | @ font-size: 0.9em; |
| 446 | @ font-weight: bold; |
| 447 | @ text-align: center; |
| 448 | @ letter-spacing: 1px; |
| 449 | @ background-color: #558195; |
| 450 | @ border-top-left-radius: 8px; |
| 451 | @ border-top-right-radius: 8px; |
| 452 | @ color: white; |
| 453 | @ } |
| 454 | @ |
| 455 | @ /* The submenu bar that *sometimes* appears below the main menu */ |
| 456 | @ div.submenu, div.sectionmenu { |
| @@ -470,11 +472,13 @@ | |
| 472 | @ } |
| 473 | @ |
| 474 | @ /* All page content from the bottom of the menu or submenu down to |
| 475 | @ ** the footer */ |
| 476 | @ div.content { |
| 477 | @ padding: 0ex 1ex 1ex 1ex; |
| 478 | @ border: solid #aaa; |
| 479 | @ border-width: 1px; |
| 480 | @ } |
| 481 | @ |
| 482 | @ /* Some pages have section dividers */ |
| 483 | @ div.section { |
| 484 | @ margin-bottom: 0px; |
| @@ -501,14 +505,15 @@ | |
| 505 | @ |
| 506 | @ /* The footer at the very bottom of the page */ |
| 507 | @ div.footer { |
| 508 | @ clear: both; |
| 509 | @ font-size: 0.8em; |
| 510 | @ padding: 5px 10px 5px 10px; |
| 511 | @ text-align: right; |
| 512 | @ background-color: #558195; |
| 513 | @ border-bottom-left-radius: 8px; |
| 514 | @ border-bottom-right-radius: 8px; |
| 515 | @ color: white; |
| 516 | @ } |
| 517 | @ |
| 518 | @ /* Hyperlink colors in the footer */ |
| 519 | @ div.footer a { color: white; } |
| @@ -548,11 +553,11 @@ | |
| 553 | "The nomenclature sidebox for branches,..", |
| 554 | @ float: right; |
| 555 | @ background-color: white; |
| 556 | @ border-width: medium; |
| 557 | @ border-style: double; |
| 558 | @ margin: 10px; |
| 559 | }, |
| 560 | { "div.sideboxTitle", |
| 561 | "The nomenclature title in sideboxes for branches,..", |
| 562 | @ display: inline; |
| 563 | @ font-weight: bold; |
| @@ -571,18 +576,16 @@ | |
| 576 | @ font-style: italic; |
| 577 | @ font-size: small; |
| 578 | }, |
| 579 | { "table.timelineTable", |
| 580 | "the format for the timeline data table", |
| 581 | @ border: 0; |
| 582 | }, |
| 583 | { "td.timelineTableCell", |
| 584 | "the format for the timeline data cells", |
| 585 | @ vertical-align: top; |
| 586 | @ text-align: left; |
| 587 | }, |
| 588 | { "span.timelineLeaf", |
| 589 | "the format for the timeline leaf marks", |
| 590 | @ font-weight: bold; |
| 591 | }, |
| 592 |
+8
-2
| --- src/wikiformat.c | ||
| +++ src/wikiformat.c | ||
| @@ -1049,11 +1049,12 @@ | ||
| 1049 | 1049 | */ |
| 1050 | 1050 | static void openHyperlink( |
| 1051 | 1051 | Renderer *p, /* Rendering context */ |
| 1052 | 1052 | const char *zTarget, /* Hyperlink traget; text within [...] */ |
| 1053 | 1053 | char *zClose, /* Write hyperlink closing text here */ |
| 1054 | - int nClose /* Bytes available in zClose[] */ | |
| 1054 | + int nClose, /* Bytes available in zClose[] */ | |
| 1055 | + const char *zOrig /* Complete document text */ | |
| 1055 | 1056 | ){ |
| 1056 | 1057 | const char *zTerm = "</a>"; |
| 1057 | 1058 | assert( nClose>=20 ); |
| 1058 | 1059 | |
| 1059 | 1060 | if( strncmp(zTarget, "http:", 5)==0 |
| @@ -1111,10 +1112,14 @@ | ||
| 1111 | 1112 | && wiki_name_is_wellformed((const unsigned char*)zTarget) ){ |
| 1112 | 1113 | zTarget += 5; |
| 1113 | 1114 | blob_appendf(p->pOut, "<a href=\"%R/wiki?name=%T\">", zTarget); |
| 1114 | 1115 | }else if( wiki_name_is_wellformed((const unsigned char *)zTarget) ){ |
| 1115 | 1116 | blob_appendf(p->pOut, "<a href=\"%R/wiki?name=%T\">", zTarget); |
| 1117 | + }else if( zTarget>=&zOrig[2] && !fossil_isspace(zTarget[-2]) ){ | |
| 1118 | + /* Probably an array subscript in code */ | |
| 1119 | + blob_appendf(p->pOut, "["); | |
| 1120 | + zTerm = "]"; | |
| 1116 | 1121 | }else{ |
| 1117 | 1122 | blob_appendf(p->pOut, "<span class=\"brokenlink\">[%h]</span>", zTarget); |
| 1118 | 1123 | zTerm = ""; |
| 1119 | 1124 | } |
| 1120 | 1125 | assert( strlen(zTerm)<nClose ); |
| @@ -1154,10 +1159,11 @@ | ||
| 1154 | 1159 | int tokenType; |
| 1155 | 1160 | ParsedMarkup markup; |
| 1156 | 1161 | int n; |
| 1157 | 1162 | int inlineOnly = (p->state & INLINE_MARKUP_ONLY)!=0; |
| 1158 | 1163 | int wikiUseHtml = (p->state & WIKI_USE_HTML)!=0; |
| 1164 | + char *zOrig = z; | |
| 1159 | 1165 | |
| 1160 | 1166 | /* Make sure the attribute constants and names still align |
| 1161 | 1167 | ** following changes in the attribute list. */ |
| 1162 | 1168 | assert( fossil_strcmp(aAttribute[ATTR_WIDTH].zName, "width")==0 ); |
| 1163 | 1169 | |
| @@ -1289,11 +1295,11 @@ | ||
| 1289 | 1295 | if( zDisplay==0 ){ |
| 1290 | 1296 | zDisplay = zTarget; |
| 1291 | 1297 | }else{ |
| 1292 | 1298 | while( fossil_isspace(*zDisplay) ) zDisplay++; |
| 1293 | 1299 | } |
| 1294 | - openHyperlink(p, zTarget, zClose, sizeof(zClose)); | |
| 1300 | + openHyperlink(p, zTarget, zClose, sizeof(zClose), zOrig); | |
| 1295 | 1301 | savedState = p->state; |
| 1296 | 1302 | p->state &= ~ALLOW_WIKI; |
| 1297 | 1303 | p->state |= FONT_MARKUP_ONLY; |
| 1298 | 1304 | wiki_render(p, zDisplay); |
| 1299 | 1305 | p->state = savedState; |
| 1300 | 1306 |
| --- src/wikiformat.c | |
| +++ src/wikiformat.c | |
| @@ -1049,11 +1049,12 @@ | |
| 1049 | */ |
| 1050 | static void openHyperlink( |
| 1051 | Renderer *p, /* Rendering context */ |
| 1052 | const char *zTarget, /* Hyperlink traget; text within [...] */ |
| 1053 | char *zClose, /* Write hyperlink closing text here */ |
| 1054 | int nClose /* Bytes available in zClose[] */ |
| 1055 | ){ |
| 1056 | const char *zTerm = "</a>"; |
| 1057 | assert( nClose>=20 ); |
| 1058 | |
| 1059 | if( strncmp(zTarget, "http:", 5)==0 |
| @@ -1111,10 +1112,14 @@ | |
| 1111 | && wiki_name_is_wellformed((const unsigned char*)zTarget) ){ |
| 1112 | zTarget += 5; |
| 1113 | blob_appendf(p->pOut, "<a href=\"%R/wiki?name=%T\">", zTarget); |
| 1114 | }else if( wiki_name_is_wellformed((const unsigned char *)zTarget) ){ |
| 1115 | blob_appendf(p->pOut, "<a href=\"%R/wiki?name=%T\">", zTarget); |
| 1116 | }else{ |
| 1117 | blob_appendf(p->pOut, "<span class=\"brokenlink\">[%h]</span>", zTarget); |
| 1118 | zTerm = ""; |
| 1119 | } |
| 1120 | assert( strlen(zTerm)<nClose ); |
| @@ -1154,10 +1159,11 @@ | |
| 1154 | int tokenType; |
| 1155 | ParsedMarkup markup; |
| 1156 | int n; |
| 1157 | int inlineOnly = (p->state & INLINE_MARKUP_ONLY)!=0; |
| 1158 | int wikiUseHtml = (p->state & WIKI_USE_HTML)!=0; |
| 1159 | |
| 1160 | /* Make sure the attribute constants and names still align |
| 1161 | ** following changes in the attribute list. */ |
| 1162 | assert( fossil_strcmp(aAttribute[ATTR_WIDTH].zName, "width")==0 ); |
| 1163 | |
| @@ -1289,11 +1295,11 @@ | |
| 1289 | if( zDisplay==0 ){ |
| 1290 | zDisplay = zTarget; |
| 1291 | }else{ |
| 1292 | while( fossil_isspace(*zDisplay) ) zDisplay++; |
| 1293 | } |
| 1294 | openHyperlink(p, zTarget, zClose, sizeof(zClose)); |
| 1295 | savedState = p->state; |
| 1296 | p->state &= ~ALLOW_WIKI; |
| 1297 | p->state |= FONT_MARKUP_ONLY; |
| 1298 | wiki_render(p, zDisplay); |
| 1299 | p->state = savedState; |
| 1300 |
| --- src/wikiformat.c | |
| +++ src/wikiformat.c | |
| @@ -1049,11 +1049,12 @@ | |
| 1049 | */ |
| 1050 | static void openHyperlink( |
| 1051 | Renderer *p, /* Rendering context */ |
| 1052 | const char *zTarget, /* Hyperlink traget; text within [...] */ |
| 1053 | char *zClose, /* Write hyperlink closing text here */ |
| 1054 | int nClose, /* Bytes available in zClose[] */ |
| 1055 | const char *zOrig /* Complete document text */ |
| 1056 | ){ |
| 1057 | const char *zTerm = "</a>"; |
| 1058 | assert( nClose>=20 ); |
| 1059 | |
| 1060 | if( strncmp(zTarget, "http:", 5)==0 |
| @@ -1111,10 +1112,14 @@ | |
| 1112 | && wiki_name_is_wellformed((const unsigned char*)zTarget) ){ |
| 1113 | zTarget += 5; |
| 1114 | blob_appendf(p->pOut, "<a href=\"%R/wiki?name=%T\">", zTarget); |
| 1115 | }else if( wiki_name_is_wellformed((const unsigned char *)zTarget) ){ |
| 1116 | blob_appendf(p->pOut, "<a href=\"%R/wiki?name=%T\">", zTarget); |
| 1117 | }else if( zTarget>=&zOrig[2] && !fossil_isspace(zTarget[-2]) ){ |
| 1118 | /* Probably an array subscript in code */ |
| 1119 | blob_appendf(p->pOut, "["); |
| 1120 | zTerm = "]"; |
| 1121 | }else{ |
| 1122 | blob_appendf(p->pOut, "<span class=\"brokenlink\">[%h]</span>", zTarget); |
| 1123 | zTerm = ""; |
| 1124 | } |
| 1125 | assert( strlen(zTerm)<nClose ); |
| @@ -1154,10 +1159,11 @@ | |
| 1159 | int tokenType; |
| 1160 | ParsedMarkup markup; |
| 1161 | int n; |
| 1162 | int inlineOnly = (p->state & INLINE_MARKUP_ONLY)!=0; |
| 1163 | int wikiUseHtml = (p->state & WIKI_USE_HTML)!=0; |
| 1164 | char *zOrig = z; |
| 1165 | |
| 1166 | /* Make sure the attribute constants and names still align |
| 1167 | ** following changes in the attribute list. */ |
| 1168 | assert( fossil_strcmp(aAttribute[ATTR_WIDTH].zName, "width")==0 ); |
| 1169 | |
| @@ -1289,11 +1295,11 @@ | |
| 1295 | if( zDisplay==0 ){ |
| 1296 | zDisplay = zTarget; |
| 1297 | }else{ |
| 1298 | while( fossil_isspace(*zDisplay) ) zDisplay++; |
| 1299 | } |
| 1300 | openHyperlink(p, zTarget, zClose, sizeof(zClose), zOrig); |
| 1301 | savedState = p->state; |
| 1302 | p->state &= ~ALLOW_WIKI; |
| 1303 | p->state |= FONT_MARKUP_ONLY; |
| 1304 | wiki_render(p, zDisplay); |
| 1305 | p->state = savedState; |
| 1306 |
+1
| --- www/index.wiki | ||
| +++ www/index.wiki | ||
| @@ -23,10 +23,11 @@ | ||
| 23 | 23 | <li> [/timeline | Recent changes] |
| 24 | 24 | <li> [./faq.wiki | FAQ] |
| 25 | 25 | <li> [./contribute.wiki | Contributing] |
| 26 | 26 | <li> [./changes.wiki | Change Log] |
| 27 | 27 | <li> [./permutedindex.wiki | Doc Index] |
| 28 | +<li> [http://www.fossil-scm.org/schimpf-book/home | Jim Schimpf's book] | |
| 28 | 29 | <li> Mailing list |
| 29 | 30 | <ul> |
| 30 | 31 | <li> [http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users | sign-up] |
| 31 | 32 | <li> [http://www.mail-archive.com/[email protected] | archives] |
| 32 | 33 | <ul> |
| 33 | 34 |
| --- www/index.wiki | |
| +++ www/index.wiki | |
| @@ -23,10 +23,11 @@ | |
| 23 | <li> [/timeline | Recent changes] |
| 24 | <li> [./faq.wiki | FAQ] |
| 25 | <li> [./contribute.wiki | Contributing] |
| 26 | <li> [./changes.wiki | Change Log] |
| 27 | <li> [./permutedindex.wiki | Doc Index] |
| 28 | <li> Mailing list |
| 29 | <ul> |
| 30 | <li> [http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users | sign-up] |
| 31 | <li> [http://www.mail-archive.com/[email protected] | archives] |
| 32 | <ul> |
| 33 |
| --- www/index.wiki | |
| +++ www/index.wiki | |
| @@ -23,10 +23,11 @@ | |
| 23 | <li> [/timeline | Recent changes] |
| 24 | <li> [./faq.wiki | FAQ] |
| 25 | <li> [./contribute.wiki | Contributing] |
| 26 | <li> [./changes.wiki | Change Log] |
| 27 | <li> [./permutedindex.wiki | Doc Index] |
| 28 | <li> [http://www.fossil-scm.org/schimpf-book/home | Jim Schimpf's book] |
| 29 | <li> Mailing list |
| 30 | <ul> |
| 31 | <li> [http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users | sign-up] |
| 32 | <li> [http://www.mail-archive.com/[email protected] | archives] |
| 33 | <ul> |
| 34 |