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 + -
显示快捷键?