Fossil SCM

Add TH1 variables for style-related URLs (/style.css, /logo, /background) that contain the resources' mtimes. Maintains aggressive caching without requiring users to do a hard refresh or clear their cache when the resource is changed.

joel 2014-01-01 00:48 trunk
Commit daff9d20621480a0474971f94d6d6946ecd5a18d
3 files changed +4 -2 +8 -8 +37 -2
+4 -2
--- src/setup.c
+++ src/setup.c
@@ -1598,13 +1598,15 @@
15981598
15991599
/*
16001600
** WEBPAGE: setup_logo
16011601
*/
16021602
void setup_logo(void){
1603
+ const char *zLogoMtime = db_get_mtime("logo-image", 0, 0);
16031604
const char *zLogoMime = db_get("logo-mimetype","image/gif");
16041605
const char *aLogoImg = P("logoim");
16051606
int szLogoImg = atoi(PD("logoim:bytes","0"));
1607
+ const char *zBgMtime = db_get_mtime("background-image", 0, 0);
16061608
const char *zBgMime = db_get("background-mimetype","image/gif");
16071609
const char *aBgImg = P("bgim");
16081610
int szBgImg = atoi(PD("bgim:bytes","0"));
16091611
if( szLogoImg>0 ){
16101612
zLogoMime = PD("logoim:mimetype","image/gif");
@@ -1668,11 +1670,11 @@
16681670
cgi_redirect("setup_logo");
16691671
}
16701672
style_header("Edit Project Logo And Background");
16711673
@ <p>The current project logo has a MIME-Type of <b>%h(zLogoMime)</b>
16721674
@ and looks like this:</p>
1673
- @ <blockquote><p><img src="%s(g.zTop)/logo" alt="logo" border="1" />
1675
+ @ <blockquote><p><img src="%s(g.zTop)/logo/%z(zLogoMtime)" alt="logo" border="1" />
16741676
@ </p></blockquote>
16751677
@
16761678
@ <form action="%s(g.zTop)/setup_logo" method="post"
16771679
@ enctype="multipart/form-data"><div>
16781680
@ <p>The logo is accessible to all users at this URL:
@@ -1690,11 +1692,11 @@
16901692
@ </div></form>
16911693
@ <hr />
16921694
@
16931695
@ <p>The current background image has a MIME-Type of <b>%h(zBgMime)</b>
16941696
@ and looks like this:</p>
1695
- @ <blockquote><p><img src="%s(g.zTop)/background" alt="background" border=1 />
1697
+ @ <blockquote><p><img src="%s(g.zTop)/background/%z(zBgMtime)" alt="background" border=1 />
16961698
@ </p></blockquote>
16971699
@
16981700
@ <form action="%s(g.zTop)/setup_logo" method="post"
16991701
@ enctype="multipart/form-data"><div>
17001702
@ <p>The background image is accessible to all users at this URL:
17011703
--- src/setup.c
+++ src/setup.c
@@ -1598,13 +1598,15 @@
1598
1599 /*
1600 ** WEBPAGE: setup_logo
1601 */
1602 void setup_logo(void){
 
1603 const char *zLogoMime = db_get("logo-mimetype","image/gif");
1604 const char *aLogoImg = P("logoim");
1605 int szLogoImg = atoi(PD("logoim:bytes","0"));
 
1606 const char *zBgMime = db_get("background-mimetype","image/gif");
1607 const char *aBgImg = P("bgim");
1608 int szBgImg = atoi(PD("bgim:bytes","0"));
1609 if( szLogoImg>0 ){
1610 zLogoMime = PD("logoim:mimetype","image/gif");
@@ -1668,11 +1670,11 @@
1668 cgi_redirect("setup_logo");
1669 }
1670 style_header("Edit Project Logo And Background");
1671 @ <p>The current project logo has a MIME-Type of <b>%h(zLogoMime)</b>
1672 @ and looks like this:</p>
1673 @ <blockquote><p><img src="%s(g.zTop)/logo" alt="logo" border="1" />
1674 @ </p></blockquote>
1675 @
1676 @ <form action="%s(g.zTop)/setup_logo" method="post"
1677 @ enctype="multipart/form-data"><div>
1678 @ <p>The logo is accessible to all users at this URL:
@@ -1690,11 +1692,11 @@
1690 @ </div></form>
1691 @ <hr />
1692 @
1693 @ <p>The current background image has a MIME-Type of <b>%h(zBgMime)</b>
1694 @ and looks like this:</p>
1695 @ <blockquote><p><img src="%s(g.zTop)/background" alt="background" border=1 />
1696 @ </p></blockquote>
1697 @
1698 @ <form action="%s(g.zTop)/setup_logo" method="post"
1699 @ enctype="multipart/form-data"><div>
1700 @ <p>The background image is accessible to all users at this URL:
1701
--- src/setup.c
+++ src/setup.c
@@ -1598,13 +1598,15 @@
1598
1599 /*
1600 ** WEBPAGE: setup_logo
1601 */
1602 void setup_logo(void){
1603 const char *zLogoMtime = db_get_mtime("logo-image", 0, 0);
1604 const char *zLogoMime = db_get("logo-mimetype","image/gif");
1605 const char *aLogoImg = P("logoim");
1606 int szLogoImg = atoi(PD("logoim:bytes","0"));
1607 const char *zBgMtime = db_get_mtime("background-image", 0, 0);
1608 const char *zBgMime = db_get("background-mimetype","image/gif");
1609 const char *aBgImg = P("bgim");
1610 int szBgImg = atoi(PD("bgim:bytes","0"));
1611 if( szLogoImg>0 ){
1612 zLogoMime = PD("logoim:mimetype","image/gif");
@@ -1668,11 +1670,11 @@
1670 cgi_redirect("setup_logo");
1671 }
1672 style_header("Edit Project Logo And Background");
1673 @ <p>The current project logo has a MIME-Type of <b>%h(zLogoMime)</b>
1674 @ and looks like this:</p>
1675 @ <blockquote><p><img src="%s(g.zTop)/logo/%z(zLogoMtime)" alt="logo" border="1" />
1676 @ </p></blockquote>
1677 @
1678 @ <form action="%s(g.zTop)/setup_logo" method="post"
1679 @ enctype="multipart/form-data"><div>
1680 @ <p>The logo is accessible to all users at this URL:
@@ -1690,11 +1692,11 @@
1692 @ </div></form>
1693 @ <hr />
1694 @
1695 @ <p>The current background image has a MIME-Type of <b>%h(zBgMime)</b>
1696 @ and looks like this:</p>
1697 @ <blockquote><p><img src="%s(g.zTop)/background/%z(zBgMtime)" alt="background" border=1 />
1698 @ </p></blockquote>
1699 @
1700 @ <form action="%s(g.zTop)/setup_logo" method="post"
1701 @ enctype="multipart/form-data"><div>
1702 @ <p>The background image is accessible to all users at this URL:
1703
+8 -8
--- src/skins.c
+++ src/skins.c
@@ -171,11 +171,11 @@
171171
@ <head>
172172
@ <base href="$baseurl/$current_page" />
173173
@ <title>$<project_name>: $<title></title>
174174
@ <link rel="alternate" type="application/rss+xml" title="RSS Feed"
175175
@ href="$home/timeline.rss">
176
-@ <link rel="stylesheet" href="$home/style.css?blackwhite" type="text/css"
176
+@ <link rel="stylesheet" href="$stylesheet_url" type="text/css"
177177
@ media="screen">
178178
@ </head>
179179
@ <body>
180180
@ <div class="header">
181181
@ <div class="title"><small>$<project_name></small><br />$<title></div>
@@ -379,11 +379,11 @@
379379
@ <head>
380380
@ <base href="$baseurl/$current_page" />
381381
@ <title>$<project_name>: $<title></title>
382382
@ <link rel="alternate" type="application/rss+xml" title="RSS Feed"
383383
@ href="$home/timeline.rss">
384
-@ <link rel="stylesheet" href="$home/style.css?tan" type="text/css"
384
+@ <link rel="stylesheet" href="$stylesheet_url" type="text/css"
385385
@ media="screen">
386386
@ </head>
387387
@ <body>
388388
@ <div class="header">
389389
@ <div class="title">$<title></div>
@@ -620,17 +620,17 @@
620620
@ <head>
621621
@ <base href="$baseurl/$current_page" />
622622
@ <title>$<project_name>: $<title></title>
623623
@ <link rel="alternate" type="application/rss+xml" title="RSS Feed"
624624
@ href="$home/timeline.rss">
625
-@ <link rel="stylesheet" href="$home/style.css?black2" type="text/css"
625
+@ <link rel="stylesheet" href="$stylesheet_url" type="text/css"
626626
@ media="screen">
627627
@ </head>
628628
@ <body>
629629
@ <div class="header">
630630
@ <div class="logo">
631
-@ <img src="$home/logo" alt="logo">
631
+@ <img src="$logo_image_url" alt="logo">
632632
@ <br />$<project_name>
633633
@ </div>
634634
@ <div class="title">$<title></div>
635635
@ <div class="status"><th1>
636636
@ if {[info exists login]} {
@@ -881,17 +881,17 @@
881881
@ <head>
882882
@ <base href="$baseurl/$current_page" />
883883
@ <title>$<project_name>: $<title></title>
884884
@ <link rel="alternate" type="application/rss+xml" title="RSS Feed"
885885
@ href="$home/timeline.rss">
886
-@ <link rel="stylesheet" href="$home/style.css?black2" type="text/css"
886
+@ <link rel="stylesheet" href="$stylesheet_url" type="text/css"
887887
@ media="screen">
888888
@ </head>
889889
@ <body>
890890
@ <div class="header">
891891
@ <div class="logo">
892
-@ <img src="$home/logo" alt="logo">
892
+@ <img src="$logo_image_url" alt="logo">
893893
@ <br />$<project_name>
894894
@ </div>
895895
@ <div class="title">$<title></div>
896896
@ <div class="status"><th1>
897897
@ if {[info exists login]} {
@@ -1109,11 +1109,11 @@
11091109
@ <head>
11101110
@ <base href="$baseurl/$current_page" />
11111111
@ <title>$<project_name>: $<title></title>
11121112
@ <link rel="alternate" type="application/rss+xml" title="RSS Feed"
11131113
@ href="$home/timeline.rss" />
1114
-@ <link rel="stylesheet" href="$home/style.css?enhanced" type="text/css"
1114
+@ <link rel="stylesheet" href="$stylesheet_url" type="text/css"
11151115
@ media="screen" />
11161116
@ </head>
11171117
@ <body>
11181118
@ <div class="header">
11191119
@ <div class="logo">
@@ -1176,11 +1176,11 @@
11761176
@ return $logourl
11771177
@ }
11781178
@ set logourl [getLogoUrl $baseurl]
11791179
@ </th1>
11801180
@ <a href="$logourl">
1181
-@ <img src="$baseurl/logo" border="0" alt="$project_name">
1181
+@ <img src="$logo_image_url" border="0" alt="$project_name">
11821182
@ </a>
11831183
@ </div>
11841184
@ <div class="title"><small>$<project_name></small><br />$<title></div>
11851185
@ <div class="status"><th1>
11861186
@ if {[info exists login]} {
11871187
--- src/skins.c
+++ src/skins.c
@@ -171,11 +171,11 @@
171 @ <head>
172 @ <base href="$baseurl/$current_page" />
173 @ <title>$<project_name>: $<title></title>
174 @ <link rel="alternate" type="application/rss+xml" title="RSS Feed"
175 @ href="$home/timeline.rss">
176 @ <link rel="stylesheet" href="$home/style.css?blackwhite" type="text/css"
177 @ media="screen">
178 @ </head>
179 @ <body>
180 @ <div class="header">
181 @ <div class="title"><small>$<project_name></small><br />$<title></div>
@@ -379,11 +379,11 @@
379 @ <head>
380 @ <base href="$baseurl/$current_page" />
381 @ <title>$<project_name>: $<title></title>
382 @ <link rel="alternate" type="application/rss+xml" title="RSS Feed"
383 @ href="$home/timeline.rss">
384 @ <link rel="stylesheet" href="$home/style.css?tan" type="text/css"
385 @ media="screen">
386 @ </head>
387 @ <body>
388 @ <div class="header">
389 @ <div class="title">$<title></div>
@@ -620,17 +620,17 @@
620 @ <head>
621 @ <base href="$baseurl/$current_page" />
622 @ <title>$<project_name>: $<title></title>
623 @ <link rel="alternate" type="application/rss+xml" title="RSS Feed"
624 @ href="$home/timeline.rss">
625 @ <link rel="stylesheet" href="$home/style.css?black2" type="text/css"
626 @ media="screen">
627 @ </head>
628 @ <body>
629 @ <div class="header">
630 @ <div class="logo">
631 @ <img src="$home/logo" alt="logo">
632 @ <br />$<project_name>
633 @ </div>
634 @ <div class="title">$<title></div>
635 @ <div class="status"><th1>
636 @ if {[info exists login]} {
@@ -881,17 +881,17 @@
881 @ <head>
882 @ <base href="$baseurl/$current_page" />
883 @ <title>$<project_name>: $<title></title>
884 @ <link rel="alternate" type="application/rss+xml" title="RSS Feed"
885 @ href="$home/timeline.rss">
886 @ <link rel="stylesheet" href="$home/style.css?black2" type="text/css"
887 @ media="screen">
888 @ </head>
889 @ <body>
890 @ <div class="header">
891 @ <div class="logo">
892 @ <img src="$home/logo" alt="logo">
893 @ <br />$<project_name>
894 @ </div>
895 @ <div class="title">$<title></div>
896 @ <div class="status"><th1>
897 @ if {[info exists login]} {
@@ -1109,11 +1109,11 @@
1109 @ <head>
1110 @ <base href="$baseurl/$current_page" />
1111 @ <title>$<project_name>: $<title></title>
1112 @ <link rel="alternate" type="application/rss+xml" title="RSS Feed"
1113 @ href="$home/timeline.rss" />
1114 @ <link rel="stylesheet" href="$home/style.css?enhanced" type="text/css"
1115 @ media="screen" />
1116 @ </head>
1117 @ <body>
1118 @ <div class="header">
1119 @ <div class="logo">
@@ -1176,11 +1176,11 @@
1176 @ return $logourl
1177 @ }
1178 @ set logourl [getLogoUrl $baseurl]
1179 @ </th1>
1180 @ <a href="$logourl">
1181 @ <img src="$baseurl/logo" border="0" alt="$project_name">
1182 @ </a>
1183 @ </div>
1184 @ <div class="title"><small>$<project_name></small><br />$<title></div>
1185 @ <div class="status"><th1>
1186 @ if {[info exists login]} {
1187
--- src/skins.c
+++ src/skins.c
@@ -171,11 +171,11 @@
171 @ <head>
172 @ <base href="$baseurl/$current_page" />
173 @ <title>$<project_name>: $<title></title>
174 @ <link rel="alternate" type="application/rss+xml" title="RSS Feed"
175 @ href="$home/timeline.rss">
176 @ <link rel="stylesheet" href="$stylesheet_url" type="text/css"
177 @ media="screen">
178 @ </head>
179 @ <body>
180 @ <div class="header">
181 @ <div class="title"><small>$<project_name></small><br />$<title></div>
@@ -379,11 +379,11 @@
379 @ <head>
380 @ <base href="$baseurl/$current_page" />
381 @ <title>$<project_name>: $<title></title>
382 @ <link rel="alternate" type="application/rss+xml" title="RSS Feed"
383 @ href="$home/timeline.rss">
384 @ <link rel="stylesheet" href="$stylesheet_url" type="text/css"
385 @ media="screen">
386 @ </head>
387 @ <body>
388 @ <div class="header">
389 @ <div class="title">$<title></div>
@@ -620,17 +620,17 @@
620 @ <head>
621 @ <base href="$baseurl/$current_page" />
622 @ <title>$<project_name>: $<title></title>
623 @ <link rel="alternate" type="application/rss+xml" title="RSS Feed"
624 @ href="$home/timeline.rss">
625 @ <link rel="stylesheet" href="$stylesheet_url" type="text/css"
626 @ media="screen">
627 @ </head>
628 @ <body>
629 @ <div class="header">
630 @ <div class="logo">
631 @ <img src="$logo_image_url" alt="logo">
632 @ <br />$<project_name>
633 @ </div>
634 @ <div class="title">$<title></div>
635 @ <div class="status"><th1>
636 @ if {[info exists login]} {
@@ -881,17 +881,17 @@
881 @ <head>
882 @ <base href="$baseurl/$current_page" />
883 @ <title>$<project_name>: $<title></title>
884 @ <link rel="alternate" type="application/rss+xml" title="RSS Feed"
885 @ href="$home/timeline.rss">
886 @ <link rel="stylesheet" href="$stylesheet_url" type="text/css"
887 @ media="screen">
888 @ </head>
889 @ <body>
890 @ <div class="header">
891 @ <div class="logo">
892 @ <img src="$logo_image_url" alt="logo">
893 @ <br />$<project_name>
894 @ </div>
895 @ <div class="title">$<title></div>
896 @ <div class="status"><th1>
897 @ if {[info exists login]} {
@@ -1109,11 +1109,11 @@
1109 @ <head>
1110 @ <base href="$baseurl/$current_page" />
1111 @ <title>$<project_name>: $<title></title>
1112 @ <link rel="alternate" type="application/rss+xml" title="RSS Feed"
1113 @ href="$home/timeline.rss" />
1114 @ <link rel="stylesheet" href="$stylesheet_url" type="text/css"
1115 @ media="screen" />
1116 @ </head>
1117 @ <body>
1118 @ <div class="header">
1119 @ <div class="logo">
@@ -1176,11 +1176,11 @@
1176 @ return $logourl
1177 @ }
1178 @ set logourl [getLogoUrl $baseurl]
1179 @ </th1>
1180 @ <a href="$logourl">
1181 @ <img src="$logo_image_url" border="0" alt="$project_name">
1182 @ </a>
1183 @ </div>
1184 @ <div class="title"><small>$<project_name></small><br />$<title></div>
1185 @ <div class="status"><th1>
1186 @ if {[info exists login]} {
1187
+37 -2
--- src/style.c
+++ src/style.c
@@ -243,10 +243,40 @@
243243
va_start(ap, zFormat);
244244
local_zCurrentPage = vmprintf(zFormat, ap);
245245
va_end(ap);
246246
}
247247
}
248
+
249
+/*
250
+** Create a TH1 variable containing the URL for the specified config resource.
251
+** The resulting variable name will be of the form $[zVarPrefix]_url.
252
+*/
253
+static void url_var(
254
+ const char *zVarPrefix,
255
+ const char *zConfigName,
256
+ const char *zPageName
257
+){
258
+ char *zMtime = db_get_mtime(zConfigName, 0, 0);
259
+ char *zUrl = mprintf("%s/%s/%s", g.zTop, zPageName, zMtime);
260
+ char *zVarName = mprintf("%s_url", zVarPrefix);
261
+ Th_Store(zVarName, zUrl);
262
+ free(zMtime);
263
+ free(zUrl);
264
+ free(zVarName);
265
+}
266
+
267
+/*
268
+** Create a TH1 variable containing the URL for the specified config image.
269
+** The resulting variable name will be of the form $[zImageName]_image_url.
270
+*/
271
+static void image_url_var(const char *zImageName){
272
+ char *zVarPrefix = mprintf("%s_image", zImageName);
273
+ char *zConfigName = mprintf("%s-image", zImageName);
274
+ url_var(zVarPrefix, zConfigName, zImageName);
275
+ free(zVarPrefix);
276
+ free(zConfigName);
277
+}
248278
249279
/*
250280
** Draw the header.
251281
*/
252282
void style_header(const char *zTitleFormat, ...){
@@ -275,10 +305,13 @@
275305
Th_Store("csrf_token", g.zCsrfToken);
276306
Th_Store("release_version", RELEASE_VERSION);
277307
Th_Store("manifest_version", MANIFEST_VERSION);
278308
Th_Store("manifest_date", MANIFEST_DATE);
279309
Th_Store("compiler_name", COMPILER_NAME);
310
+ url_var("stylesheet", "css", "style.css");
311
+ image_url_var("logo");
312
+ image_url_var("background");
280313
if( g.zLogin ){
281314
Th_Store("login", g.zLogin);
282315
}
283316
if( g.thTrace ) Th_Trace("BEGIN_HEADER_SCRIPT<br />\n", -1);
284317
Th_Render(zHeader);
@@ -406,17 +439,17 @@
406439
@ <head>
407440
@ <base href="$baseurl/$current_page" />
408441
@ <title>$<project_name>: $<title></title>
409442
@ <link rel="alternate" type="application/rss+xml" title="RSS Feed"
410443
@ href="$home/timeline.rss" />
411
-@ <link rel="stylesheet" href="$home/style.css?default" type="text/css"
444
+@ <link rel="stylesheet" href="$stylesheet_url" type="text/css"
412445
@ media="screen" />
413446
@ </head>
414447
@ <body>
415448
@ <div class="header">
416449
@ <div class="logo">
417
-@ <img src="$home/logo" alt="logo" />
450
+@ <img src="$logo_image_url" alt="logo" />
418451
@ </div>
419452
@ <div class="title"><small>$<project_name></small><br />$<title></div>
420453
@ <div class="status"><th1>
421454
@ if {[info exists login]} {
422455
@ puts "Logged in as $login"
@@ -1151,10 +1184,12 @@
11511184
/* Process through TH1 in order to give an opportunity to substitute
11521185
** variables such as $baseurl.
11531186
*/
11541187
Th_Store("baseurl", g.zBaseURL);
11551188
Th_Store("home", g.zTop);
1189
+ image_url_var("logo");
1190
+ image_url_var("background");
11561191
Th_Render(blob_str(&css));
11571192
11581193
/* Tell CGI that the content returned by this page is considered cacheable */
11591194
g.isConst = 1;
11601195
}
11611196
--- src/style.c
+++ src/style.c
@@ -243,10 +243,40 @@
243 va_start(ap, zFormat);
244 local_zCurrentPage = vmprintf(zFormat, ap);
245 va_end(ap);
246 }
247 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
248
249 /*
250 ** Draw the header.
251 */
252 void style_header(const char *zTitleFormat, ...){
@@ -275,10 +305,13 @@
275 Th_Store("csrf_token", g.zCsrfToken);
276 Th_Store("release_version", RELEASE_VERSION);
277 Th_Store("manifest_version", MANIFEST_VERSION);
278 Th_Store("manifest_date", MANIFEST_DATE);
279 Th_Store("compiler_name", COMPILER_NAME);
 
 
 
280 if( g.zLogin ){
281 Th_Store("login", g.zLogin);
282 }
283 if( g.thTrace ) Th_Trace("BEGIN_HEADER_SCRIPT<br />\n", -1);
284 Th_Render(zHeader);
@@ -406,17 +439,17 @@
406 @ <head>
407 @ <base href="$baseurl/$current_page" />
408 @ <title>$<project_name>: $<title></title>
409 @ <link rel="alternate" type="application/rss+xml" title="RSS Feed"
410 @ href="$home/timeline.rss" />
411 @ <link rel="stylesheet" href="$home/style.css?default" type="text/css"
412 @ media="screen" />
413 @ </head>
414 @ <body>
415 @ <div class="header">
416 @ <div class="logo">
417 @ <img src="$home/logo" alt="logo" />
418 @ </div>
419 @ <div class="title"><small>$<project_name></small><br />$<title></div>
420 @ <div class="status"><th1>
421 @ if {[info exists login]} {
422 @ puts "Logged in as $login"
@@ -1151,10 +1184,12 @@
1151 /* Process through TH1 in order to give an opportunity to substitute
1152 ** variables such as $baseurl.
1153 */
1154 Th_Store("baseurl", g.zBaseURL);
1155 Th_Store("home", g.zTop);
 
 
1156 Th_Render(blob_str(&css));
1157
1158 /* Tell CGI that the content returned by this page is considered cacheable */
1159 g.isConst = 1;
1160 }
1161
--- src/style.c
+++ src/style.c
@@ -243,10 +243,40 @@
243 va_start(ap, zFormat);
244 local_zCurrentPage = vmprintf(zFormat, ap);
245 va_end(ap);
246 }
247 }
248
249 /*
250 ** Create a TH1 variable containing the URL for the specified config resource.
251 ** The resulting variable name will be of the form $[zVarPrefix]_url.
252 */
253 static void url_var(
254 const char *zVarPrefix,
255 const char *zConfigName,
256 const char *zPageName
257 ){
258 char *zMtime = db_get_mtime(zConfigName, 0, 0);
259 char *zUrl = mprintf("%s/%s/%s", g.zTop, zPageName, zMtime);
260 char *zVarName = mprintf("%s_url", zVarPrefix);
261 Th_Store(zVarName, zUrl);
262 free(zMtime);
263 free(zUrl);
264 free(zVarName);
265 }
266
267 /*
268 ** Create a TH1 variable containing the URL for the specified config image.
269 ** The resulting variable name will be of the form $[zImageName]_image_url.
270 */
271 static void image_url_var(const char *zImageName){
272 char *zVarPrefix = mprintf("%s_image", zImageName);
273 char *zConfigName = mprintf("%s-image", zImageName);
274 url_var(zVarPrefix, zConfigName, zImageName);
275 free(zVarPrefix);
276 free(zConfigName);
277 }
278
279 /*
280 ** Draw the header.
281 */
282 void style_header(const char *zTitleFormat, ...){
@@ -275,10 +305,13 @@
305 Th_Store("csrf_token", g.zCsrfToken);
306 Th_Store("release_version", RELEASE_VERSION);
307 Th_Store("manifest_version", MANIFEST_VERSION);
308 Th_Store("manifest_date", MANIFEST_DATE);
309 Th_Store("compiler_name", COMPILER_NAME);
310 url_var("stylesheet", "css", "style.css");
311 image_url_var("logo");
312 image_url_var("background");
313 if( g.zLogin ){
314 Th_Store("login", g.zLogin);
315 }
316 if( g.thTrace ) Th_Trace("BEGIN_HEADER_SCRIPT<br />\n", -1);
317 Th_Render(zHeader);
@@ -406,17 +439,17 @@
439 @ <head>
440 @ <base href="$baseurl/$current_page" />
441 @ <title>$<project_name>: $<title></title>
442 @ <link rel="alternate" type="application/rss+xml" title="RSS Feed"
443 @ href="$home/timeline.rss" />
444 @ <link rel="stylesheet" href="$stylesheet_url" type="text/css"
445 @ media="screen" />
446 @ </head>
447 @ <body>
448 @ <div class="header">
449 @ <div class="logo">
450 @ <img src="$logo_image_url" alt="logo" />
451 @ </div>
452 @ <div class="title"><small>$<project_name></small><br />$<title></div>
453 @ <div class="status"><th1>
454 @ if {[info exists login]} {
455 @ puts "Logged in as $login"
@@ -1151,10 +1184,12 @@
1184 /* Process through TH1 in order to give an opportunity to substitute
1185 ** variables such as $baseurl.
1186 */
1187 Th_Store("baseurl", g.zBaseURL);
1188 Th_Store("home", g.zTop);
1189 image_url_var("logo");
1190 image_url_var("background");
1191 Th_Render(blob_str(&css));
1192
1193 /* Tell CGI that the content returned by this page is considered cacheable */
1194 g.isConst = 1;
1195 }
1196

Keyboard Shortcuts

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