'use strict'; // Copyright (c) 2010-2022 Quadralay Corporation. All rights reserved. // // ePublisher 2022.1 // // IMPORTANT: global variables are modified by connect.xsl and should not be changed. var GLOBAL_SHOW_FIRST_DOCUMENT = true; var GLOBAL_NAVIGATION_MIN_PAGE_WIDTH = 700; var GLOBAL_LIGHTBOX_LARGE_IMAGES = true; var GLOBAL_DISQUS_ID = ''; var GLOBAL_EMAIL = ''; var GLOBAL_EMAIL_MESSAGE = 'Feedback: $Location;'; var GLOBAL_FOOTER_END_OF_LAYOUT = false; var GLOBAL_SEARCH_TITLE = 'Search Results'; var GLOBAL_SEARCH_SCOPE_ALL_LABEL = 'All'; var GLOBAL_SEARCH_QUERY_MIN_LENGTH = 3; var GLOBAL_PROGRESSIVE_SEARCH_ENABLED = true; var Connect_Window = window; Connect_Window.name = 'connect_main'; // Lightbox // function Lightbox_Show() { // Set up the background // this.lightbox_background.style.display = 'block'; // Configure the frame // this.lightbox_frame.style.visibility = 'visible'; } function Lightbox_Hide() { // Hide lightbox // this.lightbox_frame.style.visibility = 'hidden'; this.lightbox_background.style.display = 'none'; // Teardown // if (this.teardown !== undefined && this.teardown !== null) { this.teardown(this.lightbox_frame, this.lightbox_content); this.teardown = undefined; } } function Lightbox_Display(param_setup, param_teardown) { var this_lightbox; // Setup // param_setup(this.lightbox_frame, this.lightbox_content); // Configure teardown // this.teardown = param_teardown; // Show! // this_lightbox = this; Connect_Window.setTimeout(function () { this_lightbox.Show(); }); } function Lightbox_Object(param_connect) { var this_lightbox; this.connect = param_connect; this.lightbox_background = Connect_Window.document.getElementById('lightbox_background'); this.lightbox_frame = Connect_Window.document.getElementById('lightbox_frame'); this.lightbox_content = Connect_Window.document.getElementById('lightbox_content'); this.lightbox_close = Connect_Window.document.getElementById('lightbox_close'); this.teardown = undefined; this_lightbox = this; this.page_iframe = Connect_Window.document.getElementById('page_iframe'); this.lightbox_close.onclick = function () { this_lightbox.Hide(); }; this.lightbox_background.onclick = function () { this_lightbox.Hide(); }; this.Show = Lightbox_Show; this.Hide = Lightbox_Hide; this.Display = Lightbox_Display; } // Parcels // var Parcels = { all_parcels: [], anchors: [], context_ids: {}, current_parcels: { '_all_': true }, div: Connect_Window.document.getElementById('parcels'), entries: {}, ids: [], index: [], index_loading: false, index_loaded: false, loaded_initial: false, loaded_all: false, loading_remaining: false, loaded_callbacks: [], prefixes: {}, required: [], required_loaded: 0, remaining: [], remaining_loaded: 0, search: [], title: {} }; Parcels.all_parcels = function () { // load parcel names into a list for reference var result, parcel_elements; result = []; parcel_elements = Parcels.div.querySelectorAll('li[data-group-title]'); for (var i = 0; i < parcel_elements.length; i++) { var parcel_element, parcel_title; parcel_element = parcel_elements[i]; parcel_title = parcel_element.getAttribute('data-group-title'); result.push(parcel_title); } return result; }(); Parcels.PrepareForLoad = function () { var parcel_anchors, parcel_anchor, parcel_context_and_id, parcel_context, parcel_id, parcel_title; Parcels.entries = {}; Parcels.required = []; Parcels.required_loaded = 0; Parcels.remaining = []; Parcels.remaining_loaded = 0; Parcels.anchors = []; Parcels.ids = []; Parcels.context_ids = {}; Parcels.prefixes = {}; Parcels.prefixes[Navigation.base_url + 'connect/'] = true; if (Navigation.url_handler_object['parcels']) { Parcels.current_parcels['_all_'] = false; } Connect.toc_content_div.innerHTML = Parcels.CreateHTML(); parcel_anchors = Connect.toc_div.getElementsByTagName('a'); Parcels.div.style.display = 'none'; if (parcel_anchors.length === 0) { parcel_anchors = Connect_Window.document.links; } for (var index = 0; index < parcel_anchors.length; index += 1) { parcel_anchor = parcel_anchors[index]; Parcels.anchors[Parcels.anchors.length] = parcel_anchor; // Add to collection of valid parcels // parcel_context_and_id = parcel_anchor.id.split(':'); if (parcel_context_and_id[0] !== '') { parcel_context = parcel_context_and_id[0]; parcel_id = parcel_context_and_id[1]; parcel_title = Browser.DecodeURIComponent(parcel_anchor.innerText); Parcels.current_parcels[parcel_title] = true; Parcels.Add(parcel_context, parcel_id, parcel_anchor.href, parcel_title); // Add to search scopes // if (Connect.scope_enabled) { Scope.AddSearchScope(parcel_anchor, parcel_id, parcel_context, index); } } } if (Connect.scope_enabled) { Scope.search_scope_selections = ['all']; Scope.RenderScopeSelector(Connect_Window.document, Scope.search_scopes); Scope.WriteSelectionsString(); } }; Parcels.Load = function () { // Begin loading parcels // var required_and_remaining_parcel_anchors, on_parcel_load, on_parcel_load_done, on_parcels_complete; Parcels.PrepareForLoad(); // Configure parcel TOC levels // Connect.ConfigureTOCLevels(Connect.toc_div, 0); // Configure Tabs // Connect.ConfigureTabs(Connect.toolbar_div); // Determine required and remaining parcels // required_and_remaining_parcel_anchors = Parcels.DetermineRequiredAndRemaining(); Parcels.required = required_and_remaining_parcel_anchors.required; Parcels.remaining = required_and_remaining_parcel_anchors.remaining; on_parcel_load = function () { this.iframe_container = document.createElement('div'); this.iframe_container.id = 'ajax_iframe_container_' + this.id; this.iframe_container.style.visibility = 'hidden'; document.body.appendChild(this.iframe_container); this.iframe_container.innerHTML = ''; }; on_parcel_load_done = function () { document.body.removeChild(this.iframe_container); Parcels.AddData(this.entry, this.content); Parcels.required_loaded = Parcels.required_loaded + 1; this.loaded = true; if (Parcels.required_loaded === Parcels.required.length) { this.complete(); } }; on_parcels_complete = function () { // Display specified document // Parcels.loaded_initial = true; // Check for hash changes // if ('onhashchange' in Connect_Window && typeof Connect_Window.history.pushState === 'function') { // Events are so nice! // Connect_Window.onhashchange = Navigation.HashChanged; } else { // Poll // Connect.poll_onhashchange = function () { Navigation.HashChanged(); Connect_Window.setTimeout(Connect.poll_onhashchange, 100); }; Connect_Window.setTimeout(Connect.poll_onhashchange); } if (Parcels.remaining.length === 0) { Parcels.loaded_all = true; } // Done! // Navigation.Navigate(Connect_Window.location.href); Connect.loading = false; // Need to load remaining parcels? // if (!Parcels.loaded_all) { // Complete parcel loading // Parcels.LoadRemaining(); } // Show // Connect.presentation_div.style.visibility = 'visible'; }; for (var i = 0; i < Parcels.required.length; i++) { var parcel_entry, parcel; parcel_entry = Parcels.required[i]; parcel = new Parcel_Object(parcel_entry, on_parcel_load, on_parcel_load_done, on_parcels_complete); Parcels.entries[parcel.id] = parcel; parcel.load(); } }; Parcels.LoadRemaining = function () { var on_parcel_load, on_parcel_load_done, on_parcels_complete; Parcels.loading_remaining = true; on_parcel_load = function () { this.iframe_container = document.createElement('div'); this.iframe_container.id = 'ajax_iframe_container_' + this.id; this.iframe_container.style.visibility = 'hidden'; document.body.appendChild(this.iframe_container); this.iframe_container.innerHTML = ''; }; on_parcel_load_done = function () { document.body.removeChild(this.iframe_container); Parcels.AddData(this.entry, this.content); this.loaded = true; Parcels.remaining_loaded = Parcels.remaining_loaded + 1; if (Parcels.remaining_loaded === Parcels.remaining.length) { Parcels.loading_remaining = false; Parcels.remaining_complete = true; this.complete(); } }; on_parcels_complete = function () { Parcels.loaded_all = true; }; for (var i = 0; i < Parcels.remaining.length; i++) { var parcel_entry, parcel; parcel_entry = Parcels.remaining[i]; parcel = new Parcel_Object(parcel_entry, on_parcel_load, on_parcel_load_done, on_parcels_complete); Parcels.entries[parcel.id] = parcel; parcel.load(); } }; Parcels.DetermineRequiredAndRemaining = function () { var result, context_signature, context_and_topic, topic_index, topic_only, page_signature, page_base_relative_url, index, parcel_anchor, required_parcel_anchor, handler_object; result = { required: [], remaining: [] }; handler_object = Navigation.url_handler_object; // Determine requested page or context signature // context_signature = null; topic_only = false; if (handler_object['context'] !== undefined) { // Context/topic requested // context_and_topic = handler_object['context']; topic_index = context_and_topic.indexOf('/'); if (topic_index === -1) { topic_only = true; } context_signature = context_and_topic.substring(0, topic_index) + ':'; } page_signature = null; if (handler_object['page'] !== undefined) { page_base_relative_url = handler_object['page']; // Ignore top-level files // if (page_base_relative_url.indexOf('/') >= 0 || page_base_relative_url.indexOf('%2f') >= 0 || page_base_relative_url.indexOf('%2F') >= 0) { // Build secure URI // page_base_relative_url = Browser.DecodeURIComponent(page_base_relative_url); page_base_relative_url = page_base_relative_url.replace(/[\\<>:;"]|%5C|%3C|%3E|%3A|%3B|%22/gi, ''); page_signature = page_base_relative_url.split('/')[0] + '.'; } } // Check parcel anchors for a match against context or page signature // for (index = 0; index < Parcels.anchors.length; index += 1) { parcel_anchor = Parcels.anchors[index]; // Required parcel? // required_parcel_anchor = false; if (index === 0) { // Always load first parcel // required_parcel_anchor = true; } else if (context_signature !== null && parcel_anchor.id.indexOf(context_signature) === 0) { // Captures exactly what we need // required_parcel_anchor = true; } else if (page_signature !== null && parcel_anchor.href.indexOf(page_signature) > 0) { // May capture more than we need // required_parcel_anchor = true; } else if (topic_only) { // Load all parcels if we have a topic without context // required_parcel_anchor = true; } // Assign parcel // if (required_parcel_anchor) { result.required.push(parcel_anchor); } else { result.remaining.push(parcel_anchor); } } return result; }; Parcels.Add = function (param_parcel_context, param_parcel_id, param_parcel_url, param_parcel_title) { var parcel_directory_url; parcel_directory_url = param_parcel_url.substring(0, param_parcel_url.lastIndexOf('.')); // Track context // Parcels.context_ids[param_parcel_context] = param_parcel_id; // Include original file and directory prefix // Parcels.prefixes[param_parcel_url] = true; Parcels.prefixes[parcel_directory_url] = true; Parcels.index.push({ 'id': param_parcel_id, 'url': parcel_directory_url + '_ix.html' }); Parcels.search.push(parcel_directory_url + '_sx.js'); Parcels.title[param_parcel_id] = param_parcel_title; Parcels.ids[Parcels.ids.length] = param_parcel_id; }; Parcels.AddData = function (param_entry, param_content) { var parcel_div, parcel_context_and_id, parcel_id, parcel_toc_div_id, parcel_toc_div, parcel_toc_ul, toc_layout_li, level_offset, parcel_data_div_id, parcel_data_div; // Access parcel // parcel_div = Connect_Window.document.createElement('div'); parcel_div.style.visibility = 'hidden'; parcel_div.innerHTML = param_content; Connect_Window.document.body.appendChild(parcel_div); // Gather all of the "Data" links, no longer necessary to include the "TOC" links // var parcel_links = parcel_div.querySelectorAll('div[id*="page:"] a'); for (var i = 0; i < parcel_links.length; i++) { var parcel_link = parcel_links[i]; var link_href = parcel_link.href; if (!link_href) { continue; } // Remove hash from link // if (link_href.indexOf('#') > -1) { link_href = link_href.substring(0, link_href.indexOf('#')); } // Add if unique // Navigation.AddPageURL(link_href); } // Add to collection of valid parcels // parcel_context_and_id = param_entry.id.split(':'); parcel_id = parcel_context_and_id[1]; // TOC // parcel_toc_div_id = 'toc:' + parcel_id; parcel_toc_div = Connect_Window.document.getElementById(parcel_toc_div_id); if (parcel_toc_div !== null) { parcel_toc_ul = Browser.FirstChildElementWithTagName(parcel_toc_div, 'ul'); if (parcel_toc_ul !== null) { // Extract TOC data // if (Parcels.ids.length === 1) { // Suppress parcel (group) folder // toc_layout_li = param_entry.parentNode.parentNode.parentNode.parentNode; } else { // Preserve parcel (group) folder // toc_layout_li = param_entry.parentNode.parentNode; } // Ensure TOC data initially collapsed when appended // parcel_toc_ul.className = 'ww_skin_toc_container_closed'; toc_layout_li.appendChild(parcel_toc_ul); // Configure TOC levels // if (Parcels.ids.length === 1) { Connect.ConfigureTOCLevels(Connect.toc_div, 0); } else { level_offset = Connect.DetermineTOCLevel(Connect.toc_div, toc_layout_li) - 1; Connect.ConfigureTOCLevels(toc_layout_li, level_offset); } } } // Data // parcel_data_div_id = 'data:' + parcel_id; parcel_data_div = Connect_Window.document.getElementById(parcel_data_div_id); if (parcel_data_div !== null) { Parcels.div.appendChild(parcel_data_div); } // Remove parcel data // Connect_Window.document.body.removeChild(parcel_div); // TODO: wtf is this // Disable parcel link // if (Parcels.ids.length === 1) { param_entry.parentNode.parentNode.parentNode.parentNode.removeChild(param_entry.parentNode.parentNode.parentNode); } else { Browser.RemoveAttribute(param_entry, 'href', ''); } // Update "bridge" links // Navigation.link_bridge.Update(); // Update prev/next // Navigation.UpdatePrevNext(); }; Parcels.CreateHTML = function () { var parcels_html, parcels_html_full; parcels_html = ''; parcels_html_full = Parcels.div.innerHTML; if (Navigation.url_handler_object['parcels'] !== undefined) { var parcel_group_objects; parcel_group_objects = Parcels.CreateGroupObjects(); if (parcel_group_objects.length > 0) { // Begin writing HTML // parcels_html += '