techtonik Sat Jul 30 15:26:45 2005 EDT
Modified files:
/phpdoc/htmlhelp/suppfiles/html _script.js
Log:
* give more time for clipboard copy operations to complete
http://cvs.php.net/diff.php/phpdoc/htmlhelp/suppfiles/html/_script.js?r1=1.9&r2=1.10&ty=u
Index: phpdoc/htmlhelp/suppfiles/html/_script.js
diff -u phpdoc/htmlhelp/suppfiles/html/_script.js:1.9
phpdoc/htmlhelp/suppfiles/html/_script.js:1.10
--- phpdoc/htmlhelp/suppfiles/html/_script.js:1.9 Tue Jun 14 10:47:47 2005
+++ phpdoc/htmlhelp/suppfiles/html/_script.js Sat Jul 30 15:26:43 2005
@@ -1,537 +1,537 @@
-// $Id: _script.js,v 1.9 2005/06/14 14:47:47 techtonik Exp $
-//
=============================================================================
-// Preference handling
-
-// Handle all the preferences, including online functions custom
-// context menus, and skins [this is called from php_manual_prefs.js]
-function prefHandler()
-{
- // Find out what file stores the skin JS code
- switch (prefs_skin) {
-
- // Internal low skin
- case "Low":
- skin_js_file = '_skin_lo.js';
- break;
-
- // Internal high skin
- case "High":
- skin_js_file = '_skin_hi.js';
- break;
-
- // An external skin with full path (escape it just
- // to make sure that paths with spaces and other
- // unusual chars will work - and turn back : to
- // it's original form)
- default:
- //escaped_skin = escape(prefs_skin);
- //escaped_skin = escaped_skin.replace(/%3A/, ':')
- skin_js_file = "file:///" + prefs_skin;
- break;
- }
-
- // Load in the skin JS code
- document.write('<script src="' + skin_js_file + '"><'+ '/script>');
-
- // OnContextMenu is only supported in IE5+ so do
- // not try to support the context menu otherwise
- if (ie_version_major >= 5) {
-
- // Write out context menu for the first time into it's div
- document.write('<div id="contextMenu">');
- contextMenuRewrite(true);
- document.write('</div>');
-
- // Assign our own event handlers to document events [5+]
- document.oncontextmenu = contextMenu;
- document.onclick = contextMenuCloseTimeout;
- window.onblur = contextMenuCloseTimeout;
- }
-}
-
-//
=============================================================================
-// CHM path detection - Thanks to Pete Lees and Jeff Hall for this code
-
-// Get the path and name of the CHM file and assign values
-function getCHMFile()
-{
- var a, X, Y, Z;
- a = location.href.search(/:/);
- Y = location.href.lastIndexOf("::");
- if (a == 4) { // file: or http:
- Y = location.href.lastIndexOf("/");
- chmfile_page = unescape(location.href.substring(Y+1));
- if (location.href.substring(0,4) == "file") {
- chmfile_path = unescape(location.href.substring(8, Y+1));
- }
- }
- else {
- if (a == 2) X = 14; // mk:@MSITStore:
- if (a == 7) X = 7; // ms-its:
- chmfile_fullname = unescape(location.href.substring(X, Y));
- Z = chmfile_fullname.lastIndexOf("\\");
- chmfile_path = unescape(chmfile_fullname.substring(0, Z+1));
- chmfile_name = unescape(chmfile_fullname.substring(Z+1));
- chmfile_page = unescape(location.href.substring(Y+3));
- }
-
- // RAQ : Wednesday, 16 March 2005 01:56 pm : If this page has been loaded
because
- // the notes were selected from the search results, then remove the
hash.
- if (location.hash == '#userNotes')
- chmfile_page = chmfile_page.substring(0,
chmfile_page.lastIndexOf('#'));
-
- //alert(
- // "_script\n\n" +
- // "location\n"+
- // "location.hash = '" + location.hash + "'\n" +
- // "location.host = '" + location.host + "'\n" +
- // "location.hostname = '" + location.hostname + "'\n" +
- // "location.href = '" + location.href + "'\n" +
- // "location.pathname = '" + location.pathname + "'\n" +
- // "location.port = '" + location.port + "'\n" +
- // "location.protocol = '" + location.protocol + "'\n" +
- // "location.search = '" + location.search + "'\n\n" +
- // "chmfile\n"+
- // "chmfile_name = '" + chmfile_name + "'\n" +
- // "chmfile_path = '" + chmfile_path + "'\n" +
- // "chmfile_page = '" + chmfile_page + "'\n"
- // );
-
-}
-
-//
=============================================================================
-// Page display and online functions code
-
-// Go online to see this page in an external window [called when a user
-// clicks on the "this page oline" link]
-function thisPageOnline()
-{
- if (!prefs_online) {
- alert("You are in offline mode.\nThis functionality is not available");
- } else {
- window.open(prefs_mirror + 'manual/' + this_lang + '/' +
this_page_php);
- }
-}
-
-// Report bug on this manual page, using GET method URL tricks
-// [called when a user clicks on the "report bug on this page" link]
-function bugOnPage()
-{
- if (!prefs_online) {
- alert("You are in offline mode.\nThis functionality is not available");
- } else {
- window.open(
- "http://bugs.php.net/report.php?" +
- escape("in[php_version]") + "=earlier&" +
- escape("in[bug_type]") + "=Documentation%20problem&" +
- escape("in[php_os]") + "=windows&" +
- escape("in[sdesc]") + "=" + escape("[chm] bug on " + this_page) +
"&" +
- escape("in[ldesc]") + "=" + escape("I have found a bug on page " +
- this_page + "\n[chm date: " + this_date + "]...\n")
- );
- }
-}
-
-//
=============================================================================
-// Handle user notes from an external CHM file
-
-// Copy user notes text from aan invisible IFRAME to a visible
-// DIV tag's content area [this is called from displayNotes()
-// which is defined in every HTML page to fix an old IE bug]
-function _displayNotes()
-{
- // Get the element from the "all" collection
- element = document.all['pageNotes'];
-
- // If we have that element, copy notes here [4+]
- if (element) {
- element.innerHTML = parent.nbuff.document.body.innerHTML;
- // RAQ : Wednesday, 16 March 2005 01:58 pm : Bring the notes into view
- // if the hash has been supplied
- if (location.hash == '#userNotes')
- {
- setTimeout('element.scrollIntoView(true);',200);
- }
- } else {
- alert("Error in user note inclusion");
- }
-}
-
-// Load the user notes HTML file indirectly via a list
-// of available user note files [a workaround for a bug
-// affecting several IE 5.5 and IE 6 installations]
-function loadNotes()
-{
- document.write('<script src="ms-its:' +
- chmfile_path + 'php_manual_notes.chm::/_filelist.js"></script>');
-}
-
-// Prints out the inline frame for the notes HTML file
-function notesIframe()
-{
- // Notes buffer for user notes to display on this page
- document.write(
- '<iframe name="nbuff" style="display:none" src="ms-its:' +
- chmfile_path + 'php_manual_notes.chm::/' + chmfile_page +
- '"></iframe>'
- );
-}
-
-//
=============================================================================
-// Context menu code
-
-// Rewrite context menu according to the current environment. The only
parameter
-// indicates that this is the first display or not. [called once from
-// prefHandler() and then every time before a context menu needs to be
displayed]
-function contextMenuRewrite(first)
-{
- // Set selection to null value (we will check
- // if there is a current selection now)
- context_selrange = null;
-
- // Our menu layer is invisible initially
- menuHTML = '<table width="150" cellspacing="2" cellpadding="0">';
-
- // Write out a table row for all menu points
- for (i in prefs_context_names) {
-
- // Label and abstract implementation
- label = prefs_context_names[i];
- impl = prefs_context_values[i];
-
- // Special display items start with an underscore
- if (impl.substring(0,1) == "_") {
-
- // Find the special printout needed
- switch (impl) {
-
- // Menu separator
- case "_Separator_":
- menuHTML +=
- '<tr><td bgcolor="#000000"><img src="_pixel.gif" ' +
- 'width="100%" height="1"></td></tr>';
- break;
-
- // Google search box (only printed in online mode)
- case "_GoogleSearch_":
- if (prefs_online) {
- menuHTML +=
-'<tr><td style="background-color: #f5f5f5;"><form
action="http://www.google.com/search" class="thin"' +
-'onsubmit="contextMenuClose()" method="GET" target="_blank">' +
-'<img src="_google.gif" align="absmiddle" alt="Google"><input type="text"
name="q" ' +
-'style="width:120px;"></form></td></tr>';
- }
- break;
-
- // Alltheweb search box (only printed in online mode)
- case "_ATWSearch_":
- if (prefs_online) {
- menuHTML +=
-'<tr><td style="background-color: #f5f5f5;"><form
action="http://www.alltheweb.com/search" class="thin"' +
-'onsubmit="contextMenuClose()" method="GET" target="_blank">' +
-'<img src="_atw.gif" align="absmiddle" alt="AlltheWeb"><input name="cat"
type="hidden" value="web">' +
-'<input type="text" name="query" style="width:120px;"></form></td></tr>';
- }
- break;
-
- // This should not be accessed in any valid situation, but
- // is here to at least print out something in case of error...
- default:
- menuHTML += contextLink(i, label);
- break;
-
- }
- }
-
- // Special functions that may need to be printed out conditionally
- else if (impl.substring(impl.length-2) == "()") {
-
- // Do something depending on function name
- switch (impl.substring(0, impl.length-2)) {
-
- // Copy selection
- case "copySelection":
- // For the first time there is actually no document... [4+]
- if (document.selection && !first) {
- context_selrange = document.selection.createRange();
- if (context_selrange.text.length > 0) {
- menuHTML += contextLink(i, label);
- }
- }
- break;
-
- // Google or AlltheWeb search for selection (need to be in
online mode)
- case "searchSelGoogle":
- case "searchSelATW":
- // For the first time there is actually no document... [4+]
- if (document.selection && !first) {
- context_selrange = document.selection.createRange();
- if (context_selrange.text.length > 0 && prefs_online) {
- menuHTML += contextLink(i, label);
- }
- }
- break;
-
- // Misc functions like print() and selectAll()
- default:
- menuHTML += contextLink(i, label);
- break;
- }
- }
-
- // Not a special display or function,
- // so simply print out the line for this item
- else { menuHTML += contextLink(i, label); }
- }
-
- // End table
- menuHTML += '</table>';
-
- // We do not have this element if this is the first run, but we
- // need to rewrite the element content if it's not the first time
- if (first) { document.write(menuHTML); }
- else {
- document.all['contextMenu'].innerHTML = menuHTML;
- }
-}
-
-// Write out one context menu link table row [called from contextMenuRewrite()]
-function contextLink (number, label)
-{
- return '<tr><td nowrap
onmouseover="this.style.backgroundColor=\'#c0c0c0\';" ' +
- 'onmouseout="this.style.backgroundColor=\'#f5f5f5\';" ' +
- 'onclick="contextParse(' + number + ')" ' +
- 'style="cursor:hand; background-color: #f5f5f5;"><p
class="context">' +
- label + '</p></td></tr>';
-}
-
-// Parse the jump string, and do appropriate action [called when the user
-// clicks on a table row in the context menu]
-function contextParse(i)
-{
- var control = prefs_context_values[i];
-
- // If the control string ends in (), then it is
- // a function, not a file name
- if (control.substring(control.length-2) == "()") {
-
- // Switch by function name
- switch (control.substring(0, control.length-2)) {
-
- // Print out this page
- case "print":
- print();
- break;
-
- // Copy the selection from the current document
- case "copySelection":
- if (context_selrange != null) {
- context_selrange.execCommand("Copy"); // [4+]
- }
- break;
-
- // Search for the selected text on Google
- case "searchSelGoogle":
- sel = contextGetSelection();
- if (sel != '') { window.open('http://www.google.com/search?q='
+ escape(sel)); }
- break;
-
- // Search for the selected text on AlltheWeb
- case "searchSelATW":
- sel = contextGetSelection();
- if (sel != '') {
window.open('http://www.alltheweb.com/search?cat=web&query=' + escape(sel)); }
- break;
-
- // Go back and forward in history
- case "back": history.back(); break;
- case "forward": history.forward(); break;
-
- // Refresh page dispplay
- case "refresh": window.location.reload(true); break;
-
- // Select all text in the document [4+]
- case "selectAll": document.body.createTextRange().select(); break;
-
- // View source of current page (not working!!)
- // case "viewSource": window.location = "view-source:" +
window.location.href; break;
-
- // This should never be accessed, but here to alert if there is an
error
- default:
- alert('This context menu function is not supported');
- break;
- }
- }
-
- // If this is not a "function call", then jump
- // to that page in the CHM or outside of it
- else {
- // Link with protocol
- if (control.indexOf(":") > 0) {
- window.open(control);
- }
-
- // Link without protocol
- else {
- location = control;
- }
- }
-}
-
-// Returns the current selection [called when a context menu
-// item is clicked involving an operation on a selection]
-function contextGetSelection()
-{
- // Test if anything is selected [4+]
- if (context_selrange != null && context_selrange.text.length > 0) {
- return context_selrange.text;
- } else {
- alert("Nothing is selected");
- return "";
- }
-}
-
-// Handle mousedown events in a document [called when a mouse click
-// is issued on a document]
-function contextMenu(e)
-{
- // Close context menu, if it was open before
- contextMenuClose();
-
- // We enable the original context menu with the CTRL key if
- // then user selected to override it
- if (event.ctrlKey && prefs_context_override) {
- return true;
- }
-
- // We also enable the original one, if it is not overriden
- // and the user have not pressed the CTRL key
- else if (!event.ctrlKey && !prefs_context_override) {
- return true;
- }
-
- // Otherwise (overriden or overriden+CTRL) we display our menu
- else {
-
- // Rewrite contents of context menu
- contextMenuRewrite(false);
-
- // IE6+ is in standard compliant mode because of our !DOCTYPE
- // [
http://msdn.microsoft.com/workshop/author/dhtml/reference/objects/doctype.asp ]
- // so we need to use the "html" tag instead of the "body" to measure
scrolled distance.
- // For older browsers, we need to use the body.
- if (ie_version_major >= 6) { delement = document.body.parentElement; }
- else { delement = document.body; }
-
- // Find out if menu would be outside the window
- rightedge = delement.clientWidth - event.clientX;
- bottomedge = delement.clientHeight - event.clientY;
-
- // Shortcut for the context menu
- cmenu = document.all['contextMenu'];
-
- // Place menu to the right position, not to extend the window size
- if (rightedge < cmenu.offsetWidth) {
- cmenu.style.left = delement.scrollLeft + event.clientX -
cmenu.offsetWidth;
- } else {
- cmenu.style.left = delement.scrollLeft + event.clientX;
- }
-
- if (bottomedge < cmenu.offsetHeight) {
- cmenu.style.top = delement.scrollTop + event.clientY -
cmenu.offsetHeight;
- } else {
- cmenu.style.top = delement.scrollTop + event.clientY;
- }
-
- // Show menu
- cmenu.style.visibility = "visible";
- return false;
- }
-}
-
-
-// Closes the context menu [called when the time is out]
-function contextMenuClose()
-{
- // Hide context menu
- document.all['contextMenu'].style.visibility = "hidden";
-}
-
-// Sets timeout for menu close [called by document onclick event]
-function contextMenuCloseTimeout()
-{
- // Support for form focus event (form in context menu)
- if (document.activeElement.tagName != 'INPUT') {
- setTimeout('contextMenuClose()', 100);
- }
-}
-
-//
=============================================================================
-// Example clipboard copy links
-
-// Copy an example from a HTML container with id "example_" + number [called
-// when a user clicks on that copy link]
-function copyExample(number)
-{
- // moveToElementText is only supported in IE5 and up
- if (ie_version_major < 5) {
- alert("Example copy is not supported in this browser");
- } else {
- BodyRange = document.body.createTextRange();
- BodyRange.moveToElementText(document.all['example_' + number]);
- BodyRange.execCommand("Copy");
- }
-}
-
-//
=============================================================================
-// Default skin functions
-
-// Display the page without online functions if they are disabled
-function defaultDisplayPage() {
-
- // Do not display online functions links if they are disabled
- if (!prefs_online) {
- document.all['navOnline'].style.display = 'none';
- }
-
- // Show page container
- document.all['pageContent'].style.display = 'block';
-}
-
-//
=============================================================================
-// Main JS program flow
-
-// Default vars for all the pages [generated]
-this_lang = 'LANGUAGE_HERE';
-this_date = 'DATE_HERE';
-
-// Vars for online menu of this particular page
-this_page =
location.pathname.substring(location.pathname.lastIndexOf("/")+1);
-this_page_php = this_page.substring(0, this_page.lastIndexOf(".")) + '.php';
-if (this_page_php == '_index.php') {
- this_page_php = 'index.php';
-}
-
-// Create the chmfile vars for this HTML page
-chmfile_fullname = "";
-chmfile_name = "";
-chmfile_path = "";
-chmfile_page = "";
-getCHMFile();
-
-// Default values for preferences (no online functions, no
-// special context menu, low skin)
-prefs_online = false;
-prefs_context_override = false;
-prefs_skin = "Low";
-
-// Support for selection sensitive context menus
-context_selrange = null;
-
-// Find out major and minor IE version number
-var ie_version_start = navigator.appVersion.indexOf("MSIE");
-var ie_version_end = navigator.appVersion.indexOf(".", ie_version_start);
-ie_version_major = parseInt(navigator.appVersion.substring(ie_version_start+5,
ie_version_end));
-ie_version_minor = parseInt(navigator.appMinorVersion);
-
-// Get the preferences file from outside
-document.write('<script src="' + chmfile_path + 'php_manual_prefs.js"><'+
'/script>');
+// $Id: _script.js,v 1.10 2005/07/30 19:26:43 techtonik Exp $
+//
=============================================================================
+// Preference handling
+
+// Handle all the preferences, including online functions custom
+// context menus, and skins [this is called from php_manual_prefs.js]
+function prefHandler()
+{
+ // Find out what file stores the skin JS code
+ switch (prefs_skin) {
+
+ // Internal low skin
+ case "Low":
+ skin_js_file = '_skin_lo.js';
+ break;
+
+ // Internal high skin
+ case "High":
+ skin_js_file = '_skin_hi.js';
+ break;
+
+ // An external skin with full path (escape it just
+ // to make sure that paths with spaces and other
+ // unusual chars will work - and turn back : to
+ // it's original form)
+ default:
+ //escaped_skin = escape(prefs_skin);
+ //escaped_skin = escaped_skin.replace(/%3A/, ':')
+ skin_js_file = "file:///" + prefs_skin;
+ break;
+ }
+
+ // Load in the skin JS code
+ document.write('<script src="' + skin_js_file + '"><'+ '/script>');
+
+ // OnContextMenu is only supported in IE5+ so do
+ // not try to support the context menu otherwise
+ if (ie_version_major >= 5) {
+
+ // Write out context menu for the first time into it's div
+ document.write('<div id="contextMenu">');
+ contextMenuRewrite(true);
+ document.write('</div>');
+
+ // Assign our own event handlers to document events [5+]
+ document.oncontextmenu = contextMenu;
+ document.onclick = contextMenuCloseTimeout;
+ window.onblur = contextMenuCloseTimeout;
+ }
+}
+
+//
=============================================================================
+// CHM path detection - Thanks to Pete Lees and Jeff Hall for this code
+
+// Get the path and name of the CHM file and assign values
+function getCHMFile()
+{
+ var a, X, Y, Z;
+ a = location.href.search(/:/);
+ Y = location.href.lastIndexOf("::");
+ if (a == 4) { // file: or http:
+ Y = location.href.lastIndexOf("/");
+ chmfile_page = unescape(location.href.substring(Y+1));
+ if (location.href.substring(0,4) == "file") {
+ chmfile_path = unescape(location.href.substring(8, Y+1));
+ }
+ }
+ else {
+ if (a == 2) X = 14; // mk:@MSITStore:
+ if (a == 7) X = 7; // ms-its:
+ chmfile_fullname = unescape(location.href.substring(X, Y));
+ Z = chmfile_fullname.lastIndexOf("\\");
+ chmfile_path = unescape(chmfile_fullname.substring(0, Z+1));
+ chmfile_name = unescape(chmfile_fullname.substring(Z+1));
+ chmfile_page = unescape(location.href.substring(Y+3));
+ }
+
+ // RAQ : Wednesday, 16 March 2005 01:56 pm : If this page has been loaded
because
+ // the notes were selected from the search results, then remove the
hash.
+ if (location.hash == '#userNotes')
+ chmfile_page = chmfile_page.substring(0,
chmfile_page.lastIndexOf('#'));
+
+ //alert(
+ // "_script\n\n" +
+ // "location\n"+
+ // "location.hash = '" + location.hash + "'\n" +
+ // "location.host = '" + location.host + "'\n" +
+ // "location.hostname = '" + location.hostname + "'\n" +
+ // "location.href = '" + location.href + "'\n" +
+ // "location.pathname = '" + location.pathname + "'\n" +
+ // "location.port = '" + location.port + "'\n" +
+ // "location.protocol = '" + location.protocol + "'\n" +
+ // "location.search = '" + location.search + "'\n\n" +
+ // "chmfile\n"+
+ // "chmfile_name = '" + chmfile_name + "'\n" +
+ // "chmfile_path = '" + chmfile_path + "'\n" +
+ // "chmfile_page = '" + chmfile_page + "'\n"
+ // );
+
+}
+
+//
=============================================================================
+// Page display and online functions code
+
+// Go online to see this page in an external window [called when a user
+// clicks on the "this page oline" link]
+function thisPageOnline()
+{
+ if (!prefs_online) {
+ alert("You are in offline mode.\nThis functionality is not available");
+ } else {
+ window.open(prefs_mirror + 'manual/' + this_lang + '/' +
this_page_php);
+ }
+}
+
+// Report bug on this manual page, using GET method URL tricks
+// [called when a user clicks on the "report bug on this page" link]
+function bugOnPage()
+{
+ if (!prefs_online) {
+ alert("You are in offline mode.\nThis functionality is not available");
+ } else {
+ window.open(
+ "http://bugs.php.net/report.php?" +
+ escape("in[php_version]") + "=earlier&" +
+ escape("in[bug_type]") + "=Documentation%20problem&" +
+ escape("in[php_os]") + "=windows&" +
+ escape("in[sdesc]") + "=" + escape("[chm] bug on " + this_page) +
"&" +
+ escape("in[ldesc]") + "=" + escape("I have found a bug on page " +
+ this_page + "\n[chm date: " + this_date + "]...\n")
+ );
+ }
+}
+
+//
=============================================================================
+// Handle user notes from an external CHM file
+
+// Copy user notes text from aan invisible IFRAME to a visible
+// DIV tag's content area [this is called from displayNotes()
+// which is defined in every HTML page to fix an old IE bug]
+function _displayNotes()
+{
+ // Get the element from the "all" collection
+ element = document.all['pageNotes'];
+
+ // If we have that element, copy notes here [4+]
+ if (element) {
+ element.innerHTML = parent.nbuff.document.body.innerHTML;
+ // RAQ : Wednesday, 16 March 2005 01:58 pm : Bring the notes into view
+ // if the hash has been supplied
+ if (location.hash == '#userNotes')
+ {
+ setTimeout('element.scrollIntoView(true);',200);
+ }
+ } else {
+ alert("Error in user note inclusion");
+ }
+}
+
+// Load the user notes HTML file indirectly via a list
+// of available user note files [a workaround for a bug
+// affecting several IE 5.5 and IE 6 installations]
+function loadNotes()
+{
+ document.write('<script src="ms-its:' +
+ chmfile_path + 'php_manual_notes.chm::/_filelist.js"></script>');
+}
+
+// Prints out the inline frame for the notes HTML file
+function notesIframe()
+{
+ // Notes buffer for user notes to display on this page
+ document.write(
+ '<iframe name="nbuff" style="display:none" src="ms-its:' +
+ chmfile_path + 'php_manual_notes.chm::/' + chmfile_page +
+ '"></iframe>'
+ );
+}
+
+//
=============================================================================
+// Context menu code
+
+// Rewrite context menu according to the current environment. The only
parameter
+// indicates that this is the first display or not. [called once from
+// prefHandler() and then every time before a context menu needs to be
displayed]
+function contextMenuRewrite(first)
+{
+ // Set selection to null value (we will check
+ // if there is a current selection now)
+ context_selrange = null;
+
+ // Our menu layer is invisible initially
+ menuHTML = '<table width="150" cellspacing="2" cellpadding="0">';
+
+ // Write out a table row for all menu points
+ for (i in prefs_context_names) {
+
+ // Label and abstract implementation
+ label = prefs_context_names[i];
+ impl = prefs_context_values[i];
+
+ // Special display items start with an underscore
+ if (impl.substring(0,1) == "_") {
+
+ // Find the special printout needed
+ switch (impl) {
+
+ // Menu separator
+ case "_Separator_":
+ menuHTML +=
+ '<tr><td bgcolor="#000000"><img src="_pixel.gif" ' +
+ 'width="100%" height="1"></td></tr>';
+ break;
+
+ // Google search box (only printed in online mode)
+ case "_GoogleSearch_":
+ if (prefs_online) {
+ menuHTML +=
+'<tr><td style="background-color: #f5f5f5;"><form
action="http://www.google.com/search" class="thin"' +
+'onsubmit="contextMenuClose()" method="GET" target="_blank">' +
+'<img src="_google.gif" align="absmiddle" alt="Google"><input type="text"
name="q" ' +
+'style="width:120px;"></form></td></tr>';
+ }
+ break;
+
+ // Alltheweb search box (only printed in online mode)
+ case "_ATWSearch_":
+ if (prefs_online) {
+ menuHTML +=
+'<tr><td style="background-color: #f5f5f5;"><form
action="http://www.alltheweb.com/search" class="thin"' +
+'onsubmit="contextMenuClose()" method="GET" target="_blank">' +
+'<img src="_atw.gif" align="absmiddle" alt="AlltheWeb"><input name="cat"
type="hidden" value="web">' +
+'<input type="text" name="query" style="width:120px;"></form></td></tr>';
+ }
+ break;
+
+ // This should not be accessed in any valid situation, but
+ // is here to at least print out something in case of error...
+ default:
+ menuHTML += contextLink(i, label);
+ break;
+
+ }
+ }
+
+ // Special functions that may need to be printed out conditionally
+ else if (impl.substring(impl.length-2) == "()") {
+
+ // Do something depending on function name
+ switch (impl.substring(0, impl.length-2)) {
+
+ // Copy selection
+ case "copySelection":
+ // For the first time there is actually no document... [4+]
+ if (document.selection && !first) {
+ context_selrange = document.selection.createRange();
+ if (context_selrange.text.length > 0) {
+ menuHTML += contextLink(i, label);
+ }
+ }
+ break;
+
+ // Google or AlltheWeb search for selection (need to be in
online mode)
+ case "searchSelGoogle":
+ case "searchSelATW":
+ // For the first time there is actually no document... [4+]
+ if (document.selection && !first) {
+ context_selrange = document.selection.createRange();
+ if (context_selrange.text.length > 0 && prefs_online) {
+ menuHTML += contextLink(i, label);
+ }
+ }
+ break;
+
+ // Misc functions like print() and selectAll()
+ default:
+ menuHTML += contextLink(i, label);
+ break;
+ }
+ }
+
+ // Not a special display or function,
+ // so simply print out the line for this item
+ else { menuHTML += contextLink(i, label); }
+ }
+
+ // End table
+ menuHTML += '</table>';
+
+ // We do not have this element if this is the first run, but we
+ // need to rewrite the element content if it's not the first time
+ if (first) { document.write(menuHTML); }
+ else {
+ document.all['contextMenu'].innerHTML = menuHTML;
+ }
+}
+
+// Write out one context menu link table row [called from contextMenuRewrite()]
+function contextLink (number, label)
+{
+ return '<tr><td nowrap
onmouseover="this.style.backgroundColor=\'#c0c0c0\';" ' +
+ 'onmouseout="this.style.backgroundColor=\'#f5f5f5\';" ' +
+ 'onclick="contextParse(' + number + ')" ' +
+ 'style="cursor:hand; background-color: #f5f5f5;"><p
class="context">' +
+ label + '</p></td></tr>';
+}
+
+// Parse the jump string, and do appropriate action [called when the user
+// clicks on a table row in the context menu]
+function contextParse(i)
+{
+ var control = prefs_context_values[i];
+
+ // If the control string ends in (), then it is
+ // a function, not a file name
+ if (control.substring(control.length-2) == "()") {
+
+ // Switch by function name
+ switch (control.substring(0, control.length-2)) {
+
+ // Print out this page
+ case "print":
+ print();
+ break;
+
+ // Copy the selection from the current document
+ case "copySelection":
+ if (context_selrange != null) {
+ context_selrange.execCommand("Copy"); // [4+]
+ }
+ break;
+
+ // Search for the selected text on Google
+ case "searchSelGoogle":
+ sel = contextGetSelection();
+ if (sel != '') { window.open('http://www.google.com/search?q='
+ escape(sel)); }
+ break;
+
+ // Search for the selected text on AlltheWeb
+ case "searchSelATW":
+ sel = contextGetSelection();
+ if (sel != '') {
window.open('http://www.alltheweb.com/search?cat=web&query=' + escape(sel)); }
+ break;
+
+ // Go back and forward in history
+ case "back": history.back(); break;
+ case "forward": history.forward(); break;
+
+ // Refresh page dispplay
+ case "refresh": window.location.reload(true); break;
+
+ // Select all text in the document [4+]
+ case "selectAll": document.body.createTextRange().select(); break;
+
+ // View source of current page (not working!!)
+ // case "viewSource": window.location = "view-source:" +
window.location.href; break;
+
+ // This should never be accessed, but here to alert if there is an
error
+ default:
+ alert('This context menu function is not supported');
+ break;
+ }
+ }
+
+ // If this is not a "function call", then jump
+ // to that page in the CHM or outside of it
+ else {
+ // Link with protocol
+ if (control.indexOf(":") > 0) {
+ window.open(control);
+ }
+
+ // Link without protocol
+ else {
+ location = control;
+ }
+ }
+}
+
+// Returns the current selection [called when a context menu
+// item is clicked involving an operation on a selection]
+function contextGetSelection()
+{
+ // Test if anything is selected [4+]
+ if (context_selrange != null && context_selrange.text.length > 0) {
+ return context_selrange.text;
+ } else {
+ alert("Nothing is selected");
+ return "";
+ }
+}
+
+// Handle mousedown events in a document [called when a mouse click
+// is issued on a document]
+function contextMenu(e)
+{
+ // Close context menu, if it was open before
+ contextMenuClose();
+
+ // We enable the original context menu with the CTRL key if
+ // then user selected to override it
+ if (event.ctrlKey && prefs_context_override) {
+ return true;
+ }
+
+ // We also enable the original one, if it is not overriden
+ // and the user have not pressed the CTRL key
+ else if (!event.ctrlKey && !prefs_context_override) {
+ return true;
+ }
+
+ // Otherwise (overriden or overriden+CTRL) we display our menu
+ else {
+
+ // Rewrite contents of context menu
+ contextMenuRewrite(false);
+
+ // IE6+ is in standard compliant mode because of our !DOCTYPE
+ // [
http://msdn.microsoft.com/workshop/author/dhtml/reference/objects/doctype.asp ]
+ // so we need to use the "html" tag instead of the "body" to measure
scrolled distance.
+ // For older browsers, we need to use the body.
+ if (ie_version_major >= 6) { delement = document.body.parentElement; }
+ else { delement = document.body; }
+
+ // Find out if menu would be outside the window
+ rightedge = delement.clientWidth - event.clientX;
+ bottomedge = delement.clientHeight - event.clientY;
+
+ // Shortcut for the context menu
+ cmenu = document.all['contextMenu'];
+
+ // Place menu to the right position, not to extend the window size
+ if (rightedge < cmenu.offsetWidth) {
+ cmenu.style.left = delement.scrollLeft + event.clientX -
cmenu.offsetWidth;
+ } else {
+ cmenu.style.left = delement.scrollLeft + event.clientX;
+ }
+
+ if (bottomedge < cmenu.offsetHeight) {
+ cmenu.style.top = delement.scrollTop + event.clientY -
cmenu.offsetHeight;
+ } else {
+ cmenu.style.top = delement.scrollTop + event.clientY;
+ }
+
+ // Show menu
+ cmenu.style.visibility = "visible";
+ return false;
+ }
+}
+
+
+// Closes the context menu [called when the time is out]
+function contextMenuClose()
+{
+ // Hide context menu
+ document.all['contextMenu'].style.visibility = "hidden";
+}
+
+// Sets timeout for menu close [called by document onclick event]
+function contextMenuCloseTimeout()
+{
+ // Support for form focus event (form in context menu)
+ if (document.activeElement.tagName != 'INPUT') {
+ setTimeout('contextMenuClose()', 200);
+ }
+}
+
+//
=============================================================================
+// Example clipboard copy links
+
+// Copy an example from a HTML container with id "example_" + number [called
+// when a user clicks on that copy link]
+function copyExample(number)
+{
+ // moveToElementText is only supported in IE5 and up
+ if (ie_version_major < 5) {
+ alert("Example copy is not supported in this browser");
+ } else {
+ BodyRange = document.body.createTextRange();
+ BodyRange.moveToElementText(document.all['example_' + number]);
+ BodyRange.execCommand("Copy");
+ }
+}
+
+//
=============================================================================
+// Default skin functions
+
+// Display the page without online functions if they are disabled
+function defaultDisplayPage() {
+
+ // Do not display online functions links if they are disabled
+ if (!prefs_online) {
+ document.all['navOnline'].style.display = 'none';
+ }
+
+ // Show page container
+ document.all['pageContent'].style.display = 'block';
+}
+
+//
=============================================================================
+// Main JS program flow
+
+// Default vars for all the pages [generated]
+this_lang = 'LANGUAGE_HERE';
+this_date = 'DATE_HERE';
+
+// Vars for online menu of this particular page
+this_page =
location.pathname.substring(location.pathname.lastIndexOf("/")+1);
+this_page_php = this_page.substring(0, this_page.lastIndexOf(".")) + '.php';
+if (this_page_php == '_index.php') {
+ this_page_php = 'index.php';
+}
+
+// Create the chmfile vars for this HTML page
+chmfile_fullname = "";
+chmfile_name = "";
+chmfile_path = "";
+chmfile_page = "";
+getCHMFile();
+
+// Default values for preferences (no online functions, no
+// special context menu, low skin)
+prefs_online = false;
+prefs_context_override = false;
+prefs_skin = "Low";
+
+// Support for selection sensitive context menus
+context_selrange = null;
+
+// Find out major and minor IE version number
+var ie_version_start = navigator.appVersion.indexOf("MSIE");
+var ie_version_end = navigator.appVersion.indexOf(".", ie_version_start);
+ie_version_major = parseInt(navigator.appVersion.substring(ie_version_start+5,
ie_version_end));
+ie_version_minor = parseInt(navigator.appMinorVersion);
+
+// Get the preferences file from outside
+document.write('<script src="' + chmfile_path + 'php_manual_prefs.js"><'+
'/script>');