home *** CD-ROM | disk | FTP | other *** search
/ Microsoft DirectX SDK 7.0 / Dx7.bin / DXF / doc / directx6.1 / directx.chm / devdoc / apiref.js next >
Encoding:
Text File  |  1999-03-03  |  9.4 KB  |  420 lines

  1. function writeCSS(strPath)
  2. {
  3.     if (navigator.appName == "Microsoft Internet Explorer") {
  4.         var sVer = navigator.appVersion;
  5.         sVer = sVer.substring(0, sVer.indexOf("."));
  6.         if (sVer >= 4) {
  7.             document.writeln('<SCRIPT FOR=reftip EVENT=onclick>window.event.cancelBubble = true;</SCRIPT>');
  8.             strPath += '4.css';
  9.         }
  10.         else
  11.             strPath += '3.css';
  12.     }
  13.     else
  14.         strPath += "n.css";
  15.  
  16.     document.writeln('<LINK REL="stylesheet" HREF="' + strPath + '">');
  17. }
  18.  
  19. function bodyOnLoad()
  20. {
  21.     // Return if the browser isn't IE4 or later.
  22.     if (navigator.appName != "Microsoft Internet Explorer")
  23.         return false;
  24.     var sVersion = navigator.appVersion;
  25.     sVersion = sVersion.substring(0, sVersion.indexOf(".", 0));
  26.     if (sVersion < 4)
  27.         return false;
  28.  
  29.     // Find the syntax block, if any.
  30.     var syn = findSyn();
  31.     if (!syn)
  32.         return;
  33.  
  34.     // Get the syntax HTML.
  35.     var strSyn = syn.outerHTML;
  36.     var ichStart = strSyn.indexOf('>', 0) + 1;
  37.  
  38.     // Find the parameter list, if any.
  39.     var dl = findDL();
  40.     if (dl) {
  41.         var terms = dl.children.tags("DT");
  42.         var iTerm;
  43.         for (iTerm = 0; iTerm < terms.length; iTerm++) {
  44.             var words = terms[iTerm].innerText.replace(/\[.+\]/g, " ").replace(/,/g, " ").split(" ");
  45.             var iWord;
  46.             for (iWord = 0; iWord < words.length; iWord++) {
  47.                 var word = words[iWord];
  48.                 if (word.length > 0) {
  49.                     var ichMatch = findTerm(strSyn, ichStart, word);
  50.                     while (ichMatch > 0) {
  51.                         var strTag = '<A HREF="" ONCLICK="showTip(this)" CLASS="synParam">' + word + '</A>';
  52.  
  53.                         strSyn =
  54.                             strSyn.slice(0, ichMatch) +
  55.                             strTag +
  56.                             strSyn.slice(ichMatch + word.length);
  57.  
  58.                         ichMatch = findTerm(strSyn, ichMatch + strTag.length, word);
  59.                     }
  60.                 }
  61.             }
  62.         }
  63.     }
  64.  
  65.     if (findReturn()) {
  66.         var txtLine, aLines, iLine, iWord, strTok;
  67.         txtLine = syn.innerText;
  68.         aLines = txtLine.split("\n");
  69.         for (iLine = 0; iLine < aLines.length; iLine++) {
  70.             var aWords = aLines[iLine].split(" ");
  71.             if (aWords.length > 0) {
  72.                 for (iWord = 0; iWord < aWords.length; iWord++)
  73.                     if (aWords[iWord].length > 0)
  74.                         break;
  75.                 if (isalnum(aWords[iWord].charAt(0))) {
  76.                     strTok = aWords[iWord];
  77.                     break;
  78.                 }
  79.             }
  80.         }
  81.         if (strTok) {
  82.             var ichMatch = strSyn.indexOf(strTok, ichStart);
  83.             if (ichMatch > 0) {
  84.                 var strTag = '<A HREF="" ONCLICK="showTip(this)" CLASS="synRetVal">' + strTok + '</A>';
  85.                 strSyn =
  86.                     strSyn.slice(0, ichMatch) +
  87.                     strTag +
  88.                     strSyn.slice(ichMatch + strTok.length);
  89.             }
  90.         }
  91.     }
  92.  
  93.     // Replace the syntax block with our modified version.
  94.     syn.outerHTML = strSyn;
  95.  
  96.     // Insert the reftip element.
  97.     document.body.insertAdjacentHTML(
  98.         'BeforeEnd',
  99.         '<DIV ID=reftip CLASS=reftip STYLE="position:absolute;visibility:hidden;overflow:visible;"></DIV>'
  100.         );
  101. }
  102.  
  103. function isBold(str, index)
  104. {
  105.     var iStart = str.lastIndexOf("<B>", index);
  106.     if (iStart >= 0) {
  107.         var iEnd = str.lastIndexOf("</B>", index);
  108.         if (iEnd < iStart)
  109.             return true;
  110.     }
  111.     return false;
  112. }
  113.  
  114. function isItalic(str, index)
  115. {
  116.     var iStart = str.lastIndexOf("<I>", index);
  117.     if (iStart >= 0) {
  118.         var iEnd = str.lastIndexOf("</I>", index);
  119.         if (iEnd < iStart)
  120.             return true;
  121.     }
  122.     return false;
  123. }
  124.  
  125. function findTerm(strSyn, ichPos, strTerm)
  126. {
  127.     var ichMatch = strSyn.indexOf(strTerm, ichPos);
  128.     while (ichMatch >= 0) {
  129.         if ((ichMatch == 0 || !isalnum(strSyn.charAt(ichMatch - 1))) && 
  130.                 !isalnum(strSyn.charAt(ichMatch + strTerm.length))) {
  131.             var ichComment = strSyn.indexOf("/*", ichPos);
  132.             while (ichComment >= 0) {
  133.                 if (ichComment > ichMatch) { 
  134.                     ichComment = -1;
  135.                     break; 
  136.                 }
  137.                 var ichEnd = strSyn.indexOf("*/", ichComment);
  138.                 if (ichEnd < 0 || ichEnd > ichMatch)
  139.                     break;
  140.                 ichComment = strSyn.indexOf("/*", ichEnd);
  141.             }
  142.             if (ichComment < 0) {
  143.                 ichComment = strSyn.indexOf("//", ichPos);
  144.                 while (ichComment >= 0) {
  145.                     if (ichComment > ichMatch) {
  146.                         ichComment = -1;
  147.                         break; 
  148.                     }
  149.                     var ichEnd = strSyn.indexOf("\n", ichComment);
  150.                     if (ichEnd < 0 || ichEnd > ichMatch)
  151.                         break;
  152.                     ichComment = strSyn.indexOf("//", ichEnd);
  153.                 }
  154.             }
  155.             if (ichComment < 0)
  156.                 break;
  157.         }
  158.         ichMatch = strSyn.indexOf(strTerm, ichMatch + strTerm.length);
  159.     }
  160.     return ichMatch;
  161. }
  162.  
  163. function findSyn()
  164. {
  165.     var col = document.body.children.tags("PRE");
  166.     if (!col.length)
  167.         return null;
  168.  
  169.     var syn = col[0];
  170.     if (syn.className && syn.className == "syntax")
  171.         return syn;
  172.  
  173.     var rmh = document.body.children.tags("H4");
  174.     var i;
  175.     for (i = 0; i < rmh.length; i++) {
  176.         if (rmh[i].innerText.indexOf("QuickInfo", 0) >= 0)
  177.             return syn;
  178.     }
  179.  
  180.     return null;    
  181. }
  182.  
  183. function findDL()
  184. {
  185.     var col = document.body.children.tags("DL");
  186.     return (col.length > 0) ? col[0] : null;
  187. }
  188.  
  189. function findReturn()
  190. {
  191.     var col = document.body.children.tags("H4");
  192.     var i = 0;
  193.     for (i = 0; i < col.length; i++) {
  194.         if (col[i].innerText.substring(0, 6) == "Return")
  195.             return col[i];
  196.     }
  197.  
  198.     return null;
  199. }
  200.  
  201. function isalnum(ch)
  202. {
  203.     return ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || (ch == '_'));
  204. }
  205.  
  206. function showTip(link)
  207. {
  208.     if (window.event) {
  209.         window.event.returnValue = false;
  210.         window.event.cancelBubble = true;
  211.     }
  212.  
  213.     var tip = document.all.reftip;
  214.     if (!tip || !link)
  215.         return;
  216.  
  217.     if (window.linkElement)
  218.         hideTip();
  219.  
  220.     window.linkElement = link;
  221.  
  222.     // Hide the tip if necessary and initialize its size.
  223.     tip.style.visibility = "hidden";
  224.     tip.style.pixelWidth = 260;
  225.     tip.style.pixelHeight = 24;
  226.  
  227.     // Find the link target and initialize the tip's contents.
  228.     var sTip;
  229.     if (link.className == "synRetVal") {
  230.         var elemHead = null;
  231.         var iFirst = 0;
  232.         var iLast = 0;
  233.  
  234.         var iElem;
  235.         for (iElem = 0; iElem < document.body.children.length; iElem++) {
  236.             var head = document.body.children[iElem];
  237.             if (head.tagName == "H4" && head.innerText.substring(0,6) == "Return") {
  238.                 elemHead = head;
  239.                 iFirst = iElem + 1;
  240.                 iLast = iFirst;
  241.                 while (iLast + 1 < document.body.children.length) {
  242.                     if (document.body.children[iLast + 1].tagName == "H4")
  243.                         break;
  244.                     iLast++;
  245.                 }
  246.                 break;
  247.             }
  248.         }
  249.  
  250.         if (!elemHead)
  251.             return;
  252.  
  253.         window.linkTarget = elemHead;
  254.  
  255.         sTip = '<A HREF="javascript:jumpParam()"><B>';
  256.         sTip += elemHead.innerHTML + "</B></A>";
  257.         for (iElem = iFirst; iElem <= iLast; iElem++)
  258.             sTip += document.body.children[iElem].outerHTML;
  259.     }
  260.     else {
  261.         var elemDT = null;
  262.         var elemDD = null;
  263.  
  264.         var iElem;
  265.         for (iElem = 0; iElem < document.body.children.length; iElem++) {
  266.             var dl = document.body.children[iElem];
  267.             if (dl.tagName == "DL") {
  268.                 for (iElem = 0; iElem + 1 < dl.children.length; iElem++) {
  269.                     var dt = dl.children[iElem];
  270.                     if (dt.tagName == "DT") {
  271.                         if (findTerm(dt.innerText, 0, link.innerText) >= 0) {
  272.                             elemDT = dt;
  273.                             elemDD = dl.children[iElem + 1];
  274.                             break;
  275.                         }
  276.                     }
  277.                 }
  278.                 break;
  279.             }
  280.         }
  281.         
  282.         if (!elemDT)
  283.             return;
  284.  
  285.         window.linkTarget = elemDT;
  286.  
  287.         sTip = '<DL><DT><A HREF="javascript:jumpParam()">';
  288.         sTip += elemDT.innerHTML + "</A></DT>";
  289.         sTip += elemDD.outerHTML + "</DL>";
  290.     }
  291.     tip.innerHTML = sTip;
  292.  
  293.     // Position the tip after it's updated.
  294.     window.setTimeout("moveTip()", 0);
  295. }
  296.  
  297. function jumpParam()
  298. {
  299.     hideTip();
  300.  
  301.     window.linkTarget.scrollIntoView();
  302.     document.body.scrollLeft = 0;
  303.  
  304.     flash(3);
  305. }
  306.  
  307. function flash(c)
  308. {
  309.     window.linkTarget.style.background = (c & 1) ? "#FFFF80" : "";
  310.     if (c)
  311.         window.setTimeout("flash(" + (c-1) + ")", 200);
  312. }
  313.  
  314. function moveTip()
  315. {
  316.     var tip = document.all.reftip;
  317.     var link = window.linkElement;
  318.     if (!tip || !link)
  319.         return; //error
  320.  
  321.     var w = tip.offsetWidth;
  322.     var h = tip.offsetHeight;
  323.  
  324.     if (w > tip.style.pixelWidth) {
  325.         tip.style.pixelWidth = w;
  326.         window.setTimeout("moveTip()", 0);
  327.         return;
  328.     }
  329.  
  330.     var maxw = document.body.clientWidth;
  331.     var maxh = document.body.clientHeight;
  332.  
  333.     if (h > maxh) {
  334.         if (w < maxw) {
  335.             w = w * 3 / 2;
  336.             tip.style.pixelWidth = (w < maxw) ? w : maxw;
  337.             window.setTimeout("moveTip()", 0);
  338.             return;
  339.         }
  340.     }
  341.  
  342.     var x,y;
  343.  
  344.     var linkLeft = link.offsetLeft - document.body.scrollLeft;
  345.     var linkRight = linkLeft + link.offsetWidth;
  346.  
  347.     var linkTop = link.offsetTop - document.body.scrollTop;
  348.     var linkBottom = linkTop + link.offsetHeight;
  349.  
  350.     var cxMin = link.offsetWidth - 24;
  351.     if (cxMin < 16)
  352.         cxMin = 16;
  353.  
  354.     if (linkLeft + cxMin + w <= maxw) {
  355.         x = maxw - w;
  356.         if (x > linkRight + 8)
  357.             x = linkRight + 8;
  358.         y = maxh - h;
  359.         if (y > linkTop)
  360.             y = linkTop;
  361.     }
  362.     else if (linkBottom + h <= maxh) {
  363.         x = maxw - w;
  364.         if (x < 0)
  365.             x = 0;
  366.         y = linkBottom;
  367.     }
  368.     else if (w <= linkRight - cxMin) {
  369.         x = linkLeft - w - 8;
  370.         if (x < 0)
  371.             x = 0;
  372.         y = maxh - h;
  373.         if (y > linkTop)
  374.             y = linkTop;
  375.     }
  376.     else if (h <= linkTop) {
  377.         x = maxw - w;
  378.         if (x < 0)
  379.             x = 0;
  380.         y = linkTop - h;
  381.     }
  382.     else if (w >= maxw) {
  383.         x = 0;
  384.         y = linkBottom;
  385.     }
  386.     else {
  387.         w = w * 3 / 2;
  388.         tip.style.pixelWidth = (w < maxw) ? w : maxw;
  389.         window.setTimeout("moveTip()", 0);
  390.         return;
  391.     }
  392.     
  393.     link.style.background = "#FFFF80";
  394.     tip.style.pixelLeft = x + document.body.scrollLeft;
  395.     tip.style.pixelTop = y + document.body.scrollTop;
  396.     tip.style.visibility = "visible";
  397. }
  398.  
  399. function bodyOnClick()
  400. {
  401.     var tip = document.all.reftip;
  402.     if (tip && tip.style.visibility == "visible")
  403.         hideTip();
  404. }
  405.  
  406. function hideTip()
  407. {
  408.     if (window.linkElement) {
  409.         window.linkElement.style.background = "";
  410.         window.linkElement = null;
  411.     }
  412.  
  413.     var tip = document.all.reftip;
  414.     if (tip) {
  415.         tip.style.visibility = "hidden";
  416.         tip.innerHTML = "";
  417.     }
  418. }
  419.  
  420.