Fossil SCM

Added JS code to generate/display the current capabilities string based on selected checkboxes (feature request from Joe M.).

stephan 2014-09-27 19:26 UTC inherit-priv-mark-sub
Commit d02d620c4df6b9013d4f19b0d639b6b05a1fb68d
1 file changed +49 -27
+49 -27
--- src/setup.c
+++ src/setup.c
@@ -307,11 +307,11 @@
307307
int uid, i;
308308
int higherUser = 0; /* True if user being edited is SETUP and the */
309309
/* user doing the editing is ADMIN. Disallow editing */
310310
char *inherit[128];
311311
int a[128];
312
- char *oa[128];
312
+ const char *oa[128];
313313
314314
/* Must have ADMIN privileges to access this page
315315
*/
316316
login_check_credentials();
317317
if( !g.perm.Admin ){ login_needed(); return; }
@@ -489,10 +489,29 @@
489489
if( login_is_special(zLogin) ){
490490
@ <input type="hidden" name="login" value="%s(zLogin)">
491491
@ <input type="hidden" name="info" value="">
492492
@ <input type="hidden" name="pw" value="*">
493493
}
494
+ @ <script type='text/javascript'>
495
+ @ function fossilUpdatePermissionsList(){
496
+ @ /* updates #currentPermissionsString with current permissions string based on checkboxes */
497
+ @ var inputs = document.getElementsByTagName('input'), i, x = 0, e, checkboxes = [], permsIds = [];
498
+ @ if(inputs && inputs.length){
499
+ @ for( i = 0; i < inputs.length; ++i ){
500
+ @ e = inputs[i];
501
+ @ if(e.name && e.type && ('checkbox' === e.type.toLowerCase()) && 2===e.name.length && 'a'===e.name[0]){
502
+ @ // looks like a permissions checkbox
503
+ @ if(e.checked){
504
+ @ permsIds[x] = e.name[1];
505
+ @ checkboxes[x++] = e;
506
+ @ }
507
+ @ }
508
+ @ }
509
+ @ }
510
+ @ permsIds.sort();
511
+ @ document.getElementById('currentPermissionsString').innerHTML = permsIds.join('');
512
+ @ }</script>
494513
@ <table>
495514
@ <tr>
496515
@ <td class="usetupEditLabel">User ID:</td>
497516
if( uid ){
498517
@ <td>%d(uid) <input type="hidden" name="id" value="%d(uid)" /></td>
@@ -516,64 +535,66 @@
516535
@ <td class="usetupEditLabel">Capabilities:</td>
517536
@ <td>
518537
#define B(x) inherit[x]
519538
@ <table border=0><tr><td valign="top">
520539
if( g.perm.Setup ){
521
- @ <label><input type="checkbox" name="as"%s(oa['s']) />
540
+ @ <label><input type="checkbox" name="as"%s(oa['s']) onchange="fossilUpdatePermissionsList()"/>
522541
@ Setup%s(B('s'))</label><br />
523542
}
524
- @ <label><input type="checkbox" name="aa"%s(oa['a']) />
543
+ @ <label><input type="checkbox" name="aa"%s(oa['a']) onchange="fossilUpdatePermissionsList()" />
525544
@ Admin%s(B('a'))</label><br />
526
- @ <label><input type="checkbox" name="ad"%s(oa['d']) />
545
+ @ <label><input type="checkbox" name="ad"%s(oa['d']) onchange="fossilUpdatePermissionsList()" />
527546
@ Delete%s(B('d'))</label><br />
528
- @ <label><input type="checkbox" name="ae"%s(oa['e']) />
547
+ @ <label><input type="checkbox" name="ae"%s(oa['e']) onchange="fossilUpdatePermissionsList()" />
529548
@ Email%s(B('e'))</label><br />
530
- @ <label><input type="checkbox" name="ap"%s(oa['p']) />
549
+ @ <label><input type="checkbox" name="ap"%s(oa['p']) onchange="fossilUpdatePermissionsList()" />
531550
@ Password%s(B('p'))</label><br />
532
- @ <label><input type="checkbox" name="ai"%s(oa['i']) />
551
+ @ <label><input type="checkbox" name="ai"%s(oa['i']) onchange="fossilUpdatePermissionsList()" />
533552
@ Check-In%s(B('i'))</label><br />
534
- @ <label><input type="checkbox" name="ao"%s(oa['o']) />
553
+ @ <label><input type="checkbox" name="ao"%s(oa['o']) onchange="fossilUpdatePermissionsList()" />
535554
@ Check-Out%s(B('o'))</label><br />
536
- @ <label><input type="checkbox" name="ah"%s(oa['h']) />
555
+ @ <label><input type="checkbox" name="ah"%s(oa['h']) onchange="fossilUpdatePermissionsList()" />
537556
@ Hyperlinks%s(B('h'))</label><br />
538
- @ <label><input type="checkbox" name="ab"%s(oa['b']) />
557
+ @ <label><input type="checkbox" name="ab"%s(oa['b']) onchange="fossilUpdatePermissionsList()" />
539558
@ Attachments%s(B('b'))</label><br />
540559
@ </td><td><td width="40"></td><td valign="top">
541
- @ <label><input type="checkbox" name="au"%s(oa['u']) />
560
+ @ <label><input type="checkbox" name="au"%s(oa['u']) onchange="fossilUpdatePermissionsList()" />
542561
@ Reader%s(B('u'))</label><br />
543
- @ <label><input type="checkbox" name="av"%s(oa['v']) />
562
+ @ <label><input type="checkbox" name="av"%s(oa['v']) onchange="fossilUpdatePermissionsList()" />
544563
@ Developer%s(B('v'))</label><br />
545
- @ <label><input type="checkbox" name="ag"%s(oa['g']) />
564
+ @ <label><input type="checkbox" name="ag"%s(oa['g']) onchange="fossilUpdatePermissionsList()" />
546565
@ Clone%s(B('g'))</label><br />
547
- @ <label><input type="checkbox" name="aj"%s(oa['j']) />
566
+ @ <label><input type="checkbox" name="aj"%s(oa['j']) onchange="fossilUpdatePermissionsList()" />
548567
@ Read Wiki%s(B('j'))</label><br />
549
- @ <label><input type="checkbox" name="af"%s(oa['f']) />
568
+ @ <label><input type="checkbox" name="af"%s(oa['f']) onchange="fossilUpdatePermissionsList()" />
550569
@ New Wiki%s(B('f'))</label><br />
551
- @ <label><input type="checkbox" name="am"%s(oa['m']) />
570
+ @ <label><input type="checkbox" name="am"%s(oa['m']) onchange="fossilUpdatePermissionsList()" />
552571
@ Append Wiki%s(B('m'))</label><br />
553
- @ <label><input type="checkbox" name="ak"%s(oa['k']) />
572
+ @ <label><input type="checkbox" name="ak"%s(oa['k']) onchange="fossilUpdatePermissionsList()" />
554573
@ Write Wiki%s(B('k'))</label><br />
555
- @ <label><input type="checkbox" name="al"%s(oa['l']) />
574
+ @ <label><input type="checkbox" name="al"%s(oa['l']) onchange="fossilUpdatePermissionsList()" />
556575
@ Moderate Wiki%s(B('l'))</label><br />
557576
@ </td><td><td width="40"></td><td valign="top">
558
- @ <label><input type="checkbox" name="ar"%s(oa['r']) />
577
+ @ <label><input type="checkbox" name="ar"%s(oa['r']) onchange="fossilUpdatePermissionsList()" />
559578
@ Read Ticket%s(B('r'))</label><br />
560
- @ <label><input type="checkbox" name="an"%s(oa['n']) />
579
+ @ <label><input type="checkbox" name="an"%s(oa['n']) onchange="fossilUpdatePermissionsList()" />
561580
@ New Tickets%s(B('n'))</label><br />
562
- @ <label><input type="checkbox" name="ac"%s(oa['c']) />
581
+ @ <label><input type="checkbox" name="ac"%s(oa['c']) onchange="fossilUpdatePermissionsList()" />
563582
@ Append To Ticket%s(B('c'))</label><br />
564
- @ <label><input type="checkbox" name="aw"%s(oa['w']) />
583
+ @ <label><input type="checkbox" name="aw"%s(oa['w']) onchange="fossilUpdatePermissionsList()" />
565584
@ Write Tickets%s(B('w'))</label><br />
566
- @ <label><input type="checkbox" name="aq"%s(oa['q']) />
585
+ @ <label><input type="checkbox" name="aq"%s(oa['q']) onchange="fossilUpdatePermissionsList()" />
567586
@ Moderate Tickets%s(B('q'))</label><br />
568
- @ <label><input type="checkbox" name="at"%s(oa['t']) />
587
+ @ <label><input type="checkbox" name="at"%s(oa['t']) onchange="fossilUpdatePermissionsList()" />
569588
@ Ticket Report%s(B('t'))</label><br />
570
- @ <label><input type="checkbox" name="ax"%s(oa['x']) />
589
+ @ <label><input type="checkbox" name="ax"%s(oa['x']) onchange="fossilUpdatePermissionsList()" />
571590
@ Private%s(B('x'))</label><br />
572
- @ <label><input type="checkbox" name="az"%s(oa['z']) />
591
+ @ <label><input type="checkbox" name="az"%s(oa['z']) onchange="fossilUpdatePermissionsList()" />
573592
@ Download Zip%s(B('z'))</label>
574
- @ </td></tr></table>
593
+ @ </td></tr>
594
+ @ <tr><td colspan='7'>Selected capabilities: <span id="currentPermissionsString">(missing JS?)</span></td></tr>
595
+ @ </table>
575596
@ </td>
576597
@ </tr>
577598
if( !login_is_special(zLogin) ){
578599
@ <tr>
579600
@ <td align="right">Password:</td>
@@ -604,10 +625,11 @@
604625
@ </tr>
605626
}
606627
@ </table>
607628
@ </div></form>
608629
@ </div>
630
+ @ <script type='text/javascript'>fossilUpdatePermissionsList();</script>
609631
@ <h2>Privileges And Capabilities:</h2>
610632
@ <ul>
611633
if( higherUser ){
612634
@ <li><p class="missingPriv">
613635
@ User %h(zLogin) has Setup privileges and you only have Admin privileges
614636
--- src/setup.c
+++ src/setup.c
@@ -307,11 +307,11 @@
307 int uid, i;
308 int higherUser = 0; /* True if user being edited is SETUP and the */
309 /* user doing the editing is ADMIN. Disallow editing */
310 char *inherit[128];
311 int a[128];
312 char *oa[128];
313
314 /* Must have ADMIN privileges to access this page
315 */
316 login_check_credentials();
317 if( !g.perm.Admin ){ login_needed(); return; }
@@ -489,10 +489,29 @@
489 if( login_is_special(zLogin) ){
490 @ <input type="hidden" name="login" value="%s(zLogin)">
491 @ <input type="hidden" name="info" value="">
492 @ <input type="hidden" name="pw" value="*">
493 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
494 @ <table>
495 @ <tr>
496 @ <td class="usetupEditLabel">User ID:</td>
497 if( uid ){
498 @ <td>%d(uid) <input type="hidden" name="id" value="%d(uid)" /></td>
@@ -516,64 +535,66 @@
516 @ <td class="usetupEditLabel">Capabilities:</td>
517 @ <td>
518 #define B(x) inherit[x]
519 @ <table border=0><tr><td valign="top">
520 if( g.perm.Setup ){
521 @ <label><input type="checkbox" name="as"%s(oa['s']) />
522 @ Setup%s(B('s'))</label><br />
523 }
524 @ <label><input type="checkbox" name="aa"%s(oa['a']) />
525 @ Admin%s(B('a'))</label><br />
526 @ <label><input type="checkbox" name="ad"%s(oa['d']) />
527 @ Delete%s(B('d'))</label><br />
528 @ <label><input type="checkbox" name="ae"%s(oa['e']) />
529 @ Email%s(B('e'))</label><br />
530 @ <label><input type="checkbox" name="ap"%s(oa['p']) />
531 @ Password%s(B('p'))</label><br />
532 @ <label><input type="checkbox" name="ai"%s(oa['i']) />
533 @ Check-In%s(B('i'))</label><br />
534 @ <label><input type="checkbox" name="ao"%s(oa['o']) />
535 @ Check-Out%s(B('o'))</label><br />
536 @ <label><input type="checkbox" name="ah"%s(oa['h']) />
537 @ Hyperlinks%s(B('h'))</label><br />
538 @ <label><input type="checkbox" name="ab"%s(oa['b']) />
539 @ Attachments%s(B('b'))</label><br />
540 @ </td><td><td width="40"></td><td valign="top">
541 @ <label><input type="checkbox" name="au"%s(oa['u']) />
542 @ Reader%s(B('u'))</label><br />
543 @ <label><input type="checkbox" name="av"%s(oa['v']) />
544 @ Developer%s(B('v'))</label><br />
545 @ <label><input type="checkbox" name="ag"%s(oa['g']) />
546 @ Clone%s(B('g'))</label><br />
547 @ <label><input type="checkbox" name="aj"%s(oa['j']) />
548 @ Read Wiki%s(B('j'))</label><br />
549 @ <label><input type="checkbox" name="af"%s(oa['f']) />
550 @ New Wiki%s(B('f'))</label><br />
551 @ <label><input type="checkbox" name="am"%s(oa['m']) />
552 @ Append Wiki%s(B('m'))</label><br />
553 @ <label><input type="checkbox" name="ak"%s(oa['k']) />
554 @ Write Wiki%s(B('k'))</label><br />
555 @ <label><input type="checkbox" name="al"%s(oa['l']) />
556 @ Moderate Wiki%s(B('l'))</label><br />
557 @ </td><td><td width="40"></td><td valign="top">
558 @ <label><input type="checkbox" name="ar"%s(oa['r']) />
559 @ Read Ticket%s(B('r'))</label><br />
560 @ <label><input type="checkbox" name="an"%s(oa['n']) />
561 @ New Tickets%s(B('n'))</label><br />
562 @ <label><input type="checkbox" name="ac"%s(oa['c']) />
563 @ Append To Ticket%s(B('c'))</label><br />
564 @ <label><input type="checkbox" name="aw"%s(oa['w']) />
565 @ Write Tickets%s(B('w'))</label><br />
566 @ <label><input type="checkbox" name="aq"%s(oa['q']) />
567 @ Moderate Tickets%s(B('q'))</label><br />
568 @ <label><input type="checkbox" name="at"%s(oa['t']) />
569 @ Ticket Report%s(B('t'))</label><br />
570 @ <label><input type="checkbox" name="ax"%s(oa['x']) />
571 @ Private%s(B('x'))</label><br />
572 @ <label><input type="checkbox" name="az"%s(oa['z']) />
573 @ Download Zip%s(B('z'))</label>
574 @ </td></tr></table>
 
 
575 @ </td>
576 @ </tr>
577 if( !login_is_special(zLogin) ){
578 @ <tr>
579 @ <td align="right">Password:</td>
@@ -604,10 +625,11 @@
604 @ </tr>
605 }
606 @ </table>
607 @ </div></form>
608 @ </div>
 
609 @ <h2>Privileges And Capabilities:</h2>
610 @ <ul>
611 if( higherUser ){
612 @ <li><p class="missingPriv">
613 @ User %h(zLogin) has Setup privileges and you only have Admin privileges
614
--- src/setup.c
+++ src/setup.c
@@ -307,11 +307,11 @@
307 int uid, i;
308 int higherUser = 0; /* True if user being edited is SETUP and the */
309 /* user doing the editing is ADMIN. Disallow editing */
310 char *inherit[128];
311 int a[128];
312 const char *oa[128];
313
314 /* Must have ADMIN privileges to access this page
315 */
316 login_check_credentials();
317 if( !g.perm.Admin ){ login_needed(); return; }
@@ -489,10 +489,29 @@
489 if( login_is_special(zLogin) ){
490 @ <input type="hidden" name="login" value="%s(zLogin)">
491 @ <input type="hidden" name="info" value="">
492 @ <input type="hidden" name="pw" value="*">
493 }
494 @ <script type='text/javascript'>
495 @ function fossilUpdatePermissionsList(){
496 @ /* updates #currentPermissionsString with current permissions string based on checkboxes */
497 @ var inputs = document.getElementsByTagName('input'), i, x = 0, e, checkboxes = [], permsIds = [];
498 @ if(inputs && inputs.length){
499 @ for( i = 0; i < inputs.length; ++i ){
500 @ e = inputs[i];
501 @ if(e.name && e.type && ('checkbox' === e.type.toLowerCase()) && 2===e.name.length && 'a'===e.name[0]){
502 @ // looks like a permissions checkbox
503 @ if(e.checked){
504 @ permsIds[x] = e.name[1];
505 @ checkboxes[x++] = e;
506 @ }
507 @ }
508 @ }
509 @ }
510 @ permsIds.sort();
511 @ document.getElementById('currentPermissionsString').innerHTML = permsIds.join('');
512 @ }</script>
513 @ <table>
514 @ <tr>
515 @ <td class="usetupEditLabel">User ID:</td>
516 if( uid ){
517 @ <td>%d(uid) <input type="hidden" name="id" value="%d(uid)" /></td>
@@ -516,64 +535,66 @@
535 @ <td class="usetupEditLabel">Capabilities:</td>
536 @ <td>
537 #define B(x) inherit[x]
538 @ <table border=0><tr><td valign="top">
539 if( g.perm.Setup ){
540 @ <label><input type="checkbox" name="as"%s(oa['s']) onchange="fossilUpdatePermissionsList()"/>
541 @ Setup%s(B('s'))</label><br />
542 }
543 @ <label><input type="checkbox" name="aa"%s(oa['a']) onchange="fossilUpdatePermissionsList()" />
544 @ Admin%s(B('a'))</label><br />
545 @ <label><input type="checkbox" name="ad"%s(oa['d']) onchange="fossilUpdatePermissionsList()" />
546 @ Delete%s(B('d'))</label><br />
547 @ <label><input type="checkbox" name="ae"%s(oa['e']) onchange="fossilUpdatePermissionsList()" />
548 @ Email%s(B('e'))</label><br />
549 @ <label><input type="checkbox" name="ap"%s(oa['p']) onchange="fossilUpdatePermissionsList()" />
550 @ Password%s(B('p'))</label><br />
551 @ <label><input type="checkbox" name="ai"%s(oa['i']) onchange="fossilUpdatePermissionsList()" />
552 @ Check-In%s(B('i'))</label><br />
553 @ <label><input type="checkbox" name="ao"%s(oa['o']) onchange="fossilUpdatePermissionsList()" />
554 @ Check-Out%s(B('o'))</label><br />
555 @ <label><input type="checkbox" name="ah"%s(oa['h']) onchange="fossilUpdatePermissionsList()" />
556 @ Hyperlinks%s(B('h'))</label><br />
557 @ <label><input type="checkbox" name="ab"%s(oa['b']) onchange="fossilUpdatePermissionsList()" />
558 @ Attachments%s(B('b'))</label><br />
559 @ </td><td><td width="40"></td><td valign="top">
560 @ <label><input type="checkbox" name="au"%s(oa['u']) onchange="fossilUpdatePermissionsList()" />
561 @ Reader%s(B('u'))</label><br />
562 @ <label><input type="checkbox" name="av"%s(oa['v']) onchange="fossilUpdatePermissionsList()" />
563 @ Developer%s(B('v'))</label><br />
564 @ <label><input type="checkbox" name="ag"%s(oa['g']) onchange="fossilUpdatePermissionsList()" />
565 @ Clone%s(B('g'))</label><br />
566 @ <label><input type="checkbox" name="aj"%s(oa['j']) onchange="fossilUpdatePermissionsList()" />
567 @ Read Wiki%s(B('j'))</label><br />
568 @ <label><input type="checkbox" name="af"%s(oa['f']) onchange="fossilUpdatePermissionsList()" />
569 @ New Wiki%s(B('f'))</label><br />
570 @ <label><input type="checkbox" name="am"%s(oa['m']) onchange="fossilUpdatePermissionsList()" />
571 @ Append Wiki%s(B('m'))</label><br />
572 @ <label><input type="checkbox" name="ak"%s(oa['k']) onchange="fossilUpdatePermissionsList()" />
573 @ Write Wiki%s(B('k'))</label><br />
574 @ <label><input type="checkbox" name="al"%s(oa['l']) onchange="fossilUpdatePermissionsList()" />
575 @ Moderate Wiki%s(B('l'))</label><br />
576 @ </td><td><td width="40"></td><td valign="top">
577 @ <label><input type="checkbox" name="ar"%s(oa['r']) onchange="fossilUpdatePermissionsList()" />
578 @ Read Ticket%s(B('r'))</label><br />
579 @ <label><input type="checkbox" name="an"%s(oa['n']) onchange="fossilUpdatePermissionsList()" />
580 @ New Tickets%s(B('n'))</label><br />
581 @ <label><input type="checkbox" name="ac"%s(oa['c']) onchange="fossilUpdatePermissionsList()" />
582 @ Append To Ticket%s(B('c'))</label><br />
583 @ <label><input type="checkbox" name="aw"%s(oa['w']) onchange="fossilUpdatePermissionsList()" />
584 @ Write Tickets%s(B('w'))</label><br />
585 @ <label><input type="checkbox" name="aq"%s(oa['q']) onchange="fossilUpdatePermissionsList()" />
586 @ Moderate Tickets%s(B('q'))</label><br />
587 @ <label><input type="checkbox" name="at"%s(oa['t']) onchange="fossilUpdatePermissionsList()" />
588 @ Ticket Report%s(B('t'))</label><br />
589 @ <label><input type="checkbox" name="ax"%s(oa['x']) onchange="fossilUpdatePermissionsList()" />
590 @ Private%s(B('x'))</label><br />
591 @ <label><input type="checkbox" name="az"%s(oa['z']) onchange="fossilUpdatePermissionsList()" />
592 @ Download Zip%s(B('z'))</label>
593 @ </td></tr>
594 @ <tr><td colspan='7'>Selected capabilities: <span id="currentPermissionsString">(missing JS?)</span></td></tr>
595 @ </table>
596 @ </td>
597 @ </tr>
598 if( !login_is_special(zLogin) ){
599 @ <tr>
600 @ <td align="right">Password:</td>
@@ -604,10 +625,11 @@
625 @ </tr>
626 }
627 @ </table>
628 @ </div></form>
629 @ </div>
630 @ <script type='text/javascript'>fossilUpdatePermissionsList();</script>
631 @ <h2>Privileges And Capabilities:</h2>
632 @ <ul>
633 if( higherUser ){
634 @ <li><p class="missingPriv">
635 @ User %h(zLogin) has Setup privileges and you only have Admin privileges
636

Keyboard Shortcuts

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