@@ -330,26 +330,68 @@
330 330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aSubmenuCtrl[nSubmenuCtrl].eType = FF_MULTI;
331 331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nSubmenuCtrl++;
332 332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
333 333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
334 334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Add submenu hyperlink based on the value of arbitrary parameter
336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- * in the request's query string.
337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Add hyperlinks depending on the existence and values of special
336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** parameters in the request's query string. The names of these
337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** parameters that are investigated are obtainted by concatenation
338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of zPrefix with suffix "smplX", where X is either nothing or
339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a positive digit <= nMaxDigit. zPrefix must start with a lowercase
340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** letter, be short and have no strange characters. A value is
341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** well-formed if its first filepath segment (separated by '/')
342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** has no strange characters. The labels of the resulting submenu items
343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** are equal to the well-formed values that are prepended by "✧"
344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** unless a value starts with a lowercase letter.
345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Malformed values are silently ignored.
346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
338 347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void style_submenu_parametric(
339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zName /* Query parameter name */
348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zPrefix, /* common prefix of the query parameters names */
349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const int nMaxDigit /* maximal digit on the end of param names */
340 350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zV; /* value of the corresponding parameter */
342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( zName == 0 || zName[0] == 0 || !fossil_islower(zName[0]) ||
343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- !fossil_no_strange_characters(zName)) {
344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return;
345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zV = PD(zName,"");
347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( zV[0] && fossil_no_strange_characters( zV )){
351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zQS; /* QUERY_STRING */
352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *suffix = "smpl"; /* common suffix for all parameters */
353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const short sfxlen = 4; /* length of the above suffix */
354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char zN[32]; /* short names => no dynamic allocations */
355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ short i,l;
356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* zPrefix must be tidy and short; also filter out ENV/CGI variables */
358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( zPrefix != 0 && fossil_islower(zPrefix[0]) );
359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ l = strnlen( zPrefix, sizeof(zN) );
360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( l+sfxlen+2 <= sizeof(zN) );
361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( fossil_no_strange_characters(zPrefix) );
362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* concatenate zPrefix and suffix */
363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ strcpy( zN, zPrefix );
364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ strcpy( zN + l, suffix );
365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ l += sfxlen;
366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zN[l+1] = 0; /* nul-terminator after digit's placeholder (if any) */
367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zQS = PD("QUERY_STRING","");
368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for( i = 0; i <= 9 && i <= nMaxDigit; i++ ){
369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zV, *z;
370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zN[l] = ( i == 0 ? 0 : '0' + i ); /* ...smpl instead of ...smpl0 */
371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zV = PD(zN,"");
372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zV[0] == 0 || zV[0] == '/' ){
373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ continue;
374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* require the first path segment to be unfancy ASCII string */
376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for( z = zV; z[0] && z[0] != '/' ;){
377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( fossil_isalnum(z[0]) || z[0]=='_' || z[0]=='-' ) z++;
378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ else break;
379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( z[0] != 0 && z[0] != '/' )
381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ continue;
348 382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( nSubmenu < count(aSubmenu) );
349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- aSubmenu[nSubmenu].zLabel = mprintf("[ %s ]",zV); /* memory leak? */
350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- aSubmenu[nSubmenu].zLink = mprintf("%R/%s?%s",zV,PD("QUERY_STRING",""));
383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(fossil_islower(zV[0])){
384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aSubmenu[nSubmenu].zLabel = mprintf( "%s",zV); /* memory leak? */
385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aSubmenu[nSubmenu].zLabel = mprintf("✧%s",zV); /* maybe: ◦✧⸰⸎ ✨ */
387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zQS[0] ){
389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aSubmenu[nSubmenu].zLink = mprintf("%R/%s?%s",zV,zQS);
390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aSubmenu[nSubmenu].zLink = mprintf("%R/%s",zV);
392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
351 393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nSubmenu++;
352 394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
353 395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
354 396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
355 397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
356 398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!