main.hta
来自「Windows Web脚本开发指南/(美) Dan Heflin, Todd N」· HTA 代码 · 共 337 行
HTA
337 行
<html xmlns:timeSheet>
<HEAD>
<TITLE>Timesheet Data Entry</TITLE>
<HTA:APPLICATION ID="timesheetApp"
APPLICATIONNAME="Timesheet Entry"
ICON="/graphics/creature.ico"
SINGLEINSTANCE="yes"
WINDOWSTATE="maximize"
>
</HEAD>
<script language="JavaScript">
var activePath = "";
var gridBehavior;
var currentRow = null;
var currentColumn = null;
function handleMenuClick(){
var arguments;
var result = null;
switch(event.menuValue){
case "NewSheet":
result = window.showModalDialog("newSheet.htm", arguments, "dialogWidth:270px;dialogHeight:220px;help:no;status:no;");
if (result != null){
currentTS.async = false;
currentTS.resolveExternals = false;
currentTS.load(result);
activePath = result;
loadTimesheet();
}
break;
case "Open":
result = window.showModalDialog("selectSheet.htm", "Open", "dialogWidth:310px;dialogHeight:330px;help:no;status:no;");
if (result != null){
currentTS.async = false;
currentTS.resolveExternals = false;
currentTS.load(result);
activePath = result;
loadTimesheet();
}
break;
case "Save":
saveTimesheet();
break;
case "Close":
closeTimesheet();
break;
case "Complete":
markComplete();
break;
case "Delete":
result = window.showModalDialog("selectSheet.htm", "Delete", "dialogWidth:310px;dialogHeight:330px;help:no;status:no;");
if (result == activePath)
closeTimesheet();
break;
case "Clients":
result = window.showModalDialog("clients.htm", arguments, "dialogWidth:310px;dialogHeight:230px;help:no;status:no;");
dropDownValues.load("dropDown.xml");
break;
case "Send":
sendTimesheets();
break;
case "Exit":
window.close();
break;
case "AddTask":
workArea.insertRow();
break;
case "RemoveTask":
removeTask();
break;
case "About":
alert("Windows Web Sripting Developers Guide Sample Timesheet Application Version 0.9");
break;
default:
break;
}
}
function loadTimesheet(){
var rows = workArea.rows;
for (count=1;count<=rows;count++)
workArea.deleteRow("1");
statusTS.innerHTML = "<B>Timesheet starting: " + currentTS.documentElement.getAttribute("startDate") + "</B><BR>";
workArea.editable = "true";
workArea.showColHeaders = "true";
workArea.colTypes = "dropDown,dropDown,dropDown,dropDown,textArea";
dropDownValues.async = false;
dropDownValues.load("dropDown.xml");
workArea.dropDownData = dropDownValues;
var data = buildDataArray();
if (data != null)
workArea.loadGridData(data);
menuContainer.enableMenu("AddTask");
menuContainer.enableMenu("RemoveTask");
menuContainer.enableMenu("Close");
menuContainer.enableMenu("Save");
menuContainer.enableMenu("Complete");
}
function buildDataArray(){
var tasks = currentTS.selectNodes("//task");
var currentTask = tasks.nextNode();
var arraySize = tasks.length * 5;
var data = new Array(arraySize);
var position = 0;
while (currentTask != null){
data[position] = currentTask.getAttribute("day");
position++
data[position] = currentTask.getAttribute("clientID");
position++
data[position] = currentTask.getAttribute("startTime");
position++
data[position] = currentTask.getAttribute("endTime");
position++
data[position] = currentTask.text;
currentTask = tasks.nextNode();
position++;
}
if (position == 0)
return null;
else{
return data;
}
}
function validateData(){
var rows = workArea.rows;
var startTime;
var endTime;
var startTime2;
var day;
var day2;
for (var row=1; row <= rows; row++){
day = workArea.column(row, 1);
client = workArea.column(row, 2);
startTime = workArea.column(row, 3);
endTime = workArea.column(row, 4);
if (typeof(day) == "undefined"){
alert("You must select an day before saving the timesheet.");
workArea.setCellFocus(row, 1);
return false;
}
if (typeof(client) == "undefined"){
alert("You must select a client before saving the timesheet.");
workArea.setCellFocus(row, 2);
return false;
}
if (typeof(startTime) == "undefined"){
alert("You must select a start time before saving the timesheet.");
workArea.setCellFocus(row, 3);
return false;
}
if (typeof(endTime) == "undefined"){
alert("You must select an end time before saving the timesheet.");
workArea.setCellFocus(row, 4);
return false;
}
if (startTime > endTime){
alert("Start time must be before end time. Please change either your start or end times.");
workArea.setCellFocus(row, 3);
return false;
}
for (var row2=row+1; row2 <= rows; row2++){
startTime2 = workArea.column(row2, 3);
day2 = workArea.column(row2, 1);
if (startTime2 == startTime && day2 == day){
alert("You cannot have tasks with the same day and start time. Please change one of the duplicate tasks.");
workArea.setCellFocus(row, 1);
return false;
}
}
}
return true;
}
function saveTimesheet(){
if (validateData() == false)
return;
var resultsArray = workArea.getGridData();
var rootNode = currentTS.documentElement;
var clonedRoot = rootNode.cloneNode(false);
currentTS.documentElement = clonedRoot;
if (resultsArray != null){
for(var count = 0;count<resultsArray.length;count+=5){
newElement = currentTS.createElement("task");
newElement.setAttribute("day", resultsArray[count]);
newElement.setAttribute("clientID", resultsArray[count+1]);
newElement.setAttribute("startTime", resultsArray[count+2]);
newElement.setAttribute("endTime", resultsArray[count+3]);
newElement.text = resultsArray[count+4];
currentTS.documentElement.appendChild(newElement);
}
common.saveXMLDocument(currentTS, activePath);
var path = common.getDataPath();
tsList.async = false;
tsList.load(path + "timeSheetList.xml");
var fileName = activePath.slice(path.length);
var markModified = tsList.selectSingleNode("//timeSheet[@file='" + fileName + "']");
markModified.setAttribute("status", "modified");
common.saveXMLDocument(tsList, path + "timeSheetList.xml");
}
}
function closeTimesheet(){
workArea.removeBehavior(gridBehavior);
workArea.innerHTML = "";
statusTS.innerHTML = "";
disableMenuItems();
gridBehavior = workArea.addBehavior("grid.htc");
}
function markComplete(){
var path = common.getDataPath();
tsList.async = false;
tsList.load(path + "timeSheetList.xml");
var fileName = activePath.slice(path.length);
var markComplete = tsList.selectSingleNode("//Open/timeSheet[@file='" + fileName + "']");
if (markComplete == null){
var markComplete = tsList.selectSingleNode("//Completed/timeSheet[@file='" + fileName + "']");
if (markComplete == null)
alert("An error has occurred, cannot find file in the index. Please contact technical support.");
return;
}
var completeNode = tsList.selectSingleNode("//Completed");
var openNode = tsList.selectSingleNode("//Open");
openNode.removeChild(markComplete);
completeNode.appendChild(markComplete);
common.saveXMLDocument(tsList, path + "timeSheetList.xml")
}
function disableMenuItems(){
menuContainer.disableMenu("AddTask");
menuContainer.disableMenu("RemoveTask");
menuContainer.disableMenu("Close");
menuContainer.disableMenu("Save");
menuContainer.disableMenu("Complete");
}
function removeTask(){
if (currentRow != null)
workArea.deleteRow(new String(currentRow));
else
alert("You must select a row to delete.");
}
function sendTimesheets(){
var path = common.getDataPath();
var serverPath = common.getServerPath();
var xmlRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
var sendDocument = new ActiveXObject("Microsoft.XMLDOM");
var fileName;
//Display the status window
var status = window.open("about:blank", null, "height=200,width=400,status=no,toolbar=no,menubar=no,location=no,resizable=no,titlebar=no,left=200,top=200");
status.document.write("Establishing list of items to transfer.<BR>");
sendDocument.async = false;
tsList.async = false;
tsList.load(path + "timeSheetList.xml");
//Get the list of items to transfer
var sendList = tsList.selectNodes("//Completed/timeSheet[@status != 'sent' or not(@status)]");
var sendSheet = sendList.nextNode();
var createdBy;
var result="accepted";
var count=0;
//Loop thought list continue till the end of list or an error
while (sendSheet != null && result=="accepted"){
count++;
status.document.write("Transfering Item" + count + "<BR>");
fileName = sendSheet.getAttribute("file");
sendDocument.load(path + fileName);
//All documents should have XML if there isn't XML then the file is bad or
//the version is different
if (sendDocument.xml == ""){
sendDocument.resolveExternals = false;
sendDocument.load(path + fileName);
if (sendDocument.xml != "")
alert("The version of the document is incompatible with the anticipated version of data on the server.");
else
alert("An error has occured while loading a timesheet that was to be transfered. Error Reason: " + sendDocument.parseError.reason);
sendDocument.resolveExternals = true;
status.close();
return;
}
createdBy = sendSheet.getAttribute("createdBy");
//Pass in the information to the server from the list file that is needed on the server
filePath = serverPath + "getClientXML.asp?file=" + escape(fileName) + "&createdBy=" + escape(createdBy);
//Send the document to the server
xmlRequestObject.open("POST", filePath, false, "", "");
xmlRequestObject.send(sendDocument);
sendSheet.setAttribute("status", "sent");
sendSheet = sendList.nextNode();
result = xmlRequestObject.responseText;
}
if (sendList.length > 0 && result== "accepted"){
common.saveXMLDocument(tsList, path + "timeSheetList.xml");
}
if (sendList.length > 0 && result != "accepted"){
status.document.write(result);
alert("An error has occured in the transfering process. Please try again.");
status.close();
return;
}
status.close();
if (sendList.length > 0)
alert("The data has been successfully transfered to the server.");
else
alert("There are no new items to transfer.");
}
function initialize(){
gridBehavior = workArea.addBehavior("grid.htc");
disableMenuItems();
}
function cellStartEdit(){
currentColumn = event.column;
}
function cellEndEdit(){
currentRow = null;
}
</script>
<xml ID="dropDownValues"></xml>
<xml ID="currentTS"></xml>
<xml ID="tsList"></xml>
<timeSheet ID="common" STYLE="behavior:url(commonSource.htc)" />
<body onLoad="initialize()">
<div ID="menuContainer" STYLE="behavior:url(menu.htc)" onMenuClick="handleMenuClick()"></div>
<div ID="statusTS"></div>
<timeSheet:workArea ID="workArea" showColHeaders="false" colHeaders="Day,Client,Start,End,Description" colWidths="15%,15%,15%,15%,40%" onStartEdit="cellStartEdit()" onEndEdit="cellEndEdit()" ></timeSheet:workArea>
</body>
</html>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?