<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> | |
<html> | |
<head> | |
<title>PhoneBook</title> | |
<meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1"> | |
<meta name=ProgId content=VisualStudio.HTML> | |
<meta name=Originator content="Microsoft Visual Studio .NET 7.1"> | |
<script language="javascript" src="PhoneBook.ashx?proxy&v=2"></script> | |
<script language="javascript" src="js/dojo/dojo.js"></script> | |
<script language="javascript"> | |
dojo.require("dojo.io.*"); | |
dojo.require("dojo.event.*"); | |
dojo.require("dojo.html.*"); | |
dojo.require("dojo.json"); | |
dojo.require("dojo.widget.FilteringTable"); | |
dojo.hostenv.writeIncludes(); | |
/* call server */ | |
function server(call) | |
{ | |
var bindArgs = { | |
url: call.url+'?rpc', | |
error: function(type, data, evt){alert("Error Communicating with Server: " + data.result);}, | |
method: "POST", | |
mimetype: "text/json", | |
handle: call.callback, | |
postContent: dojo.json.serialize(call.request) | |
}; | |
var req = dojo.io.bind(bindArgs); | |
dojo.event | |
return req; | |
} | |
/* lister */ | |
function entry_list_result(type, data, evt) | |
{ | |
var w = dojo.widget.byId("entry_list"); | |
w.store.setData(data.result); | |
} | |
function entry_list() | |
{ | |
PhoneBook.rpc.entry_list(entry_list_result).call(server); | |
} | |
dojo.addOnLoad(entry_list); | |
function entry_list_select_edit(evt) { | |
var table = dojo.widget.byId("entry_list"); | |
entry_edit(table.getSelectedData().entry_key); | |
} | |
function entry_list_select_delete(evt) { | |
var table = dojo.widget.byId("entry_list"); | |
entry_delete(table.getSelectedData().entry_key); | |
} | |
function entry_list_select() { | |
dojo.event.connect(dojo.byId("entry_list"), "onSelect", entry_list_select_edit); | |
} | |
dojo.addOnLoad(entry_list_select); | |
/* lister filters */ | |
function dateFilter(hired) { | |
return (hired == '5/29/1987' || hired == '11/18/1984'); | |
} | |
function applyDate(id){ | |
dojo.widget.byId(id).setFilter("hired", dateFilter); | |
} | |
function nameFilter(last_name){ | |
return (last_name.charAt(0) >= 'M' && last_name.charAt(0) <= 'Z'); | |
} | |
function applyName(id){ | |
dojo.widget.byId(id).setFilter("last_name", nameFilter); | |
} | |
function clearFilters(id){ | |
dojo.widget.byId(id).clearFilters(); | |
} | |
function reloadData(id){ | |
dojo.widget.byId(id).store.clearData(); | |
entry_list(); | |
} | |
/* editor */ | |
function setHired(hired) { | |
var dpHired = dojo.widget.byId("dpHired"); | |
dpHired.setDate(hired); | |
} | |
function entry_edit_result(type, data, evt) | |
{ | |
var w = dojo.widget.byId("entry_form"); | |
w.setValues(data.result); | |
var part = new Array(); | |
part = data.result.hired.split('/',3); // mm/dd/yyyy | |
var yyyy = part[2]; | |
var mm = part[0]; | |
var dd = part[1]; | |
if (mm.length==1) mm = new String().concat('0',mm); | |
if (dd.length==1) dd = new String().concat('0',dd); | |
var hired = new String().concat( yyyy,'-',mm,'-',dd ); | |
setHired(hired); | |
} | |
function entry_edit(entry_key) | |
{ | |
PhoneBook.rpc.entry(entry_key,entry_edit_result).call(server); | |
} | |
function entry_save_result() { | |
reloadData('entry_list'); | |
entry_reset(); | |
} | |
function entry_save_update_result(type, data, evt) | |
{ | |
alert ( "Edited: " + data.result.user_name + " (" + data.result.entry_key + ")" ); | |
entry_save_result(); | |
} | |
function entry_save_insert_result(type, data, evt) | |
{ | |
alert ( "Added: " + data.result.user_name + " (" + data.result.entry_key + ")" ); | |
entry_save_result(); | |
} | |
function entry_save() | |
{ | |
var w = dojo.widget.byId("entry_form"); | |
var values = w.getValues(); | |
if (values.entry_key) | |
PhoneBook.rpc.entry_save(values,entry_save_update_result).call(server); | |
else | |
PhoneBook.rpc.entry_save(values,entry_save_insert_result).call(server); | |
} | |
function entry_reset() { | |
var w = dojo.widget.byId("entry_form"); | |
var values = w.getValues(); | |
values.first_name = ""; | |
values.last_name = ""; | |
values.extension = ""; | |
values.user_name = ""; | |
values.hours = "37.5"; | |
values.entry_key = ""; | |
w.setValues(values); | |
var today = new Date(); | |
setHired(today); | |
} | |
function entry_add() | |
{ | |
entry_reset(); | |
} | |
function entry_delete_result(type, data, evt) | |
{ | |
alert ( "Deleted: (" + data.result.entry_key + ")" ); | |
entry_save_result(); | |
} | |
function entry_delete(entry_key) | |
{ | |
if (entry_key) { | |
confirm ( "Delete entry?" ); | |
PhoneBook.rpc.entry_delete(entry_key,entry_delete_result).call(server); | |
} | |
} | |
</script> | |
<style type="text/css"> | |
/*** | |
The following is just an example of how to use the table. | |
You can override any class names to be used if you wish. | |
***/ | |
table { | |
font-family:Lucida Grande, Verdana; | |
font-size:0.8em; | |
width:100%; | |
border:1px solid #ccc; | |
border-collapse:collapse; | |
cursor:default; | |
} | |
table td, | |
table th{ | |
padding:2px; | |
font-weight:normal; | |
} | |
table thead td, table thead th { | |
background-image:url(images/ft-head.gif); | |
background-repeat:no-repeat; | |
background-position:top right; | |
} | |
table thead td.selectedUp, table thead th.selectedUp { | |
background-image:url(images/ft-headup.gif); | |
} | |
table thead td.selectedDown, table thead th.selectedDown { | |
background-image:url(images/ft-headdown.gif); | |
} | |
table tbody tr td{ | |
border-bottom:1px solid #ddd; | |
} | |
table tbody tr.alt td{ | |
background: #e3edfa; | |
} | |
table tbody tr.selected td{ | |
background: yellow; | |
} | |
table tbody tr:hover td{ | |
background: #a6c2e7; | |
} | |
table tbody tr.selected:hover td{ | |
background:#ff9; | |
} | |
#inputArea{ | |
margin:1em 0; | |
padding:1em; | |
background-color:#eef; | |
} | |
#updateTestInput{ | |
border:1px solid #ccc; | |
width:100%; | |
height:80px; | |
font-family:serif; | |
font-size:0.9em; | |
overflow:auto; | |
} | |
</style> | |
</head> | |
<body> | |
<div id="finder" /> | |
<div id="lister"> | |
<table id="filter_menu"><tr><td> | |
<input type="button" onclick="applyDate('entry_list');" value="Show only hires between 1/1/1984 and 1/1/1987" ID="Button1" NAME="Button1"/> | |
<input type="button" onclick="applyName('entry_list');" value="Show only names between M and Z" ID="Button2" NAME="Button2"/> | |
<input type="button" value="Show All Entries" onclick="clearFilters('entry_list');" ID="Button3" NAME="Button3"/> | |
<input type="button" value="Reload Entries" onclick="reloadData('entry_list');" ID="Button4" NAME="Button4"/> | |
</td></tr></table> | |
<table id="entry_list" | |
dojoType="filteringTable" alternateRows="true" valueField="user_name" > | |
<thead> | |
<tr> | |
<th field="last_name" sort="asc">Last Name</th> | |
<th field="first_name">First Name</th> | |
<th field="extension">Extension</th> | |
<th field="user_name">User</th> | |
<th field="hired" align="center">Hired</th> | |
<th field="hours" align="center">Hours</th> | |
</tr> | |
</thead> | |
</table> | |
<table id="edit_menu"><tr><td> | |
<input type="button" value="Edit Entry" onclick="entry_list_select_edit('entry_list');" ID="Button5" NAME="Button5"/> | |
<input type="button" value="Add Entry" onclick="entry_add('entry_list');" ID="Button6" NAME="Button6"/> | |
<input type="button" value="Delete Entry" onclick="entry_list_select_delete('entry_list');" ID="Button7" NAME="Button7"/> | |
</td></tr></table> | |
</div> | |
<div id="viewer" /> | |
<div id="editor"> | |
<form id="entry_form" dojoType="Form"> | |
<table ID="Table1"><tr> | |
<td>First Name</td><td><input name="first_name" ID="Text1"/></td> | |
</tr><tr> | |
<td>Last Name</td><td><input name="last_name" ID="Text2"/></td> | |
</tr><tr> | |
<td>Extension</td><td><input name="extension" ID="Text3"/></td> | |
</tr><tr> | |
<td>User Name</td><td><input name="user_name" ID="Text4"/></td> | |
</tr><tr> | |
<td>Hired</td><td><input name="hired" widgetid="dpHired" dojoType="dropdowndatepicker" displayFormat="MM/dd/yyyy" ID="Text5"/></td> | |
</tr><tr> | |
<td>Hours</td><td><input name="hours" ID="Text6"/></td> | |
</tr><tr> | |
<td rowspan="2"><input type="button" onClick="entry_save();" value="SAVE" ID="Button8" NAME="Button8"/> | |
<input type="hidden" name="editor" value="1" ID="editor"/> | |
<input type="hidden" name="entry_key" ID="entry_key"/> | |
</td> | |
</tr></table> | |
</form> | |
</div> | |
</body> | |
</html> |