Changeset 2079
- Timestamp:
- 02/26/09 22:58:56
- Files:
-
- trunk/deployment/resources/javascript/bedework/bedeworkAccess.js (modified) (19 diffs)
- trunk/deployment/resources/xsl/default/default/entityAccessForm.xsl (added)
- trunk/deployment/webuser/webapp/resources/demoskins/default/default/default.css (modified) (2 diffs)
- trunk/deployment/webuser/webapp/resources/demoskins/default/default/default.xsl (modified) (5 diffs)
- trunk/deployment/webuser/webapp/resources/demoskins/resources/bedeworkAccess.js (deleted)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/deployment/resources/javascript/bedework/bedeworkAccess.js
r2021 r2079 1 1 /* Bedework Access control form functions 2 2 3 Bedework uses to methods to set access control. The first and older method 4 is to send a single access control string per principal in one 5 request/response cycle. The second and more current method (which is 6 required in the event form) is to build a javascript object representing 7 the acls on an item (e.g. an event), manipulate the object with the GUI, and send 8 all the acls in a single request parameter. Both methods are currently used. 9 Method one is used for calendar access, method two for event access. In time 10 we will probably move all access control to use method two. 3 Bedework sets access control by building a javascript object representing 4 the acls on an item (e.g. an event), manipulating the object with the GUI, and 5 sending all the acls in a single request parameter. We would like to replace 6 this approach with wizards that ask the user what they want to do (and hide 7 the acls). 11 8 12 9 /* ********************************************************************** … … 52 49 var otherStr = "other"; 53 50 var grantStr = "grant"; 51 var denyStr = "deny" 54 52 var allStr = "all"; 55 53 56 var deleteStr = "remove"; 54 var bwAclWidgetDeleteStr = "remove"; 55 var bwAclWidgetEntryStr = "Entry"; 56 var bwAclWidgetAccessStr = "Access"; 57 var bwAclWidgetInheritedStr = "Inherited from"; 58 59 // note that resourcesRoot is passed in from the html head section defined in the xslt 60 var trashIcon = '<img src="' + resourcesRoot + '/resources/trashIcon.gif" width="13" height="13" border="0" alt="remove"/>'; 61 var userIcon = '<img src="' + resourcesRoot + '/resources/userIcon.gif" width="13" height="13" border="0" alt="user"/>'; 62 var groupIcon = '<img src="' + resourcesRoot + '/resources/groupIcon.gif" width="13" height="13" border="0" alt="group"/>'; 57 63 58 64 // How granted accesses appear … … 106 112 /* We shouldn't use the word local - it probably doesn't mean too much and it might actually be 107 113 inherited from something called /local for example */ 108 var inheritedStr = " Not inherited";114 var inheritedStr = "not inherited"; 109 115 110 116 // ************************** … … 176 182 hv.push(new howVals("W", "apcbStysuN", "<D:write/>", howWriteVal, howDenyWriteVal)); 177 183 hv.push(new howVals("a", "", "<D:write-acl/>", howWriteAclVal, howDenyWriteAclVal)); 178 hv.push(new howVals("p", "", "<D: write-properties/>", howWritePropertiesVal, howDenyWritePropertiesVal));184 hv.push(new howVals("p", "", "<D:write-properties/>", howWritePropertiesVal, howDenyWritePropertiesVal)); 179 185 hv.push(new howVals("c", "", "<D:write-content/>", howWriteContentVal, howDenyWriteContentVal)); 180 186 … … 223 229 formObj.howItem[i].disabled = true; 224 230 // now iterate over corresponding radio buttons for each howItem 225 for (j = 0; j < formObj[formObj.howItem[i]. value].length; j++) {226 formObj[formObj.howItem[i]. value][j].disabled = true;231 for (j = 0; j < formObj[formObj.howItem[i].id].length; j++) { 232 formObj[formObj.howItem[i].id][j].disabled = true; 227 233 } 228 234 } else { … … 237 243 function toggleAllowDenyFlag(chkBoxObj,formObj) { 238 244 if (chkBoxObj.checked == true) { 239 activateAllowDenyFlag(chkBoxObj. value, formObj, false);245 activateAllowDenyFlag(chkBoxObj.id, formObj, false); 240 246 } else { 241 activateAllowDenyFlag(chkBoxObj. value, formObj, true);247 activateAllowDenyFlag(chkBoxObj.id, formObj, true); 242 248 } 243 249 } … … 246 252 function activateAllowDenyFlag(val,formObj,disabledFlag) { 247 253 for (i = 0; i < formObj[val].length; i++) { 248 formObj[val][i].disabled = disabledFlag; 249 } 250 } 251 252 // Gather up the how values on access form submission and set the how field 253 // (method 1) or return the value (method 2). 254 if (formObj[val][i].type == "radio") { //skip the checkbox with matching id 255 formObj[val][i].disabled = disabledFlag; 256 } 257 } 258 } 259 260 // Gather up the how values on access form submission and return the value. 254 261 // If in "basic" mode: 255 262 // Set the value of how to the value of the basicHowItem radio button. … … 259 266 // The allow/deny flag contains the final values to be returned with 260 267 // the "-" switch if we set the value to deny (e.g. "A" or "-A", "R" or "-R"). 261 // Method: there are two methods used with this function; method one sets 262 // the "how" field in the form used to update a single principal. Method 263 // two returns the assembled how string to the calling function. 264 function setAccessHow(formObj,method) { 268 function setAccessHow(formObj) { 265 269 var howString = ""; 266 270 if (formObj.setappvar[0].checked == true) { // "basic" mode is selected … … 273 277 for (i = 0; i < formObj.howItem.length; i++) { 274 278 if (formObj.howItem[i].checked == true) { 275 var howItem Val = formObj.howItem[i].value; // get the howItem valueand276 for (j = 0; j < formObj[howItem Val].length; j++) { // look up the value from the corresponding allow/deny flag277 if ( formObj[howItemVal][j].checked == true) {278 howString += formObj[howItem Val][j].value;279 var howItemId = formObj.howItem[i].id; // get the howItem id and 280 for (j = 0; j < formObj[howItemId].length; j++) { // look up the value from the corresponding allow/deny flag 281 if ((formObj[howItemId][j].checked == true) && (formObj[howItemId][j].type == "radio")) { 282 howString += formObj[howItemId][j].value; 279 283 } 280 284 } … … 282 286 } 283 287 } 284 if (method == 2) { 285 return howString; 286 } else { 287 formObj.how.value = howString; 288 } 288 return howString; 289 289 } 290 290 … … 325 325 this.format = function() { 326 326 if (whoType == "user") { 327 return userIcon + " " + who; 328 } 329 330 if (whoType == "group") { 331 return groupIcon + " " + who; 332 } 333 334 if (whoType == "resource") { 335 return who; 336 } 337 338 if (whoType == "auth") { 339 return groupIcon + " " + authenticatedStr; 340 } 341 342 if (whoType == "unauth") { 343 return groupIcon + " " + unauthenticatedStr; 344 } 345 346 if (whoType == "owner") { 347 return userIcon + " " + ownerStr; 348 } 349 350 if (whoType == "other") { 351 return groupIcon + " " + otherStr; 352 } 353 354 if (whoType == "all") { 355 return groupIcon + " " + allStr; 356 } 357 358 return "***************" + whoType; 359 } 360 361 // format the who string for xml representation 362 this.formatXml = function() { 363 if (whoType == "user") { 327 364 return who; 328 365 } … … 360 397 361 398 this.toXml = function() { 362 var w = this.format ();399 var w = this.formatXml(); 363 400 364 401 if (whoType == "other") { … … 390 427 391 428 this.equals = function(pr) { 392 //alert("this=" + this.toString() + " pr=" + pr.toString());393 394 429 if (this.whoType != pr.whoType) { 395 430 return false; 396 431 } 397 398 432 return this.who == pr.who; 399 433 } 400 434 } 401 435 402 /* METHOD TWO FUNCTIONS*/ 403 // Access Control Entry (ACE) object 404 436 /* Access Control Entry (ACE) object 437 */ 405 438 function bwAce(who, whoType, how, inherited, invert) { 406 439 this.principal = new bwPrincipal(who, whoType); … … 425 458 var h = how[i]; 426 459 var negated = false; 460 var grantDenyStr = grantStr; 427 461 if (h == "-") { 428 462 negated = true; 463 grantDenyStr = denyStr; 429 464 i++; 430 465 h = how[i]; 431 466 } 432 467 433 formattedHow += hows.getHows(h).getDispVal(negated) + " "; 468 formattedHow += '<span class="' + grantDenyStr + '">' + hows.getHows(h).getDispVal(negated) + '</span>'; 469 if (i != how.length-1) { 470 formattedHow += ', '; 471 } 434 472 } 435 473 … … 505 543 // row: current row in table 506 544 // aceI: index of the ace 507 this.toFormRow = function(row, aceI) { 508 row.insertCell(0).appendChild(document.createTextNode(this.principal.format())); 509 row.insertCell(1).appendChild(document.createTextNode(this.formatHow())); 545 // id: id of widget output block in the html 546 this.toFormRow = function(row, aceI, id) { 547 var td_0 = row.insertCell(0); 548 td_0.innerHTML = this.principal.format(); 549 var td_1 = row.insertCell(1); 550 td_1.innerHTML = this.formatHow(); 510 551 row.insertCell(2).appendChild(document.createTextNode(this.formatInherited())); 511 552 var td_3 = row.insertCell(3); 512 553 if (this.inherited == "") { 513 td_3.innerHTML = "<a href=\"javascript:bwAcl.deleteAce('" + aceI + "' )\">" + deleteStr + "</a>";554 td_3.innerHTML = "<a href=\"javascript:bwAcl.deleteAce('" + aceI + "','" + id + "')\">" + trashIcon + " " + bwAclWidgetDeleteStr + "</a>"; 514 555 } 515 556 } … … 551 592 552 593 // Update the list - expects the browser form object 553 this.update = function(formObj ) {594 this.update = function(formObj,id) { 554 595 // get the type of ace being set 555 596 var type; … … 568 609 569 610 // get the how string from the form 570 var how = setAccessHow(formObj , 2);611 var how = setAccessHow(formObj); 571 612 572 613 //alert("About to update who=" + formObj.who.value + … … 581 622 582 623 // redraw the display 583 this.display( );584 } 585 586 this.deleteAce = function(index ) {624 this.display(id); 625 } 626 627 this.deleteAce = function(index,id) { 587 628 var ace = aces[index]; 588 629 var replace = false; … … 607 648 608 649 // redraw the display 609 this.display( );610 } 611 612 // update the ACL table displayed on screen613 this.display = function( ) {650 this.display(id); 651 } 652 653 // build the ACL widget displayed on screen in the given id 654 this.display = function(id) { 614 655 try { 656 657 var aclWidget = document.getElementById(id); 658 aclWidget.innerHTML = ""; 659 660 var bwCurrentAccess = document.createElement("table"); 661 bwCurrentAccess.className = "common scheduling"; 662 bwCurrentAccess.id = "bwCurrentAccess"; 663 bwCurrentAccess.createTHead(); 664 bwCurrAccessHead = bwCurrentAccess.tHead.insertRow(0); 665 bwCurrAccessHead.innerHTML = '<th>' + bwAclWidgetEntryStr + '</th>' + '<th>' + bwAclWidgetAccessStr + '</th>' + '<th>' + bwAclWidgetInheritedStr + '</th><th></th>'; 666 var bwCurrAccessTBody = document.createElement("tbody"); 667 bwCurrentAccess.appendChild(bwCurrAccessTBody); 668 669 // finally, write the table back to the display 670 aclWidget.appendChild(bwCurrentAccess); 671 615 672 // get the table body 616 673 var aclTableBody = document.getElementById("bwCurrentAccess").tBodies[0]; 617 674 618 675 // remove existing rows 619 for (i = aclTableBody.rows.length - 1; i >= 0; i--) {620 aclTableBody.deleteRow(i);621 }622 623 // recreate the table rows676 //for (i = aclTableBody.rows.length - 1; i >= 0; i--) { 677 // aclTableBody.deleteRow(i); 678 //} 679 680 // create the table rows 624 681 for (var j = 0; j < aces.length; j++) { 625 682 var curAce = aces[j]; 626 683 var tr = aclTableBody.insertRow(j); 627 684 628 curAce.toFormRow(tr, j); 629 } 685 curAce.toFormRow(tr, j, id); 686 } 687 630 688 } catch (e) { 631 689 alert(e); trunk/deployment/webuser/webapp/resources/demoskins/default/default/default.css
r2074 r2079 1789 1789 padding: 0; 1790 1790 } 1791 #bedework # shareFormTable td {1791 #bedework #accessFormTable td { 1792 1792 border: 1px solid #666; 1793 1793 padding: 0 0 0.5em 0; 1794 1794 } 1795 #bedework # shareFormTable h5 {1795 #bedework #accessFormTable h5 { 1796 1796 background: #e5e5e5; 1797 1797 color: black; … … 1799 1799 padding: 4px; 1800 1800 } 1801 #bedework # shareFormTable #accessRightsToggle {1801 #bedework #accessFormTable #accessRightsToggle { 1802 1802 float: right; 1803 1803 font-weight: normal; 1804 1804 font-size: 0.8em; 1805 1805 } 1806 #bedework # shareFormTable .whoTypes {1806 #bedework #accessFormTable .whoTypes { 1807 1807 margin: 1em; 1808 1808 } trunk/deployment/webuser/webapp/resources/demoskins/default/default/default.xsl
r2078 r2079 53 53 <xsl:include href="../../../bedework-common/default/default/messages.xsl"/> 54 54 <xsl:include href="../../../bedework-common/default/default/util.xsl"/> 55 <xsl:include href="../../../bedework-common/default/default/entityAccessForm.xsl"/> 55 56 56 57 <!-- DEFINE GLOBAL CONSTANTS --> … … 404 405 <xsl:if test="/bedework/page='modCalendar' or 405 406 /bedework/page='modSchedulingPrefs'"> 406 <script type="text/javascript" src=" {$resourcesRoot}/resources/bedeworkAccess.js"> </script>407 <script type="text/javascript" src="/bedework-common/javascript/bedework/bedeworkAccess.js"> </script> 407 408 <!-- initialize calendar acls, if present --> 408 409 <xsl:if test="/bedework/currentCalendar/acl/ace"> … … 449 450 <script type="text/javascript" src="{$resourcesRoot}/resources/bedeworkEventForm.js"> </script> 450 451 <script type="text/javascript" src="{$resourcesRoot}/resources/bedeworkXProperties.js"> </script> 451 <script type="text/javascript" src=" {$resourcesRoot}/resources/bedeworkAccess.js"> </script>452 <script type="text/javascript" src="/bedework-common/javascript/bedework/bedeworkAccess.js"> </script> 452 453 <!-- initialize event acls, if present --> 453 454 <xsl:if test="/bedework/editableAccess/access/acl/ace"> … … 4915 4916 4916 4917 <div id="sharingBox"> 4918 <h3>Current Access:</h3> 4917 4919 <div id="bwCurrentAccessWidget"> </div> 4918 4920 <script type="text/javascript"> … … 7719 7721 </xsl:template> 7720 7722 7721 <xsl:template name="entityAccessForm">7722 <xsl:param name="type"/><!-- optional: currently used for inbox and outbox to conditionally display scheduling access -->7723 <xsl:param name="acl"/><!-- required: nodeset of entity acls used to initialize javascript object. -->7724 <xsl:param name="outputId"/><!-- required: id of the current access block display to update -->7725 7726 <table cellpadding="0" id="shareFormTable" class="common">7727 <tr>7728 <th colspan="2" class="commonHeader">Add:</th>7729 </tr>7730 <tr>7731 <td>7732 <h5>Who:</h5>7733 <div class="whoTypes">7734 <input type="text" name="who" size="20"/><br/>7735 <input type="radio" value="user" name="whoType" checked="checked"/> user7736 <input type="radio" value="group" name="whoType"/> group7737 <p>OR</p>7738 <p>7739 <input type="radio" value="owner" name="whoType"/> owner<br/>7740 <input type="radio" value="auth" name="whoType"/> authenticated<br/>7741 <input type="radio" value="unauth" name="whoType"/> unauthenticated<br/>7742 <input type="radio" value="all" name="whoType"/> all users7743 </p>7744 <input type="button" name="updateACLs" value="add entry" onclick="bwAcl.update(this.form,'{$outputId}')"/>7745 </div>7746 </td>7747 <td>7748 <h5>7749 <span id="accessRightsToggle">7750 <xsl:choose>7751 <xsl:when test="/bedework/appvar[key='accessRightsToggle']/value='advanced'">7752 <input type="radio" name="setappvar" value="accessRightsToggle(basic)" onclick="changeClass('howList','visible');changeClass('howTable','invisible');"/>basic7753 <input type="radio" name="setappvar" value="accessRightsToggle(advanced)" checked="checked" onclick="changeClass('howList','invisible');changeClass('howTable','visible');"/>advanced7754 </xsl:when>7755 <xsl:otherwise>7756 <input type="radio" name="setappvar" value="accessRightsToggle(basic)" checked="checked" onclick="changeClass('howList','visible');changeClass('howTable','invisible');"/>basic7757 <input type="radio" name="setappvar" value="accessRightsToggle(advanced)" onclick="changeClass('howList','invisible');changeClass('howTable','visible');"/>advanced7758 </xsl:otherwise>7759 </xsl:choose>7760 </span>7761 Rights:7762 </h5>7763 <input type="hidden" name="how" value="" id="bwCurrentHow"/>7764 <!-- field 'acl' will receive xml for method 2 -->7765 <input type="hidden" name="acl" value="" id="bwCurrentAcl" />7766 <!-- Advanced Access Rights: -->7767 <!-- the "how" field is set by iterating over the howItems below -->7768 <table id="howTable" class="invisible" cellspacing="0">7769 <xsl:if test="/bedework/appvar[key='accessRightsToggle']/value='advanced'">7770 <xsl:attribute name="class">visible</xsl:attribute>7771 </xsl:if>7772 <tr>7773 <th>access type</th>7774 <th>allow</th>7775 <th>deny</th>7776 </tr>7777 <tr>7778 <td class="level1">7779 <input type="checkbox" value="A" id="accessAll" name="howItem" onclick="setupAccessForm(this, this.form); toggleAllowDenyFlag(this, this.form)"/>All7780 </td>7781 <td>7782 <input type="radio" value="A" name="accessAll" checked="checked" disabled="disabled"/>7783 </td>7784 <td>7785 <input type="radio" value="-A" name="accessAll" disabled="disabled"/>7786 </td>7787 </tr>7788 <tr>7789 <td class="level2">7790 <input type="checkbox" value="R" id="accessRead" name="howItem" onclick="setupAccessForm(this, this.form); toggleAllowDenyFlag(this, this.form)" checked="checked"/> Read7791 </td>7792 <td>7793 <input type="radio" value="R" name="accessRead" checked="checked"/>7794 </td>7795 <td>7796 <input type="radio" value="-R" name="accessRead"/>7797 </td>7798 </tr>7799 <tr>7800 <td class="level3">7801 <input type="checkbox" value="r" id="r" name="howItem" disabled="disabled" onclick="toggleAllowDenyFlag(this, this.form)"/> read ACL7802 </td>7803 <td>7804 <input type="radio" value="r" name="r" checked="checked" disabled="disabled"/>7805 </td>7806 <td>7807 <input type="radio" value="-r" name="r" disabled="disabled"/>7808 </td>7809 </tr>7810 <tr>7811 <td class="level3">7812 <input type="checkbox" value="P" id="accessPriv" name="howItem" disabled="disabled" onclick="toggleAllowDenyFlag(this, this.form)"/> read current user privilege set7813 </td>7814 <td>7815 <input type="radio" value="P" name="accessPriv" checked="checked" disabled="disabled"/>7816 </td>7817 <td>7818 <input type="radio" value="-P" name="accessPriv" disabled="disabled"/>7819 </td>7820 </tr>7821 <tr>7822 <td class="level3">7823 <input type="checkbox" value="F" id="F" name="howItem" disabled="disabled" onclick="toggleAllowDenyFlag(this, this.form)"/> read freebusy7824 </td>7825 <td>7826 <input type="radio" value="F" name="F" checked="checked" disabled="disabled"/>7827 </td>7828 <td>7829 <input type="radio" value="-F" name="F" disabled="disabled"/>7830 </td>7831 </tr>7832 <tr>7833 <td class="level2">7834 <input type="checkbox" value="W" id="W" name="howItem" onclick="setupAccessForm(this, this.form); toggleAllowDenyFlag(this, this.form)"/> Write7835 </td>7836 <td>7837 <input type="radio" value="W" name="W" checked="checked" disabled="disabled"/>7838 </td>7839 <td>7840 <input type="radio" value="-W" name="W" disabled="disabled"/>7841 </td>7842 </tr>7843 <tr>7844 <td class="level3">7845 <input type="checkbox" value="a" id="a" name="howItem" onclick="toggleAllowDenyFlag(this, this.form)"/> write ACL7846 </td>7847 <td>7848 <input type="radio" value="a" name="a" checked="checked" disabled="disabled"/>7849 </td>7850 <td>7851 <input type="radio" value="-a" name="a" disabled="disabled"/>7852 </td>7853 </tr>7854 <tr>7855 <td class="level3">7856 <input type="checkbox" value="p" id="p" name="howItem" onclick="toggleAllowDenyFlag(this, this.form)"/> write properties7857 </td>7858 <td>7859 <input type="radio" value="p" name="p" checked="checked" disabled="disabled"/>7860 </td>7861 <td>7862 <input type="radio" value="-p" name="p" disabled="disabled"/>7863 </td>7864 </tr>7865 <tr>7866 <td class="level3">7867 <input type="checkbox" value="c" id="c" name="howItem" onclick="toggleAllowDenyFlag(this, this.form)"/> write content7868 </td>7869 <td>7870 <input type="radio" value="c" name="c" checked="checked" disabled="disabled"/>7871 </td>7872 <td>7873 <input type="radio" value="-c" name="c" disabled="disabled"/>7874 </td>7875 </tr>7876 <tr>7877 <td class="level3">7878 <input type="checkbox" value="b" id="b" name="howItem" onclick="setupAccessForm(this, this.form); toggleAllowDenyFlag(this, this.form)"/> create (bind)7879 </td>7880 <td>7881 <input type="radio" value="b" name="b" checked="checked" disabled="disabled"/>7882 </td>7883 <td>7884 <input type="radio" value="-b" name="b" disabled="disabled"/>7885 </td>7886 </tr>7887 <xsl:if test="$type = 'inbox' or $type = 'outbox'">7888 <tr>7889 <td class="level4">7890 <input type="checkbox" value="S" id="accessSchedule" name="howItem" onclick="setupAccessForm(this, this.form); toggleAllowDenyFlag(this, this.form)"/> schedule7891 </td>7892 <td>7893 <input type="radio" value="S" name="accessSchedule" checked="checked" disabled="disabled"/>7894 </td>7895 <td>7896 <input type="radio" value="-S" name="accessSchedule" disabled="disabled"/>7897 </td>7898 </tr>7899 <tr>7900 <td class="level5">7901 <input type="checkbox" value="t" id="t" name="howItem" onclick="toggleAllowDenyFlag(this, this.form)"/> schedule request7902 </td>7903 <td>7904 <input type="radio" value="t" name="t" checked="checked" disabled="disabled"/>7905 </td>7906 <td>7907 <input type="radio" value="-t" name="t" disabled="disabled"/>7908 </td>7909 </tr>7910 <tr>7911 <td class="level5">7912 <input type="checkbox" value="y" id="y" name="howItem" onclick="toggleAllowDenyFlag(this, this.form)"/> schedule reply7913 </td>7914 <td>7915 <input type="radio" value="y" name="y" checked="checked" disabled="disabled"/>7916 </td>7917 <td>7918 <input type="radio" value="-y" name="y" disabled="disabled"/>7919 </td>7920 </tr>7921 <tr>7922 <td class="level5">7923 <input type="checkbox" value="s" id="s" name="howItem" onclick="toggleAllowDenyFlag(this, this.form)"/> schedule free-busy7924 </td>7925 <td>7926 <input type="radio" value="s" name="s" checked="checked" disabled="disabled"/>7927 </td>7928 <td>7929 <input type="radio" value="-s" name="s" disabled="disabled"/>7930 </td>7931 </tr>7932 </xsl:if>7933 <tr>7934 <td class="level3">7935 <input type="checkbox" value="u" id="u" name="howItem" onclick="toggleAllowDenyFlag(this, this.form)"/> delete (unbind)7936 </td>7937 <td>7938 <input type="radio" value="u" name="u" checked="checked" disabled="disabled"/>7939 </td>7940 <td>7941 <input type="radio" value="-u" name="u" disabled="disabled"/>7942 </td>7943 </tr>7944 <!--<tr>7945 <td class="level1">7946 <input type="checkbox" value="N" name="howItem" onclick="setupAccessForm(this, this.form)"/> None7947 </td>7948 <td>7949 </td>7950 <td>7951 </td>7952 </tr>-->7953 </table>7954 <!-- Simple Access Rights: -->7955 <!-- the "how" field is set by getting the selected basicHowItem -->7956 <ul id="howList">7957 <xsl:if test="/bedework/appvar[key='accessRightsToggle']/value='advanced'">7958 <xsl:attribute name="class">invisible</xsl:attribute>7959 </xsl:if>7960 <li>7961 <input type="radio" value="A" name="basicHowItem"/>All7962 </li>7963 <li>7964 <input type="radio" value="R" name="basicHowItem" checked="checked"/>Read only7965 </li>7966 </ul>7967 </td>7968 </tr>7969 </table>7970 </xsl:template>7971 7972 7723 <xsl:template match="acl" mode="currentAccess"> 7973 7724 <h3>Current Access:</h3>
