Fossil SCM
Introducing the /fileedit page.
Commit
1243bf39996b8a654bb4ab3c90d89bbc82759db3ecf2fdb1a7b1c7a1edd12776
Parent
064c1c95889feef…
39 files changed
+12
-2
+11
+22
-11
+1
+9
+9
+15
+23
-4
+4
+3
+349
+1
+1
+62
+42
+8
+4
+8
+11
+3
-3
+20
+20
+1
+2
-2
+4
-3
+8
-5
+395
+395
+220
+10
-4
+20
+20
+18
+18
+30
+1
-2
+1
+1
+4
-1
~
src/blob.c
~
src/cgi.c
~
src/checkin.c
~
src/configure.c
~
src/db.c
~
src/db.c
~
src/default_css.txt
~
src/encode.c
~
src/fileedit.c
~
src/finfo.c
~
src/fossil.bootstrap.js
~
src/fossil.confirmer.js
~
src/fossil.dom.js
~
src/fossil.fetch.js
~
src/fossil.page.fileedit.js
~
src/fossil.storage.js
~
src/fossil.tabs.js
~
src/info.c
~
src/leaf.c
~
src/main.c
~
src/main.mk
~
src/main.mk
~
src/makemake.tcl
~
src/manifest.c
~
src/printf.c
~
src/sbsdiff.js
~
src/style.c
~
src/style.c
~
src/style.fileedit.css
~
win/Makefile.dmc
~
win/Makefile.mingw
~
win/Makefile.mingw
~
win/Makefile.msc
~
win/Makefile.msc
+
www/fileedit-page.md
~
www/fileedit-page.md
~
www/mkindex.tcl
~
www/mkindex.tcl
~
www/permutedindex.html
+12
-2
| --- src/blob.c | ||
| +++ src/blob.c | ||
| @@ -477,10 +477,22 @@ | ||
| 477 | 477 | void blob_resize(Blob *pBlob, unsigned int newSize){ |
| 478 | 478 | pBlob->xRealloc(pBlob, newSize+1); |
| 479 | 479 | pBlob->nUsed = newSize; |
| 480 | 480 | pBlob->aData[newSize] = 0; |
| 481 | 481 | } |
| 482 | + | |
| 483 | +/* | |
| 484 | +** Ensures that the given blob has at least the given amount of memory | |
| 485 | +** allocated to it. Does not modify pBlob->nUsed nor will it reduce | |
| 486 | +** the currently-allocated amount of memory. | |
| 487 | +*/ | |
| 488 | +void blob_reserve(Blob *pBlob, unsigned int newSize){ | |
| 489 | + if(newSize>pBlob->nUsed){ | |
| 490 | + pBlob->xRealloc(pBlob, newSize); | |
| 491 | + pBlob->aData[newSize] = 0; | |
| 492 | + } | |
| 493 | +} | |
| 482 | 494 | |
| 483 | 495 | /* |
| 484 | 496 | ** Make sure a blob is nul-terminated and is not a pointer to unmanaged |
| 485 | 497 | ** space. Return a pointer to the data. |
| 486 | 498 | */ |
| @@ -1167,11 +1179,10 @@ | ||
| 1167 | 1179 | blob_reset(&b3); |
| 1168 | 1180 | } |
| 1169 | 1181 | fossil_print("ok\n"); |
| 1170 | 1182 | } |
| 1171 | 1183 | |
| 1172 | -#if defined(_WIN32) || defined(__CYGWIN__) | |
| 1173 | 1184 | /* |
| 1174 | 1185 | ** Convert every \n character in the given blob into \r\n. |
| 1175 | 1186 | */ |
| 1176 | 1187 | void blob_add_cr(Blob *p){ |
| 1177 | 1188 | char *z = p->aData; |
| @@ -1191,11 +1202,10 @@ | ||
| 1191 | 1202 | if( (z[--j] = z[--i]) =='\n' ){ |
| 1192 | 1203 | z[--j] = '\r'; |
| 1193 | 1204 | } |
| 1194 | 1205 | } |
| 1195 | 1206 | } |
| 1196 | -#endif | |
| 1197 | 1207 | |
| 1198 | 1208 | /* |
| 1199 | 1209 | ** Remove every \r character from the given blob, replacing each one with |
| 1200 | 1210 | ** a \n character if it was not already part of a \r\n pair. |
| 1201 | 1211 | */ |
| 1202 | 1212 |
| --- src/blob.c | |
| +++ src/blob.c | |
| @@ -477,10 +477,22 @@ | |
| 477 | void blob_resize(Blob *pBlob, unsigned int newSize){ |
| 478 | pBlob->xRealloc(pBlob, newSize+1); |
| 479 | pBlob->nUsed = newSize; |
| 480 | pBlob->aData[newSize] = 0; |
| 481 | } |
| 482 | |
| 483 | /* |
| 484 | ** Make sure a blob is nul-terminated and is not a pointer to unmanaged |
| 485 | ** space. Return a pointer to the data. |
| 486 | */ |
| @@ -1167,11 +1179,10 @@ | |
| 1167 | blob_reset(&b3); |
| 1168 | } |
| 1169 | fossil_print("ok\n"); |
| 1170 | } |
| 1171 | |
| 1172 | #if defined(_WIN32) || defined(__CYGWIN__) |
| 1173 | /* |
| 1174 | ** Convert every \n character in the given blob into \r\n. |
| 1175 | */ |
| 1176 | void blob_add_cr(Blob *p){ |
| 1177 | char *z = p->aData; |
| @@ -1191,11 +1202,10 @@ | |
| 1191 | if( (z[--j] = z[--i]) =='\n' ){ |
| 1192 | z[--j] = '\r'; |
| 1193 | } |
| 1194 | } |
| 1195 | } |
| 1196 | #endif |
| 1197 | |
| 1198 | /* |
| 1199 | ** Remove every \r character from the given blob, replacing each one with |
| 1200 | ** a \n character if it was not already part of a \r\n pair. |
| 1201 | */ |
| 1202 |
| --- src/blob.c | |
| +++ src/blob.c | |
| @@ -477,10 +477,22 @@ | |
| 477 | void blob_resize(Blob *pBlob, unsigned int newSize){ |
| 478 | pBlob->xRealloc(pBlob, newSize+1); |
| 479 | pBlob->nUsed = newSize; |
| 480 | pBlob->aData[newSize] = 0; |
| 481 | } |
| 482 | |
| 483 | /* |
| 484 | ** Ensures that the given blob has at least the given amount of memory |
| 485 | ** allocated to it. Does not modify pBlob->nUsed nor will it reduce |
| 486 | ** the currently-allocated amount of memory. |
| 487 | */ |
| 488 | void blob_reserve(Blob *pBlob, unsigned int newSize){ |
| 489 | if(newSize>pBlob->nUsed){ |
| 490 | pBlob->xRealloc(pBlob, newSize); |
| 491 | pBlob->aData[newSize] = 0; |
| 492 | } |
| 493 | } |
| 494 | |
| 495 | /* |
| 496 | ** Make sure a blob is nul-terminated and is not a pointer to unmanaged |
| 497 | ** space. Return a pointer to the data. |
| 498 | */ |
| @@ -1167,11 +1179,10 @@ | |
| 1179 | blob_reset(&b3); |
| 1180 | } |
| 1181 | fossil_print("ok\n"); |
| 1182 | } |
| 1183 | |
| 1184 | /* |
| 1185 | ** Convert every \n character in the given blob into \r\n. |
| 1186 | */ |
| 1187 | void blob_add_cr(Blob *p){ |
| 1188 | char *z = p->aData; |
| @@ -1191,11 +1202,10 @@ | |
| 1202 | if( (z[--j] = z[--i]) =='\n' ){ |
| 1203 | z[--j] = '\r'; |
| 1204 | } |
| 1205 | } |
| 1206 | } |
| 1207 | |
| 1208 | /* |
| 1209 | ** Remove every \r character from the given blob, replacing each one with |
| 1210 | ** a \n character if it was not already part of a \r\n pair. |
| 1211 | */ |
| 1212 |
+11
| --- src/cgi.c | ||
| +++ src/cgi.c | ||
| @@ -64,10 +64,21 @@ | ||
| 64 | 64 | #define PDT(x,y) cgi_parameter_trimmed((x),(y)) |
| 65 | 65 | #define PB(x) cgi_parameter_boolean(x) |
| 66 | 66 | #define PCK(x) cgi_parameter_checked(x,1) |
| 67 | 67 | #define PIF(x,y) cgi_parameter_checked(x,y) |
| 68 | 68 | |
| 69 | +/* | |
| 70 | +** Shortcut for the cgi_printf() routine. Instead of using the | |
| 71 | +** | |
| 72 | +** @ ... | |
| 73 | +** | |
| 74 | +** notation provided by the translate.c utility, you can also | |
| 75 | +** optionally use: | |
| 76 | +** | |
| 77 | +** CX(...) | |
| 78 | +*/ | |
| 79 | +#define CX cgi_printf | |
| 69 | 80 | |
| 70 | 81 | /* |
| 71 | 82 | ** Destinations for output text. |
| 72 | 83 | */ |
| 73 | 84 | #define CGI_HEADER 0 |
| 74 | 85 |
| --- src/cgi.c | |
| +++ src/cgi.c | |
| @@ -64,10 +64,21 @@ | |
| 64 | #define PDT(x,y) cgi_parameter_trimmed((x),(y)) |
| 65 | #define PB(x) cgi_parameter_boolean(x) |
| 66 | #define PCK(x) cgi_parameter_checked(x,1) |
| 67 | #define PIF(x,y) cgi_parameter_checked(x,y) |
| 68 | |
| 69 | |
| 70 | /* |
| 71 | ** Destinations for output text. |
| 72 | */ |
| 73 | #define CGI_HEADER 0 |
| 74 |
| --- src/cgi.c | |
| +++ src/cgi.c | |
| @@ -64,10 +64,21 @@ | |
| 64 | #define PDT(x,y) cgi_parameter_trimmed((x),(y)) |
| 65 | #define PB(x) cgi_parameter_boolean(x) |
| 66 | #define PCK(x) cgi_parameter_checked(x,1) |
| 67 | #define PIF(x,y) cgi_parameter_checked(x,y) |
| 68 | |
| 69 | /* |
| 70 | ** Shortcut for the cgi_printf() routine. Instead of using the |
| 71 | ** |
| 72 | ** @ ... |
| 73 | ** |
| 74 | ** notation provided by the translate.c utility, you can also |
| 75 | ** optionally use: |
| 76 | ** |
| 77 | ** CX(...) |
| 78 | */ |
| 79 | #define CX cgi_printf |
| 80 | |
| 81 | /* |
| 82 | ** Destinations for output text. |
| 83 | */ |
| 84 | #define CGI_HEADER 0 |
| 85 |
+22
-11
| --- src/checkin.c | ||
| +++ src/checkin.c | ||
| @@ -1399,10 +1399,28 @@ | ||
| 1399 | 1399 | g.aCommitFile[jj] = 0; |
| 1400 | 1400 | bag_clear(&toCommit); |
| 1401 | 1401 | } |
| 1402 | 1402 | return result; |
| 1403 | 1403 | } |
| 1404 | + | |
| 1405 | +/* | |
| 1406 | +** Returns true if the checkin identified by the first parameter is | |
| 1407 | +** older than the given (valid) date/time string, else returns false. | |
| 1408 | +** Also returns true if rid does not refer to a checkin, but it is not | |
| 1409 | +** intended to be used for that case. | |
| 1410 | +*/ | |
| 1411 | +int checkin_is_younger( | |
| 1412 | + int rid, /* The record ID of the ancestor */ | |
| 1413 | + const char *zDate /* Date & time of the current check-in */ | |
| 1414 | +){ | |
| 1415 | + return db_exists( | |
| 1416 | + "SELECT 1 FROM event" | |
| 1417 | + " WHERE datetime(mtime)>=%Q" | |
| 1418 | + " AND type='ci' AND objid=%d", | |
| 1419 | + zDate, rid | |
| 1420 | + ) ? 0 : 1; | |
| 1421 | +} | |
| 1404 | 1422 | |
| 1405 | 1423 | /* |
| 1406 | 1424 | ** Make sure the current check-in with timestamp zDate is younger than its |
| 1407 | 1425 | ** ancestor identified rid and zUuid. Throw a fatal error if not. |
| 1408 | 1426 | */ |
| @@ -1410,23 +1428,18 @@ | ||
| 1410 | 1428 | int rid, /* The record ID of the ancestor */ |
| 1411 | 1429 | const char *zUuid, /* The artifact ID of the ancestor */ |
| 1412 | 1430 | const char *zDate /* Date & time of the current check-in */ |
| 1413 | 1431 | ){ |
| 1414 | 1432 | #ifndef FOSSIL_ALLOW_OUT_OF_ORDER_DATES |
| 1415 | - int b; | |
| 1416 | - b = db_exists( | |
| 1417 | - "SELECT 1 FROM event" | |
| 1418 | - " WHERE datetime(mtime)>=%Q" | |
| 1419 | - " AND type='ci' AND objid=%d", | |
| 1420 | - zDate, rid | |
| 1421 | - ); | |
| 1422 | - if( b ){ | |
| 1433 | + if(checkin_is_younger(rid,zDate)==0){ | |
| 1423 | 1434 | fossil_fatal("ancestor check-in [%S] (%s) is not older (clock skew?)" |
| 1424 | 1435 | " Use --allow-older to override.", zUuid, zDate); |
| 1425 | 1436 | } |
| 1426 | 1437 | #endif |
| 1427 | 1438 | } |
| 1439 | + | |
| 1440 | + | |
| 1428 | 1441 | |
| 1429 | 1442 | /* |
| 1430 | 1443 | ** zDate should be a valid date string. Convert this string into the |
| 1431 | 1444 | ** format YYYY-MM-DDTHH:MM:SS. If the string is not a valid date, |
| 1432 | 1445 | ** print a fatal error and quit. |
| @@ -2329,13 +2342,11 @@ | ||
| 2329 | 2342 | ** Do not allow a commit against a closed leaf unless the commit |
| 2330 | 2343 | ** ends up on a different branch. |
| 2331 | 2344 | */ |
| 2332 | 2345 | if( |
| 2333 | 2346 | /* parent check-in has the "closed" tag... */ |
| 2334 | - db_exists("SELECT 1 FROM tagxref" | |
| 2335 | - " WHERE tagid=%d AND rid=%d AND tagtype>0", | |
| 2336 | - TAG_CLOSED, vid) | |
| 2347 | + leaf_is_closed(vid) | |
| 2337 | 2348 | /* ... and the new check-in has no --branch option or the --branch |
| 2338 | 2349 | ** option does not actually change the branch */ |
| 2339 | 2350 | && (sCiInfo.zBranch==0 |
| 2340 | 2351 | || db_exists("SELECT 1 FROM tagxref" |
| 2341 | 2352 | " WHERE tagid=%d AND rid=%d AND tagtype>0" |
| 2342 | 2353 |
| --- src/checkin.c | |
| +++ src/checkin.c | |
| @@ -1399,10 +1399,28 @@ | |
| 1399 | g.aCommitFile[jj] = 0; |
| 1400 | bag_clear(&toCommit); |
| 1401 | } |
| 1402 | return result; |
| 1403 | } |
| 1404 | |
| 1405 | /* |
| 1406 | ** Make sure the current check-in with timestamp zDate is younger than its |
| 1407 | ** ancestor identified rid and zUuid. Throw a fatal error if not. |
| 1408 | */ |
| @@ -1410,23 +1428,18 @@ | |
| 1410 | int rid, /* The record ID of the ancestor */ |
| 1411 | const char *zUuid, /* The artifact ID of the ancestor */ |
| 1412 | const char *zDate /* Date & time of the current check-in */ |
| 1413 | ){ |
| 1414 | #ifndef FOSSIL_ALLOW_OUT_OF_ORDER_DATES |
| 1415 | int b; |
| 1416 | b = db_exists( |
| 1417 | "SELECT 1 FROM event" |
| 1418 | " WHERE datetime(mtime)>=%Q" |
| 1419 | " AND type='ci' AND objid=%d", |
| 1420 | zDate, rid |
| 1421 | ); |
| 1422 | if( b ){ |
| 1423 | fossil_fatal("ancestor check-in [%S] (%s) is not older (clock skew?)" |
| 1424 | " Use --allow-older to override.", zUuid, zDate); |
| 1425 | } |
| 1426 | #endif |
| 1427 | } |
| 1428 | |
| 1429 | /* |
| 1430 | ** zDate should be a valid date string. Convert this string into the |
| 1431 | ** format YYYY-MM-DDTHH:MM:SS. If the string is not a valid date, |
| 1432 | ** print a fatal error and quit. |
| @@ -2329,13 +2342,11 @@ | |
| 2329 | ** Do not allow a commit against a closed leaf unless the commit |
| 2330 | ** ends up on a different branch. |
| 2331 | */ |
| 2332 | if( |
| 2333 | /* parent check-in has the "closed" tag... */ |
| 2334 | db_exists("SELECT 1 FROM tagxref" |
| 2335 | " WHERE tagid=%d AND rid=%d AND tagtype>0", |
| 2336 | TAG_CLOSED, vid) |
| 2337 | /* ... and the new check-in has no --branch option or the --branch |
| 2338 | ** option does not actually change the branch */ |
| 2339 | && (sCiInfo.zBranch==0 |
| 2340 | || db_exists("SELECT 1 FROM tagxref" |
| 2341 | " WHERE tagid=%d AND rid=%d AND tagtype>0" |
| 2342 |
| --- src/checkin.c | |
| +++ src/checkin.c | |
| @@ -1399,10 +1399,28 @@ | |
| 1399 | g.aCommitFile[jj] = 0; |
| 1400 | bag_clear(&toCommit); |
| 1401 | } |
| 1402 | return result; |
| 1403 | } |
| 1404 | |
| 1405 | /* |
| 1406 | ** Returns true if the checkin identified by the first parameter is |
| 1407 | ** older than the given (valid) date/time string, else returns false. |
| 1408 | ** Also returns true if rid does not refer to a checkin, but it is not |
| 1409 | ** intended to be used for that case. |
| 1410 | */ |
| 1411 | int checkin_is_younger( |
| 1412 | int rid, /* The record ID of the ancestor */ |
| 1413 | const char *zDate /* Date & time of the current check-in */ |
| 1414 | ){ |
| 1415 | return db_exists( |
| 1416 | "SELECT 1 FROM event" |
| 1417 | " WHERE datetime(mtime)>=%Q" |
| 1418 | " AND type='ci' AND objid=%d", |
| 1419 | zDate, rid |
| 1420 | ) ? 0 : 1; |
| 1421 | } |
| 1422 | |
| 1423 | /* |
| 1424 | ** Make sure the current check-in with timestamp zDate is younger than its |
| 1425 | ** ancestor identified rid and zUuid. Throw a fatal error if not. |
| 1426 | */ |
| @@ -1410,23 +1428,18 @@ | |
| 1428 | int rid, /* The record ID of the ancestor */ |
| 1429 | const char *zUuid, /* The artifact ID of the ancestor */ |
| 1430 | const char *zDate /* Date & time of the current check-in */ |
| 1431 | ){ |
| 1432 | #ifndef FOSSIL_ALLOW_OUT_OF_ORDER_DATES |
| 1433 | if(checkin_is_younger(rid,zDate)==0){ |
| 1434 | fossil_fatal("ancestor check-in [%S] (%s) is not older (clock skew?)" |
| 1435 | " Use --allow-older to override.", zUuid, zDate); |
| 1436 | } |
| 1437 | #endif |
| 1438 | } |
| 1439 | |
| 1440 | |
| 1441 | |
| 1442 | /* |
| 1443 | ** zDate should be a valid date string. Convert this string into the |
| 1444 | ** format YYYY-MM-DDTHH:MM:SS. If the string is not a valid date, |
| 1445 | ** print a fatal error and quit. |
| @@ -2329,13 +2342,11 @@ | |
| 2342 | ** Do not allow a commit against a closed leaf unless the commit |
| 2343 | ** ends up on a different branch. |
| 2344 | */ |
| 2345 | if( |
| 2346 | /* parent check-in has the "closed" tag... */ |
| 2347 | leaf_is_closed(vid) |
| 2348 | /* ... and the new check-in has no --branch option or the --branch |
| 2349 | ** option does not actually change the branch */ |
| 2350 | && (sCiInfo.zBranch==0 |
| 2351 | || db_exists("SELECT 1 FROM tagxref" |
| 2352 | " WHERE tagid=%d AND rid=%d AND tagtype>0" |
| 2353 |
+1
| --- src/configure.c | ||
| +++ src/configure.c | ||
| @@ -148,10 +148,11 @@ | ||
| 148 | 148 | { "parent-project-name", CONFIGSET_PROJ }, |
| 149 | 149 | { "hash-policy", CONFIGSET_PROJ }, |
| 150 | 150 | { "comment-format", CONFIGSET_PROJ }, |
| 151 | 151 | { "mimetypes", CONFIGSET_PROJ }, |
| 152 | 152 | { "forbid-delta-manifests", CONFIGSET_PROJ }, |
| 153 | + { "fileedit-glob", CONFIGSET_PROJ }, | |
| 153 | 154 | |
| 154 | 155 | #ifdef FOSSIL_ENABLE_LEGACY_MV_RM |
| 155 | 156 | { "mv-rm-files", CONFIGSET_PROJ }, |
| 156 | 157 | #endif |
| 157 | 158 | |
| 158 | 159 |
| --- src/configure.c | |
| +++ src/configure.c | |
| @@ -148,10 +148,11 @@ | |
| 148 | { "parent-project-name", CONFIGSET_PROJ }, |
| 149 | { "hash-policy", CONFIGSET_PROJ }, |
| 150 | { "comment-format", CONFIGSET_PROJ }, |
| 151 | { "mimetypes", CONFIGSET_PROJ }, |
| 152 | { "forbid-delta-manifests", CONFIGSET_PROJ }, |
| 153 | |
| 154 | #ifdef FOSSIL_ENABLE_LEGACY_MV_RM |
| 155 | { "mv-rm-files", CONFIGSET_PROJ }, |
| 156 | #endif |
| 157 | |
| 158 |
| --- src/configure.c | |
| +++ src/configure.c | |
| @@ -148,10 +148,11 @@ | |
| 148 | { "parent-project-name", CONFIGSET_PROJ }, |
| 149 | { "hash-policy", CONFIGSET_PROJ }, |
| 150 | { "comment-format", CONFIGSET_PROJ }, |
| 151 | { "mimetypes", CONFIGSET_PROJ }, |
| 152 | { "forbid-delta-manifests", CONFIGSET_PROJ }, |
| 153 | { "fileedit-glob", CONFIGSET_PROJ }, |
| 154 | |
| 155 | #ifdef FOSSIL_ENABLE_LEGACY_MV_RM |
| 156 | { "mv-rm-files", CONFIGSET_PROJ }, |
| 157 | #endif |
| 158 | |
| 159 |
M
src/db.c
+9
| --- src/db.c | ||
| +++ src/db.c | ||
| @@ -3421,10 +3421,19 @@ | ||
| 3421 | 3421 | ** SETTING: exec-rel-paths boolean default=off |
| 3422 | 3422 | ** When executing certain external commands (e.g. diff and |
| 3423 | 3423 | ** gdiff), use relative paths. |
| 3424 | 3424 | */ |
| 3425 | 3425 | #endif |
| 3426 | + | |
| 3427 | +/* | |
| 3428 | +** SETTING: fileedit-glob width=40 block-text | |
| 3429 | +** A comma- or newline-separated list of globs of filenames | |
| 3430 | +** which are allowed to be edited using the /fileedit page. | |
| 3431 | +** An empty list prohibits editing via that page. Note that | |
| 3432 | +** it cannot edit binary files, so the list should not | |
| 3433 | +** contain any globs for, e.g., images or PDFs. | |
| 3434 | +*/ | |
| 3426 | 3435 | /* |
| 3427 | 3436 | ** SETTING: gdiff-command width=40 default=gdiff |
| 3428 | 3437 | ** The value is an external command to run when performing a graphical |
| 3429 | 3438 | ** diff. If undefined, text diff will be used. |
| 3430 | 3439 | */ |
| 3431 | 3440 |
| --- src/db.c | |
| +++ src/db.c | |
| @@ -3421,10 +3421,19 @@ | |
| 3421 | ** SETTING: exec-rel-paths boolean default=off |
| 3422 | ** When executing certain external commands (e.g. diff and |
| 3423 | ** gdiff), use relative paths. |
| 3424 | */ |
| 3425 | #endif |
| 3426 | /* |
| 3427 | ** SETTING: gdiff-command width=40 default=gdiff |
| 3428 | ** The value is an external command to run when performing a graphical |
| 3429 | ** diff. If undefined, text diff will be used. |
| 3430 | */ |
| 3431 |
| --- src/db.c | |
| +++ src/db.c | |
| @@ -3421,10 +3421,19 @@ | |
| 3421 | ** SETTING: exec-rel-paths boolean default=off |
| 3422 | ** When executing certain external commands (e.g. diff and |
| 3423 | ** gdiff), use relative paths. |
| 3424 | */ |
| 3425 | #endif |
| 3426 | |
| 3427 | /* |
| 3428 | ** SETTING: fileedit-glob width=40 block-text |
| 3429 | ** A comma- or newline-separated list of globs of filenames |
| 3430 | ** which are allowed to be edited using the /fileedit page. |
| 3431 | ** An empty list prohibits editing via that page. Note that |
| 3432 | ** it cannot edit binary files, so the list should not |
| 3433 | ** contain any globs for, e.g., images or PDFs. |
| 3434 | */ |
| 3435 | /* |
| 3436 | ** SETTING: gdiff-command width=40 default=gdiff |
| 3437 | ** The value is an external command to run when performing a graphical |
| 3438 | ** diff. If undefined, text diff will be used. |
| 3439 | */ |
| 3440 |
M
src/db.c
+9
| --- src/db.c | ||
| +++ src/db.c | ||
| @@ -3421,10 +3421,19 @@ | ||
| 3421 | 3421 | ** SETTING: exec-rel-paths boolean default=off |
| 3422 | 3422 | ** When executing certain external commands (e.g. diff and |
| 3423 | 3423 | ** gdiff), use relative paths. |
| 3424 | 3424 | */ |
| 3425 | 3425 | #endif |
| 3426 | + | |
| 3427 | +/* | |
| 3428 | +** SETTING: fileedit-glob width=40 block-text | |
| 3429 | +** A comma- or newline-separated list of globs of filenames | |
| 3430 | +** which are allowed to be edited using the /fileedit page. | |
| 3431 | +** An empty list prohibits editing via that page. Note that | |
| 3432 | +** it cannot edit binary files, so the list should not | |
| 3433 | +** contain any globs for, e.g., images or PDFs. | |
| 3434 | +*/ | |
| 3426 | 3435 | /* |
| 3427 | 3436 | ** SETTING: gdiff-command width=40 default=gdiff |
| 3428 | 3437 | ** The value is an external command to run when performing a graphical |
| 3429 | 3438 | ** diff. If undefined, text diff will be used. |
| 3430 | 3439 | */ |
| 3431 | 3440 |
| --- src/db.c | |
| +++ src/db.c | |
| @@ -3421,10 +3421,19 @@ | |
| 3421 | ** SETTING: exec-rel-paths boolean default=off |
| 3422 | ** When executing certain external commands (e.g. diff and |
| 3423 | ** gdiff), use relative paths. |
| 3424 | */ |
| 3425 | #endif |
| 3426 | /* |
| 3427 | ** SETTING: gdiff-command width=40 default=gdiff |
| 3428 | ** The value is an external command to run when performing a graphical |
| 3429 | ** diff. If undefined, text diff will be used. |
| 3430 | */ |
| 3431 |
| --- src/db.c | |
| +++ src/db.c | |
| @@ -3421,10 +3421,19 @@ | |
| 3421 | ** SETTING: exec-rel-paths boolean default=off |
| 3422 | ** When executing certain external commands (e.g. diff and |
| 3423 | ** gdiff), use relative paths. |
| 3424 | */ |
| 3425 | #endif |
| 3426 | |
| 3427 | /* |
| 3428 | ** SETTING: fileedit-glob width=40 block-text |
| 3429 | ** A comma- or newline-separated list of globs of filenames |
| 3430 | ** which are allowed to be edited using the /fileedit page. |
| 3431 | ** An empty list prohibits editing via that page. Note that |
| 3432 | ** it cannot edit binary files, so the list should not |
| 3433 | ** contain any globs for, e.g., images or PDFs. |
| 3434 | */ |
| 3435 | /* |
| 3436 | ** SETTING: gdiff-command width=40 default=gdiff |
| 3437 | ** The value is an external command to run when performing a graphical |
| 3438 | ** diff. If undefined, text diff will be used. |
| 3439 | */ |
| 3440 |
+15
| --- src/default_css.txt | ||
| +++ src/default_css.txt | ||
| @@ -860,10 +860,25 @@ | ||
| 860 | 860 | // } |
| 861 | 861 | // #setup_skinedit_css_defaults > tbody > tr > td:nth-of-type(2) > div { |
| 862 | 862 | // max-width: 30em; |
| 863 | 863 | // overflow: auto; |
| 864 | 864 | // } |
| 865 | +.error { | |
| 866 | + color: darkred; | |
| 867 | + background: yellow; | |
| 868 | +} | |
| 869 | +.warning { | |
| 870 | + color: darkred; | |
| 871 | + background: yellow; | |
| 872 | + opacity: 0.7; | |
| 873 | +} | |
| 874 | +.hidden { | |
| 875 | + position: absolute; | |
| 876 | + opacity: 0; | |
| 877 | + pointer-events: none; | |
| 878 | + display: none; | |
| 879 | +} | |
| 865 | 880 | input { |
| 866 | 881 | max-width: 95%; |
| 867 | 882 | } |
| 868 | 883 | textarea { |
| 869 | 884 | max-width: 95%; |
| 870 | 885 |
| --- src/default_css.txt | |
| +++ src/default_css.txt | |
| @@ -860,10 +860,25 @@ | |
| 860 | // } |
| 861 | // #setup_skinedit_css_defaults > tbody > tr > td:nth-of-type(2) > div { |
| 862 | // max-width: 30em; |
| 863 | // overflow: auto; |
| 864 | // } |
| 865 | input { |
| 866 | max-width: 95%; |
| 867 | } |
| 868 | textarea { |
| 869 | max-width: 95%; |
| 870 |
| --- src/default_css.txt | |
| +++ src/default_css.txt | |
| @@ -860,10 +860,25 @@ | |
| 860 | // } |
| 861 | // #setup_skinedit_css_defaults > tbody > tr > td:nth-of-type(2) > div { |
| 862 | // max-width: 30em; |
| 863 | // overflow: auto; |
| 864 | // } |
| 865 | .error { |
| 866 | color: darkred; |
| 867 | background: yellow; |
| 868 | } |
| 869 | .warning { |
| 870 | color: darkred; |
| 871 | background: yellow; |
| 872 | opacity: 0.7; |
| 873 | } |
| 874 | .hidden { |
| 875 | position: absolute; |
| 876 | opacity: 0; |
| 877 | pointer-events: none; |
| 878 | display: none; |
| 879 | } |
| 880 | input { |
| 881 | max-width: 95%; |
| 882 | } |
| 883 | textarea { |
| 884 | max-width: 95%; |
| 885 |
+23
-4
| --- src/encode.c | ||
| +++ src/encode.c | ||
| @@ -377,15 +377,22 @@ | ||
| 377 | 377 | } |
| 378 | 378 | return c; |
| 379 | 379 | } |
| 380 | 380 | |
| 381 | 381 | /* |
| 382 | -** Encode a UTF8 string as a JSON string literal (without the surrounding | |
| 383 | -** "...") and return a pointer to the encoding. Space to hold the encoding | |
| 384 | -** is obtained from fossil_malloc() and must be freed by the caller. | |
| 382 | +** Encode a UTF8 string as a JSON string literal (with or without the | |
| 383 | +** surrounding "...", depending on whether the 2nd argument is true or | |
| 384 | +** false) and return a pointer to the encoding. Space to hold the | |
| 385 | +** encoding is obtained from fossil_malloc() and must be freed by the | |
| 386 | +** caller. | |
| 387 | +** | |
| 388 | +** If nOut is not NULL then it is assigned to the length, in bytes, of | |
| 389 | +** the returned string (its strlen(), not counting the terminating | |
| 390 | +** NUL). | |
| 385 | 391 | */ |
| 386 | -char *encode_json_string_literal(const char *zStr){ | |
| 392 | +char *encode_json_string_literal(const char *zStr, int fAddQuotes, | |
| 393 | + int * nOut){ | |
| 387 | 394 | const unsigned char *z; |
| 388 | 395 | char *zOut; |
| 389 | 396 | u32 c; |
| 390 | 397 | int n, i, j; |
| 391 | 398 | z = (const unsigned char*)zStr; |
| @@ -400,15 +407,21 @@ | ||
| 400 | 407 | n += 6; |
| 401 | 408 | } |
| 402 | 409 | }else{ |
| 403 | 410 | n++; |
| 404 | 411 | } |
| 412 | + } | |
| 413 | + if(fAddQuotes){ | |
| 414 | + n += 2; | |
| 405 | 415 | } |
| 406 | 416 | zOut = fossil_malloc(n+1); |
| 407 | 417 | if( zOut==0 ) return 0; |
| 408 | 418 | z = (const unsigned char*)zStr; |
| 409 | 419 | i = 0; |
| 420 | + if(fAddQuotes){ | |
| 421 | + zOut[i++] = '"'; | |
| 422 | + } | |
| 410 | 423 | while( (c = fossil_utf8_read(&z))!=0 ){ |
| 411 | 424 | if( c=='\\' ){ |
| 412 | 425 | zOut[i++] = '\\'; |
| 413 | 426 | zOut[i++] = c; |
| 414 | 427 | }else if( c<' ' || c>=0x7f ){ |
| @@ -427,11 +440,17 @@ | ||
| 427 | 440 | } |
| 428 | 441 | }else{ |
| 429 | 442 | zOut[i++] = c; |
| 430 | 443 | } |
| 431 | 444 | } |
| 445 | + if(fAddQuotes){ | |
| 446 | + zOut[i++] = '"'; | |
| 447 | + } | |
| 432 | 448 | zOut[i] = 0; |
| 449 | + if(nOut!=0){ | |
| 450 | + *nOut = i; | |
| 451 | + } | |
| 433 | 452 | return zOut; |
| 434 | 453 | } |
| 435 | 454 | |
| 436 | 455 | /* |
| 437 | 456 | ** The characters used for HTTP base64 encoding. |
| 438 | 457 | |
| 439 | 458 | ADDED src/fileedit.c |
| --- src/encode.c | |
| +++ src/encode.c | |
| @@ -377,15 +377,22 @@ | |
| 377 | } |
| 378 | return c; |
| 379 | } |
| 380 | |
| 381 | /* |
| 382 | ** Encode a UTF8 string as a JSON string literal (without the surrounding |
| 383 | ** "...") and return a pointer to the encoding. Space to hold the encoding |
| 384 | ** is obtained from fossil_malloc() and must be freed by the caller. |
| 385 | */ |
| 386 | char *encode_json_string_literal(const char *zStr){ |
| 387 | const unsigned char *z; |
| 388 | char *zOut; |
| 389 | u32 c; |
| 390 | int n, i, j; |
| 391 | z = (const unsigned char*)zStr; |
| @@ -400,15 +407,21 @@ | |
| 400 | n += 6; |
| 401 | } |
| 402 | }else{ |
| 403 | n++; |
| 404 | } |
| 405 | } |
| 406 | zOut = fossil_malloc(n+1); |
| 407 | if( zOut==0 ) return 0; |
| 408 | z = (const unsigned char*)zStr; |
| 409 | i = 0; |
| 410 | while( (c = fossil_utf8_read(&z))!=0 ){ |
| 411 | if( c=='\\' ){ |
| 412 | zOut[i++] = '\\'; |
| 413 | zOut[i++] = c; |
| 414 | }else if( c<' ' || c>=0x7f ){ |
| @@ -427,11 +440,17 @@ | |
| 427 | } |
| 428 | }else{ |
| 429 | zOut[i++] = c; |
| 430 | } |
| 431 | } |
| 432 | zOut[i] = 0; |
| 433 | return zOut; |
| 434 | } |
| 435 | |
| 436 | /* |
| 437 | ** The characters used for HTTP base64 encoding. |
| 438 | |
| 439 | DDED src/fileedit.c |
| --- src/encode.c | |
| +++ src/encode.c | |
| @@ -377,15 +377,22 @@ | |
| 377 | } |
| 378 | return c; |
| 379 | } |
| 380 | |
| 381 | /* |
| 382 | ** Encode a UTF8 string as a JSON string literal (with or without the |
| 383 | ** surrounding "...", depending on whether the 2nd argument is true or |
| 384 | ** false) and return a pointer to the encoding. Space to hold the |
| 385 | ** encoding is obtained from fossil_malloc() and must be freed by the |
| 386 | ** caller. |
| 387 | ** |
| 388 | ** If nOut is not NULL then it is assigned to the length, in bytes, of |
| 389 | ** the returned string (its strlen(), not counting the terminating |
| 390 | ** NUL). |
| 391 | */ |
| 392 | char *encode_json_string_literal(const char *zStr, int fAddQuotes, |
| 393 | int * nOut){ |
| 394 | const unsigned char *z; |
| 395 | char *zOut; |
| 396 | u32 c; |
| 397 | int n, i, j; |
| 398 | z = (const unsigned char*)zStr; |
| @@ -400,15 +407,21 @@ | |
| 407 | n += 6; |
| 408 | } |
| 409 | }else{ |
| 410 | n++; |
| 411 | } |
| 412 | } |
| 413 | if(fAddQuotes){ |
| 414 | n += 2; |
| 415 | } |
| 416 | zOut = fossil_malloc(n+1); |
| 417 | if( zOut==0 ) return 0; |
| 418 | z = (const unsigned char*)zStr; |
| 419 | i = 0; |
| 420 | if(fAddQuotes){ |
| 421 | zOut[i++] = '"'; |
| 422 | } |
| 423 | while( (c = fossil_utf8_read(&z))!=0 ){ |
| 424 | if( c=='\\' ){ |
| 425 | zOut[i++] = '\\'; |
| 426 | zOut[i++] = c; |
| 427 | }else if( c<' ' || c>=0x7f ){ |
| @@ -427,11 +440,17 @@ | |
| 440 | } |
| 441 | }else{ |
| 442 | zOut[i++] = c; |
| 443 | } |
| 444 | } |
| 445 | if(fAddQuotes){ |
| 446 | zOut[i++] = '"'; |
| 447 | } |
| 448 | zOut[i] = 0; |
| 449 | if(nOut!=0){ |
| 450 | *nOut = i; |
| 451 | } |
| 452 | return zOut; |
| 453 | } |
| 454 | |
| 455 | /* |
| 456 | ** The characters used for HTTP base64 encoding. |
| 457 | |
| 458 | DDED src/fileedit.c |
+4
| --- a/src/fileedit.c | ||
| +++ b/src/fileedit.c | ||
| @@ -0,0 +1,4 @@ | ||
| 1 | +; /* fil_0);aif(0!=zAjax | |
| 2 | + if(fileedit_glob()==0){ | |
| 3 | +error'"repository setting must be values matching files " | |
| 4 | + " |
| --- a/src/fileedit.c | |
| +++ b/src/fileedit.c | |
| @@ -0,0 +1,4 @@ | |
| --- a/src/fileedit.c | |
| +++ b/src/fileedit.c | |
| @@ -0,0 +1,4 @@ | |
| 1 | ; /* fil_0);aif(0!=zAjax |
| 2 | if(fileedit_glob()==0){ |
| 3 | error'"repository setting must be values matching files " |
| 4 | " |
+3
| --- src/finfo.c | ||
| +++ src/finfo.c | ||
| @@ -625,10 +625,13 @@ | ||
| 625 | 625 | @ [blame]</a> |
| 626 | 626 | @ %z(href("%R/timeline?n=all&uf=%!S",zUuid))[check-ins using]</a> |
| 627 | 627 | if( fpid>0 ){ |
| 628 | 628 | @ %z(href("%R/fdiff?v1=%!S&v2=%!S",zPUuid,zUuid))[diff]</a> |
| 629 | 629 | } |
| 630 | + if( fileedit_is_editable(zFilename) ){ | |
| 631 | + @ %z(href("%R/fileedit?filename=%T&checkin=%!S",zFilename,zCkin))[edit]</a> | |
| 632 | + } | |
| 630 | 633 | @ </span></span> |
| 631 | 634 | } |
| 632 | 635 | if( fDebug & FINFO_DEBUG_MLINK ){ |
| 633 | 636 | int ii; |
| 634 | 637 | char *zAncLink; |
| 635 | 638 | |
| 636 | 639 | ADDED src/fossil.bootstrap.js |
| 637 | 640 | ADDED src/fossil.confirmer.js |
| 638 | 641 | ADDED src/fossil.dom.js |
| 639 | 642 | ADDED src/fossil.fetch.js |
| 640 | 643 | ADDED src/fossil.page.fileedit.js |
| 641 | 644 | ADDED src/fossil.storage.js |
| 642 | 645 | ADDED src/fossil.tabs.js |
| --- src/finfo.c | |
| +++ src/finfo.c | |
| @@ -625,10 +625,13 @@ | |
| 625 | @ [blame]</a> |
| 626 | @ %z(href("%R/timeline?n=all&uf=%!S",zUuid))[check-ins using]</a> |
| 627 | if( fpid>0 ){ |
| 628 | @ %z(href("%R/fdiff?v1=%!S&v2=%!S",zPUuid,zUuid))[diff]</a> |
| 629 | } |
| 630 | @ </span></span> |
| 631 | } |
| 632 | if( fDebug & FINFO_DEBUG_MLINK ){ |
| 633 | int ii; |
| 634 | char *zAncLink; |
| 635 | |
| 636 | DDED src/fossil.bootstrap.js |
| 637 | DDED src/fossil.confirmer.js |
| 638 | DDED src/fossil.dom.js |
| 639 | DDED src/fossil.fetch.js |
| 640 | DDED src/fossil.page.fileedit.js |
| 641 | DDED src/fossil.storage.js |
| 642 | DDED src/fossil.tabs.js |
| --- src/finfo.c | |
| +++ src/finfo.c | |
| @@ -625,10 +625,13 @@ | |
| 625 | @ [blame]</a> |
| 626 | @ %z(href("%R/timeline?n=all&uf=%!S",zUuid))[check-ins using]</a> |
| 627 | if( fpid>0 ){ |
| 628 | @ %z(href("%R/fdiff?v1=%!S&v2=%!S",zPUuid,zUuid))[diff]</a> |
| 629 | } |
| 630 | if( fileedit_is_editable(zFilename) ){ |
| 631 | @ %z(href("%R/fileedit?filename=%T&checkin=%!S",zFilename,zCkin))[edit]</a> |
| 632 | } |
| 633 | @ </span></span> |
| 634 | } |
| 635 | if( fDebug & FINFO_DEBUG_MLINK ){ |
| 636 | int ii; |
| 637 | char *zAncLink; |
| 638 | |
| 639 | DDED src/fossil.bootstrap.js |
| 640 | DDED src/fossil.confirmer.js |
| 641 | DDED src/fossil.dom.js |
| 642 | DDED src/fossil.fetch.js |
| 643 | DDED src/fossil.page.fileedit.js |
| 644 | DDED src/fossil.storage.js |
| 645 | DDED src/fossil.tabs.js |
+349
| --- a/src/fossil.bootstrap.js | ||
| +++ b/src/fossil.bootstrap.js | ||
| @@ -0,0 +1,349 @@ | ||
| 1 | +"u})(wi,"u})(window); | |
| 2 | + | |
| 3 | + r}) ID, | |
| 4 | + the DOM element must support .valu | |
| 5 | + loaded after style.c: target "previewer" | |
| 6 | + element, WITH a leading '#', or the name of a method (see below). | |
| 7 | + | |
| 8 | + - data-f-preview-via: the name of a method (see below). | |
| 9 | + | |
| 10 | + - OPTIONAL data-f-preview-as-text: a numeric value. Explained below. | |
| 11 | + | |
| 12 | + ndow); | |
| 13 | + | |
| 14 | + r}) ID, | |
| 15 | + the DOM element must support .valu | |
| 16 | + loaded after style.c: target "previewer" | |
| 17 | + element, WIcontent. | |
| 18 | + | |
| 19 | + 2) Passes the content to | |
| 20 | + methodNamespace[f-data | |
| 21 | + | |
| 22 | + <button id='test-preview-connector' | |
| 23 | + data-f-preview-from='#fileedit-content-editor' // elem ID or method name | |
| 24 | + data-f-preview-via='myPreview' // method name | |
| 25 | + data-f-preview-to='#fileedit-tab-preview-wrapper' // elem ID or method name | |
| 26 | + >Preview update</button> | |
| 27 | + | |
| 28 | + And a sample data-f-preview-via method: | |
| 29 | + | |
| 30 | + fossil.page.myPreview = function(content,callback){ | |
| 31 | + const fd = new FormData(); | |
| 32 | + fd.append('foo', ...); | |
| 33 | + foss-preview-from element or, if r}) ID, | |
| 34 | + the DOM element must support .valu | |
| 35 | + loaded after style.c: target "previewer" | |
| 36 | + element, WITH a leading '#', or the name of a method (see below). | |
| 37 | + | |
| 38 | + - data-f-preview-via: the name of a method (see below). | |
| 39 | + | |
| 40 | + - OPTIONAL data-f-preview-as-text: a numeric value. Explained below. | |
| 41 | + | |
| 42 | + ndow); | |
| 43 | + | |
| 44 | + r}) ID, | |
| 45 | + the DOM element must support .valu | |
| 46 | + loaded after style.c: target "previewer" | |
| 47 | + element, WITH a leading '#', or the name of a method (see below). | |
| 48 | + | |
| 49 | + - data-f-preview-via: the name of a method (see below). | |
| 50 | + | |
| 51 | + - OPTIONAL data-f-preview-as-text: a numeric value. Explained below. | |
| 52 | + | |
| 53 | + Each element gets a click handler added to it which does the | |
| 54 | + following: | |
| 55 | + | |
| 56 | + 1) Reads the content from its data-f-preview-from element or, if | |
| 57 | + that property refers to a method, calls the method without | |
| 58 | + arguments and uses its result as the content. | |
| 59 | + | |
| 60 | + 2) Passes the content to | |
| 61 | + methodNamespace[f-data | |
| 62 | + | |
| 63 | + <button id='test-preview-connector' | |
| 64 | + data-f-preview-from='#fileedit-content-editor' // elem ID or method name | |
| 65 | + data-f-preview-via='myPreview' // method name | |
| 66 | + data-f-preview-to='#fileedit-tab-preview-wrapper' // elem ID or method name | |
| 67 | + >Preview update</button> | |
| 68 | + | |
| 69 | + And a sample data-f-preview-via method: | |
| 70 | + | |
| 71 | + fossil.page.myPreview = function(content,callback){ | |
| 72 | + const fd = new FormData(); | |
| 73 | + fd.append('foo', ...); | |
| 74 | + fossil.fetch('preview_forumpost',{ | |
| 75 | + payload: fd, | |
| 76 | + onload: callback8@KO,Ao: onerror: (e)=>{ // only if app-specific handling is needed | |
| 77 | + fossil.fetch.onerror(e); // default impl | |
| 78 | + ... any app-specific error reporting ... | |
| 79 | + } | |
| 80 | + }); | |
| 81 | + }; | |
| 82 | + | |
| 83 | + Then connect the parts with: | |
| 84 | + | |
| 85 | + fossil.connectPagePreviewers('#test-preview-connector'); | |
| 86 | + | |
| 87 | + Note that the data-f-preview-from, data-f-preview-via, and | |
| 88 | + data-f-preview-to selector are not resolved until the button is | |
| 89 | + actually clicked, so they need not exist in the DOM at the | |
| 90 | + instant when the connection is set up, so long as they can be | |
| 91 | + resolved when the preview-refreshing element is clicked. | |
| 92 | + */ | |
| 93 | + F.connectPagePreviewers = function f(selector,methodNamespace){Q@1BC,P:selector){ | |
| 94 | + selectorP@2E8,4n:All(selector); | |
| 95 | + }else if(!selector.forEach){ | |
| 96 | + selector = [selector]; | |
| 97 | + } | |
| 98 | + if(!methodNamespace){ | |
| 99 | + methodNamespace = F.page; | |
| 100 | + } | |
| 101 | + selector.forEach(function(e){ | |
| 102 | + e.addEventListener( | |
| 103 | + 'click', function(r){ | |
| 104 | + const eTo = '#'===e.dataset.fPreviewTo[0] | |
| 105 | + ?O@2EA,2O:e.dataset.fPreviewTo) | |
| 106 | + : methodNamespace[e.dataset.fPreviewTo], | |
| 107 | + eFrom = '#'===e.dataset.fPreviewFrom[0] | |
| 108 | + ?O@2EA,7y:e.dataset.fPreviewFrom) | |
| 109 | + : methodNamespace[e.dataset.fPreviewFrom], | |
| 110 | + asText = +(e.dataset.fPreviewAsText || 0); | |
| 111 | + eTo.textContent = "Fetching preview..."; | |
| 112 | + methodNamespace[e.dataset.fPreviewVia]( | |
| 113 | + (eFrom instanceof Function ? eFrom() : eFrom.value), | |
| 114 | + (r)=>{ | |
| 115 | + if(eTo instanceof Function) eTo(r||''); | |
| 116 | + else eTo[asText ? 'textContent' : 'innerHTML'] = r||''; | |
| 117 | + } | |
| 118 | + ); | |
| 119 | + }, false | |
| 120 | + ); | |
| 121 | + }a@21k,3N@1al,bb@1e8,3rxdxh; | |
| 122 | + ement id of the target "previewer" | |
| 123 | + element, WITH a leading '#', or the name of a method (see below). | |
| 124 | + | |
| 125 | + - data-f-preview-via: the name of a method (see below). | |
| 126 | + | |
| 127 | + - OPTIONAL data-f-preview-as-text: a numeric value. Explained below. | |
| 128 | + | |
| 129 | + Each element gets a click handler added to it which does the | |
| 130 | + following: | |
| 131 | + | |
| 132 | + 1) Reads the content from its data-f-preview-from element or, if | |
| 133 | + that property refers to a method, calls the method without | |
| 134 | + arguments and uses its result as the content. | |
| 135 | + | |
| 136 | + 2) Passes the content to | |
| 137 | + methodNamespace[f-data | |
| 138 | + | |
| 139 | + <button id='test-preview-connector' | |
| 140 | + data-f-preview-from='#fileedit-content-editor' // elem ID or method name | |
| 141 | + data-f-preview-via='myPreview' // method name | |
| 142 | + data-f-preview-to='#fileedit-tab-preview-wrapper' // elem ID or method name | |
| 143 | + >Preview update</button> | |
| 144 | + | |
| 145 | + And a sample data-f-preview-via method: | |
| 146 | + | |
| 147 | + fossil.page.myPreview = function(content,callback){ | |
| 148 | + const fd = new FormData(); | |
| 149 | + fd.append('foo', ...); | |
| 150 | + fossil.fetch('preview_forumpost',{ | |
| 151 | + payload: fd, | |
| 152 | + onload: callback8@KO,Ao: onerror: (e)=>{ // only if app-specific handling is needed | |
| 153 | + fossil.fetch.onerror(e); // default impl | |
| 154 | + ... any app-specific error reporting ... | |
| 155 | + } | |
| 156 | + }); | |
| 157 | + }; | |
| 158 | + | |
| 159 | + Then connect the parts with: | |
| 160 | + | |
| 161 | + fossil.connectPagePreviewers('#test-preview-connector'); | |
| 162 | + | |
| 163 | + Note that the data-f-preview-from, data-f-preview-via, and | |
| 164 | + data-f-preview-to selector are not resolved until the button is | |
| 165 | + actually clicked, so they need not exist in the DOM at the | |
| 166 | + instant when the connection is set up, so long as they can be | |
| 167 | + resolved when the preview-refreshing element is clicked. | |
| 168 | + */ | |
| 169 | + F.connectPagePreviewers = function f(selector,methodNamespace){Q@1BC,P:selector){ | |
| 170 | + selectorP@2E8,4n:All(selector); | |
| 171 | + }else if(!selector.forEach){ | |
| 172 | + selector = [selector]; | |
| 173 | + } | |
| 174 | + if(!methodNamespace){ | |
| 175 | + methodNamespace = F.page; | |
| 176 | + } | |
| 177 | + selector.forEach(function(e){ | |
| 178 | + e.addEventListener( | |
| 179 | + 'click', function(r){ | |
| 180 | + const eTo = '#'===e.dataset.fPreviewTo[0] | |
| 181 | + ?O@2EA,2O:e.dataset.fPreviewTo) | |
| 182 | + : methodNamespace[e.dataset.fPreviewTo], | |
| 183 | + eFrom = '#'===e.dataset.fPreviewFrom[0] | |
| 184 | + ?O@2EA,7y:e.dataset.fPreviewFrom) | |
| 185 | + : methodNamespace[e.dataset.fPreviewFrom], | |
| 186 | + asText = +(e.dataset.fPreviewAsText || 0); | |
| 187 | + eTo.textContent = "Fetching preview..."; | |
| 188 | + methodNamespace[e.dataset.fPreviewVia]( | |
| 189 | + (eFrom instanceof Function ? eFrom() : eFrom.value), | |
| 190 | + (r)=>{ | |
| 191 | + if(eTo instanceof Function) eTo(r||''); | |
| 192 | + else eTo[asText ? 'textContent' : 'innerHTML'] = r||''; | |
| 193 | + } | |
| 194 | + ); | |
| 195 | + }, false | |
| 196 | + ); | |
| 197 | + }a@21k,3N@1al,bb@1e8,3rxdxh;"u})(wi,"u})(window); | |
| 198 | + | |
| 199 | + r}) ID, | |
| 200 | + the DOM element must support .valu | |
| 201 | + loaded after style.c: target "previewer" | |
| 202 | + element, WITH a leading '#', or the name of a method (see below). | |
| 203 | + | |
| 204 | + - data-f-preview-via: the name of a method (see below). | |
| 205 | + | |
| 206 | + - OPTIONAL data-f-preview-as-text: a numeric value. Explained below. | |
| 207 | + | |
| 208 | + ndow); | |
| 209 | + | |
| 210 | + r}) ID, | |
| 211 | + the DOM element must support .valu | |
| 212 | + loaded after style.c: target "previewer" | |
| 213 | + element, WITH a leading '#', or the name of a method (see below). | |
| 214 | + | |
| 215 | + - data-f-preview-via: the name of a method (see below). | |
| 216 | + | |
| 217 | + - OPTIONAL data-f-preview-as-text: a numeric value. Explained below. | |
| 218 | + | |
| 219 | + Each element gets a click handler added to it which does the | |
| 220 | + following: | |
| 221 | + | |
| 222 | + 1) Reads the content from its data-f-preview-from element or, if | |
| 223 | + that property refers to a method, calls the method without | |
| 224 | + arguments and uses its result as the content. | |
| 225 | + | |
| 226 | + 2) Passes the content to | |
| 227 | + methodNamespace[f-data | |
| 228 | + | |
| 229 | + <button id='test-preview-connector' | |
| 230 | + data-f-preview-from='#fileedit-content-editor' // elem ID or method name | |
| 231 | + data-f-preview-via='myPreview' // method name | |
| 232 | + data-f-preview-to='#fileedit-tab-preview-wrapper' // elem ID or method name | |
| 233 | + >Preview update</button> | |
| 234 | + | |
| 235 | + And a sample data-f-preview-via method: | |
| 236 | + | |
| 237 | + fossil.page.myPreview = function(content,callback){ | |
| 238 | + const fd = new FormData(); | |
| 239 | + fd.append('foo', ...); | |
| 240 | + fossil.fetch('preview_forumpost',{ | |
| 241 | + payload: fd, | |
| 242 | + onload: callback8@KO,Ao: onerror: (e)=>{ // only if app-specific handling is needed | |
| 243 | + fossil.fetch.onerror(e); // default impl | |
| 244 | + ... any app-specific error reporting ... | |
| 245 | + } | |
| 246 | + }); | |
| 247 | + }; | |
| 248 | + | |
| 249 | + Then connect the parts with: | |
| 250 | + | |
| 251 | + fossil.connectPagePreviewers('#test-preview-connector'); | |
| 252 | + | |
| 253 | + Note that the data-f-preview-from, data-f-preview-via, and | |
| 254 | + data-f-preview-to selector are not resolved until the button is | |
| 255 | + actually clicked, so they need not exist in the DOM at the | |
| 256 | + instant when the connection is set up, so long as they can be | |
| 257 | + resolved when the preview-refreshing element is clicked. | |
| 258 | + */ | |
| 259 | + F.connectPagePreviewers = function f(selector,methodNamespace){Q@1BC,P:selector){ | |
| 260 | + selectorP@2E8,4n:All(selector); | |
| 261 | + }else if(!selector.forEach){ | |
| 262 | + selector = [selector]; | |
| 263 | + } | |
| 264 | + if(!methodNamespace){ | |
| 265 | + methodNamespace = F.page; | |
| 266 | + } | |
| 267 | + selector.forEach(function(e){ | |
| 268 | + e.addEventListener( | |
| 269 | + 'click', function(r){ | |
| 270 | + const eTo = '#'===e.dataset.fPreviewTo[0] | |
| 271 | + ?O@2EA,2O:e.dataset.fPreviewTo) | |
| 272 | + : methodNamespace[e.dataset.fPreviewTo], | |
| 273 | + eFrom = '#'===e.dataset.fPreviewFrom[0] | |
| 274 | + ?O@2EA,7y:e.dataset.fPreviewFrom) | |
| 275 | + : methodNamespace[e.dataset.fPreviewFrom], | |
| 276 | + asText = +(e.dataset.fPreviewAsText || 0); | |
| 277 | + eTo.textContent = "Fetching preview..."; | |
| 278 | + methodNamespace[e.dataset.fPreviewVia]( | |
| 279 | + (eFrom instanceof Function ? eFrom() : eFrom.value), | |
| 280 | + (r)=>{ | |
| 281 | + if(eTo instanceof Function) eTo(r||''); | |
| 282 | + else eTo[asText ? 'textContent' : 'innerHTML'] = r||''; | |
| 283 | + } | |
| 284 | + ); | |
| 285 | + }, false | |
| 286 | + ); | |
| 287 | + }a@21k,3N@1al,bb@1e8,3rxdxh; | |
| 288 | + ement id of the target "previewer" | |
| 289 | + element, WITH a leading '#', or the name of a method (see below). | |
| 290 | + | |
| 291 | + - data-f-preview-via: the name of a method (see below). | |
| 292 | + | |
| 293 | + - OPTIONAL data-f-preview-as-text: a numeric value. Explained below. | |
| 294 | + | |
| 295 | + Each element gets a click handler added to it which does the | |
| 296 | + following: | |
| 297 | + | |
| 298 | + 1) Reads the content from its data-f-preview-from element or, if | |
| 299 | + that property refers to a method, calls the method without | |
| 300 | + arguments and uses its result as the content. | |
| 301 | + | |
| 302 | + 2) Passes the content to | |
| 303 | + methodNamespace[f-data | |
| 304 | + | |
| 305 | + <button id='test-preview-connector' | |
| 306 | + data-f-preview-from='#fileedit-content-editor' // elem ID or method name | |
| 307 | + data-f-preview-via='myPreview' // method name | |
| 308 | + data-f-preview-to='#fileedit-tab-preview-wrapper' // elem ID or method name | |
| 309 | + >Preview update</button> | |
| 310 | + | |
| 311 | + And a sample data-f-preview-via method: | |
| 312 | + | |
| 313 | + fossil.page.myPreview = function(content,callback){ | |
| 314 | + const fd = new FormData(); | |
| 315 | + fd.append('foo', ...); | |
| 316 | + fossil.fetch('preview_forumpost',{ | |
| 317 | + payload: fd, | |
| 318 | + onload: callback8@KO,Ao: onerror: (e)=>{ // only if app-specific handling is needed | |
| 319 | + fossil.fetch.onerror(e); // default impl | |
| 320 | + ... any app-specific error reporting ... | |
| 321 | + } | |
| 322 | + }); | |
| 323 | + }; | |
| 324 | + | |
| 325 | + Then connect the parts with: | |
| 326 | + | |
| 327 | + fossil.connectPagePreviewers('#test-preview-connector'); | |
| 328 | + | |
| 329 | + Note that the data-f-preview-from, data-f-preview-via, and | |
| 330 | + data-f-preview-to selector are not resolved until the button is | |
| 331 | + actually clicked, so they need not exist in the DOM at the | |
| 332 | + instant when the connection is set up, so long as they can be | |
| 333 | + resolved when the preview-refreshing element is clicked. | |
| 334 | + */ | |
| 335 | + F.connectPagePreviewers = function f(selector,methodNamespace){Q@1BC,P:selector){ | |
| 336 | + selectorP@2E8,4n:All(selector); | |
| 337 | + }else if(!selector.forEach){ | |
| 338 | + selector = [selector]; | |
| 339 | + } | |
| 340 | + if(!methodNamespace){ | |
| 341 | + methodNamespace = F.page; | |
| 342 | + } | |
| 343 | + selector.forEach(function(e){ | |
| 344 | + e.addEventListener( | |
| 345 | + 'click', function(r){ | |
| 346 | + const eTo = '#'===e.dataset.fPreviewTo[0] | |
| 347 | + ?O@2EA,2O:e.dataset.fPreviewTo) | |
| 348 | + : methodNamespace[e.dataset.fPreviewTo], | |
| 349 | + |
| --- a/src/fossil.bootstrap.js | |
| +++ b/src/fossil.bootstrap.js | |
| @@ -0,0 +1,349 @@ | |
| --- a/src/fossil.bootstrap.js | |
| +++ b/src/fossil.bootstrap.js | |
| @@ -0,0 +1,349 @@ | |
| 1 | "u})(wi,"u})(window); |
| 2 | |
| 3 | r}) ID, |
| 4 | the DOM element must support .valu |
| 5 | loaded after style.c: target "previewer" |
| 6 | element, WITH a leading '#', or the name of a method (see below). |
| 7 | |
| 8 | - data-f-preview-via: the name of a method (see below). |
| 9 | |
| 10 | - OPTIONAL data-f-preview-as-text: a numeric value. Explained below. |
| 11 | |
| 12 | ndow); |
| 13 | |
| 14 | r}) ID, |
| 15 | the DOM element must support .valu |
| 16 | loaded after style.c: target "previewer" |
| 17 | element, WIcontent. |
| 18 | |
| 19 | 2) Passes the content to |
| 20 | methodNamespace[f-data |
| 21 | |
| 22 | <button id='test-preview-connector' |
| 23 | data-f-preview-from='#fileedit-content-editor' // elem ID or method name |
| 24 | data-f-preview-via='myPreview' // method name |
| 25 | data-f-preview-to='#fileedit-tab-preview-wrapper' // elem ID or method name |
| 26 | >Preview update</button> |
| 27 | |
| 28 | And a sample data-f-preview-via method: |
| 29 | |
| 30 | fossil.page.myPreview = function(content,callback){ |
| 31 | const fd = new FormData(); |
| 32 | fd.append('foo', ...); |
| 33 | foss-preview-from element or, if r}) ID, |
| 34 | the DOM element must support .valu |
| 35 | loaded after style.c: target "previewer" |
| 36 | element, WITH a leading '#', or the name of a method (see below). |
| 37 | |
| 38 | - data-f-preview-via: the name of a method (see below). |
| 39 | |
| 40 | - OPTIONAL data-f-preview-as-text: a numeric value. Explained below. |
| 41 | |
| 42 | ndow); |
| 43 | |
| 44 | r}) ID, |
| 45 | the DOM element must support .valu |
| 46 | loaded after style.c: target "previewer" |
| 47 | element, WITH a leading '#', or the name of a method (see below). |
| 48 | |
| 49 | - data-f-preview-via: the name of a method (see below). |
| 50 | |
| 51 | - OPTIONAL data-f-preview-as-text: a numeric value. Explained below. |
| 52 | |
| 53 | Each element gets a click handler added to it which does the |
| 54 | following: |
| 55 | |
| 56 | 1) Reads the content from its data-f-preview-from element or, if |
| 57 | that property refers to a method, calls the method without |
| 58 | arguments and uses its result as the content. |
| 59 | |
| 60 | 2) Passes the content to |
| 61 | methodNamespace[f-data |
| 62 | |
| 63 | <button id='test-preview-connector' |
| 64 | data-f-preview-from='#fileedit-content-editor' // elem ID or method name |
| 65 | data-f-preview-via='myPreview' // method name |
| 66 | data-f-preview-to='#fileedit-tab-preview-wrapper' // elem ID or method name |
| 67 | >Preview update</button> |
| 68 | |
| 69 | And a sample data-f-preview-via method: |
| 70 | |
| 71 | fossil.page.myPreview = function(content,callback){ |
| 72 | const fd = new FormData(); |
| 73 | fd.append('foo', ...); |
| 74 | fossil.fetch('preview_forumpost',{ |
| 75 | payload: fd, |
| 76 | onload: callback8@KO,Ao: onerror: (e)=>{ // only if app-specific handling is needed |
| 77 | fossil.fetch.onerror(e); // default impl |
| 78 | ... any app-specific error reporting ... |
| 79 | } |
| 80 | }); |
| 81 | }; |
| 82 | |
| 83 | Then connect the parts with: |
| 84 | |
| 85 | fossil.connectPagePreviewers('#test-preview-connector'); |
| 86 | |
| 87 | Note that the data-f-preview-from, data-f-preview-via, and |
| 88 | data-f-preview-to selector are not resolved until the button is |
| 89 | actually clicked, so they need not exist in the DOM at the |
| 90 | instant when the connection is set up, so long as they can be |
| 91 | resolved when the preview-refreshing element is clicked. |
| 92 | */ |
| 93 | F.connectPagePreviewers = function f(selector,methodNamespace){Q@1BC,P:selector){ |
| 94 | selectorP@2E8,4n:All(selector); |
| 95 | }else if(!selector.forEach){ |
| 96 | selector = [selector]; |
| 97 | } |
| 98 | if(!methodNamespace){ |
| 99 | methodNamespace = F.page; |
| 100 | } |
| 101 | selector.forEach(function(e){ |
| 102 | e.addEventListener( |
| 103 | 'click', function(r){ |
| 104 | const eTo = '#'===e.dataset.fPreviewTo[0] |
| 105 | ?O@2EA,2O:e.dataset.fPreviewTo) |
| 106 | : methodNamespace[e.dataset.fPreviewTo], |
| 107 | eFrom = '#'===e.dataset.fPreviewFrom[0] |
| 108 | ?O@2EA,7y:e.dataset.fPreviewFrom) |
| 109 | : methodNamespace[e.dataset.fPreviewFrom], |
| 110 | asText = +(e.dataset.fPreviewAsText || 0); |
| 111 | eTo.textContent = "Fetching preview..."; |
| 112 | methodNamespace[e.dataset.fPreviewVia]( |
| 113 | (eFrom instanceof Function ? eFrom() : eFrom.value), |
| 114 | (r)=>{ |
| 115 | if(eTo instanceof Function) eTo(r||''); |
| 116 | else eTo[asText ? 'textContent' : 'innerHTML'] = r||''; |
| 117 | } |
| 118 | ); |
| 119 | }, false |
| 120 | ); |
| 121 | }a@21k,3N@1al,bb@1e8,3rxdxh; |
| 122 | ement id of the target "previewer" |
| 123 | element, WITH a leading '#', or the name of a method (see below). |
| 124 | |
| 125 | - data-f-preview-via: the name of a method (see below). |
| 126 | |
| 127 | - OPTIONAL data-f-preview-as-text: a numeric value. Explained below. |
| 128 | |
| 129 | Each element gets a click handler added to it which does the |
| 130 | following: |
| 131 | |
| 132 | 1) Reads the content from its data-f-preview-from element or, if |
| 133 | that property refers to a method, calls the method without |
| 134 | arguments and uses its result as the content. |
| 135 | |
| 136 | 2) Passes the content to |
| 137 | methodNamespace[f-data |
| 138 | |
| 139 | <button id='test-preview-connector' |
| 140 | data-f-preview-from='#fileedit-content-editor' // elem ID or method name |
| 141 | data-f-preview-via='myPreview' // method name |
| 142 | data-f-preview-to='#fileedit-tab-preview-wrapper' // elem ID or method name |
| 143 | >Preview update</button> |
| 144 | |
| 145 | And a sample data-f-preview-via method: |
| 146 | |
| 147 | fossil.page.myPreview = function(content,callback){ |
| 148 | const fd = new FormData(); |
| 149 | fd.append('foo', ...); |
| 150 | fossil.fetch('preview_forumpost',{ |
| 151 | payload: fd, |
| 152 | onload: callback8@KO,Ao: onerror: (e)=>{ // only if app-specific handling is needed |
| 153 | fossil.fetch.onerror(e); // default impl |
| 154 | ... any app-specific error reporting ... |
| 155 | } |
| 156 | }); |
| 157 | }; |
| 158 | |
| 159 | Then connect the parts with: |
| 160 | |
| 161 | fossil.connectPagePreviewers('#test-preview-connector'); |
| 162 | |
| 163 | Note that the data-f-preview-from, data-f-preview-via, and |
| 164 | data-f-preview-to selector are not resolved until the button is |
| 165 | actually clicked, so they need not exist in the DOM at the |
| 166 | instant when the connection is set up, so long as they can be |
| 167 | resolved when the preview-refreshing element is clicked. |
| 168 | */ |
| 169 | F.connectPagePreviewers = function f(selector,methodNamespace){Q@1BC,P:selector){ |
| 170 | selectorP@2E8,4n:All(selector); |
| 171 | }else if(!selector.forEach){ |
| 172 | selector = [selector]; |
| 173 | } |
| 174 | if(!methodNamespace){ |
| 175 | methodNamespace = F.page; |
| 176 | } |
| 177 | selector.forEach(function(e){ |
| 178 | e.addEventListener( |
| 179 | 'click', function(r){ |
| 180 | const eTo = '#'===e.dataset.fPreviewTo[0] |
| 181 | ?O@2EA,2O:e.dataset.fPreviewTo) |
| 182 | : methodNamespace[e.dataset.fPreviewTo], |
| 183 | eFrom = '#'===e.dataset.fPreviewFrom[0] |
| 184 | ?O@2EA,7y:e.dataset.fPreviewFrom) |
| 185 | : methodNamespace[e.dataset.fPreviewFrom], |
| 186 | asText = +(e.dataset.fPreviewAsText || 0); |
| 187 | eTo.textContent = "Fetching preview..."; |
| 188 | methodNamespace[e.dataset.fPreviewVia]( |
| 189 | (eFrom instanceof Function ? eFrom() : eFrom.value), |
| 190 | (r)=>{ |
| 191 | if(eTo instanceof Function) eTo(r||''); |
| 192 | else eTo[asText ? 'textContent' : 'innerHTML'] = r||''; |
| 193 | } |
| 194 | ); |
| 195 | }, false |
| 196 | ); |
| 197 | }a@21k,3N@1al,bb@1e8,3rxdxh;"u})(wi,"u})(window); |
| 198 | |
| 199 | r}) ID, |
| 200 | the DOM element must support .valu |
| 201 | loaded after style.c: target "previewer" |
| 202 | element, WITH a leading '#', or the name of a method (see below). |
| 203 | |
| 204 | - data-f-preview-via: the name of a method (see below). |
| 205 | |
| 206 | - OPTIONAL data-f-preview-as-text: a numeric value. Explained below. |
| 207 | |
| 208 | ndow); |
| 209 | |
| 210 | r}) ID, |
| 211 | the DOM element must support .valu |
| 212 | loaded after style.c: target "previewer" |
| 213 | element, WITH a leading '#', or the name of a method (see below). |
| 214 | |
| 215 | - data-f-preview-via: the name of a method (see below). |
| 216 | |
| 217 | - OPTIONAL data-f-preview-as-text: a numeric value. Explained below. |
| 218 | |
| 219 | Each element gets a click handler added to it which does the |
| 220 | following: |
| 221 | |
| 222 | 1) Reads the content from its data-f-preview-from element or, if |
| 223 | that property refers to a method, calls the method without |
| 224 | arguments and uses its result as the content. |
| 225 | |
| 226 | 2) Passes the content to |
| 227 | methodNamespace[f-data |
| 228 | |
| 229 | <button id='test-preview-connector' |
| 230 | data-f-preview-from='#fileedit-content-editor' // elem ID or method name |
| 231 | data-f-preview-via='myPreview' // method name |
| 232 | data-f-preview-to='#fileedit-tab-preview-wrapper' // elem ID or method name |
| 233 | >Preview update</button> |
| 234 | |
| 235 | And a sample data-f-preview-via method: |
| 236 | |
| 237 | fossil.page.myPreview = function(content,callback){ |
| 238 | const fd = new FormData(); |
| 239 | fd.append('foo', ...); |
| 240 | fossil.fetch('preview_forumpost',{ |
| 241 | payload: fd, |
| 242 | onload: callback8@KO,Ao: onerror: (e)=>{ // only if app-specific handling is needed |
| 243 | fossil.fetch.onerror(e); // default impl |
| 244 | ... any app-specific error reporting ... |
| 245 | } |
| 246 | }); |
| 247 | }; |
| 248 | |
| 249 | Then connect the parts with: |
| 250 | |
| 251 | fossil.connectPagePreviewers('#test-preview-connector'); |
| 252 | |
| 253 | Note that the data-f-preview-from, data-f-preview-via, and |
| 254 | data-f-preview-to selector are not resolved until the button is |
| 255 | actually clicked, so they need not exist in the DOM at the |
| 256 | instant when the connection is set up, so long as they can be |
| 257 | resolved when the preview-refreshing element is clicked. |
| 258 | */ |
| 259 | F.connectPagePreviewers = function f(selector,methodNamespace){Q@1BC,P:selector){ |
| 260 | selectorP@2E8,4n:All(selector); |
| 261 | }else if(!selector.forEach){ |
| 262 | selector = [selector]; |
| 263 | } |
| 264 | if(!methodNamespace){ |
| 265 | methodNamespace = F.page; |
| 266 | } |
| 267 | selector.forEach(function(e){ |
| 268 | e.addEventListener( |
| 269 | 'click', function(r){ |
| 270 | const eTo = '#'===e.dataset.fPreviewTo[0] |
| 271 | ?O@2EA,2O:e.dataset.fPreviewTo) |
| 272 | : methodNamespace[e.dataset.fPreviewTo], |
| 273 | eFrom = '#'===e.dataset.fPreviewFrom[0] |
| 274 | ?O@2EA,7y:e.dataset.fPreviewFrom) |
| 275 | : methodNamespace[e.dataset.fPreviewFrom], |
| 276 | asText = +(e.dataset.fPreviewAsText || 0); |
| 277 | eTo.textContent = "Fetching preview..."; |
| 278 | methodNamespace[e.dataset.fPreviewVia]( |
| 279 | (eFrom instanceof Function ? eFrom() : eFrom.value), |
| 280 | (r)=>{ |
| 281 | if(eTo instanceof Function) eTo(r||''); |
| 282 | else eTo[asText ? 'textContent' : 'innerHTML'] = r||''; |
| 283 | } |
| 284 | ); |
| 285 | }, false |
| 286 | ); |
| 287 | }a@21k,3N@1al,bb@1e8,3rxdxh; |
| 288 | ement id of the target "previewer" |
| 289 | element, WITH a leading '#', or the name of a method (see below). |
| 290 | |
| 291 | - data-f-preview-via: the name of a method (see below). |
| 292 | |
| 293 | - OPTIONAL data-f-preview-as-text: a numeric value. Explained below. |
| 294 | |
| 295 | Each element gets a click handler added to it which does the |
| 296 | following: |
| 297 | |
| 298 | 1) Reads the content from its data-f-preview-from element or, if |
| 299 | that property refers to a method, calls the method without |
| 300 | arguments and uses its result as the content. |
| 301 | |
| 302 | 2) Passes the content to |
| 303 | methodNamespace[f-data |
| 304 | |
| 305 | <button id='test-preview-connector' |
| 306 | data-f-preview-from='#fileedit-content-editor' // elem ID or method name |
| 307 | data-f-preview-via='myPreview' // method name |
| 308 | data-f-preview-to='#fileedit-tab-preview-wrapper' // elem ID or method name |
| 309 | >Preview update</button> |
| 310 | |
| 311 | And a sample data-f-preview-via method: |
| 312 | |
| 313 | fossil.page.myPreview = function(content,callback){ |
| 314 | const fd = new FormData(); |
| 315 | fd.append('foo', ...); |
| 316 | fossil.fetch('preview_forumpost',{ |
| 317 | payload: fd, |
| 318 | onload: callback8@KO,Ao: onerror: (e)=>{ // only if app-specific handling is needed |
| 319 | fossil.fetch.onerror(e); // default impl |
| 320 | ... any app-specific error reporting ... |
| 321 | } |
| 322 | }); |
| 323 | }; |
| 324 | |
| 325 | Then connect the parts with: |
| 326 | |
| 327 | fossil.connectPagePreviewers('#test-preview-connector'); |
| 328 | |
| 329 | Note that the data-f-preview-from, data-f-preview-via, and |
| 330 | data-f-preview-to selector are not resolved until the button is |
| 331 | actually clicked, so they need not exist in the DOM at the |
| 332 | instant when the connection is set up, so long as they can be |
| 333 | resolved when the preview-refreshing element is clicked. |
| 334 | */ |
| 335 | F.connectPagePreviewers = function f(selector,methodNamespace){Q@1BC,P:selector){ |
| 336 | selectorP@2E8,4n:All(selector); |
| 337 | }else if(!selector.forEach){ |
| 338 | selector = [selector]; |
| 339 | } |
| 340 | if(!methodNamespace){ |
| 341 | methodNamespace = F.page; |
| 342 | } |
| 343 | selector.forEach(function(e){ |
| 344 | e.addEventListener( |
| 345 | 'click', function(r){ |
| 346 | const eTo = '#'===e.dataset.fPreviewTo[0] |
| 347 | ?O@2EA,2O:e.dataset.fPreviewTo) |
| 348 | : methodNamespace[e.dataset.fPreviewTo], |
| 349 |
| --- a/src/fossil.confirmer.js | ||
| +++ b/src/fossil.confirmer.js | ||
| @@ -0,0 +1 @@ | ||
| 1 | +"u |
| --- a/src/fossil.confirmer.js | |
| +++ b/src/fossil.confirmer.js | |
| @@ -0,0 +1 @@ | |
| --- a/src/fossil.confirmer.js | |
| +++ b/src/fossil.confirmer.js | |
| @@ -0,0 +1 @@ | |
| 1 | "u |
+1
| --- a/src/fossil.dom.js | ||
| +++ b/src/fossil.dom.js | ||
| @@ -0,0 +1 @@ | ||
| 1 | +e || 'number| 'numberThis will |
| --- a/src/fossil.dom.js | |
| +++ b/src/fossil.dom.js | |
| @@ -0,0 +1 @@ | |
| --- a/src/fossil.dom.js | |
| +++ b/src/fossil.dom.js | |
| @@ -0,0 +1 @@ | |
| 1 | e || 'number| 'numberThis will |
+62
| --- a/src/fossil.fetch.js | ||
| +++ b/src/fossil.fetch.js | ||
| @@ -0,0 +1,62 @@ | ||
| 1 | +r onload() handler throws an exception. In the context of the | |
| 2 | + callback, | |
| 3 | + window.fossil.to be used solely for error reporting, not error recovery. Special | |
| 4 | + cases for the Error object: | |
| 5 | + | |
| 6 | + 1. Timeouts unfortunately show up as a series of 2 events: an | |
| 7 | + HTTP 0 followed immediately by an XHR.ontimeout(). The former | |
| 8 | + cannot(?) be unambiguously identified as the trigger for the | |
| 9 | + pending timeout, so we have no option but to pass it on as-is | |
| 10 | + instead of flagging it as a timeout response. The latter will | |
| 11 | + trigger the client-provided ontimeout() if it's available (see | |
| 12 | + below), else it calls the onerror() callback. An error object | |
| 13 | + passed to ontimeout() by fetch() will have (.name='timeout', | |
| 14 | + .status=XHR.status). | |
| 15 | + | |
| 16 | + 2. Else if the response contains a JSON-format exception on the | |
| 17 | + server, it wiXHR onload event | exception) (default = event | |
| 18 | + or exception to the console named "error" is considere generates | |
| 19 | + " is considered to be a server-geo ontimeout() by fetch( callback, | |
| 20 | + two eventriggered byse:"this"e followat exception on the | |
| 21 | + server, it will have (.name='json-error', | |
| 22 | + status=XHR.status). Any JSON-format result object which has a | |
| 23 | + property named "error" is considered to be a server-generated | |
| 24 | + error. | |
| 25 | + | |
| 26 | + suffers a connection | |
| 27 | + error or timeout while awaiting a response, or if the onload() | |
| 28 | + f it gets a non 2xx HTTP callback, the | |
| 29 | + name='timeout', | |
| 30 | + "this". Note that without | |
| 31 | + ion is suppressed but maBec and | |
| 32 | + onerror() may be called if onload() throws, it is up to the caller | |
| 33 | + to ensure that their oner the | |
| 34 | + DOM | |
| 35 | + nately, XHR fires two eventriggered byse:',r); | |
| 36 | + } | |
| 37 | + if(!f.oner | |
| 38 | + caught and silently ignoredso clients which set ontimeout() | |
| 39 | + will get _two_ callback calls: one with an HTTP error response | |
| 40 | + followed immediately by an ontimeout() response. Error objects | |
| 41 | + passed to this willrams in the form "key1=val1&key2=val2...", | |
| 42 | + with NO leading '?'. If it is an object, all of its properties get | |
| 43 | + converted to that form. Either way, the parameters get appended to | |
| 44 | + the URL before submitting the request. | |
| 45 | + | |
| 46 | + - responseHeaders: If true, the onload() callback is passed an | |
| 47 | + additional argument: a map of all of the response headers. If it's | |
| 48 | + a string value, the 2nd argument passed to onloadR fires two /aftersend | |
| 49 | + handler are currentbeen caused by a timeout, so clitrack of in-flight | |
| 50 | + requests and update the UI accajaxvent or Ajax{ | |
| 51 | + } | |
| 52 | + else if(e.originalTarget && e.originalTarget.responseType==='text'){ | |
| 53 | + const txt = e.originalTarget.responseText; | |
| 54 | + /* The convention from the /fi return error responses in JSON form if possible: | |
| 55 | + {error: "..."} | |
| 56 | + */ | |
| 57 | + txt); | |
| 58 | + console.error("Error JSON:",j); | |
| 59 | + if(j.error){ F.error(j.error) }; | |
| 60 | + }catch(e){/* Try harder */ | |
| 61 | + F.eload = function(e){this.status){thisthisthis.response) | |
| 62 | + ? JSON. |
| --- a/src/fossil.fetch.js | |
| +++ b/src/fossil.fetch.js | |
| @@ -0,0 +1,62 @@ | |
| --- a/src/fossil.fetch.js | |
| +++ b/src/fossil.fetch.js | |
| @@ -0,0 +1,62 @@ | |
| 1 | r onload() handler throws an exception. In the context of the |
| 2 | callback, |
| 3 | window.fossil.to be used solely for error reporting, not error recovery. Special |
| 4 | cases for the Error object: |
| 5 | |
| 6 | 1. Timeouts unfortunately show up as a series of 2 events: an |
| 7 | HTTP 0 followed immediately by an XHR.ontimeout(). The former |
| 8 | cannot(?) be unambiguously identified as the trigger for the |
| 9 | pending timeout, so we have no option but to pass it on as-is |
| 10 | instead of flagging it as a timeout response. The latter will |
| 11 | trigger the client-provided ontimeout() if it's available (see |
| 12 | below), else it calls the onerror() callback. An error object |
| 13 | passed to ontimeout() by fetch() will have (.name='timeout', |
| 14 | .status=XHR.status). |
| 15 | |
| 16 | 2. Else if the response contains a JSON-format exception on the |
| 17 | server, it wiXHR onload event | exception) (default = event |
| 18 | or exception to the console named "error" is considere generates |
| 19 | " is considered to be a server-geo ontimeout() by fetch( callback, |
| 20 | two eventriggered byse:"this"e followat exception on the |
| 21 | server, it will have (.name='json-error', |
| 22 | status=XHR.status). Any JSON-format result object which has a |
| 23 | property named "error" is considered to be a server-generated |
| 24 | error. |
| 25 | |
| 26 | suffers a connection |
| 27 | error or timeout while awaiting a response, or if the onload() |
| 28 | f it gets a non 2xx HTTP callback, the |
| 29 | name='timeout', |
| 30 | "this". Note that without |
| 31 | ion is suppressed but maBec and |
| 32 | onerror() may be called if onload() throws, it is up to the caller |
| 33 | to ensure that their oner the |
| 34 | DOM |
| 35 | nately, XHR fires two eventriggered byse:',r); |
| 36 | } |
| 37 | if(!f.oner |
| 38 | caught and silently ignoredso clients which set ontimeout() |
| 39 | will get _two_ callback calls: one with an HTTP error response |
| 40 | followed immediately by an ontimeout() response. Error objects |
| 41 | passed to this willrams in the form "key1=val1&key2=val2...", |
| 42 | with NO leading '?'. If it is an object, all of its properties get |
| 43 | converted to that form. Either way, the parameters get appended to |
| 44 | the URL before submitting the request. |
| 45 | |
| 46 | - responseHeaders: If true, the onload() callback is passed an |
| 47 | additional argument: a map of all of the response headers. If it's |
| 48 | a string value, the 2nd argument passed to onloadR fires two /aftersend |
| 49 | handler are currentbeen caused by a timeout, so clitrack of in-flight |
| 50 | requests and update the UI accajaxvent or Ajax{ |
| 51 | } |
| 52 | else if(e.originalTarget && e.originalTarget.responseType==='text'){ |
| 53 | const txt = e.originalTarget.responseText; |
| 54 | /* The convention from the /fi return error responses in JSON form if possible: |
| 55 | {error: "..."} |
| 56 | */ |
| 57 | txt); |
| 58 | console.error("Error JSON:",j); |
| 59 | if(j.error){ F.error(j.error) }; |
| 60 | }catch(e){/* Try harder */ |
| 61 | F.eload = function(e){this.status){thisthisthis.response) |
| 62 | ? JSON. |
| --- a/src/fossil.page.fileedit.js | ||
| +++ b/src/fossil.page.fileedit.js | ||
| @@ -0,0 +1,42 @@ | ||
| 1 | +'leaves': function(list){ | |
| 2 | + fossi if(!nssilfossilClear"ELETE all loc }); | |
| 3 | +etJSON(self } | |
| 4 | + }div(),}, 6aves': function(list){ | |
| 5 | + fossi if(!nssilfossilClear"ELETE all loc }); | |
| 6 | +etJSON(self } | |
| 7 | + }div){ | |
| 8 | + fossi if(!nssilfoss{ | |
| 9 | + if( }()3fsFileVersionDetai E('#file-version-detailCi@5hR,a@5xy,3I@5uh,1e@6Bw,1g@5~g,Pp@61j,1:3Sy@6R~,15@6ug,5P@6vu,g: //P.e.tabs.fileSelect.querySelector("h1")128@70D,F:(file,rev){ | |
| 10 | + Q@8fx,2Y@85H,Z@9C0,_@88B,Z@86h,12@89S,X:eTgt = this.e.fsFileVersionDetailH@84F,6:div'),B@2XW,6:rHumanJ@8DT,h@8DC,J@8Ak,6:eTgt);L@8Gl,F:eTgt, "File: ",G@3pl,6:D.codeG@3AW,I@8IE,Z@8GB,L:, | |
| 11 | + D.br() | |
| 12 | + );L@8Gl,I:eTgt, "Checkin: ",G@3pl,9:D.code(),a@8IG,1:)8@91z,5:" [",Q@2pl,j:m:rUrl}), "timeline"),"]", | |
| 13 | + D.br() | |
| 14 | + );L@8Gl,J:eTgt, "Mimetype: ",G@3pl,A:D.code(), J@7ZV,T:||'???'), | |
| 15 | + D.br() | |
| 16 | + );L@8Gl,5:eTgt,G@3pl,R@2pL,I@8IE,e@8K3,1: | |
| 17 | +J@3r0,I:'annotate'), "]"),G@3pl,R@2pL,I@8IE,b@8LE,1: | |
| 18 | +J@3r0,D:'blame'), "]"2v@8Lw,C: | |
| 19 | + eTgt,G@3pl,6:D.codeG@3AW,h: "[",D.a(purl,"Editor permalink"),"]") | |
| 20 | + Z@8PS,Q@9Ml,U@9a0,Pw@8Qk,fO@8qD,O@76V,1H_@9WZ,1:}Z@AaG,37@AoH,DO@Arz,2Jj_mz;File/undefined /*check for and remove/replace olcan be removed once the test pode(),a@8Idoing so, be sure to replacegetJSON() call with {}. */ | |
| 21 | + const oldName = F.page.name+':index'; | |
| 22 | + oldName,undefinedoldName); | |
| 23 | + this.index = {}aves': function(list){ | |
| 24 | +i if(!nssilfossilClear"ELETE all loc }); | |
| 25 | +etJSON(self } | |
| 26 | + }div(),}, 6aves': function(list){ | |
| 27 | + fossi if(!nssilfossilClear"ELETE all loc }); | |
| 28 | +etJSON(self } | |
| 29 | + }div){ | |
| 30 | + fossi if(!nssilfoss{ | |
| 31 | + if( }()3fsFileVersionDetai E('#file-version-detailCi@5hR,a@5xy,3I@5uh,1e@6Bw,1g@5~g,Pp@61j,1:3Sy@6R~,15@6ug,5P@6vu,g: //P.e.tabs.fileSelect.querySelector("h1")128@70D,F:(file,rev){ | |
| 32 | + Q@8fx,2Y@85H,Z@9C0,_@88B,Z@86h,12@89S,X:eTgt = this.e.fsFileVersionDetailH@84F,6:div'),B@2XW,6:rHumanJ@8DT,h@8DC,J@8Ak,6:eTgt);L@8Gl,F:eTgt, "File: ",G@3pl,6:D.codeG@3AW,I@8IE,Z@8GB,L:, | |
| 33 | + D.br() | |
| 34 | + );L@8Gl,I:eTgt, "Checkin: ",G@3pl,9:D.code(),a@8IG,1:)8@91z,5:" [",Q@2pl,j:m:rUrl}), "timeline"),"]", | |
| 35 | + D.br() | |
| 36 | + );L@8Gl,J:eTgt, "Mimetype: ",G@3pl,A:D.code(), J@7ZV,T:||'???'), | |
| 37 | + D.br() | |
| 38 | + );L@8Gl,5:eTgt,G@3pl,R@2pL,I@8IE,e@8K3,1: | |
| 39 | +J@3r0,I:'annotate'), "]"),G@3pl,R@2pL,I@8IE,b@8LE,1: | |
| 40 | +J@3r0,D:'blame'), "]"2v@8Lw,C: | |
| 41 | + eTgt,G@3pl,6:D.codeG@3AW,h: "[",D.a(purl,"Editor permalink"),"]") | |
| 42 | + Z@8PS,Q@9Ml,U@9a0,Pw@8Qk,fO@8qD,O@76V,1H_@9WZ,1:}Z@AaG,37@AoH,DO@Arz,2Jj_mz;File/btnLoadfileedit/previewHeaders: 'x-fileedit |
| --- a/src/fossil.page.fileedit.js | |
| +++ b/src/fossil.page.fileedit.js | |
| @@ -0,0 +1,42 @@ | |
| --- a/src/fossil.page.fileedit.js | |
| +++ b/src/fossil.page.fileedit.js | |
| @@ -0,0 +1,42 @@ | |
| 1 | 'leaves': function(list){ |
| 2 | fossi if(!nssilfossilClear"ELETE all loc }); |
| 3 | etJSON(self } |
| 4 | }div(),}, 6aves': function(list){ |
| 5 | fossi if(!nssilfossilClear"ELETE all loc }); |
| 6 | etJSON(self } |
| 7 | }div){ |
| 8 | fossi if(!nssilfoss{ |
| 9 | if( }()3fsFileVersionDetai E('#file-version-detailCi@5hR,a@5xy,3I@5uh,1e@6Bw,1g@5~g,Pp@61j,1:3Sy@6R~,15@6ug,5P@6vu,g: //P.e.tabs.fileSelect.querySelector("h1")128@70D,F:(file,rev){ |
| 10 | Q@8fx,2Y@85H,Z@9C0,_@88B,Z@86h,12@89S,X:eTgt = this.e.fsFileVersionDetailH@84F,6:div'),B@2XW,6:rHumanJ@8DT,h@8DC,J@8Ak,6:eTgt);L@8Gl,F:eTgt, "File: ",G@3pl,6:D.codeG@3AW,I@8IE,Z@8GB,L:, |
| 11 | D.br() |
| 12 | );L@8Gl,I:eTgt, "Checkin: ",G@3pl,9:D.code(),a@8IG,1:)8@91z,5:" [",Q@2pl,j:m:rUrl}), "timeline"),"]", |
| 13 | D.br() |
| 14 | );L@8Gl,J:eTgt, "Mimetype: ",G@3pl,A:D.code(), J@7ZV,T:||'???'), |
| 15 | D.br() |
| 16 | );L@8Gl,5:eTgt,G@3pl,R@2pL,I@8IE,e@8K3,1: |
| 17 | J@3r0,I:'annotate'), "]"),G@3pl,R@2pL,I@8IE,b@8LE,1: |
| 18 | J@3r0,D:'blame'), "]"2v@8Lw,C: |
| 19 | eTgt,G@3pl,6:D.codeG@3AW,h: "[",D.a(purl,"Editor permalink"),"]") |
| 20 | Z@8PS,Q@9Ml,U@9a0,Pw@8Qk,fO@8qD,O@76V,1H_@9WZ,1:}Z@AaG,37@AoH,DO@Arz,2Jj_mz;File/undefined /*check for and remove/replace olcan be removed once the test pode(),a@8Idoing so, be sure to replacegetJSON() call with {}. */ |
| 21 | const oldName = F.page.name+':index'; |
| 22 | oldName,undefinedoldName); |
| 23 | this.index = {}aves': function(list){ |
| 24 | i if(!nssilfossilClear"ELETE all loc }); |
| 25 | etJSON(self } |
| 26 | }div(),}, 6aves': function(list){ |
| 27 | fossi if(!nssilfossilClear"ELETE all loc }); |
| 28 | etJSON(self } |
| 29 | }div){ |
| 30 | fossi if(!nssilfoss{ |
| 31 | if( }()3fsFileVersionDetai E('#file-version-detailCi@5hR,a@5xy,3I@5uh,1e@6Bw,1g@5~g,Pp@61j,1:3Sy@6R~,15@6ug,5P@6vu,g: //P.e.tabs.fileSelect.querySelector("h1")128@70D,F:(file,rev){ |
| 32 | Q@8fx,2Y@85H,Z@9C0,_@88B,Z@86h,12@89S,X:eTgt = this.e.fsFileVersionDetailH@84F,6:div'),B@2XW,6:rHumanJ@8DT,h@8DC,J@8Ak,6:eTgt);L@8Gl,F:eTgt, "File: ",G@3pl,6:D.codeG@3AW,I@8IE,Z@8GB,L:, |
| 33 | D.br() |
| 34 | );L@8Gl,I:eTgt, "Checkin: ",G@3pl,9:D.code(),a@8IG,1:)8@91z,5:" [",Q@2pl,j:m:rUrl}), "timeline"),"]", |
| 35 | D.br() |
| 36 | );L@8Gl,J:eTgt, "Mimetype: ",G@3pl,A:D.code(), J@7ZV,T:||'???'), |
| 37 | D.br() |
| 38 | );L@8Gl,5:eTgt,G@3pl,R@2pL,I@8IE,e@8K3,1: |
| 39 | J@3r0,I:'annotate'), "]"),G@3pl,R@2pL,I@8IE,b@8LE,1: |
| 40 | J@3r0,D:'blame'), "]"2v@8Lw,C: |
| 41 | eTgt,G@3pl,6:D.codeG@3AW,h: "[",D.a(purl,"Editor permalink"),"]") |
| 42 | Z@8PS,Q@9Ml,U@9a0,Pw@8Qk,fO@8qD,O@76V,1H_@9WZ,1:}Z@AaG,37@AoH,DO@Arz,2Jj_mz;File/btnLoadfileedit/previewHeaders: 'x-fileedit |
| --- a/src/fossil.storage.js | ||
| +++ b/src/fossil.storage.js | ||
| @@ -0,0 +1,8 @@ | ||
| 1 | +){ | |
| 2 | + /** | |
| 3 | + fossil.storage is a basic wrapper around localStorage | |
| 4 | + or | |
| 5 | + sessions). | |
| 6 | + (orfossil$storage.clear(/* We must not use localStorage on0e794dbb91 | |
| 7 | + | |
| 8 | + ||*/') ? $storage.k) ? $storage.getItem(|| |
| --- a/src/fossil.storage.js | |
| +++ b/src/fossil.storage.js | |
| @@ -0,0 +1,8 @@ | |
| --- a/src/fossil.storage.js | |
| +++ b/src/fossil.storage.js | |
| @@ -0,0 +1,8 @@ | |
| 1 | ){ |
| 2 | /** |
| 3 | fossil.storage is a basic wrapper around localStorage |
| 4 | or |
| 5 | sessions). |
| 6 | (orfossil$storage.clear(/* We must not use localStorage on0e794dbb91 |
| 7 | |
| 8 | ||*/') ? $storage.k) ? $storage.getItem(|| |
+4
| --- a/src/fossil.tabs.js | ||
| +++ b/src/fossil.tabs.js | ||
| @@ -0,0 +1,4 @@ | ||
| 1 | +" | |
| 2 | + to areturn arg; | |
| 3 | + }; | |
| 4 | +D[yes ? 'removeClass' |
| --- a/src/fossil.tabs.js | |
| +++ b/src/fossil.tabs.js | |
| @@ -0,0 +1,4 @@ | |
| --- a/src/fossil.tabs.js | |
| +++ b/src/fossil.tabs.js | |
| @@ -0,0 +1,4 @@ | |
| 1 | " |
| 2 | to areturn arg; |
| 3 | }; |
| 4 | D[yes ? 'removeClass' |
+8
| --- src/info.c | ||
| +++ src/info.c | ||
| @@ -1447,10 +1447,13 @@ | ||
| 1447 | 1447 | @ %z(href("%R/annotate?filename=%T&checkin=%!S",zName,zVers)) |
| 1448 | 1448 | @ [annotate]</a> |
| 1449 | 1449 | @ %z(href("%R/blame?filename=%T&checkin=%!S",zName,zVers)) |
| 1450 | 1450 | @ [blame]</a> |
| 1451 | 1451 | @ %z(href("%R/timeline?n=all&uf=%!S",zUuid))[check-ins using]</a> |
| 1452 | + if( fileedit_is_editable(zName) ){ | |
| 1453 | + @ %z(href("%R/fileedit?filename=%T&checkin=%!S",zName,zVers))[edit]</a> | |
| 1454 | + } | |
| 1452 | 1455 | } |
| 1453 | 1456 | cnt++; |
| 1454 | 1457 | if( pDownloadName && blob_size(pDownloadName)==0 ){ |
| 1455 | 1458 | blob_append(pDownloadName, zName, -1); |
| 1456 | 1459 | } |
| @@ -2344,10 +2347,15 @@ | ||
| 2344 | 2347 | }else{ |
| 2345 | 2348 | renderAsWiki = 1; |
| 2346 | 2349 | style_submenu_element("Text", "%s", url_render(&url, "txt", "1", 0, 0)); |
| 2347 | 2350 | } |
| 2348 | 2351 | } |
| 2352 | + if( fileedit_is_editable(zName) ){ | |
| 2353 | + style_submenu_element("Edit", | |
| 2354 | + "%R/fileedit?filename=%T&checkin=%!S", | |
| 2355 | + zName, zCI); | |
| 2356 | + } | |
| 2349 | 2357 | } |
| 2350 | 2358 | if( (objType & (OBJTYPE_WIKI|OBJTYPE_TICKET))!=0 ){ |
| 2351 | 2359 | style_submenu_element("Parsed", "%R/info/%s", zUuid); |
| 2352 | 2360 | } |
| 2353 | 2361 | if( descOnly ){ |
| 2354 | 2362 |
| --- src/info.c | |
| +++ src/info.c | |
| @@ -1447,10 +1447,13 @@ | |
| 1447 | @ %z(href("%R/annotate?filename=%T&checkin=%!S",zName,zVers)) |
| 1448 | @ [annotate]</a> |
| 1449 | @ %z(href("%R/blame?filename=%T&checkin=%!S",zName,zVers)) |
| 1450 | @ [blame]</a> |
| 1451 | @ %z(href("%R/timeline?n=all&uf=%!S",zUuid))[check-ins using]</a> |
| 1452 | } |
| 1453 | cnt++; |
| 1454 | if( pDownloadName && blob_size(pDownloadName)==0 ){ |
| 1455 | blob_append(pDownloadName, zName, -1); |
| 1456 | } |
| @@ -2344,10 +2347,15 @@ | |
| 2344 | }else{ |
| 2345 | renderAsWiki = 1; |
| 2346 | style_submenu_element("Text", "%s", url_render(&url, "txt", "1", 0, 0)); |
| 2347 | } |
| 2348 | } |
| 2349 | } |
| 2350 | if( (objType & (OBJTYPE_WIKI|OBJTYPE_TICKET))!=0 ){ |
| 2351 | style_submenu_element("Parsed", "%R/info/%s", zUuid); |
| 2352 | } |
| 2353 | if( descOnly ){ |
| 2354 |
| --- src/info.c | |
| +++ src/info.c | |
| @@ -1447,10 +1447,13 @@ | |
| 1447 | @ %z(href("%R/annotate?filename=%T&checkin=%!S",zName,zVers)) |
| 1448 | @ [annotate]</a> |
| 1449 | @ %z(href("%R/blame?filename=%T&checkin=%!S",zName,zVers)) |
| 1450 | @ [blame]</a> |
| 1451 | @ %z(href("%R/timeline?n=all&uf=%!S",zUuid))[check-ins using]</a> |
| 1452 | if( fileedit_is_editable(zName) ){ |
| 1453 | @ %z(href("%R/fileedit?filename=%T&checkin=%!S",zName,zVers))[edit]</a> |
| 1454 | } |
| 1455 | } |
| 1456 | cnt++; |
| 1457 | if( pDownloadName && blob_size(pDownloadName)==0 ){ |
| 1458 | blob_append(pDownloadName, zName, -1); |
| 1459 | } |
| @@ -2344,10 +2347,15 @@ | |
| 2347 | }else{ |
| 2348 | renderAsWiki = 1; |
| 2349 | style_submenu_element("Text", "%s", url_render(&url, "txt", "1", 0, 0)); |
| 2350 | } |
| 2351 | } |
| 2352 | if( fileedit_is_editable(zName) ){ |
| 2353 | style_submenu_element("Edit", |
| 2354 | "%R/fileedit?filename=%T&checkin=%!S", |
| 2355 | zName, zCI); |
| 2356 | } |
| 2357 | } |
| 2358 | if( (objType & (OBJTYPE_WIKI|OBJTYPE_TICKET))!=0 ){ |
| 2359 | style_submenu_element("Parsed", "%R/info/%s", zUuid); |
| 2360 | } |
| 2361 | if( descOnly ){ |
| 2362 |
+11
| --- src/leaf.c | ||
| +++ src/leaf.c | ||
| @@ -152,10 +152,21 @@ | ||
| 152 | 152 | " AND tx.tagid=%d" |
| 153 | 153 | " AND tx.tagtype>0)", |
| 154 | 154 | zVar, TAG_CLOSED |
| 155 | 155 | ); |
| 156 | 156 | } |
| 157 | + | |
| 158 | +/* | |
| 159 | +** Returns true if vid refers to a closed leaf, else false. vid is | |
| 160 | +** assumed to refer to a manifest, but this function does not verify | |
| 161 | +** that. | |
| 162 | +*/ | |
| 163 | +int leaf_is_closed(int vid){ | |
| 164 | + return db_exists("SELECT 1 FROM tagxref" | |
| 165 | + " WHERE tagid=%d AND rid=%d AND tagtype>0", | |
| 166 | + TAG_CLOSED, vid); | |
| 167 | +} | |
| 157 | 168 | |
| 158 | 169 | /* |
| 159 | 170 | ** Schedule a leaf check for "rid" and its parents. |
| 160 | 171 | */ |
| 161 | 172 | void leaf_eventually_check(int rid){ |
| 162 | 173 |
| --- src/leaf.c | |
| +++ src/leaf.c | |
| @@ -152,10 +152,21 @@ | |
| 152 | " AND tx.tagid=%d" |
| 153 | " AND tx.tagtype>0)", |
| 154 | zVar, TAG_CLOSED |
| 155 | ); |
| 156 | } |
| 157 | |
| 158 | /* |
| 159 | ** Schedule a leaf check for "rid" and its parents. |
| 160 | */ |
| 161 | void leaf_eventually_check(int rid){ |
| 162 |
| --- src/leaf.c | |
| +++ src/leaf.c | |
| @@ -152,10 +152,21 @@ | |
| 152 | " AND tx.tagid=%d" |
| 153 | " AND tx.tagtype>0)", |
| 154 | zVar, TAG_CLOSED |
| 155 | ); |
| 156 | } |
| 157 | |
| 158 | /* |
| 159 | ** Returns true if vid refers to a closed leaf, else false. vid is |
| 160 | ** assumed to refer to a manifest, but this function does not verify |
| 161 | ** that. |
| 162 | */ |
| 163 | int leaf_is_closed(int vid){ |
| 164 | return db_exists("SELECT 1 FROM tagxref" |
| 165 | " WHERE tagid=%d AND rid=%d AND tagtype>0", |
| 166 | TAG_CLOSED, vid); |
| 167 | } |
| 168 | |
| 169 | /* |
| 170 | ** Schedule a leaf check for "rid" and its parents. |
| 171 | */ |
| 172 | void leaf_eventually_check(int rid){ |
| 173 |
+3
-3
| --- src/main.c | ||
| +++ src/main.c | ||
| @@ -2812,17 +2812,17 @@ | ||
| 2812 | 2812 | } |
| 2813 | 2813 | #else |
| 2814 | 2814 | zBrowser = db_get("web-browser", "open"); |
| 2815 | 2815 | #endif |
| 2816 | 2816 | if( zIpAddr==0 ){ |
| 2817 | - zBrowserCmd = mprintf("%s http://localhost:%%d/%s &", | |
| 2817 | + zBrowserCmd = mprintf("%s \"http://localhost:%%d/%s\" &", | |
| 2818 | 2818 | zBrowser, zInitPage); |
| 2819 | 2819 | }else if( strchr(zIpAddr,':') ){ |
| 2820 | - zBrowserCmd = mprintf("%s http://[%s]:%%d/%s &", | |
| 2820 | + zBrowserCmd = mprintf("%s \"http://[%s]:%%d/%s\" &", | |
| 2821 | 2821 | zBrowser, zIpAddr, zInitPage); |
| 2822 | 2822 | }else{ |
| 2823 | - zBrowserCmd = mprintf("%s http://%s:%%d/%s &", | |
| 2823 | + zBrowserCmd = mprintf("%s \"http://%s:%%d/%s\" &", | |
| 2824 | 2824 | zBrowser, zIpAddr, zInitPage); |
| 2825 | 2825 | } |
| 2826 | 2826 | } |
| 2827 | 2827 | if( g.repositoryOpen ) flags |= HTTP_SERVER_HAD_REPOSITORY; |
| 2828 | 2828 | if( g.localOpen ) flags |= HTTP_SERVER_HAD_CHECKOUT; |
| 2829 | 2829 |
| --- src/main.c | |
| +++ src/main.c | |
| @@ -2812,17 +2812,17 @@ | |
| 2812 | } |
| 2813 | #else |
| 2814 | zBrowser = db_get("web-browser", "open"); |
| 2815 | #endif |
| 2816 | if( zIpAddr==0 ){ |
| 2817 | zBrowserCmd = mprintf("%s http://localhost:%%d/%s &", |
| 2818 | zBrowser, zInitPage); |
| 2819 | }else if( strchr(zIpAddr,':') ){ |
| 2820 | zBrowserCmd = mprintf("%s http://[%s]:%%d/%s &", |
| 2821 | zBrowser, zIpAddr, zInitPage); |
| 2822 | }else{ |
| 2823 | zBrowserCmd = mprintf("%s http://%s:%%d/%s &", |
| 2824 | zBrowser, zIpAddr, zInitPage); |
| 2825 | } |
| 2826 | } |
| 2827 | if( g.repositoryOpen ) flags |= HTTP_SERVER_HAD_REPOSITORY; |
| 2828 | if( g.localOpen ) flags |= HTTP_SERVER_HAD_CHECKOUT; |
| 2829 |
| --- src/main.c | |
| +++ src/main.c | |
| @@ -2812,17 +2812,17 @@ | |
| 2812 | } |
| 2813 | #else |
| 2814 | zBrowser = db_get("web-browser", "open"); |
| 2815 | #endif |
| 2816 | if( zIpAddr==0 ){ |
| 2817 | zBrowserCmd = mprintf("%s \"http://localhost:%%d/%s\" &", |
| 2818 | zBrowser, zInitPage); |
| 2819 | }else if( strchr(zIpAddr,':') ){ |
| 2820 | zBrowserCmd = mprintf("%s \"http://[%s]:%%d/%s\" &", |
| 2821 | zBrowser, zIpAddr, zInitPage); |
| 2822 | }else{ |
| 2823 | zBrowserCmd = mprintf("%s \"http://%s:%%d/%s\" &", |
| 2824 | zBrowser, zIpAddr, zInitPage); |
| 2825 | } |
| 2826 | } |
| 2827 | if( g.repositoryOpen ) flags |= HTTP_SERVER_HAD_REPOSITORY; |
| 2828 | if( g.localOpen ) flags |= HTTP_SERVER_HAD_CHECKOUT; |
| 2829 |
+20
| --- src/main.mk | ||
| +++ src/main.mk | ||
| @@ -54,10 +54,11 @@ | ||
| 54 | 54 | $(SRCDIR)/etag.c \ |
| 55 | 55 | $(SRCDIR)/event.c \ |
| 56 | 56 | $(SRCDIR)/export.c \ |
| 57 | 57 | $(SRCDIR)/extcgi.c \ |
| 58 | 58 | $(SRCDIR)/file.c \ |
| 59 | + $(SRCDIR)/fileedit.c \ | |
| 59 | 60 | $(SRCDIR)/finfo.c \ |
| 60 | 61 | $(SRCDIR)/foci.c \ |
| 61 | 62 | $(SRCDIR)/forum.c \ |
| 62 | 63 | $(SRCDIR)/fshell.c \ |
| 63 | 64 | $(SRCDIR)/fusefs.c \ |
| @@ -218,10 +219,17 @@ | ||
| 218 | 219 | $(SRCDIR)/accordion.js \ |
| 219 | 220 | $(SRCDIR)/ci_edit.js \ |
| 220 | 221 | $(SRCDIR)/copybtn.js \ |
| 221 | 222 | $(SRCDIR)/diff.tcl \ |
| 222 | 223 | $(SRCDIR)/forum.js \ |
| 224 | + $(SRCDIR)/fossil.bootstrap.js \ | |
| 225 | + $(SRCDIR)/fossil.confirmer.js \ | |
| 226 | + $(SRCDIR)/fossil.dom.js \ | |
| 227 | + $(SRCDIR)/fossil.fetch.js \ | |
| 228 | + $(SRCDIR)/fossil.page.fileedit.js \ | |
| 229 | + $(SRCDIR)/fossil.storage.js \ | |
| 230 | + $(SRCDIR)/fossil.tabs.js \ | |
| 223 | 231 | $(SRCDIR)/graph.js \ |
| 224 | 232 | $(SRCDIR)/href.js \ |
| 225 | 233 | $(SRCDIR)/login.js \ |
| 226 | 234 | $(SRCDIR)/markdown.md \ |
| 227 | 235 | $(SRCDIR)/menu.js \ |
| @@ -244,10 +252,11 @@ | ||
| 244 | 252 | $(SRCDIR)/sounds/c.wav \ |
| 245 | 253 | $(SRCDIR)/sounds/d.wav \ |
| 246 | 254 | $(SRCDIR)/sounds/e.wav \ |
| 247 | 255 | $(SRCDIR)/sounds/f.wav \ |
| 248 | 256 | $(SRCDIR)/style.admin_log.css \ |
| 257 | + $(SRCDIR)/style.fileedit.css \ | |
| 249 | 258 | $(SRCDIR)/tree.js \ |
| 250 | 259 | $(SRCDIR)/useredit.js \ |
| 251 | 260 | $(SRCDIR)/wiki.wiki |
| 252 | 261 | |
| 253 | 262 | TRANS_SRC = \ |
| @@ -289,10 +298,11 @@ | ||
| 289 | 298 | $(OBJDIR)/etag_.c \ |
| 290 | 299 | $(OBJDIR)/event_.c \ |
| 291 | 300 | $(OBJDIR)/export_.c \ |
| 292 | 301 | $(OBJDIR)/extcgi_.c \ |
| 293 | 302 | $(OBJDIR)/file_.c \ |
| 303 | + $(OBJDIR)/fileedit_.c \ | |
| 294 | 304 | $(OBJDIR)/finfo_.c \ |
| 295 | 305 | $(OBJDIR)/foci_.c \ |
| 296 | 306 | $(OBJDIR)/forum_.c \ |
| 297 | 307 | $(OBJDIR)/fshell_.c \ |
| 298 | 308 | $(OBJDIR)/fusefs_.c \ |
| @@ -432,10 +442,11 @@ | ||
| 432 | 442 | $(OBJDIR)/etag.o \ |
| 433 | 443 | $(OBJDIR)/event.o \ |
| 434 | 444 | $(OBJDIR)/export.o \ |
| 435 | 445 | $(OBJDIR)/extcgi.o \ |
| 436 | 446 | $(OBJDIR)/file.o \ |
| 447 | + $(OBJDIR)/fileedit.o \ | |
| 437 | 448 | $(OBJDIR)/finfo.o \ |
| 438 | 449 | $(OBJDIR)/foci.o \ |
| 439 | 450 | $(OBJDIR)/forum.o \ |
| 440 | 451 | $(OBJDIR)/fshell.o \ |
| 441 | 452 | $(OBJDIR)/fusefs.o \ |
| @@ -770,10 +781,11 @@ | ||
| 770 | 781 | $(OBJDIR)/etag_.c:$(OBJDIR)/etag.h \ |
| 771 | 782 | $(OBJDIR)/event_.c:$(OBJDIR)/event.h \ |
| 772 | 783 | $(OBJDIR)/export_.c:$(OBJDIR)/export.h \ |
| 773 | 784 | $(OBJDIR)/extcgi_.c:$(OBJDIR)/extcgi.h \ |
| 774 | 785 | $(OBJDIR)/file_.c:$(OBJDIR)/file.h \ |
| 786 | + $(OBJDIR)/fileedit_.c:$(OBJDIR)/fileedit.h \ | |
| 775 | 787 | $(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h \ |
| 776 | 788 | $(OBJDIR)/foci_.c:$(OBJDIR)/foci.h \ |
| 777 | 789 | $(OBJDIR)/forum_.c:$(OBJDIR)/forum.h \ |
| 778 | 790 | $(OBJDIR)/fshell_.c:$(OBJDIR)/fshell.h \ |
| 779 | 791 | $(OBJDIR)/fusefs_.c:$(OBJDIR)/fusefs.h \ |
| @@ -1197,10 +1209,18 @@ | ||
| 1197 | 1209 | |
| 1198 | 1210 | $(OBJDIR)/file.o: $(OBJDIR)/file_.c $(OBJDIR)/file.h $(SRCDIR)/config.h |
| 1199 | 1211 | $(XTCC) -o $(OBJDIR)/file.o -c $(OBJDIR)/file_.c |
| 1200 | 1212 | |
| 1201 | 1213 | $(OBJDIR)/file.h: $(OBJDIR)/headers |
| 1214 | + | |
| 1215 | +$(OBJDIR)/fileedit_.c: $(SRCDIR)/fileedit.c $(OBJDIR)/translate | |
| 1216 | + $(OBJDIR)/translate $(SRCDIR)/fileedit.c >$@ | |
| 1217 | + | |
| 1218 | +$(OBJDIR)/fileedit.o: $(OBJDIR)/fileedit_.c $(OBJDIR)/fileedit.h $(SRCDIR)/config.h | |
| 1219 | + $(XTCC) -o $(OBJDIR)/fileedit.o -c $(OBJDIR)/fileedit_.c | |
| 1220 | + | |
| 1221 | +$(OBJDIR)/fileedit.h: $(OBJDIR)/headers | |
| 1202 | 1222 | |
| 1203 | 1223 | $(OBJDIR)/finfo_.c: $(SRCDIR)/finfo.c $(OBJDIR)/translate |
| 1204 | 1224 | $(OBJDIR)/translate $(SRCDIR)/finfo.c >$@ |
| 1205 | 1225 | |
| 1206 | 1226 | $(OBJDIR)/finfo.o: $(OBJDIR)/finfo_.c $(OBJDIR)/finfo.h $(SRCDIR)/config.h |
| 1207 | 1227 |
| --- src/main.mk | |
| +++ src/main.mk | |
| @@ -54,10 +54,11 @@ | |
| 54 | $(SRCDIR)/etag.c \ |
| 55 | $(SRCDIR)/event.c \ |
| 56 | $(SRCDIR)/export.c \ |
| 57 | $(SRCDIR)/extcgi.c \ |
| 58 | $(SRCDIR)/file.c \ |
| 59 | $(SRCDIR)/finfo.c \ |
| 60 | $(SRCDIR)/foci.c \ |
| 61 | $(SRCDIR)/forum.c \ |
| 62 | $(SRCDIR)/fshell.c \ |
| 63 | $(SRCDIR)/fusefs.c \ |
| @@ -218,10 +219,17 @@ | |
| 218 | $(SRCDIR)/accordion.js \ |
| 219 | $(SRCDIR)/ci_edit.js \ |
| 220 | $(SRCDIR)/copybtn.js \ |
| 221 | $(SRCDIR)/diff.tcl \ |
| 222 | $(SRCDIR)/forum.js \ |
| 223 | $(SRCDIR)/graph.js \ |
| 224 | $(SRCDIR)/href.js \ |
| 225 | $(SRCDIR)/login.js \ |
| 226 | $(SRCDIR)/markdown.md \ |
| 227 | $(SRCDIR)/menu.js \ |
| @@ -244,10 +252,11 @@ | |
| 244 | $(SRCDIR)/sounds/c.wav \ |
| 245 | $(SRCDIR)/sounds/d.wav \ |
| 246 | $(SRCDIR)/sounds/e.wav \ |
| 247 | $(SRCDIR)/sounds/f.wav \ |
| 248 | $(SRCDIR)/style.admin_log.css \ |
| 249 | $(SRCDIR)/tree.js \ |
| 250 | $(SRCDIR)/useredit.js \ |
| 251 | $(SRCDIR)/wiki.wiki |
| 252 | |
| 253 | TRANS_SRC = \ |
| @@ -289,10 +298,11 @@ | |
| 289 | $(OBJDIR)/etag_.c \ |
| 290 | $(OBJDIR)/event_.c \ |
| 291 | $(OBJDIR)/export_.c \ |
| 292 | $(OBJDIR)/extcgi_.c \ |
| 293 | $(OBJDIR)/file_.c \ |
| 294 | $(OBJDIR)/finfo_.c \ |
| 295 | $(OBJDIR)/foci_.c \ |
| 296 | $(OBJDIR)/forum_.c \ |
| 297 | $(OBJDIR)/fshell_.c \ |
| 298 | $(OBJDIR)/fusefs_.c \ |
| @@ -432,10 +442,11 @@ | |
| 432 | $(OBJDIR)/etag.o \ |
| 433 | $(OBJDIR)/event.o \ |
| 434 | $(OBJDIR)/export.o \ |
| 435 | $(OBJDIR)/extcgi.o \ |
| 436 | $(OBJDIR)/file.o \ |
| 437 | $(OBJDIR)/finfo.o \ |
| 438 | $(OBJDIR)/foci.o \ |
| 439 | $(OBJDIR)/forum.o \ |
| 440 | $(OBJDIR)/fshell.o \ |
| 441 | $(OBJDIR)/fusefs.o \ |
| @@ -770,10 +781,11 @@ | |
| 770 | $(OBJDIR)/etag_.c:$(OBJDIR)/etag.h \ |
| 771 | $(OBJDIR)/event_.c:$(OBJDIR)/event.h \ |
| 772 | $(OBJDIR)/export_.c:$(OBJDIR)/export.h \ |
| 773 | $(OBJDIR)/extcgi_.c:$(OBJDIR)/extcgi.h \ |
| 774 | $(OBJDIR)/file_.c:$(OBJDIR)/file.h \ |
| 775 | $(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h \ |
| 776 | $(OBJDIR)/foci_.c:$(OBJDIR)/foci.h \ |
| 777 | $(OBJDIR)/forum_.c:$(OBJDIR)/forum.h \ |
| 778 | $(OBJDIR)/fshell_.c:$(OBJDIR)/fshell.h \ |
| 779 | $(OBJDIR)/fusefs_.c:$(OBJDIR)/fusefs.h \ |
| @@ -1197,10 +1209,18 @@ | |
| 1197 | |
| 1198 | $(OBJDIR)/file.o: $(OBJDIR)/file_.c $(OBJDIR)/file.h $(SRCDIR)/config.h |
| 1199 | $(XTCC) -o $(OBJDIR)/file.o -c $(OBJDIR)/file_.c |
| 1200 | |
| 1201 | $(OBJDIR)/file.h: $(OBJDIR)/headers |
| 1202 | |
| 1203 | $(OBJDIR)/finfo_.c: $(SRCDIR)/finfo.c $(OBJDIR)/translate |
| 1204 | $(OBJDIR)/translate $(SRCDIR)/finfo.c >$@ |
| 1205 | |
| 1206 | $(OBJDIR)/finfo.o: $(OBJDIR)/finfo_.c $(OBJDIR)/finfo.h $(SRCDIR)/config.h |
| 1207 |
| --- src/main.mk | |
| +++ src/main.mk | |
| @@ -54,10 +54,11 @@ | |
| 54 | $(SRCDIR)/etag.c \ |
| 55 | $(SRCDIR)/event.c \ |
| 56 | $(SRCDIR)/export.c \ |
| 57 | $(SRCDIR)/extcgi.c \ |
| 58 | $(SRCDIR)/file.c \ |
| 59 | $(SRCDIR)/fileedit.c \ |
| 60 | $(SRCDIR)/finfo.c \ |
| 61 | $(SRCDIR)/foci.c \ |
| 62 | $(SRCDIR)/forum.c \ |
| 63 | $(SRCDIR)/fshell.c \ |
| 64 | $(SRCDIR)/fusefs.c \ |
| @@ -218,10 +219,17 @@ | |
| 219 | $(SRCDIR)/accordion.js \ |
| 220 | $(SRCDIR)/ci_edit.js \ |
| 221 | $(SRCDIR)/copybtn.js \ |
| 222 | $(SRCDIR)/diff.tcl \ |
| 223 | $(SRCDIR)/forum.js \ |
| 224 | $(SRCDIR)/fossil.bootstrap.js \ |
| 225 | $(SRCDIR)/fossil.confirmer.js \ |
| 226 | $(SRCDIR)/fossil.dom.js \ |
| 227 | $(SRCDIR)/fossil.fetch.js \ |
| 228 | $(SRCDIR)/fossil.page.fileedit.js \ |
| 229 | $(SRCDIR)/fossil.storage.js \ |
| 230 | $(SRCDIR)/fossil.tabs.js \ |
| 231 | $(SRCDIR)/graph.js \ |
| 232 | $(SRCDIR)/href.js \ |
| 233 | $(SRCDIR)/login.js \ |
| 234 | $(SRCDIR)/markdown.md \ |
| 235 | $(SRCDIR)/menu.js \ |
| @@ -244,10 +252,11 @@ | |
| 252 | $(SRCDIR)/sounds/c.wav \ |
| 253 | $(SRCDIR)/sounds/d.wav \ |
| 254 | $(SRCDIR)/sounds/e.wav \ |
| 255 | $(SRCDIR)/sounds/f.wav \ |
| 256 | $(SRCDIR)/style.admin_log.css \ |
| 257 | $(SRCDIR)/style.fileedit.css \ |
| 258 | $(SRCDIR)/tree.js \ |
| 259 | $(SRCDIR)/useredit.js \ |
| 260 | $(SRCDIR)/wiki.wiki |
| 261 | |
| 262 | TRANS_SRC = \ |
| @@ -289,10 +298,11 @@ | |
| 298 | $(OBJDIR)/etag_.c \ |
| 299 | $(OBJDIR)/event_.c \ |
| 300 | $(OBJDIR)/export_.c \ |
| 301 | $(OBJDIR)/extcgi_.c \ |
| 302 | $(OBJDIR)/file_.c \ |
| 303 | $(OBJDIR)/fileedit_.c \ |
| 304 | $(OBJDIR)/finfo_.c \ |
| 305 | $(OBJDIR)/foci_.c \ |
| 306 | $(OBJDIR)/forum_.c \ |
| 307 | $(OBJDIR)/fshell_.c \ |
| 308 | $(OBJDIR)/fusefs_.c \ |
| @@ -432,10 +442,11 @@ | |
| 442 | $(OBJDIR)/etag.o \ |
| 443 | $(OBJDIR)/event.o \ |
| 444 | $(OBJDIR)/export.o \ |
| 445 | $(OBJDIR)/extcgi.o \ |
| 446 | $(OBJDIR)/file.o \ |
| 447 | $(OBJDIR)/fileedit.o \ |
| 448 | $(OBJDIR)/finfo.o \ |
| 449 | $(OBJDIR)/foci.o \ |
| 450 | $(OBJDIR)/forum.o \ |
| 451 | $(OBJDIR)/fshell.o \ |
| 452 | $(OBJDIR)/fusefs.o \ |
| @@ -770,10 +781,11 @@ | |
| 781 | $(OBJDIR)/etag_.c:$(OBJDIR)/etag.h \ |
| 782 | $(OBJDIR)/event_.c:$(OBJDIR)/event.h \ |
| 783 | $(OBJDIR)/export_.c:$(OBJDIR)/export.h \ |
| 784 | $(OBJDIR)/extcgi_.c:$(OBJDIR)/extcgi.h \ |
| 785 | $(OBJDIR)/file_.c:$(OBJDIR)/file.h \ |
| 786 | $(OBJDIR)/fileedit_.c:$(OBJDIR)/fileedit.h \ |
| 787 | $(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h \ |
| 788 | $(OBJDIR)/foci_.c:$(OBJDIR)/foci.h \ |
| 789 | $(OBJDIR)/forum_.c:$(OBJDIR)/forum.h \ |
| 790 | $(OBJDIR)/fshell_.c:$(OBJDIR)/fshell.h \ |
| 791 | $(OBJDIR)/fusefs_.c:$(OBJDIR)/fusefs.h \ |
| @@ -1197,10 +1209,18 @@ | |
| 1209 | |
| 1210 | $(OBJDIR)/file.o: $(OBJDIR)/file_.c $(OBJDIR)/file.h $(SRCDIR)/config.h |
| 1211 | $(XTCC) -o $(OBJDIR)/file.o -c $(OBJDIR)/file_.c |
| 1212 | |
| 1213 | $(OBJDIR)/file.h: $(OBJDIR)/headers |
| 1214 | |
| 1215 | $(OBJDIR)/fileedit_.c: $(SRCDIR)/fileedit.c $(OBJDIR)/translate |
| 1216 | $(OBJDIR)/translate $(SRCDIR)/fileedit.c >$@ |
| 1217 | |
| 1218 | $(OBJDIR)/fileedit.o: $(OBJDIR)/fileedit_.c $(OBJDIR)/fileedit.h $(SRCDIR)/config.h |
| 1219 | $(XTCC) -o $(OBJDIR)/fileedit.o -c $(OBJDIR)/fileedit_.c |
| 1220 | |
| 1221 | $(OBJDIR)/fileedit.h: $(OBJDIR)/headers |
| 1222 | |
| 1223 | $(OBJDIR)/finfo_.c: $(SRCDIR)/finfo.c $(OBJDIR)/translate |
| 1224 | $(OBJDIR)/translate $(SRCDIR)/finfo.c >$@ |
| 1225 | |
| 1226 | $(OBJDIR)/finfo.o: $(OBJDIR)/finfo_.c $(OBJDIR)/finfo.h $(SRCDIR)/config.h |
| 1227 |
+20
| --- src/main.mk | ||
| +++ src/main.mk | ||
| @@ -54,10 +54,11 @@ | ||
| 54 | 54 | $(SRCDIR)/etag.c \ |
| 55 | 55 | $(SRCDIR)/event.c \ |
| 56 | 56 | $(SRCDIR)/export.c \ |
| 57 | 57 | $(SRCDIR)/extcgi.c \ |
| 58 | 58 | $(SRCDIR)/file.c \ |
| 59 | + $(SRCDIR)/fileedit.c \ | |
| 59 | 60 | $(SRCDIR)/finfo.c \ |
| 60 | 61 | $(SRCDIR)/foci.c \ |
| 61 | 62 | $(SRCDIR)/forum.c \ |
| 62 | 63 | $(SRCDIR)/fshell.c \ |
| 63 | 64 | $(SRCDIR)/fusefs.c \ |
| @@ -218,10 +219,17 @@ | ||
| 218 | 219 | $(SRCDIR)/accordion.js \ |
| 219 | 220 | $(SRCDIR)/ci_edit.js \ |
| 220 | 221 | $(SRCDIR)/copybtn.js \ |
| 221 | 222 | $(SRCDIR)/diff.tcl \ |
| 222 | 223 | $(SRCDIR)/forum.js \ |
| 224 | + $(SRCDIR)/fossil.bootstrap.js \ | |
| 225 | + $(SRCDIR)/fossil.confirmer.js \ | |
| 226 | + $(SRCDIR)/fossil.dom.js \ | |
| 227 | + $(SRCDIR)/fossil.fetch.js \ | |
| 228 | + $(SRCDIR)/fossil.page.fileedit.js \ | |
| 229 | + $(SRCDIR)/fossil.storage.js \ | |
| 230 | + $(SRCDIR)/fossil.tabs.js \ | |
| 223 | 231 | $(SRCDIR)/graph.js \ |
| 224 | 232 | $(SRCDIR)/href.js \ |
| 225 | 233 | $(SRCDIR)/login.js \ |
| 226 | 234 | $(SRCDIR)/markdown.md \ |
| 227 | 235 | $(SRCDIR)/menu.js \ |
| @@ -244,10 +252,11 @@ | ||
| 244 | 252 | $(SRCDIR)/sounds/c.wav \ |
| 245 | 253 | $(SRCDIR)/sounds/d.wav \ |
| 246 | 254 | $(SRCDIR)/sounds/e.wav \ |
| 247 | 255 | $(SRCDIR)/sounds/f.wav \ |
| 248 | 256 | $(SRCDIR)/style.admin_log.css \ |
| 257 | + $(SRCDIR)/style.fileedit.css \ | |
| 249 | 258 | $(SRCDIR)/tree.js \ |
| 250 | 259 | $(SRCDIR)/useredit.js \ |
| 251 | 260 | $(SRCDIR)/wiki.wiki |
| 252 | 261 | |
| 253 | 262 | TRANS_SRC = \ |
| @@ -289,10 +298,11 @@ | ||
| 289 | 298 | $(OBJDIR)/etag_.c \ |
| 290 | 299 | $(OBJDIR)/event_.c \ |
| 291 | 300 | $(OBJDIR)/export_.c \ |
| 292 | 301 | $(OBJDIR)/extcgi_.c \ |
| 293 | 302 | $(OBJDIR)/file_.c \ |
| 303 | + $(OBJDIR)/fileedit_.c \ | |
| 294 | 304 | $(OBJDIR)/finfo_.c \ |
| 295 | 305 | $(OBJDIR)/foci_.c \ |
| 296 | 306 | $(OBJDIR)/forum_.c \ |
| 297 | 307 | $(OBJDIR)/fshell_.c \ |
| 298 | 308 | $(OBJDIR)/fusefs_.c \ |
| @@ -432,10 +442,11 @@ | ||
| 432 | 442 | $(OBJDIR)/etag.o \ |
| 433 | 443 | $(OBJDIR)/event.o \ |
| 434 | 444 | $(OBJDIR)/export.o \ |
| 435 | 445 | $(OBJDIR)/extcgi.o \ |
| 436 | 446 | $(OBJDIR)/file.o \ |
| 447 | + $(OBJDIR)/fileedit.o \ | |
| 437 | 448 | $(OBJDIR)/finfo.o \ |
| 438 | 449 | $(OBJDIR)/foci.o \ |
| 439 | 450 | $(OBJDIR)/forum.o \ |
| 440 | 451 | $(OBJDIR)/fshell.o \ |
| 441 | 452 | $(OBJDIR)/fusefs.o \ |
| @@ -770,10 +781,11 @@ | ||
| 770 | 781 | $(OBJDIR)/etag_.c:$(OBJDIR)/etag.h \ |
| 771 | 782 | $(OBJDIR)/event_.c:$(OBJDIR)/event.h \ |
| 772 | 783 | $(OBJDIR)/export_.c:$(OBJDIR)/export.h \ |
| 773 | 784 | $(OBJDIR)/extcgi_.c:$(OBJDIR)/extcgi.h \ |
| 774 | 785 | $(OBJDIR)/file_.c:$(OBJDIR)/file.h \ |
| 786 | + $(OBJDIR)/fileedit_.c:$(OBJDIR)/fileedit.h \ | |
| 775 | 787 | $(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h \ |
| 776 | 788 | $(OBJDIR)/foci_.c:$(OBJDIR)/foci.h \ |
| 777 | 789 | $(OBJDIR)/forum_.c:$(OBJDIR)/forum.h \ |
| 778 | 790 | $(OBJDIR)/fshell_.c:$(OBJDIR)/fshell.h \ |
| 779 | 791 | $(OBJDIR)/fusefs_.c:$(OBJDIR)/fusefs.h \ |
| @@ -1197,10 +1209,18 @@ | ||
| 1197 | 1209 | |
| 1198 | 1210 | $(OBJDIR)/file.o: $(OBJDIR)/file_.c $(OBJDIR)/file.h $(SRCDIR)/config.h |
| 1199 | 1211 | $(XTCC) -o $(OBJDIR)/file.o -c $(OBJDIR)/file_.c |
| 1200 | 1212 | |
| 1201 | 1213 | $(OBJDIR)/file.h: $(OBJDIR)/headers |
| 1214 | + | |
| 1215 | +$(OBJDIR)/fileedit_.c: $(SRCDIR)/fileedit.c $(OBJDIR)/translate | |
| 1216 | + $(OBJDIR)/translate $(SRCDIR)/fileedit.c >$@ | |
| 1217 | + | |
| 1218 | +$(OBJDIR)/fileedit.o: $(OBJDIR)/fileedit_.c $(OBJDIR)/fileedit.h $(SRCDIR)/config.h | |
| 1219 | + $(XTCC) -o $(OBJDIR)/fileedit.o -c $(OBJDIR)/fileedit_.c | |
| 1220 | + | |
| 1221 | +$(OBJDIR)/fileedit.h: $(OBJDIR)/headers | |
| 1202 | 1222 | |
| 1203 | 1223 | $(OBJDIR)/finfo_.c: $(SRCDIR)/finfo.c $(OBJDIR)/translate |
| 1204 | 1224 | $(OBJDIR)/translate $(SRCDIR)/finfo.c >$@ |
| 1205 | 1225 | |
| 1206 | 1226 | $(OBJDIR)/finfo.o: $(OBJDIR)/finfo_.c $(OBJDIR)/finfo.h $(SRCDIR)/config.h |
| 1207 | 1227 |
| --- src/main.mk | |
| +++ src/main.mk | |
| @@ -54,10 +54,11 @@ | |
| 54 | $(SRCDIR)/etag.c \ |
| 55 | $(SRCDIR)/event.c \ |
| 56 | $(SRCDIR)/export.c \ |
| 57 | $(SRCDIR)/extcgi.c \ |
| 58 | $(SRCDIR)/file.c \ |
| 59 | $(SRCDIR)/finfo.c \ |
| 60 | $(SRCDIR)/foci.c \ |
| 61 | $(SRCDIR)/forum.c \ |
| 62 | $(SRCDIR)/fshell.c \ |
| 63 | $(SRCDIR)/fusefs.c \ |
| @@ -218,10 +219,17 @@ | |
| 218 | $(SRCDIR)/accordion.js \ |
| 219 | $(SRCDIR)/ci_edit.js \ |
| 220 | $(SRCDIR)/copybtn.js \ |
| 221 | $(SRCDIR)/diff.tcl \ |
| 222 | $(SRCDIR)/forum.js \ |
| 223 | $(SRCDIR)/graph.js \ |
| 224 | $(SRCDIR)/href.js \ |
| 225 | $(SRCDIR)/login.js \ |
| 226 | $(SRCDIR)/markdown.md \ |
| 227 | $(SRCDIR)/menu.js \ |
| @@ -244,10 +252,11 @@ | |
| 244 | $(SRCDIR)/sounds/c.wav \ |
| 245 | $(SRCDIR)/sounds/d.wav \ |
| 246 | $(SRCDIR)/sounds/e.wav \ |
| 247 | $(SRCDIR)/sounds/f.wav \ |
| 248 | $(SRCDIR)/style.admin_log.css \ |
| 249 | $(SRCDIR)/tree.js \ |
| 250 | $(SRCDIR)/useredit.js \ |
| 251 | $(SRCDIR)/wiki.wiki |
| 252 | |
| 253 | TRANS_SRC = \ |
| @@ -289,10 +298,11 @@ | |
| 289 | $(OBJDIR)/etag_.c \ |
| 290 | $(OBJDIR)/event_.c \ |
| 291 | $(OBJDIR)/export_.c \ |
| 292 | $(OBJDIR)/extcgi_.c \ |
| 293 | $(OBJDIR)/file_.c \ |
| 294 | $(OBJDIR)/finfo_.c \ |
| 295 | $(OBJDIR)/foci_.c \ |
| 296 | $(OBJDIR)/forum_.c \ |
| 297 | $(OBJDIR)/fshell_.c \ |
| 298 | $(OBJDIR)/fusefs_.c \ |
| @@ -432,10 +442,11 @@ | |
| 432 | $(OBJDIR)/etag.o \ |
| 433 | $(OBJDIR)/event.o \ |
| 434 | $(OBJDIR)/export.o \ |
| 435 | $(OBJDIR)/extcgi.o \ |
| 436 | $(OBJDIR)/file.o \ |
| 437 | $(OBJDIR)/finfo.o \ |
| 438 | $(OBJDIR)/foci.o \ |
| 439 | $(OBJDIR)/forum.o \ |
| 440 | $(OBJDIR)/fshell.o \ |
| 441 | $(OBJDIR)/fusefs.o \ |
| @@ -770,10 +781,11 @@ | |
| 770 | $(OBJDIR)/etag_.c:$(OBJDIR)/etag.h \ |
| 771 | $(OBJDIR)/event_.c:$(OBJDIR)/event.h \ |
| 772 | $(OBJDIR)/export_.c:$(OBJDIR)/export.h \ |
| 773 | $(OBJDIR)/extcgi_.c:$(OBJDIR)/extcgi.h \ |
| 774 | $(OBJDIR)/file_.c:$(OBJDIR)/file.h \ |
| 775 | $(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h \ |
| 776 | $(OBJDIR)/foci_.c:$(OBJDIR)/foci.h \ |
| 777 | $(OBJDIR)/forum_.c:$(OBJDIR)/forum.h \ |
| 778 | $(OBJDIR)/fshell_.c:$(OBJDIR)/fshell.h \ |
| 779 | $(OBJDIR)/fusefs_.c:$(OBJDIR)/fusefs.h \ |
| @@ -1197,10 +1209,18 @@ | |
| 1197 | |
| 1198 | $(OBJDIR)/file.o: $(OBJDIR)/file_.c $(OBJDIR)/file.h $(SRCDIR)/config.h |
| 1199 | $(XTCC) -o $(OBJDIR)/file.o -c $(OBJDIR)/file_.c |
| 1200 | |
| 1201 | $(OBJDIR)/file.h: $(OBJDIR)/headers |
| 1202 | |
| 1203 | $(OBJDIR)/finfo_.c: $(SRCDIR)/finfo.c $(OBJDIR)/translate |
| 1204 | $(OBJDIR)/translate $(SRCDIR)/finfo.c >$@ |
| 1205 | |
| 1206 | $(OBJDIR)/finfo.o: $(OBJDIR)/finfo_.c $(OBJDIR)/finfo.h $(SRCDIR)/config.h |
| 1207 |
| --- src/main.mk | |
| +++ src/main.mk | |
| @@ -54,10 +54,11 @@ | |
| 54 | $(SRCDIR)/etag.c \ |
| 55 | $(SRCDIR)/event.c \ |
| 56 | $(SRCDIR)/export.c \ |
| 57 | $(SRCDIR)/extcgi.c \ |
| 58 | $(SRCDIR)/file.c \ |
| 59 | $(SRCDIR)/fileedit.c \ |
| 60 | $(SRCDIR)/finfo.c \ |
| 61 | $(SRCDIR)/foci.c \ |
| 62 | $(SRCDIR)/forum.c \ |
| 63 | $(SRCDIR)/fshell.c \ |
| 64 | $(SRCDIR)/fusefs.c \ |
| @@ -218,10 +219,17 @@ | |
| 219 | $(SRCDIR)/accordion.js \ |
| 220 | $(SRCDIR)/ci_edit.js \ |
| 221 | $(SRCDIR)/copybtn.js \ |
| 222 | $(SRCDIR)/diff.tcl \ |
| 223 | $(SRCDIR)/forum.js \ |
| 224 | $(SRCDIR)/fossil.bootstrap.js \ |
| 225 | $(SRCDIR)/fossil.confirmer.js \ |
| 226 | $(SRCDIR)/fossil.dom.js \ |
| 227 | $(SRCDIR)/fossil.fetch.js \ |
| 228 | $(SRCDIR)/fossil.page.fileedit.js \ |
| 229 | $(SRCDIR)/fossil.storage.js \ |
| 230 | $(SRCDIR)/fossil.tabs.js \ |
| 231 | $(SRCDIR)/graph.js \ |
| 232 | $(SRCDIR)/href.js \ |
| 233 | $(SRCDIR)/login.js \ |
| 234 | $(SRCDIR)/markdown.md \ |
| 235 | $(SRCDIR)/menu.js \ |
| @@ -244,10 +252,11 @@ | |
| 252 | $(SRCDIR)/sounds/c.wav \ |
| 253 | $(SRCDIR)/sounds/d.wav \ |
| 254 | $(SRCDIR)/sounds/e.wav \ |
| 255 | $(SRCDIR)/sounds/f.wav \ |
| 256 | $(SRCDIR)/style.admin_log.css \ |
| 257 | $(SRCDIR)/style.fileedit.css \ |
| 258 | $(SRCDIR)/tree.js \ |
| 259 | $(SRCDIR)/useredit.js \ |
| 260 | $(SRCDIR)/wiki.wiki |
| 261 | |
| 262 | TRANS_SRC = \ |
| @@ -289,10 +298,11 @@ | |
| 298 | $(OBJDIR)/etag_.c \ |
| 299 | $(OBJDIR)/event_.c \ |
| 300 | $(OBJDIR)/export_.c \ |
| 301 | $(OBJDIR)/extcgi_.c \ |
| 302 | $(OBJDIR)/file_.c \ |
| 303 | $(OBJDIR)/fileedit_.c \ |
| 304 | $(OBJDIR)/finfo_.c \ |
| 305 | $(OBJDIR)/foci_.c \ |
| 306 | $(OBJDIR)/forum_.c \ |
| 307 | $(OBJDIR)/fshell_.c \ |
| 308 | $(OBJDIR)/fusefs_.c \ |
| @@ -432,10 +442,11 @@ | |
| 442 | $(OBJDIR)/etag.o \ |
| 443 | $(OBJDIR)/event.o \ |
| 444 | $(OBJDIR)/export.o \ |
| 445 | $(OBJDIR)/extcgi.o \ |
| 446 | $(OBJDIR)/file.o \ |
| 447 | $(OBJDIR)/fileedit.o \ |
| 448 | $(OBJDIR)/finfo.o \ |
| 449 | $(OBJDIR)/foci.o \ |
| 450 | $(OBJDIR)/forum.o \ |
| 451 | $(OBJDIR)/fshell.o \ |
| 452 | $(OBJDIR)/fusefs.o \ |
| @@ -770,10 +781,11 @@ | |
| 781 | $(OBJDIR)/etag_.c:$(OBJDIR)/etag.h \ |
| 782 | $(OBJDIR)/event_.c:$(OBJDIR)/event.h \ |
| 783 | $(OBJDIR)/export_.c:$(OBJDIR)/export.h \ |
| 784 | $(OBJDIR)/extcgi_.c:$(OBJDIR)/extcgi.h \ |
| 785 | $(OBJDIR)/file_.c:$(OBJDIR)/file.h \ |
| 786 | $(OBJDIR)/fileedit_.c:$(OBJDIR)/fileedit.h \ |
| 787 | $(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h \ |
| 788 | $(OBJDIR)/foci_.c:$(OBJDIR)/foci.h \ |
| 789 | $(OBJDIR)/forum_.c:$(OBJDIR)/forum.h \ |
| 790 | $(OBJDIR)/fshell_.c:$(OBJDIR)/fshell.h \ |
| 791 | $(OBJDIR)/fusefs_.c:$(OBJDIR)/fusefs.h \ |
| @@ -1197,10 +1209,18 @@ | |
| 1209 | |
| 1210 | $(OBJDIR)/file.o: $(OBJDIR)/file_.c $(OBJDIR)/file.h $(SRCDIR)/config.h |
| 1211 | $(XTCC) -o $(OBJDIR)/file.o -c $(OBJDIR)/file_.c |
| 1212 | |
| 1213 | $(OBJDIR)/file.h: $(OBJDIR)/headers |
| 1214 | |
| 1215 | $(OBJDIR)/fileedit_.c: $(SRCDIR)/fileedit.c $(OBJDIR)/translate |
| 1216 | $(OBJDIR)/translate $(SRCDIR)/fileedit.c >$@ |
| 1217 | |
| 1218 | $(OBJDIR)/fileedit.o: $(OBJDIR)/fileedit_.c $(OBJDIR)/fileedit.h $(SRCDIR)/config.h |
| 1219 | $(XTCC) -o $(OBJDIR)/fileedit.o -c $(OBJDIR)/fileedit_.c |
| 1220 | |
| 1221 | $(OBJDIR)/fileedit.h: $(OBJDIR)/headers |
| 1222 | |
| 1223 | $(OBJDIR)/finfo_.c: $(SRCDIR)/finfo.c $(OBJDIR)/translate |
| 1224 | $(OBJDIR)/translate $(SRCDIR)/finfo.c >$@ |
| 1225 | |
| 1226 | $(OBJDIR)/finfo.o: $(OBJDIR)/finfo_.c $(OBJDIR)/finfo.h $(SRCDIR)/config.h |
| 1227 |
+1
| --- src/makemake.tcl | ||
| +++ src/makemake.tcl | ||
| @@ -65,10 +65,11 @@ | ||
| 65 | 65 | etag |
| 66 | 66 | event |
| 67 | 67 | extcgi |
| 68 | 68 | export |
| 69 | 69 | file |
| 70 | + fileedit | |
| 70 | 71 | finfo |
| 71 | 72 | foci |
| 72 | 73 | forum |
| 73 | 74 | fshell |
| 74 | 75 | fusefs |
| 75 | 76 |
| --- src/makemake.tcl | |
| +++ src/makemake.tcl | |
| @@ -65,10 +65,11 @@ | |
| 65 | etag |
| 66 | event |
| 67 | extcgi |
| 68 | export |
| 69 | file |
| 70 | finfo |
| 71 | foci |
| 72 | forum |
| 73 | fshell |
| 74 | fusefs |
| 75 |
| --- src/makemake.tcl | |
| +++ src/makemake.tcl | |
| @@ -65,10 +65,11 @@ | |
| 65 | etag |
| 66 | event |
| 67 | extcgi |
| 68 | export |
| 69 | file |
| 70 | fileedit |
| 71 | finfo |
| 72 | foci |
| 73 | forum |
| 74 | fshell |
| 75 | fusefs |
| 76 |
+2
-2
| --- src/manifest.c | ||
| +++ src/manifest.c | ||
| @@ -1064,11 +1064,11 @@ | ||
| 1064 | 1064 | if( !isRepeat ) g.parseCnt[p->type]++; |
| 1065 | 1065 | return p; |
| 1066 | 1066 | |
| 1067 | 1067 | manifest_syntax_error: |
| 1068 | 1068 | { |
| 1069 | - char *zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid); | |
| 1069 | + char *zUuid = rid_to_uuid(rid); | |
| 1070 | 1070 | if( zUuid ){ |
| 1071 | 1071 | blob_appendf(pErr, "artifact [%s] ", zUuid); |
| 1072 | 1072 | fossil_free(zUuid); |
| 1073 | 1073 | } |
| 1074 | 1074 | } |
| @@ -1327,11 +1327,11 @@ | ||
| 1327 | 1327 | |
| 1328 | 1328 | /* |
| 1329 | 1329 | ** Compute an appropriate mlink.mperm integer for the permission string |
| 1330 | 1330 | ** of a file. |
| 1331 | 1331 | */ |
| 1332 | -int manifest_file_mperm(ManifestFile *pFile){ | |
| 1332 | +int manifest_file_mperm(const ManifestFile *pFile){ | |
| 1333 | 1333 | int mperm = PERM_REG; |
| 1334 | 1334 | if( pFile && pFile->zPerm){ |
| 1335 | 1335 | if( strstr(pFile->zPerm,"x")!=0 ){ |
| 1336 | 1336 | mperm = PERM_EXE; |
| 1337 | 1337 | }else if( strstr(pFile->zPerm,"l")!=0 ){ |
| 1338 | 1338 |
| --- src/manifest.c | |
| +++ src/manifest.c | |
| @@ -1064,11 +1064,11 @@ | |
| 1064 | if( !isRepeat ) g.parseCnt[p->type]++; |
| 1065 | return p; |
| 1066 | |
| 1067 | manifest_syntax_error: |
| 1068 | { |
| 1069 | char *zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid); |
| 1070 | if( zUuid ){ |
| 1071 | blob_appendf(pErr, "artifact [%s] ", zUuid); |
| 1072 | fossil_free(zUuid); |
| 1073 | } |
| 1074 | } |
| @@ -1327,11 +1327,11 @@ | |
| 1327 | |
| 1328 | /* |
| 1329 | ** Compute an appropriate mlink.mperm integer for the permission string |
| 1330 | ** of a file. |
| 1331 | */ |
| 1332 | int manifest_file_mperm(ManifestFile *pFile){ |
| 1333 | int mperm = PERM_REG; |
| 1334 | if( pFile && pFile->zPerm){ |
| 1335 | if( strstr(pFile->zPerm,"x")!=0 ){ |
| 1336 | mperm = PERM_EXE; |
| 1337 | }else if( strstr(pFile->zPerm,"l")!=0 ){ |
| 1338 |
| --- src/manifest.c | |
| +++ src/manifest.c | |
| @@ -1064,11 +1064,11 @@ | |
| 1064 | if( !isRepeat ) g.parseCnt[p->type]++; |
| 1065 | return p; |
| 1066 | |
| 1067 | manifest_syntax_error: |
| 1068 | { |
| 1069 | char *zUuid = rid_to_uuid(rid); |
| 1070 | if( zUuid ){ |
| 1071 | blob_appendf(pErr, "artifact [%s] ", zUuid); |
| 1072 | fossil_free(zUuid); |
| 1073 | } |
| 1074 | } |
| @@ -1327,11 +1327,11 @@ | |
| 1327 | |
| 1328 | /* |
| 1329 | ** Compute an appropriate mlink.mperm integer for the permission string |
| 1330 | ** of a file. |
| 1331 | */ |
| 1332 | int manifest_file_mperm(const ManifestFile *pFile){ |
| 1333 | int mperm = PERM_REG; |
| 1334 | if( pFile && pFile->zPerm){ |
| 1335 | if( strstr(pFile->zPerm,"x")!=0 ){ |
| 1336 | mperm = PERM_EXE; |
| 1337 | }else if( strstr(pFile->zPerm,"l")!=0 ){ |
| 1338 |
+4
-3
| --- src/printf.c | ||
| +++ src/printf.c | ||
| @@ -99,11 +99,12 @@ | ||
| 99 | 99 | #define etFOSSILIZE 20 /* The fossil header encoding format. */ |
| 100 | 100 | #define etPATH 21 /* Path type */ |
| 101 | 101 | #define etWIKISTR 22 /* Timeline comment text rendered from a char*: %W */ |
| 102 | 102 | #define etSTRINGID 23 /* String with length limit for a UUID prefix: %S */ |
| 103 | 103 | #define etROOT 24 /* String value of g.zTop: %R */ |
| 104 | -#define etJSONSTR 25 /* String encoded as a JSON string literal: %j */ | |
| 104 | +#define etJSONSTR 25 /* String encoded as a JSON string literal: %j | |
| 105 | + Use %!j to include double-quotes around it. */ | |
| 105 | 106 | |
| 106 | 107 | |
| 107 | 108 | /* |
| 108 | 109 | ** An "etByte" is an 8-bit unsigned value. |
| 109 | 110 | */ |
| @@ -798,12 +799,12 @@ | ||
| 798 | 799 | /* Ignore the limit flag, if set, for JSON string |
| 799 | 800 | ** output. This block exists to squelch the associated |
| 800 | 801 | ** "unused variable" compiler warning. */ |
| 801 | 802 | } |
| 802 | 803 | if( zMem==0 ) zMem = ""; |
| 803 | - zExtra = bufpt = encode_json_string_literal(zMem); | |
| 804 | - length = strlen(bufpt); | |
| 804 | + zExtra = bufpt = | |
| 805 | + encode_json_string_literal(zMem, flag_altform2, &length); | |
| 805 | 806 | if( precision>=0 && precision<length ) length = precision; |
| 806 | 807 | break; |
| 807 | 808 | } |
| 808 | 809 | case etWIKISTR: { |
| 809 | 810 | int limit = flag_alternateform ? va_arg(ap,int) : -1; |
| 810 | 811 |
| --- src/printf.c | |
| +++ src/printf.c | |
| @@ -99,11 +99,12 @@ | |
| 99 | #define etFOSSILIZE 20 /* The fossil header encoding format. */ |
| 100 | #define etPATH 21 /* Path type */ |
| 101 | #define etWIKISTR 22 /* Timeline comment text rendered from a char*: %W */ |
| 102 | #define etSTRINGID 23 /* String with length limit for a UUID prefix: %S */ |
| 103 | #define etROOT 24 /* String value of g.zTop: %R */ |
| 104 | #define etJSONSTR 25 /* String encoded as a JSON string literal: %j */ |
| 105 | |
| 106 | |
| 107 | /* |
| 108 | ** An "etByte" is an 8-bit unsigned value. |
| 109 | */ |
| @@ -798,12 +799,12 @@ | |
| 798 | /* Ignore the limit flag, if set, for JSON string |
| 799 | ** output. This block exists to squelch the associated |
| 800 | ** "unused variable" compiler warning. */ |
| 801 | } |
| 802 | if( zMem==0 ) zMem = ""; |
| 803 | zExtra = bufpt = encode_json_string_literal(zMem); |
| 804 | length = strlen(bufpt); |
| 805 | if( precision>=0 && precision<length ) length = precision; |
| 806 | break; |
| 807 | } |
| 808 | case etWIKISTR: { |
| 809 | int limit = flag_alternateform ? va_arg(ap,int) : -1; |
| 810 |
| --- src/printf.c | |
| +++ src/printf.c | |
| @@ -99,11 +99,12 @@ | |
| 99 | #define etFOSSILIZE 20 /* The fossil header encoding format. */ |
| 100 | #define etPATH 21 /* Path type */ |
| 101 | #define etWIKISTR 22 /* Timeline comment text rendered from a char*: %W */ |
| 102 | #define etSTRINGID 23 /* String with length limit for a UUID prefix: %S */ |
| 103 | #define etROOT 24 /* String value of g.zTop: %R */ |
| 104 | #define etJSONSTR 25 /* String encoded as a JSON string literal: %j |
| 105 | Use %!j to include double-quotes around it. */ |
| 106 | |
| 107 | |
| 108 | /* |
| 109 | ** An "etByte" is an 8-bit unsigned value. |
| 110 | */ |
| @@ -798,12 +799,12 @@ | |
| 799 | /* Ignore the limit flag, if set, for JSON string |
| 800 | ** output. This block exists to squelch the associated |
| 801 | ** "unused variable" compiler warning. */ |
| 802 | } |
| 803 | if( zMem==0 ) zMem = ""; |
| 804 | zExtra = bufpt = |
| 805 | encode_json_string_literal(zMem, flag_altform2, &length); |
| 806 | if( precision>=0 && precision<length ) length = precision; |
| 807 | break; |
| 808 | } |
| 809 | case etWIKISTR: { |
| 810 | int limit = flag_alternateform ? va_arg(ap,int) : -1; |
| 811 |
+8
-5
| --- src/sbsdiff.js | ||
| +++ src/sbsdiff.js | ||
| @@ -6,11 +6,12 @@ | ||
| 6 | 6 | var SCROLL_LEN = 25; |
| 7 | 7 | function initSbsDiff(diff){ |
| 8 | 8 | var txtCols = diff.querySelectorAll('.difftxtcol'); |
| 9 | 9 | var txtPres = diff.querySelectorAll('.difftxtcol pre'); |
| 10 | 10 | var width = Math.max(txtPres[0].scrollWidth, txtPres[1].scrollWidth); |
| 11 | - for(var i=0; i<2; i++){ | |
| 11 | + var i; | |
| 12 | + for(i=0; i<2; i++){ | |
| 12 | 13 | txtPres[i].style.width = width + 'px'; |
| 13 | 14 | txtCols[i].onscroll = function(e){ |
| 14 | 15 | txtCols[0].scrollLeft = txtCols[1].scrollLeft = this.scrollLeft; |
| 15 | 16 | }; |
| 16 | 17 | } |
| @@ -21,10 +22,12 @@ | ||
| 21 | 22 | if( !len ) return; |
| 22 | 23 | txtCols[0].scrollLeft += len; |
| 23 | 24 | return false; |
| 24 | 25 | }; |
| 25 | 26 | } |
| 26 | - var diffs = document.querySelectorAll('.sbsdiffcols'); | |
| 27 | - for(var i=0; i<diffs.length; i++){ | |
| 28 | - initSbsDiff(diffs[i]); | |
| 27 | + document.querySelectorAll('.sbsdiffcols').forEach(initSbsDiff); | |
| 28 | + if(window.fossil && fossil.page){ | |
| 29 | + fossil.page.tweakSbsDiffs = function(){ | |
| 30 | + document.querySelectorAll('.sbsdiffcols').forEach(initSbsDiff); | |
| 31 | + }; | |
| 29 | 32 | } |
| 30 | -}()) | |
| 33 | +})(); | |
| 31 | 34 |
| --- src/sbsdiff.js | |
| +++ src/sbsdiff.js | |
| @@ -6,11 +6,12 @@ | |
| 6 | var SCROLL_LEN = 25; |
| 7 | function initSbsDiff(diff){ |
| 8 | var txtCols = diff.querySelectorAll('.difftxtcol'); |
| 9 | var txtPres = diff.querySelectorAll('.difftxtcol pre'); |
| 10 | var width = Math.max(txtPres[0].scrollWidth, txtPres[1].scrollWidth); |
| 11 | for(var i=0; i<2; i++){ |
| 12 | txtPres[i].style.width = width + 'px'; |
| 13 | txtCols[i].onscroll = function(e){ |
| 14 | txtCols[0].scrollLeft = txtCols[1].scrollLeft = this.scrollLeft; |
| 15 | }; |
| 16 | } |
| @@ -21,10 +22,12 @@ | |
| 21 | if( !len ) return; |
| 22 | txtCols[0].scrollLeft += len; |
| 23 | return false; |
| 24 | }; |
| 25 | } |
| 26 | var diffs = document.querySelectorAll('.sbsdiffcols'); |
| 27 | for(var i=0; i<diffs.length; i++){ |
| 28 | initSbsDiff(diffs[i]); |
| 29 | } |
| 30 | }()) |
| 31 |
| --- src/sbsdiff.js | |
| +++ src/sbsdiff.js | |
| @@ -6,11 +6,12 @@ | |
| 6 | var SCROLL_LEN = 25; |
| 7 | function initSbsDiff(diff){ |
| 8 | var txtCols = diff.querySelectorAll('.difftxtcol'); |
| 9 | var txtPres = diff.querySelectorAll('.difftxtcol pre'); |
| 10 | var width = Math.max(txtPres[0].scrollWidth, txtPres[1].scrollWidth); |
| 11 | var i; |
| 12 | for(i=0; i<2; i++){ |
| 13 | txtPres[i].style.width = width + 'px'; |
| 14 | txtCols[i].onscroll = function(e){ |
| 15 | txtCols[0].scrollLeft = txtCols[1].scrollLeft = this.scrollLeft; |
| 16 | }; |
| 17 | } |
| @@ -21,10 +22,12 @@ | |
| 22 | if( !len ) return; |
| 23 | txtCols[0].scrollLeft += len; |
| 24 | return false; |
| 25 | }; |
| 26 | } |
| 27 | document.querySelectorAll('.sbsdiffcols').forEach(initSbsDiff); |
| 28 | if(window.fossil && fossil.page){ |
| 29 | fossil.page.tweakSbsDiffs = function(){ |
| 30 | document.querySelectorAll('.sbsdiffcols').forEach(initSbsDiff); |
| 31 | }; |
| 32 | } |
| 33 | })(); |
| 34 |
+395
| --- src/style.c | ||
| +++ src/style.c | ||
| @@ -1331,5 +1331,400 @@ | ||
| 1331 | 1331 | } |
| 1332 | 1332 | |
| 1333 | 1333 | #if INTERFACE |
| 1334 | 1334 | # define webpage_assert(T) if(!(T)){webpage_assert_page(__FILE__,__LINE__,#T);} |
| 1335 | 1335 | #endif |
| 1336 | + | |
| 1337 | +/* | |
| 1338 | +** Returns a pseudo-random input field ID, for use in associating an | |
| 1339 | +** ID-less input field with a label. The memory is owned by the | |
| 1340 | +** caller. | |
| 1341 | +*/ | |
| 1342 | +static char * style_next_input_id(){ | |
| 1343 | + static int inputID = 0; | |
| 1344 | + ++inputID; | |
| 1345 | + return mprintf("input-id-%d", inputID); | |
| 1346 | +} | |
| 1347 | + | |
| 1348 | +/* | |
| 1349 | +** Outputs a labeled checkbox element. zWrapperId is an optional ID | |
| 1350 | +** value for the containing element (see below). zFieldName is the | |
| 1351 | +** form element name. zLabel is the label for the checkbox. zValue is | |
| 1352 | +** the optional value for the checkbox. zTip is an optional tooltip, | |
| 1353 | +** which gets set as the "title" attribute of the outermost | |
| 1354 | +** element. If isChecked is true, the checkbox gets the "checked" | |
| 1355 | +** attribute set, else it is not. | |
| 1356 | +** | |
| 1357 | +** Resulting structure: | |
| 1358 | +** | |
| 1359 | +** <span class='input-with-label' title={{zTip}} id={{zWrapperId}}> | |
| 1360 | +** <input type='checkbox' name={{zFieldName}} value={{zValue}} | |
| 1361 | +** id='A RANDOM VALUE' | |
| 1362 | +** {{isChecked ? " checked : ""}}/> | |
| 1363 | +** <label for='ID OF THE INPUT FIELD'>{{zLabel}}</label> | |
| 1364 | +** </span> | |
| 1365 | +** | |
| 1366 | +** zLabel, and zValue are required. zFieldName, zWrapperId, and zTip | |
| 1367 | +** are may be NULL or empty. | |
| 1368 | +** | |
| 1369 | +** Be sure that the input-with-label CSS class is defined sensibly, in | |
| 1370 | +** particular, having its display:inline-block is useful for alignment | |
| 1371 | +** purposes. | |
| 1372 | +*/ | |
| 1373 | +void style_labeled_checkbox(const char * zWrapperId, | |
| 1374 | + const char *zFieldName, const char * zLabel, | |
| 1375 | + const char * zValue, int isChecked, | |
| 1376 | + const char * zTip){ | |
| 1377 | + char * zLabelID = style_next_input_id(); | |
| 1378 | + CX("<span class='input-with-label'"); | |
| 1379 | + if(zTip && *zTip){ | |
| 1380 | + CX(" title='%h'", zTip); | |
| 1381 | + } | |
| 1382 | + if(zWrapperId && *zWrapperId){ | |
| 1383 | + CX(" id='%s'",zWrapperId); | |
| 1384 | + } | |
| 1385 | + CX("><input type='checkbox' id='%s' ", zLabelID); | |
| 1386 | + if(zFieldName && *zFieldName){ | |
| 1387 | + CX("name='%s' ",zFieldName); | |
| 1388 | + } | |
| 1389 | + CX("value='%T'%s/>", | |
| 1390 | + zValue ? zValue : "", isChecked ? " checked" : ""); | |
| 1391 | + CX("<label for='%s'>%h</label></span>", zLabelID, zLabel); | |
| 1392 | + fossil_free(zLabelID); | |
| 1393 | +} | |
| 1394 | + | |
| 1395 | +/* | |
| 1396 | +** Outputs a SELECT list from a compile-time list of integers. | |
| 1397 | +** The vargs must be a list of (const char *, int) pairs, terminated | |
| 1398 | +** with a single NULL. Each pair is interpreted as... | |
| 1399 | +** | |
| 1400 | +** If the (const char *) is NULL, it is the end of the list, else | |
| 1401 | +** a new OPTION entry is created. If the string is empty, the | |
| 1402 | +** label and value of the OPTION is the integer part of the pair. | |
| 1403 | +** If the string is not empty, it becomes the label and the integer | |
| 1404 | +** the value. If that value == selectedValue then that OPTION | |
| 1405 | +** element gets the 'selected' attribute. | |
| 1406 | +** | |
| 1407 | +** Note that the pairs are not in (int, const char *) order because | |
| 1408 | +** there is no well-known integer value which we can definitively use | |
| 1409 | +** as a list terminator. | |
| 1410 | +** | |
| 1411 | +** zWrapperId is an optional ID value for the containing element (see | |
| 1412 | +** below). | |
| 1413 | +** | |
| 1414 | +** zFieldName is the value of the form element's name attribute. Note | |
| 1415 | +** that fossil prefers underscores over '-' for separators in form | |
| 1416 | +** element names. | |
| 1417 | +** | |
| 1418 | +** zLabel is an optional string to use as a "label" for the element | |
| 1419 | +** (see below). | |
| 1420 | +** | |
| 1421 | +** zTooltip is an optional value for the SELECT's title attribute. | |
| 1422 | +** | |
| 1423 | +** The structure of the emitted HTML is: | |
| 1424 | +** | |
| 1425 | +** <span class='input-with-label' title={{zToolTip}} id={{zWrapperId}}> | |
| 1426 | +** <label for='SELECT ELEMENT ID'>{{zLabel}}</label> | |
| 1427 | +** <select id='RANDOM ID' name={{zFieldName}}>...</select> | |
| 1428 | +** </span> | |
| 1429 | +** | |
| 1430 | +** Example: | |
| 1431 | +** | |
| 1432 | +** style_select_list_int("my-grapes", "my_grapes", "Grapes", | |
| 1433 | +** "Select the number of grapes", | |
| 1434 | +** atoi(PD("my_field","0")), | |
| 1435 | +** "", 1, "2", 2, "Three", 3, | |
| 1436 | +** NULL); | |
| 1437 | +** | |
| 1438 | +*/ | |
| 1439 | +void style_select_list_int(const char * zWrapperId, | |
| 1440 | + const char *zFieldName, const char * zLabel, | |
| 1441 | + const char * zToolTip, int selectedVal, | |
| 1442 | + ... ){ | |
| 1443 | + char * zLabelID = style_next_input_id(); | |
| 1444 | + va_list vargs; | |
| 1445 | + | |
| 1446 | + va_start(vargs,selectedVal); | |
| 1447 | + CX("<span class='input-with-label'"); | |
| 1448 | + if(zToolTip && *zToolTip){ | |
| 1449 | + CX(" title='%h'",zToolTip); | |
| 1450 | + } | |
| 1451 | + if(zWrapperId && *zWrapperId){ | |
| 1452 | + CX(" id='%s'",zWrapperId); | |
| 1453 | + } | |
| 1454 | + CX(">"); | |
| 1455 | + if(zLabel && *zLabel){ | |
| 1456 | + CX("<label label='%s'>%h</label>", zLabelID, zLabel); | |
| 1457 | + } | |
| 1458 | + CX("<select name='%s' id='%s'>",zFieldName, zLabelID); | |
| 1459 | + while(1){ | |
| 1460 | + const char * zOption = va_arg(vargs,char *); | |
| 1461 | + int v; | |
| 1462 | + if(NULL==zOption){ | |
| 1463 | + break; | |
| 1464 | + } | |
| 1465 | + v = va_arg(vargs,int); | |
| 1466 | + CX("<option value='%d'%s>", | |
| 1467 | + v, v==selectedVal ? " selected" : ""); | |
| 1468 | + if(*zOption){ | |
| 1469 | + CX("%s", zOption); | |
| 1470 | + }else{ | |
| 1471 | + CX("%d",v); | |
| 1472 | + } | |
| 1473 | + CX("</option>\n"); | |
| 1474 | + } | |
| 1475 | + CX("</select>\n"); | |
| 1476 | + CX("</span>\n"); | |
| 1477 | + va_end(vargs); | |
| 1478 | + fossil_free(zLabelID); | |
| 1479 | +} | |
| 1480 | + | |
| 1481 | +/* | |
| 1482 | +** The C-string counterpart of style_select_list_int(), this variant | |
| 1483 | +** differs only in that its variadic arguments are C-strings in pairs | |
| 1484 | +** of (optionLabel, optionValue). If a given optionLabel is an empty | |
| 1485 | +** string, the corresponding optionValue is used as its label. If any | |
| 1486 | +** given value matches zSelectedVal, that option gets preselected. If | |
| 1487 | +** no options match zSelectedVal then the first entry is selected by | |
| 1488 | +** default. | |
| 1489 | +** | |
| 1490 | +** Any of (zWrapperId, zTooltip, zSelectedVal) may be NULL or empty. | |
| 1491 | +** | |
| 1492 | +** Example: | |
| 1493 | +** | |
| 1494 | +** style_select_list_str("my-grapes", "my_grapes", "Grapes", | |
| 1495 | +** "Select the number of grapes", | |
| 1496 | +** P("my_field"), | |
| 1497 | +** "1", "One", "2", "Two", "", "3", | |
| 1498 | +** NULL); | |
| 1499 | +*/ | |
| 1500 | +void style_select_list_str(const char * zWrapperId, | |
| 1501 | + const char *zFieldName, const char * zLabel, | |
| 1502 | + const char * zToolTip, char const * zSelectedVal, | |
| 1503 | + ... ){ | |
| 1504 | + char * zLabelID = style_next_input_id(); | |
| 1505 | + va_list vargs; | |
| 1506 | + | |
| 1507 | + va_start(vargs,zSelectedVal); | |
| 1508 | + if(!zSelectedVal){ | |
| 1509 | + zSelectedVal = __FILE__/*some string we'll never match*/; | |
| 1510 | + } | |
| 1511 | + CX("<span class='input-with-label'"); | |
| 1512 | + if(zToolTip && *zToolTip){ | |
| 1513 | + CX(" title='%h'",zToolTip); | |
| 1514 | + } | |
| 1515 | + if(zWrapperId && *zWrapperId){ | |
| 1516 | + CX(" id='%s'",zWrapperId); | |
| 1517 | + } | |
| 1518 | + CX(">"); | |
| 1519 | + if(zLabel && *zLabel){ | |
| 1520 | + CX("<label for='%s'>%h</label>", zLabelID, zLabel); | |
| 1521 | + } | |
| 1522 | + CX("<select name='%s' id='%s'>",zFieldName, zLabelID); | |
| 1523 | + while(1){ | |
| 1524 | + const char * zLabel = va_arg(vargs,char *); | |
| 1525 | + const char * zVal; | |
| 1526 | + if(NULL==zLabel){ | |
| 1527 | + break; | |
| 1528 | + } | |
| 1529 | + zVal = va_arg(vargs,char *); | |
| 1530 | + CX("<option value='%T'%s>", | |
| 1531 | + zVal, 0==fossil_strcmp(zVal, zSelectedVal) ? " selected" : ""); | |
| 1532 | + if(*zLabel){ | |
| 1533 | + CX("%s", zLabel); | |
| 1534 | + }else{ | |
| 1535 | + CX("%h",zVal); | |
| 1536 | + } | |
| 1537 | + CX("</option>\n"); | |
| 1538 | + } | |
| 1539 | + CX("</select>\n"); | |
| 1540 | + CX("</span>\n"); | |
| 1541 | + va_end(vargs); | |
| 1542 | + fossil_free(zLabelID); | |
| 1543 | +} | |
| 1544 | + | |
| 1545 | + | |
| 1546 | +/* | |
| 1547 | +** The first time this is called, it emits code to install and | |
| 1548 | +** bootstrap the window.fossil object, using the built-in file | |
| 1549 | +** fossil.bootstrap.js (not to be confused with bootstrap.js). | |
| 1550 | +** | |
| 1551 | +** Subsequent calls are no-ops. | |
| 1552 | +** | |
| 1553 | +** If passed a true value, it emits the contents directly to the page | |
| 1554 | +** output, else it emits a script tag with a src=builtin/... to load | |
| 1555 | +** the script. It always outputs a small pre-bootstrap element in its | |
| 1556 | +** own script tag to initialize parts which need C-runtime-level | |
| 1557 | +** information, before loading the main fossil.bootstrap.js either | |
| 1558 | +** inline or via a <script src=...>, as specified by the first | |
| 1559 | +** argument. | |
| 1560 | +*/ | |
| 1561 | +void style_emit_script_fossil_bootstrap(int asInline){ | |
| 1562 | + static int once = 0; | |
| 1563 | + if(0==once++){ | |
| 1564 | + /* Set up the generic/app-agnostic parts of window.fossil | |
| 1565 | + ** which require C-level state... */ | |
| 1566 | + style_emit_script_tag(0,0); | |
| 1567 | + CX("(function(){\n" | |
| 1568 | + "if(!window.fossil) window.fossil={};\n" | |
| 1569 | + "window.fossil.version = %!j;\n" | |
| 1570 | + /* fossil.rootPath is the top-most CGI/server path, | |
| 1571 | + ** including a trailing slash. */ | |
| 1572 | + "window.fossil.rootPath = %!j+'/';\n", | |
| 1573 | + get_version(), g.zTop); | |
| 1574 | + /* fossil.config = {...various config-level options...} */ | |
| 1575 | + CX("window.fossil.config = {" | |
| 1576 | + "hashDigits: %d, hashDigitsUrl: %d" | |
| 1577 | + "};\n", hash_digits(0), hash_digits(1)); | |
| 1578 | +#if 0 | |
| 1579 | + /* Is it safe to emit the CSRF token here? Some pages add it | |
| 1580 | + ** as a hidden form field. */ | |
| 1581 | + if(g.zCsrfToken[0]!=0){ | |
| 1582 | + CX("window.fossil.csrfToken = %!j;\n", | |
| 1583 | + g.zCsrfToken); | |
| 1584 | + } | |
| 1585 | +#endif | |
| 1586 | + /* | |
| 1587 | + ** fossil.page holds info about the current page. This is also | |
| 1588 | + ** where the current page "should" store any of its own | |
| 1589 | + ** page-specific state, and it is reserved for that purpose. | |
| 1590 | + */ | |
| 1591 | + CX("window.fossil.page = {" | |
| 1592 | + "name:\"%T\"" | |
| 1593 | + "};\n", g.zPath); | |
| 1594 | + CX("})();\n"); | |
| 1595 | + /* The remaining fossil object bootstrap code is not dependent on | |
| 1596 | + ** C-runtime state... */ | |
| 1597 | + if(asInline){ | |
| 1598 | + CX("%s\n", builtin_text("fossil.bootstrap.js")); | |
| 1599 | + } | |
| 1600 | + style_emit_script_tag(1,0); | |
| 1601 | + if(asInline==0){ | |
| 1602 | + style_emit_script_builtin(0, "fossil.bootstrap.js"); | |
| 1603 | + } | |
| 1604 | + } | |
| 1605 | +} | |
| 1606 | + | |
| 1607 | +/* | |
| 1608 | +** If passed 0 as its first argument, it emits a script opener tag | |
| 1609 | +** with this request's nonce. If passed non-0 it emits a script | |
| 1610 | +** closing tag. Mnemonic for remembering the order in which to pass 0 | |
| 1611 | +** or 1 as the first argument to this function: 0 comes before 1. | |
| 1612 | +** | |
| 1613 | +** If passed 0 as its first argument and a non-NULL/non-empty zSrc, | |
| 1614 | +** then it instead emits: | |
| 1615 | +** | |
| 1616 | +** <script src='%R/{{zSrc}}'></script> | |
| 1617 | +** | |
| 1618 | +** zSrc is always assumed to be a repository-relative path without | |
| 1619 | +** a leading slash, and has %R/ prepended to it. | |
| 1620 | +** | |
| 1621 | +** Meaning that no follow-up call to pass a non-0 first argument | |
| 1622 | +** to close the tag. zSrc is ignored if the first argument is not | |
| 1623 | +** 0. | |
| 1624 | +** | |
| 1625 | +*/ | |
| 1626 | +void style_emit_script_tag(int isCloser, const char * zSrc){ | |
| 1627 | + if(0==isCloser){ | |
| 1628 | + if(zSrc!=0 && zSrc[0]!=0){ | |
| 1629 | + CX("<script src='%R/%T'></script>\n", zSrc); | |
| 1630 | + }else{ | |
| 1631 | + CX("<script nonce='%s'>", style_nonce()); | |
| 1632 | + } | |
| 1633 | + }else{ | |
| 1634 | + CX("</script>\n"); | |
| 1635 | + } | |
| 1636 | +} | |
| 1637 | + | |
| 1638 | +/* | |
| 1639 | +** Emits a script tag which uses content from a builtin script file. | |
| 1640 | +** | |
| 1641 | +** If asInline is true, it is emitted directly as an opening tag, the | |
| 1642 | +** content of the zName builtin file, and a closing tag. | |
| 1643 | +** | |
| 1644 | +** If it is false, a script tag loading it via | |
| 1645 | +** src=builtin/{{zName}}?cache=XYZ is emitted, where XYZ is a | |
| 1646 | +** build-time-dependent cache-buster value. | |
| 1647 | +*/ | |
| 1648 | +void style_emit_script_builtin(int asInline, char const * zName){ | |
| 1649 | + if(asInline){ | |
| 1650 | + style_emit_script_tag(0,0); | |
| 1651 | + CX("%s", builtin_text(zName)); | |
| 1652 | + style_emit_script_tag(1,0); | |
| 1653 | + }else{ | |
| 1654 | + char * zFullName = mprintf("builtin/%s",zName); | |
| 1655 | + const char * zHash = fossil_exe_id(); | |
| 1656 | + CX("<script src='%R/%T?cache=%.8s'></script>\n", | |
| 1657 | + zFullName, zHash); | |
| 1658 | + fossil_free(zFullName); | |
| 1659 | + } | |
| 1660 | +} | |
| 1661 | + | |
| 1662 | +/* | |
| 1663 | +** The first time this is called it emits the JS code from the | |
| 1664 | +** built-in file fossil.fossil.js. Subsequent calls are no-ops. | |
| 1665 | +** | |
| 1666 | +** If passed a true value, it emits the contents directly | |
| 1667 | +** to the page output, else it emits a script tag with a | |
| 1668 | +** src=builtin/... to load the script. | |
| 1669 | +** | |
| 1670 | +** Note that this code relies on that loaded via | |
| 1671 | +** style_emit_script_fossil_bootstrap() but it does not call that | |
| 1672 | +** routine. | |
| 1673 | +*/ | |
| 1674 | +void style_emit_script_fetch(int asInline){ | |
| 1675 | + static int once = 0; | |
| 1676 | + if(0==once++){ | |
| 1677 | + style_emit_script_builtin(asInline, "fossil.fetch.js"); | |
| 1678 | + } | |
| 1679 | +} | |
| 1680 | + | |
| 1681 | +/* | |
| 1682 | +** The first time this is called it emits the JS code from the | |
| 1683 | +** built-in file fossil.dom.js. Subsequent calls are no-ops. | |
| 1684 | +** | |
| 1685 | +** If passed a true value, it emits the contents directly | |
| 1686 | +** to the page output, else it emits a script tag with a | |
| 1687 | +** src=builtin/... to load the script. | |
| 1688 | +** | |
| 1689 | +** Note that this code relies on that loaded via | |
| 1690 | +** style_emit_script_fossil_bootstrap(), but it does not call that | |
| 1691 | +** routine. | |
| 1692 | +*/ | |
| 1693 | +void style_emit_script_dom(int asInline){ | |
| 1694 | + static int once = 0; | |
| 1695 | + if(0==once++){ | |
| 1696 | + style_emit_script_builtin(asInline, "fossil.dom.js"); | |
| 1697 | + } | |
| 1698 | +} | |
| 1699 | + | |
| 1700 | +/* | |
| 1701 | +** The first time this is called, it calls style_emit_script_dom(), | |
| 1702 | +** passing it the given asInline value, and emits the JS code from the | |
| 1703 | +** built-in file fossil.tabs.js. Subsequent calls are no-ops. | |
| 1704 | +** | |
| 1705 | +** If passed a true value, it emits the contents directly | |
| 1706 | +** to the page output, else it emits a script tag with a | |
| 1707 | +** src=builtin/... to load the script. | |
| 1708 | +*/ | |
| 1709 | +void style_emit_script_tabs(int asInline){ | |
| 1710 | + static int once = 0; | |
| 1711 | + if(0==once++){ | |
| 1712 | + style_emit_script_dom(asInline); | |
| 1713 | + style_emit_script_builtin(asInline, "fossil.tabs.js"); | |
| 1714 | + } | |
| 1715 | +} | |
| 1716 | + | |
| 1717 | +/* | |
| 1718 | +** The first time this is called it emits the JS code from the | |
| 1719 | +** built-in file fossil.confirmer.js. Subsequent calls are no-ops. | |
| 1720 | +** | |
| 1721 | +** If passed a true value, it emits the contents directly | |
| 1722 | +** to the page output, else it emits a script tag with a | |
| 1723 | +** src=builtin/... to load the script. | |
| 1724 | +*/ | |
| 1725 | +void style_emit_script_confirmer(int asInline){ | |
| 1726 | + static int once = 0; | |
| 1727 | + if(0==once++){ | |
| 1728 | + style_emit_script_builtin(asInline, "fossil.confirmer.js"); | |
| 1729 | + } | |
| 1730 | +} | |
| 1336 | 1731 | |
| 1337 | 1732 | ADDED src/style.fileedit.css |
| --- src/style.c | |
| +++ src/style.c | |
| @@ -1331,5 +1331,400 @@ | |
| 1331 | } |
| 1332 | |
| 1333 | #if INTERFACE |
| 1334 | # define webpage_assert(T) if(!(T)){webpage_assert_page(__FILE__,__LINE__,#T);} |
| 1335 | #endif |
| 1336 | |
| 1337 | DDED src/style.fileedit.css |
| --- src/style.c | |
| +++ src/style.c | |
| @@ -1331,5 +1331,400 @@ | |
| 1331 | } |
| 1332 | |
| 1333 | #if INTERFACE |
| 1334 | # define webpage_assert(T) if(!(T)){webpage_assert_page(__FILE__,__LINE__,#T);} |
| 1335 | #endif |
| 1336 | |
| 1337 | /* |
| 1338 | ** Returns a pseudo-random input field ID, for use in associating an |
| 1339 | ** ID-less input field with a label. The memory is owned by the |
| 1340 | ** caller. |
| 1341 | */ |
| 1342 | static char * style_next_input_id(){ |
| 1343 | static int inputID = 0; |
| 1344 | ++inputID; |
| 1345 | return mprintf("input-id-%d", inputID); |
| 1346 | } |
| 1347 | |
| 1348 | /* |
| 1349 | ** Outputs a labeled checkbox element. zWrapperId is an optional ID |
| 1350 | ** value for the containing element (see below). zFieldName is the |
| 1351 | ** form element name. zLabel is the label for the checkbox. zValue is |
| 1352 | ** the optional value for the checkbox. zTip is an optional tooltip, |
| 1353 | ** which gets set as the "title" attribute of the outermost |
| 1354 | ** element. If isChecked is true, the checkbox gets the "checked" |
| 1355 | ** attribute set, else it is not. |
| 1356 | ** |
| 1357 | ** Resulting structure: |
| 1358 | ** |
| 1359 | ** <span class='input-with-label' title={{zTip}} id={{zWrapperId}}> |
| 1360 | ** <input type='checkbox' name={{zFieldName}} value={{zValue}} |
| 1361 | ** id='A RANDOM VALUE' |
| 1362 | ** {{isChecked ? " checked : ""}}/> |
| 1363 | ** <label for='ID OF THE INPUT FIELD'>{{zLabel}}</label> |
| 1364 | ** </span> |
| 1365 | ** |
| 1366 | ** zLabel, and zValue are required. zFieldName, zWrapperId, and zTip |
| 1367 | ** are may be NULL or empty. |
| 1368 | ** |
| 1369 | ** Be sure that the input-with-label CSS class is defined sensibly, in |
| 1370 | ** particular, having its display:inline-block is useful for alignment |
| 1371 | ** purposes. |
| 1372 | */ |
| 1373 | void style_labeled_checkbox(const char * zWrapperId, |
| 1374 | const char *zFieldName, const char * zLabel, |
| 1375 | const char * zValue, int isChecked, |
| 1376 | const char * zTip){ |
| 1377 | char * zLabelID = style_next_input_id(); |
| 1378 | CX("<span class='input-with-label'"); |
| 1379 | if(zTip && *zTip){ |
| 1380 | CX(" title='%h'", zTip); |
| 1381 | } |
| 1382 | if(zWrapperId && *zWrapperId){ |
| 1383 | CX(" id='%s'",zWrapperId); |
| 1384 | } |
| 1385 | CX("><input type='checkbox' id='%s' ", zLabelID); |
| 1386 | if(zFieldName && *zFieldName){ |
| 1387 | CX("name='%s' ",zFieldName); |
| 1388 | } |
| 1389 | CX("value='%T'%s/>", |
| 1390 | zValue ? zValue : "", isChecked ? " checked" : ""); |
| 1391 | CX("<label for='%s'>%h</label></span>", zLabelID, zLabel); |
| 1392 | fossil_free(zLabelID); |
| 1393 | } |
| 1394 | |
| 1395 | /* |
| 1396 | ** Outputs a SELECT list from a compile-time list of integers. |
| 1397 | ** The vargs must be a list of (const char *, int) pairs, terminated |
| 1398 | ** with a single NULL. Each pair is interpreted as... |
| 1399 | ** |
| 1400 | ** If the (const char *) is NULL, it is the end of the list, else |
| 1401 | ** a new OPTION entry is created. If the string is empty, the |
| 1402 | ** label and value of the OPTION is the integer part of the pair. |
| 1403 | ** If the string is not empty, it becomes the label and the integer |
| 1404 | ** the value. If that value == selectedValue then that OPTION |
| 1405 | ** element gets the 'selected' attribute. |
| 1406 | ** |
| 1407 | ** Note that the pairs are not in (int, const char *) order because |
| 1408 | ** there is no well-known integer value which we can definitively use |
| 1409 | ** as a list terminator. |
| 1410 | ** |
| 1411 | ** zWrapperId is an optional ID value for the containing element (see |
| 1412 | ** below). |
| 1413 | ** |
| 1414 | ** zFieldName is the value of the form element's name attribute. Note |
| 1415 | ** that fossil prefers underscores over '-' for separators in form |
| 1416 | ** element names. |
| 1417 | ** |
| 1418 | ** zLabel is an optional string to use as a "label" for the element |
| 1419 | ** (see below). |
| 1420 | ** |
| 1421 | ** zTooltip is an optional value for the SELECT's title attribute. |
| 1422 | ** |
| 1423 | ** The structure of the emitted HTML is: |
| 1424 | ** |
| 1425 | ** <span class='input-with-label' title={{zToolTip}} id={{zWrapperId}}> |
| 1426 | ** <label for='SELECT ELEMENT ID'>{{zLabel}}</label> |
| 1427 | ** <select id='RANDOM ID' name={{zFieldName}}>...</select> |
| 1428 | ** </span> |
| 1429 | ** |
| 1430 | ** Example: |
| 1431 | ** |
| 1432 | ** style_select_list_int("my-grapes", "my_grapes", "Grapes", |
| 1433 | ** "Select the number of grapes", |
| 1434 | ** atoi(PD("my_field","0")), |
| 1435 | ** "", 1, "2", 2, "Three", 3, |
| 1436 | ** NULL); |
| 1437 | ** |
| 1438 | */ |
| 1439 | void style_select_list_int(const char * zWrapperId, |
| 1440 | const char *zFieldName, const char * zLabel, |
| 1441 | const char * zToolTip, int selectedVal, |
| 1442 | ... ){ |
| 1443 | char * zLabelID = style_next_input_id(); |
| 1444 | va_list vargs; |
| 1445 | |
| 1446 | va_start(vargs,selectedVal); |
| 1447 | CX("<span class='input-with-label'"); |
| 1448 | if(zToolTip && *zToolTip){ |
| 1449 | CX(" title='%h'",zToolTip); |
| 1450 | } |
| 1451 | if(zWrapperId && *zWrapperId){ |
| 1452 | CX(" id='%s'",zWrapperId); |
| 1453 | } |
| 1454 | CX(">"); |
| 1455 | if(zLabel && *zLabel){ |
| 1456 | CX("<label label='%s'>%h</label>", zLabelID, zLabel); |
| 1457 | } |
| 1458 | CX("<select name='%s' id='%s'>",zFieldName, zLabelID); |
| 1459 | while(1){ |
| 1460 | const char * zOption = va_arg(vargs,char *); |
| 1461 | int v; |
| 1462 | if(NULL==zOption){ |
| 1463 | break; |
| 1464 | } |
| 1465 | v = va_arg(vargs,int); |
| 1466 | CX("<option value='%d'%s>", |
| 1467 | v, v==selectedVal ? " selected" : ""); |
| 1468 | if(*zOption){ |
| 1469 | CX("%s", zOption); |
| 1470 | }else{ |
| 1471 | CX("%d",v); |
| 1472 | } |
| 1473 | CX("</option>\n"); |
| 1474 | } |
| 1475 | CX("</select>\n"); |
| 1476 | CX("</span>\n"); |
| 1477 | va_end(vargs); |
| 1478 | fossil_free(zLabelID); |
| 1479 | } |
| 1480 | |
| 1481 | /* |
| 1482 | ** The C-string counterpart of style_select_list_int(), this variant |
| 1483 | ** differs only in that its variadic arguments are C-strings in pairs |
| 1484 | ** of (optionLabel, optionValue). If a given optionLabel is an empty |
| 1485 | ** string, the corresponding optionValue is used as its label. If any |
| 1486 | ** given value matches zSelectedVal, that option gets preselected. If |
| 1487 | ** no options match zSelectedVal then the first entry is selected by |
| 1488 | ** default. |
| 1489 | ** |
| 1490 | ** Any of (zWrapperId, zTooltip, zSelectedVal) may be NULL or empty. |
| 1491 | ** |
| 1492 | ** Example: |
| 1493 | ** |
| 1494 | ** style_select_list_str("my-grapes", "my_grapes", "Grapes", |
| 1495 | ** "Select the number of grapes", |
| 1496 | ** P("my_field"), |
| 1497 | ** "1", "One", "2", "Two", "", "3", |
| 1498 | ** NULL); |
| 1499 | */ |
| 1500 | void style_select_list_str(const char * zWrapperId, |
| 1501 | const char *zFieldName, const char * zLabel, |
| 1502 | const char * zToolTip, char const * zSelectedVal, |
| 1503 | ... ){ |
| 1504 | char * zLabelID = style_next_input_id(); |
| 1505 | va_list vargs; |
| 1506 | |
| 1507 | va_start(vargs,zSelectedVal); |
| 1508 | if(!zSelectedVal){ |
| 1509 | zSelectedVal = __FILE__/*some string we'll never match*/; |
| 1510 | } |
| 1511 | CX("<span class='input-with-label'"); |
| 1512 | if(zToolTip && *zToolTip){ |
| 1513 | CX(" title='%h'",zToolTip); |
| 1514 | } |
| 1515 | if(zWrapperId && *zWrapperId){ |
| 1516 | CX(" id='%s'",zWrapperId); |
| 1517 | } |
| 1518 | CX(">"); |
| 1519 | if(zLabel && *zLabel){ |
| 1520 | CX("<label for='%s'>%h</label>", zLabelID, zLabel); |
| 1521 | } |
| 1522 | CX("<select name='%s' id='%s'>",zFieldName, zLabelID); |
| 1523 | while(1){ |
| 1524 | const char * zLabel = va_arg(vargs,char *); |
| 1525 | const char * zVal; |
| 1526 | if(NULL==zLabel){ |
| 1527 | break; |
| 1528 | } |
| 1529 | zVal = va_arg(vargs,char *); |
| 1530 | CX("<option value='%T'%s>", |
| 1531 | zVal, 0==fossil_strcmp(zVal, zSelectedVal) ? " selected" : ""); |
| 1532 | if(*zLabel){ |
| 1533 | CX("%s", zLabel); |
| 1534 | }else{ |
| 1535 | CX("%h",zVal); |
| 1536 | } |
| 1537 | CX("</option>\n"); |
| 1538 | } |
| 1539 | CX("</select>\n"); |
| 1540 | CX("</span>\n"); |
| 1541 | va_end(vargs); |
| 1542 | fossil_free(zLabelID); |
| 1543 | } |
| 1544 | |
| 1545 | |
| 1546 | /* |
| 1547 | ** The first time this is called, it emits code to install and |
| 1548 | ** bootstrap the window.fossil object, using the built-in file |
| 1549 | ** fossil.bootstrap.js (not to be confused with bootstrap.js). |
| 1550 | ** |
| 1551 | ** Subsequent calls are no-ops. |
| 1552 | ** |
| 1553 | ** If passed a true value, it emits the contents directly to the page |
| 1554 | ** output, else it emits a script tag with a src=builtin/... to load |
| 1555 | ** the script. It always outputs a small pre-bootstrap element in its |
| 1556 | ** own script tag to initialize parts which need C-runtime-level |
| 1557 | ** information, before loading the main fossil.bootstrap.js either |
| 1558 | ** inline or via a <script src=...>, as specified by the first |
| 1559 | ** argument. |
| 1560 | */ |
| 1561 | void style_emit_script_fossil_bootstrap(int asInline){ |
| 1562 | static int once = 0; |
| 1563 | if(0==once++){ |
| 1564 | /* Set up the generic/app-agnostic parts of window.fossil |
| 1565 | ** which require C-level state... */ |
| 1566 | style_emit_script_tag(0,0); |
| 1567 | CX("(function(){\n" |
| 1568 | "if(!window.fossil) window.fossil={};\n" |
| 1569 | "window.fossil.version = %!j;\n" |
| 1570 | /* fossil.rootPath is the top-most CGI/server path, |
| 1571 | ** including a trailing slash. */ |
| 1572 | "window.fossil.rootPath = %!j+'/';\n", |
| 1573 | get_version(), g.zTop); |
| 1574 | /* fossil.config = {...various config-level options...} */ |
| 1575 | CX("window.fossil.config = {" |
| 1576 | "hashDigits: %d, hashDigitsUrl: %d" |
| 1577 | "};\n", hash_digits(0), hash_digits(1)); |
| 1578 | #if 0 |
| 1579 | /* Is it safe to emit the CSRF token here? Some pages add it |
| 1580 | ** as a hidden form field. */ |
| 1581 | if(g.zCsrfToken[0]!=0){ |
| 1582 | CX("window.fossil.csrfToken = %!j;\n", |
| 1583 | g.zCsrfToken); |
| 1584 | } |
| 1585 | #endif |
| 1586 | /* |
| 1587 | ** fossil.page holds info about the current page. This is also |
| 1588 | ** where the current page "should" store any of its own |
| 1589 | ** page-specific state, and it is reserved for that purpose. |
| 1590 | */ |
| 1591 | CX("window.fossil.page = {" |
| 1592 | "name:\"%T\"" |
| 1593 | "};\n", g.zPath); |
| 1594 | CX("})();\n"); |
| 1595 | /* The remaining fossil object bootstrap code is not dependent on |
| 1596 | ** C-runtime state... */ |
| 1597 | if(asInline){ |
| 1598 | CX("%s\n", builtin_text("fossil.bootstrap.js")); |
| 1599 | } |
| 1600 | style_emit_script_tag(1,0); |
| 1601 | if(asInline==0){ |
| 1602 | style_emit_script_builtin(0, "fossil.bootstrap.js"); |
| 1603 | } |
| 1604 | } |
| 1605 | } |
| 1606 | |
| 1607 | /* |
| 1608 | ** If passed 0 as its first argument, it emits a script opener tag |
| 1609 | ** with this request's nonce. If passed non-0 it emits a script |
| 1610 | ** closing tag. Mnemonic for remembering the order in which to pass 0 |
| 1611 | ** or 1 as the first argument to this function: 0 comes before 1. |
| 1612 | ** |
| 1613 | ** If passed 0 as its first argument and a non-NULL/non-empty zSrc, |
| 1614 | ** then it instead emits: |
| 1615 | ** |
| 1616 | ** <script src='%R/{{zSrc}}'></script> |
| 1617 | ** |
| 1618 | ** zSrc is always assumed to be a repository-relative path without |
| 1619 | ** a leading slash, and has %R/ prepended to it. |
| 1620 | ** |
| 1621 | ** Meaning that no follow-up call to pass a non-0 first argument |
| 1622 | ** to close the tag. zSrc is ignored if the first argument is not |
| 1623 | ** 0. |
| 1624 | ** |
| 1625 | */ |
| 1626 | void style_emit_script_tag(int isCloser, const char * zSrc){ |
| 1627 | if(0==isCloser){ |
| 1628 | if(zSrc!=0 && zSrc[0]!=0){ |
| 1629 | CX("<script src='%R/%T'></script>\n", zSrc); |
| 1630 | }else{ |
| 1631 | CX("<script nonce='%s'>", style_nonce()); |
| 1632 | } |
| 1633 | }else{ |
| 1634 | CX("</script>\n"); |
| 1635 | } |
| 1636 | } |
| 1637 | |
| 1638 | /* |
| 1639 | ** Emits a script tag which uses content from a builtin script file. |
| 1640 | ** |
| 1641 | ** If asInline is true, it is emitted directly as an opening tag, the |
| 1642 | ** content of the zName builtin file, and a closing tag. |
| 1643 | ** |
| 1644 | ** If it is false, a script tag loading it via |
| 1645 | ** src=builtin/{{zName}}?cache=XYZ is emitted, where XYZ is a |
| 1646 | ** build-time-dependent cache-buster value. |
| 1647 | */ |
| 1648 | void style_emit_script_builtin(int asInline, char const * zName){ |
| 1649 | if(asInline){ |
| 1650 | style_emit_script_tag(0,0); |
| 1651 | CX("%s", builtin_text(zName)); |
| 1652 | style_emit_script_tag(1,0); |
| 1653 | }else{ |
| 1654 | char * zFullName = mprintf("builtin/%s",zName); |
| 1655 | const char * zHash = fossil_exe_id(); |
| 1656 | CX("<script src='%R/%T?cache=%.8s'></script>\n", |
| 1657 | zFullName, zHash); |
| 1658 | fossil_free(zFullName); |
| 1659 | } |
| 1660 | } |
| 1661 | |
| 1662 | /* |
| 1663 | ** The first time this is called it emits the JS code from the |
| 1664 | ** built-in file fossil.fossil.js. Subsequent calls are no-ops. |
| 1665 | ** |
| 1666 | ** If passed a true value, it emits the contents directly |
| 1667 | ** to the page output, else it emits a script tag with a |
| 1668 | ** src=builtin/... to load the script. |
| 1669 | ** |
| 1670 | ** Note that this code relies on that loaded via |
| 1671 | ** style_emit_script_fossil_bootstrap() but it does not call that |
| 1672 | ** routine. |
| 1673 | */ |
| 1674 | void style_emit_script_fetch(int asInline){ |
| 1675 | static int once = 0; |
| 1676 | if(0==once++){ |
| 1677 | style_emit_script_builtin(asInline, "fossil.fetch.js"); |
| 1678 | } |
| 1679 | } |
| 1680 | |
| 1681 | /* |
| 1682 | ** The first time this is called it emits the JS code from the |
| 1683 | ** built-in file fossil.dom.js. Subsequent calls are no-ops. |
| 1684 | ** |
| 1685 | ** If passed a true value, it emits the contents directly |
| 1686 | ** to the page output, else it emits a script tag with a |
| 1687 | ** src=builtin/... to load the script. |
| 1688 | ** |
| 1689 | ** Note that this code relies on that loaded via |
| 1690 | ** style_emit_script_fossil_bootstrap(), but it does not call that |
| 1691 | ** routine. |
| 1692 | */ |
| 1693 | void style_emit_script_dom(int asInline){ |
| 1694 | static int once = 0; |
| 1695 | if(0==once++){ |
| 1696 | style_emit_script_builtin(asInline, "fossil.dom.js"); |
| 1697 | } |
| 1698 | } |
| 1699 | |
| 1700 | /* |
| 1701 | ** The first time this is called, it calls style_emit_script_dom(), |
| 1702 | ** passing it the given asInline value, and emits the JS code from the |
| 1703 | ** built-in file fossil.tabs.js. Subsequent calls are no-ops. |
| 1704 | ** |
| 1705 | ** If passed a true value, it emits the contents directly |
| 1706 | ** to the page output, else it emits a script tag with a |
| 1707 | ** src=builtin/... to load the script. |
| 1708 | */ |
| 1709 | void style_emit_script_tabs(int asInline){ |
| 1710 | static int once = 0; |
| 1711 | if(0==once++){ |
| 1712 | style_emit_script_dom(asInline); |
| 1713 | style_emit_script_builtin(asInline, "fossil.tabs.js"); |
| 1714 | } |
| 1715 | } |
| 1716 | |
| 1717 | /* |
| 1718 | ** The first time this is called it emits the JS code from the |
| 1719 | ** built-in file fossil.confirmer.js. Subsequent calls are no-ops. |
| 1720 | ** |
| 1721 | ** If passed a true value, it emits the contents directly |
| 1722 | ** to the page output, else it emits a script tag with a |
| 1723 | ** src=builtin/... to load the script. |
| 1724 | */ |
| 1725 | void style_emit_script_confirmer(int asInline){ |
| 1726 | static int once = 0; |
| 1727 | if(0==once++){ |
| 1728 | style_emit_script_builtin(asInline, "fossil.confirmer.js"); |
| 1729 | } |
| 1730 | } |
| 1731 | |
| 1732 | DDED src/style.fileedit.css |
+395
| --- src/style.c | ||
| +++ src/style.c | ||
| @@ -1331,5 +1331,400 @@ | ||
| 1331 | 1331 | } |
| 1332 | 1332 | |
| 1333 | 1333 | #if INTERFACE |
| 1334 | 1334 | # define webpage_assert(T) if(!(T)){webpage_assert_page(__FILE__,__LINE__,#T);} |
| 1335 | 1335 | #endif |
| 1336 | + | |
| 1337 | +/* | |
| 1338 | +** Returns a pseudo-random input field ID, for use in associating an | |
| 1339 | +** ID-less input field with a label. The memory is owned by the | |
| 1340 | +** caller. | |
| 1341 | +*/ | |
| 1342 | +static char * style_next_input_id(){ | |
| 1343 | + static int inputID = 0; | |
| 1344 | + ++inputID; | |
| 1345 | + return mprintf("input-id-%d", inputID); | |
| 1346 | +} | |
| 1347 | + | |
| 1348 | +/* | |
| 1349 | +** Outputs a labeled checkbox element. zWrapperId is an optional ID | |
| 1350 | +** value for the containing element (see below). zFieldName is the | |
| 1351 | +** form element name. zLabel is the label for the checkbox. zValue is | |
| 1352 | +** the optional value for the checkbox. zTip is an optional tooltip, | |
| 1353 | +** which gets set as the "title" attribute of the outermost | |
| 1354 | +** element. If isChecked is true, the checkbox gets the "checked" | |
| 1355 | +** attribute set, else it is not. | |
| 1356 | +** | |
| 1357 | +** Resulting structure: | |
| 1358 | +** | |
| 1359 | +** <span class='input-with-label' title={{zTip}} id={{zWrapperId}}> | |
| 1360 | +** <input type='checkbox' name={{zFieldName}} value={{zValue}} | |
| 1361 | +** id='A RANDOM VALUE' | |
| 1362 | +** {{isChecked ? " checked : ""}}/> | |
| 1363 | +** <label for='ID OF THE INPUT FIELD'>{{zLabel}}</label> | |
| 1364 | +** </span> | |
| 1365 | +** | |
| 1366 | +** zLabel, and zValue are required. zFieldName, zWrapperId, and zTip | |
| 1367 | +** are may be NULL or empty. | |
| 1368 | +** | |
| 1369 | +** Be sure that the input-with-label CSS class is defined sensibly, in | |
| 1370 | +** particular, having its display:inline-block is useful for alignment | |
| 1371 | +** purposes. | |
| 1372 | +*/ | |
| 1373 | +void style_labeled_checkbox(const char * zWrapperId, | |
| 1374 | + const char *zFieldName, const char * zLabel, | |
| 1375 | + const char * zValue, int isChecked, | |
| 1376 | + const char * zTip){ | |
| 1377 | + char * zLabelID = style_next_input_id(); | |
| 1378 | + CX("<span class='input-with-label'"); | |
| 1379 | + if(zTip && *zTip){ | |
| 1380 | + CX(" title='%h'", zTip); | |
| 1381 | + } | |
| 1382 | + if(zWrapperId && *zWrapperId){ | |
| 1383 | + CX(" id='%s'",zWrapperId); | |
| 1384 | + } | |
| 1385 | + CX("><input type='checkbox' id='%s' ", zLabelID); | |
| 1386 | + if(zFieldName && *zFieldName){ | |
| 1387 | + CX("name='%s' ",zFieldName); | |
| 1388 | + } | |
| 1389 | + CX("value='%T'%s/>", | |
| 1390 | + zValue ? zValue : "", isChecked ? " checked" : ""); | |
| 1391 | + CX("<label for='%s'>%h</label></span>", zLabelID, zLabel); | |
| 1392 | + fossil_free(zLabelID); | |
| 1393 | +} | |
| 1394 | + | |
| 1395 | +/* | |
| 1396 | +** Outputs a SELECT list from a compile-time list of integers. | |
| 1397 | +** The vargs must be a list of (const char *, int) pairs, terminated | |
| 1398 | +** with a single NULL. Each pair is interpreted as... | |
| 1399 | +** | |
| 1400 | +** If the (const char *) is NULL, it is the end of the list, else | |
| 1401 | +** a new OPTION entry is created. If the string is empty, the | |
| 1402 | +** label and value of the OPTION is the integer part of the pair. | |
| 1403 | +** If the string is not empty, it becomes the label and the integer | |
| 1404 | +** the value. If that value == selectedValue then that OPTION | |
| 1405 | +** element gets the 'selected' attribute. | |
| 1406 | +** | |
| 1407 | +** Note that the pairs are not in (int, const char *) order because | |
| 1408 | +** there is no well-known integer value which we can definitively use | |
| 1409 | +** as a list terminator. | |
| 1410 | +** | |
| 1411 | +** zWrapperId is an optional ID value for the containing element (see | |
| 1412 | +** below). | |
| 1413 | +** | |
| 1414 | +** zFieldName is the value of the form element's name attribute. Note | |
| 1415 | +** that fossil prefers underscores over '-' for separators in form | |
| 1416 | +** element names. | |
| 1417 | +** | |
| 1418 | +** zLabel is an optional string to use as a "label" for the element | |
| 1419 | +** (see below). | |
| 1420 | +** | |
| 1421 | +** zTooltip is an optional value for the SELECT's title attribute. | |
| 1422 | +** | |
| 1423 | +** The structure of the emitted HTML is: | |
| 1424 | +** | |
| 1425 | +** <span class='input-with-label' title={{zToolTip}} id={{zWrapperId}}> | |
| 1426 | +** <label for='SELECT ELEMENT ID'>{{zLabel}}</label> | |
| 1427 | +** <select id='RANDOM ID' name={{zFieldName}}>...</select> | |
| 1428 | +** </span> | |
| 1429 | +** | |
| 1430 | +** Example: | |
| 1431 | +** | |
| 1432 | +** style_select_list_int("my-grapes", "my_grapes", "Grapes", | |
| 1433 | +** "Select the number of grapes", | |
| 1434 | +** atoi(PD("my_field","0")), | |
| 1435 | +** "", 1, "2", 2, "Three", 3, | |
| 1436 | +** NULL); | |
| 1437 | +** | |
| 1438 | +*/ | |
| 1439 | +void style_select_list_int(const char * zWrapperId, | |
| 1440 | + const char *zFieldName, const char * zLabel, | |
| 1441 | + const char * zToolTip, int selectedVal, | |
| 1442 | + ... ){ | |
| 1443 | + char * zLabelID = style_next_input_id(); | |
| 1444 | + va_list vargs; | |
| 1445 | + | |
| 1446 | + va_start(vargs,selectedVal); | |
| 1447 | + CX("<span class='input-with-label'"); | |
| 1448 | + if(zToolTip && *zToolTip){ | |
| 1449 | + CX(" title='%h'",zToolTip); | |
| 1450 | + } | |
| 1451 | + if(zWrapperId && *zWrapperId){ | |
| 1452 | + CX(" id='%s'",zWrapperId); | |
| 1453 | + } | |
| 1454 | + CX(">"); | |
| 1455 | + if(zLabel && *zLabel){ | |
| 1456 | + CX("<label label='%s'>%h</label>", zLabelID, zLabel); | |
| 1457 | + } | |
| 1458 | + CX("<select name='%s' id='%s'>",zFieldName, zLabelID); | |
| 1459 | + while(1){ | |
| 1460 | + const char * zOption = va_arg(vargs,char *); | |
| 1461 | + int v; | |
| 1462 | + if(NULL==zOption){ | |
| 1463 | + break; | |
| 1464 | + } | |
| 1465 | + v = va_arg(vargs,int); | |
| 1466 | + CX("<option value='%d'%s>", | |
| 1467 | + v, v==selectedVal ? " selected" : ""); | |
| 1468 | + if(*zOption){ | |
| 1469 | + CX("%s", zOption); | |
| 1470 | + }else{ | |
| 1471 | + CX("%d",v); | |
| 1472 | + } | |
| 1473 | + CX("</option>\n"); | |
| 1474 | + } | |
| 1475 | + CX("</select>\n"); | |
| 1476 | + CX("</span>\n"); | |
| 1477 | + va_end(vargs); | |
| 1478 | + fossil_free(zLabelID); | |
| 1479 | +} | |
| 1480 | + | |
| 1481 | +/* | |
| 1482 | +** The C-string counterpart of style_select_list_int(), this variant | |
| 1483 | +** differs only in that its variadic arguments are C-strings in pairs | |
| 1484 | +** of (optionLabel, optionValue). If a given optionLabel is an empty | |
| 1485 | +** string, the corresponding optionValue is used as its label. If any | |
| 1486 | +** given value matches zSelectedVal, that option gets preselected. If | |
| 1487 | +** no options match zSelectedVal then the first entry is selected by | |
| 1488 | +** default. | |
| 1489 | +** | |
| 1490 | +** Any of (zWrapperId, zTooltip, zSelectedVal) may be NULL or empty. | |
| 1491 | +** | |
| 1492 | +** Example: | |
| 1493 | +** | |
| 1494 | +** style_select_list_str("my-grapes", "my_grapes", "Grapes", | |
| 1495 | +** "Select the number of grapes", | |
| 1496 | +** P("my_field"), | |
| 1497 | +** "1", "One", "2", "Two", "", "3", | |
| 1498 | +** NULL); | |
| 1499 | +*/ | |
| 1500 | +void style_select_list_str(const char * zWrapperId, | |
| 1501 | + const char *zFieldName, const char * zLabel, | |
| 1502 | + const char * zToolTip, char const * zSelectedVal, | |
| 1503 | + ... ){ | |
| 1504 | + char * zLabelID = style_next_input_id(); | |
| 1505 | + va_list vargs; | |
| 1506 | + | |
| 1507 | + va_start(vargs,zSelectedVal); | |
| 1508 | + if(!zSelectedVal){ | |
| 1509 | + zSelectedVal = __FILE__/*some string we'll never match*/; | |
| 1510 | + } | |
| 1511 | + CX("<span class='input-with-label'"); | |
| 1512 | + if(zToolTip && *zToolTip){ | |
| 1513 | + CX(" title='%h'",zToolTip); | |
| 1514 | + } | |
| 1515 | + if(zWrapperId && *zWrapperId){ | |
| 1516 | + CX(" id='%s'",zWrapperId); | |
| 1517 | + } | |
| 1518 | + CX(">"); | |
| 1519 | + if(zLabel && *zLabel){ | |
| 1520 | + CX("<label for='%s'>%h</label>", zLabelID, zLabel); | |
| 1521 | + } | |
| 1522 | + CX("<select name='%s' id='%s'>",zFieldName, zLabelID); | |
| 1523 | + while(1){ | |
| 1524 | + const char * zLabel = va_arg(vargs,char *); | |
| 1525 | + const char * zVal; | |
| 1526 | + if(NULL==zLabel){ | |
| 1527 | + break; | |
| 1528 | + } | |
| 1529 | + zVal = va_arg(vargs,char *); | |
| 1530 | + CX("<option value='%T'%s>", | |
| 1531 | + zVal, 0==fossil_strcmp(zVal, zSelectedVal) ? " selected" : ""); | |
| 1532 | + if(*zLabel){ | |
| 1533 | + CX("%s", zLabel); | |
| 1534 | + }else{ | |
| 1535 | + CX("%h",zVal); | |
| 1536 | + } | |
| 1537 | + CX("</option>\n"); | |
| 1538 | + } | |
| 1539 | + CX("</select>\n"); | |
| 1540 | + CX("</span>\n"); | |
| 1541 | + va_end(vargs); | |
| 1542 | + fossil_free(zLabelID); | |
| 1543 | +} | |
| 1544 | + | |
| 1545 | + | |
| 1546 | +/* | |
| 1547 | +** The first time this is called, it emits code to install and | |
| 1548 | +** bootstrap the window.fossil object, using the built-in file | |
| 1549 | +** fossil.bootstrap.js (not to be confused with bootstrap.js). | |
| 1550 | +** | |
| 1551 | +** Subsequent calls are no-ops. | |
| 1552 | +** | |
| 1553 | +** If passed a true value, it emits the contents directly to the page | |
| 1554 | +** output, else it emits a script tag with a src=builtin/... to load | |
| 1555 | +** the script. It always outputs a small pre-bootstrap element in its | |
| 1556 | +** own script tag to initialize parts which need C-runtime-level | |
| 1557 | +** information, before loading the main fossil.bootstrap.js either | |
| 1558 | +** inline or via a <script src=...>, as specified by the first | |
| 1559 | +** argument. | |
| 1560 | +*/ | |
| 1561 | +void style_emit_script_fossil_bootstrap(int asInline){ | |
| 1562 | + static int once = 0; | |
| 1563 | + if(0==once++){ | |
| 1564 | + /* Set up the generic/app-agnostic parts of window.fossil | |
| 1565 | + ** which require C-level state... */ | |
| 1566 | + style_emit_script_tag(0,0); | |
| 1567 | + CX("(function(){\n" | |
| 1568 | + "if(!window.fossil) window.fossil={};\n" | |
| 1569 | + "window.fossil.version = %!j;\n" | |
| 1570 | + /* fossil.rootPath is the top-most CGI/server path, | |
| 1571 | + ** including a trailing slash. */ | |
| 1572 | + "window.fossil.rootPath = %!j+'/';\n", | |
| 1573 | + get_version(), g.zTop); | |
| 1574 | + /* fossil.config = {...various config-level options...} */ | |
| 1575 | + CX("window.fossil.config = {" | |
| 1576 | + "hashDigits: %d, hashDigitsUrl: %d" | |
| 1577 | + "};\n", hash_digits(0), hash_digits(1)); | |
| 1578 | +#if 0 | |
| 1579 | + /* Is it safe to emit the CSRF token here? Some pages add it | |
| 1580 | + ** as a hidden form field. */ | |
| 1581 | + if(g.zCsrfToken[0]!=0){ | |
| 1582 | + CX("window.fossil.csrfToken = %!j;\n", | |
| 1583 | + g.zCsrfToken); | |
| 1584 | + } | |
| 1585 | +#endif | |
| 1586 | + /* | |
| 1587 | + ** fossil.page holds info about the current page. This is also | |
| 1588 | + ** where the current page "should" store any of its own | |
| 1589 | + ** page-specific state, and it is reserved for that purpose. | |
| 1590 | + */ | |
| 1591 | + CX("window.fossil.page = {" | |
| 1592 | + "name:\"%T\"" | |
| 1593 | + "};\n", g.zPath); | |
| 1594 | + CX("})();\n"); | |
| 1595 | + /* The remaining fossil object bootstrap code is not dependent on | |
| 1596 | + ** C-runtime state... */ | |
| 1597 | + if(asInline){ | |
| 1598 | + CX("%s\n", builtin_text("fossil.bootstrap.js")); | |
| 1599 | + } | |
| 1600 | + style_emit_script_tag(1,0); | |
| 1601 | + if(asInline==0){ | |
| 1602 | + style_emit_script_builtin(0, "fossil.bootstrap.js"); | |
| 1603 | + } | |
| 1604 | + } | |
| 1605 | +} | |
| 1606 | + | |
| 1607 | +/* | |
| 1608 | +** If passed 0 as its first argument, it emits a script opener tag | |
| 1609 | +** with this request's nonce. If passed non-0 it emits a script | |
| 1610 | +** closing tag. Mnemonic for remembering the order in which to pass 0 | |
| 1611 | +** or 1 as the first argument to this function: 0 comes before 1. | |
| 1612 | +** | |
| 1613 | +** If passed 0 as its first argument and a non-NULL/non-empty zSrc, | |
| 1614 | +** then it instead emits: | |
| 1615 | +** | |
| 1616 | +** <script src='%R/{{zSrc}}'></script> | |
| 1617 | +** | |
| 1618 | +** zSrc is always assumed to be a repository-relative path without | |
| 1619 | +** a leading slash, and has %R/ prepended to it. | |
| 1620 | +** | |
| 1621 | +** Meaning that no follow-up call to pass a non-0 first argument | |
| 1622 | +** to close the tag. zSrc is ignored if the first argument is not | |
| 1623 | +** 0. | |
| 1624 | +** | |
| 1625 | +*/ | |
| 1626 | +void style_emit_script_tag(int isCloser, const char * zSrc){ | |
| 1627 | + if(0==isCloser){ | |
| 1628 | + if(zSrc!=0 && zSrc[0]!=0){ | |
| 1629 | + CX("<script src='%R/%T'></script>\n", zSrc); | |
| 1630 | + }else{ | |
| 1631 | + CX("<script nonce='%s'>", style_nonce()); | |
| 1632 | + } | |
| 1633 | + }else{ | |
| 1634 | + CX("</script>\n"); | |
| 1635 | + } | |
| 1636 | +} | |
| 1637 | + | |
| 1638 | +/* | |
| 1639 | +** Emits a script tag which uses content from a builtin script file. | |
| 1640 | +** | |
| 1641 | +** If asInline is true, it is emitted directly as an opening tag, the | |
| 1642 | +** content of the zName builtin file, and a closing tag. | |
| 1643 | +** | |
| 1644 | +** If it is false, a script tag loading it via | |
| 1645 | +** src=builtin/{{zName}}?cache=XYZ is emitted, where XYZ is a | |
| 1646 | +** build-time-dependent cache-buster value. | |
| 1647 | +*/ | |
| 1648 | +void style_emit_script_builtin(int asInline, char const * zName){ | |
| 1649 | + if(asInline){ | |
| 1650 | + style_emit_script_tag(0,0); | |
| 1651 | + CX("%s", builtin_text(zName)); | |
| 1652 | + style_emit_script_tag(1,0); | |
| 1653 | + }else{ | |
| 1654 | + char * zFullName = mprintf("builtin/%s",zName); | |
| 1655 | + const char * zHash = fossil_exe_id(); | |
| 1656 | + CX("<script src='%R/%T?cache=%.8s'></script>\n", | |
| 1657 | + zFullName, zHash); | |
| 1658 | + fossil_free(zFullName); | |
| 1659 | + } | |
| 1660 | +} | |
| 1661 | + | |
| 1662 | +/* | |
| 1663 | +** The first time this is called it emits the JS code from the | |
| 1664 | +** built-in file fossil.fossil.js. Subsequent calls are no-ops. | |
| 1665 | +** | |
| 1666 | +** If passed a true value, it emits the contents directly | |
| 1667 | +** to the page output, else it emits a script tag with a | |
| 1668 | +** src=builtin/... to load the script. | |
| 1669 | +** | |
| 1670 | +** Note that this code relies on that loaded via | |
| 1671 | +** style_emit_script_fossil_bootstrap() but it does not call that | |
| 1672 | +** routine. | |
| 1673 | +*/ | |
| 1674 | +void style_emit_script_fetch(int asInline){ | |
| 1675 | + static int once = 0; | |
| 1676 | + if(0==once++){ | |
| 1677 | + style_emit_script_builtin(asInline, "fossil.fetch.js"); | |
| 1678 | + } | |
| 1679 | +} | |
| 1680 | + | |
| 1681 | +/* | |
| 1682 | +** The first time this is called it emits the JS code from the | |
| 1683 | +** built-in file fossil.dom.js. Subsequent calls are no-ops. | |
| 1684 | +** | |
| 1685 | +** If passed a true value, it emits the contents directly | |
| 1686 | +** to the page output, else it emits a script tag with a | |
| 1687 | +** src=builtin/... to load the script. | |
| 1688 | +** | |
| 1689 | +** Note that this code relies on that loaded via | |
| 1690 | +** style_emit_script_fossil_bootstrap(), but it does not call that | |
| 1691 | +** routine. | |
| 1692 | +*/ | |
| 1693 | +void style_emit_script_dom(int asInline){ | |
| 1694 | + static int once = 0; | |
| 1695 | + if(0==once++){ | |
| 1696 | + style_emit_script_builtin(asInline, "fossil.dom.js"); | |
| 1697 | + } | |
| 1698 | +} | |
| 1699 | + | |
| 1700 | +/* | |
| 1701 | +** The first time this is called, it calls style_emit_script_dom(), | |
| 1702 | +** passing it the given asInline value, and emits the JS code from the | |
| 1703 | +** built-in file fossil.tabs.js. Subsequent calls are no-ops. | |
| 1704 | +** | |
| 1705 | +** If passed a true value, it emits the contents directly | |
| 1706 | +** to the page output, else it emits a script tag with a | |
| 1707 | +** src=builtin/... to load the script. | |
| 1708 | +*/ | |
| 1709 | +void style_emit_script_tabs(int asInline){ | |
| 1710 | + static int once = 0; | |
| 1711 | + if(0==once++){ | |
| 1712 | + style_emit_script_dom(asInline); | |
| 1713 | + style_emit_script_builtin(asInline, "fossil.tabs.js"); | |
| 1714 | + } | |
| 1715 | +} | |
| 1716 | + | |
| 1717 | +/* | |
| 1718 | +** The first time this is called it emits the JS code from the | |
| 1719 | +** built-in file fossil.confirmer.js. Subsequent calls are no-ops. | |
| 1720 | +** | |
| 1721 | +** If passed a true value, it emits the contents directly | |
| 1722 | +** to the page output, else it emits a script tag with a | |
| 1723 | +** src=builtin/... to load the script. | |
| 1724 | +*/ | |
| 1725 | +void style_emit_script_confirmer(int asInline){ | |
| 1726 | + static int once = 0; | |
| 1727 | + if(0==once++){ | |
| 1728 | + style_emit_script_builtin(asInline, "fossil.confirmer.js"); | |
| 1729 | + } | |
| 1730 | +} | |
| 1336 | 1731 | |
| 1337 | 1732 | ADDED src/style.fileedit.css |
| --- src/style.c | |
| +++ src/style.c | |
| @@ -1331,5 +1331,400 @@ | |
| 1331 | } |
| 1332 | |
| 1333 | #if INTERFACE |
| 1334 | # define webpage_assert(T) if(!(T)){webpage_assert_page(__FILE__,__LINE__,#T);} |
| 1335 | #endif |
| 1336 | |
| 1337 | DDED src/style.fileedit.css |
| --- src/style.c | |
| +++ src/style.c | |
| @@ -1331,5 +1331,400 @@ | |
| 1331 | } |
| 1332 | |
| 1333 | #if INTERFACE |
| 1334 | # define webpage_assert(T) if(!(T)){webpage_assert_page(__FILE__,__LINE__,#T);} |
| 1335 | #endif |
| 1336 | |
| 1337 | /* |
| 1338 | ** Returns a pseudo-random input field ID, for use in associating an |
| 1339 | ** ID-less input field with a label. The memory is owned by the |
| 1340 | ** caller. |
| 1341 | */ |
| 1342 | static char * style_next_input_id(){ |
| 1343 | static int inputID = 0; |
| 1344 | ++inputID; |
| 1345 | return mprintf("input-id-%d", inputID); |
| 1346 | } |
| 1347 | |
| 1348 | /* |
| 1349 | ** Outputs a labeled checkbox element. zWrapperId is an optional ID |
| 1350 | ** value for the containing element (see below). zFieldName is the |
| 1351 | ** form element name. zLabel is the label for the checkbox. zValue is |
| 1352 | ** the optional value for the checkbox. zTip is an optional tooltip, |
| 1353 | ** which gets set as the "title" attribute of the outermost |
| 1354 | ** element. If isChecked is true, the checkbox gets the "checked" |
| 1355 | ** attribute set, else it is not. |
| 1356 | ** |
| 1357 | ** Resulting structure: |
| 1358 | ** |
| 1359 | ** <span class='input-with-label' title={{zTip}} id={{zWrapperId}}> |
| 1360 | ** <input type='checkbox' name={{zFieldName}} value={{zValue}} |
| 1361 | ** id='A RANDOM VALUE' |
| 1362 | ** {{isChecked ? " checked : ""}}/> |
| 1363 | ** <label for='ID OF THE INPUT FIELD'>{{zLabel}}</label> |
| 1364 | ** </span> |
| 1365 | ** |
| 1366 | ** zLabel, and zValue are required. zFieldName, zWrapperId, and zTip |
| 1367 | ** are may be NULL or empty. |
| 1368 | ** |
| 1369 | ** Be sure that the input-with-label CSS class is defined sensibly, in |
| 1370 | ** particular, having its display:inline-block is useful for alignment |
| 1371 | ** purposes. |
| 1372 | */ |
| 1373 | void style_labeled_checkbox(const char * zWrapperId, |
| 1374 | const char *zFieldName, const char * zLabel, |
| 1375 | const char * zValue, int isChecked, |
| 1376 | const char * zTip){ |
| 1377 | char * zLabelID = style_next_input_id(); |
| 1378 | CX("<span class='input-with-label'"); |
| 1379 | if(zTip && *zTip){ |
| 1380 | CX(" title='%h'", zTip); |
| 1381 | } |
| 1382 | if(zWrapperId && *zWrapperId){ |
| 1383 | CX(" id='%s'",zWrapperId); |
| 1384 | } |
| 1385 | CX("><input type='checkbox' id='%s' ", zLabelID); |
| 1386 | if(zFieldName && *zFieldName){ |
| 1387 | CX("name='%s' ",zFieldName); |
| 1388 | } |
| 1389 | CX("value='%T'%s/>", |
| 1390 | zValue ? zValue : "", isChecked ? " checked" : ""); |
| 1391 | CX("<label for='%s'>%h</label></span>", zLabelID, zLabel); |
| 1392 | fossil_free(zLabelID); |
| 1393 | } |
| 1394 | |
| 1395 | /* |
| 1396 | ** Outputs a SELECT list from a compile-time list of integers. |
| 1397 | ** The vargs must be a list of (const char *, int) pairs, terminated |
| 1398 | ** with a single NULL. Each pair is interpreted as... |
| 1399 | ** |
| 1400 | ** If the (const char *) is NULL, it is the end of the list, else |
| 1401 | ** a new OPTION entry is created. If the string is empty, the |
| 1402 | ** label and value of the OPTION is the integer part of the pair. |
| 1403 | ** If the string is not empty, it becomes the label and the integer |
| 1404 | ** the value. If that value == selectedValue then that OPTION |
| 1405 | ** element gets the 'selected' attribute. |
| 1406 | ** |
| 1407 | ** Note that the pairs are not in (int, const char *) order because |
| 1408 | ** there is no well-known integer value which we can definitively use |
| 1409 | ** as a list terminator. |
| 1410 | ** |
| 1411 | ** zWrapperId is an optional ID value for the containing element (see |
| 1412 | ** below). |
| 1413 | ** |
| 1414 | ** zFieldName is the value of the form element's name attribute. Note |
| 1415 | ** that fossil prefers underscores over '-' for separators in form |
| 1416 | ** element names. |
| 1417 | ** |
| 1418 | ** zLabel is an optional string to use as a "label" for the element |
| 1419 | ** (see below). |
| 1420 | ** |
| 1421 | ** zTooltip is an optional value for the SELECT's title attribute. |
| 1422 | ** |
| 1423 | ** The structure of the emitted HTML is: |
| 1424 | ** |
| 1425 | ** <span class='input-with-label' title={{zToolTip}} id={{zWrapperId}}> |
| 1426 | ** <label for='SELECT ELEMENT ID'>{{zLabel}}</label> |
| 1427 | ** <select id='RANDOM ID' name={{zFieldName}}>...</select> |
| 1428 | ** </span> |
| 1429 | ** |
| 1430 | ** Example: |
| 1431 | ** |
| 1432 | ** style_select_list_int("my-grapes", "my_grapes", "Grapes", |
| 1433 | ** "Select the number of grapes", |
| 1434 | ** atoi(PD("my_field","0")), |
| 1435 | ** "", 1, "2", 2, "Three", 3, |
| 1436 | ** NULL); |
| 1437 | ** |
| 1438 | */ |
| 1439 | void style_select_list_int(const char * zWrapperId, |
| 1440 | const char *zFieldName, const char * zLabel, |
| 1441 | const char * zToolTip, int selectedVal, |
| 1442 | ... ){ |
| 1443 | char * zLabelID = style_next_input_id(); |
| 1444 | va_list vargs; |
| 1445 | |
| 1446 | va_start(vargs,selectedVal); |
| 1447 | CX("<span class='input-with-label'"); |
| 1448 | if(zToolTip && *zToolTip){ |
| 1449 | CX(" title='%h'",zToolTip); |
| 1450 | } |
| 1451 | if(zWrapperId && *zWrapperId){ |
| 1452 | CX(" id='%s'",zWrapperId); |
| 1453 | } |
| 1454 | CX(">"); |
| 1455 | if(zLabel && *zLabel){ |
| 1456 | CX("<label label='%s'>%h</label>", zLabelID, zLabel); |
| 1457 | } |
| 1458 | CX("<select name='%s' id='%s'>",zFieldName, zLabelID); |
| 1459 | while(1){ |
| 1460 | const char * zOption = va_arg(vargs,char *); |
| 1461 | int v; |
| 1462 | if(NULL==zOption){ |
| 1463 | break; |
| 1464 | } |
| 1465 | v = va_arg(vargs,int); |
| 1466 | CX("<option value='%d'%s>", |
| 1467 | v, v==selectedVal ? " selected" : ""); |
| 1468 | if(*zOption){ |
| 1469 | CX("%s", zOption); |
| 1470 | }else{ |
| 1471 | CX("%d",v); |
| 1472 | } |
| 1473 | CX("</option>\n"); |
| 1474 | } |
| 1475 | CX("</select>\n"); |
| 1476 | CX("</span>\n"); |
| 1477 | va_end(vargs); |
| 1478 | fossil_free(zLabelID); |
| 1479 | } |
| 1480 | |
| 1481 | /* |
| 1482 | ** The C-string counterpart of style_select_list_int(), this variant |
| 1483 | ** differs only in that its variadic arguments are C-strings in pairs |
| 1484 | ** of (optionLabel, optionValue). If a given optionLabel is an empty |
| 1485 | ** string, the corresponding optionValue is used as its label. If any |
| 1486 | ** given value matches zSelectedVal, that option gets preselected. If |
| 1487 | ** no options match zSelectedVal then the first entry is selected by |
| 1488 | ** default. |
| 1489 | ** |
| 1490 | ** Any of (zWrapperId, zTooltip, zSelectedVal) may be NULL or empty. |
| 1491 | ** |
| 1492 | ** Example: |
| 1493 | ** |
| 1494 | ** style_select_list_str("my-grapes", "my_grapes", "Grapes", |
| 1495 | ** "Select the number of grapes", |
| 1496 | ** P("my_field"), |
| 1497 | ** "1", "One", "2", "Two", "", "3", |
| 1498 | ** NULL); |
| 1499 | */ |
| 1500 | void style_select_list_str(const char * zWrapperId, |
| 1501 | const char *zFieldName, const char * zLabel, |
| 1502 | const char * zToolTip, char const * zSelectedVal, |
| 1503 | ... ){ |
| 1504 | char * zLabelID = style_next_input_id(); |
| 1505 | va_list vargs; |
| 1506 | |
| 1507 | va_start(vargs,zSelectedVal); |
| 1508 | if(!zSelectedVal){ |
| 1509 | zSelectedVal = __FILE__/*some string we'll never match*/; |
| 1510 | } |
| 1511 | CX("<span class='input-with-label'"); |
| 1512 | if(zToolTip && *zToolTip){ |
| 1513 | CX(" title='%h'",zToolTip); |
| 1514 | } |
| 1515 | if(zWrapperId && *zWrapperId){ |
| 1516 | CX(" id='%s'",zWrapperId); |
| 1517 | } |
| 1518 | CX(">"); |
| 1519 | if(zLabel && *zLabel){ |
| 1520 | CX("<label for='%s'>%h</label>", zLabelID, zLabel); |
| 1521 | } |
| 1522 | CX("<select name='%s' id='%s'>",zFieldName, zLabelID); |
| 1523 | while(1){ |
| 1524 | const char * zLabel = va_arg(vargs,char *); |
| 1525 | const char * zVal; |
| 1526 | if(NULL==zLabel){ |
| 1527 | break; |
| 1528 | } |
| 1529 | zVal = va_arg(vargs,char *); |
| 1530 | CX("<option value='%T'%s>", |
| 1531 | zVal, 0==fossil_strcmp(zVal, zSelectedVal) ? " selected" : ""); |
| 1532 | if(*zLabel){ |
| 1533 | CX("%s", zLabel); |
| 1534 | }else{ |
| 1535 | CX("%h",zVal); |
| 1536 | } |
| 1537 | CX("</option>\n"); |
| 1538 | } |
| 1539 | CX("</select>\n"); |
| 1540 | CX("</span>\n"); |
| 1541 | va_end(vargs); |
| 1542 | fossil_free(zLabelID); |
| 1543 | } |
| 1544 | |
| 1545 | |
| 1546 | /* |
| 1547 | ** The first time this is called, it emits code to install and |
| 1548 | ** bootstrap the window.fossil object, using the built-in file |
| 1549 | ** fossil.bootstrap.js (not to be confused with bootstrap.js). |
| 1550 | ** |
| 1551 | ** Subsequent calls are no-ops. |
| 1552 | ** |
| 1553 | ** If passed a true value, it emits the contents directly to the page |
| 1554 | ** output, else it emits a script tag with a src=builtin/... to load |
| 1555 | ** the script. It always outputs a small pre-bootstrap element in its |
| 1556 | ** own script tag to initialize parts which need C-runtime-level |
| 1557 | ** information, before loading the main fossil.bootstrap.js either |
| 1558 | ** inline or via a <script src=...>, as specified by the first |
| 1559 | ** argument. |
| 1560 | */ |
| 1561 | void style_emit_script_fossil_bootstrap(int asInline){ |
| 1562 | static int once = 0; |
| 1563 | if(0==once++){ |
| 1564 | /* Set up the generic/app-agnostic parts of window.fossil |
| 1565 | ** which require C-level state... */ |
| 1566 | style_emit_script_tag(0,0); |
| 1567 | CX("(function(){\n" |
| 1568 | "if(!window.fossil) window.fossil={};\n" |
| 1569 | "window.fossil.version = %!j;\n" |
| 1570 | /* fossil.rootPath is the top-most CGI/server path, |
| 1571 | ** including a trailing slash. */ |
| 1572 | "window.fossil.rootPath = %!j+'/';\n", |
| 1573 | get_version(), g.zTop); |
| 1574 | /* fossil.config = {...various config-level options...} */ |
| 1575 | CX("window.fossil.config = {" |
| 1576 | "hashDigits: %d, hashDigitsUrl: %d" |
| 1577 | "};\n", hash_digits(0), hash_digits(1)); |
| 1578 | #if 0 |
| 1579 | /* Is it safe to emit the CSRF token here? Some pages add it |
| 1580 | ** as a hidden form field. */ |
| 1581 | if(g.zCsrfToken[0]!=0){ |
| 1582 | CX("window.fossil.csrfToken = %!j;\n", |
| 1583 | g.zCsrfToken); |
| 1584 | } |
| 1585 | #endif |
| 1586 | /* |
| 1587 | ** fossil.page holds info about the current page. This is also |
| 1588 | ** where the current page "should" store any of its own |
| 1589 | ** page-specific state, and it is reserved for that purpose. |
| 1590 | */ |
| 1591 | CX("window.fossil.page = {" |
| 1592 | "name:\"%T\"" |
| 1593 | "};\n", g.zPath); |
| 1594 | CX("})();\n"); |
| 1595 | /* The remaining fossil object bootstrap code is not dependent on |
| 1596 | ** C-runtime state... */ |
| 1597 | if(asInline){ |
| 1598 | CX("%s\n", builtin_text("fossil.bootstrap.js")); |
| 1599 | } |
| 1600 | style_emit_script_tag(1,0); |
| 1601 | if(asInline==0){ |
| 1602 | style_emit_script_builtin(0, "fossil.bootstrap.js"); |
| 1603 | } |
| 1604 | } |
| 1605 | } |
| 1606 | |
| 1607 | /* |
| 1608 | ** If passed 0 as its first argument, it emits a script opener tag |
| 1609 | ** with this request's nonce. If passed non-0 it emits a script |
| 1610 | ** closing tag. Mnemonic for remembering the order in which to pass 0 |
| 1611 | ** or 1 as the first argument to this function: 0 comes before 1. |
| 1612 | ** |
| 1613 | ** If passed 0 as its first argument and a non-NULL/non-empty zSrc, |
| 1614 | ** then it instead emits: |
| 1615 | ** |
| 1616 | ** <script src='%R/{{zSrc}}'></script> |
| 1617 | ** |
| 1618 | ** zSrc is always assumed to be a repository-relative path without |
| 1619 | ** a leading slash, and has %R/ prepended to it. |
| 1620 | ** |
| 1621 | ** Meaning that no follow-up call to pass a non-0 first argument |
| 1622 | ** to close the tag. zSrc is ignored if the first argument is not |
| 1623 | ** 0. |
| 1624 | ** |
| 1625 | */ |
| 1626 | void style_emit_script_tag(int isCloser, const char * zSrc){ |
| 1627 | if(0==isCloser){ |
| 1628 | if(zSrc!=0 && zSrc[0]!=0){ |
| 1629 | CX("<script src='%R/%T'></script>\n", zSrc); |
| 1630 | }else{ |
| 1631 | CX("<script nonce='%s'>", style_nonce()); |
| 1632 | } |
| 1633 | }else{ |
| 1634 | CX("</script>\n"); |
| 1635 | } |
| 1636 | } |
| 1637 | |
| 1638 | /* |
| 1639 | ** Emits a script tag which uses content from a builtin script file. |
| 1640 | ** |
| 1641 | ** If asInline is true, it is emitted directly as an opening tag, the |
| 1642 | ** content of the zName builtin file, and a closing tag. |
| 1643 | ** |
| 1644 | ** If it is false, a script tag loading it via |
| 1645 | ** src=builtin/{{zName}}?cache=XYZ is emitted, where XYZ is a |
| 1646 | ** build-time-dependent cache-buster value. |
| 1647 | */ |
| 1648 | void style_emit_script_builtin(int asInline, char const * zName){ |
| 1649 | if(asInline){ |
| 1650 | style_emit_script_tag(0,0); |
| 1651 | CX("%s", builtin_text(zName)); |
| 1652 | style_emit_script_tag(1,0); |
| 1653 | }else{ |
| 1654 | char * zFullName = mprintf("builtin/%s",zName); |
| 1655 | const char * zHash = fossil_exe_id(); |
| 1656 | CX("<script src='%R/%T?cache=%.8s'></script>\n", |
| 1657 | zFullName, zHash); |
| 1658 | fossil_free(zFullName); |
| 1659 | } |
| 1660 | } |
| 1661 | |
| 1662 | /* |
| 1663 | ** The first time this is called it emits the JS code from the |
| 1664 | ** built-in file fossil.fossil.js. Subsequent calls are no-ops. |
| 1665 | ** |
| 1666 | ** If passed a true value, it emits the contents directly |
| 1667 | ** to the page output, else it emits a script tag with a |
| 1668 | ** src=builtin/... to load the script. |
| 1669 | ** |
| 1670 | ** Note that this code relies on that loaded via |
| 1671 | ** style_emit_script_fossil_bootstrap() but it does not call that |
| 1672 | ** routine. |
| 1673 | */ |
| 1674 | void style_emit_script_fetch(int asInline){ |
| 1675 | static int once = 0; |
| 1676 | if(0==once++){ |
| 1677 | style_emit_script_builtin(asInline, "fossil.fetch.js"); |
| 1678 | } |
| 1679 | } |
| 1680 | |
| 1681 | /* |
| 1682 | ** The first time this is called it emits the JS code from the |
| 1683 | ** built-in file fossil.dom.js. Subsequent calls are no-ops. |
| 1684 | ** |
| 1685 | ** If passed a true value, it emits the contents directly |
| 1686 | ** to the page output, else it emits a script tag with a |
| 1687 | ** src=builtin/... to load the script. |
| 1688 | ** |
| 1689 | ** Note that this code relies on that loaded via |
| 1690 | ** style_emit_script_fossil_bootstrap(), but it does not call that |
| 1691 | ** routine. |
| 1692 | */ |
| 1693 | void style_emit_script_dom(int asInline){ |
| 1694 | static int once = 0; |
| 1695 | if(0==once++){ |
| 1696 | style_emit_script_builtin(asInline, "fossil.dom.js"); |
| 1697 | } |
| 1698 | } |
| 1699 | |
| 1700 | /* |
| 1701 | ** The first time this is called, it calls style_emit_script_dom(), |
| 1702 | ** passing it the given asInline value, and emits the JS code from the |
| 1703 | ** built-in file fossil.tabs.js. Subsequent calls are no-ops. |
| 1704 | ** |
| 1705 | ** If passed a true value, it emits the contents directly |
| 1706 | ** to the page output, else it emits a script tag with a |
| 1707 | ** src=builtin/... to load the script. |
| 1708 | */ |
| 1709 | void style_emit_script_tabs(int asInline){ |
| 1710 | static int once = 0; |
| 1711 | if(0==once++){ |
| 1712 | style_emit_script_dom(asInline); |
| 1713 | style_emit_script_builtin(asInline, "fossil.tabs.js"); |
| 1714 | } |
| 1715 | } |
| 1716 | |
| 1717 | /* |
| 1718 | ** The first time this is called it emits the JS code from the |
| 1719 | ** built-in file fossil.confirmer.js. Subsequent calls are no-ops. |
| 1720 | ** |
| 1721 | ** If passed a true value, it emits the contents directly |
| 1722 | ** to the page output, else it emits a script tag with a |
| 1723 | ** src=builtin/... to load the script. |
| 1724 | */ |
| 1725 | void style_emit_script_confirmer(int asInline){ |
| 1726 | static int once = 0; |
| 1727 | if(0==once++){ |
| 1728 | style_emit_script_builtin(asInline, "fossil.confirmer.js"); |
| 1729 | } |
| 1730 | } |
| 1731 | |
| 1732 | DDED src/style.fileedit.css |
+220
| --- a/src/style.fileedit.css | ||
| +++ b/src/style.fileedit.css | ||
| @@ -0,0 +1,220 @@ | ||
| 1 | +/** Styles specific to /fileedit... */ | |
| 2 | +body.fileedit.waiting * { | |
| 3 | + /* Triggered during AJAX requests. */ | |
| 4 | + cursor: wait; | |
| 5 | +} | |
| 6 | +body.fileedit .error { | |
| 7 | + padding: 0.25em; | |
| 8 | +} | |
| 9 | +body.fileedit .warning { | |
| 10 | + padding: 0.25em; | |
| 11 | +} | |
| 12 | +body.fileedit textarea { | |
| 13 | + font-family: monospace; | |
| 14 | + flex: 10 1 auto; | |
| 15 | + height: initial/*undo damage from some skins*/; | |
| 16 | +entually need totextarea:focus, | |
| 17 | +body.fileedit input:focus{ | |
| 18 | + /* The sudden appearance of a border (as in the Ardoise skin) | |
| 19 | + shifts the layout in; | |
| 20 | + border-radius: 0.5em; | |
| 21 | + border-color: inherit; | |
| 22 | + border-width: 1px; | |
| 23 | + font-size: 90%; | |
| 24 | + overflow: auto; | |
| 25 | +} | |
| 26 | +body.fileedit fieldset > legend { | |
| 27 | + margin: 0 0 0 1em; | |
| 28 | + padding: 0 0.5em 0 0.5em; | |
| 29 | +} | |
| 30 | +body.fileedit fieldset > div { | |
| 31 | + margin: 0 0.25em 0 0.25em; | |
| 32 | + padding: 0; | |
| 33 | + overflow: auto; | |
| 34 | +} | |
| 35 | +body.fileedit fieldset > div > .input-with-label { | |
| 36 | + margin: 0.25em 0.5em; | |
| 37 | +} | |
| 38 | +body.fileedit fieldset > div > button { | |
| 39 | + margin: 0.25em 0.5em; | |
| 40 | +} | |
| 41 | +body.fileedit .fileedit-hint { | |
| 42 | + font-size: 80%; | |
| 43 | + opacity: 0.75; | |
| 44 | +} | |
| 45 | +body.fileedit .fileedit-error-report { | |
| 46 | + background: yellow; | |
| 47 | + color: darkred; | |
| 48 | + margin: 1em 0; | |
| 49 | + padding: 0.5em; | |
| 50 | + border-radius: 0.5em; | |
| 51 | +} | |
| 52 | +body.fileedit code.fileedit-manifest { | |
| 53 | + display: block; | |
| 54 | + height: 16em; | |
| 55 | + overflow: auto; | |
| 56 | + white-space: pre; | |
| 57 | +} | |
| 58 | +body.fileedit div.filr-style: inset; | |
| 59 | + border-radius: 0.5em; | |
| 60 | +in: 0.25em 0.5em; | |
| 61 | +} | |
| 62 | +body.fileedit .fileedit-hint { | |
| 63 | + font-size: 80%; | |
| 64 | + opacity: 0.75; | |
| 65 | +} | |
| 66 | +body.fileedit .fileedit-error-report { | |
| 67 | + background: yelck; | |
| 68 | + height: 16em; | |
| 69 | + overflow: auto; | |
| 70 | + white-space: pre; | |
| 71 | +} | |
| 72 | +body.rgin: 0; | |
| 73 | + padeedit div.fileedit-preview { | |
| 74 | + margin: 0; | |
| 75 | + padding: 0; | |
| 76 | +} | |
| 77 | +body.fileedit #fileedit-tabs { | |
| 78 | + margin: 0.5em 0 0 0; | |
| 79 | +} | |
| 80 | +body.fileedit #fileedit-tab-preview-wrapper { | |
| 81 | + overflow: auto; | |
| 82 | +} | |
| 83 | +body.fileedioverflow: autoed; | |
| 84 | + overflow: auto; | |
| 85 | +etch; | |
| 86 | +} | |
| 87 | +body.fileedit #fileedit-tab-0 1 auto; | |
| 88 | +} | |
| 89 | +body.fileedit /column; | |
| 90 | +} | |
| 91 | +body.fileedit #fileedit-tab- font-size: 1.c to /fileedit... */ | |
| 92 | +body.filee/** Styles specifi/column; | |
| 93 | +} | |
| 94 | +body.fileedit # | |
| 95 | +/** | |
| 96 | + Styles for fossil.tabs.js. As of this writing, currently | |
| 97 | + only used by /fileedit, but it is anticipated that these | |
| 98 | + will eventually need to migrate to default_css.txt for use | |
| 99 | + in the wiki and/or forum pages when implementing tabbed | |
| 100 | + ajax-based previews. | |
| 101 | +*/ | |
| 102 | +.tab 100%;h@tl,Q: align-items: stretch; | |
| 103 | +} | |
| 104 | +H@XW,I:#fossil-status-barK@VT,2:} | |
| 105 | +N@XW,L@2G,C: margin: 0;h@tl,a@gv,5:outseS@gU,2:} | |
| 106 | +_@XW,a:{ | |
| 107 | + align-self: stretch; | |
| 108 | + flex: 10 1I@vk,9:block; | |
| 109 | +} | |
| 110 | +L@XW,4:-barb@tj,14:row; | |
| 111 | + flex: 1 10 auto; | |
| 112 | + align-self: stretch; | |
| 113 | + flex-wrap: wrap; | |
| 114 | +} | |
| 115 | +L@XW,h:-bar > .tab-button { | |
| 116 | + display: inline-blockK@V~,Y:.5em 0.5em 0 0; | |
| 117 | + margin: 0 0.1em;I@2~,V: 0.75em; | |
| 118 | + align-self: baselineu@gV,r:bottom: none; | |
| 119 | + border-top-style: inset; | |
| 120 | + border-leftP@hN,t:ight-style: inset; | |
| 121 | + cursor: pointer; | |
| 122 | + opacity: 0.6; | |
| 123 | +} | |
| 124 | +L@XW,1O:-bar > .tab-button.selected { | |
| 125 | + text-decoration: underline; | |
| 126 | + opacity: 1.0; | |
| 127 | + border-top8@X0,L:outset; | |
| 128 | + border-left8@X0,M:outset; | |
| 129 | + border-right8@X0,5g:outset; | |
| 130 | +} | |
| 131 | + | |
| 132 | +/** | |
| 133 | + Styles developed for /fileedit but which have wider | |
| 134 | + applicability... | |
| 135 | + | |
| 136 | + As of this writing, these are only used by /fileedit, but it is | |
| 137 | + anticipated that they will eventually need to be migrated over to | |
| 138 | + default_css.txt for use in other pages (specifically wiki and forum | |
| 139 | + page/post editors). | |
| 140 | +*/ | |
| 141 | +.flex-container { | |
| 142 | + display: flex; | |
| 143 | +} | |
| 144 | +T@dq,f@ps,N:justify-content: centerH@wV,2n:center; | |
| 145 | +} | |
| 146 | +.flex-container .flex-grow { | |
| 147 | + flex-grow: 10; | |
| 148 | + flex-shrink: 0; | |
| 149 | +} | |
| 150 | +.flex-container .flex-shrink { | |
| 151 | + flex-grow: 0; | |
| 152 | + flex-shrink: 10; | |
| 153 | +} | |
| 154 | +.flex-container.flex-row.stretch {i@qB,18: justify-content: stretch; | |
| 155 | + margin: 0; | |
| 156 | +} | |
| 157 | +.flex-container.flex-column {T@10A,J@qE,N:justify-content: centerH@wV,k:center; | |
| 158 | +} | |
| 159 | +.flex-container.flex-column.stretch {R@RG,h:margin: 0; | |
| 160 | +} | |
| 161 | +.flex-container.child-gap-smallN@n~,M:; | |
| 162 | +} | |
| 163 | +#fossil-status-barN@Kg,Q@sG,o@gx,t:color: inherit; | |
| 164 | + min-height: 1.5em; | |
| 165 | + font-size: 1.2em;F@2~,3:em;H@S~,8B: 0; | |
| 166 | + flex: 0 0 auto; | |
| 167 | +} | |
| 168 | +.font-size-100 { | |
| 169 | + font-size: 100%; | |
| 170 | +} | |
| 171 | +.font-size-125 { | |
| 172 | + font-size: 125%; | |
| 173 | +} | |
| 174 | +.font-size-150 { | |
| 175 | + font-size: 150%; | |
| 176 | +} | |
| 177 | +.font-size-175 { | |
| 178 | + font-size: 175%; | |
| 179 | +} | |
| 180 | +.font-size-200 { | |
| 181 | + font-size: 200%; | |
| 182 | +} | |
| 183 | + | |
| 184 | +/** | |
| 185 | + .input-with-label is intended to be a wrapper element which | |
| 186 | + contain both a LABEL tag and an INPUT or SELECT control. | |
| 187 | + The wrapper is "necessary", as opposed to placing the INPUT | |
| 188 | + in the LABEL, so that we can include multiple INPUT | |
| 189 | + elements (e.g. a set of radio buttons). | |
| 190 | +*/ | |
| 191 | +.input-with-labelD@lp,H:1px inset #808080K@V~,5:.5em;I@2~,1U: 0.4em; | |
| 192 | + margin: 0 0.5em; | |
| 193 | + display: inline-block; | |
| 194 | + cursor: default; | |
| 195 | +} | |
| 196 | +.input-with-label > *T@YW,3A:} | |
| 197 | +.input-with-label > label { | |
| 198 | + display: inline; /* some skins set label display to block! */ | |
| 199 | +} | |
| 200 | +.input-with-label > input { | |
| 201 | + margin: 0; | |
| 202 | +} | |
| 203 | +.input-with-label > button { | |
| 204 | + margin: 0; | |
| 205 | +} | |
| 206 | +.input-with-label >L@rW,2G:; | |
| 207 | +} | |
| 208 | +.input-with-label > input[type=text] { | |
| 209 | + margin: 0; | |
| 210 | +} | |
| 211 | +.input-with-label > textarea { | |
| 212 | + margin: 0; | |
| 213 | +} | |
| 214 | +.input-with-label > input[type=checkbox]L@YW,h:sub; | |
| 215 | +} | |
| 216 | +.input-with-label > input[type=radio]L@YW,g:sub; | |
| 217 | +} | |
| 218 | +.input-with-label > label { | |
| 219 | + font-wI@j~,T@Dg,O@bg,2:} | |
| 220 | +1Ggqo_; |
| --- a/src/style.fileedit.css | |
| +++ b/src/style.fileedit.css | |
| @@ -0,0 +1,220 @@ | |
| --- a/src/style.fileedit.css | |
| +++ b/src/style.fileedit.css | |
| @@ -0,0 +1,220 @@ | |
| 1 | /** Styles specific to /fileedit... */ |
| 2 | body.fileedit.waiting * { |
| 3 | /* Triggered during AJAX requests. */ |
| 4 | cursor: wait; |
| 5 | } |
| 6 | body.fileedit .error { |
| 7 | padding: 0.25em; |
| 8 | } |
| 9 | body.fileedit .warning { |
| 10 | padding: 0.25em; |
| 11 | } |
| 12 | body.fileedit textarea { |
| 13 | font-family: monospace; |
| 14 | flex: 10 1 auto; |
| 15 | height: initial/*undo damage from some skins*/; |
| 16 | entually need totextarea:focus, |
| 17 | body.fileedit input:focus{ |
| 18 | /* The sudden appearance of a border (as in the Ardoise skin) |
| 19 | shifts the layout in; |
| 20 | border-radius: 0.5em; |
| 21 | border-color: inherit; |
| 22 | border-width: 1px; |
| 23 | font-size: 90%; |
| 24 | overflow: auto; |
| 25 | } |
| 26 | body.fileedit fieldset > legend { |
| 27 | margin: 0 0 0 1em; |
| 28 | padding: 0 0.5em 0 0.5em; |
| 29 | } |
| 30 | body.fileedit fieldset > div { |
| 31 | margin: 0 0.25em 0 0.25em; |
| 32 | padding: 0; |
| 33 | overflow: auto; |
| 34 | } |
| 35 | body.fileedit fieldset > div > .input-with-label { |
| 36 | margin: 0.25em 0.5em; |
| 37 | } |
| 38 | body.fileedit fieldset > div > button { |
| 39 | margin: 0.25em 0.5em; |
| 40 | } |
| 41 | body.fileedit .fileedit-hint { |
| 42 | font-size: 80%; |
| 43 | opacity: 0.75; |
| 44 | } |
| 45 | body.fileedit .fileedit-error-report { |
| 46 | background: yellow; |
| 47 | color: darkred; |
| 48 | margin: 1em 0; |
| 49 | padding: 0.5em; |
| 50 | border-radius: 0.5em; |
| 51 | } |
| 52 | body.fileedit code.fileedit-manifest { |
| 53 | display: block; |
| 54 | height: 16em; |
| 55 | overflow: auto; |
| 56 | white-space: pre; |
| 57 | } |
| 58 | body.fileedit div.filr-style: inset; |
| 59 | border-radius: 0.5em; |
| 60 | in: 0.25em 0.5em; |
| 61 | } |
| 62 | body.fileedit .fileedit-hint { |
| 63 | font-size: 80%; |
| 64 | opacity: 0.75; |
| 65 | } |
| 66 | body.fileedit .fileedit-error-report { |
| 67 | background: yelck; |
| 68 | height: 16em; |
| 69 | overflow: auto; |
| 70 | white-space: pre; |
| 71 | } |
| 72 | body.rgin: 0; |
| 73 | padeedit div.fileedit-preview { |
| 74 | margin: 0; |
| 75 | padding: 0; |
| 76 | } |
| 77 | body.fileedit #fileedit-tabs { |
| 78 | margin: 0.5em 0 0 0; |
| 79 | } |
| 80 | body.fileedit #fileedit-tab-preview-wrapper { |
| 81 | overflow: auto; |
| 82 | } |
| 83 | body.fileedioverflow: autoed; |
| 84 | overflow: auto; |
| 85 | etch; |
| 86 | } |
| 87 | body.fileedit #fileedit-tab-0 1 auto; |
| 88 | } |
| 89 | body.fileedit /column; |
| 90 | } |
| 91 | body.fileedit #fileedit-tab- font-size: 1.c to /fileedit... */ |
| 92 | body.filee/** Styles specifi/column; |
| 93 | } |
| 94 | body.fileedit # |
| 95 | /** |
| 96 | Styles for fossil.tabs.js. As of this writing, currently |
| 97 | only used by /fileedit, but it is anticipated that these |
| 98 | will eventually need to migrate to default_css.txt for use |
| 99 | in the wiki and/or forum pages when implementing tabbed |
| 100 | ajax-based previews. |
| 101 | */ |
| 102 | .tab 100%;h@tl,Q: align-items: stretch; |
| 103 | } |
| 104 | H@XW,I:#fossil-status-barK@VT,2:} |
| 105 | N@XW,L@2G,C: margin: 0;h@tl,a@gv,5:outseS@gU,2:} |
| 106 | _@XW,a:{ |
| 107 | align-self: stretch; |
| 108 | flex: 10 1I@vk,9:block; |
| 109 | } |
| 110 | L@XW,4:-barb@tj,14:row; |
| 111 | flex: 1 10 auto; |
| 112 | align-self: stretch; |
| 113 | flex-wrap: wrap; |
| 114 | } |
| 115 | L@XW,h:-bar > .tab-button { |
| 116 | display: inline-blockK@V~,Y:.5em 0.5em 0 0; |
| 117 | margin: 0 0.1em;I@2~,V: 0.75em; |
| 118 | align-self: baselineu@gV,r:bottom: none; |
| 119 | border-top-style: inset; |
| 120 | border-leftP@hN,t:ight-style: inset; |
| 121 | cursor: pointer; |
| 122 | opacity: 0.6; |
| 123 | } |
| 124 | L@XW,1O:-bar > .tab-button.selected { |
| 125 | text-decoration: underline; |
| 126 | opacity: 1.0; |
| 127 | border-top8@X0,L:outset; |
| 128 | border-left8@X0,M:outset; |
| 129 | border-right8@X0,5g:outset; |
| 130 | } |
| 131 | |
| 132 | /** |
| 133 | Styles developed for /fileedit but which have wider |
| 134 | applicability... |
| 135 | |
| 136 | As of this writing, these are only used by /fileedit, but it is |
| 137 | anticipated that they will eventually need to be migrated over to |
| 138 | default_css.txt for use in other pages (specifically wiki and forum |
| 139 | page/post editors). |
| 140 | */ |
| 141 | .flex-container { |
| 142 | display: flex; |
| 143 | } |
| 144 | T@dq,f@ps,N:justify-content: centerH@wV,2n:center; |
| 145 | } |
| 146 | .flex-container .flex-grow { |
| 147 | flex-grow: 10; |
| 148 | flex-shrink: 0; |
| 149 | } |
| 150 | .flex-container .flex-shrink { |
| 151 | flex-grow: 0; |
| 152 | flex-shrink: 10; |
| 153 | } |
| 154 | .flex-container.flex-row.stretch {i@qB,18: justify-content: stretch; |
| 155 | margin: 0; |
| 156 | } |
| 157 | .flex-container.flex-column {T@10A,J@qE,N:justify-content: centerH@wV,k:center; |
| 158 | } |
| 159 | .flex-container.flex-column.stretch {R@RG,h:margin: 0; |
| 160 | } |
| 161 | .flex-container.child-gap-smallN@n~,M:; |
| 162 | } |
| 163 | #fossil-status-barN@Kg,Q@sG,o@gx,t:color: inherit; |
| 164 | min-height: 1.5em; |
| 165 | font-size: 1.2em;F@2~,3:em;H@S~,8B: 0; |
| 166 | flex: 0 0 auto; |
| 167 | } |
| 168 | .font-size-100 { |
| 169 | font-size: 100%; |
| 170 | } |
| 171 | .font-size-125 { |
| 172 | font-size: 125%; |
| 173 | } |
| 174 | .font-size-150 { |
| 175 | font-size: 150%; |
| 176 | } |
| 177 | .font-size-175 { |
| 178 | font-size: 175%; |
| 179 | } |
| 180 | .font-size-200 { |
| 181 | font-size: 200%; |
| 182 | } |
| 183 | |
| 184 | /** |
| 185 | .input-with-label is intended to be a wrapper element which |
| 186 | contain both a LABEL tag and an INPUT or SELECT control. |
| 187 | The wrapper is "necessary", as opposed to placing the INPUT |
| 188 | in the LABEL, so that we can include multiple INPUT |
| 189 | elements (e.g. a set of radio buttons). |
| 190 | */ |
| 191 | .input-with-labelD@lp,H:1px inset #808080K@V~,5:.5em;I@2~,1U: 0.4em; |
| 192 | margin: 0 0.5em; |
| 193 | display: inline-block; |
| 194 | cursor: default; |
| 195 | } |
| 196 | .input-with-label > *T@YW,3A:} |
| 197 | .input-with-label > label { |
| 198 | display: inline; /* some skins set label display to block! */ |
| 199 | } |
| 200 | .input-with-label > input { |
| 201 | margin: 0; |
| 202 | } |
| 203 | .input-with-label > button { |
| 204 | margin: 0; |
| 205 | } |
| 206 | .input-with-label >L@rW,2G:; |
| 207 | } |
| 208 | .input-with-label > input[type=text] { |
| 209 | margin: 0; |
| 210 | } |
| 211 | .input-with-label > textarea { |
| 212 | margin: 0; |
| 213 | } |
| 214 | .input-with-label > input[type=checkbox]L@YW,h:sub; |
| 215 | } |
| 216 | .input-with-label > input[type=radio]L@YW,g:sub; |
| 217 | } |
| 218 | .input-with-label > label { |
| 219 | font-wI@j~,T@Dg,O@bg,2:} |
| 220 | 1Ggqo_; |
+10
-4
| --- win/Makefile.dmc | ||
| +++ win/Makefile.dmc | ||
| @@ -28,13 +28,13 @@ | ||
| 28 | 28 | |
| 29 | 29 | SQLITE_OPTIONS = -DNDEBUG=1 -DSQLITE_DQS=0 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_GET_TABLE -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_HAVE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB -DSQLITE_TRUSTED_SCHEMA=0 |
| 30 | 30 | |
| 31 | 31 | SHELL_OPTIONS = -DNDEBUG=1 -DSQLITE_DQS=0 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_GET_TABLE -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_HAVE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB -DSQLITE_TRUSTED_SCHEMA=0 -Dmain=sqlite3_shell -DSQLITE_SHELL_IS_UTF8=1 -DSQLITE_OMIT_LOAD_EXTENSION=1 -DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) -DSQLITE_SHELL_DBNAME_PROC=sqlcmd_get_dbname -DSQLITE_SHELL_INIT_PROC=sqlcmd_init_proc -Daccess=file_access -Dsystem=fossil_system -Dgetenv=fossil_getenv -Dfopen=fossil_fopen |
| 32 | 32 | |
| 33 | -SRC = add_.c alerts_.c allrepo_.c attach_.c backlink_.c backoffice_.c bag_.c bisect_.c blob_.c branch_.c browse_.c builtin_.c bundle_.c cache_.c capabilities_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c cookies_.c db_.c delta_.c deltacmd_.c deltafunc_.c descendants_.c diff_.c diffcmd_.c dispatch_.c doc_.c encode_.c etag_.c event_.c export_.c extcgi_.c file_.c finfo_.c foci_.c forum_.c fshell_.c fusefs_.c fuzz_.c glob_.c graph_.c gzip_.c hname_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_artifact_.c json_branch_.c json_config_.c json_diff_.c json_dir_.c json_finfo_.c json_login_.c json_query_.c json_report_.c json_status_.c json_tag_.c json_timeline_.c json_user_.c json_wiki_.c leaf_.c loadctrl_.c login_.c lookslike_.c main_.c manifest_.c markdown_.c markdown_html_.c md5_.c merge_.c merge3_.c moderate_.c name_.c path_.c piechart_.c pivot_.c popen_.c pqueue_.c printf_.c publish_.c purge_.c rebuild_.c regexp_.c repolist_.c report_.c rss_.c schema_.c search_.c security_audit_.c setup_.c setupuser_.c sha1_.c sha1hard_.c sha3_.c shun_.c sitemap_.c skins_.c smtp_.c sqlcmd_.c stash_.c stat_.c statrep_.c style_.c sync_.c tag_.c tar_.c terminal_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c unicode_.c unversioned_.c update_.c url_.c user_.c utf8_.c util_.c verify_.c vfile_.c webmail_.c wiki_.c wikiformat_.c winfile_.c winhttp_.c wysiwyg_.c xfer_.c xfersetup_.c zip_.c | |
| 33 | +SRC = add_.c alerts_.c allrepo_.c attach_.c backlink_.c backoffice_.c bag_.c bisect_.c blob_.c branch_.c browse_.c builtin_.c bundle_.c cache_.c capabilities_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c cookies_.c db_.c delta_.c deltacmd_.c deltafunc_.c descendants_.c diff_.c diffcmd_.c dispatch_.c doc_.c encode_.c etag_.c event_.c export_.c extcgi_.c file_.c fileedit_.c finfo_.c foci_.c forum_.c fshell_.c fusefs_.c fuzz_.c glob_.c graph_.c gzip_.c hname_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_artifact_.c json_branch_.c json_config_.c json_diff_.c json_dir_.c json_finfo_.c json_login_.c json_query_.c json_report_.c json_status_.c json_tag_.c json_timeline_.c json_user_.c json_wiki_.c leaf_.c loadctrl_.c login_.c lookslike_.c main_.c manifest_.c markdown_.c markdown_html_.c md5_.c merge_.c merge3_.c moderate_.c name_.c path_.c piechart_.c pivot_.c popen_.c pqueue_.c printf_.c publish_.c purge_.c rebuild_.c regexp_.c repolist_.c report_.c rss_.c schema_.c search_.c security_audit_.c setup_.c setupuser_.c sha1_.c sha1hard_.c sha3_.c shun_.c sitemap_.c skins_.c smtp_.c sqlcmd_.c stash_.c stat_.c statrep_.c style_.c sync_.c tag_.c tar_.c terminal_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c unicode_.c unversioned_.c update_.c url_.c user_.c utf8_.c util_.c verify_.c vfile_.c webmail_.c wiki_.c wikiformat_.c winfile_.c winhttp_.c wysiwyg_.c xfer_.c xfersetup_.c zip_.c | |
| 34 | 34 | |
| 35 | -OBJ = $(OBJDIR)\add$O $(OBJDIR)\alerts$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\backlink$O $(OBJDIR)\backoffice$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\builtin$O $(OBJDIR)\bundle$O $(OBJDIR)\cache$O $(OBJDIR)\capabilities$O $(OBJDIR)\captcha$O $(OBJDIR)\cgi$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\cookies$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\deltafunc$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\dispatch$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\etag$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\extcgi$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\foci$O $(OBJDIR)\forum$O $(OBJDIR)\fshell$O $(OBJDIR)\fusefs$O $(OBJDIR)\fuzz$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\hname$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\json$O $(OBJDIR)\json_artifact$O $(OBJDIR)\json_branch$O $(OBJDIR)\json_config$O $(OBJDIR)\json_diff$O $(OBJDIR)\json_dir$O $(OBJDIR)\json_finfo$O $(OBJDIR)\json_login$O $(OBJDIR)\json_query$O $(OBJDIR)\json_report$O $(OBJDIR)\json_status$O $(OBJDIR)\json_tag$O $(OBJDIR)\json_timeline$O $(OBJDIR)\json_user$O $(OBJDIR)\json_wiki$O $(OBJDIR)\leaf$O $(OBJDIR)\loadctrl$O $(OBJDIR)\login$O $(OBJDIR)\lookslike$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\markdown$O $(OBJDIR)\markdown_html$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\moderate$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\piechart$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\publish$O $(OBJDIR)\purge$O $(OBJDIR)\rebuild$O $(OBJDIR)\regexp$O $(OBJDIR)\repolist$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\security_audit$O $(OBJDIR)\setup$O $(OBJDIR)\setupuser$O $(OBJDIR)\sha1$O $(OBJDIR)\sha1hard$O $(OBJDIR)\sha3$O $(OBJDIR)\shun$O $(OBJDIR)\sitemap$O $(OBJDIR)\skins$O $(OBJDIR)\smtp$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\statrep$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\terminal$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\unicode$O $(OBJDIR)\unversioned$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\utf8$O $(OBJDIR)\util$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\webmail$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winfile$O $(OBJDIR)\winhttp$O $(OBJDIR)\wysiwyg$O $(OBJDIR)\xfer$O $(OBJDIR)\xfersetup$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O | |
| 35 | +OBJ = $(OBJDIR)\add$O $(OBJDIR)\alerts$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\backlink$O $(OBJDIR)\backoffice$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\builtin$O $(OBJDIR)\bundle$O $(OBJDIR)\cache$O $(OBJDIR)\capabilities$O $(OBJDIR)\captcha$O $(OBJDIR)\cgi$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\cookies$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\deltafunc$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\dispatch$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\etag$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\extcgi$O $(OBJDIR)\file$O $(OBJDIR)\fileedit$O $(OBJDIR)\finfo$O $(OBJDIR)\foci$O $(OBJDIR)\forum$O $(OBJDIR)\fshell$O $(OBJDIR)\fusefs$O $(OBJDIR)\fuzz$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\hname$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\json$O $(OBJDIR)\json_artifact$O $(OBJDIR)\json_branch$O $(OBJDIR)\json_config$O $(OBJDIR)\json_diff$O $(OBJDIR)\json_dir$O $(OBJDIR)\json_finfo$O $(OBJDIR)\json_login$O $(OBJDIR)\json_query$O $(OBJDIR)\json_report$O $(OBJDIR)\json_status$O $(OBJDIR)\json_tag$O $(OBJDIR)\json_timeline$O $(OBJDIR)\json_user$O $(OBJDIR)\json_wiki$O $(OBJDIR)\leaf$O $(OBJDIR)\loadctrl$O $(OBJDIR)\login$O $(OBJDIR)\lookslike$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\markdown$O $(OBJDIR)\markdown_html$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\moderate$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\piechart$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\publish$O $(OBJDIR)\purge$O $(OBJDIR)\rebuild$O $(OBJDIR)\regexp$O $(OBJDIR)\repolist$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\security_audit$O $(OBJDIR)\setup$O $(OBJDIR)\setupuser$O $(OBJDIR)\sha1$O $(OBJDIR)\sha1hard$O $(OBJDIR)\sha3$O $(OBJDIR)\shun$O $(OBJDIR)\sitemap$O $(OBJDIR)\skins$O $(OBJDIR)\smtp$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\statrep$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\terminal$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\unicode$O $(OBJDIR)\unversioned$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\utf8$O $(OBJDIR)\util$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\webmail$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winfile$O $(OBJDIR)\winhttp$O $(OBJDIR)\wysiwyg$O $(OBJDIR)\xfer$O $(OBJDIR)\xfersetup$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O | |
| 36 | 36 | |
| 37 | 37 | |
| 38 | 38 | RC=$(DMDIR)\bin\rcc |
| 39 | 39 | RCFLAGS=-32 -w1 -I$(SRCDIR) /D__DMC__ |
| 40 | 40 | |
| @@ -49,11 +49,11 @@ | ||
| 49 | 49 | |
| 50 | 50 | $(OBJDIR)\fossil.res: $B\win\fossil.rc |
| 51 | 51 | $(RC) $(RCFLAGS) -o$@ $** |
| 52 | 52 | |
| 53 | 53 | $(OBJDIR)\link: $B\win\Makefile.dmc $(OBJDIR)\fossil.res |
| 54 | - +echo add alerts allrepo attach backlink backoffice bag bisect blob branch browse builtin bundle cache capabilities captcha cgi checkin checkout clearsign clone comformat configure content cookies db delta deltacmd deltafunc descendants diff diffcmd dispatch doc encode etag event export extcgi file finfo foci forum fshell fusefs fuzz glob graph gzip hname http http_socket http_ssl http_transport import info json json_artifact json_branch json_config json_diff json_dir json_finfo json_login json_query json_report json_status json_tag json_timeline json_user json_wiki leaf loadctrl login lookslike main manifest markdown markdown_html md5 merge merge3 moderate name path piechart pivot popen pqueue printf publish purge rebuild regexp repolist report rss schema search security_audit setup setupuser sha1 sha1hard sha3 shun sitemap skins smtp sqlcmd stash stat statrep style sync tag tar terminal th_main timeline tkt tktsetup undo unicode unversioned update url user utf8 util verify vfile webmail wiki wikiformat winfile winhttp wysiwyg xfer xfersetup zip shell sqlite3 th th_lang > $@ | |
| 54 | + +echo add alerts allrepo attach backlink backoffice bag bisect blob branch browse builtin bundle cache capabilities captcha cgi checkin checkout clearsign clone comformat configure content cookies db delta deltacmd deltafunc descendants diff diffcmd dispatch doc encode etag event export extcgi file fileedit finfo foci forum fshell fusefs fuzz glob graph gzip hname http http_socket http_ssl http_transport import info json json_artifact json_branch json_config json_diff json_dir json_finfo json_login json_query json_report json_status json_tag json_timeline json_user json_wiki leaf loadctrl login lookslike main manifest markdown markdown_html md5 merge merge3 moderate name path piechart pivot popen pqueue printf publish purge rebuild regexp repolist report rss schema search security_audit setup setupuser sha1 sha1hard sha3 shun sitemap skins smtp sqlcmd stash stat statrep style sync tag tar terminal th_main timeline tkt tktsetup undo unicode unversioned update url user utf8 util verify vfile webmail wiki wikiformat winfile winhttp wysiwyg xfer xfersetup zip shell sqlite3 th th_lang > $@ | |
| 55 | 55 | +echo fossil >> $@ |
| 56 | 56 | +echo fossil >> $@ |
| 57 | 57 | +echo $(LIBS) >> $@ |
| 58 | 58 | +echo. >> $@ |
| 59 | 59 | +echo fossil >> $@ |
| @@ -368,10 +368,16 @@ | ||
| 368 | 368 | $(OBJDIR)\file$O : file_.c file.h |
| 369 | 369 | $(TCC) -o$@ -c file_.c |
| 370 | 370 | |
| 371 | 371 | file_.c : $(SRCDIR)\file.c |
| 372 | 372 | +translate$E $** > $@ |
| 373 | + | |
| 374 | +$(OBJDIR)\fileedit$O : fileedit_.c fileedit.h | |
| 375 | + $(TCC) -o$@ -c fileedit_.c | |
| 376 | + | |
| 377 | +fileedit_.c : $(SRCDIR)\fileedit.c | |
| 378 | + +translate$E $** > $@ | |
| 373 | 379 | |
| 374 | 380 | $(OBJDIR)\finfo$O : finfo_.c finfo.h |
| 375 | 381 | $(TCC) -o$@ -c finfo_.c |
| 376 | 382 | |
| 377 | 383 | finfo_.c : $(SRCDIR)\finfo.c |
| @@ -976,7 +982,7 @@ | ||
| 976 | 982 | |
| 977 | 983 | zip_.c : $(SRCDIR)\zip.c |
| 978 | 984 | +translate$E $** > $@ |
| 979 | 985 | |
| 980 | 986 | headers: makeheaders$E page_index.h builtin_data.h default_css.h VERSION.h |
| 981 | - +makeheaders$E add_.c:add.h alerts_.c:alerts.h allrepo_.c:allrepo.h attach_.c:attach.h backlink_.c:backlink.h backoffice_.c:backoffice.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h builtin_.c:builtin.h bundle_.c:bundle.h cache_.c:cache.h capabilities_.c:capabilities.h captcha_.c:captcha.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h cookies_.c:cookies.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h deltafunc_.c:deltafunc.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h dispatch_.c:dispatch.h doc_.c:doc.h encode_.c:encode.h etag_.c:etag.h event_.c:event.h export_.c:export.h extcgi_.c:extcgi.h file_.c:file.h finfo_.c:finfo.h foci_.c:foci.h forum_.c:forum.h fshell_.c:fshell.h fusefs_.c:fusefs.h fuzz_.c:fuzz.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h hname_.c:hname.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h json_.c:json.h json_artifact_.c:json_artifact.h json_branch_.c:json_branch.h json_config_.c:json_config.h json_diff_.c:json_diff.h json_dir_.c:json_dir.h json_finfo_.c:json_finfo.h json_login_.c:json_login.h json_query_.c:json_query.h json_report_.c:json_report.h json_status_.c:json_status.h json_tag_.c:json_tag.h json_timeline_.c:json_timeline.h json_user_.c:json_user.h json_wiki_.c:json_wiki.h leaf_.c:leaf.h loadctrl_.c:loadctrl.h login_.c:login.h lookslike_.c:lookslike.h main_.c:main.h manifest_.c:manifest.h markdown_.c:markdown.h markdown_html_.c:markdown_html.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h moderate_.c:moderate.h name_.c:name.h path_.c:path.h piechart_.c:piechart.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h publish_.c:publish.h purge_.c:purge.h rebuild_.c:rebuild.h regexp_.c:regexp.h repolist_.c:repolist.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h security_audit_.c:security_audit.h setup_.c:setup.h setupuser_.c:setupuser.h sha1_.c:sha1.h sha1hard_.c:sha1hard.h sha3_.c:sha3.h shun_.c:shun.h sitemap_.c:sitemap.h skins_.c:skins.h smtp_.c:smtp.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h statrep_.c:statrep.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h terminal_.c:terminal.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h unicode_.c:unicode.h unversioned_.c:unversioned.h update_.c:update.h url_.c:url.h user_.c:user.h utf8_.c:utf8.h util_.c:util.h verify_.c:verify.h vfile_.c:vfile.h webmail_.c:webmail.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winfile_.c:winfile.h winhttp_.c:winhttp.h wysiwyg_.c:wysiwyg.h xfer_.c:xfer.h xfersetup_.c:xfersetup.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h | |
| 987 | + +makeheaders$E add_.c:add.h alerts_.c:alerts.h allrepo_.c:allrepo.h attach_.c:attach.h backlink_.c:backlink.h backoffice_.c:backoffice.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h builtin_.c:builtin.h bundle_.c:bundle.h cache_.c:cache.h capabilities_.c:capabilities.h captcha_.c:captcha.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h cookies_.c:cookies.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h deltafunc_.c:deltafunc.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h dispatch_.c:dispatch.h doc_.c:doc.h encode_.c:encode.h etag_.c:etag.h event_.c:event.h export_.c:export.h extcgi_.c:extcgi.h file_.c:file.h fileedit_.c:fileedit.h finfo_.c:finfo.h foci_.c:foci.h forum_.c:forum.h fshell_.c:fshell.h fusefs_.c:fusefs.h fuzz_.c:fuzz.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h hname_.c:hname.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h json_.c:json.h json_artifact_.c:json_artifact.h json_branch_.c:json_branch.h json_config_.c:json_config.h json_diff_.c:json_diff.h json_dir_.c:json_dir.h json_finfo_.c:json_finfo.h json_login_.c:json_login.h json_query_.c:json_query.h json_report_.c:json_report.h json_status_.c:json_status.h json_tag_.c:json_tag.h json_timeline_.c:json_timeline.h json_user_.c:json_user.h json_wiki_.c:json_wiki.h leaf_.c:leaf.h loadctrl_.c:loadctrl.h login_.c:login.h lookslike_.c:lookslike.h main_.c:main.h manifest_.c:manifest.h markdown_.c:markdown.h markdown_html_.c:markdown_html.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h moderate_.c:moderate.h name_.c:name.h path_.c:path.h piechart_.c:piechart.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h publish_.c:publish.h purge_.c:purge.h rebuild_.c:rebuild.h regexp_.c:regexp.h repolist_.c:repolist.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h security_audit_.c:security_audit.h setup_.c:setup.h setupuser_.c:setupuser.h sha1_.c:sha1.h sha1hard_.c:sha1hard.h sha3_.c:sha3.h shun_.c:shun.h sitemap_.c:sitemap.h skins_.c:skins.h smtp_.c:smtp.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h statrep_.c:statrep.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h terminal_.c:terminal.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h unicode_.c:unicode.h unversioned_.c:unversioned.h update_.c:update.h url_.c:url.h user_.c:user.h utf8_.c:utf8.h util_.c:util.h verify_.c:verify.h vfile_.c:vfile.h webmail_.c:webmail.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winfile_.c:winfile.h winhttp_.c:winhttp.h wysiwyg_.c:wysiwyg.h xfer_.c:xfer.h xfersetup_.c:xfersetup.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h | |
| 982 | 988 | @copy /Y nul: headers |
| 983 | 989 |
| --- win/Makefile.dmc | |
| +++ win/Makefile.dmc | |
| @@ -28,13 +28,13 @@ | |
| 28 | |
| 29 | SQLITE_OPTIONS = -DNDEBUG=1 -DSQLITE_DQS=0 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_GET_TABLE -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_HAVE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB -DSQLITE_TRUSTED_SCHEMA=0 |
| 30 | |
| 31 | SHELL_OPTIONS = -DNDEBUG=1 -DSQLITE_DQS=0 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_GET_TABLE -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_HAVE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB -DSQLITE_TRUSTED_SCHEMA=0 -Dmain=sqlite3_shell -DSQLITE_SHELL_IS_UTF8=1 -DSQLITE_OMIT_LOAD_EXTENSION=1 -DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) -DSQLITE_SHELL_DBNAME_PROC=sqlcmd_get_dbname -DSQLITE_SHELL_INIT_PROC=sqlcmd_init_proc -Daccess=file_access -Dsystem=fossil_system -Dgetenv=fossil_getenv -Dfopen=fossil_fopen |
| 32 | |
| 33 | SRC = add_.c alerts_.c allrepo_.c attach_.c backlink_.c backoffice_.c bag_.c bisect_.c blob_.c branch_.c browse_.c builtin_.c bundle_.c cache_.c capabilities_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c cookies_.c db_.c delta_.c deltacmd_.c deltafunc_.c descendants_.c diff_.c diffcmd_.c dispatch_.c doc_.c encode_.c etag_.c event_.c export_.c extcgi_.c file_.c finfo_.c foci_.c forum_.c fshell_.c fusefs_.c fuzz_.c glob_.c graph_.c gzip_.c hname_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_artifact_.c json_branch_.c json_config_.c json_diff_.c json_dir_.c json_finfo_.c json_login_.c json_query_.c json_report_.c json_status_.c json_tag_.c json_timeline_.c json_user_.c json_wiki_.c leaf_.c loadctrl_.c login_.c lookslike_.c main_.c manifest_.c markdown_.c markdown_html_.c md5_.c merge_.c merge3_.c moderate_.c name_.c path_.c piechart_.c pivot_.c popen_.c pqueue_.c printf_.c publish_.c purge_.c rebuild_.c regexp_.c repolist_.c report_.c rss_.c schema_.c search_.c security_audit_.c setup_.c setupuser_.c sha1_.c sha1hard_.c sha3_.c shun_.c sitemap_.c skins_.c smtp_.c sqlcmd_.c stash_.c stat_.c statrep_.c style_.c sync_.c tag_.c tar_.c terminal_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c unicode_.c unversioned_.c update_.c url_.c user_.c utf8_.c util_.c verify_.c vfile_.c webmail_.c wiki_.c wikiformat_.c winfile_.c winhttp_.c wysiwyg_.c xfer_.c xfersetup_.c zip_.c |
| 34 | |
| 35 | OBJ = $(OBJDIR)\add$O $(OBJDIR)\alerts$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\backlink$O $(OBJDIR)\backoffice$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\builtin$O $(OBJDIR)\bundle$O $(OBJDIR)\cache$O $(OBJDIR)\capabilities$O $(OBJDIR)\captcha$O $(OBJDIR)\cgi$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\cookies$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\deltafunc$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\dispatch$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\etag$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\extcgi$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\foci$O $(OBJDIR)\forum$O $(OBJDIR)\fshell$O $(OBJDIR)\fusefs$O $(OBJDIR)\fuzz$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\hname$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\json$O $(OBJDIR)\json_artifact$O $(OBJDIR)\json_branch$O $(OBJDIR)\json_config$O $(OBJDIR)\json_diff$O $(OBJDIR)\json_dir$O $(OBJDIR)\json_finfo$O $(OBJDIR)\json_login$O $(OBJDIR)\json_query$O $(OBJDIR)\json_report$O $(OBJDIR)\json_status$O $(OBJDIR)\json_tag$O $(OBJDIR)\json_timeline$O $(OBJDIR)\json_user$O $(OBJDIR)\json_wiki$O $(OBJDIR)\leaf$O $(OBJDIR)\loadctrl$O $(OBJDIR)\login$O $(OBJDIR)\lookslike$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\markdown$O $(OBJDIR)\markdown_html$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\moderate$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\piechart$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\publish$O $(OBJDIR)\purge$O $(OBJDIR)\rebuild$O $(OBJDIR)\regexp$O $(OBJDIR)\repolist$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\security_audit$O $(OBJDIR)\setup$O $(OBJDIR)\setupuser$O $(OBJDIR)\sha1$O $(OBJDIR)\sha1hard$O $(OBJDIR)\sha3$O $(OBJDIR)\shun$O $(OBJDIR)\sitemap$O $(OBJDIR)\skins$O $(OBJDIR)\smtp$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\statrep$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\terminal$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\unicode$O $(OBJDIR)\unversioned$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\utf8$O $(OBJDIR)\util$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\webmail$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winfile$O $(OBJDIR)\winhttp$O $(OBJDIR)\wysiwyg$O $(OBJDIR)\xfer$O $(OBJDIR)\xfersetup$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O |
| 36 | |
| 37 | |
| 38 | RC=$(DMDIR)\bin\rcc |
| 39 | RCFLAGS=-32 -w1 -I$(SRCDIR) /D__DMC__ |
| 40 | |
| @@ -49,11 +49,11 @@ | |
| 49 | |
| 50 | $(OBJDIR)\fossil.res: $B\win\fossil.rc |
| 51 | $(RC) $(RCFLAGS) -o$@ $** |
| 52 | |
| 53 | $(OBJDIR)\link: $B\win\Makefile.dmc $(OBJDIR)\fossil.res |
| 54 | +echo add alerts allrepo attach backlink backoffice bag bisect blob branch browse builtin bundle cache capabilities captcha cgi checkin checkout clearsign clone comformat configure content cookies db delta deltacmd deltafunc descendants diff diffcmd dispatch doc encode etag event export extcgi file finfo foci forum fshell fusefs fuzz glob graph gzip hname http http_socket http_ssl http_transport import info json json_artifact json_branch json_config json_diff json_dir json_finfo json_login json_query json_report json_status json_tag json_timeline json_user json_wiki leaf loadctrl login lookslike main manifest markdown markdown_html md5 merge merge3 moderate name path piechart pivot popen pqueue printf publish purge rebuild regexp repolist report rss schema search security_audit setup setupuser sha1 sha1hard sha3 shun sitemap skins smtp sqlcmd stash stat statrep style sync tag tar terminal th_main timeline tkt tktsetup undo unicode unversioned update url user utf8 util verify vfile webmail wiki wikiformat winfile winhttp wysiwyg xfer xfersetup zip shell sqlite3 th th_lang > $@ |
| 55 | +echo fossil >> $@ |
| 56 | +echo fossil >> $@ |
| 57 | +echo $(LIBS) >> $@ |
| 58 | +echo. >> $@ |
| 59 | +echo fossil >> $@ |
| @@ -368,10 +368,16 @@ | |
| 368 | $(OBJDIR)\file$O : file_.c file.h |
| 369 | $(TCC) -o$@ -c file_.c |
| 370 | |
| 371 | file_.c : $(SRCDIR)\file.c |
| 372 | +translate$E $** > $@ |
| 373 | |
| 374 | $(OBJDIR)\finfo$O : finfo_.c finfo.h |
| 375 | $(TCC) -o$@ -c finfo_.c |
| 376 | |
| 377 | finfo_.c : $(SRCDIR)\finfo.c |
| @@ -976,7 +982,7 @@ | |
| 976 | |
| 977 | zip_.c : $(SRCDIR)\zip.c |
| 978 | +translate$E $** > $@ |
| 979 | |
| 980 | headers: makeheaders$E page_index.h builtin_data.h default_css.h VERSION.h |
| 981 | +makeheaders$E add_.c:add.h alerts_.c:alerts.h allrepo_.c:allrepo.h attach_.c:attach.h backlink_.c:backlink.h backoffice_.c:backoffice.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h builtin_.c:builtin.h bundle_.c:bundle.h cache_.c:cache.h capabilities_.c:capabilities.h captcha_.c:captcha.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h cookies_.c:cookies.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h deltafunc_.c:deltafunc.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h dispatch_.c:dispatch.h doc_.c:doc.h encode_.c:encode.h etag_.c:etag.h event_.c:event.h export_.c:export.h extcgi_.c:extcgi.h file_.c:file.h finfo_.c:finfo.h foci_.c:foci.h forum_.c:forum.h fshell_.c:fshell.h fusefs_.c:fusefs.h fuzz_.c:fuzz.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h hname_.c:hname.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h json_.c:json.h json_artifact_.c:json_artifact.h json_branch_.c:json_branch.h json_config_.c:json_config.h json_diff_.c:json_diff.h json_dir_.c:json_dir.h json_finfo_.c:json_finfo.h json_login_.c:json_login.h json_query_.c:json_query.h json_report_.c:json_report.h json_status_.c:json_status.h json_tag_.c:json_tag.h json_timeline_.c:json_timeline.h json_user_.c:json_user.h json_wiki_.c:json_wiki.h leaf_.c:leaf.h loadctrl_.c:loadctrl.h login_.c:login.h lookslike_.c:lookslike.h main_.c:main.h manifest_.c:manifest.h markdown_.c:markdown.h markdown_html_.c:markdown_html.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h moderate_.c:moderate.h name_.c:name.h path_.c:path.h piechart_.c:piechart.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h publish_.c:publish.h purge_.c:purge.h rebuild_.c:rebuild.h regexp_.c:regexp.h repolist_.c:repolist.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h security_audit_.c:security_audit.h setup_.c:setup.h setupuser_.c:setupuser.h sha1_.c:sha1.h sha1hard_.c:sha1hard.h sha3_.c:sha3.h shun_.c:shun.h sitemap_.c:sitemap.h skins_.c:skins.h smtp_.c:smtp.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h statrep_.c:statrep.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h terminal_.c:terminal.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h unicode_.c:unicode.h unversioned_.c:unversioned.h update_.c:update.h url_.c:url.h user_.c:user.h utf8_.c:utf8.h util_.c:util.h verify_.c:verify.h vfile_.c:vfile.h webmail_.c:webmail.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winfile_.c:winfile.h winhttp_.c:winhttp.h wysiwyg_.c:wysiwyg.h xfer_.c:xfer.h xfersetup_.c:xfersetup.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h |
| 982 | @copy /Y nul: headers |
| 983 |
| --- win/Makefile.dmc | |
| +++ win/Makefile.dmc | |
| @@ -28,13 +28,13 @@ | |
| 28 | |
| 29 | SQLITE_OPTIONS = -DNDEBUG=1 -DSQLITE_DQS=0 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_GET_TABLE -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_HAVE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB -DSQLITE_TRUSTED_SCHEMA=0 |
| 30 | |
| 31 | SHELL_OPTIONS = -DNDEBUG=1 -DSQLITE_DQS=0 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_GET_TABLE -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_HAVE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB -DSQLITE_TRUSTED_SCHEMA=0 -Dmain=sqlite3_shell -DSQLITE_SHELL_IS_UTF8=1 -DSQLITE_OMIT_LOAD_EXTENSION=1 -DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) -DSQLITE_SHELL_DBNAME_PROC=sqlcmd_get_dbname -DSQLITE_SHELL_INIT_PROC=sqlcmd_init_proc -Daccess=file_access -Dsystem=fossil_system -Dgetenv=fossil_getenv -Dfopen=fossil_fopen |
| 32 | |
| 33 | SRC = add_.c alerts_.c allrepo_.c attach_.c backlink_.c backoffice_.c bag_.c bisect_.c blob_.c branch_.c browse_.c builtin_.c bundle_.c cache_.c capabilities_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c cookies_.c db_.c delta_.c deltacmd_.c deltafunc_.c descendants_.c diff_.c diffcmd_.c dispatch_.c doc_.c encode_.c etag_.c event_.c export_.c extcgi_.c file_.c fileedit_.c finfo_.c foci_.c forum_.c fshell_.c fusefs_.c fuzz_.c glob_.c graph_.c gzip_.c hname_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_artifact_.c json_branch_.c json_config_.c json_diff_.c json_dir_.c json_finfo_.c json_login_.c json_query_.c json_report_.c json_status_.c json_tag_.c json_timeline_.c json_user_.c json_wiki_.c leaf_.c loadctrl_.c login_.c lookslike_.c main_.c manifest_.c markdown_.c markdown_html_.c md5_.c merge_.c merge3_.c moderate_.c name_.c path_.c piechart_.c pivot_.c popen_.c pqueue_.c printf_.c publish_.c purge_.c rebuild_.c regexp_.c repolist_.c report_.c rss_.c schema_.c search_.c security_audit_.c setup_.c setupuser_.c sha1_.c sha1hard_.c sha3_.c shun_.c sitemap_.c skins_.c smtp_.c sqlcmd_.c stash_.c stat_.c statrep_.c style_.c sync_.c tag_.c tar_.c terminal_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c unicode_.c unversioned_.c update_.c url_.c user_.c utf8_.c util_.c verify_.c vfile_.c webmail_.c wiki_.c wikiformat_.c winfile_.c winhttp_.c wysiwyg_.c xfer_.c xfersetup_.c zip_.c |
| 34 | |
| 35 | OBJ = $(OBJDIR)\add$O $(OBJDIR)\alerts$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\backlink$O $(OBJDIR)\backoffice$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\builtin$O $(OBJDIR)\bundle$O $(OBJDIR)\cache$O $(OBJDIR)\capabilities$O $(OBJDIR)\captcha$O $(OBJDIR)\cgi$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\cookies$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\deltafunc$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\dispatch$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\etag$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\extcgi$O $(OBJDIR)\file$O $(OBJDIR)\fileedit$O $(OBJDIR)\finfo$O $(OBJDIR)\foci$O $(OBJDIR)\forum$O $(OBJDIR)\fshell$O $(OBJDIR)\fusefs$O $(OBJDIR)\fuzz$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\hname$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\json$O $(OBJDIR)\json_artifact$O $(OBJDIR)\json_branch$O $(OBJDIR)\json_config$O $(OBJDIR)\json_diff$O $(OBJDIR)\json_dir$O $(OBJDIR)\json_finfo$O $(OBJDIR)\json_login$O $(OBJDIR)\json_query$O $(OBJDIR)\json_report$O $(OBJDIR)\json_status$O $(OBJDIR)\json_tag$O $(OBJDIR)\json_timeline$O $(OBJDIR)\json_user$O $(OBJDIR)\json_wiki$O $(OBJDIR)\leaf$O $(OBJDIR)\loadctrl$O $(OBJDIR)\login$O $(OBJDIR)\lookslike$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\markdown$O $(OBJDIR)\markdown_html$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\moderate$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\piechart$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\publish$O $(OBJDIR)\purge$O $(OBJDIR)\rebuild$O $(OBJDIR)\regexp$O $(OBJDIR)\repolist$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\security_audit$O $(OBJDIR)\setup$O $(OBJDIR)\setupuser$O $(OBJDIR)\sha1$O $(OBJDIR)\sha1hard$O $(OBJDIR)\sha3$O $(OBJDIR)\shun$O $(OBJDIR)\sitemap$O $(OBJDIR)\skins$O $(OBJDIR)\smtp$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\statrep$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\terminal$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\unicode$O $(OBJDIR)\unversioned$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\utf8$O $(OBJDIR)\util$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\webmail$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winfile$O $(OBJDIR)\winhttp$O $(OBJDIR)\wysiwyg$O $(OBJDIR)\xfer$O $(OBJDIR)\xfersetup$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O |
| 36 | |
| 37 | |
| 38 | RC=$(DMDIR)\bin\rcc |
| 39 | RCFLAGS=-32 -w1 -I$(SRCDIR) /D__DMC__ |
| 40 | |
| @@ -49,11 +49,11 @@ | |
| 49 | |
| 50 | $(OBJDIR)\fossil.res: $B\win\fossil.rc |
| 51 | $(RC) $(RCFLAGS) -o$@ $** |
| 52 | |
| 53 | $(OBJDIR)\link: $B\win\Makefile.dmc $(OBJDIR)\fossil.res |
| 54 | +echo add alerts allrepo attach backlink backoffice bag bisect blob branch browse builtin bundle cache capabilities captcha cgi checkin checkout clearsign clone comformat configure content cookies db delta deltacmd deltafunc descendants diff diffcmd dispatch doc encode etag event export extcgi file fileedit finfo foci forum fshell fusefs fuzz glob graph gzip hname http http_socket http_ssl http_transport import info json json_artifact json_branch json_config json_diff json_dir json_finfo json_login json_query json_report json_status json_tag json_timeline json_user json_wiki leaf loadctrl login lookslike main manifest markdown markdown_html md5 merge merge3 moderate name path piechart pivot popen pqueue printf publish purge rebuild regexp repolist report rss schema search security_audit setup setupuser sha1 sha1hard sha3 shun sitemap skins smtp sqlcmd stash stat statrep style sync tag tar terminal th_main timeline tkt tktsetup undo unicode unversioned update url user utf8 util verify vfile webmail wiki wikiformat winfile winhttp wysiwyg xfer xfersetup zip shell sqlite3 th th_lang > $@ |
| 55 | +echo fossil >> $@ |
| 56 | +echo fossil >> $@ |
| 57 | +echo $(LIBS) >> $@ |
| 58 | +echo. >> $@ |
| 59 | +echo fossil >> $@ |
| @@ -368,10 +368,16 @@ | |
| 368 | $(OBJDIR)\file$O : file_.c file.h |
| 369 | $(TCC) -o$@ -c file_.c |
| 370 | |
| 371 | file_.c : $(SRCDIR)\file.c |
| 372 | +translate$E $** > $@ |
| 373 | |
| 374 | $(OBJDIR)\fileedit$O : fileedit_.c fileedit.h |
| 375 | $(TCC) -o$@ -c fileedit_.c |
| 376 | |
| 377 | fileedit_.c : $(SRCDIR)\fileedit.c |
| 378 | +translate$E $** > $@ |
| 379 | |
| 380 | $(OBJDIR)\finfo$O : finfo_.c finfo.h |
| 381 | $(TCC) -o$@ -c finfo_.c |
| 382 | |
| 383 | finfo_.c : $(SRCDIR)\finfo.c |
| @@ -976,7 +982,7 @@ | |
| 982 | |
| 983 | zip_.c : $(SRCDIR)\zip.c |
| 984 | +translate$E $** > $@ |
| 985 | |
| 986 | headers: makeheaders$E page_index.h builtin_data.h default_css.h VERSION.h |
| 987 | +makeheaders$E add_.c:add.h alerts_.c:alerts.h allrepo_.c:allrepo.h attach_.c:attach.h backlink_.c:backlink.h backoffice_.c:backoffice.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h builtin_.c:builtin.h bundle_.c:bundle.h cache_.c:cache.h capabilities_.c:capabilities.h captcha_.c:captcha.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h cookies_.c:cookies.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h deltafunc_.c:deltafunc.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h dispatch_.c:dispatch.h doc_.c:doc.h encode_.c:encode.h etag_.c:etag.h event_.c:event.h export_.c:export.h extcgi_.c:extcgi.h file_.c:file.h fileedit_.c:fileedit.h finfo_.c:finfo.h foci_.c:foci.h forum_.c:forum.h fshell_.c:fshell.h fusefs_.c:fusefs.h fuzz_.c:fuzz.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h hname_.c:hname.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h json_.c:json.h json_artifact_.c:json_artifact.h json_branch_.c:json_branch.h json_config_.c:json_config.h json_diff_.c:json_diff.h json_dir_.c:json_dir.h json_finfo_.c:json_finfo.h json_login_.c:json_login.h json_query_.c:json_query.h json_report_.c:json_report.h json_status_.c:json_status.h json_tag_.c:json_tag.h json_timeline_.c:json_timeline.h json_user_.c:json_user.h json_wiki_.c:json_wiki.h leaf_.c:leaf.h loadctrl_.c:loadctrl.h login_.c:login.h lookslike_.c:lookslike.h main_.c:main.h manifest_.c:manifest.h markdown_.c:markdown.h markdown_html_.c:markdown_html.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h moderate_.c:moderate.h name_.c:name.h path_.c:path.h piechart_.c:piechart.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h publish_.c:publish.h purge_.c:purge.h rebuild_.c:rebuild.h regexp_.c:regexp.h repolist_.c:repolist.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h security_audit_.c:security_audit.h setup_.c:setup.h setupuser_.c:setupuser.h sha1_.c:sha1.h sha1hard_.c:sha1hard.h sha3_.c:sha3.h shun_.c:shun.h sitemap_.c:sitemap.h skins_.c:skins.h smtp_.c:smtp.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h statrep_.c:statrep.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h terminal_.c:terminal.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h unicode_.c:unicode.h unversioned_.c:unversioned.h update_.c:update.h url_.c:url.h user_.c:user.h utf8_.c:utf8.h util_.c:util.h verify_.c:verify.h vfile_.c:vfile.h webmail_.c:webmail.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winfile_.c:winfile.h winhttp_.c:winhttp.h wysiwyg_.c:wysiwyg.h xfer_.c:xfer.h xfersetup_.c:xfersetup.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h |
| 988 | @copy /Y nul: headers |
| 989 |
+20
| --- win/Makefile.mingw | ||
| +++ win/Makefile.mingw | ||
| @@ -476,10 +476,11 @@ | ||
| 476 | 476 | $(SRCDIR)/etag.c \ |
| 477 | 477 | $(SRCDIR)/event.c \ |
| 478 | 478 | $(SRCDIR)/export.c \ |
| 479 | 479 | $(SRCDIR)/extcgi.c \ |
| 480 | 480 | $(SRCDIR)/file.c \ |
| 481 | + $(SRCDIR)/fileedit.c \ | |
| 481 | 482 | $(SRCDIR)/finfo.c \ |
| 482 | 483 | $(SRCDIR)/foci.c \ |
| 483 | 484 | $(SRCDIR)/forum.c \ |
| 484 | 485 | $(SRCDIR)/fshell.c \ |
| 485 | 486 | $(SRCDIR)/fusefs.c \ |
| @@ -640,10 +641,17 @@ | ||
| 640 | 641 | $(SRCDIR)/accordion.js \ |
| 641 | 642 | $(SRCDIR)/ci_edit.js \ |
| 642 | 643 | $(SRCDIR)/copybtn.js \ |
| 643 | 644 | $(SRCDIR)/diff.tcl \ |
| 644 | 645 | $(SRCDIR)/forum.js \ |
| 646 | + $(SRCDIR)/fossil.bootstrap.js \ | |
| 647 | + $(SRCDIR)/fossil.confirmer.js \ | |
| 648 | + $(SRCDIR)/fossil.dom.js \ | |
| 649 | + $(SRCDIR)/fossil.fetch.js \ | |
| 650 | + $(SRCDIR)/fossil.page.fileedit.js \ | |
| 651 | + $(SRCDIR)/fossil.storage.js \ | |
| 652 | + $(SRCDIR)/fossil.tabs.js \ | |
| 645 | 653 | $(SRCDIR)/graph.js \ |
| 646 | 654 | $(SRCDIR)/href.js \ |
| 647 | 655 | $(SRCDIR)/login.js \ |
| 648 | 656 | $(SRCDIR)/markdown.md \ |
| 649 | 657 | $(SRCDIR)/menu.js \ |
| @@ -666,10 +674,11 @@ | ||
| 666 | 674 | $(SRCDIR)/sounds/c.wav \ |
| 667 | 675 | $(SRCDIR)/sounds/d.wav \ |
| 668 | 676 | $(SRCDIR)/sounds/e.wav \ |
| 669 | 677 | $(SRCDIR)/sounds/f.wav \ |
| 670 | 678 | $(SRCDIR)/style.admin_log.css \ |
| 679 | + $(SRCDIR)/style.fileedit.css \ | |
| 671 | 680 | $(SRCDIR)/tree.js \ |
| 672 | 681 | $(SRCDIR)/useredit.js \ |
| 673 | 682 | $(SRCDIR)/wiki.wiki |
| 674 | 683 | |
| 675 | 684 | TRANS_SRC = \ |
| @@ -711,10 +720,11 @@ | ||
| 711 | 720 | $(OBJDIR)/etag_.c \ |
| 712 | 721 | $(OBJDIR)/event_.c \ |
| 713 | 722 | $(OBJDIR)/export_.c \ |
| 714 | 723 | $(OBJDIR)/extcgi_.c \ |
| 715 | 724 | $(OBJDIR)/file_.c \ |
| 725 | + $(OBJDIR)/fileedit_.c \ | |
| 716 | 726 | $(OBJDIR)/finfo_.c \ |
| 717 | 727 | $(OBJDIR)/foci_.c \ |
| 718 | 728 | $(OBJDIR)/forum_.c \ |
| 719 | 729 | $(OBJDIR)/fshell_.c \ |
| 720 | 730 | $(OBJDIR)/fusefs_.c \ |
| @@ -854,10 +864,11 @@ | ||
| 854 | 864 | $(OBJDIR)/etag.o \ |
| 855 | 865 | $(OBJDIR)/event.o \ |
| 856 | 866 | $(OBJDIR)/export.o \ |
| 857 | 867 | $(OBJDIR)/extcgi.o \ |
| 858 | 868 | $(OBJDIR)/file.o \ |
| 869 | + $(OBJDIR)/fileedit.o \ | |
| 859 | 870 | $(OBJDIR)/finfo.o \ |
| 860 | 871 | $(OBJDIR)/foci.o \ |
| 861 | 872 | $(OBJDIR)/forum.o \ |
| 862 | 873 | $(OBJDIR)/fshell.o \ |
| 863 | 874 | $(OBJDIR)/fusefs.o \ |
| @@ -1217,10 +1228,11 @@ | ||
| 1217 | 1228 | $(OBJDIR)/etag_.c:$(OBJDIR)/etag.h \ |
| 1218 | 1229 | $(OBJDIR)/event_.c:$(OBJDIR)/event.h \ |
| 1219 | 1230 | $(OBJDIR)/export_.c:$(OBJDIR)/export.h \ |
| 1220 | 1231 | $(OBJDIR)/extcgi_.c:$(OBJDIR)/extcgi.h \ |
| 1221 | 1232 | $(OBJDIR)/file_.c:$(OBJDIR)/file.h \ |
| 1233 | + $(OBJDIR)/fileedit_.c:$(OBJDIR)/fileedit.h \ | |
| 1222 | 1234 | $(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h \ |
| 1223 | 1235 | $(OBJDIR)/foci_.c:$(OBJDIR)/foci.h \ |
| 1224 | 1236 | $(OBJDIR)/forum_.c:$(OBJDIR)/forum.h \ |
| 1225 | 1237 | $(OBJDIR)/fshell_.c:$(OBJDIR)/fshell.h \ |
| 1226 | 1238 | $(OBJDIR)/fusefs_.c:$(OBJDIR)/fusefs.h \ |
| @@ -1646,10 +1658,18 @@ | ||
| 1646 | 1658 | |
| 1647 | 1659 | $(OBJDIR)/file.o: $(OBJDIR)/file_.c $(OBJDIR)/file.h $(SRCDIR)/config.h |
| 1648 | 1660 | $(XTCC) -o $(OBJDIR)/file.o -c $(OBJDIR)/file_.c |
| 1649 | 1661 | |
| 1650 | 1662 | $(OBJDIR)/file.h: $(OBJDIR)/headers |
| 1663 | + | |
| 1664 | +$(OBJDIR)/fileedit_.c: $(SRCDIR)/fileedit.c $(TRANSLATE) | |
| 1665 | + $(TRANSLATE) $(SRCDIR)/fileedit.c >$@ | |
| 1666 | + | |
| 1667 | +$(OBJDIR)/fileedit.o: $(OBJDIR)/fileedit_.c $(OBJDIR)/fileedit.h $(SRCDIR)/config.h | |
| 1668 | + $(XTCC) -o $(OBJDIR)/fileedit.o -c $(OBJDIR)/fileedit_.c | |
| 1669 | + | |
| 1670 | +$(OBJDIR)/fileedit.h: $(OBJDIR)/headers | |
| 1651 | 1671 | |
| 1652 | 1672 | $(OBJDIR)/finfo_.c: $(SRCDIR)/finfo.c $(TRANSLATE) |
| 1653 | 1673 | $(TRANSLATE) $(SRCDIR)/finfo.c >$@ |
| 1654 | 1674 | |
| 1655 | 1675 | $(OBJDIR)/finfo.o: $(OBJDIR)/finfo_.c $(OBJDIR)/finfo.h $(SRCDIR)/config.h |
| 1656 | 1676 |
| --- win/Makefile.mingw | |
| +++ win/Makefile.mingw | |
| @@ -476,10 +476,11 @@ | |
| 476 | $(SRCDIR)/etag.c \ |
| 477 | $(SRCDIR)/event.c \ |
| 478 | $(SRCDIR)/export.c \ |
| 479 | $(SRCDIR)/extcgi.c \ |
| 480 | $(SRCDIR)/file.c \ |
| 481 | $(SRCDIR)/finfo.c \ |
| 482 | $(SRCDIR)/foci.c \ |
| 483 | $(SRCDIR)/forum.c \ |
| 484 | $(SRCDIR)/fshell.c \ |
| 485 | $(SRCDIR)/fusefs.c \ |
| @@ -640,10 +641,17 @@ | |
| 640 | $(SRCDIR)/accordion.js \ |
| 641 | $(SRCDIR)/ci_edit.js \ |
| 642 | $(SRCDIR)/copybtn.js \ |
| 643 | $(SRCDIR)/diff.tcl \ |
| 644 | $(SRCDIR)/forum.js \ |
| 645 | $(SRCDIR)/graph.js \ |
| 646 | $(SRCDIR)/href.js \ |
| 647 | $(SRCDIR)/login.js \ |
| 648 | $(SRCDIR)/markdown.md \ |
| 649 | $(SRCDIR)/menu.js \ |
| @@ -666,10 +674,11 @@ | |
| 666 | $(SRCDIR)/sounds/c.wav \ |
| 667 | $(SRCDIR)/sounds/d.wav \ |
| 668 | $(SRCDIR)/sounds/e.wav \ |
| 669 | $(SRCDIR)/sounds/f.wav \ |
| 670 | $(SRCDIR)/style.admin_log.css \ |
| 671 | $(SRCDIR)/tree.js \ |
| 672 | $(SRCDIR)/useredit.js \ |
| 673 | $(SRCDIR)/wiki.wiki |
| 674 | |
| 675 | TRANS_SRC = \ |
| @@ -711,10 +720,11 @@ | |
| 711 | $(OBJDIR)/etag_.c \ |
| 712 | $(OBJDIR)/event_.c \ |
| 713 | $(OBJDIR)/export_.c \ |
| 714 | $(OBJDIR)/extcgi_.c \ |
| 715 | $(OBJDIR)/file_.c \ |
| 716 | $(OBJDIR)/finfo_.c \ |
| 717 | $(OBJDIR)/foci_.c \ |
| 718 | $(OBJDIR)/forum_.c \ |
| 719 | $(OBJDIR)/fshell_.c \ |
| 720 | $(OBJDIR)/fusefs_.c \ |
| @@ -854,10 +864,11 @@ | |
| 854 | $(OBJDIR)/etag.o \ |
| 855 | $(OBJDIR)/event.o \ |
| 856 | $(OBJDIR)/export.o \ |
| 857 | $(OBJDIR)/extcgi.o \ |
| 858 | $(OBJDIR)/file.o \ |
| 859 | $(OBJDIR)/finfo.o \ |
| 860 | $(OBJDIR)/foci.o \ |
| 861 | $(OBJDIR)/forum.o \ |
| 862 | $(OBJDIR)/fshell.o \ |
| 863 | $(OBJDIR)/fusefs.o \ |
| @@ -1217,10 +1228,11 @@ | |
| 1217 | $(OBJDIR)/etag_.c:$(OBJDIR)/etag.h \ |
| 1218 | $(OBJDIR)/event_.c:$(OBJDIR)/event.h \ |
| 1219 | $(OBJDIR)/export_.c:$(OBJDIR)/export.h \ |
| 1220 | $(OBJDIR)/extcgi_.c:$(OBJDIR)/extcgi.h \ |
| 1221 | $(OBJDIR)/file_.c:$(OBJDIR)/file.h \ |
| 1222 | $(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h \ |
| 1223 | $(OBJDIR)/foci_.c:$(OBJDIR)/foci.h \ |
| 1224 | $(OBJDIR)/forum_.c:$(OBJDIR)/forum.h \ |
| 1225 | $(OBJDIR)/fshell_.c:$(OBJDIR)/fshell.h \ |
| 1226 | $(OBJDIR)/fusefs_.c:$(OBJDIR)/fusefs.h \ |
| @@ -1646,10 +1658,18 @@ | |
| 1646 | |
| 1647 | $(OBJDIR)/file.o: $(OBJDIR)/file_.c $(OBJDIR)/file.h $(SRCDIR)/config.h |
| 1648 | $(XTCC) -o $(OBJDIR)/file.o -c $(OBJDIR)/file_.c |
| 1649 | |
| 1650 | $(OBJDIR)/file.h: $(OBJDIR)/headers |
| 1651 | |
| 1652 | $(OBJDIR)/finfo_.c: $(SRCDIR)/finfo.c $(TRANSLATE) |
| 1653 | $(TRANSLATE) $(SRCDIR)/finfo.c >$@ |
| 1654 | |
| 1655 | $(OBJDIR)/finfo.o: $(OBJDIR)/finfo_.c $(OBJDIR)/finfo.h $(SRCDIR)/config.h |
| 1656 |
| --- win/Makefile.mingw | |
| +++ win/Makefile.mingw | |
| @@ -476,10 +476,11 @@ | |
| 476 | $(SRCDIR)/etag.c \ |
| 477 | $(SRCDIR)/event.c \ |
| 478 | $(SRCDIR)/export.c \ |
| 479 | $(SRCDIR)/extcgi.c \ |
| 480 | $(SRCDIR)/file.c \ |
| 481 | $(SRCDIR)/fileedit.c \ |
| 482 | $(SRCDIR)/finfo.c \ |
| 483 | $(SRCDIR)/foci.c \ |
| 484 | $(SRCDIR)/forum.c \ |
| 485 | $(SRCDIR)/fshell.c \ |
| 486 | $(SRCDIR)/fusefs.c \ |
| @@ -640,10 +641,17 @@ | |
| 641 | $(SRCDIR)/accordion.js \ |
| 642 | $(SRCDIR)/ci_edit.js \ |
| 643 | $(SRCDIR)/copybtn.js \ |
| 644 | $(SRCDIR)/diff.tcl \ |
| 645 | $(SRCDIR)/forum.js \ |
| 646 | $(SRCDIR)/fossil.bootstrap.js \ |
| 647 | $(SRCDIR)/fossil.confirmer.js \ |
| 648 | $(SRCDIR)/fossil.dom.js \ |
| 649 | $(SRCDIR)/fossil.fetch.js \ |
| 650 | $(SRCDIR)/fossil.page.fileedit.js \ |
| 651 | $(SRCDIR)/fossil.storage.js \ |
| 652 | $(SRCDIR)/fossil.tabs.js \ |
| 653 | $(SRCDIR)/graph.js \ |
| 654 | $(SRCDIR)/href.js \ |
| 655 | $(SRCDIR)/login.js \ |
| 656 | $(SRCDIR)/markdown.md \ |
| 657 | $(SRCDIR)/menu.js \ |
| @@ -666,10 +674,11 @@ | |
| 674 | $(SRCDIR)/sounds/c.wav \ |
| 675 | $(SRCDIR)/sounds/d.wav \ |
| 676 | $(SRCDIR)/sounds/e.wav \ |
| 677 | $(SRCDIR)/sounds/f.wav \ |
| 678 | $(SRCDIR)/style.admin_log.css \ |
| 679 | $(SRCDIR)/style.fileedit.css \ |
| 680 | $(SRCDIR)/tree.js \ |
| 681 | $(SRCDIR)/useredit.js \ |
| 682 | $(SRCDIR)/wiki.wiki |
| 683 | |
| 684 | TRANS_SRC = \ |
| @@ -711,10 +720,11 @@ | |
| 720 | $(OBJDIR)/etag_.c \ |
| 721 | $(OBJDIR)/event_.c \ |
| 722 | $(OBJDIR)/export_.c \ |
| 723 | $(OBJDIR)/extcgi_.c \ |
| 724 | $(OBJDIR)/file_.c \ |
| 725 | $(OBJDIR)/fileedit_.c \ |
| 726 | $(OBJDIR)/finfo_.c \ |
| 727 | $(OBJDIR)/foci_.c \ |
| 728 | $(OBJDIR)/forum_.c \ |
| 729 | $(OBJDIR)/fshell_.c \ |
| 730 | $(OBJDIR)/fusefs_.c \ |
| @@ -854,10 +864,11 @@ | |
| 864 | $(OBJDIR)/etag.o \ |
| 865 | $(OBJDIR)/event.o \ |
| 866 | $(OBJDIR)/export.o \ |
| 867 | $(OBJDIR)/extcgi.o \ |
| 868 | $(OBJDIR)/file.o \ |
| 869 | $(OBJDIR)/fileedit.o \ |
| 870 | $(OBJDIR)/finfo.o \ |
| 871 | $(OBJDIR)/foci.o \ |
| 872 | $(OBJDIR)/forum.o \ |
| 873 | $(OBJDIR)/fshell.o \ |
| 874 | $(OBJDIR)/fusefs.o \ |
| @@ -1217,10 +1228,11 @@ | |
| 1228 | $(OBJDIR)/etag_.c:$(OBJDIR)/etag.h \ |
| 1229 | $(OBJDIR)/event_.c:$(OBJDIR)/event.h \ |
| 1230 | $(OBJDIR)/export_.c:$(OBJDIR)/export.h \ |
| 1231 | $(OBJDIR)/extcgi_.c:$(OBJDIR)/extcgi.h \ |
| 1232 | $(OBJDIR)/file_.c:$(OBJDIR)/file.h \ |
| 1233 | $(OBJDIR)/fileedit_.c:$(OBJDIR)/fileedit.h \ |
| 1234 | $(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h \ |
| 1235 | $(OBJDIR)/foci_.c:$(OBJDIR)/foci.h \ |
| 1236 | $(OBJDIR)/forum_.c:$(OBJDIR)/forum.h \ |
| 1237 | $(OBJDIR)/fshell_.c:$(OBJDIR)/fshell.h \ |
| 1238 | $(OBJDIR)/fusefs_.c:$(OBJDIR)/fusefs.h \ |
| @@ -1646,10 +1658,18 @@ | |
| 1658 | |
| 1659 | $(OBJDIR)/file.o: $(OBJDIR)/file_.c $(OBJDIR)/file.h $(SRCDIR)/config.h |
| 1660 | $(XTCC) -o $(OBJDIR)/file.o -c $(OBJDIR)/file_.c |
| 1661 | |
| 1662 | $(OBJDIR)/file.h: $(OBJDIR)/headers |
| 1663 | |
| 1664 | $(OBJDIR)/fileedit_.c: $(SRCDIR)/fileedit.c $(TRANSLATE) |
| 1665 | $(TRANSLATE) $(SRCDIR)/fileedit.c >$@ |
| 1666 | |
| 1667 | $(OBJDIR)/fileedit.o: $(OBJDIR)/fileedit_.c $(OBJDIR)/fileedit.h $(SRCDIR)/config.h |
| 1668 | $(XTCC) -o $(OBJDIR)/fileedit.o -c $(OBJDIR)/fileedit_.c |
| 1669 | |
| 1670 | $(OBJDIR)/fileedit.h: $(OBJDIR)/headers |
| 1671 | |
| 1672 | $(OBJDIR)/finfo_.c: $(SRCDIR)/finfo.c $(TRANSLATE) |
| 1673 | $(TRANSLATE) $(SRCDIR)/finfo.c >$@ |
| 1674 | |
| 1675 | $(OBJDIR)/finfo.o: $(OBJDIR)/finfo_.c $(OBJDIR)/finfo.h $(SRCDIR)/config.h |
| 1676 |
+20
| --- win/Makefile.mingw | ||
| +++ win/Makefile.mingw | ||
| @@ -476,10 +476,11 @@ | ||
| 476 | 476 | $(SRCDIR)/etag.c \ |
| 477 | 477 | $(SRCDIR)/event.c \ |
| 478 | 478 | $(SRCDIR)/export.c \ |
| 479 | 479 | $(SRCDIR)/extcgi.c \ |
| 480 | 480 | $(SRCDIR)/file.c \ |
| 481 | + $(SRCDIR)/fileedit.c \ | |
| 481 | 482 | $(SRCDIR)/finfo.c \ |
| 482 | 483 | $(SRCDIR)/foci.c \ |
| 483 | 484 | $(SRCDIR)/forum.c \ |
| 484 | 485 | $(SRCDIR)/fshell.c \ |
| 485 | 486 | $(SRCDIR)/fusefs.c \ |
| @@ -640,10 +641,17 @@ | ||
| 640 | 641 | $(SRCDIR)/accordion.js \ |
| 641 | 642 | $(SRCDIR)/ci_edit.js \ |
| 642 | 643 | $(SRCDIR)/copybtn.js \ |
| 643 | 644 | $(SRCDIR)/diff.tcl \ |
| 644 | 645 | $(SRCDIR)/forum.js \ |
| 646 | + $(SRCDIR)/fossil.bootstrap.js \ | |
| 647 | + $(SRCDIR)/fossil.confirmer.js \ | |
| 648 | + $(SRCDIR)/fossil.dom.js \ | |
| 649 | + $(SRCDIR)/fossil.fetch.js \ | |
| 650 | + $(SRCDIR)/fossil.page.fileedit.js \ | |
| 651 | + $(SRCDIR)/fossil.storage.js \ | |
| 652 | + $(SRCDIR)/fossil.tabs.js \ | |
| 645 | 653 | $(SRCDIR)/graph.js \ |
| 646 | 654 | $(SRCDIR)/href.js \ |
| 647 | 655 | $(SRCDIR)/login.js \ |
| 648 | 656 | $(SRCDIR)/markdown.md \ |
| 649 | 657 | $(SRCDIR)/menu.js \ |
| @@ -666,10 +674,11 @@ | ||
| 666 | 674 | $(SRCDIR)/sounds/c.wav \ |
| 667 | 675 | $(SRCDIR)/sounds/d.wav \ |
| 668 | 676 | $(SRCDIR)/sounds/e.wav \ |
| 669 | 677 | $(SRCDIR)/sounds/f.wav \ |
| 670 | 678 | $(SRCDIR)/style.admin_log.css \ |
| 679 | + $(SRCDIR)/style.fileedit.css \ | |
| 671 | 680 | $(SRCDIR)/tree.js \ |
| 672 | 681 | $(SRCDIR)/useredit.js \ |
| 673 | 682 | $(SRCDIR)/wiki.wiki |
| 674 | 683 | |
| 675 | 684 | TRANS_SRC = \ |
| @@ -711,10 +720,11 @@ | ||
| 711 | 720 | $(OBJDIR)/etag_.c \ |
| 712 | 721 | $(OBJDIR)/event_.c \ |
| 713 | 722 | $(OBJDIR)/export_.c \ |
| 714 | 723 | $(OBJDIR)/extcgi_.c \ |
| 715 | 724 | $(OBJDIR)/file_.c \ |
| 725 | + $(OBJDIR)/fileedit_.c \ | |
| 716 | 726 | $(OBJDIR)/finfo_.c \ |
| 717 | 727 | $(OBJDIR)/foci_.c \ |
| 718 | 728 | $(OBJDIR)/forum_.c \ |
| 719 | 729 | $(OBJDIR)/fshell_.c \ |
| 720 | 730 | $(OBJDIR)/fusefs_.c \ |
| @@ -854,10 +864,11 @@ | ||
| 854 | 864 | $(OBJDIR)/etag.o \ |
| 855 | 865 | $(OBJDIR)/event.o \ |
| 856 | 866 | $(OBJDIR)/export.o \ |
| 857 | 867 | $(OBJDIR)/extcgi.o \ |
| 858 | 868 | $(OBJDIR)/file.o \ |
| 869 | + $(OBJDIR)/fileedit.o \ | |
| 859 | 870 | $(OBJDIR)/finfo.o \ |
| 860 | 871 | $(OBJDIR)/foci.o \ |
| 861 | 872 | $(OBJDIR)/forum.o \ |
| 862 | 873 | $(OBJDIR)/fshell.o \ |
| 863 | 874 | $(OBJDIR)/fusefs.o \ |
| @@ -1217,10 +1228,11 @@ | ||
| 1217 | 1228 | $(OBJDIR)/etag_.c:$(OBJDIR)/etag.h \ |
| 1218 | 1229 | $(OBJDIR)/event_.c:$(OBJDIR)/event.h \ |
| 1219 | 1230 | $(OBJDIR)/export_.c:$(OBJDIR)/export.h \ |
| 1220 | 1231 | $(OBJDIR)/extcgi_.c:$(OBJDIR)/extcgi.h \ |
| 1221 | 1232 | $(OBJDIR)/file_.c:$(OBJDIR)/file.h \ |
| 1233 | + $(OBJDIR)/fileedit_.c:$(OBJDIR)/fileedit.h \ | |
| 1222 | 1234 | $(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h \ |
| 1223 | 1235 | $(OBJDIR)/foci_.c:$(OBJDIR)/foci.h \ |
| 1224 | 1236 | $(OBJDIR)/forum_.c:$(OBJDIR)/forum.h \ |
| 1225 | 1237 | $(OBJDIR)/fshell_.c:$(OBJDIR)/fshell.h \ |
| 1226 | 1238 | $(OBJDIR)/fusefs_.c:$(OBJDIR)/fusefs.h \ |
| @@ -1646,10 +1658,18 @@ | ||
| 1646 | 1658 | |
| 1647 | 1659 | $(OBJDIR)/file.o: $(OBJDIR)/file_.c $(OBJDIR)/file.h $(SRCDIR)/config.h |
| 1648 | 1660 | $(XTCC) -o $(OBJDIR)/file.o -c $(OBJDIR)/file_.c |
| 1649 | 1661 | |
| 1650 | 1662 | $(OBJDIR)/file.h: $(OBJDIR)/headers |
| 1663 | + | |
| 1664 | +$(OBJDIR)/fileedit_.c: $(SRCDIR)/fileedit.c $(TRANSLATE) | |
| 1665 | + $(TRANSLATE) $(SRCDIR)/fileedit.c >$@ | |
| 1666 | + | |
| 1667 | +$(OBJDIR)/fileedit.o: $(OBJDIR)/fileedit_.c $(OBJDIR)/fileedit.h $(SRCDIR)/config.h | |
| 1668 | + $(XTCC) -o $(OBJDIR)/fileedit.o -c $(OBJDIR)/fileedit_.c | |
| 1669 | + | |
| 1670 | +$(OBJDIR)/fileedit.h: $(OBJDIR)/headers | |
| 1651 | 1671 | |
| 1652 | 1672 | $(OBJDIR)/finfo_.c: $(SRCDIR)/finfo.c $(TRANSLATE) |
| 1653 | 1673 | $(TRANSLATE) $(SRCDIR)/finfo.c >$@ |
| 1654 | 1674 | |
| 1655 | 1675 | $(OBJDIR)/finfo.o: $(OBJDIR)/finfo_.c $(OBJDIR)/finfo.h $(SRCDIR)/config.h |
| 1656 | 1676 |
| --- win/Makefile.mingw | |
| +++ win/Makefile.mingw | |
| @@ -476,10 +476,11 @@ | |
| 476 | $(SRCDIR)/etag.c \ |
| 477 | $(SRCDIR)/event.c \ |
| 478 | $(SRCDIR)/export.c \ |
| 479 | $(SRCDIR)/extcgi.c \ |
| 480 | $(SRCDIR)/file.c \ |
| 481 | $(SRCDIR)/finfo.c \ |
| 482 | $(SRCDIR)/foci.c \ |
| 483 | $(SRCDIR)/forum.c \ |
| 484 | $(SRCDIR)/fshell.c \ |
| 485 | $(SRCDIR)/fusefs.c \ |
| @@ -640,10 +641,17 @@ | |
| 640 | $(SRCDIR)/accordion.js \ |
| 641 | $(SRCDIR)/ci_edit.js \ |
| 642 | $(SRCDIR)/copybtn.js \ |
| 643 | $(SRCDIR)/diff.tcl \ |
| 644 | $(SRCDIR)/forum.js \ |
| 645 | $(SRCDIR)/graph.js \ |
| 646 | $(SRCDIR)/href.js \ |
| 647 | $(SRCDIR)/login.js \ |
| 648 | $(SRCDIR)/markdown.md \ |
| 649 | $(SRCDIR)/menu.js \ |
| @@ -666,10 +674,11 @@ | |
| 666 | $(SRCDIR)/sounds/c.wav \ |
| 667 | $(SRCDIR)/sounds/d.wav \ |
| 668 | $(SRCDIR)/sounds/e.wav \ |
| 669 | $(SRCDIR)/sounds/f.wav \ |
| 670 | $(SRCDIR)/style.admin_log.css \ |
| 671 | $(SRCDIR)/tree.js \ |
| 672 | $(SRCDIR)/useredit.js \ |
| 673 | $(SRCDIR)/wiki.wiki |
| 674 | |
| 675 | TRANS_SRC = \ |
| @@ -711,10 +720,11 @@ | |
| 711 | $(OBJDIR)/etag_.c \ |
| 712 | $(OBJDIR)/event_.c \ |
| 713 | $(OBJDIR)/export_.c \ |
| 714 | $(OBJDIR)/extcgi_.c \ |
| 715 | $(OBJDIR)/file_.c \ |
| 716 | $(OBJDIR)/finfo_.c \ |
| 717 | $(OBJDIR)/foci_.c \ |
| 718 | $(OBJDIR)/forum_.c \ |
| 719 | $(OBJDIR)/fshell_.c \ |
| 720 | $(OBJDIR)/fusefs_.c \ |
| @@ -854,10 +864,11 @@ | |
| 854 | $(OBJDIR)/etag.o \ |
| 855 | $(OBJDIR)/event.o \ |
| 856 | $(OBJDIR)/export.o \ |
| 857 | $(OBJDIR)/extcgi.o \ |
| 858 | $(OBJDIR)/file.o \ |
| 859 | $(OBJDIR)/finfo.o \ |
| 860 | $(OBJDIR)/foci.o \ |
| 861 | $(OBJDIR)/forum.o \ |
| 862 | $(OBJDIR)/fshell.o \ |
| 863 | $(OBJDIR)/fusefs.o \ |
| @@ -1217,10 +1228,11 @@ | |
| 1217 | $(OBJDIR)/etag_.c:$(OBJDIR)/etag.h \ |
| 1218 | $(OBJDIR)/event_.c:$(OBJDIR)/event.h \ |
| 1219 | $(OBJDIR)/export_.c:$(OBJDIR)/export.h \ |
| 1220 | $(OBJDIR)/extcgi_.c:$(OBJDIR)/extcgi.h \ |
| 1221 | $(OBJDIR)/file_.c:$(OBJDIR)/file.h \ |
| 1222 | $(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h \ |
| 1223 | $(OBJDIR)/foci_.c:$(OBJDIR)/foci.h \ |
| 1224 | $(OBJDIR)/forum_.c:$(OBJDIR)/forum.h \ |
| 1225 | $(OBJDIR)/fshell_.c:$(OBJDIR)/fshell.h \ |
| 1226 | $(OBJDIR)/fusefs_.c:$(OBJDIR)/fusefs.h \ |
| @@ -1646,10 +1658,18 @@ | |
| 1646 | |
| 1647 | $(OBJDIR)/file.o: $(OBJDIR)/file_.c $(OBJDIR)/file.h $(SRCDIR)/config.h |
| 1648 | $(XTCC) -o $(OBJDIR)/file.o -c $(OBJDIR)/file_.c |
| 1649 | |
| 1650 | $(OBJDIR)/file.h: $(OBJDIR)/headers |
| 1651 | |
| 1652 | $(OBJDIR)/finfo_.c: $(SRCDIR)/finfo.c $(TRANSLATE) |
| 1653 | $(TRANSLATE) $(SRCDIR)/finfo.c >$@ |
| 1654 | |
| 1655 | $(OBJDIR)/finfo.o: $(OBJDIR)/finfo_.c $(OBJDIR)/finfo.h $(SRCDIR)/config.h |
| 1656 |
| --- win/Makefile.mingw | |
| +++ win/Makefile.mingw | |
| @@ -476,10 +476,11 @@ | |
| 476 | $(SRCDIR)/etag.c \ |
| 477 | $(SRCDIR)/event.c \ |
| 478 | $(SRCDIR)/export.c \ |
| 479 | $(SRCDIR)/extcgi.c \ |
| 480 | $(SRCDIR)/file.c \ |
| 481 | $(SRCDIR)/fileedit.c \ |
| 482 | $(SRCDIR)/finfo.c \ |
| 483 | $(SRCDIR)/foci.c \ |
| 484 | $(SRCDIR)/forum.c \ |
| 485 | $(SRCDIR)/fshell.c \ |
| 486 | $(SRCDIR)/fusefs.c \ |
| @@ -640,10 +641,17 @@ | |
| 641 | $(SRCDIR)/accordion.js \ |
| 642 | $(SRCDIR)/ci_edit.js \ |
| 643 | $(SRCDIR)/copybtn.js \ |
| 644 | $(SRCDIR)/diff.tcl \ |
| 645 | $(SRCDIR)/forum.js \ |
| 646 | $(SRCDIR)/fossil.bootstrap.js \ |
| 647 | $(SRCDIR)/fossil.confirmer.js \ |
| 648 | $(SRCDIR)/fossil.dom.js \ |
| 649 | $(SRCDIR)/fossil.fetch.js \ |
| 650 | $(SRCDIR)/fossil.page.fileedit.js \ |
| 651 | $(SRCDIR)/fossil.storage.js \ |
| 652 | $(SRCDIR)/fossil.tabs.js \ |
| 653 | $(SRCDIR)/graph.js \ |
| 654 | $(SRCDIR)/href.js \ |
| 655 | $(SRCDIR)/login.js \ |
| 656 | $(SRCDIR)/markdown.md \ |
| 657 | $(SRCDIR)/menu.js \ |
| @@ -666,10 +674,11 @@ | |
| 674 | $(SRCDIR)/sounds/c.wav \ |
| 675 | $(SRCDIR)/sounds/d.wav \ |
| 676 | $(SRCDIR)/sounds/e.wav \ |
| 677 | $(SRCDIR)/sounds/f.wav \ |
| 678 | $(SRCDIR)/style.admin_log.css \ |
| 679 | $(SRCDIR)/style.fileedit.css \ |
| 680 | $(SRCDIR)/tree.js \ |
| 681 | $(SRCDIR)/useredit.js \ |
| 682 | $(SRCDIR)/wiki.wiki |
| 683 | |
| 684 | TRANS_SRC = \ |
| @@ -711,10 +720,11 @@ | |
| 720 | $(OBJDIR)/etag_.c \ |
| 721 | $(OBJDIR)/event_.c \ |
| 722 | $(OBJDIR)/export_.c \ |
| 723 | $(OBJDIR)/extcgi_.c \ |
| 724 | $(OBJDIR)/file_.c \ |
| 725 | $(OBJDIR)/fileedit_.c \ |
| 726 | $(OBJDIR)/finfo_.c \ |
| 727 | $(OBJDIR)/foci_.c \ |
| 728 | $(OBJDIR)/forum_.c \ |
| 729 | $(OBJDIR)/fshell_.c \ |
| 730 | $(OBJDIR)/fusefs_.c \ |
| @@ -854,10 +864,11 @@ | |
| 864 | $(OBJDIR)/etag.o \ |
| 865 | $(OBJDIR)/event.o \ |
| 866 | $(OBJDIR)/export.o \ |
| 867 | $(OBJDIR)/extcgi.o \ |
| 868 | $(OBJDIR)/file.o \ |
| 869 | $(OBJDIR)/fileedit.o \ |
| 870 | $(OBJDIR)/finfo.o \ |
| 871 | $(OBJDIR)/foci.o \ |
| 872 | $(OBJDIR)/forum.o \ |
| 873 | $(OBJDIR)/fshell.o \ |
| 874 | $(OBJDIR)/fusefs.o \ |
| @@ -1217,10 +1228,11 @@ | |
| 1228 | $(OBJDIR)/etag_.c:$(OBJDIR)/etag.h \ |
| 1229 | $(OBJDIR)/event_.c:$(OBJDIR)/event.h \ |
| 1230 | $(OBJDIR)/export_.c:$(OBJDIR)/export.h \ |
| 1231 | $(OBJDIR)/extcgi_.c:$(OBJDIR)/extcgi.h \ |
| 1232 | $(OBJDIR)/file_.c:$(OBJDIR)/file.h \ |
| 1233 | $(OBJDIR)/fileedit_.c:$(OBJDIR)/fileedit.h \ |
| 1234 | $(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h \ |
| 1235 | $(OBJDIR)/foci_.c:$(OBJDIR)/foci.h \ |
| 1236 | $(OBJDIR)/forum_.c:$(OBJDIR)/forum.h \ |
| 1237 | $(OBJDIR)/fshell_.c:$(OBJDIR)/fshell.h \ |
| 1238 | $(OBJDIR)/fusefs_.c:$(OBJDIR)/fusefs.h \ |
| @@ -1646,10 +1658,18 @@ | |
| 1658 | |
| 1659 | $(OBJDIR)/file.o: $(OBJDIR)/file_.c $(OBJDIR)/file.h $(SRCDIR)/config.h |
| 1660 | $(XTCC) -o $(OBJDIR)/file.o -c $(OBJDIR)/file_.c |
| 1661 | |
| 1662 | $(OBJDIR)/file.h: $(OBJDIR)/headers |
| 1663 | |
| 1664 | $(OBJDIR)/fileedit_.c: $(SRCDIR)/fileedit.c $(TRANSLATE) |
| 1665 | $(TRANSLATE) $(SRCDIR)/fileedit.c >$@ |
| 1666 | |
| 1667 | $(OBJDIR)/fileedit.o: $(OBJDIR)/fileedit_.c $(OBJDIR)/fileedit.h $(SRCDIR)/config.h |
| 1668 | $(XTCC) -o $(OBJDIR)/fileedit.o -c $(OBJDIR)/fileedit_.c |
| 1669 | |
| 1670 | $(OBJDIR)/fileedit.h: $(OBJDIR)/headers |
| 1671 | |
| 1672 | $(OBJDIR)/finfo_.c: $(SRCDIR)/finfo.c $(TRANSLATE) |
| 1673 | $(TRANSLATE) $(SRCDIR)/finfo.c >$@ |
| 1674 | |
| 1675 | $(OBJDIR)/finfo.o: $(OBJDIR)/finfo_.c $(OBJDIR)/finfo.h $(SRCDIR)/config.h |
| 1676 |
+18
| --- win/Makefile.msc | ||
| +++ win/Makefile.msc | ||
| @@ -384,10 +384,11 @@ | ||
| 384 | 384 | etag_.c \ |
| 385 | 385 | event_.c \ |
| 386 | 386 | export_.c \ |
| 387 | 387 | extcgi_.c \ |
| 388 | 388 | file_.c \ |
| 389 | + fileedit_.c \ | |
| 389 | 390 | finfo_.c \ |
| 390 | 391 | foci_.c \ |
| 391 | 392 | forum_.c \ |
| 392 | 393 | fshell_.c \ |
| 393 | 394 | fusefs_.c \ |
| @@ -547,10 +548,17 @@ | ||
| 547 | 548 | $(SRCDIR)\accordion.js \ |
| 548 | 549 | $(SRCDIR)\ci_edit.js \ |
| 549 | 550 | $(SRCDIR)\copybtn.js \ |
| 550 | 551 | $(SRCDIR)\diff.tcl \ |
| 551 | 552 | $(SRCDIR)\forum.js \ |
| 553 | + $(SRCDIR)\fossil.bootstrap.js \ | |
| 554 | + $(SRCDIR)\fossil.confirmer.js \ | |
| 555 | + $(SRCDIR)\fossil.dom.js \ | |
| 556 | + $(SRCDIR)\fossil.fetch.js \ | |
| 557 | + $(SRCDIR)\fossil.page.fileedit.js \ | |
| 558 | + $(SRCDIR)\fossil.storage.js \ | |
| 559 | + $(SRCDIR)\fossil.tabs.js \ | |
| 552 | 560 | $(SRCDIR)\graph.js \ |
| 553 | 561 | $(SRCDIR)\href.js \ |
| 554 | 562 | $(SRCDIR)\login.js \ |
| 555 | 563 | $(SRCDIR)\markdown.md \ |
| 556 | 564 | $(SRCDIR)\menu.js \ |
| @@ -573,10 +581,11 @@ | ||
| 573 | 581 | $(SRCDIR)\sounds\c.wav \ |
| 574 | 582 | $(SRCDIR)\sounds\d.wav \ |
| 575 | 583 | $(SRCDIR)\sounds\e.wav \ |
| 576 | 584 | $(SRCDIR)\sounds\f.wav \ |
| 577 | 585 | $(SRCDIR)\style.admin_log.css \ |
| 586 | + $(SRCDIR)\style.fileedit.css \ | |
| 578 | 587 | $(SRCDIR)\tree.js \ |
| 579 | 588 | $(SRCDIR)\useredit.js \ |
| 580 | 589 | $(SRCDIR)\wiki.wiki |
| 581 | 590 | |
| 582 | 591 | OBJ = $(OX)\add$O \ |
| @@ -618,10 +627,11 @@ | ||
| 618 | 627 | $(OX)\etag$O \ |
| 619 | 628 | $(OX)\event$O \ |
| 620 | 629 | $(OX)\export$O \ |
| 621 | 630 | $(OX)\extcgi$O \ |
| 622 | 631 | $(OX)\file$O \ |
| 632 | + $(OX)\fileedit$O \ | |
| 623 | 633 | $(OX)\finfo$O \ |
| 624 | 634 | $(OX)\foci$O \ |
| 625 | 635 | $(OX)\forum$O \ |
| 626 | 636 | $(OX)\fshell$O \ |
| 627 | 637 | $(OX)\fusefs$O \ |
| @@ -823,10 +833,11 @@ | ||
| 823 | 833 | echo $(OX)\etag.obj >> $@ |
| 824 | 834 | echo $(OX)\event.obj >> $@ |
| 825 | 835 | echo $(OX)\export.obj >> $@ |
| 826 | 836 | echo $(OX)\extcgi.obj >> $@ |
| 827 | 837 | echo $(OX)\file.obj >> $@ |
| 838 | + echo $(OX)\fileedit.obj >> $@ | |
| 828 | 839 | echo $(OX)\finfo.obj >> $@ |
| 829 | 840 | echo $(OX)\foci.obj >> $@ |
| 830 | 841 | echo $(OX)\forum.obj >> $@ |
| 831 | 842 | echo $(OX)\fshell.obj >> $@ |
| 832 | 843 | echo $(OX)\fusefs.obj >> $@ |
| @@ -1286,10 +1297,16 @@ | ||
| 1286 | 1297 | $(OX)\file$O : file_.c file.h |
| 1287 | 1298 | $(TCC) /Fo$@ -c file_.c |
| 1288 | 1299 | |
| 1289 | 1300 | file_.c : $(SRCDIR)\file.c |
| 1290 | 1301 | translate$E $** > $@ |
| 1302 | + | |
| 1303 | +$(OX)\fileedit$O : fileedit_.c fileedit.h | |
| 1304 | + $(TCC) /Fo$@ -c fileedit_.c | |
| 1305 | + | |
| 1306 | +fileedit_.c : $(SRCDIR)\fileedit.c | |
| 1307 | + translate$E $** > $@ | |
| 1291 | 1308 | |
| 1292 | 1309 | $(OX)\finfo$O : finfo_.c finfo.h |
| 1293 | 1310 | $(TCC) /Fo$@ -c finfo_.c |
| 1294 | 1311 | |
| 1295 | 1312 | finfo_.c : $(SRCDIR)\finfo.c |
| @@ -1937,10 +1954,11 @@ | ||
| 1937 | 1954 | etag_.c:etag.h \ |
| 1938 | 1955 | event_.c:event.h \ |
| 1939 | 1956 | export_.c:export.h \ |
| 1940 | 1957 | extcgi_.c:extcgi.h \ |
| 1941 | 1958 | file_.c:file.h \ |
| 1959 | + fileedit_.c:fileedit.h \ | |
| 1942 | 1960 | finfo_.c:finfo.h \ |
| 1943 | 1961 | foci_.c:foci.h \ |
| 1944 | 1962 | forum_.c:forum.h \ |
| 1945 | 1963 | fshell_.c:fshell.h \ |
| 1946 | 1964 | fusefs_.c:fusefs.h \ |
| 1947 | 1965 | |
| 1948 | 1966 | ADDED www/fileedit-page.md |
| --- win/Makefile.msc | |
| +++ win/Makefile.msc | |
| @@ -384,10 +384,11 @@ | |
| 384 | etag_.c \ |
| 385 | event_.c \ |
| 386 | export_.c \ |
| 387 | extcgi_.c \ |
| 388 | file_.c \ |
| 389 | finfo_.c \ |
| 390 | foci_.c \ |
| 391 | forum_.c \ |
| 392 | fshell_.c \ |
| 393 | fusefs_.c \ |
| @@ -547,10 +548,17 @@ | |
| 547 | $(SRCDIR)\accordion.js \ |
| 548 | $(SRCDIR)\ci_edit.js \ |
| 549 | $(SRCDIR)\copybtn.js \ |
| 550 | $(SRCDIR)\diff.tcl \ |
| 551 | $(SRCDIR)\forum.js \ |
| 552 | $(SRCDIR)\graph.js \ |
| 553 | $(SRCDIR)\href.js \ |
| 554 | $(SRCDIR)\login.js \ |
| 555 | $(SRCDIR)\markdown.md \ |
| 556 | $(SRCDIR)\menu.js \ |
| @@ -573,10 +581,11 @@ | |
| 573 | $(SRCDIR)\sounds\c.wav \ |
| 574 | $(SRCDIR)\sounds\d.wav \ |
| 575 | $(SRCDIR)\sounds\e.wav \ |
| 576 | $(SRCDIR)\sounds\f.wav \ |
| 577 | $(SRCDIR)\style.admin_log.css \ |
| 578 | $(SRCDIR)\tree.js \ |
| 579 | $(SRCDIR)\useredit.js \ |
| 580 | $(SRCDIR)\wiki.wiki |
| 581 | |
| 582 | OBJ = $(OX)\add$O \ |
| @@ -618,10 +627,11 @@ | |
| 618 | $(OX)\etag$O \ |
| 619 | $(OX)\event$O \ |
| 620 | $(OX)\export$O \ |
| 621 | $(OX)\extcgi$O \ |
| 622 | $(OX)\file$O \ |
| 623 | $(OX)\finfo$O \ |
| 624 | $(OX)\foci$O \ |
| 625 | $(OX)\forum$O \ |
| 626 | $(OX)\fshell$O \ |
| 627 | $(OX)\fusefs$O \ |
| @@ -823,10 +833,11 @@ | |
| 823 | echo $(OX)\etag.obj >> $@ |
| 824 | echo $(OX)\event.obj >> $@ |
| 825 | echo $(OX)\export.obj >> $@ |
| 826 | echo $(OX)\extcgi.obj >> $@ |
| 827 | echo $(OX)\file.obj >> $@ |
| 828 | echo $(OX)\finfo.obj >> $@ |
| 829 | echo $(OX)\foci.obj >> $@ |
| 830 | echo $(OX)\forum.obj >> $@ |
| 831 | echo $(OX)\fshell.obj >> $@ |
| 832 | echo $(OX)\fusefs.obj >> $@ |
| @@ -1286,10 +1297,16 @@ | |
| 1286 | $(OX)\file$O : file_.c file.h |
| 1287 | $(TCC) /Fo$@ -c file_.c |
| 1288 | |
| 1289 | file_.c : $(SRCDIR)\file.c |
| 1290 | translate$E $** > $@ |
| 1291 | |
| 1292 | $(OX)\finfo$O : finfo_.c finfo.h |
| 1293 | $(TCC) /Fo$@ -c finfo_.c |
| 1294 | |
| 1295 | finfo_.c : $(SRCDIR)\finfo.c |
| @@ -1937,10 +1954,11 @@ | |
| 1937 | etag_.c:etag.h \ |
| 1938 | event_.c:event.h \ |
| 1939 | export_.c:export.h \ |
| 1940 | extcgi_.c:extcgi.h \ |
| 1941 | file_.c:file.h \ |
| 1942 | finfo_.c:finfo.h \ |
| 1943 | foci_.c:foci.h \ |
| 1944 | forum_.c:forum.h \ |
| 1945 | fshell_.c:fshell.h \ |
| 1946 | fusefs_.c:fusefs.h \ |
| 1947 | |
| 1948 | DDED www/fileedit-page.md |
| --- win/Makefile.msc | |
| +++ win/Makefile.msc | |
| @@ -384,10 +384,11 @@ | |
| 384 | etag_.c \ |
| 385 | event_.c \ |
| 386 | export_.c \ |
| 387 | extcgi_.c \ |
| 388 | file_.c \ |
| 389 | fileedit_.c \ |
| 390 | finfo_.c \ |
| 391 | foci_.c \ |
| 392 | forum_.c \ |
| 393 | fshell_.c \ |
| 394 | fusefs_.c \ |
| @@ -547,10 +548,17 @@ | |
| 548 | $(SRCDIR)\accordion.js \ |
| 549 | $(SRCDIR)\ci_edit.js \ |
| 550 | $(SRCDIR)\copybtn.js \ |
| 551 | $(SRCDIR)\diff.tcl \ |
| 552 | $(SRCDIR)\forum.js \ |
| 553 | $(SRCDIR)\fossil.bootstrap.js \ |
| 554 | $(SRCDIR)\fossil.confirmer.js \ |
| 555 | $(SRCDIR)\fossil.dom.js \ |
| 556 | $(SRCDIR)\fossil.fetch.js \ |
| 557 | $(SRCDIR)\fossil.page.fileedit.js \ |
| 558 | $(SRCDIR)\fossil.storage.js \ |
| 559 | $(SRCDIR)\fossil.tabs.js \ |
| 560 | $(SRCDIR)\graph.js \ |
| 561 | $(SRCDIR)\href.js \ |
| 562 | $(SRCDIR)\login.js \ |
| 563 | $(SRCDIR)\markdown.md \ |
| 564 | $(SRCDIR)\menu.js \ |
| @@ -573,10 +581,11 @@ | |
| 581 | $(SRCDIR)\sounds\c.wav \ |
| 582 | $(SRCDIR)\sounds\d.wav \ |
| 583 | $(SRCDIR)\sounds\e.wav \ |
| 584 | $(SRCDIR)\sounds\f.wav \ |
| 585 | $(SRCDIR)\style.admin_log.css \ |
| 586 | $(SRCDIR)\style.fileedit.css \ |
| 587 | $(SRCDIR)\tree.js \ |
| 588 | $(SRCDIR)\useredit.js \ |
| 589 | $(SRCDIR)\wiki.wiki |
| 590 | |
| 591 | OBJ = $(OX)\add$O \ |
| @@ -618,10 +627,11 @@ | |
| 627 | $(OX)\etag$O \ |
| 628 | $(OX)\event$O \ |
| 629 | $(OX)\export$O \ |
| 630 | $(OX)\extcgi$O \ |
| 631 | $(OX)\file$O \ |
| 632 | $(OX)\fileedit$O \ |
| 633 | $(OX)\finfo$O \ |
| 634 | $(OX)\foci$O \ |
| 635 | $(OX)\forum$O \ |
| 636 | $(OX)\fshell$O \ |
| 637 | $(OX)\fusefs$O \ |
| @@ -823,10 +833,11 @@ | |
| 833 | echo $(OX)\etag.obj >> $@ |
| 834 | echo $(OX)\event.obj >> $@ |
| 835 | echo $(OX)\export.obj >> $@ |
| 836 | echo $(OX)\extcgi.obj >> $@ |
| 837 | echo $(OX)\file.obj >> $@ |
| 838 | echo $(OX)\fileedit.obj >> $@ |
| 839 | echo $(OX)\finfo.obj >> $@ |
| 840 | echo $(OX)\foci.obj >> $@ |
| 841 | echo $(OX)\forum.obj >> $@ |
| 842 | echo $(OX)\fshell.obj >> $@ |
| 843 | echo $(OX)\fusefs.obj >> $@ |
| @@ -1286,10 +1297,16 @@ | |
| 1297 | $(OX)\file$O : file_.c file.h |
| 1298 | $(TCC) /Fo$@ -c file_.c |
| 1299 | |
| 1300 | file_.c : $(SRCDIR)\file.c |
| 1301 | translate$E $** > $@ |
| 1302 | |
| 1303 | $(OX)\fileedit$O : fileedit_.c fileedit.h |
| 1304 | $(TCC) /Fo$@ -c fileedit_.c |
| 1305 | |
| 1306 | fileedit_.c : $(SRCDIR)\fileedit.c |
| 1307 | translate$E $** > $@ |
| 1308 | |
| 1309 | $(OX)\finfo$O : finfo_.c finfo.h |
| 1310 | $(TCC) /Fo$@ -c finfo_.c |
| 1311 | |
| 1312 | finfo_.c : $(SRCDIR)\finfo.c |
| @@ -1937,10 +1954,11 @@ | |
| 1954 | etag_.c:etag.h \ |
| 1955 | event_.c:event.h \ |
| 1956 | export_.c:export.h \ |
| 1957 | extcgi_.c:extcgi.h \ |
| 1958 | file_.c:file.h \ |
| 1959 | fileedit_.c:fileedit.h \ |
| 1960 | finfo_.c:finfo.h \ |
| 1961 | foci_.c:foci.h \ |
| 1962 | forum_.c:forum.h \ |
| 1963 | fshell_.c:fshell.h \ |
| 1964 | fusefs_.c:fusefs.h \ |
| 1965 | |
| 1966 | DDED www/fileedit-page.md |
+18
| --- win/Makefile.msc | ||
| +++ win/Makefile.msc | ||
| @@ -384,10 +384,11 @@ | ||
| 384 | 384 | etag_.c \ |
| 385 | 385 | event_.c \ |
| 386 | 386 | export_.c \ |
| 387 | 387 | extcgi_.c \ |
| 388 | 388 | file_.c \ |
| 389 | + fileedit_.c \ | |
| 389 | 390 | finfo_.c \ |
| 390 | 391 | foci_.c \ |
| 391 | 392 | forum_.c \ |
| 392 | 393 | fshell_.c \ |
| 393 | 394 | fusefs_.c \ |
| @@ -547,10 +548,17 @@ | ||
| 547 | 548 | $(SRCDIR)\accordion.js \ |
| 548 | 549 | $(SRCDIR)\ci_edit.js \ |
| 549 | 550 | $(SRCDIR)\copybtn.js \ |
| 550 | 551 | $(SRCDIR)\diff.tcl \ |
| 551 | 552 | $(SRCDIR)\forum.js \ |
| 553 | + $(SRCDIR)\fossil.bootstrap.js \ | |
| 554 | + $(SRCDIR)\fossil.confirmer.js \ | |
| 555 | + $(SRCDIR)\fossil.dom.js \ | |
| 556 | + $(SRCDIR)\fossil.fetch.js \ | |
| 557 | + $(SRCDIR)\fossil.page.fileedit.js \ | |
| 558 | + $(SRCDIR)\fossil.storage.js \ | |
| 559 | + $(SRCDIR)\fossil.tabs.js \ | |
| 552 | 560 | $(SRCDIR)\graph.js \ |
| 553 | 561 | $(SRCDIR)\href.js \ |
| 554 | 562 | $(SRCDIR)\login.js \ |
| 555 | 563 | $(SRCDIR)\markdown.md \ |
| 556 | 564 | $(SRCDIR)\menu.js \ |
| @@ -573,10 +581,11 @@ | ||
| 573 | 581 | $(SRCDIR)\sounds\c.wav \ |
| 574 | 582 | $(SRCDIR)\sounds\d.wav \ |
| 575 | 583 | $(SRCDIR)\sounds\e.wav \ |
| 576 | 584 | $(SRCDIR)\sounds\f.wav \ |
| 577 | 585 | $(SRCDIR)\style.admin_log.css \ |
| 586 | + $(SRCDIR)\style.fileedit.css \ | |
| 578 | 587 | $(SRCDIR)\tree.js \ |
| 579 | 588 | $(SRCDIR)\useredit.js \ |
| 580 | 589 | $(SRCDIR)\wiki.wiki |
| 581 | 590 | |
| 582 | 591 | OBJ = $(OX)\add$O \ |
| @@ -618,10 +627,11 @@ | ||
| 618 | 627 | $(OX)\etag$O \ |
| 619 | 628 | $(OX)\event$O \ |
| 620 | 629 | $(OX)\export$O \ |
| 621 | 630 | $(OX)\extcgi$O \ |
| 622 | 631 | $(OX)\file$O \ |
| 632 | + $(OX)\fileedit$O \ | |
| 623 | 633 | $(OX)\finfo$O \ |
| 624 | 634 | $(OX)\foci$O \ |
| 625 | 635 | $(OX)\forum$O \ |
| 626 | 636 | $(OX)\fshell$O \ |
| 627 | 637 | $(OX)\fusefs$O \ |
| @@ -823,10 +833,11 @@ | ||
| 823 | 833 | echo $(OX)\etag.obj >> $@ |
| 824 | 834 | echo $(OX)\event.obj >> $@ |
| 825 | 835 | echo $(OX)\export.obj >> $@ |
| 826 | 836 | echo $(OX)\extcgi.obj >> $@ |
| 827 | 837 | echo $(OX)\file.obj >> $@ |
| 838 | + echo $(OX)\fileedit.obj >> $@ | |
| 828 | 839 | echo $(OX)\finfo.obj >> $@ |
| 829 | 840 | echo $(OX)\foci.obj >> $@ |
| 830 | 841 | echo $(OX)\forum.obj >> $@ |
| 831 | 842 | echo $(OX)\fshell.obj >> $@ |
| 832 | 843 | echo $(OX)\fusefs.obj >> $@ |
| @@ -1286,10 +1297,16 @@ | ||
| 1286 | 1297 | $(OX)\file$O : file_.c file.h |
| 1287 | 1298 | $(TCC) /Fo$@ -c file_.c |
| 1288 | 1299 | |
| 1289 | 1300 | file_.c : $(SRCDIR)\file.c |
| 1290 | 1301 | translate$E $** > $@ |
| 1302 | + | |
| 1303 | +$(OX)\fileedit$O : fileedit_.c fileedit.h | |
| 1304 | + $(TCC) /Fo$@ -c fileedit_.c | |
| 1305 | + | |
| 1306 | +fileedit_.c : $(SRCDIR)\fileedit.c | |
| 1307 | + translate$E $** > $@ | |
| 1291 | 1308 | |
| 1292 | 1309 | $(OX)\finfo$O : finfo_.c finfo.h |
| 1293 | 1310 | $(TCC) /Fo$@ -c finfo_.c |
| 1294 | 1311 | |
| 1295 | 1312 | finfo_.c : $(SRCDIR)\finfo.c |
| @@ -1937,10 +1954,11 @@ | ||
| 1937 | 1954 | etag_.c:etag.h \ |
| 1938 | 1955 | event_.c:event.h \ |
| 1939 | 1956 | export_.c:export.h \ |
| 1940 | 1957 | extcgi_.c:extcgi.h \ |
| 1941 | 1958 | file_.c:file.h \ |
| 1959 | + fileedit_.c:fileedit.h \ | |
| 1942 | 1960 | finfo_.c:finfo.h \ |
| 1943 | 1961 | foci_.c:foci.h \ |
| 1944 | 1962 | forum_.c:forum.h \ |
| 1945 | 1963 | fshell_.c:fshell.h \ |
| 1946 | 1964 | fusefs_.c:fusefs.h \ |
| 1947 | 1965 | |
| 1948 | 1966 | ADDED www/fileedit-page.md |
| --- win/Makefile.msc | |
| +++ win/Makefile.msc | |
| @@ -384,10 +384,11 @@ | |
| 384 | etag_.c \ |
| 385 | event_.c \ |
| 386 | export_.c \ |
| 387 | extcgi_.c \ |
| 388 | file_.c \ |
| 389 | finfo_.c \ |
| 390 | foci_.c \ |
| 391 | forum_.c \ |
| 392 | fshell_.c \ |
| 393 | fusefs_.c \ |
| @@ -547,10 +548,17 @@ | |
| 547 | $(SRCDIR)\accordion.js \ |
| 548 | $(SRCDIR)\ci_edit.js \ |
| 549 | $(SRCDIR)\copybtn.js \ |
| 550 | $(SRCDIR)\diff.tcl \ |
| 551 | $(SRCDIR)\forum.js \ |
| 552 | $(SRCDIR)\graph.js \ |
| 553 | $(SRCDIR)\href.js \ |
| 554 | $(SRCDIR)\login.js \ |
| 555 | $(SRCDIR)\markdown.md \ |
| 556 | $(SRCDIR)\menu.js \ |
| @@ -573,10 +581,11 @@ | |
| 573 | $(SRCDIR)\sounds\c.wav \ |
| 574 | $(SRCDIR)\sounds\d.wav \ |
| 575 | $(SRCDIR)\sounds\e.wav \ |
| 576 | $(SRCDIR)\sounds\f.wav \ |
| 577 | $(SRCDIR)\style.admin_log.css \ |
| 578 | $(SRCDIR)\tree.js \ |
| 579 | $(SRCDIR)\useredit.js \ |
| 580 | $(SRCDIR)\wiki.wiki |
| 581 | |
| 582 | OBJ = $(OX)\add$O \ |
| @@ -618,10 +627,11 @@ | |
| 618 | $(OX)\etag$O \ |
| 619 | $(OX)\event$O \ |
| 620 | $(OX)\export$O \ |
| 621 | $(OX)\extcgi$O \ |
| 622 | $(OX)\file$O \ |
| 623 | $(OX)\finfo$O \ |
| 624 | $(OX)\foci$O \ |
| 625 | $(OX)\forum$O \ |
| 626 | $(OX)\fshell$O \ |
| 627 | $(OX)\fusefs$O \ |
| @@ -823,10 +833,11 @@ | |
| 823 | echo $(OX)\etag.obj >> $@ |
| 824 | echo $(OX)\event.obj >> $@ |
| 825 | echo $(OX)\export.obj >> $@ |
| 826 | echo $(OX)\extcgi.obj >> $@ |
| 827 | echo $(OX)\file.obj >> $@ |
| 828 | echo $(OX)\finfo.obj >> $@ |
| 829 | echo $(OX)\foci.obj >> $@ |
| 830 | echo $(OX)\forum.obj >> $@ |
| 831 | echo $(OX)\fshell.obj >> $@ |
| 832 | echo $(OX)\fusefs.obj >> $@ |
| @@ -1286,10 +1297,16 @@ | |
| 1286 | $(OX)\file$O : file_.c file.h |
| 1287 | $(TCC) /Fo$@ -c file_.c |
| 1288 | |
| 1289 | file_.c : $(SRCDIR)\file.c |
| 1290 | translate$E $** > $@ |
| 1291 | |
| 1292 | $(OX)\finfo$O : finfo_.c finfo.h |
| 1293 | $(TCC) /Fo$@ -c finfo_.c |
| 1294 | |
| 1295 | finfo_.c : $(SRCDIR)\finfo.c |
| @@ -1937,10 +1954,11 @@ | |
| 1937 | etag_.c:etag.h \ |
| 1938 | event_.c:event.h \ |
| 1939 | export_.c:export.h \ |
| 1940 | extcgi_.c:extcgi.h \ |
| 1941 | file_.c:file.h \ |
| 1942 | finfo_.c:finfo.h \ |
| 1943 | foci_.c:foci.h \ |
| 1944 | forum_.c:forum.h \ |
| 1945 | fshell_.c:fshell.h \ |
| 1946 | fusefs_.c:fusefs.h \ |
| 1947 | |
| 1948 | DDED www/fileedit-page.md |
| --- win/Makefile.msc | |
| +++ win/Makefile.msc | |
| @@ -384,10 +384,11 @@ | |
| 384 | etag_.c \ |
| 385 | event_.c \ |
| 386 | export_.c \ |
| 387 | extcgi_.c \ |
| 388 | file_.c \ |
| 389 | fileedit_.c \ |
| 390 | finfo_.c \ |
| 391 | foci_.c \ |
| 392 | forum_.c \ |
| 393 | fshell_.c \ |
| 394 | fusefs_.c \ |
| @@ -547,10 +548,17 @@ | |
| 548 | $(SRCDIR)\accordion.js \ |
| 549 | $(SRCDIR)\ci_edit.js \ |
| 550 | $(SRCDIR)\copybtn.js \ |
| 551 | $(SRCDIR)\diff.tcl \ |
| 552 | $(SRCDIR)\forum.js \ |
| 553 | $(SRCDIR)\fossil.bootstrap.js \ |
| 554 | $(SRCDIR)\fossil.confirmer.js \ |
| 555 | $(SRCDIR)\fossil.dom.js \ |
| 556 | $(SRCDIR)\fossil.fetch.js \ |
| 557 | $(SRCDIR)\fossil.page.fileedit.js \ |
| 558 | $(SRCDIR)\fossil.storage.js \ |
| 559 | $(SRCDIR)\fossil.tabs.js \ |
| 560 | $(SRCDIR)\graph.js \ |
| 561 | $(SRCDIR)\href.js \ |
| 562 | $(SRCDIR)\login.js \ |
| 563 | $(SRCDIR)\markdown.md \ |
| 564 | $(SRCDIR)\menu.js \ |
| @@ -573,10 +581,11 @@ | |
| 581 | $(SRCDIR)\sounds\c.wav \ |
| 582 | $(SRCDIR)\sounds\d.wav \ |
| 583 | $(SRCDIR)\sounds\e.wav \ |
| 584 | $(SRCDIR)\sounds\f.wav \ |
| 585 | $(SRCDIR)\style.admin_log.css \ |
| 586 | $(SRCDIR)\style.fileedit.css \ |
| 587 | $(SRCDIR)\tree.js \ |
| 588 | $(SRCDIR)\useredit.js \ |
| 589 | $(SRCDIR)\wiki.wiki |
| 590 | |
| 591 | OBJ = $(OX)\add$O \ |
| @@ -618,10 +627,11 @@ | |
| 627 | $(OX)\etag$O \ |
| 628 | $(OX)\event$O \ |
| 629 | $(OX)\export$O \ |
| 630 | $(OX)\extcgi$O \ |
| 631 | $(OX)\file$O \ |
| 632 | $(OX)\fileedit$O \ |
| 633 | $(OX)\finfo$O \ |
| 634 | $(OX)\foci$O \ |
| 635 | $(OX)\forum$O \ |
| 636 | $(OX)\fshell$O \ |
| 637 | $(OX)\fusefs$O \ |
| @@ -823,10 +833,11 @@ | |
| 833 | echo $(OX)\etag.obj >> $@ |
| 834 | echo $(OX)\event.obj >> $@ |
| 835 | echo $(OX)\export.obj >> $@ |
| 836 | echo $(OX)\extcgi.obj >> $@ |
| 837 | echo $(OX)\file.obj >> $@ |
| 838 | echo $(OX)\fileedit.obj >> $@ |
| 839 | echo $(OX)\finfo.obj >> $@ |
| 840 | echo $(OX)\foci.obj >> $@ |
| 841 | echo $(OX)\forum.obj >> $@ |
| 842 | echo $(OX)\fshell.obj >> $@ |
| 843 | echo $(OX)\fusefs.obj >> $@ |
| @@ -1286,10 +1297,16 @@ | |
| 1297 | $(OX)\file$O : file_.c file.h |
| 1298 | $(TCC) /Fo$@ -c file_.c |
| 1299 | |
| 1300 | file_.c : $(SRCDIR)\file.c |
| 1301 | translate$E $** > $@ |
| 1302 | |
| 1303 | $(OX)\fileedit$O : fileedit_.c fileedit.h |
| 1304 | $(TCC) /Fo$@ -c fileedit_.c |
| 1305 | |
| 1306 | fileedit_.c : $(SRCDIR)\fileedit.c |
| 1307 | translate$E $** > $@ |
| 1308 | |
| 1309 | $(OX)\finfo$O : finfo_.c finfo.h |
| 1310 | $(TCC) /Fo$@ -c finfo_.c |
| 1311 | |
| 1312 | finfo_.c : $(SRCDIR)\finfo.c |
| @@ -1937,10 +1954,11 @@ | |
| 1954 | etag_.c:etag.h \ |
| 1955 | event_.c:event.h \ |
| 1956 | export_.c:export.h \ |
| 1957 | extcgi_.c:extcgi.h \ |
| 1958 | file_.c:file.h \ |
| 1959 | fileedit_.c:fileedit.h \ |
| 1960 | finfo_.c:finfo.h \ |
| 1961 | foci_.c:foci.h \ |
| 1962 | forum_.c:forum.h \ |
| 1963 | fshell_.c:fshell.h \ |
| 1964 | fusefs_.c:fusefs.h \ |
| 1965 | |
| 1966 | DDED www/fileedit-page.md |
+30
| --- a/www/fileedit-page.md | ||
| +++ b/www/fileedit-page.md | ||
| @@ -0,0 +1,30 @@ | ||
| 1 | +# The fileedit Page | |
| 2 | + | |
| 3 | +This document describes the limitations of, caveats for, and | |
| 4 | +disclaimers for the [](/fileedit) page, which provides users with | |
| 5 | +[checkin p basic editing features for files | |
| 6 | +via the web interface. | |
| 7 | + | |
| 8 | +# Important Caveats and Disclaimers | |
| 9 | + | |
| 10 | +Predictably, the ability to edit files in a repository from a web | |
| 11 | +browser halfway around the world comes with several obligatory caveats | |
| 12 | +and disclaimers... | |
| 13 | + | |
| 14 | +## by Default. | |
| 15 | + | |
| 16 | +In order to "activate" it, a user with [the "setup" | |
| 17 | +permission](./caps/index.md) must se?cmd= the | |
| 18 | +[fileedit-glob](/help/fileedit-glob) repository setting to a | |
| 19 | +comma- or newline-delimited list of globs representing a whitelist of | |
| 20 | +files which may be edited online. Any user with commit access may then | |
| 21 | +edit files matching one of those globs. Certain pages within the UI | |
| 22 | +get an "edit" link added to them when the current user's permissions | |
| 23 | +and the whitelist both permit editing of that file. | |
| 24 | + | |
| 25 | +## <a id="'s blockchaindocument describes# # <a*Hypothetically*, though this is currently unproven "in the wild," it | |
| 26 | +inject the custom editor widget into the UI, replacing | |
| 27 | +the default editor widget"should" | |
| 28 | +the after | |
| 29 | +(re)loading a file content to | |
| 30 | +. Those, in turn File |
| --- a/www/fileedit-page.md | |
| +++ b/www/fileedit-page.md | |
| @@ -0,0 +1,30 @@ | |
| --- a/www/fileedit-page.md | |
| +++ b/www/fileedit-page.md | |
| @@ -0,0 +1,30 @@ | |
| 1 | # The fileedit Page |
| 2 | |
| 3 | This document describes the limitations of, caveats for, and |
| 4 | disclaimers for the [](/fileedit) page, which provides users with |
| 5 | [checkin p basic editing features for files |
| 6 | via the web interface. |
| 7 | |
| 8 | # Important Caveats and Disclaimers |
| 9 | |
| 10 | Predictably, the ability to edit files in a repository from a web |
| 11 | browser halfway around the world comes with several obligatory caveats |
| 12 | and disclaimers... |
| 13 | |
| 14 | ## by Default. |
| 15 | |
| 16 | In order to "activate" it, a user with [the "setup" |
| 17 | permission](./caps/index.md) must se?cmd= the |
| 18 | [fileedit-glob](/help/fileedit-glob) repository setting to a |
| 19 | comma- or newline-delimited list of globs representing a whitelist of |
| 20 | files which may be edited online. Any user with commit access may then |
| 21 | edit files matching one of those globs. Certain pages within the UI |
| 22 | get an "edit" link added to them when the current user's permissions |
| 23 | and the whitelist both permit editing of that file. |
| 24 | |
| 25 | ## <a id="'s blockchaindocument describes# # <a*Hypothetically*, though this is currently unproven "in the wild," it |
| 26 | inject the custom editor widget into the UI, replacing |
| 27 | the default editor widget"should" |
| 28 | the after |
| 29 | (re)loading a file content to |
| 30 | . Those, in turn File |
+1
-2
| --- a/www/fileedit-page.md | ||
| +++ b/www/fileedit-page.md | ||
| @@ -27,5 +27,4 @@ | ||
| 27 | 27 | the default editor widget"should" |
| 28 | 28 | the after |
| 29 | 29 | (re)loading a file content to |
| 30 | -. Those, in turn Filedoing the | |
| 31 | -following:ated events. | |
| 30 | +. Those, in turn File |
| --- a/www/fileedit-page.md | |
| +++ b/www/fileedit-page.md | |
| @@ -27,5 +27,4 @@ | |
| 27 | the default editor widget"should" |
| 28 | the after |
| 29 | (re)loading a file content to |
| 30 | . Those, in turn Filedoing the |
| 31 | following:ated events. |
| --- a/www/fileedit-page.md | |
| +++ b/www/fileedit-page.md | |
| @@ -27,5 +27,4 @@ | |
| 27 | the default editor widget"should" |
| 28 | the after |
| 29 | (re)loading a file content to |
| 30 | . Those, in turn File |
+1
| --- www/mkindex.tcl | ||
| +++ www/mkindex.tcl | ||
| @@ -41,10 +41,11 @@ | ||
| 41 | 41 | embeddeddoc.wiki {Embedded Project Documentation} |
| 42 | 42 | encryptedrepos.wiki {How To Use Encrypted Repositories} |
| 43 | 43 | env-opts.md {Environment Variables and Global Options} |
| 44 | 44 | event.wiki {Events} |
| 45 | 45 | faq.wiki {Frequently Asked Questions} |
| 46 | + fileedit-page.md {The fileedit Page} | |
| 46 | 47 | fileformat.wiki {Fossil File Format} |
| 47 | 48 | fiveminutes.wiki {Up and Running in 5 Minutes as a Single User} |
| 48 | 49 | forum.wiki {Fossil Forums} |
| 49 | 50 | foss-cklist.wiki {Checklist For Successful Open-Source Projects} |
| 50 | 51 | fossil-from-msvc.wiki {Integrating Fossil in the Microsoft Express 2010 IDE} |
| 51 | 52 |
| --- www/mkindex.tcl | |
| +++ www/mkindex.tcl | |
| @@ -41,10 +41,11 @@ | |
| 41 | embeddeddoc.wiki {Embedded Project Documentation} |
| 42 | encryptedrepos.wiki {How To Use Encrypted Repositories} |
| 43 | env-opts.md {Environment Variables and Global Options} |
| 44 | event.wiki {Events} |
| 45 | faq.wiki {Frequently Asked Questions} |
| 46 | fileformat.wiki {Fossil File Format} |
| 47 | fiveminutes.wiki {Up and Running in 5 Minutes as a Single User} |
| 48 | forum.wiki {Fossil Forums} |
| 49 | foss-cklist.wiki {Checklist For Successful Open-Source Projects} |
| 50 | fossil-from-msvc.wiki {Integrating Fossil in the Microsoft Express 2010 IDE} |
| 51 |
| --- www/mkindex.tcl | |
| +++ www/mkindex.tcl | |
| @@ -41,10 +41,11 @@ | |
| 41 | embeddeddoc.wiki {Embedded Project Documentation} |
| 42 | encryptedrepos.wiki {How To Use Encrypted Repositories} |
| 43 | env-opts.md {Environment Variables and Global Options} |
| 44 | event.wiki {Events} |
| 45 | faq.wiki {Frequently Asked Questions} |
| 46 | fileedit-page.md {The fileedit Page} |
| 47 | fileformat.wiki {Fossil File Format} |
| 48 | fiveminutes.wiki {Up and Running in 5 Minutes as a Single User} |
| 49 | forum.wiki {Fossil Forums} |
| 50 | foss-cklist.wiki {Checklist For Successful Open-Source Projects} |
| 51 | fossil-from-msvc.wiki {Integrating Fossil in the Microsoft Express 2010 IDE} |
| 52 |
+1
| --- www/mkindex.tcl | ||
| +++ www/mkindex.tcl | ||
| @@ -41,10 +41,11 @@ | ||
| 41 | 41 | embeddeddoc.wiki {Embedded Project Documentation} |
| 42 | 42 | encryptedrepos.wiki {How To Use Encrypted Repositories} |
| 43 | 43 | env-opts.md {Environment Variables and Global Options} |
| 44 | 44 | event.wiki {Events} |
| 45 | 45 | faq.wiki {Frequently Asked Questions} |
| 46 | + fileedit-page.md {The fileedit Page} | |
| 46 | 47 | fileformat.wiki {Fossil File Format} |
| 47 | 48 | fiveminutes.wiki {Up and Running in 5 Minutes as a Single User} |
| 48 | 49 | forum.wiki {Fossil Forums} |
| 49 | 50 | foss-cklist.wiki {Checklist For Successful Open-Source Projects} |
| 50 | 51 | fossil-from-msvc.wiki {Integrating Fossil in the Microsoft Express 2010 IDE} |
| 51 | 52 |
| --- www/mkindex.tcl | |
| +++ www/mkindex.tcl | |
| @@ -41,10 +41,11 @@ | |
| 41 | embeddeddoc.wiki {Embedded Project Documentation} |
| 42 | encryptedrepos.wiki {How To Use Encrypted Repositories} |
| 43 | env-opts.md {Environment Variables and Global Options} |
| 44 | event.wiki {Events} |
| 45 | faq.wiki {Frequently Asked Questions} |
| 46 | fileformat.wiki {Fossil File Format} |
| 47 | fiveminutes.wiki {Up and Running in 5 Minutes as a Single User} |
| 48 | forum.wiki {Fossil Forums} |
| 49 | foss-cklist.wiki {Checklist For Successful Open-Source Projects} |
| 50 | fossil-from-msvc.wiki {Integrating Fossil in the Microsoft Express 2010 IDE} |
| 51 |
| --- www/mkindex.tcl | |
| +++ www/mkindex.tcl | |
| @@ -41,10 +41,11 @@ | |
| 41 | embeddeddoc.wiki {Embedded Project Documentation} |
| 42 | encryptedrepos.wiki {How To Use Encrypted Repositories} |
| 43 | env-opts.md {Environment Variables and Global Options} |
| 44 | event.wiki {Events} |
| 45 | faq.wiki {Frequently Asked Questions} |
| 46 | fileedit-page.md {The fileedit Page} |
| 47 | fileformat.wiki {Fossil File Format} |
| 48 | fiveminutes.wiki {Up and Running in 5 Minutes as a Single User} |
| 49 | forum.wiki {Fossil Forums} |
| 50 | foss-cklist.wiki {Checklist For Successful Open-Source Projects} |
| 51 | fossil-from-msvc.wiki {Integrating Fossil in the Microsoft Express 2010 IDE} |
| 52 |
+4
-1
| --- www/permutedindex.html | ||
| +++ www/permutedindex.html | ||
| @@ -11,11 +11,11 @@ | ||
| 11 | 11 | <li> <a href='quickstart.wiki'>Quick-start Guide</a> |
| 12 | 12 | <li> <a href='history.md'>Purpose and History of Fossil</a> |
| 13 | 13 | <li> <a href='build.wiki'>Compiling and installing Fossil</a> |
| 14 | 14 | <li> <a href='../COPYRIGHT-BSD2.txt'>License</a> |
| 15 | 15 | <li> <a href='$ROOT/help'>List of commands, web-pages, and settings</a> |
| 16 | -<li> <a href='userlinks.wiki'>Key Docs for Fossil Users</a> | |
| 16 | +<li> <a href='userlinks.wiki'>Miscellaneous Docs for Fossil Users</a> | |
| 17 | 17 | <li> <a href='hacker-howto.wiki'>Fossil Developer's Guide</a> |
| 18 | 18 | <li> <a href='http://www.fossil-scm.org/schimpf-book/home'>Jim Schimpf's |
| 19 | 19 | book</a> |
| 20 | 20 | </ul> |
| 21 | 21 | <a name="pindex"></a> |
| @@ -113,10 +113,11 @@ | ||
| 113 | 113 | <li><a href="serverext.wiki">Extensions — CGI Server</a></li> |
| 114 | 114 | <li><a href="serverext.wiki">Extensions To A Fossil Server Using CGI Scripts — Adding</a></li> |
| 115 | 115 | <li><a href="adding_code.wiki">Features To Fossil — Adding New</a></li> |
| 116 | 116 | <li><a href="fileformat.wiki">File Format — Fossil</a></li> |
| 117 | 117 | <li><a href="globs.md"><b>File Name Glob Patterns</b></a></li> |
| 118 | +<li><a href="fileedit-page.md">fileedit Page — The</a></li> | |
| 118 | 119 | <li><a href="unvers.wiki">Files — Unversioned</a></li> |
| 119 | 120 | <li><a href="branching.wiki">Forking, Merging, and Tagging — Branching,</a></li> |
| 120 | 121 | <li><a href="delta_format.wiki">Format — Fossil Delta</a></li> |
| 121 | 122 | <li><a href="fileformat.wiki">Format — Fossil File</a></li> |
| 122 | 123 | <li><a href="image-format-vs-repo-size.md">Format vs Fossil Repo Size — Image</a></li> |
| @@ -206,10 +207,11 @@ | ||
| 206 | 207 | <li><a href="pop.wiki">Operation — Principles Of</a></li> |
| 207 | 208 | <li><a href="cgi.wiki">Options — CGI Script Configuration</a></li> |
| 208 | 209 | <li><a href="env-opts.md">Options — Environment Variables and Global</a></li> |
| 209 | 210 | <li><a href="tech_overview.wiki">Overview Of The Design And Implementation Of Fossil — A Technical</a></li> |
| 210 | 211 | <li><a href="index.wiki">Page — Home</a></li> |
| 212 | +<li><a href="fileedit-page.md">Page — The fileedit</a></li> | |
| 211 | 213 | <li><a href="aboutdownload.wiki">Page Works — How The Download</a></li> |
| 212 | 214 | <li><a href="customskin.md">Pages — Theming: Customizing The Appearance of Web</a></li> |
| 213 | 215 | <li><a href="password.wiki"><b>Password Management And Authentication</b></a></li> |
| 214 | 216 | <li><a href="globs.md">Patterns — File Name Glob</a></li> |
| 215 | 217 | <li><a href="quotes.wiki">People Are Saying About Fossil, Git, and DVCSes in General — Quotes: What</a></li> |
| @@ -281,10 +283,11 @@ | ||
| 281 | 283 | <li><a href="../test/release-checklist.wiki">Testing Checklist — Pre-Release</a></li> |
| 282 | 284 | <li><a href="th1.md">TH1 Scripting Language — The</a></li> |
| 283 | 285 | <li><a href="backoffice.md"><b>The "Backoffice" mechanism of Fossil</b></a></li> |
| 284 | 286 | <li><a href="blame.wiki"><b>The Annotate/Blame Algorithm Of Fossil</b></a></li> |
| 285 | 287 | <li><a href="defcsp.md"><b>The Default Content Security Policy</b></a></li> |
| 288 | +<li><a href="fileedit-page.md"><b>The fileedit Page</b></a></li> | |
| 286 | 289 | <li><a href="makefile.wiki"><b>The Fossil Build Process</b></a></li> |
| 287 | 290 | <li><a href="sync.wiki"><b>The Fossil Sync Protocol</b></a></li> |
| 288 | 291 | <li><a href="tickets.wiki"><b>The Fossil Ticket System</b></a></li> |
| 289 | 292 | <li><a href="webui.wiki"><b>The Fossil Web Interface</b></a></li> |
| 290 | 293 | <li><a href="history.md"><b>The Purpose And History Of Fossil</b></a></li> |
| 291 | 294 |
| --- www/permutedindex.html | |
| +++ www/permutedindex.html | |
| @@ -11,11 +11,11 @@ | |
| 11 | <li> <a href='quickstart.wiki'>Quick-start Guide</a> |
| 12 | <li> <a href='history.md'>Purpose and History of Fossil</a> |
| 13 | <li> <a href='build.wiki'>Compiling and installing Fossil</a> |
| 14 | <li> <a href='../COPYRIGHT-BSD2.txt'>License</a> |
| 15 | <li> <a href='$ROOT/help'>List of commands, web-pages, and settings</a> |
| 16 | <li> <a href='userlinks.wiki'>Key Docs for Fossil Users</a> |
| 17 | <li> <a href='hacker-howto.wiki'>Fossil Developer's Guide</a> |
| 18 | <li> <a href='http://www.fossil-scm.org/schimpf-book/home'>Jim Schimpf's |
| 19 | book</a> |
| 20 | </ul> |
| 21 | <a name="pindex"></a> |
| @@ -113,10 +113,11 @@ | |
| 113 | <li><a href="serverext.wiki">Extensions — CGI Server</a></li> |
| 114 | <li><a href="serverext.wiki">Extensions To A Fossil Server Using CGI Scripts — Adding</a></li> |
| 115 | <li><a href="adding_code.wiki">Features To Fossil — Adding New</a></li> |
| 116 | <li><a href="fileformat.wiki">File Format — Fossil</a></li> |
| 117 | <li><a href="globs.md"><b>File Name Glob Patterns</b></a></li> |
| 118 | <li><a href="unvers.wiki">Files — Unversioned</a></li> |
| 119 | <li><a href="branching.wiki">Forking, Merging, and Tagging — Branching,</a></li> |
| 120 | <li><a href="delta_format.wiki">Format — Fossil Delta</a></li> |
| 121 | <li><a href="fileformat.wiki">Format — Fossil File</a></li> |
| 122 | <li><a href="image-format-vs-repo-size.md">Format vs Fossil Repo Size — Image</a></li> |
| @@ -206,10 +207,11 @@ | |
| 206 | <li><a href="pop.wiki">Operation — Principles Of</a></li> |
| 207 | <li><a href="cgi.wiki">Options — CGI Script Configuration</a></li> |
| 208 | <li><a href="env-opts.md">Options — Environment Variables and Global</a></li> |
| 209 | <li><a href="tech_overview.wiki">Overview Of The Design And Implementation Of Fossil — A Technical</a></li> |
| 210 | <li><a href="index.wiki">Page — Home</a></li> |
| 211 | <li><a href="aboutdownload.wiki">Page Works — How The Download</a></li> |
| 212 | <li><a href="customskin.md">Pages — Theming: Customizing The Appearance of Web</a></li> |
| 213 | <li><a href="password.wiki"><b>Password Management And Authentication</b></a></li> |
| 214 | <li><a href="globs.md">Patterns — File Name Glob</a></li> |
| 215 | <li><a href="quotes.wiki">People Are Saying About Fossil, Git, and DVCSes in General — Quotes: What</a></li> |
| @@ -281,10 +283,11 @@ | |
| 281 | <li><a href="../test/release-checklist.wiki">Testing Checklist — Pre-Release</a></li> |
| 282 | <li><a href="th1.md">TH1 Scripting Language — The</a></li> |
| 283 | <li><a href="backoffice.md"><b>The "Backoffice" mechanism of Fossil</b></a></li> |
| 284 | <li><a href="blame.wiki"><b>The Annotate/Blame Algorithm Of Fossil</b></a></li> |
| 285 | <li><a href="defcsp.md"><b>The Default Content Security Policy</b></a></li> |
| 286 | <li><a href="makefile.wiki"><b>The Fossil Build Process</b></a></li> |
| 287 | <li><a href="sync.wiki"><b>The Fossil Sync Protocol</b></a></li> |
| 288 | <li><a href="tickets.wiki"><b>The Fossil Ticket System</b></a></li> |
| 289 | <li><a href="webui.wiki"><b>The Fossil Web Interface</b></a></li> |
| 290 | <li><a href="history.md"><b>The Purpose And History Of Fossil</b></a></li> |
| 291 |
| --- www/permutedindex.html | |
| +++ www/permutedindex.html | |
| @@ -11,11 +11,11 @@ | |
| 11 | <li> <a href='quickstart.wiki'>Quick-start Guide</a> |
| 12 | <li> <a href='history.md'>Purpose and History of Fossil</a> |
| 13 | <li> <a href='build.wiki'>Compiling and installing Fossil</a> |
| 14 | <li> <a href='../COPYRIGHT-BSD2.txt'>License</a> |
| 15 | <li> <a href='$ROOT/help'>List of commands, web-pages, and settings</a> |
| 16 | <li> <a href='userlinks.wiki'>Miscellaneous Docs for Fossil Users</a> |
| 17 | <li> <a href='hacker-howto.wiki'>Fossil Developer's Guide</a> |
| 18 | <li> <a href='http://www.fossil-scm.org/schimpf-book/home'>Jim Schimpf's |
| 19 | book</a> |
| 20 | </ul> |
| 21 | <a name="pindex"></a> |
| @@ -113,10 +113,11 @@ | |
| 113 | <li><a href="serverext.wiki">Extensions — CGI Server</a></li> |
| 114 | <li><a href="serverext.wiki">Extensions To A Fossil Server Using CGI Scripts — Adding</a></li> |
| 115 | <li><a href="adding_code.wiki">Features To Fossil — Adding New</a></li> |
| 116 | <li><a href="fileformat.wiki">File Format — Fossil</a></li> |
| 117 | <li><a href="globs.md"><b>File Name Glob Patterns</b></a></li> |
| 118 | <li><a href="fileedit-page.md">fileedit Page — The</a></li> |
| 119 | <li><a href="unvers.wiki">Files — Unversioned</a></li> |
| 120 | <li><a href="branching.wiki">Forking, Merging, and Tagging — Branching,</a></li> |
| 121 | <li><a href="delta_format.wiki">Format — Fossil Delta</a></li> |
| 122 | <li><a href="fileformat.wiki">Format — Fossil File</a></li> |
| 123 | <li><a href="image-format-vs-repo-size.md">Format vs Fossil Repo Size — Image</a></li> |
| @@ -206,10 +207,11 @@ | |
| 207 | <li><a href="pop.wiki">Operation — Principles Of</a></li> |
| 208 | <li><a href="cgi.wiki">Options — CGI Script Configuration</a></li> |
| 209 | <li><a href="env-opts.md">Options — Environment Variables and Global</a></li> |
| 210 | <li><a href="tech_overview.wiki">Overview Of The Design And Implementation Of Fossil — A Technical</a></li> |
| 211 | <li><a href="index.wiki">Page — Home</a></li> |
| 212 | <li><a href="fileedit-page.md">Page — The fileedit</a></li> |
| 213 | <li><a href="aboutdownload.wiki">Page Works — How The Download</a></li> |
| 214 | <li><a href="customskin.md">Pages — Theming: Customizing The Appearance of Web</a></li> |
| 215 | <li><a href="password.wiki"><b>Password Management And Authentication</b></a></li> |
| 216 | <li><a href="globs.md">Patterns — File Name Glob</a></li> |
| 217 | <li><a href="quotes.wiki">People Are Saying About Fossil, Git, and DVCSes in General — Quotes: What</a></li> |
| @@ -281,10 +283,11 @@ | |
| 283 | <li><a href="../test/release-checklist.wiki">Testing Checklist — Pre-Release</a></li> |
| 284 | <li><a href="th1.md">TH1 Scripting Language — The</a></li> |
| 285 | <li><a href="backoffice.md"><b>The "Backoffice" mechanism of Fossil</b></a></li> |
| 286 | <li><a href="blame.wiki"><b>The Annotate/Blame Algorithm Of Fossil</b></a></li> |
| 287 | <li><a href="defcsp.md"><b>The Default Content Security Policy</b></a></li> |
| 288 | <li><a href="fileedit-page.md"><b>The fileedit Page</b></a></li> |
| 289 | <li><a href="makefile.wiki"><b>The Fossil Build Process</b></a></li> |
| 290 | <li><a href="sync.wiki"><b>The Fossil Sync Protocol</b></a></li> |
| 291 | <li><a href="tickets.wiki"><b>The Fossil Ticket System</b></a></li> |
| 292 | <li><a href="webui.wiki"><b>The Fossil Web Interface</b></a></li> |
| 293 | <li><a href="history.md"><b>The Purpose And History Of Fossil</b></a></li> |
| 294 |