Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Changes In Branch wysiwyg Excluding Merge-Ins
This is equivalent to a diff from 717cd2782c to e5ad103777
2012-08-14
| ||
17:30 | Merge in the WYSIWYG editor branch, making WYSIWYG an option for trunk users. WYSIWYG is still off by default. check-in: 65870e8736 user: drh tags: trunk | |
2012-08-13
| ||
12:54 | Disable the cut/copy/paste buttons on the WYSIWYG editor, since doing cut/copy/paste under javascript control is normally disallowed for security reasons. Leaf check-in: e5ad103777 user: drh tags: wysiwyg | |
12:39 | Adjust the $current_page for the doc webpage so that it includes the embedded document being rendered. check-in: 22e2051111 user: drh tags: trunk | |
12:30 | Fixes to the <base> addition to the HTML header so that it works correctly with the "doc" webpage. Href is now $baseurl/$current_page. check-in: fd10cdbaf8 user: drh tags: wysiwyg | |
2012-08-10
| ||
19:59 | Add experimental support for WYSIWYG editing of wiki pages. check-in: 6cd9847f54 user: drh tags: wysiwyg | |
12:59 | Allow the style= attribute in wiki markup. check-in: 717cd2782c user: drh tags: trunk | |
2012-08-09
| ||
19:16 | Fix the "Delete Ad-Unit" button so that it really does delete the ad-unit. check-in: 869e27e739 user: drh tags: trunk | |
Changes to src/cgi.c.
93 93 break; 94 94 } 95 95 default: { 96 96 cgi_panic("bad destination"); 97 97 } 98 98 } 99 99 } 100 + 101 +/* 102 +** Check to see if the header contains the zNeedle string. Return true 103 +** if it does and false if it does not. 104 +*/ 105 +int cgi_header_contains(const char *zNeedle){ 106 + return strstr(blob_str(&cgiContent[0]), zNeedle)!=0; 107 +} 100 108 101 109 /* 102 110 ** Append reply content to what already exists. 103 111 */ 104 112 void cgi_append_content(const char *zData, int nAmt){ 105 113 blob_append(pContent, zData, nAmt); 106 114 }
Changes to src/doc.c.
368 368 if( !g.perm.Read ){ login_needed(); return; } 369 369 zName = PD("name", "tip/index.wiki"); 370 370 for(i=0; zName[i] && zName[i]!='/'; i++){} 371 371 if( zName[i]==0 || i>UUID_SIZE ){ 372 372 zName = "index.html"; 373 373 goto doc_not_found; 374 374 } 375 + g.zPath = mprintf("%s/%s", g.zPath, zName); 375 376 memcpy(zBaseline, zName, i); 376 377 zBaseline[i] = 0; 377 378 zName += i; 378 379 while( zName[0]=='/' ){ zName++; } 379 380 if( !file_is_simple_pathname(zName) ){ 380 381 int n = strlen(zName); 381 382 if( n>0 && zName[n-1]=='/' ){
Changes to src/main.mk.
104 104 $(SRCDIR)/url.c \ 105 105 $(SRCDIR)/user.c \ 106 106 $(SRCDIR)/verify.c \ 107 107 $(SRCDIR)/vfile.c \ 108 108 $(SRCDIR)/wiki.c \ 109 109 $(SRCDIR)/wikiformat.c \ 110 110 $(SRCDIR)/winhttp.c \ 111 + $(SRCDIR)/wysiwyg.c \ 111 112 $(SRCDIR)/xfer.c \ 112 113 $(SRCDIR)/xfersetup.c \ 113 114 $(SRCDIR)/zip.c 114 115 115 116 TRANS_SRC = \ 116 117 $(OBJDIR)/add_.c \ 117 118 $(OBJDIR)/allrepo_.c \ ................................................................................ 203 204 $(OBJDIR)/url_.c \ 204 205 $(OBJDIR)/user_.c \ 205 206 $(OBJDIR)/verify_.c \ 206 207 $(OBJDIR)/vfile_.c \ 207 208 $(OBJDIR)/wiki_.c \ 208 209 $(OBJDIR)/wikiformat_.c \ 209 210 $(OBJDIR)/winhttp_.c \ 211 + $(OBJDIR)/wysiwyg_.c \ 210 212 $(OBJDIR)/xfer_.c \ 211 213 $(OBJDIR)/xfersetup_.c \ 212 214 $(OBJDIR)/zip_.c 213 215 214 216 OBJ = \ 215 217 $(OBJDIR)/add.o \ 216 218 $(OBJDIR)/allrepo.o \ ................................................................................ 302 304 $(OBJDIR)/url.o \ 303 305 $(OBJDIR)/user.o \ 304 306 $(OBJDIR)/verify.o \ 305 307 $(OBJDIR)/vfile.o \ 306 308 $(OBJDIR)/wiki.o \ 307 309 $(OBJDIR)/wikiformat.o \ 308 310 $(OBJDIR)/winhttp.o \ 311 + $(OBJDIR)/wysiwyg.o \ 309 312 $(OBJDIR)/xfer.o \ 310 313 $(OBJDIR)/xfersetup.o \ 311 314 $(OBJDIR)/zip.o 312 315 313 316 APPNAME = fossil$(E) 314 317 315 318 ................................................................................ 373 376 clean: 374 377 rm -rf $(OBJDIR)/* $(APPNAME) 375 378 376 379 377 380 $(OBJDIR)/page_index.h: $(TRANS_SRC) $(OBJDIR)/mkindex 378 381 $(OBJDIR)/mkindex $(TRANS_SRC) >$@ 379 382 $(OBJDIR)/headers: $(OBJDIR)/page_index.h $(OBJDIR)/makeheaders $(OBJDIR)/VERSION.h 380 - $(OBJDIR)/makeheaders $(OBJDIR)/add_.c:$(OBJDIR)/add.h $(OBJDIR)/allrepo_.c:$(OBJDIR)/allrepo.h $(OBJDIR)/attach_.c:$(OBJDIR)/attach.h $(OBJDIR)/bag_.c:$(OBJDIR)/bag.h $(OBJDIR)/bisect_.c:$(OBJDIR)/bisect.h $(OBJDIR)/blob_.c:$(OBJDIR)/blob.h $(OBJDIR)/branch_.c:$(OBJDIR)/branch.h $(OBJDIR)/browse_.c:$(OBJDIR)/browse.h $(OBJDIR)/captcha_.c:$(OBJDIR)/captcha.h $(OBJDIR)/cgi_.c:$(OBJDIR)/cgi.h $(OBJDIR)/checkin_.c:$(OBJDIR)/checkin.h $(OBJDIR)/checkout_.c:$(OBJDIR)/checkout.h $(OBJDIR)/clearsign_.c:$(OBJDIR)/clearsign.h $(OBJDIR)/clone_.c:$(OBJDIR)/clone.h $(OBJDIR)/comformat_.c:$(OBJDIR)/comformat.h $(OBJDIR)/configure_.c:$(OBJDIR)/configure.h $(OBJDIR)/content_.c:$(OBJDIR)/content.h $(OBJDIR)/db_.c:$(OBJDIR)/db.h $(OBJDIR)/delta_.c:$(OBJDIR)/delta.h $(OBJDIR)/deltacmd_.c:$(OBJDIR)/deltacmd.h $(OBJDIR)/descendants_.c:$(OBJDIR)/descendants.h $(OBJDIR)/diff_.c:$(OBJDIR)/diff.h $(OBJDIR)/diffcmd_.c:$(OBJDIR)/diffcmd.h $(OBJDIR)/doc_.c:$(OBJDIR)/doc.h $(OBJDIR)/encode_.c:$(OBJDIR)/encode.h $(OBJDIR)/event_.c:$(OBJDIR)/event.h $(OBJDIR)/export_.c:$(OBJDIR)/export.h $(OBJDIR)/file_.c:$(OBJDIR)/file.h $(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h $(OBJDIR)/glob_.c:$(OBJDIR)/glob.h $(OBJDIR)/graph_.c:$(OBJDIR)/graph.h $(OBJDIR)/gzip_.c:$(OBJDIR)/gzip.h $(OBJDIR)/http_.c:$(OBJDIR)/http.h $(OBJDIR)/http_socket_.c:$(OBJDIR)/http_socket.h $(OBJDIR)/http_ssl_.c:$(OBJDIR)/http_ssl.h $(OBJDIR)/http_transport_.c:$(OBJDIR)/http_transport.h $(OBJDIR)/import_.c:$(OBJDIR)/import.h $(OBJDIR)/info_.c:$(OBJDIR)/info.h $(OBJDIR)/json_.c:$(OBJDIR)/json.h $(OBJDIR)/json_artifact_.c:$(OBJDIR)/json_artifact.h $(OBJDIR)/json_branch_.c:$(OBJDIR)/json_branch.h $(OBJDIR)/json_config_.c:$(OBJDIR)/json_config.h $(OBJDIR)/json_diff_.c:$(OBJDIR)/json_diff.h $(OBJDIR)/json_dir_.c:$(OBJDIR)/json_dir.h $(OBJDIR)/json_finfo_.c:$(OBJDIR)/json_finfo.h $(OBJDIR)/json_login_.c:$(OBJDIR)/json_login.h $(OBJDIR)/json_query_.c:$(OBJDIR)/json_query.h $(OBJDIR)/json_report_.c:$(OBJDIR)/json_report.h $(OBJDIR)/json_tag_.c:$(OBJDIR)/json_tag.h $(OBJDIR)/json_timeline_.c:$(OBJDIR)/json_timeline.h $(OBJDIR)/json_user_.c:$(OBJDIR)/json_user.h $(OBJDIR)/json_wiki_.c:$(OBJDIR)/json_wiki.h $(OBJDIR)/leaf_.c:$(OBJDIR)/leaf.h $(OBJDIR)/login_.c:$(OBJDIR)/login.h $(OBJDIR)/main_.c:$(OBJDIR)/main.h $(OBJDIR)/manifest_.c:$(OBJDIR)/manifest.h $(OBJDIR)/md5_.c:$(OBJDIR)/md5.h $(OBJDIR)/merge_.c:$(OBJDIR)/merge.h $(OBJDIR)/merge3_.c:$(OBJDIR)/merge3.h $(OBJDIR)/name_.c:$(OBJDIR)/name.h $(OBJDIR)/path_.c:$(OBJDIR)/path.h $(OBJDIR)/pivot_.c:$(OBJDIR)/pivot.h $(OBJDIR)/popen_.c:$(OBJDIR)/popen.h $(OBJDIR)/pqueue_.c:$(OBJDIR)/pqueue.h $(OBJDIR)/printf_.c:$(OBJDIR)/printf.h $(OBJDIR)/rebuild_.c:$(OBJDIR)/rebuild.h $(OBJDIR)/report_.c:$(OBJDIR)/report.h $(OBJDIR)/rss_.c:$(OBJDIR)/rss.h $(OBJDIR)/schema_.c:$(OBJDIR)/schema.h $(OBJDIR)/search_.c:$(OBJDIR)/search.h $(OBJDIR)/setup_.c:$(OBJDIR)/setup.h $(OBJDIR)/sha1_.c:$(OBJDIR)/sha1.h $(OBJDIR)/shun_.c:$(OBJDIR)/shun.h $(OBJDIR)/skins_.c:$(OBJDIR)/skins.h $(OBJDIR)/sqlcmd_.c:$(OBJDIR)/sqlcmd.h $(OBJDIR)/stash_.c:$(OBJDIR)/stash.h $(OBJDIR)/stat_.c:$(OBJDIR)/stat.h $(OBJDIR)/style_.c:$(OBJDIR)/style.h $(OBJDIR)/sync_.c:$(OBJDIR)/sync.h $(OBJDIR)/tag_.c:$(OBJDIR)/tag.h $(OBJDIR)/tar_.c:$(OBJDIR)/tar.h $(OBJDIR)/th_main_.c:$(OBJDIR)/th_main.h $(OBJDIR)/timeline_.c:$(OBJDIR)/timeline.h $(OBJDIR)/tkt_.c:$(OBJDIR)/tkt.h $(OBJDIR)/tktsetup_.c:$(OBJDIR)/tktsetup.h $(OBJDIR)/undo_.c:$(OBJDIR)/undo.h $(OBJDIR)/update_.c:$(OBJDIR)/update.h $(OBJDIR)/url_.c:$(OBJDIR)/url.h $(OBJDIR)/user_.c:$(OBJDIR)/user.h $(OBJDIR)/verify_.c:$(OBJDIR)/verify.h $(OBJDIR)/vfile_.c:$(OBJDIR)/vfile.h $(OBJDIR)/wiki_.c:$(OBJDIR)/wiki.h $(OBJDIR)/wikiformat_.c:$(OBJDIR)/wikiformat.h $(OBJDIR)/winhttp_.c:$(OBJDIR)/winhttp.h $(OBJDIR)/xfer_.c:$(OBJDIR)/xfer.h $(OBJDIR)/xfersetup_.c:$(OBJDIR)/xfersetup.h $(OBJDIR)/zip_.c:$(OBJDIR)/zip.h $(SRCDIR)/sqlite3.h $(SRCDIR)/th.h $(OBJDIR)/VERSION.h 383 + $(OBJDIR)/makeheaders $(OBJDIR)/add_.c:$(OBJDIR)/add.h $(OBJDIR)/allrepo_.c:$(OBJDIR)/allrepo.h $(OBJDIR)/attach_.c:$(OBJDIR)/attach.h $(OBJDIR)/bag_.c:$(OBJDIR)/bag.h $(OBJDIR)/bisect_.c:$(OBJDIR)/bisect.h $(OBJDIR)/blob_.c:$(OBJDIR)/blob.h $(OBJDIR)/branch_.c:$(OBJDIR)/branch.h $(OBJDIR)/browse_.c:$(OBJDIR)/browse.h $(OBJDIR)/captcha_.c:$(OBJDIR)/captcha.h $(OBJDIR)/cgi_.c:$(OBJDIR)/cgi.h $(OBJDIR)/checkin_.c:$(OBJDIR)/checkin.h $(OBJDIR)/checkout_.c:$(OBJDIR)/checkout.h $(OBJDIR)/clearsign_.c:$(OBJDIR)/clearsign.h $(OBJDIR)/clone_.c:$(OBJDIR)/clone.h $(OBJDIR)/comformat_.c:$(OBJDIR)/comformat.h $(OBJDIR)/configure_.c:$(OBJDIR)/configure.h $(OBJDIR)/content_.c:$(OBJDIR)/content.h $(OBJDIR)/db_.c:$(OBJDIR)/db.h $(OBJDIR)/delta_.c:$(OBJDIR)/delta.h $(OBJDIR)/deltacmd_.c:$(OBJDIR)/deltacmd.h $(OBJDIR)/descendants_.c:$(OBJDIR)/descendants.h $(OBJDIR)/diff_.c:$(OBJDIR)/diff.h $(OBJDIR)/diffcmd_.c:$(OBJDIR)/diffcmd.h $(OBJDIR)/doc_.c:$(OBJDIR)/doc.h $(OBJDIR)/encode_.c:$(OBJDIR)/encode.h $(OBJDIR)/event_.c:$(OBJDIR)/event.h $(OBJDIR)/export_.c:$(OBJDIR)/export.h $(OBJDIR)/file_.c:$(OBJDIR)/file.h $(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h $(OBJDIR)/glob_.c:$(OBJDIR)/glob.h $(OBJDIR)/graph_.c:$(OBJDIR)/graph.h $(OBJDIR)/gzip_.c:$(OBJDIR)/gzip.h $(OBJDIR)/http_.c:$(OBJDIR)/http.h $(OBJDIR)/http_socket_.c:$(OBJDIR)/http_socket.h $(OBJDIR)/http_ssl_.c:$(OBJDIR)/http_ssl.h $(OBJDIR)/http_transport_.c:$(OBJDIR)/http_transport.h $(OBJDIR)/import_.c:$(OBJDIR)/import.h $(OBJDIR)/info_.c:$(OBJDIR)/info.h $(OBJDIR)/json_.c:$(OBJDIR)/json.h $(OBJDIR)/json_artifact_.c:$(OBJDIR)/json_artifact.h $(OBJDIR)/json_branch_.c:$(OBJDIR)/json_branch.h $(OBJDIR)/json_config_.c:$(OBJDIR)/json_config.h $(OBJDIR)/json_diff_.c:$(OBJDIR)/json_diff.h $(OBJDIR)/json_dir_.c:$(OBJDIR)/json_dir.h $(OBJDIR)/json_finfo_.c:$(OBJDIR)/json_finfo.h $(OBJDIR)/json_login_.c:$(OBJDIR)/json_login.h $(OBJDIR)/json_query_.c:$(OBJDIR)/json_query.h $(OBJDIR)/json_report_.c:$(OBJDIR)/json_report.h $(OBJDIR)/json_tag_.c:$(OBJDIR)/json_tag.h $(OBJDIR)/json_timeline_.c:$(OBJDIR)/json_timeline.h $(OBJDIR)/json_user_.c:$(OBJDIR)/json_user.h $(OBJDIR)/json_wiki_.c:$(OBJDIR)/json_wiki.h $(OBJDIR)/leaf_.c:$(OBJDIR)/leaf.h $(OBJDIR)/login_.c:$(OBJDIR)/login.h $(OBJDIR)/main_.c:$(OBJDIR)/main.h $(OBJDIR)/manifest_.c:$(OBJDIR)/manifest.h $(OBJDIR)/md5_.c:$(OBJDIR)/md5.h $(OBJDIR)/merge_.c:$(OBJDIR)/merge.h $(OBJDIR)/merge3_.c:$(OBJDIR)/merge3.h $(OBJDIR)/name_.c:$(OBJDIR)/name.h $(OBJDIR)/path_.c:$(OBJDIR)/path.h $(OBJDIR)/pivot_.c:$(OBJDIR)/pivot.h $(OBJDIR)/popen_.c:$(OBJDIR)/popen.h $(OBJDIR)/pqueue_.c:$(OBJDIR)/pqueue.h $(OBJDIR)/printf_.c:$(OBJDIR)/printf.h $(OBJDIR)/rebuild_.c:$(OBJDIR)/rebuild.h $(OBJDIR)/report_.c:$(OBJDIR)/report.h $(OBJDIR)/rss_.c:$(OBJDIR)/rss.h $(OBJDIR)/schema_.c:$(OBJDIR)/schema.h $(OBJDIR)/search_.c:$(OBJDIR)/search.h $(OBJDIR)/setup_.c:$(OBJDIR)/setup.h $(OBJDIR)/sha1_.c:$(OBJDIR)/sha1.h $(OBJDIR)/shun_.c:$(OBJDIR)/shun.h $(OBJDIR)/skins_.c:$(OBJDIR)/skins.h $(OBJDIR)/sqlcmd_.c:$(OBJDIR)/sqlcmd.h $(OBJDIR)/stash_.c:$(OBJDIR)/stash.h $(OBJDIR)/stat_.c:$(OBJDIR)/stat.h $(OBJDIR)/style_.c:$(OBJDIR)/style.h $(OBJDIR)/sync_.c:$(OBJDIR)/sync.h $(OBJDIR)/tag_.c:$(OBJDIR)/tag.h $(OBJDIR)/tar_.c:$(OBJDIR)/tar.h $(OBJDIR)/th_main_.c:$(OBJDIR)/th_main.h $(OBJDIR)/timeline_.c:$(OBJDIR)/timeline.h $(OBJDIR)/tkt_.c:$(OBJDIR)/tkt.h $(OBJDIR)/tktsetup_.c:$(OBJDIR)/tktsetup.h $(OBJDIR)/undo_.c:$(OBJDIR)/undo.h $(OBJDIR)/update_.c:$(OBJDIR)/update.h $(OBJDIR)/url_.c:$(OBJDIR)/url.h $(OBJDIR)/user_.c:$(OBJDIR)/user.h $(OBJDIR)/verify_.c:$(OBJDIR)/verify.h $(OBJDIR)/vfile_.c:$(OBJDIR)/vfile.h $(OBJDIR)/wiki_.c:$(OBJDIR)/wiki.h $(OBJDIR)/wikiformat_.c:$(OBJDIR)/wikiformat.h $(OBJDIR)/winhttp_.c:$(OBJDIR)/winhttp.h $(OBJDIR)/wysiwyg_.c:$(OBJDIR)/wysiwyg.h $(OBJDIR)/xfer_.c:$(OBJDIR)/xfer.h $(OBJDIR)/xfersetup_.c:$(OBJDIR)/xfersetup.h $(OBJDIR)/zip_.c:$(OBJDIR)/zip.h $(SRCDIR)/sqlite3.h $(SRCDIR)/th.h $(OBJDIR)/VERSION.h 381 384 touch $(OBJDIR)/headers 382 385 $(OBJDIR)/headers: Makefile 383 386 $(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_tag.o $(OBJDIR)/json_timeline.o $(OBJDIR)/json_user.o $(OBJDIR)/json_wiki.o : $(SRCDIR)/json_detail.h 384 387 Makefile: 385 388 $(OBJDIR)/add_.c: $(SRCDIR)/add.c $(OBJDIR)/translate 386 389 $(OBJDIR)/translate $(SRCDIR)/add.c >$(OBJDIR)/add_.c 387 390 ................................................................................ 1036 1039 $(OBJDIR)/winhttp_.c: $(SRCDIR)/winhttp.c $(OBJDIR)/translate 1037 1040 $(OBJDIR)/translate $(SRCDIR)/winhttp.c >$(OBJDIR)/winhttp_.c 1038 1041 1039 1042 $(OBJDIR)/winhttp.o: $(OBJDIR)/winhttp_.c $(OBJDIR)/winhttp.h $(SRCDIR)/config.h 1040 1043 $(XTCC) -o $(OBJDIR)/winhttp.o -c $(OBJDIR)/winhttp_.c 1041 1044 1042 1045 $(OBJDIR)/winhttp.h: $(OBJDIR)/headers 1046 +$(OBJDIR)/wysiwyg_.c: $(SRCDIR)/wysiwyg.c $(OBJDIR)/translate 1047 + $(OBJDIR)/translate $(SRCDIR)/wysiwyg.c >$(OBJDIR)/wysiwyg_.c 1048 + 1049 +$(OBJDIR)/wysiwyg.o: $(OBJDIR)/wysiwyg_.c $(OBJDIR)/wysiwyg.h $(SRCDIR)/config.h 1050 + $(XTCC) -o $(OBJDIR)/wysiwyg.o -c $(OBJDIR)/wysiwyg_.c 1051 + 1052 +$(OBJDIR)/wysiwyg.h: $(OBJDIR)/headers 1043 1053 $(OBJDIR)/xfer_.c: $(SRCDIR)/xfer.c $(OBJDIR)/translate 1044 1054 $(OBJDIR)/translate $(SRCDIR)/xfer.c >$(OBJDIR)/xfer_.c 1045 1055 1046 1056 $(OBJDIR)/xfer.o: $(OBJDIR)/xfer_.c $(OBJDIR)/xfer.h $(SRCDIR)/config.h 1047 1057 $(XTCC) -o $(OBJDIR)/xfer.o -c $(OBJDIR)/xfer_.c 1048 1058 1049 1059 $(OBJDIR)/xfer.h: $(OBJDIR)/headers
Changes to src/makemake.tcl.
107 107 url 108 108 user 109 109 verify 110 110 vfile 111 111 wiki 112 112 wikiformat 113 113 winhttp 114 + wysiwyg 114 115 xfer 115 116 xfersetup 116 117 zip 117 118 http_ssl 118 119 } 119 120 120 121 # Name of the final application
Changes to src/setup.c.
55 55 void setup_page(void){ 56 56 login_check_credentials(); 57 57 if( !g.perm.Setup ){ 58 58 login_needed(); 59 59 } 60 60 61 61 style_header("Server Administration"); 62 + 63 + /* Make sure the header contains <base href="...">. Issue a warning 64 + ** if it does not. */ 65 + if( !cgi_header_contains("<base href=") ){ 66 + @ <p class="generalError"><b>Configuration Error:</b> Please add 67 + @ <tt><base href="$baseurl/$current_page"></tt> after 68 + @ <tt><head></tt> in the <a href="setup_header">HTML header</a>!</p> 69 + } 70 + 62 71 @ <table border="0" cellspacing="7"> 63 72 setup_menu_entry("Users", "setup_ulist", 64 73 "Grant privileges to individual users."); 65 74 setup_menu_entry("Access", "setup_access", 66 75 "Control access settings."); 67 76 setup_menu_entry("Configuration", "setup_config", 68 77 "Configure the WWW components of the repository"); ................................................................................ 867 876 const char *zQ = P(zQP); 868 877 if( zQ && fossil_strcmp(zQ,z)!=0 ){ 869 878 login_verify_csrf_secret(); 870 879 db_set(zVar, zQ, 0); 871 880 z = zQ; 872 881 } 873 882 if( rows>0 && cols>0 ){ 874 - @ <textarea name="%s(zQP)" rows="%d(rows)" cols="%d(cols)">%h(z)</textarea> 875 - if (zLabel && *zLabel) 883 + @ <textarea id="id%s(zQP)" name="%s(zQP)" rows="%d(rows)" 884 + @ cols="%d(cols)">%h(z)</textarea> 885 + if (zLabel && *zLabel){ 876 886 @ <span class="textareaLabel">%s(zLabel)</span> 887 + } 877 888 } 878 889 } 879 890 880 891 881 892 /* 882 893 ** WEBPAGE: setup_access 883 894 */ ................................................................................ 1235 1246 @ <form action="%s(g.zTop)/setup_config" method="post"><div> 1236 1247 login_insert_csrf_secret(); 1237 1248 @ <hr /> 1238 1249 entry_attribute("Project Name", 60, "project-name", "pn", ""); 1239 1250 @ <p>Give your project a name so visitors know what this site is about. 1240 1251 @ The project name will also be used as the RSS feed title.</p> 1241 1252 @ <hr /> 1242 - textarea_attribute("Project Description", 5, 60, 1253 + textarea_attribute("Project Description", 3, 80, 1243 1254 "project-description", "pd", ""); 1244 1255 @ <p>Describe your project. This will be used in page headers for search 1245 1256 @ engines as well as a short RSS description.</p> 1246 1257 @ <hr /> 1258 + onoff_attribute("Enable WYSIWYG Wiki Editing", 1259 + "wysiwyg-wiki", "wysiwyg-wiki", 0); 1260 + @ <p>Enable what-you-see-is-what-you-get (WYSIWYG) editing of wiki pages. 1261 + @ The WYSIWYG editor generates HTML instead of markup, which makes 1262 + @ subsequent manual editing more difficult.</p> 1263 + @ <hr /> 1247 1264 entry_attribute("Index Page", 60, "index-page", "idxpg", "/home"); 1248 1265 @ <p>Enter the pathname of the page to display when the "Home" menu 1249 1266 @ option is selected and when no pathname is 1250 1267 @ specified in the URL. For example, if you visit the url:</p> 1251 1268 @ 1252 1269 @ <blockquote><p>%h(g.zBaseURL)</p></blockquote> 1253 1270 @ ................................................................................ 1295 1312 } 1296 1313 db_begin_transaction(); 1297 1314 if( P("clear")!=0 ){ 1298 1315 db_multi_exec("DELETE FROM config WHERE name='css'"); 1299 1316 cgi_replace_parameter("css", zDefaultCSS); 1300 1317 db_end_transaction(0); 1301 1318 cgi_redirect("setup_editcss"); 1302 - }else{ 1303 - textarea_attribute(0, 0, 0, "css", "css", zDefaultCSS); 1304 1319 } 1305 1320 if( P("submit")!=0 ){ 1321 + textarea_attribute(0, 0, 0, "css", "css", zDefaultCSS); 1306 1322 db_end_transaction(0); 1307 1323 cgi_redirect("setup_editcss"); 1308 1324 } 1309 1325 style_header("Edit CSS"); 1310 1326 @ <form action="%s(g.zTop)/setup_editcss" method="post"><div> 1311 1327 login_insert_csrf_secret(); 1312 1328 @ Edit the CSS below:<br /> 1313 - textarea_attribute("", 40, 80, "css", "css", zDefaultCSS); 1329 + textarea_attribute("", 35, 80, "css", "css", zDefaultCSS); 1314 1330 @ <br /> 1315 1331 @ <input type="submit" name="submit" value="Apply Changes" /> 1316 1332 @ <input type="submit" name="clear" value="Revert To Default" /> 1317 1333 @ </div></form> 1318 1334 @ <p><span class="note">Note:</span> Press your browser Reload button after 1319 1335 @ modifying the CSS in order to pull in the modified CSS file.</p> 1320 1336 @ <hr /> ................................................................................ 1337 1353 if( !g.perm.Setup ){ 1338 1354 login_needed(); 1339 1355 } 1340 1356 db_begin_transaction(); 1341 1357 if( P("clear")!=0 ){ 1342 1358 db_multi_exec("DELETE FROM config WHERE name='header'"); 1343 1359 cgi_replace_parameter("header", zDefaultHeader); 1344 - }else{ 1360 + }else if( P("submit")!=0 ){ 1345 1361 textarea_attribute(0, 0, 0, "header", "header", zDefaultHeader); 1362 + }else if( P("fixbase")!=0 ){ 1363 + const char *z = db_get("header", (char*)zDefaultHeader); 1364 + char *zHead = strstr(z, "<head>"); 1365 + if( strstr(z, "<base href=")==0 && zHead!=0 ){ 1366 + char *zNew; 1367 + char *zTail = &zHead[6]; 1368 + while( fossil_isspace(zTail[0]) ) zTail++; 1369 + zNew = mprintf("%.*s\n<base href=\"$baseurl/$current_page\" />\n%s", 1370 + zHead+6-z, z, zTail); 1371 + cgi_replace_parameter("header", zNew); 1372 + db_set("header", zNew, 0); 1373 + } 1346 1374 } 1375 + 1347 1376 style_header("Edit Page Header"); 1348 - @ <form action="%s(g.zTop)/setup_header" method="post"><div> 1377 + @ <form action="%R/setup_header" method="post"><div> 1378 + 1379 + /* Make sure the header contains <base href="...">. Issue a warning 1380 + ** if it does not. */ 1381 + if( !cgi_header_contains("<base href=") ){ 1382 + @ <p class="generalError">Please add 1383 + @ <tt><base href="$baseurl/$current_page"></tt> after 1384 + @ <tt><head></tt> in the header! 1385 + @ <input type="submit" name="fixbase" value="Add <base> Now"></p> 1386 + } 1387 + 1349 1388 login_insert_csrf_secret(); 1350 1389 @ <p>Edit HTML text with embedded TH1 (a TCL dialect) that will be used to 1351 1390 @ generate the beginning of every page through start of the main 1352 1391 @ menu.</p> 1353 - textarea_attribute("", 40, 80, "header", "header", zDefaultHeader); 1392 + textarea_attribute("", 35, 80, "header", "header", zDefaultHeader); 1354 1393 @ <br /> 1355 1394 @ <input type="submit" name="submit" value="Apply Changes" /> 1356 1395 @ <input type="submit" name="clear" value="Revert To Default" /> 1357 1396 @ </div></form> 1358 1397 @ <hr /> 1359 1398 @ The default header is shown below for reference. Other examples 1360 1399 @ of headers can be seen on the <a href="setup_skin">skins page</a>. ................................................................................ 1375 1414 if( !g.perm.Setup ){ 1376 1415 login_needed(); 1377 1416 } 1378 1417 db_begin_transaction(); 1379 1418 if( P("clear")!=0 ){ 1380 1419 db_multi_exec("DELETE FROM config WHERE name='footer'"); 1381 1420 cgi_replace_parameter("footer", zDefaultFooter); 1382 - }else{ 1383 - textarea_attribute(0, 0, 0, "footer", "footer", zDefaultFooter); 1384 1421 } 1422 + 1385 1423 style_header("Edit Page Footer"); 1386 1424 @ <form action="%s(g.zTop)/setup_footer" method="post"><div> 1387 1425 login_insert_csrf_secret(); 1388 1426 @ <p>Edit HTML text with embedded TH1 (a TCL dialect) that will be used to 1389 1427 @ generate the end of every page.</p> 1390 1428 textarea_attribute("", 20, 80, "footer", "footer", zDefaultFooter); 1391 1429 @ <br /> ................................................................................ 1412 1450 if( !g.perm.Setup ){ 1413 1451 login_needed(); 1414 1452 } 1415 1453 db_begin_transaction(); 1416 1454 if( P("clear")!=0 ){ 1417 1455 db_multi_exec("DELETE FROM config WHERE name GLOB 'adunit*'"); 1418 1456 cgi_replace_parameter("adunit",""); 1419 - }else{ 1420 - textarea_attribute(0, 0, 0, "adunit", "adunit", ""); 1421 1457 } 1458 + 1422 1459 style_header("Edit Ad Unit"); 1423 1460 @ <form action="%s(g.zTop)/setup_adunit" method="post"><div> 1424 1461 login_insert_csrf_secret(); 1425 1462 @ <p>Edit HTML text for an ad unit that will be inserted after the 1426 1463 @ menu bar and above the content of every page.</p> 1427 1464 textarea_attribute("", 20, 80, "adunit", "adunit", ""); 1428 1465 @ <br />
Changes to src/skins.c.
154 154 @ table.label-value th { 155 155 @ vertical-align: top; 156 156 @ text-align: right; 157 157 @ padding: 0.2ex 2ex; 158 158 @ }'); 159 159 @ REPLACE INTO config(name,mtime,value) VALUES('header',now(),'<html> 160 160 @ <head> 161 +@ <base href="$baseurl/$current_page" /> 161 162 @ <title>$<project_name>: $<title></title> 162 163 @ <link rel="alternate" type="application/rss+xml" title="RSS Feed" 163 164 @ href="$home/timeline.rss"> 164 165 @ <link rel="stylesheet" href="$home/style.css?blackwhite" type="text/css" 165 166 @ media="screen"> 166 167 @ </head> 167 168 @ <body> ................................................................................ 356 357 @ table.label-value th { 357 358 @ vertical-align: top; 358 359 @ text-align: right; 359 360 @ padding: 0.2ex 2ex; 360 361 @ }'); 361 362 @ REPLACE INTO config(name,mtime,value) VALUES('header',now(),'<html> 362 363 @ <head> 364 +@ <base href="$baseurl/$current_page" /> 363 365 @ <title>$<project_name>: $<title></title> 364 366 @ <link rel="alternate" type="application/rss+xml" title="RSS Feed" 365 367 @ href="$home/timeline.rss"> 366 368 @ <link rel="stylesheet" href="$home/style.css?tan" type="text/css" 367 369 @ media="screen"> 368 370 @ </head> 369 371 @ <body> ................................................................................ 592 594 @ table.label-value th { 593 595 @ vertical-align: top; 594 596 @ text-align: right; 595 597 @ padding: 0.2ex 2ex; 596 598 @ }'); 597 599 @ REPLACE INTO config(name,mtime,value) VALUES('header',now(),'<html> 598 600 @ <head> 601 +@ <base href="$baseurl/$current_page" /> 599 602 @ <title>$<project_name>: $<title></title> 600 603 @ <link rel="alternate" type="application/rss+xml" title="RSS Feed" 601 604 @ href="$home/timeline.rss"> 602 605 @ <link rel="stylesheet" href="$home/style.css?black2" type="text/css" 603 606 @ media="screen"> 604 607 @ </head> 605 608 @ <body> ................................................................................ 890 893 @ } 891 894 @ 892 895 @ textarea { 893 896 @ font-size: 1em; 894 897 @ }'); 895 898 @ REPLACE INTO config(name,mtime,value) VALUES('header',now(),'<html> 896 899 @ <head> 900 +@ <base href="$baseurl/$current_page" /> 897 901 @ <title>$<project_name>: $<title></title> 898 902 @ <link rel="alternate" type="application/rss+xml" title="RSS Feed" 899 903 @ href="$home/timeline.rss"> 900 904 @ <link rel="stylesheet" href="$home/style.css?black2" type="text/css" 901 905 @ media="screen"> 902 906 @ </head> 903 907 @ <body>
Changes to src/style.c.
201 201 Th_Unstore("title"); /* Avoid collisions with ticket field names */ 202 202 cgi_destination(CGI_BODY); 203 203 g.cgiOutput = 1; 204 204 headerHasBeenGenerated = 1; 205 205 sideboxUsed = 0; 206 206 207 207 /* Make the gebi(x) function available as an almost-alias for 208 - ** document.getElementById(x) (except that it throws if the element is not found). 208 + ** document.getElementById(x) (except that it throws an error 209 + ** if the element is not found). 209 210 ** 210 211 ** Maintenance note: this function must of course be available 211 212 ** before it is called. It "should" go in the HEAD so that client 212 213 ** HEAD code can make use of it, but because the client can replace 213 214 ** the HEAD, and some fossil pages rely on gebi(), we put it here. 214 215 */ 215 216 @ <script> ................................................................................ 314 315 /* @-comment: // */ 315 316 /* 316 317 ** The default page header. 317 318 */ 318 319 const char zDefaultHeader[] = 319 320 @ <html> 320 321 @ <head> 322 +@ <base href="$baseurl/"> 321 323 @ <title>$<project_name>: $<title></title> 322 324 @ <link rel="alternate" type="application/rss+xml" title="RSS Feed" 323 325 @ href="$home/timeline.rss" /> 324 326 @ <link rel="stylesheet" href="$home/style.css?default" type="text/css" 325 327 @ media="screen" /> 326 328 @ </head> 327 329 @ <body> ................................................................................ 338 340 @ } 339 341 @ </th1></div> 340 342 @ </div> 341 343 @ <div class="mainmenu"> 342 344 @ <th1> 343 345 @ html "<a href='$home$index_page'>Home</a>\n" 344 346 @ if {[anycap jor]} { 345 -@ html "<a href='$home/timeline'>Timeline</a>\n" 347 +@ html "<a href='timeline'>Timeline</a>\n" 346 348 @ } 347 349 @ if {[hascap oh]} { 348 -@ html "<a href='$home/dir?ci=tip'>Files</a>\n" 350 +@ html "<a href='dir?ci=tip'>Files</a>\n" 349 351 @ } 350 352 @ if {[hascap o]} { 351 -@ html "<a href='$home/brlist'>Branches</a>\n" 352 -@ html "<a href='$home/taglist'>Tags</a>\n" 353 +@ html "<a href='brlist'>Branches</a>\n" 354 +@ html "<a href='taglist'>Tags</a>\n" 353 355 @ } 354 356 @ if {[hascap r]} { 355 -@ html "<a href='$home/reportlist'>Tickets</a>\n" 357 +@ html "<a href='reportlist'>Tickets</a>\n" 356 358 @ } 357 359 @ if {[hascap j]} { 358 -@ html "<a href='$home/wiki'>Wiki</a>\n" 360 +@ html "<a href='wiki'>Wiki</a>\n" 359 361 @ } 360 362 @ if {[hascap s]} { 361 -@ html "<a href='$home/setup'>Admin</a>\n" 363 +@ html "<a href='setup'>Admin</a>\n" 362 364 @ } elseif {[hascap a]} { 363 -@ html "<a href='$home/setup_ulist'>Users</a>\n" 365 +@ html "<a href='setup_ulist'>Users</a>\n" 364 366 @ } 365 367 @ if {[info exists login]} { 366 -@ html "<a href='$home/login'>Logout</a>\n" 368 +@ html "<a href='login'>Logout</a>\n" 367 369 @ } else { 368 -@ html "<a href='$home/login'>Login</a>\n" 370 +@ html "<a href='login'>Login</a>\n" 369 371 @ } 370 372 @ </th1></div> 371 373 ; 372 374 373 375 /* 374 376 ** The default page footer 375 377 */
Changes to src/wiki.c.
183 183 pWiki = manifest_get(rid, CFTYPE_WIKI); 184 184 if( pWiki ){ 185 185 zBody = pWiki->zWiki; 186 186 } 187 187 } 188 188 if( !g.isHome ){ 189 189 if( (rid && g.perm.WrWiki) || (!rid && g.perm.NewWiki) ){ 190 - style_submenu_element("Edit", "Edit Wiki Page", "%s/wikiedit?name=%T", 191 - g.zTop, zPageName); 190 + if( db_get_boolean("wysiwyg-wiki", 0) ){ 191 + style_submenu_element("Edit", "Edit Wiki Page", 192 + "%s/wikiedit?name=%T&wysiwyg=1", 193 + g.zTop, zPageName); 194 + }else{ 195 + style_submenu_element("Edit", "Edit Wiki Page", 196 + "%s/wikiedit?name=%T", 197 + g.zTop, zPageName); 198 + } 192 199 } 193 200 if( rid && g.perm.ApndWiki && g.perm.Attach ){ 194 201 style_submenu_element("Attach", "Add An Attachment", 195 202 "%s/attachadd?page=%T&from=%s/wiki%%3fname=%T", 196 203 g.zTop, zPageName, g.zTop, zPageName); 197 204 } 198 205 if( rid && g.perm.ApndWiki ){ ................................................................................ 258 265 Blob wiki; 259 266 Manifest *pWiki = 0; 260 267 const char *zPageName; 261 268 char *zHtmlPageName; 262 269 int n; 263 270 const char *z; 264 271 char *zBody = (char*)P("w"); 272 + int isWysiwyg = P("wysiwyg")!=0; 265 273 274 + if( P("edit-wysiwyg")!=0 ){ isWysiwyg = 1; zBody = 0; } 275 + if( P("edit-markup")!=0 ){ isWysiwyg = 0; zBody = 0; } 266 276 if( zBody ){ 267 - zBody = mprintf("%s", zBody); 277 + if( isWysiwyg ){ 278 + Blob body; 279 + blob_zero(&body); 280 + htmlTidy(zBody, &body); 281 + zBody = blob_str(&body); 282 + }else{ 283 + zBody = mprintf("%s", zBody); 284 + } 268 285 } 269 286 login_check_credentials(); 270 287 zPageName = PD("name",""); 271 288 if( check_name(zPageName) ) return; 272 289 isSandbox = is_sandbox(zPageName); 273 290 if( isSandbox ){ 274 291 if( !g.perm.WrWiki ){ ................................................................................ 334 351 return; 335 352 } 336 353 if( zBody==0 ){ 337 354 zBody = mprintf("<i>Empty Page</i>"); 338 355 } 339 356 zHtmlPageName = mprintf("Edit: %s", zPageName); 340 357 style_header(zHtmlPageName); 358 + blob_zero(&wiki); 359 + blob_append(&wiki, zBody, -1); 341 360 if( P("preview")!=0 ){ 342 - blob_zero(&wiki); 343 - blob_append(&wiki, zBody, -1); 344 361 @ Preview:<hr /> 345 362 wiki_convert(&wiki, 0, 0); 346 363 @ <hr /> 347 364 blob_reset(&wiki); 348 365 } 349 366 for(n=2, z=zBody; z[0]; z++){ 350 367 if( z[0]=='\n' ) n++; 351 368 } 352 369 if( n<20 ) n = 20; 353 - if( n>40 ) n = 40; 354 - @ <form method="post" action="%s(g.zTop)/wikiedit"><div> 370 + if( n>30 ) n = 30; 371 + if( !isWysiwyg ){ 372 + /* Traditional markup-only editing */ 373 + @ <form method="post" action="%s(g.zTop)/wikiedit"><div> 374 + @ <textarea name="w" class="wikiedit" cols="80" 375 + @ rows="%d(n)" wrap="virtual">%h(zBody)</textarea> 376 + @ <br /> 377 + if( db_get_boolean("wysiwyg-wiki", 0) ){ 378 + @ <input type="submit" name="edit-wysiwyg" value="Wysiwyg Editor" 379 + @ onclick='return confirm("Switching to WYSIWYG-mode\nwill erase your markup\nedits. Continue?")' /> 380 + } 381 + @ <input type="submit" name="preview" value="Preview Your Changes" /> 382 + }else{ 383 + /* Wysiwyg editing */ 384 + Blob html, temp; 385 + @ <form method="post" action="%s(g.zTop)/wikiedit" 386 + @ onsubmit="wysiwygSubmit()"><div> 387 + @ <input type="hidden" name="wysiwyg" value="1" /> 388 + blob_zero(&temp); 389 + wiki_convert(&wiki, &temp, 0); 390 + blob_zero(&html); 391 + htmlTidy(blob_str(&temp), &html); 392 + blob_reset(&temp); 393 + wysiwygEditor("w", blob_str(&html), 60, n); 394 + blob_reset(&html); 395 + @ <br /> 396 + @ <input type="submit" name="edit-markup" value="Markup Editor" 397 + @ onclick='return confirm("Switching to markup-mode\nwill erase your WYSIWYG\nedits. Continue?")' /> 398 + } 399 + @ <input type="submit" name="submit" value="Apply These Changes" /> 355 400 login_insert_csrf_secret(); 356 401 @ <input type="hidden" name="name" value="%h(zPageName)" /> 357 - @ <textarea name="w" class="wikiedit" cols="80" 358 - @ rows="%d(n)" wrap="virtual">%h(zBody)</textarea> 359 - @ <br /> 360 - @ <input type="submit" name="preview" value="Preview Your Changes" /> 361 - @ <input type="submit" name="submit" value="Apply These Changes" /> 362 - @ <input type="submit" name="cancel" value="Cancel" /> 402 + @ <input type="submit" name="cancel" value="Cancel" 403 + @ onclick='confirm("Abandon your changes?")' /> 363 404 @ </div></form> 364 405 manifest_destroy(pWiki); 406 + blob_reset(&wiki); 365 407 style_footer(); 366 408 } 367 409 368 410 /* 369 411 ** WEBPAGE: wikinew 370 412 ** URL /wikinew 371 413 ** ................................................................................ 377 419 login_check_credentials(); 378 420 if( !g.perm.NewWiki ){ 379 421 login_needed(); 380 422 return; 381 423 } 382 424 zName = PD("name",""); 383 425 if( zName[0] && wiki_name_is_wellformed((const unsigned char *)zName) ){ 384 - cgi_redirectf("wikiedit?name=%T", zName); 426 + if( db_get_boolean("wysiwyg-wiki", 0) ){ 427 + cgi_redirectf("wikiedit?name=%T&wysiwyg=1", zName); 428 + }else{ 429 + cgi_redirectf("wikiedit?name=%T", zName); 430 + } 385 431 } 386 432 style_header("Create A New Wiki Page"); 387 433 @ <p>Rules for wiki page names:</p> 388 434 well_formed_wiki_name_rules(); 389 435 @ <form method="post" action="%s(g.zTop)/wikinew"> 390 436 @ <p>Name of new wiki page: 391 437 @ <input style="width: 35;" type="text" name="name" value="%h(zName)" />
Changes to src/wikiformat.c.
1077 1077 /* Special display processing for tickets. Display the hyperlink 1078 1078 ** as crossed out if the ticket is closed. 1079 1079 */ 1080 1080 if( isClosed ){ 1081 1081 if( g.perm.Hyperlink ){ 1082 1082 blob_appendf(p->pOut, 1083 1083 "%z<span class=\"wikiTagCancelled\">[", 1084 - href("%R/info/%s",zTarget) 1084 + href("info/%s",zTarget) 1085 1085 ); 1086 1086 zTerm = "]</span></a>"; 1087 1087 }else{ 1088 1088 blob_appendf(p->pOut,"<span class=\"wikiTagCancelled\">["); 1089 1089 zTerm = "]</span>"; 1090 1090 } 1091 1091 }else{ 1092 1092 if( g.perm.Hyperlink ){ 1093 - blob_appendf(p->pOut,"%z[", href("%R/info/%s", zTarget)); 1093 + blob_appendf(p->pOut,"%z[", href("info/%s", zTarget)); 1094 1094 zTerm = "]</a>"; 1095 1095 }else{ 1096 1096 blob_appendf(p->pOut, "["); 1097 1097 zTerm = "]"; 1098 1098 } 1099 1099 } 1100 1100 }else if( !in_this_repo(zTarget) ){ 1101 1101 blob_appendf(p->pOut, "<span class=\"brokenlink\">[", zTarget); 1102 1102 zTerm = "]</span>"; 1103 1103 }else if( g.perm.Hyperlink ){ 1104 - blob_appendf(p->pOut, "%z[",href("%R/info/%s", zTarget)); 1104 + blob_appendf(p->pOut, "%z[",href("info/%s", zTarget)); 1105 1105 zTerm = "]</a>"; 1106 1106 } 1107 1107 }else if( strlen(zTarget)>=10 && fossil_isdigit(zTarget[0]) && zTarget[4]=='-' 1108 1108 && db_int(0, "SELECT datetime(%Q) NOT NULL", zTarget) ){ 1109 - blob_appendf(p->pOut, "<a href=\"%s/timeline?c=%T\">", g.zTop, zTarget); 1109 + blob_appendf(p->pOut, "<a href=\"timeline?c=%T\">", zTarget); 1110 1110 }else if( strncmp(zTarget, "wiki:", 5)==0 1111 1111 && wiki_name_is_wellformed((const unsigned char*)zTarget) ){ 1112 1112 zTarget += 5; 1113 - blob_appendf(p->pOut, "<a href=\"%s/wiki?name=%T\">", g.zTop, zTarget); 1113 + blob_appendf(p->pOut, "<a href=\"wiki?name=%T\">", zTarget); 1114 1114 }else if( wiki_name_is_wellformed((const unsigned char *)zTarget) ){ 1115 - blob_appendf(p->pOut, "<a href=\"%s/wiki?name=%T\">", g.zTop, zTarget); 1115 + blob_appendf(p->pOut, "<a href=\"wiki?name=%T\">", zTarget); 1116 1116 }else{ 1117 1117 blob_appendf(p->pOut, "<span class=\"brokenlink\">[%h]</span>", zTarget); 1118 1118 zTerm = ""; 1119 1119 } 1120 1120 assert( strlen(zTerm)<nClose ); 1121 1121 sqlite3_snprintf(nClose, zClose, "%s", zTerm); 1122 1122 } ................................................................................ 1745 1745 break; 1746 1746 } 1747 1747 } 1748 1748 z += n; 1749 1749 } 1750 1750 free(renderer.aStack); 1751 1751 } 1752 + 1753 +/* 1754 +** Get the next HTML token. 1755 +** 1756 +** z points to the start of a token. Return the number of 1757 +** characters in that token. 1758 +*/ 1759 +static int nextHtmlToken(const char *z){ 1760 + int n; 1761 + if( z[0]=='<' ){ 1762 + n = markupLength(z); 1763 + if( n<=0 ) n = 1; 1764 + }else if( fossil_isspace(z[0]) ){ 1765 + for(n=1; z[n] && fossil_isspace(z[n]); n++){} 1766 + }else{ 1767 + for(n=1; z[n] && z[n]!='<' && !fossil_isspace(z[n]); n++){} 1768 + } 1769 + return n; 1770 +} 1771 + 1772 +/* 1773 +** Return true if z[] is the word zWord in any case. 1774 +*/ 1775 +static int isWord(const char *z, const char *zWord, int nWord){ 1776 + return fossil_strnicmp(z, zWord, nWord)==0 && !fossil_isalpha(z[nWord]); 1777 +} 1778 + 1779 +/* 1780 +** Attempt to reformat messy HTML to be easily readable by humans. 1781 +** 1782 +** * Try to keep lines less than 80 characters in length 1783 +** * Collapse white space into a single space 1784 +** * Put a blank line before: 1785 +** <blockquote><center><code><hN><p><pre><table> 1786 +** * Put a newline after <br> and <hr> 1787 +** * Start each of the following elements on a new line: 1788 +** <address><cite><dd><div><dl><dt><li><ol><samp> 1789 +** <tbody><td><tfoot><th><thead><tr><ul> 1790 +** 1791 +** Except, do not do any reformatting inside of <pre>...</pre> 1792 +*/ 1793 +void htmlTidy(const char *zIn, Blob *pOut){ 1794 + int n; 1795 + int nPre = 0; 1796 + int iCur = 0; 1797 + int wantSpace = 0; 1798 + int omitSpace = 1; 1799 + while( zIn[0] ){ 1800 + n = nextHtmlToken(zIn); 1801 + if( zIn[0]=='<' && n>1 ){ 1802 + int i, j; 1803 + int isCloseTag; 1804 + int eTag; 1805 + int eType; 1806 + char zTag[32]; 1807 + isCloseTag = zIn[1]=='/'; 1808 + for(i=0, j=1+isCloseTag; i<30 && fossil_isalnum(zIn[j]); i++, j++){ 1809 + zTag[i] = fossil_tolower(zIn[j]); 1810 + } 1811 + zTag[i] = 0; 1812 + eTag = findTag(zTag); 1813 + eType = aMarkup[eTag].iType; 1814 + if( eTag==MARKUP_PRE ){ 1815 + if( isCloseTag ){ 1816 + nPre--; 1817 + blob_append(pOut, zIn, n); 1818 + zIn += n; 1819 + if( nPre==0 ){ blob_append(pOut, "\n", 1); iCur = 0; } 1820 + continue; 1821 + }else{ 1822 + if( iCur && nPre==0 ){ blob_append(pOut, "\n", 1); iCur = 0; } 1823 + nPre++; 1824 + } 1825 + }else if( eType & (MUTYPE_BLOCK|MUTYPE_TABLE) ){ 1826 + if( !isCloseTag && nPre==0 && blob_size(pOut)>0 ){ 1827 + blob_append(pOut, "\n\n", 1 + (iCur>0)); 1828 + iCur = 0; 1829 + } 1830 + wantSpace = 0; 1831 + omitSpace = 1; 1832 + }else if( (eType & (MUTYPE_LIST|MUTYPE_LI|MUTYPE_TR|MUTYPE_TD))!=0 1833 + || eTag==MARKUP_HR 1834 + ){ 1835 + if( nPre==0 && (!isCloseTag || (eType&MUTYPE_LIST)!=0) && iCur>0 ){ 1836 + blob_append(pOut, "\n", 1); 1837 + iCur = 0; 1838 + } 1839 + wantSpace = 0; 1840 + omitSpace = 1; 1841 + } 1842 + if( wantSpace && nPre==0 ){ 1843 + if( iCur+n+1>=80 ){ 1844 + blob_append(pOut, "\n", 1); 1845 + iCur = 0; 1846 + }else{ 1847 + blob_append(pOut, " ", 1); 1848 + iCur++; 1849 + } 1850 + } 1851 + blob_append(pOut, zIn, n); 1852 + iCur += n; 1853 + wantSpace = 0; 1854 + if( eTag==MARKUP_BR || eTag==MARKUP_HR ){ 1855 + blob_append(pOut, "\n", 1); 1856 + iCur = 0; 1857 + } 1858 + }else if( fossil_isspace(zIn[0]) ){ 1859 + if( nPre ){ 1860 + blob_append(pOut, zIn, n); 1861 + }else{ 1862 + wantSpace = !omitSpace; 1863 + } 1864 + }else{ 1865 + if( wantSpace && nPre==0 ){ 1866 + if( iCur+n+1>=80 ){ 1867 + blob_append(pOut, "\n", 1); 1868 + iCur = 0; 1869 + }else{ 1870 + blob_append(pOut, " ", 1); 1871 + iCur++; 1872 + } 1873 + } 1874 + blob_append(pOut, zIn, n); 1875 + iCur += n; 1876 + wantSpace = omitSpace = 0; 1877 + } 1878 + zIn += n; 1879 + } 1880 + if( iCur ) blob_append(pOut, "\n", 1); 1881 +} 1882 + 1883 +/* 1884 +** COMMAND: test-html-tidy 1885 +*/ 1886 +void test_html_tidy(void){ 1887 + Blob in, out; 1888 + int i; 1889 + 1890 + for(i=2; i<g.argc; i++){ 1891 + blob_read_from_file(&in, g.argv[i]); 1892 + blob_zero(&out); 1893 + htmlTidy(blob_str(&in), &out); 1894 + blob_reset(&in); 1895 + fossil_puts(blob_str(&out), 0); 1896 + blob_reset(&out); 1897 + } 1898 +}
Added src/wysiwyg.c.
1 +/* 2 +** Copyright (c) 2012 D. Richard Hipp 3 +** 4 +** This program is free software; you can redistribute it and/or 5 +** modify it under the terms of the Simplified BSD License (also 6 +** known as the "2-Clause License" or "FreeBSD License".) 7 +** 8 +** This program is distributed in the hope that it will be useful, 9 +** but without any warranty; without even the implied warranty of 10 +** merchantability or fitness for a particular purpose. 11 +** 12 +** Author contact information: 13 +** drh@hwaci.com 14 +** http://www.hwaci.com/drh/ 15 +** 16 +******************************************************************************* 17 +** 18 +** This file contains code that generates WYSIWYG text editors on 19 +** web pages. 20 +*/ 21 +#include <assert.h> 22 +#include <ctype.h> 23 +#include "config.h" 24 +#include "wysiwyg.h" 25 + 26 + 27 +/* 28 +** Output code for a WYSIWYG editor. The caller must have already generated 29 +** the <form> that will contain the editor, and the call must generate the 30 +** corresponding </form> after this routine returns. The caller must include 31 +** an onsubmit= attribute on the <form> element that invokes the 32 +** wysiwygSubmit() function. 33 +** 34 +** There can only be a single WYSIWYG editor per frame. 35 +*/ 36 +void wysiwygEditor( 37 + const char *zId, /* ID for this editor */ 38 + const char *zContent, /* Initial content (HTML) */ 39 + int w, int h /* Initial width and height */ 40 +){ 41 + 42 + @ <style type="text/css"> 43 + @ .intLink { cursor: pointer; } 44 + @ img.intLink { border: 0; } 45 + @ #wysiwygBox { 46 + @ border: 1px #000000 solid; 47 + @ padding: 12px; 48 + @ } 49 + @ #editMode label { cursor: pointer; } 50 + @ </style> 51 + 52 + @ <input id="wysiwygValue" type="hidden" name="%s(zId)"> 53 + @ <div id="editModeDiv">Edit mode: 54 + @ <select id="editMode" size=1 onchange="setDocMode(this.selectedIndex)"> 55 + @ <option value="0">WYSIWYG</option> 56 + @ <option value="1">Raw HTML</option> 57 + @ </select></div> 58 + @ <div id="toolBar1"> 59 + @ <select onchange="formatDoc('formatblock',this[this.selectedIndex].value); 60 + @ this.selectedIndex=0;"> 61 + @ <option selected>- formatting -</option> 62 + @ <option value="h1">Title 1 <h1></option> 63 + @ <option value="h2">Title 2 <h2></option> 64 + @ <option value="h3">Title 3 <h3></option> 65 + @ <option value="h4">Title 4 <h4></option> 66 + @ <option value="h5">Title 5 <h5></option> 67 + @ <option value="h6">Subtitle <h6></option> 68 + @ <option value="p">Paragraph <p></option> 69 + @ <option value="pre">Preformatted <pre></option> 70 + @ </select> 71 + @ <select onchange="formatDoc('fontname',this[this.selectedIndex].value); 72 + @ this.selectedIndex=0;"> 73 + @ <option class="heading" selected>- font -</option> 74 + @ <option>Arial</option> 75 + @ <option>Arial Black</option> 76 + @ <option>Courier New</option> 77 + @ <option>Times New Roman</option> 78 + @ </select> 79 + @ <select onchange="formatDoc('fontsize',this[this.selectedIndex].value); 80 + @ this.selectedIndex=0;"> 81 + @ <option class="heading" selected>- size -</option> 82 + @ <option value="1">Very small</option> 83 + @ <option value="2">A bit small</option> 84 + @ <option value="3">Normal</option> 85 + @ <option value="4">Medium-large</option> 86 + @ <option value="5">Big</option> 87 + @ <option value="6">Very big</option> 88 + @ <option value="7">Maximum</option> 89 + @ </select> 90 + @ <select onchange="formatDoc('forecolor',this[this.selectedIndex].value); 91 + @ this.selectedIndex=0;"> 92 + @ <option class="heading" selected>- color -</option> 93 + @ <option value="red">Red</option> 94 + @ <option value="blue">Blue</option> 95 + @ <option value="green">Green</option> 96 + @ <option value="black">Black</option> 97 + @ </select> 98 + @ </div> 99 + @ <div id="toolBar2"> 100 + @ <img class="intLink" title="Undo" onclick="formatDoc('undo');" 101 + @ src="data:image/gif;base64,R0lGODlhFgAWAOMKADljwliE33mOrpGjuYKl8aezxqPD+7 102 + @ /I19DV3NHa7P///////////////////////yH5BAEKAA8ALAAAAAAWABYAAARR8MlJq704680 103 + @ 7TkaYeJJBnES4EeUJvIGapWYAC0CsocQ7SDlWJkAkCA6ToMYWIARGQF3mRQVIEjkkSVLIbSfE 104 + @ whdRIH4fh/DZMICe3/C4nBQBADs="> 105 + 106 + @ <img class="intLink" title="Redo" onclick="formatDoc('redo');" 107 + @ src="data:image/gif;base64,R0lGODlhFgAWAMIHAB1ChDljwl9vj1iE34Kl8aPD+7/I1/ 108 + @ ///yH5BAEKAAcALAAAAAAWABYAAANKeLrc/jDKSesyphi7SiEgsVXZEATDICqBVJjpqWZt9Na 109 + @ EDNbQK1wCQsxlYnxMAImhyDoFAElJasRRvAZVRqqQXUy7Cgx4TC6bswkAOw=="> 110 + 111 + @ <img class="intLink" title="Remove formatting" 112 + @ onclick="formatDoc('removeFormat')" 113 + @ src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AA 114 + @ AABGdBTUEAALGPC/xhBQAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAOxAAADsQBlSsOGwA 115 + @ AAAd0SU1FB9oECQMCKPI8CIIAAAAIdEVYdENvbW1lbnQA9syWvwAAAuhJREFUOMtjYBgFxAB5 116 + @ 01ZWBvVaL2nHnlmk6mXCJbF69zU+Hz/9fB5O1lx+bg45qhl8/fYr5it3XrP/YWTUvvvk3VeqG 117 + @ Xz70TvbJy8+Wv39+2/Hz19/mGwjZzuTYjALuoBv9jImaXHeyD3H7kU8fPj2ICML8z92dlbtMz 118 + @ deiG3fco7J08foH1kurkm3E9iw54YvKwuTuom+LPt/BgbWf3//sf37/1/c02cCG1lB8f//f95 119 + @ DZx74MTMzshhoSm6szrQ/a6Ir/Z2RkfEjBxuLYFpDiDi6Af///2ckaHBp7+7wmavP5n76+P2C 120 + @ lrLIYl8H9W36auJCbCxM4szMTJac7Kza////R3H1w2cfWAgafPbqs5g7D95++/P1B4+ECK8tA 121 + @ wMDw/1H7159+/7r7ZcvPz4fOHbzEwMDwx8GBgaGnNatfHZx8zqrJ+4VJBh5CQEGOySEua/v3n 122 + @ 7hXmqI8WUGBgYGL3vVG7fuPK3i5GD9/fja7ZsMDAzMG/Ze52mZeSj4yu1XEq/ff7W5dvfVAS1 123 + @ lsXc4Db7z8C3r8p7Qjf///2dnZGxlqJuyr3rPqQd/Hhyu7oSpYWScylDQsd3kzvnH738wMDzj 124 + @ 5GBN1VIWW4c3KDon7VOvm7S3paB9u5qsU5/x5KUnlY+eexQbkLNsErK61+++VnAJcfkyMTIwf 125 + @ fj0QwZbJDKjcETs1Y8evyd48toz8y/ffzv//vPP4veffxpX77z6l5JewHPu8MqTDAwMDLzyrj 126 + @ b/mZm0JcT5Lj+89+Ybm6zz95oMh7s4XbygN3Sluq4Mj5K8iKMgP4f0////fv77//8nLy+7MCc 127 + @ XmyYDAwODS9jM9tcvPypd35pne3ljdjvj26+H2dhYpuENikgfvQeXNmSl3tqepxXsqhXPyc66 128 + @ 6s+fv1fMdKR3TK72zpix8nTc7bdfhfkEeVbC9KhbK/9iYWHiErbu6MWbY/7//8/4//9/pgOnH 129 + @ 6jGVazvFDRtq2VgiBIZrUTIBgCk+ivHvuEKwAAAAABJRU5ErkJggg=="> 130 + 131 + @ <img class="intLink" title="Bold" onclick="formatDoc('bold');" 132 + @ src="data:image/gif;base64,R0lGODlhFgAWAID/AMDAwAAAACH5BAEAAAAALAAAAAAWAB 133 + @ YAQAInhI+pa+H9mJy0LhdgtrxzDG5WGFVk6aXqyk6Y9kXvKKNuLbb6zgMFADs=" /> 134 + 135 + @ <img class="intLink" title="Italic" onclick="formatDoc('italic');" 136 + @ src="data:image/gif;base64,R0lGODlhFgAWAKEDAAAAAF9vj5WIbf///yH5BAEAAAMALA 137 + @ AAAAAWABYAAAIjnI+py+0Po5x0gXvruEKHrF2BB1YiCWgbMFIYpsbyTNd2UwAAOw==" /> 138 + 139 + @ <img class="intLink" title="Underline" onclick="formatDoc('underline');" 140 + @ src="data:image/gif;base64,R0lGODlhFgAWAKECAAAAAF9vj////////yH5BAEAAAIALA 141 + @ AAAAAWABYAAAIrlI+py+0Po5zUgAsEzvEeL4Ea15EiJJ5PSqJmuwKBEKgxVuXWtun+DwxCCgA 142 + @ 7" /> 143 + 144 + @ <img class="intLink" title="Left align" 145 + @ onclick="formatDoc('justifyleft');" 146 + @ src="data:image/gif;base64,R0lGODlhFgAWAID/AMDAwAAAACH5BAEAAAAALAAAAAAWAB 147 + @ YAQAIghI+py+0Po5y02ouz3jL4D4JMGELkGYxo+qzl4nKyXAAAOw==" /> 148 + 149 + @ <img class="intLink" title="Center align" 150 + @ onclick="formatDoc('justifycenter');" 151 + @ src="data:image/gif;base64,R0lGODlhFgAWAID/AMDAwAAAACH5BAEAAAAALAAAAAAWAB 152 + @ YAQAIfhI+py+0Po5y02ouz3jL4D4JOGI7kaZ5Bqn4sycVbAQA7" /> 153 + 154 + @ <img class="intLink" title="Right align" 155 + @ onclick="formatDoc('justifyright');" 156 + @ src="data:image/gif;base64,R0lGODlhFgAWAID/AMDAwAAAACH5BAEAAAAALAAAAAAWAB 157 + @ YAQAIghI+py+0Po5y02ouz3jL4D4JQGDLkGYxouqzl43JyVgAAOw==" /> 158 + @ <img class="intLink" title="Numbered list" 159 + @ onclick="formatDoc('insertorderedlist');" 160 + @ src="data:image/gif;base64,R0lGODlhFgAWAMIGAAAAADljwliE35GjuaezxtHa7P//// 161 + @ ///yH5BAEAAAcALAAAAAAWABYAAAM2eLrc/jDKSespwjoRFvggCBUBoTFBeq6QIAysQnRHaEO 162 + @ zyaZ07Lu9lUBnC0UGQU1K52s6n5oEADs=" /> 163 + 164 + @ <img class="intLink" title="Dotted list" 165 + @ onclick="formatDoc('insertunorderedlist');" 166 + @ src="data:image/gif;base64,R0lGODlhFgAWAMIGAAAAAB1ChF9vj1iE33mOrqezxv//// 167 + @ ///yH5BAEAAAcALAAAAAAWABYAAAMyeLrc/jDKSesppNhGRlBAKIZRERBbqm6YtnbfMY7lud6 168 + @ 4UwiuKnigGQliQuWOyKQykgAAOw==" /> 169 + 170 + @ <img class="intLink" title="Quote" 171 + @ onclick="formatDoc('formatblock','blockquote');" 172 + @ src="data:image/gif;base64,R0lGODlhFgAWAIQXAC1NqjFRjkBgmT9nqUJnsk9xrFJ7u2 173 + @ R9qmKBt1iGzHmOrm6Sz4OXw3Odz4Cl2ZSnw6KxyqO306K63bG70bTB0rDI3bvI4P///////// 174 + @ //////////////////////////yH5BAEKAB8ALAAAAAAWABYAAAVP4CeOZGmeaKqubEs2Cekk 175 + @ ErvEI1zZuOgYFlakECEZFi0GgTGKEBATFmJAVXweVOoKEQgABB9IQDCmrLpjETrQQlhHjINrT 176 + @ q/b7/i8fp8PAQA7" /> 177 + 178 + @ <img class="intLink" title="Add indentation" 179 + @ onclick="formatDoc('outdent');" 180 + @ src="data:image/gif;base64,R0lGODlhFgAWAMIHAAAAADljwliE35GjuaezxtDV3NHa7P 181 + @ ///yH5BAEAAAcALAAAAAAWABYAAAM2eLrc/jDKCQG9F2i7u8agQgyK1z2EIBil+TWqEMxhMcz 182 + @ sYVJ3e4ahk+sFnAgtxSQDqWw6n5cEADs=" /> 183 + 184 + @ <img class="intLink" title="Delete indentation" 185 + @ onclick="formatDoc('indent');" 186 + @ src="data:image/gif;base64,R0lGODlhFgAWAOMIAAAAADljwl9vj1iE35GjuaezxtDV3N 187 + @ Ha7P///////////////////////////////yH5BAEAAAgALAAAAAAWABYAAAQ7EMlJq704650 188 + @ B/x8gemMpgugwHJNZXodKsO5oqUOgo5KhBwWESyMQsCRDHu9VOyk5TM9zSpFSr9gsJwIAOw=="> 189 + 190 + @ <img class="intLink" title="Hyperlink" 191 + @ onclick="var sLnk=prompt('Target URL:',''); 192 + @ if(sLnk&&sLnk!=''){formatDoc('createlink',sLnk)}" 193 + @ src="data:image/gif;base64,R0lGODlhFgAWAOMKAB1ChDRLY19vj3mOrpGjuaezxrCztb 194 + @ /I19Ha7Pv8/f///////////////////////yH5BAEKAA8ALAAAAAAWABYAAARY8MlJq704682 195 + @ 7/2BYIQVhHg9pEgVGIklyDEUBy/RlE4FQF4dCj2AQXAiJQDCWQCAEBwIioEMQBgSAFhDAGghG 196 + @ i9XgHAhMNoSZgJkJei33UESv2+/4vD4TAQA7" /> 197 + 198 +#if 0 /* Cut/Copy/Paste requires special browser permissions for security 199 + ** reasons. So omit these buttons */ 200 + @ <img class="intLink" title="Cut" 201 + @ onclick="formatDoc('cut');" 202 + @ src="data:image/gif;base64,R0lGODlhFgAWAIQSAB1ChBFNsRJTySJYwjljwkxwl19vj1 203 + @ dusYODhl6MnHmOrpqbmpGjuaezxrCztcDCxL/I18rL1P///////////////////////////// 204 + @ //////////////////////////yH5BAEAAB8ALAAAAAAWABYAAAVu4CeOZGmeaKqubDs6TNnE 205 + @ bGNApNG0kbGMi5trwcA9GArXh+FAfBAw5UexUDAQESkRsfhJPwaH4YsEGAAJGisRGAQY7UCC9 206 + @ ZAXBB+74LGCRxIEHwAHdWooDgGJcwpxDisQBQRjIgkDCVlfmZqbmiEAOw==" /> 207 + 208 + @ <img class="intLink" title="Copy" 209 + @ onclick="formatDoc('copy');" 210 + @ src="data:image/gif;base64,R0lGODlhFgAWAIQcAB1ChBFNsTRLYyJYwjljwl9vj1iE31 211 + @ iGzF6MnHWX9HOdz5GjuYCl2YKl8ZOt4qezxqK63aK/9KPD+7DI3b/I17LM/MrL1MLY9NHa7OP 212 + @ s++bx/Pv8/f///////////////yH5BAEAAB8ALAAAAAAWABYAAAWG4CeOZGmeaKqubOum1SQ/ 213 + @ kPVOW749BeVSus2CgrCxHptLBbOQxCSNCCaF1GUqwQbBd0JGJAyGJJiobE+LnCaDcXAaEoxhQ 214 + @ ACgNw0FQx9kP+wmaRgYFBQNeAoGihCAJQsCkJAKOhgXEw8BLQYciooHf5o7EA+kC40qBKkAAA 215 + @ Grpy+wsbKzIiEAOw==" /> 216 + 217 + @ <img class="intLink" title="Paste" 218 + @ onclick="formatDoc('paste');" 219 + @ src="data:image/gif;base64,R0lGODlhFgAWAIQUAD04KTRLY2tXQF9vj414WZWIbXmOrp 220 + @ qbmpGjudClFaezxsa0cb/I1+3YitHa7PrkIPHvbuPs+/fvrvv8/f///////////////////// 221 + @ //////////////////////////yH5BAEAAB8ALAAAAAAWABYAAAWN4CeOZGmeaKqubGsusPvB 222 + @ SyFJjVDs6nJLB0khR4AkBCmfsCGBQAoCwjF5gwquVykSFbwZE+AwIBV0GhFog2EwIDchjwRiQ 223 + @ o9E2Fx4XD5R+B0DDAEnBXBhBhN2DgwDAQFjJYVhCQYRfgoIDGiQJAWTCQMRiwwMfgicnVcAAA 224 + @ MOaK+bLAOrtLUyt7i5uiUhADs=" /> 225 +#endif 226 + 227 + @ </div> 228 + @ <div id="wysiwygBox" 229 + @ style="resize:both; overflow:auto; width: %d(w)em; height: %d(h)em;" 230 + @ contenteditable="true">%s(zContent)</div> 231 + @ <script> 232 + @ var oDoc; 233 + @ 234 + @ /* Initialize the document editor */ 235 + @ function initDoc() { 236 + @ oDoc = document.getElementById("wysiwygBox"); 237 + @ if (!isWysiwyg()) { setDocMode(true); } 238 + @ } 239 + @ 240 + @ /* Return true if the document editor is in WYSIWYG mode. Return 241 + @ ** false if it is in Markup mode */ 242 + @ function isWysiwyg() { 243 + @ return document.getElementById("editMode").selectedIndex==0; 244 + @ } 245 + @ 246 + @ /* Invoke this routine prior to submitting the HTML content back 247 + @ ** to the server */ 248 + @ function wysiwygSubmit() { 249 + @ if(oDoc.style.whiteSpace=="pre-wrap"){setDocMode(0);} 250 + @ document.getElementById("wysiwygValue").value=oDoc.innerHTML; 251 + @ } 252 + @ 253 + @ /* Run the editing command if in WYSIWYG mode */ 254 + @ function formatDoc(sCmd, sValue) { 255 + @ if (isWysiwyg()){ 256 + @ document.execCommand("styleWithCSS", false, false); 257 + @ document.execCommand(sCmd, false, sValue); 258 + @ oDoc.focus(); 259 + @ } 260 + @ } 261 + @ 262 + @ /* Change the editing mode. Convert to markup if the argument 263 + @ ** is true and wysiwyg if the argument is false. */ 264 + @ function setDocMode(bToMarkup) { 265 + @ var oContent; 266 + @ if (bToMarkup) { 267 + @ /* WYSIWYG -> Markup */ 268 + @ var linebreak = new RegExp("</p><p>","ig"); 269 + @ oContent = document.createTextNode( 270 + @ oDoc.innerHTML.replace(linebreak,"</p>\n\n<p>")); 271 + @ oDoc.innerHTML = ""; 272 + @ oDoc.style.whiteSpace = "pre-wrap"; 273 + @ oDoc.appendChild(oContent); 274 + @ document.getElementById("toolBar1").style.visibility="hidden"; 275 + @ document.getElementById("toolBar2").style.visibility="hidden"; 276 + @ } else { 277 + @ /* Markup -> WYSIWYG */ 278 + @ if (document.all) { 279 + @ oDoc.innerHTML = oDoc.innerText; 280 + @ } else { 281 + @ oContent = document.createRange(); 282 + @ oContent.selectNodeContents(oDoc.firstChild); 283 + @ oDoc.innerHTML = oContent.toString(); 284 + @ } 285 + @ oDoc.style.whiteSpace = "normal"; 286 + @ document.getElementById("toolBar1").style.visibility="visible"; 287 + @ document.getElementById("toolBar2").style.visibility="visible"; 288 + @ } 289 + @ oDoc.focus(); 290 + @ } 291 + @ initDoc(); 292 + @ </script> 293 + 294 +}
Changes to win/Makefile.dmc.
24 24 CFLAGS = -o 25 25 BCC = $(DMDIR)\bin\dmc $(CFLAGS) 26 26 TCC = $(DMDIR)\bin\dmc $(CFLAGS) $(DMCDEF) $(SSL) $(INCL) 27 27 LIBS = $(DMDIR)\extra\lib\ zlib wsock32 advapi32 28 28 29 29 SQLITE_OPTIONS = -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_STAT3 -Dlocaltime=fossil_localtime -DSQLITE_ENABLE_LOCKING_STYLE=0 30 30 31 -SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c glob_.c graph_.c gzip_.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_tag_.c json_timeline_.c json_user_.c json_wiki_.c leaf_.c login_.c main_.c manifest_.c md5_.c merge_.c merge3_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c update_.c url_.c user_.c verify_.c vfile_.c wiki_.c wikiformat_.c winhttp_.c xfer_.c xfersetup_.c zip_.c 31 +SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c glob_.c graph_.c gzip_.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_tag_.c json_timeline_.c json_user_.c json_wiki_.c leaf_.c login_.c main_.c manifest_.c md5_.c merge_.c merge3_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c update_.c url_.c user_.c verify_.c vfile_.c wiki_.c wikiformat_.c winhttp_.c wysiwyg_.c xfer_.c xfersetup_.c zip_.c 32 32 33 -OBJ = $(OBJDIR)\add$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$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)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$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_tag$O $(OBJDIR)\json_timeline$O $(OBJDIR)\json_user$O $(OBJDIR)\json_wiki$O $(OBJDIR)\leaf$O $(OBJDIR)\login$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\rebuild$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\setup$O $(OBJDIR)\sha1$O $(OBJDIR)\shun$O $(OBJDIR)\skins$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winhttp$O $(OBJDIR)\xfer$O $(OBJDIR)\xfersetup$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O 33 +OBJ = $(OBJDIR)\add$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$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)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$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_tag$O $(OBJDIR)\json_timeline$O $(OBJDIR)\json_user$O $(OBJDIR)\json_wiki$O $(OBJDIR)\leaf$O $(OBJDIR)\login$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\rebuild$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\setup$O $(OBJDIR)\sha1$O $(OBJDIR)\shun$O $(OBJDIR)\skins$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$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 34 34 35 35 36 36 RC=$(DMDIR)\bin\rcc 37 37 RCFLAGS=-32 -w1 -I$(SRCDIR) /D__DMC__ 38 38 39 39 APPNAME = $(OBJDIR)\fossil$(E) 40 40 ................................................................................ 44 44 cd $(OBJDIR) 45 45 $(DMDIR)\bin\link @link 46 46 47 47 $(OBJDIR)\fossil.res: $B\win\fossil.rc 48 48 $(RC) $(RCFLAGS) -o$@ $** 49 49 50 50 $(OBJDIR)\link: $B\win\Makefile.dmc $(OBJDIR)\fossil.res 51 - +echo add allrepo attach bag bisect blob branch browse captcha cgi checkin checkout clearsign clone comformat configure content db delta deltacmd descendants diff diffcmd doc encode event export file finfo glob graph gzip 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_tag json_timeline json_user json_wiki leaf login main manifest md5 merge merge3 name path pivot popen pqueue printf rebuild report rss schema search setup sha1 shun skins sqlcmd stash stat style sync tag tar th_main timeline tkt tktsetup undo update url user verify vfile wiki wikiformat winhttp xfer xfersetup zip shell sqlite3 th th_lang > $@ 51 + +echo add allrepo attach bag bisect blob branch browse captcha cgi checkin checkout clearsign clone comformat configure content db delta deltacmd descendants diff diffcmd doc encode event export file finfo glob graph gzip 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_tag json_timeline json_user json_wiki leaf login main manifest md5 merge merge3 name path pivot popen pqueue printf rebuild report rss schema search setup sha1 shun skins sqlcmd stash stat style sync tag tar th_main timeline tkt tktsetup undo update url user verify vfile wiki wikiformat winhttp wysiwyg xfer xfersetup zip shell sqlite3 th th_lang > $@ 52 52 +echo fossil >> $@ 53 53 +echo fossil >> $@ 54 54 +echo $(LIBS) >> $@ 55 55 +echo. >> $@ 56 56 +echo fossil >> $@ 57 57 58 58 translate$E: $(SRCDIR)\translate.c ................................................................................ 671 671 +translate$E $** > $@ 672 672 673 673 $(OBJDIR)\winhttp$O : winhttp_.c winhttp.h 674 674 $(TCC) -o$@ -c winhttp_.c 675 675 676 676 winhttp_.c : $(SRCDIR)\winhttp.c 677 677 +translate$E $** > $@ 678 + 679 +$(OBJDIR)\wysiwyg$O : wysiwyg_.c wysiwyg.h 680 + $(TCC) -o$@ -c wysiwyg_.c 681 + 682 +wysiwyg_.c : $(SRCDIR)\wysiwyg.c 683 + +translate$E $** > $@ 678 684 679 685 $(OBJDIR)\xfer$O : xfer_.c xfer.h 680 686 $(TCC) -o$@ -c xfer_.c 681 687 682 688 xfer_.c : $(SRCDIR)\xfer.c 683 689 +translate$E $** > $@ 684 690 ................................................................................ 691 697 $(OBJDIR)\zip$O : zip_.c zip.h 692 698 $(TCC) -o$@ -c zip_.c 693 699 694 700 zip_.c : $(SRCDIR)\zip.c 695 701 +translate$E $** > $@ 696 702 697 703 headers: makeheaders$E page_index.h VERSION.h 698 - +makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.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 db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.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_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 login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h path_.c:path.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winhttp_.c:winhttp.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 704 + +makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.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 db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.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_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 login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h path_.c:path.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.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 699 705 @copy /Y nul: headers
Changes to win/Makefile.mingw.
263 263 $(SRCDIR)/url.c \ 264 264 $(SRCDIR)/user.c \ 265 265 $(SRCDIR)/verify.c \ 266 266 $(SRCDIR)/vfile.c \ 267 267 $(SRCDIR)/wiki.c \ 268 268 $(SRCDIR)/wikiformat.c \ 269 269 $(SRCDIR)/winhttp.c \ 270 + $(SRCDIR)/wysiwyg.c \ 270 271 $(SRCDIR)/xfer.c \ 271 272 $(SRCDIR)/xfersetup.c \ 272 273 $(SRCDIR)/zip.c 273 274 274 275 TRANS_SRC = \ 275 276 $(OBJDIR)/add_.c \ 276 277 $(OBJDIR)/allrepo_.c \ ................................................................................ 362 363 $(OBJDIR)/url_.c \ 363 364 $(OBJDIR)/user_.c \ 364 365 $(OBJDIR)/verify_.c \ 365 366 $(OBJDIR)/vfile_.c \ 366 367 $(OBJDIR)/wiki_.c \ 367 368 $(OBJDIR)/wikiformat_.c \ 368 369 $(OBJDIR)/winhttp_.c \ 370 + $(OBJDIR)/wysiwyg_.c \ 369 371 $(OBJDIR)/xfer_.c \ 370 372 $(OBJDIR)/xfersetup_.c \ 371 373 $(OBJDIR)/zip_.c 372 374 373 375 OBJ = \ 374 376 $(OBJDIR)/add.o \ 375 377 $(OBJDIR)/allrepo.o \ ................................................................................ 461 463 $(OBJDIR)/url.o \ 462 464 $(OBJDIR)/user.o \ 463 465 $(OBJDIR)/verify.o \ 464 466 $(OBJDIR)/vfile.o \ 465 467 $(OBJDIR)/wiki.o \ 466 468 $(OBJDIR)/wikiformat.o \ 467 469 $(OBJDIR)/winhttp.o \ 470 + $(OBJDIR)/wysiwyg.o \ 468 471 $(OBJDIR)/xfer.o \ 469 472 $(OBJDIR)/xfersetup.o \ 470 473 $(OBJDIR)/zip.o 471 474 472 475 APPNAME = fossil.exe 473 476 TRANSLATE = $(OBJDIR)/translate.exe 474 477 MAKEHEADERS = $(OBJDIR)/makeheaders.exe ................................................................................ 535 538 setup: $(OBJDIR) $(APPNAME) 536 539 $(MAKENSIS) ./fossil.nsi 537 540 538 541 539 542 $(OBJDIR)/page_index.h: $(TRANS_SRC) $(OBJDIR)/mkindex 540 543 $(MKINDEX) $(TRANS_SRC) >$@ 541 544 $(OBJDIR)/headers: $(OBJDIR)/page_index.h $(OBJDIR)/makeheaders $(OBJDIR)/VERSION.h 542 - $(MAKEHEADERS) $(OBJDIR)/add_.c:$(OBJDIR)/add.h $(OBJDIR)/allrepo_.c:$(OBJDIR)/allrepo.h $(OBJDIR)/attach_.c:$(OBJDIR)/attach.h $(OBJDIR)/bag_.c:$(OBJDIR)/bag.h $(OBJDIR)/bisect_.c:$(OBJDIR)/bisect.h $(OBJDIR)/blob_.c:$(OBJDIR)/blob.h $(OBJDIR)/branch_.c:$(OBJDIR)/branch.h $(OBJDIR)/browse_.c:$(OBJDIR)/browse.h $(OBJDIR)/captcha_.c:$(OBJDIR)/captcha.h $(OBJDIR)/cgi_.c:$(OBJDIR)/cgi.h $(OBJDIR)/checkin_.c:$(OBJDIR)/checkin.h $(OBJDIR)/checkout_.c:$(OBJDIR)/checkout.h $(OBJDIR)/clearsign_.c:$(OBJDIR)/clearsign.h $(OBJDIR)/clone_.c:$(OBJDIR)/clone.h $(OBJDIR)/comformat_.c:$(OBJDIR)/comformat.h $(OBJDIR)/configure_.c:$(OBJDIR)/configure.h $(OBJDIR)/content_.c:$(OBJDIR)/content.h $(OBJDIR)/db_.c:$(OBJDIR)/db.h $(OBJDIR)/delta_.c:$(OBJDIR)/delta.h $(OBJDIR)/deltacmd_.c:$(OBJDIR)/deltacmd.h $(OBJDIR)/descendants_.c:$(OBJDIR)/descendants.h $(OBJDIR)/diff_.c:$(OBJDIR)/diff.h $(OBJDIR)/diffcmd_.c:$(OBJDIR)/diffcmd.h $(OBJDIR)/doc_.c:$(OBJDIR)/doc.h $(OBJDIR)/encode_.c:$(OBJDIR)/encode.h $(OBJDIR)/event_.c:$(OBJDIR)/event.h $(OBJDIR)/export_.c:$(OBJDIR)/export.h $(OBJDIR)/file_.c:$(OBJDIR)/file.h $(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h $(OBJDIR)/glob_.c:$(OBJDIR)/glob.h $(OBJDIR)/graph_.c:$(OBJDIR)/graph.h $(OBJDIR)/gzip_.c:$(OBJDIR)/gzip.h $(OBJDIR)/http_.c:$(OBJDIR)/http.h $(OBJDIR)/http_socket_.c:$(OBJDIR)/http_socket.h $(OBJDIR)/http_ssl_.c:$(OBJDIR)/http_ssl.h $(OBJDIR)/http_transport_.c:$(OBJDIR)/http_transport.h $(OBJDIR)/import_.c:$(OBJDIR)/import.h $(OBJDIR)/info_.c:$(OBJDIR)/info.h $(OBJDIR)/json_.c:$(OBJDIR)/json.h $(OBJDIR)/json_artifact_.c:$(OBJDIR)/json_artifact.h $(OBJDIR)/json_branch_.c:$(OBJDIR)/json_branch.h $(OBJDIR)/json_config_.c:$(OBJDIR)/json_config.h $(OBJDIR)/json_diff_.c:$(OBJDIR)/json_diff.h $(OBJDIR)/json_dir_.c:$(OBJDIR)/json_dir.h $(OBJDIR)/json_finfo_.c:$(OBJDIR)/json_finfo.h $(OBJDIR)/json_login_.c:$(OBJDIR)/json_login.h $(OBJDIR)/json_query_.c:$(OBJDIR)/json_query.h $(OBJDIR)/json_report_.c:$(OBJDIR)/json_report.h $(OBJDIR)/json_tag_.c:$(OBJDIR)/json_tag.h $(OBJDIR)/json_timeline_.c:$(OBJDIR)/json_timeline.h $(OBJDIR)/json_user_.c:$(OBJDIR)/json_user.h $(OBJDIR)/json_wiki_.c:$(OBJDIR)/json_wiki.h $(OBJDIR)/leaf_.c:$(OBJDIR)/leaf.h $(OBJDIR)/login_.c:$(OBJDIR)/login.h $(OBJDIR)/main_.c:$(OBJDIR)/main.h $(OBJDIR)/manifest_.c:$(OBJDIR)/manifest.h $(OBJDIR)/md5_.c:$(OBJDIR)/md5.h $(OBJDIR)/merge_.c:$(OBJDIR)/merge.h $(OBJDIR)/merge3_.c:$(OBJDIR)/merge3.h $(OBJDIR)/name_.c:$(OBJDIR)/name.h $(OBJDIR)/path_.c:$(OBJDIR)/path.h $(OBJDIR)/pivot_.c:$(OBJDIR)/pivot.h $(OBJDIR)/popen_.c:$(OBJDIR)/popen.h $(OBJDIR)/pqueue_.c:$(OBJDIR)/pqueue.h $(OBJDIR)/printf_.c:$(OBJDIR)/printf.h $(OBJDIR)/rebuild_.c:$(OBJDIR)/rebuild.h $(OBJDIR)/report_.c:$(OBJDIR)/report.h $(OBJDIR)/rss_.c:$(OBJDIR)/rss.h $(OBJDIR)/schema_.c:$(OBJDIR)/schema.h $(OBJDIR)/search_.c:$(OBJDIR)/search.h $(OBJDIR)/setup_.c:$(OBJDIR)/setup.h $(OBJDIR)/sha1_.c:$(OBJDIR)/sha1.h $(OBJDIR)/shun_.c:$(OBJDIR)/shun.h $(OBJDIR)/skins_.c:$(OBJDIR)/skins.h $(OBJDIR)/sqlcmd_.c:$(OBJDIR)/sqlcmd.h $(OBJDIR)/stash_.c:$(OBJDIR)/stash.h $(OBJDIR)/stat_.c:$(OBJDIR)/stat.h $(OBJDIR)/style_.c:$(OBJDIR)/style.h $(OBJDIR)/sync_.c:$(OBJDIR)/sync.h $(OBJDIR)/tag_.c:$(OBJDIR)/tag.h $(OBJDIR)/tar_.c:$(OBJDIR)/tar.h $(OBJDIR)/th_main_.c:$(OBJDIR)/th_main.h $(OBJDIR)/timeline_.c:$(OBJDIR)/timeline.h $(OBJDIR)/tkt_.c:$(OBJDIR)/tkt.h $(OBJDIR)/tktsetup_.c:$(OBJDIR)/tktsetup.h $(OBJDIR)/undo_.c:$(OBJDIR)/undo.h $(OBJDIR)/update_.c:$(OBJDIR)/update.h $(OBJDIR)/url_.c:$(OBJDIR)/url.h $(OBJDIR)/user_.c:$(OBJDIR)/user.h $(OBJDIR)/verify_.c:$(OBJDIR)/verify.h $(OBJDIR)/vfile_.c:$(OBJDIR)/vfile.h $(OBJDIR)/wiki_.c:$(OBJDIR)/wiki.h $(OBJDIR)/wikiformat_.c:$(OBJDIR)/wikiformat.h $(OBJDIR)/winhttp_.c:$(OBJDIR)/winhttp.h $(OBJDIR)/xfer_.c:$(OBJDIR)/xfer.h $(OBJDIR)/xfersetup_.c:$(OBJDIR)/xfersetup.h $(OBJDIR)/zip_.c:$(OBJDIR)/zip.h $(SRCDIR)/sqlite3.h $(SRCDIR)/th.h $(OBJDIR)/VERSION.h 545 + $(MAKEHEADERS) $(OBJDIR)/add_.c:$(OBJDIR)/add.h $(OBJDIR)/allrepo_.c:$(OBJDIR)/allrepo.h $(OBJDIR)/attach_.c:$(OBJDIR)/attach.h $(OBJDIR)/bag_.c:$(OBJDIR)/bag.h $(OBJDIR)/bisect_.c:$(OBJDIR)/bisect.h $(OBJDIR)/blob_.c:$(OBJDIR)/blob.h $(OBJDIR)/branch_.c:$(OBJDIR)/branch.h $(OBJDIR)/browse_.c:$(OBJDIR)/browse.h $(OBJDIR)/captcha_.c:$(OBJDIR)/captcha.h $(OBJDIR)/cgi_.c:$(OBJDIR)/cgi.h $(OBJDIR)/checkin_.c:$(OBJDIR)/checkin.h $(OBJDIR)/checkout_.c:$(OBJDIR)/checkout.h $(OBJDIR)/clearsign_.c:$(OBJDIR)/clearsign.h $(OBJDIR)/clone_.c:$(OBJDIR)/clone.h $(OBJDIR)/comformat_.c:$(OBJDIR)/comformat.h $(OBJDIR)/configure_.c:$(OBJDIR)/configure.h $(OBJDIR)/content_.c:$(OBJDIR)/content.h $(OBJDIR)/db_.c:$(OBJDIR)/db.h $(OBJDIR)/delta_.c:$(OBJDIR)/delta.h $(OBJDIR)/deltacmd_.c:$(OBJDIR)/deltacmd.h $(OBJDIR)/descendants_.c:$(OBJDIR)/descendants.h $(OBJDIR)/diff_.c:$(OBJDIR)/diff.h $(OBJDIR)/diffcmd_.c:$(OBJDIR)/diffcmd.h $(OBJDIR)/doc_.c:$(OBJDIR)/doc.h $(OBJDIR)/encode_.c:$(OBJDIR)/encode.h $(OBJDIR)/event_.c:$(OBJDIR)/event.h $(OBJDIR)/export_.c:$(OBJDIR)/export.h $(OBJDIR)/file_.c:$(OBJDIR)/file.h $(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h $(OBJDIR)/glob_.c:$(OBJDIR)/glob.h $(OBJDIR)/graph_.c:$(OBJDIR)/graph.h $(OBJDIR)/gzip_.c:$(OBJDIR)/gzip.h $(OBJDIR)/http_.c:$(OBJDIR)/http.h $(OBJDIR)/http_socket_.c:$(OBJDIR)/http_socket.h $(OBJDIR)/http_ssl_.c:$(OBJDIR)/http_ssl.h $(OBJDIR)/http_transport_.c:$(OBJDIR)/http_transport.h $(OBJDIR)/import_.c:$(OBJDIR)/import.h $(OBJDIR)/info_.c:$(OBJDIR)/info.h $(OBJDIR)/json_.c:$(OBJDIR)/json.h $(OBJDIR)/json_artifact_.c:$(OBJDIR)/json_artifact.h $(OBJDIR)/json_branch_.c:$(OBJDIR)/json_branch.h $(OBJDIR)/json_config_.c:$(OBJDIR)/json_config.h $(OBJDIR)/json_diff_.c:$(OBJDIR)/json_diff.h $(OBJDIR)/json_dir_.c:$(OBJDIR)/json_dir.h $(OBJDIR)/json_finfo_.c:$(OBJDIR)/json_finfo.h $(OBJDIR)/json_login_.c:$(OBJDIR)/json_login.h $(OBJDIR)/json_query_.c:$(OBJDIR)/json_query.h $(OBJDIR)/json_report_.c:$(OBJDIR)/json_report.h $(OBJDIR)/json_tag_.c:$(OBJDIR)/json_tag.h $(OBJDIR)/json_timeline_.c:$(OBJDIR)/json_timeline.h $(OBJDIR)/json_user_.c:$(OBJDIR)/json_user.h $(OBJDIR)/json_wiki_.c:$(OBJDIR)/json_wiki.h $(OBJDIR)/leaf_.c:$(OBJDIR)/leaf.h $(OBJDIR)/login_.c:$(OBJDIR)/login.h $(OBJDIR)/main_.c:$(OBJDIR)/main.h $(OBJDIR)/manifest_.c:$(OBJDIR)/manifest.h $(OBJDIR)/md5_.c:$(OBJDIR)/md5.h $(OBJDIR)/merge_.c:$(OBJDIR)/merge.h $(OBJDIR)/merge3_.c:$(OBJDIR)/merge3.h $(OBJDIR)/name_.c:$(OBJDIR)/name.h $(OBJDIR)/path_.c:$(OBJDIR)/path.h $(OBJDIR)/pivot_.c:$(OBJDIR)/pivot.h $(OBJDIR)/popen_.c:$(OBJDIR)/popen.h $(OBJDIR)/pqueue_.c:$(OBJDIR)/pqueue.h $(OBJDIR)/printf_.c:$(OBJDIR)/printf.h $(OBJDIR)/rebuild_.c:$(OBJDIR)/rebuild.h $(OBJDIR)/report_.c:$(OBJDIR)/report.h $(OBJDIR)/rss_.c:$(OBJDIR)/rss.h $(OBJDIR)/schema_.c:$(OBJDIR)/schema.h $(OBJDIR)/search_.c:$(OBJDIR)/search.h $(OBJDIR)/setup_.c:$(OBJDIR)/setup.h $(OBJDIR)/sha1_.c:$(OBJDIR)/sha1.h $(OBJDIR)/shun_.c:$(OBJDIR)/shun.h $(OBJDIR)/skins_.c:$(OBJDIR)/skins.h $(OBJDIR)/sqlcmd_.c:$(OBJDIR)/sqlcmd.h $(OBJDIR)/stash_.c:$(OBJDIR)/stash.h $(OBJDIR)/stat_.c:$(OBJDIR)/stat.h $(OBJDIR)/style_.c:$(OBJDIR)/style.h $(OBJDIR)/sync_.c:$(OBJDIR)/sync.h $(OBJDIR)/tag_.c:$(OBJDIR)/tag.h $(OBJDIR)/tar_.c:$(OBJDIR)/tar.h $(OBJDIR)/th_main_.c:$(OBJDIR)/th_main.h $(OBJDIR)/timeline_.c:$(OBJDIR)/timeline.h $(OBJDIR)/tkt_.c:$(OBJDIR)/tkt.h $(OBJDIR)/tktsetup_.c:$(OBJDIR)/tktsetup.h $(OBJDIR)/undo_.c:$(OBJDIR)/undo.h $(OBJDIR)/update_.c:$(OBJDIR)/update.h $(OBJDIR)/url_.c:$(OBJDIR)/url.h $(OBJDIR)/user_.c:$(OBJDIR)/user.h $(OBJDIR)/verify_.c:$(OBJDIR)/verify.h $(OBJDIR)/vfile_.c:$(OBJDIR)/vfile.h $(OBJDIR)/wiki_.c:$(OBJDIR)/wiki.h $(OBJDIR)/wikiformat_.c:$(OBJDIR)/wikiformat.h $(OBJDIR)/winhttp_.c:$(OBJDIR)/winhttp.h $(OBJDIR)/wysiwyg_.c:$(OBJDIR)/wysiwyg.h $(OBJDIR)/xfer_.c:$(OBJDIR)/xfer.h $(OBJDIR)/xfersetup_.c:$(OBJDIR)/xfersetup.h $(OBJDIR)/zip_.c:$(OBJDIR)/zip.h $(SRCDIR)/sqlite3.h $(SRCDIR)/th.h $(OBJDIR)/VERSION.h 543 546 echo Done >$(OBJDIR)/headers 544 547 545 548 $(OBJDIR)/headers: Makefile 546 549 Makefile: 547 550 $(OBJDIR)/add_.c: $(SRCDIR)/add.c $(OBJDIR)/translate 548 551 $(TRANSLATE) $(SRCDIR)/add.c >$(OBJDIR)/add_.c 549 552 ................................................................................ 1198 1201 $(OBJDIR)/winhttp_.c: $(SRCDIR)/winhttp.c $(OBJDIR)/translate 1199 1202 $(TRANSLATE) $(SRCDIR)/winhttp.c >$(OBJDIR)/winhttp_.c 1200 1203 1201 1204 $(OBJDIR)/winhttp.o: $(OBJDIR)/winhttp_.c $(OBJDIR)/winhttp.h $(SRCDIR)/config.h 1202 1205 $(XTCC) -o $(OBJDIR)/winhttp.o -c $(OBJDIR)/winhttp_.c 1203 1206 1204 1207 winhttp.h: $(OBJDIR)/headers 1208 +$(OBJDIR)/wysiwyg_.c: $(SRCDIR)/wysiwyg.c $(OBJDIR)/translate 1209 + $(TRANSLATE) $(SRCDIR)/wysiwyg.c >$(OBJDIR)/wysiwyg_.c 1210 + 1211 +$(OBJDIR)/wysiwyg.o: $(OBJDIR)/wysiwyg_.c $(OBJDIR)/wysiwyg.h $(SRCDIR)/config.h 1212 + $(XTCC) -o $(OBJDIR)/wysiwyg.o -c $(OBJDIR)/wysiwyg_.c 1213 + 1214 +wysiwyg.h: $(OBJDIR)/headers 1205 1215 $(OBJDIR)/xfer_.c: $(SRCDIR)/xfer.c $(OBJDIR)/translate 1206 1216 $(TRANSLATE) $(SRCDIR)/xfer.c >$(OBJDIR)/xfer_.c 1207 1217 1208 1218 $(OBJDIR)/xfer.o: $(OBJDIR)/xfer_.c $(OBJDIR)/xfer.h $(SRCDIR)/config.h 1209 1219 $(XTCC) -o $(OBJDIR)/xfer.o -c $(OBJDIR)/xfer_.c 1210 1220 1211 1221 xfer.h: $(OBJDIR)/headers
Changes to win/Makefile.msc.
38 38 BCC = $(CC) $(CFLAGS) 39 39 TCC = $(CC) -c $(CFLAGS) $(MSCDEF) $(SSL) $(INCL) 40 40 LIBS = $(ZLIB) ws2_32.lib advapi32.lib $(SSLLIB) 41 41 LIBDIR = -LIBPATH:$(MSCDIR)\extra\lib -LIBPATH:$(ZLIBDIR) 42 42 43 43 SQLITE_OPTIONS = /DSQLITE_OMIT_LOAD_EXTENSION=1 /DSQLITE_THREADSAFE=0 /DSQLITE_DEFAULT_FILE_FORMAT=4 /DSQLITE_ENABLE_STAT3 /Dlocaltime=fossil_localtime /DSQLITE_ENABLE_LOCKING_STYLE=0 44 44 45 -SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c glob_.c graph_.c gzip_.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_tag_.c json_timeline_.c json_user_.c json_wiki_.c leaf_.c login_.c main_.c manifest_.c md5_.c merge_.c merge3_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c update_.c url_.c user_.c verify_.c vfile_.c wiki_.c wikiformat_.c winhttp_.c xfer_.c xfersetup_.c zip_.c 45 +SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c glob_.c graph_.c gzip_.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_tag_.c json_timeline_.c json_user_.c json_wiki_.c leaf_.c login_.c main_.c manifest_.c md5_.c merge_.c merge3_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c update_.c url_.c user_.c verify_.c vfile_.c wiki_.c wikiformat_.c winhttp_.c wysiwyg_.c xfer_.c xfersetup_.c zip_.c 46 46 47 -OBJ = $(OX)\add$O $(OX)\allrepo$O $(OX)\attach$O $(OX)\bag$O $(OX)\bisect$O $(OX)\blob$O $(OX)\branch$O $(OX)\browse$O $(OX)\captcha$O $(OX)\cgi$O $(OX)\checkin$O $(OX)\checkout$O $(OX)\clearsign$O $(OX)\clone$O $(OX)\comformat$O $(OX)\configure$O $(OX)\content$O $(OX)\db$O $(OX)\delta$O $(OX)\deltacmd$O $(OX)\descendants$O $(OX)\diff$O $(OX)\diffcmd$O $(OX)\doc$O $(OX)\encode$O $(OX)\event$O $(OX)\export$O $(OX)\file$O $(OX)\finfo$O $(OX)\glob$O $(OX)\graph$O $(OX)\gzip$O $(OX)\http$O $(OX)\http_socket$O $(OX)\http_ssl$O $(OX)\http_transport$O $(OX)\import$O $(OX)\info$O $(OX)\json$O $(OX)\json_artifact$O $(OX)\json_branch$O $(OX)\json_config$O $(OX)\json_diff$O $(OX)\json_dir$O $(OX)\json_finfo$O $(OX)\json_login$O $(OX)\json_query$O $(OX)\json_report$O $(OX)\json_tag$O $(OX)\json_timeline$O $(OX)\json_user$O $(OX)\json_wiki$O $(OX)\leaf$O $(OX)\login$O $(OX)\main$O $(OX)\manifest$O $(OX)\md5$O $(OX)\merge$O $(OX)\merge3$O $(OX)\name$O $(OX)\path$O $(OX)\pivot$O $(OX)\popen$O $(OX)\pqueue$O $(OX)\printf$O $(OX)\rebuild$O $(OX)\report$O $(OX)\rss$O $(OX)\schema$O $(OX)\search$O $(OX)\setup$O $(OX)\sha1$O $(OX)\shun$O $(OX)\skins$O $(OX)\sqlcmd$O $(OX)\stash$O $(OX)\stat$O $(OX)\style$O $(OX)\sync$O $(OX)\tag$O $(OX)\tar$O $(OX)\th_main$O $(OX)\timeline$O $(OX)\tkt$O $(OX)\tktsetup$O $(OX)\undo$O $(OX)\update$O $(OX)\url$O $(OX)\user$O $(OX)\verify$O $(OX)\vfile$O $(OX)\wiki$O $(OX)\wikiformat$O $(OX)\winhttp$O $(OX)\xfer$O $(OX)\xfersetup$O $(OX)\zip$O $(OX)\shell$O $(OX)\sqlite3$O $(OX)\th$O $(OX)\th_lang$O 47 +OBJ = $(OX)\add$O $(OX)\allrepo$O $(OX)\attach$O $(OX)\bag$O $(OX)\bisect$O $(OX)\blob$O $(OX)\branch$O $(OX)\browse$O $(OX)\captcha$O $(OX)\cgi$O $(OX)\checkin$O $(OX)\checkout$O $(OX)\clearsign$O $(OX)\clone$O $(OX)\comformat$O $(OX)\configure$O $(OX)\content$O $(OX)\db$O $(OX)\delta$O $(OX)\deltacmd$O $(OX)\descendants$O $(OX)\diff$O $(OX)\diffcmd$O $(OX)\doc$O $(OX)\encode$O $(OX)\event$O $(OX)\export$O $(OX)\file$O $(OX)\finfo$O $(OX)\glob$O $(OX)\graph$O $(OX)\gzip$O $(OX)\http$O $(OX)\http_socket$O $(OX)\http_ssl$O $(OX)\http_transport$O $(OX)\import$O $(OX)\info$O $(OX)\json$O $(OX)\json_artifact$O $(OX)\json_branch$O $(OX)\json_config$O $(OX)\json_diff$O $(OX)\json_dir$O $(OX)\json_finfo$O $(OX)\json_login$O $(OX)\json_query$O $(OX)\json_report$O $(OX)\json_tag$O $(OX)\json_timeline$O $(OX)\json_user$O $(OX)\json_wiki$O $(OX)\leaf$O $(OX)\login$O $(OX)\main$O $(OX)\manifest$O $(OX)\md5$O $(OX)\merge$O $(OX)\merge3$O $(OX)\name$O $(OX)\path$O $(OX)\pivot$O $(OX)\popen$O $(OX)\pqueue$O $(OX)\printf$O $(OX)\rebuild$O $(OX)\report$O $(OX)\rss$O $(OX)\schema$O $(OX)\search$O $(OX)\setup$O $(OX)\sha1$O $(OX)\shun$O $(OX)\skins$O $(OX)\sqlcmd$O $(OX)\stash$O $(OX)\stat$O $(OX)\style$O $(OX)\sync$O $(OX)\tag$O $(OX)\tar$O $(OX)\th_main$O $(OX)\timeline$O $(OX)\tkt$O $(OX)\tktsetup$O $(OX)\undo$O $(OX)\update$O $(OX)\url$O $(OX)\user$O $(OX)\verify$O $(OX)\vfile$O $(OX)\wiki$O $(OX)\wikiformat$O $(OX)\winhttp$O $(OX)\wysiwyg$O $(OX)\xfer$O $(OX)\xfersetup$O $(OX)\zip$O $(OX)\shell$O $(OX)\sqlite3$O $(OX)\th$O $(OX)\th_lang$O 48 48 49 49 50 50 APPNAME = $(OX)\fossil$(E) 51 51 52 52 all: $(OX) $(APPNAME) 53 53 54 54 $(APPNAME) : translate$E mkindex$E headers $(OBJ) $(OX)\linkopts ................................................................................ 150 150 echo $(OX)\url.obj >> $@ 151 151 echo $(OX)\user.obj >> $@ 152 152 echo $(OX)\verify.obj >> $@ 153 153 echo $(OX)\vfile.obj >> $@ 154 154 echo $(OX)\wiki.obj >> $@ 155 155 echo $(OX)\wikiformat.obj >> $@ 156 156 echo $(OX)\winhttp.obj >> $@ 157 + echo $(OX)\wysiwyg.obj >> $@ 157 158 echo $(OX)\xfer.obj >> $@ 158 159 echo $(OX)\xfersetup.obj >> $@ 159 160 echo $(OX)\zip.obj >> $@ 160 161 echo $(LIBS) >> $@ 161 162 162 163 163 164 ................................................................................ 780 781 translate$E $** > $@ 781 782 782 783 $(OX)\winhttp$O : winhttp_.c winhttp.h 783 784 $(TCC) /Fo$@ -c winhttp_.c 784 785 785 786 winhttp_.c : $(SRCDIR)\winhttp.c 786 787 translate$E $** > $@ 788 + 789 +$(OX)\wysiwyg$O : wysiwyg_.c wysiwyg.h 790 + $(TCC) /Fo$@ -c wysiwyg_.c 791 + 792 +wysiwyg_.c : $(SRCDIR)\wysiwyg.c 793 + translate$E $** > $@ 787 794 788 795 $(OX)\xfer$O : xfer_.c xfer.h 789 796 $(TCC) /Fo$@ -c xfer_.c 790 797 791 798 xfer_.c : $(SRCDIR)\xfer.c 792 799 translate$E $** > $@ 793 800 ................................................................................ 800 807 $(OX)\zip$O : zip_.c zip.h 801 808 $(TCC) /Fo$@ -c zip_.c 802 809 803 810 zip_.c : $(SRCDIR)\zip.c 804 811 translate$E $** > $@ 805 812 806 813 headers: makeheaders$E page_index.h VERSION.h 807 - makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.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 db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.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_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 login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h path_.c:path.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winhttp_.c:winhttp.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 814 + makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.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 db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.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_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 login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h path_.c:path.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.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 808 815 @copy /Y nul: headers