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.
Commit
daff9d20621480a0474971f94d6d6946ecd5a18d
Parent
4564790ed7bcda5…
3 files changed
+4
-2
+8
-8
+37
-2
+4
-2
| --- src/setup.c | ||
| +++ src/setup.c | ||
| @@ -1598,13 +1598,15 @@ | ||
| 1598 | 1598 | |
| 1599 | 1599 | /* |
| 1600 | 1600 | ** WEBPAGE: setup_logo |
| 1601 | 1601 | */ |
| 1602 | 1602 | void setup_logo(void){ |
| 1603 | + const char *zLogoMtime = db_get_mtime("logo-image", 0, 0); | |
| 1603 | 1604 | const char *zLogoMime = db_get("logo-mimetype","image/gif"); |
| 1604 | 1605 | const char *aLogoImg = P("logoim"); |
| 1605 | 1606 | int szLogoImg = atoi(PD("logoim:bytes","0")); |
| 1607 | + const char *zBgMtime = db_get_mtime("background-image", 0, 0); | |
| 1606 | 1608 | const char *zBgMime = db_get("background-mimetype","image/gif"); |
| 1607 | 1609 | const char *aBgImg = P("bgim"); |
| 1608 | 1610 | int szBgImg = atoi(PD("bgim:bytes","0")); |
| 1609 | 1611 | if( szLogoImg>0 ){ |
| 1610 | 1612 | zLogoMime = PD("logoim:mimetype","image/gif"); |
| @@ -1668,11 +1670,11 @@ | ||
| 1668 | 1670 | cgi_redirect("setup_logo"); |
| 1669 | 1671 | } |
| 1670 | 1672 | style_header("Edit Project Logo And Background"); |
| 1671 | 1673 | @ <p>The current project logo has a MIME-Type of <b>%h(zLogoMime)</b> |
| 1672 | 1674 | @ 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" /> | |
| 1674 | 1676 | @ </p></blockquote> |
| 1675 | 1677 | @ |
| 1676 | 1678 | @ <form action="%s(g.zTop)/setup_logo" method="post" |
| 1677 | 1679 | @ enctype="multipart/form-data"><div> |
| 1678 | 1680 | @ <p>The logo is accessible to all users at this URL: |
| @@ -1690,11 +1692,11 @@ | ||
| 1690 | 1692 | @ </div></form> |
| 1691 | 1693 | @ <hr /> |
| 1692 | 1694 | @ |
| 1693 | 1695 | @ <p>The current background image has a MIME-Type of <b>%h(zBgMime)</b> |
| 1694 | 1696 | @ 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 /> | |
| 1696 | 1698 | @ </p></blockquote> |
| 1697 | 1699 | @ |
| 1698 | 1700 | @ <form action="%s(g.zTop)/setup_logo" method="post" |
| 1699 | 1701 | @ enctype="multipart/form-data"><div> |
| 1700 | 1702 | @ <p>The background image is accessible to all users at this URL: |
| 1701 | 1703 |
| --- 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 @@ | ||
| 171 | 171 | @ <head> |
| 172 | 172 | @ <base href="$baseurl/$current_page" /> |
| 173 | 173 | @ <title>$<project_name>: $<title></title> |
| 174 | 174 | @ <link rel="alternate" type="application/rss+xml" title="RSS Feed" |
| 175 | 175 | @ 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" | |
| 177 | 177 | @ media="screen"> |
| 178 | 178 | @ </head> |
| 179 | 179 | @ <body> |
| 180 | 180 | @ <div class="header"> |
| 181 | 181 | @ <div class="title"><small>$<project_name></small><br />$<title></div> |
| @@ -379,11 +379,11 @@ | ||
| 379 | 379 | @ <head> |
| 380 | 380 | @ <base href="$baseurl/$current_page" /> |
| 381 | 381 | @ <title>$<project_name>: $<title></title> |
| 382 | 382 | @ <link rel="alternate" type="application/rss+xml" title="RSS Feed" |
| 383 | 383 | @ 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" | |
| 385 | 385 | @ media="screen"> |
| 386 | 386 | @ </head> |
| 387 | 387 | @ <body> |
| 388 | 388 | @ <div class="header"> |
| 389 | 389 | @ <div class="title">$<title></div> |
| @@ -620,17 +620,17 @@ | ||
| 620 | 620 | @ <head> |
| 621 | 621 | @ <base href="$baseurl/$current_page" /> |
| 622 | 622 | @ <title>$<project_name>: $<title></title> |
| 623 | 623 | @ <link rel="alternate" type="application/rss+xml" title="RSS Feed" |
| 624 | 624 | @ 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" | |
| 626 | 626 | @ media="screen"> |
| 627 | 627 | @ </head> |
| 628 | 628 | @ <body> |
| 629 | 629 | @ <div class="header"> |
| 630 | 630 | @ <div class="logo"> |
| 631 | -@ <img src="$home/logo" alt="logo"> | |
| 631 | +@ <img src="$logo_image_url" alt="logo"> | |
| 632 | 632 | @ <br />$<project_name> |
| 633 | 633 | @ </div> |
| 634 | 634 | @ <div class="title">$<title></div> |
| 635 | 635 | @ <div class="status"><th1> |
| 636 | 636 | @ if {[info exists login]} { |
| @@ -881,17 +881,17 @@ | ||
| 881 | 881 | @ <head> |
| 882 | 882 | @ <base href="$baseurl/$current_page" /> |
| 883 | 883 | @ <title>$<project_name>: $<title></title> |
| 884 | 884 | @ <link rel="alternate" type="application/rss+xml" title="RSS Feed" |
| 885 | 885 | @ 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" | |
| 887 | 887 | @ media="screen"> |
| 888 | 888 | @ </head> |
| 889 | 889 | @ <body> |
| 890 | 890 | @ <div class="header"> |
| 891 | 891 | @ <div class="logo"> |
| 892 | -@ <img src="$home/logo" alt="logo"> | |
| 892 | +@ <img src="$logo_image_url" alt="logo"> | |
| 893 | 893 | @ <br />$<project_name> |
| 894 | 894 | @ </div> |
| 895 | 895 | @ <div class="title">$<title></div> |
| 896 | 896 | @ <div class="status"><th1> |
| 897 | 897 | @ if {[info exists login]} { |
| @@ -1109,11 +1109,11 @@ | ||
| 1109 | 1109 | @ <head> |
| 1110 | 1110 | @ <base href="$baseurl/$current_page" /> |
| 1111 | 1111 | @ <title>$<project_name>: $<title></title> |
| 1112 | 1112 | @ <link rel="alternate" type="application/rss+xml" title="RSS Feed" |
| 1113 | 1113 | @ 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" | |
| 1115 | 1115 | @ media="screen" /> |
| 1116 | 1116 | @ </head> |
| 1117 | 1117 | @ <body> |
| 1118 | 1118 | @ <div class="header"> |
| 1119 | 1119 | @ <div class="logo"> |
| @@ -1176,11 +1176,11 @@ | ||
| 1176 | 1176 | @ return $logourl |
| 1177 | 1177 | @ } |
| 1178 | 1178 | @ set logourl [getLogoUrl $baseurl] |
| 1179 | 1179 | @ </th1> |
| 1180 | 1180 | @ <a href="$logourl"> |
| 1181 | -@ <img src="$baseurl/logo" border="0" alt="$project_name"> | |
| 1181 | +@ <img src="$logo_image_url" border="0" alt="$project_name"> | |
| 1182 | 1182 | @ </a> |
| 1183 | 1183 | @ </div> |
| 1184 | 1184 | @ <div class="title"><small>$<project_name></small><br />$<title></div> |
| 1185 | 1185 | @ <div class="status"><th1> |
| 1186 | 1186 | @ if {[info exists login]} { |
| 1187 | 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="$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 @@ | ||
| 243 | 243 | va_start(ap, zFormat); |
| 244 | 244 | local_zCurrentPage = vmprintf(zFormat, ap); |
| 245 | 245 | va_end(ap); |
| 246 | 246 | } |
| 247 | 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 | +} | |
| 248 | 278 | |
| 249 | 279 | /* |
| 250 | 280 | ** Draw the header. |
| 251 | 281 | */ |
| 252 | 282 | void style_header(const char *zTitleFormat, ...){ |
| @@ -275,10 +305,13 @@ | ||
| 275 | 305 | Th_Store("csrf_token", g.zCsrfToken); |
| 276 | 306 | Th_Store("release_version", RELEASE_VERSION); |
| 277 | 307 | Th_Store("manifest_version", MANIFEST_VERSION); |
| 278 | 308 | Th_Store("manifest_date", MANIFEST_DATE); |
| 279 | 309 | Th_Store("compiler_name", COMPILER_NAME); |
| 310 | + url_var("stylesheet", "css", "style.css"); | |
| 311 | + image_url_var("logo"); | |
| 312 | + image_url_var("background"); | |
| 280 | 313 | if( g.zLogin ){ |
| 281 | 314 | Th_Store("login", g.zLogin); |
| 282 | 315 | } |
| 283 | 316 | if( g.thTrace ) Th_Trace("BEGIN_HEADER_SCRIPT<br />\n", -1); |
| 284 | 317 | Th_Render(zHeader); |
| @@ -406,17 +439,17 @@ | ||
| 406 | 439 | @ <head> |
| 407 | 440 | @ <base href="$baseurl/$current_page" /> |
| 408 | 441 | @ <title>$<project_name>: $<title></title> |
| 409 | 442 | @ <link rel="alternate" type="application/rss+xml" title="RSS Feed" |
| 410 | 443 | @ 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" | |
| 412 | 445 | @ media="screen" /> |
| 413 | 446 | @ </head> |
| 414 | 447 | @ <body> |
| 415 | 448 | @ <div class="header"> |
| 416 | 449 | @ <div class="logo"> |
| 417 | -@ <img src="$home/logo" alt="logo" /> | |
| 450 | +@ <img src="$logo_image_url" alt="logo" /> | |
| 418 | 451 | @ </div> |
| 419 | 452 | @ <div class="title"><small>$<project_name></small><br />$<title></div> |
| 420 | 453 | @ <div class="status"><th1> |
| 421 | 454 | @ if {[info exists login]} { |
| 422 | 455 | @ puts "Logged in as $login" |
| @@ -1151,10 +1184,12 @@ | ||
| 1151 | 1184 | /* Process through TH1 in order to give an opportunity to substitute |
| 1152 | 1185 | ** variables such as $baseurl. |
| 1153 | 1186 | */ |
| 1154 | 1187 | Th_Store("baseurl", g.zBaseURL); |
| 1155 | 1188 | Th_Store("home", g.zTop); |
| 1189 | + image_url_var("logo"); | |
| 1190 | + image_url_var("background"); | |
| 1156 | 1191 | Th_Render(blob_str(&css)); |
| 1157 | 1192 | |
| 1158 | 1193 | /* Tell CGI that the content returned by this page is considered cacheable */ |
| 1159 | 1194 | g.isConst = 1; |
| 1160 | 1195 | } |
| 1161 | 1196 |
| --- 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 |