Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Add compression to the built-in javascript. Update comments on graph.js. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
4da95b254396d1f3fc8875a9fdccec82 |
User & Date: | drh 2018-12-28 16:52:07.882 |
Context
2018-12-28
| ||
18:15 | Enhance the from=/to= query parameters on the /timeline page so that when the "rel" query parameter is present, the graph shows checkins that merge with checkins on the choose path. ... (check-in: 7759a00e user: drh tags: trunk) | |
16:52 | Add compression to the built-in javascript. Update comments on graph.js. ... (check-in: 4da95b25 user: drh tags: trunk) | |
16:21 | Improved graph display when a single checkin is the parent of both a normal and a cherrypick merge. ... (check-in: 30aec47a user: drh tags: trunk) | |
Changes
Changes to src/graph.js.
︙ | ︙ | |||
26 27 28 29 30 31 32 | ** is iTopRow and numbers increase moving down the timeline. ** bg: The background color for this row ** r: The "rail" that the node for this row sits on. The left-most ** rail is 0 and the number increases to the right. ** d: If exists and true then there is a "descender" - an arrow ** coming from the bottom of the page straight up to this node. ** mo: "merge-out". If it exists, this is the rail position | | | > | < | < | < | 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | ** is iTopRow and numbers increase moving down the timeline. ** bg: The background color for this row ** r: The "rail" that the node for this row sits on. The left-most ** rail is 0 and the number increases to the right. ** d: If exists and true then there is a "descender" - an arrow ** coming from the bottom of the page straight up to this node. ** mo: "merge-out". If it exists, this is the rail position ** for the upward portion of a merge arrow. The merge arrow goes as ** a solid normal merge line up to the row identified by "mu" and ** then as a dashed cherrypick merge line up further to "cu". ** If this value is omitted if there are no merge children. ** mu: The id of the row which is the top of the merge-out arrow. ** Only exists if "mo" exists. ** cu: Extend the mu merge arrow up to this row as a cherrypick ** merge line, if this value exists. ** u: Draw a thick child-line out of the top of this node and up to ** the node with an id equal to this value. 0 if it is straight to ** the top of the page, -1 if there is no thick-line riser. ** f: 0x01: a leaf node. ** au: An array of integers that define thick-line risers for branches. ** The integers are in pairs. For each pair, the first integer is ** is the rail on which the riser should run and the second integer ** is the id of the node upto which the riser should run. If there ** are no risers, this array does not exist. ** mi: "merge-in". An array of integer rail positions from which ** merge arrows should be drawn into this node. If the value is |
︙ | ︙ |
Changes to src/mkbuiltin.c.
︙ | ︙ | |||
52 53 54 55 56 57 58 59 60 61 62 63 64 65 | exit(1); } got = fread(z, 1, nByte, in); fclose(in); z[got] = 0; return z; } /* ** There is an instance of the following for each file translated. */ typedef struct Resource Resource; struct Resource { char *zName; | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | exit(1); } got = fread(z, 1, nByte, in); fclose(in); z[got] = 0; return z; } /* ** Try to compress a javascript file by removing unnecessary whitespace. ** ** Warning: This compression routine does not necessarily work for any ** arbitrary Javascript source file. But it should work ok for the ** well-behaved source files in this project. */ static void compressJavascript(unsigned char *z, int *pn){ int n = *pn; int i, j, k; for(i=j=0; i<n; i++){ unsigned char c = z[i]; if( c=='/' ){ if( z[i+1]=='*' ){ for(k=i+3; k<n && (z[k]!='/' || z[k-1]!='*'); k++){} if( k<n ){ i = k; while( i+1<n && isspace(z[i+1]) ) i++; continue; } }else if( z[i+1]=='/' ){ for(k=i+2; k<n && z[k]!='\n'; k++){} i = k; while( i+1<n && isspace(z[i+1]) ) i++; continue; } } if( c=='\n' ){ while( j>0 && isspace(z[j-1]) ) j--; z[j++] = '\n'; while( i+1<n && isspace(z[i+1]) ) i++; continue; } z[j++] = c; } z[j] = 0; *pn = j; } /* ** There is an instance of the following for each file translated. */ typedef struct Resource Resource; struct Resource { char *zName; |
︙ | ︙ | |||
83 84 85 86 87 88 89 90 91 92 93 94 95 96 | int j, n; Resource *aRes; int nRes; unsigned char *pData; int nErr = 0; int nSkip; int nPrefix = 0; if( argc>3 && strcmp(argv[1],"--prefix")==0 ){ nPrefix = (int)strlen(argv[2]); argc -= 2; argv += 2; } nRes = argc - 1; | > | 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 | int j, n; Resource *aRes; int nRes; unsigned char *pData; int nErr = 0; int nSkip; int nPrefix = 0; int nName; if( argc>3 && strcmp(argv[1],"--prefix")==0 ){ nPrefix = (int)strlen(argv[2]); argc -= 2; argv += 2; } nRes = argc - 1; |
︙ | ︙ | |||
117 118 119 120 121 122 123 124 125 126 127 128 129 130 | /* Skip initial lines beginning with # */ nSkip = 0; while( pData[nSkip]=='#' ){ while( pData[nSkip]!=0 && pData[nSkip]!='\n' ){ nSkip++; } if( pData[nSkip]=='\n' ) nSkip++; } aRes[i].nByte = sz - nSkip; aRes[i].idx = i; printf("/* Content of file %s */\n", aRes[i].zName); printf("static const unsigned char bidata%d[%d] = {\n ", i, sz+1-nSkip); for(j=nSkip, n=0; j<=sz; j++){ | > > > > > > > > | 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 | /* Skip initial lines beginning with # */ nSkip = 0; while( pData[nSkip]=='#' ){ while( pData[nSkip]!=0 && pData[nSkip]!='\n' ){ nSkip++; } if( pData[nSkip]=='\n' ) nSkip++; } /* Compress javascript source files */ nName = (int)strlen(aRes[i].zName); if( nName>3 && strcmp(&aRes[i].zName[nName-3],".js")==0 ){ int x = sz-nSkip; compressJavascript(pData+nSkip, &x); sz = x + nSkip; } aRes[i].nByte = sz - nSkip; aRes[i].idx = i; printf("/* Content of file %s */\n", aRes[i].zName); printf("static const unsigned char bidata%d[%d] = {\n ", i, sz+1-nSkip); for(j=nSkip, n=0; j<=sz; j++){ |
︙ | ︙ |
Changes to src/timeline.c.
︙ | ︙ | |||
870 871 872 873 874 875 876 | ** mo: "merge-out". If it exists, this is the rail position ** for the upward portion of a merge arrow. The merge arrow goes as ** a solid normal merge line up to the row identified by "mu" and ** then as a dashed cherrypick merge line up further to "cu". ** If this value is omitted if there are no merge children. ** mu: The id of the row which is the top of the merge-out arrow. ** Only exists if "mo" exists. | | | 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 | ** mo: "merge-out". If it exists, this is the rail position ** for the upward portion of a merge arrow. The merge arrow goes as ** a solid normal merge line up to the row identified by "mu" and ** then as a dashed cherrypick merge line up further to "cu". ** If this value is omitted if there are no merge children. ** mu: The id of the row which is the top of the merge-out arrow. ** Only exists if "mo" exists. ** cu: Extend the mu merge arrow up to this row as a cherrypick ** merge line, if this value exists. ** u: Draw a thick child-line out of the top of this node and up to ** the node with an id equal to this value. 0 if it is straight to ** the top of the page, -1 if there is no thick-line riser. ** f: 0x01: a leaf node. ** au: An array of integers that define thick-line risers for branches. ** The integers are in pairs. For each pair, the first integer is |
︙ | ︙ |