source: drbl_ui/flow_chart/drbl_mode.files/frameset.js @ 149

Last change on this file since 149 was 21, checked in by chris, 17 years ago
File size: 11.8 KB
RevLine 
[21]1
2var MSIE = false;
3var ver = 0;
4var indexOfMSIE = navigator.userAgent.indexOf("MSIE"); 
5if(indexOfMSIE != -1)
6{
7  MSIE = true;
8  ver = parseFloat(navigator.userAgent.substring(indexOfMSIE + 5, navigator.userAgent.indexOf(";", indexOfMSIE)));
9}
10
11var isMac = (navigator.appVersion.indexOf("Macintosh") >= 0);
12var isUpLevel = (MSIE && ver >= 5 && !isMac);
13
14var xmlData = XMLData("drbl_mode.files/data.xml");
15
16var g_RowStyleList = new  Array(
17 "propViewerEvenRow",
18 "propViewerOddRow"
19);
20
21
22var strShape  = "圖形名稱:";
23
24
25
26function XMLData(file)
27{
28  var temp = null;
29  if(isUpLevel)
30  {
31    temp = CreateObject("Microsoft.XMLDOM");
32    if (temp == null)
33    {
34      temp = CreateObject("MSXML2.DOMDocument");
35    }
36
37    if (temp != null)
38    {
39      temp.async = false;
40   
41      temp.load(file);
42      if (temp.parseError.errorCode != 0)
43      {
44        temp = null;
45      }
46    }
47  }
48
49  return temp;
50}
51
52function CreateObject (strObj)
53{
54  var obj = null;
55  eval ("try { obj = new ActiveXObject(strObj); } catch (e) {}");
56  return obj;
57}
58
59function doVersion()
60{
61  if(isUpLevel)
62  {
63    frmToolbar.divDownLevel.innerHTML = "";
64    frmToolbar.divUpLevel.innerHTML = frmWidgets.divData.innerHTML;
65  }
66} 
67 
68 
69function FindShapeXML (pageID, shapeID)
70{
71  var shapeObj = null;
72
73  if (xmlData != null)
74  {
75    var pagesObj = xmlData.selectSingleNode("VisioDocument/Pages");
76    if(!pagesObj)
77    {
78      return null;
79    }
80
81    var pageQuerryString = './/Page[@ID = "' + pageID + '"]';
82    var pageObj = pagesObj.selectSingleNode(pageQuerryString);
83    if(pageObj == null)
84    {
85      return null;
86    }
87
88    var shapeQuerryString = './/Shape[@ID = "' + shapeID + '"]';
89    shapeObj = pageObj.selectSingleNode(shapeQuerryString);
90  }
91
92  return shapeObj;
93}
94
95function OnShapeKey(pageID, shapeID)
96{
97  var e = window.frmDrawing.event;
98 
99  if(e.keyCode == 13 && e.ctrlKey)    //ctrl + enter
100  {
101    UpdateProps (pageID, shapeID);
102  }
103  else if (e.keyCode == 13)
104  {
105    OnShapeClick (pageID, shapeID);
106  }
107}
108
109function OnShapeClick (pageID, shapeID)
110{
111  if (isUpLevel)
112  {
113    var e = frmDrawing.window.event;
114    var elem = e.srcElement;
115
116    if (e != null && e.ctrlKey && frmToolbar.widgets && frmToolbar.widgets.Details)
117    {
118      UpdateProps (pageID, shapeID);
119    }
120    else
121    {
122      var shapeNode = FindShapeXML (pageID, shapeID);
123      var hlObj = GetHLAction (shapeNode, pageID, shapeID);
124      if (hlObj != null)
125      {
126        if (hlObj.DoFunction.length > 0)
127        {
128          eval (hlObj.DoFunction);
129        }
130        else if (hlObj.Hyperlink.length > 0)
131        {
132          if (hlObj.NewWindow)
133          {
134            window.open (hlObj.Hyperlink);
135          }
136          else
137          {
138            top.location.href = hlObj.Hyperlink.substr (0, 510);
139          }
140        }
141        else if (elem != null)
142        {
143          var href = elem.origHref;
144          if (href == null)
145          {
146            href = elem.href;
147          }
148
149          var target = elem.origTarget;
150          if (target == null)
151          {
152            target = elem.target;
153          }
154
155          if (href && href.length > 0)
156          {
157            href = HTMLEscape (href);
158            if (target && target == "_blank")
159            {
160              window.open (href);
161            }
162            else
163            {
164              top.location.href = href.substr (0, 510);
165            }
166          }
167        }
168      }
169    }
170  }
171
172  return (!isUpLevel);
173}
174
175function UpdateProps(pageID, shapeID)
176{
177  var shape = FindShapeXML (pageID, shapeID);
178
179  FillPropPane(shape, frmToolbar.hideDetails);
180}
181
182function UpdatePropsByShapeName(pageName, shapeName)
183{
184  var shape = FindShapeXMLByName (pageName, shapeName);
185
186  FillPropPane(shape, frmToolbar.hideDetails);
187}
188
189function FillPropPane (shapeNode, outputDivObj )
190{
191  if (shapeNode != null && outputDivObj != null)
192  {
193    if(outputDivObj.style.display == "none")
194    {
195      frmToolbar.ToggleWidget(outputDivObj);
196    }
197 
198    var strCPHTML = "";
199   
200    var shapeNameAttr = shapeNode.attributes.getNamedItem ("Name");
201    if (shapeNameAttr)
202    {
203      strCPHTML += "<span class='p2' style='padding-left:2px;'>" + strShape + " " + HTMLEscape(shapeNameAttr.text) + "</span>";
204    }
205
206    var strTableHTML = CreatePropTable (shapeNode);
207    if(strTableHTML.indexOf("<table") == -1)
208    {
209      strTableHTML = "<p class='p2' style='margin-left:1em;margin-top:0em;'>" + strTableHTML + "</p>";
210    }
211
212    if (strTableHTML.length > 0)
213    {
214      strCPHTML += strTableHTML;
215    }
216    else
217    {
218      strCPHTML = strNoCustomPropertiesToDisplayText;
219    }
220   
221    outputDivObj.innerHTML = strCPHTML;
222    outputDivObj.minHeight = 75;
223  }
224}
225
226function CreatePropTable (shapeNode)
227{
228  var strCPHTML = "";
229  var strStartTable = "<table class='propViewerTABLE' borderColor='#999999' cellPadding='2' width='95%' border='1' summary='此表格包含圖形詳細資料'>";
230    strStartTable += "<THEAD class='propViewerTHEAD'><TH>標籤</TH><TH>值</TH></THEAD>";
231  var strEndTable = "</TABLE>";
232
233  if (shapeNode != null)
234  {
235    var propColl = shapeNode.selectNodes ("Prop");
236
237    var propCount = propColl.length;
238    for (var count = 0; count < propCount; count++)
239    {
240      strCPHTML += "<TR class='" + g_RowStyleList[count % 2] + "'>";
241     
242      var strLabelText = "";
243      oPropLabel = propColl.item(count).selectSingleNode("Label/textnode()");
244      if (oPropLabel != null)
245      {
246        strLabelText = HTMLEscape (oPropLabel.text);
247      }
248      else
249      {
250        oPropName = propColl.item(count).attributes.getNamedItem ("Name");
251        if (oPropName)
252        {
253          strLabelText = HTMLEscape (oPropName.text);
254        }
255      }
256
257      if (strLabelText.length > 0)
258      {
259        strCPHTML += "<TD class='propViewerTD'>" + strLabelText + "</TD>";
260        strCPHTML += "<TD class='propViewerTD'>"
261
262        var strValueText = "&nbsp;";
263        oPropValue = propColl.item(count).selectSingleNode("Value/textnode()");
264        if (oPropValue)
265        {
266          strValueText = HTMLEscape (oPropValue.text);
267        }
268
269        strCPHTML += strValueText + "</TD></TR>";
270      }
271    }
272
273    if(strCPHTML != "")
274    {
275      strCPHTML = strStartTable + strCPHTML + strEndTable;
276    }
277    else
278    {
279      strCPHTML = "沒有可使用的詳細資料。";
280    }
281  }
282
283  return strCPHTML;
284}
285
286function keyHandler()
287{
288  var e = frmDrawing.window.event;
289  if(e.keyCode == 13) //enter
290  {
291    e.srcElement.click();
292  }
293}
294
295function GoToPage(index)
296{
297  if (viewMgr)
298  {
299    viewMgr.loadPage (index);
300  }
301  else
302  {
303    DefPageLoad (index);
304  }
305}
306
307function GoToPageByID(pageID)
308{
309  var pageIndex = PageIndexFromID (pageID);
310  if (pageIndex >= 0)
311  {
312    GoToPage (pageIndex);
313  }
314}
315
316function PageIndexFromID (pageID)
317{
318  if (g_FileList != null)
319  {
320    var entry;
321
322    var count;
323    var fileEntry;
324    var bFoundEntry = false;
325    for (count = 0; 
326       count < g_FileList.length && !bFoundEntry; 
327       count++)
328    {
329      if (pageID == g_FileList[count].PageID)
330      {
331        return count;
332      }
333    }
334  }
335  return -1;
336}
337
338function PageIndexFromName (strPageName)
339{
340  if (g_FileList != null)
341  {
342    var entry;
343
344    var strPageNameLower = strPageName;
345    strPageNameLower = strPageNameLower.toLowerCase ();
346
347    var count;
348    var fileEntry;
349    var bFoundEntry = false;
350    for (count = 0; 
351       count < g_FileList.length && !bFoundEntry; 
352       count++)
353    {
354      var strFileListPageName = g_FileList[count].PageName;
355      strFileListPageName = HTMLUnescape (strFileListPageName);
356      strFileListPageName = strFileListPageName.toLowerCase ();
357      if (strPageNameLower == strFileListPageName)
358      {
359        return count;
360      }
361    }
362  }
363  return -1;
364}
365
366function PageIndexFromFileName (strFileName)
367{
368  if (g_FileList != null)
369  {
370    var entry;
371
372    var strFileNameLower = strFileName;
373    strFileNameLower = strFileNameLower.toLowerCase ();
374
375    var count;
376    var fileEntry;
377    var bFoundEntry = false;
378    for (count = 0; 
379       count < g_FileList.length && !bFoundEntry; 
380       count++)
381    {
382      var strFileListFileName = g_FileList[count].PriImage;
383      strFileListFileName = strFileListFileName.toLowerCase ();
384      if (strFileNameLower == strFileListFileName)
385      {
386        return count;
387      }
388
389      strFileListFileName = g_FileList[count].SecImage;
390      strFileListFileName = strFileListFileName.toLowerCase ();
391      if (strFileNameLower == strFileListFileName)
392      {
393        return count;
394      }
395    }
396  }
397  return -1;
398}
399
400function PageIndexFromVisioPageIndex (pageIndex)
401{
402  if (g_FileList != null)
403  {
404    var entry;
405
406    var count;
407    var fileEntry;
408    var bFoundEntry = false;
409    for (count = 0; 
410       count < g_FileList.length && !bFoundEntry; 
411       count++)
412    {
413      if (pageIndex == g_FileList[count].PageIndex)
414      {
415        return count;
416      }
417    }
418  }
419  return -1;
420}
421
422function FindShapeXML (pageID, shapeID)
423{
424  var shapeObj = null;
425
426  if (xmlData)
427  {
428    var pagesObj = xmlData.selectSingleNode("VisioDocument/Pages");
429    if(!pagesObj)
430    {
431      return null;
432    }
433   
434    var pageQuerryString = './/Page[@ID = "' + pageID + '"]';
435    var pageObj = pagesObj.selectSingleNode(pageQuerryString);
436    if(!pageObj)
437    {
438      return null;
439    }
440
441    var shapeQuerryString = './/Shape[@ID = "' + shapeID + '"]';
442    shapeObj = pageObj.selectSingleNode(shapeQuerryString);
443  }
444
445  return shapeObj;
446}
447
448function FindShapeXMLByName (pageName, shapeName)
449{
450  var shapeObj = null;
451
452  if (xmlData)
453  {
454    var pagesObj = xmlData.selectSingleNode("VisioDocument/Pages");
455    if(!pagesObj)
456    {
457      return null;
458    }
459   
460    var pageQuerryString = './/Page[@Name $ieq$ "' + EscapeString (pageName) + '"]';
461    var pageObj = pagesObj.selectSingleNode(pageQuerryString);
462    if(!pageObj)
463    {
464      return null;
465    }
466
467    var shapeQuerryString = './/Shape[@Name $ieq$ "' + EscapeString (shapeName) + '"]';
468    shapeObj = pageObj.selectSingleNode(shapeQuerryString);
469  }
470
471  return shapeObj;
472}
473
474function Unquote (str)
475{
476  var nStartIndex = 0;
477  var nEndIndex = str.length;
478
479  if (str.charAt (0) == '"')
480  {
481    nStartIndex = 1;
482  }
483
484  if (str.charAt (nEndIndex - 1) == '"')
485  {
486    nEndIndex -= 1;
487  }
488
489  return str.substring (nStartIndex, nEndIndex);
490}
491
492function ConvertXorYCoordinate(PosValue, OldMin, OldMax, NewMin, NewMax, MapBackwards)
493{
494  var OldMid = (OldMax - OldMin) / 2;
495  var NewMid = (NewMax - NewMin) / 2;
496  var ConvertResult = 1 * PosValue;
497  ConvertResult = ConvertResult - (OldMin + OldMid);
498  ConvertResult = ConvertResult / OldMid;
499  if(MapBackwards != 0)
500  {
501    ConvertResult = 0 - ConvertResult;
502  }
503  ConvertResult = ConvertResult * NewMid;
504  ConvertResult = ConvertResult + (NewMin + NewMid);
505  return ConvertResult;
506}
507
508function showObject( divObject, divID ) 
509{
510  if( divObject == null )
511    divObject = getObj( divID );
512 
513  if( divObject != null ) 
514  {
515    divObject.style.display = "";
516    divObject.style.visibility = "visible"
517  }
518  return divObject;
519}
520
521function hideObject( divObject, divID ) 
522{
523  if( divObject == null )
524    divObject = getObj( divID );
525 
526  if( divObject != null ) 
527  {
528    divObject.style.visibility = "hidden";
529    divObject.style.display = "none";
530  }
531  return divObject;
532}
533
534function EscapeString (str)
535{
536  var strResult = "";
537
538  for (var i = 0 ; i < str.length ; i++)
539  {
540    var curChar = str.charAt(i);
541    if (curChar == '\\')
542    {
543      strResult += "\\\\";
544    }
545    else if (curChar == "\"")
546    {
547      strResult += "\\\"";
548    }
549    else if (curChar == "\'")
550    {
551      strResult += "\\\'";
552    }
553    else
554    {
555      strResult += curChar;
556    }
557  }
558
559  return strResult;
560}
561
562function HTMLEscape (str)
563{
564  var strResult = "";
565
566  for (var i = 0 ; i < str.length ; i++)
567  {
568    var curChar = str.charAt(i);
569    if (curChar == '\\')
570    {
571      strResult += "&#92;";
572    }
573    else if (curChar == '\"')
574    {
575      strResult += "&#34;";
576    }
577    else if (curChar == '\'')
578    {
579      strResult += "&#39;";
580    }
581    else if (curChar == '<')
582    {
583      strResult += "&#60;";
584    }
585    else if (curChar == '<')
586    {
587      strResult += "&#62;";
588    }
589    else if (curChar == '&')
590    {
591      strResult += "&#38;";
592    }
593    else
594    {
595      strResult += curChar;
596    }
597  }
598
599  return strResult;
600}
601
602function HTMLUnescape (str)
603{
604  var strResult = "";
605  var strEscapePattern = "&#xx;";
606
607  for (var i = 0 ; i < str.length - strEscapePattern.length + 1; i++)
608  {
609    if (str.charAt(i) == '&' && 
610      str.charAt(i + 1) == '#' &&
611      str.charAt(i + 4) == ';')
612    {
613      var charCode = str.charAt(i + 2);
614      charCode += str.charAt(i + 3);
615
616      if (charCode == "34")
617      {
618        strResult += '"';
619      }
620      else if (charCode == "39")
621      {
622        strResult += '\'';
623      }
624      else if (charCode == "60")
625      {
626        strResult += '<';
627      }
628      else if (charCode == "62")
629      {
630        strResult += '>';
631      }
632      else if (charCode == "92")
633      {
634        strResult += '\\';
635      }
636      else if (charCode == "38")
637      {
638        strResult += '&';
639      }
640     
641      i = i + strEscapePattern.length - 1;
642    }
643    else
644    {
645      strResult += str.charAt(i);
646    }
647  }
648
649  strResult += str.substring (i, str.length);
650
651  return strResult;
652}
653
Note: See TracBrowser for help on using the repository browser.