Author: taylor
Date: Tue Jun 27 17:44:42 2006
New Revision: 417627

URL: http://svn.apache.org/viewvc?rev=417627&view=rev
Log:
fix to security permission portlet to work with new dojo

Added:
    
portals/jetspeed-2/trunk/applications/j2-admin/src/webapp/css/security-permissions.css
Modified:
    
portals/jetspeed-2/trunk/applications/j2-admin/src/webapp/WEB-INF/security/permissions/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=417627&r1=417626&r2=417627&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
 Tue Jun 27 17:44:42 2006
@@ -1,80 +1,42 @@
-<style type="text/css">
-               table {
-                       font-family:Lucida Grande, Verdana;
-                       font-size:0.8em;
-                       width:100%;
-                       border:1px solid #ccc;
-                       cursor:default;
-               }
-
-               * html div.tableContainer {     /* IE only hack */
-                       width:95%;
-                       border:1px solid #ccc;
-                       height: 285px;
-                       overflow-x:hidden;
-                       overflow-y: auto;
-               }
-
-               table td,
-               table th{
-                       border-right:1px solid #999;
-                       padding:2px;
-                       font-weight:normal;
-               }
-               table thead td, table thead th {
-                       background:#94BEFF;
-               }
-               
-               * html div.tableContainer table thead tr td,
-               * html div.tableContainer table thead tr th{
-                       /* IE Only hacks */
-                       position:relative;
-                       
top:expression(dojo.html.getFirstAncestorByTag(this,'table').parentNode.scrollTop-2);
-               }
-               
-               html>body tbody.scrollContent {
-                       height: 262px;
-                       overflow-x:hidden;
-                       overflow-y: auto;
-               }
-
-               tbody.scrollContent td, tbody.scrollContent tr td {
-                       background: #FFF;
-                       padding: 2px;
-               }
-
-               tbody.scrollContent tr.alternateRow td {
-                       background: #e3edfa;
-                       padding: 2px;
-               }
-
-               tbody.scrollContent tr.selected td {
-                       background: yellow;
-                       padding: 2px;
-               }
-               tbody.scrollContent tr:hover td {
-                       background: #a6c2e7;
-                       padding: 2px;
-               }
-               tbody.scrollContent tr.selected:hover td {
-                       background: #ff3;
-                       padding: 2px;
-               }
-       </style>
+#set($rc = 
$renderRequest.getAttribute("org.apache.jetspeed.request.RequestContext"))
+#set($req = $rc.Request)
+
+
+
+<!--
+javascript: alert( dojo.widget.byId( "portletsTable" ).data[3].actions = 
"shit" )
+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%; height: 250px">
-    <div dojoType="SplitContainer"
-        orientation="horizontal"
-        sizerWidth="5"
-        activeSizing="0"
-        layoutAlign="client"
-    >
- 
-<div id="mainTabContainer" dojoType="TabContainer" style="width: 100%; height: 
100%" selectedTab="portlets">
+    style="width: 100%">
+
+<div id="mainTabContainer" dojoType="TabContainer" selectedTab="portlets" 
doLayout="false">
 
 <div id="portlets" dojoType="ContentPane" label="Portlets">
-<table dojoType="SortableTable" widgetId="portletTable" 
headClass="fixedHeader" tbodyClass="scrollContent" enableMultipleSelect="true" 
enableAlternateRows="true" rowAlternateClass="alternateRow" cellpadding="0" 
cellspacing="0" border="0">
+<div style="height:21px">&nbsp;</div>
+<div class="tableContainer">
+<table dojoType="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>
@@ -83,14 +45,19 @@
 </tr>
 </thead>
 <tbody>
-#foreach($p in $portletPermissions)
-<tr><td>$p.Permission.Name</td><td>$p.Permission.Actions</td><td>$p.Roles</td></tr>
-#end
 </tbody>
 </table>
 </div>
+</div>
 <div id="folders" dojoType="ContentPane" label="Folders">
-<table dojoType="SortableTable" widgetId="folderTable" headClass="fixedHeader" 
tbodyClass="scrollContent" enableMultipleSelect="true" 
enableAlternateRows="true" rowAlternateClass="alternateRow" cellpadding="0" 
cellspacing="0" border="0">
+<div style="height:21px">&nbsp;</div>
+<div class="tableContainer">
+<table dojoType="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>
@@ -99,14 +66,19 @@
 </tr>
 </thead>
 <tbody>
-#foreach($p in $folderPermissions)
-<tr><td>$p.Permission.Name</td><td>$p.Permission.Actions</td><td>$p.Roles</td></tr>
-#end
 </tbody>
 </table>
 </div>
+</div>
 <div id="pages" dojoType="ContentPane" label="Pages">
-<table dojoType="SortableTable" widgetId="pageTable" headClass="fixedHeader" 
tbodyClass="scrollContent" enableMultipleSelect="true" 
enableAlternateRows="true" rowAlternateClass="alternateRow" cellpadding="0" 
cellspacing="0" border="0">
+<div style="height:21px">&nbsp;</div>
+<div class="tableContainer">
+<table dojoType="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>
@@ -115,29 +87,57 @@
 </tr>
 </thead>
 <tbody>
-#foreach($p in $pagePermissions)
-<tr><td>$p.Permission.Name</td><td>$p.Permission.Actions</td><td>$p.Roles</td></tr>
-#end
 </tbody>
 </table>
 </div>
+</div>
 
 </div>
 
 <div dojoType="LayoutContainer"
      layoutChildPriority='none'
-     style="width: 100%; height: 155px; border: 1px solid grey;"
+     style="width: 100%; height: 200px; border: 1px solid grey;"
 >
 
-
 <div dojoType="LayoutContainer"
-       widgetId="resourceNameContainer"
+       widgetId="editorTop"
        minHeight="20"
     layoutAlign="top"
        style="padding: 4px; border-bottom: thin inset grey; width: 100%; 
height: 55px"
 >
-<b>Resource</b><br/>
-<input name="resourceName" id="resourceName" type="text" size="50" >
+
+    <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"
@@ -148,10 +148,9 @@
 >
     <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 />
+    <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"
@@ -163,53 +162,137 @@
     <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>
+                       <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>
 
+
 <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)
 {
-    var resourceName = e.currentTarget.cells.item(0).innerHTML;
+    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._updateImgSrc();
+        }
+    }
+    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._updateImgSrc();
+        }
+    }
+
+    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" );
-    resourceTextBox.value = 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 = "enabled";
+            actionCheckbox.checked = false;
+            actionCheckbox._updateImgSrc();
+        }
+    }
 
-    var actions = e.currentTarget.cells.item(1).innerHTML;
-    var actionsList = actions.split( new RegExp( " *, *" ) );
-    dojo.byId( "actionview" ).checked = false;
-    dojo.widget.byId( "actionview" ).updateImgSrc();
-    dojo.byId( "actionedit" ).checked = false;
-    dojo.widget.byId( "actionedit" ).updateImgSrc();
-    dojo.byId( "actionhelp" ).checked = false;
-    dojo.widget.byId( "actionhelp" ).updateImgSrc();
+    var actionsList = rowData.actions.split( new RegExp( " *, *" ) );
     if ( actionsList )
     {
         for ( var i = 0 ; i < actionsList.length ; i++ )
         {
-            var checkboxNode = dojo.byId( "action" + actionsList[i] );
-            if ( checkboxNode != null )
+            var actionCheckbox = dojo.widget.byId( "action" + actionsList[i] );
+            if ( actionCheckbox )
             {
-                checkboxNode.checked = true;
-                dojo.widget.byId( "action" + actionsList[i] ).updateImgSrc();
+                actionCheckbox.checked = true;
+                actionCheckbox._updateImgSrc();
             }
         }
     }
-    
-    var roles = e.currentTarget.cells.item(2).innerHTML;
-    var rolesList = roles.split( new RegExp( " *, *" ) );
+
     for ( var i = 0 ; i < rolePrincipals.length; i++ )
     {
         var roleIndex = i + 1;
-        dojo.byId( "role_" + roleIndex ).checked = false;
-        dojo.widget.byId( "role_" + roleIndex ).updateImgSrc();
+        var roleCheckbox = dojo.widget.byId( "role_" + roleIndex );
+        roleCheckbox.disabled = "enabled";
+        roleCheckbox.checked = false;
+        roleCheckbox._updateImgSrc();
     }
+    var rolesList = rowData.roles.split( new RegExp( " *, *" ) );
     if ( rolesList )
     {
         for ( var i = 0 ; i < rolesList.length ; i++ )
@@ -220,88 +303,351 @@
                 if ( tRole == rolePrincipals[j] )
                 {
                     var roleIndex = j + 1;
-                    dojo.byId( "role_" + roleIndex ).checked = true;
-                    dojo.widget.byId( "role_" + roleIndex ).updateImgSrc();
+                    var roleCheckbox = dojo.widget.byId( "role_" + roleIndex );
+                    if ( roleCheckbox )
+                    {
+                        roleCheckbox.checked = true;
+                        roleCheckbox._updateImgSrc();
+                    }
                 }
             }
         }
     }
-    
-    selectedResourceRow = e.currentTarget;
-    selectedResourceData = [ resourceName, actions, roles ];
-    
-    //alert( tableName + ", " + e.currentTarget.cells.item(0).innerHTML ); 
-    //alert( tableName + ", " + e.currentTarget.cells.item(1).innerHTML ); 
-    //alert( tableName + ", " + e.currentTarget.cells.item(2).innerHTML );
+
+    updateEditorControls();
+}
+function getTableWidget()
+{
+    var tTabWidget = dojo.widget.byId( "mainTabContainer" ).selectedTabWidget;
+    return dojo.widget.byId( tTabWidget.widgetId + "Table" );
+}
+function checkForChanges()
+{
+    var tTableWidget = getTableWidget();
+    return tTableWidget.checkForChanges();
 }
 function updateSelectedRow()
-{   // update selected row without re-render - DOESN'T WORK YET
-    dojo.debug( "updateSelectedRow" );
-    if ( selectedResourceRow != null )
-    {   // SortableTable allows for way of updating with nice objects and then 
re-rendering - but it resorts and the selected row can change
-        // will revise when more time is available - this is a sick hack
-        currentTarget.cells.item(0).innerHTML = dojo.byId( "resourceName" 
).value;
-        
+{
+    var tTableWidget = getTableWidget();
+    var selectedRowData = tTableWidget.getSelectedRow() ;
+    if ( selectedRowData != null )
+    {
+        selectedRowData.name = dojo.byId( "resourceName" ).value;
+
         var updatedActions = "";
-        if ( dojo.byId( "actionview" ).checked )
-        {
-            if ( updatedActions.length > 0 )
-                updatedActions += ", ";
-            updatedActions += "view";
-        }
-        if ( dojo.byId( "actionedit" ).checked )
+        for ( var i = 0 ; i < actionNames.length; i++ )
         {
-            if ( updatedActions.length > 0 )
-                updatedActions += ", ";
-            updatedActions += "edit";
-        }
-        if ( dojo.byId( "actionhelp" ).checked )
-        {
-            if ( updatedActions.length > 0 )
-                updatedActions += ", ";
-            updatedActions += "help";
+            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;
-            if ( dojo.byId( "role_" + roleIndex ).checked )
+            var roleCheckbox = dojo.widget.byId( "role_" + roleIndex );
+            if ( roleCheckbox && roleCheckbox.checked )
             {
-                if ( i > 0 )
+                if ( updatedRoles.length > 0 )
                     updatedRoles += ",";
                 updatedRoles += rolePrincipals[i];
             }
         }
-        currentTarget.cells.item(2).innerHTML = updatedRoles;
+        selectedRowData.roles = updatedRoles;
+        
+        tTableWidget.updateClonedData( selectedRowData, 
tTableWidget.selected[0] );
 
-        var updatedRoles = "";
-        for ( var i = 0 ; i < rolePrincipals.length; i++ )
+        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 )
         {
-            var roleIndex = i + 1;
-            if ( dojo.byId( "role_" + roleIndex ).checked )
+            if ( hasChanged == "modified" )
             {
-                if ( i > 0 )
-                    updatedRoles += ",";
-                updatedRoles += rolePrincipals[i];
+                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);
             }
         }
-        currentTarget.cells.item(2).innerHTML = updatedRoles;
+    }
+    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);
     }
 }
 
-function addTableRowSelectListener()
+
+
+// 
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( removeEntry )
 {
-    dojo.event.connect(dojo.widget.byId("portletTable"), "onSelect", 
function(e) {
-        //dojo.debugShallow( e.currentTarget );
-        processTableRowEvent(e, "portletTable");
+    var tTableWidget = getTableWidget();
+    var selectedRowData = tTableWidget.getSelectedRow();
+
+    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 ( selectedRowData.isNew )
+    {
+        requestUrl += "&method=add";
+    }
+    else
+    {
+        requestUrl += "&method=update";
+    }
+    requestUrl += "&type=" + tTableWidget.js_type;
+    
+    requestUrl += "&resource=" + escape( selectedRowData.name );
+    requestUrl += "&roles=" + escape( selectedRowData.roles );
+    requestUrl += "&actions=" + escape( selectedRowData.actions );
+    requestUrl += "&oldactions=" + escape( 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 listSelectionChangeOk(invocation)
+{
+    var tTableWidget = getTableWidget();
+    return tTableWidget.listSelectionChangeOk(invocation);
+}
+
+function addListeners()
+{
+    var tabContainer = dojo.widget.byId("mainTabContainer");
+    dojo.event.connect("around", tabContainer, "selectTab", 
function(invocation) {
+        if ( checkForChanges() )
+        {
+            dojo.widget.byId( "SaveWarningDialog" ).show();
+            return;
+        }
+        invocation.proceed();
+        var tab = invocation.args[0];
+        var tTableWidget = dojo.widget.byId( tab.widgetId + "Table" ) ;
+        var selectedRowData = tTableWidget.getSelectedRow();
+    
+        if ( ! selectedRowData )
+        {
+            clearAndDisableEditor();
+        }
+        else
+        {
+            tTableWidget.showSelections();
+            updateEditor( selectedRowData );
+        }
+    });
+
+    var portletsTable = dojo.widget.byId("portletsTable");
+    dojo.event.connect( "around", portletsTable, "onUISelect", 
"listSelectionChangeOk" );
+    dojo.event.connect(portletsTable, "onSelect", function(e) {
+        processTableRowEvent(e, "portletsTable");
     });
-    dojo.event.connect(dojo.widget.byId("folderTable"), "onSelect", 
function(e) {
+    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", 
"listSelectionChangeOk" );
+    dojo.event.connect(foldersTable, "onSelect", function(e) {
         //dojo.debugShallow( e.currentTarget );
-        processTableRowEvent(e, "folderTable");
+        processTableRowEvent(e, "foldersTable");
     });
-    dojo.event.connect(dojo.widget.byId("pageTable"), "onSelect", function(e) {
+    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", 
"listSelectionChangeOk" );
+    dojo.event.connect(pagesTable, "onSelect", function(e) {
         //dojo.debugShallow( e.currentTarget );
-        processTableRowEvent(e, "pageTable");
+        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, "onMouseUp", function() {
+                if(actionCheckbox.disabled == "enabled"){
+                    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, "onMouseUp", function() {
+                if(roleCheckbox.disabled == "enabled"){
+                    updateSelectedRow();
+                }
+            });
+        }
+    }
+
+    clearAndDisableEditor();
 }
-dojo.addOnLoad( window.addTableRowSelectListener );
+
+
+dojo.addOnLoad( window.addListeners );
 </script>

Added: 
portals/jetspeed-2/trunk/applications/j2-admin/src/webapp/css/security-permissions.css
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/applications/j2-admin/src/webapp/css/security-permissions.css?rev=417627&view=auto
==============================================================================
--- 
portals/jetspeed-2/trunk/applications/j2-admin/src/webapp/css/security-permissions.css
 (added)
+++ 
portals/jetspeed-2/trunk/applications/j2-admin/src/webapp/css/security-permissions.css
 Tue Jun 27 17:44:42 2006
@@ -0,0 +1,99 @@
+        .dojoDialog {
+            background : #eee;
+            border : 1px solid #999;
+            -moz-border-radius : 5px;
+            padding : 4px;
+            width: 320px;
+        }
+
+        .buttonbox {
+            display: block;
+            text-align: center;
+        }
+        .buttonbox .dojoButton {
+            float: left;
+            margin-right: 10px;
+            margin-bottom: 6px;
+               }
+
+        .buttonboxright {
+            display: block;
+            text-align: center;
+        }
+        .buttonboxright .dojoButton {
+            float: right;
+            margin-left: 10px;
+            margin-bottom: 6px;
+               }
+
+               .permissions {
+                       font-family:Lucida Grande, Verdana;
+                       font-size:0.8em;
+                       width:100%;
+                       border:1px solid #ccc;
+                       cursor:default;
+               }
+
+        #mainTabContainer {
+            width: 100%;
+            height: 304px;
+        }
+
+               * html div.tableContainer {     /* IE only hack */
+                       width: 95%;
+                       border: 1px solid #ccc;
+                       height: 285px;
+                       overflow-x: hidden;
+                       overflow-y: auto;
+               }
+
+               .permissions td,
+               .permissions th{
+                       border-right: 1px solid #999;
+                       padding: 2px;
+                       font-weight: normal;
+            font-size: small;
+               }
+               .permissions thead td, .permissions thead th {
+                       background:#94BEFF;
+            font-size: small;
+            font-weight: bold;
+            text-align: left;
+               }
+               
+               * html div.tableContainer table thead tr td,
+               * html div.tableContainer table thead tr th{
+                       /* IE Only hacks */
+                       position:relative;
+                       
top:expression(dojo.html.getFirstAncestorByTag(this,'table').parentNode.scrollTop-2);
+               }
+               
+        
+               html>body tbody.scrollContent {
+                       height: 262px;
+                       overflow-x: hidden;
+                       overflow-y: auto;
+               }
+
+               tbody.scrollContent td, tbody.scrollContent tr td {
+                       background: #FFF;
+                       padding: 2px;
+               }
+
+               tbody.scrollContent tr.alternateRow td {
+                       background: #e3edfa;
+                       padding: 2px;
+               }
+
+               tbody.scrollContent tr.selected td {
+                       background: yellow;
+                       padding: 2px;
+               }
+               tbody.scrollContent tr:hover td {
+                       background: #a6c2e7;
+                       padding: 2px;
+               }
+               tbody.scrollContent tr.selected:hover td {
+                       background: #ff3;
+                       padding: 2px;
+               }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to