home *** CD-ROM | disk | FTP | other *** search
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD W3 HTML 3.2//EN">
- <HTML>
- <HEAD>
- <TITLE id=dialogTitle>
- Go To Bookmark
- </TITLE>
- <!-- TO DO
- * Need robust method of determining whether the current selection contains
- an anchor element. The current implementation in loadBdy() will
- fail if text preceding the anchor tag in the document is selected. PM
- (scotti) is working on providing a method to do this.
- * (TASK #2) Tab order
- * (TASK #5) No way to change button caption
- * (RAID #8892) Can't create Option object with new operator
- Affects selBookmark_fill().
- * (RAID #9255) Can't use arrow keys to move between radio buttons
- Affects usability.
- * (RAID #10031) Parent of <HTML> element is not null. Result is error
- when parent of <HTML> is accessed. This will occur during initialization.
- * (RAID #10321) Wrong answer returned when comparing anchor href and name
- properties to null.
- Affects isLink(). Can't test bookmarkDelete() until it's fixed.
- -->
- <!-- NOTES
- * Expando properties
- * Object: selBookmark.option
- * exAnchor: a reference to the anchor that corresponds to the entry.
- This is used to access properties of a particular anchor
- directly.
- * exDocIndex: 0-based index corresponding to the order in which the
- bookmark appears in the document. This property is used
- when sorting the bookmarks by index. Reloading the
- bookmarks from the document wasn't a viable solution
- because it doesn't provide a way to remember which
- bookmark(s) were selected.
- * Object: btnNext
- * exState: Should the button execute the GoTo action or the Next
- action?
- -->
- <SCRIPT LANGUAGE=JavaScript>
- var cmdDeleteBookmark = "UnBookmark";
- function expandoOn()
- {
- document.expando = true;
- }
- function expandoOff()
- {
- document.expando = false;
- }
- function hasID(object)
- {
- return null != object.id;
- }
- function isLink (anchor)
- {
- return null != anchor.href;
- }
- function selSortByName(sel)
- {
- var index1;
- var index2;
- var textTemp;
- var selectedTemp;
- var anchorTemp;
- var docIndexTemp;
- expandoOn();
- for (index1 = 1; index1 < sel.options.length; index1++)
- {
- with (sel.options[index1])
- {
- textTemp = text;
- selectedTemp = selected;
- anchorTemp = exAnchor;
- docIndexTemp = exDocIndex;
- }
- for (index2 = index1 - 1;
- index2 >= 0 && textTemp < sel.options[index2].text;
- index2--)
- {
- with (sel.options[index2 + 1])
- {
- text = sel.options[index2].text;
- selected = sel.options[index2].selected;
- exAnchor = sel.options[index2].exAnchor;
- exDocIndex = sel.options[index2].exDocIndex;
- }
- }
- with (sel.options[index2 + 1])
- {
- text = textTemp;
- selected = selectedTemp;
- exAnchor = anchorTemp;
- exDocIndex = docIndexTemp;
- }
- }
- expandoOff();
- }
- function selSortByIndex(sel)
- {
- var index1;
- var index2;
- var textTemp;
- var selectedTemp;
- var anchorTemp;
- var docIndexTemp;
- expandoOn();
- for (index1 = 1; index1 < sel.options.length; index1++)
- {
- with (sel.options[index1])
- {
- textTemp = text;
- selectedTemp = selected;
- anchorTemp = exAnchor;
- docIndexTemp = exDocIndex;
- }
- for (index2 = index1 - 1;
- index2 >= 0 && docIndexTemp < sel.options[index2].exDocIndex;
- index2--)
- {
- with (sel.options[index2 + 1])
- {
- text = sel.options[index2].text;
- selected = sel.options[index2].selected;
- exAnchor = sel.options[index2].exAnchor;
- exDocIndex = sel.options[index2].exDocIndex;
- }
- }
- with (sel.options[index2 + 1])
- {
- text = textTemp;
- selected = selectedTemp;
- exAnchor = anchorTemp;
- exDocIndex = docIndexTemp;
- }
- }
- expandoOff();
- }
- function number(string)
- {
- return parseFloat(string);
- }
- </SCRIPT>
- <SCRIPT LANGUAGE=JavaScript>
- var L_GoToBookmark_DIALOG_Left_Number = number("50");
- var L_GoToBookmark_DIALOG_Top_Number = number("100");
- var L_GoToBookmark_DIALOG_Width_Number = number("450");
- var L_GoToBookmark_DIALOG_Height_Number = number("250");
- var L_BookmarkHasID_Text =
- "This bookmark contains an ID attribute. Are you sure want to delete it?";
- </SCRIPT>
- <SCRIPT LANGUAGE="JavaScript">
- expandoOff();
- var STATE_GOTO = 0;
- var STATE_NEXT = 1;
- var htmlConfirmYes = 6;
- var htmlConfirmNo = 7;
- window.dialogLeft = L_GoToBookmark_DIALOG_Left_Number;
- window.dialogTop = L_GoToBookmark_DIALOG_Top_Number;
- window.dialogWidth = L_GoToBookmark_DIALOG_Width_Number;
- window.dialogHeight = L_GoToBookmark_DIALOG_Height_Number;
- gdoc = window.dialogArguments.document;
- function selBookmark_fill()
- {
- var index;
- expandoOn();
- for (index = 0; index < selBookmark.options.length; index++)
- {
- selBookmark.options[index].exAnchor = gdoc.anchors[index];
- selBookmark.options[index].exDocIndex = index;
- }
- expandoOff();
- }
- function selCount(sel)
- {
- var index;
- var indexMax = sel.options.length;
- var cSelected = 0;
- for (index = 0; index < indexMax; index++)
- {
- if (sel.options[index].selected)
- {
- cSelected++;
- }
- }
- return cSelected;
- }
- function bookmarkDelete(opt)
- {
- var anchor = opt.exAnchor;
- if (isLink(anchor))
- {
- anchor.name = "";
- }
- else
- {
- if (hasID(anchor))
- {
- var rc = confirm(L_BookmarkHasID_Text);
- if (rc == htmlConfirmYes)
- {
- rng = gdoc.rangeFromElement(anchor);
- rng.execCommand(cmdDeleteBookmark);
- }
- else
- {
- anchor.name = "";
- }
- }
- else
- {
- rng = gdoc.rangeFromElement(anchor);
- rng.execCommand(cmdDeleteBookmark);
- }
- }
- }
- function bookmarkScroll(opt)
- {
- if (null == opt)
- {
- return;
- }
- opt.exAnchor.scrollIntoView(true);
- }
- function btnNextSetState()
- {
- if ((1 != selCount(selBookmark)) ||
- ((STATE_NEXT == btnNext.exState) &&
- (selBookmark.options.length - 1 == selBookmark.selectedIndex)))
- {
- btnNext.disabled = true;
- }
- else
- {
- btnNext.disabled = false;
- }
- }
- function btnPrevSetState()
- {
- if ((0 == selBookmark.selectedIndex) || (1 < selCount(selBookmark))
- || (0 == selBookmark.options.length))
- {
- btnPrev.disabled = true;
- }
- else
- {
- btnPrev.disabled = false;
- }
- }
- function btnDeleteSetState()
- {
- if (0 == selCount(selBookmark))
- {
- btnDelete.disabled = true;
- }
- else
- {
- btnDelete.disabled = false;
- }
- }
- function loadBdy()
- {
- var name;
- expandoOn();
- btnNext.exState = STATE_GOTO;
- expandoOff();
- btnNextSetState();
- btnPrevSetState();
- btnDeleteSetState();
- selBookmark_fill();
- name = "";
- rng = gdoc.selection.createRange();
- rng.collapse(true);
- elm = rng.parentElement();
- while(elm.tagName != "HTML")
- {
- if (elm.tagName == "A")
- {
- name = elm.name;
- break;
- }
- elm = elm.parentElement;
- }
- if (name != "")
- {
- for (index = 0; index < selBookmark.options.length; index++)
- {
- if (selBookmark.options[index].text == name)
- {
- selBookmark.options[index].selected = true;
- break;
- }
- }
- }
- }
- function onCmdGoto()
- {
- bookmarkScroll(selBookmark.options[selBookmark.selectedIndex]);
- btnPrevSetState();
- btnNextSetState();
- }
- function onCmdNext()
- {
- selBookmark.selectedIndex++;
- bookmarkScroll(selBookmark.options[selBookmark.selectedIndex]);
- btnPrevSetState();
- btnNextSetState();
- }
- function onCmdPrevious()
- {
- selBookmark.selectedIndex--;
- bookmarkScroll(selBookmark.options[selBookmark.selectedIndex]);
- btnNextSetState();
- btnPrevSetState();
- }
- function onCmdDelete()
- {
- var index;
- var indexMax;
- for (index = selBookmark.selectedIndex, indexMax = selBookmark.options.length;
- index < indexMax;
- index++)
- {
- if (selBookmark.options[index].selected)
- {
- bookmarkDelete(selBookmark.options[index]);
- }
- }
- window.close();
- }
- function onCmdCancel()
- {
- window.close();
- }
- </SCRIPT>
- <SCRIPT LANGUAGE=JavaScript FOR=document EVENT="onkeypress()">
- var htmlKeyReturn = 13;
- var htmlKeyEscape = 27;
- if (event.keyCode == htmlKeyReturn)
- {
- if (btnNext.exState == STATE_GOTO)
- {
- onCmdGoto();
- }
- else
- {
- onCmdNext();
- }
- }
- if (event.keyCode == htmlKeyEscape)
- {
- onCmdCancel();
- }
- </SCRIPT>
- <SCRIPT LANGUAGE=JavaScript FOR=selBookmark EVENT="dblClick()">
- {
- onCmdGoto();
- }
- </SCRIPT>
- <SCRIPT Language=JavaScript FOR=selBookmark Event="keyUp(shift)">
- {
- btnPrevSetState();
- btnNextSetState();
- btnDeleteSetState();
- }
- </SCRIPT>
- <SCRIPT Language=JavaScript FOR=selBookmark Event="onclick()">
- {
- btnPrevSetState();
- btnNextSetState();
- btnDeleteSetState();
- }
- </SCRIPT>
- <SCRIPT LANGUAGE=JavaScript FOR=radByLoc EVENT="onclick()">
- {
- selSortByIndex(document.selBookmark);
- btnPrevSetState();
- btnNextSetState();
- }
- </SCRIPT>
- <SCRIPT LANGUAGE=JavaScript FOR=radByName EVENT="onclick()">
- {
- selSortByName(document.selBookmark);
- btnPrevSetState();
- btnNextSetState();
- }
- </SCRIPT>
- <SCRIPT LANGUAGE=JavaScript FOR=btnNext EVENT="onclick()">
- {
- if (btnNext.exState == STATE_GOTO)
- {
- onCmdGoto();
- expandoOn();
- btnNext.exState = STATE_NEXT;
- expandoOff();
- }
- else
- {
- onCmdNext();
- }
- }
- </SCRIPT>
- <SCRIPT LANGUAGE=JavaScript FOR=btnPrev EVENT="onclick()">
- {
- onCmdPrevious();
- }
- </SCRIPT>
- <SCRIPT LANGUAGE=JavaScript FOR=btnDelete EVENT="onclick()">
- {
- onCmdDelete();
- }
- </SCRIPT>
- <SCRIPT LANGUAGE=JavaScript FOR=btnClose EVENT="onclick()">
- {
- onCmdCancel();
- }
- </SCRIPT>
- </HEAD>
- <BODY id=bodyBookmark onLoad="loadBdy()">
- <DIV style="position:absolute; LEFT: .5em; TOP: .5em; WIDTH: 8em; HEIGHT: 1em">
- <LABEL For=selBookmark id=lblBookmark>
- S<U>e</U>lect Bookmark:
- </LABEL>
- </DIV>
- <SCRIPT LANGUAGE=JavaScript>
- var index;
- var doc = window.dialogArguments.document;
- document.write('<SELECT id=selBookmark ACCESSKEY=e multiple style="position: absolute; LEFT: .5em; TOP: 2.5em; WIDTH: 22em; HEIGHT: 9em">');
- for (index = 0; index < doc.anchors.length; index++)
- {
- if (doc.anchors[index].name != "")
- {
- document.write('<OPTION>' + doc.anchors[index].name);
- }
- }
- document.write('</SELECT>');
- </SCRIPT>
- <TABLE border=1 style="position: absolute; LEFT: .5em; TOP: 7.9em; WIDTH: 14.5em; HEIGHT: 2em">
- <TR>
- <TD>
- <DIV style="position: absolute; LEFT: .5em; TOP: .5em; WIDTH: 5em; HEIGHT: 1em"><LABEL id=lblSortedBy>Sorted by:
- </LABEL></DIV>
- <INPUT id=radByName name=radSortBy style="position: absolute; LEFT: 5em; TOP: .75em; WIDTH: 1em; HEIGHT: 1em" type=radio
- ACCESSKEY=n>
- <DIV style="position: absolute; LEFT: 6em; TOP: .5em; WIDTH: 3em; HEIGHT: 1em">
- <LABEL For=radByName id=lblByName>
- <U>N</U>ame
- </LABEL>
- </DIV>
- <INPUT id=radByLoc name=radSortBy style="position: absolute; LEFT: 9em; TOP: .75em; WIDTH: 1em; HEIGHT: 1em" type=radio
- CHECKED ACCESSKEY=l>
- <DIV style="position: absolute; LEFT: 10em; TOP: .5em; WIDTH: 6em; HEIGHT: 1em">
- <LABEL For=radByLoc id=lblByLoc>
- <U>L</U>ocation
- </LABEL>
- </DIV>
- </TD>
- </TR>
- </TABLE>
- <BUTTON id=btnNext style="position: absolute; LEFT:23.5em; TOP: 1.6em; WIDTH: 9.5em; HEIGHT: 2.5em" AccessKey=T>
- Go<U>T</U>o
- </BUTTON>
- <BUTTON id=btnPrev style="position: absolute; LEFT:23.5em; TOP: 4.4em; WIDTH: 9.5em; HEIGHT: 2.5em" AccessKey=V>
- Pre<U>v</U>ious
- </BUTTON>
- <BUTTON id=btnDelete style="position: absolute; LEFT:23.5em; TOP: 10.1em; WIDTH: 9.5em; HEIGHT: 2.5em" AccessKey=D>
- <U>D</U>elete
- </BUTTON>
- <BUTTON id=btnClose style="position: absolute; LEFT:23.5em; TOP: 12.9em; WIDTH: 9.5em; HEIGHT: 2.5em" AccessKey=C>
- <U>C</U>lose
- </BUTTON>
- </BODY>
- </HTML>
-