You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by ta...@apache.org on 2007/12/21 00:39:04 UTC

svn commit: r606057 [1/2] - in /portals/jetspeed-2/trunk/applications/j2-admin/src/webapp/WEB-INF: security/permissions/view.vm view/security/constraints/constraints-view.vm

Author: taylor
Date: Thu Dec 20 15:39:03 2007
New Revision: 606057

URL: http://svn.apache.org/viewvc?rev=606057&view=rev
Log:
https://issues.apache.org/jira/browse/JS2-835

Modified:
    portals/jetspeed-2/trunk/applications/j2-admin/src/webapp/WEB-INF/security/permissions/view.vm
    portals/jetspeed-2/trunk/applications/j2-admin/src/webapp/WEB-INF/view/security/constraints/constraints-view.vm

Modified: portals/jetspeed-2/trunk/applications/j2-admin/src/webapp/WEB-INF/security/permissions/view.vm
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/applications/j2-admin/src/webapp/WEB-INF/security/permissions/view.vm?rev=606057&r1=606056&r2=606057&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/applications/j2-admin/src/webapp/WEB-INF/security/permissions/view.vm (original)
+++ portals/jetspeed-2/trunk/applications/j2-admin/src/webapp/WEB-INF/security/permissions/view.vm Thu Dec 20 15:39:03 2007
@@ -1,681 +1,695 @@
-#*
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-*#
-#set($rc = $renderRequest.getAttribute("org.apache.jetspeed.request.RequestContext"))
-#set($req = $rc.Request)
-
-
-
-<!--
-javascript: alert( dojo.widget.byId( "portletsTable" ).data[3].actions = "none" )
-javascript: alert( dojo.widget.byId( "portletsTable" ).render(true) )
-
-
-var row=dojo.html.getParentByType(e.target,"tr");
-var body=dojo.html.getParentByType(row,"tbody");
-this.resetSelections(body);
-row.setAttribute("selected","true");
-this.setSelectionByRow(row);
-
-javascript: alert( dojo.widget.byId( "portletsTable").data[1].name )
-javascript: alert( updateSelectedRow() )
-
-javascript: alert( dojo.html.disableSelection(dojo.byId( "resourceName" )) )
-
-dojo.lang.shallowCopy(this.portlets) ;
--->
-
-<div dojoType="LayoutContainer"
-    layoutChildPriority="left-right"
-    style="width: 100%">
-
-  <div id="mainTabContainer" dojoType="TabContainer" selectedChild="portlets" doLayout="false">
-
-    <div id="portlets" dojoType="ContentPane" label="Portlets">
-      <div class="tableContainer">
-
-        <table dojoType="jetspeed:EditorTable" widgetId="portletsTable" class="permissions" headClass="fixedHeader" tbodyClass="scrollContent" enableMultipleSelect="true" enableAlternateRows="true" rowAlternateClass="alternateRow" templateCssPath="/j2-admin/css/security-permissions.css" cellpadding="0" cellspacing="0" border="0">
-          <col width="45%"></col>
-          <col width="15%"></col>
-          <col width="35%"></col>
-          <thead>
-          <tr>
-          <th field="name" dataType="String">Resource</th>
-          <th field="actions" dataType="String">Actions</th>
-          <th field="roles" dataType="String">Roles</th>        
-          </tr>
-          </thead>
-          <tbody>
-          </tbody>
-        </table>
-
-      </div>
-    </div>
-
-    <div id="folders" dojoType="ContentPane" label="Folders">
-      <div class="tableContainer">
-
-        <table dojoType="jetspeed:EditorTable" widgetId="foldersTable" class="permissions" headClass="fixedHeader" tbodyClass="scrollContent" enableMultipleSelect="true" enableAlternateRows="true" rowAlternateClass="alternateRow" templateCssPath="/j2-admin/css/security-permissions.css" cellpadding="0" cellspacing="0" border="0">
-        <col width="45%"></col>
-        <col width="15%"></col>
-        <col width="35%"></col>
-        <thead>
-        <tr>
-        <th field="name" dataType="String">Resource</th>
-        <th field="actions" dataType="String">Actions</th>
-        <th field="roles" dataType="String">Roles</th>        
-        </tr>
-        </thead>
-        <tbody>
-        </tbody>
-        </table>
-
-      </div>
-    </div>
-
-    <div id="pages" dojoType="ContentPane" label="Pages">
-      <div class="tableContainer">
-
-        <table dojoType="jetspeed:EditorTable" widgetId="pagesTable" class="permissions" headClass="fixedHeader" tbodyClass="scrollContent" enableMultipleSelect="true" enableAlternateRows="true" rowAlternateClass="alternateRow" templateCssPath="/j2-admin/css/security-permissions.css" cellpadding="0" cellspacing="0" border="0">
-        <col width="45%"></col>
-        <col width="15%"></col>
-        <col width="35%"></col>
-        <thead>
-        <tr>
-        <th field="name" dataType="String">Resource</th>
-        <th field="actions" dataType="String">Actions</th>
-        <th field="roles" dataType="String">Roles</th>    
-        </tr>
-        </thead>
-        <tbody>
-        </tbody>
-        </table>
-
-      </div>
-    </div>
-
-  </div>
-
-  <div dojoType="LayoutContainer" layoutChildPriority='none' style="width: 100%; height: 200px; border: 1px solid grey;">
-
-    <div dojoType="LayoutContainer" widgetId="editorTop" minHeight="20" layoutAlign="top" style="padding: 4px; border-bottom: thin inset grey; width: 100%; height: 55px">
-
-      <div dojoType="LayoutContainer"
-	    widgetId="resourceNameContainer"
-	    minHeight="20"
-            layoutAlign="left"
-	    style="padding: 4px; border-right: thin inset grey; width: 70%; height: 55px">
-        <b>Resource</b><br/>
-        <input name="resourceName" id="resourceName" type="text" size="50" onChange="updateSelectedRow()">
-      </div>
-
-      <div dojoType="LayoutContainer"
-	    widgetId="editorControls"
-	    minHeight="20"
-            layoutAlign="right"
-	    style="width: 20%; height: 55px">
-        <div class="buttonbox">
-
-        <button widgetId="newButton" dojoType="Button" onclick="newEntry()">
-            New
-        </button>
-
-        <button widgetId="saveButton" dojoType="Button" onclick="saveEntry()">
-            Save
-        </button>
-
-        <button widgetId="revertButton" dojoType="Button" onclick="revertEntry()">
-            Revert
-        </button>
-
-        <button widgetId="deleteButton" dojoType="Button" onclick="deleteEntry()">
-            Delete
-        </button>
-
-        </div>
-      </div>
-      
-    </div>
-
-    <div dojoType="LayoutContainer"
-	widgetId="rolesContainer"
-	minHeight="20"
-        layoutAlign="left"
-	style="padding: 4px; border-right: thin inset grey; width: 50%; height: 100px; overflow-y: auto; overflow-x: hidden">
-
-      <b>Roles</b><br />
-#foreach ($role in $roles)
-      <input type="checkbox" name="role_$velocityCount" id="role_$velocityCount" dojoType="Checkbox" /> <label for="role_$velocityCount">$role.Principal.Name</label><br />
-#end
-
-    </div>
-
-    <div dojoType="LayoutContainer"
-	widgetId="actionsContainer"
-	minHeight="20"
-        layoutAlign="left"
-	style="padding: 4px; width: 50%; height: 100px; overflow-y: auto; overflow-x: hidden" >
-      <b>Actions</b><br/>
-      <input type="checkbox" name="actionview" id="actionview" dojoType="Checkbox" /> <label for="actionview">View</label><br />
-      <input type="checkbox" name="actionedit" id="actionedit" dojoType="Checkbox" /> <label for="actionedit">Edit</label><br />
-      <input type="checkbox" name="actionhelp" id="actionhelp" dojoType="Checkbox" /> <label for="actionhelp">Help</label><br />
-    </div>
-
-  </div>
-
-  <div dojoType="dialog" id="SaveWarningDialog" bgColor="grey" bgOpacity="0.5" toggle="fade" toggleDuration="250">
-    <form onsubmit="return false;">
-    <table>
-      <tr>
-        <td>Please Save or Revert changes to the selected permissions record before proceeding.</td><td>&nbsp;</td>
-      </tr>
-      <tr>
-        <td colspan="2" align="right" class="buttonboxright">
-          <button dojoType="Button" onClick="dojo.widget.byId( 'SaveWarningDialog' ).hide();" >Cancel</button>
-          <button dojoType="Button" onClick="dojo.widget.byId( 'SaveWarningDialog' ).hide(); revertEntry();">Revert</button>
-          <button dojoType="Button" onClick="dojo.widget.byId( 'SaveWarningDialog' ).hide(); saveEntry();">Save</button>
-        </td>
-      </tr>
-    </table>
-    </form>
-  </div>
- </div>
-</div>
-
-<script language="JavaScript" type="text/javascript">
-    rolePrincipals = new Array();
-#foreach ($role in $roles)
-    rolePrincipals.push( "$role.Principal.Name" );
-#end
-    actionNames = new Array();
-    actionNames.push( "view" );
-    actionNames.push( "edit" );
-    actionNames.push( "help" );
-</script>
-<script type="text/javascript">
-
-
-function processTableRowEvent(e, tableName)
-{
-    dojo.widget.byId( tableName ).processTableRowEvent( e );
-}
-
-function clearAndDisableEditor()
-{
-    var resourceTextBox = dojo.byId( "resourceName" );
-    if ( resourceTextBox )
-    {
-        resourceTextBox.value = "";
-        resourceTextBox.disabled = true;
-    }
-    for ( var i = 0 ; i < actionNames.length; i++ )
-    {
-        var actionCheckbox = dojo.widget.byId( "action" + actionNames[i] );
-        if ( actionCheckbox )
-        {
-            actionCheckbox.checked = false;
-            actionCheckbox.disabled = true;
-            actionCheckbox._setInfo();
-        }
-    }
-    for ( var i = 0 ; i < rolePrincipals.length; i++ )
-    {
-        var roleIndex = i + 1;
-        var roleCheckbox = dojo.widget.byId( "role_" + roleIndex );
-        if ( roleCheckbox )
-        {
-            roleCheckbox.checked = false;
-            roleCheckbox.disabled = true;
-            roleCheckbox._setInfo();
-        }
-    }
-
-    var buttonWidget = dojo.widget.byId( "newButton" );
-    if ( buttonWidget )
-        buttonWidget.setDisabled(false);
-
-    buttonWidget = dojo.widget.byId( "saveButton" );
-    if ( buttonWidget )
-        buttonWidget.setDisabled(true);
-
-    buttonWidget = dojo.widget.byId( "revertButton" );
-    if ( buttonWidget )
-        buttonWidget.setDisabled(true);
-
-    buttonWidget = dojo.widget.byId( "deleteButton" );
-    if ( buttonWidget )
-        buttonWidget.setDisabled(true);
-}
-
-function updateEditor( rowData )
-{
-    var resourceTextBox = dojo.byId( "resourceName" );
-    if ( rowData.__isNew )
-    {
-        resourceTextBox.disabled = false;
-    }
-    else
-    {
-        resourceTextBox.disabled = true;
-    }
-    resourceTextBox.value = rowData.name;
-
-    for ( var i = 0 ; i < actionNames.length; i++ )
-    {
-        var actionCheckbox = dojo.widget.byId( "action" + actionNames[i] );
-        if ( actionCheckbox )
-        {
-            actionCheckbox.disabled = false;
-            actionCheckbox.checked = false;
-            actionCheckbox._setInfo();
-        }
-    }
-
-    var actionsList = rowData.actions.split( new RegExp( " *, *" ) );
-    if ( actionsList )
-    {
-        for ( var i = 0 ; i < actionsList.length ; i++ )
-        {
-            var actionCheckbox = dojo.widget.byId( "action" + actionsList[i] );
-            if ( actionCheckbox )
-            {
-                actionCheckbox.checked = true;
-                actionCheckbox._setInfo();
-            }
-        }
-    }
-
-    for ( var i = 0 ; i < rolePrincipals.length; i++ )
-    {
-        var roleIndex = i + 1;
-        var roleCheckbox = dojo.widget.byId( "role_" + roleIndex );
-        roleCheckbox.disabled = false;
-        roleCheckbox.checked = false;
-        roleCheckbox._setInfo();
-    }
-    var rolesList = rowData.roles.split( new RegExp( " *, *" ) );
-    if ( rolesList )
-    {
-        for ( var i = 0 ; i < rolesList.length ; i++ )
-        {
-            var tRole = rolesList[i];
-            for ( var j = 0 ; j < rolePrincipals.length; j++ )
-            {
-                if ( tRole == rolePrincipals[j] )
-                {
-                    var roleIndex = j + 1;
-                    var roleCheckbox = dojo.widget.byId( "role_" + roleIndex );
-                    if ( roleCheckbox )
-                    {
-                        roleCheckbox.checked = true;
-                        roleCheckbox._setInfo();
-                    }
-                }
-            }
-        }
-    }
-
-    updateEditorControls();
-}
-function getTableWidget( containedInTab )
-{
-    if ( ! containedInTab )
-        containedInTab = dojo.widget.byId( "mainTabContainer" ).selectedChildWidget;
-    return dojo.widget.byId( containedInTab.widgetId + "Table" );
-}
-function checkForChanges()
-{
-    var tTableWidget = getTableWidget();
-    return tTableWidget.checkForChanges();
-}
-function updateSelectedRow()
-{
-    var tTableWidget = getTableWidget();
-    var selectedRowData = tTableWidget.getSelectedRow() ;
-    if ( selectedRowData != null )
-    {
-        selectedRowData.name = dojo.byId( "resourceName" ).value;
-
-        var updatedActions = "";
-        for ( var i = 0 ; i < actionNames.length; i++ )
-        {
-            var actionCheckbox = dojo.widget.byId( "action" + actionNames[i] );
-            if ( actionCheckbox && actionCheckbox.checked )
-            {
-                if ( updatedActions.length > 0 )
-                    updatedActions += ", ";
-                updatedActions += actionNames[i];
-            }
-        }
-        selectedRowData.actions = updatedActions;
-
-        var updatedRoles = "";
-        for ( var i = 0 ; i < rolePrincipals.length; i++ )
-        {
-            var roleIndex = i + 1;
-            var roleCheckbox = dojo.widget.byId( "role_" + roleIndex );
-            if ( roleCheckbox && roleCheckbox.checked )
-            {
-                if ( updatedRoles.length > 0 )
-                    updatedRoles += ",";
-                updatedRoles += rolePrincipals[i];
-            }
-        }
-        selectedRowData.roles = updatedRoles;
-        
-        tTableWidget.updateClonedData( selectedRowData, tTableWidget.selected[0] );
-
-        tTableWidget.render(true);
-        tTableWidget.showSelections();
-
-        updateEditorControls();
-    }
-}
-
-function updateEditorControls()
-{
-    var hasChanged = checkForChanges();
-    if ( hasChanged )
-    {
-        var buttonWidget = dojo.widget.byId( "saveButton" );
-        if ( buttonWidget )
-            buttonWidget.setDisabled(false);
-
-        buttonWidget = dojo.widget.byId( "revertButton" );
-        if ( buttonWidget )
-        {
-            if ( hasChanged == "modified" )
-            {
-                buttonWidget.setDisabled(false);
-            }
-            else
-            {
-                buttonWidget.setDisabled(true);
-            }
-        }
-
-        buttonWidget = dojo.widget.byId( "newButton" );
-        if ( buttonWidget )
-            buttonWidget.setDisabled(true);
-
-        buttonWidget = dojo.widget.byId( "deleteButton" );
-        if ( buttonWidget )
-        {
-            if ( hasChanged == "modified" )
-            {
-                buttonWidget.setDisabled(true);
-            }
-            else
-            {
-                buttonWidget.setDisabled(false);
-            }
-        }
-    }
-    else
-    {
-        var buttonWidget = dojo.widget.byId( "saveButton" );
-        if ( buttonWidget )
-            buttonWidget.setDisabled(true);
-
-        buttonWidget = dojo.widget.byId( "revertButton" );
-        if ( buttonWidget )
-            buttonWidget.setDisabled(true);
-
-        buttonWidget = dojo.widget.byId( "newButton" );
-        if ( buttonWidget )
-            buttonWidget.setDisabled(false);
-
-        buttonWidget = dojo.widget.byId( "deleteButton" );
-        if ( buttonWidget )
-            buttonWidget.setDisabled(false);
-    }
-}
-
-
-
-// http://localhost:8080/jetspeed/ajaxapi?action=permissions&method=add&type=portlet&resource=demo::*&roles=role1,role2,role3&actions=view,edit
-// http://localhost:8080/jetspeed/ajaxapi?action=permissions&method=update&type=portlet&resource=jsf-demo%3A%3A*&roles=admin%2Cuser%2Csubsite2&actions=view%2C%20edit&oldactions=view%2C%20edit xml-content=<js><status>failure</status><action>unknown</action></js>
-
-
-function saveEntrySubmit( selectedRowData, removeEntry )
-{
-    var tTableWidget = getTableWidget();
-
-    if ( ! selectedRowData ) { dojo.raise( "saveEntrySubmit can't find selectedRowData" ) ; return; }
-
-    var masterData = tTableWidget.getData( tTableWidget.js_masterdata, selectedRowData.Id );
-    if ( ! masterData ) { dojo.raise( "saveEntrySubmit can't find masterdata" ) ; return; } 
-
-    var contextPath = document.location.protocol + "/" + "/" + document.location.host + "$req.ContextPath";
-    var requestUrl = contextPath + "/ajaxapi?action=permissions" ;
-
-    if ( removeEntry )
-    {
-        requestUrl += "&method=remove";
-    }
-    else if ( tTableWidget.entryIsNew( selectedRowData ) )
-    {
-        requestUrl += "&method=add";
-    }
-    else
-    {
-        requestUrl += "&method=update";
-    }
-    requestUrl += "&type=" + tTableWidget.js_type;
-    
-    requestUrl += "&resource=" + encodeURIComponent( selectedRowData.name );
-    requestUrl += "&roles=" + encodeURIComponent( selectedRowData.roles );
-    requestUrl += "&actions=" + encodeURIComponent( selectedRowData.actions );
-    requestUrl += "&oldactions=" + encodeURIComponent( masterData.actions );
-    
-    var mimeType = "text/xml";
-    dojo.io.bind({
-
-        url: requestUrl,
-
-        mimetype: mimeType,
-
-        load: function( type, data, evt )
-        {
-            var success = false;
-            var statusElmt = data.getElementsByTagName( "status" );
-            if ( statusElmt != null )
-            {
-                var successVal = statusElmt[0].firstChild.nodeValue;
-                if ( successVal == "success" )
-                    success = true;
-            }
-            if ( ! success )
-            {
-                var textContent = dojo.dom.innerXML( data );
-                if ( ! textContent )
-                    textContent = ( data != null ? "!= null (IE no XMLSerializer)" : "null" );
-                dojo.raise( "saveEntrySubmit failure url=" + requestUrl + "  xml-content=" + textContent );
-            }
-        },
-
-        error: function( type, error )
-        {
-            dojo.raise( "saveEntrySubmit failure url=" + requestUrl + " type=" + type + " error=" + error ) ;
-        }
-    });     
-};
-
-function newEntry()
-{
-    var tTableWidget = getTableWidget();
-    tTableWidget.newEntry();
-}
-function getNewEntryPrototype()
-{
-    return { name: "", actions: "", roles: "" };
-}
-
-function deleteEntry()
-{
-    var tTableWidget = getTableWidget();
-    tTableWidget.deleteEntry();
-}
-function saveEntry()
-{
-    var tTableWidget = getTableWidget();
-    tTableWidget.saveEntry();
-}
-
-function revertEntry()
-{
-    var tTableWidget = getTableWidget();
-    tTableWidget.revertEntry();
-}
-
-function okToChangeSelectionOrExit(invocation)
-{
-    var tTableWidget = getTableWidget();
-    return tTableWidget.okToChangeSelectionOrExit(invocation);
-}
-
-function dojoDebugCurrentTableData()
-{
-    dojo.debug( debugCurrentTableData() );
-}
-function alertDebugCurrentTableData()
-{
-    alert( debugCurrentTableData() );
-}
-function debugCurrentTableData()
-{
-    var tTableWidget = getTableWidget();
-    return tTableWidget.debugTableData();
-}
-
-function addListeners()
-{
-    var tabContainer = dojo.widget.byId("mainTabContainer");
-    dojo.event.connect("around", tabContainer, "selectChild", function(invocation) {
-        if ( checkForChanges() )
-        {
-            dojo.widget.byId( "SaveWarningDialog" ).show();
-            return;
-        }
-        invocation.proceed();
-        var tab = invocation.args[0];
-        var tTableWidget = getTableWidget( tab );
-        var selectedRowData = tTableWidget.getSelectedRow();
-    
-        if ( ! selectedRowData )
-        {
-            clearAndDisableEditor();
-        }
-        else
-        {
-            tTableWidget.showSelections();
-            updateEditor( selectedRowData );
-        }
-    });
-
-    var portletsTable = dojo.widget.byId("portletsTable");
-    dojo.event.connect( "around", portletsTable, "onUISelect", "okToChangeSelectionOrExit" );
-    dojo.event.connect(portletsTable, "onSelect", function(e) {
-        processTableRowEvent(e, "portletsTable");
-    });
-    dojo.event.connect(portletsTable, "updateEditor", updateEditor );
-    dojo.event.connect(portletsTable, "saveEntrySubmit", saveEntrySubmit );
-    dojo.event.connect(portletsTable, "clearAndDisableEditor", clearAndDisableEditor );
-    portletsTable.getNewEntryPrototype = getNewEntryPrototype;
-    var data = [] ;
-#foreach($p in $portletPermissions)
-    data.push( { name: "$p.Permission.Name", actions: "$p.Permission.Actions", roles: "$p.Roles", Id: $velocityCount } );
-#end
-    portletsTable.js_masterdata = data;
-    portletsTable.js_type = "portlet";
-    portletsTable.saveWarningDialogWidgetId = "SaveWarningDialog";
-    portletsTable.parseData( portletsTable.js_masterdata );
-    portletsTable.render( true );
-    
-    
-    var foldersTable = dojo.widget.byId("foldersTable");
-    dojo.event.connect( "around", foldersTable, "onUISelect", "okToChangeSelectionOrExit" );
-    dojo.event.connect(foldersTable, "onSelect", function(e) {
-        //dojo.debugShallow( e.currentTarget );
-        processTableRowEvent(e, "foldersTable");
-    });
-    dojo.event.connect(foldersTable, "updateEditor", updateEditor );
-    dojo.event.connect(foldersTable, "saveEntrySubmit", saveEntrySubmit );
-    dojo.event.connect(foldersTable, "clearAndDisableEditor", clearAndDisableEditor );
-    foldersTable.getNewEntryPrototype = getNewEntryPrototype;
-    
-    data = [] ;
-#foreach($p in $folderPermissions)
-    data.push( { name: "$p.Permission.Name", actions: "$p.Permission.Actions", roles: "$p.Roles", Id: $velocityCount } );
-#end
-    foldersTable.js_masterdata = data;
-    foldersTable.js_type = "folder";
-    foldersTable.saveWarningDialogWidgetId = "SaveWarningDialog";
-    foldersTable.parseData( data );
-    foldersTable.render( true );
-
-    var pagesTable = dojo.widget.byId("pagesTable");
-    dojo.event.connect( "around", pagesTable, "onUISelect", "okToChangeSelectionOrExit" );
-    dojo.event.connect(pagesTable, "onSelect", function(e) {
-        //dojo.debugShallow( e.currentTarget );
-        processTableRowEvent(e, "pagesTable");
-    });
-    dojo.event.connect(pagesTable, "updateEditor", updateEditor );
-    dojo.event.connect(pagesTable, "saveEntrySubmit", saveEntrySubmit );
-    dojo.event.connect(pagesTable, "clearAndDisableEditor", clearAndDisableEditor );
-    pagesTable.getNewEntryPrototype = getNewEntryPrototype;
-    data = [] ;
-#foreach($p in $pagePermissions)
-    data.push( { name: "$p.Permission.Name", actions: "$p.Permission.Actions", roles: "$p.Roles", Id: $velocityCount } );
-#end
-    pagesTable.js_masterdata = data;
-    pagesTable.js_type = "page";
-    pagesTable.saveWarningDialogWidgetId = "SaveWarningDialog";
-    pagesTable.parseData( data );
-    pagesTable.render( true );
-
-    for ( var i = 0 ; i < actionNames.length; i++ )
-    {
-        var actionCheckbox = dojo.widget.byId( "action" + actionNames[i] );
-        if ( actionCheckbox )
-        {
-            dojo.event.connect(actionCheckbox, "onClick", function() {
-                if(!actionCheckbox.disabled){
-                    updateSelectedRow();
-                }
-            });
-        }
-    }
-    for ( var i = 0 ; i < rolePrincipals.length; i++ )
-    {
-        var roleIndex = i + 1;
-        var roleCheckbox = dojo.widget.byId( "role_" + roleIndex );
-        if ( roleCheckbox )
-        {
-            dojo.event.connect(roleCheckbox, "onClick", function() {
-                if(!roleCheckbox.disabled){
-                    updateSelectedRow();
-                }
-            });
-        }
-    }
-
-    clearAndDisableEditor();
-}
-
-
-dojo.addOnLoad( window.addListeners );
-</script>
+#*
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+*#
+#set($rc = $renderRequest.getAttribute("org.apache.jetspeed.request.RequestContext"))
+#set($req = $rc.Request)
+
+
+
+<!--
+javascript: alert( dojo.widget.byId( "portletsTable" ).data[3].actions = "none" )
+javascript: alert( dojo.widget.byId( "portletsTable" ).render(true) )
+
+
+var row=dojo.html.getParentByType(e.target,"tr");
+var body=dojo.html.getParentByType(row,"tbody");
+this.resetSelections(body);
+row.setAttribute("selected","true");
+this.setSelectionByRow(row);
+
+javascript: alert( dojo.widget.byId( "portletsTable").data[1].name )
+javascript: alert( updateSelectedRow() )
+
+javascript: alert( dojo.html.disableSelection(dojo.byId( "resourceName" )) )
+
+dojo.lang.shallowCopy(this.portlets) ;
+-->
+
+<div dojoType="LayoutContainer" widgetId="permsRootLContainer" class="permsRootLContainer"
+     layoutChildPriority="left-right">
+
+    <div dojoType="LayoutContainer" widgetId="permsTabLContainer" class="permsTabLContainer" layoutAlign="top" layoutChildPriority="none">
+
+        <div id="permsTabContainer" dojoType="TabContainer" selectedChild="portlets" doLayout="false">
+
+            <div id="portlets" dojoType="ContentPane" label="Portlets">
+                <div class="tableContainer">
+
+                    <table dojoType="jetspeed:EditorTable" widgetId="portletsTable" class="permissions" headClass="fixedHeader" tbodyClass="scrollContent" enableMultipleSelect="true" enableAlternateRows="true" rowAlternateClass="alternateRow" templateCssPath="/j2-admin/css/security-permissions.css" cellpadding="0" cellspacing="0" border="0">
+                        <col width="45%"></col>
+                        <col width="15%"></col>
+                        <col width="35%"></col>
+                        <thead>
+                            <tr>
+                                <th field="name" dataType="String">Resource</th>
+                                <th field="actions" dataType="String">Actions</th>
+                                <th field="roles" dataType="String">Roles</th>        
+                            </tr>
+                        </thead>
+                        <tbody>
+                        </tbody>
+                    </table>
+
+                </div>
+            </div>
+
+            <div id="folders" dojoType="ContentPane" label="Folders">
+                <div class="tableContainer">
+
+                    <table dojoType="jetspeed:EditorTable" widgetId="foldersTable" class="permissions" headClass="fixedHeader" tbodyClass="scrollContent" enableMultipleSelect="true" enableAlternateRows="true" rowAlternateClass="alternateRow" templateCssPath="/j2-admin/css/security-permissions.css" cellpadding="0" cellspacing="0" border="0">
+                        <col width="45%"></col>
+                        <col width="15%"></col>
+                        <col width="35%"></col>
+                        <thead>
+                            <tr>
+                                <th field="name" dataType="String">Resource</th>
+                                <th field="actions" dataType="String">Actions</th>
+                                <th field="roles" dataType="String">Roles</th>        
+                            </tr>
+                        </thead>
+                        <tbody>
+                        </tbody>
+                    </table>
+
+                </div>
+            </div>
+
+            <div id="pages" dojoType="ContentPane" label="Pages">
+                <div class="tableContainer">
+
+                    <table dojoType="jetspeed:EditorTable" widgetId="pagesTable" class="permissions" headClass="fixedHeader" tbodyClass="scrollContent" enableMultipleSelect="true" enableAlternateRows="true" rowAlternateClass="alternateRow" templateCssPath="/j2-admin/css/security-permissions.css" cellpadding="0" cellspacing="0" border="0">
+                        <col width="45%"></col>
+                        <col width="15%"></col>
+                        <col width="35%"></col>
+                        <thead>
+                            <tr>
+                                <th field="name" dataType="String">Resource</th>
+                                <th field="actions" dataType="String">Actions</th>
+                                <th field="roles" dataType="String">Roles</th>    
+                            </tr>
+                        </thead>
+                        <tbody>
+                        </tbody>
+                    </table>
+
+                </div>
+            </div>
+        </div>
+    </div>
+
+
+    <div dojoType="LayoutContainer" widgetId="editorLContainer" class="editorLContainer" layoutAlign="client" layoutChildPriority="top-bottom">
+
+        <div dojoType="LayoutContainer" widgetId="editorLTop" class="editorLTop" layoutAlign="top">
+
+            <div dojoType="ContentPane"
+                 widgetId="resourceNameLContainer"
+                 class="resourceNameLContainer"
+                 layoutAlign="left">
+                <b>Resource</b><br/>
+                <input name="resourceName" id="resourceName" type="text" size="45" onChange="updateSelectedRow()">
+            </div>
+
+            <div dojoType="ContentPane"
+                 widgetId="editorControls"
+                 class="editorControlsLContainer buttonbox"
+                 layoutAlign="client">
+
+                <button widgetId="deleteButton" dojoType="Button" onclick="deleteEntry()">
+                    Delete
+                </button>
+
+                <button widgetId="revertButton" dojoType="Button" onclick="revertEntry()">
+                    Revert
+                </button>
+
+                <button widgetId="saveButton" dojoType="Button" onclick="saveEntry()">
+                    Save
+                </button>
+                
+                <button widgetId="newButton" dojoType="Button" onclick="newEntry()">
+                    New
+                </button>
+
+            </div>
+        </div>
+
+        <div dojoType="LayoutContainer" widgetId="editorLBottom" class="editorLBottom" layoutAlign="client">
+
+            <div dojoType="ContentPane"
+                 widgetId="actionsContainer"
+                 class="actionsLContainer"
+                 layoutAlign="right">
+                <b>Actions</b><br/>
+                <input type="checkbox" name="actionview" id="actionview" dojoType="Checkbox" /> <label for="actionview">View</label><br />
+                <input type="checkbox" name="actionedit" id="actionedit" dojoType="Checkbox" /> <label for="actionedit">Edit</label><br />
+                <input type="checkbox" name="actionhelp" id="actionhelp" dojoType="Checkbox" /> <label for="actionhelp">Help</label><br />
+                <input type="checkbox" name="actionabout" id="actionabout" dojoType="Checkbox" /> <label for="actionabout">About</label><br />
+                <input type="checkbox" name="actionconfig" id="actionconfig" dojoType="Checkbox" /> <label for="actionconfig">Config</label><br />
+                <input type="checkbox" name="actionedit_defaults" id="actionedit_defaults" dojoType="Checkbox" /> <label for="actionedit_defaults">Edit Defaults</label><br />
+                <input type="checkbox" name="actionprint" id="actionprint" dojoType="Checkbox" /> <label for="actionprint">Print</label><br />                
+            </div>
+
+            <div dojoType="ContentPane"
+                 widgetId="rolesContainer"
+                 class="rolesLContainer"
+                 layoutAlign="client">
+
+                <b>Roles</b><br />
+                #foreach ($role in $roles)
+                <input type="checkbox" name="role_$velocityCount" id="role_$velocityCount" dojoType="Checkbox" /> <label for="role_$velocityCount">$role.Principal.Name</label><br />
+                #end
+
+            </div>
+
+
+        </div>
+
+        <div dojoType="dialog" id="SaveWarningDialog" bgColor="grey" bgOpacity="0.5" toggle="fade" toggleDuration="250">
+            <form onsubmit="return false;">
+                <table>
+                    <tr>
+                        <td>Please Save or Revert changes to the selected permissions record before proceeding.</td><td>&nbsp;</td>
+                    </tr>
+                    <tr>
+                        <td colspan="2" align="right" class="buttonboxright">
+                            <button dojoType="Button" onClick="dojo.widget.byId( 'SaveWarningDialog' ).hide();" >Cancel</button>
+                            <button dojoType="Button" onClick="dojo.widget.byId( 'SaveWarningDialog' ).hide(); revertEntry();">Revert</button>
+                            <button dojoType="Button" onClick="dojo.widget.byId( 'SaveWarningDialog' ).hide(); saveEntry();">Save</button>
+                        </td>
+                    </tr>
+                </table>
+            </form>
+        </div>
+
+    </div>
+</div>
+
+<script language="JavaScript" type="text/javascript">
+    rolePrincipals = new Array();
+#foreach ($role in $roles)
+    rolePrincipals.push( "$role.Principal.Name" );
+#end
+    actionNames = new Array();
+    actionNames.push( "view" );
+    actionNames.push( "edit" );
+    actionNames.push( "help" );
+    actionNames.push( "about" );
+    actionNames.push( "config" );
+    actionNames.push( "edit_defaults" );
+    actionNames.push( "print" );
+</script>
+<script type="text/javascript">
+
+
+function processTableRowEvent(e, tableName)
+{
+    dojo.widget.byId( tableName ).processTableRowEvent( e );
+}
+
+function clearAndDisableEditor()
+{
+    var resourceTextBox = dojo.byId( "resourceName" );
+    if ( resourceTextBox )
+    {
+        resourceTextBox.value = "";
+        resourceTextBox.disabled = true;
+    }
+    for ( var i = 0 ; i < actionNames.length; i++ )
+    {
+        var actionCheckbox = dojo.widget.byId( "action" + actionNames[i] );
+        if ( actionCheckbox )
+        {
+            actionCheckbox.checked = false;
+            actionCheckbox.disabled = true;
+            actionCheckbox._setInfo();
+        }
+    }
+    for ( var i = 0 ; i < rolePrincipals.length; i++ )
+    {
+        var roleIndex = i + 1;
+        var roleCheckbox = dojo.widget.byId( "role_" + roleIndex );
+        if ( roleCheckbox )
+        {
+            roleCheckbox.checked = false;
+            roleCheckbox.disabled = true;
+            roleCheckbox._setInfo();
+        }
+    }
+
+    var buttonWidget = dojo.widget.byId( "newButton" );
+    if ( buttonWidget )
+        btnSetDisabled( buttonWidget, false );
+
+    buttonWidget = dojo.widget.byId( "saveButton" );
+    if ( buttonWidget )
+        btnSetDisabled( buttonWidget, true );
+
+    buttonWidget = dojo.widget.byId( "revertButton" );
+    if ( buttonWidget )
+        btnSetDisabled( buttonWidget, true );
+
+    buttonWidget = dojo.widget.byId( "deleteButton" );
+    if ( buttonWidget )
+        btnSetDisabled( buttonWidget, true );
+}
+
+function updateEditor( rowData )
+{
+    var resourceTextBox = dojo.byId( "resourceName" );
+    if ( rowData.__isNew )
+    {
+        resourceTextBox.disabled = false;
+    }
+    else
+    {
+        resourceTextBox.disabled = true;
+    }
+    resourceTextBox.value = rowData.name;
+
+    for ( var i = 0 ; i < actionNames.length; i++ )
+    {
+        var actionCheckbox = dojo.widget.byId( "action" + actionNames[i] );
+        if ( actionCheckbox )
+        {
+            actionCheckbox.disabled = false;
+            actionCheckbox.checked = false;
+            actionCheckbox._setInfo();
+        }
+    }
+
+    var actionsList = rowData.actions.split( new RegExp( " *, *" ) );
+    if ( actionsList )
+    {
+        for ( var i = 0 ; i < actionsList.length ; i++ )
+        {
+            var actionCheckbox = dojo.widget.byId( "action" + actionsList[i] );
+            if ( actionCheckbox )
+            {
+                actionCheckbox.checked = true;
+                actionCheckbox._setInfo();
+            }
+        }
+    }
+
+    for ( var i = 0 ; i < rolePrincipals.length; i++ )
+    {
+        var roleIndex = i + 1;
+        var roleCheckbox = dojo.widget.byId( "role_" + roleIndex );
+        roleCheckbox.disabled = false;
+        roleCheckbox.checked = false;
+        roleCheckbox._setInfo();
+    }
+    var rolesList = rowData.roles.split( new RegExp( " *, *" ) );
+    if ( rolesList )
+    {
+        for ( var i = 0 ; i < rolesList.length ; i++ )
+        {
+            var tRole = rolesList[i];
+            for ( var j = 0 ; j < rolePrincipals.length; j++ )
+            {
+                if ( tRole == rolePrincipals[j] )
+                {
+                    var roleIndex = j + 1;
+                    var roleCheckbox = dojo.widget.byId( "role_" + roleIndex );
+                    if ( roleCheckbox )
+                    {
+                        roleCheckbox.checked = true;
+                        roleCheckbox._setInfo();
+                    }
+                }
+            }
+        }
+    }
+
+    updateEditorControls();
+}
+function getTableWidget( containedInTab )
+{
+    if ( ! containedInTab )
+        containedInTab = dojo.widget.byId( "permsTabContainer" ).selectedChildWidget;
+    return dojo.widget.byId( containedInTab.widgetId + "Table" );
+}
+function checkForChanges()
+{
+    var tTableWidget = getTableWidget();
+    return tTableWidget.checkForChanges();
+}
+function updateSelectedRow()
+{
+    var tTableWidget = getTableWidget();
+    var selectedRowData = tTableWidget.getSelectedRow() ;
+    if ( selectedRowData != null )
+    {
+        selectedRowData.name = dojo.byId( "resourceName" ).value;
+
+        var updatedActions = "";
+        for ( var i = 0 ; i < actionNames.length; i++ )
+        {
+            var actionCheckbox = dojo.widget.byId( "action" + actionNames[i] );
+            if ( actionCheckbox && actionCheckbox.checked )
+            {
+                if ( updatedActions.length > 0 )
+                    updatedActions += ", ";
+                updatedActions += actionNames[i];
+            }
+        }
+        selectedRowData.actions = updatedActions;
+
+        var updatedRoles = "";
+        for ( var i = 0 ; i < rolePrincipals.length; i++ )
+        {
+            var roleIndex = i + 1;
+            var roleCheckbox = dojo.widget.byId( "role_" + roleIndex );
+            if ( roleCheckbox && roleCheckbox.checked )
+            {
+                if ( updatedRoles.length > 0 )
+                    updatedRoles += ",";
+                updatedRoles += rolePrincipals[i];
+            }
+        }
+        selectedRowData.roles = updatedRoles;
+        
+        tTableWidget.updateClonedData( selectedRowData, tTableWidget.selected[0] );
+
+        tTableWidget.render(true);
+        tTableWidget.showSelections();
+
+        updateEditorControls();
+    }
+}
+
+function btnSetDisabled( btnWidget, /* Boolean */ disabled )
+{
+    if ( ! btnWidget ) return;
+    if ( btnWidget.disabled != disabled ) // bug in widget if called multiple times with same value
+        btnWidget.setDisabled(disabled);
+}
+
+function updateEditorControls()
+{
+    var hasChanged = checkForChanges();
+    if ( hasChanged )
+    {
+        var buttonWidget = dojo.widget.byId( "saveButton" );
+        if ( buttonWidget )
+            btnSetDisabled( buttonWidget, false );
+
+        buttonWidget = dojo.widget.byId( "revertButton" );
+        if ( buttonWidget )
+        {
+            if ( hasChanged == "modified" )
+            {
+                btnSetDisabled( buttonWidget, false );
+            }
+            else
+            {
+                btnSetDisabled( buttonWidget, true );
+            }
+        }
+
+        buttonWidget = dojo.widget.byId( "newButton" );
+        if ( buttonWidget )
+            btnSetDisabled( buttonWidget, true );
+
+        buttonWidget = dojo.widget.byId( "deleteButton" );
+        if ( buttonWidget )
+        {
+            if ( hasChanged == "modified" )
+            {
+                btnSetDisabled( buttonWidget, true );
+            }
+            else
+            {
+                btnSetDisabled( buttonWidget, false );
+            }
+        }
+    }
+    else
+    {
+        var buttonWidget = dojo.widget.byId( "saveButton" );
+        if ( buttonWidget )
+            btnSetDisabled( buttonWidget, true );
+
+        buttonWidget = dojo.widget.byId( "revertButton" );
+        if ( buttonWidget )
+            btnSetDisabled( buttonWidget, true );
+
+        buttonWidget = dojo.widget.byId( "newButton" );
+        if ( buttonWidget )
+            btnSetDisabled( buttonWidget, false );
+
+        buttonWidget = dojo.widget.byId( "deleteButton" );
+        if ( buttonWidget )
+            btnSetDisabled( buttonWidget, false );
+    }
+}
+
+
+
+// http://localhost:8080/jetspeed/ajaxapi?action=permissions&method=add&type=portlet&resource=demo::*&roles=role1,role2,role3&actions=view,edit
+// http://localhost:8080/jetspeed/ajaxapi?action=permissions&method=update&type=portlet&resource=jsf-demo%3A%3A*&roles=admin%2Cuser%2Csubsite2&actions=view%2C%20edit&oldactions=view%2C%20edit xml-content=<js><status>failure</status><action>unknown</action></js>
+
+
+function saveEntrySubmit( selectedRowData, removeEntry )
+{
+    var tTableWidget = getTableWidget();
+
+    if ( ! selectedRowData ) { dojo.raise( "saveEntrySubmit can't find selectedRowData" ) ; return; }
+
+    var masterData = tTableWidget.getData( tTableWidget.js_masterdata, selectedRowData.Id );
+    if ( ! masterData ) { dojo.raise( "saveEntrySubmit can't find masterdata" ) ; return; } 
+
+    var contextPath = document.location.protocol + "/" + "/" + document.location.host + "$req.ContextPath";
+    var requestUrl = contextPath + "/ajaxapi?action=permissions" ;
+
+    if ( removeEntry )
+    {
+        requestUrl += "&method=remove";
+    }
+    else if ( tTableWidget.entryIsNew( selectedRowData ) )
+    {
+        requestUrl += "&method=add";
+    }
+    else
+    {
+        requestUrl += "&method=update";
+    }
+    requestUrl += "&type=" + tTableWidget.js_type;
+    
+    requestUrl += "&resource=" + encodeURIComponent( selectedRowData.name );
+    requestUrl += "&roles=" + encodeURIComponent( selectedRowData.roles );
+    requestUrl += "&actions=" + encodeURIComponent( selectedRowData.actions );
+    requestUrl += "&oldactions=" + encodeURIComponent( masterData.actions );
+    
+    var mimeType = "text/xml";
+    dojo.io.bind({
+
+        url: requestUrl,
+
+        mimetype: mimeType,
+
+        load: function( type, data, evt )
+        {
+            var success = false;
+            var statusElmt = data.getElementsByTagName( "status" );
+            if ( statusElmt != null )
+            {
+                var successVal = statusElmt[0].firstChild.nodeValue;
+                if ( successVal == "success" )
+                    success = true;
+            }
+            if ( ! success )
+            {
+                var textContent = dojo.dom.innerXML( data );
+                if ( ! textContent )
+                    textContent = ( data != null ? "!= null (IE no XMLSerializer)" : "null" );
+                dojo.raise( "saveEntrySubmit failure url=" + requestUrl + "  xml-content=" + textContent );
+            }
+        },
+
+        error: function( type, error )
+        {
+            dojo.raise( "saveEntrySubmit failure url=" + requestUrl + " type=" + type + " error=" + error ) ;
+        }
+    });     
+};
+
+function newEntry()
+{
+    var tTableWidget = getTableWidget();
+    tTableWidget.newEntry();
+}
+function getNewEntryPrototype()
+{
+    return { name: "", actions: "", roles: "" };
+}
+
+function deleteEntry()
+{
+    var tTableWidget = getTableWidget();
+    tTableWidget.deleteEntry();
+}
+function saveEntry()
+{
+    var tTableWidget = getTableWidget();
+    tTableWidget.saveEntry();
+}
+
+function revertEntry()
+{
+    var tTableWidget = getTableWidget();
+    tTableWidget.revertEntry();
+}
+
+function okToChangeSelectionOrExit(invocation)
+{
+    var tTableWidget = getTableWidget();
+    return tTableWidget.okToChangeSelectionOrExit(invocation);
+}
+
+function dojoDebugCurrentTableData()
+{
+    dojo.debug( debugCurrentTableData() );
+}
+function alertDebugCurrentTableData()
+{
+    alert( debugCurrentTableData() );
+}
+function debugCurrentTableData()
+{
+    var tTableWidget = getTableWidget();
+    return tTableWidget.debugTableData();
+}
+
+function addListeners()
+{
+    var tabContainer = dojo.widget.byId("permsTabContainer");
+    dojo.event.connect("around", tabContainer, "selectChild", function(invocation) {
+        if ( checkForChanges() )
+        {
+            dojo.widget.byId( "SaveWarningDialog" ).show();
+            return;
+        }
+        invocation.proceed();
+        var tab = invocation.args[0];
+        var tTableWidget = getTableWidget( tab );
+        var selectedRowData = tTableWidget.getSelectedRow();
+    
+        if ( ! selectedRowData )
+        {
+            clearAndDisableEditor();
+        }
+        else
+        {
+            tTableWidget.showSelections();
+            updateEditor( selectedRowData );
+        }
+    });
+
+    var portletsTable = dojo.widget.byId("portletsTable");
+    dojo.event.connect( "around", portletsTable, "onUISelect", "okToChangeSelectionOrExit" );
+    dojo.event.connect(portletsTable, "onSelect", function(e) {
+        processTableRowEvent(e, "portletsTable");
+    });
+    dojo.event.connect(portletsTable, "updateEditor", updateEditor );
+    dojo.event.connect(portletsTable, "saveEntrySubmit", saveEntrySubmit );
+    dojo.event.connect(portletsTable, "clearAndDisableEditor", clearAndDisableEditor );
+    portletsTable.getNewEntryPrototype = getNewEntryPrototype;
+    var data = [] ;
+#foreach($p in $portletPermissions)
+    data.push( { name: "$p.Permission.Name", actions: "$p.Permission.Actions", roles: "$p.Roles", Id: $velocityCount } );
+#end
+    portletsTable.js_masterdata = data;
+    portletsTable.js_type = "portlet";
+    portletsTable.saveWarningDialogWidgetId = "SaveWarningDialog";
+    portletsTable.parseData( portletsTable.js_masterdata );
+    portletsTable.render( true );
+    
+    
+    var foldersTable = dojo.widget.byId("foldersTable");
+    dojo.event.connect( "around", foldersTable, "onUISelect", "okToChangeSelectionOrExit" );
+    dojo.event.connect(foldersTable, "onSelect", function(e) {
+        //dojo.debugShallow( e.currentTarget );
+        processTableRowEvent(e, "foldersTable");
+    });
+    dojo.event.connect(foldersTable, "updateEditor", updateEditor );
+    dojo.event.connect(foldersTable, "saveEntrySubmit", saveEntrySubmit );
+    dojo.event.connect(foldersTable, "clearAndDisableEditor", clearAndDisableEditor );
+    foldersTable.getNewEntryPrototype = getNewEntryPrototype;
+    
+    data = [] ;
+#foreach($p in $folderPermissions)
+    data.push( { name: "$p.Permission.Name", actions: "$p.Permission.Actions", roles: "$p.Roles", Id: $velocityCount } );
+#end
+    foldersTable.js_masterdata = data;
+    foldersTable.js_type = "folder";
+    foldersTable.saveWarningDialogWidgetId = "SaveWarningDialog";
+    foldersTable.parseData( data );
+    foldersTable.render( true );
+
+    var pagesTable = dojo.widget.byId("pagesTable");
+    dojo.event.connect( "around", pagesTable, "onUISelect", "okToChangeSelectionOrExit" );
+    dojo.event.connect(pagesTable, "onSelect", function(e) {
+        //dojo.debugShallow( e.currentTarget );
+        processTableRowEvent(e, "pagesTable");
+    });
+    dojo.event.connect(pagesTable, "updateEditor", updateEditor );
+    dojo.event.connect(pagesTable, "saveEntrySubmit", saveEntrySubmit );
+    dojo.event.connect(pagesTable, "clearAndDisableEditor", clearAndDisableEditor );
+    pagesTable.getNewEntryPrototype = getNewEntryPrototype;
+    data = [] ;
+#foreach($p in $pagePermissions)
+    data.push( { name: "$p.Permission.Name", actions: "$p.Permission.Actions", roles: "$p.Roles", Id: $velocityCount } );
+#end
+    pagesTable.js_masterdata = data;
+    pagesTable.js_type = "page";
+    pagesTable.saveWarningDialogWidgetId = "SaveWarningDialog";
+    pagesTable.parseData( data );
+    pagesTable.render( true );
+
+    for ( var i = 0 ; i < actionNames.length; i++ )
+    {
+        var actionCheckbox = dojo.widget.byId( "action" + actionNames[i] );
+        if ( actionCheckbox )
+        {
+            dojo.event.connect(actionCheckbox, "onClick", function() {
+                if(!actionCheckbox.disabled){
+                    updateSelectedRow();
+                }
+            });
+        }
+    }
+    for ( var i = 0 ; i < rolePrincipals.length; i++ )
+    {
+        var roleIndex = i + 1;
+        var roleCheckbox = dojo.widget.byId( "role_" + roleIndex );
+        if ( roleCheckbox )
+        {
+            dojo.event.connect(roleCheckbox, "onClick", function() {
+                if(!roleCheckbox.disabled){
+                    updateSelectedRow();
+                }
+            });
+        }
+    }
+
+    clearAndDisableEditor();
+}
+
+
+dojo.addOnLoad( window.addListeners );
+</script>



---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org