1 | |
---|
2 | var MSIE = false; |
---|
3 | var ver = 0; |
---|
4 | var indexOfMSIE = navigator.userAgent.indexOf("MSIE"); |
---|
5 | if(indexOfMSIE != -1) |
---|
6 | { |
---|
7 | MSIE = true; |
---|
8 | ver = parseFloat(navigator.userAgent.substring(indexOfMSIE + 5, navigator.userAgent.indexOf(";", indexOfMSIE))); |
---|
9 | } |
---|
10 | |
---|
11 | var isMac = (navigator.appVersion.indexOf("Macintosh") >= 0); |
---|
12 | var isUpLevel = (MSIE && ver >= 5 && !isMac); |
---|
13 | |
---|
14 | var xmlData = XMLData("clonezilla_mode.files/data.xml"); |
---|
15 | |
---|
16 | var g_RowStyleList = new Array( |
---|
17 | "propViewerEvenRow", |
---|
18 | "propViewerOddRow" |
---|
19 | ); |
---|
20 | |
---|
21 | |
---|
22 | var strShape = "圖形名稱:"; |
---|
23 | |
---|
24 | |
---|
25 | |
---|
26 | function 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 | |
---|
52 | function CreateObject (strObj) |
---|
53 | { |
---|
54 | var obj = null; |
---|
55 | eval ("try { obj = new ActiveXObject(strObj); } catch (e) {}"); |
---|
56 | return obj; |
---|
57 | } |
---|
58 | |
---|
59 | function doVersion() |
---|
60 | { |
---|
61 | if(isUpLevel) |
---|
62 | { |
---|
63 | frmToolbar.divDownLevel.innerHTML = ""; |
---|
64 | frmToolbar.divUpLevel.innerHTML = frmWidgets.divData.innerHTML; |
---|
65 | } |
---|
66 | } |
---|
67 | |
---|
68 | |
---|
69 | function 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 | |
---|
95 | function 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 | |
---|
109 | function 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 | |
---|
175 | function UpdateProps(pageID, shapeID) |
---|
176 | { |
---|
177 | var shape = FindShapeXML (pageID, shapeID); |
---|
178 | |
---|
179 | FillPropPane(shape, frmToolbar.hideDetails); |
---|
180 | } |
---|
181 | |
---|
182 | function UpdatePropsByShapeName(pageName, shapeName) |
---|
183 | { |
---|
184 | var shape = FindShapeXMLByName (pageName, shapeName); |
---|
185 | |
---|
186 | FillPropPane(shape, frmToolbar.hideDetails); |
---|
187 | } |
---|
188 | |
---|
189 | function 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 | |
---|
226 | function 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 = " "; |
---|
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 | |
---|
286 | function keyHandler() |
---|
287 | { |
---|
288 | var e = frmDrawing.window.event; |
---|
289 | if(e.keyCode == 13) //enter |
---|
290 | { |
---|
291 | e.srcElement.click(); |
---|
292 | } |
---|
293 | } |
---|
294 | |
---|
295 | function GoToPage(index) |
---|
296 | { |
---|
297 | if (viewMgr) |
---|
298 | { |
---|
299 | viewMgr.loadPage (index); |
---|
300 | } |
---|
301 | else |
---|
302 | { |
---|
303 | DefPageLoad (index); |
---|
304 | } |
---|
305 | } |
---|
306 | |
---|
307 | function GoToPageByID(pageID) |
---|
308 | { |
---|
309 | var pageIndex = PageIndexFromID (pageID); |
---|
310 | if (pageIndex >= 0) |
---|
311 | { |
---|
312 | GoToPage (pageIndex); |
---|
313 | } |
---|
314 | } |
---|
315 | |
---|
316 | function 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 | |
---|
338 | function 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 | |
---|
366 | function 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 | |
---|
400 | function 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 | |
---|
422 | function 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 | |
---|
448 | function 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 | |
---|
474 | function 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 | |
---|
492 | function 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 | |
---|
508 | function 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 | |
---|
521 | function 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 | |
---|
534 | function 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 | |
---|
562 | function 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 += "\"; |
---|
572 | } |
---|
573 | else if (curChar == '\"') |
---|
574 | { |
---|
575 | strResult += """; |
---|
576 | } |
---|
577 | else if (curChar == '\'') |
---|
578 | { |
---|
579 | strResult += "'"; |
---|
580 | } |
---|
581 | else if (curChar == '<') |
---|
582 | { |
---|
583 | strResult += "<"; |
---|
584 | } |
---|
585 | else if (curChar == '<') |
---|
586 | { |
---|
587 | strResult += ">"; |
---|
588 | } |
---|
589 | else if (curChar == '&') |
---|
590 | { |
---|
591 | strResult += "&"; |
---|
592 | } |
---|
593 | else |
---|
594 | { |
---|
595 | strResult += curChar; |
---|
596 | } |
---|
597 | } |
---|
598 | |
---|
599 | return strResult; |
---|
600 | } |
---|
601 | |
---|
602 | function 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 | |
---|