Multiple windows now work, developed a rudimentary window management code.

git-svn-id: file:///home/svn/framework3/trunk@3953 4d416f70-5f16-0410-b530-b9f4589650da
This commit is contained in:
lmh 2006-09-25 20:01:59 +00:00
parent 63c27c57f8
commit 3aefe0aea5
11 changed files with 108 additions and 47 deletions

View File

@ -1,6 +1,7 @@
class EncodersController < ApplicationController
def list
@all_encoders = Encoder.get_available()
end
def view

View File

@ -1,6 +1,7 @@
class NopsController < ApplicationController
def list
@all_nops = Nop.get_available()
end
def view

View File

@ -1,3 +1,7 @@
class Encoder
def self.get_available()
return $msframework.encoders
end
end

View File

@ -1,3 +1,7 @@
class Nop
def self.get_available()
return $msframework.nops
end
end

View File

@ -1,17 +1,4 @@
<div dojoType="FloatingPane"
id="exploits-list"
title="Exploits list"
constrainToContainer="true"
hasShadow="false"
resizable="true"
taskBarId="maintaskbar"
windowState="normal"
displayCloseAction="true";
displayMinimizeAction="true"
toggle="explode"
style="width: 720px; height: 550px; position: relative; left: 100px; top: 35px; display:none"
>
<table dojoType="SortableTable" widgetId="ExploitsTable" headClass="fixedHeader" tbodyClass="scrollContent" enableMultipleSelect="false" enableAlternateRows="true" rowAlternateClass="alternateRow" cellpadding="0" cellspacing="0" border="0">
<table dojoType="SortableTable" widgetId="ExploitsTable" headClass="fixedHeader" tbodyClass="scrollContent" enableMultipleSelect="false" enableAlternateRows="true" rowAlternateClass="alternateRow" cellpadding="0" cellspacing="0" border="0">
<thead>
<tr>
<th field="Name" dataType="String">Name</th>
@ -26,5 +13,4 @@
<tr><td><%= m.name %></td><td><%= m.description %></td><td><%= path %></td></tr>
<% end %>
</tbody>
</table>
</div>
</table>

View File

@ -22,11 +22,6 @@
dojo.require("dojo.widget.Tooltip");
dojo.require("dojo.widget.ContentPane");
dojo.require("dojo.widget.SortableTable");
dojo.require("dojo.widget.Tree");
dojo.require("dojo.widget.TreeRPCController");
dojo.require("dojo.widget.TreeSelector");
dojo.require("dojo.widget.TreeNode");
dojo.require("dojo.widget.TreeContextMenu");
dojo.hostenv.writeIncludes();
</script>
</head>
@ -34,35 +29,37 @@
<body>
<div dojoType="PopupMenu2" widgetId="PayloadsMenu">
<div dojoType="MenuItem2" caption="Search"></div>
<div dojoType="MenuItem2" caption="List" onClick="main_Pane.setUrl('/payloads/list')"></div>
<div dojoType="MenuItem2" caption="List"
onClick="load_stateful_window('/payloads/list','payloads-list','Payloads',generate_window_style('700', '350'))"></div>
<div dojoType="MenuItem2" caption="Generate"></div>
</div>
<div dojoType="PopupMenu2" widgetId="ExploitsMenu">
<div dojoType="MenuItem2" caption="Search"></div>
<div dojoType="MenuItem2" caption="List" onClick="main_Pane.setUrl('/exploits/list')"></div>
<div dojoType="MenuItem2" caption="List"
onClick="load_stateful_window('/exploits/list','exploits-list','Exploits',generate_window_style('700', '350'))"></div>
</div>
<div dojoType="PopupMenu2" widgetId="EncodersMenu">
<div dojoType="MenuItem2" caption="Search"></div>
<div dojoType="MenuItem2" caption="List" onClick="main_Pane.setUrl('/encoders/list')"></div>
<div dojoType="MenuItem2" caption="List" onClick="load_stateful_window('/encoders/list','encoders-list','Encoders',generate_window_style('700', '350'))"></div>
</div>
<div dojoType="PopupMenu2" widgetId="NopsMenu">
<div dojoType="MenuItem2" caption="Search"></div>
<div dojoType="MenuItem2" caption="List" onClick="main_Pane.setUrl('/nops/list')"></div>
<div dojoType="MenuItem2" caption="List" onClick="load_stateful_window('/nops/list','nops-list','Nops',generate_window_style('700', '350'))"></div>
<div dojoType="MenuItem2" caption="Generate"></div>
</div>
<div dojoType="PopupMenu2" widgetId="SessionsMenu">
<div dojoType="MenuItem2" caption="Search"></div>
<div dojoType="MenuItem2" caption="List" onClick="main_Pane.setUrl('/sessions/list')"></div>
<div dojoType="MenuItem2" caption="List" onClick="load_stateful_window('/sessions/list','sessions-list','Sessions',generate_window_style('700', '350'))"></div>
<div dojoType="MenuItem2" caption="Generate"></div>
</div>
<div dojoType="PopupMenu2" widgetId="JobsMenu">
<div dojoType="MenuItem2" caption="Search"></div>
<div dojoType="MenuItem2" caption="List" onClick="main_Pane.setUrl('/jobs/list')"></div>
<div dojoType="MenuItem2" caption="List" onClick="load_stateful_window('/jobs/list','jobs-list','Jobs',generate_window_style('700', '350'))"></div>
</div>
<div dojoType="PopupMenu2" widgetId="HelpMenu">
@ -86,7 +83,7 @@
Thanks to H.D.M for the functionality suggestions and developing a ground-breaking project: Metasploit. <br />
<input type="button" value="Close" id="hidedialog"/>
</div>
<div dojoType="ContentPane" id="maincontent" executeScripts="true">
<%= @content_for_layout %>
</div>

View File

@ -0,0 +1,7 @@
<div class="desktop-tip">
Use the top menu for accessing the Metasploit modules and functionality.
Ex. <em>Exploits, Payloads, Encoders</em>. <br />
Active windows will appear in the taskbar (look at the page bottom).
<strong>Have phun!</strong>
</div>

View File

@ -1,17 +1,4 @@
<div dojoType="FloatingPane"
id="payloads-list"
title="Payloads list"
constrainToContainer="true"
hasShadow="false"
resizable="true"
taskBarId="maintaskbar"
windowState="normal"
displayCloseAction="true";
displayMinimizeAction="true"
toggle="explode"
style="width: 700px; height: 350px; position: relative; left: 100px; top: 35px; display:none"
>
<table dojoType="SortableTable" widgetId="PayloadsTable" headClass="fixedHeader" tbodyClass="scrollContent" enableMultipleSelect="false" enableAlternateRows="true" rowAlternateClass="alternateRow" cellpadding="0" cellspacing="0" border="0">
<table dojoType="SortableTable" widgetId="PayloadsTable" headClass="fixedHeader" tbodyClass="scrollContent" enableMultipleSelect="false" enableAlternateRows="true" rowAlternateClass="alternateRow" cellpadding="0" cellspacing="0" border="0">
<thead>
<tr>
<th field="Name" dataType="String">Name</th>
@ -26,5 +13,4 @@
<tr><td><%= m.name %></td><td><%= m.description %></td><td><%= path %></td></tr>
<% end %>
</tbody>
</table>
</div>
</table>

View File

@ -13,4 +13,49 @@ function helper_functions(e) {
about_dlg.setCloseControl(btn);
}
/* Description: Simple window management code.
* Thanks: tk and dmachi for suggestions
*/
function load_stateful_window(target_url, nid, ntitle, nstyle) {
// create new floating pane (window)
var new_window = create_new_window(nid, ntitle, nstyle, "normal", "maintaskbar");
// create new content pane
var new_contentpane = dojo.widget.createWidget("ContentPane", {href: target_url});
// add new content pane to new floating pane as child
new_window.addChild(new_contentpane);
// add new floating pane to main pane
main_Pane.addChild(new_window);
}
function create_new_window(window_id, window_title, window_style, window_state, target_taskbar) {
var myNewFloatingPane = dojo.widget.createWidget("FloatingPane",
{
/* floating pane params */
id: window_id,
title: window_title,
constrainToContainer: "true",
hasShadow: "false",
resizable: "true",
taskBarId: target_taskbar,
windowState: window_state,
displayCloseAction: "true",
displayMinimizeAction: "true",
toggle: "explode",
style: window_style
});
return myNewFloatingPane;
}
function generate_window_style(width, height) {
var generic_css = "position: relative;" +
"left: 100px;" +
"top: 35px;" +
"display:none;" +
"width: " + width +"px;" +
"height: "+ height +"px;"
return generic_css;
}
dojo.addOnLoad(helper_functions);

View File

@ -72,6 +72,23 @@ dojo.lang.extend(dojo.widget.html.ContentPane, {
if(this.isShowing()||this.preload){ this.loadContents(); }
},
moveChildTo: function(/*Object*/child, /*Object*/dest){
if(!dojo.lang.isObject(child)||!dojo.lang.isObject(dest)){
return false;
}
var c = (!dojo.dom.isNode(child))?((dojo.dom.isNode(child.domNode))?child.domNode:child):false;
if(c==false){
return c;
}
for(var i=0;i<this.children.length;i++){
if(c==(dojo.dom.isNode(this.children[i]))?this.children[i]:this.children[i].domNode){
dest.appendChild(dojo.dom.removeNode(c));
delete(this.children[i]);
break;
}
}
},
show: function(){
// if refreshOnShow is true, reload the contents every time; otherwise, load only the first time
if(this.refreshOnShow){

View File

@ -63,13 +63,26 @@ body {
}
#maintaskbar .dojoTaskBarItem a {
color: black;
text-decoration: none;
color: black;
text-decoration: none;
}
.desktop-tip {
margin-top: 1em;
margin-left: 1em;
font-family: Trebuchet, Sans, Arial;
font-size: 90%;
padding-left: 4em;
padding-right: 1em;
padding-top: 1em;
padding-bottom: 1em;
width: 400px;
border-left: 5px solid #fff;
background: #fff url(/images/help.png) no-repeat;
}
.dojoDialog {
background : #ddd;
background : #fff;
border : 2px solid #999;
-moz-border-radius : 5px;
padding : 5px;