home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 2000 July / macformat-092.iso / Dreamweaver 3 / Configuration / Commands / Export Table.js < prev    next >
Encoding:
Text File  |  1999-12-01  |  5.9 KB  |  254 lines

  1. //
  2. // Copyright 1999 Macromedia, Inc. All rights reserved. 
  3. // --------------------------------------------------------------------------
  4. //
  5. // Export Table.js
  6. //
  7. // --------------------------------------------------------------------------
  8.  
  9. //****************** GLOBALS ********************
  10.  
  11. var helpDoc = MM.HELP_cmdExportTable;
  12.  
  13. //****************** API ********************
  14.  
  15. function commandButtons(){
  16.    return new Array(BTN_Export,     "exportTable();window.close()",
  17.                     BTN_Cancel,     "window.close()",
  18.                     BTN_Help,       "displayHelp()" );
  19. }
  20.  
  21. function canAcceptCommand(){
  22.    if (  !site.windowIsFrontmost() && findTable()  )
  23.       return true;
  24.    return false;
  25. }
  26.  
  27. //LOCAL FUNCTIONS
  28.  
  29. //function: getLineBreak
  30. //description: returns line break based on platform
  31.  
  32. function getLineBreak(theForm){
  33.    var retVal;
  34.    var selInd = theForm.WhichPlatform.selectedIndex;
  35.    
  36.    switch (selInd){
  37.       case 0:
  38.          retVal = "\r\n";
  39.          break;
  40.       case 1:
  41.          retVal = "\r";
  42.          break;
  43.       case 2:
  44.          retVal = "\n";
  45.          break;
  46.    }
  47.    
  48.    return retVal;
  49.  
  50. }
  51.  
  52. //function: getDelimiter
  53. //description: returns delimiter based on form parameters
  54.  
  55. function getDelimiter(theForm){
  56.    var retVal;
  57.    var selInd = theForm.Delimiter.selectedIndex;
  58.    
  59.    switch (selInd){
  60.       case 0:
  61.          retVal = "\t";
  62.          break;
  63.       case 1:
  64.          retVal = " ";
  65.          break;
  66.       case 2:
  67.          retVal = ",";
  68.          break;
  69.       case 3:
  70.          retVal = ";";
  71.          break;
  72.       case 4:
  73.          retVal = ":";
  74.          break;
  75.    }
  76.    
  77.    return retVal; 
  78.  
  79. }
  80.  
  81. //function: findTable
  82. //description: returns tableObject that insertion point is in
  83. //returns an empty string if IP not in table
  84.  
  85. function findTable(){
  86.   var tableObj="";
  87.   var theDoc = dw.getDocumentDOM();
  88.   
  89.   if (!theDoc) return null;
  90.   
  91.   var selArr = theDoc.getSelection();
  92.   // make sure we have a valid selection array
  93.   if (selArr.length != 2) return null;
  94.   // get the selected object
  95.   var selObj = theDoc.offsetsToNode(selArr[0],selArr[1]);
  96.  
  97.   while (tableObj=="" && selObj.parentNode){
  98.     if (selObj.nodeType == Node.ELEMENT_NODE && selObj.tagName=="TABLE")
  99.       tableObj=selObj;
  100.     else
  101.       selObj = selObj.parentNode;
  102.   }
  103.   return tableObj;
  104. }
  105.  
  106. //function:initializeUI
  107. //description: sets default line breaks based on platform.
  108. //Loads select lists with localized text strings.
  109.  
  110. function initializeUI(){
  111.    var theForm = document.forms[0];
  112.    var selPlatform = theForm.WhichPlatform;
  113.    var selDelimiter = theForm.Delimiter;
  114.  
  115.    //load select widgets
  116.    loadSelectList(selPlatform,OPTIONS_Platforms);
  117.    loadSelectList(selDelimiter,OPTIONS_Delimiters);
  118.  
  119.    //change default line break type based on platform
  120.    if (navigator.platform == "MacPPC")
  121.       selPlatform.selectedIndex = 1;
  122.  
  123. }
  124.  
  125. //function: exportTable
  126. //description: called from Export button
  127. //exports tabular table based on html table
  128.  
  129. function exportTable(){
  130.    var exportData = "";
  131.    var theForm = document.forms[0];
  132.    var currTable = findTable();
  133.    var lineBreak = getLineBreak(theForm);
  134.    var delimiter = getDelimiter(theForm);
  135.    
  136.    var tableRows = currTable.childNodes;
  137.    var nRows = tableRows.length;
  138.    var i,j;
  139.    var tableCells;
  140.    var nCells;
  141.    var currRow;
  142.    
  143.    for (i=0;i<nRows;i++){
  144.       if (tableRows.item(i).tagName!="TR")
  145.          continue;
  146.       currRow = tableRows.item(i);
  147.       tableCells = currRow.childNodes;
  148.       nCells = tableCells.length;
  149.       for (j=0;j<nCells;j++){
  150.          exportData+=addQualifiers(  getTextNode(tableCells.item(j)), delimiter);
  151.          exportData+=delimiter;
  152.       }
  153.       exportData=exportData.substring(0,exportData.length-1)+lineBreak;
  154.    }
  155.    writeToFile(exportData);
  156. }
  157.  
  158.  
  159. //function: writeToFile
  160. //description: writes data to a user specified file
  161. //Arguments:
  162. //exportData = text string to write to a file
  163.  
  164. function writeToFile(exportData){
  165.    //determine file path
  166.    var filePath = dw.browseForFileURL("save",LABEL_ExportAs);
  167.    
  168.    if (!filePath)
  169.       alert(ERROR_No_Save_Path);
  170.  
  171.    //save file     
  172.    DWfile.write(filePath,exportData);
  173. }
  174.  
  175.  
  176. //function: addQualifiers
  177. //description: In a delimited file, quotes should be wrapped
  178. //around any data containing double quotes, commas, or a delimiter.
  179. //This function is two fold: One, wrap quotes around any of the
  180. //above listed items. Two, surround any double quotes with double quotes.
  181. //Examples:
  182. //text from table cell  ->  how it should appear in exported file
  183. //Doe, Jane                  "Doe, Jane"
  184. //My name is "Sue"           "My name is ""Sue"""
  185. //Arguments:
  186. //cellData - text string representing text content of table cell
  187. //delimiter - character used to separate data
  188.  
  189. function addQualifiers(cellData,delimiter){
  190.    
  191.    var dataLen = cellData.length;
  192.    var qualifier = '"'   //qualifier is double quotes
  193.    var counter=0;
  194.    var i; 
  195.    var currChar;
  196.    var bSurroundWithQualifier = false;
  197.    
  198.    //precede all double quotes (") with another, so:
  199.    //  " --> ""
  200.    cellData = cellData.replace(/"/g, '""'); 
  201.  
  202.    //surround any word containing comma,quotes,or delimiters with double quotes
  203.    dataLen = cellData.length;
  204.    
  205.    for (i=0;i<dataLen;i++){
  206.       if (  cellData.charAt( i ) == "," ||
  207.             cellData.charAt( i ) == qualifier  ||
  208.             cellData.charAt( i ) == delimiter ){
  209.       
  210.                bSurroundWithQualifier = true;
  211.                break;
  212.             }
  213.    }
  214.    
  215.    if (bSurroundWithQualifier)
  216.       cellData = qualifier + cellData + qualifier;
  217.       
  218.    return cellData;
  219.  
  220. }
  221.  
  222. //function: getTextNode
  223. //description: returns the text from a table cell
  224. //returns only the text and not the html markup
  225. //Arguments:
  226. //tableCellObj - a TD object
  227. //Returns:
  228. //the text from that table cell
  229.  
  230. function getTextNode(tableCellObj){
  231.   var iter=tableCellObj.childNodes;
  232.   var counter=0;
  233.   var child=iter.item(counter);
  234.   var retVal="";
  235.  
  236.   while (child) {
  237.     retVal+=getTextNode(child);
  238.     child=iter.item(++counter);
  239.   }
  240.  
  241.   if (tableCellObj.nodeType == Node.TEXT_NODE)
  242.     retVal+=tableCellObj.data;
  243.  
  244.   // Replace white space 
  245.   retVal = retVal.replace(/\s+/gi,' ');
  246.   retVal = retVal.replace(/^\s+/,'');
  247.   retVal = retVal.replace(/\s+$/,'');
  248.  
  249.   return retVal;
  250. }
  251.  
  252. //GENERIC FUNCTIONS
  253. //loadSelectList()
  254.