Fossil SCM

Special UI controls added onto the /whistory webpage for easy comparison of arbitrary versions of a wiki page.

george 2019-12-01 20:18 trunk
Commit ec04c8b4a82b94ff75a8ab7744656d31991a9451a635ec260ad5c19908a19bc9
--- src/main.mk
+++ src/main.mk
@@ -226,10 +226,11 @@
226226
$(SRCDIR)/scroll.js \
227227
$(SRCDIR)/skin.js \
228228
$(SRCDIR)/sorttable.js \
229229
$(SRCDIR)/tree.js \
230230
$(SRCDIR)/useredit.js \
231
+ $(SRCDIR)/whistory.js \
231232
$(SRCDIR)/wiki.wiki
232233
233234
TRANS_SRC = \
234235
$(OBJDIR)/add_.c \
235236
$(OBJDIR)/alerts_.c \
236237
237238
ADDED src/whistory.js
--- src/main.mk
+++ src/main.mk
@@ -226,10 +226,11 @@
226 $(SRCDIR)/scroll.js \
227 $(SRCDIR)/skin.js \
228 $(SRCDIR)/sorttable.js \
229 $(SRCDIR)/tree.js \
230 $(SRCDIR)/useredit.js \
 
231 $(SRCDIR)/wiki.wiki
232
233 TRANS_SRC = \
234 $(OBJDIR)/add_.c \
235 $(OBJDIR)/alerts_.c \
236
237 DDED src/whistory.js
--- src/main.mk
+++ src/main.mk
@@ -226,10 +226,11 @@
226 $(SRCDIR)/scroll.js \
227 $(SRCDIR)/skin.js \
228 $(SRCDIR)/sorttable.js \
229 $(SRCDIR)/tree.js \
230 $(SRCDIR)/useredit.js \
231 $(SRCDIR)/whistory.js \
232 $(SRCDIR)/wiki.wiki
233
234 TRANS_SRC = \
235 $(OBJDIR)/add_.c \
236 $(OBJDIR)/alerts_.c \
237
238 DDED src/whistory.js
--- a/src/whistory.js
+++ b/src/whistory.js
@@ -0,0 +1,15 @@
1
+/* This script adds interactivity for wiki-history webpages.
2
+ *
3
+ * Thfunction wh_onRadioipt adds interacti/* This script adds interactivity for wiki-history webpages.
4
+ *
5
+ * Thfunction wh_onDifflinkfunction wh_onCleaner() {
6
+
7
+function wh_onC( event ) (function wh_Init(){
8
+
9
+ nteractivity for wiki-hist/* }
10
+ }
11
+ }
12
+ }
13
+ or wiki-history webpa/*/* This script adds interactiinteractivity for wiki }
14
+ }
15
+ })();
--- a/src/whistory.js
+++ b/src/whistory.js
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/src/whistory.js
+++ b/src/whistory.js
@@ -0,0 +1,15 @@
1 /* This script adds interactivity for wiki-history webpages.
2 *
3 * Thfunction wh_onRadioipt adds interacti/* This script adds interactivity for wiki-history webpages.
4 *
5 * Thfunction wh_onDifflinkfunction wh_onCleaner() {
6
7 function wh_onC( event ) (function wh_Init(){
8
9 nteractivity for wiki-hist/* }
10 }
11 }
12 }
13 or wiki-history webpa/*/* This script adds interactiinteractivity for wiki }
14 }
15 })();
+24 -5
--- src/wiki.c
+++ src/wiki.c
@@ -1023,52 +1023,71 @@
10231023
db_prepare(&q,
10241024
"SELECT"
10251025
" event.mtime,"
10261026
" blob.uuid,"
10271027
" coalesce(event.euser,event.user),"
1028
- " event.objid"
1028
+ " event.objid,"
1029
+ " datetime(event.mtime)"
10291030
" FROM event, blob, tag, tagxref"
10301031
" WHERE event.type='w' AND blob.rid=event.objid"
10311032
" AND tag.tagname='wiki-%q'"
10321033
" AND tagxref.tagid=tag.tagid AND tagxref.srcid=event.objid"
10331034
" ORDER BY event.mtime DESC",
10341035
zPageName
10351036
);
10361037
@ <h2>History of <a href="%R/wiki?name=%T(zPageName)">%h(zPageName)</a></h2>
1038
+ form_begin( "id='wh-form'", "%R/wdiff" );
1039
+ @ <input id="wh-pid" name="pid" type="radio" hidden />
1040
+ @ <input id="wh-id" name="id" type="hidden" />
1041
+ @ </form>
1042
+ @ <style> .wh-clickable { cursor: pointer; } </style>
10371043
@ <div class="brlist">
10381044
@ <table>
10391045
@ <thead><tr>
10401046
@ <th>Age</th>
10411047
@ <th>Hash</th>
1042
- @ <th>User</th>
1048
+ @ <th><span title="Baseline from which diffs are computed (click to unset)"
1049
+ @ id="wh-cleaner" class="wh-clickable">&#9875;</span></th>
1050
+ @ <th>User<span hidden class="wh-clickable"
1051
+ @ id="wh-collapser">&emsp;&#9842;</span></th>
10431052
if( showRid ){
10441053
@ <th>RID</th>
10451054
}
10461055
@ <th>&nbsp;</th>
10471056
@ </tr></thead><tbody>
10481057
rNow = db_double(0.0, "SELECT julianday('now')");
1058
+ char zAuthor[64]; memset( zAuthor, 0, sizeof(zAuthor) );
10491059
while( db_step(&q)==SQLITE_ROW ){
10501060
double rMtime = db_column_double(&q, 0);
10511061
const char *zUuid = db_column_text(&q, 1);
10521062
const char *zUser = db_column_text(&q, 2);
10531063
int wrid = db_column_int(&q, 3);
1064
+ const char *zWhen = db_column_text(&q, 4);
10541065
/* sqlite3_int64 iMtime = (sqlite3_int64)(rMtime*86400.0); */
10551066
char *zAge = human_readable_age(rNow - rMtime);
1056
- @ <tr>
1067
+ if( strncmp( zAuthor, zUser, sizeof(zAuthor) - 1 ) == 0 ) {
1068
+ @ <tr class="wh-intermediate" title="%s(zWhen)">
1069
+ }
1070
+ else {
1071
+ strncpy( zAuthor, zUser, sizeof(zAuthor) - 1 );
1072
+ @ <tr class="wh-major" title="%s(zWhen)">
1073
+ }
10571074
/* @ <td data-sortkey="%016llx(iMtime)">%s(zAge)</td> */
10581075
@ <td>%s(zAge)</td>
10591076
fossil_free(zAge);
10601077
@ <td>%z(href("%R/info/%s",zUuid))%S(zUuid)</a></td>
1061
- @ <td>%h(zUser)</td>
1078
+ @ <td><input disabled type="radio" name="baseline" value="%S(zUuid)"/></td>
1079
+ @ <td>%h(zUser)<span class="wh-iterations" hidden /></td>
10621080
if( showRid ){
10631081
@ <td>%z(href("%R/artifact/%S",zUuid))%d(wrid)</a></td>
10641082
}
1065
- @ <td>%z(href("%R/wdiff?id=%S",zUuid))diff</a></td>
1083
+ @ <td>%z(chref("wh-difflink","%R/wdiff?id=%S",zUuid))diff</a></td>
10661084
@ </tr>
10671085
}
10681086
@ </tbody></table></div>
10691087
db_finalize(&q);
1088
+ style_load_one_js_file("whistory.js");
10701089
/* style_table_sorter(); */
10711090
style_footer();
10721091
}
10731092
10741093
/*
10751094
--- src/wiki.c
+++ src/wiki.c
@@ -1023,52 +1023,71 @@
1023 db_prepare(&q,
1024 "SELECT"
1025 " event.mtime,"
1026 " blob.uuid,"
1027 " coalesce(event.euser,event.user),"
1028 " event.objid"
 
1029 " FROM event, blob, tag, tagxref"
1030 " WHERE event.type='w' AND blob.rid=event.objid"
1031 " AND tag.tagname='wiki-%q'"
1032 " AND tagxref.tagid=tag.tagid AND tagxref.srcid=event.objid"
1033 " ORDER BY event.mtime DESC",
1034 zPageName
1035 );
1036 @ <h2>History of <a href="%R/wiki?name=%T(zPageName)">%h(zPageName)</a></h2>
 
 
 
 
 
1037 @ <div class="brlist">
1038 @ <table>
1039 @ <thead><tr>
1040 @ <th>Age</th>
1041 @ <th>Hash</th>
1042 @ <th>User</th>
 
 
 
1043 if( showRid ){
1044 @ <th>RID</th>
1045 }
1046 @ <th>&nbsp;</th>
1047 @ </tr></thead><tbody>
1048 rNow = db_double(0.0, "SELECT julianday('now')");
 
1049 while( db_step(&q)==SQLITE_ROW ){
1050 double rMtime = db_column_double(&q, 0);
1051 const char *zUuid = db_column_text(&q, 1);
1052 const char *zUser = db_column_text(&q, 2);
1053 int wrid = db_column_int(&q, 3);
 
1054 /* sqlite3_int64 iMtime = (sqlite3_int64)(rMtime*86400.0); */
1055 char *zAge = human_readable_age(rNow - rMtime);
1056 @ <tr>
 
 
 
 
 
 
1057 /* @ <td data-sortkey="%016llx(iMtime)">%s(zAge)</td> */
1058 @ <td>%s(zAge)</td>
1059 fossil_free(zAge);
1060 @ <td>%z(href("%R/info/%s",zUuid))%S(zUuid)</a></td>
1061 @ <td>%h(zUser)</td>
 
1062 if( showRid ){
1063 @ <td>%z(href("%R/artifact/%S",zUuid))%d(wrid)</a></td>
1064 }
1065 @ <td>%z(href("%R/wdiff?id=%S",zUuid))diff</a></td>
1066 @ </tr>
1067 }
1068 @ </tbody></table></div>
1069 db_finalize(&q);
 
1070 /* style_table_sorter(); */
1071 style_footer();
1072 }
1073
1074 /*
1075
--- src/wiki.c
+++ src/wiki.c
@@ -1023,52 +1023,71 @@
1023 db_prepare(&q,
1024 "SELECT"
1025 " event.mtime,"
1026 " blob.uuid,"
1027 " coalesce(event.euser,event.user),"
1028 " event.objid,"
1029 " datetime(event.mtime)"
1030 " FROM event, blob, tag, tagxref"
1031 " WHERE event.type='w' AND blob.rid=event.objid"
1032 " AND tag.tagname='wiki-%q'"
1033 " AND tagxref.tagid=tag.tagid AND tagxref.srcid=event.objid"
1034 " ORDER BY event.mtime DESC",
1035 zPageName
1036 );
1037 @ <h2>History of <a href="%R/wiki?name=%T(zPageName)">%h(zPageName)</a></h2>
1038 form_begin( "id='wh-form'", "%R/wdiff" );
1039 @ <input id="wh-pid" name="pid" type="radio" hidden />
1040 @ <input id="wh-id" name="id" type="hidden" />
1041 @ </form>
1042 @ <style> .wh-clickable { cursor: pointer; } </style>
1043 @ <div class="brlist">
1044 @ <table>
1045 @ <thead><tr>
1046 @ <th>Age</th>
1047 @ <th>Hash</th>
1048 @ <th><span title="Baseline from which diffs are computed (click to unset)"
1049 @ id="wh-cleaner" class="wh-clickable">&#9875;</span></th>
1050 @ <th>User<span hidden class="wh-clickable"
1051 @ id="wh-collapser">&emsp;&#9842;</span></th>
1052 if( showRid ){
1053 @ <th>RID</th>
1054 }
1055 @ <th>&nbsp;</th>
1056 @ </tr></thead><tbody>
1057 rNow = db_double(0.0, "SELECT julianday('now')");
1058 char zAuthor[64]; memset( zAuthor, 0, sizeof(zAuthor) );
1059 while( db_step(&q)==SQLITE_ROW ){
1060 double rMtime = db_column_double(&q, 0);
1061 const char *zUuid = db_column_text(&q, 1);
1062 const char *zUser = db_column_text(&q, 2);
1063 int wrid = db_column_int(&q, 3);
1064 const char *zWhen = db_column_text(&q, 4);
1065 /* sqlite3_int64 iMtime = (sqlite3_int64)(rMtime*86400.0); */
1066 char *zAge = human_readable_age(rNow - rMtime);
1067 if( strncmp( zAuthor, zUser, sizeof(zAuthor) - 1 ) == 0 ) {
1068 @ <tr class="wh-intermediate" title="%s(zWhen)">
1069 }
1070 else {
1071 strncpy( zAuthor, zUser, sizeof(zAuthor) - 1 );
1072 @ <tr class="wh-major" title="%s(zWhen)">
1073 }
1074 /* @ <td data-sortkey="%016llx(iMtime)">%s(zAge)</td> */
1075 @ <td>%s(zAge)</td>
1076 fossil_free(zAge);
1077 @ <td>%z(href("%R/info/%s",zUuid))%S(zUuid)</a></td>
1078 @ <td><input disabled type="radio" name="baseline" value="%S(zUuid)"/></td>
1079 @ <td>%h(zUser)<span class="wh-iterations" hidden /></td>
1080 if( showRid ){
1081 @ <td>%z(href("%R/artifact/%S",zUuid))%d(wrid)</a></td>
1082 }
1083 @ <td>%z(chref("wh-difflink","%R/wdiff?id=%S",zUuid))diff</a></td>
1084 @ </tr>
1085 }
1086 @ </tbody></table></div>
1087 db_finalize(&q);
1088 style_load_one_js_file("whistory.js");
1089 /* style_table_sorter(); */
1090 style_footer();
1091 }
1092
1093 /*
1094

Keyboard Shortcuts

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