diff --git a/src/kapidox/data/htmlresource/css/kapidox.css b/src/kapidox/data/htmlresource/css/kapidox.css index 93471c2..f011203 100644 --- a/src/kapidox/data/htmlresource/css/kapidox.css +++ b/src/kapidox/data/htmlresource/css/kapidox.css @@ -1,362 +1,382 @@ /** * * Colors: * bg-primary: #0057ae * fg-primary: #ffffff */ /** * Global */ html { margin: 0; } body { background: url("bg.png") repeat; } body, table, div, p, dl { font-family: "Noto Sans",Verdana, Geneva, Arial, sans-serif; font-size: 14px; line-height: 1.4em; } #navbar .navbar-brand { padding-top:0; padding-top:0; } #navbar-logo { width: 35px; margin-top:10px; } #navbar-title { font-size: 1.4em; font-weight: bold; } footer { margin-top: 15px; padding: 15px 0px 5px 0px; margin-bottom: 0px; } /* The 2 next follow breadcrumb style... should find a way*/ .nav li a { padding: 8px 15px; background-color: #f5f5f5; } .nav li a:focus, .nav li a:hover { background-color: #f5f5f5; text-decoration: underline; } .bg-primary { background-color: #0057ae; color: #ffffff; } footer a { font-weight: bold; color: #ffffff; } footer a:hover { color: #ffffff; } .page-header { margin-top: 0; box-shadow: 0px 13px 12px -17px grey; } #left h2 { font-size: 1.2em; } .menu-box { padding: 0.7em 0 0 0; } .menu-box .menu-content { margin: 0 7px 0 10px; } .menu-box ul { list-style-type: none; list-style-position:inside; margin: 0 0 0 1.3em; padding:0; } .menu-title { margin: 0.6em 0 1.2em 0; padding:0; color: #ffffff; background-color: #0057ae; } .menu-title h2 { margin: 0; padding: 0.4em 1.3em 0.2em 1.3em; line-height:1.2em; font-size: 1.2em; font-weight: normal; color: #ffffff; } .menu-content dl { list-style-position: inside; margin: 0; padding: 0; } .menu-content dl dd { list-style-position: inside; margin: 0 0 0 1.3em; padding: 0; } /** * Frontpage */ .product-row { background: #fff; padding: .6em; margin-bottom: 15px; } .product-logo { margin-top: .5em; } /** * Subgroup */ table.libraries { width: 100%; border-collapse: collapse; } table.libraries td, table.libraries th { border: solid 1px #0057ae; } table.libraries h3 { margin: 0; padding: 0; } table.libraries td { padding: 0.5em; } table.libraries th { background: #0057ae; color:white; font-size: 1.1em; line-height: 1.7em; text-align: center; } .library-main-column { vertical-align: top; } .library-detail-column { text-align: center; width: 120px; } .library-fancyname { font-size: 120%; } .library-platforms { float: right; font-size: 80%; } .library-platform { color: #666; padding-left: 6px; margin-left: 6px; border-left: 1px solid #ccc; } .library-platform:first-child { padding-left: 0; border-left: none; } .library-platform a { text-decoration: none; } .library-platform-unsupported .library-platform-text { text-decoration: line-through; color: #aaa; } /* Platform filtering --------------------------------*/ .not-available-indicator, .available-indicator { display: none; float: left; padding-right: 0.5em; } .not-available .not-available-indicator { display: inline; } .available .available-indicator { display: inline; } .not-available { background-color: #f8f8f8; } .not-available .library-description { display: none; } .library-platform-required .library-platform-text { color: green; } .library-platform-required.library-platform-unsupported .library-platform-text { color: red; } .warning-tooltip { width: 15px; } /* Platform note -------------------------------------*/ .note-tip { display: none; z-index: 3000; position: absolute; background-color: #222; color: white; padding: 6px; border-radius: 5px; } a.note-close, a.note-close:active, a.note-close:visited { color: white; text-decoration: none; margin-left: 6px; } .copyrights { border-top: 1px solid #dddddd; margin-top: 20px; padding-top: 5px; text-align: center; color: #555555; } +/**** + * Search page loader + * Shamelessly taken from https://www.w3schools.com/howto/howto_css_loader.asp + ****/ + .loader { + border: 16px solid #f3f3f3; /* Light grey */ + border-top: 16px solid #3498db; /* Blue */ + border-radius: 50%; + width: 120px; + height: 120px; + margin: auto; + margin-top: 5%; + animation: spin 2s linear infinite; +} + +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + /***** * Doxygen *****/ /* Provided by Doxygen, redundant, because already in our header */ div.headertitle, div#top { display: none; } /* The Doxygen content feels "out of place" if it has a margin different from the rest of the page */ div.contents { margin-left: 0; margin-right: 0; } div.header { background-image: none; background-color: none; margin: 0px; border: none; } /** * classes */ .memtitle { display: none; } .memproto, dl.reflist dt { background: #0057ae; border-radius: 0; border: 1px solid #0057ae; } .memname { color: #eeeeee; font-weight: bold; text-shadow: none; } .memproto a.elRef{ color: #aaaabb; font-weight: bold; } .memproto a.el { color: #ccccee; font-weight: bold; } .memproto .paramtype { font-weight: bold; } .memproto .paramname { color: #f7800a; font-weight: bold; } .memproto span.mlabel { background: #bbbbff; color: #005766; } /** * Fragments */ .fragment .line { line-height: 1.4; } /* Use div.fragment, not pre.fragment. pre.fragment is used for @verbatim blocks, which must keep their border */ div.fragment { background-color: #fefefe; border: none; border-radius: 5px; } /** * Listing */ span.lineno { border-right: 1px solid #ddd; background-color: transparent; color: #666; } span.lineno a { background-color: transparent; } diff --git a/src/kapidox/data/htmlresource/js/search.js b/src/kapidox/data/htmlresource/js/search.js index 299d869..1a3d9c1 100644 --- a/src/kapidox/data/htmlresource/js/search.js +++ b/src/kapidox/data/htmlresource/js/search.js @@ -1,206 +1,210 @@ var entityMap = { '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '/': '/', '`': '`', '=': '=' }; function escapeHtml (string) { return String(string).replace(/[&<>"'`=\/]/g, function (s) { return entityMap[s]; }); } function GetURLParameter(sParam) { var sPageURL = window.location.search.substring(1); var sURLVariables = sPageURL.split('&'); for (var i = 0; i < sURLVariables.length; i++) { var sParameterName = sURLVariables[i].split('='); if (sParameterName[0] == sParam) { return escapeHtml(decodeURIComponent(sParameterName[1])); } } return "" } +async function render_search(type) +{ + var query = GetURLParameter("query"); + if (query == "") { + $( '.loader' ).remove() + $( "#search-title" ).html("...If you don't tell what to search, I can't find anything..."); + return + } + $( "#search-input" ).val(query); + $( "#search-title" ).append(" " + query + ""); + var json_path = "searchdata.json"; + + await do_search(json_path, query, type); +} + function do_search(json_path, query, type) { var results = [] $.ajax({ url: json_path, dataType: 'json', error: function(data, status, err) { console.log(err) }, success: function (json) { search_json(type, json, query) } }); } function search_json(type, json, query) { result_html = "" if (type == 'library') { results_html = search_json_library(json, query) } else if (type == 'group') { results_html = search_json_group(json, query) } else if (type == 'global') { results_html = search_json_global(json, query) } + + $( '.loader' ).remove() $( '#results' ).append(results_html) } function search_json_library(json, query) { var results_name = [] var results_text = [] $.each(json.docfields, function(key, val) { if ('name' in val) { if (val.name.search(new RegExp(query, "i")) != -1) { results_name.push(val) } } if ('text' in val) { if (val.text.search(new RegExp(query, "i")) != -1) { results_text.push(val) } } }); var html_results = "" html_results += "

Matches in names

\n" html_results += "\n" html_results += "

Matches in text

\n" html_results += "\n" return html_results } function search_json_group(json, query) { var results_name = [] var results_text = [] $.each(json.libraries, function(k, libval) { if ('fancyname' in libval) { libname = libval.fancyname } $.each(libval.docfields, function(key, val) { if ('name' in val) { if (val.name.search(new RegExp(query, "i")) != -1) { val['libname'] = libname results_name.push(val) } } if ('text' in val) { if (val.text.search(new RegExp(query, "i")) != -1) { val['libname'] = libname results_text.push(val) } } }); }); var html_results = "" html_results += "

Matches in names

\n" html_results += "\n" html_results += "

Matches in text

\n" html_results += "\n" return html_results } function search_json_global(json, query) { var results_name = [] var results_text = [] $.each(json.all, function(k, productval) { if ('fancyname' in productval) { productname = productval.fancyname } $.each(productval.libraries, function(k, libval) { if ('fancyname' in libval) { libname = libval.fancyname } $.each(libval.docfields, function(key, val) { if ('name' in val) { if (val.name.search(new RegExp(query, "i")) != -1) { val['libname'] = libname val['productname'] = productname results_name.push(val) } } if ('text' in val) { if (val.text.search(new RegExp(query, "i")) != -1) { val['libname'] = libname val['productname'] = productname results_text.push(val) } } }); }); }); var html_results = "" html_results += "

Matches in names

\n" html_results += "\n" html_results += "

Matches in text

\n" html_results += "\n" return html_results } - -function render_search(type) -{ - var query = GetURLParameter("query"); - if (query == "") { - $( "#search-title" ).html("...If you don't tell what to search, I can't find anything..."); - return - } - $( "#search-input" ).val(query); - $( "#search-title" ).append(" " + query + ""); - var json_path = "searchdata.json"; - do_search(json_path, query, type); -} diff --git a/src/kapidox/data/templates/search.html b/src/kapidox/data/templates/search.html index 7bd3fcc..5f5ea88 100644 --- a/src/kapidox/data/templates/search.html +++ b/src/kapidox/data/templates/search.html @@ -1,48 +1,49 @@ {% extends "base.html" %} {% if fwinfo %} {% set type = "library" %} {% elif group %} {% set type = "group" %} {% elif product_list %} {# global search page #} {% set type = "global" %} {% endif %} {% block page_title %}{{ title }} - Search results{% endblock %} {% block head %} {% endblock %} {% block title %} {% if type == "library" %} {{ fwinfo.fancyname }} {% elif type == "group" %} {{ group.fancyname }} {% elif type == "global" %} {{ title }} {% endif %} {% endblock %} {% block content %}

Search results:

+
{% endblock %} {% block sidebar %} {% if type == "library" %} {% include "library-sidebar.html" %} {% elif type == "group" %} {% include "subgroup-sidebar.html" %} {% elif type == "global" %} {% include "frontpage-sidebar.html" %} {% endif %} {% endblock %}