From a786a0ce4e8ca21b516290a86d90857eb67c2b97 Mon Sep 17 00:00:00 2001 From: dojutsu-user Date: Wed, 17 Jul 2019 15:45:35 +0530 Subject: [PATCH] add forward slash as hotkey for search ui --- sphinx_search/_static/js/rtd_sphinx_search.js | 18 +++++++++++++ .../_static/js/rtd_sphinx_search.min.js | 2 +- tests/test_ui.py | 25 +++++++++++++++++++ 3 files changed, 44 insertions(+), 1 deletion(-) diff --git a/sphinx_search/_static/js/rtd_sphinx_search.js b/sphinx_search/_static/js/rtd_sphinx_search.js index f3b90ab..94e347c 100644 --- a/sphinx_search/_static/js/rtd_sphinx_search.js +++ b/sphinx_search/_static/js/rtd_sphinx_search.js @@ -2,6 +2,11 @@ const MAX_SUGGESTIONS = 50; const MAX_SECTION_RESULTS = 3; const MAX_SUBSTRING_LIMIT = 100; +// Possible states of search modal +const SEARCH_MODAL_OPENED = "opened"; +const SEARCH_MODAL_CLOSED = "closed"; + +let SEARCH_MODAL_STATE = SEARCH_MODAL_CLOSED; let TOTAL_PAGE_RESULTS = 0; let SEARCH_QUERY = ""; @@ -603,6 +608,8 @@ const showSearchModal = custom_query => { // removes previous results (if there are any). removeResults(); + SEARCH_MODAL_STATE = SEARCH_MODAL_OPENED; + // removes the focus from the initial input field // which as already present in the docs. let search_bar = getInputField(); @@ -634,6 +641,8 @@ const removeSearchModal = () => { // removes previous results before closing removeResults(); + SEARCH_MODAL_STATE = SEARCH_MODAL_CLOSED; + // sets the value of input field to empty string and remove the focus. let search_outer_input = document.querySelector(".search__outer__input"); if (search_outer_input !== null) { @@ -786,6 +795,15 @@ window.addEventListener("DOMContentLoaded", evt => { } }); + // open search modal if "forward slash" button is pressed + document.addEventListener("keydown", e => { + if (e.keyCode === 191) { + if (SEARCH_MODAL_STATE !== SEARCH_MODAL_OPENED) { + showSearchModal(); + } + } + }); + // if "rtd_search" is present in URL parameters, // then open the search modal and show the results // for the value of "rtd_search" diff --git a/sphinx_search/_static/js/rtd_sphinx_search.min.js b/sphinx_search/_static/js/rtd_sphinx_search.min.js index 9ec3b9b..0ff273e 100644 --- a/sphinx_search/_static/js/rtd_sphinx_search.min.js +++ b/sphinx_search/_static/js/rtd_sphinx_search.min.js @@ -1 +1 @@ -"use strict";var MAX_SUGGESTIONS=50,MAX_SECTION_RESULTS=3,MAX_SUBSTRING_LIMIT=100,TOTAL_PAGE_RESULTS=0,SEARCH_QUERY="",COUNT=0,debounce=function(r,n){function e(){var e=this,t=arguments;clearTimeout(i),i=setTimeout(function(){return r.apply(e,t)},n)}var i;return e.cancel=function(){clearTimeout(i),i=null},e},convertObjToUrlParams=function(t){for(var e=Object.keys(t).map(function(e){if(_is_string(e))return e+"="+encodeURI(t[e])}),r=[],n=0;n
<%= section_subheading %> <% for (var i = 0; i < section_content.length; ++i) { %>

<%= section_content[i] %>

<% } %>

',{section_link:s,section_id:c,section_subheading:r,section_content:i})},getHighlightListData=function(e,t){return!!_is_array(e[t])&&e[t]},get_domain_html=function(e,t){var r="".concat(t,"#").concat(e._source.anchor),n=e._source.role_name,i=e._source.type_display,a=e._source.doc_display,o=e._source.display_name,s=e._source.name;if(void 0!==e.highlight&&null!==e.highlight){var c=e.highlight,l=getHighlightListData(c,"domains.name"),u=getHighlightListData(c,"domains.display_name"),_=getHighlightListData(c,"domains.type_display");l&&(s=l[0]),u&&(o=u[0]),_&&(i=_[0])}var d="";_is_string(i)&&(d+=i+" -- "),_is_string(s)&&(d+=s+" "),_is_string(a)&&(d+="-- in "+a);var h="";h=_is_string(o)?"("+n+") "+o:n;var v="hit__"+COUNT;return $u.template('
<%= domain_subheading %>

<%= domain_content %>


',{domain_link:r,domain_id:v,domain_content:d,domain_subheading:h})},generateSingleResult=function(e,t){var r=createDomNode("div"),n="".concat(e.link).concat(DOCUMENTATION_OPTIONS.FILE_SUFFIX)+"?highlight="+encodeURIComponent(SEARCH_QUERY),i=e.title;void 0!==e.highlight&&null!==e.highlight&&void 0!==e.highlight.title&&null!==e.highlight.title&&(i=e.highlight.title),t!==e.project&&(i+=" "+$u.template(' (from project <%= project %>) ',{project:e.project})),i+="
",r.innerHTML+=$u.template('

<%= page_title %>

',{page_link:n,page_title:i});for(var a=0;aSearching ....",a.appendChild(t);var r=function(){$.ajax({url:e,crossDomain:!0,xhrFields:{withCredentials:!0},complete:function(e,t){if("success"===t||void 0!==e.responseJSON)if(0
\x3c!--?xml version="1.0" encoding="UTF-8"?--\x3e
'},showSearchModal=function(t){removeResults(),getInputField().blur(),$(".search__outer__wrapper").fadeIn(400,function(){var e=document.querySelector(".search__outer__input");null!==e&&(void 0!==t&&_is_string(t)?e.value=t:e.value="",e.focus())})},removeSearchModal=function(){removeResults();var e=document.querySelector(".search__outer__input");null!==e&&(e.value="",e.blur()),SEARCH_QUERY="",updateUrl(),$(".search__outer__wrapper").fadeOut(400)};window.addEventListener("DOMContentLoaded",function(e){if(void 0!==READTHEDOCS_DATA){var r=READTHEDOCS_DATA.project,n=READTHEDOCS_DATA.version,i=READTHEDOCS_DATA.language||"en",a=READTHEDOCS_DATA.api_host,t=generateAndReturnInitialHtml();document.body.innerHTML+=t;var o=document.querySelector(".search__outer__wrapper"),s=document.querySelector(".search__outer__input"),c=document.querySelector(".search__cross"),l=0,u=null,_=getInputField();_.addEventListener("focus",function(e){showSearchModal()}),s.addEventListener("input",function(e){SEARCH_QUERY=e.target.value,COUNT=0;var t=a+"/api/v2/docsearch/?"+convertObjToUrlParams({q:SEARCH_QUERY,project:r,version:n,language:i});"string"==typeof SEARCH_QUERY&&0
<%= section_subheading %> <% for (var i = 0; i < section_content.length; ++i) { %>

<%= section_content[i] %>

<% } %>

',{section_link:s,section_id:c,section_subheading:n,section_content:i})},getHighlightListData=function(e,t){return!!_is_array(e[t])&&e[t]},get_domain_html=function(e,t){var n="".concat(t,"#").concat(e._source.anchor),r=e._source.role_name,i=e._source.type_display,a=e._source.doc_display,o=e._source.display_name,s=e._source.name;if(void 0!==e.highlight&&null!==e.highlight){var c=e.highlight,l=getHighlightListData(c,"domains.name"),_=getHighlightListData(c,"domains.display_name"),u=getHighlightListData(c,"domains.type_display");l&&(s=l[0]),_&&(o=_[0]),u&&(i=u[0])}var d="";_is_string(i)&&(d+=i+" -- "),_is_string(s)&&(d+=s+" "),_is_string(a)&&(d+="-- in "+a);var h="";h=_is_string(o)?"("+r+") "+o:r;var v="hit__"+COUNT;return $u.template('
<%= domain_subheading %>

<%= domain_content %>


',{domain_link:n,domain_id:v,domain_content:d,domain_subheading:h})},generateSingleResult=function(e,t){var n=createDomNode("div"),r="".concat(e.link).concat(DOCUMENTATION_OPTIONS.FILE_SUFFIX)+"?highlight="+encodeURIComponent(SEARCH_QUERY),i=e.title;void 0!==e.highlight&&null!==e.highlight&&void 0!==e.highlight.title&&null!==e.highlight.title&&(i=e.highlight.title),t!==e.project&&(i+=" "+$u.template(' (from project <%= project %>) ',{project:e.project})),i+="
",n.innerHTML+=$u.template('

<%= page_title %>

',{page_link:r,page_title:i});for(var a=0;aSearching ....",a.appendChild(t);var n=function(){$.ajax({url:e,crossDomain:!0,xhrFields:{withCredentials:!0},complete:function(e,t){if("success"===t||void 0!==e.responseJSON)if(0
\x3c!--?xml version="1.0" encoding="UTF-8"?--\x3e
'},showSearchModal=function(t){removeResults(),SEARCH_MODAL_STATE=SEARCH_MODAL_OPENED,getInputField().blur(),$(".search__outer__wrapper").fadeIn(400,function(){var e=document.querySelector(".search__outer__input");null!==e&&(void 0!==t&&_is_string(t)?e.value=t:e.value="",e.focus())})},removeSearchModal=function(){removeResults(),SEARCH_MODAL_STATE=SEARCH_MODAL_CLOSED;var e=document.querySelector(".search__outer__input");null!==e&&(e.value="",e.blur()),SEARCH_QUERY="",updateUrl(),$(".search__outer__wrapper").fadeOut(400)};window.addEventListener("DOMContentLoaded",function(e){if(void 0!==READTHEDOCS_DATA){var n=READTHEDOCS_DATA.project,r=READTHEDOCS_DATA.version,i=READTHEDOCS_DATA.language||"en",a=READTHEDOCS_DATA.api_host,t=generateAndReturnInitialHtml();document.body.innerHTML+=t;var o=document.querySelector(".search__outer__wrapper"),s=document.querySelector(".search__outer__input"),c=document.querySelector(".search__cross"),l=0,_=null,u=getInputField();u.addEventListener("focus",function(e){showSearchModal()}),s.addEventListener("input",function(e){SEARCH_QUERY=e.target.value,COUNT=0;var t=a+"/api/v2/docsearch/?"+convertObjToUrlParams({q:SEARCH_QUERY,project:n,version:r,language:i});"string"==typeof SEARCH_QUERY&&0