Fossil SCM

Improved management of resource names so that it is not necessary to press "Reload" after changing skins either in the admin screens or using the --skin command-line option.

drh 2015-03-14 15:21 trunk
Commit 39f084cf2cf8791dbf3a59cacaddd64f70c474fb
--- skins/blitz/header.txt
+++ skins/blitz/header.txt
@@ -1,11 +1,11 @@
11
<html>
22
<head>
33
<base href="$baseurl/$current_page" />
44
<title>$<project_name>: $<title></title>
55
<link rel="alternate" type="application/rss+xml" title="RSS Feed" href="$home/timeline.rss" />
6
- <link rel="stylesheet" href="$home/style.css?default" type="text/css" media="screen" />
6
+ <link rel="stylesheet" href="$stylesheet_url" type="text/css" media="screen" />
77
</head>
88
99
<body>
1010
<div class="header">
1111
<div class="container">
1212
--- skins/blitz/header.txt
+++ skins/blitz/header.txt
@@ -1,11 +1,11 @@
1 <html>
2 <head>
3 <base href="$baseurl/$current_page" />
4 <title>$<project_name>: $<title></title>
5 <link rel="alternate" type="application/rss+xml" title="RSS Feed" href="$home/timeline.rss" />
6 <link rel="stylesheet" href="$home/style.css?default" type="text/css" media="screen" />
7 </head>
8
9 <body>
10 <div class="header">
11 <div class="container">
12
--- skins/blitz/header.txt
+++ skins/blitz/header.txt
@@ -1,11 +1,11 @@
1 <html>
2 <head>
3 <base href="$baseurl/$current_page" />
4 <title>$<project_name>: $<title></title>
5 <link rel="alternate" type="application/rss+xml" title="RSS Feed" href="$home/timeline.rss" />
6 <link rel="stylesheet" href="$stylesheet_url" type="text/css" media="screen" />
7 </head>
8
9 <body>
10 <div class="header">
11 <div class="container">
12
--- skins/blitz_no_logo/header.txt
+++ skins/blitz_no_logo/header.txt
@@ -1,11 +1,11 @@
11
<html>
22
<head>
33
<base href="$baseurl/$current_page" />
44
<title>$<project_name>: $<title></title>
55
<link rel="alternate" type="application/rss+xml" title="RSS Feed" href="$home/timeline.rss" />
6
- <link rel="stylesheet" href="$home/style.css?default" type="text/css" media="screen" />
6
+ <link rel="stylesheet" href="$stylesheet_url" type="text/css" media="screen" />
77
</head>
88
99
<body>
1010
<div class="header">
1111
<div class="container">
1212
--- skins/blitz_no_logo/header.txt
+++ skins/blitz_no_logo/header.txt
@@ -1,11 +1,11 @@
1 <html>
2 <head>
3 <base href="$baseurl/$current_page" />
4 <title>$<project_name>: $<title></title>
5 <link rel="alternate" type="application/rss+xml" title="RSS Feed" href="$home/timeline.rss" />
6 <link rel="stylesheet" href="$home/style.css?default" type="text/css" media="screen" />
7 </head>
8
9 <body>
10 <div class="header">
11 <div class="container">
12
--- skins/blitz_no_logo/header.txt
+++ skins/blitz_no_logo/header.txt
@@ -1,11 +1,11 @@
1 <html>
2 <head>
3 <base href="$baseurl/$current_page" />
4 <title>$<project_name>: $<title></title>
5 <link rel="alternate" type="application/rss+xml" title="RSS Feed" href="$home/timeline.rss" />
6 <link rel="stylesheet" href="$stylesheet_url" type="text/css" media="screen" />
7 </head>
8
9 <body>
10 <div class="header">
11 <div class="container">
12
--- skins/default/header.txt
+++ skins/default/header.txt
@@ -2,11 +2,11 @@
22
<head>
33
<base href="$baseurl/$current_page" />
44
<title>$<project_name>: $<title></title>
55
<link rel="alternate" type="application/rss+xml" title="RSS Feed"
66
href="$home/timeline.rss" />
7
- <link rel="stylesheet" href="$home/style.css?default" type="text/css"
7
+ <link rel="stylesheet" href="$stylesheet_url" type="text/css"
88
media="screen" />
99
</head>
1010
1111
<body>
1212
<div class="header">
1313
--- skins/default/header.txt
+++ skins/default/header.txt
@@ -2,11 +2,11 @@
2 <head>
3 <base href="$baseurl/$current_page" />
4 <title>$<project_name>: $<title></title>
5 <link rel="alternate" type="application/rss+xml" title="RSS Feed"
6 href="$home/timeline.rss" />
7 <link rel="stylesheet" href="$home/style.css?default" type="text/css"
8 media="screen" />
9 </head>
10
11 <body>
12 <div class="header">
13
--- skins/default/header.txt
+++ skins/default/header.txt
@@ -2,11 +2,11 @@
2 <head>
3 <base href="$baseurl/$current_page" />
4 <title>$<project_name>: $<title></title>
5 <link rel="alternate" type="application/rss+xml" title="RSS Feed"
6 href="$home/timeline.rss" />
7 <link rel="stylesheet" href="$stylesheet_url" type="text/css"
8 media="screen" />
9 </head>
10
11 <body>
12 <div class="header">
13
+34
--- src/skins.c
+++ src/skins.c
@@ -150,10 +150,44 @@
150150
}else{
151151
rc = db_get_boolean("white-foreground",0);
152152
}
153153
return rc;
154154
}
155
+
156
+/*
157
+** Hash function for computing a skin id.
158
+*/
159
+static unsigned int skin_hash(unsigned int h, const char *z){
160
+ if( z==0 ) return h;
161
+ while( z[0] ){
162
+ h = (h<<11) ^ (h<<1) ^ (h>>3) ^ z[0];
163
+ z++;
164
+ }
165
+ return h;
166
+}
167
+
168
+/*
169
+** Return an identifier that is (probably) different for every skin
170
+** but that is (probably) the same if the skin is unchanged. This
171
+** identifier can be attached to resource URLs to force reloading when
172
+** the resources change but allow the resources to be read from cache
173
+** as long as they are unchanged.
174
+*/
175
+unsigned int skin_id(const char *zResource){
176
+ unsigned int h = 0;
177
+ if( zAltSkinDir ){
178
+ h = skin_hash(0, zAltSkinDir);
179
+ }else if( pAltSkin ){
180
+ h = skin_hash(0, pAltSkin->zLabel);
181
+ }else{
182
+ char *zMTime = db_get_mtime(zResource, 0, 0);
183
+ h = skin_hash(0, zMTime);
184
+ fossil_free(zMTime);
185
+ }
186
+ h = skin_hash(h, MANIFEST_UUID);
187
+ return h;
188
+}
155189
156190
/*
157191
** For a skin named zSkinName, compute the name of the CONFIG table
158192
** entry where that skin is stored and return it.
159193
**
160194
--- src/skins.c
+++ src/skins.c
@@ -150,10 +150,44 @@
150 }else{
151 rc = db_get_boolean("white-foreground",0);
152 }
153 return rc;
154 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
155
156 /*
157 ** For a skin named zSkinName, compute the name of the CONFIG table
158 ** entry where that skin is stored and return it.
159 **
160
--- src/skins.c
+++ src/skins.c
@@ -150,10 +150,44 @@
150 }else{
151 rc = db_get_boolean("white-foreground",0);
152 }
153 return rc;
154 }
155
156 /*
157 ** Hash function for computing a skin id.
158 */
159 static unsigned int skin_hash(unsigned int h, const char *z){
160 if( z==0 ) return h;
161 while( z[0] ){
162 h = (h<<11) ^ (h<<1) ^ (h>>3) ^ z[0];
163 z++;
164 }
165 return h;
166 }
167
168 /*
169 ** Return an identifier that is (probably) different for every skin
170 ** but that is (probably) the same if the skin is unchanged. This
171 ** identifier can be attached to resource URLs to force reloading when
172 ** the resources change but allow the resources to be read from cache
173 ** as long as they are unchanged.
174 */
175 unsigned int skin_id(const char *zResource){
176 unsigned int h = 0;
177 if( zAltSkinDir ){
178 h = skin_hash(0, zAltSkinDir);
179 }else if( pAltSkin ){
180 h = skin_hash(0, pAltSkin->zLabel);
181 }else{
182 char *zMTime = db_get_mtime(zResource, 0, 0);
183 h = skin_hash(0, zMTime);
184 fossil_free(zMTime);
185 }
186 h = skin_hash(h, MANIFEST_UUID);
187 return h;
188 }
189
190 /*
191 ** For a skin named zSkinName, compute the name of the CONFIG table
192 ** entry where that skin is stored and return it.
193 **
194
+2 -4
--- src/style.c
+++ src/style.c
@@ -325,16 +325,14 @@
325325
static void url_var(
326326
const char *zVarPrefix,
327327
const char *zConfigName,
328328
const char *zPageName
329329
){
330
- char *zMtime = db_get_mtime(zConfigName, 0, 0);
331
- char *zUrl = mprintf("%s/%s/%s%.5s", g.zTop, zPageName, zMtime,
332
- MANIFEST_UUID);
333330
char *zVarName = mprintf("%s_url", zVarPrefix);
331
+ char *zUrl = mprintf("%s/%s?id=%x", g.zTop, zPageName,
332
+ skin_id(zConfigName));
334333
Th_Store(zVarName, zUrl);
335
- free(zMtime);
336334
free(zUrl);
337335
free(zVarName);
338336
}
339337
340338
/*
341339
--- src/style.c
+++ src/style.c
@@ -325,16 +325,14 @@
325 static void url_var(
326 const char *zVarPrefix,
327 const char *zConfigName,
328 const char *zPageName
329 ){
330 char *zMtime = db_get_mtime(zConfigName, 0, 0);
331 char *zUrl = mprintf("%s/%s/%s%.5s", g.zTop, zPageName, zMtime,
332 MANIFEST_UUID);
333 char *zVarName = mprintf("%s_url", zVarPrefix);
 
 
334 Th_Store(zVarName, zUrl);
335 free(zMtime);
336 free(zUrl);
337 free(zVarName);
338 }
339
340 /*
341
--- src/style.c
+++ src/style.c
@@ -325,16 +325,14 @@
325 static void url_var(
326 const char *zVarPrefix,
327 const char *zConfigName,
328 const char *zPageName
329 ){
 
 
 
330 char *zVarName = mprintf("%s_url", zVarPrefix);
331 char *zUrl = mprintf("%s/%s?id=%x", g.zTop, zPageName,
332 skin_id(zConfigName));
333 Th_Store(zVarName, zUrl);
 
334 free(zUrl);
335 free(zVarName);
336 }
337
338 /*
339

Keyboard Shortcuts

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