@@ -329,10 +329,72 @@
329 329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aSubmenuCtrl[nSubmenuCtrl].eVisible = STYLE_NORMAL;
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 { 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!
+ */
347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void style_submenu_parametric(
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 */
350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
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;
382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( nSubmenu < count(aSubmenu) );
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!
+ }
393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nSubmenu++;
394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
334 396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
335 397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
336 398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Disable or enable the submenu
337 399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
338 400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void style_submenu_enable(int onOff){
339 401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!