home *** CD-ROM | disk | FTP | other *** search
/ Chip: Shareware for Win 95 / Chip-Shareware-Win95.bin / komunik / ie40 / ie4nt_s2.cab / IE4NT_2.CAB / MSHTML.DLL / 2110 / GOBOOK.DLG < prev    next >
Encoding:
Text File  |  1997-07-12  |  11.2 KB  |  473 lines

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD W3 HTML 3.2//EN">
  2. <HTML>
  3. <HEAD>
  4. <TITLE id=dialogTitle>
  5. Go To Bookmark
  6. </TITLE>
  7. <!-- TO DO
  8. * Need robust method of determining whether the current selection contains
  9.  an anchor element. The current implementation in loadBdy() will
  10.  fail if text preceding the anchor tag in the document is selected. PM
  11.  (scotti) is working on providing a method to do this.
  12. * (TASK #2) Tab order
  13. * (TASK #5) No way to change button caption
  14. * (RAID #8892) Can't create Option object with new operator
  15.  Affects selBookmark_fill().
  16. * (RAID #9255) Can't use arrow keys to move between radio buttons
  17.  Affects usability.
  18. * (RAID #10031) Parent of <HTML> element is not null. Result is error
  19.  when parent of <HTML> is accessed. This will occur during initialization.
  20. * (RAID #10321) Wrong answer returned when comparing anchor href and name
  21.  properties to null.
  22.  Affects isLink(). Can't test bookmarkDelete() until it's fixed.
  23. -->
  24. <!-- NOTES
  25. * Expando properties
  26. * Object: selBookmark.option
  27.  * exAnchor: a reference to the anchor that corresponds to the entry.
  28.     This is used to access properties of a particular anchor
  29.     directly.
  30.  * exDocIndex: 0-based index corresponding to the order in which the
  31.     bookmark appears in the document. This property is used
  32.     when sorting the bookmarks by index. Reloading the
  33.     bookmarks from the document wasn't a viable solution
  34.     because it doesn't provide a way to remember which
  35.     bookmark(s) were selected.
  36. * Object: btnNext
  37.  * exState: Should the button execute the GoTo action or the Next
  38.     action?
  39. -->
  40. <SCRIPT LANGUAGE=JavaScript>
  41. var cmdDeleteBookmark  = "UnBookmark";
  42. function expandoOn()
  43. {
  44.  document.expando = true;
  45. function expandoOff()
  46. {
  47.  document.expando = false;
  48. function hasID(object)
  49. {
  50.  return null != object.id;
  51. function isLink (anchor)
  52. {
  53.  return null != anchor.href;
  54.  function selSortByName(sel)
  55.  {
  56.    var    index1;
  57.    var    index2;
  58.    var    textTemp;
  59.    var  selectedTemp;
  60.  var  anchorTemp;
  61.  var  docIndexTemp;
  62.  expandoOn();
  63.    for (index1 = 1; index1 < sel.options.length; index1++)
  64.    {
  65.   with (sel.options[index1])
  66.   {
  67.    textTemp  = text;
  68.    selectedTemp = selected;
  69.    anchorTemp = exAnchor;
  70.    docIndexTemp = exDocIndex;
  71.   }
  72.      for (index2 = index1 - 1;
  73.         index2 >= 0 && textTemp < sel.options[index2].text;
  74.         index2--)
  75.      {
  76.    with (sel.options[index2 + 1])
  77.    {
  78.     text  = sel.options[index2].text;
  79.     selected = sel.options[index2].selected;
  80.     exAnchor = sel.options[index2].exAnchor;
  81.     exDocIndex = sel.options[index2].exDocIndex;
  82.    }
  83.      }
  84.   with (sel.options[index2 + 1])
  85.   {
  86.    text  = textTemp;
  87.    selected = selectedTemp;
  88.    exAnchor = anchorTemp;
  89.    exDocIndex = docIndexTemp;
  90.   }
  91.    }
  92.  expandoOff();
  93.  }  
  94. function selSortByIndex(sel)
  95. {
  96.    var    index1;
  97.    var    index2;
  98.    var    textTemp;
  99.    var  selectedTemp;
  100.  var  anchorTemp;
  101.  var  docIndexTemp;
  102.  expandoOn();
  103.    for (index1 = 1; index1 < sel.options.length; index1++)
  104.    {
  105.   with (sel.options[index1])
  106.   {
  107.    textTemp  = text;
  108.    selectedTemp = selected;
  109.    anchorTemp = exAnchor;
  110.    docIndexTemp = exDocIndex;
  111.   }
  112.      for (index2 = index1 - 1;
  113.         index2 >= 0 && docIndexTemp < sel.options[index2].exDocIndex;
  114.         index2--)
  115.      {
  116.    with (sel.options[index2 + 1])
  117.    {
  118.     text  = sel.options[index2].text;
  119.     selected = sel.options[index2].selected;
  120.     exAnchor  = sel.options[index2].exAnchor;
  121.     exDocIndex = sel.options[index2].exDocIndex;
  122.    }
  123.      }
  124.   with (sel.options[index2 + 1])
  125.   {
  126.    text  = textTemp;
  127.    selected = selectedTemp;
  128.    exAnchor = anchorTemp;
  129.    exDocIndex = docIndexTemp;
  130.   }
  131.    }
  132.  expandoOff();
  133. function number(string)
  134. {
  135.  return parseFloat(string);
  136. </SCRIPT>
  137. <SCRIPT LANGUAGE=JavaScript>
  138. var L_GoToBookmark_DIALOG_Left_Number = number("50");
  139. var L_GoToBookmark_DIALOG_Top_Number = number("100");
  140. var L_GoToBookmark_DIALOG_Width_Number = number("450");
  141. var L_GoToBookmark_DIALOG_Height_Number = number("250");
  142. var L_BookmarkHasID_Text =
  143. "This bookmark contains an ID attribute. Are you sure want to delete it?";
  144. </SCRIPT>
  145. <SCRIPT LANGUAGE="JavaScript">
  146. expandoOff();
  147. var STATE_GOTO    = 0; 
  148. var STATE_NEXT    = 1; 
  149. var htmlConfirmYes   = 6;
  150. var htmlConfirmNo   = 7;
  151. window.dialogLeft  = L_GoToBookmark_DIALOG_Left_Number;
  152. window.dialogTop   = L_GoToBookmark_DIALOG_Top_Number;
  153. window.dialogWidth  = L_GoToBookmark_DIALOG_Width_Number;
  154. window.dialogHeight  = L_GoToBookmark_DIALOG_Height_Number;
  155. gdoc = window.dialogArguments.document;
  156. function selBookmark_fill()
  157. {
  158.  var  index;
  159.  expandoOn();
  160.  for (index = 0; index < selBookmark.options.length; index++)
  161.  {
  162.   selBookmark.options[index].exAnchor  = gdoc.anchors[index];
  163.   selBookmark.options[index].exDocIndex = index;
  164.  }
  165.  expandoOff();
  166. function selCount(sel)
  167. {
  168.  var index;
  169.  var indexMax = sel.options.length;
  170.  var cSelected = 0;
  171.  for (index = 0; index < indexMax; index++)
  172.  {
  173.   if (sel.options[index].selected)
  174.   {
  175.    cSelected++;
  176.   }
  177.  }
  178.  return cSelected;
  179. function bookmarkDelete(opt)
  180. {
  181.  var  anchor  = opt.exAnchor;
  182.  if (isLink(anchor))
  183.  {
  184.   anchor.name = "";
  185.  }
  186.  else
  187.  {
  188.   if (hasID(anchor))  
  189.   {
  190.    var rc = confirm(L_BookmarkHasID_Text);
  191.    if (rc == htmlConfirmYes)
  192.    {
  193.     rng = gdoc.rangeFromElement(anchor);
  194.     rng.execCommand(cmdDeleteBookmark);
  195.    }
  196.    else
  197.    {
  198.     anchor.name = "";
  199.    }
  200.   }
  201.   else        
  202.   {
  203.    rng = gdoc.rangeFromElement(anchor);
  204.    rng.execCommand(cmdDeleteBookmark);
  205.   }
  206.  }
  207. function bookmarkScroll(opt)
  208. {
  209.  if (null == opt)
  210.  {
  211.   return;
  212.  }
  213.  opt.exAnchor.scrollIntoView(true);
  214. function btnNextSetState()
  215. {
  216.  if ((1 != selCount(selBookmark)) ||
  217.   ((STATE_NEXT == btnNext.exState) &&
  218.   (selBookmark.options.length - 1 == selBookmark.selectedIndex)))
  219.  {
  220.   btnNext.disabled = true;
  221.  }
  222.  else
  223.  {
  224.   btnNext.disabled = false;
  225.  }
  226. function btnPrevSetState()
  227. {
  228.  if ((0 == selBookmark.selectedIndex) || (1 < selCount(selBookmark))
  229.   || (0 == selBookmark.options.length))
  230.  {
  231.   btnPrev.disabled = true;
  232.  }
  233.  else
  234.  {
  235.   btnPrev.disabled = false;
  236.  }
  237. function btnDeleteSetState()
  238. {
  239.  if (0 == selCount(selBookmark))
  240.  {
  241.   btnDelete.disabled = true;
  242.  }
  243.  else
  244.  {
  245.   btnDelete.disabled = false;
  246.  }
  247. function loadBdy()
  248. {
  249.  var name;
  250.  expandoOn();
  251.  btnNext.exState = STATE_GOTO;
  252.  expandoOff();
  253.  btnNextSetState();
  254.  btnPrevSetState();
  255.  btnDeleteSetState();
  256.  selBookmark_fill();
  257.  name = "";
  258.  rng = gdoc.selection.createRange();
  259.  rng.collapse(true);
  260.  elm = rng.parentElement();
  261.  while(elm.tagName != "HTML")
  262.  {
  263.   if (elm.tagName == "A")
  264.   {
  265.    name = elm.name;
  266.    break;
  267.   }
  268.   elm = elm.parentElement;
  269.  }
  270.  if (name != "")
  271.  {
  272.   for (index = 0; index < selBookmark.options.length; index++)
  273.   {
  274.    if (selBookmark.options[index].text == name)
  275.    {
  276.     selBookmark.options[index].selected = true;
  277.     break;
  278.    }
  279.   }
  280.  }
  281. function onCmdGoto()
  282. {
  283.  bookmarkScroll(selBookmark.options[selBookmark.selectedIndex]);
  284.  btnPrevSetState();
  285.  btnNextSetState();
  286. function onCmdNext()
  287. {
  288.  selBookmark.selectedIndex++;
  289.  bookmarkScroll(selBookmark.options[selBookmark.selectedIndex]);
  290.  btnPrevSetState();
  291.  btnNextSetState();
  292. function onCmdPrevious()
  293. {
  294.  selBookmark.selectedIndex--;
  295.  bookmarkScroll(selBookmark.options[selBookmark.selectedIndex]);
  296.  btnNextSetState();
  297.  btnPrevSetState();
  298. function onCmdDelete()
  299. {
  300.  var  index;
  301.  var  indexMax;
  302.  for (index = selBookmark.selectedIndex, indexMax = selBookmark.options.length;
  303.    index < indexMax;
  304.    index++)
  305.  {
  306.   if (selBookmark.options[index].selected)
  307.   {
  308.    bookmarkDelete(selBookmark.options[index]);
  309.   }
  310.  }
  311.  window.close();
  312. function onCmdCancel()
  313. {
  314.  window.close();
  315. </SCRIPT>
  316. <SCRIPT LANGUAGE=JavaScript FOR=document EVENT="onkeypress()">
  317. var htmlKeyReturn = 13;
  318. var htmlKeyEscape = 27;
  319. if (event.keyCode == htmlKeyReturn)  
  320. {
  321.  if (btnNext.exState == STATE_GOTO)
  322.  {
  323.   onCmdGoto();
  324.  }
  325.  else
  326.  {
  327.   onCmdNext();
  328.  }
  329. }
  330. if (event.keyCode == htmlKeyEscape)  
  331. {
  332.  onCmdCancel();
  333. }
  334. </SCRIPT>
  335. <SCRIPT LANGUAGE=JavaScript FOR=selBookmark EVENT="dblClick()">
  336. {
  337.  onCmdGoto();
  338. </SCRIPT>
  339. <SCRIPT Language=JavaScript FOR=selBookmark Event="keyUp(shift)">
  340. {
  341.  btnPrevSetState();
  342.  btnNextSetState();
  343.  btnDeleteSetState();
  344. </SCRIPT>
  345. <SCRIPT Language=JavaScript FOR=selBookmark Event="onclick()">
  346. {
  347.  btnPrevSetState();
  348.  btnNextSetState();
  349.  btnDeleteSetState();
  350. </SCRIPT>
  351. <SCRIPT LANGUAGE=JavaScript FOR=radByLoc EVENT="onclick()">
  352. {
  353.    selSortByIndex(document.selBookmark);
  354.  btnPrevSetState();
  355.  btnNextSetState();
  356. </SCRIPT>
  357. <SCRIPT LANGUAGE=JavaScript FOR=radByName EVENT="onclick()">
  358. {
  359.    selSortByName(document.selBookmark);
  360.  btnPrevSetState();
  361.  btnNextSetState();
  362. </SCRIPT>
  363. <SCRIPT LANGUAGE=JavaScript FOR=btnNext EVENT="onclick()">
  364. {
  365.  if (btnNext.exState == STATE_GOTO)
  366.  {
  367.   onCmdGoto();
  368.   expandoOn();
  369.   btnNext.exState = STATE_NEXT;
  370.   expandoOff();
  371.  }
  372.  else
  373.  {
  374.   onCmdNext();
  375.  }
  376. </SCRIPT>
  377. <SCRIPT LANGUAGE=JavaScript FOR=btnPrev EVENT="onclick()">
  378. {
  379.  onCmdPrevious();
  380. </SCRIPT>
  381. <SCRIPT LANGUAGE=JavaScript FOR=btnDelete EVENT="onclick()">
  382. {
  383.  onCmdDelete();
  384. </SCRIPT>
  385. <SCRIPT LANGUAGE=JavaScript FOR=btnClose EVENT="onclick()">
  386. {
  387.  onCmdCancel();
  388. </SCRIPT>
  389. </HEAD>
  390. <BODY id=bodyBookmark onLoad="loadBdy()">
  391. <DIV style="position:absolute; LEFT: .5em; TOP: .5em; WIDTH: 8em; HEIGHT: 1em">
  392. <LABEL For=selBookmark id=lblBookmark>
  393. S<U>e</U>lect Bookmark:
  394. </LABEL>
  395. </DIV>
  396. <SCRIPT LANGUAGE=JavaScript>
  397. var index;
  398. var doc = window.dialogArguments.document;
  399. document.write('<SELECT id=selBookmark ACCESSKEY=e multiple style="position: absolute; LEFT: .5em; TOP: 2.5em; WIDTH: 22em; HEIGHT: 9em">');
  400. for (index = 0; index < doc.anchors.length; index++)
  401. {
  402. if (doc.anchors[index].name != "")
  403. {
  404.  document.write('<OPTION>' + doc.anchors[index].name);
  405. }
  406. }
  407. document.write('</SELECT>');
  408. </SCRIPT>
  409. <TABLE border=1 style="position: absolute; LEFT: .5em; TOP: 7.9em; WIDTH: 14.5em; HEIGHT: 2em">
  410. <TR>
  411. <TD>
  412. <DIV style="position: absolute; LEFT: .5em; TOP: .5em; WIDTH: 5em; HEIGHT: 1em"><LABEL id=lblSortedBy>Sorted by:
  413. </LABEL></DIV>
  414. <INPUT id=radByName name=radSortBy style="position: absolute; LEFT: 5em; TOP: .75em; WIDTH: 1em; HEIGHT: 1em" type=radio
  415. ACCESSKEY=n>
  416. <DIV style="position: absolute; LEFT: 6em; TOP: .5em; WIDTH: 3em; HEIGHT: 1em">
  417. <LABEL For=radByName id=lblByName>
  418. <U>N</U>ame
  419. </LABEL>
  420. </DIV>
  421. <INPUT id=radByLoc name=radSortBy style="position: absolute; LEFT: 9em; TOP: .75em; WIDTH: 1em; HEIGHT: 1em" type=radio
  422. CHECKED ACCESSKEY=l>
  423. <DIV style="position: absolute; LEFT: 10em; TOP: .5em; WIDTH: 6em; HEIGHT: 1em">
  424. <LABEL For=radByLoc id=lblByLoc>
  425. <U>L</U>ocation
  426. </LABEL>
  427. </DIV>
  428. </TD>
  429. </TR>
  430. </TABLE>
  431. <BUTTON id=btnNext style="position: absolute; LEFT:23.5em; TOP: 1.6em; WIDTH: 9.5em; HEIGHT: 2.5em" AccessKey=T>
  432. Go<U>T</U>o
  433. </BUTTON>
  434. <BUTTON id=btnPrev style="position: absolute; LEFT:23.5em; TOP: 4.4em; WIDTH: 9.5em; HEIGHT: 2.5em" AccessKey=V>
  435. Pre<U>v</U>ious
  436. </BUTTON>
  437. <BUTTON id=btnDelete style="position: absolute; LEFT:23.5em; TOP: 10.1em; WIDTH: 9.5em; HEIGHT: 2.5em" AccessKey=D>
  438. <U>D</U>elete
  439. </BUTTON>
  440. <BUTTON id=btnClose style="position: absolute; LEFT:23.5em; TOP: 12.9em; WIDTH: 9.5em; HEIGHT: 2.5em" AccessKey=C>
  441. <U>C</U>lose
  442. </BUTTON>
  443. </BODY>
  444. </HTML>
  445.