' + this.escape(results[i].name.substr(0, results[i].name.length - this.searchString.length - results[i].suffixLength)) + '' + this.escape(results[i].name.substr(results[i].name.length - this.searchString.length - results[i].suffixLength, this.searchString.length)) + '' + this.escapeForRtl(results[i].name.substr(results[i].name.length - results[i].suffixLength)) + '
: ' + this.escape(results[i].alias) + '';
+
+ /* Render the normal thing (cut off from the left, have to
+ escape for RTL) */
+ } else {
+ list += '
' + this.escapeForRtl(results[i].name.substr(0, results[i].name.length - this.searchString.length - results[i].suffixLength)) + '' + this.escapeForRtl(results[i].name.substr(results[i].name.length - this.searchString.length - results[i].suffixLength, this.searchString.length)) + '' + this.escapeForRtl(results[i].name.substr(results[i].name.length - results[i].suffixLength));
+ }
+
+ /* The closing */
+ list += '
';
+ }
+ document.getElementById('search-results').innerHTML = this.fromUtf8(list);
+ document.getElementById('search-current').scrollIntoView(true);
+
+ /* Append the suggested tab autocompletion, if any, and if the user
+ didn't just delete it */
+ let searchInput = document.getElementById('search-input');
+ if(this.autocompleteNextInputEvent && resultsSuggestedTabAutocompletion[1].length && searchInput.selectionEnd == searchInput.value.length) {
+ let suggestedTabAutocompletion = this.fromUtf8(resultsSuggestedTabAutocompletion[1]);
+
+ let lengthBefore = searchInput.value.length;
+ searchInput.value += suggestedTabAutocompletion;
+ searchInput.setSelectionRange(lengthBefore, searchInput.value.length);
+ }
+
+ /* Nothing found */
+ } else {
+ document.getElementById('search-results').innerHTML = '';
+ document.getElementById('search-results').style.display = 'none';
+ document.getElementById('search-notfound').style.display = 'block';
+ }
+
+ /* Don't allow things to be selected just by motionless mouse cursor
+ suddenly appearing over a search result */
+ this.mouseMovedSinceLastRender = false;
+
+ /* Reset autocompletion, if it was allowed. It'll get whitelisted next
+ time a character gets inserted. */
+ this.autocompleteNextInputEvent = false;
+ },
+
+ searchAndRender: /* istanbul ignore next */ function(value) {
+ let prev = performance.now();
+ let results = this.search(value);
+ let after = performance.now();
+ this.renderResults(results);
+ if(this.searchString.length) {
+ document.getElementById('search-symbolcount').innerHTML =
+ results[0].length + (results[0].length >= this.maxResults ? '+' : '') + " results (" + Math.round((after - prev)*10)/10 + " ms)";
+ } else
+ document.getElementById('search-symbolcount').innerHTML = this.symbolCount;
+ },
+};
+
+/* istanbul ignore next */
+function selectResult(event) {
+ if(!Search.mouseMovedSinceLastRender) return;
+
+ if(event.currentTarget.parentNode.id == 'search-current') return;
+
+ let current = document.getElementById('search-current');
+ current.removeAttribute('id');
+ event.currentTarget.parentNode.id = 'search-current';
+}
+
+/* This is separated from showSearch() because we need non-destructive behavior
+ when appearing directly on a URL with #search */ /* istanbul ignore next */
+function updateForSearchVisible() {
+ /* Prevent accidental scrolling of the body, prevent page layout jumps */
+ let scrolledBodyWidth = document.body.offsetWidth;
+ document.body.style.overflow = 'hidden';
+ document.body.style.paddingRight = (document.body.offsetWidth - scrolledBodyWidth) + 'px';
+
+ document.getElementById('search-input').value = '';
+ document.getElementById('search-input').focus();
+ document.getElementById('search-results').style.display = 'none';
+ document.getElementById('search-notfound').style.display = 'none';
+ document.getElementById('search-help').style.display = 'block';
+}
+
+/* istanbul ignore next */
+function showSearch() {
+ window.location.hash = '#search';
+ Search.canGoBackToHideSearch = true;
+
+ updateForSearchVisible();
+ document.getElementById('search-symbolcount').innerHTML = Search.symbolCount;
+ return false;
+}
+
+/* istanbul ignore next */
+function hideSearch() {
+ /* If the search box was opened using showSearch(), we can go back in the
+ history. Otherwise (for example when we landed to #search from a
+ bookmark or another server), going back would not do the right thing and
+ in that case we simply replace the current history state. */
+ if(Search.canGoBackToHideSearch) {
+ Search.canGoBackToHideSearch = false;
+ window.history.back();
+ } else {
+ window.location.hash = '#!';
+ window.history.replaceState('', '', window.location.pathname);
+ }
+
+ /* Restore scrollbar, prevent page layout jumps */
+ document.body.style.overflow = 'auto';
+ document.body.style.paddingRight = '0';
+
+ return false;
+}
+
+/* istanbul ignore next */
+function copyToKeyboard(text) {
+ /* Append to the popup, appending to document.body would cause it to
+ scroll when focused */
+ let searchPopup = document.getElementsByClassName('m-doc-search')[0];
+ let textarea = document.createElement("textarea");
+ textarea.value = text;
+ searchPopup.appendChild(textarea);
+ textarea.focus();
+ textarea.select();
+
+ document.execCommand('copy');
+
+ searchPopup.removeChild(textarea);
+ document.getElementById('search-input').focus();
+}
+
+/* Only in case we're running in a browser. Why a simple if(document) doesn't
+ work is beyond me. */ /* istanbul ignore if */
+if(typeof document !== 'undefined') {
+ document.getElementById('search-input').oninput = function(event) {
+ Search.searchAndRender(document.getElementById('search-input').value);
+ };
+
+ document.onkeydown = function(event) {
+ /* Search shown */
+ if(window.location.hash == '#search') {
+ /* Close the search */
+ if(event.key == 'Escape') {
+ hideSearch();
+
+ /* Focus the search input, if not already, using T or Tab */
+ } else if((!document.activeElement || document.activeElement.id != 'search-input') && (event.key.toLowerCase() == 't' || event.key == 'Tab') && !event.shiftKey && !event.ctrlKey && !event.altKey && !event.metaKey) {
+ document.getElementById('search-input').focus();
+ return false; /* so T doesn't get entered into the box */
+
+ /* Fill in the autocompleted selection */
+ } else if(event.key == 'Tab' && !event.shiftKey && !event.ctrlKey && !event.altKey && !event.metaKey) {
+ /* But only if the input has selection at the end */
+ let input = document.getElementById('search-input');
+ if(input.selectionEnd == input.value.length && input.selectionStart != input.selectionEnd)
+ input.setSelectionRange(input.value.length, input.value.length);
+
+ /* Select next item */
+ } else if(event.key == 'ArrowDown') {
+ let current = document.getElementById('search-current');
+ if(current) {
+ let next = current.nextSibling;
+ if(next) {
+ current.id = '';
+ next.id = 'search-current';
+ next.scrollIntoView(false);
+ }
+ }
+ return false; /* so the keypress doesn't affect input cursor */
+
+ /* Select prev item */
+ } else if(event.key == 'ArrowUp') {
+ let current = document.getElementById('search-current');
+ if(current) {
+ let prev = current.previousSibling;
+ if(prev) {
+ current.id = '';
+ prev.id = 'search-current';
+ prev.scrollIntoView(false);
+ }
+ }
+ return false; /* so the keypress doesn't affect input cursor */
+
+ /* Go to result (if any) */
+ } else if(event.key == 'Enter') {
+ let result = document.getElementById('search-current');
+ if(result) {
+ result.firstElementChild.click();
+
+ /* We might be staying on the same page, so restore scrollbar,
+ and prevent page layout jumps */
+ document.body.style.overflow = 'auto';
+ document.body.style.paddingRight = '0';
+ }
+
+ return false; /* so the form doesn't get sent */
+
+ /* Copy (Markdown) link to keyboard */
+ } else if((event.key.toLowerCase() == 'l' || event.key.toLowerCase() == 'm') && event.metaKey) {
+ let result = document.getElementById('search-current');
+ if(result) {
+ let plain = event.key.toLowerCase() == 'l';
+ let link = plain ? result.firstElementChild.href :
+ '[' + result.firstElementChild.dataset.mdLinkTitle + '](' + result.firstElementChild.href + ')';
+
+ copyToKeyboard(link);
+
+ /* Add CSS class to the element for visual feedback (this
+ will get removed on keyup), but only if it's not already
+ there (in case of key repeat, e.g.) */
+ if(result.className.indexOf('m-doc-search-copied') == -1)
+ result.className += ' m-doc-search-copied';
+ console.log("Copied " + (plain ? "link" : "Markdown link") + " to " + result.firstElementChild.dataset.mdLinkTitle);
+ }
+
+ return false; /* so L doesn't get entered into the box */
+
+ /* Looks like the user is inserting some text (and not cutting,
+ copying or whatever), allow autocompletion for the new
+ character. The oninput event resets this back to false, so this
+ basically whitelists only keyboard input, including Shift-key
+ and special chars using right Alt (or equivalent on Mac), but
+ excluding Ctrl-key, which is usually not for text input. In the
+ worst case the autocompletion won't be allowed ever, which is
+ much more acceptable behavior than having no ability to disable
+ it and annoying the users. See also this WONTFIX Android bug:
+ https://bugs.chromium.org/p/chromium/issues/detail?id=118639 */
+ } else if(event.key != 'Backspace' && event.key != 'Delete' && !event.metaKey && (!event.ctrlKey || event.altKey)) {
+ Search.autocompleteNextInputEvent = true;
+ /* Otherwise reset the flag, because when the user would press e.g.
+ the 'a' key and then e.g. ArrowRight (which doesn't trigger
+ oninput), a Backspace after would still result in
+ autocompleteNextInputEvent, because nothing reset it back. */
+ } else {
+ Search.autocompleteNextInputEvent = false;
+ }
+
+ /* Search hidden */
+ } else {
+ /* Open the search on the T or Tab key */
+ if((event.key.toLowerCase() == 't' || event.key == 'Tab') && !event.shiftKey && !event.ctrlKey && !event.altKey && !event.metaKey) {
+ showSearch();
+ return false; /* so T doesn't get entered into the box */
+ }
+ }
+ };
+
+ document.onkeyup = function(event) {
+ /* Remove highlight after key is released after a link copy */
+ if((event.key.toLowerCase() == 'l' || event.key.toLowerCase() == 'm') && event.metaKey) {
+ let result = document.getElementById('search-current');
+ if(result) result.className = result.className.replace(' m-doc-search-copied', '');
+ }
+ };
+
+ /* Allow selecting items by mouse hover only after it moves once the
+ results are populated. This prevents a random item getting selected if
+ the cursor is left motionless over the result area. */
+ document.getElementById('search-results').onmousemove = function() {
+ Search.mouseMovedSinceLastRender = true;
+ };
+
+ /* If #search is already present in the URL, hide the scrollbar etc. for a
+ consistent experience */
+ if(window.location.hash == '#search') updateForSearchVisible();
+}
+
+/* For Node.js testing */ /* istanbul ignore else */
+if(typeof module !== 'undefined') { module.exports = { Search: Search }; }
diff --git a/search/all_0.html b/search/all_0.html
deleted file mode 100644
index ea50fff..0000000
--- a/search/all_0.html
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
Loading...
-
-
-
Searching...
-
No Matches
-
-
-
-
diff --git a/search/all_0.js b/search/all_0.js
deleted file mode 100644
index c153b77..0000000
--- a/search/all_0.js
+++ /dev/null
@@ -1,4 +0,0 @@
-var searchData=
-[
- ['de_0',['DE',['../namespacegreeter.html#aa824aced4428795fef274930c6c22db0a3a52f3c22ed6fcde5bf696a6c02c9e73',1,'greeter']]]
-];
diff --git a/search/all_1.html b/search/all_1.html
deleted file mode 100644
index 86b0682..0000000
--- a/search/all_1.html
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
Loading...
-
-
-
Searching...
-
No Matches
-
-
-
-
diff --git a/search/all_1.js b/search/all_1.js
deleted file mode 100644
index ea4c2cd..0000000
--- a/search/all_1.js
+++ /dev/null
@@ -1,5 +0,0 @@
-var searchData=
-[
- ['en_1',['EN',['../namespacegreeter.html#aa824aced4428795fef274930c6c22db0aaa85f1840e282d8a8304dbc2c0d7c9b2',1,'greeter']]],
- ['es_2',['ES',['../namespacegreeter.html#aa824aced4428795fef274930c6c22db0a04c19fa1e772ab66f0aad2efe61f25cd',1,'greeter']]]
-];
diff --git a/search/all_2.html b/search/all_2.html
deleted file mode 100644
index ffa7873..0000000
--- a/search/all_2.html
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
Loading...
-
-
-
Searching...
-
No Matches
-
-
-
-
diff --git a/search/all_2.js b/search/all_2.js
deleted file mode 100644
index 717482d..0000000
--- a/search/all_2.js
+++ /dev/null
@@ -1,4 +0,0 @@
-var searchData=
-[
- ['fr_3',['FR',['../namespacegreeter.html#aa824aced4428795fef274930c6c22db0a11aedd0e432747c2bcd97b82808d24a0',1,'greeter']]]
-];
diff --git a/search/all_3.html b/search/all_3.html
deleted file mode 100644
index f9df19b..0000000
--- a/search/all_3.html
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
Loading...
-
-
-
Searching...
-
No Matches
-
-
-
-
diff --git a/search/all_3.js b/search/all_3.js
deleted file mode 100644
index ecb877c..0000000
--- a/search/all_3.js
+++ /dev/null
@@ -1,7 +0,0 @@
-var searchData=
-[
- ['greet_4',['greet',['../classgreeter_1_1_greeter.html#a057e05d8a3779176fadafc679fed2cf2',1,'greeter::Greeter']]],
- ['greeter_5',['Greeter',['../classgreeter_1_1_greeter.html',1,'greeter::Greeter'],['../namespacegreeter.html',1,'greeter'],['../classgreeter_1_1_greeter.html#a032abd03d0ef9beac5dea095fc2809f7',1,'greeter::Greeter::Greeter()']]],
- ['greeter_2ecpp_6',['greeter.cpp',['../greeter_8cpp.html',1,'']]],
- ['greeter_2eh_7',['greeter.h',['../greeter_8h.html',1,'']]]
-];
diff --git a/search/all_4.html b/search/all_4.html
deleted file mode 100644
index aa2c933..0000000
--- a/search/all_4.html
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
Loading...
-
-
-
Searching...
-
No Matches
-
-
-
-
diff --git a/search/all_4.js b/search/all_4.js
deleted file mode 100644
index 81c8a6e..0000000
--- a/search/all_4.js
+++ /dev/null
@@ -1,4 +0,0 @@
-var searchData=
-[
- ['languagecode_8',['LanguageCode',['../namespacegreeter.html#aa824aced4428795fef274930c6c22db0',1,'greeter']]]
-];
diff --git a/search/all_5.html b/search/all_5.html
deleted file mode 100644
index 71848af..0000000
--- a/search/all_5.html
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
Loading...
-
-
-
Searching...
-
No Matches
-
-
-
-
diff --git a/search/all_5.js b/search/all_5.js
deleted file mode 100644
index 81df88f..0000000
--- a/search/all_5.js
+++ /dev/null
@@ -1,4 +0,0 @@
-var searchData=
-[
- ['readme_2emd_9',['README.md',['../_r_e_a_d_m_e_8md.html',1,'']]]
-];
diff --git a/search/classes_0.html b/search/classes_0.html
deleted file mode 100644
index 5b441a3..0000000
--- a/search/classes_0.html
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
Loading...
-
-
-
Searching...
-
No Matches
-
-
-
-
diff --git a/search/classes_0.js b/search/classes_0.js
deleted file mode 100644
index c67be0b..0000000
--- a/search/classes_0.js
+++ /dev/null
@@ -1,4 +0,0 @@
-var searchData=
-[
- ['greeter_10',['Greeter',['../classgreeter_1_1_greeter.html',1,'greeter']]]
-];
diff --git a/search/close.png b/search/close.png
deleted file mode 100644
index 9342d3d..0000000
Binary files a/search/close.png and /dev/null differ
diff --git a/search/enums_0.html b/search/enums_0.html
deleted file mode 100644
index e99c489..0000000
--- a/search/enums_0.html
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
Loading...
-
-
-
Searching...
-
No Matches
-
-
-
-
diff --git a/search/enums_0.js b/search/enums_0.js
deleted file mode 100644
index 2cf9882..0000000
--- a/search/enums_0.js
+++ /dev/null
@@ -1,4 +0,0 @@
-var searchData=
-[
- ['languagecode_17',['LanguageCode',['../namespacegreeter.html#aa824aced4428795fef274930c6c22db0',1,'greeter']]]
-];
diff --git a/search/enumvalues_0.html b/search/enumvalues_0.html
deleted file mode 100644
index f740569..0000000
--- a/search/enumvalues_0.html
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
Loading...
-
-
-
Searching...
-
No Matches
-
-
-
-
diff --git a/search/enumvalues_0.js b/search/enumvalues_0.js
deleted file mode 100644
index 784b04b..0000000
--- a/search/enumvalues_0.js
+++ /dev/null
@@ -1,4 +0,0 @@
-var searchData=
-[
- ['de_18',['DE',['../namespacegreeter.html#aa824aced4428795fef274930c6c22db0a3a52f3c22ed6fcde5bf696a6c02c9e73',1,'greeter']]]
-];
diff --git a/search/enumvalues_1.html b/search/enumvalues_1.html
deleted file mode 100644
index 043916c..0000000
--- a/search/enumvalues_1.html
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
Loading...
-
-
-
Searching...
-
No Matches
-
-
-
-
diff --git a/search/enumvalues_1.js b/search/enumvalues_1.js
deleted file mode 100644
index ac0ed28..0000000
--- a/search/enumvalues_1.js
+++ /dev/null
@@ -1,5 +0,0 @@
-var searchData=
-[
- ['en_19',['EN',['../namespacegreeter.html#aa824aced4428795fef274930c6c22db0aaa85f1840e282d8a8304dbc2c0d7c9b2',1,'greeter']]],
- ['es_20',['ES',['../namespacegreeter.html#aa824aced4428795fef274930c6c22db0a04c19fa1e772ab66f0aad2efe61f25cd',1,'greeter']]]
-];
diff --git a/search/enumvalues_2.html b/search/enumvalues_2.html
deleted file mode 100644
index 2a58a51..0000000
--- a/search/enumvalues_2.html
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
Loading...
-
-
-
Searching...
-
No Matches
-
-
-
-
diff --git a/search/enumvalues_2.js b/search/enumvalues_2.js
deleted file mode 100644
index 674ba0e..0000000
--- a/search/enumvalues_2.js
+++ /dev/null
@@ -1,4 +0,0 @@
-var searchData=
-[
- ['fr_21',['FR',['../namespacegreeter.html#aa824aced4428795fef274930c6c22db0a11aedd0e432747c2bcd97b82808d24a0',1,'greeter']]]
-];
diff --git a/search/files_0.html b/search/files_0.html
deleted file mode 100644
index 182d7eb..0000000
--- a/search/files_0.html
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
Loading...
-
-
-
Searching...
-
No Matches
-
-
-
-
diff --git a/search/files_0.js b/search/files_0.js
deleted file mode 100644
index b9646c5..0000000
--- a/search/files_0.js
+++ /dev/null
@@ -1,5 +0,0 @@
-var searchData=
-[
- ['greeter_2ecpp_12',['greeter.cpp',['../greeter_8cpp.html',1,'']]],
- ['greeter_2eh_13',['greeter.h',['../greeter_8h.html',1,'']]]
-];
diff --git a/search/files_1.html b/search/files_1.html
deleted file mode 100644
index 9448113..0000000
--- a/search/files_1.html
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
Loading...
-
-
-
Searching...
-
No Matches
-
-
-
-
diff --git a/search/files_1.js b/search/files_1.js
deleted file mode 100644
index 802f9b3..0000000
--- a/search/files_1.js
+++ /dev/null
@@ -1,4 +0,0 @@
-var searchData=
-[
- ['readme_2emd_14',['README.md',['../_r_e_a_d_m_e_8md.html',1,'']]]
-];
diff --git a/search/functions_0.html b/search/functions_0.html
deleted file mode 100644
index 4fcbb9c..0000000
--- a/search/functions_0.html
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
Loading...
-
-
-
Searching...
-
No Matches
-
-
-
-
diff --git a/search/functions_0.js b/search/functions_0.js
deleted file mode 100644
index 5ef9bfb..0000000
--- a/search/functions_0.js
+++ /dev/null
@@ -1,5 +0,0 @@
-var searchData=
-[
- ['greet_15',['greet',['../classgreeter_1_1_greeter.html#a057e05d8a3779176fadafc679fed2cf2',1,'greeter::Greeter']]],
- ['greeter_16',['Greeter',['../classgreeter_1_1_greeter.html#a032abd03d0ef9beac5dea095fc2809f7',1,'greeter::Greeter']]]
-];
diff --git a/search/mag_sel.png b/search/mag_sel.png
deleted file mode 100644
index 39c0ed5..0000000
Binary files a/search/mag_sel.png and /dev/null differ
diff --git a/search/namespaces_0.html b/search/namespaces_0.html
deleted file mode 100644
index f0de5a9..0000000
--- a/search/namespaces_0.html
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
Loading...
-
-
-
Searching...
-
No Matches
-
-
-
-
diff --git a/search/namespaces_0.js b/search/namespaces_0.js
deleted file mode 100644
index ab1803a..0000000
--- a/search/namespaces_0.js
+++ /dev/null
@@ -1,4 +0,0 @@
-var searchData=
-[
- ['greeter_11',['greeter',['../namespacegreeter.html',1,'']]]
-];
diff --git a/search/nomatches.html b/search/nomatches.html
deleted file mode 100644
index 4377320..0000000
--- a/search/nomatches.html
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/search/search.css b/search/search.css
deleted file mode 100644
index 3cf9df9..0000000
--- a/search/search.css
+++ /dev/null
@@ -1,271 +0,0 @@
-/*---------------- Search Box */
-
-#FSearchBox {
- float: left;
-}
-
-#MSearchBox {
- white-space : nowrap;
- float: none;
- margin-top: 8px;
- right: 0px;
- width: 170px;
- height: 24px;
- z-index: 102;
-}
-
-#MSearchBox .left
-{
- display:block;
- position:absolute;
- left:10px;
- width:20px;
- height:19px;
- background:url('search_l.png') no-repeat;
- background-position:right;
-}
-
-#MSearchSelect {
- display:block;
- position:absolute;
- width:20px;
- height:19px;
-}
-
-.left #MSearchSelect {
- left:4px;
-}
-
-.right #MSearchSelect {
- right:5px;
-}
-
-#MSearchField {
- display:block;
- position:absolute;
- height:19px;
- background:url('search_m.png') repeat-x;
- border:none;
- width:115px;
- margin-left:20px;
- padding-left:4px;
- color: #909090;
- outline: none;
- font: 9pt Arial, Verdana, sans-serif;
- -webkit-border-radius: 0px;
-}
-
-#FSearchBox #MSearchField {
- margin-left:15px;
-}
-
-#MSearchBox .right {
- display:block;
- position:absolute;
- right:10px;
- top:8px;
- width:20px;
- height:19px;
- background:url('search_r.png') no-repeat;
- background-position:left;
-}
-
-#MSearchClose {
- display: none;
- position: absolute;
- top: 4px;
- background : none;
- border: none;
- margin: 0px 4px 0px 0px;
- padding: 0px 0px;
- outline: none;
-}
-
-.left #MSearchClose {
- left: 6px;
-}
-
-.right #MSearchClose {
- right: 2px;
-}
-
-.MSearchBoxActive #MSearchField {
- color: #000000;
-}
-
-/*---------------- Search filter selection */
-
-#MSearchSelectWindow {
- display: none;
- position: absolute;
- left: 0; top: 0;
- border: 1px solid #90A5CE;
- background-color: #F9FAFC;
- z-index: 10001;
- padding-top: 4px;
- padding-bottom: 4px;
- -moz-border-radius: 4px;
- -webkit-border-top-left-radius: 4px;
- -webkit-border-top-right-radius: 4px;
- -webkit-border-bottom-left-radius: 4px;
- -webkit-border-bottom-right-radius: 4px;
- -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-}
-
-.SelectItem {
- font: 8pt Arial, Verdana, sans-serif;
- padding-left: 2px;
- padding-right: 12px;
- border: 0px;
-}
-
-span.SelectionMark {
- margin-right: 4px;
- font-family: monospace;
- outline-style: none;
- text-decoration: none;
-}
-
-a.SelectItem {
- display: block;
- outline-style: none;
- color: #000000;
- text-decoration: none;
- padding-left: 6px;
- padding-right: 12px;
-}
-
-a.SelectItem:focus,
-a.SelectItem:active {
- color: #000000;
- outline-style: none;
- text-decoration: none;
-}
-
-a.SelectItem:hover {
- color: #FFFFFF;
- background-color: #3D578C;
- outline-style: none;
- text-decoration: none;
- cursor: pointer;
- display: block;
-}
-
-/*---------------- Search results window */
-
-iframe#MSearchResults {
- width: 60ex;
- height: 15em;
-}
-
-#MSearchResultsWindow {
- display: none;
- position: absolute;
- left: 0; top: 0;
- border: 1px solid #000;
- background-color: #EEF1F7;
- z-index:10000;
-}
-
-/* ----------------------------------- */
-
-
-#SRIndex {
- clear:both;
- padding-bottom: 15px;
-}
-
-.SREntry {
- font-size: 10pt;
- padding-left: 1ex;
-}
-
-.SRPage .SREntry {
- font-size: 8pt;
- padding: 1px 5px;
-}
-
-body.SRPage {
- margin: 5px 2px;
-}
-
-.SRChildren {
- padding-left: 3ex; padding-bottom: .5em
-}
-
-.SRPage .SRChildren {
- display: none;
-}
-
-.SRSymbol {
- font-weight: bold;
- color: #425E97;
- font-family: Arial, Verdana, sans-serif;
- text-decoration: none;
- outline: none;
-}
-
-a.SRScope {
- display: block;
- color: #425E97;
- font-family: Arial, Verdana, sans-serif;
- text-decoration: none;
- outline: none;
-}
-
-a.SRSymbol:focus, a.SRSymbol:active,
-a.SRScope:focus, a.SRScope:active {
- text-decoration: underline;
-}
-
-span.SRScope {
- padding-left: 4px;
-}
-
-.SRPage .SRStatus {
- padding: 2px 5px;
- font-size: 8pt;
- font-style: italic;
-}
-
-.SRResult {
- display: none;
-}
-
-DIV.searchresults {
- margin-left: 10px;
- margin-right: 10px;
-}
-
-/*---------------- External search page results */
-
-.searchresult {
- background-color: #F0F3F8;
-}
-
-.pages b {
- color: white;
- padding: 5px 5px 3px 5px;
- background-image: url("../tab_a.png");
- background-repeat: repeat-x;
- text-shadow: 0 1px 1px #000000;
-}
-
-.pages {
- line-height: 17px;
- margin-left: 4px;
- text-decoration: none;
-}
-
-.hl {
- font-weight: bold;
-}
-
-#searchresults {
- margin-bottom: 20px;
-}
-
-.searchpages {
- margin-top: 10px;
-}
-
diff --git a/search/search.js b/search/search.js
deleted file mode 100644
index ff2b8c8..0000000
--- a/search/search.js
+++ /dev/null
@@ -1,814 +0,0 @@
-/*
- @licstart The following is the entire license notice for the JavaScript code in this file.
-
- The MIT License (MIT)
-
- Copyright (C) 1997-2020 by Dimitri van Heesch
-
- Permission is hereby granted, free of charge, to any person obtaining a copy of this software
- and associated documentation files (the "Software"), to deal in the Software without restriction,
- including without limitation the rights to use, copy, modify, merge, publish, distribute,
- sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all copies or
- substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
- BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
- @licend The above is the entire license notice for the JavaScript code in this file
- */
-function convertToId(search)
-{
- var result = '';
- for (i=0;i
do a search
- {
- this.Search();
- }
- }
-
- this.OnSearchSelectKey = function(evt)
- {
- var e = (evt) ? evt : window.event; // for IE
- if (e.keyCode==40 && this.searchIndex0) // Up
- {
- this.searchIndex--;
- this.OnSelectItem(this.searchIndex);
- }
- else if (e.keyCode==13 || e.keyCode==27)
- {
- this.OnSelectItem(this.searchIndex);
- this.CloseSelectionWindow();
- this.DOMSearchField().focus();
- }
- return false;
- }
-
- // --------- Actions
-
- // Closes the results window.
- this.CloseResultsWindow = function()
- {
- this.DOMPopupSearchResultsWindow().style.display = 'none';
- this.DOMSearchClose().style.display = 'none';
- this.Activate(false);
- }
-
- this.CloseSelectionWindow = function()
- {
- this.DOMSearchSelectWindow().style.display = 'none';
- }
-
- // Performs a search.
- this.Search = function()
- {
- this.keyTimeout = 0;
-
- // strip leading whitespace
- var searchValue = this.DOMSearchField().value.replace(/^ +/, "");
-
- var code = searchValue.toLowerCase().charCodeAt(0);
- var idxChar = searchValue.substr(0, 1).toLowerCase();
- if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair
- {
- idxChar = searchValue.substr(0, 2);
- }
-
- var resultsPage;
- var resultsPageWithSearch;
- var hasResultsPage;
-
- var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar);
- if (idx!=-1)
- {
- var hexCode=idx.toString(16);
- resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html';
- resultsPageWithSearch = resultsPage+'?'+escape(searchValue);
- hasResultsPage = true;
- }
- else // nothing available for this search term
- {
- resultsPage = this.resultsPath + '/nomatches.html';
- resultsPageWithSearch = resultsPage;
- hasResultsPage = false;
- }
-
- window.frames.MSearchResults.location = resultsPageWithSearch;
- var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();
-
- if (domPopupSearchResultsWindow.style.display!='block')
- {
- var domSearchBox = this.DOMSearchBox();
- this.DOMSearchClose().style.display = 'inline';
- if (this.insideFrame)
- {
- var domPopupSearchResults = this.DOMPopupSearchResults();
- domPopupSearchResultsWindow.style.position = 'relative';
- domPopupSearchResultsWindow.style.display = 'block';
- var width = document.body.clientWidth - 8; // the -8 is for IE :-(
- domPopupSearchResultsWindow.style.width = width + 'px';
- domPopupSearchResults.style.width = width + 'px';
- }
- else
- {
- var domPopupSearchResults = this.DOMPopupSearchResults();
- var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth;
- var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1;
- domPopupSearchResultsWindow.style.display = 'block';
- left -= domPopupSearchResults.offsetWidth;
- domPopupSearchResultsWindow.style.top = top + 'px';
- domPopupSearchResultsWindow.style.left = left + 'px';
- }
- }
-
- this.lastSearchValue = searchValue;
- this.lastResultsPage = resultsPage;
- }
-
- // -------- Activation Functions
-
- // Activates or deactivates the search panel, resetting things to
- // their default values if necessary.
- this.Activate = function(isActive)
- {
- if (isActive || // open it
- this.DOMPopupSearchResultsWindow().style.display == 'block'
- )
- {
- this.DOMSearchBox().className = 'MSearchBoxActive';
-
- var searchField = this.DOMSearchField();
-
- if (searchField.value == this.searchLabel) // clear "Search" term upon entry
- {
- searchField.value = '';
- this.searchActive = true;
- }
- }
- else if (!isActive) // directly remove the panel
- {
- this.DOMSearchBox().className = 'MSearchBoxInactive';
- this.DOMSearchField().value = this.searchLabel;
- this.searchActive = false;
- this.lastSearchValue = ''
- this.lastResultsPage = '';
- }
- }
-}
-
-// -----------------------------------------------------------------------
-
-// The class that handles everything on the search results page.
-function SearchResults(name)
-{
- // The number of matches from the last run of .
- this.lastMatchCount = 0;
- this.lastKey = 0;
- this.repeatOn = false;
-
- // Toggles the visibility of the passed element ID.
- this.FindChildElement = function(id)
- {
- var parentElement = document.getElementById(id);
- var element = parentElement.firstChild;
-
- while (element && element!=parentElement)
- {
- if (element.nodeName == 'DIV' && element.className == 'SRChildren')
- {
- return element;
- }
-
- if (element.nodeName == 'DIV' && element.hasChildNodes())
- {
- element = element.firstChild;
- }
- else if (element.nextSibling)
- {
- element = element.nextSibling;
- }
- else
- {
- do
- {
- element = element.parentNode;
- }
- while (element && element!=parentElement && !element.nextSibling);
-
- if (element && element!=parentElement)
- {
- element = element.nextSibling;
- }
- }
- }
- }
-
- this.Toggle = function(id)
- {
- var element = this.FindChildElement(id);
- if (element)
- {
- if (element.style.display == 'block')
- {
- element.style.display = 'none';
- }
- else
- {
- element.style.display = 'block';
- }
- }
- }
-
- // Searches for the passed string. If there is no parameter,
- // it takes it from the URL query.
- //
- // Always returns true, since other documents may try to call it
- // and that may or may not be possible.
- this.Search = function(search)
- {
- if (!search) // get search word from URL
- {
- search = window.location.search;
- search = search.substring(1); // Remove the leading '?'
- search = unescape(search);
- }
-
- search = search.replace(/^ +/, ""); // strip leading spaces
- search = search.replace(/ +$/, ""); // strip trailing spaces
- search = search.toLowerCase();
- search = convertToId(search);
-
- var resultRows = document.getElementsByTagName("div");
- var matches = 0;
-
- var i = 0;
- while (i < resultRows.length)
- {
- var row = resultRows.item(i);
- if (row.className == "SRResult")
- {
- var rowMatchName = row.id.toLowerCase();
- rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_'
-
- if (search.length<=rowMatchName.length &&
- rowMatchName.substr(0, search.length)==search)
- {
- row.style.display = 'block';
- matches++;
- }
- else
- {
- row.style.display = 'none';
- }
- }
- i++;
- }
- document.getElementById("Searching").style.display='none';
- if (matches == 0) // no results
- {
- document.getElementById("NoMatches").style.display='block';
- }
- else // at least one result
- {
- document.getElementById("NoMatches").style.display='none';
- }
- this.lastMatchCount = matches;
- return true;
- }
-
- // return the first item with index index or higher that is visible
- this.NavNext = function(index)
- {
- var focusItem;
- while (1)
- {
- var focusName = 'Item'+index;
- focusItem = document.getElementById(focusName);
- if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
- {
- break;
- }
- else if (!focusItem) // last element
- {
- break;
- }
- focusItem=null;
- index++;
- }
- return focusItem;
- }
-
- this.NavPrev = function(index)
- {
- var focusItem;
- while (1)
- {
- var focusName = 'Item'+index;
- focusItem = document.getElementById(focusName);
- if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
- {
- break;
- }
- else if (!focusItem) // last element
- {
- break;
- }
- focusItem=null;
- index--;
- }
- return focusItem;
- }
-
- this.ProcessKeys = function(e)
- {
- if (e.type == "keydown")
- {
- this.repeatOn = false;
- this.lastKey = e.keyCode;
- }
- else if (e.type == "keypress")
- {
- if (!this.repeatOn)
- {
- if (this.lastKey) this.repeatOn = true;
- return false; // ignore first keypress after keydown
- }
- }
- else if (e.type == "keyup")
- {
- this.lastKey = 0;
- this.repeatOn = false;
- }
- return this.lastKey!=0;
- }
-
- this.Nav = function(evt,itemIndex)
- {
- var e = (evt) ? evt : window.event; // for IE
- if (e.keyCode==13) return true;
- if (!this.ProcessKeys(e)) return false;
-
- if (this.lastKey==38) // Up
- {
- var newIndex = itemIndex-1;
- var focusItem = this.NavPrev(newIndex);
- if (focusItem)
- {
- var child = this.FindChildElement(focusItem.parentNode.parentNode.id);
- if (child && child.style.display == 'block') // children visible
- {
- var n=0;
- var tmpElem;
- while (1) // search for last child
- {
- tmpElem = document.getElementById('Item'+newIndex+'_c'+n);
- if (tmpElem)
- {
- focusItem = tmpElem;
- }
- else // found it!
- {
- break;
- }
- n++;
- }
- }
- }
- if (focusItem)
- {
- focusItem.focus();
- }
- else // return focus to search field
- {
- parent.document.getElementById("MSearchField").focus();
- }
- }
- else if (this.lastKey==40) // Down
- {
- var newIndex = itemIndex+1;
- var focusItem;
- var item = document.getElementById('Item'+itemIndex);
- var elem = this.FindChildElement(item.parentNode.parentNode.id);
- if (elem && elem.style.display == 'block') // children visible
- {
- focusItem = document.getElementById('Item'+itemIndex+'_c0');
- }
- if (!focusItem) focusItem = this.NavNext(newIndex);
- if (focusItem) focusItem.focus();
- }
- else if (this.lastKey==39) // Right
- {
- var item = document.getElementById('Item'+itemIndex);
- var elem = this.FindChildElement(item.parentNode.parentNode.id);
- if (elem) elem.style.display = 'block';
- }
- else if (this.lastKey==37) // Left
- {
- var item = document.getElementById('Item'+itemIndex);
- var elem = this.FindChildElement(item.parentNode.parentNode.id);
- if (elem) elem.style.display = 'none';
- }
- else if (this.lastKey==27) // Escape
- {
- parent.searchBox.CloseResultsWindow();
- parent.document.getElementById("MSearchField").focus();
- }
- else if (this.lastKey==13) // Enter
- {
- return true;
- }
- return false;
- }
-
- this.NavChild = function(evt,itemIndex,childIndex)
- {
- var e = (evt) ? evt : window.event; // for IE
- if (e.keyCode==13) return true;
- if (!this.ProcessKeys(e)) return false;
-
- if (this.lastKey==38) // Up
- {
- if (childIndex>0)
- {
- var newIndex = childIndex-1;
- document.getElementById('Item'+itemIndex+'_c'+newIndex).focus();
- }
- else // already at first child, jump to parent
- {
- document.getElementById('Item'+itemIndex).focus();
- }
- }
- else if (this.lastKey==40) // Down
- {
- var newIndex = childIndex+1;
- var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex);
- if (!elem) // last child, jump to parent next parent
- {
- elem = this.NavNext(itemIndex+1);
- }
- if (elem)
- {
- elem.focus();
- }
- }
- else if (this.lastKey==27) // Escape
- {
- parent.searchBox.CloseResultsWindow();
- parent.document.getElementById("MSearchField").focus();
- }
- else if (this.lastKey==13) // Enter
- {
- return true;
- }
- return false;
- }
-}
-
-function setKeyActions(elem,action)
-{
- elem.setAttribute('onkeydown',action);
- elem.setAttribute('onkeypress',action);
- elem.setAttribute('onkeyup',action);
-}
-
-function setClassAttr(elem,attr)
-{
- elem.setAttribute('class',attr);
- elem.setAttribute('className',attr);
-}
-
-function createResults()
-{
- var results = document.getElementById("SRResults");
- for (var e=0; e@~cfI0vHcmM!p00Dpi0Av6Gh5!I>00E2u0Am0Fk^lf@00Ec)0A~OJo&W%000E=`0CfNXssI3I00FQ70B!&Qwg3QO0RRjD00F`P04V_h3joFdfG7X~%m4s#0RRpF00G(n04V_i4FJ>t0A=0)fG7X~00BS&0CE5VyZ``fMgah400B$^06GN(0ssmC4*&oF3jjC(fG-FD04`PmfI7wifG7X~Tmb-b0RjyGcmV)q-T;6o00Djh0CWHWiU9y+00EEz0A&CHmH_~A0RRC200E)_0Av6GrU3wL00FE404@LlvH<{P00FoG0BryPz5xJa00G1S0AT?fG+?6_yGWJ009630B-;R1_A(S009gF0CWHW5&{5W009^R0CWHW9s&Sv00ATd0A&CHDgpp)00A%p0CfNXHUa=+00KM$0B=wL0A&FH5&!@JOacIS00B?}0B-;RRssNI0Ra&JTmk?t00CkG0CWHWY61Xt00D3U0B-;Rb^-um00^7`0B6tv0CGYC0A#!X0BlA80A*eP0A}m~0C0Q)0AWx70Dyr20Fa;n01&bO0D$QL0GI{=0N5`90N7Xo0N8;60NAPl0Lb0}03iDT0I4_v0I56z0I7Zg0I7lk07$F?0EpWH01)c}0FVR&003ulWo2|_asXs$a$jX;V>K~1G&DG5VKHN7G%_(ZWH32qGdMOkVr64xGB_@1bZu->ML|SOMJ{b*0AF%nWnW=mWM6GxWnVaLWG-lQZEQz!Wo2|_asX*=WMz0RXmo9CWN%}2ZDnqBVRUJ4ZUAIya$hksIALaHGd3_~VmUT7V>B~jIW#ghH)1$sF=J&gIb|+rbZu+^001v%a%E+7WpXZP0B3S#Wprh7UpQzkXmo9C2>>@bIz>(ZVPRo7HD)n5G%#f{I5K27VK_4|G-P69GGj1gH)AH8N&1V=^*jWHx4FWMwsCW;QuCVK!qhGGjSqH!}$UH##~+QvhKwG-EM2W??a9H#ah2Vm3BrFkxY2GG%6EHZf*0HDhE605>{1Mp6J_F)?9fWMnX9G&3?cG&f^1Vq;`EH)1$4I50S5GBjZ@3IG*4I!s}1XLVs`WkYXdWdI{#VK_20VPj=vG&C|eH#s$CWo9xrG&wUcV>V+lGGt;fXL4m_bY*e?ZeeX@b8ul}WoL3_Wprh7E@*UZY!3h(4LUkUa%E+7WpXHUbYwa@b98cPZf7X~BVjORVm352Gh<<5F*Z0hWHVx6V>dZwVPP{kGdE&oGB*nVKMM~49TYk`XL4m_bSO+=ZfA92XJtcgWMwHJV{dMAbO0k^G&VA1Vly-`Gc`0cW;8HjI5apgIW;&qFkv%hFfn5_4FEq90000wI!AJ4Wprh70Ap-nb8}~MWo2|_a$hlDF<)nLWo2|_axQ3eZEOPo1TS!5XJvB$GcjQ^H#lQBG-5e5HaIpmGch@1VL4VsCYHE@*UZY++(=b#yLdZ+HMli>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0 1px 1px rgba(255,255,255,0.9);color:#283a5d;outline:0}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace!important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283a5d transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;-moz-border-radius:0!important;-webkit-border-radius:0;border-radius:0!important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;-moz-border-radius:5px!important;-webkit-border-radius:5px;border-radius:5px!important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0!important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px!important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}}
\ No newline at end of file