@@ -1126,28 +1126,90 @@
1126 1126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Th_Render(blob_str(&css));
1127 1127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1128 1128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Tell CGI that the content returned by this page is considered cacheable */
1129 1129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.isConst = 1;
1130 1130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
1133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Maps a "bundle" name to a callback which emits the text of that
1134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** bundle. For use in consolidating scripts for certain pages into a
1135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** single cacheable request.
1136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
1137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typedef struct {
1138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char * zName; /* Name of the bundle (maps to /builtin/:NAME) */
1139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void (*xEmit)(void); /* Emits amalgamated text output for this
1140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ bundle */
1141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } BundleEmitter;
1142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
1143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Map each required bundle here...
1144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
1145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static const BundleEmitter BundleEmitters[] = {
1146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Keep these sorted for bsearch() */
1147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ {"fileedit.js", fileedit_emit_js_bundle},
1148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ {"forum.js", forum_emit_js_bundle},
1149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ {"wikiedit.js", wikiedit_emit_js_bundle}
1150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
1151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
1153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Comparison function for bsearch() for searching a BundleEmitter
1154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** list for a matching name.
1155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
1156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int cmp_builtin_bundle_name(const void *a, const void *b){
1157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const BundleEmitter * rA = (const BundleEmitter*)a;
1158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const BundleEmitter * rB = (const BundleEmitter*)b;
1159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return fossil_strcmp(rA->zName, rB->zName);
1160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
1163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Internal helper for /builtin/FILENAME for dispatching "bundles"
1164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of amalgamated text (primarily JS) code.
1165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
1166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Returns true if it finds a bundle matcing the given name, else
1167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** false. On success it outputs the amalgamated bundle without any
1168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sort of wrapper, e.g. SCRIPT tag
1169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
1170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int page_builtin_text_bundle(const char * zFilename){
1171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const BundleEmitter * pBH;
1172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ BundleEmitter needle = {zFilename, 0};
1173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pBH = (const BundleEmitter *)bsearch(&needle, BundleEmitters,
1175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ count(BundleEmitters),
1176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sizeof BundleEmitters[0],
1177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cmp_builtin_bundle_name);
1178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(pBH!=0){
1179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pBH->xEmit();
1180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return pBH!=0;
1182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1131 1183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1132 1184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
1133 1185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** WEBPAGE: builtin
1134 1186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** URL: builtin/FILENAME
1135 1187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
1136 1188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return the built-in text given by FILENAME. This is used internally
1137 1189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** by many Fossil web pages to load built-in javascript files.
1138 1190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
1139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If the id= query parameter is present, then Fossil assumes that the
1140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** result is immutable and sets a very large cache retention time (1 year).
1191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the id= or cache= query parameter is present, then Fossil
1192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** assumes that the result is immutable and sets a very large cache
1193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** retention time (1 year).
1141 1194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1142 1195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void page_builtin_text(void){
1143 1196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob out;
1144 1197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zName = P("name");
1145 1198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zTxt = 0;
1146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zId = P("id");
1199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zId = PD("id",P("cache"));
1147 1200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nId;
1148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( zName ) zTxt = builtin_text(zName);
1201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int isBundle = 0;
1202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zName ){
1204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(':'==zName[0]){
1205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ isBundle = 1;
1206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zTxt = page_builtin_text_bundle(zName+1) ? "" : NULL;
1207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
1208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zTxt = builtin_text(zName);
1209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1149 1211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zTxt==0 ){
1150 1212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cgi_set_status(404, "Not Found");
1151 1213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ File "%h(zName)" not found
1152 1214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
1153 1215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -1159,12 +1221,14 @@
1159 1221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zId && (nId = (int)strlen(zId))>=8 && strncmp(zId,MANIFEST_UUID,nId)==0 ){
1160 1222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.isConst = 1;
1161 1223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
1162 1224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
etag_check(0,0);
1163 1225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_init(&out, zTxt, -1);
1165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- cgi_set_content(&out);
1226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(isBundle==0){
1227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_init(&out, zTxt, -1);
1228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cgi_set_content(&out);
1229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1166 1230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1167 1231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1168 1232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
1169 1233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** All possible capabilities
1170 1234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -1640,11 +1704,17 @@
1640 1704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** build-time-dependent cache-buster value.
1641 1705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1642 1706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void style_emit_script_builtin(int asInline, int addScripTag,
1643 1707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char const * zName){
1644 1708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(asInline){
1709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(addScripTag){
1710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ style_emit_script_tag(0,0);
1711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1645 1712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
CX("%s", builtin_text(zName));
1713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(addScripTag){
1714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ style_emit_script_tag(1,0);
1715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1646 1716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
1647 1717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char * zFullName = mprintf("builtin/%s",zName);
1648 1718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char * zHash = fossil_exe_id();
1649 1719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
CX("<script src='%R/%T?cache=%.8s'></script>\n",
1650 1720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zFullName, zHash);
1651 1721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!